flujo-ai 3.34.0 → 3.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (423) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +324 -317
  3. package/.next/app-path-routes-manifest.json +19 -18
  4. package/.next/build-manifest.json +5 -5
  5. package/.next/prerender-manifest.json +24 -24
  6. package/.next/routes-manifest.json +9 -0
  7. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  8. package/.next/server/app/_not-found.html +1 -1
  9. package/.next/server/app/_not-found.rsc +1 -1
  10. package/.next/server/app/api/approvals/[id]/route.js +1 -1
  11. package/.next/server/app/api/approvals/[id]/route_client-reference-manifest.js +1 -1
  12. package/.next/server/app/api/approvals/route.js +2 -2
  13. package/.next/server/app/api/approvals/route_client-reference-manifest.js +1 -1
  14. package/.next/server/app/api/backup/route.js +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 +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_client-reference-manifest.js +1 -1
  21. package/.next/server/app/api/env/route.js +2 -2
  22. package/.next/server/app/api/env/route_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/flow/[id]/route_client-reference-manifest.js +1 -1
  24. package/.next/server/app/api/flow/[id]/versions/[versionId]/route_client-reference-manifest.js +1 -1
  25. package/.next/server/app/api/flow/[id]/versions/route_client-reference-manifest.js +1 -1
  26. package/.next/server/app/api/flow/compile/route_client-reference-manifest.js +1 -1
  27. package/.next/server/app/api/flow/generate/route_client-reference-manifest.js +1 -1
  28. package/.next/server/app/api/flow/generator/route_client-reference-manifest.js +1 -1
  29. package/.next/server/app/api/flow/improve/route_client-reference-manifest.js +1 -1
  30. package/.next/server/app/api/flow/prompt-renderer/route.js +1 -1
  31. package/.next/server/app/api/flow/prompt-renderer/route_client-reference-manifest.js +1 -1
  32. package/.next/server/app/api/flow/quick-chat/route_client-reference-manifest.js +1 -1
  33. package/.next/server/app/api/flow/repair/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/flow/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  36. package/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  37. package/.next/server/app/api/local-models/capability/route_client-reference-manifest.js +1 -1
  38. package/.next/server/app/api/local-models/pull/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/local-models/suggest/route_client-reference-manifest.js +1 -1
  40. package/.next/server/app/api/mcp/app-sandbox/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/mcp/cancel/route.js +1 -1
  42. package/.next/server/app/api/mcp/cancel/route_client-reference-manifest.js +1 -1
  43. package/.next/server/app/api/mcp/oauth-capability/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route_client-reference-manifest.js +1 -1
  45. package/.next/server/app/api/mcp/servers/[name]/prompts/route_client-reference-manifest.js +1 -1
  46. package/.next/server/app/api/mcp/servers/[name]/resources/read/route_client-reference-manifest.js +1 -1
  47. package/.next/server/app/api/mcp/servers/[name]/resources/route_client-reference-manifest.js +1 -1
  48. package/.next/server/app/api/mcp/servers/[name]/route_client-reference-manifest.js +1 -1
  49. package/.next/server/app/api/mcp/servers/[name]/status/route_client-reference-manifest.js +1 -1
  50. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route_client-reference-manifest.js +1 -1
  51. package/.next/server/app/api/mcp/servers/[name]/tools/route_client-reference-manifest.js +1 -1
  52. package/.next/server/app/api/mcp/servers/route_client-reference-manifest.js +1 -1
  53. package/.next/server/app/api/mcp/test-connection/route_client-reference-manifest.js +1 -1
  54. package/.next/server/app/api/mcp/test-connection/stream/route_client-reference-manifest.js +1 -1
  55. package/.next/server/app/api/mcp-registry/route.js +1 -1
  56. package/.next/server/app/api/mcp-registry/route_client-reference-manifest.js +1 -1
  57. package/.next/server/app/api/mcp-registry/spotlight/route.js +1 -1
  58. package/.next/server/app/api/mcp-registry/spotlight/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/model/[id]/route_client-reference-manifest.js +1 -1
  60. package/.next/server/app/api/model/provider/route.js +1 -1
  61. package/.next/server/app/api/model/provider/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/model/route_client-reference-manifest.js +1 -1
  63. package/.next/server/app/api/model/test/route.js +1 -1
  64. package/.next/server/app/api/model/test/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/oauth/callback/route.js +1 -1
  66. package/.next/server/app/api/oauth/callback/route_client-reference-manifest.js +1 -1
  67. package/.next/server/app/api/oauth/initiate/route.js +1 -1
  68. package/.next/server/app/api/oauth/initiate/route_client-reference-manifest.js +1 -1
  69. package/.next/server/app/api/oauth/reset/route.js +1 -1
  70. package/.next/server/app/api/oauth/reset/route_client-reference-manifest.js +1 -1
  71. package/.next/server/app/api/packages/build/route_client-reference-manifest.js +1 -1
  72. package/.next/server/app/api/packages/derive-secrets/route_client-reference-manifest.js +1 -1
  73. package/.next/server/app/api/packages/install/route_client-reference-manifest.js +1 -1
  74. package/.next/server/app/api/packages/install/status/route_client-reference-manifest.js +1 -1
  75. package/.next/server/app/api/packages/installed/route_client-reference-manifest.js +1 -1
  76. package/.next/server/app/api/packages/resolve/route_client-reference-manifest.js +1 -1
  77. package/.next/server/app/api/packages/scan-targets/route_client-reference-manifest.js +1 -1
  78. package/.next/server/app/api/packages/search/route.js +1 -1
  79. package/.next/server/app/api/packages/search/route_client-reference-manifest.js +1 -1
  80. package/.next/server/app/api/packages/uninstall/route_client-reference-manifest.js +1 -1
  81. package/.next/server/app/api/planned-executions/[id]/route.js +1 -1
  82. package/.next/server/app/api/planned-executions/[id]/route_client-reference-manifest.js +1 -1
  83. package/.next/server/app/api/planned-executions/[id]/run/route.js +1 -1
  84. package/.next/server/app/api/planned-executions/[id]/run/route_client-reference-manifest.js +1 -1
  85. package/.next/server/app/api/planned-executions/[id]/runs/route.js +1 -1
  86. package/.next/server/app/api/planned-executions/[id]/runs/route_client-reference-manifest.js +1 -1
  87. package/.next/server/app/api/planned-executions/preview-schedule/route_client-reference-manifest.js +1 -1
  88. package/.next/server/app/api/planned-executions/reconcile/route_client-reference-manifest.js +1 -1
  89. package/.next/server/app/api/planned-executions/route_client-reference-manifest.js +1 -1
  90. package/.next/server/app/api/registry/auth/resend/route_client-reference-manifest.js +1 -1
  91. package/.next/server/app/api/registry/auth/reset/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/registry/auth/route_client-reference-manifest.js +1 -1
  93. package/.next/server/app/api/registry/feedback/route.js +1 -1
  94. package/.next/server/app/api/registry/feedback/route_client-reference-manifest.js +1 -1
  95. package/.next/server/app/api/registry/oauth/callback/route_client-reference-manifest.js +1 -1
  96. package/.next/server/app/api/registry/oauth/initiate/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/registry/packages/route_client-reference-manifest.js +1 -1
  98. package/.next/server/app/api/registry/publish/route_client-reference-manifest.js +1 -1
  99. package/.next/server/app/api/registry/settings/route_client-reference-manifest.js +1 -1
  100. package/.next/server/app/api/restore/route.js +1 -1
  101. package/.next/server/app/api/restore/route_client-reference-manifest.js +1 -1
  102. package/.next/server/app/api/runs/active/route.js +1 -1
  103. package/.next/server/app/api/runs/active/route_client-reference-manifest.js +1 -1
  104. package/.next/server/app/api/storage/route.js +1 -1
  105. package/.next/server/app/api/storage/route_client-reference-manifest.js +1 -1
  106. package/.next/server/app/api/telemetry/daily-active/route.js +1 -1
  107. package/.next/server/app/api/telemetry/daily-active/route_client-reference-manifest.js +1 -1
  108. package/.next/server/app/api/update/route.js +1 -1
  109. package/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  110. package/.next/server/app/api/waves/route_client-reference-manifest.js +1 -1
  111. package/.next/server/app/api/webhooks/[id]/route_client-reference-manifest.js +1 -1
  112. package/.next/server/app/chat/page.js +2 -2
  113. package/.next/server/app/chat/page.js.nft.json +1 -1
  114. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  115. package/.next/server/app/chat.html +1 -1
  116. package/.next/server/app/chat.rsc +2 -2
  117. package/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  118. package/.next/server/app/docs.html +1 -1
  119. package/.next/server/app/docs.rsc +1 -1
  120. package/.next/server/app/executions/page_client-reference-manifest.js +1 -1
  121. package/.next/server/app/executions.html +1 -1
  122. package/.next/server/app/executions.rsc +1 -1
  123. package/.next/server/app/flows/page.js +2 -2
  124. package/.next/server/app/flows/page.js.nft.json +1 -1
  125. package/.next/server/app/flows/page_client-reference-manifest.js +1 -1
  126. package/.next/server/app/flows.html +1 -1
  127. package/.next/server/app/flows.rsc +2 -2
  128. package/.next/server/app/index.html +1 -1
  129. package/.next/server/app/index.rsc +1 -1
  130. package/.next/server/app/mcp/page_client-reference-manifest.js +1 -1
  131. package/.next/server/app/mcp-flows/route.js +1 -1
  132. package/.next/server/app/mcp-flows/route_client-reference-manifest.js +1 -1
  133. package/.next/server/app/mcp-proxy/[server]/route.js +1 -1
  134. package/.next/server/app/mcp-proxy/[server]/route_client-reference-manifest.js +1 -1
  135. package/.next/server/app/mcp.html +1 -1
  136. package/.next/server/app/mcp.rsc +2 -2
  137. package/.next/server/app/models/page.js +1 -1
  138. package/.next/server/app/models/page_client-reference-manifest.js +1 -1
  139. package/.next/server/app/packages/page.js +1 -1
  140. package/.next/server/app/packages/page_client-reference-manifest.js +1 -1
  141. package/.next/server/app/packages.html +1 -1
  142. package/.next/server/app/packages.rsc +2 -2
  143. package/.next/server/app/page_client-reference-manifest.js +1 -1
  144. package/.next/server/app/settings/page.js +1 -1
  145. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  146. package/.next/server/app/settings.html +1 -1
  147. package/.next/server/app/settings.rsc +2 -2
  148. package/.next/server/app/v1/chat/completions/route_client-reference-manifest.js +1 -1
  149. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js +2 -2
  150. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route_client-reference-manifest.js +1 -1
  151. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js +2 -2
  152. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route_client-reference-manifest.js +1 -1
  153. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js +1 -1
  154. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route_client-reference-manifest.js +1 -1
  155. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js +1 -1
  156. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route_client-reference-manifest.js +1 -1
  157. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js +2 -2
  158. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route_client-reference-manifest.js +1 -1
  159. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js +1 -1
  160. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route_client-reference-manifest.js +1 -1
  161. package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route.js +1 -1
  162. package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route_client-reference-manifest.js +1 -1
  163. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route.js +1 -0
  164. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route.js.nft.json +1 -0
  165. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route_client-reference-manifest.js +1 -0
  166. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route.js +1 -1
  167. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route_client-reference-manifest.js +1 -1
  168. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js +1 -1
  169. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route_client-reference-manifest.js +1 -1
  170. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js +1 -1
  171. package/.next/server/app/v1/chat/conversations/[conversationId]/route_client-reference-manifest.js +1 -1
  172. package/.next/server/app/v1/chat/conversations/route.js +1 -1
  173. package/.next/server/app/v1/chat/conversations/route_client-reference-manifest.js +1 -1
  174. package/.next/server/app/v1/chat/events/route.js +1 -1
  175. package/.next/server/app/v1/chat/events/route_client-reference-manifest.js +1 -1
  176. package/.next/server/app/v1/models/route.js +1 -1
  177. package/.next/server/app/v1/models/route_client-reference-manifest.js +1 -1
  178. package/.next/server/app/waves/page_client-reference-manifest.js +1 -1
  179. package/.next/server/app/waves.html +1 -1
  180. package/.next/server/app/waves.rsc +1 -1
  181. package/.next/server/app-paths-manifest.json +19 -18
  182. package/.next/server/chunks/1227.js +1 -1
  183. package/.next/server/chunks/1805.js +1 -1
  184. package/.next/server/chunks/2273.js +2 -2
  185. package/.next/server/chunks/2372.js +1 -1
  186. package/.next/server/chunks/2859.js +1 -1
  187. package/.next/server/chunks/3935.js +4 -0
  188. package/.next/server/chunks/4265.js +1 -1
  189. package/.next/server/chunks/4771.js +2 -2
  190. package/.next/server/chunks/4822.js +1 -1
  191. package/.next/server/chunks/5096.js +1 -1
  192. package/.next/server/chunks/5309.js +1 -1
  193. package/.next/server/chunks/544.js +16 -16
  194. package/.next/server/chunks/5544.js +1 -1
  195. package/.next/server/chunks/5703.js +2 -2
  196. package/.next/server/chunks/6041.js +1 -1
  197. package/.next/server/chunks/6226.js +1 -1
  198. package/.next/server/chunks/6747.js +42 -42
  199. package/.next/server/chunks/701.js +1 -1
  200. package/.next/server/chunks/7069.js +4 -4
  201. package/.next/server/chunks/7506.js +1 -1
  202. package/.next/server/chunks/7628.js +1 -1
  203. package/.next/server/chunks/7891.js +1 -1
  204. package/.next/server/chunks/7993.js +1 -1
  205. package/.next/server/chunks/8284.js +1 -1
  206. package/.next/server/chunks/8387.js +1 -1
  207. package/.next/server/chunks/8645.js +1 -1
  208. package/.next/server/chunks/8739.js +1 -1
  209. package/.next/server/chunks/9085.js +1 -1
  210. package/.next/server/chunks/9235.js +1 -1
  211. package/.next/server/chunks/9285.js +1 -1
  212. package/.next/server/functions-config-manifest.json +1 -1
  213. package/.next/server/middleware-build-manifest.js +1 -1
  214. package/.next/server/middleware-manifest.json +1 -1
  215. package/.next/server/pages/404.html +1 -1
  216. package/.next/server/pages/500.html +1 -1
  217. package/.next/server/server-reference-manifest.js +1 -1
  218. package/.next/server/server-reference-manifest.json +1 -1
  219. package/.next/static/chunks/{8650-5294c6ed1173b014.js → 8650-aa22dbf7b37348f0.js} +1 -1
  220. package/.next/static/chunks/9611-9867e6e8e65172ec.js +1 -0
  221. package/.next/static/chunks/app/api/approvals/[id]/{route-9ea2990be4b67136.js → route-b9c783850b4c2acf.js} +1 -1
  222. package/.next/static/chunks/app/api/approvals/{route-9ea2990be4b67136.js → route-b9c783850b4c2acf.js} +1 -1
  223. package/.next/static/chunks/app/api/backup/{route-9ea2990be4b67136.js → route-b9c783850b4c2acf.js} +1 -1
  224. package/.next/static/chunks/app/api/browse/{route-9ea2990be4b67136.js → route-b9c783850b4c2acf.js} +1 -1
  225. package/.next/static/chunks/app/api/bugs/enhance/route-b9c783850b4c2acf.js +1 -0
  226. package/.next/static/chunks/app/api/cwd/route-b9c783850b4c2acf.js +1 -0
  227. package/.next/static/chunks/app/api/encryption/secure/route-b9c783850b4c2acf.js +1 -0
  228. package/.next/static/chunks/app/api/env/route-b9c783850b4c2acf.js +1 -0
  229. package/.next/static/chunks/app/api/flow/[id]/route-b9c783850b4c2acf.js +1 -0
  230. package/.next/static/chunks/app/api/flow/[id]/versions/[versionId]/route-b9c783850b4c2acf.js +1 -0
  231. package/.next/static/chunks/app/api/flow/[id]/versions/route-b9c783850b4c2acf.js +1 -0
  232. package/.next/static/chunks/app/api/flow/compile/route-b9c783850b4c2acf.js +1 -0
  233. package/.next/static/chunks/app/api/flow/generate/route-b9c783850b4c2acf.js +1 -0
  234. package/.next/static/chunks/app/api/flow/generator/route-b9c783850b4c2acf.js +1 -0
  235. package/.next/static/chunks/app/api/flow/improve/route-b9c783850b4c2acf.js +1 -0
  236. package/.next/static/chunks/app/api/flow/prompt-renderer/route-b9c783850b4c2acf.js +1 -0
  237. package/.next/static/chunks/app/api/flow/quick-chat/route-b9c783850b4c2acf.js +1 -0
  238. package/.next/static/chunks/app/api/flow/repair/route-b9c783850b4c2acf.js +1 -0
  239. package/.next/static/chunks/app/api/flow/route-b9c783850b4c2acf.js +1 -0
  240. package/.next/static/chunks/app/api/git/route-b9c783850b4c2acf.js +1 -0
  241. package/.next/static/chunks/app/api/init/route-b9c783850b4c2acf.js +1 -0
  242. package/.next/static/chunks/app/api/local-models/capability/route-b9c783850b4c2acf.js +1 -0
  243. package/.next/static/chunks/app/api/local-models/pull/route-b9c783850b4c2acf.js +1 -0
  244. package/.next/static/chunks/app/api/local-models/suggest/route-b9c783850b4c2acf.js +1 -0
  245. package/.next/static/chunks/app/api/mcp/app-sandbox/route-b9c783850b4c2acf.js +1 -0
  246. package/.next/static/chunks/app/api/mcp/cancel/route-b9c783850b4c2acf.js +1 -0
  247. package/.next/static/chunks/app/api/mcp/oauth-capability/route-b9c783850b4c2acf.js +1 -0
  248. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-b9c783850b4c2acf.js +1 -0
  249. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-b9c783850b4c2acf.js +1 -0
  250. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-b9c783850b4c2acf.js +1 -0
  251. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-b9c783850b4c2acf.js +1 -0
  252. package/.next/static/chunks/app/api/mcp/servers/[name]/route-b9c783850b4c2acf.js +1 -0
  253. package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-b9c783850b4c2acf.js +1 -0
  254. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-b9c783850b4c2acf.js +1 -0
  255. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-b9c783850b4c2acf.js +1 -0
  256. package/.next/static/chunks/app/api/mcp/servers/route-b9c783850b4c2acf.js +1 -0
  257. package/.next/static/chunks/app/api/mcp/test-connection/route-b9c783850b4c2acf.js +1 -0
  258. package/.next/static/chunks/app/api/mcp/test-connection/stream/route-b9c783850b4c2acf.js +1 -0
  259. package/.next/static/chunks/app/api/mcp-registry/route-b9c783850b4c2acf.js +1 -0
  260. package/.next/static/chunks/app/api/mcp-registry/spotlight/route-b9c783850b4c2acf.js +1 -0
  261. package/.next/static/chunks/app/api/model/[id]/route-b9c783850b4c2acf.js +1 -0
  262. package/.next/static/chunks/app/api/model/provider/route-b9c783850b4c2acf.js +1 -0
  263. package/.next/static/chunks/app/api/model/route-b9c783850b4c2acf.js +1 -0
  264. package/.next/static/chunks/app/api/model/test/route-b9c783850b4c2acf.js +1 -0
  265. package/.next/static/chunks/app/api/oauth/callback/route-b9c783850b4c2acf.js +1 -0
  266. package/.next/static/chunks/app/api/oauth/initiate/route-b9c783850b4c2acf.js +1 -0
  267. package/.next/static/chunks/app/api/oauth/reset/route-b9c783850b4c2acf.js +1 -0
  268. package/.next/static/chunks/app/api/packages/build/route-b9c783850b4c2acf.js +1 -0
  269. package/.next/static/chunks/app/api/packages/derive-secrets/route-b9c783850b4c2acf.js +1 -0
  270. package/.next/static/chunks/app/api/packages/install/route-b9c783850b4c2acf.js +1 -0
  271. package/.next/static/chunks/app/api/packages/install/status/route-b9c783850b4c2acf.js +1 -0
  272. package/.next/static/chunks/app/api/packages/installed/route-b9c783850b4c2acf.js +1 -0
  273. package/.next/static/chunks/app/api/packages/resolve/route-b9c783850b4c2acf.js +1 -0
  274. package/.next/static/chunks/app/api/packages/scan-targets/route-b9c783850b4c2acf.js +1 -0
  275. package/.next/static/chunks/app/api/packages/search/route-b9c783850b4c2acf.js +1 -0
  276. package/.next/static/chunks/app/api/packages/uninstall/route-b9c783850b4c2acf.js +1 -0
  277. package/.next/static/chunks/app/api/planned-executions/[id]/route-b9c783850b4c2acf.js +1 -0
  278. package/.next/static/chunks/app/api/planned-executions/[id]/run/route-b9c783850b4c2acf.js +1 -0
  279. package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-b9c783850b4c2acf.js +1 -0
  280. package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-b9c783850b4c2acf.js +1 -0
  281. package/.next/static/chunks/app/api/planned-executions/reconcile/route-b9c783850b4c2acf.js +1 -0
  282. package/.next/static/chunks/app/api/planned-executions/route-b9c783850b4c2acf.js +1 -0
  283. package/.next/static/chunks/app/api/registry/auth/resend/route-b9c783850b4c2acf.js +1 -0
  284. package/.next/static/chunks/app/api/registry/auth/reset/route-b9c783850b4c2acf.js +1 -0
  285. package/.next/static/chunks/app/api/registry/auth/route-b9c783850b4c2acf.js +1 -0
  286. package/.next/static/chunks/app/api/registry/feedback/route-b9c783850b4c2acf.js +1 -0
  287. package/.next/static/chunks/app/api/registry/oauth/callback/route-b9c783850b4c2acf.js +1 -0
  288. package/.next/static/chunks/app/api/registry/oauth/initiate/route-b9c783850b4c2acf.js +1 -0
  289. package/.next/static/chunks/app/api/registry/packages/route-b9c783850b4c2acf.js +1 -0
  290. package/.next/static/chunks/app/api/registry/publish/route-b9c783850b4c2acf.js +1 -0
  291. package/.next/static/chunks/app/api/registry/settings/route-b9c783850b4c2acf.js +1 -0
  292. package/.next/static/chunks/app/api/restore/route-b9c783850b4c2acf.js +1 -0
  293. package/.next/static/chunks/app/api/runs/active/route-b9c783850b4c2acf.js +1 -0
  294. package/.next/static/chunks/app/api/storage/route-b9c783850b4c2acf.js +1 -0
  295. package/.next/static/chunks/app/api/telemetry/daily-active/route-b9c783850b4c2acf.js +1 -0
  296. package/.next/static/chunks/app/api/update/route-b9c783850b4c2acf.js +1 -0
  297. package/.next/static/chunks/app/api/waves/route-b9c783850b4c2acf.js +1 -0
  298. package/.next/static/chunks/app/api/webhooks/[id]/route-b9c783850b4c2acf.js +1 -0
  299. package/.next/static/chunks/app/chat/{page-bc7807593b8b7394.js → page-e37bbc561f40ce60.js} +1 -1
  300. package/.next/static/chunks/app/flows/{page-87fb466e491fc068.js → page-e52c8943555e38dd.js} +1 -1
  301. package/.next/static/chunks/app/mcp-flows/route-b9c783850b4c2acf.js +1 -0
  302. package/.next/static/chunks/app/mcp-proxy/[server]/route-b9c783850b4c2acf.js +1 -0
  303. package/.next/static/chunks/app/models/page-595597042e227970.js +1 -0
  304. package/.next/static/chunks/app/packages/page-f1a22789a6c0e0b6.js +1 -0
  305. package/.next/static/chunks/app/settings/{page-2fc3a70bfd25c48b.js → page-f35e939032b0277d.js} +1 -1
  306. package/.next/static/chunks/app/v1/chat/completions/route-b9c783850b4c2acf.js +1 -0
  307. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-b9c783850b4c2acf.js +1 -0
  308. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-b9c783850b4c2acf.js +1 -0
  309. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-b9c783850b4c2acf.js +1 -0
  310. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-b9c783850b4c2acf.js +1 -0
  311. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-b9c783850b4c2acf.js +1 -0
  312. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-b9c783850b4c2acf.js +1 -0
  313. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/inject/route-b9c783850b4c2acf.js +1 -0
  314. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route-b9c783850b4c2acf.js +1 -0
  315. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/resources/route-b9c783850b4c2acf.js +1 -0
  316. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-b9c783850b4c2acf.js +1 -0
  317. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-b9c783850b4c2acf.js +1 -0
  318. package/.next/static/chunks/app/v1/chat/conversations/route-b9c783850b4c2acf.js +1 -0
  319. package/.next/static/chunks/app/v1/chat/events/route-b9c783850b4c2acf.js +1 -0
  320. package/.next/static/chunks/app/v1/models/route-b9c783850b4c2acf.js +1 -0
  321. package/.next/static/chunks/{webpack-d5d737ff6a86674f.js → webpack-9d09d53b271f49e2.js} +1 -1
  322. package/.next/trace +10 -10
  323. package/.next/types/app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route.ts +347 -0
  324. package/.next/types/routes.d.ts +2 -1
  325. package/.next/types/validator.ts +9 -0
  326. package/README.md +60 -61
  327. package/package.json +1 -1
  328. package/.next/server/chunks/4308.js +0 -4
  329. package/.next/static/chunks/6733-c9029143901e62e9.js +0 -1
  330. package/.next/static/chunks/app/api/bugs/enhance/route-9ea2990be4b67136.js +0 -1
  331. package/.next/static/chunks/app/api/cwd/route-9ea2990be4b67136.js +0 -1
  332. package/.next/static/chunks/app/api/encryption/secure/route-9ea2990be4b67136.js +0 -1
  333. package/.next/static/chunks/app/api/env/route-9ea2990be4b67136.js +0 -1
  334. package/.next/static/chunks/app/api/flow/[id]/route-9ea2990be4b67136.js +0 -1
  335. package/.next/static/chunks/app/api/flow/[id]/versions/[versionId]/route-9ea2990be4b67136.js +0 -1
  336. package/.next/static/chunks/app/api/flow/[id]/versions/route-9ea2990be4b67136.js +0 -1
  337. package/.next/static/chunks/app/api/flow/compile/route-9ea2990be4b67136.js +0 -1
  338. package/.next/static/chunks/app/api/flow/generate/route-9ea2990be4b67136.js +0 -1
  339. package/.next/static/chunks/app/api/flow/generator/route-9ea2990be4b67136.js +0 -1
  340. package/.next/static/chunks/app/api/flow/improve/route-9ea2990be4b67136.js +0 -1
  341. package/.next/static/chunks/app/api/flow/prompt-renderer/route-9ea2990be4b67136.js +0 -1
  342. package/.next/static/chunks/app/api/flow/quick-chat/route-9ea2990be4b67136.js +0 -1
  343. package/.next/static/chunks/app/api/flow/repair/route-9ea2990be4b67136.js +0 -1
  344. package/.next/static/chunks/app/api/flow/route-9ea2990be4b67136.js +0 -1
  345. package/.next/static/chunks/app/api/git/route-9ea2990be4b67136.js +0 -1
  346. package/.next/static/chunks/app/api/init/route-9ea2990be4b67136.js +0 -1
  347. package/.next/static/chunks/app/api/local-models/capability/route-9ea2990be4b67136.js +0 -1
  348. package/.next/static/chunks/app/api/local-models/pull/route-9ea2990be4b67136.js +0 -1
  349. package/.next/static/chunks/app/api/local-models/suggest/route-9ea2990be4b67136.js +0 -1
  350. package/.next/static/chunks/app/api/mcp/app-sandbox/route-9ea2990be4b67136.js +0 -1
  351. package/.next/static/chunks/app/api/mcp/cancel/route-9ea2990be4b67136.js +0 -1
  352. package/.next/static/chunks/app/api/mcp/oauth-capability/route-9ea2990be4b67136.js +0 -1
  353. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-9ea2990be4b67136.js +0 -1
  354. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-9ea2990be4b67136.js +0 -1
  355. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-9ea2990be4b67136.js +0 -1
  356. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-9ea2990be4b67136.js +0 -1
  357. package/.next/static/chunks/app/api/mcp/servers/[name]/route-9ea2990be4b67136.js +0 -1
  358. package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-9ea2990be4b67136.js +0 -1
  359. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-9ea2990be4b67136.js +0 -1
  360. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-9ea2990be4b67136.js +0 -1
  361. package/.next/static/chunks/app/api/mcp/servers/route-9ea2990be4b67136.js +0 -1
  362. package/.next/static/chunks/app/api/mcp/test-connection/route-9ea2990be4b67136.js +0 -1
  363. package/.next/static/chunks/app/api/mcp/test-connection/stream/route-9ea2990be4b67136.js +0 -1
  364. package/.next/static/chunks/app/api/mcp-registry/route-9ea2990be4b67136.js +0 -1
  365. package/.next/static/chunks/app/api/mcp-registry/spotlight/route-9ea2990be4b67136.js +0 -1
  366. package/.next/static/chunks/app/api/model/[id]/route-9ea2990be4b67136.js +0 -1
  367. package/.next/static/chunks/app/api/model/provider/route-9ea2990be4b67136.js +0 -1
  368. package/.next/static/chunks/app/api/model/route-9ea2990be4b67136.js +0 -1
  369. package/.next/static/chunks/app/api/model/test/route-9ea2990be4b67136.js +0 -1
  370. package/.next/static/chunks/app/api/oauth/callback/route-9ea2990be4b67136.js +0 -1
  371. package/.next/static/chunks/app/api/oauth/initiate/route-9ea2990be4b67136.js +0 -1
  372. package/.next/static/chunks/app/api/oauth/reset/route-9ea2990be4b67136.js +0 -1
  373. package/.next/static/chunks/app/api/packages/build/route-9ea2990be4b67136.js +0 -1
  374. package/.next/static/chunks/app/api/packages/derive-secrets/route-9ea2990be4b67136.js +0 -1
  375. package/.next/static/chunks/app/api/packages/install/route-9ea2990be4b67136.js +0 -1
  376. package/.next/static/chunks/app/api/packages/install/status/route-9ea2990be4b67136.js +0 -1
  377. package/.next/static/chunks/app/api/packages/installed/route-9ea2990be4b67136.js +0 -1
  378. package/.next/static/chunks/app/api/packages/resolve/route-9ea2990be4b67136.js +0 -1
  379. package/.next/static/chunks/app/api/packages/scan-targets/route-9ea2990be4b67136.js +0 -1
  380. package/.next/static/chunks/app/api/packages/search/route-9ea2990be4b67136.js +0 -1
  381. package/.next/static/chunks/app/api/packages/uninstall/route-9ea2990be4b67136.js +0 -1
  382. package/.next/static/chunks/app/api/planned-executions/[id]/route-9ea2990be4b67136.js +0 -1
  383. package/.next/static/chunks/app/api/planned-executions/[id]/run/route-9ea2990be4b67136.js +0 -1
  384. package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-9ea2990be4b67136.js +0 -1
  385. package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-9ea2990be4b67136.js +0 -1
  386. package/.next/static/chunks/app/api/planned-executions/reconcile/route-9ea2990be4b67136.js +0 -1
  387. package/.next/static/chunks/app/api/planned-executions/route-9ea2990be4b67136.js +0 -1
  388. package/.next/static/chunks/app/api/registry/auth/resend/route-9ea2990be4b67136.js +0 -1
  389. package/.next/static/chunks/app/api/registry/auth/reset/route-9ea2990be4b67136.js +0 -1
  390. package/.next/static/chunks/app/api/registry/auth/route-9ea2990be4b67136.js +0 -1
  391. package/.next/static/chunks/app/api/registry/feedback/route-9ea2990be4b67136.js +0 -1
  392. package/.next/static/chunks/app/api/registry/oauth/callback/route-9ea2990be4b67136.js +0 -1
  393. package/.next/static/chunks/app/api/registry/oauth/initiate/route-9ea2990be4b67136.js +0 -1
  394. package/.next/static/chunks/app/api/registry/packages/route-9ea2990be4b67136.js +0 -1
  395. package/.next/static/chunks/app/api/registry/publish/route-9ea2990be4b67136.js +0 -1
  396. package/.next/static/chunks/app/api/registry/settings/route-9ea2990be4b67136.js +0 -1
  397. package/.next/static/chunks/app/api/restore/route-9ea2990be4b67136.js +0 -1
  398. package/.next/static/chunks/app/api/runs/active/route-9ea2990be4b67136.js +0 -1
  399. package/.next/static/chunks/app/api/storage/route-9ea2990be4b67136.js +0 -1
  400. package/.next/static/chunks/app/api/telemetry/daily-active/route-9ea2990be4b67136.js +0 -1
  401. package/.next/static/chunks/app/api/update/route-9ea2990be4b67136.js +0 -1
  402. package/.next/static/chunks/app/api/waves/route-9ea2990be4b67136.js +0 -1
  403. package/.next/static/chunks/app/api/webhooks/[id]/route-9ea2990be4b67136.js +0 -1
  404. package/.next/static/chunks/app/mcp-flows/route-9ea2990be4b67136.js +0 -1
  405. package/.next/static/chunks/app/mcp-proxy/[server]/route-9ea2990be4b67136.js +0 -1
  406. package/.next/static/chunks/app/models/page-a5e2437356b06db8.js +0 -1
  407. package/.next/static/chunks/app/packages/page-fba5696f33d9cdfb.js +0 -1
  408. package/.next/static/chunks/app/v1/chat/completions/route-9ea2990be4b67136.js +0 -1
  409. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-9ea2990be4b67136.js +0 -1
  410. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-9ea2990be4b67136.js +0 -1
  411. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-9ea2990be4b67136.js +0 -1
  412. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-9ea2990be4b67136.js +0 -1
  413. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-9ea2990be4b67136.js +0 -1
  414. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-9ea2990be4b67136.js +0 -1
  415. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/inject/route-9ea2990be4b67136.js +0 -1
  416. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/resources/route-9ea2990be4b67136.js +0 -1
  417. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-9ea2990be4b67136.js +0 -1
  418. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-9ea2990be4b67136.js +0 -1
  419. package/.next/static/chunks/app/v1/chat/conversations/route-9ea2990be4b67136.js +0 -1
  420. package/.next/static/chunks/app/v1/chat/events/route-9ea2990be4b67136.js +0 -1
  421. package/.next/static/chunks/app/v1/models/route-9ea2990be4b67136.js +0 -1
  422. /package/.next/static/{Zz_Vh59XdtLIPcf-PxCpo → hbjnLG9RCje2AApS9TzP8}/_buildManifest.js +0 -0
  423. /package/.next/static/{Zz_Vh59XdtLIPcf-PxCpo → hbjnLG9RCje2AApS9TzP8}/_ssgManifest.js +0 -0
