flujo-ai 3.31.0 → 3.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (707) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +384 -342
  3. package/.next/app-path-routes-manifest.json +23 -19
  4. package/.next/build-manifest.json +5 -5
  5. package/.next/prerender-manifest.json +24 -24
  6. package/.next/react-loadable-manifest.json +29 -14
  7. package/.next/server/app/_not-found/page.js +1 -1
  8. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  9. package/.next/server/app/_not-found.html +1 -1
  10. package/.next/server/app/_not-found.rsc +2 -2
  11. package/.next/server/app/api/approvals/[id]/route.js +1 -1
  12. package/.next/server/app/api/approvals/[id]/route.js.nft.json +1 -1
  13. package/.next/server/app/api/approvals/[id]/route_client-reference-manifest.js +1 -1
  14. package/.next/server/app/api/approvals/route.js +2 -2
  15. package/.next/server/app/api/approvals/route.js.nft.json +1 -1
  16. package/.next/server/app/api/approvals/route_client-reference-manifest.js +1 -1
  17. package/.next/server/app/api/backup/route.js +1 -1
  18. package/.next/server/app/api/backup/route.js.nft.json +1 -1
  19. package/.next/server/app/api/backup/route_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/browse/route.js +1 -1
  21. package/.next/server/app/api/browse/route.js.nft.json +1 -1
  22. package/.next/server/app/api/browse/route_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/bugs/enhance/route.js +3 -3
  24. package/.next/server/app/api/bugs/enhance/route.js.nft.json +1 -1
  25. package/.next/server/app/api/bugs/enhance/route_client-reference-manifest.js +1 -1
  26. package/.next/server/app/api/cwd/route.js +1 -1
  27. package/.next/server/app/api/cwd/route.js.nft.json +1 -1
  28. package/.next/server/app/api/cwd/route_client-reference-manifest.js +1 -1
  29. package/.next/server/app/api/encryption/secure/route.js +1 -1
  30. package/.next/server/app/api/encryption/secure/route.js.nft.json +1 -1
  31. package/.next/server/app/api/encryption/secure/route_client-reference-manifest.js +1 -1
  32. package/.next/server/app/api/env/route.js +2 -2
  33. package/.next/server/app/api/env/route.js.nft.json +1 -1
  34. package/.next/server/app/api/env/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/flow/[id]/route.js +1 -1
  36. package/.next/server/app/api/flow/[id]/route.js.nft.json +1 -1
  37. package/.next/server/app/api/flow/[id]/route_client-reference-manifest.js +1 -1
  38. package/.next/server/app/api/flow/[id]/versions/[versionId]/route.js +1 -1
  39. package/.next/server/app/api/flow/[id]/versions/[versionId]/route.js.nft.json +1 -1
  40. package/.next/server/app/api/flow/[id]/versions/[versionId]/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/flow/[id]/versions/route.js +1 -1
  42. package/.next/server/app/api/flow/[id]/versions/route.js.nft.json +1 -1
  43. package/.next/server/app/api/flow/[id]/versions/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/flow/compile/route.js +1 -1
  45. package/.next/server/app/api/flow/compile/route.js.nft.json +1 -1
  46. package/.next/server/app/api/flow/compile/route_client-reference-manifest.js +1 -1
  47. package/.next/server/app/api/flow/generate/route.js +1 -1
  48. package/.next/server/app/api/flow/generate/route.js.nft.json +1 -1
  49. package/.next/server/app/api/flow/generate/route_client-reference-manifest.js +1 -1
  50. package/.next/server/app/api/flow/generator/route.js +28 -0
  51. package/.next/server/app/api/flow/generator/route.js.nft.json +1 -0
  52. package/.next/server/app/api/flow/generator/route_client-reference-manifest.js +1 -0
  53. package/.next/server/app/api/flow/improve/route.js +1 -1
  54. package/.next/server/app/api/flow/improve/route.js.nft.json +1 -1
  55. package/.next/server/app/api/flow/improve/route_client-reference-manifest.js +1 -1
  56. package/.next/server/app/api/flow/prompt-renderer/route.js +2 -2
  57. package/.next/server/app/api/flow/prompt-renderer/route.js.nft.json +1 -1
  58. package/.next/server/app/api/flow/prompt-renderer/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/flow/quick-chat/route.js +1 -1
  60. package/.next/server/app/api/flow/quick-chat/route.js.nft.json +1 -1
  61. package/.next/server/app/api/flow/quick-chat/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/flow/repair/route.js +1 -1
  63. package/.next/server/app/api/flow/repair/route.js.nft.json +1 -1
  64. package/.next/server/app/api/flow/repair/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/flow/route.js +1 -1
  66. package/.next/server/app/api/flow/route.js.nft.json +1 -1
  67. package/.next/server/app/api/flow/route_client-reference-manifest.js +1 -1
  68. package/.next/server/app/api/git/route.js +1 -1
  69. package/.next/server/app/api/git/route.js.nft.json +1 -1
  70. package/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  71. package/.next/server/app/api/init/route.js +1 -1
  72. package/.next/server/app/api/init/route.js.nft.json +1 -1
  73. package/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  74. package/.next/server/app/api/local-models/capability/route_client-reference-manifest.js +1 -1
  75. package/.next/server/app/api/local-models/pull/route_client-reference-manifest.js +1 -1
  76. package/.next/server/app/api/local-models/suggest/route_client-reference-manifest.js +1 -1
  77. package/.next/server/app/api/mcp/app-sandbox/route.js +1 -1
  78. package/.next/server/app/api/mcp/app-sandbox/route.js.nft.json +1 -1
  79. package/.next/server/app/api/mcp/app-sandbox/route_client-reference-manifest.js +1 -1
  80. package/.next/server/app/api/mcp/cancel/route.js +2 -2
  81. package/.next/server/app/api/mcp/cancel/route.js.nft.json +1 -1
  82. package/.next/server/app/api/mcp/cancel/route_client-reference-manifest.js +1 -1
  83. package/.next/server/app/api/mcp/oauth-capability/route.js +1 -1
  84. package/.next/server/app/api/mcp/oauth-capability/route.js.nft.json +1 -1
  85. package/.next/server/app/api/mcp/oauth-capability/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js +1 -1
  87. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js.nft.json +1 -1
  88. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route_client-reference-manifest.js +1 -1
  89. package/.next/server/app/api/mcp/servers/[name]/prompts/route.js +1 -1
  90. package/.next/server/app/api/mcp/servers/[name]/prompts/route.js.nft.json +1 -1
  91. package/.next/server/app/api/mcp/servers/[name]/prompts/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js +1 -1
  93. package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js.nft.json +1 -1
  94. package/.next/server/app/api/mcp/servers/[name]/resources/read/route_client-reference-manifest.js +1 -1
  95. package/.next/server/app/api/mcp/servers/[name]/resources/route.js +1 -1
  96. package/.next/server/app/api/mcp/servers/[name]/resources/route.js.nft.json +1 -1
  97. package/.next/server/app/api/mcp/servers/[name]/resources/route_client-reference-manifest.js +1 -1
  98. package/.next/server/app/api/mcp/servers/[name]/route.js +1 -1
  99. package/.next/server/app/api/mcp/servers/[name]/route.js.nft.json +1 -1
  100. package/.next/server/app/api/mcp/servers/[name]/route_client-reference-manifest.js +1 -1
  101. package/.next/server/app/api/mcp/servers/[name]/status/route.js +1 -1
  102. package/.next/server/app/api/mcp/servers/[name]/status/route.js.nft.json +1 -1
  103. package/.next/server/app/api/mcp/servers/[name]/status/route_client-reference-manifest.js +1 -1
  104. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js +1 -1
  105. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js.nft.json +1 -1
  106. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route_client-reference-manifest.js +1 -1
  107. package/.next/server/app/api/mcp/servers/[name]/tools/route.js +1 -1
  108. package/.next/server/app/api/mcp/servers/[name]/tools/route.js.nft.json +1 -1
  109. package/.next/server/app/api/mcp/servers/[name]/tools/route_client-reference-manifest.js +1 -1
  110. package/.next/server/app/api/mcp/servers/route.js +1 -1
  111. package/.next/server/app/api/mcp/servers/route.js.nft.json +1 -1
  112. package/.next/server/app/api/mcp/servers/route_client-reference-manifest.js +1 -1
  113. package/.next/server/app/api/mcp/test-connection/route.js +1 -1
  114. package/.next/server/app/api/mcp/test-connection/route.js.nft.json +1 -1
  115. package/.next/server/app/api/mcp/test-connection/route_client-reference-manifest.js +1 -1
  116. package/.next/server/app/api/mcp/test-connection/stream/route.js +1 -1
  117. package/.next/server/app/api/mcp/test-connection/stream/route.js.nft.json +1 -1
  118. package/.next/server/app/api/mcp/test-connection/stream/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/mcp-registry/route.js +2 -2
  120. package/.next/server/app/api/mcp-registry/route.js.nft.json +1 -1
  121. package/.next/server/app/api/mcp-registry/route_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/mcp-registry/spotlight/route.js +1 -1
  123. package/.next/server/app/api/mcp-registry/spotlight/route.js.nft.json +1 -1
  124. package/.next/server/app/api/mcp-registry/spotlight/route_client-reference-manifest.js +1 -1
  125. package/.next/server/app/api/model/[id]/route.js +1 -1
  126. package/.next/server/app/api/model/[id]/route.js.nft.json +1 -1
  127. package/.next/server/app/api/model/[id]/route_client-reference-manifest.js +1 -1
  128. package/.next/server/app/api/model/provider/route.js +2 -2
  129. package/.next/server/app/api/model/provider/route.js.nft.json +1 -1
  130. package/.next/server/app/api/model/provider/route_client-reference-manifest.js +1 -1
  131. package/.next/server/app/api/model/route.js +1 -1
  132. package/.next/server/app/api/model/route.js.nft.json +1 -1
  133. package/.next/server/app/api/model/route_client-reference-manifest.js +1 -1
  134. package/.next/server/app/api/model/test/route.js +2 -2
  135. package/.next/server/app/api/model/test/route.js.nft.json +1 -1
  136. package/.next/server/app/api/model/test/route_client-reference-manifest.js +1 -1
  137. package/.next/server/app/api/oauth/callback/route.js +2 -2
  138. package/.next/server/app/api/oauth/callback/route.js.nft.json +1 -1
  139. package/.next/server/app/api/oauth/callback/route_client-reference-manifest.js +1 -1
  140. package/.next/server/app/api/oauth/initiate/route.js +2 -2
  141. package/.next/server/app/api/oauth/initiate/route.js.nft.json +1 -1
  142. package/.next/server/app/api/oauth/initiate/route_client-reference-manifest.js +1 -1
  143. package/.next/server/app/api/oauth/reset/route.js +2 -2
  144. package/.next/server/app/api/oauth/reset/route.js.nft.json +1 -1
  145. package/.next/server/app/api/oauth/reset/route_client-reference-manifest.js +1 -1
  146. package/.next/server/app/api/packages/build/route.js +1 -1
  147. package/.next/server/app/api/packages/build/route.js.nft.json +1 -1
  148. package/.next/server/app/api/packages/build/route_client-reference-manifest.js +1 -1
  149. package/.next/server/app/api/packages/derive-secrets/route.js +1 -1
  150. package/.next/server/app/api/packages/derive-secrets/route.js.nft.json +1 -1
  151. package/.next/server/app/api/packages/derive-secrets/route_client-reference-manifest.js +1 -1
  152. package/.next/server/app/api/packages/install/route.js +1 -1
  153. package/.next/server/app/api/packages/install/route.js.nft.json +1 -1
  154. package/.next/server/app/api/packages/install/route_client-reference-manifest.js +1 -1
  155. package/.next/server/app/api/packages/install/status/route.js +1 -1
  156. package/.next/server/app/api/packages/install/status/route.js.nft.json +1 -1
  157. package/.next/server/app/api/packages/install/status/route_client-reference-manifest.js +1 -1
  158. package/.next/server/app/api/packages/installed/route.js +1 -1
  159. package/.next/server/app/api/packages/installed/route.js.nft.json +1 -1
  160. package/.next/server/app/api/packages/installed/route_client-reference-manifest.js +1 -1
  161. package/.next/server/app/api/packages/resolve/route.js +1 -1
  162. package/.next/server/app/api/packages/resolve/route.js.nft.json +1 -1
  163. package/.next/server/app/api/packages/resolve/route_client-reference-manifest.js +1 -1
  164. package/.next/server/app/api/packages/scan-targets/route.js +1 -1
  165. package/.next/server/app/api/packages/scan-targets/route.js.nft.json +1 -1
  166. package/.next/server/app/api/packages/scan-targets/route_client-reference-manifest.js +1 -1
  167. package/.next/server/app/api/packages/search/route.js +1 -1
  168. package/.next/server/app/api/packages/search/route.js.nft.json +1 -1
  169. package/.next/server/app/api/packages/search/route_client-reference-manifest.js +1 -1
  170. package/.next/server/app/api/packages/uninstall/route.js +1 -1
  171. package/.next/server/app/api/packages/uninstall/route.js.nft.json +1 -1
  172. package/.next/server/app/api/packages/uninstall/route_client-reference-manifest.js +1 -1
  173. package/.next/server/app/api/planned-executions/[id]/route.js +2 -2
  174. package/.next/server/app/api/planned-executions/[id]/route.js.nft.json +1 -1
  175. package/.next/server/app/api/planned-executions/[id]/route_client-reference-manifest.js +1 -1
  176. package/.next/server/app/api/planned-executions/[id]/run/route.js +2 -2
  177. package/.next/server/app/api/planned-executions/[id]/run/route.js.nft.json +1 -1
  178. package/.next/server/app/api/planned-executions/[id]/run/route_client-reference-manifest.js +1 -1
  179. package/.next/server/app/api/planned-executions/[id]/runs/route.js +2 -2
  180. package/.next/server/app/api/planned-executions/[id]/runs/route.js.nft.json +1 -1
  181. package/.next/server/app/api/planned-executions/[id]/runs/route_client-reference-manifest.js +1 -1
  182. package/.next/server/app/api/planned-executions/preview-schedule/route.js +1 -1
  183. package/.next/server/app/api/planned-executions/preview-schedule/route.js.nft.json +1 -1
  184. package/.next/server/app/api/planned-executions/preview-schedule/route_client-reference-manifest.js +1 -1
  185. package/.next/server/app/api/planned-executions/reconcile/route.js +1 -1
  186. package/.next/server/app/api/planned-executions/reconcile/route.js.nft.json +1 -1
  187. package/.next/server/app/api/planned-executions/reconcile/route_client-reference-manifest.js +1 -1
  188. package/.next/server/app/api/planned-executions/route.js +1 -1
  189. package/.next/server/app/api/planned-executions/route.js.nft.json +1 -1
  190. package/.next/server/app/api/planned-executions/route_client-reference-manifest.js +1 -1
  191. package/.next/server/app/api/registry/auth/resend/route.js +1 -1
  192. package/.next/server/app/api/registry/auth/resend/route.js.nft.json +1 -1
  193. package/.next/server/app/api/registry/auth/resend/route_client-reference-manifest.js +1 -1
  194. package/.next/server/app/api/registry/auth/reset/route.js +1 -1
  195. package/.next/server/app/api/registry/auth/reset/route.js.nft.json +1 -1
  196. package/.next/server/app/api/registry/auth/reset/route_client-reference-manifest.js +1 -1
  197. package/.next/server/app/api/registry/auth/route.js +1 -1
  198. package/.next/server/app/api/registry/auth/route.js.nft.json +1 -1
  199. package/.next/server/app/api/registry/auth/route_client-reference-manifest.js +1 -1
  200. package/.next/server/app/api/registry/feedback/route.js +1 -0
  201. package/.next/server/app/api/registry/feedback/route.js.nft.json +1 -0
  202. package/.next/server/app/api/registry/feedback/route_client-reference-manifest.js +1 -0
  203. package/.next/server/app/api/registry/oauth/callback/route.js +1 -1
  204. package/.next/server/app/api/registry/oauth/callback/route.js.nft.json +1 -1
  205. package/.next/server/app/api/registry/oauth/callback/route_client-reference-manifest.js +1 -1
  206. package/.next/server/app/api/registry/oauth/initiate/route.js +1 -1
  207. package/.next/server/app/api/registry/oauth/initiate/route.js.nft.json +1 -1
  208. package/.next/server/app/api/registry/oauth/initiate/route_client-reference-manifest.js +1 -1
  209. package/.next/server/app/api/registry/packages/route.js +1 -0
  210. package/.next/server/app/api/registry/packages/route.js.nft.json +1 -0
  211. package/.next/server/app/api/registry/packages/route_client-reference-manifest.js +1 -0
  212. package/.next/server/app/api/registry/publish/route.js +1 -1
  213. package/.next/server/app/api/registry/publish/route.js.nft.json +1 -1
  214. package/.next/server/app/api/registry/publish/route_client-reference-manifest.js +1 -1
  215. package/.next/server/app/api/registry/settings/route.js +1 -1
  216. package/.next/server/app/api/registry/settings/route.js.nft.json +1 -1
  217. package/.next/server/app/api/registry/settings/route_client-reference-manifest.js +1 -1
  218. package/.next/server/app/api/restore/route.js +1 -1
  219. package/.next/server/app/api/restore/route.js.nft.json +1 -1
  220. package/.next/server/app/api/restore/route_client-reference-manifest.js +1 -1
  221. package/.next/server/app/api/runs/active/route.js +2 -2
  222. package/.next/server/app/api/runs/active/route.js.nft.json +1 -1
  223. package/.next/server/app/api/runs/active/route_client-reference-manifest.js +1 -1
  224. package/.next/server/app/api/storage/route.js +1 -1
  225. package/.next/server/app/api/storage/route.js.nft.json +1 -1
  226. package/.next/server/app/api/storage/route_client-reference-manifest.js +1 -1
  227. package/.next/server/app/api/telemetry/daily-active/route.js +1 -0
  228. package/.next/server/app/api/telemetry/daily-active/route.js.nft.json +1 -0
  229. package/.next/server/app/api/telemetry/daily-active/route_client-reference-manifest.js +1 -0
  230. package/.next/server/app/api/update/route.js +1 -1
  231. package/.next/server/app/api/update/route.js.nft.json +1 -1
  232. package/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  233. package/.next/server/app/api/waves/route.js +1 -1
  234. package/.next/server/app/api/waves/route.js.nft.json +1 -1
  235. package/.next/server/app/api/waves/route_client-reference-manifest.js +1 -1
  236. package/.next/server/app/api/webhooks/[id]/route.js +1 -1
  237. package/.next/server/app/api/webhooks/[id]/route.js.nft.json +1 -1
  238. package/.next/server/app/api/webhooks/[id]/route_client-reference-manifest.js +1 -1
  239. package/.next/server/app/chat/page.js +58 -10
  240. package/.next/server/app/chat/page.js.nft.json +1 -1
  241. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  242. package/.next/server/app/chat.html +1 -1
  243. package/.next/server/app/chat.rsc +3 -3
  244. package/.next/server/app/docs/page.js +4 -5
  245. package/.next/server/app/docs/page.js.nft.json +1 -1
  246. package/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  247. package/.next/server/app/docs.html +1 -1
  248. package/.next/server/app/docs.rsc +3 -3
  249. package/.next/server/app/executions/page.js +3 -2
  250. package/.next/server/app/executions/page.js.nft.json +1 -1
  251. package/.next/server/app/executions/page_client-reference-manifest.js +1 -1
  252. package/.next/server/app/executions.html +1 -1
  253. package/.next/server/app/executions.rsc +3 -3
  254. package/.next/server/app/flows/page.js +3 -3
  255. package/.next/server/app/flows/page.js.nft.json +1 -1
  256. package/.next/server/app/flows/page_client-reference-manifest.js +1 -1
  257. package/.next/server/app/flows.html +1 -1
  258. package/.next/server/app/flows.rsc +3 -3
  259. package/.next/server/app/index.html +1 -1
  260. package/.next/server/app/index.rsc +3 -3
  261. package/.next/server/app/mcp/page.js +56 -5
  262. package/.next/server/app/mcp/page.js.nft.json +1 -1
  263. package/.next/server/app/mcp/page_client-reference-manifest.js +1 -1
  264. package/.next/server/app/mcp-flows/route.js +1 -1
  265. package/.next/server/app/mcp-flows/route.js.nft.json +1 -1
  266. package/.next/server/app/mcp-flows/route_client-reference-manifest.js +1 -1
  267. package/.next/server/app/mcp-proxy/[server]/route.js +1 -1
  268. package/.next/server/app/mcp-proxy/[server]/route.js.nft.json +1 -1
  269. package/.next/server/app/mcp-proxy/[server]/route_client-reference-manifest.js +1 -1
  270. package/.next/server/app/mcp.html +1 -1
  271. package/.next/server/app/mcp.rsc +3 -3
  272. package/.next/server/app/models/page.js +2 -2
  273. package/.next/server/app/models/page.js.nft.json +1 -1
  274. package/.next/server/app/models/page_client-reference-manifest.js +1 -1
  275. package/.next/server/app/packages/page.js +2 -2
  276. package/.next/server/app/packages/page.js.nft.json +1 -1
  277. package/.next/server/app/packages/page_client-reference-manifest.js +1 -1
  278. package/.next/server/app/packages.html +1 -1
  279. package/.next/server/app/packages.rsc +3 -3
  280. package/.next/server/app/page.js +5 -3
  281. package/.next/server/app/page.js.nft.json +1 -1
  282. package/.next/server/app/page_client-reference-manifest.js +1 -1
  283. package/.next/server/app/settings/page.js +2 -2
  284. package/.next/server/app/settings/page.js.nft.json +1 -1
  285. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  286. package/.next/server/app/settings.html +1 -1
  287. package/.next/server/app/settings.rsc +3 -3
  288. package/.next/server/app/v1/chat/completions/route.js +1 -1
  289. package/.next/server/app/v1/chat/completions/route.js.nft.json +1 -1
  290. package/.next/server/app/v1/chat/completions/route_client-reference-manifest.js +1 -1
  291. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js +2 -2
  292. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js.nft.json +1 -1
  293. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route_client-reference-manifest.js +1 -1
  294. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js +2 -2
  295. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js.nft.json +1 -1
  296. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route_client-reference-manifest.js +1 -1
  297. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js +1 -1
  298. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js.nft.json +1 -1
  299. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route_client-reference-manifest.js +1 -1
  300. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js +1 -1
  301. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js.nft.json +1 -1
  302. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route_client-reference-manifest.js +1 -1
  303. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js +2 -2
  304. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js.nft.json +1 -1
  305. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route_client-reference-manifest.js +1 -1
  306. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js +2 -2
  307. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js.nft.json +1 -1
  308. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route_client-reference-manifest.js +1 -1
  309. package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route.js +2 -2
  310. package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route.js.nft.json +1 -1
  311. package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route_client-reference-manifest.js +1 -1
  312. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route.js +1 -1
  313. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route.js.nft.json +1 -1
  314. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route_client-reference-manifest.js +1 -1
  315. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js +1 -1
  316. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js.nft.json +1 -1
  317. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route_client-reference-manifest.js +1 -1
  318. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js +2 -2
  319. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js.nft.json +1 -1
  320. package/.next/server/app/v1/chat/conversations/[conversationId]/route_client-reference-manifest.js +1 -1
  321. package/.next/server/app/v1/chat/conversations/route.js +2 -2
  322. package/.next/server/app/v1/chat/conversations/route.js.nft.json +1 -1
  323. package/.next/server/app/v1/chat/conversations/route_client-reference-manifest.js +1 -1
  324. package/.next/server/app/v1/chat/events/route.js +3 -3
  325. package/.next/server/app/v1/chat/events/route.js.nft.json +1 -1
  326. package/.next/server/app/v1/chat/events/route_client-reference-manifest.js +1 -1
  327. package/.next/server/app/v1/models/route.js +2 -2
  328. package/.next/server/app/v1/models/route.js.nft.json +1 -1
  329. package/.next/server/app/v1/models/route_client-reference-manifest.js +1 -1
  330. package/.next/server/app/waves/page.js +3 -3
  331. package/.next/server/app/waves/page.js.nft.json +1 -1
  332. package/.next/server/app/waves/page_client-reference-manifest.js +1 -1
  333. package/.next/server/app/waves.html +1 -1
  334. package/.next/server/app/waves.rsc +3 -3
  335. package/.next/server/app-paths-manifest.json +23 -19
  336. package/.next/server/chunks/1114.js +1 -1
  337. package/.next/server/chunks/1226.js +1 -1
  338. package/.next/server/chunks/1227.js +1 -0
  339. package/.next/server/chunks/1314.js +1 -1
  340. package/.next/server/chunks/1439.js +1 -0
  341. package/.next/server/chunks/1578.js +1 -1
  342. package/.next/server/chunks/1634.js +1 -1
  343. package/.next/server/chunks/166.js +5 -5
  344. package/.next/server/chunks/1664.js +2 -0
  345. package/.next/server/chunks/180.js +12 -0
  346. package/.next/server/chunks/227.js +1 -5
  347. package/.next/server/chunks/2273.js +2 -2
  348. package/.next/server/chunks/2372.js +2 -0
  349. package/.next/server/chunks/2859.js +1 -1
  350. package/.next/server/chunks/3128.js +4 -4
  351. package/.next/server/chunks/3653.js +2 -0
  352. package/.next/server/chunks/3717.js +1 -0
  353. package/.next/server/chunks/3855.js +1 -0
  354. package/.next/server/chunks/4013.js +1 -0
  355. package/.next/server/chunks/4308.js +4 -0
  356. package/.next/server/chunks/{4685.js → 4466.js} +1 -1
  357. package/.next/server/chunks/4551.js +1 -1
  358. package/.next/server/chunks/4663.js +1 -0
  359. package/.next/server/chunks/4771.js +1 -1
  360. package/.next/server/chunks/4822.js +1 -0
  361. package/.next/server/chunks/5067.js +1 -1
  362. package/.next/server/chunks/519.js +2 -0
  363. package/.next/server/chunks/5285.js +1 -0
  364. package/.next/server/chunks/5309.js +78 -0
  365. package/.next/server/chunks/544.js +28 -27
  366. package/.next/server/chunks/5463.js +1 -1
  367. package/.next/server/chunks/5544.js +5 -5
  368. package/.next/server/chunks/5703.js +2 -0
  369. package/.next/server/chunks/6034.js +1 -1
  370. package/.next/server/chunks/{5708.js → 6041.js} +3 -4
  371. package/.next/server/chunks/6226.js +1 -1
  372. package/.next/server/chunks/6747.js +435 -0
  373. package/.next/server/chunks/6967.js +82 -0
  374. package/.next/server/chunks/{5548.js → 7058.js} +2 -2
  375. package/.next/server/chunks/{4566.js → 7069.js} +3 -3
  376. package/.next/server/chunks/{2388.js → 7104.js} +1 -1
  377. package/.next/server/chunks/7519.js +1 -0
  378. package/.next/server/chunks/7628.js +1 -0
  379. package/.next/server/chunks/7630.js +11 -0
  380. package/.next/server/chunks/{3030.js → 7674.js} +1 -1
  381. package/.next/server/chunks/{2866.js → 7891.js} +2 -2
  382. package/.next/server/chunks/793.js +3 -3
  383. package/.next/server/chunks/7965.js +39 -0
  384. package/.next/server/chunks/{6404.js → 7993.js} +2 -2
  385. package/.next/server/chunks/8284.js +42 -0
  386. package/.next/server/chunks/8645.js +1 -1
  387. package/.next/server/chunks/87.js +1 -0
  388. package/.next/server/chunks/8739.js +1 -2
  389. package/.next/server/chunks/{3912.js → 9085.js} +2 -2
  390. package/.next/server/chunks/9235.js +29 -0
  391. package/.next/server/chunks/9724.js +3 -3
  392. package/.next/server/chunks/9983.js +1 -1
  393. package/.next/server/functions-config-manifest.json +1 -1
  394. package/.next/server/instrumentation.js +1 -1
  395. package/.next/server/instrumentation.js.nft.json +1 -1
  396. package/.next/server/middleware-build-manifest.js +1 -1
  397. package/.next/server/middleware-manifest.json +5 -5
  398. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  399. package/.next/server/pages/404.html +1 -1
  400. package/.next/server/pages/500.html +1 -1
  401. package/.next/server/server-reference-manifest.js +1 -1
  402. package/.next/server/server-reference-manifest.json +1 -1
  403. package/.next/static/Zz_Vh59XdtLIPcf-PxCpo/_buildManifest.js +1 -0
  404. package/.next/static/chunks/1675-773454288de4309d.js +1 -0
  405. package/.next/static/chunks/2005.4eea65c00d9a29cd.js +1 -0
  406. package/.next/static/chunks/2318-13ef0d3048e97834.js +1 -0
  407. package/.next/static/chunks/3429-34fb1a84aed96703.js +1 -0
  408. package/.next/static/chunks/361.bb75b03b740930cd.js +1 -0
  409. package/.next/static/chunks/3772-20197853c04a6993.js +1 -0
  410. package/.next/static/chunks/422-61b173ba64cf0c94.js +1 -0
  411. package/.next/static/chunks/{3189-fa8ec6d719d5e72b.js → 4386-e9621d3c94969a68.js} +1 -1
  412. package/.next/static/chunks/4555-c9070f8c79bccfad.js +39 -0
  413. package/.next/static/chunks/4919-6c8a48e3cc642349.js +1 -0
  414. package/.next/static/chunks/4929-150b03595474c9d8.js +1 -0
  415. package/.next/static/chunks/5733-1419095a28c1ddc3.js +1 -0
  416. package/.next/static/chunks/639-90ed75d402dc872b.js +1 -0
  417. package/.next/static/chunks/{3452-a639f121f2953f50.js → 6428-951188daa6f74b86.js} +3 -3
  418. package/.next/static/chunks/6430-8c6dac4a758119f2.js +1 -0
  419. package/.next/static/chunks/6539-118a0084e0bfae34.js +1 -0
  420. package/.next/static/chunks/6733-c9029143901e62e9.js +1 -0
  421. package/.next/static/chunks/7264-91d1fa99abcd91ad.js +1 -0
  422. package/.next/static/chunks/7328-c8a51bb8c7470d77.js +1 -0
  423. package/.next/static/chunks/7391-5a0abd837ba241f5.js +1 -0
  424. package/.next/static/chunks/7561-2b366ddcbc3cc0ec.js +1 -0
  425. package/.next/static/chunks/8124-4a80e3201b8e51b0.js +1 -0
  426. package/.next/static/chunks/{2969.eb9ff8cd2a5034b0.js → 8345.bc5534ec13abc9ee.js} +1 -1
  427. package/.next/static/chunks/8404-5aa8ea49197b98b8.js +1 -0
  428. package/.next/static/chunks/{8405.73e8be2c8e5b55c5.js → 8405.a425f94b6b13d2be.js} +1 -1
  429. package/.next/static/chunks/8551-a28272acfda62ac9.js +1 -0
  430. package/.next/static/chunks/8650-5294c6ed1173b014.js +1 -0
  431. package/.next/static/chunks/{9164-840f056a0e11d979.js → 9164-de1d167d87614a6d.js} +1 -1
  432. package/.next/static/chunks/9203-786f457ecf60b49c.js +1 -0
  433. package/.next/static/chunks/9345-11d6e48d892b1862.js +8 -0
  434. package/.next/static/chunks/9562-f8371be653010627.js +1 -0
  435. package/.next/static/chunks/981-dd289e60d81da0d1.js +1 -0
  436. package/.next/static/chunks/9951-566fc6b05c12209e.js +1 -0
  437. package/.next/static/chunks/app/api/approvals/[id]/route-9ea2990be4b67136.js +1 -0
  438. package/.next/static/chunks/app/api/approvals/route-9ea2990be4b67136.js +1 -0
  439. package/.next/static/chunks/app/api/backup/route-9ea2990be4b67136.js +1 -0
  440. package/.next/static/chunks/app/api/browse/route-9ea2990be4b67136.js +1 -0
  441. package/.next/static/chunks/app/api/bugs/enhance/route-9ea2990be4b67136.js +1 -0
  442. package/.next/static/chunks/app/api/cwd/route-9ea2990be4b67136.js +1 -0
  443. package/.next/static/chunks/app/api/encryption/secure/route-9ea2990be4b67136.js +1 -0
  444. package/.next/static/chunks/app/api/env/route-9ea2990be4b67136.js +1 -0
  445. package/.next/static/chunks/app/api/flow/[id]/route-9ea2990be4b67136.js +1 -0
  446. package/.next/static/chunks/app/api/flow/[id]/versions/[versionId]/route-9ea2990be4b67136.js +1 -0
  447. package/.next/static/chunks/app/api/flow/[id]/versions/route-9ea2990be4b67136.js +1 -0
  448. package/.next/static/chunks/app/api/flow/compile/route-9ea2990be4b67136.js +1 -0
  449. package/.next/static/chunks/app/api/flow/generate/route-9ea2990be4b67136.js +1 -0
  450. package/.next/static/chunks/app/api/flow/generator/route-9ea2990be4b67136.js +1 -0
  451. package/.next/static/chunks/app/api/flow/improve/route-9ea2990be4b67136.js +1 -0
  452. package/.next/static/chunks/app/api/flow/prompt-renderer/route-9ea2990be4b67136.js +1 -0
  453. package/.next/static/chunks/app/api/flow/quick-chat/route-9ea2990be4b67136.js +1 -0
  454. package/.next/static/chunks/app/api/flow/repair/route-9ea2990be4b67136.js +1 -0
  455. package/.next/static/chunks/app/api/flow/route-9ea2990be4b67136.js +1 -0
  456. package/.next/static/chunks/app/api/git/route-9ea2990be4b67136.js +1 -0
  457. package/.next/static/chunks/app/api/init/route-9ea2990be4b67136.js +1 -0
  458. package/.next/static/chunks/app/api/local-models/capability/route-9ea2990be4b67136.js +1 -0
  459. package/.next/static/chunks/app/api/local-models/pull/route-9ea2990be4b67136.js +1 -0
  460. package/.next/static/chunks/app/api/local-models/suggest/route-9ea2990be4b67136.js +1 -0
  461. package/.next/static/chunks/app/api/mcp/app-sandbox/route-9ea2990be4b67136.js +1 -0
  462. package/.next/static/chunks/app/api/mcp/cancel/route-9ea2990be4b67136.js +1 -0
  463. package/.next/static/chunks/app/api/mcp/oauth-capability/route-9ea2990be4b67136.js +1 -0
  464. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-9ea2990be4b67136.js +1 -0
  465. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-9ea2990be4b67136.js +1 -0
  466. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-9ea2990be4b67136.js +1 -0
  467. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-9ea2990be4b67136.js +1 -0
  468. package/.next/static/chunks/app/api/mcp/servers/[name]/route-9ea2990be4b67136.js +1 -0
  469. package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-9ea2990be4b67136.js +1 -0
  470. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-9ea2990be4b67136.js +1 -0
  471. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-9ea2990be4b67136.js +1 -0
  472. package/.next/static/chunks/app/api/mcp/servers/route-9ea2990be4b67136.js +1 -0
  473. package/.next/static/chunks/app/api/mcp/test-connection/route-9ea2990be4b67136.js +1 -0
  474. package/.next/static/chunks/app/api/mcp/test-connection/stream/route-9ea2990be4b67136.js +1 -0
  475. package/.next/static/chunks/app/api/mcp-registry/route-9ea2990be4b67136.js +1 -0
  476. package/.next/static/chunks/app/api/mcp-registry/spotlight/route-9ea2990be4b67136.js +1 -0
  477. package/.next/static/chunks/app/api/model/[id]/route-9ea2990be4b67136.js +1 -0
  478. package/.next/static/chunks/app/api/model/provider/route-9ea2990be4b67136.js +1 -0
  479. package/.next/static/chunks/app/api/model/route-9ea2990be4b67136.js +1 -0
  480. package/.next/static/chunks/app/api/model/test/route-9ea2990be4b67136.js +1 -0
  481. package/.next/static/chunks/app/api/oauth/callback/route-9ea2990be4b67136.js +1 -0
  482. package/.next/static/chunks/app/api/oauth/initiate/route-9ea2990be4b67136.js +1 -0
  483. package/.next/static/chunks/app/api/oauth/reset/route-9ea2990be4b67136.js +1 -0
  484. package/.next/static/chunks/app/api/packages/build/route-9ea2990be4b67136.js +1 -0
  485. package/.next/static/chunks/app/api/packages/derive-secrets/route-9ea2990be4b67136.js +1 -0
  486. package/.next/static/chunks/app/api/packages/install/route-9ea2990be4b67136.js +1 -0
  487. package/.next/static/chunks/app/api/packages/install/status/route-9ea2990be4b67136.js +1 -0
  488. package/.next/static/chunks/app/api/packages/installed/route-9ea2990be4b67136.js +1 -0
  489. package/.next/static/chunks/app/api/packages/resolve/route-9ea2990be4b67136.js +1 -0
  490. package/.next/static/chunks/app/api/packages/scan-targets/route-9ea2990be4b67136.js +1 -0
  491. package/.next/static/chunks/app/api/packages/search/route-9ea2990be4b67136.js +1 -0
  492. package/.next/static/chunks/app/api/packages/uninstall/route-9ea2990be4b67136.js +1 -0
  493. package/.next/static/chunks/app/api/planned-executions/[id]/route-9ea2990be4b67136.js +1 -0
  494. package/.next/static/chunks/app/api/planned-executions/[id]/run/route-9ea2990be4b67136.js +1 -0
  495. package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-9ea2990be4b67136.js +1 -0
  496. package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-9ea2990be4b67136.js +1 -0
  497. package/.next/static/chunks/app/api/planned-executions/reconcile/route-9ea2990be4b67136.js +1 -0
  498. package/.next/static/chunks/app/api/planned-executions/route-9ea2990be4b67136.js +1 -0
  499. package/.next/static/chunks/app/api/registry/auth/resend/route-9ea2990be4b67136.js +1 -0
  500. package/.next/static/chunks/app/api/registry/auth/reset/route-9ea2990be4b67136.js +1 -0
  501. package/.next/static/chunks/app/api/registry/auth/route-9ea2990be4b67136.js +1 -0
  502. package/.next/static/chunks/app/api/registry/feedback/route-9ea2990be4b67136.js +1 -0
  503. package/.next/static/chunks/app/api/registry/oauth/callback/route-9ea2990be4b67136.js +1 -0
  504. package/.next/static/chunks/app/api/registry/oauth/initiate/route-9ea2990be4b67136.js +1 -0
  505. package/.next/static/chunks/app/api/registry/packages/route-9ea2990be4b67136.js +1 -0
  506. package/.next/static/chunks/app/api/registry/publish/route-9ea2990be4b67136.js +1 -0
  507. package/.next/static/chunks/app/api/registry/settings/route-9ea2990be4b67136.js +1 -0
  508. package/.next/static/chunks/app/api/restore/route-9ea2990be4b67136.js +1 -0
  509. package/.next/static/chunks/app/api/runs/active/route-9ea2990be4b67136.js +1 -0
  510. package/.next/static/chunks/app/api/storage/route-9ea2990be4b67136.js +1 -0
  511. package/.next/static/chunks/app/api/telemetry/daily-active/route-9ea2990be4b67136.js +1 -0
  512. package/.next/static/chunks/app/api/update/route-9ea2990be4b67136.js +1 -0
  513. package/.next/static/chunks/app/api/waves/route-9ea2990be4b67136.js +1 -0
  514. package/.next/static/chunks/app/api/webhooks/[id]/route-9ea2990be4b67136.js +1 -0
  515. package/.next/static/chunks/app/chat/page-bc7807593b8b7394.js +1 -0
  516. package/.next/static/chunks/app/docs/page-3b9ce48854b2147d.js +1 -0
  517. package/.next/static/chunks/app/executions/page-8296fd69c439ccee.js +1 -0
  518. package/.next/static/chunks/app/flows/page-87fb466e491fc068.js +1 -0
  519. package/.next/static/chunks/app/layout-abed1f211e03152f.js +1 -0
  520. package/.next/static/chunks/app/mcp/page-1648e6fde0c41461.js +1 -0
  521. package/.next/static/chunks/app/mcp-flows/route-9ea2990be4b67136.js +1 -0
  522. package/.next/static/chunks/app/mcp-proxy/[server]/route-9ea2990be4b67136.js +1 -0
  523. package/.next/static/chunks/app/models/page-a5e2437356b06db8.js +1 -0
  524. package/.next/static/chunks/app/packages/page-fba5696f33d9cdfb.js +1 -0
  525. package/.next/static/chunks/app/page-2f9da78a4891731a.js +1 -0
  526. package/.next/static/chunks/app/settings/page-2fc3a70bfd25c48b.js +1 -0
  527. package/.next/static/chunks/app/v1/chat/completions/route-9ea2990be4b67136.js +1 -0
  528. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-9ea2990be4b67136.js +1 -0
  529. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-9ea2990be4b67136.js +1 -0
  530. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-9ea2990be4b67136.js +1 -0
  531. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-9ea2990be4b67136.js +1 -0
  532. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-9ea2990be4b67136.js +1 -0
  533. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-9ea2990be4b67136.js +1 -0
  534. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/inject/route-9ea2990be4b67136.js +1 -0
  535. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/resources/route-9ea2990be4b67136.js +1 -0
  536. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-9ea2990be4b67136.js +1 -0
  537. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-9ea2990be4b67136.js +1 -0
  538. package/.next/static/chunks/app/v1/chat/conversations/route-9ea2990be4b67136.js +1 -0
  539. package/.next/static/chunks/app/v1/chat/events/route-9ea2990be4b67136.js +1 -0
  540. package/.next/static/chunks/app/v1/models/route-9ea2990be4b67136.js +1 -0
  541. package/.next/static/chunks/app/waves/{page-3cf4b47b12662196.js → page-dc99a16141dd902b.js} +1 -1
  542. package/.next/static/chunks/webpack-d5d737ff6a86674f.js +1 -0
  543. package/.next/trace +10 -10
  544. package/.next/types/app/api/flow/generator/route.ts +347 -0
  545. package/.next/types/app/api/registry/feedback/route.ts +347 -0
  546. package/.next/types/app/api/registry/packages/route.ts +347 -0
  547. package/.next/types/app/api/telemetry/daily-active/route.ts +347 -0
  548. package/.next/types/routes.d.ts +5 -1
  549. package/.next/types/validator.ts +36 -0
  550. package/README.md +58 -18
  551. package/next.config.mjs +2 -2
  552. package/package.json +3 -2
  553. package/.next/server/chunks/2180.js +0 -1
  554. package/.next/server/chunks/237.js +0 -1
  555. package/.next/server/chunks/3392.js +0 -82
  556. package/.next/server/chunks/3570.js +0 -372
  557. package/.next/server/chunks/4366.js +0 -2
  558. package/.next/server/chunks/4961.js +0 -2
  559. package/.next/server/chunks/5040.js +0 -53
  560. package/.next/server/chunks/510.js +0 -1
  561. package/.next/server/chunks/5150.js +0 -1
  562. package/.next/server/chunks/5561.js +0 -1
  563. package/.next/server/chunks/5705.js +0 -1
  564. package/.next/server/chunks/5829.js +0 -1
  565. package/.next/server/chunks/694.js +0 -3
  566. package/.next/server/chunks/7579.js +0 -83
  567. package/.next/server/chunks/7724.js +0 -1
  568. package/.next/server/chunks/8034.js +0 -1
  569. package/.next/server/chunks/8037.js +0 -1
  570. package/.next/server/chunks/8192.js +0 -12
  571. package/.next/server/chunks/826.js +0 -2
  572. package/.next/server/chunks/8366.js +0 -90
  573. package/.next/server/chunks/848.js +0 -39
  574. package/.next/server/chunks/8615.js +0 -1
  575. package/.next/server/chunks/8851.js +0 -1
  576. package/.next/server/chunks/9313.js +0 -1
  577. package/.next/server/chunks/9537.js +0 -39
  578. package/.next/server/chunks/9576.js +0 -2
  579. package/.next/server/chunks/9632.js +0 -1
  580. package/.next/server/chunks/9671.js +0 -1
  581. package/.next/server/chunks/9857.js +0 -1
  582. package/.next/static/chunks/1496-d478bce7d7c85080.js +0 -1
  583. package/.next/static/chunks/1572-b663a83bba28a0a1.js +0 -8
  584. package/.next/static/chunks/1641-e5ff8f112da0a335.js +0 -1
  585. package/.next/static/chunks/1988-bd73f26184e930c1.js +0 -1
  586. package/.next/static/chunks/2266-d812473724cc6643.js +0 -1
  587. package/.next/static/chunks/3089.a0856f8093b90939.js +0 -1
  588. package/.next/static/chunks/3560-5bdceef09b50e1c3.js +0 -1
  589. package/.next/static/chunks/3672-cd86ace43288da79.js +0 -1
  590. package/.next/static/chunks/3711-0050bb4d345c2c9c.js +0 -1
  591. package/.next/static/chunks/4147-20897d83b3cd3978.js +0 -39
  592. package/.next/static/chunks/435-17c79f3b9f8dd38d.js +0 -1
  593. package/.next/static/chunks/469-1f043fe082d9f475.js +0 -1
  594. package/.next/static/chunks/4740-62814d07b2b7f760.js +0 -1
  595. package/.next/static/chunks/5441-cb0c31de8bce65c3.js +0 -1
  596. package/.next/static/chunks/7111-44538f8a64241b74.js +0 -1
  597. package/.next/static/chunks/8041-05830e887c133085.js +0 -1
  598. package/.next/static/chunks/812-dfe7ba07ddb7a565.js +0 -1
  599. package/.next/static/chunks/8401-0f39d91810180a88.js +0 -1
  600. package/.next/static/chunks/8404-14ef0345dc401ac5.js +0 -1
  601. package/.next/static/chunks/8678-c6c6be2672f337f6.js +0 -1
  602. package/.next/static/chunks/8834-faf121e257b517d5.js +0 -1
  603. package/.next/static/chunks/8855-f802599c4af81cca.js +0 -1
  604. package/.next/static/chunks/9562-5494feecd8c6f7a3.js +0 -1
  605. package/.next/static/chunks/app/api/approvals/[id]/route-1a4c9e7a416ccbcf.js +0 -1
  606. package/.next/static/chunks/app/api/approvals/route-1a4c9e7a416ccbcf.js +0 -1
  607. package/.next/static/chunks/app/api/backup/route-1a4c9e7a416ccbcf.js +0 -1
  608. package/.next/static/chunks/app/api/browse/route-1a4c9e7a416ccbcf.js +0 -1
  609. package/.next/static/chunks/app/api/bugs/enhance/route-1a4c9e7a416ccbcf.js +0 -1
  610. package/.next/static/chunks/app/api/cwd/route-1a4c9e7a416ccbcf.js +0 -1
  611. package/.next/static/chunks/app/api/encryption/secure/route-1a4c9e7a416ccbcf.js +0 -1
  612. package/.next/static/chunks/app/api/env/route-1a4c9e7a416ccbcf.js +0 -1
  613. package/.next/static/chunks/app/api/flow/[id]/route-1a4c9e7a416ccbcf.js +0 -1
  614. package/.next/static/chunks/app/api/flow/[id]/versions/[versionId]/route-1a4c9e7a416ccbcf.js +0 -1
  615. package/.next/static/chunks/app/api/flow/[id]/versions/route-1a4c9e7a416ccbcf.js +0 -1
  616. package/.next/static/chunks/app/api/flow/compile/route-1a4c9e7a416ccbcf.js +0 -1
  617. package/.next/static/chunks/app/api/flow/generate/route-1a4c9e7a416ccbcf.js +0 -1
  618. package/.next/static/chunks/app/api/flow/improve/route-1a4c9e7a416ccbcf.js +0 -1
  619. package/.next/static/chunks/app/api/flow/prompt-renderer/route-1a4c9e7a416ccbcf.js +0 -1
  620. package/.next/static/chunks/app/api/flow/quick-chat/route-1a4c9e7a416ccbcf.js +0 -1
  621. package/.next/static/chunks/app/api/flow/repair/route-1a4c9e7a416ccbcf.js +0 -1
  622. package/.next/static/chunks/app/api/flow/route-1a4c9e7a416ccbcf.js +0 -1
  623. package/.next/static/chunks/app/api/git/route-1a4c9e7a416ccbcf.js +0 -1
  624. package/.next/static/chunks/app/api/init/route-1a4c9e7a416ccbcf.js +0 -1
  625. package/.next/static/chunks/app/api/local-models/capability/route-1a4c9e7a416ccbcf.js +0 -1
  626. package/.next/static/chunks/app/api/local-models/pull/route-1a4c9e7a416ccbcf.js +0 -1
  627. package/.next/static/chunks/app/api/local-models/suggest/route-1a4c9e7a416ccbcf.js +0 -1
  628. package/.next/static/chunks/app/api/mcp/app-sandbox/route-1a4c9e7a416ccbcf.js +0 -1
  629. package/.next/static/chunks/app/api/mcp/cancel/route-1a4c9e7a416ccbcf.js +0 -1
  630. package/.next/static/chunks/app/api/mcp/oauth-capability/route-1a4c9e7a416ccbcf.js +0 -1
  631. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-1a4c9e7a416ccbcf.js +0 -1
  632. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-1a4c9e7a416ccbcf.js +0 -1
  633. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-1a4c9e7a416ccbcf.js +0 -1
  634. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-1a4c9e7a416ccbcf.js +0 -1
  635. package/.next/static/chunks/app/api/mcp/servers/[name]/route-1a4c9e7a416ccbcf.js +0 -1
  636. package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-1a4c9e7a416ccbcf.js +0 -1
  637. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-1a4c9e7a416ccbcf.js +0 -1
  638. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-1a4c9e7a416ccbcf.js +0 -1
  639. package/.next/static/chunks/app/api/mcp/servers/route-1a4c9e7a416ccbcf.js +0 -1
  640. package/.next/static/chunks/app/api/mcp/test-connection/route-1a4c9e7a416ccbcf.js +0 -1
  641. package/.next/static/chunks/app/api/mcp/test-connection/stream/route-1a4c9e7a416ccbcf.js +0 -1
  642. package/.next/static/chunks/app/api/mcp-registry/route-1a4c9e7a416ccbcf.js +0 -1
  643. package/.next/static/chunks/app/api/mcp-registry/spotlight/route-1a4c9e7a416ccbcf.js +0 -1
  644. package/.next/static/chunks/app/api/model/[id]/route-1a4c9e7a416ccbcf.js +0 -1
  645. package/.next/static/chunks/app/api/model/provider/route-1a4c9e7a416ccbcf.js +0 -1
  646. package/.next/static/chunks/app/api/model/route-1a4c9e7a416ccbcf.js +0 -1
  647. package/.next/static/chunks/app/api/model/test/route-1a4c9e7a416ccbcf.js +0 -1
  648. package/.next/static/chunks/app/api/oauth/callback/route-1a4c9e7a416ccbcf.js +0 -1
  649. package/.next/static/chunks/app/api/oauth/initiate/route-1a4c9e7a416ccbcf.js +0 -1
  650. package/.next/static/chunks/app/api/oauth/reset/route-1a4c9e7a416ccbcf.js +0 -1
  651. package/.next/static/chunks/app/api/packages/build/route-1a4c9e7a416ccbcf.js +0 -1
  652. package/.next/static/chunks/app/api/packages/derive-secrets/route-1a4c9e7a416ccbcf.js +0 -1
  653. package/.next/static/chunks/app/api/packages/install/route-1a4c9e7a416ccbcf.js +0 -1
  654. package/.next/static/chunks/app/api/packages/install/status/route-1a4c9e7a416ccbcf.js +0 -1
  655. package/.next/static/chunks/app/api/packages/installed/route-1a4c9e7a416ccbcf.js +0 -1
  656. package/.next/static/chunks/app/api/packages/resolve/route-1a4c9e7a416ccbcf.js +0 -1
  657. package/.next/static/chunks/app/api/packages/scan-targets/route-1a4c9e7a416ccbcf.js +0 -1
  658. package/.next/static/chunks/app/api/packages/search/route-1a4c9e7a416ccbcf.js +0 -1
  659. package/.next/static/chunks/app/api/packages/uninstall/route-1a4c9e7a416ccbcf.js +0 -1
  660. package/.next/static/chunks/app/api/planned-executions/[id]/route-1a4c9e7a416ccbcf.js +0 -1
  661. package/.next/static/chunks/app/api/planned-executions/[id]/run/route-1a4c9e7a416ccbcf.js +0 -1
  662. package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-1a4c9e7a416ccbcf.js +0 -1
  663. package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-1a4c9e7a416ccbcf.js +0 -1
  664. package/.next/static/chunks/app/api/planned-executions/reconcile/route-1a4c9e7a416ccbcf.js +0 -1
  665. package/.next/static/chunks/app/api/planned-executions/route-1a4c9e7a416ccbcf.js +0 -1
  666. package/.next/static/chunks/app/api/registry/auth/resend/route-1a4c9e7a416ccbcf.js +0 -1
  667. package/.next/static/chunks/app/api/registry/auth/reset/route-1a4c9e7a416ccbcf.js +0 -1
  668. package/.next/static/chunks/app/api/registry/auth/route-1a4c9e7a416ccbcf.js +0 -1
  669. package/.next/static/chunks/app/api/registry/oauth/callback/route-1a4c9e7a416ccbcf.js +0 -1
  670. package/.next/static/chunks/app/api/registry/oauth/initiate/route-1a4c9e7a416ccbcf.js +0 -1
  671. package/.next/static/chunks/app/api/registry/publish/route-1a4c9e7a416ccbcf.js +0 -1
  672. package/.next/static/chunks/app/api/registry/settings/route-1a4c9e7a416ccbcf.js +0 -1
  673. package/.next/static/chunks/app/api/restore/route-1a4c9e7a416ccbcf.js +0 -1
  674. package/.next/static/chunks/app/api/runs/active/route-1a4c9e7a416ccbcf.js +0 -1
  675. package/.next/static/chunks/app/api/storage/route-1a4c9e7a416ccbcf.js +0 -1
  676. package/.next/static/chunks/app/api/update/route-1a4c9e7a416ccbcf.js +0 -1
  677. package/.next/static/chunks/app/api/waves/route-1a4c9e7a416ccbcf.js +0 -1
  678. package/.next/static/chunks/app/api/webhooks/[id]/route-1a4c9e7a416ccbcf.js +0 -1
  679. package/.next/static/chunks/app/chat/page-558edb21321a32d0.js +0 -1
  680. package/.next/static/chunks/app/docs/page-fc30f613607b8a26.js +0 -1
  681. package/.next/static/chunks/app/executions/page-e71689c7256af1e8.js +0 -1
  682. package/.next/static/chunks/app/flows/page-e90e8d7b4c1bd1c8.js +0 -1
  683. package/.next/static/chunks/app/layout-038b35b382eef11d.js +0 -1
  684. package/.next/static/chunks/app/mcp/page-6041156fc67ef361.js +0 -1
  685. package/.next/static/chunks/app/mcp-flows/route-1a4c9e7a416ccbcf.js +0 -1
  686. package/.next/static/chunks/app/mcp-proxy/[server]/route-1a4c9e7a416ccbcf.js +0 -1
  687. package/.next/static/chunks/app/models/page-d16f2721e7a93b43.js +0 -1
  688. package/.next/static/chunks/app/packages/page-c6b0e7aa95bc1064.js +0 -1
  689. package/.next/static/chunks/app/page-5c7fccd019942d46.js +0 -1
  690. package/.next/static/chunks/app/settings/page-e3d9ffd69d16873a.js +0 -1
  691. package/.next/static/chunks/app/v1/chat/completions/route-1a4c9e7a416ccbcf.js +0 -1
  692. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-1a4c9e7a416ccbcf.js +0 -1
  693. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-1a4c9e7a416ccbcf.js +0 -1
  694. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-1a4c9e7a416ccbcf.js +0 -1
  695. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-1a4c9e7a416ccbcf.js +0 -1
  696. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-1a4c9e7a416ccbcf.js +0 -1
  697. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-1a4c9e7a416ccbcf.js +0 -1
  698. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/inject/route-1a4c9e7a416ccbcf.js +0 -1
  699. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/resources/route-1a4c9e7a416ccbcf.js +0 -1
  700. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-1a4c9e7a416ccbcf.js +0 -1
  701. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-1a4c9e7a416ccbcf.js +0 -1
  702. package/.next/static/chunks/app/v1/chat/conversations/route-1a4c9e7a416ccbcf.js +0 -1
  703. package/.next/static/chunks/app/v1/chat/events/route-1a4c9e7a416ccbcf.js +0 -1
  704. package/.next/static/chunks/app/v1/models/route-1a4c9e7a416ccbcf.js +0 -1
  705. package/.next/static/chunks/webpack-2d8e0c13c0b865fe.js +0 -1
  706. package/.next/static/eaxwKaaFHlA1_FLDIyFGi/_buildManifest.js +0 -1
  707. /package/.next/static/{eaxwKaaFHlA1_FLDIyFGi → Zz_Vh59XdtLIPcf-PxCpo}/_ssgManifest.js +0 -0
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7262],{4682:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>eJ});var a=r(95155),s=r(12115),n=r(94049),o=r(20063),l=r(80777),i=r(25635),c=r(28548),d=r(91871),u=r(2300),p=r(86946),h=r(40047),m=r(33567),f=r(15712),g=r(9562),x=r(56422),y=r(41602),v=r(23820),w=r(73707),j=r(49501),b=r(22822),A=r(17681),S=r(4474),k=r(22003),C=r(41275),E=r(21067),F=r(55606),I=r(86973),T=r(99944),N=r(9957),P=r(2778),R=r(52363),O=r(65036),z=r(95844),M=r(71908),W=r(64246),U=r(75912),L=r(51611),H=r(66087),D=r(68855),J=r(90057),q=r(43076),_=r(17897),G=r(93632),V=r(87021);let B=(0,V.h)("frontend/services/packages");class K{async resolve(e){let t=await fetch("/api/packages/resolve",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),r=await t.json();if(!t.ok)throw Error((null==r?void 0:r.error)||"HTTP ".concat(t.status));return r}async deriveSecrets(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=await fetch("/api/packages/derive-secrets",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({selection:e,modelIdentifier:t.modelIdentifier,enableEntropy:t.enableEntropy,enableRepoSlug:t.enableRepoSlug})}),a=await r.json();if(!r.ok)throw Error((null==a?void 0:a.error)||"HTTP ".concat(r.status));return a}async scanTargets(e){var t;let r=await fetch("/api/packages/scan-targets",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({selection:e})}),a=await r.json();if(!r.ok)throw Error((null==a?void 0:a.error)||"HTTP ".concat(r.status));return null!=(t=null==a?void 0:a.candidates)?t:[]}async searchRegistry(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=new URLSearchParams;e.q&&t.set("q",e.q),e.tag&&t.set("tag",e.tag),e.page&&t.set("page",String(e.page)),e.pageSize&&t.set("pageSize",String(e.pageSize));let r=await fetch("/api/packages/search".concat(t.toString()?"?".concat(t.toString()):"")),a=await r.json();if(!r.ok&&!(null==a?void 0:a.items))throw Error((null==a?void 0:a.error)||"HTTP ".concat(r.status));return a}async installFromRegistry(e){let t=await fetch("/api/packages/install",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({source:"registry",...e})}),r=await t.json();if(!t.ok&&(null==r?void 0:r.ok)===void 0)throw Error((null==r?void 0:r.error)||"HTTP ".concat(t.status));return r}async build(e,t){var r;let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],s=await fetch("/api/packages/build",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({selection:e,metadata:t,acceptedSecrets:a})}),n=null!=(r=s.headers.get("content-type"))?r:"";if(!n.includes("application/json")){let e=await s.text();throw B.error("Package build returned a non-JSON response",{status:s.status,contentType:n,preview:e.slice(0,200)}),Error("Package build failed: HTTP ".concat(s.status," returned a non-JSON response"))}let o=await s.json();if(!s.ok&&(null==o?void 0:o.ok)===void 0)throw Error((null==o?void 0:o.error)||"HTTP ".concat(s.status));return o}}let Z=null,$=()=>(Z||(Z=new K),Z),X=new Proxy({},{get(e,t){let r=$(),a=r[t];return"function"==typeof a?a.bind(r):a}});var Y=r(97502);let Q=/\{\{secret\.([A-Za-z0-9_.-]+)\}\}/g,ee="encrypted:",et=/^[A-Za-z0-9_.-]+$/,er=["path","repo","token","email","url-cred","name","other"];function ea(e){let t=new Set,r=e=>{if("string"==typeof e){for(let r of function(e){let t;if("string"!=typeof e)return[];let r=[],a=RegExp(Q.source,"g");for(;null!==(t=a.exec(e));)r.includes(t[1])||r.push(t[1]);return r}(e))t.add(r);return}if(Array.isArray(e)){for(let t of e)r(t);return}if(e&&"object"==typeof e)for(let t of Object.values(e))r(t)};return r(e),Array.from(t)}var es=r(2750);let en=es.object({name:es.string().min(1).regex(et,"invalid secret name"),description:es.string().optional(),required:es.boolean(),default:es.string().optional()}).strict(),eo=es.discriminatedUnion("kind",[es.object({kind:es.literal("secret"),secret:es.string().min(1)}).strict(),es.object({kind:es.literal("global"),var:es.string().min(1)}).strict(),es.object({kind:es.literal("none")}).strict()]),el=es.object({id:es.string().min(1),name:es.string().min(1),displayName:es.string().optional(),description:es.string().optional(),baseUrl:es.string().optional(),provider:es.string().optional(),adapter:es.string().optional(),promptTemplate:es.string().optional(),reasoningSchema:es.string().optional(),temperature:es.string().optional(),functionCallingSchema:es.string().optional(),contextWindow:es.number().optional(),maxTurns:es.number().optional(),maxTokens:es.number().optional(),folder:es.string().optional(),favorite:es.boolean().optional(),apiKeyRef:eo}).strict(),ei=es.object({sourceType:es.enum(["github","registry","marketplace","remote"]),ref:es.string().optional(),url:es.string().optional(),name:es.string().optional()}).strict().superRefine((e,t)=>{"remote"!==e.sourceType||e.url||t.addIssue({code:"custom",message:"installOrigin 'remote' requires a url"}),"github"!==e.sourceType&&"registry"!==e.sourceType||e.ref||t.addIssue({code:"custom",message:"installOrigin '".concat(e.sourceType,"' requires a ref")})}),ec=es.object({name:es.string().min(1),isSecret:es.boolean(),secretRef:es.string().optional(),globalVar:es.string().optional()}).strict(),ed=es.object({name:es.string().min(1),transport:es.enum(["stdio","sse","streamable","websocket"]),disabled:es.boolean().optional(),autoApprove:es.array(es.string()).optional(),folder:es.string().optional(),installOrigin:ei,envDeclarations:es.array(ec),headerDeclarations:es.array(ec).optional()}).strict(),eu=es.object({flow:es.object({id:es.string().min(1),name:es.string().min(1),nodes:es.array(es.any()),edges:es.array(es.any())}).catchall(es.unknown()),references:es.object({flowIds:es.array(es.string()).optional(),modelIds:es.array(es.string()).optional(),mcpServerNames:es.array(es.string()).optional()}).optional()}),ep=es.object({id:es.string().min(1),name:es.string().min(1),enabled:es.boolean(),flowId:es.string().min(1),prompt:es.string(),trigger:es.any()}).catchall(es.unknown()),eh=es.object({schemaVersion:es.literal(1),id:es.string().min(1),name:es.string().min(1),description:es.string().optional(),version:es.string().regex(/^\d+\.\d+\.\d+(?:-[0-9A-Za-z-.]+)?(?:\+[0-9A-Za-z-.]+)?$/,"version must be valid semver"),author:es.string().optional(),publisher:es.string().optional(),tags:es.array(es.string()).optional(),requiredGlobals:es.array(es.string()).optional(),secrets:es.array(en),models:es.array(el),mcpServers:es.array(ed),flows:es.array(eu),plannedExecutions:es.array(ep)}).superRefine((e,t)=>{(function e(t){return"string"==typeof t?t.startsWith(ee):Array.isArray(t)?t.some(e):!!t&&"object"==typeof t&&Object.values(t).some(e)})(e)&&t.addIssue({code:"custom",message:"package contains an '".concat(ee,"' value; secret material must never be serialized")});let r=new Set(e.secrets.map(e=>e.name)),a=new Set(ea(e));for(let t of e.models)"secret"===t.apiKeyRef.kind&&a.add(t.apiKeyRef.secret);for(let t of e.mcpServers){var s;for(let e of[...t.envDeclarations,...null!=(s=t.headerDeclarations)?s:[]])e.secretRef&&a.add(e.secretRef)}for(let e of a)r.has(e)||t.addIssue({code:"custom",message:'secret "'.concat(e,'" is referenced but not declared in secrets[]')});let n=new Set(e.flows.map(e=>e.flow.id));e.plannedExecutions.forEach((e,r)=>{n.has(e.flowId)||t.addIssue({code:"custom",path:["plannedExecutions",r,"flowId"],message:'plannedExecution "'.concat(e.name,'" references unknown flow id "').concat(e.flowId,'"')})}),e.flows.forEach((e,r)=>{var a,s;for(let o of null!=(s=null==(a=e.references)?void 0:a.flowIds)?s:[])n.has(o)||t.addIssue({code:"custom",path:["flows",r,"references","flowIds"],message:'flow "'.concat(e.flow.name,'" references unknown subflow id "').concat(o,'"')})})}),em=(0,V.h)("frontend/components/Packages/PackageWizard"),ef=/^\d+\.\d+\.\d+(?:-[0-9A-Za-z-.]+)?(?:\+[0-9A-Za-z-.]+)?$/,eg=["Select contents","Resolve & validate","Secret review","Metadata","Export"];function ex(e){return e.replace(/^SECRET_/,"")}function ey(e){let{open:t,onClose:r}=e,o=(0,m.A)(),u=(0,f.A)(o.breakpoints.down("sm")),[p,h]=(0,s.useState)(0),[V,B]=(0,s.useState)({flows:[],models:[],mcpServers:[],plannedExecutions:[]}),[K,Z]=(0,s.useState)(!0),[X,Q]=(0,s.useState)(new Set),[ee,es]=(0,s.useState)(new Set),[en,eo]=(0,s.useState)(new Set),[el,ei]=(0,s.useState)(new Set),[ec,ed]=(0,s.useState)(""),[eu,ep]=(0,s.useState)(""),[ey,ev]=(0,s.useState)(""),[ew,ej]=(0,s.useState)(""),[eb,eA]=(0,s.useState)(null),[eS,ek]=(0,s.useState)([]),[eC,eE]=(0,s.useState)(!1),[eF,eI]=(0,s.useState)(null),[eT,eN]=(0,s.useState)(null),[eP,eR]=(0,s.useState)([]),[eO,ez]=(0,s.useState)(!1),[eM,eW]=(0,s.useState)(!1),[eU,eL]=(0,s.useState)(null),[eH,eD]=(0,s.useState)([]),[eJ,eq]=(0,s.useState)(""),[e_,eG]=(0,s.useState)(""),[eV,eB]=(0,s.useState)(!1),[eK,eZ]=(0,s.useState)(!1),[e$,eX]=(0,s.useState)(""),[eY,eQ]=(0,s.useState)(""),[e0,e1]=(0,s.useState)("other"),[e2,e4]=(0,s.useState)(null),[e5,e6]=(0,s.useState)(!1),[e3,e9]=(0,s.useState)(!1),[e7,e8]=(0,s.useState)(null),[te,tt]=(0,s.useState)([]),[tr,ta]=(0,s.useState)(""),[ts,tn]=(0,s.useState)(!1),[to,tl]=(0,s.useState)(""),[ti,tc]=(0,s.useState)("1.0.0"),[td,tu]=(0,s.useState)(""),[tp,th]=(0,s.useState)(""),[tm,tf]=(0,s.useState)(!1),[tg,tx]=(0,s.useState)(null),[ty,tv]=(0,s.useState)(null),[tw,tj]=(0,s.useState)(!1),[tb,tA]=(0,s.useState)(null);(0,s.useEffect)(()=>{if(!t)return;let e=!1;return(async()=>{Z(!0);try{var t;let[r,a,s,n]=await Promise.all([J.g.loadFlows(),q.N.loadModels(),_.S.loadServerConfigs(),G.P.list()]);if(e)return;let o=Array.isArray(s)?s:[];B({flows:(null!=r?r:[]).map(e=>({id:e.id,label:e.name||e.id})),models:(null!=a?a:[]).map(e=>({id:e.id,label:e.displayName||e.name||e.id})),mcpServers:o.map(e=>({id:e.name,label:e.name})),plannedExecutions:(null!=(t=null==n?void 0:n.executions)?t:[]).map(e=>({id:e.execution.id,label:e.execution.name||e.execution.id}))})}catch(e){em.warn("Failed to load packageable entities",e)}finally{e||Z(!1)}})(),()=>{e=!0}},[t]);let tS=(0,s.useMemo)(()=>({flowIds:Array.from(X),modelIds:Array.from(ee),mcpServerNames:Array.from(en),plannedExecutionIds:Array.from(el)}),[X,ee,en,el]),tk=0===X.size&&0===ee.size&&0===en.size&&0===el.size,tC=e=>t=>{e(e=>{let r=new Set(e);return r.has(t)?r.delete(t):r.add(t),r})},tE=(0,s.useCallback)(async e=>{let t;ek([]);try{t=await e.text()}catch(e){ek([e instanceof Error?e.message:"Failed to read the file"]);return}let r=function(e){let t;try{t=JSON.parse(e)}catch(e){return{ok:!1,errors:["Not valid JSON: ".concat(e instanceof Error?e.message:String(e))]}}let r=function(e){let t=eh.safeParse(e);if(!t.success)return{success:!1,errors:t.error.issues.map(e=>{let t=e.path.join(".");return t?"".concat(t,": ").concat(e.message):e.message})};let r=t.data;return{success:!0,data:r,warnings:function(e){let t=new Set(ea(e));for(let r of e.models)"secret"===r.apiKeyRef.kind&&t.add(r.apiKeyRef.secret);for(let a of e.mcpServers){var r;for(let e of[...a.envDeclarations,...null!=(r=a.headerDeclarations)?r:[]])e.secretRef&&t.add(e.secretRef)}return e.secrets.filter(e=>!t.has(e.name)).map(e=>'secret "'.concat(e.name,'" is declared but never referenced'))}(r)}}(t);if(!r.success||!r.data){var a;return{ok:!1,errors:null!=(a=r.errors)?a:["Not a valid FLUJO package manifest"]}}return{ok:!0,package:r.data}}(t);if(!r.ok){eA(null),ek(r.errors.slice(0,8));return}let a=function(e,t){var r,a,s,n,o,l,i,c,d,u;let p=new Set(t.flowIds),h=new Set(t.modelIds),m=new Set(t.mcpServerNames),f=new Set(t.plannedExecutionIds),g=[],x={flowIds:[],modelIds:[],mcpServerNames:[],plannedExecutionIds:[]};for(let t of null!=(r=e.flows)?r:[]){let e=null==t||null==(a=t.flow)?void 0:a.id;e&&(p.has(e)?x.flowIds.push(e):g.push({type:"flow",label:(null==(s=t.flow)?void 0:s.name)?"".concat(t.flow.name," (").concat(e,")"):e}))}for(let t of null!=(n=e.models)?n:[])(null==t?void 0:t.id)&&(h.has(t.id)?x.modelIds.push(t.id):g.push({type:"model",label:t.displayName||t.name||t.id}));for(let t of null!=(o=e.mcpServers)?o:[])(null==t?void 0:t.name)&&(m.has(t.name)?x.mcpServerNames.push(t.name):g.push({type:"mcpServer",label:t.name}));for(let t of null!=(l=e.plannedExecutions)?l:[]){let e=null==t?void 0:t.id;e&&(f.has(e)?x.plannedExecutionIds.push(e):g.push({type:"plannedExecution",label:t.name||e}))}return{selection:x,metadata:{name:null!=(i=e.name)?i:"",version:null!=(c=e.version)?c:"",description:null!=(d=e.description)?d:"",tags:e.tags?[...e.tags]:[]},secretNames:(null!=(u=e.secrets)?u:[]).map(e=>e.name).filter(Boolean),missing:g}}(r.package,{flowIds:V.flows.map(e=>e.id),modelIds:V.models.map(e=>e.id),mcpServerNames:V.mcpServers.map(e=>e.id),plannedExecutionIds:V.plannedExecutions.map(e=>e.id)});Q(new Set(a.selection.flowIds)),es(new Set(a.selection.modelIds)),eo(new Set(a.selection.mcpServerNames)),ei(new Set(a.selection.plannedExecutionIds)),tl(a.metadata.name),tc(a.metadata.version),tu(a.metadata.description),th(a.metadata.tags.join(", ")),eI(null),eN(null),eR([]),eW(!1),eL(null),eD([]),tx(null),tv(null),tA(null),eA(a),em.info("Imported package manifest into the wizard",{name:a.metadata.name,version:a.metadata.version,missing:a.missing.length})},[V]),tF=(0,s.useCallback)(async()=>{eE(!0),eN(null),eI(null),eR([]),eW(!1),eL(null),eD([]);try{let e=await $().resolve(tS);eI(e)}catch(e){eN(e instanceof Error?e.message:"Failed to resolve dependencies")}finally{eE(!1)}},[tS]),tI=(0,s.useMemo)(()=>eb?new Set(eb.secretNames):null,[eb]),tT=(0,s.useCallback)(async e=>{ez(!0),eL(null);try{var t;let r=await $().deriveSecrets(tS,{modelIdentifier:e,enableEntropy:eV,enableRepoSlug:eK});eR(e=>{let t=new Map(e.map(e=>[e.id,e.accepted])),a=new Map(e.map(e=>[e.id,e.suggestedSecretName])),s=e.filter(e=>"manual"===e.source),n=r.proposals.map(e=>{var r;return{...e,accepted:t.has(e.id)?t.get(e.id):tI?tI.has(e.suggestedSecretName):"low"!==e.confidence,suggestedSecretName:null!=(r=a.get(e.id))?r:e.suggestedSecretName}}),o=new Set(n.map(e=>e.id));return[...n,...s.filter(e=>!o.has(e.id))]}),eD(null!=(t=r.warnings)?t:[])}catch(e){eL(e instanceof Error?e.message:"Failed to derive secrets")}finally{ez(!1),eW(!0)}},[tS,eV,eK,tI]),tN=e=>eR(t=>t.map(t=>({...t,accepted:e}))),tP=()=>{e4(null);let e=function(e){var t,r,a,s,n;let o=(null!=(r=e.excerpt)?r:"").trim();if(!o||o.length>2e3)return null;let l=(null!=(a=e.secretName)?a:"").trim();if(l.length>128)return null;let i=null!=(s=e.kind)?s:"other",c=et.test(l)?l.toUpperCase():function(e,t){let r="".concat(e,"_").concat(t).toUpperCase().replace(/[^A-Z0-9_.-]+/g,"_").replace(/^[_.-]+|[_.-]+$/g,"")||"".concat(e,"_SECRET");return et.test(r)?r:"".concat(e,"_SECRET")}("SECRET",l||o.slice(0,16)),d=(null!=(n=e.location)?n:"manual").trim()||"manual";return{id:"sp_".concat(function(e){let t=5381;for(let r=0;r<e.length;r++)t=(t<<5)+t^e.charCodeAt(r);return(t>>>0).toString(16).padStart(8,"0")}("".concat(d,"\0").concat(o))),location:d,excerpt:o,kind:i,source:"manual",confidence:"high",suggestedSecretName:c,suggestedDescription:(null==(t=e.description)?void 0:t.trim())||void 0,rationale:"Added manually",accepted:!0}}({excerpt:e$,secretName:eY,kind:e0});if(!e)return void e4("Enter a non-empty value to redact (under 2000 characters).");eR(t=>t.some(t=>t.id===e.id)?t:[e,...t]),eX(""),eQ(""),e1("other")},tR=(0,s.useCallback)(async()=>{e6(!0),e8(null),ta(""),e9(!0);try{let e=await $().scanTargets(tS);tt(e)}catch(e){e8(e instanceof Error?e.message:"Failed to load candidate values"),tt([])}finally{e9(!1)}},[tS]),tO=(0,s.useMemo)(()=>{let e=tr.trim().toLowerCase();return e?te.filter(t=>"".concat(t.text," ").concat(t.location," ").concat(t.source).toLowerCase().includes(e)):te},[te,tr]),tz=(0,s.useMemo)(()=>{let e=new Map;for(let t of eP){let r="".concat(t.kind,"::").concat(t.excerpt),a=e.get(r);a?(a.ids.push(t.id),a.locations.push(t.location)):e.set(r,{key:r,ids:[t.id],locations:[t.location],kind:t.kind,source:t.source,confidence:t.confidence,excerpt:t.excerpt,suggestedSecretName:t.suggestedSecretName,rationale:t.rationale,accepted:t.accepted})}return Array.from(e.values())},[eP]),tM=(0,s.useMemo)(()=>{let e=e_.trim().toLowerCase();return e?tz.filter(t=>"".concat(t.excerpt," ").concat(t.locations.join(" ")," ").concat(t.kind," ").concat(t.suggestedSecretName).toLowerCase().includes(e)):tz},[tz,e_]),tW=(0,s.useMemo)(()=>{var e;if(!eb||!eM)return[];let t=new Set([...(null!=(e=null==eF?void 0:eF.secrets)?e:[]).map(e=>e.name),...eP.map(e=>e.suggestedSecretName)]);return eb.secretNames.filter(e=>!t.has(e))},[eb,eM,eF,eP]),tU=(0,s.useMemo)(()=>{var e;let t=new Map;for(let r of tz)t.set(r.kind,(null!=(e=t.get(r.kind))?e:0)+1);return Array.from(t.entries()).sort((e,t)=>t[1]-e[1])},[tz]);(0,s.useEffect)(()=>{2!==p||!eF||eM||eO||tT()},[p,eF,eM,eO,tT]);let tL=(0,s.useCallback)(async()=>{tf(!0),tv(null),tx(null);try{let e=tp.split(",").map(e=>e.trim()).filter(Boolean),t=await $().build(tS,{id:"pkg-".concat(Date.now()),name:to.trim(),version:ti.trim(),description:td.trim()||void 0,tags:e.length?e:void 0},eP.filter(e=>e.accepted));tx(t),t.ok||tv(t.errors&&t.errors[0]||"Package build failed")}catch(e){tv(e instanceof Error?e.message:"Failed to build package")}finally{tf(!1)}},[tS,to,ti,td,tp,eP]),tH=(0,s.useCallback)(async()=>{if(null==tg?void 0:tg.json){tj(!0),tA(null);try{let e=JSON.parse(tg.json),t=await (0,Y.p)().publish(e);tA(t)}catch(e){tA({ok:!1,code:"error",error:e instanceof Error?e.message:"Failed to publish package"})}finally{tj(!1)}}},[tg]),tD=()=>{if(!(null==tg?void 0:tg.json))return;let e=new Blob([tg.json],{type:"application/json"}),t=URL.createObjectURL(e),r=document.createElement("a");r.href=t;let a=to.trim().replace(/[^A-Za-z0-9_.-]+/g,"-").replace(/^-+|-+$/g,"")||"package";r.download="".concat(a,"-").concat(ti.trim(),".flujo-package.json"),document.body.appendChild(r),r.click(),r.remove(),URL.revokeObjectURL(t)},tJ=async()=>{if(0===p){await tF(),h(1);return}if(3===p){h(4),await tL();return}h(e=>Math.min(e+1,eg.length-1))},tq=ef.test(ti.trim()),t_=to.trim().length>0&&tq,tG=!!(eF&&!eF.mcp.ok),tV=0===p?tk||eC:1===p?eC||!!eT||tG:3===p?!t_:4===p,tB=(e,t,r,s,o,l)=>{let d=o.trim().toLowerCase(),u=d?t.filter(e=>e.label.toLowerCase().includes(d)):t;return(0,a.jsxs)(n.default,{sx:{flex:1,minWidth:240},children:[(0,a.jsxs)(i.default,{variant:"subtitle2",gutterBottom:!0,children:[e," ",r.size>0&&(0,a.jsx)(c.A,{label:r.size,size:"small"})]}),(0,a.jsx)(g.A,{size:"small",fullWidth:!0,placeholder:"Search ".concat(e.toLowerCase(),"…"),value:o,onChange:e=>l(e.target.value),InputProps:{startAdornment:(0,a.jsx)(x.A,{position:"start",children:(0,a.jsx)(L.A,{fontSize:"small"})})},sx:{mb:1}}),0===t.length?(0,a.jsx)(i.default,{variant:"body2",color:"text.secondary",children:"None available"}):0===u.length?(0,a.jsxs)(i.default,{variant:"body2",color:"text.secondary",children:["No matches for “",o,"”."]}):(0,a.jsx)(y.A,{dense:!0,sx:{maxHeight:{xs:240,md:"45vh"},overflow:"auto",border:1,borderColor:"divider",borderRadius:1},children:u.map(e=>(0,a.jsx)(v.Ay,{disablePadding:!0,children:(0,a.jsxs)(w.A,{onClick:()=>s(e.id),dense:!0,children:[(0,a.jsx)(j.A,{sx:{minWidth:36},children:(0,a.jsx)(b.A,{edge:"start",checked:r.has(e.id),tabIndex:-1,disableRipple:!0})}),(0,a.jsx)(A.A,{primary:e.label})]})},e.id))})]})};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(P.A,{open:t,onClose:r,maxWidth:"lg",fullWidth:!0,fullScreen:u,PaperProps:{sx:{height:u?"100%":"90vh",maxHeight:u?"100%":"90vh"}},children:[(0,a.jsx)(R.A,{children:"Create package"}),(0,a.jsxs)(O.A,{dividers:!0,sx:{overflow:"auto"},children:[(0,a.jsx)(z.A,{activeStep:p,sx:{mb:3},children:eg.map(e=>(0,a.jsx)(M.A,{children:(0,a.jsx)(W.A,{children:e})},e))}),(()=>{switch(p){case 0:return K?(0,a.jsx)(n.default,{sx:{display:"flex",justifyContent:"center",p:4},children:(0,a.jsx)(S.default,{})}):(0,a.jsxs)(l.A,{spacing:2,children:[(0,a.jsx)(i.default,{variant:"body2",color:"text.secondary",children:"Pick the entities to include. Dependencies (subflows, referenced models and MCP servers, planned-execution flows) are pulled in automatically in the next step."}),(0,a.jsxs)(l.A,{direction:"row",spacing:1,alignItems:"center",flexWrap:"wrap",useFlexGap:!0,children:[(0,a.jsxs)(d.A,{component:"label",variant:"outlined",startIcon:(0,a.jsx)(H.A,{}),children:["Import manifest (.json)",(0,a.jsx)("input",{type:"file",accept:"application/json,.json",hidden:!0,onChange:e=>{var t;let r=null==(t=e.target.files)?void 0:t[0];e.target.value="",r&&tE(r)}})]}),(0,a.jsx)(i.default,{variant:"caption",color:"text.secondary",children:"Restores the selection, metadata and accepted secrets from a package you exported earlier."})]}),eS.length>0&&(0,a.jsxs)(k.A,{severity:"error",onClose:()=>ek([]),children:[(0,a.jsx)(C.A,{children:"Could not import that file"}),eS.map((e,t)=>(0,a.jsx)("div",{children:e},t))]}),eb&&(0,a.jsxs)(k.A,{severity:eb.missing.length>0?"warning":"success",children:[(0,a.jsxs)(C.A,{children:["Imported “",eb.metadata.name,"” v",eb.metadata.version]}),"Restored ",eb.selection.flowIds.length," flow(s),"," ",eb.selection.modelIds.length," model(s),"," ",eb.selection.mcpServerNames.length," MCP server(s),"," ",eb.selection.plannedExecutionIds.length," planned execution(s) and"," ",eb.secretNames.length," secret name(s).",eb.missing.length>0&&(0,a.jsxs)(n.default,{sx:{mt:1},children:["No longer on this host (left unselected):",eb.missing.map((e,t)=>(0,a.jsxs)("div",{children:[e.type,": ",e.label]},t))]})]}),(0,a.jsxs)(l.A,{direction:"row",spacing:2,flexWrap:"wrap",useFlexGap:!0,children:[tB("Flows",V.flows,X,tC(Q),ec,ed),tB("Models",V.models,ee,tC(es),eu,ep),tB("MCP servers",V.mcpServers,en,tC(eo),ey,ev),tB("Planned executions",V.plannedExecutions,el,tC(ei),ew,ej)]})]});case 1:if(eC)return(0,a.jsx)(n.default,{sx:{display:"flex",justifyContent:"center",p:4},children:(0,a.jsx)(S.default,{})});if(eT)return(0,a.jsx)(k.A,{severity:"error",children:eT});if(!eF)return null;return(0,a.jsxs)(l.A,{spacing:2,children:[tG&&(0,a.jsxs)(k.A,{severity:"error",children:[(0,a.jsx)(C.A,{children:"Local MCP server(s) cannot be packaged"}),eF.mcp.errors.map((e,t)=>(0,a.jsx)("div",{children:e},t))]}),eF.resolved.autoAdded.length>0&&(0,a.jsxs)(k.A,{severity:"info",children:[(0,a.jsx)(C.A,{children:"Automatically included dependencies"}),eF.resolved.autoAdded.map((e,t)=>(0,a.jsxs)("div",{children:[e.type,": ",(0,a.jsx)("code",{children:e.id})," — ",e.reason]},t))]}),eF.resolved.warnings.length>0&&(0,a.jsxs)(k.A,{severity:"warning",children:[(0,a.jsx)(C.A,{children:"Warnings"}),eF.resolved.warnings.map((e,t)=>(0,a.jsx)("div",{children:e},t))]}),(0,a.jsx)(E.A,{}),(0,a.jsxs)(i.default,{variant:"body2",children:["Resolved: ",eF.resolved.flowIds.length," flow(s),"," ",eF.resolved.modelIds.length," model(s),"," ",eF.resolved.mcpServerNames.length," MCP server(s),"," ",eF.resolved.plannedExecutionIds.length," planned execution(s)."]}),eF.mcp.servers.length>0&&(0,a.jsx)(l.A,{direction:"row",spacing:1,flexWrap:"wrap",useFlexGap:!0,children:eF.mcp.servers.map(e=>(0,a.jsx)(c.A,{label:"".concat(e.name," \xb7 ").concat(e.sourceType),size:"small",color:"success",variant:"outlined"},e.name))})]});case 2:return(0,a.jsxs)(l.A,{spacing:2,children:[(0,a.jsx)(i.default,{variant:"subtitle2",children:"Declared secrets (entity keys)"}),(0,a.jsx)(i.default,{variant:"body2",color:"text.secondary",children:"Secrets the package will declare from model API keys and MCP env/headers. Values are never included — whoever installs must supply them."}),eF&&0!==eF.secrets.length?(0,a.jsx)(y.A,{dense:!0,children:eF.secrets.map(e=>(0,a.jsx)(v.Ay,{children:(0,a.jsx)(A.A,{primary:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("code",{children:ex(e.name)})," ",e.required&&(0,a.jsx)(c.A,{label:"required",size:"small",color:"warning"})]}),secondary:e.description})},e.name))}):(0,a.jsx)(k.A,{severity:"success",children:"No entity secrets to declare."}),(0,a.jsx)(E.A,{}),(0,a.jsx)(i.default,{variant:"subtitle2",children:"Detected secrets in content"}),(0,a.jsxs)(i.default,{variant:"body2",color:"text.secondary",children:["Values that look secret or instance-specific (paths, repos, tokens, URLs, emails) found in flow prompts, node properties, model config and planned- execution prompts. Accepted rows are replaced with a"," ",(0,a.jsx)("code",{children:"{{secret.NAME}}"})," placeholder everywhere they occur."]}),eO&&(0,a.jsx)(n.default,{sx:{display:"flex",justifyContent:"center",p:2},children:(0,a.jsx)(S.default,{size:28})}),eU&&(0,a.jsx)(k.A,{severity:"error",children:eU}),!eO&&eM&&0===eP.length&&(0,a.jsx)(k.A,{severity:"success",children:"No likely secrets detected in the packaged content."}),eP.length>0&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(l.A,{direction:"row",spacing:.5,flexWrap:"wrap",useFlexGap:!0,children:tU.map(e=>{let[t,r]=e;return(0,a.jsx)(c.A,{size:"small",variant:"outlined",label:"".concat(t,": ").concat(r)},t)})}),(0,a.jsxs)(l.A,{direction:"row",spacing:1,alignItems:"center",flexWrap:"wrap",useFlexGap:!0,children:[(0,a.jsx)(d.A,{size:"small",onClick:()=>tN(!0),children:"Accept all"}),(0,a.jsx)(d.A,{size:"small",onClick:()=>tN(!1),children:"Reject all"}),(0,a.jsx)(g.A,{size:"small",placeholder:"Filter detected secrets…",value:e_,onChange:e=>eG(e.target.value),sx:{minWidth:200,flex:1}}),(0,a.jsxs)(i.default,{variant:"caption",color:"text.secondary",sx:{alignSelf:"center"},children:[tz.filter(e=>e.accepted).length," of ",tz.length," accepted"]})]}),(0,a.jsxs)(y.A,{dense:!0,sx:{border:1,borderColor:"divider",borderRadius:1,maxHeight:280,overflow:"auto"},children:[0===tM.length&&(0,a.jsx)(v.Ay,{children:(0,a.jsx)(A.A,{primary:(0,a.jsxs)(i.default,{variant:"body2",color:"text.secondary",children:["No rows match “",e_,"”."]})})}),tM.map(e=>(0,a.jsxs)(v.Ay,{alignItems:"flex-start",divider:!0,children:[(0,a.jsx)(j.A,{sx:{minWidth:36,mt:1},children:(0,a.jsx)(b.A,{edge:"start",checked:!!e.accepted,onChange:()=>{let t;return t=e.ids,eR(e=>{var r;let a=new Set(t),s=!(null==(r=e.find(e=>a.has(e.id)))?void 0:r.accepted);return e.map(e=>a.has(e.id)?{...e,accepted:s}:e)})},tabIndex:-1,disableRipple:!0})}),(0,a.jsx)(A.A,{primary:(0,a.jsxs)(l.A,{direction:"row",spacing:1,alignItems:"center",flexWrap:"wrap",useFlexGap:!0,children:[(0,a.jsx)(c.A,{label:e.kind,size:"small"}),(0,a.jsx)(c.A,{label:e.source,size:"small",variant:"outlined",color:"model"===e.source?"secondary":"manual"===e.source?"primary":"default"}),e.confidence&&(0,a.jsx)(c.A,{label:e.confidence,size:"small",variant:"outlined",color:"high"===e.confidence?"success":"low"===e.confidence?"warning":"default"}),e.locations.length>1&&(0,a.jsx)(c.A,{label:"".concat(e.locations.length,"\xd7"),size:"small",variant:"outlined"}),(0,a.jsx)(n.default,{component:"code",sx:{wordBreak:"break-all"},children:e.excerpt.length>80?"".concat(e.excerpt.slice(0,80),"…"):e.excerpt})]}),secondary:(0,a.jsxs)(l.A,{spacing:.5,sx:{mt:.5},children:[(0,a.jsxs)(i.default,{variant:"caption",color:"text.secondary",children:[e.locations.length>1?"".concat(e.locations.length," locations: ").concat(e.locations.slice(0,3).join(", ")).concat(e.locations.length>3?", …":""):e.locations[0],e.rationale?" — ".concat(e.rationale):""]}),(0,a.jsx)(g.A,{size:"small",label:"Secret name",value:ex(e.suggestedSecretName),onChange:t=>{var r,a;let s,n;return s=e.ids,r=e.suggestedSecretName,a=t.target.value,n=r.startsWith("SECRET_")?"SECRET_".concat(a.replace(/^SECRET_/,"")):a,eR(e=>{let t=new Set(s);return e.map(e=>t.has(e.id)?{...e,suggestedSecretName:n}:e)})},disabled:!e.accepted,sx:{maxWidth:320}})]}),primaryTypographyProps:{component:"div"},secondaryTypographyProps:{component:"div"}})]},e.key))]})]}),tW.length>0&&(0,a.jsxs)(k.A,{severity:"warning",children:[(0,a.jsx)(C.A,{children:"Secrets from the imported manifest that need re-adding"}),"A manifest never carries secret values, so these declarations could not be matched to anything in the current content — re-add them below if they still apply: ",tW.map(ex).join(", "),"."]}),eH.length>0&&(0,a.jsxs)(k.A,{severity:"warning",children:[(0,a.jsx)(C.A,{children:"Notes"}),eH.map((e,t)=>(0,a.jsx)("div",{children:e},t))]}),(0,a.jsx)(E.A,{}),(0,a.jsx)(i.default,{variant:"subtitle2",children:"Add a secret manually"}),(0,a.jsxs)(i.default,{variant:"body2",color:"text.secondary",children:["Enter any value that should be redacted from the package. It is treated purely as text to replace with a ",(0,a.jsx)("code",{children:"{{secret.NAME}}"})," placeholder — it is never executed."]}),e2&&(0,a.jsx)(k.A,{severity:"error",children:e2}),(0,a.jsxs)(l.A,{direction:"row",spacing:1,alignItems:"flex-start",flexWrap:"wrap",useFlexGap:!0,children:[(0,a.jsx)(g.A,{size:"small",label:"Value to redact",value:e$,onChange:e=>eX(e.target.value),sx:{minWidth:240,flex:1}}),(0,a.jsx)(g.A,{size:"small",label:"Secret name",value:eY,onChange:e=>eQ(e.target.value),sx:{minWidth:180}}),(0,a.jsx)(F.A,{size:"small",value:e0,onChange:e=>e1(e.target.value),sx:{minWidth:120},children:er.map(e=>(0,a.jsx)(I.A,{value:e,children:e},e))}),(0,a.jsx)(d.A,{variant:"outlined",onClick:tP,disabled:!e$.trim(),children:"Add"}),(0,a.jsx)(d.A,{variant:"text",startIcon:(0,a.jsx)(L.A,{}),onClick:()=>void tR(),disabled:tk,children:"Pick from app"})]}),(0,a.jsx)(E.A,{}),(0,a.jsx)(i.default,{variant:"subtitle2",children:"Advanced scan options"}),(0,a.jsxs)(l.A,{direction:"row",spacing:2,flexWrap:"wrap",useFlexGap:!0,children:[(0,a.jsx)(T.A,{control:(0,a.jsx)(N.A,{checked:eV,onChange:e=>{eB(e.target.checked),eW(!1)}}),label:"Aggressive entropy scan"}),(0,a.jsx)(T.A,{control:(0,a.jsx)(N.A,{checked:eK,onChange:e=>{eZ(e.target.checked),eW(!1)}}),label:"Detect bare owner/repo slugs"}),(0,a.jsx)(d.A,{size:"small",variant:"text",onClick:()=>void tT(),disabled:eO,children:"Re-scan"})]}),(0,a.jsx)(E.A,{}),(0,a.jsx)(i.default,{variant:"subtitle2",children:"Optional: model-driven scan"}),(0,a.jsx)(k.A,{severity:"info",children:"Running the model-driven pass sends the packaged content above to the selected model provider. The offline heuristic scan never leaves your machine."}),(0,a.jsxs)(l.A,{direction:"row",spacing:1,alignItems:"center",flexWrap:"wrap",useFlexGap:!0,children:[(0,a.jsxs)(F.A,{size:"small",displayEmpty:!0,value:eJ,onChange:e=>eq(e.target.value),sx:{minWidth:220},children:[(0,a.jsx)(I.A,{value:"",children:(0,a.jsx)("em",{children:"Select a model…"})}),V.models.map(e=>(0,a.jsx)(I.A,{value:e.id,children:e.label},e.id))]}),(0,a.jsx)(d.A,{variant:"outlined",disabled:!eJ||eO,onClick:()=>void tT(eJ),children:"Scan with model"})]})]});case 3:return(0,a.jsxs)(l.A,{spacing:2,children:[(0,a.jsx)(g.A,{label:"Package name",value:to,onChange:e=>tl(e.target.value),required:!0,fullWidth:!0,error:to.length>0&&0===to.trim().length}),(0,a.jsx)(g.A,{label:"Version",value:ti,onChange:e=>tc(e.target.value),required:!0,fullWidth:!0,error:ti.length>0&&!tq,helperText:ti.length>0&&!tq?"Must be a semantic version (e.g. 1.0.0)":" "}),(0,a.jsx)(g.A,{label:"Description",value:td,onChange:e=>tu(e.target.value),fullWidth:!0,multiline:!0,minRows:2}),(0,a.jsx)(g.A,{label:"Tags (comma-separated)",value:tp,onChange:e=>th(e.target.value),fullWidth:!0})]});case 4:if(tm)return(0,a.jsx)(n.default,{sx:{display:"flex",justifyContent:"center",p:4},children:(0,a.jsx)(S.default,{})});if(ty)return(0,a.jsx)(k.A,{severity:"error",children:ty});if(null==tg?void 0:tg.ok)return(0,a.jsxs)(l.A,{spacing:2,children:[(0,a.jsxs)(k.A,{severity:"success",children:[(0,a.jsx)(C.A,{children:"Package built"}),(0,a.jsx)("code",{children:to.trim()})," v",ti.trim()," is ready to export."]}),tg.warnings.length>0&&(0,a.jsxs)(k.A,{severity:"warning",children:[(0,a.jsx)(C.A,{children:"Warnings"}),tg.warnings.map((e,t)=>(0,a.jsx)("div",{children:e},t))]}),(0,a.jsx)(d.A,{variant:"contained",onClick:tD,children:"Download package manifest (.json)"}),(0,a.jsx)(E.A,{}),(0,a.jsx)(i.default,{variant:"subtitle2",children:"Publish to the FLUJO package registry"}),(0,a.jsx)(i.default,{variant:"body2",color:"text.secondary",children:"Publishing requires a confirmed registry account (set one up under Settings → Package Registry Account). Only the secret-safe manifest above is uploaded — no secret values ever leave your machine."}),(null==tb?void 0:tb.ok)?(0,a.jsxs)(k.A,{severity:"success",children:[(0,a.jsx)(C.A,{children:"Published"}),tb.name||to.trim()," v",tb.version||ti.trim()," is live.",tb.url&&(0,a.jsx)("div",{children:(0,a.jsx)("a",{href:tb.url,target:"_blank",rel:"noreferrer",children:tb.url})})]}):(0,a.jsxs)(a.Fragment,{children:[tb&&!tb.ok&&(0,a.jsx)(k.A,{severity:"unconfirmed"===tb.code||"not_authenticated"===tb.code?"warning":"error",children:tb.error||"Failed to publish package."}),(0,a.jsxs)(l.A,{direction:"row",spacing:1,flexWrap:"wrap",useFlexGap:!0,children:[(0,a.jsx)(d.A,{variant:"outlined",onClick:()=>void tH(),disabled:tw,children:tw?"Publishing…":"Publish to registry"}),tb&&!tb.ok&&("not_authenticated"===tb.code||"unconfirmed"===tb.code)&&(0,a.jsx)(d.A,{variant:"contained",onClick:()=>tn(!0),disabled:tw,children:"Log in to registry"})]})]})]});return null;default:return null}})()]}),(0,a.jsxs)(U.A,{children:[(0,a.jsx)(d.A,{onClick:r,children:(null==tg?void 0:tg.ok)?"Close":"Cancel"}),(0,a.jsx)(n.default,{sx:{flex:1}}),(0,a.jsx)(d.A,{onClick:()=>h(e=>Math.max(e-1,0)),disabled:0===p||tm||eC,children:"Back"}),p<4&&(0,a.jsx)(d.A,{variant:"contained",onClick:tJ,disabled:tV,children:3===p?"Build":"Next"})]})]}),(0,a.jsxs)(P.A,{open:ts,onClose:()=>tn(!1),maxWidth:"sm",fullWidth:!0,children:[(0,a.jsx)(R.A,{children:"Log in to the package registry"}),(0,a.jsx)(O.A,{dividers:!0,children:(0,a.jsx)(D.A,{})}),(0,a.jsxs)(U.A,{children:[(0,a.jsx)(d.A,{onClick:()=>tn(!1),children:"Done"}),(0,a.jsx)(d.A,{variant:"contained",onClick:()=>{tn(!1),tH()},disabled:tw,children:"Retry publish"})]})]}),(0,a.jsxs)(P.A,{open:e5,onClose:()=>e6(!1),maxWidth:"md",fullWidth:!0,children:[(0,a.jsx)(R.A,{children:"Pick a value to redact"}),(0,a.jsxs)(O.A,{dividers:!0,children:[(0,a.jsx)(i.default,{variant:"body2",color:"text.secondary",sx:{mb:2},children:"These are plaintext values found in the packaged flows, models and planned executions. Pick one to pre-fill the value to redact. API keys and MCP env/header values are never listed — they are already declared as secrets."}),(0,a.jsx)(g.A,{size:"small",fullWidth:!0,placeholder:"Search values…",value:tr,onChange:e=>ta(e.target.value),InputProps:{startAdornment:(0,a.jsx)(x.A,{position:"start",children:(0,a.jsx)(L.A,{fontSize:"small"})})},sx:{mb:2}}),e3?(0,a.jsx)(n.default,{sx:{display:"flex",justifyContent:"center",p:4},children:(0,a.jsx)(S.default,{})}):e7?(0,a.jsx)(k.A,{severity:"error",children:e7}):0===te.length?(0,a.jsx)(k.A,{severity:"info",children:"No pickable plaintext values found in the packaged content."}):0===tO.length?(0,a.jsxs)(i.default,{variant:"body2",color:"text.secondary",children:["No values match “",tr,"”."]}):(0,a.jsx)(y.A,{dense:!0,sx:{border:1,borderColor:"divider",borderRadius:1,maxHeight:"50vh",overflow:"auto"},children:tO.map((e,t)=>(0,a.jsx)(v.Ay,{disablePadding:!0,divider:!0,children:(0,a.jsx)(w.A,{onClick:()=>{eX(e.text),e4(null),e6(!1)},alignItems:"flex-start",children:(0,a.jsx)(A.A,{primary:(0,a.jsx)(n.default,{component:"code",sx:{wordBreak:"break-all"},children:e.text.length>120?"".concat(e.text.slice(0,120),"…"):e.text}),secondary:(0,a.jsxs)(l.A,{direction:"row",spacing:1,alignItems:"center",flexWrap:"wrap",useFlexGap:!0,sx:{mt:.5},children:[(0,a.jsx)(c.A,{label:e.source,size:"small",variant:"outlined"}),(0,a.jsx)(i.default,{variant:"caption",color:"text.secondary",children:e.location})]}),primaryTypographyProps:{component:"div"},secondaryTypographyProps:{component:"div"}})})},"".concat(e.location,"-").concat(t)))})]}),(0,a.jsx)(U.A,{children:(0,a.jsx)(d.A,{onClick:()=>e6(!1),children:"Close"})})]})]})}var ev=r(50001),ew=r(51314),ej=r(76530);let eb=(0,V.h)("frontend/components/Packages/InstalledPackagesList");function eA(){let[e,t]=(0,s.useState)([]),[r,o]=(0,s.useState)(!0),[p,h]=(0,s.useState)(null),[m,f]=(0,s.useState)(null),[y,v]=(0,s.useState)(!1),[w,j]=(0,s.useState)(null),[b,A]=(0,s.useState)(""),C=(0,s.useCallback)(async()=>{o(!0),h(null);try{var e;let r=await fetch("/api/packages/installed");if(!r.ok)throw Error("Failed to load installed packages (".concat(r.status,")"));let a=await r.json();t(null!=(e=a.packages)?e:[])}catch(e){eb.warn("Failed to load installed packages",e),h(e instanceof Error?e.message:String(e))}finally{o(!1)}},[]);(0,s.useEffect)(()=>{C()},[C]);let E=(0,s.useCallback)(async e=>{v(!0),j(null);try{let r=await fetch("/api/packages/uninstall",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({packageName:e.packageName})}),a=await r.json();if(!r.ok){var t;throw Error(null!=(t=a.error)?t:"Uninstall failed (".concat(r.status,")"))}j(a),await C()}catch(e){eb.warn("Uninstall failed",e),h(e instanceof Error?e.message:String(e))}finally{v(!1),f(null)}},[C]),F=(0,s.useMemo)(()=>{let t=b.trim().toLowerCase();return t?e.filter(e=>"".concat(e.packageName," ").concat(e.version).toLowerCase().includes(t)):e},[e,b]);return(0,a.jsxs)(n.default,{sx:{maxWidth:{xs:"100%",md:1100},mx:"auto",mt:3},children:[(0,a.jsxs)(l.A,{direction:"row",spacing:1,alignItems:"center",sx:{mb:1},children:[(0,a.jsx)(i.default,{variant:"h6",children:"Installed packages"}),(0,a.jsx)(d.A,{size:"small",startIcon:(0,a.jsx)(ej.A,{}),onClick:()=>void C(),disabled:r,children:"Refresh"})]}),e.length>0&&(0,a.jsx)(g.A,{size:"small",fullWidth:!0,placeholder:"Search installed packages…",value:b,onChange:e=>A(e.target.value),InputProps:{startAdornment:(0,a.jsx)(x.A,{position:"start",children:(0,a.jsx)(L.A,{fontSize:"small"})})},sx:{mb:2}}),p&&(0,a.jsx)(k.A,{severity:"error",sx:{mb:2},onClose:()=>h(null),children:p}),w&&(0,a.jsxs)(k.A,{severity:w.hasErrors?"warning":"success",sx:{mb:2},onClose:()=>j(null),children:['Uninstalled "',w.packageName,'": ',w.removed.length," removed,"," ",w.skipped.length," preserved/skipped",w.hasErrors?", ".concat(w.errors.length," error(s)"):"","."]}),r?(0,a.jsx)(n.default,{sx:{display:"flex",justifyContent:"center",p:3},children:(0,a.jsx)(S.default,{size:24})}):0===e.length?(0,a.jsx)(i.default,{variant:"body2",color:"text.secondary",children:"No packages installed yet."}):0===F.length?(0,a.jsxs)(i.default,{variant:"body2",color:"text.secondary",children:["No packages match “",b,"”."]}):(0,a.jsx)(l.A,{spacing:1,children:F.map(e=>(0,a.jsxs)(u.A,{variant:"outlined",sx:{p:2,display:"flex",alignItems:"center",justifyContent:"space-between"},children:[(0,a.jsxs)(n.default,{children:[(0,a.jsxs)(l.A,{direction:"row",spacing:1,alignItems:"center",children:[(0,a.jsx)(i.default,{variant:"subtitle1",children:e.packageName}),(0,a.jsx)(c.A,{label:"v".concat(e.version),size:"small",variant:"outlined"})]}),(0,a.jsxs)(i.default,{variant:"caption",color:"text.secondary",children:[e.entityCounts.flows," flows \xb7 ",e.entityCounts.models," models \xb7"," ",e.entityCounts.servers," servers \xb7 ",e.entityCounts.plannedExecutions," planned \xb7 installed ",new Date(e.installedAt).toLocaleString()]})]}),(0,a.jsx)(d.A,{color:"error",size:"small",startIcon:(0,a.jsx)(ew.A,{}),onClick:()=>f(e),disabled:y,children:"Uninstall"})]},e.packageName))}),(0,a.jsxs)(P.A,{open:null!==m,onClose:()=>y?void 0:f(null),children:[(0,a.jsxs)(R.A,{children:['Uninstall "',null==m?void 0:m.packageName,'"?']}),(0,a.jsx)(O.A,{children:(0,a.jsxs)(ev.A,{children:["This removes the flows, models, MCP servers and planned executions this package",(0,a.jsx)("strong",{children:" created"}),". Pre-existing entities the package merely updated in place are preserved. This cannot be undone."]})}),(0,a.jsxs)(U.A,{children:[(0,a.jsx)(d.A,{onClick:()=>f(null),disabled:y,children:"Cancel"}),(0,a.jsx)(d.A,{color:"error",variant:"contained",onClick:()=>m&&void E(m),disabled:y,startIcon:y?(0,a.jsx)(S.default,{size:16}):(0,a.jsx)(ew.A,{}),children:"Uninstall"})]})]})]})}var eS=r(33077),ek=r(29767),eC=r(53062),eE=r(84578),eF=r(52641),eI=r(95436),eT=r(41983),eN=r(12402),eP=r(61563),eR=r(42063),eO=r(68212);let ez=(0,V.h)("frontend/components/Packages/InstallPackageCard");function eM(e){var t,r;let{onInstalled:o}=e,[u,p]=(0,s.useState)(""),[h,m]=(0,s.useState)([]),[f,y]=(0,s.useState)(!1),[v,w]=(0,s.useState)(null),[j,b]=(0,s.useState)(!1),[A,C]=(0,s.useState)(null),[T,N]=(0,s.useState)(!1),[z,M]=(0,s.useState)(null),[W,U]=(0,s.useState)(null),[H,D]=(0,s.useState)({}),[J,q]=(0,s.useState)({}),[_,G]=(0,s.useState)(null),[V,B]=(0,s.useState)({}),K=(0,s.useCallback)(async e=>{y(!0),w(null);try{var t;let r=await X.searchRegistry({q:e.trim()||void 0,pageSize:24});m(null!=(t=r.items)?t:[]),b(!0)}catch(e){ez.warn("Failed to search package registry",e),w(e instanceof Error?e.message:String(e)),m([])}finally{y(!1)}},[]);(0,s.useEffect)(()=>{K("")},[]);let Z=(0,s.useCallback)(async e=>{C(e),U(null),G(null),D({}),q({}),B({}),M(null),N(!0);try{let r=await X.installFromRegistry({packageId:e.id,version:e.latestVersion,consentGranted:!1});if(!r.ok){var t;M((null==(t=r.errors)?void 0:t[0])||"Failed to fetch package preview.");return}U(r)}catch(e){ez.warn("Failed to fetch package preview",e),M(e instanceof Error?e.message:String(e))}finally{N(!1)}},[]),$=(0,s.useCallback)(async()=>{if(A&&W){N(!0),M(null);try{let e=await X.installFromRegistry({packageId:A.id,version:A.latestVersion,secrets:H,modelMappings:Object.fromEntries(Object.entries(J).filter(e=>{let[,t]=e;return""!==t})),consentGranted:!0});G(e),U(null),e.ok&&(null==o||o())}catch(e){ez.warn("Install failed",e),M(e instanceof Error?e.message:String(e))}finally{N(!1)}}},[A,W,H,J,o]),Y=(0,s.useCallback)(()=>{C(null),U(null),G(null),D({}),q({}),B({}),M(null)},[]),Q=null==W?void 0:W.preview;return(0,a.jsxs)(n.default,{sx:{maxWidth:{xs:"100%",md:1100},mx:"auto",mt:3},children:[(0,a.jsxs)(l.A,{direction:"row",spacing:1,alignItems:"center",sx:{mb:1},children:[(0,a.jsx)(eN.A,{color:"action"}),(0,a.jsx)(i.default,{variant:"h6",children:"Browse registry"})]}),(0,a.jsx)(g.A,{size:"small",fullWidth:!0,placeholder:"Search published packages…",value:u,onChange:e=>p(e.target.value),onKeyDown:e=>{"Enter"===e.key&&K(u)},InputProps:{startAdornment:(0,a.jsx)(x.A,{position:"start",children:(0,a.jsx)(L.A,{fontSize:"small"})}),endAdornment:f?(0,a.jsx)(x.A,{position:"end",children:(0,a.jsx)(S.default,{size:16})}):void 0},sx:{mb:2}}),v&&(0,a.jsx)(k.A,{severity:"error",sx:{mb:2},onClose:()=>w(null),children:v}),j&&!f&&0===h.length&&!v&&(0,a.jsxs)(i.default,{variant:"body2",color:"text.secondary",children:["No packages match “",u,"”."]}),(0,a.jsx)(eS.Ay,{container:!0,spacing:2,children:h.map(e=>(0,a.jsx)(eS.Ay,{item:!0,xs:12,sm:6,md:4,children:(0,a.jsx)(ek.A,{variant:"outlined",children:(0,a.jsx)(eC.A,{onClick:()=>void Z(e),sx:{height:"100%"},children:(0,a.jsxs)(eE.A,{children:[(0,a.jsxs)(l.A,{direction:"row",spacing:1,alignItems:"baseline",justifyContent:"space-between",children:[(0,a.jsx)(i.default,{variant:"subtitle1",noWrap:!0,children:e.name}),(0,a.jsx)(c.A,{size:"small",variant:"outlined",label:"v".concat(e.latestVersion)})]}),(0,a.jsx)(i.default,{variant:"caption",color:"text.secondary",display:"block",children:e.handle}),(0,a.jsx)(i.default,{variant:"body2",color:"text.secondary",sx:{mt:.5,minHeight:"2.5em"},children:e.description||"No description provided."}),(0,a.jsx)(l.A,{direction:"row",spacing:.5,sx:{mt:1,flexWrap:"wrap",gap:.5},children:e.tags.map(e=>(0,a.jsx)(c.A,{size:"small",label:e},e))}),(0,a.jsxs)(l.A,{direction:"row",spacing:.5,alignItems:"center",sx:{mt:1},children:[(0,a.jsx)(eP.A,{fontSize:"inherit",color:"disabled"}),(0,a.jsx)(i.default,{variant:"caption",color:"text.secondary",children:e.downloads})]})]})})})},e.id))}),(0,a.jsxs)(P.A,{open:null!==A,onClose:T?void 0:Y,maxWidth:"sm",fullWidth:!0,children:[(0,a.jsx)(R.A,{children:null==A?void 0:A.name}),(0,a.jsxs)(O.A,{children:[z&&(0,a.jsx)(k.A,{severity:"error",sx:{mb:2},onClose:()=>M(null),children:z}),T&&!W&&!_&&(0,a.jsx)(n.default,{sx:{display:"flex",justifyContent:"center",p:3},children:(0,a.jsx)(S.default,{size:24})}),Q&&(null==W?void 0:W.package)&&(0,a.jsxs)(n.default,{children:[(0,a.jsxs)(l.A,{direction:"row",spacing:1,alignItems:"center",children:[(0,a.jsx)(c.A,{size:"small",variant:"outlined",label:"v".concat(W.package.version)}),W.package.publisher&&(0,a.jsx)(c.A,{size:"small",variant:"outlined",label:W.package.publisher})]}),(0,a.jsxs)(i.default,{variant:"caption",color:"text.secondary",display:"block",sx:{mt:1},children:[Q.servers.length," MCP server(s) \xb7 ",Q.models.length," model(s) \xb7"," ",Q.flows.length," flow(s) \xb7 ",Q.plannedExecutions.length," planned execution(s)"]}),Q.servers.some(e=>e.requiredEnvMissing.length>0)&&(0,a.jsx)(k.A,{severity:"warning",sx:{mt:1},children:"Some MCP servers require environment values that aren't covered by a secret below — those servers will install disabled."}),Q.missingGlobals.length>0&&(0,a.jsxs)(k.A,{severity:"warning",sx:{mt:1},children:["This package expects host global variable(s) that aren't set yet:"," ",Q.missingGlobals.join(", "),". Set them in Settings after install, or the bound model(s)/server(s) won't have a working API key."]}),(0,a.jsx)(E.A,{sx:{my:2}}),Q.models.length>0&&(0,a.jsxs)(n.default,{sx:{mb:2},children:[(0,a.jsx)(i.default,{variant:"subtitle2",sx:{mb:.5},children:"Model substitutions"}),(0,a.jsx)(i.default,{variant:"body2",color:"text.secondary",sx:{mb:1},children:"Install each package model as new, or bind its flow nodes to a model already installed here."}),(0,a.jsx)(l.A,{spacing:1.5,children:Q.models.map(e=>{var t;return(0,a.jsxs)(eF.A,{size:"small",fullWidth:!0,children:[(0,a.jsx)(eI.A,{id:"model-mapping-".concat(e.id),children:e.displayName}),(0,a.jsxs)(F.A,{labelId:"model-mapping-".concat(e.id),label:e.displayName,value:null!=(t=J[e.id])?t:"",onChange:t=>q(r=>({...r,[e.id]:t.target.value})),children:[(0,a.jsx)(I.A,{value:"",children:"Install as new"}),Q.installedModels.map(e=>(0,a.jsx)(I.A,{value:e.id,children:e.displayName},e.id))]})]},e.id)})})]}),Q.secrets.length>0?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(i.default,{variant:"subtitle2",sx:{mb:1},children:"Secrets requested by this package"}),(0,a.jsx)(l.A,{spacing:1.5,sx:{mb:2},children:Q.secrets.map(e=>{var t;return(0,a.jsx)(g.A,{size:"small",type:V[e.key]?"text":"password",label:e.label||e.key,helperText:e.required?"Required — leave blank to install the dependent entity disabled":"Optional",value:null!=(t=H[e.key])?t:"",onChange:t=>D(r=>({...r,[e.key]:t.target.value})),fullWidth:!0,InputProps:{endAdornment:(0,a.jsx)(x.A,{position:"end",children:(0,a.jsx)(eT.A,{size:"small",tabIndex:-1,"aria-label":V[e.key]?"Hide secret":"Show secret",onClick:()=>B(t=>({...t,[e.key]:!t[e.key]})),children:V[e.key]?(0,a.jsx)(eO.A,{fontSize:"small"}):(0,a.jsx)(eR.A,{fontSize:"small"})})})}},e.key)})})]}):(0,a.jsx)(i.default,{variant:"body2",color:"text.secondary",sx:{mb:2},children:"This package doesn't request any secrets."}),(0,a.jsxs)(l.A,{direction:"row",spacing:1,children:[(0,a.jsx)(d.A,{variant:"contained",color:"primary",onClick:()=>void $(),disabled:T,startIcon:T?(0,a.jsx)(S.default,{size:16}):(0,a.jsx)(eN.A,{}),children:"Install package"}),(0,a.jsx)(d.A,{onClick:Y,disabled:T,children:"Cancel"})]})]}),_&&(0,a.jsxs)(n.default,{children:[(0,a.jsx)(k.A,{severity:_.ok?"success":"error",sx:{mb:1},children:_.ok?'Installed "'.concat(null==(t=_.package)?void 0:t.name,'": ').concat(_.created.length," created, ").concat(_.updated.length," updated, ").concat(_.disabled.length," disabled."):"Install failed: ".concat(null!=(r=_.errors[0])?r:"unknown error")}),_.missingGlobals.length>0&&(0,a.jsxs)(k.A,{severity:"warning",sx:{mb:1},children:["Set these global variable(s) in Settings for the installed entities to work:"," ",_.missingGlobals.join(", "),"."]}),(0,a.jsx)(d.A,{size:"small",onClick:Y,children:"Close"})]})]})]})]})}let eW=(0,V.h)("frontend/components/Packages");function eU(){let[e,t]=(0,s.useState)(!1),[r,o]=(0,s.useState)(0);return eW.debug("Rendering PackagesManager",{wizardOpen:e}),(0,a.jsxs)(n.default,{sx:{height:"100%",display:"flex",flexDirection:"column"},children:[(0,a.jsxs)(n.default,{sx:{p:2,display:"flex",justifyContent:"space-between",alignItems:"center",borderBottom:1,borderColor:"divider"},children:[(0,a.jsxs)(l.A,{direction:"row",spacing:1,alignItems:"center",children:[(0,a.jsx)(i.default,{variant:"h5",children:"Packages"}),(0,a.jsx)(c.A,{label:"experimental",size:"small",color:"warning",variant:"outlined"})]}),(0,a.jsx)(d.A,{variant:"contained",startIcon:(0,a.jsx)(p.A,{}),onClick:()=>t(!0),"data-tour":"packages-create",children:"Create package"})]}),(0,a.jsxs)(n.default,{sx:{flex:1,overflow:"auto",p:3},children:[(0,a.jsxs)(u.A,{variant:"outlined",sx:{p:4,display:"flex",flexDirection:"column",alignItems:"center",textAlign:"center",gap:2,maxWidth:{xs:"100%",md:1100},mx:"auto"},children:[(0,a.jsx)(h.A,{sx:{fontSize:48,color:"text.secondary"}}),(0,a.jsx)(i.default,{variant:"h6",children:"Bundle your FLUJO setup into a shareable package"}),(0,a.jsx)(i.default,{variant:"body2",color:"text.secondary",children:"A package bundles flows, models, MCP servers (by reference) and planned executions into a single manifest you can export and share. Secret values (API keys, tokens) are never included — only declarations of the secrets a recipient must supply at install time."}),(0,a.jsx)(d.A,{variant:"contained",startIcon:(0,a.jsx)(p.A,{}),onClick:()=>t(!0),children:"Create package"})]}),(0,a.jsx)(eM,{onInstalled:()=>o(e=>e+1)}),(0,a.jsx)(eA,{},r)]}),e&&(0,a.jsx)(ey,{open:e,onClose:()=>t(!1)})]})}var eL=r(9164),eH=r(94929);let eD=(0,V.h)("app/packages/page");function eJ(){var e,t;let r=(0,o.useRouter)(),{settings:l,settingsHydrated:i}=(0,eL.useStorage)(),c=i&&null!=(t=null==l||null==(e=l.experimental)?void 0:e.enabled)&&t;return((0,s.useEffect)(()=>{i&&!c&&(eD.debug("Experimental features disabled — redirecting away from /packages"),r.replace("/settings"))},[i,c,r]),i&&c)?(0,a.jsx)(n.default,{sx:{height:"100%",display:"flex",flexDirection:"column"},children:(0,a.jsx)(eU,{})}):(0,a.jsx)(eH.default,{})}},17897:(e,t,r)=>{"use strict";r.d(t,{S:()=>o});var a=r(56290);let s=(0,r(87021).h)("frontend/services/mcp/index");class n{async loadServerConfigs(){try{let e=await fetch("/api/mcp/servers"),t=await e.json();if(!e.ok||t&&t.error){let e=t&&t.error||"Failed to load server configs";return s.warn("Failed to load server configs:",e),{error:e}}return t}catch(e){return s.warn("Failed to load server configs:",e),{error:"Failed to load server configs"}}}async listServerTools(e){try{let t=this.toolsCache.get(e),r=Date.now();if(t&&r-t.timestamp<this.CACHE_TTL)return s.debug("Using cached tools for server ".concat(e)),{tools:t.tools};let a=await fetch("/api/mcp/servers/".concat(encodeURIComponent(e),"/tools")),n=await a.json();if(n.error)return s.warn("Error listing tools for server ".concat(e,":"),n.error),{tools:[],error:n.error};let o=Array.isArray(n.tools)?n.tools:[];return this.toolsCache.set(e,{tools:o,timestamp:r}),{tools:o}}catch(t){return s.warn("Failed to list tools for server ".concat(e,":"),t),{tools:[],error:"Failed to list tools: ".concat(t instanceof Error?t.message:"Unknown error")}}}clearToolsCache(e){e?(this.toolsCache.delete(e),s.debug("Cleared tools cache for server ".concat(e))):(this.toolsCache.clear(),s.debug("Cleared all tools cache"))}async listServerResources(e){try{let t=this.resourcesCache.get(e),r=Date.now();if(t&&r-t.timestamp<this.CACHE_TTL)return s.debug("Using cached resources for server ".concat(e)),t.data;let a=await fetch("/api/mcp/servers/".concat(encodeURIComponent(e),"/resources")),n=await a.json(),o={resources:Array.isArray(n.resources)?n.resources:[],resourceTemplates:Array.isArray(n.resourceTemplates)?n.resourceTemplates:[],error:n.error};return o.error||this.resourcesCache.set(e,{data:o,timestamp:r}),o}catch(t){return s.warn("Failed to list resources for server ".concat(e,":"),t),{resources:[],resourceTemplates:[],error:"Failed to list resources: ".concat(t instanceof Error?t.message:"Unknown error")}}}async readResource(e,t){try{let r=await fetch("/api/mcp/servers/".concat(encodeURIComponent(e),"/resources/read?uri=").concat(encodeURIComponent(t)));return await r.json()}catch(r){return s.warn("Failed to read resource ".concat(t," on server ").concat(e,":"),r),{success:!1,error:"Failed to read resource"}}}async listServerPrompts(e){try{let t=this.promptsCache.get(e),r=Date.now();if(t&&r-t.timestamp<this.CACHE_TTL)return s.debug("Using cached prompts for server ".concat(e)),{prompts:t.prompts};let a=await fetch("/api/mcp/servers/".concat(encodeURIComponent(e),"/prompts")),n=await a.json();if(n.error)return s.warn("Error listing prompts for server ".concat(e,":"),n.error),{prompts:[],error:n.error};let o=Array.isArray(n.prompts)?n.prompts:[];return this.promptsCache.set(e,{prompts:o,timestamp:r}),{prompts:o}}catch(t){return s.warn("Failed to list prompts for server ".concat(e,":"),t),{prompts:[],error:"Failed to list prompts: ".concat(t instanceof Error?t.message:"Unknown error")}}}async getPrompt(e,t,r){try{let a=await fetch("/api/mcp/servers/".concat(encodeURIComponent(e),"/prompts/get"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:t,arguments:r})});return await a.json()}catch(r){return s.warn("Failed to get prompt ".concat(t," on server ").concat(e,":"),r),{success:!1,error:"Failed to get prompt"}}}clearCapabilitiesCache(e){e?(this.resourcesCache.delete(e),this.promptsCache.delete(e)):(this.resourcesCache.clear(),this.promptsCache.clear())}checkResourceListVersion(e,t){var r;let a=null!=(r=this.resourceListVersions.get(e))?r:-1;return t>a&&(this.resourceListVersions.set(e,t),this.resourcesCache.delete(e),s.debug("checkResourceListVersion: cache invalidated for ".concat(e," (").concat(a," -> ").concat(t,")")),!0)}async callTool(e,t,r,a){try{let s=await fetch("/api/mcp/servers/".concat(encodeURIComponent(e),"/tools/").concat(encodeURIComponent(t)),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({args:r,timeout:a})});return await s.json()}catch(r){return s.warn("Failed to call tool ".concat(t," on server ").concat(e,":"),r),{error:"Failed to call tool"}}}async updateServerConfig(e,t){try{let r=await fetch("/api/mcp/servers/".concat(encodeURIComponent(e)),{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),a=await r.json();if(r.ok)return s.info("Successfully updated server config for ".concat(e)),{success:!0,data:a};if(void 0!==t.disabled)return s.info("Config update for ".concat(e," treated as success for toggle operation")),{success:!0,data:{...t,name:e},_originalError:a.error};return s.warn("Failed to update server config for ".concat(e,":"),a.error),{success:!1,error:a.error}}catch(t){return s.warn("Failed to update server config for ".concat(e,":"),t),{error:"Failed to update server config"}}}async testConnection(e,t){try{let r=await fetch("/api/mcp/test-connection",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...e,storedName:t})});return await r.json()}catch(t){return s.warn("Failed to test connection for ".concat(e.name,":"),t),{success:!1,error:"Failed to reach the FLUJO backend to run the connection test: ".concat(t instanceof Error?t.message:"Unknown error")}}}async testConnectionStreaming(e,t,r){try{let n=await fetch("/api/mcp/test-connection/stream",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...e,storedName:r})});if(!n.ok||!n.body)return s.warn("Streaming test-connection unavailable (status ".concat(n.status,"); falling back")),this.testConnection(e,r);let o=null;if(await (0,a.z)(n,e=>{t(e),"result"===e.type&&(o={success:e.success,error:e.error,requiresAuthentication:e.requiresAuthentication,oauthCapable:e.oauthCapable,data:e.data})}),o)return o;return s.warn("Streaming test-connection ended without a result event"),{success:!1,error:"The connection test stream ended unexpectedly without a result."}}catch(t){return s.warn("Streaming test connection failed for ".concat(e.name,"; falling back to non-streaming:"),t),this.testConnection(e,r)}}async probeOAuthCapability(e){try{let t=await fetch("/api/mcp/oauth-capability",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({serverUrl:e})});if(!t.ok)return{oauthCapable:!1};return await t.json()}catch(t){return s.warn("Failed to probe OAuth capability for ".concat(e,":"),t),{oauthCapable:!1}}}async getServerStatus(e){try{let t=await fetch("/api/mcp/servers/".concat(encodeURIComponent(e),"/status"),{headers:{Accept:"application/json"}}),r=await t.json();if(r.error)return s.warn("Error getting status for server ".concat(e,":"),r.error),{status:"error",message:r.error};return r}catch(t){return s.warn("Failed to get status for server ".concat(e,":"),t),{status:"error",message:"Failed to get server status: ".concat(t instanceof Error?t.message:"Unknown error")}}}async deleteServerConfig(e){try{let t=await fetch("/api/mcp/servers/".concat(encodeURIComponent(e)),{method:"DELETE"});return await t.json()}catch(t){return s.warn("Failed to delete server config for ".concat(e,":"),t),{error:"Failed to delete server config"}}}async retryServer(e){return s.debug("Retrying server status for: ".concat(e)),this.getServerStatus(e)}async restartServer(e){s.debug("Restarting server: ".concat(e));try{let t=await this.updateServerConfig(e,{disabled:!0});if(t.error)return s.warn("Failed to disable server ".concat(e," during restart:"),t.error),{error:"Failed to restart server: ".concat(t.error)};await new Promise(e=>setTimeout(e,1e3));let r=await this.updateServerConfig(e,{disabled:!1});if(r.error)return s.warn("Failed to enable server ".concat(e," during restart:"),r.error),{error:"Failed to restart server: ".concat(r.error)};return s.info("Successfully restarted server ".concat(e)),{success:!0}}catch(t){return s.warn("Failed to restart server ".concat(e,":"),t),{error:"Failed to restart server: ".concat(t instanceof Error?t.message:"Unknown error")}}}constructor(){this.toolsCache=new Map,this.resourcesCache=new Map,this.promptsCache=new Map,this.CACHE_TTL=6e4,this.resourceListVersions=new Map}}let o=new n},43076:(e,t,r)=>{"use strict";r.d(t,{N:()=>l,X:()=>o});let a=(0,r(87021).h)("frontend/services/model");class s{async fetchWithErrorHandling(e,t){try{a.debug("Making API request",{url:e,method:(null==t?void 0:t.method)||"GET"});let r=await fetch(e,t),s=null;try{if(204!==r.status){let t=r.headers.get("content-type");if(t&&t.includes("application/json"))s=await r.json();else{let n=await r.text();a.warn("Received non-JSON response",{url:e,contentType:t,text:n.substring(0,200)}),s=n}}}catch(t){throw a.error("Failed to parse response",{url:e,status:r.status,contentType:r.headers.get("content-type"),parseError:t}),Error("Invalid response format")}if(!r.ok){let n;throw n="object"==typeof s&&null!==s?s.error||s.message||s.errorMessage||JSON.stringify(s):s||"HTTP error! status: ".concat(r.status),a.error("Request failed",{url:e,method:(null==t?void 0:t.method)||"GET",status:r.status,error:n,data:s}),Error(n)}return a.debug("API request successful",{url:e,method:(null==t?void 0:t.method)||"GET",status:r.status}),s}catch(r){if(r instanceof TypeError&&"Failed to fetch"===r.message)throw a.error("Network error",{url:e,method:(null==t?void 0:t.method)||"GET",error:r}),Error("Unable to connect to the server. Please check your internet connection.");if(r instanceof Error)throw r;throw a.error("API request failed",{url:e,method:(null==t?void 0:t.method)||"GET",error:r}),Error("Failed to complete request")}}async tryLoadModels(){try{let e=await this.fetchWithErrorHandling("/api/model");return Array.isArray(e)?e:null}catch(e){return a.error("Failed to load models",e),null}}async loadModels(){var e;return null!=(e=await this.tryLoadModels())?e:[]}async getModel(e){try{return await this.fetchWithErrorHandling("/api/model/".concat(encodeURIComponent(e)))}catch(t){return a.error("Failed to get model",{id:e,error:t}),null}}async addModel(e){try{if(!e.provider)return{success:!1,error:"Provider is required"};a.debug("Attempting to add model",{displayName:e.displayName,provider:e.provider});let t=await this.fetchWithErrorHandling("/api/model",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});return a.debug("Model added successfully",{modelId:t.id,displayName:t.displayName}),{success:!0,model:t}}catch(r){a.error("Failed to add model",{displayName:e.displayName,provider:e.provider,error:r instanceof Error?r.message:r});let t=r instanceof Error?r.message:"Failed to add model";if(t.includes("display name already exists"))return{success:!1,error:'The display name "'.concat(e.displayName,'" is already in use. Please choose a different name.')};if(t.includes("technical name already exists"))return{success:!1,error:'A model with the name "'.concat(e.name,'" already exists. Please choose a different name.')};return{success:!1,error:t}}}async updateModel(e){try{if(!e.id)return{success:!1,error:"Model ID is required"};a.debug("Attempting to update model",{modelId:e.id,displayName:e.displayName});let t=await this.fetchWithErrorHandling("/api/model/".concat(encodeURIComponent(e.id)),{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});return a.debug("Model updated successfully",{modelId:e.id,displayName:e.displayName}),{success:!0,model:t}}catch(r){a.error("Failed to update model",{modelId:e.id,displayName:e.displayName,error:r instanceof Error?r.message:r});let t=r instanceof Error?r.message:"Failed to update model";return t.includes("display name")&&t.includes("already exists"),{success:!1,error:t}}}async deleteModel(e){try{if(!e)return{success:!1,error:"Model ID is required"};let t=await this.getModel(e);if(!t)return{success:!1,error:"Model not found"};return a.debug("Attempting to delete model",{modelId:e,displayName:t.displayName}),await this.fetchWithErrorHandling("/api/model/".concat(encodeURIComponent(e)),{method:"DELETE"}),a.debug("Model deleted successfully",{modelId:e,displayName:t.displayName}),{success:!0}}catch(s){let t;try{let r=await this.getModel(e);t=null==r?void 0:r.displayName}catch(e){}a.error("Failed to delete model",{modelId:e,displayName:t,error:s instanceof Error?s.message:s});let r=s instanceof Error?s.message:"Failed to delete model";if(r.includes("not found"))return{success:!1,error:"The model no longer exists or has already been deleted"};return{success:!1,error:r}}}async updateModelApiKey(e,t){try{let r=await this.getModel(e);if(!r)return{success:!1,error:"Model not found"};return await this.updateModel({...r,ApiKey:t})}catch(t){return a.error("Failed to update model API key",{modelId:e,error:t}),{success:!1,error:t instanceof Error?t.message:"Failed to update API key"}}}async testModel(e){return a.debug("Testing model",{modelId:e.modelId,name:e.name}),await this.fetchWithErrorHandling("/api/model/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}async fetchProviderModels(e,t,r,s){try{var n;a.debug("Fetching provider models",{baseUrl:e,modelId:t,searchTerm:r?'"'.concat(r,'"'):"none",apiKey:s?"provided":"not provided"});let o=await this.fetchWithErrorHandling("/api/model/provider",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({baseUrl:e,modelId:t,searchTerm:r,apiKey:s})});return a.debug("Provider models fetched successfully",{baseUrl:e,modelCount:(null==(n=o.models)?void 0:n.length)||0,searchTerm:r?'"'.concat(r,'"'):"none"}),o.models||[]}catch(t){return a.error("Failed to fetch provider models",{baseUrl:e,searchTerm:r,error:t}),[]}}}let n=null,o=()=>(n||(n=new s),n),l=new Proxy({},{get(e,t){let r=o(),a=r[t];return"function"==typeof a?a.bind(r):a}})},56290:(e,t,r)=>{"use strict";async function a(e,t){if(!e.body||"function"!=typeof e.body.getReader)throw Error("Response has no readable body to stream");let r=e.body.getReader(),a=new TextDecoder,s=function(){let e="",t=(e,t)=>{let r=e.trim();if(r)try{t.push(JSON.parse(r))}catch(e){}};return{push(r){let a;e+=r;let s=[];for(;(a=e.indexOf("\n"))>=0;)t(e.slice(0,a),s),e=e.slice(a+1);return s},flush(){let r=[];return t(e,r),e="",r}}}();try{for(;;){let{value:e,done:n}=await r.read();if(n)break;for(let r of s.push(a.decode(e,{stream:!0})))t(r)}let e=a.decode();if(e)for(let r of s.push(e))t(r);for(let e of s.flush())t(e)}finally{try{r.releaseLock()}catch(e){}}}r.d(t,{z:()=>a})},90057:(e,t,r)=>{"use strict";r.d(t,{g:()=>o});var a=r(74879);let s=(0,r(87021).h)("frontend/services/flow/index");class n{async loadFlows(){s.debug("loadFlows: Entering method");try{if(this.flowsCache)return s.debug("loadFlows: Using cached flows",{count:this.flowsCache.length}),this.flowsCache;let e=await fetch("/api/flow");if(!e.ok){let t=await e.json();throw Error(t.error||"Failed to load flows")}let t=await e.json();return s.debug("loadFlows: Loaded flows from API",{count:t.length}),this.flowsCache=t,t}catch(e){return s.warn("loadFlows: Failed to load flows:",e),[]}}async getFlow(e){s.debug("getFlow: Entering method",{flowId:e});try{if(this.flowsCache){let t=this.flowsCache.find(t=>t.id===e);if(t)return s.debug("getFlow: Using cached flow",{flowId:e}),t}let t=await fetch("/api/flow/".concat(encodeURIComponent(e)));if(!t.ok){if(404===t.status)return s.debug("getFlow: Flow ".concat(e," not found")),null;let r=await t.json();throw Error(r.error||"Failed to get flow: ".concat(e))}let r=await t.json();return s.debug("getFlow: Retrieved flow from API",{flowId:e}),r}catch(t){return s.warn("getFlow: Failed to get flow ".concat(e,":"),t),null}}async addFlow(e){s.debug("addFlow: Entering method",{flowId:e.id,flowName:e.name,nodeCount:e.nodes.length,edgeCount:e.edges.length});try{let t=await fetch("/api/flow",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok){let e=await t.json();return{success:!1,error:e.error||"Failed to add flow"}}let r=await t.json();return this.flowsCache&&this.flowsCache.push(r),s.debug("addFlow: Flow added successfully",{flowId:e.id}),{success:!0}}catch(e){return s.warn("addFlow: Failed to add flow:",e),{success:!1,error:e instanceof Error?e.message:"Failed to add flow"}}}async generateFlow(e,t,r){s.debug("generateFlow: Entering method",{modelId:t,allowInstall:null==r?void 0:r.allowInstall,allowSubflows:null==r?void 0:r.allowSubflows,maxDepth:null==r?void 0:r.maxDepth});try{var a,n,o,l,i,c,d;let u=await fetch("/api/flow/generate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({description:e,modelId:t,allowInstall:(null==r?void 0:r.allowInstall)===!0,allowSubflows:(null==r?void 0:r.allowSubflows)===!0,..."number"==typeof(null==r?void 0:r.maxDepth)?{maxDepth:r.maxDepth}:{}})}),p=await u.json().catch(()=>null);if(!u.ok)return{success:!1,error:(null==p?void 0:p.error)||"Failed to generate flow"};let h=Array.isArray(p.flows)&&p.flows.length>0?p.flows:[{flow:p.flow,validation:p.validation}];return s.debug("generateFlow: Draft generated",{flowId:null==(a=p.flow)?void 0:a.id,flowCount:h.length,attempts:p.attempts,errorCount:null==(n=p.validation)?void 0:n.errorCount,installedServers:null!=(i=null==(o=p.installedServers)?void 0:o.length)?i:0}),{success:!0,flow:p.flow,validation:p.validation,flows:h,rootFlowId:null!=(c=p.rootFlowId)?c:null==(l=p.flow)?void 0:l.id,attempts:p.attempts,installedServers:null!=(d=p.installedServers)?d:[]}}catch(e){return s.warn("generateFlow: Failed to generate flow:",e),{success:!1,error:e instanceof Error?e.message:"Failed to generate flow"}}}async improveFlow(e,t,r,a){s.debug("improveFlow: Entering method",{flowId:null==e?void 0:e.id,modelId:r,allowInstall:null==a?void 0:a.allowInstall});try{var n,o,l,i,c;let d=await fetch("/api/flow/improve",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({flow:e,description:t,modelId:r,allowInstall:(null==a?void 0:a.allowInstall)===!0})}),u=await d.json().catch(()=>null);if(!d.ok)return{success:!1,error:(null==u?void 0:u.error)||"Failed to improve flow"};return s.debug("improveFlow: Draft revised",{flowId:null==(n=u.flow)?void 0:n.id,attempts:u.attempts,errorCount:null==(o=u.validation)?void 0:o.errorCount,installedServers:null!=(i=null==(l=u.installedServers)?void 0:l.length)?i:0}),{success:!0,flow:u.flow,validation:u.validation,attempts:u.attempts,installedServers:null!=(c=u.installedServers)?c:[]}}catch(e){return s.warn("improveFlow: Failed to improve flow:",e),{success:!1,error:e instanceof Error?e.message:"Failed to improve flow"}}}async updateFlow(e){s.debug("updateFlow: Entering method",{flowId:e.id,flowName:e.name,nodeCount:e.nodes.length,edgeCount:e.edges.length});try{let t=await fetch("/api/flow/".concat(encodeURIComponent(e.id)),{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok){let e=await t.json();return{success:!1,error:e.error||"Failed to update flow"}}let r=await t.json();if(this.flowsCache){let t=this.flowsCache.findIndex(t=>t.id===e.id);t>=0?this.flowsCache[t]=r:this.flowsCache.push(r)}return s.debug("updateFlow: Flow updated successfully",{flowId:e.id}),{success:!0}}catch(e){return s.warn("updateFlow: Failed to update flow:",e),{success:!1,error:e instanceof Error?e.message:"Failed to update flow"}}}async deleteFlow(e){s.debug("deleteFlow: Entering method",{flowId:e});try{let t=await fetch("/api/flow/".concat(encodeURIComponent(e)),{method:"DELETE"});if(!t.ok){let e=await t.json();return{success:!1,error:e.error||"Failed to delete flow"}}return this.flowsCache&&(this.flowsCache=this.flowsCache.filter(t=>t.id!==e)),s.debug("deleteFlow: Flow deleted successfully",{flowId:e}),{success:!0}}catch(e){return s.warn("deleteFlow: Failed to delete flow:",e),{success:!1,error:e instanceof Error?e.message:"Failed to delete flow"}}}async listFlowVersions(e){s.debug("listFlowVersions: Entering method",{flowId:e});try{let t=await fetch("/api/flow/".concat(encodeURIComponent(e),"/versions"));if(!t.ok){let e=await t.json().catch(()=>null);throw Error((null==e?void 0:e.error)||"Failed to list flow versions")}let r=await t.json();return Array.isArray(r.versions)?r.versions:[]}catch(t){return s.warn("listFlowVersions: Failed for flow ".concat(e,":"),t),[]}}async getFlowVersion(e,t){s.debug("getFlowVersion: Entering method",{flowId:e,versionId:t});try{let r=await fetch("/api/flow/".concat(encodeURIComponent(e),"/versions/").concat(encodeURIComponent(t)));if(!r.ok){if(404===r.status)return null;let e=await r.json().catch(()=>null);throw Error((null==e?void 0:e.error)||"Failed to get flow version")}return await r.json()}catch(r){return s.warn("getFlowVersion: Failed for ".concat(e,"/").concat(t,":"),r),null}}createNode(e,t){return s.debug("createNode: Entering method",{type:e,position:t}),{id:(0,a.A)(),type:e,position:t,data:{label:"".concat("mcp"===e?"MCP":e.charAt(0).toUpperCase()+e.slice(1)," Node"),type:e,properties:{}}}}createStartNode(){return{id:(0,a.A)(),type:"start",position:{x:250,y:150},data:{label:"Start Node",type:"start",properties:{promptTemplate:""}}}}createNewFlow(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"NewFlow";s.debug("createNewFlow: Entering method",{name:e});let t=Date.now();return{id:(0,a.A)(),name:e,createdAt:t,updatedAt:t,nodes:[this.createStartNode()],edges:[]}}createHistoryEntry(e,t){return s.debug("createHistoryEntry: Entering method"),{nodes:[...e],edges:[...t]}}generateSampleFlow(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"Sample Flow";return s.debug("generateSampleFlow: Entering method",{name:e}),{id:(0,a.A)(),name:e,nodes:[{id:"1",type:"start",position:{x:250,y:50},data:{label:"Start Node",type:"start",properties:{prompt:"Enter your query here",systemMessage:"You are a helpful assistant",temperature:0}}},{id:"2",type:"process",position:{x:250,y:200},data:{label:"Process Node",type:"process",properties:{operation:"transform",enabled:!0}}},{id:"3",type:"finish",position:{x:250,y:350},data:{label:"Finish Node",type:"finish",properties:{format:"json",template:'{ "result": {{data}} }'}}},{id:"4",type:"mcp",position:{x:450,y:200},data:{label:"MCP Node",type:"mcp",properties:{channels:2,mode:"parallel"}}}],edges:[{id:"e1-2",source:"1",target:"2",type:"custom"},{id:"e2-3",source:"2",target:"3",type:"custom"}]}}constructor(){this.flowsCache=null}}let o=new n},93632:(e,t,r)=>{"use strict";r.d(t,{P:()=>n});let a=(0,r(87021).h)("frontend/services/plannedExecutions");class s{async list(){try{let e=await fetch("/api/planned-executions");if(!e.ok)throw Error("HTTP ".concat(e.status));return await e.json()}catch(e){return a.warn("Failed to list planned executions",e),{paused:!1,executions:[]}}}async create(e){try{let t=await fetch("/api/planned-executions",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),r=await t.json();if(!t.ok)return{success:!1,error:(null==r?void 0:r.error)||"HTTP ".concat(t.status)};return{success:!0,execution:r.execution}}catch(e){return{success:!1,error:e instanceof Error?e.message:"Request failed"}}}async update(e,t){try{let r=await fetch("/api/planned-executions/".concat(e),{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),a=await r.json();if(!r.ok)return{success:!1,error:(null==a?void 0:a.error)||"HTTP ".concat(r.status)};return{success:!0,execution:a.execution}}catch(e){return{success:!1,error:e instanceof Error?e.message:"Request failed"}}}async delete(e){try{let t=await fetch("/api/planned-executions/".concat(e),{method:"DELETE"});if(!t.ok){let e=await t.json().catch(()=>null);return{success:!1,error:(null==e?void 0:e.error)||"HTTP ".concat(t.status)}}return{success:!0}}catch(e){return{success:!1,error:e instanceof Error?e.message:"Request failed"}}}async setPaused(e){try{let t=await fetch("/api/planned-executions",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({paused:e})});if(!t.ok){let e=await t.json().catch(()=>null);return{success:!1,error:(null==e?void 0:e.error)||"HTTP ".concat(t.status)}}return{success:!0}}catch(e){return{success:!1,error:e instanceof Error?e.message:"Request failed"}}}async runNow(e){try{let t=await fetch("/api/planned-executions/".concat(e,"/run"),{method:"POST"}),r=await t.json();if(!t.ok)return{success:!1,error:(null==r?void 0:r.error)||"HTTP ".concat(t.status)};return{success:!0,record:r.record}}catch(e){return{success:!1,error:e instanceof Error?e.message:"Request failed"}}}async loadRuns(e){try{let t=await fetch("/api/planned-executions/".concat(e,"/runs"));if(!t.ok)throw Error("HTTP ".concat(t.status));let r=await t.json();return Array.isArray(null==r?void 0:r.runs)?r.runs:[]}catch(t){return a.warn("Failed to load runs for ".concat(e),t),[]}}async previewSchedule(e,t){try{let r=await fetch("/api/planned-executions/preview-schedule",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({cron:e,timezone:t})});if(!r.ok)throw Error("HTTP ".concat(r.status));return await r.json()}catch(e){return{valid:!1,error:e instanceof Error?e.message:"Preview failed",nextRuns:[]}}}}let n=new s},94460:(e,t,r)=>{Promise.resolve().then(r.bind(r,4682))},94929:(e,t,r)=>{"use strict";r.d(t,{default:()=>o});var a=r(95155);r(12115);var s=r(94049),n=r(4474);let o=e=>{let{size:t="medium",color:r="primary",className:o="",sx:l={}}=e,i="white"===r?{color:"#fff",...l}:l;return(0,a.jsxs)(s.default,{component:"span",sx:{display:"inline-block",lineHeight:0,...i},className:o,role:"status",children:[(0,a.jsx)(n.default,{size:{small:16,medium:24,large:36}[t],color:"white"===r?"inherit":r,"aria-hidden":"true"}),(0,a.jsx)(s.default,{component:"span",sx:{position:"absolute",width:"1px",height:"1px",padding:0,margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:0},children:"Loading..."})]})}}},e=>{e.O(0,[2678,4754,9244,3392,1871,7111,2003,9562,488,3272,3077,9581,3659,469,3560,3452,5441,9164,8855,8441,1255,7358],()=>e(e.s=94460)),_N_E=e.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8974,9195],{3195:(e,t,n)=>{Promise.resolve().then(n.bind(n,89547))},69195:(e,t,n)=>{"use strict";n.r(t),n.d(t,{TourProvider:()=>d,useTour:()=>l});var a=n(95155),o=n(12115),i=n(9164),r=n(77326);let s=(0,n(87021).h)("frontend/contexts/TourContext"),c=(0,o.createContext)({isActive:!1,stepIndex:0,startTour:()=>{},next:()=>{},back:()=>{},endTour:()=>{}}),l=()=>(0,o.useContext)(c),d=e=>{var t;let{children:n}=e,{settings:l,updateSettings:d,isLoading:u,settingsHydrated:h}=(0,i.useStorage)(),[p,f]=(0,o.useState)(!1),[g,m]=(0,o.useState)(0),y=(0,o.useRef)(!1),b=(0,o.useCallback)(()=>{var e;d({...l,onboarding:{...null!=(e=l.onboarding)?e:{},completed:!0}}).catch(e=>s.warn("Failed to persist onboarding completion",e))},[l,d]),v=(0,o.useCallback)(()=>{s.info("Starting guided tour"),m(0),f(!0)},[]),w=(0,o.useCallback)(()=>{s.info("Ending guided tour"),f(!1),b()},[b]),k=(0,o.useCallback)(()=>{m(e=>e>=r.$.length-1?(f(!1),b(),e):e+1)},[b]),x=(0,o.useCallback)(()=>{m(e=>Math.max(0,e-1))},[]);return(0,o.useEffect)(()=>{var e;u||!h||y.current||(y.current=!0,(null==(e=l.onboarding)?void 0:e.completed)!==!0&&(s.info("First run detected — auto-starting guided tour"),v()))},[u,h,null==(t=l.onboarding)?void 0:t.completed,v]),(0,a.jsx)(c.Provider,{value:{isActive:p,stepIndex:g,startTour:v,next:k,back:x,endTour:w},children:n})}},77326:(e,t,n)=>{"use strict";n.d(t,{$:()=>a});let a=[{id:"welcome",path:"/",placement:"center",title:"Welcome to FLUJO \uD83D\uDC4B",body:"This quick tour walks you through going from zero to a running AI flow.\n\nYou'll add a model, connect a tool server, build a flow, and run it in chat. It takes about a minute — you can skip any time."},{id:"add-model",path:"/models",target:'[data-tour="add-model"]',placement:"bottom",title:"1. Add a model",body:'FLUJO needs at least one AI model to think with. Click "Add Model" to configure one.\n\nTip: an OpenRouter API key gives you access to several free models — paste the key, name the model, pick a free one, and add a custom instruction.'},{id:"add-mcp-server",path:"/mcp",target:'[data-tour="add-mcp-server"]',placement:"bottom",title:"2. Connect a tool server (MCP)",body:'MCP servers give your model real tools — file access, image generation, web search, and more.\n\nClick "Add Server" and install the "Everything" reference server to try the full range of capabilities while you learn.'},{id:"new-flow",path:"/flows",target:'[data-tour="new-flow"]',placement:"bottom",title:"3. Build a flow",body:'A flow wires everything together. Click "New Flow" to open the builder.\n\nConnect Start → Process → Finish, attach your model to the Process node, and bind the Everything MCP server so the model can use its tools.'},{id:"chat-input",path:"/chat",target:'[data-tour="chat-input"]',placement:"top",title:"4. Run it in chat",body:"Pick your flow from the selector, then send a message here.\n\nTry asking it to generate an image with the MCP server and tell you a joke — you'll see the flow execute live, step by step."},{id:"docs",path:"/chat",target:'[data-tour="nav-docs"]',placement:"bottom",title:"Need the API?",body:"FLUJO exposes an OpenAI-compatible API and a full REST surface. The Docs page lists every endpoint with its method, parameters, and response shape.\n\nYou can re-run this tour any time from Settings → Onboarding."},{id:"finish",path:"/chat",placement:"center",title:"You're all set \uD83C\uDF89",body:"That's the whole loop: models, tools, flows, and chat.\n\nExplore at your own pace — and remember the Docs page and Settings are there when you need them."}]},87021:(e,t,n)=>{"use strict";n.d(t,{h:()=>c});let a={LOG_LEVEL:3},o={VERBOSE:-1,DEBUG:0,INFO:1,WARN:2,ERROR:3},i="number"==typeof a.LOG_LEVEL?a.LOG_LEVEL:o.ERROR;function r(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(t>6)return String(e);if(!(e instanceof Error))return e;let n={name:e.name,message:e.message};for(let a of Object.getOwnPropertyNames(e)){if("name"===a||"message"===a)continue;let o=e[a];"function"!=typeof o&&("stack"===a?n.stack=o:"cause"===a?n.cause=r(o,t+1):"errors"===a&&Array.isArray(o)?n.errors=o.map(e=>r(e,t+1)):n[a]=o)}return n}function s(e,t,n,a,s){if(e>=("number"==typeof s?s:i)){if("function"==typeof a)try{a=a()}catch(e){a="[lazy log data threw]"}let i=new Date().toISOString(),s="[".concat(i,"] [").concat(t,"]"),c="".concat(s," ").concat(n);if(void 0!==a)if(a instanceof Error||"object"==typeof a)try{let e=a instanceof Error?r(a):a,t=JSON.stringify(e,(e,t)=>t instanceof Error?r(t):t,2);c+=":\n".concat(t)}catch(e){c+=": [Object cannot be stringified]"}else c+=": ".concat(a);switch(e){case o.VERBOSE:console.debug("[VERBOSE] ".concat(c));break;case o.DEBUG:console.debug(c);break;case o.INFO:console.info(c);break;case o.WARN:console.warn(c);break;case o.ERROR:console.error(c);break;default:console.log(c)}}}function c(e,t){let n,a=((n=e.replace(/^src\//,"")).startsWith("/")&&(n=n.substring(1)),n);return{verbose:(e,n)=>{s(o.VERBOSE,a,e,n,t)},debug:(e,n)=>{s(o.DEBUG,a,e,n,t)},info:(e,n)=>{s(o.INFO,a,e,n,t)},warn:(e,n)=>{s(o.WARN,a,e,n,t)},error:(e,n)=>{s(o.ERROR,a,e,n,t)}}}},89547:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>k});var a=n(95155),o=n(97322),i=n(22003),r=n(91871),s=n(4474),c=n(94049),l=n(25635),d=n(33077),u=n(2300),h=n(52619),p=n.n(h),f=n(15239),g=n(12115),m=n(87021),y=n(9164),b=n(69195);let v=(0,m.h)("app/page"),w=[{title:"Model Management",description:"Securely store and manage your AI model configurations and API keys.",icon:"/file.svg",link:"/models"},{title:"MCP Integration",description:"Connect and manage MCP servers with environment variables and tool testing.",icon:"/globe.svg",link:"/mcp"},{title:"Flow Builder",description:"Create and manage visual flows for your AI applications.",icon:"/window.svg",link:"/flows"}];function k(){var e;v.debug("Rendering HomePage");let{settings:t}=(0,y.useStorage)(),{startTour:n}=(0,b.useTour)(),[h,m]=(0,g.useState)(!0),[k,x]=(0,g.useState)(!1),[E,O]=(0,g.useState)(null),[A,S]=(0,g.useState)(!1),[j,C]=(0,g.useState)(null),R=(0,g.useRef)(!1);(0,g.useEffect)(()=>{var e;(null==t||null==(e=t.update)?void 0:e.checkOnStartup)&&!R.current&&(R.current=!0,(async()=>{try{v.info("Checking for FLUJO updates");let e=await fetch("/api/update");if(!e.ok)return;let t=await e.json();t.updateAvailable&&O({behindBy:t.behindBy,branch:t.branch})}catch(e){v.warn("Update check failed",e)}})())},[null==t||null==(e=t.update)?void 0:e.checkOnStartup]);let P=async()=>{S(!0),C(null);try{let e=await fetch("/api/update",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"apply"})}),t=await e.json();if(!e.ok||!1===t.success){C(t.error||"Update failed."),S(!1);return}if(t.restarting){let e=!1,t=async()=>{try{if((await fetch("/api/cwd",{cache:"no-store"})).ok&&e)return void window.location.reload()}catch(t){e=!0}setTimeout(t,3e3)};setTimeout(t,5e3)}else S(!1),O(null)}catch(e){v.error("Update failed",e),C("Update failed."),S(!1)}};return(0,g.useEffect)(()=>{v.info("Checking encryption status"),(async()=>{try{v.debug("Fetching encryption initialization status");let e=await fetch("/api/encryption/secure",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"check_initialized"})});if(e.ok){let t=await e.json();if(v.debug("Encryption initialization status received",{initialized:t.initialized}),m(!0===t.initialized),!0===t.initialized){v.debug("Checking if user encryption is enabled");let e=await fetch("/api/encryption/secure",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"check_user_encryption"})});if(e.ok){let t=await e.json();v.debug("User encryption status received",{userEncryption:t.userEncryption}),x(!0===t.userEncryption)}}}else v.error("Failed to check encryption status"),m(!1)}catch(e){v.error("Error checking encryption status",e),m(!1)}})()},[]),(0,a.jsxs)(o.A,{maxWidth:"lg",sx:{py:8},children:[E&&(0,a.jsx)(i.A,{severity:"info",sx:{mb:4},action:(0,a.jsx)(r.A,{color:"inherit",size:"small",onClick:P,disabled:A,startIcon:A?(0,a.jsx)(s.default,{size:16,color:"inherit"}):void 0,children:A?"Updating…":"Update now"}),children:A?"Updating FLUJO and restarting — the page will reload automatically.":"A FLUJO update is available (".concat(E.behindBy," new commit").concat(1===E.behindBy?"":"s"," on ").concat(E.branch,").")}),j&&(0,a.jsx)(i.A,{severity:"error",sx:{mb:4},onClose:()=>C(null),children:j}),h?k?null:(0,a.jsxs)(i.A,{severity:"info",sx:{mb:4},children:["Your data is protected with default encryption. For enhanced security, set a custom encryption password in the ",(0,a.jsx)(p(),{href:"/settings",children:"settings"}),"."]}):(0,a.jsxs)(i.A,{severity:"warning",sx:{mb:4},children:["Warning: Encryption is not initialized. Sensitive data may not be properly protected. Please visit the ",(0,a.jsx)(p(),{href:"/settings",children:"settings"})," page."]}),(0,a.jsxs)(c.default,{sx:{textAlign:"center",mb:8},children:[(0,a.jsx)(l.default,{variant:"h2",component:"h1",gutterBottom:!0,children:"FLUJO"}),(0,a.jsx)(l.default,{variant:"h5",color:"text.secondary",sx:{mb:4},children:"A browser-based application for managing models, MCP servers, flows and chat interactions"}),(0,a.jsx)(r.A,{variant:"contained",size:"large",sx:{mr:2},onClick:n,children:"Get Started"})]}),(0,a.jsx)(d.Ay,{container:!0,spacing:4,children:w.map(e=>(0,a.jsx)(d.Ay,{item:!0,xs:12,md:4,children:(0,a.jsxs)(u.A,{component:p(),href:e.link,sx:{p:4,height:"100%",display:"flex",flexDirection:"column",alignItems:"center",textAlign:"center",textDecoration:"none",color:"text.primary",transition:"transform 0.2s","&:hover":{transform:"translateY(-4px)"}},children:[(0,a.jsx)(c.default,{sx:{mb:2,width:48,height:48,position:"relative"},children:(0,a.jsx)(f.default,{src:e.icon,alt:e.title,fill:!0,style:{objectFit:"contain"}})}),(0,a.jsx)(l.default,{variant:"h5",component:"h2",gutterBottom:!0,children:e.title}),(0,a.jsx)(l.default,{color:"text.secondary",children:e.description})]})},e.title))})]})}}},e=>{e.O(0,[2678,4754,9244,3392,1871,2003,3077,4523,8834,9164,8441,1255,7358],()=>e(e.s=3195)),_N_E=e.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4662,9195],{748:(e,t,r)=>{"use strict";r.d(t,{kY:()=>o,Ic:()=>i});var a=r(26796),n=r(87021);let o={light:{background:"#FFFFFF",foreground:"#2C3E50",surface:"#F5F6FA",surfaceRaised:"#FFFFFF",paperBackground:"#F5F6FA",textSecondary:"#7F8C8D",textDisabled:"#9CA3AF",border:"#e5e7eb",heading:"#111",text:"#333",secondaryText:"#666",error:{background:"#fef2f2",border:"#fecaca",text:"#dc2626"},domain:{resource:"#009688",resourceSoft:"#4DB6AC",signal:"#7E57C2",startNode:"#795548",codeBackground:"#f5f5f5",http:{get:"#2e7d32",post:"#1565c0",put:"#e65100",patch:"#6a1b9a",delete:"#c62828"},transport:{stdio:{fg:"#1976d2",bg:"#e3f2fd"},websocket:{fg:"#2e7d32",bg:"#e8f5e8"},sse:{fg:"#f57c00",bg:"#fff3e0"},streamable:{fg:"#00796b",bg:"#e0f2f1"},default:{fg:"#757575",bg:"#f5f5f5"}}}},dark:{background:"#0f1319",foreground:"#eef1f5",surface:"#1a212b",surfaceRaised:"#242d3a",paperBackground:"#1a212b",textSecondary:"#b4bdca",textDisabled:"#6b7280",border:"#37404e",heading:"#f5f7fa",text:"#eef1f5",secondaryText:"#b4bdca",error:{background:"#2a1618",border:"#5a2a2e",text:"#ff6b6b"},domain:{resource:"#26a69a",resourceSoft:"#4DB6AC",signal:"#9575CD",startNode:"#a1887f",codeBackground:"#242d3a",http:{get:"#66bb6a",post:"#5b9dff",put:"#ffa726",patch:"#ba68c8",delete:"#ef5350"},transport:{stdio:{fg:"#90caf9",bg:"#1e2a3a"},websocket:{fg:"#a5d6a7",bg:"#1e2e22"},sse:{fg:"#ffcc80",bg:"#33281a"},streamable:{fg:"#80cbc4",bg:"#17322e"},default:{fg:"#b4bdca",bg:"#242d3a"}}}}},s=(0,n.h)("frontend/utils/theme");function i(){let{isDarkMode:e}=(0,a.useTheme)();return s.debug("useThemeUtils called with isDarkMode: ".concat(e)),{getThemeValue:(t,r)=>e?r:t,getThemeColor:t=>{let r=t.split("."),a=o[e?"dark":"light"];for(let e of r)if(!a||"object"!=typeof a||!(e in a))return s.warn("Theme color path not found: ".concat(t)),"";else a=a[e];return a},colors:e?o.dark:o.light,isDarkMode:e}}},17325:(e,t,r)=>{"use strict";r.d(t,{A:()=>b});var a=r(12115),n=r(2821),o=r(57001),s=r(48116),i=r(16625),l=r(85795),d=r(95195);function c(e){return(0,d.Ay)("MuiFormGroup",e)}(0,l.A)("MuiFormGroup",["root","row","error"]);var u=r(45918),h=r(75108),p=r(95155);let x=(0,s.Ay)("div",{name:"MuiFormGroup",slot:"Root",overridesResolver:(e,t)=>{let{ownerState:r}=e;return[t.root,r.row&&t.row]}})({display:"flex",flexDirection:"column",flexWrap:"wrap",variants:[{props:{row:!0},style:{flexDirection:"row"}}]}),b=a.forwardRef(function(e,t){let r=(0,i.b)({props:e,name:"MuiFormGroup"}),{className:a,row:s=!1,...l}=r,d=(0,u.A)(),b=(0,h.A)({props:r,muiFormControl:d,states:["error"]}),m={...r,row:s,error:b.error},g=(e=>{let{classes:t,row:r,error:a}=e;return(0,o.A)({root:["root",r&&"row",a&&"error"]},c,t)})(m);return(0,p.jsx)(x,{className:(0,n.A)(g.root,a),ownerState:m,ref:t,...l})})},21422:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});var a=r(15485),n=r(95155);let o=(0,a.A)((0,n.jsx)("path",{d:"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2M9 6c0-1.66 1.34-3 3-3s3 1.34 3 3v2H9zm9 14H6V10h12zm-6-3c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2"}),"LockOutlined")},26796:(e,t,r)=>{"use strict";r.r(t),r.d(t,{ThemeProvider:()=>p,useTheme:()=>x});var a=r(95155),n=r(12115),o=r(87021),s=r(7160),i=r(29197),l=r(748),d=r(84563),c=r(29692);let u=(0,o.h)("frontend/contexts/ThemeContext"),h=(0,n.createContext)(void 0),p=e=>{let{children:t}=e,[r,o]=(0,n.useState)(!1),[p,x]=(0,n.useState)(!1);(0,n.useEffect)(()=>{(async()=>{u.debug("Loading theme preference from storage");let e=await (0,c.YM)(c.Zg.THEME,"light");u.info("Theme loaded from storage: ".concat(e));let t="dark"===e;x(t),t?document.documentElement.classList.add("dark-theme"):document.documentElement.classList.remove("dark-theme"),o(!0)})()},[]);let b=(0,n.useMemo)(()=>(function(e){let t="dark"===e?l.kY.dark:l.kY.light,r="dark"===e;return(0,i.A)({palette:{mode:e,primary:{main:r?"#4f93f5":"#007bff",light:r?"#6aa6f7":"#3395ff",dark:r?"#3a7ad4":"#0056b3"},secondary:{main:r?"#a3adba":"#6c757d"},error:{main:r?"#ff6b6b":"#dc2626",light:r?"#5a2a2e":"#fecaca",dark:r?"#2a1618":"#b91c1c"},warning:{main:r?"#e0a23c":"#f59e0b"},info:{main:r?"#56b6d6":"#3b82f6"},success:{main:r?"#3fae72":"#16a34a"},divider:t.border,background:{default:t.background,paper:t.surface},text:{primary:t.foreground,secondary:t.textSecondary,disabled:t.textDisabled}},typography:{fontFamily:"var(--font-geist-sans), Arial, sans-serif",h1:{fontWeight:700},h2:{fontWeight:700},h3:{fontWeight:600},h4:{fontWeight:600},h5:{fontWeight:600},h6:{fontWeight:600}},components:{MuiButton:{styleOverrides:{root:{textTransform:"none",borderRadius:"0.375rem"}}},MuiPaper:{styleOverrides:{root:{borderRadius:"0.5rem",backgroundImage:"none"}}},MuiTextField:{styleOverrides:{root:{"& .MuiOutlinedInput-root":{borderRadius:"0.375rem"}}}},MuiCard:{styleOverrides:{root:{borderRadius:"0.5rem",border:r?"1px solid ".concat(t.border):void 0,boxShadow:r?"0 4px 6px -1px rgba(0, 0, 0, 0.4), 0 2px 4px -1px rgba(0, 0, 0, 0.3)":"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)"}}},MuiMenu:{styleOverrides:{paper:{backgroundColor:t.surfaceRaised,backgroundImage:"none"}}},MuiPopover:{styleOverrides:{paper:{backgroundColor:t.surfaceRaised,backgroundImage:"none"}}},MuiTooltip:{styleOverrides:{tooltip:r?{backgroundColor:t.surfaceRaised,border:"1px solid ".concat(t.border),color:t.foreground}:void 0}}}})})(p?"dark":"light"),[p]);return u.debug("Rendering ThemeProvider with isDarkMode: ".concat(p)),(0,a.jsx)(h.Provider,{value:{toggleTheme:()=>{x(e=>{let t=!e,r=t?"dark":"light";return u.info("Toggling theme to: ".concat(r)),t?document.documentElement.classList.add("dark-theme"):document.documentElement.classList.remove("dark-theme"),(0,c.VH)(c.Zg.THEME,r),t})},isDarkMode:p},children:(0,a.jsxs)(s.A,{theme:b,children:[(0,a.jsx)(d.Ay,{}),t]})})},x=()=>{let e=(0,n.useContext)(h);if(!e)throw u.error("useTheme hook used outside of ThemeProvider"),Error("useTheme must be used within a ThemeProvider");return u.debug("useTheme hook accessed"),e}},48363:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});var a=r(15485),n=r(95155);let o=(0,a.A)((0,n.jsx)("path",{d:"M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1M8 13h8v-2H8zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5"}),"Link")},49215:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>es});var a=r(95155),n=r(94049),o=r(12115),s=r(25635),i=r(98267),l=r(20537),d=r(37960),c=r(63186),u=r(22003),h=r(28548),p=r(2300),x=r(9562),b=r(56422),m=r(41983),g=r(91871),f=r(21422),y=r(15485);let v=(0,y.A)((0,a.jsx)("path",{d:"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6h2c0-1.66 1.34-3 3-3s3 1.34 3 3v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2m0 12H6V10h12zm-6-3c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2"}),"LockOpenOutlined");var j=r(68212),k=r(42063),A=r(9164);function w(){let{setKey:e,changeKey:t,verifyKey:r,isEncryptionInitialized:i,isUserEncryptionEnabled:l}=(0,A.useStorage)(),[d,c]=(0,o.useState)(""),[y,w]=(0,o.useState)(""),[S,C]=(0,o.useState)(!1),[E,P]=(0,o.useState)(""),[T,R]=(0,o.useState)(""),[F,O]=(0,o.useState)(!1),[M,I]=(0,o.useState)(!1),[W,B]=(0,o.useState)(null),[D,z]=(0,o.useState)(!1),[L,V]=(0,o.useState)(!1),[U,N]=(0,o.useState)(!1),H=()=>{setTimeout(()=>window.location.reload(),800)};(0,o.useEffect)(()=>{(async()=>{let e=await i(),t=await l();z(e),V(t)})()},[i,l]);let K=async t=>{t.preventDefault(),N(!0),B(null);try{if(d.length<12){B({type:"error",text:"Encryption password must be at least 12 characters long for security"}),N(!1);return}if(d!==y){B({type:"error",text:"Passwords do not match"}),N(!1);return}await e(d),B({type:"success",text:"Encryption password set successfully"}),c(""),w(""),z(!0),H()}catch(e){B({type:"error",text:"Failed to set encryption password"})}finally{N(!1)}},G=async e=>{e.preventDefault(),N(!0),B(null);try{if(T.length<12){B({type:"error",text:"New password must be at least 12 characters long for security"}),N(!1);return}if(!await r(E)){B({type:"error",text:"Current password is incorrect"}),N(!1);return}await t(E,T)?(B({type:"success",text:"Encryption password changed successfully"}),P(""),R(""),H()):B({type:"error",text:"Failed to change encryption password"})}catch(e){B({type:"error",text:"An error occurred while changing the password"})}finally{N(!1)}};return(0,a.jsxs)(n.default,{sx:{width:"100%"},children:[(0,a.jsx)(s.default,{variant:"h6",gutterBottom:!0,children:"Encryption Settings"}),(0,a.jsx)(s.default,{variant:"body2",color:"text.secondary",sx:{mb:3},children:"Set an encryption password to secure sensitive data like API keys and credentials. This password is used to encrypt your data and is never stored directly."}),W&&(0,a.jsx)(u.A,{severity:W.type,sx:{mb:3},children:W.text}),(0,a.jsxs)(n.default,{sx:{display:"flex",alignItems:"center",mb:3},children:[(0,a.jsx)(s.default,{variant:"body1",sx:{mr:2},children:"Current encryption status:"}),D?L?(0,a.jsx)(h.A,{icon:(0,a.jsx)(f.A,{}),label:"Custom Password Protection",color:"success",variant:"outlined"}):(0,a.jsx)(h.A,{icon:(0,a.jsx)(v,{}),label:"Default Encryption",color:"primary",variant:"outlined"}):(0,a.jsx)(h.A,{label:"No Encryption",color:"error",variant:"outlined"})]}),D&&L?L?(0,a.jsxs)(p.A,{elevation:2,sx:{p:3},children:[(0,a.jsx)(s.default,{variant:"subtitle1",gutterBottom:!0,fontWeight:"bold",children:"Change Encryption Password"}),(0,a.jsx)(s.default,{variant:"body2",color:"text.secondary",sx:{mb:2},children:"You can change your custom encryption password here. This will re-encrypt your data with the new password. Your data will remain intact."}),(0,a.jsxs)(n.default,{component:"form",onSubmit:G,children:[(0,a.jsx)(x.A,{fullWidth:!0,label:"Current Password",variant:"outlined",value:E,onChange:e=>P(e.target.value),type:F?"text":"password",InputProps:{endAdornment:(0,a.jsx)(b.A,{position:"end",children:(0,a.jsx)(m.A,{"aria-label":"toggle current password visibility",onClick:()=>O(!F),edge:"end",children:F?(0,a.jsx)(j.A,{}):(0,a.jsx)(k.A,{})})})},sx:{mb:2}}),(0,a.jsx)(x.A,{fullWidth:!0,label:"New Password",variant:"outlined",value:T,onChange:e=>R(e.target.value),type:M?"text":"password",InputProps:{endAdornment:(0,a.jsx)(b.A,{position:"end",children:(0,a.jsx)(m.A,{"aria-label":"toggle new password visibility",onClick:()=>I(!M),edge:"end",children:M?(0,a.jsx)(j.A,{}):(0,a.jsx)(k.A,{})})})},sx:{mb:3}}),(0,a.jsx)(g.A,{type:"submit",variant:"contained",color:"primary",disabled:!E||!T||U,children:"Change Password"})]})]}):null:(0,a.jsxs)(p.A,{elevation:2,sx:{p:3,mb:4},children:[(0,a.jsx)(s.default,{variant:"subtitle1",gutterBottom:!0,fontWeight:"bold",children:"Set Custom Encryption Password"}),(0,a.jsx)(s.default,{variant:"body2",color:"text.secondary",sx:{mb:2},children:D?"Your data is currently protected with default encryption. Set a custom password for enhanced security.":"Create a strong password to protect your sensitive data. Make sure to remember this password as it cannot be recovered if lost."}),(0,a.jsxs)(n.default,{component:"form",onSubmit:K,children:[(0,a.jsx)(x.A,{fullWidth:!0,label:"New Password",variant:"outlined",value:d,onChange:e=>c(e.target.value),type:S?"text":"password",InputProps:{endAdornment:(0,a.jsx)(b.A,{position:"end",children:(0,a.jsx)(m.A,{"aria-label":"toggle password visibility",onClick:()=>C(!S),edge:"end",children:S?(0,a.jsx)(j.A,{}):(0,a.jsx)(k.A,{})})})},sx:{mb:2}}),(0,a.jsx)(x.A,{fullWidth:!0,label:"Confirm Password",variant:"outlined",value:y,onChange:e=>w(e.target.value),type:S?"text":"password",sx:{mb:3}}),(0,a.jsx)(g.A,{type:"submit",variant:"contained",color:"primary",disabled:!d||!y||U,children:D?"Upgrade to Custom Password":"Set Encryption Password"})]})]}),(0,a.jsx)(n.default,{sx:{mt:4},children:(0,a.jsxs)(u.A,{severity:L?"warning":"info",children:[(0,a.jsx)(s.default,{variant:"subtitle2",fontWeight:"bold",children:L?"Important Security Information":"About Default Encryption"}),L?(0,a.jsxs)(s.default,{variant:"body2",children:["• Your custom encryption password is never stored directly on the server",(0,a.jsx)("br",{}),"• If you forget your password, you will not be able to access your encrypted data",(0,a.jsx)("br",{}),"• Consider using a password manager to securely store this password"]}):(0,a.jsxs)(s.default,{variant:"body2",children:["• Your data is currently encrypted with a built-in default key",(0,a.jsx)("br",{}),"• This provides basic protection without requiring password setup",(0,a.jsx)("br",{}),"• For maximum security, set a custom password using the form above"]})]})})]})}var S=r(99944),C=r(9957),E=r(26796),P=r(87021);let T=(0,P.h)("frontend/components/Settings/ThemeSettings");function R(){let{isDarkMode:e,toggleTheme:t}=(0,E.useTheme)();return T.debug("Rendering ThemeSettings with isDarkMode: ".concat(e)),(0,a.jsxs)(n.default,{sx:{maxWidth:600},children:[(0,a.jsx)(s.default,{variant:"h6",gutterBottom:!0,children:"Theme Settings"}),(0,a.jsx)(s.default,{variant:"body2",color:"text.secondary",sx:{mb:2},children:"Customize the application appearance"}),(0,a.jsx)(S.A,{control:(0,a.jsx)(C.A,{checked:e,onChange:t,name:"darkMode"}),label:"Dark Mode"})]})}var F=r(71892),O=r(52397);function M(){let{globalEnvVars:e,setGlobalEnvVars:t,deleteGlobalEnvVar:r}=(0,A.useStorage)(),[i,l]=(0,o.useState)(null),d=async e=>{try{let r=Object.fromEntries(Object.entries(e).filter(e=>{let[t,r]=e;return"string"==typeof r||!r.metadata.isSecret||r.value!==O.gF}));await t(r),l({type:"success",text:"Global environment variables updated successfully"}),setTimeout(()=>{l(null)},3e3)}catch(e){l({type:"error",text:"Failed to update global environment variables"})}};return(0,a.jsxs)(n.default,{sx:{width:"100%"},children:[(0,a.jsx)(s.default,{variant:"body2",color:"text.secondary",sx:{mb:2},children:"Define global environment variables that can be bound to MCP servers. This allows you to manage API keys and other sensitive information in one place."}),i&&(0,a.jsx)(u.A,{severity:i.type,sx:{mb:2},children:i.text}),(0,a.jsx)(F.A,{serverName:"Global",initialEnv:e,onSave:d,onDelete:r})]})}var I=r(17325),W=r(22822),B=r(4474),D=r(21067),z=r(2778),L=r(52363),V=r(65036),U=r(50001),N=r(75912),H=r(27156);let K=(0,P.h)("frontend/components/Settings/BackupSettings"),G=[{key:"models",label:"Models",description:"AI model configurations",storageKey:H.Z.MODELS},{key:"mcpServers",label:"MCP Servers Configuration",description:"MCP server settings",storageKey:H.Z.MCP_SERVERS},{key:"mcpServersFolder",label:"MCP Servers Folder",description:"MCP server code and files",isFolder:!0},{key:"flows",label:"Flows",description:"Flow configurations",storageKey:H.Z.FLOWS},{key:"chatHistory",label:"Chat History",description:"Conversation history",storageKey:H.Z.CHAT_HISTORY},{key:"settings",label:"Settings",description:"Application settings",storageKey:H.Z.THEME},{key:"globalEnvVars",label:"Global Environment Variables",description:"Global environment variables",storageKey:H.Z.GLOBAL_ENV_VARS},{key:"encryptionKey",label:"Encryption Key",description:"Data encryption key",storageKey:H.Z.ENCRYPTION_KEY}];function Y(){let[e,t]=(0,o.useState)(G.reduce((e,t)=>({...e,[t.key]:!0}),{})),[r,i]=(0,o.useState)(G.reduce((e,t)=>({...e,[t.key]:!0}),{})),[l,d]=(0,o.useState)(null),c=(0,o.useRef)(null),[h,x]=(0,o.useState)(null),[b,m]=(0,o.useState)(!1),[f,y]=(0,o.useState)(!1),v=r=>{t({...e,[r.target.name]:r.target.checked})},j=e=>{i({...r,[e.target.name]:e.target.checked})},k=async()=>{K.debug("Creating backup with selections:",e),m(!0),x(null);try{let t=Object.entries(e).filter(e=>{let[t,r]=e;return r}).map(e=>{let[t]=e;return t});if(0===t.length){x({type:"error",text:"Please select at least one item to backup"}),m(!1);return}let r=await fetch("/api/backup",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({selections:t})});if(!r.ok)throw Error("Failed to create backup");let a=await r.blob(),n=window.URL.createObjectURL(a),o=document.createElement("a");o.style.display="none",o.href=n;let s=new Date().toISOString().replace(/[:.]/g,"-").substring(0,19);o.download="flujo-backup-".concat(s,".zip"),document.body.appendChild(o),o.click(),window.URL.revokeObjectURL(n),document.body.removeChild(o),x({type:"success",text:"Backup created successfully"})}catch(e){K.error("Error creating backup:",e),x({type:"error",text:e instanceof Error?e.message:"Failed to create backup"})}finally{m(!1)}},A=async()=>{K.debug("Restoring from backup with selections:",r),m(!0),x(null),y(!1);try{let e=Object.entries(r).filter(e=>{let[t,r]=e;return r}).map(e=>{let[t]=e;return t}),t=new FormData;t.append("file",l),t.append("selections",JSON.stringify(e));let a=await fetch("/api/restore",{method:"POST",body:t});if(!a.ok){let e=await a.json();throw Error(e.error||"Failed to restore from backup")}x({type:"success",text:"Restore completed successfully. You may need to refresh the page to see the changes."}),c.current&&(c.current.value=""),d(null)}catch(e){K.error("Error restoring from backup:",e),x({type:"error",text:e instanceof Error?e.message:"Failed to restore from backup"})}finally{m(!1)}},w=r=>{let a={...e};G.forEach(e=>{a[e.key]=r}),t(a)},C=e=>{let t={...r};G.forEach(r=>{t[r.key]=e}),i(t)};return(0,a.jsxs)(n.default,{sx:{width:"100%"},children:[(0,a.jsx)(s.default,{variant:"h6",gutterBottom:!0,children:"Backup and Restore"}),(0,a.jsx)(s.default,{variant:"body2",color:"text.secondary",sx:{mb:2},children:"Create backups of your application data or restore from a previous backup."}),h&&(0,a.jsx)(u.A,{severity:h.type,sx:{mb:2},children:h.text}),(0,a.jsxs)(p.A,{sx:{p:3,mb:3},children:[(0,a.jsx)(s.default,{variant:"subtitle1",gutterBottom:!0,fontWeight:"bold",children:"Create Backup"}),(0,a.jsx)(s.default,{variant:"body2",color:"text.secondary",sx:{mb:2},children:"Select the components you want to include in the backup."}),(0,a.jsxs)(n.default,{sx:{mb:2},children:[(0,a.jsx)(g.A,{size:"small",onClick:()=>w(!0),sx:{mr:1},children:"Select All"}),(0,a.jsx)(g.A,{size:"small",onClick:()=>w(!1),children:"Deselect All"})]}),(0,a.jsx)(I.A,{sx:{mb:3},children:G.map(t=>(0,a.jsx)(S.A,{control:(0,a.jsx)(W.A,{checked:e[t.key],onChange:v,name:t.key}),label:(0,a.jsxs)(n.default,{children:[(0,a.jsx)(s.default,{variant:"body1",children:t.label}),(0,a.jsx)(s.default,{variant:"body2",color:"text.secondary",children:t.description})]})},t.key))}),(0,a.jsx)(g.A,{variant:"contained",onClick:k,disabled:b||Object.values(e).every(e=>!e),startIcon:b?(0,a.jsx)(B.default,{size:20}):null,children:b?"Creating Backup...":"Create Backup"})]}),(0,a.jsxs)(p.A,{sx:{p:3},children:[(0,a.jsx)(s.default,{variant:"subtitle1",gutterBottom:!0,fontWeight:"bold",children:"Restore from Backup"}),(0,a.jsx)(s.default,{variant:"body2",color:"text.secondary",sx:{mb:2},children:"Select a backup file and choose which components to restore."}),(0,a.jsxs)(n.default,{sx:{mb:3},children:[(0,a.jsxs)(g.A,{variant:"outlined",component:"label",sx:{mb:2},children:["Select Backup File",(0,a.jsx)("input",{type:"file",hidden:!0,accept:".zip",onChange:e=>{let t=e.target.files;t&&t.length>0&&(d(t[0]),x(null))},ref:c})]}),l&&(0,a.jsxs)(s.default,{variant:"body2",sx:{ml:1},children:["Selected file: ",l.name]})]}),(0,a.jsx)(D.A,{sx:{mb:2}}),(0,a.jsx)(s.default,{variant:"subtitle2",gutterBottom:!0,children:"Restore Options"}),(0,a.jsxs)(n.default,{sx:{mb:2},children:[(0,a.jsx)(g.A,{size:"small",onClick:()=>C(!0),sx:{mr:1},children:"Select All"}),(0,a.jsx)(g.A,{size:"small",onClick:()=>C(!1),children:"Deselect All"})]}),(0,a.jsx)(I.A,{sx:{mb:3},children:G.map(e=>(0,a.jsx)(S.A,{control:(0,a.jsx)(W.A,{checked:r[e.key],onChange:j,name:e.key}),label:(0,a.jsxs)(n.default,{children:[(0,a.jsx)(s.default,{variant:"body1",children:e.label}),(0,a.jsx)(s.default,{variant:"body2",color:"text.secondary",children:e.description})]})},e.key))}),(0,a.jsx)(g.A,{variant:"contained",color:"warning",onClick:()=>l?0===Object.entries(r).filter(e=>{let[t,r]=e;return r}).map(e=>{let[t]=e;return t}).length?void x({type:"error",text:"Please select at least one item to restore"}):void y(!0):void x({type:"error",text:"Please select a backup file"}),disabled:b||!l||Object.values(r).every(e=>!e),startIcon:b?(0,a.jsx)(B.default,{size:20}):null,children:b?"Restoring...":"Restore from Backup"})]}),(0,a.jsxs)(z.A,{open:f,onClose:()=>y(!1),children:[(0,a.jsx)(L.A,{children:"Confirm Restore"}),(0,a.jsx)(V.A,{children:(0,a.jsx)(U.A,{children:"This will overwrite your existing data with the contents of the backup file. This action cannot be undone. Are you sure you want to continue?"})}),(0,a.jsxs)(N.A,{children:[(0,a.jsx)(g.A,{onClick:()=>y(!1),children:"Cancel"}),(0,a.jsx)(g.A,{onClick:A,color:"warning",variant:"contained",children:"Restore"})]})]})]})}var _=r(52641),J=r(84869);function Z(){let{settings:e,updateSettings:t}=(0,A.useStorage)(),r=(0,J.G)(),o=(null==e?void 0:e.speech)||{enabled:!0};return(0,a.jsxs)(n.default,{sx:{p:2},children:[!r.supported&&(0,a.jsx)(u.A,{severity:"warning",sx:{mb:3},children:"Speech recognition is not supported in your browser. Please use Chrome, Edge, or Safari for the best experience."}),(0,a.jsxs)(_.A,{fullWidth:!0,sx:{mb:3},children:[(0,a.jsx)(S.A,{control:(0,a.jsx)(C.A,{checked:o.enabled,onChange:r=>{t({...e,speech:{...o,enabled:r.target.checked}})},name:"enabled",disabled:!r.supported}),label:"Enable speech recognition"}),(0,a.jsx)(s.default,{variant:"body2",color:"text.secondary",sx:{mt:1},children:"When enabled, audio recordings will be transcribed using your browser's built-in offfline speech recognition capabilities."})]}),(0,a.jsxs)(p.A,{variant:"outlined",sx:{p:2,mb:3},children:[(0,a.jsx)(s.default,{variant:"subtitle2",gutterBottom:!0,children:"Speech Recognition Information"}),(0,a.jsxs)(n.default,{sx:{display:"flex",justifyContent:"space-between",mb:1},children:[(0,a.jsx)(s.default,{variant:"body2",children:"Technology:"}),(0,a.jsx)(s.default,{variant:"body2",children:"Web Speech API"})]}),(0,a.jsxs)(n.default,{sx:{display:"flex",justifyContent:"space-between",mb:1},children:[(0,a.jsx)(s.default,{variant:"body2",children:"Processing:"}),(0,a.jsx)(s.default,{variant:"body2",children:"Browser-based"})]}),(0,a.jsxs)(n.default,{sx:{display:"flex",justifyContent:"space-between",mb:1},children:[(0,a.jsx)(s.default,{variant:"body2",children:"Language:"}),(0,a.jsx)(s.default,{variant:"body2",children:"Automatically uses browser language"})]}),(0,a.jsxs)(n.default,{sx:{display:"flex",justifyContent:"space-between",mb:1},children:[(0,a.jsx)(s.default,{variant:"body2",children:"Privacy:"}),(0,a.jsx)(s.default,{variant:"body2",children:"Depends on browser implementation"})]})]}),(0,a.jsx)(u.A,{severity:"info",sx:{mt:3},children:(0,a.jsx)(s.default,{variant:"body2",children:"Speech recognition quality may vary based on your browser, microphone quality, and background noise. For best results, speak clearly and use a good quality microphone."})})]})}(0,P.h)("frontend/components/Settings/SpeechRecognitionSettings");let q=(0,P.h)("frontend/components/Settings/UpdateSettings");function $(){let{settings:e,updateSettings:t}=(0,A.useStorage)(),r=(null==e?void 0:e.update)||{checkOnStartup:!1},[i,l]=(0,o.useState)(!1),[d,c]=(0,o.useState)(!1),[h,p]=(0,o.useState)(null),[x,b]=(0,o.useState)(null),m=null===x||"git"===x,f=async()=>{l(!0),p(null);try{let e=await fetch("/api/update"),t=await e.json();"string"==typeof t.updateMode&&b(t.updateMode),e.ok&&!1!==t.success?!1===t.isGitRepo?p({severity:"info",message:t.message}):t.updateAvailable?p({severity:"warning",message:"An update is available (".concat(t.behindBy," new commit").concat(1===t.behindBy?"":"s"," on ").concat(t.branch,").")}):p({severity:"success",message:"FLUJO is up to date (v".concat(t.currentVersion,").")}):p({severity:"error",message:t.error||"Failed to check for updates."})}catch(e){q.error("Update check failed",e),p({severity:"error",message:"Failed to check for updates."})}finally{l(!1)}},y=async()=>{c(!0),p({severity:"info",message:"Updating FLUJO - this may take a few minutes..."});try{let e=await fetch("/api/update",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"apply"})}),t=await e.json();if(!e.ok||!1===t.success){p({severity:"error",message:t.error||"Update failed."}),c(!1);return}if(p({severity:"success",message:t.message}),t.restarting){let e=!1,t=async()=>{try{if((await fetch("/api/cwd",{cache:"no-store"})).ok&&e)return void window.location.reload()}catch(t){e=!0}setTimeout(t,3e3)};setTimeout(t,5e3)}else c(!1)}catch(e){q.error("Update failed",e),p({severity:"error",message:"Update failed."}),c(!1)}};return(0,a.jsxs)(n.default,{sx:{p:2},children:[(0,a.jsxs)(_.A,{fullWidth:!0,sx:{mb:2},children:[(0,a.jsx)(S.A,{control:(0,a.jsx)(C.A,{checked:r.checkOnStartup,onChange:a=>{t({...e,update:{...r,checkOnStartup:a.target.checked}})},name:"checkOnStartup"}),label:"Check for updates on startup"}),(0,a.jsxs)(s.default,{variant:"body2",color:"text.secondary",sx:{mt:1},children:["When enabled, FLUJO checks GitHub for a newer version when the home page loads and shows a one-click update banner if one is available. Updates run ",(0,a.jsx)("code",{children:"git pull"})," + rebuild in your install folder; your data is preserved."]}),!m&&(0,a.jsxs)(s.default,{variant:"body2",color:"text.secondary",sx:{mt:1},children:["This install can't update itself in place","container"===x?" (running in Docker) — pull a newer image instead.":"npm"===x?" (installed via npm) — rerun with the latest version instead.":" — it is not running from a git clone."]})]}),(0,a.jsxs)(n.default,{sx:{display:"flex",gap:2,mb:2},children:[(0,a.jsxs)(g.A,{variant:"outlined",onClick:f,disabled:i||d,children:[i?(0,a.jsx)(B.default,{size:20,sx:{mr:1}}):null,"Check now"]}),(0,a.jsxs)(g.A,{variant:"contained",onClick:y,disabled:d||!m,children:[d?(0,a.jsx)(B.default,{size:20,sx:{mr:1}}):null,"Update now"]})]}),h&&(0,a.jsx)(u.A,{severity:h.severity,sx:{mt:1},children:h.message})]})}let Q=(0,y.A)((0,a.jsx)("path",{d:"M5 13.18v4L12 21l7-3.82v-4L12 17zM12 3 1 9l11 6 9-4.91V17h2V9z"}),"School");var X=r(69195);function ee(){let{startTour:e}=(0,X.useTour)();return(0,a.jsxs)(n.default,{sx:{p:2},children:[(0,a.jsx)(s.default,{variant:"body2",color:"text.secondary",sx:{mb:2},children:"The guided tour walks you through the full first-run path — adding a model, connecting an MCP tool server, building a flow, and running it in chat. It launches automatically the first time you open FLUJO; replay it any time below."}),(0,a.jsx)(g.A,{variant:"outlined",startIcon:(0,a.jsx)(Q,{}),onClick:e,children:"Replay guided tour"})]})}let et=(0,P.h)("frontend/components/Settings/ExperimentalFeaturesSettings");function er(){var e,t,r,o,i;let{settings:l,updateSettings:d}=(0,A.useStorage)(),c=null!=(e=null==l?void 0:l.experimental)?e:{enabled:!1};return(0,a.jsxs)(n.default,{sx:{p:2},children:[(0,a.jsxs)(_.A,{fullWidth:!0,sx:{mb:2},children:[(0,a.jsx)(S.A,{control:(0,a.jsx)(C.A,{checked:c.enabled,onChange:e=>{et.debug("Experimental features toggled: ".concat(e.target.checked)),d({...l,experimental:{...c,enabled:e.target.checked}})},name:"experimentalEnabled"}),label:"Enable Experimental Features"}),(0,a.jsxs)(s.default,{variant:"body2",color:"text.secondary",sx:{mt:1},children:["Experimental features may be incomplete or unstable and can change or be removed at any time. When enabled, they become visible in the app — for example the ",(0,a.jsx)("strong",{children:"Waves"})," entry in the top navigation."]})]}),(0,a.jsxs)(_.A,{fullWidth:!0,sx:{mb:2},children:[(0,a.jsx)(S.A,{control:(0,a.jsx)(C.A,{checked:null!=(t=c.claudeSessionResume)&&t,onChange:e=>{et.debug("Claude session resume toggled: ".concat(e.target.checked)),d({...l,experimental:{...c,claudeSessionResume:e.target.checked}})},name:"claudeSessionResume"}),label:"Reuse Claude session across turns (reduce token usage)"}),(0,a.jsxs)(s.default,{variant:"body2",color:"text.secondary",sx:{mt:1},children:["For models using the ",(0,a.jsx)("strong",{children:"Claude\xa0subscription"})," (Agent\xa0SDK) adapter, resume one session per node instead of re-sending the whole conversation each turn — so only the newest message is sent. This can dramatically cut token usage on long chats. It changes how conversation context reaches the model, so it is off by default; if you notice a model losing track of earlier context, turn it back off."]})]}),(0,a.jsxs)(_.A,{fullWidth:!0,sx:{mb:2},children:[(0,a.jsx)(S.A,{control:(0,a.jsx)(C.A,{checked:null!=(r=c.autoUnloadOllamaModels)&&r,onChange:e=>{et.debug("Auto-unload Ollama models toggled: ".concat(e.target.checked)),d({...l,experimental:{...c,autoUnloadOllamaModels:e.target.checked}})},name:"autoUnloadOllamaModels"}),label:"Auto-unload idle Ollama models"}),(0,a.jsx)(s.default,{variant:"body2",color:"text.secondary",sx:{mt:1},children:"When a flow switches between different Ollama models on the same server, automatically unload the previous model from VRAM before loading the new one. Recommended for GPU-constrained hardware. Note: concurrent Ollama requests to the same server are serialised while this is on."})]}),(0,a.jsxs)(_.A,{fullWidth:!0,sx:{mb:2},children:[(0,a.jsx)(S.A,{control:(0,a.jsx)(C.A,{checked:null!=(o=c.mcpBetaProtocol)&&o,onChange:e=>{et.debug("MCP beta protocol toggled: ".concat(e.target.checked)),d({...l,experimental:{...c,mcpBetaProtocol:e.target.checked}})},name:"mcpBetaProtocol"}),label:"MCP beta protocol (spec 2026-07-28)"}),(0,a.jsxs)(s.default,{variant:"body2",color:"text.secondary",sx:{mt:1},children:["Connect to MCP servers using the ",(0,a.jsx)("strong",{children:"v2 beta SDK"})," with automatic version negotiation: servers that already speak the new stateless 2026-07-28 protocol are used natively, and every other server transparently falls back to the classic handshake — so existing servers keep working. The beta SDK's API may still change before its stable release; if a server misbehaves with this on, turn it off and reconnect. Websocket servers always use the stable SDK. Changing this rebuilds server connections on their next use."]})]}),(0,a.jsxs)(_.A,{fullWidth:!0,sx:{mb:2},children:[(0,a.jsx)(S.A,{control:(0,a.jsx)(C.A,{checked:null!=(i=c.protectedPathsEnabled)&&i,onChange:e=>{et.debug("Protected paths toggled: ".concat(e.target.checked)),d({...l,experimental:{...c,protectedPathsEnabled:e.target.checked}})},name:"protectedPathsEnabled"}),label:"Protect sensitive home-directory paths"}),(0,a.jsxs)(s.default,{variant:"body2",color:"text.secondary",sx:{mt:1},children:["Add a defense-in-depth deny list to the built-in ",(0,a.jsx)("strong",{children:"filesystem"})," ","and ",(0,a.jsx)("strong",{children:"bash"})," MCP servers. When enabled, sensitive locations such as Documents, Desktop, Downloads, and credential directories remain blocked even when they are included in a configured root. This is off by default, so configured roots normally grant access to their full contents."]})]}),(0,a.jsx)(u.A,{severity:"info",children:(0,a.jsx)(s.default,{variant:"body2",children:"Turning this off again hides experimental features from the navigation. It does not delete any data."})})]})}var ea=r(68855);function en(){let[e,t]=(0,o.useState)("globalEnv"),r=e=>(r,a)=>{t(!!a&&e)};return(0,a.jsxs)(n.default,{sx:{p:3},children:[(0,a.jsx)(s.default,{variant:"h5",gutterBottom:!0,children:"Settings"}),(0,a.jsxs)(n.default,{sx:{mt:2},children:[(0,a.jsxs)(i.A,{expanded:"globalEnv"===e,onChange:r("globalEnv"),children:[(0,a.jsx)(l.A,{expandIcon:(0,a.jsx)(c.A,{}),"aria-controls":"globalEnv-content",id:"globalEnv-header",children:(0,a.jsx)(s.default,{variant:"h6",children:"Global Environment Variables"})}),(0,a.jsx)(d.A,{children:(0,a.jsx)(M,{})})]}),(0,a.jsxs)(i.A,{expanded:"encryption"===e,onChange:r("encryption"),children:[(0,a.jsx)(l.A,{expandIcon:(0,a.jsx)(c.A,{}),"aria-controls":"encryption-content",id:"encryption-header",children:(0,a.jsx)(s.default,{variant:"h6",children:"Encryption"})}),(0,a.jsx)(d.A,{children:(0,a.jsx)(w,{})})]}),(0,a.jsxs)(i.A,{expanded:"theme"===e,onChange:r("theme"),children:[(0,a.jsx)(l.A,{expandIcon:(0,a.jsx)(c.A,{}),"aria-controls":"theme-content",id:"theme-header",children:(0,a.jsx)(s.default,{variant:"h6",children:"Theme"})}),(0,a.jsx)(d.A,{children:(0,a.jsx)(R,{})})]}),(0,a.jsxs)(i.A,{expanded:"backup"===e,onChange:r("backup"),children:[(0,a.jsx)(l.A,{expandIcon:(0,a.jsx)(c.A,{}),"aria-controls":"backup-content",id:"backup-header",children:(0,a.jsx)(s.default,{variant:"h6",children:"Backup & Restore"})}),(0,a.jsx)(d.A,{children:(0,a.jsx)(Y,{})})]}),(0,a.jsxs)(i.A,{expanded:"speech"===e,onChange:r("speech"),children:[(0,a.jsx)(l.A,{expandIcon:(0,a.jsx)(c.A,{}),"aria-controls":"speech-content",id:"speech-header",children:(0,a.jsx)(s.default,{variant:"h6",children:"Speech Recognition"})}),(0,a.jsx)(d.A,{children:(0,a.jsx)(Z,{})})]}),(0,a.jsxs)(i.A,{expanded:"updates"===e,onChange:r("updates"),children:[(0,a.jsx)(l.A,{expandIcon:(0,a.jsx)(c.A,{}),"aria-controls":"updates-content",id:"updates-header",children:(0,a.jsx)(s.default,{variant:"h6",children:"Updates"})}),(0,a.jsx)(d.A,{children:(0,a.jsx)($,{})})]}),(0,a.jsxs)(i.A,{expanded:"onboarding"===e,onChange:r("onboarding"),children:[(0,a.jsx)(l.A,{expandIcon:(0,a.jsx)(c.A,{}),"aria-controls":"onboarding-content",id:"onboarding-header",children:(0,a.jsx)(s.default,{variant:"h6",children:"Onboarding"})}),(0,a.jsx)(d.A,{children:(0,a.jsx)(ee,{})})]}),(0,a.jsxs)(i.A,{expanded:"registry"===e,onChange:r("registry"),children:[(0,a.jsx)(l.A,{expandIcon:(0,a.jsx)(c.A,{}),"aria-controls":"registry-content",id:"registry-header",children:(0,a.jsx)(s.default,{variant:"h6",children:"Package Registry Account"})}),(0,a.jsx)(d.A,{children:(0,a.jsx)(ea.A,{})})]}),(0,a.jsxs)(i.A,{expanded:"experimental"===e,onChange:r("experimental"),children:[(0,a.jsx)(l.A,{expandIcon:(0,a.jsx)(c.A,{}),"aria-controls":"experimental-content",id:"experimental-header",children:(0,a.jsx)(s.default,{variant:"h6",children:"Experimental Features"})}),(0,a.jsx)(d.A,{children:(0,a.jsx)(er,{})})]})]})]})}let eo=(0,P.h)("app/settings/page");function es(){return eo.debug("Rendering SettingsPage"),(0,a.jsx)(n.default,{component:"main",sx:{minHeight:"100vh"},children:(0,a.jsx)(en,{})})}},52397:(e,t,r)=>{"use strict";r.d(t,{RJ:()=>n,gF:()=>a});let a="masked:********",n="********"},68212:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});var a=r(15485),n=r(95155);let o=(0,a.A)((0,n.jsx)("path",{d:"M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7M2 4.27l2.28 2.28.46.46C3.08 8.3 1.78 10.02 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2m4.31-.78 3.15 3.15.02-.16c0-1.66-1.34-3-3-3z"}),"VisibilityOff")},69195:(e,t,r)=>{"use strict";r.r(t),r.d(t,{TourProvider:()=>c,useTour:()=>d});var a=r(95155),n=r(12115),o=r(9164),s=r(77326);let i=(0,r(87021).h)("frontend/contexts/TourContext"),l=(0,n.createContext)({isActive:!1,stepIndex:0,startTour:()=>{},next:()=>{},back:()=>{},endTour:()=>{}}),d=()=>(0,n.useContext)(l),c=e=>{var t;let{children:r}=e,{settings:d,updateSettings:c,isLoading:u,settingsHydrated:h}=(0,o.useStorage)(),[p,x]=(0,n.useState)(!1),[b,m]=(0,n.useState)(0),g=(0,n.useRef)(!1),f=(0,n.useCallback)(()=>{var e;c({...d,onboarding:{...null!=(e=d.onboarding)?e:{},completed:!0}}).catch(e=>i.warn("Failed to persist onboarding completion",e))},[d,c]),y=(0,n.useCallback)(()=>{i.info("Starting guided tour"),m(0),x(!0)},[]),v=(0,n.useCallback)(()=>{i.info("Ending guided tour"),x(!1),f()},[f]),j=(0,n.useCallback)(()=>{m(e=>e>=s.$.length-1?(x(!1),f(),e):e+1)},[f]),k=(0,n.useCallback)(()=>{m(e=>Math.max(0,e-1))},[]);return(0,n.useEffect)(()=>{var e;u||!h||g.current||(g.current=!0,(null==(e=d.onboarding)?void 0:e.completed)!==!0&&(i.info("First run detected — auto-starting guided tour"),y()))},[u,h,null==(t=d.onboarding)?void 0:t.completed,y]),(0,a.jsx)(l.Provider,{value:{isActive:p,stepIndex:b,startTour:y,next:j,back:k,endTour:v},children:r})}},71892:(e,t,r)=>{"use strict";r.d(t,{A:()=>P});var a=r(95155),n=r(12115),o=r(2300),s=r(94049),i=r(25635),l=r(91871),d=r(80777),c=r(33077),u=r(9562),h=r(56422),p=r(28548),x=r(99944),b=r(22822),m=r(41983),g=r(56682),f=r(87021),y=r(9164),v=r(86946),j=r(21422),k=r(12857),A=r(48363),w=r(4484),S=r(1877),C=r(52397);let E=(0,f.h)("frontend/components/mcp/MCPEnvManager/EnvEditor"),P=e=>{let{serverName:t,initialEnv:r,onSave:f,onDelete:P,onServerRestart:T}=e,{globalEnvVars:R}=(0,y.useStorage)(),[F,O]=(0,n.useState)([]),[M,I]=(0,n.useState)(!1),[W,B]=(0,n.useState)(!1),[D,z]=(0,n.useState)(!1),[L,V]=(0,n.useState)(null);(0,n.useEffect)(()=>{E.debug("Initializing environment variables for server: ".concat(t),{variableCount:Object.keys(r).length}),O(Object.entries(r).map(e=>{let[t,r]=e,a="object"==typeof r&&null!==r&&"value"in r?r.value:r,n="object"==typeof r&&null!==r&&"metadata"in r?r.metadata:{isSecret:(0,S.xc)(t)},o=a.match(/\$\{global:([^}]+)\}/);if(o){let e=o[1];return{key:t,value:a,isSecret:n.isSecret,isBound:!0,boundTo:e}}let s="string"==typeof a&&(a.startsWith("encrypted:")||a.startsWith("encrypted_failed:"));return{key:t,value:s?C.gF:a,isSecret:n.isSecret,isEncrypted:s}}))},[r]);let U=async e=>{E.debug("Removing environment variable at index: ".concat(e));let r=F[e];if("Global"===t&&P&&r.key)try{await P(r.key),O(F.filter((t,r)=>r!==e))}catch(e){E.error("Failed to delete environment variable: ".concat(r.key),e)}else O(F.filter((t,r)=>r!==e)),I(!0)},N=(e,t,r)=>{let a=[...F];if("isSecret"===t){let t=a[e];t.isSecret&&!r?a[e]={...t,isSecret:r,value:"",isEncrypted:!1,showWarning:!0}:a[e]={...t,isSecret:r}}else{let n={...a[e],[t]:r,isSecret:"key"===t?(0,S.xc)(r):a[e].isSecret};"key"===t&&(n.isValidKey=""===r||/^[a-zA-Z0-9_]+$/.test(r)),"value"===t&&(a[e].isEncrypted&&(n.isEncrypted=!1),a[e].showWarning&&r&&(n.showWarning=!1)),a[e]=n}O(a),I(!0)},H=async()=>{if(F.some(e=>""!==e.key&&!1===e.isValidKey))return void E.error("Cannot save: Some variable names contain invalid characters");E.debug("Saving environment variables for server: ".concat(t),{variableCount:F.length}),B(!0);try{let e=F.reduce((e,t)=>{let{key:r,value:a,isBound:n,boundTo:o,isSecret:s,isEncrypted:i}=t;return r&&(n&&o?e[r]={value:"${global:".concat(o,"}"),metadata:{isSecret:s}}:s&&a===C.gF||(e[r]={value:a,metadata:{isSecret:s}})),e},{});await f(e),I(!1),T&&"Global"!==t&&(E.debug("Restarting server after env variable changes: ".concat(t)),await T(t))}catch(e){E.error("Failed to save environment variables:",e)}B(!1)};return(0,a.jsxs)(o.A,{sx:{p:3,borderRadius:2,border:1,borderColor:e=>"dark"===e.palette.mode?"#3a3a3a":"#e5e7eb"},children:[(0,a.jsxs)(s.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:3},children:[(0,a.jsxs)(i.default,{variant:"h6",sx:{fontWeight:"semibold"},children:["Environment Variables - ",t]}),(0,a.jsx)(l.A,{variant:"contained",color:"primary",size:"small",startIcon:(0,a.jsx)(v.A,{}),onClick:()=>{E.debug("Adding new environment variable"),O([...F,{key:"",value:"",isSecret:!1}]),I(!0)},children:"Add Variable"})]}),(0,a.jsx)(d.A,{spacing:3,children:F.map((e,t)=>(0,a.jsxs)(c.Ay,{container:!0,spacing:2,alignItems:"flex-start",children:[(0,a.jsx)(c.Ay,{item:!0,xs:12,sm:5,children:(0,a.jsx)(u.A,{fullWidth:!0,placeholder:"Variable name",value:e.key,onChange:e=>N(t,"key",e.target.value),error:!1===e.isValidKey,helperText:!1===e.isValidKey?"Only alphanumeric characters and underscores allowed":"",size:"small"})}),(0,a.jsx)(c.Ay,{item:!0,xs:12,sm:5,children:(0,a.jsx)(u.A,{fullWidth:!0,type:e.isSecret?"password":"text",placeholder:e.showWarning?"Re-enter value":"Value",value:e.value,onChange:e=>N(t,"value",e.target.value),InputProps:{readOnly:e.isBound,startAdornment:e.isEncrypted?(0,a.jsx)(h.A,{position:"start",children:(0,a.jsx)(j.A,{fontSize:"small",titleAccess:"This value is stored encrypted"})}):null,endAdornment:e.isBound?(0,a.jsx)(h.A,{position:"end",children:(0,a.jsx)(p.A,{size:"small",label:"Bound to global: ".concat(e.boundTo),color:"primary",variant:"outlined",onDelete:()=>(e=>{E.debug("Unbinding variable at index: ".concat(e));let t=[...F];t[e]={...t[e],isBound:!1,boundTo:void 0},O(t),I(!0)})(t),deleteIcon:(0,a.jsx)(k.A,{fontSize:"small"})})}):null},error:e.showWarning,helperText:e.showWarning?"You must re-enter the value after switching from secret to normal mode":"",size:"small",sx:{bgcolor:t=>e.isBound?"dark"===t.palette.mode?"#1a1a1a":"#f9fafb":t.palette.background.paper}})}),(0,a.jsx)(c.Ay,{item:!0,xs:12,sm:2,children:(0,a.jsxs)(s.default,{sx:{display:"flex",alignItems:"center",mt:.5},children:[(0,a.jsx)(x.A,{control:(0,a.jsx)(b.A,{checked:e.isSecret,onChange:e=>N(t,"isSecret",e.target.checked),size:"small"}),label:"Secret",sx:{mr:1}}),!e.isBound&&(0,a.jsx)(m.A,{size:"small",color:"primary",onClick:()=>(e=>{E.debug("Opening bind modal for variable at index: ".concat(e)),V(e),z(!0)})(t),title:"Bind to global variable",sx:{mr:1},children:(0,a.jsx)(A.A,{fontSize:"small"})}),(0,a.jsx)(m.A,{size:"small",color:"error",onClick:()=>U(t),title:"Remove variable",children:(0,a.jsx)(w.A,{fontSize:"small"})})]})})]},t))}),(0,a.jsx)(g.A,{open:D,onClose:()=>{z(!1),V(null)},children:(0,a.jsxs)(s.default,{sx:{position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",width:400,maxWidth:"90%",bgcolor:"background.paper",boxShadow:24,p:4,borderRadius:2},children:[(0,a.jsx)(i.default,{variant:"h6",sx:{mb:2},children:"Bind to Global Variable"}),0===Object.keys(R).length?(0,a.jsx)(i.default,{color:"text.secondary",sx:{mb:2},children:"No global variables available. Add some in Settings first."}):(0,a.jsx)(s.default,{sx:{maxHeight:300,overflow:"auto",mb:2},children:Object.entries(R).map(e=>{let[t,r]=e;return(0,a.jsxs)(l.A,{fullWidth:!0,variant:"text",onClick:()=>(e=>{if(null!==L){E.debug("Binding variable at index ".concat(L," to global variable: ").concat(e));let t=[...F];t[L]={...t[L],isBound:!0,boundTo:e,value:"${global:".concat(e,"}")},O(t),z(!1),V(null),I(!0)}})(t),sx:{justifyContent:"space-between",textAlign:"left",mb:1,p:1,borderRadius:1},children:[(0,a.jsx)(i.default,{variant:"body2",children:t}),(0,a.jsx)(i.default,{variant:"caption",color:"text.secondary",children:r&&"object"==typeof r&&r.metadata&&r.metadata.isSecret?C.gF:r&&"object"==typeof r?r.value:r})]},t)})}),(0,a.jsx)(s.default,{sx:{display:"flex",justifyContent:"flex-end"},children:(0,a.jsx)(l.A,{variant:"outlined",onClick:()=>{z(!1),V(null)},children:"Cancel"})})]})}),M&&(0,a.jsx)(s.default,{sx:{display:"flex",justifyContent:"flex-end",mt:3},children:(0,a.jsx)(l.A,{variant:"contained",color:"success",onClick:H,disabled:W||F.some(e=>""!==e.key&&!1===e.isValidKey),children:W?"Saving...":"Save Changes"})})]})}},77326:(e,t,r)=>{"use strict";r.d(t,{$:()=>a});let a=[{id:"welcome",path:"/",placement:"center",title:"Welcome to FLUJO \uD83D\uDC4B",body:"This quick tour walks you through going from zero to a running AI flow.\n\nYou'll add a model, connect a tool server, build a flow, and run it in chat. It takes about a minute — you can skip any time."},{id:"add-model",path:"/models",target:'[data-tour="add-model"]',placement:"bottom",title:"1. Add a model",body:'FLUJO needs at least one AI model to think with. Click "Add Model" to configure one.\n\nTip: an OpenRouter API key gives you access to several free models — paste the key, name the model, pick a free one, and add a custom instruction.'},{id:"add-mcp-server",path:"/mcp",target:'[data-tour="add-mcp-server"]',placement:"bottom",title:"2. Connect a tool server (MCP)",body:'MCP servers give your model real tools — file access, image generation, web search, and more.\n\nClick "Add Server" and install the "Everything" reference server to try the full range of capabilities while you learn.'},{id:"new-flow",path:"/flows",target:'[data-tour="new-flow"]',placement:"bottom",title:"3. Build a flow",body:'A flow wires everything together. Click "New Flow" to open the builder.\n\nConnect Start → Process → Finish, attach your model to the Process node, and bind the Everything MCP server so the model can use its tools.'},{id:"chat-input",path:"/chat",target:'[data-tour="chat-input"]',placement:"top",title:"4. Run it in chat",body:"Pick your flow from the selector, then send a message here.\n\nTry asking it to generate an image with the MCP server and tell you a joke — you'll see the flow execute live, step by step."},{id:"docs",path:"/chat",target:'[data-tour="nav-docs"]',placement:"bottom",title:"Need the API?",body:"FLUJO exposes an OpenAI-compatible API and a full REST surface. The Docs page lists every endpoint with its method, parameters, and response shape.\n\nYou can re-run this tour any time from Settings → Onboarding."},{id:"finish",path:"/chat",placement:"center",title:"You're all set \uD83C\uDF89",body:"That's the whole loop: models, tools, flows, and chat.\n\nExplore at your own pace — and remember the Docs page and Settings are there when you need them."}]},84869:(e,t,r)=>{"use strict";r.d(t,{G:()=>s,S:()=>o});let a=(0,r(87021).h)("frontend/services/transcription/webSpeech"),n=()=>"webkitSpeechRecognition"in window||"SpeechRecognition"in window;async function o(e,t){if(!n())throw Error("Web Speech API is not supported in this browser");a.debug("Starting Web Speech API transcription");try{let r=URL.createObjectURL(e),n=new Audio(r),o=new(window.SpeechRecognition||window.webkitSpeechRecognition);return o.continuous=!0,o.interimResults=!0,(null==t?void 0:t.language)&&(o.lang=t.language),new Promise((e,r)=>{let s="";o.onresult=e=>{let r="";for(let t=e.resultIndex;t<e.results.length;t++){let a=e.results[t][0].transcript;e.results[t].isFinal?s+=a+" ":r+=a}(null==t?void 0:t.onInterimResult)&&t.onInterimResult(s+r),a.debug("Recognition interim result",{finalLength:s.length,interimLength:r.length})},o.onend=()=>{a.debug("Recognition ended",{transcriptLength:s.length}),e(s.trim())},o.onerror=e=>{a.error("Recognition error",{error:e.error}),r(Error("Speech recognition error: ".concat(e.error)))},n.onplay=()=>{o.start(),a.debug("Recognition started")},n.onended=()=>{o.stop(),a.debug("Audio playback ended")},n.onerror=e=>{a.error("Audio playback error",{error:e}),o.stop(),r(Error("Error playing audio"))},n.play().catch(e=>{a.error("Error starting audio playback",{error:e}),r(e)})})}catch(e){throw a.error("Error in Web Speech API transcription",{error:e}),e}}function s(){return{supported:n(),message:n()?"Web Speech API is supported":"Web Speech API is not supported in this browser"}}},96040:(e,t,r)=>{Promise.resolve().then(r.bind(r,49215))}},e=>{e.O(0,[2678,4754,9244,3392,1871,7111,2003,9562,488,3272,3077,3659,8598,6404,3560,9164,8855,8441,1255,7358],()=>e(e.s=96040)),_N_E=e.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[77,109,282,312,397,405,624,638,761,846,1144,1189,1201,1225,1288,1337,1426,1490,1513,1677,1797,2047,2348,2437,2483,2567,2669,3190,3292,3318,3352,3369,3371,3551,3587,3623,3691,4063,4216,4233,4267,4300,4524,4693,4735,4806,4810,4825,4864,5196,5617,5618,5644,5817,6078,6600,6744,7002,7080,7144,7221,7276,7591,7599,7712,7822,7824,7845,8046,8063,8068,8084,8140,8201,8350,8467,8479,8510,8563,8888,9128,9217,9247,9487,9604,9661,9666,9726,9942,9959],{84441:()=>{}},_=>{_.O(0,[8441,1255,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[77,109,282,312,397,405,624,638,761,846,1144,1189,1201,1225,1288,1337,1426,1490,1513,1677,1797,2047,2348,2437,2483,2567,2669,3190,3292,3318,3352,3369,3371,3551,3587,3623,3691,4063,4216,4233,4267,4300,4524,4693,4735,4806,4810,4825,4864,5196,5617,5618,5644,5817,6078,6600,6744,7002,7080,7144,7221,7276,7591,7599,7712,7822,7824,7845,8046,8063,8068,8084,8140,8201,8350,8467,8479,8510,8563,8888,9128,9217,9247,9487,9604,9661,9666,9726,9942,9959],{84441:()=>{}},_=>{_.O(0,[8441,1255,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[77,109,282,312,397,405,624,638,761,846,1144,1189,1201,1225,1288,1337,1426,1490,1513,1677,1797,2047,2348,2437,2483,2567,2669,3190,3292,3318,3352,3369,3371,3551,3587,3623,3691,4063,4216,4233,4267,4300,4524,4693,4735,4806,4810,4825,4864,5196,5617,5618,5644,5817,6078,6600,6744,7002,7080,7144,7221,7276,7591,7599,7712,7822,7824,7845,8046,8063,8068,8084,8140,8201,8350,8467,8479,8510,8563,8888,9128,9217,9247,9487,9604,9661,9666,9726,9942,9959],{84441:()=>{}},_=>{_.O(0,[8441,1255,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[77,109,282,312,397,405,624,638,761,846,1144,1189,1201,1225,1288,1337,1426,1490,1513,1677,1797,2047,2348,2437,2483,2567,2669,3190,3292,3318,3352,3369,3371,3551,3587,3623,3691,4063,4216,4233,4267,4300,4524,4693,4735,4806,4810,4825,4864,5196,5617,5618,5644,5817,6078,6600,6744,7002,7080,7144,7221,7276,7591,7599,7712,7822,7824,7845,8046,8063,8068,8084,8140,8201,8350,8467,8479,8510,8563,8888,9128,9217,9247,9487,9604,9661,9666,9726,9942,9959],{84441:()=>{}},_=>{_.O(0,[8441,1255,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[77,109,282,312,397,405,624,638,761,846,1144,1189,1201,1225,1288,1337,1426,1490,1513,1677,1797,2047,2348,2437,2483,2567,2669,3190,3292,3318,3352,3369,3371,3551,3587,3623,3691,4063,4216,4233,4267,4300,4524,4693,4735,4806,4810,4825,4864,5196,5617,5618,5644,5817,6078,6600,6744,7002,7080,7144,7221,7276,7591,7599,7712,7822,7824,7845,8046,8063,8068,8084,8140,8201,8350,8467,8479,8510,8563,8888,9128,9217,9247,9487,9604,9661,9666,9726,9942,9959],{84441:()=>{}},_=>{_.O(0,[8441,1255,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[77,109,282,312,397,405,624,638,761,846,1144,1189,1201,1225,1288,1337,1426,1490,1513,1677,1797,2047,2348,2437,2483,2567,2669,3190,3292,3318,3352,3369,3371,3551,3587,3623,3691,4063,4216,4233,4267,4300,4524,4693,4735,4806,4810,4825,4864,5196,5617,5618,5644,5817,6078,6600,6744,7002,7080,7144,7221,7276,7591,7599,7712,7822,7824,7845,8046,8063,8068,8084,8140,8201,8350,8467,8479,8510,8563,8888,9128,9217,9247,9487,9604,9661,9666,9726,9942,9959],{84441:()=>{}},_=>{_.O(0,[8441,1255,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[77,109,282,312,397,405,624,638,761,846,1144,1189,1201,1225,1288,1337,1426,1490,1513,1677,1797,2047,2348,2437,2483,2567,2669,3190,3292,3318,3352,3369,3371,3551,3587,3623,3691,4063,4216,4233,4267,4300,4524,4693,4735,4806,4810,4825,4864,5196,5617,5618,5644,5817,6078,6600,6744,7002,7080,7144,7221,7276,7591,7599,7712,7822,7824,7845,8046,8063,8068,8084,8140,8201,8350,8467,8479,8510,8563,8888,9128,9217,9247,9487,9604,9661,9666,9726,9942,9959],{84441:()=>{}},_=>{_.O(0,[8441,1255,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[77,109,282,312,397,405,624,638,761,846,1144,1189,1201,1225,1288,1337,1426,1490,1513,1677,1797,2047,2348,2437,2483,2567,2669,3190,3292,3318,3352,3369,3371,3551,3587,3623,3691,4063,4216,4233,4267,4300,4524,4693,4735,4806,4810,4825,4864,5196,5617,5618,5644,5817,6078,6600,6744,7002,7080,7144,7221,7276,7591,7599,7712,7822,7824,7845,8046,8063,8068,8084,8140,8201,8350,8467,8479,8510,8563,8888,9128,9217,9247,9487,9604,9661,9666,9726,9942,9959],{84441:()=>{}},_=>{_.O(0,[8441,1255,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[77,109,282,312,397,405,624,638,761,846,1144,1189,1201,1225,1288,1337,1426,1490,1513,1677,1797,2047,2348,2437,2483,2567,2669,3190,3292,3318,3352,3369,3371,3551,3587,3623,3691,4063,4216,4233,4267,4300,4524,4693,4735,4806,4810,4825,4864,5196,5617,5618,5644,5817,6078,6600,6744,7002,7080,7144,7221,7276,7591,7599,7712,7822,7824,7845,8046,8063,8068,8084,8140,8201,8350,8467,8479,8510,8563,8888,9128,9217,9247,9487,9604,9661,9666,9726,9942,9959],{84441:()=>{}},_=>{_.O(0,[8441,1255,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[77,109,282,312,397,405,624,638,761,846,1144,1189,1201,1225,1288,1337,1426,1490,1513,1677,1797,2047,2348,2437,2483,2567,2669,3190,3292,3318,3352,3369,3371,3551,3587,3623,3691,4063,4216,4233,4267,4300,4524,4693,4735,4806,4810,4825,4864,5196,5617,5618,5644,5817,6078,6600,6744,7002,7080,7144,7221,7276,7591,7599,7712,7822,7824,7845,8046,8063,8068,8084,8140,8201,8350,8467,8479,8510,8563,8888,9128,9217,9247,9487,9604,9661,9666,9726,9942,9959],{84441:()=>{}},_=>{_.O(0,[8441,1255,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[77,109,282,312,397,405,624,638,761,846,1144,1189,1201,1225,1288,1337,1426,1490,1513,1677,1797,2047,2348,2437,2483,2567,2669,3190,3292,3318,3352,3369,3371,3551,3587,3623,3691,4063,4216,4233,4267,4300,4524,4693,4735,4806,4810,4825,4864,5196,5617,5618,5644,5817,6078,6600,6744,7002,7080,7144,7221,7276,7591,7599,7712,7822,7824,7845,8046,8063,8068,8084,8140,8201,8350,8467,8479,8510,8563,8888,9128,9217,9247,9487,9604,9661,9666,9726,9942,9959],{84441:()=>{}},_=>{_.O(0,[8441,1255,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[77,109,282,312,397,405,624,638,761,846,1144,1189,1201,1225,1288,1337,1426,1490,1513,1677,1797,2047,2348,2437,2483,2567,2669,3190,3292,3318,3352,3369,3371,3551,3587,3623,3691,4063,4216,4233,4267,4300,4524,4693,4735,4806,4810,4825,4864,5196,5617,5618,5644,5817,6078,6600,6744,7002,7080,7144,7221,7276,7591,7599,7712,7822,7824,7845,8046,8063,8068,8084,8140,8201,8350,8467,8479,8510,8563,8888,9128,9217,9247,9487,9604,9661,9666,9726,9942,9959],{84441:()=>{}},_=>{_.O(0,[8441,1255,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[77,109,282,312,397,405,624,638,761,846,1144,1189,1201,1225,1288,1337,1426,1490,1513,1677,1797,2047,2348,2437,2483,2567,2669,3190,3292,3318,3352,3369,3371,3551,3587,3623,3691,4063,4216,4233,4267,4300,4524,4693,4735,4806,4810,4825,4864,5196,5617,5618,5644,5817,6078,6600,6744,7002,7080,7144,7221,7276,7591,7599,7712,7822,7824,7845,8046,8063,8068,8084,8140,8201,8350,8467,8479,8510,8563,8888,9128,9217,9247,9487,9604,9661,9666,9726,9942,9959],{84441:()=>{}},_=>{_.O(0,[8441,1255,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[77,109,282,312,397,405,624,638,761,846,1144,1189,1201,1225,1288,1337,1426,1490,1513,1677,1797,2047,2348,2437,2483,2567,2669,3190,3292,3318,3352,3369,3371,3551,3587,3623,3691,4063,4216,4233,4267,4300,4524,4693,4735,4806,4810,4825,4864,5196,5617,5618,5644,5817,6078,6600,6744,7002,7080,7144,7221,7276,7591,7599,7712,7822,7824,7845,8046,8063,8068,8084,8140,8201,8350,8467,8479,8510,8563,8888,9128,9217,9247,9487,9604,9661,9666,9726,9942,9959],{84441:()=>{}},_=>{_.O(0,[8441,1255,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (()=>{"use strict";var e={},t={};function r(a){var n=t[a];if(void 0!==n)return n.exports;var o=t[a]={exports:{}},c=!0;try{e[a].call(o.exports,o,o.exports,r),c=!1}finally{c&&delete t[a]}return o.exports}r.m=e,(()=>{var e=[];r.O=(t,a,n,o)=>{if(a){o=o||0;for(var c=e.length;c>0&&e[c-1][2]>o;c--)e[c]=e[c-1];e[c]=[a,n,o];return}for(var s=1/0,c=0;c<e.length;c++){for(var[a,n,o]=e[c],i=!0,u=0;u<a.length;u++)(!1&o||s>=o)&&Object.keys(r.O).every(e=>r.O[e](a[u]))?a.splice(u--,1):(i=!1,o<s&&(s=o));if(i){e.splice(c--,1);var d=n();void 0!==d&&(t=d)}}return t}})(),r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},(()=>{var e,t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__;r.t=function(a,n){if(1&n&&(a=this(a)),8&n||"object"==typeof a&&a&&(4&n&&a.__esModule||16&n&&"function"==typeof a.then))return a;var o=Object.create(null);r.r(o);var c={};e=e||[null,t({}),t([]),t(t)];for(var s=2&n&&a;"object"==typeof s&&!~e.indexOf(s);s=t(s))Object.getOwnPropertyNames(s).forEach(e=>c[e]=()=>a[e]);return c.default=()=>a,r.d(o,c),o}})(),r.d=(e,t)=>{for(var a in t)r.o(t,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((t,a)=>(r.f[a](e,t),t),[])),r.u=e=>1646===e?"static/chunks/1646.a93085a0445ba909.js":5139===e?"static/chunks/5139.e4ff9cc3669129ed.js":8405===e?"static/chunks/8405.73e8be2c8e5b55c5.js":454===e?"static/chunks/454.5fc2f8eef98483e3.js":3089===e?"static/chunks/3089.a0856f8093b90939.js":3217===e?"static/chunks/3217.260785c2198d1e9d.js":9195===e?"static/chunks/9195.294887f083b1a11b.js":2969===e?"static/chunks/2969.eb9ff8cd2a5034b0.js":3545===e?"static/chunks/3545.353a62a68d3b7fd1.js":3910===e?"static/chunks/3910.5c6885d7a5bd753e.js":8198===e?"static/chunks/8198.cd0d3f8429c02862.js":"static/chunks/"+e+"-"+({1871:"14c3e63ca865d85e",2003:"f826c607d609d1fa",2678:"c88052addfb0478a",3189:"fa8ec6d719d5e72b",3272:"fd8d59523f61da96",3392:"6dd9ad3be66a7ce9",4523:"a540747aa2ed34e8",4754:"5c62bb61142f82d1",7111:"44538f8a64241b74",8470:"72cf748472d4d501",8598:"1b627b3d682b364a",9164:"840f056a0e11d979",9244:"3281f7fd02003a2c",9562:"5494feecd8c6f7a3",9581:"6d2523fd68a5e3c4"})[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={},t="_N_E:";r.l=(a,n,o,c)=>{if(e[a])return void e[a].push(n);if(void 0!==o)for(var s,i,u=document.getElementsByTagName("script"),d=0;d<u.length;d++){var f=u[d];if(f.getAttribute("src")==a||f.getAttribute("data-webpack")==t+o){s=f;break}}s||(i=!0,(s=document.createElement("script")).charset="utf-8",s.timeout=120,r.nc&&s.setAttribute("nonce",r.nc),s.setAttribute("data-webpack",t+o),s.src=r.tu(a)),e[a]=[n];var l=(t,r)=>{s.onerror=s.onload=null,clearTimeout(b);var n=e[a];if(delete e[a],s.parentNode&&s.parentNode.removeChild(s),n&&n.forEach(e=>e(r)),t)return t(r)},b=setTimeout(l.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=l.bind(null,s.onerror),s.onload=l.bind(null,s.onload),i&&document.head.appendChild(s)}})(),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;r.tt=()=>(void 0===e&&(e={createScriptURL:e=>e},"undefined"!=typeof trustedTypes&&trustedTypes.createPolicy&&(e=trustedTypes.createPolicy("nextjs#bundler",e))),e)})(),r.tu=e=>r.tt().createScriptURL(e),r.p="/_next/",(()=>{var e={5687:0,6317:0,6714:0,2978:0,1137:0};r.f.j=(t,a)=>{var n=r.o(e,t)?e[t]:void 0;if(0!==n)if(n)a.push(n[2]);else if(/^((113|568|631)7|2978|6714)$/.test(t))e[t]=0;else{var o=new Promise((r,a)=>n=e[t]=[r,a]);a.push(n[2]=o);var c=r.p+r.u(t),s=Error();r.l(c,a=>{if(r.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var o=a&&("load"===a.type?"missing":a.type),c=a&&a.target&&a.target.src;s.message="Loading chunk "+t+" failed.\n("+o+": "+c+")",s.name="ChunkLoadError",s.type=o,s.request=c,n[1](s)}},"chunk-"+t,t)}},r.O.j=t=>0===e[t];var t=(t,a)=>{var n,o,[c,s,i]=a,u=0;if(c.some(t=>0!==e[t])){for(n in s)r.o(s,n)&&(r.m[n]=s[n]);if(i)var d=i(r)}for(t&&t(a);u<c.length;u++)o=c[u],r.o(e,o)&&e[o]&&e[o][0](),e[o]=0;return r.O(d)},a=self.webpackChunk_N_E=self.webpackChunk_N_E||[];a.forEach(t.bind(null,0)),a.push=t.bind(null,a.push.bind(a))})()})();
@@ -1 +0,0 @@
1
- self.__BUILD_MANIFEST=function(e,r,t,_){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},__routerFilterStatic:{numItems:73,errorRate:1e-4,numBits:1400,numHashes:14,bitArray:[1,1,e,0,e,e,0,r,e,e,e,e,e,e,e,e,e,r,e,e,r,e,e,e,e,e,e,r,r,e,e,r,e,e,r,r,e,e,r,e,r,r,r,r,e,e,r,r,r,e,e,r,r,e,e,r,r,r,e,e,r,e,e,e,e,r,e,e,r,e,e,e,r,r,e,e,e,e,e,r,r,r,e,e,r,e,r,r,r,e,e,r,r,e,r,e,e,r,e,r,e,e,e,r,r,e,r,e,e,e,r,r,r,r,e,r,r,e,e,e,e,r,e,r,e,e,r,e,r,r,e,r,r,e,r,e,r,r,e,r,r,r,r,r,e,r,e,r,r,r,e,e,e,r,r,e,r,r,r,e,e,r,r,r,e,e,r,r,r,r,r,r,e,r,e,r,e,r,e,e,r,r,e,r,e,r,e,e,e,r,r,r,e,e,e,e,r,e,e,e,r,e,e,r,r,e,e,r,e,e,r,r,r,e,e,e,r,e,e,e,e,r,e,e,e,e,e,e,e,e,e,r,e,r,r,r,e,r,r,e,r,e,r,e,r,e,e,e,r,r,e,r,r,r,r,r,r,r,e,e,e,e,e,r,e,e,e,r,r,e,e,e,r,e,e,e,e,r,r,e,e,e,r,r,e,e,e,r,r,r,r,e,e,r,e,r,e,r,e,r,r,r,r,r,r,e,e,r,e,e,r,r,r,e,r,e,e,e,e,e,r,r,e,r,e,r,r,r,e,e,e,e,r,r,r,e,r,r,e,e,e,e,r,r,e,r,e,e,r,r,r,r,e,r,r,r,r,e,e,e,r,r,r,r,r,e,e,e,e,e,r,e,e,r,r,e,r,r,r,r,r,r,r,r,e,r,e,e,r,e,r,e,e,e,e,e,e,e,e,e,e,r,r,r,e,r,r,r,r,r,r,r,e,r,e,r,e,r,r,e,r,e,e,e,e,e,e,e,e,r,r,r,e,r,e,r,e,r,e,r,r,r,e,e,e,e,r,r,e,r,e,r,r,r,e,r,e,e,e,r,r,e,e,r,e,e,r,e,r,r,r,r,e,r,r,e,r,e,r,e,r,r,e,e,e,r,e,e,r,r,e,r,e,r,r,e,r,r,e,e,r,e,r,e,e,e,e,r,e,e,r,r,e,r,r,e,e,e,r,e,r,r,e,e,e,r,e,e,r,r,e,e,e,r,r,r,r,e,e,r,e,r,e,r,e,r,r,r,r,e,e,e,r,r,r,r,r,r,r,e,e,r,e,r,e,e,r,e,e,e,e,e,r,e,r,r,e,e,e,e,e,r,e,e,e,e,e,r,e,e,e,e,r,r,e,e,e,e,e,e,r,r,e,e,e,r,r,r,r,r,e,r,r,e,e,r,r,e,r,r,r,r,r,e,e,e,r,e,e,r,r,e,e,e,e,e,e,r,r,r,r,e,e,e,r,r,r,e,e,r,e,r,r,e,r,r,r,e,e,e,e,e,e,e,e,e,r,r,r,r,e,e,r,r,r,e,e,r,e,e,r,r,e,r,e,e,e,e,e,e,e,r,e,r,r,r,r,r,r,r,e,r,e,r,e,e,e,r,e,e,r,e,e,r,e,e,e,e,r,r,e,e,e,e,e,e,e,r,r,r,r,e,r,e,r,r,e,e,e,e,e,e,e,r,e,e,e,r,e,e,r,r,r,r,e,r,r,r,e,e,r,r,r,r,e,r,e,e,r,e,e,e,e,r,r,e,r,e,e,e,e,r,r,e,r,r,r,e,r,e,e,r,r,e,e,e,e,e,r,e,r,e,e,e,e,e,r,r,r,r,r,e,r,e,r,e,r,e,e,r,r,e,r,e,e,e,r,r,e,e,e,e,e,e,r,r,r,r,e,r,e,r,e,e,r,r,r,e,r,r,r,e,r,e,r,r,r,r,r,e,r,r,e,e,e,e,r,r,r,r,r,r,e,r,r,r,e,e,e,e,e,r,r,r,e,r,r,e,e,r,r,r,r,r,e,r,e,r,r,e,e,r,e,r,r,e,r,r,r,e,e,e,e,e,e,e,r,r,e,e,e,r,e,r,r,r,e,e,e,e,r,e,e,e,e,e,e,r,e,r,r,r,e,e,e,e,r,e,e,e,r,r,r,e,r,r,e,e,e,e,e,e,e,e,r,r,r,e,r,e,r,r,r,e,e,r,r,r,e,r,r,e,e,e,r,r,e,e,r,r,r,e,r,r,r,e,r,e,e,e,e,r,e,e,e,r,e,e,e,e,r,e,r,e,r,r,r,r,e,e,r,e,r,r,r,r,r,r,e,e,r,e,e,e,e,r,r,e,r,e,e,r,r,e,e,r,r,r,e,e,r,r,e,e,e,r,e,r,r,e,e,r,r,e,r,r,e,r,e,r,r,e,e,e,r,e,e,r,e,e,r,e,e,e,e,e,e,r,r,r,e,r,r,e,e,r,r,r,e,r,r,r,e,e,r,e,e,r,r,e,r,e,r,r,r,r,e,e,e,r,e,r,e,e,r,e,e,r,e,e,e,r,e,r,e,r,e,e,r,e,e,e,e,e,r,r,r,e,r,e,r,r,r,e,e,r,e,r,e,r,e,e,r,e,e,e,r,e,e,e,e,e,e,r,r,e,e,e,e,r,r,e,e,r,e,r,r,r,e,e,e,e,r,e,e,e,r,r,r,r,r,r,e,e,e,r,r,r,r,e,r,e,e,e,e,e,r,r,e,e,r,r,r,e,r,e,r,r,e,e,e,r,r,e,e,r,e,e,e,e,e,r,e,r,r,r,r,e,e,r,e,e,r,r,r,e,e,r,r,r,r,r,e,r,r,e,e,r,r,r,r,e,r,e,e,e,r,e,e,r,e,r,e,r,r,r,r,e,e,e,r,r,e,r,r,e,e,e,e,e,r,e,r,e,e,r,e,e,r,r,e,r,r,e,r,r,e,r,e,r,r,e,e,e,r,r,r,e,r,r,r,e,e,e,r,r,e,r,e,e,e,r,e,r,r,e,e,e,e,e,r,e,e,r,e,r,e,e,e,r,e,r,e,r,r,e,e,e,e,e,e,r,e,e,e,r,e,e,e,r,e,e,r,r,e,e,e,e,r,e,r,r,e,r,e,r,r,r,e,r]},__routerFilterDynamic:{numItems:8,errorRate:1e-4,numBits:154,numHashes:14,bitArray:[e,e,e,r,r,e,r,r,r,e,r,e,r,r,r,e,e,r,e,r,r,e,e,r,r,e,e,r,e,e,e,e,e,e,r,e,e,r,r,r,e,e,e,e,e,r,r,r,r,e,e,r,r,e,r,r,e,e,r,r,e,e,r,r,r,r,r,r,e,e,e,r,r,e,r,e,e,r,r,r,e,r,r,r,r,e,e,r,e,e,e,e,r,r,r,r,r,r,e,e,e,r,r,e,r,e,e,e,r,e,e,e,e,r,e,r,e,r,e,e,e,e,e,e,e,e,r,e,r,r,r,e,e,e,e,e,r,r,r,r,e,r,r,r,e,e,e,r,e,e,r,r,e,e]},"/_error":["static/chunks/pages/_error-c8f84f7bd11d43d4.js"],sortedPages:["/_app","/_error"]}}(1,0,1e-4,14),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();