@@ -5,6 +5,6 @@ ${b.condition}
5
5
  Tool result (untrusted data):
6
6
  \`\`\`json
7
7
  ${m}
8
- \`\`\``;try{let c="llm-gate"===b.mode?await j(b.modelId,n):await k(b.flowId,n),g=function(a){let b=a.match(/\{[\s\S]*\}/);if(!b)return null;try{let a=JSON.parse(b[0]);if("boolean"!=typeof a?.fire)return null;return{fire:a.fire,reason:"string"==typeof a.reason?a.reason:""}}catch{return null}}(c);if(!g)return f.warn(`Gate returned unparseable output: ${c.slice(0,200)}`),{fire:!1,newState:{lastHash:d,...l},error:"The AI check returned an unreadable answer — did not run the flow"};if(!g.fire)return{fire:!1,newState:{lastHash:d,...l}};return{fire:!0,summary:"flow-gate"===b.mode?"Flow condition met":"AI condition met",context:{result:(0,e.Je)(a),aiReason:g.reason},newState:{lastHash:d,...l}}}catch(b){let a=b instanceof Error?b.message:String(b);return f.warn(`Gate check failed: ${a}`),{fire:!1,newState:a.startsWith("config:")?{lastHash:d}:l,error:a.replace(/^config:\s*/,"")}}}async function j(a,b){let{modelService:d}=await Promise.resolve().then(c.bind(c,12763)),{getCompletionAdapter:e}=await Promise.resolve().then(c.bind(c,33456)),{normalizeMaxTokens:f}=await Promise.resolve().then(c.bind(c,5091)),g=await d.getModel(a);if(!g)throw Error(`config: The AI-check model no longer exists (${a})`);let i=await d.resolveAndDecryptApiKey(g.ApiKey);if(!i)throw Error("config: Could not resolve the AI-check model API key");let j=e(g),{completion:k}=await j.createCompletion({model:g,apiKey:i,temperature:0,maxTokens:f(g.maxTokens),messages:[{role:"system",content:h},{role:"user",content:b}]}),l=k.choices?.[0]?.message?.content;return"string"==typeof l?l:""}async function k(a,b){let{runFlow:d}=await c.e(4551).then(c.bind(c,64551)),e=await d({flowId:a,prompt:`${b}
8
+ \`\`\``;try{let c="llm-gate"===b.mode?await j(b.modelId,n):await k(b.flowId,n),g=function(a){let b=a.match(/\{[\s\S]*\}/);if(!b)return null;try{let a=JSON.parse(b[0]);if("boolean"!=typeof a?.fire)return null;return{fire:a.fire,reason:"string"==typeof a.reason?a.reason:""}}catch{return null}}(c);if(!g)return f.warn(`Gate returned unparseable output: ${c.slice(0,200)}`),{fire:!1,newState:{lastHash:d,...l},error:"The AI check returned an unreadable answer — did not run the flow"};if(!g.fire)return{fire:!1,newState:{lastHash:d,...l}};return{fire:!0,summary:"flow-gate"===b.mode?"Flow condition met":"AI condition met",context:{result:(0,e.Je)(a),aiReason:g.reason},newState:{lastHash:d,...l}}}catch(b){let a=b instanceof Error?b.message:String(b);return f.warn(`Gate check failed: ${a}`),{fire:!1,newState:a.startsWith("config:")?{lastHash:d}:l,error:a.replace(/^config:\s*/,"")}}}async function j(a,b){let{modelService:d}=await Promise.resolve().then(c.bind(c,12763)),{getCompletionAdapter:e}=await Promise.resolve().then(c.bind(c,39848)),{normalizeMaxTokens:f}=await Promise.resolve().then(c.bind(c,5091)),g=await d.getModel(a);if(!g)throw Error(`config: The AI-check model no longer exists (${a})`);let i=await d.resolveAndDecryptApiKey(g.ApiKey);if(!i)throw Error("config: Could not resolve the AI-check model API key");let j=e(g),{completion:k}=await j.createCompletion({model:g,apiKey:i,temperature:0,maxTokens:f(g.maxTokens),messages:[{role:"system",content:h},{role:"user",content:b}]}),l=k.choices?.[0]?.message?.content;return"string"==typeof l?l:""}async function k(a,b){let{runFlow:d}=await c.e(4551).then(c.bind(c,64551)),e=await d({flowId:a,prompt:`${b}
9
9
 
10
10
  ${g}`,mode:"ephemeral",requireApproval:!1,debug:!1,userTurn:!0});if("completed"!==e.status)throw Error(e.error?.message??`The checker flow ended with status "${e.status}"`);return e.outputText??""}}};
@@ -1,6 +1,6 @@
1
- exports.id=7069,exports.ids=[1925,3629,4306,6793,7069,9174],exports.modules={1925:(a,b,c)=>{"use strict";c.d(b,{Hm:()=>f,xc:()=>e});let d=["key","secret","token","password"],e=a=>d.some(b=>a.toLowerCase().includes(b)),f=a=>e(a)||"authorization"===a.trim().toLowerCase()},3676:(a,b,c)=>{"use strict";c.d(b,{Wj:()=>h,ln:()=>g});var d=c(10641),e=c(58739);let f="encryption_locked";async function g(){return(0,e.isEncryptionLocked)()}async function h(a){return await g()?a?.openai?d.NextResponse.json({error:{message:"Encryption is locked. Unlock FLUJO to continue.",type:f,code:f,param:null}},{status:423}):d.NextResponse.json({error:f},{status:423}):null}},48312:(a,b,c)=>{"use strict";c.d(b,{cA:()=>p});var d=c(10641),e=c(50846),f=c(95708),g=c(38291),h=c(99978),i=c(16226),j=c(14214),k=c(20433);let l=(0,e.h)("app/v1/chat/completions/chatCompletionService");function m(a){return Math.ceil((a||"").length/4)}let n=g.persistConversationState;async function o(a,b,c,e,f,g=!1,j=!1){let k=Date.now();l.info("Processing chat completion request",{model:a.model,messageCount:a.messages?.length||0,stream:a.stream,flujo:b,requireApproval:c,flujodebug:e,conversationId:f});let n=await (0,i.runFlow)({modelName:a.model,messages:a.messages,mcpAppContexts:a.mcpAppContexts,processNodeId:a.processNodeId,mode:"conversation",conversationId:f,flujo:b,requireApproval:c,debug:e,continueDebug:g,userTurn:j,source:"api"});if(n.flowNotFound)return d.NextResponse.json({error:{message:`Flow not found: ${n.flowNotFound.name}`,type:"invalid_request_error",code:"flow_not_found"}},{status:400});if("paused_debug"===n.status)return l.info(`Returning paused debug state for conv ${n.conversationId}`),d.NextResponse.json({status:"paused_debug",conversation_id:n.conversationId,debugState:n.sharedState});if("error"===n.status){let a=n.error?.message??"Unknown error during execution",b=n.error?.details??{message:a},c=n.error?.statusCode??500;return l.error(`Returning error response for conv ${n.conversationId}`,{errorMessage:a,errorDetails:b,statusCode:c}),d.NextResponse.json({error:{message:a,type:b.type||"api_error",code:b.code||"internal_error",param:b.param,details:b}},{status:c})}let p={role:"assistant",content:n.outputText,tool_calls:n.toolCalls},q="stop";"awaiting_tool_approval"===n.sharedState.status?q="stop":n.finalAction===h.Jp&&p.tool_calls&&p.tool_calls.length>0?q="tool_calls":n.finalAction===h.E5&&(q="length");let r=m(n.messages.map(a=>a.content||"").join("\n")),s=m(n.outputText),t={id:`chatcmpl-${Date.now()}`,object:"chat.completion",created:Math.floor(k/1e3),model:a.model,choices:[{index:0,message:p,finish_reason:q}],usage:{prompt_tokens:r,completion_tokens:s,total_tokens:r+s},messages:n.messages,conversation_id:n.conversationId,status:n.sharedState.status||(n.finalAction===h.g4?"completed":"running"),pendingToolCalls:n.sharedState.pendingToolCalls};return l.info(`Returning success response for conv ${n.conversationId}`,{action:n.finalAction,status:t.status,flujo:b,requireApproval:c,flujodebug:e,finish_reason:q}),l.verbose(`Final response data for conv ${n.conversationId}`,t),d.NextResponse.json(t)}async function p(a,b,c,d,e,g=!1,h=!1){if("string"==typeof a.model&&a.model.startsWith("model-"))return(b||c||d||e)&&l.debug("Ignoring flow-only flags on a direct model completion",{flujo:b,requireApproval:c,flujodebug:d,conversationId:e}),q(a);if(!0!==a.stream)return o(a,b,c,d,e,g,h);{let i=e||crypto.randomUUID();return l.info(`Streaming requested for conversation ${i}. Starting async processing.`),o(a,b,c,d,i,g,h).catch(a=>{l.error(`Error in background processing for conversation ${i}:`,a);let b=f.FlowExecutor.conversationStates.get(i);b&&(b.status="error",b.lastResponse={success:!1,error:a instanceof Error?a.message:String(a)},f.FlowExecutor.conversationStates.set(i,b),n(`conversations/${i}`,b).catch(a=>{l.error(`Failed to save error state for conversation ${i}:`,a)})),j.$.emitterFor(i)({type:"run:done",status:"error"})}),function(a,b){let c=new TextEncoder,d=`chatcmpl-${Date.now()}`,e=Math.floor(Date.now()/1e3);return l.debug("create streaming response (event-bus driven)",{conversationId:b}),new Response(new ReadableStream({start(g){let h=!1,i=null,k=-1,l=new Set,m=new Map,n=a=>{g.enqueue(c.encode(`data: ${JSON.stringify(a)}
1
+ exports.id=7069,exports.ids=[1925,3629,4306,6793,7069,9174],exports.modules={1925:(a,b,c)=>{"use strict";c.d(b,{Hm:()=>f,xc:()=>e});let d=["key","secret","token","password"],e=a=>d.some(b=>a.toLowerCase().includes(b)),f=a=>e(a)||"authorization"===a.trim().toLowerCase()},3676:(a,b,c)=>{"use strict";c.d(b,{Wj:()=>h,ln:()=>g});var d=c(10641),e=c(58739);let f="encryption_locked";async function g(){return(0,e.isEncryptionLocked)()}async function h(a){return await g()?a?.openai?d.NextResponse.json({error:{message:"Encryption is locked. Unlock FLUJO to continue.",type:f,code:f,param:null}},{status:423}):d.NextResponse.json({error:f},{status:423}):null}},48312:(a,b,c)=>{"use strict";c.d(b,{cA:()=>p});var d=c(10641),e=c(50846),f=c(95708),g=c(38291),h=c(99978),i=c(16226),j=c(14214),k=c(20433);let l=(0,e.h)("app/v1/chat/completions/chatCompletionService");function m(a){return Math.ceil((a||"").length/4)}let n=g.persistConversationState;async function o(a,b,c,e,f,g=!1,j=!1){let k=Date.now();l.info("Processing chat completion request",{model:a.model,messageCount:a.messages?.length||0,stream:a.stream,flujo:b,requireApproval:c,flujodebug:e,conversationId:f});let n=await (0,i.runFlow)({modelName:a.model,messages:a.messages,mcpAppContexts:a.mcpAppContexts,processNodeId:a.processNodeId,mode:"conversation",conversationId:f,flujo:b,requireApproval:c,debug:e,continueDebug:g,userTurn:j,source:"api"});if(n.flowNotFound)return d.NextResponse.json({error:{message:`Flow not found: ${n.flowNotFound.name}`,type:"invalid_request_error",code:"flow_not_found"}},{status:400});if("paused_debug"===n.status)return l.info(`Returning paused debug state for conv ${n.conversationId}`),d.NextResponse.json({status:"paused_debug",conversation_id:n.conversationId,debugState:n.sharedState});if("error"===n.status){let a=n.error?.message??"Unknown error during execution",b=n.error?.details??{message:a},c=n.error?.statusCode??500;return l.error(`Returning error response for conv ${n.conversationId}`,{errorMessage:a,errorDetails:b,statusCode:c}),d.NextResponse.json({error:{message:a,type:b.type||"api_error",code:b.code||"internal_error",param:b.param,details:b}},{status:c})}let p={role:"assistant",content:n.outputText,tool_calls:n.toolCalls},q=[...n.messages].reverse().find(a=>"assistant"===a.role&&a.media?.length)?.media;q?.length&&(p.media=q);let r="stop";"awaiting_tool_approval"===n.sharedState.status?r="stop":n.finalAction===h.Jp&&p.tool_calls&&p.tool_calls.length>0?r="tool_calls":n.finalAction===h.E5&&(r="length");let s=m(n.messages.map(a=>a.content||"").join("\n")),t=m(n.outputText),u={id:`chatcmpl-${Date.now()}`,object:"chat.completion",created:Math.floor(k/1e3),model:a.model,choices:[{index:0,message:p,finish_reason:r}],usage:{prompt_tokens:s,completion_tokens:t,total_tokens:s+t},messages:n.messages,conversation_id:n.conversationId,status:n.sharedState.status||(n.finalAction===h.g4?"completed":"running"),pendingToolCalls:n.sharedState.pendingToolCalls};return l.info(`Returning success response for conv ${n.conversationId}`,{action:n.finalAction,status:u.status,flujo:b,requireApproval:c,flujodebug:e,finish_reason:r}),l.verbose(`Final response data for conv ${n.conversationId}`,u),d.NextResponse.json(u)}async function p(a,b,c,d,e,g=!1,h=!1){if("string"==typeof a.model&&a.model.startsWith("model-"))return(b||c||d||e)&&l.debug("Ignoring flow-only flags on a direct model completion",{flujo:b,requireApproval:c,flujodebug:d,conversationId:e}),q(a);if(!0!==a.stream)return o(a,b,c,d,e,g,h);{let i=e||crypto.randomUUID();return l.info(`Streaming requested for conversation ${i}. Starting async processing.`),o(a,b,c,d,i,g,h).catch(a=>{l.error(`Error in background processing for conversation ${i}:`,a);let b=f.FlowExecutor.conversationStates.get(i);b&&(b.status="error",b.lastResponse={success:!1,error:a instanceof Error?a.message:String(a)},f.FlowExecutor.conversationStates.set(i,b),n(`conversations/${i}`,b).catch(a=>{l.error(`Failed to save error state for conversation ${i}:`,a)})),j.$.emitterFor(i)({type:"run:done",status:"error"})}),function(a,b){let c=new TextEncoder,d=`chatcmpl-${Date.now()}`,e=Math.floor(Date.now()/1e3);return l.debug("create streaming response (event-bus driven)",{conversationId:b}),new Response(new ReadableStream({start(g){let h=!1,i=null,k=-1,l=new Set,m=new Map,n=a=>{g.enqueue(c.encode(`data: ${JSON.stringify(a)}
2
2
 
3
- `))},o=(b,c)=>({id:d,object:"chat.completion.chunk",created:e,model:a,choices:[{index:0,delta:b,finish_reason:c}]}),p=a=>{if(h)return;h=!0;let d="error"===a?"error":"stop";n(o({content:"",conversation:f.FlowExecutor.conversationStates.get(b)},d)),n(o({},d)),g.enqueue(c.encode("data: [DONE]\n\n")),i&&i();try{g.close()}catch{}},q=a=>{if(!h&&!(a.seq<=k))if(k=a.seq,"model:delta"===a.type){let b={};if(a.delta&&(l.add(a.messageId),b.content=a.delta),a.toolCallDelta){let c=a.toolCallDelta,d=m.get(a.messageId)??new Map,e=d.get(c.index)??{id:!1,name:!1,arguments:!1};e.id||=!!c.id,e.name||=!!c.nameDelta,e.arguments||=!!c.argumentsDelta,d.set(c.index,e),m.set(a.messageId,d),b.tool_calls=[{index:c.index,...c.id?{id:c.id,type:"function"}:{},function:{...c.nameDelta?{name:c.nameDelta}:{},...c.argumentsDelta?{arguments:c.argumentsDelta}:{}}}]}Object.keys(b).length>0&&n(o(b,null))}else if("message"===a.type){let b=a.message;if(b&&"assistant"===b.role){!l.has(b.id)&&"string"==typeof b.content&&b.content.length>0&&n(o({content:b.content},null));let a=m.get(b.id),c=(b.tool_calls??[]).flatMap((b,c)=>{let d=a?.get(c),e={...!d?.name?{name:b.function.name}:{},...!d?.arguments?{arguments:b.function.arguments}:{}};return d?.id&&d.name&&d.arguments?[]:[{index:c,...!d?.id?{id:b.id,type:"function"}:{},function:e}]});c.length>0&&n(o({tool_calls:c},null))}}else"run:done"===a.type?p("error"===a.status?"error":"completed"):("run:awaiting_approval"===a.type||"run:paused"===a.type)&&p("stop")};for(let a of(n(o({role:"assistant",content:""},null)),i=j.$.subscribe(b,q),j.$.getBufferedSince(b,0)))q(a);if(!h){let a=f.FlowExecutor.conversationStates.get(b);a&&("completed"===a.status||"error"===a.status)&&p("error"===a.status?"error":"completed")}}}),{headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}})}(a.model,i)}}async function q(a){let b=a.model.slice(6);l.info("Processing direct model completion",{model:a.model,messageCount:a.messages?.length||0,stream:a.stream,hasTools:!!(a.tools&&a.tools.length>0)});let c=await k.modelService.generateChatCompletion({modelIdentifier:b,messages:a.messages,temperature:a.temperature,maxTokens:a.max_tokens,tools:a.tools});return c.success?!0===a.stream?function(a,b){let c=new TextEncoder,d=b.id||`chatcmpl-${Date.now()}`,e=b.created||Math.floor(Date.now()/1e3),f=b.choices?.[0],g=f?.finish_reason??"stop";return new Response(new ReadableStream({start(b){let h=a=>{b.enqueue(c.encode(`data: ${JSON.stringify(a)}
3
+ `))},o=(b,c)=>({id:d,object:"chat.completion.chunk",created:e,model:a,choices:[{index:0,delta:b,finish_reason:c}]}),p=a=>{if(h)return;h=!0;let d="error"===a?"error":"stop";n(o({content:"",conversation:f.FlowExecutor.conversationStates.get(b)},d)),n(o({},d)),g.enqueue(c.encode("data: [DONE]\n\n")),i&&i();try{g.close()}catch{}},q=a=>{if(!h&&!(a.seq<=k))if(k=a.seq,"model:delta"===a.type){let b={};if(a.delta&&(l.add(a.messageId),b.content=a.delta),a.mediaPart&&(b.media=[a.mediaPart]),a.toolCallDelta){let c=a.toolCallDelta,d=m.get(a.messageId)??new Map,e=d.get(c.index)??{id:!1,name:!1,arguments:!1};e.id||=!!c.id,e.name||=!!c.nameDelta,e.arguments||=!!c.argumentsDelta,d.set(c.index,e),m.set(a.messageId,d),b.tool_calls=[{index:c.index,...c.id?{id:c.id,type:"function"}:{},function:{...c.nameDelta?{name:c.nameDelta}:{},...c.argumentsDelta?{arguments:c.argumentsDelta}:{}}}]}Object.keys(b).length>0&&n(o(b,null))}else if("message"===a.type){let b=a.message;if(b&&"assistant"===b.role){!l.has(b.id)&&"string"==typeof b.content&&b.content.length>0&&n(o({content:b.content},null)),b.media&&b.media.length>0&&n(o({media:b.media},null));let a=m.get(b.id),c=(b.tool_calls??[]).flatMap((b,c)=>{let d=a?.get(c),e={...!d?.name?{name:b.function.name}:{},...!d?.arguments?{arguments:b.function.arguments}:{}};return d?.id&&d.name&&d.arguments?[]:[{index:c,...!d?.id?{id:b.id,type:"function"}:{},function:e}]});c.length>0&&n(o({tool_calls:c},null))}}else"run:done"===a.type?p("error"===a.status?"error":"completed"):("run:awaiting_approval"===a.type||"run:paused"===a.type)&&p("stop")};for(let a of(n(o({role:"assistant",content:""},null)),i=j.$.subscribe(b,q),j.$.getBufferedSince(b,0)))q(a);if(!h){let a=f.FlowExecutor.conversationStates.get(b);a&&("completed"===a.status||"error"===a.status)&&p("error"===a.status?"error":"completed")}}}),{headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}})}(a.model,i)}}async function q(a){let b=a.model.slice(6);l.info("Processing direct model completion",{model:a.model,messageCount:a.messages?.length||0,stream:a.stream,hasTools:!!(a.tools&&a.tools.length>0)});let c=await k.modelService.generateChatCompletion({modelIdentifier:b,messages:a.messages,temperature:a.temperature,maxTokens:a.max_tokens,tools:a.tools});return c.success?!0===a.stream?function(a,b,c){let d=new TextEncoder,e=b.id||`chatcmpl-${Date.now()}`,f=b.created||Math.floor(Date.now()/1e3),g=b.choices?.[0],h=g?.finish_reason??"stop";return new Response(new ReadableStream({start(b){let i=a=>{b.enqueue(d.encode(`data: ${JSON.stringify(a)}
4
4
 
5
- `))},i=(b,c)=>({id:d,object:"chat.completion.chunk",created:e,model:a,choices:[{index:0,delta:b,finish_reason:c}]});h(i({role:"assistant",content:""},null));let j="string"==typeof f?.message?.content?f.message.content:"";j.length>0&&h(i({content:j},null));let k=f?.message?.tool_calls;k&&k.length>0&&h(i({tool_calls:k.map((a,b)=>({index:b,...a}))},null)),h(i({},g)),b.enqueue(c.encode("data: [DONE]\n\n")),b.close()}}),{headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}})}(a.model,c.completion):d.NextResponse.json(c.completion):(l.warn("Direct model completion failed",{model:a.model,code:c.error.code,statusCode:c.statusCode}),d.NextResponse.json({error:{message:c.error.message,type:c.error.type,code:c.error.code,param:c.error.param??null}},{status:c.statusCode}))}},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}.
6
- 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}})},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)()}})}},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:()=>{}};
5
+ `))},j=(b,c)=>({id:e,object:"chat.completion.chunk",created:f,model:a,choices:[{index:0,delta:b,finish_reason:c}]});i(j({role:"assistant",content:""},null));let k="string"==typeof g?.message?.content?g.message.content:"";k.length>0&&i(j({content:k},null)),c&&c.length>0&&i(j({media:c},null));let l=g?.message?.tool_calls;l&&l.length>0&&i(j({tool_calls:l.map((a,b)=>({index:b,...a}))},null)),i(j({},h)),b.enqueue(d.encode("data: [DONE]\n\n")),b.close()}}),{headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}})}(a.model,c.completion,c.media):d.NextResponse.json({...c.completion,...c.media?.length?{media:c.media}:{}}):(l.warn("Direct model completion failed",{model:a.model,code:c.error.code,statusCode:c.statusCode}),d.NextResponse.json({error:{message:c.error.message,type:c.error.type,code:c.error.code,param:c.error.param??null}},{status:c.statusCode}))}},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}.
6
+ 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}})},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)()}})}},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.loadItem)(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:()=>{}};
@@ -5,6 +5,6 @@ ${b.condition}
5
5
  Tool result (untrusted data):
6
6
  \`\`\`json
7
7
  ${m}
8
- \`\`\``;try{let c="llm-gate"===b.mode?await j(b.modelId,n):await k(b.flowId,n),g=function(a){let b=a.match(/\{[\s\S]*\}/);if(!b)return null;try{let a=JSON.parse(b[0]);if("boolean"!=typeof a?.fire)return null;return{fire:a.fire,reason:"string"==typeof a.reason?a.reason:""}}catch{return null}}(c);if(!g)return f.warn(`Gate returned unparseable output: ${c.slice(0,200)}`),{fire:!1,newState:{lastHash:d,...l},error:"The AI check returned an unreadable answer — did not run the flow"};if(!g.fire)return{fire:!1,newState:{lastHash:d,...l}};return{fire:!0,summary:"flow-gate"===b.mode?"Flow condition met":"AI condition met",context:{result:(0,e.Je)(a),aiReason:g.reason},newState:{lastHash:d,...l}}}catch(b){let a=b instanceof Error?b.message:String(b);return f.warn(`Gate check failed: ${a}`),{fire:!1,newState:a.startsWith("config:")?{lastHash:d}:l,error:a.replace(/^config:\s*/,"")}}}async function j(a,b){let{modelService:d}=await Promise.all([c.e(3128),c.e(4322),c.e(5067),c.e(6034),c.e(7821),c.e(5096),c.e(544),c.e(1925)]).then(c.bind(c,20433)),{getCompletionAdapter:e}=await Promise.all([c.e(3128),c.e(4322),c.e(5067),c.e(6034),c.e(7821),c.e(5096),c.e(544),c.e(1925)]).then(c.bind(c,58858)),{normalizeMaxTokens:f}=await c.e(6496).then(c.bind(c,46496)),g=await d.getModel(a);if(!g)throw Error(`config: The AI-check model no longer exists (${a})`);let i=await d.resolveAndDecryptApiKey(g.ApiKey);if(!i)throw Error("config: Could not resolve the AI-check model API key");let j=e(g),{completion:k}=await j.createCompletion({model:g,apiKey:i,temperature:0,maxTokens:f(g.maxTokens),messages:[{role:"system",content:h},{role:"user",content:b}]}),l=k.choices?.[0]?.message?.content;return"string"==typeof l?l:""}async function k(a,b){let{runFlow:d}=await Promise.all([c.e(3128),c.e(4322),c.e(5067),c.e(6034),c.e(7821),c.e(5096),c.e(544),c.e(4671),c.e(6226),c.e(4306)]).then(c.bind(c,16226)),e=await d({flowId:a,prompt:`${b}
8
+ \`\`\``;try{let c="llm-gate"===b.mode?await j(b.modelId,n):await k(b.flowId,n),g=function(a){let b=a.match(/\{[\s\S]*\}/);if(!b)return null;try{let a=JSON.parse(b[0]);if("boolean"!=typeof a?.fire)return null;return{fire:a.fire,reason:"string"==typeof a.reason?a.reason:""}}catch{return null}}(c);if(!g)return f.warn(`Gate returned unparseable output: ${c.slice(0,200)}`),{fire:!1,newState:{lastHash:d,...l},error:"The AI check returned an unreadable answer — did not run the flow"};if(!g.fire)return{fire:!1,newState:{lastHash:d,...l}};return{fire:!0,summary:"flow-gate"===b.mode?"Flow condition met":"AI condition met",context:{result:(0,e.Je)(a),aiReason:g.reason},newState:{lastHash:d,...l}}}catch(b){let a=b instanceof Error?b.message:String(b);return f.warn(`Gate check failed: ${a}`),{fire:!1,newState:a.startsWith("config:")?{lastHash:d}:l,error:a.replace(/^config:\s*/,"")}}}async function j(a,b){let{modelService:d}=await Promise.all([c.e(3128),c.e(4322),c.e(5067),c.e(6034),c.e(7821),c.e(5096),c.e(544),c.e(1925)]).then(c.bind(c,20433)),{getCompletionAdapter:e}=await Promise.all([c.e(3128),c.e(4322),c.e(5067),c.e(6034),c.e(7821),c.e(5096),c.e(544),c.e(1925)]).then(c.bind(c,53271)),{normalizeMaxTokens:f}=await c.e(6496).then(c.bind(c,46496)),g=await d.getModel(a);if(!g)throw Error(`config: The AI-check model no longer exists (${a})`);let i=await d.resolveAndDecryptApiKey(g.ApiKey);if(!i)throw Error("config: Could not resolve the AI-check model API key");let j=e(g),{completion:k}=await j.createCompletion({model:g,apiKey:i,temperature:0,maxTokens:f(g.maxTokens),messages:[{role:"system",content:h},{role:"user",content:b}]}),l=k.choices?.[0]?.message?.content;return"string"==typeof l?l:""}async function k(a,b){let{runFlow:d}=await Promise.all([c.e(3128),c.e(4322),c.e(5067),c.e(6034),c.e(7821),c.e(5096),c.e(544),c.e(4671),c.e(6226),c.e(4306)]).then(c.bind(c,16226)),e=await d({flowId:a,prompt:`${b}
9
9
 
10
10
  ${g}`,mode:"ephemeral",requireApproval:!1,debug:!1,userTurn:!0});if("completed"!==e.status)throw Error(e.error?.message??`The checker flow ended with status "${e.status}"`);return e.outputText??""}}};
@@ -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.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:()=>{}};
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:()=>r});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(),globalTemplate:d.Yj().optional()}).strict().superRefine((a,b)=>{void 0===a.globalTemplate||/\$\{global:[A-Za-z0-9_.-]+\}/.test(a.globalTemplate)||b.addIssue({code:"custom",path:["globalTemplate"],message:"globalTemplate must contain at least one ${global:NAME} reference"})}),n=d.Ik({index:d.ai().int().nonnegative(),value:d.Yj().min(1)}).strict().superRefine((a,b)=>{/\$\{global:[A-Za-z0-9_.-]+\}/.test(a.value)||b.addIssue({code:"custom",path:["value"],message:"argument template must contain at least one ${global:NAME} reference"})}),o=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(),argTemplates:d.YO(n).optional()}).strict(),p=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()}),q=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()),r=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(o),flows:d.YO(p),plannedExecutions:d.YO(q)}).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.loadItem)(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,2 +1,2 @@
1
1
  exports.id=7891,exports.ids=[7891],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}},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}.
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)=>{"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)()}})}},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:()=>{},83868:(a,b,c)=>{"use strict";function d(a,b=200){return new Response(JSON.stringify(a),{status:b,headers:{"Content-Type":"application/json"}})}c.d(b,{P:()=>d})},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:()=>{}};
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)=>{"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)()}})}},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.loadItem)(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:()=>{},83868:(a,b,c)=>{"use strict";function d(a,b=200){return new Response(JSON.stringify(a),{status:b,headers:{"Content-Type":"application/json"}})}c.d(b,{P:()=>d})},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,2 +1,2 @@
1
1
  exports.id=7993,exports.ids=[1925,3629,4306,6793,7993,9174],exports.modules={1925:(a,b,c)=>{"use strict";c.d(b,{Hm:()=>f,xc:()=>e});let d=["key","secret","token","password"],e=a=>d.some(b=>a.toLowerCase().includes(b)),f=a=>e(a)||"authorization"===a.trim().toLowerCase()},3676:(a,b,c)=>{"use strict";c.d(b,{Wj:()=>h,ln:()=>g});var d=c(10641),e=c(58739);let f="encryption_locked";async function g(){return(0,e.isEncryptionLocked)()}async function h(a){return await g()?a?.openai?d.NextResponse.json({error:{message:"Encryption is locked. Unlock FLUJO to continue.",type:f,code:f,param:null}},{status:423}):d.NextResponse.json({error:f},{status:423}):null}},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}.
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}})},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)()}})}},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:()=>{},97020:(a,b,c)=>{"use strict";c.d(b,{Af:()=>g,PK:()=>f,Pq:()=>e});var d=c(60453);function e(a,b=200){return new Response(JSON.stringify(a),{status:b,headers:{"Content-Type":"application/json"}})}function f(a){return"string"!=typeof a||0===a.length?"A non-empty server name is required":a.length>200?"Server name must be 200 characters or fewer":"."===a||".."===a?'Server name cannot be "." or ".."':/[/\\\x00-\x1f]/.test(a)?'Server name cannot contain "/", "\\", or control characters':null}async function g(a){let b=await d.mcpService.loadServerConfigs();return Array.isArray(b)?{config:b.find(b=>b.name===a)}:{error:b.error||"Failed to load server configs"}}}};
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}})},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)()}})}},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.loadItem)(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:()=>{},97020:(a,b,c)=>{"use strict";c.d(b,{Af:()=>g,PK:()=>f,Pq:()=>e});var d=c(60453);function e(a,b=200){return new Response(JSON.stringify(a),{status:b,headers:{"Content-Type":"application/json"}})}function f(a){return"string"!=typeof a||0===a.length?"A non-empty server name is required":a.length>200?"Server name must be 200 characters or fewer":"."===a||".."===a?'Server name cannot be "." or ".."':/[/\\\x00-\x1f]/.test(a)?'Server name cannot contain "/", "\\", or control characters':null}async function g(a){let b=await d.mcpService.loadServerConfigs();return Array.isArray(b)?{config:b.find(b=>b.name===a)}:{error:b.error||"Failed to load server configs"}}}};
@@ -1,4 +1,4 @@
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:
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(53271),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
2
  - A subflow node normally references an EXISTING flow via "flow". To instead create a NEW child flow, use ONE of these on the subflow node (not "flow"):
3
3
  - "subflowSpec": an inline nested FlowSpec (you author the whole child now), or
4
4
  - "generateSubflow": a short natural-language description of the child — FLUJO will generate that child flow for you.
@@ -1 +1 @@
1
- "use strict";exports.id=8387,exports.ids=[8387],exports.modules={5591:(a,b,c)=>{c.d(b,{bz:()=>q,cd:()=>n,wp:()=>m});var d=c(33873),e=c.n(d),f=c(21820),g=c.n(f),h=c(43326),i=c(92372),j=c(84653),k=c(7969);function l(a){return"string"==typeof a&&/^(1|true|yes|on)$/i.test(a.trim())}let m="FLUJO_ALLOW_PROTECTED_PATHS";async function n(){if(l(process.env[m]))return!1;try{let a=await (0,i.YM)(j.Z.SPEECH_SETTINGS,void 0);return a?.experimental?.protectedPathsEnabled===!0}catch{return!1}}let o=null;function p(a,...b){return e().resolve(a,...b)}function q(a){let b=e().resolve(a);if((function(){let a=[];try{a.push(e().resolve((0,h.getDataDir)()))}catch{}try{a.push(e().resolve(g().tmpdir()))}catch{}return a})().some(a=>(0,k.F)(a,b)))return{denied:!1};for(let a of function(){let a=l(process.env[m]),b=(0,h.getHomeDir)(),c=`${a?"off":"on"}::${b}`;if(o&&o.key===c)return o.paths;let d=a?[]:function(a){let b=[];if("win32"===process.platform)for(let c of["AppData","Downloads","Desktop","Documents","Pictures","Music","Videos","OneDrive"])b.push(p(a,c));else if("darwin"===process.platform){for(let c of["Downloads","Desktop","Documents","Pictures","Music","Movies"])b.push(p(a,c));for(let c of["Library/Mail","Library/Messages","Library/Safari","Library/Cookies","Library/Calendars","Library/Application Support/AddressBook","Library/Application Support/com.apple.TCC","Library/PersonalizationPortrait","Library/Metadata/CoreSpotlight","Library/Suggestions"])b.push(p(a,c));for(let a of["/.Spotlight-V100","/.fseventsd","/.DocumentRevisions-V100"])b.push(e().resolve(a))}else for(let c of["Documents","Downloads","Desktop",".ssh",".gnupg",".aws",".config"])b.push(p(a,c));return Array.from(new Set(b))}(b);return o={key:c,paths:d},d}())if((0,k.F)(a,b))return{denied:!0,matchedRoot:a};return{denied:!1}}},18387:(a,b,c)=>{c.d(b,{filesystemCallTool:()=>R,filesystemToolDefinitions:()=>w});var d=c(33873),e=c.n(d),f=c(29021),g=c(55511),h=c(4984),i=c.n(h),j=c(50846),k=c(43326),l=c(7658),m=c(7969),n=c(5591),o=c(10793);let p=(0,j.h)("backend/services/mcp/internal/filesystemTools"),q={readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},r={readOnlyHint:!1,destructiveHint:!1,openWorldHint:!1},s={readOnlyHint:!1,destructiveHint:!0,openWorldHint:!1};function t(a){return{content:[{type:"text",text:JSON.stringify(a,null,2)}],structuredContent:a}}function u(a){return{content:[{type:"text",text:JSON.stringify({error:a},null,2)}],isError:!0}}async function v(a,b){let c="string"==typeof a?a.trim():"";if(!c)throw Error('Provide "path".');let d=(0,k.getDataDir)(),f=e().isAbsolute(c)?e().resolve(c):e().resolve(d,c);if(await (0,n.cd)()){let a=(0,n.bz)(f);if(a.denied)throw Error(`Path "${f}" is within a protected location (${a.matchedRoot}) and is blocked by the FLUJO built-in server protected-path policy. Disable "Protect sensitive home-directory paths" in Experimental Features or set ${n.wp}=1 to override.`)}if(0===b.length||!b.some(a=>(0,m.F)(a,f)))throw Error(`Path "${f}" is outside the configured filesystem roots.`);return f}function w(){let a={type:"string",description:"File or directory path. Relative paths resolve against the FLUJO data directory; absolute paths are used as-is."};return[{name:"read_file",annotations:q,description:'Read a text file and return its content. Optionally read only a line range with "from"/"to" (1-based, inclusive). For large files (> 100 KB) read WHOLE (no "from"/"to"), a "pattern" is REQUIRED: the server greps the file and returns only matching lines (with a little surrounding context) so you can follow up with targeted "from"/"to" reads. Pass pattern "*" to force-read the entire large file anyway. Returns { path, from, to, totalLines, content, truncated, contentHash, matches? }. Pass the returned contentHash back as "expectedHash" on a follow-up edit_file/write_file to guard against the file changing in between (TOCTOU).',inputSchema:{type:"object",properties:{path:a,from:{type:"number",description:"Optional 1-based first line to return (inclusive)."},to:{type:"number",description:"Optional 1-based last line to return (inclusive)."},pattern:{type:"string",description:'Case-insensitive substring to grep for. Required to read a large file whole without a "from"/"to" range; matching lines (plus context) are returned instead of the full body. Use "*" to read the whole large file anyway.'}},required:["path"]},outputSchema:{type:"object",properties:{path:{type:"string"},from:{type:"number"},to:{type:"number"},totalLines:{type:"number"},truncated:{type:"boolean"},content:{type:"string"},contentHash:{type:"string",description:'SHA-256 (hex) of the raw file content. Pass this back as "expectedHash" to edit_file/write_file to guard against the file changing between read and write (TOCTOU).'},matches:{type:"array",items:{type:"object",properties:{line:{type:"number"},text:{type:"string"}},required:["line","text"]}}},required:["path","from","to","totalLines","truncated","content"]}},{name:"write_file",annotations:s,description:'Create or write a text file (parent directories are created). "mode": "overwrite" (default) replaces the whole file, or a line range when "startLine"/"endLine" (1-based inclusive) are given; "append" adds content at the end; "insert" inserts content before "startLine". Optionally pass "expectedHash" (the contentHash from a prior read_file) to reject the write if the file changed on disk since it was read (TOCTOU guard); ignored for a whole-file overwrite. Returns { path, bytesWritten, mode, ... }.',_meta:{ui:{resourceUri:"ui://devcanvas/diff"}},inputSchema:{type:"object",properties:{path:a,content:{type:"string",description:"The content to write/insert/append."},mode:{type:"string",enum:["overwrite","append","insert"],description:'Write mode (default "overwrite").'},startLine:{type:"number",description:'For "insert": line to insert before. For "overwrite": first line of the range to replace (1-based).'},endLine:{type:"number",description:'For "overwrite": last line (inclusive, 1-based) of the range to replace.'},expectedHash:{type:"string",description:"Optional SHA-256 (contentHash from read_file). For append/insert/range-overwrite modes, the write is rejected if the file no longer hashes to this value (TOCTOU guard)."}},required:["path","content"]},outputSchema:{type:"object",properties:{path:{type:"string"},bytesWritten:{type:"number"},mode:{type:"string"},startLine:{type:"number"},endLine:{type:"number"},linesReplaced:{type:"number"},linesInserted:{type:"number"}},required:["path","bytesWritten","mode"]}},{name:"edit_file",annotations:s,description:'Edit a text file two ways (mutually exclusive): (1) "edits": [{ oldText, newText, startLine?, endLine? }] literal find/replace — each replaces the unique occurrence of oldText. startLine/endLine are an optional disambiguation HINT (if exactly one match starts in that range it wins); a wrong/missing range still works as long as oldText is unique in the file. Include enough surrounding context to make oldText unique. Or (2) "diff": a unified diff string ("@@ -a,b +c,d @@" hunks) applied atomically — hunks are relocated to where their context actually matches, so slightly-off @@ line numbers still apply, and CRLF files are handled. Fails with no partial write only when text is missing/ambiguous or a hunk context is not found. Optionally pass "expectedHash" (the contentHash from a prior read_file) to reject the edit if the file changed on disk since it was read (TOCTOU guard). Returns { path, editsApplied|applied, diff:{added,removed} }.',_meta:{ui:{resourceUri:"ui://devcanvas/diff"}},inputSchema:{type:"object",properties:{path:a,edits:{type:"array",description:"List of literal { oldText, newText } edits applied in order (optionally scoped with startLine/endLine).",items:{type:"object",properties:{oldText:{type:"string",description:"Exact text to find."},newText:{type:"string",description:"Replacement text."},startLine:{type:"number",description:"Optional 1-based first line to scope this edit to."},endLine:{type:"number",description:"Optional 1-based last line (inclusive) to scope this edit to."}},required:["oldText","newText"]}},diff:{type:"string",description:'A unified diff to apply atomically. Mutually exclusive with "edits".'},startLine:{type:"number",description:"Optional default 1-based first line to scope all literal edits to."},endLine:{type:"number",description:"Optional default 1-based last line (inclusive) to scope all literal edits to."},expectedHash:{type:"string",description:"Optional SHA-256 (contentHash from read_file). If provided and the freshly-read file no longer hashes to it, the edit is rejected with no changes written (TOCTOU guard)."}},required:["path"]},outputSchema:{type:"object",properties:{path:{type:"string"},mode:{type:"string"},editsApplied:{type:"number"},applied:{type:"boolean"},diff:{type:"object",properties:{added:{type:"number"},removed:{type:"number"}},required:["added","removed"]}},required:["path","diff"]}},{name:"list_dir",annotations:q,description:'List the entries of a directory. Returns { path, entries: [{ name, type, size }] } where type is "file" | "directory" | "other".',inputSchema:{type:"object",properties:{path:a},required:["path"]},outputSchema:{type:"object",properties:{path:{type:"string"},entries:{type:"array",items:{type:"object",properties:{name:{type:"string"},type:{type:"string"},size:{type:"number"}},required:["name","type","size"]}}},required:["path","entries"]}},{name:"file_browser_ui",annotations:q,description:'Open an interactive file browser in the chat so the USER can pick a file. This returns IMMEDIATELY without a selection — the browser is shown to the user and the file they choose arrives afterwards as a follow-up user message (e.g. "Selected file: <path>"). After calling this tool you MUST stop and wait for that message; do not guess a path or continue until the user has selected.',_meta:{ui:{resourceUri:"ui://filesystem/browser"}},inputSchema:{type:"object",properties:{path:{...a,description:"Optional starting directory for the browser (defaults to the FLUJO data directory)."}},required:[]}},{name:"dir_tree",annotations:q,description:"Return a recursive, depth-limited directory tree as nested JSON. Returns { path, depth, tree }.",inputSchema:{type:"object",properties:{path:a,depth:{type:"number",description:"Maximum recursion depth (default 3, max 10)."}},required:["path"]},outputSchema:{type:"object",properties:{path:{type:"string"},depth:{type:"number"},truncated:{type:"boolean"},tree:{type:"array"}},required:["path","depth","tree"]}},{name:"search",annotations:q,description:'Search a directory tree. Match file/dir NAMES against "namePattern" (substring, case-insensitive) and/or file CONTENT against "content" (substring, case-insensitive). Content search DOES look inside every text file, returning each matching line with its 1-based line number; likely-binary and very large files are skipped for speed. Returns { matches: [{ path, line?, text? }], truncated }.',inputSchema:{type:"object",properties:{path:a,namePattern:{type:"string",description:"Optional case-insensitive substring to match against entry names."},content:{type:"string",description:"Optional case-insensitive substring to match inside text files."}},required:["path"]},outputSchema:{type:"object",properties:{matches:{type:"array",items:{type:"object",properties:{path:{type:"string"},line:{type:"number"},text:{type:"string"}},required:["path"]}},truncated:{type:"boolean"}},required:["matches","truncated"]}},{name:"get_file_info",annotations:q,description:"Stat a path. Returns { path, type, size, isFile, isDirectory, createdAt, modifiedAt }.",inputSchema:{type:"object",properties:{path:a},required:["path"]},outputSchema:{type:"object",properties:{path:{type:"string"},type:{type:"string"},size:{type:"number"},isFile:{type:"boolean"},isDirectory:{type:"boolean"},createdAt:{type:"string"},modifiedAt:{type:"string"}},required:["path","type","size","isFile","isDirectory","createdAt","modifiedAt"]}},{name:"create_directory",annotations:r,description:"Create a directory (recursively). Succeeds if it already exists. Returns { path, created }.",inputSchema:{type:"object",properties:{path:a},required:["path"]},outputSchema:{type:"object",properties:{path:{type:"string"},created:{type:"boolean"}},required:["path","created"]}},{name:"move",annotations:s,description:'Move or rename a file/directory from "source" to "destination". Returns { source, destination }.',inputSchema:{type:"object",properties:{source:{type:"string",description:"Existing path to move."},destination:{type:"string",description:"Target path."}},required:["source","destination"]},outputSchema:{type:"object",properties:{source:{type:"string"},destination:{type:"string"}},required:["source","destination"]}},{name:"delete",annotations:s,description:'Delete a file or directory. Pass "recursive": true to remove a non-empty directory. Returns { path, deleted }.',inputSchema:{type:"object",properties:{path:a,recursive:{type:"boolean",description:"Remove directories and their contents recursively."}},required:["path"]},outputSchema:{type:"object",properties:{path:{type:"string"},deleted:{type:"boolean"}},required:["path","deleted"]}},{name:"get_allowed_directories",annotations:q,description:"Returns the list of directories that this filesystem MCP server is currently allowed to access. The list is the merged result of server-level roots (configured via FLUJO MCP settings), MCP-node-level roots (set in the FlowBuilder), and the FLUJO_FS_ROOTS environment variable ceiling. When no roots are configured at all, returns the FLUJO data directory as the default (so the file browser is usable out of the box).",inputSchema:{type:"object",properties:{},required:[]},outputSchema:{type:"object",properties:{directories:{type:"array",items:{type:"string"},description:"Absolute paths of all allowed directories."}},required:["directories"]}}]}function x(a){return a.replace(/\r\n?/g,"\n").split("\n")}function y(a){return a.includes("\r\n")?"\r\n":"\n"}function z(a){return(0,g.createHash)("sha256").update(a,"utf8").digest("hex")}function A(a){return a.startsWith("\uFEFF")?{bom:"\uFEFF",body:a.slice(1)}:{bom:"",body:a}}let B="File changed after permission approval. Read it again before editing. No changes written.";function C(a){let b=Math.min(a.length,8e3);for(let c=0;c<b;c++)if(0===a[c])return!0;return!1}async function D(a,b,c){let d=b.toLowerCase(),e=[],g=!1,h=(0,f.createReadStream)(a,{encoding:"utf8"}),j=i().createInterface({input:h,crlfDelay:1/0}),k=0;try{for await(let a of j)if(k++,a.toLowerCase().includes(d)&&(e.push({line:k,text:a.slice(0,400)}),e.length>=c)){g=!0;break}}finally{j.close(),h.destroy()}return{matches:e,truncated:g}}async function E(a,b){let c=await v(a.path,b),d="number"==typeof a.from||"number"==typeof a.to,e="string"==typeof a.pattern?a.pattern.trim():"",g=0;try{g=(await f.promises.stat(c)).size}catch{}if(g>1e5&&!d&&!e)return u(`File is large (${g} bytes > 100000 threshold). Reading it whole would flood the context. Provide a "pattern" to grep for (matching lines + context are returned, then read targeted ranges with "from"/"to"), or pass pattern "*" to read the whole file anyway.`);if(e&&"*"!==e&&!d){let a=await f.promises.readFile(c);if(C(a))return u(`File appears to be binary; cannot grep for a pattern: ${c}`);let b=a.toString("utf8"),d=x(b),h=d.length,i=e.toLowerCase(),j=[];for(let a=0;a<d.length&&(!d[a].toLowerCase().includes(i)||(j.push({line:a+1,text:d[a].slice(0,400)}),!(j.length>=200)));a++);let k=j.length>=200,l=new Set;for(let a of j)for(let b=a.line-2;b<=a.line+2;b++)b>=1&&b<=h&&l.add(b);let m=[...l].sort((a,b)=>a-b),n=[],p=0;for(let a of m)p&&a>p+1&&n.push("…"),n.push(`${a}: ${d[a-1]}`),p=a;let q=n.join("\n");return q.length>2e5&&(q=q.slice(0,2e5)+"\n…[truncated]"),(0,o.Wk)(c,"read",g),t({path:c,from:1,to:h,totalLines:h,truncated:k,content:j.length?q:`(no lines matched pattern ${JSON.stringify(e)})`,matches:j,contentHash:z(b)})}let h=await f.promises.readFile(c,"utf8"),i=x(h),j=i.length,k="number"==typeof a.from?Math.max(1,Math.floor(a.from)):1,l="number"==typeof a.to?Math.floor(a.to):j;l<k&&([k,l]=[l,k]),l=Math.min(l,j);let m=d?i.slice(k-1,l).join("\n"):h,n=!1;return m.length>2e5&&(m=m.slice(0,2e5)+"\n…[truncated]",n=!0),(0,o.Wk)(c,"read",g),t({path:c,from:d?k:1,to:d?l:j,totalLines:j,truncated:n,content:m,contentHash:z(h)})}async function F(a,b){let c=await v(a.path,b),d="string"==typeof a.content?a.content:"",g="append"===a.mode||"insert"===a.mode?a.mode:"overwrite",h="number"==typeof a.startLine||"number"==typeof a.endLine;if(await f.promises.mkdir(e().dirname(c),{recursive:!0}),(0,o.Wk)(c,"write"),"overwrite"===g&&!h)return await f.promises.writeFile(c,d,"utf8"),t({path:c,bytesWritten:Buffer.byteLength(d,"utf8"),mode:"overwrite"});let i="";try{i=await f.promises.readFile(c,"utf8")}catch{i=""}let j="string"==typeof a.expectedHash?a.expectedHash:void 0;if(j&&z(i)!==j)return u(B);let{bom:k,body:l}=A(i);if("append"===g){let a=!l.length||l.endsWith("\n")||l.endsWith("\r\n")?"":y(l),b=k+l+a+d;return await f.promises.writeFile(c,b,"utf8"),t({path:c,bytesWritten:Buffer.byteLength(b,"utf8"),mode:"append"})}let m=y(l),n=l.length?l.split(/\r?\n/):[],p=d.split(/\r?\n/),q=n.length;if("insert"===g){let b="number"==typeof a.startLine?Math.max(1,Math.floor(a.startLine)):q+1,d=Math.min(b-1,q);n.splice(d,0,...p);let e=k+n.join(m);return await f.promises.writeFile(c,e,"utf8"),t({path:c,bytesWritten:Buffer.byteLength(e,"utf8"),mode:"insert",startLine:b,linesInserted:p.length})}let r="number"==typeof a.startLine?Math.max(1,Math.floor(a.startLine)):1,s="number"==typeof a.endLine?Math.floor(a.endLine):r;s<r&&([r,s]=[s,r]);let w=Math.max(0,(s=Math.min(s,q))-r+1);n.splice(r-1,w,...p);let x=k+n.join(m);return await f.promises.writeFile(c,x,"utf8"),t({path:c,bytesWritten:Buffer.byteLength(x,"utf8"),mode:"overwrite",startLine:r,endLine:s,linesReplaced:w})}async function G(a,b){let c=await v(a.path,b),d="string"==typeof a.diff&&a.diff.trim().length>0,e=Array.isArray(a.edits)&&a.edits.length>0;if(d&&e)return u('Provide either "diff" or "edits", not both.');let g=await f.promises.readFile(c,"utf8"),h="string"==typeof a.expectedHash?a.expectedHash:void 0;if(h&&z(g)!==h)return u(B);let{bom:i,body:j}=A(g);if(d){let b,d=y(j),e=j.replace(/\r\n?/g,"\n");try{b=function(a,b){let c=a.split("\n"),d=b.split(/\r?\n/),e=/^@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/,f=[],g=null;for(let a=0;a<d.length;a++){let b=d[a];if(void 0===b)break;let c=e.exec(b);if(c){g={oldStart:parseInt(c[1],10),ops:[]},f.push(g);continue}if(b.startsWith("--- ")||b.startsWith("+++ ")){g=null;continue}if(!g)continue;let h=b.length?b[0]:" ",i=b.length?b.slice(1):"";if(" "===h||"-"===h||"+"===h)g.ops.push({tag:h,body:i});else if("\\"===h);else throw Error(`unexpected diff line: ${JSON.stringify(b)}`)}if(0===f.length)throw Error("no unified-diff hunks (@@ ... @@) found");let h=[],i=0,j=0,k=0;for(let a of f){let b=function(a,b,c,d){if(0===b.length)return Math.min(Math.max(c,d),a.length);let e=a.length-b.length,f=c=>{if(c<d||c>e)return!1;for(let d=0;d<b.length;d++)if(a[c+d]!==b[d])return!1;return!0},g=Math.max(d,c);if(f(g))return g;let h=Math.max(g-d,e-g);for(let a=1;a<=h;a++){if(f(g-a))return g-a;if(f(g+a))return g+a}throw Error(`could not locate hunk near line ${c+1}; its context/removed lines do not match the file. First expected line: ${JSON.stringify(b[0])}`)}(c,a.ops.filter(a=>" "===a.tag||"-"===a.tag).map(a=>a.body),Math.max(0,a.oldStart-1),i);if(b<i)throw Error("overlapping or out-of-order hunks");for(;i<b;)h.push(c[i]),i++;for(let b of a.ops)" "===b.tag?(h.push(c[i]),i++):"-"===b.tag?(i++,k++):(h.push(b.body),j++)}for(;i<c.length;)h.push(c[i]),i++;return{result:h.join("\n"),added:j,removed:k}}(e,a.diff)}catch(a){return u(`Diff apply failed: ${a instanceof Error?a.message:String(a)}. No changes written.`)}let g=i+("\r\n"===d?b.result.replace(/\n/g,"\r\n"):b.result);return await f.promises.writeFile(c,g,"utf8"),(0,o.Wk)(c,"write"),t({path:c,applied:!0,mode:"diff",diff:{added:b.added,removed:b.removed}})}let k=Array.isArray(a.edits)?a.edits:[];if(0===k.length)return u('Provide a non-empty "edits" array of { oldText, newText } or a "diff" string.');let l="number"==typeof a.startLine?a.startLine:void 0,m="number"==typeof a.endLine?a.endLine:void 0,n=y(j),p=j.replace(/\r\n?/g,"\n"),q=0;for(let a of k){let b="string"==typeof a.oldText?a.oldText.replace(/\r\n?/g,"\n"):"",d="string"==typeof a.newText?a.newText.replace(/\r\n?/g,"\n"):"";if(!b)return u(`Edit #${q+1} has an empty "oldText".`);let e="number"==typeof a.startLine?a.startLine:l,f="number"==typeof a.endLine?a.endLine:m,g=void 0!==e||void 0!==f,h=[];for(let a=p.indexOf(b);-1!==a;a=p.indexOf(b,a+1))h.push(a);if(0===h.length)return u(`Edit #${q+1}: "oldText" not found in ${c}. No changes written.`);let i=-1;if(g){let{lo:a,hi:b}=function(a,b,c){if(void 0===b&&void 0===c)return{lo:0,hi:a.length};let d=a.split("\n"),e=Math.max(1,Math.floor(b??1)),f=Math.min(d.length,Math.floor(c??d.length)),g=0;for(let a=0;a<e-1&&a<d.length;a++)g+=d[a].length+1;let h=g;for(let a=e-1;a<f&&a<d.length;a++)h+=d[a].length+ +(a<d.length-1);return{lo:g,hi:Math.max(g,h)}}(p,e,f),c=h.filter(c=>c>=a&&c<b);1===c.length&&(i=c[0])}if(-1===i)if(1!==h.length)return u(`Edit #${q+1}: "oldText" is ambiguous (appears ${h.length} times); add more surrounding context or a tighter startLine/endLine so exactly one occurrence is in range. No changes written.`);else i=h[0];p=p.slice(0,i)+d+p.slice(i+b.length),q+=1}let r=function(a,b){let c=x(a),d=x(b),e=new Map;for(let a of d)e.set(a,(e.get(a)??0)+1);let f=new Map;for(let a of c)f.set(a,(f.get(a)??0)+1);let g=0;for(let[a,b]of f)g+=Math.max(0,b-(e.get(a)??0));let h=0;for(let[a,b]of e)h+=Math.max(0,b-(f.get(a)??0));return{added:h,removed:g}}(j,p),s=i+("\r\n"===n?p.replace(/\n/g,"\r\n"):p);return await f.promises.writeFile(c,s,"utf8"),(0,o.Wk)(c,"write"),t({path:c,mode:"edits",editsApplied:q,diff:r})}async function H(a){try{let b=await f.promises.lstat(a);if(b.isFile())return"file";if(b.isDirectory())return"directory";return"other"}catch{return"other"}}async function I(a,b){let c=await v(a.path,b),d=await f.promises.readdir(c),g=await Promise.all(d.map(async a=>{let b=e().join(c,a),d=await H(b),g=0;try{g=(await f.promises.stat(b)).size}catch{}return{name:a,type:d,size:g}}));return g.sort((a,b)=>a.type===b.type?a.name.localeCompare(b.name):"directory"===a.type?-1:1),t({path:c,entries:g})}async function J(a,b){let c=await v(a.path,b),d=Math.min("number"==typeof a.depth?Math.max(1,Math.floor(a.depth)):3,10),g=0,h=!1;async function i(a,b){let c;if(b>d||h)return[];try{c=await f.promises.readdir(a)}catch{return[]}c.sort((a,b)=>a.localeCompare(b));let j=[];for(let f of c){if(++g>5e3){h=!0;break}let c=e().join(a,f),k=await H(c),l={name:f,type:k};"directory"===k&&b<d&&(l.children=await i(c,b+1)),j.push(l)}return j}let j=await i(c,1);return t({path:c,depth:d,truncated:h,tree:j})}async function K(a,b,c){let d;try{d=await f.promises.stat(a)}catch{return[]}if(!d.isFile()||d.size>5e6)return[];try{let b=await f.promises.open(a,"r");try{let a=Buffer.alloc(Math.min(8e3,d.size));if(a.length&&await b.read(a,0,a.length,0),C(a))return[]}finally{await b.close()}}catch{return[]}let{matches:e}=await D(a,b,Math.max(1,c));return e.map(b=>({path:a,line:b.line,text:b.text}))}async function L(a,b){let c=await v(a.path,b),d="string"==typeof a.namePattern?a.namePattern.toLowerCase():"",g="string"==typeof a.content?a.content:"";if(!d&&!g)return u('Provide "namePattern" and/or "content" to search for.');let h=[],i=!1,j=[];async function k(a){let b;if(!i){try{b=await f.promises.readdir(a)}catch{return}for(let c of b){if(i)return;let b=e().join(a,c),f=await H(b);if(d&&c.toLowerCase().includes(d)&&(h.push({path:b}),h.length>=1e3)){i=!0;return}"directory"===f?await k(b):"file"===f&&g&&j.push(b)}}}if(await k(c),g&&!i)for(let a=0;a<j.length&&!i;a+=16){let b=j.slice(a,a+16);for(let a of(await Promise.all(b.map(a=>K(a,g,1e3))))){for(let b of a)if(h.push(b),h.length>=1e3){i=!0;break}if(i)break}}return t({matches:h,truncated:i})}async function M(a,b){let c=await v(a.path,b),d=await f.promises.stat(c);return t({path:c,type:d.isFile()?"file":d.isDirectory()?"directory":"other",size:d.size,isFile:d.isFile(),isDirectory:d.isDirectory(),createdAt:d.birthtime.toISOString(),modifiedAt:d.mtime.toISOString()})}async function N(a,b){let c=await v(a.path,b);return await f.promises.mkdir(c,{recursive:!0}),t({path:c,created:!0})}async function O(a,b){let c=await v(a.source,b),d=await v(a.destination,b);return await f.promises.mkdir(e().dirname(d),{recursive:!0}),await f.promises.rename(c,d),t({source:c,destination:d})}async function P(a,b){let c=await v(a.path,b),d=!0===a.recursive;return await f.promises.rm(c,{recursive:d,force:!1}),t({path:c,deleted:!0})}async function Q(a){return t({directories:a})}async function R(a,b,c){try{if("file_browser_ui"===a)return function(a,b=!1){return{content:[{type:"text",text:a}],...b?{isError:!0}:{}}}("File browser shown to the user. Waiting for them to select a file — their choice will arrive as a follow-up message. Do not proceed until then.");let d=await (0,m.loadEffectiveRoots)(l.K3,"FLUJO_FS_ROOTS",c);switch(a){case"read_file":return await E(b,d);case"write_file":return await F(b,d);case"edit_file":return await G(b,d);case"list_dir":return await I(b,d);case"dir_tree":return await J(b,d);case"search":return await L(b,d);case"get_file_info":return await M(b,d);case"create_directory":return await N(b,d);case"move":return await O(b,d);case"delete":return await P(b,d);case"get_allowed_directories":return await Q(d);default:return u(`Unknown tool on the built-in filesystem server: ${a}`)}}catch(c){let b=c instanceof Error?c.message:String(c);return p.warn("filesystemCallTool failed",{toolName:a,err:c}),{isError:!0,content:[{type:"text",text:JSON.stringify({error:b})}],structuredContent:{error:b}}}}}};
1
+ "use strict";exports.id=8387,exports.ids=[8387],exports.modules={5591:(a,b,c)=>{c.d(b,{bz:()=>q,cd:()=>n,wp:()=>m});var d=c(33873),e=c.n(d),f=c(21820),g=c.n(f),h=c(43326),i=c(92372),j=c(84653),k=c(7969);function l(a){return"string"==typeof a&&/^(1|true|yes|on)$/i.test(a.trim())}let m="FLUJO_ALLOW_PROTECTED_PATHS";async function n(){if(l(process.env[m]))return!1;try{let a=await (0,i.loadItem)(j.Z.SPEECH_SETTINGS,void 0);return a?.experimental?.protectedPathsEnabled===!0}catch{return!1}}let o=null;function p(a,...b){return e().resolve(a,...b)}function q(a){let b=e().resolve(a);if((function(){let a=[];try{a.push(e().resolve((0,h.getDataDir)()))}catch{}try{a.push(e().resolve(g().tmpdir()))}catch{}return a})().some(a=>(0,k.F)(a,b)))return{denied:!1};for(let a of function(){let a=l(process.env[m]),b=(0,h.getHomeDir)(),c=`${a?"off":"on"}::${b}`;if(o&&o.key===c)return o.paths;let d=a?[]:function(a){let b=[];if("win32"===process.platform)for(let c of["AppData","Downloads","Desktop","Documents","Pictures","Music","Videos","OneDrive"])b.push(p(a,c));else if("darwin"===process.platform){for(let c of["Downloads","Desktop","Documents","Pictures","Music","Movies"])b.push(p(a,c));for(let c of["Library/Mail","Library/Messages","Library/Safari","Library/Cookies","Library/Calendars","Library/Application Support/AddressBook","Library/Application Support/com.apple.TCC","Library/PersonalizationPortrait","Library/Metadata/CoreSpotlight","Library/Suggestions"])b.push(p(a,c));for(let a of["/.Spotlight-V100","/.fseventsd","/.DocumentRevisions-V100"])b.push(e().resolve(a))}else for(let c of["Documents","Downloads","Desktop",".ssh",".gnupg",".aws",".config"])b.push(p(a,c));return Array.from(new Set(b))}(b);return o={key:c,paths:d},d}())if((0,k.F)(a,b))return{denied:!0,matchedRoot:a};return{denied:!1}}},18387:(a,b,c)=>{c.d(b,{filesystemCallTool:()=>R,filesystemToolDefinitions:()=>w});var d=c(33873),e=c.n(d),f=c(29021),g=c(55511),h=c(4984),i=c.n(h),j=c(50846),k=c(43326),l=c(7658),m=c(7969),n=c(5591),o=c(10793);let p=(0,j.h)("backend/services/mcp/internal/filesystemTools"),q={readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},r={readOnlyHint:!1,destructiveHint:!1,openWorldHint:!1},s={readOnlyHint:!1,destructiveHint:!0,openWorldHint:!1};function t(a){return{content:[{type:"text",text:JSON.stringify(a,null,2)}],structuredContent:a}}function u(a){return{content:[{type:"text",text:JSON.stringify({error:a},null,2)}],isError:!0}}async function v(a,b){let c="string"==typeof a?a.trim():"";if(!c)throw Error('Provide "path".');let d=(0,k.getDataDir)(),f=e().isAbsolute(c)?e().resolve(c):e().resolve(d,c);if(await (0,n.cd)()){let a=(0,n.bz)(f);if(a.denied)throw Error(`Path "${f}" is within a protected location (${a.matchedRoot}) and is blocked by the FLUJO built-in server protected-path policy. Disable "Protect sensitive home-directory paths" in Experimental Features or set ${n.wp}=1 to override.`)}if(0===b.length||!b.some(a=>(0,m.F)(a,f)))throw Error(`Path "${f}" is outside the configured filesystem roots.`);return f}function w(){let a={type:"string",description:"File or directory path. Relative paths resolve against the FLUJO data directory; absolute paths are used as-is."};return[{name:"read_file",annotations:q,description:'Read a text file and return its content. Optionally read only a line range with "from"/"to" (1-based, inclusive). For large files (> 100 KB) read WHOLE (no "from"/"to"), a "pattern" is REQUIRED: the server greps the file and returns only matching lines (with a little surrounding context) so you can follow up with targeted "from"/"to" reads. Pass pattern "*" to force-read the entire large file anyway. Returns { path, from, to, totalLines, content, truncated, contentHash, matches? }. Pass the returned contentHash back as "expectedHash" on a follow-up edit_file/write_file to guard against the file changing in between (TOCTOU).',inputSchema:{type:"object",properties:{path:a,from:{type:"number",description:"Optional 1-based first line to return (inclusive)."},to:{type:"number",description:"Optional 1-based last line to return (inclusive)."},pattern:{type:"string",description:'Case-insensitive substring to grep for. Required to read a large file whole without a "from"/"to" range; matching lines (plus context) are returned instead of the full body. Use "*" to read the whole large file anyway.'}},required:["path"]},outputSchema:{type:"object",properties:{path:{type:"string"},from:{type:"number"},to:{type:"number"},totalLines:{type:"number"},truncated:{type:"boolean"},content:{type:"string"},contentHash:{type:"string",description:'SHA-256 (hex) of the raw file content. Pass this back as "expectedHash" to edit_file/write_file to guard against the file changing between read and write (TOCTOU).'},matches:{type:"array",items:{type:"object",properties:{line:{type:"number"},text:{type:"string"}},required:["line","text"]}}},required:["path","from","to","totalLines","truncated","content"]}},{name:"write_file",annotations:s,description:'Create or write a text file (parent directories are created). "mode": "overwrite" (default) replaces the whole file, or a line range when "startLine"/"endLine" (1-based inclusive) are given; "append" adds content at the end; "insert" inserts content before "startLine". Optionally pass "expectedHash" (the contentHash from a prior read_file) to reject the write if the file changed on disk since it was read (TOCTOU guard); ignored for a whole-file overwrite. Returns { path, bytesWritten, mode, ... }.',_meta:{ui:{resourceUri:"ui://devcanvas/diff"}},inputSchema:{type:"object",properties:{path:a,content:{type:"string",description:"The content to write/insert/append."},mode:{type:"string",enum:["overwrite","append","insert"],description:'Write mode (default "overwrite").'},startLine:{type:"number",description:'For "insert": line to insert before. For "overwrite": first line of the range to replace (1-based).'},endLine:{type:"number",description:'For "overwrite": last line (inclusive, 1-based) of the range to replace.'},expectedHash:{type:"string",description:"Optional SHA-256 (contentHash from read_file). For append/insert/range-overwrite modes, the write is rejected if the file no longer hashes to this value (TOCTOU guard)."}},required:["path","content"]},outputSchema:{type:"object",properties:{path:{type:"string"},bytesWritten:{type:"number"},mode:{type:"string"},startLine:{type:"number"},endLine:{type:"number"},linesReplaced:{type:"number"},linesInserted:{type:"number"}},required:["path","bytesWritten","mode"]}},{name:"edit_file",annotations:s,description:'Edit a text file two ways (mutually exclusive): (1) "edits": [{ oldText, newText, startLine?, endLine? }] literal find/replace — each replaces the unique occurrence of oldText. startLine/endLine are an optional disambiguation HINT (if exactly one match starts in that range it wins); a wrong/missing range still works as long as oldText is unique in the file. Include enough surrounding context to make oldText unique. Or (2) "diff": a unified diff string ("@@ -a,b +c,d @@" hunks) applied atomically — hunks are relocated to where their context actually matches, so slightly-off @@ line numbers still apply, and CRLF files are handled. Fails with no partial write only when text is missing/ambiguous or a hunk context is not found. Optionally pass "expectedHash" (the contentHash from a prior read_file) to reject the edit if the file changed on disk since it was read (TOCTOU guard). Returns { path, editsApplied|applied, diff:{added,removed} }.',_meta:{ui:{resourceUri:"ui://devcanvas/diff"}},inputSchema:{type:"object",properties:{path:a,edits:{type:"array",description:"List of literal { oldText, newText } edits applied in order (optionally scoped with startLine/endLine).",items:{type:"object",properties:{oldText:{type:"string",description:"Exact text to find."},newText:{type:"string",description:"Replacement text."},startLine:{type:"number",description:"Optional 1-based first line to scope this edit to."},endLine:{type:"number",description:"Optional 1-based last line (inclusive) to scope this edit to."}},required:["oldText","newText"]}},diff:{type:"string",description:'A unified diff to apply atomically. Mutually exclusive with "edits".'},startLine:{type:"number",description:"Optional default 1-based first line to scope all literal edits to."},endLine:{type:"number",description:"Optional default 1-based last line (inclusive) to scope all literal edits to."},expectedHash:{type:"string",description:"Optional SHA-256 (contentHash from read_file). If provided and the freshly-read file no longer hashes to it, the edit is rejected with no changes written (TOCTOU guard)."}},required:["path"]},outputSchema:{type:"object",properties:{path:{type:"string"},mode:{type:"string"},editsApplied:{type:"number"},applied:{type:"boolean"},diff:{type:"object",properties:{added:{type:"number"},removed:{type:"number"}},required:["added","removed"]}},required:["path","diff"]}},{name:"list_dir",annotations:q,description:'List the entries of a directory. Returns { path, entries: [{ name, type, size }] } where type is "file" | "directory" | "other".',inputSchema:{type:"object",properties:{path:a},required:["path"]},outputSchema:{type:"object",properties:{path:{type:"string"},entries:{type:"array",items:{type:"object",properties:{name:{type:"string"},type:{type:"string"},size:{type:"number"}},required:["name","type","size"]}}},required:["path","entries"]}},{name:"file_browser_ui",annotations:q,description:'Open an interactive file browser in the chat so the USER can pick a file. This returns IMMEDIATELY without a selection — the browser is shown to the user and the file they choose arrives afterwards as a follow-up user message (e.g. "Selected file: <path>"). After calling this tool you MUST stop and wait for that message; do not guess a path or continue until the user has selected.',_meta:{ui:{resourceUri:"ui://filesystem/browser"}},inputSchema:{type:"object",properties:{path:{...a,description:"Optional starting directory for the browser (defaults to the FLUJO data directory)."}},required:[]}},{name:"dir_tree",annotations:q,description:"Return a recursive, depth-limited directory tree as nested JSON. Returns { path, depth, tree }.",inputSchema:{type:"object",properties:{path:a,depth:{type:"number",description:"Maximum recursion depth (default 3, max 10)."}},required:["path"]},outputSchema:{type:"object",properties:{path:{type:"string"},depth:{type:"number"},truncated:{type:"boolean"},tree:{type:"array"}},required:["path","depth","tree"]}},{name:"search",annotations:q,description:'Search a directory tree. Match file/dir NAMES against "namePattern" (substring, case-insensitive) and/or file CONTENT against "content" (substring, case-insensitive). Content search DOES look inside every text file, returning each matching line with its 1-based line number; likely-binary and very large files are skipped for speed. Returns { matches: [{ path, line?, text? }], truncated }.',inputSchema:{type:"object",properties:{path:a,namePattern:{type:"string",description:"Optional case-insensitive substring to match against entry names."},content:{type:"string",description:"Optional case-insensitive substring to match inside text files."}},required:["path"]},outputSchema:{type:"object",properties:{matches:{type:"array",items:{type:"object",properties:{path:{type:"string"},line:{type:"number"},text:{type:"string"}},required:["path"]}},truncated:{type:"boolean"}},required:["matches","truncated"]}},{name:"get_file_info",annotations:q,description:"Stat a path. Returns { path, type, size, isFile, isDirectory, createdAt, modifiedAt }.",inputSchema:{type:"object",properties:{path:a},required:["path"]},outputSchema:{type:"object",properties:{path:{type:"string"},type:{type:"string"},size:{type:"number"},isFile:{type:"boolean"},isDirectory:{type:"boolean"},createdAt:{type:"string"},modifiedAt:{type:"string"}},required:["path","type","size","isFile","isDirectory","createdAt","modifiedAt"]}},{name:"create_directory",annotations:r,description:"Create a directory (recursively). Succeeds if it already exists. Returns { path, created }.",inputSchema:{type:"object",properties:{path:a},required:["path"]},outputSchema:{type:"object",properties:{path:{type:"string"},created:{type:"boolean"}},required:["path","created"]}},{name:"move",annotations:s,description:'Move or rename a file/directory from "source" to "destination". Returns { source, destination }.',inputSchema:{type:"object",properties:{source:{type:"string",description:"Existing path to move."},destination:{type:"string",description:"Target path."}},required:["source","destination"]},outputSchema:{type:"object",properties:{source:{type:"string"},destination:{type:"string"}},required:["source","destination"]}},{name:"delete",annotations:s,description:'Delete a file or directory. Pass "recursive": true to remove a non-empty directory. Returns { path, deleted }.',inputSchema:{type:"object",properties:{path:a,recursive:{type:"boolean",description:"Remove directories and their contents recursively."}},required:["path"]},outputSchema:{type:"object",properties:{path:{type:"string"},deleted:{type:"boolean"}},required:["path","deleted"]}},{name:"get_allowed_directories",annotations:q,description:"Returns the list of directories that this filesystem MCP server is currently allowed to access. The list is the merged result of server-level roots (configured via FLUJO MCP settings), MCP-node-level roots (set in the FlowBuilder), and the FLUJO_FS_ROOTS environment variable ceiling. When no roots are configured at all, returns the FLUJO data directory as the default (so the file browser is usable out of the box).",inputSchema:{type:"object",properties:{},required:[]},outputSchema:{type:"object",properties:{directories:{type:"array",items:{type:"string"},description:"Absolute paths of all allowed directories."}},required:["directories"]}}]}function x(a){return a.replace(/\r\n?/g,"\n").split("\n")}function y(a){return a.includes("\r\n")?"\r\n":"\n"}function z(a){return(0,g.createHash)("sha256").update(a,"utf8").digest("hex")}function A(a){return a.startsWith("\uFEFF")?{bom:"\uFEFF",body:a.slice(1)}:{bom:"",body:a}}let B="File changed after permission approval. Read it again before editing. No changes written.";function C(a){let b=Math.min(a.length,8e3);for(let c=0;c<b;c++)if(0===a[c])return!0;return!1}async function D(a,b,c){let d=b.toLowerCase(),e=[],g=!1,h=(0,f.createReadStream)(a,{encoding:"utf8"}),j=i().createInterface({input:h,crlfDelay:1/0}),k=0;try{for await(let a of j)if(k++,a.toLowerCase().includes(d)&&(e.push({line:k,text:a.slice(0,400)}),e.length>=c)){g=!0;break}}finally{j.close(),h.destroy()}return{matches:e,truncated:g}}async function E(a,b){let c=await v(a.path,b),d="number"==typeof a.from||"number"==typeof a.to,e="string"==typeof a.pattern?a.pattern.trim():"",g=0;try{g=(await f.promises.stat(c)).size}catch{}if(g>1e5&&!d&&!e)return u(`File is large (${g} bytes > 100000 threshold). Reading it whole would flood the context. Provide a "pattern" to grep for (matching lines + context are returned, then read targeted ranges with "from"/"to"), or pass pattern "*" to read the whole file anyway.`);if(e&&"*"!==e&&!d){let a=await f.promises.readFile(c);if(C(a))return u(`File appears to be binary; cannot grep for a pattern: ${c}`);let b=a.toString("utf8"),d=x(b),h=d.length,i=e.toLowerCase(),j=[];for(let a=0;a<d.length&&(!d[a].toLowerCase().includes(i)||(j.push({line:a+1,text:d[a].slice(0,400)}),!(j.length>=200)));a++);let k=j.length>=200,l=new Set;for(let a of j)for(let b=a.line-2;b<=a.line+2;b++)b>=1&&b<=h&&l.add(b);let m=[...l].sort((a,b)=>a-b),n=[],p=0;for(let a of m)p&&a>p+1&&n.push("…"),n.push(`${a}: ${d[a-1]}`),p=a;let q=n.join("\n");return q.length>2e5&&(q=q.slice(0,2e5)+"\n…[truncated]"),(0,o.Wk)(c,"read",g),t({path:c,from:1,to:h,totalLines:h,truncated:k,content:j.length?q:`(no lines matched pattern ${JSON.stringify(e)})`,matches:j,contentHash:z(b)})}let h=await f.promises.readFile(c,"utf8"),i=x(h),j=i.length,k="number"==typeof a.from?Math.max(1,Math.floor(a.from)):1,l="number"==typeof a.to?Math.floor(a.to):j;l<k&&([k,l]=[l,k]),l=Math.min(l,j);let m=d?i.slice(k-1,l).join("\n"):h,n=!1;return m.length>2e5&&(m=m.slice(0,2e5)+"\n…[truncated]",n=!0),(0,o.Wk)(c,"read",g),t({path:c,from:d?k:1,to:d?l:j,totalLines:j,truncated:n,content:m,contentHash:z(h)})}async function F(a,b){let c=await v(a.path,b),d="string"==typeof a.content?a.content:"",g="append"===a.mode||"insert"===a.mode?a.mode:"overwrite",h="number"==typeof a.startLine||"number"==typeof a.endLine;if(await f.promises.mkdir(e().dirname(c),{recursive:!0}),(0,o.Wk)(c,"write"),"overwrite"===g&&!h)return await f.promises.writeFile(c,d,"utf8"),t({path:c,bytesWritten:Buffer.byteLength(d,"utf8"),mode:"overwrite"});let i="";try{i=await f.promises.readFile(c,"utf8")}catch{i=""}let j="string"==typeof a.expectedHash?a.expectedHash:void 0;if(j&&z(i)!==j)return u(B);let{bom:k,body:l}=A(i);if("append"===g){let a=!l.length||l.endsWith("\n")||l.endsWith("\r\n")?"":y(l),b=k+l+a+d;return await f.promises.writeFile(c,b,"utf8"),t({path:c,bytesWritten:Buffer.byteLength(b,"utf8"),mode:"append"})}let m=y(l),n=l.length?l.split(/\r?\n/):[],p=d.split(/\r?\n/),q=n.length;if("insert"===g){let b="number"==typeof a.startLine?Math.max(1,Math.floor(a.startLine)):q+1,d=Math.min(b-1,q);n.splice(d,0,...p);let e=k+n.join(m);return await f.promises.writeFile(c,e,"utf8"),t({path:c,bytesWritten:Buffer.byteLength(e,"utf8"),mode:"insert",startLine:b,linesInserted:p.length})}let r="number"==typeof a.startLine?Math.max(1,Math.floor(a.startLine)):1,s="number"==typeof a.endLine?Math.floor(a.endLine):r;s<r&&([r,s]=[s,r]);let w=Math.max(0,(s=Math.min(s,q))-r+1);n.splice(r-1,w,...p);let x=k+n.join(m);return await f.promises.writeFile(c,x,"utf8"),t({path:c,bytesWritten:Buffer.byteLength(x,"utf8"),mode:"overwrite",startLine:r,endLine:s,linesReplaced:w})}async function G(a,b){let c=await v(a.path,b),d="string"==typeof a.diff&&a.diff.trim().length>0,e=Array.isArray(a.edits)&&a.edits.length>0;if(d&&e)return u('Provide either "diff" or "edits", not both.');let g=await f.promises.readFile(c,"utf8"),h="string"==typeof a.expectedHash?a.expectedHash:void 0;if(h&&z(g)!==h)return u(B);let{bom:i,body:j}=A(g);if(d){let b,d=y(j),e=j.replace(/\r\n?/g,"\n");try{b=function(a,b){let c=a.split("\n"),d=b.split(/\r?\n/),e=/^@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/,f=[],g=null;for(let a=0;a<d.length;a++){let b=d[a];if(void 0===b)break;let c=e.exec(b);if(c){g={oldStart:parseInt(c[1],10),ops:[]},f.push(g);continue}if(b.startsWith("--- ")||b.startsWith("+++ ")){g=null;continue}if(!g)continue;let h=b.length?b[0]:" ",i=b.length?b.slice(1):"";if(" "===h||"-"===h||"+"===h)g.ops.push({tag:h,body:i});else if("\\"===h);else throw Error(`unexpected diff line: ${JSON.stringify(b)}`)}if(0===f.length)throw Error("no unified-diff hunks (@@ ... @@) found");let h=[],i=0,j=0,k=0;for(let a of f){let b=function(a,b,c,d){if(0===b.length)return Math.min(Math.max(c,d),a.length);let e=a.length-b.length,f=c=>{if(c<d||c>e)return!1;for(let d=0;d<b.length;d++)if(a[c+d]!==b[d])return!1;return!0},g=Math.max(d,c);if(f(g))return g;let h=Math.max(g-d,e-g);for(let a=1;a<=h;a++){if(f(g-a))return g-a;if(f(g+a))return g+a}throw Error(`could not locate hunk near line ${c+1}; its context/removed lines do not match the file. First expected line: ${JSON.stringify(b[0])}`)}(c,a.ops.filter(a=>" "===a.tag||"-"===a.tag).map(a=>a.body),Math.max(0,a.oldStart-1),i);if(b<i)throw Error("overlapping or out-of-order hunks");for(;i<b;)h.push(c[i]),i++;for(let b of a.ops)" "===b.tag?(h.push(c[i]),i++):"-"===b.tag?(i++,k++):(h.push(b.body),j++)}for(;i<c.length;)h.push(c[i]),i++;return{result:h.join("\n"),added:j,removed:k}}(e,a.diff)}catch(a){return u(`Diff apply failed: ${a instanceof Error?a.message:String(a)}. No changes written.`)}let g=i+("\r\n"===d?b.result.replace(/\n/g,"\r\n"):b.result);return await f.promises.writeFile(c,g,"utf8"),(0,o.Wk)(c,"write"),t({path:c,applied:!0,mode:"diff",diff:{added:b.added,removed:b.removed}})}let k=Array.isArray(a.edits)?a.edits:[];if(0===k.length)return u('Provide a non-empty "edits" array of { oldText, newText } or a "diff" string.');let l="number"==typeof a.startLine?a.startLine:void 0,m="number"==typeof a.endLine?a.endLine:void 0,n=y(j),p=j.replace(/\r\n?/g,"\n"),q=0;for(let a of k){let b="string"==typeof a.oldText?a.oldText.replace(/\r\n?/g,"\n"):"",d="string"==typeof a.newText?a.newText.replace(/\r\n?/g,"\n"):"";if(!b)return u(`Edit #${q+1} has an empty "oldText".`);let e="number"==typeof a.startLine?a.startLine:l,f="number"==typeof a.endLine?a.endLine:m,g=void 0!==e||void 0!==f,h=[];for(let a=p.indexOf(b);-1!==a;a=p.indexOf(b,a+1))h.push(a);if(0===h.length)return u(`Edit #${q+1}: "oldText" not found in ${c}. No changes written.`);let i=-1;if(g){let{lo:a,hi:b}=function(a,b,c){if(void 0===b&&void 0===c)return{lo:0,hi:a.length};let d=a.split("\n"),e=Math.max(1,Math.floor(b??1)),f=Math.min(d.length,Math.floor(c??d.length)),g=0;for(let a=0;a<e-1&&a<d.length;a++)g+=d[a].length+1;let h=g;for(let a=e-1;a<f&&a<d.length;a++)h+=d[a].length+ +(a<d.length-1);return{lo:g,hi:Math.max(g,h)}}(p,e,f),c=h.filter(c=>c>=a&&c<b);1===c.length&&(i=c[0])}if(-1===i)if(1!==h.length)return u(`Edit #${q+1}: "oldText" is ambiguous (appears ${h.length} times); add more surrounding context or a tighter startLine/endLine so exactly one occurrence is in range. No changes written.`);else i=h[0];p=p.slice(0,i)+d+p.slice(i+b.length),q+=1}let r=function(a,b){let c=x(a),d=x(b),e=new Map;for(let a of d)e.set(a,(e.get(a)??0)+1);let f=new Map;for(let a of c)f.set(a,(f.get(a)??0)+1);let g=0;for(let[a,b]of f)g+=Math.max(0,b-(e.get(a)??0));let h=0;for(let[a,b]of e)h+=Math.max(0,b-(f.get(a)??0));return{added:h,removed:g}}(j,p),s=i+("\r\n"===n?p.replace(/\n/g,"\r\n"):p);return await f.promises.writeFile(c,s,"utf8"),(0,o.Wk)(c,"write"),t({path:c,mode:"edits",editsApplied:q,diff:r})}async function H(a){try{let b=await f.promises.lstat(a);if(b.isFile())return"file";if(b.isDirectory())return"directory";return"other"}catch{return"other"}}async function I(a,b){let c=await v(a.path,b),d=await f.promises.readdir(c),g=await Promise.all(d.map(async a=>{let b=e().join(c,a),d=await H(b),g=0;try{g=(await f.promises.stat(b)).size}catch{}return{name:a,type:d,size:g}}));return g.sort((a,b)=>a.type===b.type?a.name.localeCompare(b.name):"directory"===a.type?-1:1),t({path:c,entries:g})}async function J(a,b){let c=await v(a.path,b),d=Math.min("number"==typeof a.depth?Math.max(1,Math.floor(a.depth)):3,10),g=0,h=!1;async function i(a,b){let c;if(b>d||h)return[];try{c=await f.promises.readdir(a)}catch{return[]}c.sort((a,b)=>a.localeCompare(b));let j=[];for(let f of c){if(++g>5e3){h=!0;break}let c=e().join(a,f),k=await H(c),l={name:f,type:k};"directory"===k&&b<d&&(l.children=await i(c,b+1)),j.push(l)}return j}let j=await i(c,1);return t({path:c,depth:d,truncated:h,tree:j})}async function K(a,b,c){let d;try{d=await f.promises.stat(a)}catch{return[]}if(!d.isFile()||d.size>5e6)return[];try{let b=await f.promises.open(a,"r");try{let a=Buffer.alloc(Math.min(8e3,d.size));if(a.length&&await b.read(a,0,a.length,0),C(a))return[]}finally{await b.close()}}catch{return[]}let{matches:e}=await D(a,b,Math.max(1,c));return e.map(b=>({path:a,line:b.line,text:b.text}))}async function L(a,b){let c=await v(a.path,b),d="string"==typeof a.namePattern?a.namePattern.toLowerCase():"",g="string"==typeof a.content?a.content:"";if(!d&&!g)return u('Provide "namePattern" and/or "content" to search for.');let h=[],i=!1,j=[];async function k(a){let b;if(!i){try{b=await f.promises.readdir(a)}catch{return}for(let c of b){if(i)return;let b=e().join(a,c),f=await H(b);if(d&&c.toLowerCase().includes(d)&&(h.push({path:b}),h.length>=1e3)){i=!0;return}"directory"===f?await k(b):"file"===f&&g&&j.push(b)}}}if(await k(c),g&&!i)for(let a=0;a<j.length&&!i;a+=16){let b=j.slice(a,a+16);for(let a of(await Promise.all(b.map(a=>K(a,g,1e3))))){for(let b of a)if(h.push(b),h.length>=1e3){i=!0;break}if(i)break}}return t({matches:h,truncated:i})}async function M(a,b){let c=await v(a.path,b),d=await f.promises.stat(c);return t({path:c,type:d.isFile()?"file":d.isDirectory()?"directory":"other",size:d.size,isFile:d.isFile(),isDirectory:d.isDirectory(),createdAt:d.birthtime.toISOString(),modifiedAt:d.mtime.toISOString()})}async function N(a,b){let c=await v(a.path,b);return await f.promises.mkdir(c,{recursive:!0}),t({path:c,created:!0})}async function O(a,b){let c=await v(a.source,b),d=await v(a.destination,b);return await f.promises.mkdir(e().dirname(d),{recursive:!0}),await f.promises.rename(c,d),t({source:c,destination:d})}async function P(a,b){let c=await v(a.path,b),d=!0===a.recursive;return await f.promises.rm(c,{recursive:d,force:!1}),t({path:c,deleted:!0})}async function Q(a){return t({directories:a})}async function R(a,b,c){try{if("file_browser_ui"===a)return function(a,b=!1){return{content:[{type:"text",text:a}],...b?{isError:!0}:{}}}("File browser shown to the user. Waiting for them to select a file — their choice will arrive as a follow-up message. Do not proceed until then.");let d=await (0,m.loadEffectiveRoots)(l.K3,"FLUJO_FS_ROOTS",c);switch(a){case"read_file":return await E(b,d);case"write_file":return await F(b,d);case"edit_file":return await G(b,d);case"list_dir":return await I(b,d);case"dir_tree":return await J(b,d);case"search":return await L(b,d);case"get_file_info":return await M(b,d);case"create_directory":return await N(b,d);case"move":return await O(b,d);case"delete":return await P(b,d);case"get_allowed_directories":return await Q(d);default:return u(`Unknown tool on the built-in filesystem server: ${a}`)}}catch(c){let b=c instanceof Error?c.message:String(c);return p.warn("filesystemCallTool failed",{toolName:a,err:c}),{isError:!0,content:[{type:"text",text:JSON.stringify({error:b})}],structuredContent:{error:b}}}}}};
@@ -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:()=>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}.
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:()=>Q,MH:()=>S,lJ:()=>G,M2:()=>N,HV:()=>P,$Z:()=>T,Xd:()=>I});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}var C=c(38844);let D=(0,d.h)("backend/services/packages/buildPackage"),E=/\$\{global:([A-Za-z0-9_.-]+)\}/g;function F(a,b=new Set){if("string"==typeof a){let c=RegExp(E.source,"g");for(let d of a.matchAll(c))b.add(d[1]);return b}if(Array.isArray(a)){for(let c of a)F(c,b);return b}if(a&&"object"==typeof a)for(let c of Object.values(a))F(c,b);return b}function G(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)&&F(a,c);for(let a of b.models)e.has(a.id)&&F(a,c);for(let a of b.plannedExecutions)f.has(a.id)&&F(a,c);for(let d of I(a.mcpServerNames,b.mcpServers).packaged){for(let a of[...d.envDeclarations,...d.headerDeclarations??[]])a.globalVar&&c.add(a.globalVar),a.globalTemplate&&F(a.globalTemplate,c);for(let a of d.argTemplates??[])F(a.value,c)}return Array.from(c,a=>({name:a,description:`Global variable ${a} required by this package`,required:!0,isSecret:b.globalVariables?.[a]?.isSecret===!0}))}function H(a,b){return a?Object.entries(a).map(([a,c])=>{let d="object"==typeof c&&null!==c&&"boolean"==typeof c.metadata?.isSecret,f=("string"==typeof c?c:c&&"object"==typeof c&&"string"==typeof c.value?c.value:void 0)??"",g=e.mQ.exec(f),h=F(f);return{name:a,isSecret:d?"object"==typeof c&&null!==c&&c.metadata?.isSecret===!0:b(a),...g?{globalVar:g[1]}:{},...!g&&h.size>0?{globalTemplate:f}:{}}}):[]}function I(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=H(a.headers,j.Hm),h="stdio"===a.transport&&Array.isArray(a.args)?a.args.flatMap((a,b)=>"string"==typeof a&&F(a).size>0?[{index:b,value:a}]:[]):[];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:H(a.env,j.xc),...g.length?{headerDeclarations:g}:{},...h.length?{argTemplates:h}:{}})}return{packaged:d,errors:e}}function J(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 K(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=J("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 L(a){let b=[],c=new Set,d=(a,d)=>{for(let e of d??[]){if(!e.isSecret||e.secretRef||e.globalVar||e.globalTemplate)continue;let d=J("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 M(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 N(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(K(a).secret)}for(let c of L(I(a.mcpServerNames,b.mcpServers).packaged))h(c);let i=a.flowIds.map(a=>c.get(a)).filter(a=>!!a);for(let b of M(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 O(){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)),{loadItem:f}=await Promise.resolve().then(c.bind(c,92372)),[g,h,i,j,k]=await Promise.all([a.loadFlows(),b.loadModels(),d(),e().list(),f(C.Z.GLOBAL_ENV_VARS,{})]),l=Array.isArray(i)?i:[];return{flows:g,models:h,mcpServers:l,plannedExecutions:j.map(a=>a.execution),globalVariables:Object.fromEntries(Object.entries(k).map(([a,b])=>[a,{isSecret:"object"==typeof b&&null!==b&&b.metadata?.isSecret===!0||"string"==typeof b&&(b.startsWith("encrypted:")||b.startsWith("encrypted_failed:"))}]))}}async function P(a){let b=await O();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 Q(a,b,c=[],d=[],g=[]){D.info(`Building package "${b.name}" v${b.version}`);let{resolved:h,entities:j}=await P(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=I(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=K(a),b.secret&&p.has(b.secret.name)?{ref:{kind:"none"}}:b);return s(d),{model:a,apiKeyRef:c}});for(let a of L(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=M(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),b.globalTemplate&&F(b.globalTemplate,E);for(let b of a.argTemplates??[])F(b.value,E)}let H=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})}(G(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)}:{},...H.length>0?{globals:H}:{},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 R(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 S(a,b={}){let{resolved:d,entities:e}=await P(a),f=R(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 T(a){let{resolved:b,entities:c}=await P(a),d=i(R(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)}};