flujo-ai 3.38.0 → 3.40.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 (997) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +617 -433
  3. package/.next/app-path-routes-manifest.json +42 -26
  4. package/.next/build-manifest.json +5 -5
  5. package/.next/prerender-manifest.json +90 -18
  6. package/.next/react-loadable-manifest.json +40 -47
  7. package/.next/routes-manifest.json +34 -0
  8. package/.next/server/app/_not-found/page.js +3 -4
  9. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  10. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  11. package/.next/server/app/_not-found.html +1 -1
  12. package/.next/server/app/_not-found.rsc +5 -5
  13. package/.next/server/app/api/approvals/[id]/route.js +1 -1
  14. package/.next/server/app/api/approvals/[id]/route.js.nft.json +1 -1
  15. package/.next/server/app/api/approvals/[id]/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/approvals/route.js +2 -2
  17. package/.next/server/app/api/approvals/route.js.nft.json +1 -1
  18. package/.next/server/app/api/approvals/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/backup/route.js +1 -1
  20. package/.next/server/app/api/backup/route.js.nft.json +1 -1
  21. package/.next/server/app/api/backup/route_client-reference-manifest.js +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 +2 -2
  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_client-reference-manifest.js +1 -1
  27. package/.next/server/app/api/encryption/secure/route.js +1 -1
  28. package/.next/server/app/api/encryption/secure/route.js.nft.json +1 -1
  29. package/.next/server/app/api/encryption/secure/route_client-reference-manifest.js +1 -1
  30. package/.next/server/app/api/env/route.js +2 -2
  31. package/.next/server/app/api/env/route_client-reference-manifest.js +1 -1
  32. package/.next/server/app/api/flow/[id]/convert-process-to-subflow/route.js +1 -0
  33. package/.next/server/app/api/flow/[id]/convert-process-to-subflow/route.js.nft.json +1 -0
  34. package/.next/server/app/api/flow/[id]/convert-process-to-subflow/route_client-reference-manifest.js +1 -0
  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/assist/route.js +1 -0
  45. package/.next/server/app/api/flow/assist/route.js.nft.json +1 -0
  46. package/.next/server/app/api/flow/assist/route_client-reference-manifest.js +1 -0
  47. package/.next/server/app/api/flow/compile/route.js +1 -1
  48. package/.next/server/app/api/flow/compile/route.js.nft.json +1 -1
  49. package/.next/server/app/api/flow/compile/route_client-reference-manifest.js +1 -1
  50. package/.next/server/app/api/flow/generate/route.js +1 -1
  51. package/.next/server/app/api/flow/generate/route.js.nft.json +1 -1
  52. package/.next/server/app/api/flow/generate/route_client-reference-manifest.js +1 -1
  53. package/.next/server/app/api/flow/generator/route.js +2 -2
  54. package/.next/server/app/api/flow/generator/route.js.nft.json +1 -1
  55. package/.next/server/app/api/flow/generator/route_client-reference-manifest.js +1 -1
  56. package/.next/server/app/api/flow/improve/route.js +1 -1
  57. package/.next/server/app/api/flow/improve/route.js.nft.json +1 -1
  58. package/.next/server/app/api/flow/improve/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/flow/prompt-renderer/route.js +2 -2
  60. package/.next/server/app/api/flow/prompt-renderer/route.js.nft.json +1 -1
  61. package/.next/server/app/api/flow/prompt-renderer/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/flow/quick-chat/route.js +1 -1
  63. package/.next/server/app/api/flow/quick-chat/route.js.nft.json +1 -1
  64. package/.next/server/app/api/flow/quick-chat/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/flow/repair/route.js +1 -1
  66. package/.next/server/app/api/flow/repair/route.js.nft.json +1 -1
  67. package/.next/server/app/api/flow/repair/route_client-reference-manifest.js +1 -1
  68. package/.next/server/app/api/flow/route.js +1 -1
  69. package/.next/server/app/api/flow/route.js.nft.json +1 -1
  70. package/.next/server/app/api/flow/route_client-reference-manifest.js +1 -1
  71. package/.next/server/app/api/git/route.js +6 -6
  72. package/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  73. package/.next/server/app/api/init/route.js +1 -1
  74. package/.next/server/app/api/init/route.js.nft.json +1 -1
  75. package/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  76. package/.next/server/app/api/local-models/capability/route.js +1 -1
  77. package/.next/server/app/api/local-models/capability/route_client-reference-manifest.js +1 -1
  78. package/.next/server/app/api/local-models/pull/route.js +1 -1
  79. package/.next/server/app/api/local-models/pull/route_client-reference-manifest.js +1 -1
  80. package/.next/server/app/api/local-models/suggest/route.js +1 -1
  81. package/.next/server/app/api/local-models/suggest/route_client-reference-manifest.js +1 -1
  82. package/.next/server/app/api/mcp/app-sandbox/route_client-reference-manifest.js +1 -1
  83. package/.next/server/app/api/mcp/cancel/route.js +2 -2
  84. package/.next/server/app/api/mcp/cancel/route.js.nft.json +1 -1
  85. package/.next/server/app/api/mcp/cancel/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/mcp/flujo/authoring/route.js +1 -0
  87. package/.next/server/app/api/mcp/flujo/authoring/route.js.nft.json +1 -0
  88. package/.next/server/app/api/mcp/flujo/authoring/route_client-reference-manifest.js +1 -0
  89. package/.next/server/app/api/mcp/flujo/automation/route.js +1 -0
  90. package/.next/server/app/api/mcp/flujo/automation/route.js.nft.json +1 -0
  91. package/.next/server/app/api/mcp/flujo/automation/route_client-reference-manifest.js +1 -0
  92. package/.next/server/app/api/mcp/flujo/flows/route.js +1 -0
  93. package/.next/server/app/api/mcp/flujo/flows/route.js.nft.json +1 -0
  94. package/.next/server/app/api/mcp/flujo/flows/route_client-reference-manifest.js +1 -0
  95. package/.next/server/app/api/mcp/flujo/resources/read/route.js +1 -0
  96. package/.next/server/app/api/mcp/flujo/resources/read/route.js.nft.json +1 -0
  97. package/.next/server/app/api/mcp/flujo/resources/read/route_client-reference-manifest.js +1 -0
  98. package/.next/server/app/api/mcp/flujo/resources/route.js +1 -0
  99. package/.next/server/app/api/mcp/flujo/resources/route.js.nft.json +1 -0
  100. package/.next/server/app/api/mcp/flujo/resources/route_client-reference-manifest.js +1 -0
  101. package/.next/server/app/api/mcp/flujo/servers/route.js +1 -0
  102. package/.next/server/app/api/mcp/flujo/servers/route.js.nft.json +1 -0
  103. package/.next/server/app/api/mcp/flujo/servers/route_client-reference-manifest.js +1 -0
  104. package/.next/server/app/api/mcp/flujo/state/route.js +1 -0
  105. package/.next/server/app/api/mcp/flujo/state/route.js.nft.json +1 -0
  106. package/.next/server/app/api/mcp/flujo/state/route_client-reference-manifest.js +1 -0
  107. package/.next/server/app/api/mcp/flujo/tools/route.js +1 -0
  108. package/.next/server/app/api/mcp/flujo/tools/route.js.nft.json +1 -0
  109. package/.next/server/app/api/mcp/flujo/tools/route_client-reference-manifest.js +1 -0
  110. package/.next/server/app/api/mcp/oauth-capability/route.js +1 -1
  111. package/.next/server/app/api/mcp/oauth-capability/route.js.nft.json +1 -1
  112. package/.next/server/app/api/mcp/oauth-capability/route_client-reference-manifest.js +1 -1
  113. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js +1 -1
  114. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js.nft.json +1 -1
  115. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route_client-reference-manifest.js +1 -1
  116. package/.next/server/app/api/mcp/servers/[name]/prompts/route.js +1 -1
  117. package/.next/server/app/api/mcp/servers/[name]/prompts/route.js.nft.json +1 -1
  118. package/.next/server/app/api/mcp/servers/[name]/prompts/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js +1 -1
  120. package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js.nft.json +1 -1
  121. package/.next/server/app/api/mcp/servers/[name]/resources/read/route_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/mcp/servers/[name]/resources/route.js +1 -1
  123. package/.next/server/app/api/mcp/servers/[name]/resources/route.js.nft.json +1 -1
  124. package/.next/server/app/api/mcp/servers/[name]/resources/route_client-reference-manifest.js +1 -1
  125. package/.next/server/app/api/mcp/servers/[name]/route.js +1 -1
  126. package/.next/server/app/api/mcp/servers/[name]/route.js.nft.json +1 -1
  127. package/.next/server/app/api/mcp/servers/[name]/route_client-reference-manifest.js +1 -1
  128. package/.next/server/app/api/mcp/servers/[name]/status/route.js +1 -1
  129. package/.next/server/app/api/mcp/servers/[name]/status/route.js.nft.json +1 -1
  130. package/.next/server/app/api/mcp/servers/[name]/status/route_client-reference-manifest.js +1 -1
  131. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js +1 -1
  132. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js.nft.json +1 -1
  133. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route_client-reference-manifest.js +1 -1
  134. package/.next/server/app/api/mcp/servers/[name]/tools/route.js +1 -1
  135. package/.next/server/app/api/mcp/servers/[name]/tools/route.js.nft.json +1 -1
  136. package/.next/server/app/api/mcp/servers/[name]/tools/route_client-reference-manifest.js +1 -1
  137. package/.next/server/app/api/mcp/servers/route.js +1 -1
  138. package/.next/server/app/api/mcp/servers/route.js.nft.json +1 -1
  139. package/.next/server/app/api/mcp/servers/route_client-reference-manifest.js +1 -1
  140. package/.next/server/app/api/mcp/test-connection/route.js +1 -1
  141. package/.next/server/app/api/mcp/test-connection/route.js.nft.json +1 -1
  142. package/.next/server/app/api/mcp/test-connection/route_client-reference-manifest.js +1 -1
  143. package/.next/server/app/api/mcp/test-connection/stream/route.js +1 -1
  144. package/.next/server/app/api/mcp/test-connection/stream/route.js.nft.json +1 -1
  145. package/.next/server/app/api/mcp/test-connection/stream/route_client-reference-manifest.js +1 -1
  146. package/.next/server/app/api/mcp-registry/route.js +2 -2
  147. package/.next/server/app/api/mcp-registry/route.js.nft.json +1 -1
  148. package/.next/server/app/api/mcp-registry/route_client-reference-manifest.js +1 -1
  149. package/.next/server/app/api/mcp-registry/spotlight/route_client-reference-manifest.js +1 -1
  150. package/.next/server/app/api/model/[id]/route.js +1 -1
  151. package/.next/server/app/api/model/[id]/route.js.nft.json +1 -1
  152. package/.next/server/app/api/model/[id]/route_client-reference-manifest.js +1 -1
  153. package/.next/server/app/api/model/provider/route.js +2 -2
  154. package/.next/server/app/api/model/provider/route.js.nft.json +1 -1
  155. package/.next/server/app/api/model/provider/route_client-reference-manifest.js +1 -1
  156. package/.next/server/app/api/model/route.js +1 -1
  157. package/.next/server/app/api/model/route.js.nft.json +1 -1
  158. package/.next/server/app/api/model/route_client-reference-manifest.js +1 -1
  159. package/.next/server/app/api/model/test/route.js +2 -2
  160. package/.next/server/app/api/model/test/route.js.nft.json +1 -1
  161. package/.next/server/app/api/model/test/route_client-reference-manifest.js +1 -1
  162. package/.next/server/app/api/oauth/callback/route.js +1 -1
  163. package/.next/server/app/api/oauth/callback/route_client-reference-manifest.js +1 -1
  164. package/.next/server/app/api/oauth/initiate/route.js +1 -1
  165. package/.next/server/app/api/oauth/initiate/route_client-reference-manifest.js +1 -1
  166. package/.next/server/app/api/oauth/reset/route.js +2 -2
  167. package/.next/server/app/api/oauth/reset/route.js.nft.json +1 -1
  168. package/.next/server/app/api/oauth/reset/route_client-reference-manifest.js +1 -1
  169. package/.next/server/app/api/packages/build/route.js +1 -1
  170. package/.next/server/app/api/packages/build/route.js.nft.json +1 -1
  171. package/.next/server/app/api/packages/build/route_client-reference-manifest.js +1 -1
  172. package/.next/server/app/api/packages/derive-secrets/route.js +1 -1
  173. package/.next/server/app/api/packages/derive-secrets/route.js.nft.json +1 -1
  174. package/.next/server/app/api/packages/derive-secrets/route_client-reference-manifest.js +1 -1
  175. package/.next/server/app/api/packages/install/route.js +1 -1
  176. package/.next/server/app/api/packages/install/route.js.nft.json +1 -1
  177. package/.next/server/app/api/packages/install/route_client-reference-manifest.js +1 -1
  178. package/.next/server/app/api/packages/install/status/route.js +1 -1
  179. package/.next/server/app/api/packages/install/status/route.js.nft.json +1 -1
  180. package/.next/server/app/api/packages/install/status/route_client-reference-manifest.js +1 -1
  181. package/.next/server/app/api/packages/installed/route.js +1 -1
  182. package/.next/server/app/api/packages/installed/route.js.nft.json +1 -1
  183. package/.next/server/app/api/packages/installed/route_client-reference-manifest.js +1 -1
  184. package/.next/server/app/api/packages/resolve/route.js +1 -1
  185. package/.next/server/app/api/packages/resolve/route.js.nft.json +1 -1
  186. package/.next/server/app/api/packages/resolve/route_client-reference-manifest.js +1 -1
  187. package/.next/server/app/api/packages/scan-targets/route.js +1 -1
  188. package/.next/server/app/api/packages/scan-targets/route.js.nft.json +1 -1
  189. package/.next/server/app/api/packages/scan-targets/route_client-reference-manifest.js +1 -1
  190. package/.next/server/app/api/packages/search/route_client-reference-manifest.js +1 -1
  191. package/.next/server/app/api/packages/uninstall/route.js +1 -1
  192. package/.next/server/app/api/packages/uninstall/route.js.nft.json +1 -1
  193. package/.next/server/app/api/packages/uninstall/route_client-reference-manifest.js +1 -1
  194. package/.next/server/app/api/planned-executions/[id]/route.js +2 -2
  195. package/.next/server/app/api/planned-executions/[id]/route.js.nft.json +1 -1
  196. package/.next/server/app/api/planned-executions/[id]/route_client-reference-manifest.js +1 -1
  197. package/.next/server/app/api/planned-executions/[id]/run/route.js +2 -2
  198. package/.next/server/app/api/planned-executions/[id]/run/route.js.nft.json +1 -1
  199. package/.next/server/app/api/planned-executions/[id]/run/route_client-reference-manifest.js +1 -1
  200. package/.next/server/app/api/planned-executions/[id]/runs/route.js +2 -2
  201. package/.next/server/app/api/planned-executions/[id]/runs/route.js.nft.json +1 -1
  202. package/.next/server/app/api/planned-executions/[id]/runs/route_client-reference-manifest.js +1 -1
  203. package/.next/server/app/api/planned-executions/preview-schedule/route_client-reference-manifest.js +1 -1
  204. package/.next/server/app/api/planned-executions/reconcile/route.js +1 -1
  205. package/.next/server/app/api/planned-executions/reconcile/route.js.nft.json +1 -1
  206. package/.next/server/app/api/planned-executions/reconcile/route_client-reference-manifest.js +1 -1
  207. package/.next/server/app/api/planned-executions/route.js +1 -1
  208. package/.next/server/app/api/planned-executions/route.js.nft.json +1 -1
  209. package/.next/server/app/api/planned-executions/route_client-reference-manifest.js +1 -1
  210. package/.next/server/app/api/registry/auth/resend/route.js +1 -1
  211. package/.next/server/app/api/registry/auth/resend/route_client-reference-manifest.js +1 -1
  212. package/.next/server/app/api/registry/auth/reset/route.js +1 -1
  213. package/.next/server/app/api/registry/auth/reset/route_client-reference-manifest.js +1 -1
  214. package/.next/server/app/api/registry/auth/route.js +1 -1
  215. package/.next/server/app/api/registry/auth/route_client-reference-manifest.js +1 -1
  216. package/.next/server/app/api/registry/feedback/route_client-reference-manifest.js +1 -1
  217. package/.next/server/app/api/registry/oauth/callback/route.js +1 -1
  218. package/.next/server/app/api/registry/oauth/callback/route_client-reference-manifest.js +1 -1
  219. package/.next/server/app/api/registry/oauth/initiate/route.js +1 -1
  220. package/.next/server/app/api/registry/oauth/initiate/route_client-reference-manifest.js +1 -1
  221. package/.next/server/app/api/registry/packages/route.js +1 -1
  222. package/.next/server/app/api/registry/packages/route_client-reference-manifest.js +1 -1
  223. package/.next/server/app/api/registry/publish/route.js +1 -1
  224. package/.next/server/app/api/registry/publish/route_client-reference-manifest.js +1 -1
  225. package/.next/server/app/api/registry/settings/route.js +1 -1
  226. package/.next/server/app/api/registry/settings/route_client-reference-manifest.js +1 -1
  227. package/.next/server/app/api/restore/route.js +1 -1
  228. package/.next/server/app/api/restore/route.js.nft.json +1 -1
  229. package/.next/server/app/api/restore/route_client-reference-manifest.js +1 -1
  230. package/.next/server/app/api/runs/active/route.js +2 -2
  231. package/.next/server/app/api/runs/active/route.js.nft.json +1 -1
  232. package/.next/server/app/api/runs/active/route_client-reference-manifest.js +1 -1
  233. package/.next/server/app/api/setup/ai-cli/route.js +3 -0
  234. package/.next/server/app/api/setup/ai-cli/route.js.nft.json +1 -0
  235. package/.next/server/app/api/setup/ai-cli/route_client-reference-manifest.js +1 -0
  236. package/.next/server/app/api/statistics/route.js +2 -0
  237. package/.next/server/app/api/statistics/route.js.nft.json +1 -0
  238. package/.next/server/app/api/statistics/route_client-reference-manifest.js +1 -0
  239. package/.next/server/app/api/storage/route_client-reference-manifest.js +1 -1
  240. package/.next/server/app/api/telemetry/daily-active/route.js +1 -1
  241. package/.next/server/app/api/telemetry/daily-active/route_client-reference-manifest.js +1 -1
  242. package/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  243. package/.next/server/app/api/waves/route.js +1 -1
  244. package/.next/server/app/api/waves/route.js.nft.json +1 -1
  245. package/.next/server/app/api/waves/route_client-reference-manifest.js +1 -1
  246. package/.next/server/app/api/webhooks/[id]/route.js +1 -1
  247. package/.next/server/app/api/webhooks/[id]/route.js.nft.json +1 -1
  248. package/.next/server/app/api/webhooks/[id]/route_client-reference-manifest.js +1 -1
  249. package/.next/server/app/automation/triggers/page.js +2 -0
  250. package/.next/server/app/automation/triggers/page.js.nft.json +1 -0
  251. package/.next/server/app/automation/triggers/page_client-reference-manifest.js +1 -0
  252. package/.next/server/app/automation/triggers.html +1 -0
  253. package/.next/server/app/automation/triggers.meta +7 -0
  254. package/.next/server/app/automation/triggers.rsc +23 -0
  255. package/.next/server/app/automation/waves/page.js +2 -0
  256. package/.next/server/app/automation/waves/page.js.nft.json +1 -0
  257. package/.next/server/app/automation/waves/page_client-reference-manifest.js +1 -0
  258. package/.next/server/app/automation/waves.html +1 -0
  259. package/.next/server/app/automation/waves.meta +7 -0
  260. package/.next/server/app/automation/waves.rsc +22 -0
  261. package/.next/server/app/chat/page.js +6 -58
  262. package/.next/server/app/chat/page.js.nft.json +1 -1
  263. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  264. package/.next/server/app/chat.html +1 -1
  265. package/.next/server/app/chat.rsc +7 -6
  266. package/.next/server/app/docs/page.js +3 -4
  267. package/.next/server/app/docs/page.js.nft.json +1 -1
  268. package/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  269. package/.next/server/app/docs.html +1 -1
  270. package/.next/server/app/docs.rsc +6 -6
  271. package/.next/server/app/executions/page.js +2 -3
  272. package/.next/server/app/executions/page.js.nft.json +1 -1
  273. package/.next/server/app/executions/page_client-reference-manifest.js +1 -1
  274. package/.next/server/app/executions.html +1 -1
  275. package/.next/server/app/executions.rsc +7 -6
  276. package/.next/server/app/flows/page.js +3 -3
  277. package/.next/server/app/flows/page.js.nft.json +1 -1
  278. package/.next/server/app/flows/page_client-reference-manifest.js +1 -1
  279. package/.next/server/app/flows.html +1 -1
  280. package/.next/server/app/flows.rsc +7 -7
  281. package/.next/server/app/index.html +1 -1
  282. package/.next/server/app/index.rsc +6 -6
  283. package/.next/server/app/mcp/page.js +6 -57
  284. package/.next/server/app/mcp/page.js.nft.json +1 -1
  285. package/.next/server/app/mcp/page_client-reference-manifest.js +1 -1
  286. package/.next/server/app/mcp-flows/route.js +2 -1
  287. package/.next/server/app/mcp-flows/route.js.nft.json +1 -1
  288. package/.next/server/app/mcp-flows/route_client-reference-manifest.js +1 -1
  289. package/.next/server/app/mcp-proxy/[server]/route.js +2 -1
  290. package/.next/server/app/mcp-proxy/[server]/route.js.nft.json +1 -1
  291. package/.next/server/app/mcp-proxy/[server]/route_client-reference-manifest.js +1 -1
  292. package/.next/server/app/mcp.html +1 -1
  293. package/.next/server/app/mcp.rsc +7 -6
  294. package/.next/server/app/models/page.js +64 -2
  295. package/.next/server/app/models/page.js.nft.json +1 -1
  296. package/.next/server/app/models/page_client-reference-manifest.js +1 -1
  297. package/.next/server/app/packages/page.js +2 -2
  298. package/.next/server/app/packages/page.js.nft.json +1 -1
  299. package/.next/server/app/packages/page_client-reference-manifest.js +1 -1
  300. package/.next/server/app/packages.html +1 -1
  301. package/.next/server/app/packages.rsc +6 -6
  302. package/.next/server/app/page.js +3 -4
  303. package/.next/server/app/page.js.nft.json +1 -1
  304. package/.next/server/app/page_client-reference-manifest.js +1 -1
  305. package/.next/server/app/settings/page.js +2 -2
  306. package/.next/server/app/settings/page.js.nft.json +1 -1
  307. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  308. package/.next/server/app/settings.html +1 -1
  309. package/.next/server/app/settings.rsc +6 -6
  310. package/.next/server/app/statistics/page.js +54 -0
  311. package/.next/server/app/statistics/page.js.nft.json +1 -0
  312. package/.next/server/app/statistics/page_client-reference-manifest.js +1 -0
  313. package/.next/server/app/statistics.html +1 -0
  314. package/.next/server/app/statistics.meta +7 -0
  315. package/.next/server/app/statistics.rsc +22 -0
  316. package/.next/server/app/v1/chat/completions/route.js +1 -1
  317. package/.next/server/app/v1/chat/completions/route.js.nft.json +1 -1
  318. package/.next/server/app/v1/chat/completions/route_client-reference-manifest.js +1 -1
  319. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js +2 -2
  320. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js.nft.json +1 -1
  321. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route_client-reference-manifest.js +1 -1
  322. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js +2 -2
  323. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js.nft.json +1 -1
  324. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route_client-reference-manifest.js +1 -1
  325. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js +1 -1
  326. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js.nft.json +1 -1
  327. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route_client-reference-manifest.js +1 -1
  328. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js +1 -1
  329. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js.nft.json +1 -1
  330. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route_client-reference-manifest.js +1 -1
  331. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js +2 -2
  332. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js.nft.json +1 -1
  333. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route_client-reference-manifest.js +1 -1
  334. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js +3 -3
  335. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js.nft.json +1 -1
  336. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route_client-reference-manifest.js +1 -1
  337. package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route.js +2 -2
  338. package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route.js.nft.json +1 -1
  339. package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route_client-reference-manifest.js +1 -1
  340. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route.js +1 -1
  341. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route.js.nft.json +1 -1
  342. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route_client-reference-manifest.js +1 -1
  343. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route.js +1 -1
  344. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route.js.nft.json +1 -1
  345. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route_client-reference-manifest.js +1 -1
  346. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js +1 -1
  347. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js.nft.json +1 -1
  348. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route_client-reference-manifest.js +1 -1
  349. package/.next/server/app/v1/chat/conversations/[conversationId]/revert/route.js +2 -0
  350. package/.next/server/app/v1/chat/conversations/[conversationId]/revert/route.js.nft.json +1 -0
  351. package/.next/server/app/v1/chat/conversations/[conversationId]/revert/route_client-reference-manifest.js +1 -0
  352. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js +2 -2
  353. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js.nft.json +1 -1
  354. package/.next/server/app/v1/chat/conversations/[conversationId]/route_client-reference-manifest.js +1 -1
  355. package/.next/server/app/v1/chat/conversations/route.js +2 -2
  356. package/.next/server/app/v1/chat/conversations/route.js.nft.json +1 -1
  357. package/.next/server/app/v1/chat/conversations/route_client-reference-manifest.js +1 -1
  358. package/.next/server/app/v1/chat/events/route.js +6 -6
  359. package/.next/server/app/v1/chat/events/route.js.nft.json +1 -1
  360. package/.next/server/app/v1/chat/events/route_client-reference-manifest.js +1 -1
  361. package/.next/server/app/v1/models/route.js +2 -2
  362. package/.next/server/app/v1/models/route.js.nft.json +1 -1
  363. package/.next/server/app/v1/models/route_client-reference-manifest.js +1 -1
  364. package/.next/server/app/waves/page.js +2 -4
  365. package/.next/server/app/waves/page.js.nft.json +1 -1
  366. package/.next/server/app/waves/page_client-reference-manifest.js +1 -1
  367. package/.next/server/app/waves.html +1 -1
  368. package/.next/server/app/waves.rsc +6 -6
  369. package/.next/server/app-paths-manifest.json +42 -26
  370. package/.next/server/chunks/1227.js +1 -1
  371. package/.next/server/chunks/1314.js +1 -1
  372. package/.next/server/chunks/1403.js +3 -0
  373. package/.next/server/chunks/{180.js → 1532.js} +1 -1
  374. package/.next/server/chunks/1539.js +1 -0
  375. package/.next/server/chunks/1662.js +2 -0
  376. package/.next/server/chunks/1805.js +1 -1
  377. package/.next/server/chunks/1925.js +1 -1
  378. package/.next/server/chunks/2069.js +1 -0
  379. package/.next/server/chunks/227.js +1 -1
  380. package/.next/server/chunks/2372.js +2 -2
  381. package/.next/server/chunks/2446.js +1 -0
  382. package/.next/server/chunks/2828.js +2 -0
  383. package/.next/server/chunks/2949.js +1 -0
  384. package/.next/server/chunks/{6034.js → 300.js} +15 -15
  385. package/.next/server/chunks/3032.js +29 -0
  386. package/.next/server/chunks/3206.js +2 -0
  387. package/.next/server/chunks/3262.js +90 -0
  388. package/.next/server/chunks/3418.js +1 -0
  389. package/.next/server/chunks/3945.js +10 -0
  390. package/.next/server/chunks/{6967.js → 3954.js} +3 -3
  391. package/.next/server/chunks/3963.js +6 -0
  392. package/.next/server/chunks/3991.js +2 -0
  393. package/.next/server/chunks/4265.js +1 -1
  394. package/.next/server/chunks/4306.js +1 -1
  395. package/.next/server/chunks/4671.js +1 -1
  396. package/.next/server/chunks/4681.js +1 -1
  397. package/.next/server/chunks/4771.js +2 -2
  398. package/.next/server/chunks/5096.js +1 -1
  399. package/.next/server/chunks/5141.js +2 -0
  400. package/.next/server/chunks/519.js +2 -2
  401. package/.next/server/chunks/5444.js +2 -0
  402. package/.next/server/chunks/5446.js +1 -0
  403. package/.next/server/chunks/{7058.js → 5494.js} +2 -2
  404. package/.next/server/chunks/558.js +1 -1
  405. package/.next/server/chunks/5591.js +1 -0
  406. package/.next/server/chunks/{3312.js → 5642.js} +1 -1
  407. package/.next/server/chunks/566.js +2 -0
  408. package/.next/server/chunks/5750.js +1 -0
  409. package/.next/server/chunks/{7519.js → 5807.js} +1 -1
  410. package/.next/server/chunks/5858.js +1 -0
  411. package/.next/server/chunks/5918.js +436 -0
  412. package/.next/server/chunks/5936.js +1 -0
  413. package/.next/server/chunks/6033.js +1 -0
  414. package/.next/server/chunks/6226.js +4 -4
  415. package/.next/server/chunks/6607.js +1 -0
  416. package/.next/server/chunks/6687.js +1 -0
  417. package/.next/server/chunks/701.js +2 -2
  418. package/.next/server/chunks/7031.js +1 -0
  419. package/.next/server/chunks/7147.js +1 -0
  420. package/.next/server/chunks/7480.js +2 -0
  421. package/.next/server/chunks/{8284.js → 7498.js} +2 -2
  422. package/.next/server/chunks/7506.js +2 -2
  423. package/.next/server/chunks/7508.js +5 -0
  424. package/.next/server/chunks/7628.js +1 -1
  425. package/.next/server/chunks/7630.js +1 -1
  426. package/.next/server/chunks/773.js +9 -0
  427. package/.next/server/chunks/7821.js +1 -1
  428. package/.next/server/chunks/7883.js +1 -0
  429. package/.next/server/chunks/7969.js +1 -1
  430. package/.next/server/chunks/8001.js +1 -1
  431. package/.next/server/chunks/8092.js +1 -1
  432. package/.next/server/chunks/8291.js +1 -0
  433. package/.next/server/chunks/8598.js +1 -0
  434. package/.next/server/chunks/8645.js +1 -1
  435. package/.next/server/chunks/{3489.js → 8730.js} +1 -1
  436. package/.next/server/chunks/8897.js +1 -0
  437. package/.next/server/chunks/8903.js +4 -0
  438. package/.next/server/chunks/8940.js +1 -0
  439. package/.next/server/chunks/9088.js +6 -0
  440. package/.next/server/chunks/9543.js +8 -0
  441. package/.next/server/chunks/9624.js +136 -0
  442. package/.next/server/functions-config-manifest.json +4 -3
  443. package/.next/server/instrumentation.js +1 -1
  444. package/.next/server/instrumentation.js.nft.json +1 -1
  445. package/.next/server/middleware-build-manifest.js +1 -1
  446. package/.next/server/middleware-manifest.json +1 -1
  447. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  448. package/.next/server/pages/404.html +1 -1
  449. package/.next/server/pages/500.html +1 -1
  450. package/.next/server/server-reference-manifest.js +1 -1
  451. package/.next/server/server-reference-manifest.json +1 -1
  452. package/.next/static/b1aMk0634gkkiunttd1SQ/_buildManifest.js +1 -0
  453. package/.next/static/chunks/1161-19176c3e7c655121.js +1 -0
  454. package/.next/static/chunks/1521-1c98c9a56726e053.js +1 -0
  455. package/.next/static/chunks/155-12f2a537db5dacec.js +1 -0
  456. package/.next/static/chunks/1576.bc6ae6c9e6d939d8.js +1 -0
  457. package/.next/static/chunks/1871-dd8c10ed9d37100b.js +1 -0
  458. package/.next/static/chunks/1983-242862b3dc022a26.js +1 -0
  459. package/.next/static/chunks/2005.300528b5119c2d38.js +1 -0
  460. package/.next/static/chunks/2141-dba0d13715fe1a28.js +1 -0
  461. package/.next/static/chunks/2498-4f7f5de1cac6feba.js +1 -0
  462. package/.next/static/chunks/2499-92cd97ce4993999f.js +1 -0
  463. package/.next/static/chunks/3272-42d1acae08d1ef0a.js +1 -0
  464. package/.next/static/chunks/3303-febfba58226aebed.js +1 -0
  465. package/.next/static/chunks/{361.bb75b03b740930cd.js → 361.51d642c530c84295.js} +1 -1
  466. package/.next/static/chunks/3731-64070760ae44448f.js +1 -0
  467. package/.next/static/chunks/3776.72638b35ce9bb874.js +1 -0
  468. package/.next/static/chunks/3816-807978463638bb71.js +1 -0
  469. package/.next/static/chunks/4122-d82fad8d1fca26d6.js +1 -0
  470. package/.next/static/chunks/4123-906362aeb986d6db.js +1 -0
  471. package/.next/static/chunks/4156-3823d1c89c4a7e3d.js +1 -0
  472. package/.next/static/chunks/{4555-c9070f8c79bccfad.js → 4483-00dc5c1b601ec898.js} +3 -3
  473. package/.next/static/chunks/4755-83df83d0dbd97483.js +1 -0
  474. package/.next/static/chunks/4814-31eb5f3b10c651c1.js +1 -0
  475. package/.next/static/chunks/4965.39e24b54c3c6ca58.js +1 -0
  476. package/.next/static/chunks/57-64bab7d5db89c9cc.js +1 -0
  477. package/.next/static/chunks/5954-dd2b25224f389fc0.js +1 -0
  478. package/.next/static/chunks/5962-8c59d06b3ee1c42a.js +1 -0
  479. package/.next/static/chunks/5967-59fde8c214c9ca9f.js +1 -0
  480. package/.next/static/chunks/6417.70056fe81ca21682.js +1 -0
  481. package/.next/static/chunks/6420-25dd04f98f3b34b8.js +1 -0
  482. package/.next/static/chunks/6547-2adc20e1ace927fc.js +1 -0
  483. package/.next/static/chunks/684-289a73150568def2.js +1 -0
  484. package/.next/static/chunks/7203-2704865539fa551d.js +1 -0
  485. package/.next/static/chunks/760-2ad13a61701630da.js +1 -0
  486. package/.next/static/chunks/7711-4b017720ec49c96d.js +1 -0
  487. package/.next/static/chunks/7758-42ab0b9cce1dc0e3.js +1 -0
  488. package/.next/static/chunks/8124-94140ee1dd8ed87c.js +1 -0
  489. package/.next/static/chunks/8135-5b975b9014f8920b.js +1 -0
  490. package/.next/static/chunks/{8198.cd0d3f8429c02862.js → 8198.a9cc35771b354b03.js} +1 -1
  491. package/.next/static/chunks/8326-4915403bc93459d2.js +1 -0
  492. package/.next/static/chunks/8529.b5a43e728bb5bb8a.js +1 -0
  493. package/.next/static/chunks/{6428-951188daa6f74b86.js → 8620-c9fa9d75cdc18a5e.js} +3 -3
  494. package/.next/static/chunks/8853-b80e50cbec6fd13c.js +1 -0
  495. package/.next/static/chunks/8862-0e37dd5488b21c77.js +1 -0
  496. package/.next/static/chunks/889-e64385ddb2259b1b.js +1 -0
  497. package/.next/static/chunks/9001-4c27a608feddb878.js +1 -0
  498. package/.next/static/chunks/9050-fcb7a0c89314acb4.js +1 -0
  499. package/.next/static/chunks/9053-283dd8d615f904a5.js +8 -0
  500. package/.next/static/chunks/9136-9c415453ec02519c.js +1 -0
  501. package/.next/static/chunks/9140.6502327a2c098d33.js +1 -0
  502. package/.next/static/chunks/9195-3c9c4300e7505d9e.js +1 -0
  503. package/.next/static/chunks/9524-b9d2c7e4426edd07.js +1 -0
  504. package/.next/static/chunks/9562-5494feecd8c6f7a3.js +1 -0
  505. package/.next/static/chunks/9611-190b55ade8b3af3c.js +1 -0
  506. package/.next/static/chunks/app/api/approvals/[id]/route-e70b5e2b4e09002b.js +1 -0
  507. package/.next/static/chunks/app/api/approvals/route-e70b5e2b4e09002b.js +1 -0
  508. package/.next/static/chunks/app/api/backup/route-e70b5e2b4e09002b.js +1 -0
  509. package/.next/static/chunks/app/api/browse/route-e70b5e2b4e09002b.js +1 -0
  510. package/.next/static/chunks/app/api/bugs/enhance/route-e70b5e2b4e09002b.js +1 -0
  511. package/.next/static/chunks/app/api/cwd/route-e70b5e2b4e09002b.js +1 -0
  512. package/.next/static/chunks/app/api/encryption/secure/route-e70b5e2b4e09002b.js +1 -0
  513. package/.next/static/chunks/app/api/env/route-e70b5e2b4e09002b.js +1 -0
  514. package/.next/static/chunks/app/api/flow/[id]/convert-process-to-subflow/route-e70b5e2b4e09002b.js +1 -0
  515. package/.next/static/chunks/app/api/flow/[id]/route-e70b5e2b4e09002b.js +1 -0
  516. package/.next/static/chunks/app/api/flow/[id]/versions/[versionId]/route-e70b5e2b4e09002b.js +1 -0
  517. package/.next/static/chunks/app/api/flow/[id]/versions/route-e70b5e2b4e09002b.js +1 -0
  518. package/.next/static/chunks/app/api/flow/assist/route-e70b5e2b4e09002b.js +1 -0
  519. package/.next/static/chunks/app/api/flow/compile/route-e70b5e2b4e09002b.js +1 -0
  520. package/.next/static/chunks/app/api/flow/generate/route-e70b5e2b4e09002b.js +1 -0
  521. package/.next/static/chunks/app/api/flow/generator/route-e70b5e2b4e09002b.js +1 -0
  522. package/.next/static/chunks/app/api/flow/improve/route-e70b5e2b4e09002b.js +1 -0
  523. package/.next/static/chunks/app/api/flow/prompt-renderer/route-e70b5e2b4e09002b.js +1 -0
  524. package/.next/static/chunks/app/api/flow/quick-chat/route-e70b5e2b4e09002b.js +1 -0
  525. package/.next/static/chunks/app/api/flow/repair/route-e70b5e2b4e09002b.js +1 -0
  526. package/.next/static/chunks/app/api/flow/route-e70b5e2b4e09002b.js +1 -0
  527. package/.next/static/chunks/app/api/git/route-e70b5e2b4e09002b.js +1 -0
  528. package/.next/static/chunks/app/api/init/route-e70b5e2b4e09002b.js +1 -0
  529. package/.next/static/chunks/app/api/local-models/capability/route-e70b5e2b4e09002b.js +1 -0
  530. package/.next/static/chunks/app/api/local-models/pull/route-e70b5e2b4e09002b.js +1 -0
  531. package/.next/static/chunks/app/api/local-models/suggest/route-e70b5e2b4e09002b.js +1 -0
  532. package/.next/static/chunks/app/api/mcp/app-sandbox/route-e70b5e2b4e09002b.js +1 -0
  533. package/.next/static/chunks/app/api/mcp/cancel/route-e70b5e2b4e09002b.js +1 -0
  534. package/.next/static/chunks/app/api/mcp/flujo/authoring/route-e70b5e2b4e09002b.js +1 -0
  535. package/.next/static/chunks/app/api/mcp/flujo/automation/route-e70b5e2b4e09002b.js +1 -0
  536. package/.next/static/chunks/app/api/mcp/flujo/flows/route-e70b5e2b4e09002b.js +1 -0
  537. package/.next/static/chunks/app/api/mcp/flujo/resources/read/route-e70b5e2b4e09002b.js +1 -0
  538. package/.next/static/chunks/app/api/mcp/flujo/resources/route-e70b5e2b4e09002b.js +1 -0
  539. package/.next/static/chunks/app/api/mcp/flujo/servers/route-e70b5e2b4e09002b.js +1 -0
  540. package/.next/static/chunks/app/api/mcp/flujo/state/route-e70b5e2b4e09002b.js +1 -0
  541. package/.next/static/chunks/app/api/mcp/flujo/tools/route-e70b5e2b4e09002b.js +1 -0
  542. package/.next/static/chunks/app/api/mcp/oauth-capability/route-e70b5e2b4e09002b.js +1 -0
  543. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-e70b5e2b4e09002b.js +1 -0
  544. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-e70b5e2b4e09002b.js +1 -0
  545. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-e70b5e2b4e09002b.js +1 -0
  546. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-e70b5e2b4e09002b.js +1 -0
  547. package/.next/static/chunks/app/api/mcp/servers/[name]/route-e70b5e2b4e09002b.js +1 -0
  548. package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-e70b5e2b4e09002b.js +1 -0
  549. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-e70b5e2b4e09002b.js +1 -0
  550. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-e70b5e2b4e09002b.js +1 -0
  551. package/.next/static/chunks/app/api/mcp/servers/route-e70b5e2b4e09002b.js +1 -0
  552. package/.next/static/chunks/app/api/mcp/test-connection/route-e70b5e2b4e09002b.js +1 -0
  553. package/.next/static/chunks/app/api/mcp/test-connection/stream/route-e70b5e2b4e09002b.js +1 -0
  554. package/.next/static/chunks/app/api/mcp-registry/route-e70b5e2b4e09002b.js +1 -0
  555. package/.next/static/chunks/app/api/mcp-registry/spotlight/route-e70b5e2b4e09002b.js +1 -0
  556. package/.next/static/chunks/app/api/model/[id]/route-e70b5e2b4e09002b.js +1 -0
  557. package/.next/static/chunks/app/api/model/provider/route-e70b5e2b4e09002b.js +1 -0
  558. package/.next/static/chunks/app/api/model/route-e70b5e2b4e09002b.js +1 -0
  559. package/.next/static/chunks/app/api/model/test/route-e70b5e2b4e09002b.js +1 -0
  560. package/.next/static/chunks/app/api/oauth/callback/route-e70b5e2b4e09002b.js +1 -0
  561. package/.next/static/chunks/app/api/oauth/initiate/route-e70b5e2b4e09002b.js +1 -0
  562. package/.next/static/chunks/app/api/oauth/reset/route-e70b5e2b4e09002b.js +1 -0
  563. package/.next/static/chunks/app/api/packages/build/route-e70b5e2b4e09002b.js +1 -0
  564. package/.next/static/chunks/app/api/packages/derive-secrets/route-e70b5e2b4e09002b.js +1 -0
  565. package/.next/static/chunks/app/api/packages/install/route-e70b5e2b4e09002b.js +1 -0
  566. package/.next/static/chunks/app/api/packages/install/status/route-e70b5e2b4e09002b.js +1 -0
  567. package/.next/static/chunks/app/api/packages/installed/route-e70b5e2b4e09002b.js +1 -0
  568. package/.next/static/chunks/app/api/packages/resolve/route-e70b5e2b4e09002b.js +1 -0
  569. package/.next/static/chunks/app/api/packages/scan-targets/route-e70b5e2b4e09002b.js +1 -0
  570. package/.next/static/chunks/app/api/packages/search/route-e70b5e2b4e09002b.js +1 -0
  571. package/.next/static/chunks/app/api/packages/uninstall/route-e70b5e2b4e09002b.js +1 -0
  572. package/.next/static/chunks/app/api/planned-executions/[id]/route-e70b5e2b4e09002b.js +1 -0
  573. package/.next/static/chunks/app/api/planned-executions/[id]/run/route-e70b5e2b4e09002b.js +1 -0
  574. package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-e70b5e2b4e09002b.js +1 -0
  575. package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-e70b5e2b4e09002b.js +1 -0
  576. package/.next/static/chunks/app/api/planned-executions/reconcile/route-e70b5e2b4e09002b.js +1 -0
  577. package/.next/static/chunks/app/api/planned-executions/route-e70b5e2b4e09002b.js +1 -0
  578. package/.next/static/chunks/app/api/registry/auth/resend/route-e70b5e2b4e09002b.js +1 -0
  579. package/.next/static/chunks/app/api/registry/auth/reset/route-e70b5e2b4e09002b.js +1 -0
  580. package/.next/static/chunks/app/api/registry/auth/route-e70b5e2b4e09002b.js +1 -0
  581. package/.next/static/chunks/app/api/registry/feedback/route-e70b5e2b4e09002b.js +1 -0
  582. package/.next/static/chunks/app/api/registry/oauth/callback/route-e70b5e2b4e09002b.js +1 -0
  583. package/.next/static/chunks/app/api/registry/oauth/initiate/route-e70b5e2b4e09002b.js +1 -0
  584. package/.next/static/chunks/app/api/registry/packages/route-e70b5e2b4e09002b.js +1 -0
  585. package/.next/static/chunks/app/api/registry/publish/route-e70b5e2b4e09002b.js +1 -0
  586. package/.next/static/chunks/app/api/registry/settings/route-e70b5e2b4e09002b.js +1 -0
  587. package/.next/static/chunks/app/api/restore/route-e70b5e2b4e09002b.js +1 -0
  588. package/.next/static/chunks/app/api/runs/active/route-e70b5e2b4e09002b.js +1 -0
  589. package/.next/static/chunks/app/api/setup/ai-cli/route-e70b5e2b4e09002b.js +1 -0
  590. package/.next/static/chunks/app/api/statistics/route-e70b5e2b4e09002b.js +1 -0
  591. package/.next/static/chunks/app/api/storage/route-e70b5e2b4e09002b.js +1 -0
  592. package/.next/static/chunks/app/api/telemetry/daily-active/route-e70b5e2b4e09002b.js +1 -0
  593. package/.next/static/chunks/app/api/update/route-e70b5e2b4e09002b.js +1 -0
  594. package/.next/static/chunks/app/api/waves/route-e70b5e2b4e09002b.js +1 -0
  595. package/.next/static/chunks/app/api/webhooks/[id]/route-e70b5e2b4e09002b.js +1 -0
  596. package/.next/static/chunks/app/automation/triggers/page-594a6294c58344bf.js +1 -0
  597. package/.next/static/chunks/app/automation/waves/page-ce2fef4996cad8e6.js +1 -0
  598. package/.next/static/chunks/app/chat/page-203cb7bf21638ada.js +1 -0
  599. package/.next/static/chunks/app/docs/page-c466a58caf5e3336.js +1 -0
  600. package/.next/static/chunks/app/executions/page-fcc848de86714386.js +1 -0
  601. package/.next/static/chunks/app/flows/page-172c759ca81ba02f.js +1 -0
  602. package/.next/static/chunks/app/layout-a6ca531683a518a7.js +1 -0
  603. package/.next/static/chunks/app/mcp/page-0a96e6b30e45b1e6.js +1 -0
  604. package/.next/static/chunks/app/mcp-flows/route-e70b5e2b4e09002b.js +1 -0
  605. package/.next/static/chunks/app/mcp-proxy/[server]/route-e70b5e2b4e09002b.js +1 -0
  606. package/.next/static/chunks/app/models/error-1964203c5c6e7d0e.js +1 -0
  607. package/.next/static/chunks/app/models/{loading-1687ae86584f5b1b.js → loading-0cdcf9bae7d3b8f3.js} +1 -1
  608. package/.next/static/chunks/app/models/page-ad1cbea6d3324966.js +1 -0
  609. package/.next/static/chunks/app/packages/page-dda48425be9fc137.js +1 -0
  610. package/.next/static/chunks/app/page-04189aa1b1318c2d.js +1 -0
  611. package/.next/static/chunks/app/settings/page-906c229c87011ead.js +1 -0
  612. package/.next/static/chunks/app/statistics/page-9b13a95549f438c0.js +1 -0
  613. package/.next/static/chunks/app/v1/chat/completions/route-e70b5e2b4e09002b.js +1 -0
  614. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-e70b5e2b4e09002b.js +1 -0
  615. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-e70b5e2b4e09002b.js +1 -0
  616. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-e70b5e2b4e09002b.js +1 -0
  617. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-e70b5e2b4e09002b.js +1 -0
  618. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-e70b5e2b4e09002b.js +1 -0
  619. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-e70b5e2b4e09002b.js +1 -0
  620. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/inject/route-e70b5e2b4e09002b.js +1 -0
  621. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route-e70b5e2b4e09002b.js +1 -0
  622. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/resources/route-e70b5e2b4e09002b.js +1 -0
  623. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-e70b5e2b4e09002b.js +1 -0
  624. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/revert/route-e70b5e2b4e09002b.js +1 -0
  625. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-e70b5e2b4e09002b.js +1 -0
  626. package/.next/static/chunks/app/v1/chat/conversations/route-e70b5e2b4e09002b.js +1 -0
  627. package/.next/static/chunks/app/v1/chat/events/route-e70b5e2b4e09002b.js +1 -0
  628. package/.next/static/chunks/app/v1/models/route-e70b5e2b4e09002b.js +1 -0
  629. package/.next/static/chunks/app/waves/page-5b53af3eb9409414.js +1 -0
  630. package/.next/static/chunks/webpack-9fbd3587b9ef4dca.js +1 -0
  631. package/.next/static/css/400b1b927c3ffaf6.css +1 -0
  632. package/.next/static/css/82efa7d39b03a714.css +1 -0
  633. package/.next/trace +11 -10
  634. package/.next/types/app/api/flow/[id]/convert-process-to-subflow/route.ts +347 -0
  635. package/.next/types/app/api/flow/assist/route.ts +347 -0
  636. package/.next/types/app/api/mcp/flujo/authoring/route.ts +347 -0
  637. package/.next/types/app/api/mcp/flujo/automation/route.ts +347 -0
  638. package/.next/types/app/api/mcp/flujo/flows/route.ts +347 -0
  639. package/.next/types/app/api/mcp/flujo/resources/read/route.ts +347 -0
  640. package/.next/types/app/api/mcp/flujo/resources/route.ts +347 -0
  641. package/.next/types/app/api/mcp/flujo/servers/route.ts +347 -0
  642. package/.next/types/app/api/mcp/flujo/state/route.ts +347 -0
  643. package/.next/types/app/api/mcp/flujo/tools/route.ts +347 -0
  644. package/.next/types/app/api/setup/ai-cli/route.ts +347 -0
  645. package/.next/types/app/api/statistics/route.ts +347 -0
  646. package/.next/types/app/{layout.ts → automation/triggers/page.ts} +6 -6
  647. package/.next/types/app/{waves → automation/waves}/page.ts +3 -3
  648. package/.next/types/app/{executions → statistics}/page.ts +3 -3
  649. package/.next/types/app/v1/chat/conversations/[conversationId]/revert/route.ts +347 -0
  650. package/.next/types/routes.d.ts +18 -2
  651. package/.next/types/validator.ts +144 -0
  652. package/README.md +79 -52
  653. package/bin/flujo.mjs +42 -5
  654. package/mcp-servers/README.md +94 -0
  655. package/mcp-servers/bash/dist/index.d.ts +3 -0
  656. package/mcp-servers/bash/dist/index.js +85 -0
  657. package/mcp-servers/bash/dist/index.js.map +1 -0
  658. package/mcp-servers/bash/dist/resources.d.ts +13 -0
  659. package/mcp-servers/bash/dist/resources.js +298 -0
  660. package/mcp-servers/bash/dist/resources.js.map +1 -0
  661. package/mcp-servers/bash/dist/shared.d.ts +24 -0
  662. package/mcp-servers/bash/dist/shared.js +161 -0
  663. package/mcp-servers/bash/dist/shared.js.map +1 -0
  664. package/mcp-servers/bash/dist/tools.d.ts +59 -0
  665. package/mcp-servers/bash/dist/tools.js +1493 -0
  666. package/mcp-servers/bash/dist/tools.js.map +1 -0
  667. package/mcp-servers/bash/package.json +33 -0
  668. package/mcp-servers/browser/dist/index.d.ts +4 -0
  669. package/mcp-servers/browser/dist/index.js +34 -0
  670. package/mcp-servers/browser/dist/index.js.map +1 -0
  671. package/mcp-servers/browser/dist/resources.d.ts +6 -0
  672. package/mcp-servers/browser/dist/resources.js +78 -0
  673. package/mcp-servers/browser/dist/resources.js.map +1 -0
  674. package/mcp-servers/browser/dist/runtime.d.ts +26 -0
  675. package/mcp-servers/browser/dist/runtime.js +343 -0
  676. package/mcp-servers/browser/dist/runtime.js.map +1 -0
  677. package/mcp-servers/browser/dist/tools.d.ts +3 -0
  678. package/mcp-servers/browser/dist/tools.js +283 -0
  679. package/mcp-servers/browser/dist/tools.js.map +1 -0
  680. package/mcp-servers/browser/package.json +31 -0
  681. package/mcp-servers/filesystem/dist/index.d.ts +3 -0
  682. package/mcp-servers/filesystem/dist/index.js +56 -0
  683. package/mcp-servers/filesystem/dist/index.js.map +1 -0
  684. package/mcp-servers/filesystem/dist/resources.d.ts +49 -0
  685. package/{.next/server/chunks/9724.js → mcp-servers/filesystem/dist/resources.js} +592 -391
  686. package/mcp-servers/filesystem/dist/resources.js.map +1 -0
  687. package/mcp-servers/filesystem/dist/shared.d.ts +24 -0
  688. package/mcp-servers/filesystem/dist/shared.js +161 -0
  689. package/mcp-servers/filesystem/dist/shared.js.map +1 -0
  690. package/mcp-servers/filesystem/dist/tools.d.ts +3 -0
  691. package/mcp-servers/filesystem/dist/tools.js +1229 -0
  692. package/mcp-servers/filesystem/dist/tools.js.map +1 -0
  693. package/mcp-servers/filesystem/package.json +30 -0
  694. package/mcp-servers/flujo/dist/client.d.ts +12 -0
  695. package/mcp-servers/flujo/dist/client.js +144 -0
  696. package/mcp-servers/flujo/dist/client.js.map +1 -0
  697. package/mcp-servers/flujo/dist/index.d.ts +2 -0
  698. package/mcp-servers/flujo/dist/index.js +31 -0
  699. package/mcp-servers/flujo/dist/index.js.map +1 -0
  700. package/mcp-servers/flujo/package.json +29 -0
  701. package/mcp-servers/mcp-whatsapp-web/dist/auth/link-page.d.ts +11 -0
  702. package/mcp-servers/mcp-whatsapp-web/dist/auth/link-page.js +161 -0
  703. package/mcp-servers/mcp-whatsapp-web/dist/auth/link-page.js.map +1 -0
  704. package/mcp-servers/mcp-whatsapp-web/dist/auth/oauth-provider.d.ts +53 -0
  705. package/mcp-servers/mcp-whatsapp-web/dist/auth/oauth-provider.js +206 -0
  706. package/mcp-servers/mcp-whatsapp-web/dist/auth/oauth-provider.js.map +1 -0
  707. package/mcp-servers/mcp-whatsapp-web/dist/index.d.ts +2 -0
  708. package/mcp-servers/mcp-whatsapp-web/dist/index.js +128 -0
  709. package/mcp-servers/mcp-whatsapp-web/dist/index.js.map +1 -0
  710. package/mcp-servers/mcp-whatsapp-web/dist/server.d.ts +28 -0
  711. package/mcp-servers/mcp-whatsapp-web/dist/server.js +268 -0
  712. package/mcp-servers/mcp-whatsapp-web/dist/server.js.map +1 -0
  713. package/mcp-servers/mcp-whatsapp-web/dist/services/whatsapp.d.ts +149 -0
  714. package/mcp-servers/mcp-whatsapp-web/dist/services/whatsapp.js +818 -0
  715. package/mcp-servers/mcp-whatsapp-web/dist/services/whatsapp.js.map +1 -0
  716. package/mcp-servers/mcp-whatsapp-web/dist/tools/auth.d.ts +8 -0
  717. package/mcp-servers/mcp-whatsapp-web/dist/tools/auth.js +232 -0
  718. package/mcp-servers/mcp-whatsapp-web/dist/tools/auth.js.map +1 -0
  719. package/mcp-servers/mcp-whatsapp-web/dist/tools/chats.d.ts +3 -0
  720. package/mcp-servers/mcp-whatsapp-web/dist/tools/chats.js +90 -0
  721. package/mcp-servers/mcp-whatsapp-web/dist/tools/chats.js.map +1 -0
  722. package/mcp-servers/mcp-whatsapp-web/dist/tools/contacts.d.ts +3 -0
  723. package/mcp-servers/mcp-whatsapp-web/dist/tools/contacts.js +65 -0
  724. package/mcp-servers/mcp-whatsapp-web/dist/tools/contacts.js.map +1 -0
  725. package/mcp-servers/mcp-whatsapp-web/dist/tools/media.d.ts +3 -0
  726. package/mcp-servers/mcp-whatsapp-web/dist/tools/media.js +245 -0
  727. package/mcp-servers/mcp-whatsapp-web/dist/tools/media.js.map +1 -0
  728. package/mcp-servers/mcp-whatsapp-web/dist/tools/messages.d.ts +3 -0
  729. package/mcp-servers/mcp-whatsapp-web/dist/tools/messages.js +141 -0
  730. package/mcp-servers/mcp-whatsapp-web/dist/tools/messages.js.map +1 -0
  731. package/mcp-servers/mcp-whatsapp-web/dist/types/index.d.ts +1 -0
  732. package/mcp-servers/mcp-whatsapp-web/dist/types/index.js +3 -0
  733. package/mcp-servers/mcp-whatsapp-web/dist/types/index.js.map +1 -0
  734. package/mcp-servers/mcp-whatsapp-web/dist/types/whatsapp.d.ts +16 -0
  735. package/mcp-servers/mcp-whatsapp-web/dist/types/whatsapp.js +5 -0
  736. package/mcp-servers/mcp-whatsapp-web/dist/types/whatsapp.js.map +1 -0
  737. package/mcp-servers/mcp-whatsapp-web/dist/utils/audio.d.ts +23 -0
  738. package/mcp-servers/mcp-whatsapp-web/dist/utils/audio.js +99 -0
  739. package/mcp-servers/mcp-whatsapp-web/dist/utils/audio.js.map +1 -0
  740. package/mcp-servers/mcp-whatsapp-web/dist/utils/browser-finder.d.ts +12 -0
  741. package/mcp-servers/mcp-whatsapp-web/dist/utils/browser-finder.js +72 -0
  742. package/mcp-servers/mcp-whatsapp-web/dist/utils/browser-finder.js.map +1 -0
  743. package/mcp-servers/mcp-whatsapp-web/dist/utils/browser-process-manager.d.ts +84 -0
  744. package/mcp-servers/mcp-whatsapp-web/dist/utils/browser-process-manager.js +297 -0
  745. package/mcp-servers/mcp-whatsapp-web/dist/utils/browser-process-manager.js.map +1 -0
  746. package/mcp-servers/mcp-whatsapp-web/dist/utils/cleanup-browsers.d.ts +12 -0
  747. package/mcp-servers/mcp-whatsapp-web/dist/utils/cleanup-browsers.js +141 -0
  748. package/mcp-servers/mcp-whatsapp-web/dist/utils/cleanup-browsers.js.map +1 -0
  749. package/mcp-servers/mcp-whatsapp-web/dist/utils/logger.d.ts +2 -0
  750. package/mcp-servers/mcp-whatsapp-web/dist/utils/logger.js +69 -0
  751. package/mcp-servers/mcp-whatsapp-web/dist/utils/logger.js.map +1 -0
  752. package/mcp-servers/mcp-whatsapp-web/package.json +75 -0
  753. package/mcp-servers/mcp-windows-desktop-automation/dist/index.d.ts +8 -0
  754. package/mcp-servers/mcp-windows-desktop-automation/dist/index.js +95 -0
  755. package/mcp-servers/mcp-windows-desktop-automation/dist/index.js.map +1 -0
  756. package/mcp-servers/mcp-windows-desktop-automation/dist/prompts/index.d.ts +8 -0
  757. package/mcp-servers/mcp-windows-desktop-automation/dist/prompts/index.js +195 -0
  758. package/mcp-servers/mcp-windows-desktop-automation/dist/prompts/index.js.map +1 -0
  759. package/mcp-servers/mcp-windows-desktop-automation/dist/resources/index.d.ts +8 -0
  760. package/mcp-servers/mcp-windows-desktop-automation/dist/resources/index.js +214 -0
  761. package/mcp-servers/mcp-windows-desktop-automation/dist/resources/index.js.map +1 -0
  762. package/mcp-servers/mcp-windows-desktop-automation/dist/server/server.d.ts +21 -0
  763. package/mcp-servers/mcp-windows-desktop-automation/dist/server/server.js +108 -0
  764. package/mcp-servers/mcp-windows-desktop-automation/dist/server/server.js.map +1 -0
  765. package/mcp-servers/mcp-windows-desktop-automation/dist/tools/control.d.ts +8 -0
  766. package/mcp-servers/mcp-windows-desktop-automation/dist/tools/control.js +301 -0
  767. package/mcp-servers/mcp-windows-desktop-automation/dist/tools/control.js.map +1 -0
  768. package/mcp-servers/mcp-windows-desktop-automation/dist/tools/index.d.ts +8 -0
  769. package/mcp-servers/mcp-windows-desktop-automation/dist/tools/index.js +22 -0
  770. package/mcp-servers/mcp-windows-desktop-automation/dist/tools/index.js.map +1 -0
  771. package/mcp-servers/mcp-windows-desktop-automation/dist/tools/keyboard.d.ts +8 -0
  772. package/mcp-servers/mcp-windows-desktop-automation/dist/tools/keyboard.js +146 -0
  773. package/mcp-servers/mcp-windows-desktop-automation/dist/tools/keyboard.js.map +1 -0
  774. package/mcp-servers/mcp-windows-desktop-automation/dist/tools/mouse.d.ts +8 -0
  775. package/mcp-servers/mcp-windows-desktop-automation/dist/tools/mouse.js +179 -0
  776. package/mcp-servers/mcp-windows-desktop-automation/dist/tools/mouse.js.map +1 -0
  777. package/mcp-servers/mcp-windows-desktop-automation/dist/tools/process.d.ts +8 -0
  778. package/mcp-servers/mcp-windows-desktop-automation/dist/tools/process.js +236 -0
  779. package/mcp-servers/mcp-windows-desktop-automation/dist/tools/process.js.map +1 -0
  780. package/mcp-servers/mcp-windows-desktop-automation/dist/tools/window.d.ts +8 -0
  781. package/mcp-servers/mcp-windows-desktop-automation/dist/tools/window.js +300 -0
  782. package/mcp-servers/mcp-windows-desktop-automation/dist/tools/window.js.map +1 -0
  783. package/mcp-servers/mcp-windows-desktop-automation/dist/utils/logger/logger.d.ts +50 -0
  784. package/mcp-servers/mcp-windows-desktop-automation/dist/utils/logger/logger.js +78 -0
  785. package/mcp-servers/mcp-windows-desktop-automation/dist/utils/logger/logger.js.map +1 -0
  786. package/mcp-servers/mcp-windows-desktop-automation/dist/utils/types.d.ts +51 -0
  787. package/mcp-servers/mcp-windows-desktop-automation/dist/utils/types.js +61 -0
  788. package/mcp-servers/mcp-windows-desktop-automation/dist/utils/types.js.map +1 -0
  789. package/mcp-servers/mcp-windows-desktop-automation/package.json +38 -0
  790. package/mcp-servers/patchright-mcp/package.json +32 -0
  791. package/mcp-servers/reddit-mcp-server/package.json +88 -0
  792. package/mcp-servers/servers/package.json +31 -0
  793. package/mcp-servers/shared/dist/index.d.ts +24 -0
  794. package/mcp-servers/shared/dist/index.js +161 -0
  795. package/mcp-servers/shared/dist/index.js.map +1 -0
  796. package/mcp-servers/shared/package.json +26 -0
  797. package/package.json +119 -99
  798. package/scripts/launch-next.mjs +13 -1
  799. package/.next/server/chunks/1114.js +0 -1
  800. package/.next/server/chunks/1439.js +0 -1
  801. package/.next/server/chunks/1578.js +0 -5
  802. package/.next/server/chunks/1634.js +0 -1
  803. package/.next/server/chunks/166.js +0 -5
  804. package/.next/server/chunks/1664.js +0 -2
  805. package/.next/server/chunks/1690.js +0 -1
  806. package/.next/server/chunks/2859.js +0 -1
  807. package/.next/server/chunks/3629.js +0 -1
  808. package/.next/server/chunks/3653.js +0 -2
  809. package/.next/server/chunks/366.js +0 -2
  810. package/.next/server/chunks/3717.js +0 -1
  811. package/.next/server/chunks/3935.js +0 -4
  812. package/.next/server/chunks/3984.js +0 -9
  813. package/.next/server/chunks/4013.js +0 -1
  814. package/.next/server/chunks/4436.js +0 -1
  815. package/.next/server/chunks/4466.js +0 -1
  816. package/.next/server/chunks/4551.js +0 -6
  817. package/.next/server/chunks/4663.js +0 -1
  818. package/.next/server/chunks/4822.js +0 -1
  819. package/.next/server/chunks/5200.js +0 -1
  820. package/.next/server/chunks/5285.js +0 -1
  821. package/.next/server/chunks/5309.js +0 -78
  822. package/.next/server/chunks/544.js +0 -136
  823. package/.next/server/chunks/5463.js +0 -1
  824. package/.next/server/chunks/5544.js +0 -5
  825. package/.next/server/chunks/5880.js +0 -1
  826. package/.next/server/chunks/6747.js +0 -435
  827. package/.next/server/chunks/6793.js +0 -1
  828. package/.next/server/chunks/7069.js +0 -6
  829. package/.next/server/chunks/7104.js +0 -1
  830. package/.next/server/chunks/7634.js +0 -4
  831. package/.next/server/chunks/793.js +0 -403
  832. package/.next/server/chunks/7965.js +0 -39
  833. package/.next/server/chunks/7993.js +0 -2
  834. package/.next/server/chunks/8356.js +0 -1
  835. package/.next/server/chunks/8387.js +0 -1
  836. package/.next/server/chunks/87.js +0 -1
  837. package/.next/server/chunks/9085.js +0 -2
  838. package/.next/server/chunks/9174.js +0 -1
  839. package/.next/server/chunks/9235.js +0 -29
  840. package/.next/server/chunks/94.js +0 -1
  841. package/.next/server/chunks/9983.js +0 -2
  842. package/.next/static/chunks/1871-14c3e63ca865d85e.js +0 -1
  843. package/.next/static/chunks/2003-f826c607d609d1fa.js +0 -1
  844. package/.next/static/chunks/2005.4eea65c00d9a29cd.js +0 -1
  845. package/.next/static/chunks/2318-13ef0d3048e97834.js +0 -1
  846. package/.next/static/chunks/3077-565833c67440a7fa.js +0 -1
  847. package/.next/static/chunks/3217.260785c2198d1e9d.js +0 -1
  848. package/.next/static/chunks/3272-fd8d59523f61da96.js +0 -1
  849. package/.next/static/chunks/3429-34fb1a84aed96703.js +0 -1
  850. package/.next/static/chunks/3545.353a62a68d3b7fd1.js +0 -1
  851. package/.next/static/chunks/3659-0ab9580d5ee5deea.js +0 -1
  852. package/.next/static/chunks/3772-20197853c04a6993.js +0 -1
  853. package/.next/static/chunks/422-61b173ba64cf0c94.js +0 -1
  854. package/.next/static/chunks/4523-a540747aa2ed34e8.js +0 -1
  855. package/.next/static/chunks/454.5fc2f8eef98483e3.js +0 -1
  856. package/.next/static/chunks/488-7ab54d8ae2b4b550.js +0 -1
  857. package/.next/static/chunks/4919-6c8a48e3cc642349.js +0 -1
  858. package/.next/static/chunks/4929-150b03595474c9d8.js +0 -1
  859. package/.next/static/chunks/5733-1419095a28c1ddc3.js +0 -1
  860. package/.next/static/chunks/639-90ed75d402dc872b.js +0 -1
  861. package/.next/static/chunks/6404-86615a5f5ce5c00f.js +0 -1
  862. package/.next/static/chunks/6430-8c6dac4a758119f2.js +0 -1
  863. package/.next/static/chunks/6539-118a0084e0bfae34.js +0 -1
  864. package/.next/static/chunks/7264-91d1fa99abcd91ad.js +0 -1
  865. package/.next/static/chunks/7328-c8a51bb8c7470d77.js +0 -1
  866. package/.next/static/chunks/7391-5a0abd837ba241f5.js +0 -1
  867. package/.next/static/chunks/7445-d8a8be6e451c522e.js +0 -1
  868. package/.next/static/chunks/7561-2b366ddcbc3cc0ec.js +0 -1
  869. package/.next/static/chunks/8124-4a80e3201b8e51b0.js +0 -1
  870. package/.next/static/chunks/8345.bc5534ec13abc9ee.js +0 -1
  871. package/.next/static/chunks/8404-5aa8ea49197b98b8.js +0 -1
  872. package/.next/static/chunks/8405.a425f94b6b13d2be.js +0 -1
  873. package/.next/static/chunks/8470-72cf748472d4d501.js +0 -1
  874. package/.next/static/chunks/8551-a28272acfda62ac9.js +0 -1
  875. package/.next/static/chunks/8650-f879564a0ed89bc3.js +0 -1
  876. package/.next/static/chunks/8989-5fa9c7c670eb9a1a.js +0 -1
  877. package/.next/static/chunks/9164-de1d167d87614a6d.js +0 -1
  878. package/.next/static/chunks/9195.294887f083b1a11b.js +0 -1
  879. package/.next/static/chunks/9203-786f457ecf60b49c.js +0 -1
  880. package/.next/static/chunks/9244-3281f7fd02003a2c.js +0 -1
  881. package/.next/static/chunks/9345-11d6e48d892b1862.js +0 -8
  882. package/.next/static/chunks/9562-f8371be653010627.js +0 -1
  883. package/.next/static/chunks/9581-6d2523fd68a5e3c4.js +0 -1
  884. package/.next/static/chunks/9611-9867e6e8e65172ec.js +0 -1
  885. package/.next/static/chunks/9951-566fc6b05c12209e.js +0 -1
  886. package/.next/static/chunks/app/api/approvals/[id]/route-b9c783850b4c2acf.js +0 -1
  887. package/.next/static/chunks/app/api/approvals/route-b9c783850b4c2acf.js +0 -1
  888. package/.next/static/chunks/app/api/backup/route-b9c783850b4c2acf.js +0 -1
  889. package/.next/static/chunks/app/api/browse/route-b9c783850b4c2acf.js +0 -1
  890. package/.next/static/chunks/app/api/bugs/enhance/route-b9c783850b4c2acf.js +0 -1
  891. package/.next/static/chunks/app/api/cwd/route-b9c783850b4c2acf.js +0 -1
  892. package/.next/static/chunks/app/api/encryption/secure/route-b9c783850b4c2acf.js +0 -1
  893. package/.next/static/chunks/app/api/env/route-b9c783850b4c2acf.js +0 -1
  894. package/.next/static/chunks/app/api/flow/[id]/route-b9c783850b4c2acf.js +0 -1
  895. package/.next/static/chunks/app/api/flow/[id]/versions/[versionId]/route-b9c783850b4c2acf.js +0 -1
  896. package/.next/static/chunks/app/api/flow/[id]/versions/route-b9c783850b4c2acf.js +0 -1
  897. package/.next/static/chunks/app/api/flow/compile/route-b9c783850b4c2acf.js +0 -1
  898. package/.next/static/chunks/app/api/flow/generate/route-b9c783850b4c2acf.js +0 -1
  899. package/.next/static/chunks/app/api/flow/generator/route-b9c783850b4c2acf.js +0 -1
  900. package/.next/static/chunks/app/api/flow/improve/route-b9c783850b4c2acf.js +0 -1
  901. package/.next/static/chunks/app/api/flow/prompt-renderer/route-b9c783850b4c2acf.js +0 -1
  902. package/.next/static/chunks/app/api/flow/quick-chat/route-b9c783850b4c2acf.js +0 -1
  903. package/.next/static/chunks/app/api/flow/repair/route-b9c783850b4c2acf.js +0 -1
  904. package/.next/static/chunks/app/api/flow/route-b9c783850b4c2acf.js +0 -1
  905. package/.next/static/chunks/app/api/git/route-b9c783850b4c2acf.js +0 -1
  906. package/.next/static/chunks/app/api/init/route-b9c783850b4c2acf.js +0 -1
  907. package/.next/static/chunks/app/api/local-models/capability/route-b9c783850b4c2acf.js +0 -1
  908. package/.next/static/chunks/app/api/local-models/pull/route-b9c783850b4c2acf.js +0 -1
  909. package/.next/static/chunks/app/api/local-models/suggest/route-b9c783850b4c2acf.js +0 -1
  910. package/.next/static/chunks/app/api/mcp/app-sandbox/route-b9c783850b4c2acf.js +0 -1
  911. package/.next/static/chunks/app/api/mcp/cancel/route-b9c783850b4c2acf.js +0 -1
  912. package/.next/static/chunks/app/api/mcp/oauth-capability/route-b9c783850b4c2acf.js +0 -1
  913. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-b9c783850b4c2acf.js +0 -1
  914. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-b9c783850b4c2acf.js +0 -1
  915. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-b9c783850b4c2acf.js +0 -1
  916. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-b9c783850b4c2acf.js +0 -1
  917. package/.next/static/chunks/app/api/mcp/servers/[name]/route-b9c783850b4c2acf.js +0 -1
  918. package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-b9c783850b4c2acf.js +0 -1
  919. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-b9c783850b4c2acf.js +0 -1
  920. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-b9c783850b4c2acf.js +0 -1
  921. package/.next/static/chunks/app/api/mcp/servers/route-b9c783850b4c2acf.js +0 -1
  922. package/.next/static/chunks/app/api/mcp/test-connection/route-b9c783850b4c2acf.js +0 -1
  923. package/.next/static/chunks/app/api/mcp/test-connection/stream/route-b9c783850b4c2acf.js +0 -1
  924. package/.next/static/chunks/app/api/mcp-registry/route-b9c783850b4c2acf.js +0 -1
  925. package/.next/static/chunks/app/api/mcp-registry/spotlight/route-b9c783850b4c2acf.js +0 -1
  926. package/.next/static/chunks/app/api/model/[id]/route-b9c783850b4c2acf.js +0 -1
  927. package/.next/static/chunks/app/api/model/provider/route-b9c783850b4c2acf.js +0 -1
  928. package/.next/static/chunks/app/api/model/route-b9c783850b4c2acf.js +0 -1
  929. package/.next/static/chunks/app/api/model/test/route-b9c783850b4c2acf.js +0 -1
  930. package/.next/static/chunks/app/api/oauth/callback/route-b9c783850b4c2acf.js +0 -1
  931. package/.next/static/chunks/app/api/oauth/initiate/route-b9c783850b4c2acf.js +0 -1
  932. package/.next/static/chunks/app/api/oauth/reset/route-b9c783850b4c2acf.js +0 -1
  933. package/.next/static/chunks/app/api/packages/build/route-b9c783850b4c2acf.js +0 -1
  934. package/.next/static/chunks/app/api/packages/derive-secrets/route-b9c783850b4c2acf.js +0 -1
  935. package/.next/static/chunks/app/api/packages/install/route-b9c783850b4c2acf.js +0 -1
  936. package/.next/static/chunks/app/api/packages/install/status/route-b9c783850b4c2acf.js +0 -1
  937. package/.next/static/chunks/app/api/packages/installed/route-b9c783850b4c2acf.js +0 -1
  938. package/.next/static/chunks/app/api/packages/resolve/route-b9c783850b4c2acf.js +0 -1
  939. package/.next/static/chunks/app/api/packages/scan-targets/route-b9c783850b4c2acf.js +0 -1
  940. package/.next/static/chunks/app/api/packages/search/route-b9c783850b4c2acf.js +0 -1
  941. package/.next/static/chunks/app/api/packages/uninstall/route-b9c783850b4c2acf.js +0 -1
  942. package/.next/static/chunks/app/api/planned-executions/[id]/route-b9c783850b4c2acf.js +0 -1
  943. package/.next/static/chunks/app/api/planned-executions/[id]/run/route-b9c783850b4c2acf.js +0 -1
  944. package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-b9c783850b4c2acf.js +0 -1
  945. package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-b9c783850b4c2acf.js +0 -1
  946. package/.next/static/chunks/app/api/planned-executions/reconcile/route-b9c783850b4c2acf.js +0 -1
  947. package/.next/static/chunks/app/api/planned-executions/route-b9c783850b4c2acf.js +0 -1
  948. package/.next/static/chunks/app/api/registry/auth/resend/route-b9c783850b4c2acf.js +0 -1
  949. package/.next/static/chunks/app/api/registry/auth/reset/route-b9c783850b4c2acf.js +0 -1
  950. package/.next/static/chunks/app/api/registry/auth/route-b9c783850b4c2acf.js +0 -1
  951. package/.next/static/chunks/app/api/registry/feedback/route-b9c783850b4c2acf.js +0 -1
  952. package/.next/static/chunks/app/api/registry/oauth/callback/route-b9c783850b4c2acf.js +0 -1
  953. package/.next/static/chunks/app/api/registry/oauth/initiate/route-b9c783850b4c2acf.js +0 -1
  954. package/.next/static/chunks/app/api/registry/packages/route-b9c783850b4c2acf.js +0 -1
  955. package/.next/static/chunks/app/api/registry/publish/route-b9c783850b4c2acf.js +0 -1
  956. package/.next/static/chunks/app/api/registry/settings/route-b9c783850b4c2acf.js +0 -1
  957. package/.next/static/chunks/app/api/restore/route-b9c783850b4c2acf.js +0 -1
  958. package/.next/static/chunks/app/api/runs/active/route-b9c783850b4c2acf.js +0 -1
  959. package/.next/static/chunks/app/api/storage/route-b9c783850b4c2acf.js +0 -1
  960. package/.next/static/chunks/app/api/telemetry/daily-active/route-b9c783850b4c2acf.js +0 -1
  961. package/.next/static/chunks/app/api/update/route-b9c783850b4c2acf.js +0 -1
  962. package/.next/static/chunks/app/api/waves/route-b9c783850b4c2acf.js +0 -1
  963. package/.next/static/chunks/app/api/webhooks/[id]/route-b9c783850b4c2acf.js +0 -1
  964. package/.next/static/chunks/app/chat/page-e37bbc561f40ce60.js +0 -1
  965. package/.next/static/chunks/app/docs/page-3b9ce48854b2147d.js +0 -1
  966. package/.next/static/chunks/app/executions/page-8296fd69c439ccee.js +0 -1
  967. package/.next/static/chunks/app/flows/page-e52c8943555e38dd.js +0 -1
  968. package/.next/static/chunks/app/layout-abed1f211e03152f.js +0 -1
  969. package/.next/static/chunks/app/mcp/page-4a3e5a643d84ee89.js +0 -1
  970. package/.next/static/chunks/app/mcp-flows/route-b9c783850b4c2acf.js +0 -1
  971. package/.next/static/chunks/app/mcp-proxy/[server]/route-b9c783850b4c2acf.js +0 -1
  972. package/.next/static/chunks/app/models/error-1718b538d6967e56.js +0 -1
  973. package/.next/static/chunks/app/models/page-595597042e227970.js +0 -1
  974. package/.next/static/chunks/app/packages/page-2f2d29c17841b3cf.js +0 -1
  975. package/.next/static/chunks/app/page-2f9da78a4891731a.js +0 -1
  976. package/.next/static/chunks/app/settings/page-f35e939032b0277d.js +0 -1
  977. package/.next/static/chunks/app/v1/chat/completions/route-b9c783850b4c2acf.js +0 -1
  978. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-b9c783850b4c2acf.js +0 -1
  979. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-b9c783850b4c2acf.js +0 -1
  980. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-b9c783850b4c2acf.js +0 -1
  981. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-b9c783850b4c2acf.js +0 -1
  982. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-b9c783850b4c2acf.js +0 -1
  983. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-b9c783850b4c2acf.js +0 -1
  984. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/inject/route-b9c783850b4c2acf.js +0 -1
  985. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route-b9c783850b4c2acf.js +0 -1
  986. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/resources/route-b9c783850b4c2acf.js +0 -1
  987. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-b9c783850b4c2acf.js +0 -1
  988. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-b9c783850b4c2acf.js +0 -1
  989. package/.next/static/chunks/app/v1/chat/conversations/route-b9c783850b4c2acf.js +0 -1
  990. package/.next/static/chunks/app/v1/chat/events/route-b9c783850b4c2acf.js +0 -1
  991. package/.next/static/chunks/app/v1/models/route-b9c783850b4c2acf.js +0 -1
  992. package/.next/static/chunks/app/waves/page-dc99a16141dd902b.js +0 -1
  993. package/.next/static/chunks/webpack-9d09d53b271f49e2.js +0 -1
  994. package/.next/static/css/30253fcfa8035221.css +0 -1
  995. package/.next/static/css/69ab44eb350e0b6c.css +0 -1
  996. package/.next/static/kIFnN4S0HHOnvpPGsSzi9/_buildManifest.js +0 -1
  997. /package/.next/static/{kIFnN4S0HHOnvpPGsSzi9 → b1aMk0634gkkiunttd1SQ}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ "use strict";exports.id=1539,exports.ids=[1539],exports.modules={2826:(a,b,c)=>{c.d(b,{R:()=>e,j:()=>d});let d="flujo://run/",e={autoCaptureEnabled:!0,textThresholdChars:8192,maxResourceBytes:0x3200000,maxConversationBytes:0x10000000,replaceLargeTextWithStub:!1,toolResultMaxLines:2e3,toolResultMaxBytes:51200,retentionAgeDays:7}},61539:(a,b,c)=>{c.d(b,{Bt:()=>C,FA:()=>E,Ns:()=>v,UC:()=>u,fg:()=>G,gy:()=>F,iQ:()=>H,jR:()=>x,tm:()=>B,wc:()=>I,yP:()=>D});var d=c(29021),e=c(33873),f=c.n(e),g=c(55511),h=c(50846),i=c(43326),j=c(92372),k=c(38844),l=c(2826);let m=(0,h.h)("backend/services/runResources"),n=f().join((0,i.getDataDir)(),"db","run-resources"),o=/^[A-Za-z0-9_-]{1,64}$/;function p(a,b){if("string"!=typeof a||!o.test(a))throw Error(`Unsafe run-resource ${b}: ${JSON.stringify(a)}`)}let q=a=>f().join(n,a),r=a=>f().join(q(a),"index.json"),s=(a,b)=>f().join(q(a),`${b}.dat`),t=a=>`run-resources/${a}`;function u(a,b){return`${l.j}${a}/${b}`}function v(a){if("string"!=typeof a||!a.startsWith(l.j))return null;let b=a.slice(l.j.length).split("/");if(2!==b.length)return null;let[c,d]=b;return o.test(c)&&o.test(d)?{conversationId:c,id:d}:null}let w=null;async function x(){let a;if(w&&Date.now()-w.at<3e4)return w.value;try{let b=await (0,j.loadItem)(k.Z.RUN_RESOURCE_SETTINGS,l.R);a={...l.R,...b}}catch(b){m.warn("Failed to load run-resource settings; using defaults",b),a=l.R}return w={value:a,at:Date.now()},a}let y=global.__flujo_run_resources??(global.__flujo_run_resources=new Map);async function z(a){let b=y.get(a);if(b)return b;let c=[];try{let b=await d.promises.readFile(r(a),"utf-8");if(b.trim().length>0){let a=JSON.parse(b);Array.isArray(a)&&(c=a)}}catch(b){"ENOENT"!==b.code&&m.error(`Failed to read run-resource index for ${a}; treating as empty`,b)}return y.set(a,c),c}async function A(a,b){return(0,j.l_)(t(a),async()=>{let c=await z(a),{next:d,result:e}=await b(c);return d!==c&&(y.set(a,d),await (0,j.Zf)(r(a),JSON.stringify(d,null,2))),e})}async function B(a){let b;p(a.conversationId,"conversationId");let c=await x(),e=null,f="utf8";a.data&&("text"in a.data?(e=Buffer.from(a.data.text,"utf8"),f="utf8"):(e=Buffer.from(a.data.base64,"base64"),f="base64"));let h=e?.byteLength??0;if(h>c.maxResourceBytes)return m.warn(`Run-resource write skipped (size ${h} > cap ${c.maxResourceBytes})`,{conversationId:a.conversationId,name:a.name,kind:a.kind}),{skipped:"size-cap"};let i=(0,g.randomUUID)(),j=await A(a.conversationId,async j=>{let k=a.name?j.find(b=>b.name===a.name):void 0,l=j.reduce((a,b)=>a+(b===k?0:b.size),0);if(l+h>c.maxConversationBytes)return m.warn(`Run-resource write skipped (conversation budget ${l}+${h} > ${c.maxConversationBytes})`,{conversationId:a.conversationId,name:a.name,kind:a.kind}),{next:j,result:{skipped:"conversation-cap"}};let n={id:i,uri:u(a.conversationId,i),conversationId:a.conversationId,name:a.name,mimeType:a.mimeType,size:h,sha256:e?(0,g.createHash)("sha256").update(e).digest("hex"):void 0,kind:a.kind,encoding:f,createdAt:Date.now(),producedBy:a.producedBy,origin:a.origin,archive:a.archive,readBy:[],verifications:[]};e&&(await d.promises.mkdir(q(a.conversationId),{recursive:!0}),await d.promises.writeFile(s(a.conversationId,i),e));let o=k?j.filter(a=>a!==k):j.slice();return o.push(n),b=k&&k.size>0?k:void 0,m.debug(`Stored run resource ${n.uri}`,{kind:n.kind,size:h,name:n.name}),{next:o,result:n}});return b&&d.promises.unlink(s(a.conversationId,b.id)).catch(()=>{}),j}async function C(a){return p(a,"conversationId"),(await z(a)).slice()}async function D(a=200,b=0){let c=[];try{c=(await d.promises.readdir(n,{withFileTypes:!0})).filter(a=>a.isDirectory()&&o.test(a.name)).map(a=>a.name)}catch(a){if("ENOENT"===a.code)return[];throw a}let e=[];for(let a of c)e.push(...await z(a));return e.sort((a,b)=>b.createdAt-a.createdAt),e.slice(Math.max(0,b),Math.max(0,b)+Math.max(0,a))}async function E(a,b){return p(a,"conversationId"),(await z(a)).find(a=>a.name===b)??null}async function F(a,b){let c,e=v(a);if(!e)return null;let f=(await z(e.conversationId)).find(a=>a.id===e.id);if(!f)return null;if("link"===f.kind)c={contents:[{uri:f.uri,mimeType:f.mimeType??"text/plain",text:`Run resource link → ${f.origin?`${f.origin.server}: ${f.origin.uri}`:"unknown origin"}`}]};else{let b;try{b=await d.promises.readFile(s(e.conversationId,e.id))}catch(b){return m.error(`Run-resource payload missing for ${a}`,b),null}c="utf8"===f.encoding?{contents:[{uri:f.uri,mimeType:f.mimeType??"text/plain",text:b.toString("utf8")}]}:{contents:[{uri:f.uri,mimeType:f.mimeType??"application/octet-stream",blob:b.toString("base64")}]}}if(b)try{await A(e.conversationId,async a=>{let c=a.find(a=>a.id===e.id);if(!c)return{next:a,result:void 0};let d={...c,readBy:[...c.readBy,b]};return{next:a.map(a=>a===c?d:a),result:void 0}}),f.readBy.push(b)}catch(b){m.warn(`Failed to persist readBy for ${a}`,b)}return{entry:f,contents:c}}async function G(a,b){let c,e=v(a);if(!e)return null;let f=(await z(e.conversationId)).find(a=>a.id===e.id);if(!f||"link"===f.kind)return null;try{c=await d.promises.readFile(s(e.conversationId,e.id))}catch(b){return m.error(`Run-resource payload missing for ${a}`,b),null}let h=(0,g.createHash)("sha256").update(c).digest("hex"),i=b.expectedSha256?.trim().toLowerCase(),j=i?{expectedSha256:i,actualSha256:h,ok:i===h}:void 0,k=Math.max(1,Math.min(2e5,Math.floor(b.maxChars??5e4))),l="utf8"===f.encoding?c.toString("utf8"):`[binary run resource ${f.mimeType??f.kind} (${f.size} bytes) at ${f.uri}]`,n=l.slice(0,k);try{await A(e.conversationId,async a=>{let c=a.find(a=>a.id===e.id);if(!c)return{next:a,result:void 0};let d={...c,readBy:[...c.readBy,b.access],verifications:j?[...c.verifications??[],{at:b.access.at,expectedSha256:j.expectedSha256,actualSha256:j.actualSha256,ok:j.ok,source:b.access.source,nodeId:b.access.nodeId}]:c.verifications};return{next:a.map(a=>a===c?d:a),result:void 0}})}catch(b){m.warn(`Failed to persist bounded read lineage for ${a}`,b)}return{entry:f,content:n,truncated:l.length>n.length,verification:j}}async function H(a){p(a,"conversationId"),y.delete(a),await (0,j.l_)(t(a),async()=>{try{await d.promises.rm(q(a),{recursive:!0,force:!0}),m.debug(`Deleted run resources for conversation ${a}`)}catch(b){m.warn(`Failed to delete run resources for ${a}`,b)}})}async function I(a=Date.now()){let b=(await x()).retentionAgeDays??0;if(!b||b<=0)return{removed:0};let c=a-864e5*b,e=[];try{e=(await d.promises.readdir(n,{withFileTypes:!0})).filter(a=>a.isDirectory()&&o.test(a.name)).map(a=>a.name)}catch(a){if("ENOENT"===a.code)return{removed:0};throw a}let f=0;for(let a of e){let b=[];for(let e of(await A(a,async a=>{let d=a.filter(a=>{let d=a.createdAt<c;return d&&b.push(a),!d});return d.length===a.length?{next:a,result:void 0}:{next:d,result:void 0}}),b))e.size>0&&await d.promises.unlink(s(a,e.id)).catch(()=>{}),f++}return f>0&&m.debug(`Retention sweep removed ${f} run resource(s) older than ${b}d`),{removed:f}}}};
@@ -0,0 +1,2 @@
1
+ "use strict";exports.id=1662,exports.ids=[1662],exports.modules={13516:(a,b,c)=>{c.d(b,{G:()=>d});let d={LOG_LEVEL:3,INCLUDE_TOOL_CALLS_IN_RESPONSE:!0,ENABLE_EXECUTION_TRACKER:!1,ENABLE_REVERT_TO_HERE:!1}},50846:(a,b,c)=>{c.d(b,{h:()=>i});var d=c(13516);let e={VERBOSE:-1,DEBUG:0,INFO:1,WARN:2,ERROR:3},f="number"==typeof d.G.LOG_LEVEL?d.G.LOG_LEVEL:e.ERROR;function g(a,b=0){if(b>6)return String(a);if(!(a instanceof Error))return a;let c={name:a.name,message:a.message};for(let d of Object.getOwnPropertyNames(a)){if("name"===d||"message"===d)continue;let e=a[d];"function"!=typeof e&&("stack"===d?c.stack=e:"cause"===d?c.cause=g(e,b+1):"errors"===d&&Array.isArray(e)?c.errors=e.map(a=>g(a,b+1)):c[d]=e)}return c}function h(a,b,c,d,h){if(a>=("number"==typeof h?h:f)){if("function"==typeof d)try{d=d()}catch{d="[lazy log data threw]"}let f=new Date().toISOString(),h=`[${f}] [${b}]`,i=`${h} ${c}`;if(void 0!==d)if(d instanceof Error||"object"==typeof d)try{let a=d instanceof Error?g(d):d,b=JSON.stringify(a,(a,b)=>b instanceof Error?g(b):b,2);i+=`:
2
+ ${b}`}catch(a){i+=": [Object cannot be stringified]"}else i+=`: ${d}`;switch(a){case e.VERBOSE:console.debug(`[VERBOSE] ${i}`);break;case e.DEBUG:console.debug(i);break;case e.INFO:console.info(i);break;case e.WARN:console.warn(i);break;case e.ERROR:console.error(i);break;default:console.log(i)}}}function i(a,b){let c,d=((c=a.replace(/^src\//,"")).startsWith("/")&&(c=c.substring(1)),c);return{verbose:(a,c)=>{h(e.VERBOSE,d,a,c,b)},debug:(a,c)=>{h(e.DEBUG,d,a,c,b)},info:(a,c)=>{h(e.INFO,d,a,c,b)},warn:(a,c)=>{h(e.WARN,d,a,c,b)},error:(a,c)=>{h(e.ERROR,d,a,c,b)}}}},63281:(a,b,c)=>{c.d(b,{g:()=>g});var d=c(2117);let e=(0,c(42819).h)("frontend/services/flow/index");class f{async loadFlows(){e.debug("loadFlows: Entering method");try{if(this.flowsCache)return e.debug("loadFlows: Using cached flows",{count:this.flowsCache.length}),this.flowsCache;let a=await fetch("/api/flow");if(!a.ok){let b=await a.json();throw Error(b.error||"Failed to load flows")}let b=await a.json();return e.debug("loadFlows: Loaded flows from API",{count:b.length}),this.flowsCache=b,b}catch(a){return e.warn("loadFlows: Failed to load flows:",a),[]}}async suggestToolsForStep(a){let b=await fetch("/api/flow/assist",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"suggest-tools",...a})}),c=await b.json().catch(()=>null);if(!b.ok)throw Error(c?.error||"Could not suggest connected tools.");return c}async applyToolsToStep(a){let b=await fetch("/api/flow/assist",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"apply-tools",...a})}),c=await b.json().catch(()=>null);if(!b.ok)throw Error(c?.error||"Could not connect the approved tools.");return c.flow}async checkPlausibility(a){let b=await fetch("/api/flow/assist",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"check-plausibility",...a})}),c=await b.json().catch(()=>null);if(!b.ok)throw Error(c?.error||"Could not check flow plausibility.");return c}async getFlow(a){e.debug("getFlow: Entering method",{flowId:a});try{if(this.flowsCache){let b=this.flowsCache.find(b=>b.id===a);if(b)return e.debug("getFlow: Using cached flow",{flowId:a}),b}let b=await fetch(`/api/flow/${encodeURIComponent(a)}`);if(!b.ok){if(404===b.status)return e.debug(`getFlow: Flow ${a} not found`),null;let c=await b.json();throw Error(c.error||`Failed to get flow: ${a}`)}let c=await b.json();return e.debug("getFlow: Retrieved flow from API",{flowId:a}),c}catch(b){return e.warn(`getFlow: Failed to get flow ${a}:`,b),null}}async addFlow(a){e.debug("addFlow: Entering method",{flowId:a.id,flowName:a.name,nodeCount:a.nodes.length,edgeCount:a.edges.length});try{let b=await fetch("/api/flow",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});if(!b.ok){let a=await b.json();return{success:!1,error:a.error||"Failed to add flow"}}let c=await b.json();return this.flowsCache&&this.flowsCache.push(c),e.debug("addFlow: Flow added successfully",{flowId:a.id}),{success:!0}}catch(a){return e.warn("addFlow: Failed to add flow:",a),{success:!1,error:a instanceof Error?a.message:"Failed to add flow"}}}async generateFlow(a,b,c){e.debug("generateFlow: Entering method",{modelId:b,allowInstall:c?.allowInstall,allowSubflows:c?.allowSubflows,maxDepth:c?.maxDepth});try{let d=await fetch("/api/flow/generate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({description:a,modelId:b,allowInstall:c?.allowInstall===!0,allowSubflows:c?.allowSubflows!==!1,..."number"==typeof c?.maxDepth?{maxDepth:c.maxDepth}:{}})}),f=await d.json().catch(()=>null);if(!d.ok)return{success:!1,error:f?.error||"Failed to generate flow"};let g=Array.isArray(f.flows)&&f.flows.length>0?f.flows:[{flow:f.flow,validation:f.validation}];return e.debug("generateFlow: Draft generated",{flowId:f.flow?.id,flowCount:g.length,attempts:f.attempts,errorCount:f.validation?.errorCount,installedServers:f.installedServers?.length??0}),{success:!0,flow:f.flow,validation:f.validation,flows:g,rootFlowId:f.rootFlowId??f.flow?.id,attempts:f.attempts,installedServers:f.installedServers??[]}}catch(a){return e.warn("generateFlow: Failed to generate flow:",a),{success:!1,error:a instanceof Error?a.message:"Failed to generate flow"}}}async improveFlow(a,b,c,d){e.debug("improveFlow: Entering method",{flowId:a?.id,modelId:c,allowInstall:d?.allowInstall});try{let f=await fetch("/api/flow/improve",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({flow:a,relatedFlows:d?.relatedFlows,description:b,modelId:c,allowInstall:d?.allowInstall===!0})}),g=await f.json().catch(()=>null);if(!f.ok)return{success:!1,error:g?.error||"Failed to improve flow"};return e.debug("improveFlow: Draft revised",{flowId:g.flow?.id,attempts:g.attempts,errorCount:g.validation?.errorCount,installedServers:g.installedServers?.length??0}),{success:!0,flow:g.flow,validation:g.validation,flows:Array.isArray(g.flows)&&g.flows.length>0?g.flows:[{flow:g.flow,validation:g.validation}],rootFlowId:g.rootFlowId??g.flow?.id,attempts:g.attempts,installedServers:g.installedServers??[]}}catch(a){return e.warn("improveFlow: Failed to improve flow:",a),{success:!1,error:a instanceof Error?a.message:"Failed to improve flow"}}}async convertProcessToSubflow(a,b,c,d){try{let e=await fetch(`/api/flow/${encodeURIComponent(a.id)}/convert-process-to-subflow`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({parentFlow:a,childFlow:b,processNodeId:c,expectedUpdatedAt:d})}),f=await e.json().catch(()=>null);if(!e.ok)return{success:!1,error:f?.error||"Failed to convert Process to Subflow."};let g=f.parentFlow,h=f.childFlow;if(this.flowsCache){let a=this.flowsCache.findIndex(a=>a.id===g.id);a>=0?this.flowsCache[a]=g:this.flowsCache.push(g),this.flowsCache.some(a=>a.id===h.id)||this.flowsCache.push(h)}return{success:!0,parentFlow:g,childFlow:h}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Failed to convert Process to Subflow."}}}async updateFlow(a){e.debug("updateFlow: Entering method",{flowId:a.id,flowName:a.name,nodeCount:a.nodes.length,edgeCount:a.edges.length});try{let b=await fetch(`/api/flow/${encodeURIComponent(a.id)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});if(!b.ok){let a=await b.json();return{success:!1,error:a.error||"Failed to update flow"}}let c=await b.json();if(this.flowsCache){let b=this.flowsCache.findIndex(b=>b.id===a.id);b>=0?this.flowsCache[b]=c:this.flowsCache.push(c)}return e.debug("updateFlow: Flow updated successfully",{flowId:a.id}),{success:!0}}catch(a){return e.warn("updateFlow: Failed to update flow:",a),{success:!1,error:a instanceof Error?a.message:"Failed to update flow"}}}async deleteFlow(a){e.debug("deleteFlow: Entering method",{flowId:a});try{let b=await fetch(`/api/flow/${encodeURIComponent(a)}`,{method:"DELETE"});if(!b.ok){let a=await b.json();return{success:!1,error:a.error||"Failed to delete flow"}}return this.flowsCache&&(this.flowsCache=this.flowsCache.filter(b=>b.id!==a)),e.debug("deleteFlow: Flow deleted successfully",{flowId:a}),{success:!0}}catch(a){return e.warn("deleteFlow: Failed to delete flow:",a),{success:!1,error:a instanceof Error?a.message:"Failed to delete flow"}}}async listFlowVersions(a){e.debug("listFlowVersions: Entering method",{flowId:a});try{let b=await fetch(`/api/flow/${encodeURIComponent(a)}/versions`);if(!b.ok){let a=await b.json().catch(()=>null);throw Error(a?.error||"Failed to list flow versions")}let c=await b.json();return Array.isArray(c.versions)?c.versions:[]}catch(b){return e.warn(`listFlowVersions: Failed for flow ${a}:`,b),[]}}async getFlowVersion(a,b){e.debug("getFlowVersion: Entering method",{flowId:a,versionId:b});try{let c=await fetch(`/api/flow/${encodeURIComponent(a)}/versions/${encodeURIComponent(b)}`);if(!c.ok){if(404===c.status)return null;let a=await c.json().catch(()=>null);throw Error(a?.error||"Failed to get flow version")}return await c.json()}catch(c){return e.warn(`getFlowVersion: Failed for ${a}/${b}:`,c),null}}createNode(a,b){return e.debug("createNode: Entering method",{type:a,position:b}),{id:(0,d.A)(),type:a,position:b,data:{label:`${"mcp"===a?"MCP":a.charAt(0).toUpperCase()+a.slice(1)} Node`,type:a,properties:"process"===a?{inputMode:"full-history"}:{}}}}createStartNode(){return{id:(0,d.A)(),type:"start",position:{x:250,y:150},data:{label:"Start Node",type:"start",properties:{promptTemplate:""}}}}createNewFlow(a="NewFlow"){e.debug("createNewFlow: Entering method",{name:a});let b=Date.now();return{id:(0,d.A)(),name:a,createdAt:b,updatedAt:b,nodes:[this.createStartNode()],edges:[]}}createHistoryEntry(a,b){return e.debug("createHistoryEntry: Entering method"),{nodes:[...a],edges:[...b]}}generateSampleFlow(a="Sample Flow"){return e.debug("generateSampleFlow: Entering method",{name:a}),{id:(0,d.A)(),name:a,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 g=new f}};
@@ -1 +1 @@
1
- "use strict";exports.id=1805,exports.ids=[1805],exports.modules={74186:(a,b,c)=>{c.d(b,{loadServerConfigs:()=>q,q:()=>r});var d=c(33873),e=c.n(d),f=c(34322),g=c(92372),h=c(38844),i=c(50846),j=c(43326);let k=(0,i.h)("backend/services/mcp/config"),l=new Set(["streamable","sse","websocket"]),m=e().join((0,j.getDataDir)(),"mcp-servers"),n=new Map;async function o(a){if(n.has(a))return n.get(a);let b=null;try{let c=(0,f.Ay)({baseDir:a,timeout:{block:5e3}});b=(await c.remote(["get-url","origin"])||"").trim()||null}catch{b=null}return n.set(a,b),b}async function p(a){var b;if(l.has(a.transport))return{type:"remote"};let c="string"!=typeof(b=a.rootPath)||""===b.trim()?null:e().isAbsolute(b)?b:e().resolve((0,j.getDataDir)(),b);if(c&&function(a){let b=e().relative(m,a);return""!==b&&!b.startsWith("..")&&!e().isAbsolute(b)}(c)){let a=await o(c);if(a)return{type:"github",repositoryUrl:a}}return{type:"local"}}async function q(){k.debug("Entering loadServerConfigs method");try{let a=await (0,g.loadItem)(h.Z.MCP_SERVERS,{}),b=Object.entries(a).map(([a,b])=>{let c=b.transport||"stdio";l.has(c)&&function(a){if("string"!=typeof a)return!1;let b=a.trim();return"/"===b||"\\"===b||/^[A-Za-z]:[\\/]?$/.test(b)}(b.rootPath)&&(k.info(`Normalizing filesystem-root rootPath "${b.rootPath}" of remote server ${a} to mcp-servers/${a}`),b={...b,rootPath:`mcp-servers/${a}`});let d={name:a,disabled:!1,autoApprove:[],rootPath:"",env:{},_buildCommand:"",_installCommand:""};return"streamable"===c?{...d,...b,name:a,requestInit:b.requestInit&&"object"==typeof b.requestInit?b.requestInit:void 0,reconnectionOptions:b.reconnectionOptions&&"object"==typeof b.reconnectionOptions?b.reconnectionOptions:void 0,sessionId:b.sessionId||void 0,oauthClientId:b.oauthClientId||"",oauthClientSecret:b.oauthClientSecret||"",oauthScopes:b.oauthScopes||(b.oauthClientId||b.oauthClientInformation?["read"]:void 0),oauthClientMetadata:b.oauthClientMetadata,oauthClientInformation:b.oauthClientInformation,oauthTokens:b.oauthTokens,oauthCodeVerifier:b.oauthCodeVerifier}:"sse"===c?{...d,...b,name:a,eventSourceInit:b.eventSourceInit&&"object"==typeof b.eventSourceInit?b.eventSourceInit:void 0,requestInit:b.requestInit&&"object"==typeof b.requestInit?b.requestInit:void 0}:"websocket"===c?{...d,...b,name:a,websocketUrl:b.websocketUrl||""}:{...d,...b,name:a,command:b.command||"",args:b.args||[],stderr:b.stderr||"pipe"}});return await Promise.all(b.map(async a=>{a.source||(a.source=await p(a))})),b}catch(a){return k.warn("Failed to load server configs",a),{success:!1,error:`Failed to load server configs: ${a instanceof Error?a.message:"Unknown error"}`}}}async function r(a){k.debug("Entering saveConfig method");try{let b=Object.fromEntries(Array.from(a.entries()).filter(([,a])=>!0!==a.builtIn).map(([a,b])=>{let{name:c,...d}=b;return[a,d]}));return await (0,g.VH)(h.Z.MCP_SERVERS,b),{success:!0}}catch(a){return k.warn("Failed to save config",a),{success:!1,error:`Failed to save config: ${a instanceof Error?a.message:"Unknown error"}`}}}}};
1
+ "use strict";exports.id=1805,exports.ids=[1805],exports.modules={74186:(a,b,c)=>{c.r(b),c.d(b,{loadServerConfigs:()=>q,loadServerRoots:()=>r,saveConfig:()=>s});var d=c(33873),e=c.n(d),f=c(34322),g=c(92372),h=c(38844),i=c(50846),j=c(43326);let k=(0,i.h)("backend/services/mcp/config"),l=new Set(["streamable","sse","websocket"]),m=e().join((0,j.getDataDir)(),"mcp-servers"),n=new Map;async function o(a){if(n.has(a))return n.get(a);let b=null;try{let c=(0,f.Ay)({baseDir:a,timeout:{block:5e3}});b=(await c.remote(["get-url","origin"])||"").trim()||null}catch{b=null}return n.set(a,b),b}async function p(a){var b;if(l.has(a.transport))return{type:"remote"};let c="string"!=typeof(b=a.rootPath)||""===b.trim()?null:e().isAbsolute(b)?b:e().resolve((0,j.getDataDir)(),b);if(c&&function(a){let b=e().relative(m,a);return""!==b&&!b.startsWith("..")&&!e().isAbsolute(b)}(c)){let a=await o(c);if(a)return{type:"github",repositoryUrl:a}}return{type:"local"}}async function q(){k.debug("Entering loadServerConfigs method");try{let a=await (0,g.loadItem)(h.Z.MCP_SERVERS,{}),b=Object.entries(a).map(([a,b])=>{let c=b.transport||"stdio";l.has(c)&&function(a){if("string"!=typeof a)return!1;let b=a.trim();return"/"===b||"\\"===b||/^[A-Za-z]:[\\/]?$/.test(b)}(b.rootPath)&&(k.info(`Normalizing filesystem-root rootPath "${b.rootPath}" of remote server ${a} to mcp-servers/${a}`),b={...b,rootPath:`mcp-servers/${a}`});let d={name:a,disabled:!1,autoApprove:[],rootPath:"",env:{},_buildCommand:"",_installCommand:""};return"streamable"===c?{...d,...b,name:a,requestInit:b.requestInit&&"object"==typeof b.requestInit?b.requestInit:void 0,reconnectionOptions:b.reconnectionOptions&&"object"==typeof b.reconnectionOptions?b.reconnectionOptions:void 0,sessionId:b.sessionId||void 0,oauthClientId:b.oauthClientId||"",oauthClientSecret:b.oauthClientSecret||"",oauthScopes:b.oauthScopes||(b.oauthClientId||b.oauthClientInformation?["read"]:void 0),oauthClientMetadata:b.oauthClientMetadata,oauthClientInformation:b.oauthClientInformation,oauthTokens:b.oauthTokens,oauthCodeVerifier:b.oauthCodeVerifier}:"sse"===c?{...d,...b,name:a,eventSourceInit:b.eventSourceInit&&"object"==typeof b.eventSourceInit?b.eventSourceInit:void 0,requestInit:b.requestInit&&"object"==typeof b.requestInit?b.requestInit:void 0}:"websocket"===c?{...d,...b,name:a,websocketUrl:b.websocketUrl||""}:{...d,...b,name:a,command:b.command||"",args:b.args||[],stderr:b.stderr||"pipe"}});return await Promise.all(b.map(async a=>{a.source||(a.source=await p(a))})),b}catch(a){return k.warn("Failed to load server configs",a),{success:!1,error:`Failed to load server configs: ${a instanceof Error?a.message:"Unknown error"}`}}}async function r(a){let b=await q();if(!Array.isArray(b))return[];let c=b.find(b=>b.name===a)?.roots;return Array.isArray(c)?c.filter(a=>"string"==typeof a):[]}async function s(a){k.debug("Entering saveConfig method");try{let b=Object.fromEntries(Array.from(a.entries()).map(([a,b])=>{let{name:c,...d}=b;return[a,d]}));return await (0,g.VH)(h.Z.MCP_SERVERS,b),{success:!0}}catch(a){return k.warn("Failed to save config",a),{success:!1,error:`Failed to save config: ${a instanceof Error?a.message:"Unknown error"}`}}}}};
@@ -1 +1 @@
1
- "use strict";exports.id=1925,exports.ids=[1925,4306],exports.modules={1925:(a,b,c)=>{c.d(b,{Hm:()=>f,xc:()=>e});let d=["key","secret","token","password"],e=a=>d.some(b=>a.toLowerCase().includes(b)),f=a=>e(a)||"authorization"===a.trim().toLowerCase()}};
1
+ "use strict";exports.id=1925,exports.ids=[1925,4306,6687],exports.modules={1925:(a,b,c)=>{c.d(b,{Hm:()=>f,xc:()=>e});let d=["key","secret","token","password"],e=a=>d.some(b=>a.toLowerCase().includes(b)),f=a=>e(a)||"authorization"===a.trim().toLowerCase()}};
@@ -0,0 +1 @@
1
+ exports.id=2069,exports.ids=[2069],exports.modules={2560:(a,b,c)=>{"use strict";c.d(b,{Aq:()=>e,Xk:()=>g,vi:()=>f});var d=c(38301);function e(a,b){return b}function f(a,b){}function g(a,b){let[c,e]=(0,d.useState)(()=>b);return[c,(0,d.useCallback)(b=>{e(c=>{let d="function"==typeof b?b(c):b;return f(a,d),d})},[a])]}},7329:(a,b,c)=>{"use strict";c.d(b,{Az:()=>e,FM:()=>d,Je:()=>g,po:()=>f,yF:()=>h});let d="folder";function e(a,b){let c=[],d=new Map;for(let e of a){let{key:a,label:f}=b(e),g=d.get(a);g||(g={key:a,label:f,items:[]},d.set(a,g),c.push(g)),g.items.push(e)}return c}function f(a){let b=(a??"").trim().charAt(0).toUpperCase();return b>="A"&&b<="Z"?{key:`letter:${b}`,label:b}:{key:"letter:#",label:"#"}}function g(a,b,c="Ungrouped"){let d=new Map,e=[];for(let c of a){let a=b(c)?.trim();if(a){let b=d.get(a);b?b.push(c):d.set(a,[c])}else e.push(c)}let f=Array.from(d.keys()).sort((a,b)=>a.localeCompare(b)).map(a=>({key:`folder:${a}`,label:a,items:d.get(a)}));return e.length>0&&f.push({key:"folder:__ungrouped__",label:c,items:e}),f}function h(a,b){let c=new Set;for(let d of a){let a=b(d)?.trim();a&&c.add(a)}return Array.from(c).sort((a,b)=>a.localeCompare(b))}},43010:()=>{},50551:(a,b,c)=>{"use strict";c.d(b,{Ay:()=>t});var d=c(21124),e=c(38301),f=c.n(e),g=c(81637),h=c(54573),i=c(79515),j=c(90647),k=c(74576),l=c(49257),m=c(80518);function n(a,b){let c=b.toLocaleLowerCase(),d=new Set;return a.filter(a=>!d.has(a.value)&&(d.add(a.value),`${a.label} ${a.name} ${a.server} ${a.description??""}`.toLocaleLowerCase().includes(c))).sort((a,b)=>{let c={tool:0,resource:1,global:2,runres:3};return c[a.kind]-c[b.kind]||a.label.localeCompare(b.label)})}function o(a){let b=a.split("\n").map(a=>({type:"paragraph",children:(a=>{let b=(0,m.sE)(a);if(0===b.length)return[{text:a}];let c=[],d=0;for(let e of b)e.index>d&&c.push({text:a.slice(d,e.index)}),c.push({type:"binding-reference",kind:e.kind,server:e.server,name:e.name,children:[{text:""}]}),d=e.index+e.fullMatch.length;return d<a.length&&c.push({text:a.slice(d)}),c})(a)}));return b.length>0?b:[{type:"paragraph",children:[{text:""}]}]}function p(a){return a.map(a=>(a.children||[]).map(a=>j.EY.isText(a)?a.text:(0,m.Pj)(a.kind,a.server,a.name)).join("")).join("\n")}c(43010);let q=(a,b)=>{a.selection||j.gB.select(a,j.KE.end(a,[])),j.gB.insertNodes(a,(a=>({type:"binding-reference",kind:a.kind,server:a.server,name:a.name,children:[{text:""}]}))(b)),j.gB.move(a)},r=({element:a,disabled:b,invalid:c})=>{let e=(0,l.Zi)(),f="tool"===a.kind&&"handoff"===a.server,g="global"===a.kind?"global":"runres"===a.kind?"runres":"resource"===a.kind?"resource":f?"handoff":"",h=()=>{b||(j.gB.removeNodes(e,{at:l.rL.findPath(e,a)}),l.rL.focus(e))};return(0,d.jsxs)("span",{contentEditable:!1,className:`tool-reference-container ${g}${c?" invalid":""}`,title:c?"This reference is not available in the current context":void 0,"aria-invalid":c||void 0,children:[(0,d.jsx)("span",{className:`tool-reference ${g}${c?" invalid":""}`,children:(0,m.CN)(a)}),!b&&(0,d.jsx)("span",{className:`tool-reference-delete ${g}`,role:"button","aria-label":`Remove ${(0,m.CN)(a)}`,tabIndex:0,onClick:a=>{a.preventDefault(),a.stopPropagation(),h()},onKeyDown:a=>{("Enter"===a.key||" "===a.key)&&(a.preventDefault(),a.stopPropagation(),h())},children:"\xd7"})]})},s=(0,e.forwardRef)(({value:a,onChange:b,globalNames:c=[],suggestions:s,placeholder:t,disabled:u=!1,multiline:v=!0,minRows:w=1,maxRows:x,autoFocus:y=!1,bare:z=!1,ariaLabel:A,dataTour:B,containerSx:C,onKeyDown:D,onPaste:E},F)=>{let G=(0,e.useMemo)(()=>(0,k.$k)((a=>{let{isInline:b,isVoid:c,insertData:d,insertText:e}=a;return a.isInline=a=>"binding-reference"===a.type||b(a),a.isVoid=a=>"binding-reference"===a.type||c(a),a.insertText=b=>{e(b),b.includes("}")&&(a=>{if(!a.selection||!j.Q6.isCollapsed(a.selection))return;let b=a.selection.anchor,c=j.bP.get(a,b.path);if(!j.EY.isText(c))return;let d=c.text.slice(0,b.offset).match(/\$\{global:([^}\r\n]+)\}$/);if(!d||void 0===d.index)return;let e=(0,m.y4)(d[0]);e&&(j.gB.select(a,{anchor:{path:b.path,offset:d.index},focus:b}),j.gB.delete(a),q(a,e))})(a)},a.insertData=b=>{let c=b.getData("text/plain");if(c&&(0,m.sE)(c).length>0)return void j.gB.insertFragment(a,o(c));d(b)},a})((0,l.o$)((0,j.ie)()))),[]),H=(0,e.useMemo)(()=>o(a||""),[]),[I,J]=(0,e.useState)(null),[K,L]=(0,e.useState)(0),[M,N]=(0,e.useState)(0),O=(0,e.useRef)(!1),P=(0,e.useMemo)(()=>n([...s??[],...c.map(a=>(0,m.Ub)({kind:"global",server:"",name:a},a))],""),[c,s]),Q=(0,e.useMemo)(()=>s?new Set(P.map(a=>a.value)):null,[P,s]),R=(0,e.useCallback)(()=>{if(!G.selection||!j.Q6.isCollapsed(G.selection))return void J(null);let a=G.selection.anchor,b=j.bP.get(G,a.path);if(!j.EY.isText(b))return void J(null);let c=function(a,b=a.length){let c=a.slice(0,b).match(/(?:^|\s)@([^\s@{}]*)$/);if(!c||void 0===c.index)return null;let d=c.index+ +!c[0].startsWith("@");return{query:c[1],start:d,end:b}}(b.text,a.offset),d=function(a,b=a.length){let c=a.slice(0,b).match(/\$\{global:([^{}\r\n]*)$/);return c&&void 0!==c.index?{query:c[1],start:c.index,end:b}:null}(b.text,a.offset),e=c??d;if(!e)return void J(null);let f=c?"at":"global",g=n("at"===f?P:P.filter(a=>"global"===a.kind),e.query);L(0),J({...e,mode:f,items:g,range:{anchor:{path:a.path,offset:e.start},focus:a}})},[G,P]),S=(0,e.useCallback)(a=>{if(!I)return;j.gB.select(G,I.range),j.gB.delete(G);let b=(0,m.y4)(a.value);b&&q(G,b),J(null),l.rL.focus(G)},[I,G]);(0,e.useImperativeHandle)(F,()=>({insertText:a=>{let c=(0,m.y4)(a);c?q(G,c):G.insertText(a),b(p(G.children)),l.rL.focus(G)},focus:()=>l.rL.focus(G)}),[G,b]),(0,e.useEffect)(()=>{p(G.children)!==p(o(a||""))&&(O.current=!0,G.children=o(a||""),G.selection=null,G.onChange(),N(a=>a+1))},[G,a]);let T=(0,e.useCallback)(a=>{if(O.current){O.current=!1;return}b(p(a)),R()},[b,R]),U=(0,e.useCallback)(({attributes:a,children:b,element:c})=>{if("binding-reference"===c.type){let e=(0,m.Pj)(c.kind,c.server,c.name);return(0,d.jsxs)("span",{...a,className:"tool-reference-wrapper",children:[(0,d.jsx)(r,{element:c,disabled:u,invalid:null!==Q&&!Q.has(e)}),b]})}return(0,d.jsx)("p",{...a,children:b})},[u,Q]),V=`${1.5*Math.max(1,w)}em`,W=x?`${1.5*Math.max(w,x)}em`:void 0;return(0,d.jsxs)(g.default,{sx:{position:"relative",width:"100%",...C},"data-revision":M,children:[(0,d.jsx)(g.default,{className:z?"global-reference-editor bare":"global-reference-editor",sx:{border:z?"none":"1px solid",borderColor:"rgba(0, 0, 0, 0.23)",borderRadius:+!z,px:1.75*!z,py:+!z,bgcolor:u?"action.disabledBackground":"background.paper","&:focus-within":z?{}:{borderColor:"primary.main",borderWidth:2,px:"13px",py:"7px"}},children:(0,d.jsx)(l.A,{editor:G,initialValue:H,onChange:T,children:(0,d.jsx)(l.Fo,{className:"slate-editor global-reference-editable",renderElement:U,placeholder:t,readOnly:u,autoFocus:y,"aria-label":A,"data-tour":B,role:"textbox","aria-multiline":v,onKeyDown:a=>{if(I){if("ArrowDown"===a.key&&I.items.length>0){a.preventDefault(),L(a=>(a+1)%I.items.length);return}if("ArrowUp"===a.key&&I.items.length>0){a.preventDefault(),L(a=>(a-1+I.items.length)%I.items.length);return}if(("Enter"===a.key||"Tab"===a.key)&&I.items[K]){a.preventDefault(),S(I.items[K]);return}if("Escape"===a.key){a.preventDefault(),a.stopPropagation(),J(null);return}}if(!v&&"Enter"===a.key)return void a.preventDefault();D?.(a)},onPaste:E,style:{minHeight:V,maxHeight:W,overflowY:W?"auto":void 0,whiteSpace:v?"pre-wrap":"nowrap"}})})}),I&&(0,d.jsx)(h.A,{elevation:8,role:"listbox","aria-label":"at"===I.mode?"Available references":"Global variables",sx:{position:"absolute",zIndex:1500,top:"100%",left:0,right:0,mt:.5,maxHeight:240,overflowY:"auto"},children:0===I.items.length?(0,d.jsx)(g.default,{sx:{px:1.5,py:1.25},children:(0,d.jsx)(i.A,{variant:"body2",color:"text.secondary",children:"No matching references"})}):I.items.map((a,b)=>{let c=I.items[b-1]?.kind,e="tool"===a.kind?"Tools":"resource"===a.kind?"Resources":"global"===a.kind?"Globals":"Temporary data";return(0,d.jsxs)(f().Fragment,{children:[a.kind!==c&&(0,d.jsx)(i.A,{component:"div",variant:"overline",sx:{px:1.5,pt:0===b?.75:1.25,color:"text.secondary"},children:e}),(0,d.jsxs)(g.default,{role:"option","aria-selected":b===K,onMouseDown:b=>{b.preventDefault(),S(a)},sx:{px:1.5,py:1,cursor:"pointer",bgcolor:b===K?"action.selected":"background.paper","&:hover":{bgcolor:"action.hover"}},children:[(0,d.jsx)(i.A,{component:"div",sx:{fontFamily:"monospace",fontSize:14},children:a.label}),(0,d.jsx)(i.A,{variant:"caption",color:"text.secondary",sx:{wordBreak:"break-all"},children:a.description||a.value})]})]},a.value)})})]})});s.displayName="GlobalReferenceEditor";let t=s},59737:(a,b,c)=>{"use strict";c.d(b,{A:()=>m});var d=c(21124);c(38301);var e=c(60839),f=c(81637),g=c(44079),h=c(79515),i=c(41893),j=c(99561),k=c(17332),l=c(18467);let m=({label:a,count:b,expanded:c,onToggle:m,showFolderIcon:n=!1,children:o})=>{let p=(0,e.A)();return(0,d.jsxs)(f.default,{sx:{mb:1.5},children:[(0,d.jsxs)(f.default,{role:"button",tabIndex:0,"aria-expanded":c,onClick:m,onKeyDown:a=>{("Enter"===a.key||" "===a.key)&&(a.preventDefault(),m())},sx:{display:"flex",alignItems:"center",gap:1,px:1,py:.75,borderRadius:1,cursor:"pointer",userSelect:"none",backgroundColor:p.palette.background.default,border:`1px solid ${p.palette.divider}`,"&:hover":{backgroundColor:p.palette.action.hover}},children:[(0,d.jsx)(g.A,{size:"small","aria-label":c?"Collapse section":"Expand section",onClick:a=>{a.stopPropagation(),m()},sx:{transition:"transform 0.2s",transform:c?"rotate(0deg)":"rotate(-90deg)"},children:(0,d.jsx)(k.A,{fontSize:"small"})}),n&&(0,d.jsx)(l.A,{fontSize:"small",sx:{color:"text.secondary"}}),(0,d.jsx)(h.A,{variant:"subtitle2",sx:{fontWeight:600},children:a}),(0,d.jsx)(i.A,{label:b,size:"small",sx:{height:20,fontSize:"0.7rem"}})]}),(0,d.jsx)(j.A,{in:c,unmountOnExit:!0,children:(0,d.jsx)(f.default,{sx:{pt:1.5},children:o})})]})}},64535:(a,b,c)=>{"use strict";c.d(b,{A$:()=>j,X8:()=>g,YP:()=>k,js:()=>i});let d="_-_-_",e=/^(tool|resource):(.+)$/,f=/\$\{((?:tool|resource):[^}]+|_-_-_[^}]+)\}/g;function g(a,b,c){return`\${${a}:${b}__${c}}`}function h(a){let b=e.exec(a);if(b){let a=b[1],c=function(a){let b=a.indexOf("__");if(b<=0)return null;let c=a.slice(b+2);return c?{server:a.slice(0,b),name:c}:null}(b[2]);return c?{kind:a,server:c.server,name:c.name}:null}if(a.startsWith(d)){let b=a.split(d);if(3===b.length&&b[1]&&b[2])return{kind:"tool",server:b[1],name:b[2]}}return null}function i(a){return a.startsWith("${")&&a.endsWith("}")?h(a.slice(2,-1)):null}function j(a){let b,c=[];for(f.lastIndex=0;null!==(b=f.exec(a));){let a=h(b[1]);a&&c.push({...a,fullMatch:b[0],index:b.index})}return c}function k(a){var b,c;return"tool"===a.kind&&"handoff"===a.server?`handoff:${a.name}`:`${a.kind}:${b=a.server,c=a.name,`${b}__${c}`}`}},78352:(a,b,c)=>{"use strict";c.d(b,{A:()=>u});var d=c(21124),e=c(38301),f=c(7118),g=c(94367),h=c(50553),i=c(84233),j=c(91059),k=c(40512),l=c(83899),m=c(52327),n=c(37674),o=c(19925),p=c(68730),q=c(36698),r=c(18467),s=c(31973),t=c(354);let u=({anchorEl:a,open:b,currentFolder:c,folders:u,onClose:v,onAssign:w})=>{let[x,y]=(0,e.useState)(!1),[z,A]=(0,e.useState)(""),B=a=>{w(a),v()},C=()=>{let a=z.trim();a&&(y(!1),B(a))};return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(f.A,{anchorEl:a,open:b,onClose:v,onClick:a=>a.stopPropagation(),children:[u.length>0&&u.map(a=>(0,d.jsxs)(g.A,{onClick:()=>B(a),selected:a===c,children:[(0,d.jsx)(h.A,{children:a===c?(0,d.jsx)(q.A,{fontSize:"small"}):(0,d.jsx)(r.A,{fontSize:"small"})}),(0,d.jsx)(i.A,{primary:a})]},a)),u.length>0&&(0,d.jsx)(j.A,{}),(0,d.jsxs)(g.A,{onClick:()=>{A(""),y(!0)},children:[(0,d.jsx)(h.A,{children:(0,d.jsx)(s.A,{fontSize:"small"})}),(0,d.jsx)(i.A,{primary:"New folder…"})]}),c&&(0,d.jsxs)(g.A,{onClick:()=>B(void 0),children:[(0,d.jsx)(h.A,{children:(0,d.jsx)(t.A,{fontSize:"small"})}),(0,d.jsx)(i.A,{primary:"Remove from folder"})]})]}),(0,d.jsxs)(k.A,{open:x,onClose:()=>y(!1),maxWidth:"xs",fullWidth:!0,onClick:a=>a.stopPropagation(),children:[(0,d.jsx)(l.A,{children:"New folder"}),(0,d.jsx)(m.A,{children:(0,d.jsx)(n.A,{autoFocus:!0,margin:"dense",label:"Folder name",fullWidth:!0,value:z,onChange:a=>A(a.target.value),onKeyDown:a=>{"Enter"===a.key&&(a.preventDefault(),C())}})}),(0,d.jsxs)(o.A,{children:[(0,d.jsx)(p.A,{onClick:()=>y(!1),children:"Cancel"}),(0,d.jsx)(p.A,{variant:"contained",disabled:!z.trim(),onClick:C,children:"Create"})]})]})]})}},80518:(a,b,c)=>{"use strict";c.d(b,{CN:()=>k,Pj:()=>i,Ub:()=>j,jX:()=>l,sE:()=>g,y4:()=>h});var d=c(64535);let e=/\$\{res:([^}]+)\}/g,f=/\$\{global:([^}]+)\}/g;function g(a){let b,c=(0,d.A$)(a).map(a=>({kind:a.kind,server:a.server,name:a.name,fullMatch:a.fullMatch,index:a.index}));for(e.lastIndex=0;null!==(b=e.exec(a));)c.push({kind:"runres",server:"",name:b[1],fullMatch:b[0],index:b.index});for(f.lastIndex=0;null!==(b=f.exec(a));)c.push({kind:"global",server:"",name:b[1],fullMatch:b[0],index:b.index});return c.sort((a,b)=>a.index-b.index)}function h(a){if(a.startsWith("${res:")&&a.endsWith("}")){let b=a.slice(6,-1);return b?{kind:"runres",server:"",name:b}:null}if(a.startsWith("${global:")&&a.endsWith("}")){let b=a.slice(9,-1);return b?{kind:"global",server:"",name:b}:null}let b=(0,d.js)(a);return b?{kind:b.kind,server:b.server,name:b.name}:null}function i(a,b,c){return"runres"===a?`\${res:${c}}`:"global"===a?`\${global:${c}}`:(0,d.X8)(a,b,c)}function j(a,b=a.name,c){return{...a,label:b,value:i(a.kind,a.server,a.name),description:c}}function k(a){return"runres"===a.kind?`res:${a.name}`:"global"===a.kind?`global:${a.name}`:(0,d.YP)({kind:a.kind,server:a.server,name:a.name})}function l(a){let b=new Set;for(let c of a){let a;if("string"==typeof c&&0!==c.length)for(e.lastIndex=0;null!==(a=e.exec(c));){let c=a[1].trim();c&&b.add(c)}}return[...b].sort((a,b)=>a.localeCompare(b))}}};
@@ -1 +1 @@
1
- "use strict";exports.id=227,exports.ids=[227],exports.modules={7389:(a,b,c)=>{c.d(b,{Sq:()=>e,lJ:()=>f});var d=c(81226);let e={type:"object",additionalProperties:!1,required:["name","goal","steps"],properties:{profile:{type:"string",const:"simple"},version:{type:"integer",const:1},name:{type:"string",minLength:1},goal:{type:"string",minLength:1},model:{type:"string",minLength:1},steps:{type:"array",minItems:1,items:{type:"object",additionalProperties:!1,required:["id","task"],properties:{id:{type:"string",minLength:1,pattern:"^[A-Za-z][A-Za-z0-9_-]*$"},task:{type:"string",minLength:1},label:{type:"string",minLength:1},model:{type:"string",minLength:1},tools:{type:"array",uniqueItems:!0,items:{type:"string",minLength:1}},flow:{type:"string",minLength:1}}}},routes:{type:"array",items:{type:"object",additionalProperties:!1,required:["from","to"],properties:{from:{type:"string",minLength:1},to:{type:"string",minLength:1},when:{type:"object",additionalProperties:!1,required:["kind"],properties:{kind:{type:"string",enum:["contains","equals","regex","always"]},value:{type:"string"},ignoreCase:{type:"boolean"},negate:{type:"boolean"}}}}}}}};function f(a,b={},c={}){let e=function(a){let b=[],c=Array.isArray(a?.steps)?a.steps:[],d=new Set,e=[];for(let a of c){let c="string"==typeof a?.id?a.id.trim():"",f="string"==typeof a?.task?a.task.trim():"";if(!c||!/^[A-Za-z][A-Za-z0-9_-]*$/.test(c)){b.push({severity:"error",code:"simple-step-id-invalid",message:"Every simple step needs an id matching ^[A-Za-z][A-Za-z0-9_-]*$."});continue}if(d.has(c)){b.push({severity:"error",code:"simple-step-id-duplicate",nodeKey:c,message:`Duplicate simple step id "${c}"; the later step was dropped.`});continue}if(!f){b.push({severity:"error",code:"simple-step-task-missing",nodeKey:c,message:`Step "${c}" needs a non-empty task.`});continue}d.add(c),e.push({...a,id:c,task:f})}let f="__start",g="__finish",h=[{key:f,type:"start",label:"Start",prompt:`Execute this workflow toward its stated goal: ${"string"==typeof a?.goal?a.goal.trim():""}`}];for(let c of e){let d="string"==typeof c.label&&c.label.trim()?c.label.trim():function(a){let b=a.replace(/[_-]+/g," ").trim();return b?b.replace(/\b\w/g,a=>a.toUpperCase()):"Step"}(c.id),e="string"==typeof c.flow?c.flow.trim():"";if(e){h.push({key:c.id,type:"subflow",label:d,description:c.task,flow:e,prompt:c.task,inputMode:"full-history",outputMode:"final-only"});continue}let f="string"==typeof c.model&&c.model.trim()?c.model.trim():"string"==typeof a?.model?a.model.trim():"";h.push({key:c.id,type:"process",label:d,description:c.task,prompt:c.task,...f?{model:f}:{},servers:function(a,b,c){let d=new Map;for(let e of a??[]){let a="string"==typeof e?e.trim():"";if(!a)continue;let f=a.indexOf("/"),g=(f>=0?a.slice(0,f):a).trim(),h=f>=0?a.slice(f+1).trim():"";if(!g){c.push({severity:"warning",code:"simple-tool-invalid",nodeKey:b,message:`Step "${b}": ignored tool reference "${a}"; use server/tool.`});continue}d.has(g)||d.set(g,new Set),h&&d.get(g).add(h)}return[...d].map(([a,b])=>({name:a,...b.size>0?{tools:[...b]}:{}}))}(c.tools,c.id,b),inputMode:"full-history",outputMode:"latest-message"})}h.push({key:g,type:"finish",label:"Finish"});let i=[],j=Array.isArray(a?.routes)?a.routes:[];if(0===j.length){let a=[f,...e.map(a=>a.id),g];for(let b=0;b<a.length-1;b++)i.push({from:a[b],to:a[b+1]})}else{let a=new Set,c=new Set;for(let e of j){let f="string"==typeof e?.from?e.from.trim():"",g="string"==typeof e?.to?e.to.trim():"";if(!d.has(f)||!d.has(g)){b.push({severity:"error",code:"simple-route-unresolved",nodeKey:f||void 0,message:`Simple route "${f}" → "${g}" references an unknown step.`});continue}i.push({from:f,to:g,...e.when?{condition:e.when}:{}}),c.add(f),a.add(g)}for(let b of e)a.has(b.id)||i.push({from:f,to:b.id}),c.has(b.id)||i.push({from:b.id,to:g})}return{spec:{name:"string"==typeof a?.name?a.name.trim():"",description:"string"==typeof a?.goal?a.goal.trim():"",nodes:h,edges:i},issues:b}}(a),g=(0,d.dM)(e.spec,b,c),h=[...e.issues,...g.issues];return{...g,loweredSpec:e.spec,issues:h,errorCount:h.filter(a=>"error"===a.severity).length,warningCount:h.filter(a=>"warning"===a.severity).length}}},30227:(a,b,c)=>{c.d(b,{cI:()=>r,oV:()=>u,yM:()=>p});var d=c(50846),e=c(88185),f=c(7389),g=c(38204),h=c(9312),i=c(97630),j=c(14265),k=c(1905),l=c(33233),m=c(25250);let n=(0,d.h)("backend/services/mcp/flowAuthoringTools"),o=["list_flow_building_blocks","get_flow_authoring_guide","validate_flow_spec","draft_flow","draft_generated_flow","create_flow","search_mcp_marketplace","install_mcp_server","install_best_mcp_server"];function p(a){return o.includes(a)}function q(){return{type:"object",additionalProperties:!1,properties:{spec:{oneOf:[f.Sq,{type:"object",description:'Legacy advanced FlowSpec with nodes and edges. Pass profile="advanced"; fetch its contract with get_flow_authoring_guide.'}],description:"A guided SimpleFlowSpec by default, or a legacy advanced FlowSpec."},profile:{type:"string",enum:["simple","advanced"],description:"Authoring profile. Defaults to simple; legacy specs containing nodes+edges are auto-detected as advanced."},keepPills:{type:"boolean",description:"When true, binding pills (${tool:server__name}) that resolve against the node's wired servers are preserved in the compiled output instead of being stripped. Pills that cannot be resolved are still stripped with a warning. Default: false (strip all pills — generator-safe behaviour)."}},required:["spec"]}}function r(){return[{name:"list_flow_building_blocks",description:"List models, MCP server/tool references, and existing flows available to a new flow.",inputSchema:{type:"object",properties:{}}},{name:"get_flow_authoring_guide",description:"Fetch the flow-authoring contract only when needed. The simple guide is compact; the advanced guide contains the complete FlowSpec reference.",inputSchema:{type:"object",properties:{profile:{type:"string",enum:["simple","advanced"],description:"Guide to return. Defaults to simple."}}}},{name:"validate_flow_spec",description:"Compile and validate a guided flow without saving. Returns a compact summary and issues. Use draft_flow when the caller needs the complete unsaved draft.",inputSchema:q()},{name:"draft_flow",description:"Compile and validate a flow WITHOUT saving and return the complete draft bundle for review or opening in the Flow Builder.",inputSchema:q()},{name:"draft_generated_flow",description:"Run the production Flow Generator post-processing pipeline on a complete advanced FlowSpec: scratchpad safety guard, structural auto-repair, bounded nested compilation, generated-flow defaults, and whole-bundle validation. Returns the complete UNSAVED draft and hardened spec.",inputSchema:{type:"object",additionalProperties:!1,properties:{spec:{type:"object",description:'A complete advanced FlowSpec authored using get_flow_authoring_guide(profile="advanced").'}},required:["spec"]}},{name:"create_flow",description:"Compile, validate, and save a guided flow. Saving occurs only when validation has no errors. Use list_flow_building_blocks for valid references.",inputSchema:q()},{name:"search_mcp_marketplace",description:"Search the public MCP server registry for new capabilities (voice, browsing, files, email, vision, …). The registry matches the query against server NAMES only (substring) — use short single terms and try several. Returns name, description, whether FLUJO can install it, and which env vars/keys it would require.",inputSchema:{type:"object",properties:{query:{type:"string",description:"Short search term matched against server names."}},required:["query"]}},{name:"install_mcp_server",description:'Install an MCP server from the public registry (by the exact name returned by search_mcp_marketplace) and connect it — this DOWNLOADS AND RUNS a third-party package on the FLUJO host. Installs are gated by consent (SEP-1024): unless this trusted authoring tool is allowed via the mcpAutoInstall settings (trustBrainStem / requireConsent / namespaceAllowlist), the tool returns the exact resolved command + arguments with consentRequired=true INSTEAD of installing, and the caller must obtain explicit approval. Every attempt is written to an audit log (command, args, env NAMES, verification status — never secret values) before any spawn. Returns the FLUJO server name (reference it in FlowSpec "servers") and the tools it provides, or needsEnv when required keys are missing (supply values via the optional "env" argument), or the resolved plan when consent is required. First install can take minutes (package download).',inputSchema:{type:"object",properties:{name:{type:"string",description:'Exact registry name from search results, e.g. "ai.keenable/web-search".'},env:{type:"object",description:"Optional env var values for the server (e.g. required API keys).",additionalProperties:{type:"string"}}},required:["name"]}},{name:"install_best_mcp_server",description:"Install the BEST WORKING MCP server for a capability, unattended — the recommended way to acquire a capability when you don't already have a specific server name. Searches the registry, RANKS candidates by blended quality (GitHub stars + recent activity, npm weekly downloads, registry status), then installs best→worst until one actually boots and exposes tools (the \"works-gate\"): candidates that need unavailable keys, can't be installed, or start with zero tools are skipped automatically. Same consent/audit rules and third-party-code warning as install_mcp_server. Returns the installed server name + its tools and the list of candidates tried, or needsEnv/consentRequired. Prefer this over search+install for headless self-improvement; use install_mcp_server only when you must pin an exact server.",inputSchema:{type:"object",properties:{capability:{type:"string",description:'Short capability term matched against server names, e.g. "youtube", "email", "browser".'},env:{type:"object",description:"Optional env var values shared across attempted servers (e.g. an API key).",additionalProperties:{type:"string"}}},required:["capability"]}}]}function s(a){let b=a?.spec;if("string"==typeof b)try{return JSON.parse(b)}catch{return null}return b??null}function t(a,b=!1){return{content:[{type:"text",text:JSON.stringify(a,null,2)}],...b?{isError:!0}:{}}}async function u(a,b){try{if("list_flow_building_blocks"===a){let a=await (0,h.jY)();return t(a.blocks)}if("get_flow_authoring_guide"===a){let a=b?.profile==="advanced"?"advanced":"simple";if("advanced"===a)return t({profile:a,guide:e.R});return t({profile:a,schema:f.Sq,guide:["Set name, goal, and one or more ordered steps.","Each step needs id and task. model overrides the top-level default.","Tools use server/tool references from list_flow_building_blocks.","Set flow on a step to run an existing flow instead of a model.","Omit routes for a linear flow. Routes are only for branches; omit when for the fallback.","Start, Finish, layout, data handoff, and ordinary defaults are inferred."]})}if("search_mcp_marketplace"===a){let a="string"==typeof b?.query?b.query:"",c=await (0,j.e3)(a);return t(c)}if("install_mcp_server"===a){let a="string"==typeof b?.name?b.name:"",c=b?.env&&"object"==typeof b.env&&!Array.isArray(b.env)?b.env:void 0,d=await (0,j.aM)(a,c,{resolveOnly:!0});if(!d.plan)return t(d,!0);let e=await (0,k.Ej)(),f=(0,l.e5)({caller:"authoring-tool",settings:e,registryName:a}),g=(0,m.nO)(d.plan.verificationStatus)?void 0:`Unverified / self-asserted registry entry (status: ${d.plan.verificationStatus}). Registry entries are publisher-asserted — review the command before approving.`;if(await (0,k.NB)((0,l.UM)(d.plan,"authoring-tool",f,!1)),!f.allowed)return t({installed:!1,consentRequired:!0,message:f.message,plan:d.plan,...g?{verificationWarning:g}:{}});let h=await (0,j.aM)(a,c);return await (0,k.NB)((0,l.UM)(h.plan??d.plan,"authoring-tool",f,h.installed,h.error)),t({...h,...g?{verificationWarning:g}:{}},!h.installed)}if("install_best_mcp_server"===a){let a="string"==typeof b?.capability?b.capability:"",c=b?.env&&"object"==typeof b.env&&!Array.isArray(b.env)?b.env:void 0;if(!a)return t({error:'Provide a "capability" search term.'},!0);let d=await (0,k.Ej)(),e=(0,l.e5)({caller:"authoring-tool",settings:d,registryName:a});if(!e.allowed){let b=(await (0,j.e3)(a)).find(a=>a.installable),d=b?await (0,j.aM)(b.name,c,{resolveOnly:!0}):null;return d?.plan&&await (0,k.NB)((0,l.UM)(d.plan,"authoring-tool",e,!1)),t({installed:!1,consentRequired:!0,message:e.message,...d?.plan?{plan:d.plan}:{}})}let f=await (0,j.LG)(a,c,{onAttempt:async(a,b)=>{a&&await (0,k.NB)((0,l.UM)(a,"authoring-tool",e,b.installed,b.error))}}),g=f.installed&&!(0,m.nO)(f.plan?.verificationStatus)?`Installed an unverified / self-asserted registry entry (status: ${f.plan?.verificationStatus}).`:void 0;return t({...f,...g?{verificationWarning:g}:{}},!f.installed)}if("draft_generated_flow"===a){let a=s(b);if(!a||"object"!=typeof a||Array.isArray(a))return t({error:'Provide a complete advanced FlowSpec object in "spec".'},!0);let c=await (0,h.jY)(),d=(0,i.oW)(a,c);if(!d.success)return t({error:"The generated specification could not be compiled.",spec:d.spec,issues:d.issues,hardening:{guardChanges:d.guardChanges,repairChanges:d.repairChanges}},!0);return t({profile:"advanced",pipeline:"production-generator",saved:!1,rootFlowId:d.flow.id,flow:d.flow,flows:d.flows.map(a=>a.flow),spec:d.spec,validation:d.validation,hardening:{guardChanges:d.guardChanges,repairChanges:d.repairChanges}})}if("validate_flow_spec"===a||"draft_flow"===a||"create_flow"===a){let c=s(b);if(!c)return t({error:'Provide a "spec" argument: a SimpleFlowSpec object (or JSON string).'},!0);let d=c&&"object"==typeof c&&!Array.isArray(c)?c:{},e="advanced"===b.profile?"advanced":"simple"===b.profile?"simple":Array.isArray(d.nodes)&&Array.isArray(d.edges)?"advanced":"simple",f=!0===b.keepPills,h=await (0,g.V)(c,{save:"create_flow"===a,keepPills:f,profile:e});if(!h.success)return t({error:h.error,issues:h.issues??[]},!0);let i=h.flows.length,j=i>1?` (plus ${i-1} nested subflow flow(s))`:"",k={profile:e,flowId:h.flow.id,flowName:h.flow.name,nodeCount:h.flow.nodes.length,edgeCount:h.flow.edges.length,...i>1?{flows:h.flows.map(a=>({id:a.id,name:a.name}))}:{},validation:h.validation,..."draft_flow"===a?{saved:!1,rootFlowId:h.flow.id,flow:h.flow,flows:h.flows}:{},..."create_flow"===a?{saved:h.saved,...h.saved?{note:`Flow "${h.flow.name}"${j} was created. It is callable as a tool on this MCP server (after a fresh tools/list) and as model "flow-${h.flow.name}" on the OpenAI-compatible endpoint.`}:{note:"NOT saved: validation found errors. Fix the issues and call create_flow again."}}:{}};return t(k,"create_flow"===a&&!h.saved)}return t({error:`Unknown authoring tool: ${a}`},!0)}catch(b){return n.error("authoringCallTool failed",{toolName:a,err:b}),t({error:`Authoring tool failed: ${b instanceof Error?b.message:String(b)}`},!0)}}},38204:(a,b,c)=>{c.d(b,{V:()=>k});var d=c(50846),e=c(87821),f=c(81226),g=c(7389),h=c(84671),i=c(9312);let j=(0,d.h)("backend/services/flow/compileFlow");async function k(a,b={}){if(!a||"object"!=typeof a||Array.isArray(a))return{success:!1,error:"The spec must be a JSON object (a FlowSpec)",statusCode:400};let c=await (0,i.jY)(),d=c.compile;if(b.updateFlowId){let a=d.flows??[];if(!a.some(a=>a.id===b.updateFlowId))return{success:!1,error:`No flow with id "${b.updateFlowId}" to update`,statusCode:404};d={...d,flows:a.filter(a=>a.id!==b.updateFlowId)}}let l="simple"===b.profile?(0,g.lJ)(a,d,{keepPills:b.keepPills}):(0,f.dM)(a,d,{keepPills:b.keepPills});if(!l.flow)return{success:!1,error:"The spec could not be compiled into a flow",statusCode:422,issues:l.issues.map(a=>({severity:a.severity,code:a.code,message:a.message}))};b.updateFlowId&&(l.flow.id=b.updateFlowId);let m=l.flows.flatMap(a=>(0,h.nC)(a,{models:c.compile.models,servers:c.validatorServers,serverTools:c.compile.serverTools}).issues),n=(0,i.RB)(l.issues,{issues:m,errorCount:0,warningCount:0,isRunnable:!0}),o=!1;if(b.save&&0===n.errorCount){for(let a of l.flows)await e.flowService.saveFlow(a);o=!0,j.info(`Compiled and saved ${l.flows.length} flow(s); root "${l.flow.name}" (${l.flow.id})`)}else b.save&&j.info(`Compiled flow "${l.flow.name}" has ${n.errorCount} error(s); NOT saved`);return{success:!0,flow:l.flow,flows:l.flows,validation:n,saved:o}}}};
1
+ "use strict";exports.id=227,exports.ids=[227],exports.modules={7389:(a,b,c)=>{c.d(b,{Sq:()=>e,lJ:()=>f});var d=c(81226);let e={type:"object",additionalProperties:!1,required:["name","goal","steps"],properties:{profile:{type:"string",const:"simple"},version:{type:"integer",const:1},name:{type:"string",minLength:1},goal:{type:"string",minLength:1},model:{type:"string",minLength:1},steps:{type:"array",minItems:1,items:{type:"object",additionalProperties:!1,required:["id","task"],properties:{id:{type:"string",minLength:1,pattern:"^[A-Za-z][A-Za-z0-9_-]*$"},task:{type:"string",minLength:1},label:{type:"string",minLength:1},model:{type:"string",minLength:1},tools:{type:"array",uniqueItems:!0,items:{type:"string",minLength:1}},flow:{type:"string",minLength:1}}}},routes:{type:"array",items:{type:"object",additionalProperties:!1,required:["from","to"],properties:{from:{type:"string",minLength:1},to:{type:"string",minLength:1},when:{type:"object",additionalProperties:!1,required:["kind"],properties:{kind:{type:"string",enum:["contains","equals","regex","always"]},value:{type:"string"},ignoreCase:{type:"boolean"},negate:{type:"boolean"}}}}}}}};function f(a,b={},c={}){let e=function(a){let b=[],c=Array.isArray(a?.steps)?a.steps:[],d=new Set,e=[];for(let a of c){let c="string"==typeof a?.id?a.id.trim():"",f="string"==typeof a?.task?a.task.trim():"";if(!c||!/^[A-Za-z][A-Za-z0-9_-]*$/.test(c)){b.push({severity:"error",code:"simple-step-id-invalid",message:"Every simple step needs an id matching ^[A-Za-z][A-Za-z0-9_-]*$."});continue}if(d.has(c)){b.push({severity:"error",code:"simple-step-id-duplicate",nodeKey:c,message:`Duplicate simple step id "${c}"; the later step was dropped.`});continue}if(!f){b.push({severity:"error",code:"simple-step-task-missing",nodeKey:c,message:`Step "${c}" needs a non-empty task.`});continue}d.add(c),e.push({...a,id:c,task:f})}let f="__start",g="__finish",h=[{key:f,type:"start",label:"Start",prompt:`Execute this workflow toward its stated goal: ${"string"==typeof a?.goal?a.goal.trim():""}`}];for(let c of e){let d="string"==typeof c.label&&c.label.trim()?c.label.trim():function(a){let b=a.replace(/[_-]+/g," ").trim();return b?b.replace(/\b\w/g,a=>a.toUpperCase()):"Step"}(c.id),e="string"==typeof c.flow?c.flow.trim():"";if(e){h.push({key:c.id,type:"subflow",label:d,description:c.task,flow:e,prompt:c.task,inputMode:"full-history",outputMode:"final-only"});continue}let f="string"==typeof c.model&&c.model.trim()?c.model.trim():"string"==typeof a?.model?a.model.trim():"";h.push({key:c.id,type:"process",label:d,description:c.task,prompt:c.task,...f?{model:f}:{},servers:function(a,b,c){let d=new Map;for(let e of a??[]){let a="string"==typeof e?e.trim():"";if(!a)continue;let f=a.indexOf("/"),g=(f>=0?a.slice(0,f):a).trim(),h=f>=0?a.slice(f+1).trim():"";if(!g){c.push({severity:"warning",code:"simple-tool-invalid",nodeKey:b,message:`Step "${b}": ignored tool reference "${a}"; use server/tool.`});continue}d.has(g)||d.set(g,new Set),h&&d.get(g).add(h)}return[...d].map(([a,b])=>({name:a,...b.size>0?{tools:[...b]}:{}}))}(c.tools,c.id,b),inputMode:"full-history",outputMode:"latest-message"})}h.push({key:g,type:"finish",label:"Finish"});let i=[],j=Array.isArray(a?.routes)?a.routes:[];if(0===j.length){let a=[f,...e.map(a=>a.id),g];for(let b=0;b<a.length-1;b++)i.push({from:a[b],to:a[b+1]})}else{let a=new Set,c=new Set;for(let e of j){let f="string"==typeof e?.from?e.from.trim():"",g="string"==typeof e?.to?e.to.trim():"";if(!d.has(f)||!d.has(g)){b.push({severity:"error",code:"simple-route-unresolved",nodeKey:f||void 0,message:`Simple route "${f}" → "${g}" references an unknown step.`});continue}i.push({from:f,to:g,...e.when?{condition:e.when}:{}}),c.add(f),a.add(g)}for(let b of e)a.has(b.id)||i.push({from:f,to:b.id}),c.has(b.id)||i.push({from:b.id,to:g})}return{spec:{name:"string"==typeof a?.name?a.name.trim():"",description:"string"==typeof a?.goal?a.goal.trim():"",nodes:h,edges:i},issues:b}}(a),g=(0,d.dM)(e.spec,b,c),h=[...e.issues,...g.issues];return{...g,loweredSpec:e.spec,issues:h,errorCount:h.filter(a=>"error"===a.severity).length,warningCount:h.filter(a=>"warning"===a.severity).length}}},30227:(a,b,c)=>{c.d(b,{cI:()=>t,oV:()=>w,yM:()=>r});var d=c(50846),e=c(88185),f=c(7389),g=c(38204),h=c(9312),i=c(97630),j=c(58903),k=c(14265),l=c(1905),m=c(33233),n=c(25250),o=c(86103);let p=(0,d.h)("backend/services/mcp/flowAuthoringTools"),q=["list_flow_building_blocks","get_flow_authoring_guide","validate_flow_spec","draft_flow","draft_generated_flow","create_flow","suggest_tools_for_flow_step","apply_tools_to_flow_step","check_flow_plausibility","search_mcp_marketplace","install_mcp_server","install_best_mcp_server"];function r(a){return q.includes(a)}function s(){return{type:"object",additionalProperties:!1,properties:{spec:{oneOf:[f.Sq,{type:"object",description:'Legacy advanced FlowSpec with nodes and edges. Pass profile="advanced"; fetch its contract with get_flow_authoring_guide.'}],description:"A guided SimpleFlowSpec by default, or a legacy advanced FlowSpec."},profile:{type:"string",enum:["simple","advanced"],description:"Authoring profile. Defaults to simple; legacy specs containing nodes+edges are auto-detected as advanced."},keepPills:{type:"boolean",description:"When true, binding pills (${tool:server__name}) that resolve against the node's wired servers are preserved in the compiled output instead of being stripped. Pills that cannot be resolved are still stripped with a warning. Default: false (strip all pills — generator-safe behaviour)."}},required:["spec"]}}function t(){return[{name:"list_flow_building_blocks",description:"List models, MCP server/tool references, and existing flows available to a new flow.",inputSchema:(0,o.WS)({query:{type:"string",maxLength:256,description:"Case-insensitive search within the included categories."},include:{type:"array",minItems:1,uniqueItems:!0,items:{type:"string",enum:["models","servers","flows"]},description:"Categories to include (default all)."},connected:{type:"boolean",description:"When set, filter the server category by connection state."}},{common:!1})},{name:"get_flow_authoring_guide",description:"Fetch the flow-authoring contract only when needed. The simple guide is compact; the advanced guide contains the complete FlowSpec reference.",inputSchema:{type:"object",properties:{profile:{type:"string",enum:["simple","advanced"],description:"Guide to return. Defaults to simple."}}}},{name:"validate_flow_spec",description:"Compile and validate a guided flow without saving. Returns a compact summary and issues. Use draft_flow when the caller needs the complete unsaved draft.",inputSchema:s()},{name:"draft_flow",description:"Compile and validate a flow WITHOUT saving and return the complete draft bundle for review or opening in the Flow Builder.",inputSchema:s()},{name:"draft_generated_flow",description:"Run the production Flow Generator post-processing pipeline on a complete advanced FlowSpec: scratchpad safety guard, structural auto-repair, bounded nested compilation, generated-flow defaults, and whole-bundle validation. Returns the complete UNSAVED draft and hardened spec.",inputSchema:{type:"object",additionalProperties:!1,properties:{spec:{type:"object",description:'A complete advanced FlowSpec authored using get_flow_authoring_guide(profile="advanced").'}},required:["spec"]}},{name:"create_flow",description:"Compile, validate, and save a guided flow. Saving occurs only when validation has no errors. Use list_flow_building_blocks for valid references.",inputSchema:s()},{name:"suggest_tools_for_flow_step",description:"Use a selected AI model to suggest useful tools for ONE Process step from MCP servers that are already connected. Read-only: returns exact server/tool selections plus a proposed prompt containing canonical tool pills; it never changes or saves the flow.",inputSchema:{type:"object",additionalProperties:!1,properties:{flow:{type:"object",description:"Complete current Flow draft (ReactFlow shape)."},nodeId:{type:"string",description:"Exact id of the Process node to assist."},modelId:{type:"string",description:"Configured model id used for the suggestion."},goal:{type:"string",description:"Optional workflow goal; defaults to the flow description."}},required:["flow","nodeId","modelId"]}},{name:"apply_tools_to_flow_step",description:"Apply an EXPLICITLY APPROVED list of connected MCP tools to one Process step in an UNSAVED Flow draft. Revalidates every tool against the live server, creates/reuses MCP attachments, enables only the approved tools, and rewrites the prompt with canonical tool pills. Idempotent and does not save.",inputSchema:{type:"object",additionalProperties:!1,properties:{flow:{type:"object",description:"Complete current Flow draft."},nodeId:{type:"string",description:"Exact id of the Process node."},selections:{type:"array",items:{type:"object",additionalProperties:!1,properties:{server:{type:"string"},tool:{type:"string"},reason:{type:"string"}},required:["server","tool","reason"]}},proposedPrompt:{type:"string",description:"Optional complete prompt from the suggestion review."}},required:["flow","nodeId","selections"]}},{name:"check_flow_plausibility",description:"Analyze an entire Flow and its recursively referenced subflows plus invocation context (chat, parent subflow/sub-agent, planned execution, Trigger Wave), every prompt, graph shape, and input/output mode. Returns issues, typed deterministic repair patches, and unsaved repaired previews. Read-only; the caller must obtain consent before using repairedFlow or repairedFlows.",inputSchema:{type:"object",additionalProperties:!1,properties:{flow:{type:"object",description:"Complete current Flow draft."},relatedFlows:{type:"array",items:{type:"object"},description:"Unsaved related parent/child flow drafts."},modelId:{type:"string",description:"Optional model for semantic prompt review."},intendedContext:{type:"string",enum:["chat","headless"],description:"Intended use for a new unsaved flow."}},required:["flow"]}},{name:"search_mcp_marketplace",description:"Search the public MCP server registry for new capabilities (voice, browsing, files, email, vision, …). The registry matches the query against server NAMES only (substring) — use short single terms and try several. Returns name, description, whether FLUJO can install it, and which env vars/keys it would require.",inputSchema:{type:"object",properties:{query:{type:"string",description:"Short search term matched against server names."}},required:["query"]}},{name:"install_mcp_server",description:'Install an MCP server from the public registry (by the exact name returned by search_mcp_marketplace) and connect it — this DOWNLOADS AND RUNS a third-party package on the FLUJO host. Installs are gated by consent (SEP-1024): unless this trusted authoring tool is allowed via the mcpAutoInstall settings (trustBrainStem / requireConsent / namespaceAllowlist), the tool returns the exact resolved command + arguments with consentRequired=true INSTEAD of installing, and the caller must obtain explicit approval. Every attempt is written to an audit log (command, args, env NAMES, verification status — never secret values) before any spawn. Returns the FLUJO server name (reference it in FlowSpec "servers") and the tools it provides, or needsEnv when required keys are missing (supply values via the optional "env" argument), or the resolved plan when consent is required. First install can take minutes (package download).',inputSchema:{type:"object",properties:{name:{type:"string",description:'Exact registry name from search results, e.g. "ai.keenable/web-search".'},env:{type:"object",description:"Optional env var values for the server (e.g. required API keys).",additionalProperties:{type:"string"}}},required:["name"]}},{name:"install_best_mcp_server",description:"Install the BEST WORKING MCP server for a capability, unattended — the recommended way to acquire a capability when you don't already have a specific server name. Searches the registry, RANKS candidates by blended quality (GitHub stars + recent activity, npm weekly downloads, registry status), then installs best→worst until one actually boots and exposes tools (the \"works-gate\"): candidates that need unavailable keys, can't be installed, or start with zero tools are skipped automatically. Same consent/audit rules and third-party-code warning as install_mcp_server. Returns the installed server name + its tools and the list of candidates tried, or needsEnv/consentRequired. Prefer this over search+install for headless self-improvement; use install_mcp_server only when you must pin an exact server.",inputSchema:{type:"object",properties:{capability:{type:"string",description:'Short capability term matched against server names, e.g. "youtube", "email", "browser".'},env:{type:"object",description:"Optional env var values shared across attempted servers (e.g. an API key).",additionalProperties:{type:"string"}}},required:["capability"]}}]}function u(a){let b=a?.spec;if("string"==typeof b)try{return JSON.parse(b)}catch{return null}return b??null}function v(a,b=!1){return{content:[{type:"text",text:JSON.stringify(a,null,2)}],...b?{isError:!0}:{}}}async function w(a,b){try{let c=a=>!!a&&"object"==typeof a&&Array.isArray(a.nodes)&&Array.isArray(a.edges);if("list_flow_building_blocks"===a){(0,o.JJ)(b,["query","include","connected"]);let a=((0,o.sx)(b,"query",{allowEmpty:!0})??"").toLocaleLowerCase(),c=(0,o.li)(b,"include",["models","servers","flows"])??["models","servers","flows"],d=(0,o.Jz)(b,"connected"),e=await (0,h.jY)();return v({...c.includes("models")?{models:e.blocks.models.filter(b=>!a||`${b.id} ${b.name} ${b.displayName??""} ${b.description??""}`.toLocaleLowerCase().includes(a))}:{},...c.includes("servers")?{servers:e.blocks.servers.filter(b=>(void 0===d||b.connected===d)&&(!a||`${b.name} ${(b.tools??[]).map(a=>`${a.name} ${a.description??""}`).join(" ")}`.toLocaleLowerCase().includes(a)))}:{},...c.includes("flows")?{flows:e.blocks.flows.filter(b=>!a||`${b.id} ${b.name} ${b.description??""}`.toLocaleLowerCase().includes(a))}:{}})}if("get_flow_authoring_guide"===a){let a=b?.profile==="advanced"?"advanced":"simple";if("advanced"===a)return v({profile:a,guide:e.R});return v({profile:a,schema:f.Sq,guide:["Set name, goal, and one or more ordered steps.","Each step needs id and task. model overrides the top-level default.","Tools use server/tool references from list_flow_building_blocks.","Set flow on a step to run an existing flow instead of a model.","Omit routes for a linear flow. Routes are only for branches; omit when for the fallback.","Start, Finish, layout, data handoff, and ordinary defaults are inferred."]})}if("suggest_tools_for_flow_step"===a){if(!c(b.flow)||"string"!=typeof b.nodeId||"string"!=typeof b.modelId)return v({error:"flow, nodeId, and modelId are required."},!0);return v(await (0,j.DN)({flow:b.flow,nodeId:b.nodeId,modelId:b.modelId,goal:"string"==typeof b.goal?b.goal:void 0}))}if("apply_tools_to_flow_step"===a){if(!c(b.flow)||"string"!=typeof b.nodeId||!Array.isArray(b.selections))return v({error:"flow, nodeId, and selections are required."},!0);let a=b.selections.filter(a=>!!a&&"object"==typeof a&&"string"==typeof a.server&&"string"==typeof a.tool&&"string"==typeof a.reason);return v({saved:!1,flow:await (0,j.RK)({flow:b.flow,nodeId:b.nodeId,selections:a,proposedPrompt:"string"==typeof b.proposedPrompt?b.proposedPrompt:void 0})})}if("check_flow_plausibility"===a){if(!c(b.flow))return v({error:"A complete flow is required."},!0);return v(await (0,j.Ep)({flow:b.flow,relatedFlows:Array.isArray(b.relatedFlows)?b.relatedFlows.filter(c):void 0,modelId:"string"==typeof b.modelId?b.modelId:void 0,intendedContext:"headless"===b.intendedContext?"headless":"chat"}))}if("search_mcp_marketplace"===a){let a="string"==typeof b?.query?b.query:"",c=await (0,k.e3)(a);return v(c)}if("install_mcp_server"===a){let a="string"==typeof b?.name?b.name:"",c=b?.env&&"object"==typeof b.env&&!Array.isArray(b.env)?b.env:void 0,d=await (0,k.aM)(a,c,{resolveOnly:!0});if(!d.plan)return v(d,!0);let e=await (0,l.Ej)(),f=(0,m.e5)({caller:"authoring-tool",settings:e,registryName:a}),g=(0,n.nO)(d.plan.verificationStatus)?void 0:`Unverified / self-asserted registry entry (status: ${d.plan.verificationStatus}). Registry entries are publisher-asserted — review the command before approving.`;if(await (0,l.NB)((0,m.UM)(d.plan,"authoring-tool",f,!1)),!f.allowed)return v({installed:!1,consentRequired:!0,message:f.message,plan:d.plan,...g?{verificationWarning:g}:{}});let h=await (0,k.aM)(a,c);return await (0,l.NB)((0,m.UM)(h.plan??d.plan,"authoring-tool",f,h.installed,h.error)),v({...h,...g?{verificationWarning:g}:{}},!h.installed)}if("install_best_mcp_server"===a){let a="string"==typeof b?.capability?b.capability:"",c=b?.env&&"object"==typeof b.env&&!Array.isArray(b.env)?b.env:void 0;if(!a)return v({error:'Provide a "capability" search term.'},!0);let d=await (0,l.Ej)(),e=(0,m.e5)({caller:"authoring-tool",settings:d,registryName:a});if(!e.allowed){let b=(await (0,k.e3)(a)).find(a=>a.installable),d=b?await (0,k.aM)(b.name,c,{resolveOnly:!0}):null;return d?.plan&&await (0,l.NB)((0,m.UM)(d.plan,"authoring-tool",e,!1)),v({installed:!1,consentRequired:!0,message:e.message,...d?.plan?{plan:d.plan}:{}})}let f=await (0,k.LG)(a,c,{onAttempt:async(a,b)=>{a&&await (0,l.NB)((0,m.UM)(a,"authoring-tool",e,b.installed,b.error))}}),g=f.installed&&!(0,n.nO)(f.plan?.verificationStatus)?`Installed an unverified / self-asserted registry entry (status: ${f.plan?.verificationStatus}).`:void 0;return v({...f,...g?{verificationWarning:g}:{}},!f.installed)}if("draft_generated_flow"===a){let a=u(b);if(!a||"object"!=typeof a||Array.isArray(a))return v({error:'Provide a complete advanced FlowSpec object in "spec".'},!0);let c=await (0,h.jY)(),d=(0,i.oW)(a,c);if(!d.success)return v({error:"The generated specification could not be compiled.",spec:d.spec,issues:d.issues,hardening:{guardChanges:d.guardChanges,repairChanges:d.repairChanges}},!0);return v({profile:"advanced",pipeline:"production-generator",saved:!1,rootFlowId:d.flow.id,flow:d.flow,flows:d.flows.map(a=>a.flow),spec:d.spec,validation:d.validation,hardening:{guardChanges:d.guardChanges,repairChanges:d.repairChanges}})}if("validate_flow_spec"===a||"draft_flow"===a||"create_flow"===a){let c=u(b);if(!c)return v({error:'Provide a "spec" argument: a SimpleFlowSpec object (or JSON string).'},!0);let d=c&&"object"==typeof c&&!Array.isArray(c)?c:{},e="advanced"===b.profile?"advanced":"simple"===b.profile?"simple":Array.isArray(d.nodes)&&Array.isArray(d.edges)?"advanced":"simple",f=!0===b.keepPills,h=await (0,g.V)(c,{save:"create_flow"===a,keepPills:f,profile:e});if(!h.success)return v({error:h.error,issues:h.issues??[]},!0);let i=h.flows.length,j=i>1?` (plus ${i-1} nested subflow flow(s))`:"",k={profile:e,flowId:h.flow.id,flowName:h.flow.name,nodeCount:h.flow.nodes.length,edgeCount:h.flow.edges.length,...i>1?{flows:h.flows.map(a=>({id:a.id,name:a.name}))}:{},validation:h.validation,..."draft_flow"===a?{saved:!1,rootFlowId:h.flow.id,flow:h.flow,flows:h.flows}:{},..."create_flow"===a?{saved:h.saved,...h.saved?{note:`Flow "${h.flow.name}"${j} was created. It is callable as a tool on this MCP server (after a fresh tools/list) and as model "flow-${h.flow.name}" on the OpenAI-compatible endpoint.`}:{note:"NOT saved: validation found errors. Fix the issues and call create_flow again."}}:{}};return v(k,"create_flow"===a&&!h.saved)}return v({error:`Unknown authoring tool: ${a}`},!0)}catch(b){return p.error("authoringCallTool failed",{toolName:a,err:b}),v({error:`Authoring tool failed: ${b instanceof Error?b.message:String(b)}`},!0)}}},38204:(a,b,c)=>{c.d(b,{V:()=>k});var d=c(50846),e=c(87821),f=c(81226),g=c(7389),h=c(84671),i=c(9312);let j=(0,d.h)("backend/services/flow/compileFlow");async function k(a,b={}){if(!a||"object"!=typeof a||Array.isArray(a))return{success:!1,error:"The spec must be a JSON object (a FlowSpec)",statusCode:400};let c=await (0,i.jY)(),d=c.compile;if(b.updateFlowId){let a=d.flows??[];if(!a.some(a=>a.id===b.updateFlowId))return{success:!1,error:`No flow with id "${b.updateFlowId}" to update`,statusCode:404};d={...d,flows:a.filter(a=>a.id!==b.updateFlowId)}}let l="simple"===b.profile?(0,g.lJ)(a,d,{keepPills:b.keepPills}):(0,f.dM)(a,d,{keepPills:b.keepPills});if(!l.flow)return{success:!1,error:"The spec could not be compiled into a flow",statusCode:422,issues:l.issues.map(a=>({severity:a.severity,code:a.code,message:a.message}))};b.updateFlowId&&(l.flow.id=b.updateFlowId);let m=l.flows.flatMap(a=>(0,h.nC)(a,{models:c.compile.models,servers:c.validatorServers,serverTools:c.compile.serverTools}).issues),n=(0,i.RB)(l.issues,{issues:m,errorCount:0,warningCount:0,isRunnable:!0}),o=!1;if(b.save&&0===n.errorCount){for(let a of l.flows)await e.flowService.saveFlow(a);o=!0,j.info(`Compiled and saved ${l.flows.length} flow(s); root "${l.flow.name}" (${l.flow.id})`)}else b.save&&j.info(`Compiled flow "${l.flow.name}" has ${n.errorCount} error(s); NOT saved`);return{success:!0,flow:l.flow,flows:l.flows,validation:n,saved:o}}},86103:(a,b,c)=>{c.d(b,{Bc:()=>q,EL:()=>g,JJ:()=>j,Jz:()=>m,NW:()=>i,WS:()=>e,bg:()=>n,fM:()=>f,j5:()=>h,li:()=>o,rp:()=>k,sx:()=>l,yk:()=>p});let d={query:{type:"string",maxLength:256,description:"Optional case-insensitive substring search over the safe summary fields."},limit:{type:"integer",minimum:1,maximum:200,description:"Maximum items to return (default 50, maximum 200)."},cursor:{type:"string",description:"Opaque cursor returned in structuredContent.nextCursor by the previous call."}};function e(a={},b={}){let c=!1===b.common?{}:d,f=b.sorts?{sort:{type:"string",enum:[...b.sorts],description:"Stable result ordering."}}:{};return{type:"object",additionalProperties:!1,properties:{...c,...f,...a},...b.required?.length?{required:b.required}:{}}}function f(){return{type:"object",additionalProperties:!1,properties:{items:{type:"array",items:{}},total:{type:"integer",minimum:0},hasMore:{type:"boolean"},nextCursor:{type:"string"}},required:["items","total","hasMore"]}}class g extends Error{constructor(a){super(a),this.name="ListArgumentError"}}function h(a){if(!a||a.length>512)throw new g('"cursor" must be a non-empty cursor returned by a previous list call.');try{let b=JSON.parse(Buffer.from(a,"base64url").toString("utf8"));if(!Number.isInteger(b.offset)||0>Number(b.offset))throw Error("bad offset");return Number(b.offset)}catch{throw new g('"cursor" is invalid or malformed.')}}function i(a){return Buffer.from(JSON.stringify({offset:a}),"utf8").toString("base64url")}function j(a,b){let c=new Set(b),d=Object.keys(a).filter(a=>!c.has(a));if(d.length>0)throw new g(`Unsupported list argument${1===d.length?"":"s"}: ${d.join(", ")}.`)}function k(a,b={}){j(a,["query","limit","cursor",...b.sorts?["sort"]:[],...b.allowed??[]]);let c="";if(void 0!==a.query){if("string"!=typeof a.query)throw new g('"query" must be a string.');if((c=a.query.trim().toLocaleLowerCase()).length>256)throw new g('"query" must be at most 256 characters.')}let d=Math.min(200,Math.max(1,Math.floor(b.defaultLimit??50)));if(void 0!==a.limit){if(!Number.isInteger(a.limit)||1>Number(a.limit)||Number(a.limit)>200)throw new g('"limit" must be an integer between 1 and 200.');d=Number(a.limit)}let e=0;if(void 0!==a.cursor){if("string"!=typeof a.cursor)throw new g('"cursor" must be a string.');e=h(a.cursor)}let f=b.defaultSort;if(b.sorts&&void 0!==a.sort){if("string"!=typeof a.sort||!b.sorts.includes(a.sort))throw new g(`"sort" must be one of: ${b.sorts.join(", ")}.`);f=a.sort}return{query:c,limit:d,offset:e,sort:f}}function l(a,b,c={}){let d=a[b];if(void 0===d)return;if("string"!=typeof d)throw new g(`"${b}" must be a string.`);let e=d.trim();if(!e&&!c.allowEmpty)throw new g(`"${b}" must not be empty.`);if(e.length>(c.maxLength??256))throw new g(`"${b}" is too long.`);return e}function m(a,b){let c=a[b];if(void 0!==c){if("boolean"!=typeof c)throw new g(`"${b}" must be a boolean.`);return c}}function n(a,b){let c=a[b];if(void 0!==c){if("number"!=typeof c||!Number.isFinite(c))throw new g(`"${b}" must be a finite number.`);return c}}function o(a,b,c){let d=a[b];if(void 0===d)return;if(!Array.isArray(d)||0===d.length||!d.every(a=>"string"==typeof a))throw new g(`"${b}" must be a non-empty array of strings.`);let e=[...new Set(d.map(a=>a.trim()).filter(Boolean))];if(0===e.length)throw new g(`"${b}" must contain at least one non-empty value.`);if(c){let a=e.filter(a=>!c.includes(a));if(a.length>0)throw new g(`"${b}" contains unsupported values: ${a.join(", ")}.`)}return e}function p(a,b){let c=a.slice(b.offset,b.offset+b.limit),d=b.offset+c.length,e=d<a.length;return{items:c,total:a.length,hasMore:e,...e?{nextCursor:i(d)}:{}}}function q(a){return{content:[{type:"text",text:JSON.stringify(a.items,null,2)}],structuredContent:a}}}};
@@ -1,2 +1,2 @@
1
- "use strict";exports.id=2372,exports.ids=[2372],exports.modules={13516:(a,b,c)=>{c.d(b,{G:()=>d});let d={LOG_LEVEL:3,INCLUDE_TOOL_CALLS_IN_RESPONSE:!0,ENABLE_EXECUTION_TRACKER:!1}},38844:(a,b,c)=>{c.d(b,{Z:()=>d.Z});var d=c(84653)},43326:(a,b,c)=>{c.r(b),c.d(b,{getAppDir:()=>h,getDataDir:()=>j,getHomeDir:()=>i,getInstallMode:()=>m,getOllamaUrl:()=>k,isLocalModelsEnabled:()=>l});var d=c(33873),e=c.n(d),f=c(21820),g=c.n(f);function h(){return process.cwd()}function i(){return g().homedir()}function j(){let a=process.env.FLUJO_DATA_DIR;return a&&a.trim().length>0?e().resolve(a):h()}function k(){let a=process.env.FLUJO_OLLAMA_URL;return(a&&a.trim().length>0?a.trim():"http://localhost:11434").replace(/\/+$/,"")}function l(){let a=process.env.FLUJO_OLLAMA;return"1"===a||"true"===a||"yes"===a}function m(){return process.env.FLUJO_CONTAINER?"container":process.env.FLUJO_NPM?"npm":"git"}},50846:(a,b,c)=>{c.d(b,{h:()=>i});var d=c(13516);let e={VERBOSE:-1,DEBUG:0,INFO:1,WARN:2,ERROR:3},f="number"==typeof d.G.LOG_LEVEL?d.G.LOG_LEVEL:e.ERROR;function g(a,b=0){if(b>6)return String(a);if(!(a instanceof Error))return a;let c={name:a.name,message:a.message};for(let d of Object.getOwnPropertyNames(a)){if("name"===d||"message"===d)continue;let e=a[d];"function"!=typeof e&&("stack"===d?c.stack=e:"cause"===d?c.cause=g(e,b+1):"errors"===d&&Array.isArray(e)?c.errors=e.map(a=>g(a,b+1)):c[d]=e)}return c}function h(a,b,c,d,h){if(a>=("number"==typeof h?h:f)){if("function"==typeof d)try{d=d()}catch{d="[lazy log data threw]"}let f=new Date().toISOString(),h=`[${f}] [${b}]`,i=`${h} ${c}`;if(void 0!==d)if(d instanceof Error||"object"==typeof d)try{let a=d instanceof Error?g(d):d,b=JSON.stringify(a,(a,b)=>b instanceof Error?g(b):b,2);i+=`:
2
- ${b}`}catch(a){i+=": [Object cannot be stringified]"}else i+=`: ${d}`;switch(a){case e.VERBOSE:console.debug(`[VERBOSE] ${i}`);break;case e.DEBUG:console.debug(i);break;case e.INFO:console.info(i);break;case e.WARN:console.warn(i);break;case e.ERROR:console.error(i);break;default:console.log(i)}}}function i(a,b){let c,d=((c=a.replace(/^src\//,"")).startsWith("/")&&(c=c.substring(1)),c);return{verbose:(a,c)=>{h(e.VERBOSE,d,a,c,b)},debug:(a,c)=>{h(e.DEBUG,d,a,c,b)},info:(a,c)=>{h(e.INFO,d,a,c,b)},warn:(a,c)=>{h(e.WARN,d,a,c,b)},error:(a,c)=>{h(e.ERROR,d,a,c,b)}}}},84653:(a,b,c)=>{c.d(b,{Z:()=>d});var d=function(a){return a.MODELS="models",a.FLOWS="flows",a.CHAT_HISTORY="history",a.THEME="theme",a.ENCRYPTION_KEY="encryption_key",a.MCP_SERVERS="mcp_servers",a.GLOBAL_ENV_VARS="global_env_vars",a.CURRENT_CONVERSATION_ID="current_conversation_id",a.SELECTED_FLOW_ID="selected_flow_id",a.LAST_PICKED_FLOW_ID="last_picked_flow_id",a.SPEECH_SETTINGS="speech_settings",a.SPOTLIGHT_SERVERS="spotlight_servers",a.PLANNED_EXECUTIONS="planned_executions",a.MCP_AUTO_INSTALL_SETTINGS="mcp_auto_install_settings",a.MCP_QUALITY_SETTINGS="mcp_quality_settings",a.RUN_RESOURCE_SETTINGS="run_resource_settings",a.KV_STORE_SETTINGS="kv_store_settings",a.PENDING_APPROVALS="pending_approvals",a.MCP_INTERNAL_OVERRIDES="mcp_internal_overrides",a.PACKAGE_INSTALLS="package_installs",a.EXPERIMENTAL_SETTINGS="experimental_settings",a.REGISTRY_ACCOUNT="registry_account",a.REGISTRY_SETTINGS="registry_settings",a.TELEMETRY_STATE="telemetry_state",a}({})},92372:(a,b,c)=>{c.d(b,{EI:()=>B,N2:()=>u,Pv:()=>o,VH:()=>s,Vt:()=>A,Zf:()=>r,av:()=>E,bB:()=>C,l_:()=>z,ln:()=>w,loadItem:()=>t,pL:()=>D,w5:()=>F});var d=c(29021),e=c(33873),f=c.n(e),g=c(38844),h=c(50846),i=c(43326);let j=(0,h.h)("utils/storage/backend"),k=f().join((0,i.getDataDir)(),"db"),l=f().join((0,i.getDataDir)(),".next","storage"),m=a=>f().join(k,`${a}.json`);async function n(){try{await d.promises.access(k),j.verbose(`Storage directory exists: ${k}`)}catch{j.debug(`Creating storage directory: ${k}`),await d.promises.mkdir(k,{recursive:!0})}try{await d.promises.access(l),j.warn(`Old storage directory found: ${l}. This may cause data inconsistency issues.`)}catch{}}async function o(){for(let a of(j.debug("Verifying storage system initialization"),await n(),Object.values(g.Z)))try{let b=m(a),c=!1;try{await d.promises.access(b),c=!0}catch{}j.debug(`Storage check: ${a} - ${c?"File exists":"File does not exist yet"}`);let e=f().join(l,`${a}.json`);try{await d.promises.access(e),c?j.warn(`Found ${a} in both old and new storage locations. This may cause data inconsistency.`):j.warn(`Found ${a} in old storage location but not in new location. This may cause data loss.`)}catch{}}catch(b){j.error(`Storage verification failed for ${a}:`,b)}j.debug("Storage verification completed")}let p=new Map,q=0;async function r(a,b){let c=f().dirname(a);await d.promises.mkdir(c,{recursive:!0});let e=`${a}.tmp.${process.pid}.${++q}`;try{await d.promises.writeFile(e,b),await d.promises.rename(e,a)}catch(a){try{await d.promises.unlink(e)}catch{}throw a}}async function s(a,b){let c=m(a),d=(p.get(a)??Promise.resolve()).catch(()=>{}).then(()=>r(c,JSON.stringify(b,null,2)));p.set(a,d);try{await d,j.verbose(`Successfully saved item to: ${c}`)}catch(b){throw j.error(`Error saving item with key "${a}" to ${c}:`,b),b}finally{p.get(a)===d&&p.delete(a)}}async function t(a,b){try{await n();let c=m(a),e=await d.promises.readFile(c,"utf-8");if(0===e.trim().length)return j.warn(`Item with key "${a}" at ${c} is empty; treating as missing and returning default.`),b;try{let a=JSON.parse(e);return j.verbose(`Successfully loaded item from: ${c}`),a}catch(b){j.error(`CRITICAL: Failed to parse JSON from ${c}:`,b);let a=`${c}.corrupted.${Date.now()}.bak`;try{await d.promises.writeFile(a,e),j.info(`Created backup of corrupted file at: ${a}`)}catch(a){j.error("Failed to create backup of corrupted file:",a)}throw Error(`Failed to parse JSON from ${c}. A backup has been created at ${a}. Original error: ${b.message}`)}}catch(c){if("ENOENT"===c.code)return j.verbose(`Item with key "${a}" not found at ${m(a)}, returning default.`),b;throw j.error(`CRITICAL: Error loading item with key "${a}" from ${m(a)}:`,c),c}}async function u(a){let b=m(a);try{await d.promises.unlink(b),j.verbose(`Successfully cleared item: ${b}`)}catch(c){"ENOENT"!==c.code?j.warn(`Error clearing item with key "${a}" at ${b}:`,c):j.verbose(`Item with key "${a}" not found at ${b}, nothing to clear.`)}}let v=/^[A-Za-z0-9_-]{1,64}$/;function w(a){if("string"!=typeof a||!v.test(a))throw Error(`Unsafe collection item id: ${JSON.stringify(a)}`)}let x=a=>f().join(k,a),y=(a,b)=>f().join(x(a),`${b}.json`);function z(a,b){let c=(p.get(a)??Promise.resolve()).catch(()=>{}).then(b);return p.set(a,c),c.catch(()=>{}).finally(()=>{p.get(a)===c&&p.delete(a)}),c}async function A(a,b,c){w(b);let d=y(a,b);try{await z(`${a}/${b}`,()=>r(d,JSON.stringify(c,null,2))),j.verbose(`Successfully saved collection item: ${d}`)}catch(c){throw j.error(`Error saving collection item "${a}/${b}" to ${d}:`,c),c}}async function B(a,b,c){w(b);let e=y(a,b);try{let f=await d.promises.readFile(e,"utf-8");if(0===f.trim().length)return j.warn(`Collection item "${a}/${b}" at ${e} is empty; treating as missing.`),c;try{return JSON.parse(f)}catch(b){j.error(`CRITICAL: Failed to parse JSON from ${e}:`,b);let a=`${e}.corrupted.${Date.now()}.bak`;try{await d.promises.writeFile(a,f),j.info(`Created backup of corrupted file at: ${a}`)}catch(a){j.error("Failed to create backup of corrupted file:",a)}throw Error(`Failed to parse JSON from ${e}. A backup has been created at ${a}. Original error: ${b.message}`)}}catch(d){if("ENOENT"===d.code)return j.verbose(`Collection item "${a}/${b}" not found at ${e}, returning default.`),c;throw j.error(`CRITICAL: Error loading collection item "${a}/${b}" from ${e}:`,d),d}}async function C(a,b){w(b);let c=y(a,b);await z(`${a}/${b}`,async()=>{try{await d.promises.unlink(c),j.verbose(`Successfully deleted collection item: ${c}`)}catch(d){if("ENOENT"!==d.code)throw d;j.verbose(`Collection item "${a}/${b}" not found at ${c}, nothing to delete.`)}})}async function D(a){let b,c=x(a);try{b=await d.promises.readdir(c)}catch(a){if("ENOENT"===a.code)return[];throw a}let e=[];for(let a of b){if(!a.endsWith(".json")||a.includes(".tmp.")||a.includes(".corrupted.")||a.endsWith(".bak"))continue;let b=f().join(c,a);try{let a=await d.promises.readFile(b,"utf-8");if(0===a.trim().length){j.warn(`Collection item file ${b} is empty; skipping.`);continue}e.push(JSON.parse(a))}catch(a){j.error(`Failed to read collection item ${b}; skipping.`,a)}}return e}async function E(a){let b,c=x(a);try{b=await d.promises.readdir(c)}catch(a){if("ENOENT"===a.code)return[];throw a}let e=[];for(let a of b){if(!a.endsWith(".json")||a.includes(".tmp.")||a.includes(".corrupted.")||a.endsWith(".bak"))continue;let b=f().join(c,a);try{let[a,c]=await Promise.all([d.promises.readFile(b,"utf-8"),d.promises.stat(b)]);if(0===a.trim().length){j.warn(`Collection item file ${b} is empty; skipping.`);continue}e.push({item:JSON.parse(a),mtimeMs:c.mtimeMs})}catch(a){j.error(`Failed to read collection item ${b}; skipping.`,a)}}return e}async function F(a,b,c){let e,f,g=m(a);try{e=await d.promises.readFile(g,"utf-8")}catch(a){if("ENOENT"===a.code)return 0;throw a}if(0===e.trim().length)return await d.promises.rename(g,`${g}.migrated-${Date.now()}.bak`),0;try{f=JSON.parse(e)}catch(b){return j.error(`Migration: legacy ${a}.json is not valid JSON; leaving it in place.`,b),0}if(!Array.isArray(f))return j.error(`Migration: legacy ${a}.json is not an array; leaving it in place.`),0;for(let a of(await d.promises.mkdir(x(b),{recursive:!0}),f)){let e;try{e=c(a),w(e)}catch(a){j.error(`Migration: skipping ${b} item with invalid/unsafe id`,a);continue}let f=y(b,e);try{await d.promises.access(f),j.debug(`Migration: ${b}/${e} already exists; keeping the existing file.`);continue}catch{}await r(f,JSON.stringify(a,null,2))}return await d.promises.rename(g,`${g}.migrated-${Date.now()}.bak`),j.info(`Migration: moved ${f.length} ${b} item(s) from ${a}.json to per-item storage.`),f.length}}};
1
+ "use strict";exports.id=2372,exports.ids=[2372],exports.modules={13516:(a,b,c)=>{c.d(b,{G:()=>d});let d={LOG_LEVEL:3,INCLUDE_TOOL_CALLS_IN_RESPONSE:!0,ENABLE_EXECUTION_TRACKER:!1,ENABLE_REVERT_TO_HERE:!1}},38844:(a,b,c)=>{c.d(b,{Z:()=>d.Z});var d=c(84653)},43326:(a,b,c)=>{c.r(b),c.d(b,{getAppDir:()=>h,getDataDir:()=>j,getHomeDir:()=>i,getInstallMode:()=>m,getOllamaUrl:()=>k,isLocalModelsEnabled:()=>l});var d=c(33873),e=c.n(d),f=c(21820),g=c.n(f);function h(){return process.cwd()}function i(){return g().homedir()}function j(){let a=process.env.FLUJO_DATA_DIR;return a&&a.trim().length>0?e().resolve(a):h()}function k(){let a=process.env.FLUJO_OLLAMA_URL;return(a&&a.trim().length>0?a.trim():"http://localhost:11434").replace(/\/+$/,"")}function l(){let a=process.env.FLUJO_OLLAMA;return"1"===a||"true"===a||"yes"===a}function m(){return process.env.FLUJO_CONTAINER?"container":process.env.FLUJO_NPM?"npm":"git"}},50846:(a,b,c)=>{c.d(b,{h:()=>i});var d=c(13516);let e={VERBOSE:-1,DEBUG:0,INFO:1,WARN:2,ERROR:3},f="number"==typeof d.G.LOG_LEVEL?d.G.LOG_LEVEL:e.ERROR;function g(a,b=0){if(b>6)return String(a);if(!(a instanceof Error))return a;let c={name:a.name,message:a.message};for(let d of Object.getOwnPropertyNames(a)){if("name"===d||"message"===d)continue;let e=a[d];"function"!=typeof e&&("stack"===d?c.stack=e:"cause"===d?c.cause=g(e,b+1):"errors"===d&&Array.isArray(e)?c.errors=e.map(a=>g(a,b+1)):c[d]=e)}return c}function h(a,b,c,d,h){if(a>=("number"==typeof h?h:f)){if("function"==typeof d)try{d=d()}catch{d="[lazy log data threw]"}let f=new Date().toISOString(),h=`[${f}] [${b}]`,i=`${h} ${c}`;if(void 0!==d)if(d instanceof Error||"object"==typeof d)try{let a=d instanceof Error?g(d):d,b=JSON.stringify(a,(a,b)=>b instanceof Error?g(b):b,2);i+=`:
2
+ ${b}`}catch(a){i+=": [Object cannot be stringified]"}else i+=`: ${d}`;switch(a){case e.VERBOSE:console.debug(`[VERBOSE] ${i}`);break;case e.DEBUG:console.debug(i);break;case e.INFO:console.info(i);break;case e.WARN:console.warn(i);break;case e.ERROR:console.error(i);break;default:console.log(i)}}}function i(a,b){let c,d=((c=a.replace(/^src\//,"")).startsWith("/")&&(c=c.substring(1)),c);return{verbose:(a,c)=>{h(e.VERBOSE,d,a,c,b)},debug:(a,c)=>{h(e.DEBUG,d,a,c,b)},info:(a,c)=>{h(e.INFO,d,a,c,b)},warn:(a,c)=>{h(e.WARN,d,a,c,b)},error:(a,c)=>{h(e.ERROR,d,a,c,b)}}}},84653:(a,b,c)=>{c.d(b,{Z:()=>d});var d=function(a){return a.MODELS="models",a.FLOWS="flows",a.CHAT_HISTORY="history",a.THEME="theme",a.THEME_STYLE="theme_style",a.ENCRYPTION_KEY="encryption_key",a.MCP_SERVERS="mcp_servers",a.GLOBAL_ENV_VARS="global_env_vars",a.CURRENT_CONVERSATION_ID="current_conversation_id",a.SELECTED_FLOW_ID="selected_flow_id",a.LAST_PICKED_FLOW_ID="last_picked_flow_id",a.SPEECH_SETTINGS="speech_settings",a.SPOTLIGHT_SERVERS="spotlight_servers",a.PLANNED_EXECUTIONS="planned_executions",a.MCP_AUTO_INSTALL_SETTINGS="mcp_auto_install_settings",a.MCP_QUALITY_SETTINGS="mcp_quality_settings",a.RUN_RESOURCE_SETTINGS="run_resource_settings",a.KV_STORE_SETTINGS="kv_store_settings",a.PENDING_APPROVALS="pending_approvals",a.MCP_INTERNAL_OVERRIDES="mcp_internal_overrides",a.MCP_INTERNAL_SERVERS_MIGRATION_V1="mcp_internal_servers_migration_v1",a.MCP_INTERNAL_CAPABILITIES_MIGRATION_V2="mcp_internal_capabilities_migration_v2",a.MCP_INTERNAL_BROWSER_MIGRATION_V3="mcp_internal_browser_migration_v3",a.MCP_SHIPPED_SERVERS_MIGRATION_V4="mcp_shipped_servers_migration_v4",a.PACKAGE_INSTALLS="package_installs",a.EXPERIMENTAL_SETTINGS="experimental_settings",a.REGISTRY_ACCOUNT="registry_account",a.REGISTRY_SETTINGS="registry_settings",a.TELEMETRY_STATE="telemetry_state",a}({})},92372:(a,b,c)=>{c.d(b,{EI:()=>B,N2:()=>u,Pv:()=>o,VH:()=>s,Vt:()=>A,Zf:()=>r,av:()=>E,bB:()=>C,l_:()=>z,ln:()=>w,loadItem:()=>t,pL:()=>D,w5:()=>F});var d=c(29021),e=c(33873),f=c.n(e),g=c(38844),h=c(50846),i=c(43326);let j=(0,h.h)("utils/storage/backend"),k=f().join((0,i.getDataDir)(),"db"),l=f().join((0,i.getDataDir)(),".next","storage"),m=a=>f().join(k,`${a}.json`);async function n(){try{await d.promises.access(k),j.verbose(`Storage directory exists: ${k}`)}catch{j.debug(`Creating storage directory: ${k}`),await d.promises.mkdir(k,{recursive:!0})}try{await d.promises.access(l),j.warn(`Old storage directory found: ${l}. This may cause data inconsistency issues.`)}catch{}}async function o(){for(let a of(j.debug("Verifying storage system initialization"),await n(),Object.values(g.Z)))try{let b=m(a),c=!1;try{await d.promises.access(b),c=!0}catch{}j.debug(`Storage check: ${a} - ${c?"File exists":"File does not exist yet"}`);let e=f().join(l,`${a}.json`);try{await d.promises.access(e),c?j.warn(`Found ${a} in both old and new storage locations. This may cause data inconsistency.`):j.warn(`Found ${a} in old storage location but not in new location. This may cause data loss.`)}catch{}}catch(b){j.error(`Storage verification failed for ${a}:`,b)}j.debug("Storage verification completed")}let p=new Map,q=0;async function r(a,b){let c=f().dirname(a);await d.promises.mkdir(c,{recursive:!0});let e=`${a}.tmp.${process.pid}.${++q}`;try{await d.promises.writeFile(e,b),await d.promises.rename(e,a)}catch(a){try{await d.promises.unlink(e)}catch{}throw a}}async function s(a,b){let c=m(a),d=(p.get(a)??Promise.resolve()).catch(()=>{}).then(()=>r(c,JSON.stringify(b,null,2)));p.set(a,d);try{await d,j.verbose(`Successfully saved item to: ${c}`)}catch(b){throw j.error(`Error saving item with key "${a}" to ${c}:`,b),b}finally{p.get(a)===d&&p.delete(a)}}async function t(a,b){try{await n();let c=m(a),e=await d.promises.readFile(c,"utf-8");if(0===e.trim().length)return j.warn(`Item with key "${a}" at ${c} is empty; treating as missing and returning default.`),b;try{let a=JSON.parse(e);return j.verbose(`Successfully loaded item from: ${c}`),a}catch(b){j.error(`CRITICAL: Failed to parse JSON from ${c}:`,b);let a=`${c}.corrupted.${Date.now()}.bak`;try{await d.promises.writeFile(a,e),j.info(`Created backup of corrupted file at: ${a}`)}catch(a){j.error("Failed to create backup of corrupted file:",a)}throw Error(`Failed to parse JSON from ${c}. A backup has been created at ${a}. Original error: ${b.message}`)}}catch(c){if("ENOENT"===c.code)return j.verbose(`Item with key "${a}" not found at ${m(a)}, returning default.`),b;throw j.error(`CRITICAL: Error loading item with key "${a}" from ${m(a)}:`,c),c}}async function u(a){let b=m(a);try{await d.promises.unlink(b),j.verbose(`Successfully cleared item: ${b}`)}catch(c){"ENOENT"!==c.code?j.warn(`Error clearing item with key "${a}" at ${b}:`,c):j.verbose(`Item with key "${a}" not found at ${b}, nothing to clear.`)}}let v=/^[A-Za-z0-9_-]{1,64}$/;function w(a){if("string"!=typeof a||!v.test(a))throw Error(`Unsafe collection item id: ${JSON.stringify(a)}`)}let x=a=>f().join(k,a),y=(a,b)=>f().join(x(a),`${b}.json`);function z(a,b){let c=(p.get(a)??Promise.resolve()).catch(()=>{}).then(b);return p.set(a,c),c.catch(()=>{}).finally(()=>{p.get(a)===c&&p.delete(a)}),c}async function A(a,b,c){w(b);let d=y(a,b);try{await z(`${a}/${b}`,()=>r(d,JSON.stringify(c,null,2))),j.verbose(`Successfully saved collection item: ${d}`)}catch(c){throw j.error(`Error saving collection item "${a}/${b}" to ${d}:`,c),c}}async function B(a,b,c){w(b);let e=y(a,b);try{let f=await d.promises.readFile(e,"utf-8");if(0===f.trim().length)return j.warn(`Collection item "${a}/${b}" at ${e} is empty; treating as missing.`),c;try{return JSON.parse(f)}catch(b){j.error(`CRITICAL: Failed to parse JSON from ${e}:`,b);let a=`${e}.corrupted.${Date.now()}.bak`;try{await d.promises.writeFile(a,f),j.info(`Created backup of corrupted file at: ${a}`)}catch(a){j.error("Failed to create backup of corrupted file:",a)}throw Error(`Failed to parse JSON from ${e}. A backup has been created at ${a}. Original error: ${b.message}`)}}catch(d){if("ENOENT"===d.code)return j.verbose(`Collection item "${a}/${b}" not found at ${e}, returning default.`),c;throw j.error(`CRITICAL: Error loading collection item "${a}/${b}" from ${e}:`,d),d}}async function C(a,b){w(b);let c=y(a,b);await z(`${a}/${b}`,async()=>{try{await d.promises.unlink(c),j.verbose(`Successfully deleted collection item: ${c}`)}catch(d){if("ENOENT"!==d.code)throw d;j.verbose(`Collection item "${a}/${b}" not found at ${c}, nothing to delete.`)}})}async function D(a){let b,c=x(a);try{b=await d.promises.readdir(c)}catch(a){if("ENOENT"===a.code)return[];throw a}let e=[];for(let a of b){if(!a.endsWith(".json")||a.includes(".tmp.")||a.includes(".corrupted.")||a.endsWith(".bak"))continue;let b=f().join(c,a);try{let a=await d.promises.readFile(b,"utf-8");if(0===a.trim().length){j.warn(`Collection item file ${b} is empty; skipping.`);continue}e.push(JSON.parse(a))}catch(a){j.error(`Failed to read collection item ${b}; skipping.`,a)}}return e}async function E(a){let b,c=x(a);try{b=await d.promises.readdir(c)}catch(a){if("ENOENT"===a.code)return[];throw a}let e=[];for(let a of b){if(!a.endsWith(".json")||a.includes(".tmp.")||a.includes(".corrupted.")||a.endsWith(".bak"))continue;let b=f().join(c,a);try{let[a,c]=await Promise.all([d.promises.readFile(b,"utf-8"),d.promises.stat(b)]);if(0===a.trim().length){j.warn(`Collection item file ${b} is empty; skipping.`);continue}e.push({item:JSON.parse(a),mtimeMs:c.mtimeMs})}catch(a){j.error(`Failed to read collection item ${b}; skipping.`,a)}}return e}async function F(a,b,c){let e,f,g=m(a);try{e=await d.promises.readFile(g,"utf-8")}catch(a){if("ENOENT"===a.code)return 0;throw a}if(0===e.trim().length)return await d.promises.rename(g,`${g}.migrated-${Date.now()}.bak`),0;try{f=JSON.parse(e)}catch(b){return j.error(`Migration: legacy ${a}.json is not valid JSON; leaving it in place.`,b),0}if(!Array.isArray(f))return j.error(`Migration: legacy ${a}.json is not an array; leaving it in place.`),0;for(let a of(await d.promises.mkdir(x(b),{recursive:!0}),f)){let e;try{e=c(a),w(e)}catch(a){j.error(`Migration: skipping ${b} item with invalid/unsafe id`,a);continue}let f=y(b,e);try{await d.promises.access(f),j.debug(`Migration: ${b}/${e} already exists; keeping the existing file.`);continue}catch{}await r(f,JSON.stringify(a,null,2))}return await d.promises.rename(g,`${g}.migrated-${Date.now()}.bak`),j.info(`Migration: moved ${f.length} ${b} item(s) from ${a}.json to per-item storage.`),f.length}}};
@@ -0,0 +1 @@
1
+ "use strict";exports.id=2446,exports.ids=[2446,8291],exports.modules={27709:(a,b,c)=>{c.d(b,{CW:()=>p,Mw:()=>s,lp:()=>q});var d=c(33873),e=c.n(d),f=c(29021),g=c(50846),h=c(43326),i=c(92372);let j=(0,g.h)("backend/execution/flow/conversationSummaryStore");function k(){return e().join((0,h.getDataDir)(),"db","conversations")}function l(){return e().join((0,h.getDataDir)(),"db","conversation-summaries")}function m(a){return e().join(l(),`${a}.json`)}function n(a,b){return{id:a.conversationId||b,title:a.title||"Untitled Conversation",flowId:a.flowId||null,...a.status?{status:a.status}:{},createdAt:a.createdAt||0,updatedAt:a.updatedAt||0,...void 0!==a.lastUserMessageAt?{lastUserMessageAt:a.lastUserMessageAt}:{},...void 0!==a.plannedExecutionId?{plannedExecutionId:a.plannedExecutionId}:{},...void 0!==a.parentConversationId?{parentConversationId:a.parentConversationId}:{},...void 0!==a.rootConversationId?{rootConversationId:a.rootConversationId}:{},...a.recovery?{recovery:a.recovery}:{}}}async function o(a,b,c){(0,i.ln)(a);let d=c??await f.promises.stat(e().join(k(),`${a}.json`)),g={version:1,...n(b,a),snapshotMtimeMs:d.mtimeMs,snapshotSize:d.size};await (0,i.l_)(`conversation-summaries/${a}`,()=>(0,i.Zf)(m(a),JSON.stringify(g,null,2)))}async function p(a,b){try{await o(a,b)}catch(b){j.warn(`Could not refresh conversation summary ${a}; it will be rebuilt on list.`,b)}}async function q(a){try{(0,i.ln)(a),await (0,i.l_)(`conversation-summaries/${a}`,async()=>{try{await f.promises.unlink(m(a))}catch(a){if("ENOENT"!==a.code)throw a}})}catch(b){j.warn(`Could not delete conversation summary ${a}.`,b)}}async function r(){let a;try{a=await f.promises.readdir(l())}catch(a){if("ENOENT"===a.code)return new Map;throw a}let b=new Map,c=0,d=async()=>{for(;;){let d=a[c++];if(!d)return;if(!(!d.endsWith(".json")||d.includes(".tmp.")||d.includes(".corrupted.")))try{let a=JSON.parse(await f.promises.readFile(e().join(l(),d),"utf8")),c=d.replace(/\.json$/,"");(0,i.ln)(c),1===a.version&&"string"==typeof a.id&&b.set(c,a)}catch(a){j.warn(`Skipping unreadable conversation summary ${d}; it will be rebuilt if needed.`,a)}}};return await Promise.all(Array.from({length:Math.min(32,Math.max(1,a.length))},()=>d())),b}async function s(){let a;try{a=(await f.promises.readdir(k())).filter(a=>a.endsWith(".json"))}catch(a){if("ENOENT"===a.code)return[];throw a}let b=await r(),c=Array(a.length).fill(null),d=0,g=async()=>{for(;;){let g=d++;if(g>=a.length)return;let h=a[g],l=h.replace(/\.json$/,"");try{(0,i.ln)(l);let a=e().join(k(),h),d=await f.promises.stat(a),j=b.get(l);if(j&&j.snapshotMtimeMs===d.mtimeMs&&j.snapshotSize===d.size){c[g]=function(a){let{version:b,snapshotMtimeMs:c,snapshotSize:d,...e}=a;return e}(j);continue}let m=JSON.parse(await f.promises.readFile(a,"utf8"));c[g]=n(m,l),await o(l,m,d)}catch(a){j.warn(`Skipping unreadable conversation snapshot ${h}.`,a)}}};return await Promise.all(Array.from({length:Math.min(32,Math.max(1,a.length))},()=>g())),c.filter(a=>null!==a)}},38291:(a,b,c)=>{c.d(b,{persistConversationState:()=>i});var d=c(92372),e=c(75028),f=c(50846),g=c(27709);let h=(0,f.h)("backend/execution/flow/persistConversationState");async function i(a,b){let c="conversations/",f=String(a).startsWith(c)?String(a).slice(c.length):String(a);return((0,d.ln)(f),null!=b.conversationId&&(0,d.ln)(b.conversationId),b.ephemeral)?(h.debug(`Refusing to persist ephemeral state (key ${a}); ephemeral runs never reach the conversations store.`),Promise.resolve()):(0,e.isConversationDeleted)(b.conversationId)?(h.info(`Refusing to persist state for deleted conversation ${b.conversationId} (key ${a}).`),Promise.resolve()):void(await (0,d.VH)(a,{...b,executionTrace:void 0,emit:void 0}),await (0,g.CW)(f,b))}},52446:(a,b,c)=>{c.d(b,{GG:()=>l,MM:()=>s,aC:()=>r,gw:()=>k,hk:()=>o,oV:()=>p,wL:()=>q});var d=c(55511),e=c(60184),f=c(38291);let g=(0,d.randomUUID)(),h="A tool may have produced an external side effect before execution stopped. Automatic replay is disabled; restart the turn or confirm the effect before retrying.";function i(a){return"number"==typeof a&&Number.isFinite(a)?a:void 0}function j(a){return"string"==typeof a&&a.length>0?a:void 0}function k(a){let b=a&&"object"==typeof a?a:{},c=b.details&&"object"==typeof b.details?b.details:b.errorDetails&&"object"==typeof b.errorDetails?b.errorDetails:b,d=i(c.status)??i(c.statusCode),e=j(c.code)??j(c.type)??j(b.code),f=a instanceof Error?a.message:"string"==typeof a?a:"string"==typeof a?.message?a.message:"string"==typeof a?.error?a.error:"Execution failed.",g=`${e??""} ${f}`.toLowerCase(),h="unknown",k=!1;429===d||/rate.?limit|too many requests/.test(g)?(h="rate_limit",k=!0):/context.{0,12}(limit|length|window)|maximum context/.test(g)?h="context_limit":/input.{0,12}(limit|length|too large)|request.{0,12}too large/.test(g)?h="input_limit":/session.{0,12}(lost|expired|invalid)|thread.{0,12}(lost|expired|not found)/.test(g)?h="session_loss":/empty response|no response content|response was empty/.test(g)?(h="model_empty_response",k=!0):/truncated response|unexpected end|premature end/.test(g)?(h="model_truncated_response",k=!0):/tool/.test(g)?h="tool_failure":408===d||502===d||503===d||504===d||/timeout|timed out|econnreset|econnrefused|socket|network|fetch failed|connection closed/.test(g)?(h="transport_failure",k=!0):(void 0!==d||/provider|model|api/.test(g))&&(h="provider_failure",k=void 0===d||d>=500);let l=i(c.retryAfterMs)??(void 0!==i(c.retryAfter)?1e3*i(c.retryAfter):void 0);return{classification:k?"retryable_failure":"permanent_failure",failure:{category:h,message:f,code:e,status:d,retryable:k},retryAfterAt:void 0!==l?Date.now()+Math.max(0,l):void 0}}function l(a,b){let c=Date.now(),e=a.recovery;if(e?.runId===b)return e.classification="running",e.ownerId=g,e.ownerHeartbeatAt=c,e.updatedAt=c,e.terminalAt=void 0,e.failure=void 0,e.retryAfterAt=void 0,e.manualActionRequired=!1,e.sideEffectWarning=void 0,a.recovery=e,e;let f={version:1,runId:b,attemptId:(0,d.randomUUID)(),attempt:1,classification:"running",parentRunId:a.parentRunId,ownerId:g,ownerHeartbeatAt:c,startedAt:c,updatedAt:c};return a.recovery=f,f}function m(a,b){let c=(a.messages??[]).slice(-8).map(a=>({id:a.id,role:a.role,content:a.content,toolCalls:a.tool_calls,toolCallId:a.tool_call_id}));return(0,d.createHash)("sha256").update(JSON.stringify({flowId:a.flowId,nodeId:b,messages:c})).digest("hex")}async function n(a,b,c,d){d?(d(c),b.conversationId&&!b.ephemeral&&await (0,e.u8)(b.conversationId)):await (0,e.D$)(b,[c]),await (0,f.persistConversationState)(a,b)}async function o(a,b,c,e){if(b.ephemeral)return;let f=b.recovery??l(b,b.logicalRunId??(0,d.randomUUID)()),i=Date.now(),j={id:(0,d.randomUUID)(),phase:c.phase,nodeId:c.nodeId,turnEntryNodeId:c.turnEntryNodeId??f.lastSafeCheckpoint?.turnEntryNodeId??c.nodeId,attempt:f.attempt,inputFingerprint:m(b,c.nodeId),safe:c.safe,effectStatus:c.effectStatus??"none",parentRunId:b.parentRunId,lane:f.lane,tools:c.tools,createdAt:i};return f.currentCheckpoint=j,j.safe&&(f.lastSafeCheckpoint=j),f.ownerId=g,f.ownerHeartbeatAt=i,f.updatedAt=i,j.safe||"unknown"!==j.effectStatus||(f.manualActionRequired=!0,f.sideEffectWarning=h),b.recovery=f,await n(a,b,{type:"recovery:checkpoint",checkpoint:j},e),j}async function p(a,b,c,d,e){let f=c.map(a=>{let c=b.toolNameMap?.[a.function.name],d=c?.annotations,e=d?.readOnlyHint===!0;return{toolCallId:a.id,name:a.function.name,readOnly:e,idempotent:e||d?.idempotentHint===!0,destructive:d?.destructiveHint}});f.some(a=>!a.readOnly)&&await o(a,b,{phase:"before"===d?"tool:before":"completed"===d?"tool:after":"tool:unknown",nodeId:b.currentNodeId,safe:"completed"===d,effectStatus:"before"===d?"pending":"completed"===d?"completed":"unknown",tools:f},e)}async function q(a,b,c,e={},f){let g=function(a,b,c={}){let e=a.recovery??l(a,a.logicalRunId??(0,d.randomUUID)()),f=Date.now();return e.classification=b,e.failure=c.failure,e.retryAfterAt=c.retryAfterAt,e.cancellationRequestedAt=c.cancellationRequestedAt??e.cancellationRequestedAt,e.manualActionRequired=c.manualActionRequired??e.manualActionRequired,e.sideEffectWarning=c.sideEffectWarning??e.sideEffectWarning,e.updatedAt=f,e.ownerHeartbeatAt=f,"running"!==b&&"paused"!==b&&(e.terminalAt=f),a.recovery=e,e}(b,c,e);return await n(a,b,{type:"recovery:transition",recovery:{...g}},f),g}async function r(a,b){let c=b.recovery;return"running"===b.status&&!!c?.ownerId&&c.ownerId!==g&&(b.status="error",b.isCancelled=!1,b.lastResponse={success:!1,error:"Execution was interrupted before it reached a terminal boundary."},await q(a,b,"interrupted",{failure:{category:"unclean_process_interruption",message:"The process that owned this run is no longer active.",retryable:!1},manualActionRequired:!0}),!0)}function s(a,b="interrupted"){let c=a.recovery??l(a,a.logicalRunId??(0,d.randomUUID)()),e=Date.now(),f={id:(0,d.randomUUID)(),phase:"tool:unknown",nodeId:a.currentNodeId,turnEntryNodeId:c.lastSafeCheckpoint?.turnEntryNodeId,attempt:c.attempt,inputFingerprint:m(a,a.currentNodeId),safe:!1,effectStatus:"unknown",parentRunId:a.parentRunId,lane:c.lane,createdAt:e};c.currentCheckpoint=f,c.classification=b,c.failure={category:"tool_failure",message:"A dangling tool call was repaired after interruption; its external effect is unknown.",retryable:!1},c.manualActionRequired=!0,c.sideEffectWarning=h,c.updatedAt=e,c.terminalAt="interrupted"===b?e:void 0,a.recovery=c}}};
@@ -0,0 +1,2 @@
1
+ "use strict";exports.id=2828,exports.ids=[2828],exports.modules={2560:(a,b,c)=>{c.d(b,{Aq:()=>e,Xk:()=>g,vi:()=>f});var d=c(38301);function e(a,b){return b}function f(a,b){}function g(a,b){let[c,e]=(0,d.useState)(()=>b);return[c,(0,d.useCallback)(b=>{e(c=>{let d="function"==typeof b?b(c):b;return f(a,d),d})},[a])]}},13516:(a,b,c)=>{c.d(b,{G:()=>d});let d={LOG_LEVEL:3,INCLUDE_TOOL_CALLS_IN_RESPONSE:!0,ENABLE_EXECUTION_TRACKER:!1,ENABLE_REVERT_TO_HERE:!1}},49351:(a,b,c)=>{c.d(b,{A:()=>h});var d=c(21124);c(38301);var e=c(49565),f=c(51100),g=c(73198);function h({show:a,onClick:b,sx:c}){return(0,d.jsx)(e.A,{in:a,unmountOnExit:!0,children:(0,d.jsx)(f.A,{size:"small",color:"primary","aria-label":"Back to top",onClick:b,sx:{position:"fixed",bottom:24,right:24,zIndex:1200,...c},children:(0,d.jsx)(g.A,{})})})}},50846:(a,b,c)=>{c.d(b,{h:()=>i});var d=c(13516);let e={VERBOSE:-1,DEBUG:0,INFO:1,WARN:2,ERROR:3},f="number"==typeof d.G.LOG_LEVEL?d.G.LOG_LEVEL:e.ERROR;function g(a,b=0){if(b>6)return String(a);if(!(a instanceof Error))return a;let c={name:a.name,message:a.message};for(let d of Object.getOwnPropertyNames(a)){if("name"===d||"message"===d)continue;let e=a[d];"function"!=typeof e&&("stack"===d?c.stack=e:"cause"===d?c.cause=g(e,b+1):"errors"===d&&Array.isArray(e)?c.errors=e.map(a=>g(a,b+1)):c[d]=e)}return c}function h(a,b,c,d,h){if(a>=("number"==typeof h?h:f)){if("function"==typeof d)try{d=d()}catch{d="[lazy log data threw]"}let f=new Date().toISOString(),h=`[${f}] [${b}]`,i=`${h} ${c}`;if(void 0!==d)if(d instanceof Error||"object"==typeof d)try{let a=d instanceof Error?g(d):d,b=JSON.stringify(a,(a,b)=>b instanceof Error?g(b):b,2);i+=`:
2
+ ${b}`}catch(a){i+=": [Object cannot be stringified]"}else i+=`: ${d}`;switch(a){case e.VERBOSE:console.debug(`[VERBOSE] ${i}`);break;case e.DEBUG:console.debug(i);break;case e.INFO:console.info(i);break;case e.WARN:console.warn(i);break;case e.ERROR:console.error(i);break;default:console.log(i)}}}function i(a,b){let c,d=((c=a.replace(/^src\//,"")).startsWith("/")&&(c=c.substring(1)),c);return{verbose:(a,c)=>{h(e.VERBOSE,d,a,c,b)},debug:(a,c)=>{h(e.DEBUG,d,a,c,b)},info:(a,c)=>{h(e.INFO,d,a,c,b)},warn:(a,c)=>{h(e.WARN,d,a,c,b)},error:(a,c)=>{h(e.ERROR,d,a,c,b)}}}},61560:(a,b,c)=>{c.d(b,{R:()=>e});var d=c(38301);function e(a,b={}){let{threshold:c=200,deps:f=[]}=b,g=(0,d.useRef)(null),[h,i]=(0,d.useState)(!1);(0,d.useRef)(!1);let j=(0,d.useCallback)(()=>{let a=g.current;return a&&a.scrollHeight>a.clientHeight+1?a:null},[]);return(0,d.useCallback)(()=>{let a=j();return a?a.scrollTop:0},[j]),(0,d.useCallback)(a=>{let b=j();b&&(b.scrollTop=a)},[j]),{ref:g,showBackToTop:h,scrollToTop:(0,d.useCallback)(()=>{let a=j();a&&a.scrollTo({top:0,behavior:"smooth"}),i(!1)},[j])}}c(2560)},71494:(a,b,c)=>{c.r(b),c.d(b,{default:()=>d});let d=(0,c(97954).registerClientReference)(function(){throw Error("Attempted to call the default export of \"C:\\\\Users\\\\Moe\\\\Documents\\\\GitHub\\\\FLUJO\\\\src\\\\app\\\\waves\\\\page.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"C:\\Users\\Moe\\Documents\\GitHub\\FLUJO\\src\\app\\waves\\page.tsx","default")},84896:(a,b,c)=>{c.r(b),c.d(b,{default:()=>W});var d=c(21124),e=c(38301),f=c(54573),g=c(79515),h=c(53773),i=c(41893),j=c(81637),k=c(8521),l=c(88745),m=c(91059),n=c(84099),o=c(98540),p=c(42819);let q=(0,p.h)("frontend/services/waves");class r{async list(){try{let a=await fetch("/api/waves");if(!a.ok)throw Error(`HTTP ${a.status}`);return await a.json()}catch(a){return q.warn("Failed to list waves",a),{paused:!1,generatedAt:new Date().toISOString(),waves:[],orphans:[]}}}}let s=new r;var t=c(61560),u=c(2560),v=c(49351),w=c(46973),x=c(95791);c(71763);var y=c(48317),z=c(7499),A=c(43312),B=c(88698),C=c(56492),D=c(23246);let E={schedule:{label:"Periodic",color:"#1976d2",timeline:!0},"mcp-poll":{label:"MCP Poll",color:"#7b1fa2",timeline:!0},"url-watch":{label:"URL Watch",color:"#0288d1",timeline:!0},webhook:{label:"Webhook",color:"#2e7d32",timeline:!1},"file-watch":{label:"File Watcher",color:"#ed6c02",timeline:!1},"flow-event":{label:"Event",color:"#616161",timeline:!1}};var F=c(19290);let G={"1h":36e5,"6h":216e5,"1d":864e5},H=["1h","6h","1d"];function I(a,b,c,d=24,e){if(!a||"string"!=typeof a||!a.trim()||!Number.isFinite(b)||!Number.isFinite(c)||c<=0)return[];let f=b+c,g=[];try{let c=e?new F.l4(a.trim(),{timezone:e}):new F.l4(a.trim()),h=new Date(b-1);for(let a=0;a<d;a++){let a=c.nextRun(h);if(!a)break;let b=a.getTime();if(b>f)break;g.push(b),h=a}}catch{return[]}return g}function J(a,b){if(null==a||!Number.isFinite(a))return"no scheduled run";let c=a-b;if(c<=0)return"due now";let d=Math.floor(c/6e4),e=Math.floor(d/1440),f=Math.floor(d%1440/60),g=d%60;return e>0?`in ${e}d ${f}h`:f>0?`in ${f}h ${String(g).padStart(2,"0")}m`:`in ${g}m`}var K=c(88970);function L({subflows:a,depth:b=0}){return a&&0!==a.length?(0,d.jsx)(j.default,{sx:{pl:1.5*(0!==b),mt:.25},children:a.map((a,c)=>(0,d.jsxs)(j.default,{sx:{borderLeft:b>0?"1px dashed rgba(0,0,0,0.2)":"none",pl:+(b>0)},children:[(0,d.jsxs)(j.default,{sx:{display:"flex",alignItems:"center",gap:.5},children:[(0,d.jsx)(K.A,{sx:{fontSize:12,opacity:.6}}),(0,d.jsxs)(g.A,{variant:"caption",sx:{opacity:a.missing?.6:.85,fontStyle:a.missing?"italic":"normal"},children:[a.flowName??a.flowId,a.missing?" (missing)":"",a.truncated?" …":""]})]}),a.children.length>0&&(0,d.jsx)(L,{subflows:a.children,depth:b+1})]},`${a.flowId}-${c}`))}):null}var M=c(60610);function N(a,b){return`${a}#${b}`}let O={trigger:function({data:a}){var b;let{chainNode:c,now:e,runAt:f,isRoot:k,hasSuccessors:l,expanded:m,pinned:n}=a,o=E[b=c.triggerKind]??{label:b,color:"#616161",timeline:!1},p="";"timeline"===c.timing.mode?p=k?J(f,e):"on schedule":"fixed"===c.timing.mode?p="fires when it happens":"event"===c.timing.mode&&(p="signal"===c.timing.via?`on signal "${c.timing.topic??""}"`:"when its upstream runs");let q=c.emittedSignals??[];return(0,d.jsxs)(j.default,{sx:{minWidth:220,maxWidth:260,borderRadius:1,border:"1px solid rgba(0,0,0,0.15)",borderTop:`4px solid ${o.color}`,outline:n||m?`2px solid ${o.color}`:"none",outlineOffset:2*!!n,bgcolor:"background.paper",boxShadow:n?6:m?4:2,p:1,opacity:c.enabled?1:.55,transition:"box-shadow 120ms ease, outline-color 120ms ease"},children:[(0,d.jsx)(x.h7,{type:"target",position:w.yX.Left,style:{background:o.color}}),(0,d.jsx)(x.h7,{type:"target",position:w.yX.Top,id:"up",style:{background:o.color}}),(0,d.jsxs)(j.default,{sx:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:.5},children:[(0,d.jsx)(i.A,{label:o.label,size:"small",sx:{bgcolor:o.color,color:"#fff",height:18,fontSize:10}}),k&&(0,d.jsx)(g.A,{variant:"caption",sx:{opacity:.6},children:"root"})]}),(0,d.jsx)(g.A,{variant:"subtitle2",sx:{mt:.5,fontWeight:600,lineHeight:1.2},noWrap:!0,title:c.name,children:c.name}),(0,d.jsx)(g.A,{variant:"caption",sx:{display:"block",opacity:.75},noWrap:!0,title:c.flowName??c.flowId,children:c.flowName??c.flowId}),(0,d.jsx)(g.A,{variant:"caption",sx:{display:"block",mt:.25,color:o.color,fontWeight:500},children:p}),q.length>0&&(0,d.jsxs)(j.default,{sx:{mt:.5},children:[(0,d.jsxs)(j.default,{sx:{display:"flex",alignItems:"center",gap:.5,mb:.25},children:[(0,d.jsx)(B.A,{sx:{fontSize:13,color:"#7b1fa2"}}),(0,d.jsx)(g.A,{variant:"caption",sx:{opacity:.7},children:"Signals"})]}),(0,d.jsx)(h.A,{direction:"row",spacing:.5,flexWrap:"wrap",useFlexGap:!0,children:q.map(a=>(0,d.jsx)(A.A,{title:a.direct?"Emitted by this flow":"Emitted via a subflow",arrow:!0,children:(0,d.jsx)(i.A,{label:a.topic,size:"small",variant:a.direct?"filled":"outlined",sx:{height:18,fontSize:10,bgcolor:a.direct?"rgba(123,31,162,0.12)":"transparent",borderColor:"rgba(123,31,162,0.4)",color:"#7b1fa2"}})},a.topic))})]}),(0,d.jsx)(L,{subflows:c.subflows}),n&&(0,d.jsxs)(j.default,{sx:{display:"flex",alignItems:"center",gap:.25,mt:.5,color:o.color},children:[(0,d.jsx)(D.A,{sx:{fontSize:13}}),(0,d.jsx)(g.A,{variant:"caption",sx:{fontSize:10,fontWeight:600},children:"pinned"})]}),l&&!m&&!n&&(0,d.jsxs)(j.default,{sx:{display:"flex",alignItems:"center",gap:.25,mt:.5,opacity:.55},children:[(0,d.jsx)(C.A,{sx:{fontSize:13,transform:"rotate(90deg)"}}),(0,d.jsx)(g.A,{variant:"caption",sx:{fontSize:10},children:"hover to follow chain"})]}),(0,d.jsx)(x.h7,{type:"source",position:w.yX.Right,style:{background:o.color}}),(0,d.jsx)(x.h7,{type:"source",position:w.yX.Bottom,id:"down",style:{background:o.color}})]})},clock:function(){return(0,d.jsxs)(j.default,{sx:{display:"flex",flexDirection:"column",alignItems:"center",gap:.25,width:84},children:[(0,d.jsx)(j.default,{sx:{width:56,height:56,borderRadius:"50%",display:"flex",alignItems:"center",justifyContent:"center",bgcolor:"primary.main",color:"primary.contrastText",boxShadow:3},children:(0,d.jsx)(M.A,{})}),(0,d.jsx)(g.A,{variant:"caption",sx:{fontWeight:600},children:"now"}),(0,d.jsx)(g.A,{variant:"caption",sx:{opacity:.6,fontSize:10,textAlign:"center"},children:"time →"})]})},tick:function({data:a}){let{label:b}=a;return(0,d.jsxs)(j.default,{sx:{display:"flex",flexDirection:"column",alignItems:"center",transform:"translateX(-50%)",pointerEvents:"none",userSelect:"none"},children:[(0,d.jsx)(g.A,{variant:"caption",sx:{fontSize:10,opacity:.55,whiteSpace:"nowrap"},children:b}),(0,d.jsx)(j.default,{sx:{width:"1px",height:14,bgcolor:"rgba(0,0,0,0.25)",mt:.25}})]})}};function P({wave:a,height:b=460}){let[c,f]=(0,e.useState)(()=>Date.now()),[h,i]=(0,e.useState)(()=>(function(a,b){let c=1/0;for(let d of a.nodes){if("timeline"!==d.timing.mode)continue;let a=d.timing.cron;if(!a)continue;let e=I(a,b,864e5,3);if(e.length>=2){let a=e[1]-e[0];a<c&&(c=a)}}if(!Number.isFinite(c))return"6h";let d=6*c;return d<=G["1h"]?"1h":d<=G["6h"]?"6h":"1d"})(a,Date.now())),[k,l]=(0,e.useState)(null),[m,n]=(0,e.useState)(null),o=(0,e.useRef)(null),p=m??k,q=(0,e.useMemo)(()=>a.nodes.some(a=>"timeline"===a.timing.mode),[a]),r=G[h],s=(0,e.useMemo)(()=>{let b=new Map;for(let c of a.nodes)b.set(c.executionId,c.name);return b},[a]),t=(0,e.useMemo)(()=>(function(a){let{wave:b,now:c,windowMs:d,hoveredKey:e,timezone:f}=a,{nodeById:g,succ:h,edgeByPair:i,rootIds:j,parentOf:k}=function(a){let b=new Map;for(let c of a.nodes)b.set(c.executionId,c);let c=new Map,d=new Map;for(let b of a.nodes)c.set(b.executionId,[]),d.set(b.executionId,[]);let e=new Map;for(let f of a.edges)b.has(f.fromExecutionId)&&b.has(f.toExecutionId)&&(c.get(f.fromExecutionId).push(f.toExecutionId),d.get(f.toExecutionId).push(f.fromExecutionId),e.set(`${f.fromExecutionId}->${f.toExecutionId}`,f));for(let[,a]of c)a.sort();let f=a.rootExecutionIds.filter(a=>b.has(a));0===f.length&&(f=a.nodes.filter(a=>(d.get(a.executionId)?.length??0)===0).map(a=>a.executionId)),f=[...f].sort();let g=new Map;{let a=new Set(f),b=[...f];for(;b.length>0;){let d=b.shift();for(let e of c.get(d)??[])a.has(e)||(a.add(e),g.set(e,d),b.push(e))}}return{nodeById:b,succ:c,preds:d,edgeByPair:e,rootIds:f,parentOf:g}}(b),l=[];for(let a of j){let b=g.get(a);if("timeline"===b.timing.mode){let e=I(b.timing.cron,c,d,void 0,f);if(e.length>0)e.forEach((b,c)=>l.push({baseId:a,occ:c,runAt:b}));else{let c=b.timing.nextRun?Date.parse(b.timing.nextRun):NaN;l.push({baseId:a,occ:0,runAt:Number.isFinite(c)?c:null})}}else l.push({baseId:a,occ:0,runAt:null})}let m=e?function(a){let b=a.lastIndexOf("#");return b>=0?a.slice(0,b):a}(e):null,n=e?function(a){let b=a.lastIndexOf("#");return b>=0?Number(a.slice(b+1)):0}(e):null,o=new Set,p=null;if(m){let a=m,b=new Set;for(;a&&!b.has(a);){b.add(a),o.add(a);let c=k.get(a);if(!c){p=a;break}a=c}}let q=new Map,r=a=>{if("timeline"!==g.get(a.baseId).timing.mode)return 0;if(null==a.runAt)return 1;var b=a.runAt;if(null==b||!Number.isFinite(b)||d<=0)return 0;let e=b-c;return e<=0?0:Math.min(1,e/d)},s=(a,b,c,d,e,f)=>{let i=N(a,b);if(q.has(i))return;let j=g.get(a);q.set(i,{key:i,baseId:a,occ:b,chainNode:j,isRoot:f,runAt:e,level:c,x:d,y:24+220*c,hasSuccessors:(h.get(a)?.length??0)>0,expanded:o.has(a)&&b===n})},t=(a,b,c,d)=>{if(!(o.has(a)&&b===n))return;let e=(h.get(a)??[]).filter(a=>!q.has(N(a,b)));if(0===e.length)return;let f=(e.length-1)*320;e.forEach((a,e)=>{let g=d-f/2+320*e;s(a,b,c+1,g,null,!1),t(a,b,c+1,g)})};for(let a of l){if(e&&(a.baseId!==p||a.occ!==n))continue;let b=160+620*r(a);s(a.baseId,a.occ,0,b,a.runAt,!0),t(a.baseId,a.occ,0,b)}let u=[];for(let[a,b]of q){let c=b.occ;for(let d of h.get(b.baseId)??[]){let e=N(d,c),f=q.get(e);if(!f)continue;let g=i.get(`${b.baseId}->${d}`);g&&u.push({id:`${a}->${e}`,source:a,target:e,chainEdge:g,recursive:f.level<=b.level})}}return{nodes:[...q.values()],edges:u}})({wave:a,now:c,windowMs:r,hoveredKey:p}),[a,c,r,p]),u=(0,e.useMemo)(()=>{let a=t.nodes.map(a=>({id:a.key,type:"trigger",position:{x:a.x,y:a.y},data:{chainNode:a.chainNode,now:c,runAt:a.runAt,isRoot:a.isRoot,hasSuccessors:a.hasSuccessors,expanded:a.expanded,pinned:a.key===m},draggable:!1,connectable:!1}));return[{id:"__clock__",type:"clock",position:{x:16,y:24},data:{},draggable:!1,selectable:!1,connectable:!1},...q?(function(a,b,c){if(!Number.isFinite(a)||!Number.isFinite(b)||b<=0)return[];let d=b<=G["1h"]?6e5:b<=G["6h"]?36e5:b<=G["1d"]?144e5:Math.max(6e4,Math.round(b/6)),e=[];for(let c=0;c<=b+1&&e.length<200;c+=d)e.push({atMs:a+c,fraction:Math.min(1,c/b),label:function(a){if(a<=0)return"now";let b=Math.round(a/6e4),c=Math.floor(b/60),d=b%60;return 0===c?`${d}m`:0===d?`${c}h`:`${c}h ${d}m`}(c)});return e})(c,r).map((a,b)=>({id:`__tick_${b}__`,type:"tick",position:{x:160+620*a.fraction,y:-24},data:{label:a.label},draggable:!1,selectable:!1,connectable:!1})):[],...a]},[t,c,m,q,r]),v=(0,e.useMemo)(()=>t.edges.map(a=>{let b=a.recursive?"#ed6c02":"signal"===a.chainEdge.via?"#7b1fa2":"#616161",c=`${a.recursive?"↻ ":""}${function(a,b){if("signal"===a.via)return`⚡ ${a.topic??"signal"}`;let c=a.on&&a.on.length>0?a.on.join(" / "):"completes",d=b?`${b} `:"";return`when ${d}${c}`}(a.chainEdge,s.get(a.chainEdge.fromExecutionId))}`;return{id:a.id,source:a.source,target:a.target,sourceHandle:"down",targetHandle:"up",label:c,animated:!a.recursive,markerEnd:{type:w.TG.ArrowClosed,color:b},style:{stroke:b,strokeDasharray:a.recursive?"6 4":void 0},labelStyle:{fontSize:10,fill:b},labelBgStyle:{fill:"#fff",fillOpacity:.85}}}),[t,s]);return(0,d.jsx)(j.default,{sx:{height:b,width:"100%",border:"1px solid rgba(0,0,0,0.1)",borderRadius:1},children:(0,d.jsxs)(x.Gc,{nodes:u,edges:v,nodeTypes:O,fitView:!0,fitViewOptions:{padding:.15},minZoom:.2,nodesDraggable:!1,nodesConnectable:!1,elementsSelectable:!1,zoomOnScroll:!0,zoomOnPinch:!0,zoomOnDoubleClick:!0,panOnScroll:!1,preventScrolling:!0,panOnDrag:!0,onNodeMouseEnter:(a,b)=>{if(o.current&&clearTimeout(o.current),"clock"===b.type||"tick"===b.type)return void l(null);l(b.id)},onNodeMouseLeave:()=>{o.current&&clearTimeout(o.current),o.current=setTimeout(()=>l(null),800)},onNodeClick:(a,b)=>{"clock"!==b.type&&"tick"!==b.type&&n(a=>a===b.id?null:b.id)},onPaneClick:()=>n(null),proOptions:{hideAttribution:!0},children:[(0,d.jsx)(x.VS,{}),(0,d.jsx)(x.H2,{showInteractive:!1}),q&&(0,d.jsx)(x.Zk,{position:"top-right",children:(0,d.jsx)(y.A,{size:"small",exclusive:!0,value:h,onChange:(a,b)=>b&&i(b),sx:{bgcolor:"background.paper",boxShadow:1},children:H.map(a=>(0,d.jsx)(z.A,{value:a,sx:{px:1,py:.25},children:a},a))})}),(0,d.jsx)(x.Zk,{position:"bottom-right",children:(0,d.jsx)(g.A,{variant:"caption",sx:{opacity:.55,bgcolor:"background.paper",px:.5,borderRadius:.5},children:m?"chain pinned — click the background to release":"hover a card to follow its chain \xb7 click to pin"})})]})})}function Q(a){return(0,d.jsx)(x.Ln,{children:(0,d.jsx)(P,{...a})})}function R(a){let b=a.nodes.filter(b=>a.rootExecutionIds.includes(b.executionId)).map(a=>a.name);return b.length>0?b.join(", "):"Wave"}function S({wave:a,selected:b,now:c,onSelect:e}){let k=a.nodes.some(a=>"timeline"===a.timing.mode),l=k?function(a){let b=null;for(let c of a.nodes)if("timeline"===c.timing.mode&&c.timing.nextRun){let a=Date.parse(c.timing.nextRun);Number.isFinite(a)&&(null===b||a<b)&&(b=a)}return b}(a):null;return(0,d.jsxs)(f.A,{variant:"outlined",onClick:e,sx:{p:1.25,cursor:"pointer",borderColor:b?"primary.main":void 0,borderWidth:b?2:1,bgcolor:b?"action.selected":"background.paper",transition:"border-color 120ms ease, background-color 120ms ease","&:hover":{borderColor:"primary.light"}},children:[(0,d.jsx)(g.A,{variant:"subtitle2",sx:{fontWeight:600,lineHeight:1.25},noWrap:!0,title:R(a),children:R(a)}),(0,d.jsxs)(h.A,{direction:"row",spacing:.5,flexWrap:"wrap",useFlexGap:!0,sx:{mt:.75},children:[(0,d.jsx)(i.A,{label:`${a.nodes.length} trigger(s)`,size:"small",variant:"outlined"}),k&&(0,d.jsx)(i.A,{label:"time-based",size:"small",color:"info",variant:"outlined"}),a.hasCycle&&(0,d.jsx)(i.A,{label:"recursive",color:"warning",size:"small"})]}),k&&(0,d.jsxs)(j.default,{sx:{display:"flex",alignItems:"center",gap:.5,mt:.75,opacity:.75},children:[(0,d.jsx)(o.A,{sx:{fontSize:14}}),(0,d.jsxs)(g.A,{variant:"caption",children:["next run ",l?J(l,c):"not scheduled"]})]})]})}function T({height:a="100%"}){let[b,c]=(0,e.useState)(null),[o,p]=(0,e.useState)(!0),[q,r]=(0,e.useState)(()=>Date.now()),[w,x]=(0,u.Xk)("flujo-ui:waves:selected",null),{ref:y,showBackToTop:z,scrollToTop:A}=(0,t.R)("flujo-ui:scroll:waves",{deps:[b]});(0,e.useCallback)(async()=>{c(await s.list()),p(!1)},[]);let B=(0,e.useMemo)(()=>b?.waves??[],[b]),C=b?.orphans??[],D=(0,e.useMemo)(()=>0===B.length?null:B.find(a=>a.id===w)??B[0],[B,w]);return o?(0,d.jsx)(j.default,{sx:{display:"flex",justifyContent:"center",alignItems:"center",height:a,minHeight:0},children:(0,d.jsx)(k.default,{})}):(0,d.jsxs)(j.default,{sx:{p:3,height:a,boxSizing:"border-box",display:"flex",flexDirection:"column",minHeight:0},children:[(0,d.jsxs)(j.default,{sx:{display:"flex",alignItems:"center",gap:1,mb:1},children:[(0,d.jsx)(n.A,{color:"primary"}),(0,d.jsx)(g.A,{variant:"h5",sx:{fontWeight:600},children:"Waves"}),(0,d.jsx)(i.A,{label:"experimental",size:"small",color:"warning",variant:"outlined"}),b?.paused&&(0,d.jsx)(i.A,{label:"Scheduler paused",color:"warning",size:"small"})]}),(0,d.jsx)(g.A,{variant:"body2",sx:{opacity:.75,mb:2},children:"A read-only picture of how your Automation triggers chain together via signals and completion events. Pick a wave on the left to open it on the canvas — the clock on the left is “now”, and scheduled runs approach from the right. Hover a card to follow its chain, or click it to pin the chain open (click the background to release); use the window control to zoom the timeline out. Nothing here arms or fires anything."}),0===B.length&&0===C.length&&(0,d.jsx)(l.A,{severity:"info",children:"No triggers to visualize yet. Create some triggers (and link them with flow-event triggers or signal nodes) to see waves here."}),(B.length>0||C.length>0)&&(0,d.jsxs)(j.default,{sx:{flex:1,minHeight:0,display:"flex",gap:2},children:[(0,d.jsxs)(j.default,{ref:y,sx:{width:320,flexShrink:0,overflow:"auto",pr:.5},children:[(0,d.jsx)(h.A,{spacing:1,children:B.map(a=>(0,d.jsx)(S,{wave:a,now:q,selected:D?.id===a.id,onSelect:()=>x(a.id)},a.id))}),C.length>0&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(m.A,{sx:{my:2}}),(0,d.jsx)(g.A,{variant:"subtitle2",sx:{fontWeight:600,mb:.5},children:"Unlinked event triggers"}),(0,d.jsx)(g.A,{variant:"caption",sx:{display:"block",opacity:.75,mb:1},children:"These flow-event triggers reference a source that matches no known producer, so they never start from an organic trigger."}),(0,d.jsx)(h.A,{direction:"row",spacing:.5,flexWrap:"wrap",useFlexGap:!0,children:C.map(a=>(0,d.jsx)(i.A,{label:`${a.name} → ${a.flowName??a.flowId}`,size:"small"},a.executionId))})]}),(0,d.jsx)(v.A,{show:z,onClick:A})]}),(0,d.jsx)(j.default,{sx:{flex:1,minHeight:0},children:D?(0,d.jsxs)(f.A,{variant:"outlined",sx:{p:1.5,height:"100%",display:"flex",flexDirection:"column",minHeight:0},children:[(0,d.jsxs)(j.default,{sx:{display:"flex",alignItems:"center",gap:1,mb:1},children:[(0,d.jsx)(g.A,{variant:"subtitle1",sx:{fontWeight:600},noWrap:!0,title:R(D),children:R(D)}),(0,d.jsx)(i.A,{label:`${D.nodes.length} trigger(s)`,size:"small",variant:"outlined"}),D.hasCycle&&(0,d.jsx)(i.A,{label:"recursive",color:"warning",size:"small"})]}),(0,d.jsx)(j.default,{sx:{flex:1,minHeight:0},children:(0,d.jsx)(Q,{wave:D,height:"100%"},D.id)})]}):(0,d.jsx)(j.default,{sx:{height:"100%",display:"flex",alignItems:"center",justifyContent:"center",opacity:.6},children:(0,d.jsx)(g.A,{variant:"body2",children:"Select a wave to open it."})})})]})]})}(0,p.h)("frontend/components/Waves");let U={xs:"calc(100dvh - var(--app-bar-height))",md:"calc(100dvh - var(--app-bar-height) - var(--active-subnav-height))"},V=(0,p.h)("app/waves/page");function W(){return V.debug("Rendering WavesPage"),(0,d.jsx)(T,{height:U})}}};
@@ -0,0 +1 @@
1
+ exports.id=2949,exports.ids=[2949],exports.modules={19290:(a,b,c)=>{"use strict";function d(a){return Date.UTC(a.y,a.m-1,a.d,a.h,a.i,a.s)}function e(a,b){return a.y===b.y&&a.m===b.m&&a.d===b.d&&a.h===b.h&&a.i===b.i&&a.s===b.s}function f(a,b,c){return g(function(a,b){let c=new Date(Date.parse(a));if(isNaN(c))throw Error("Invalid ISO8601 passed to timezone parser.");let d=a.substring(9);return d.includes("Z")||d.includes("+")||d.includes("-")?i(c.getUTCFullYear(),c.getUTCMonth()+1,c.getUTCDate(),c.getUTCHours(),c.getUTCMinutes(),c.getUTCSeconds(),"Etc/UTC"):i(c.getFullYear(),c.getMonth()+1,c.getDate(),c.getHours(),c.getMinutes(),c.getSeconds(),b)}(a,b),c)}function g(a,b){let c=new Date(d(a)),f=h(c,a.tz),g=d(a),i=d(f),j=new Date(c.getTime()+(g-i)),k=h(j,a.tz);if(e(k,a)){let b=new Date(j.getTime()-36e5);return e(h(b,a.tz),a)?b:j}let l=new Date(j.getTime()+d(a)-d(k));if(e(h(l,a.tz),a))return l;if(b)throw Error("Invalid date passed to fromTZ()");return j.getTime()>l.getTime()?j:l}function h(a,b){let c;try{c=new Intl.DateTimeFormat("en-US",{timeZone:b,year:"numeric",month:"numeric",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric",hour12:!1}).formatToParts(a)}catch(c){let a=c instanceof Error?c.message:String(c);throw RangeError(`toTZ: Invalid timezone '${b}' or date. Please provide a valid IANA timezone (e.g., 'America/New_York', 'Europe/Stockholm'). Original error: ${a}`)}let d={year:0,month:0,day:0,hour:0,minute:0,second:0};for(let a of c)("year"===a.type||"month"===a.type||"day"===a.type||"hour"===a.type||"minute"===a.type||"second"===a.type)&&(d[a.type]=parseInt(a.value,10));if(isNaN(d.year)||isNaN(d.month)||isNaN(d.day)||isNaN(d.hour)||isNaN(d.minute)||isNaN(d.second))throw Error(`toTZ: Failed to parse all date components from timezone '${b}'. This may indicate an invalid date or timezone configuration. Parsed components: ${JSON.stringify(d)}`);return 24===d.hour&&(d.hour=0),{y:d.year,m:d.month,d:d.day,h:d.hour,i:d.minute,s:d.second,tz:b}}function i(a,b,c,d,e,f,g){return{y:a,m:b,d:c,h:d,i:e,s:f,tz:g}}c.d(b,{l4:()=>q});var j=[1,2,4,8,16],k=class{pattern;timezone;mode;alternativeWeekdays;sloppyRanges;second;minute;hour;day;month;dayOfWeek;year;lastDayOfMonth;lastWeekday;nearestWeekdays;starDOM;starDOW;starYear;useAndLogic;constructor(a,b,c){this.pattern=a,this.timezone=b,this.mode=c?.mode??"auto",this.alternativeWeekdays=c?.alternativeWeekdays??!1,this.sloppyRanges=c?.sloppyRanges??!1,this.second=Array(60).fill(0),this.minute=Array(60).fill(0),this.hour=Array(24).fill(0),this.day=Array(31).fill(0),this.month=Array(12).fill(0),this.dayOfWeek=Array(7).fill(0),this.year=Array(1e4).fill(0),this.lastDayOfMonth=!1,this.lastWeekday=!1,this.nearestWeekdays=Array(31).fill(0),this.starDOM=!1,this.starDOW=!1,this.starYear=!1,this.useAndLogic=!1,this.parse()}parse(){if(!("string"==typeof this.pattern||this.pattern instanceof String))throw TypeError("CronPattern: Pattern has to be of type string.");this.pattern.indexOf("@")>=0&&(this.pattern=this.handleNicknames(this.pattern).trim());let a=this.pattern.match(/\S+/g)||[""],b=a.length;if(a.length<5||a.length>7)throw TypeError("CronPattern: invalid configuration format ('"+this.pattern+"'), exactly five, six, or seven space separated parts are required.");if("auto"!==this.mode){let a;switch(this.mode){case"5-part":a=5;break;case"6-part":a=6;break;case"7-part":a=7;break;case"5-or-6-parts":a=[5,6];break;case"6-or-7-parts":a=[6,7];break;default:a=0}if(!(Array.isArray(a)?a.includes(b):b===a)){let c=Array.isArray(a)?a.join(" or "):a.toString();throw TypeError(`CronPattern: mode '${this.mode}' requires exactly ${c} parts, but pattern '${this.pattern}' has ${b} parts.`)}}if(5===a.length&&a.unshift("0"),6===a.length&&a.push("*"),"LW"===a[3].toUpperCase()?(this.lastWeekday=!0,a[3]=""):a[3].toUpperCase().indexOf("L")>=0&&(a[3]=a[3].replace(/L/gi,""),this.lastDayOfMonth=!0),"*"==a[3]&&(this.starDOM=!0),"*"==a[6]&&(this.starYear=!0),a[4].length>=3&&(a[4]=this.replaceAlphaMonths(a[4])),a[5].length>=3&&(a[5]=this.alternativeWeekdays?this.replaceAlphaDaysQuartz(a[5]):this.replaceAlphaDays(a[5])),a[5].startsWith("+")&&(this.useAndLogic=!0,a[5]=a[5].substring(1),""===a[5]))throw TypeError("CronPattern: Day-of-week field cannot be empty after '+' modifier.");switch("*"==a[5]&&(this.starDOW=!0),this.pattern.indexOf("?")>=0&&(a[0]=a[0].replace(/\?/g,"*"),a[1]=a[1].replace(/\?/g,"*"),a[2]=a[2].replace(/\?/g,"*"),a[3]=a[3].replace(/\?/g,"*"),a[4]=a[4].replace(/\?/g,"*"),a[5]=a[5].replace(/\?/g,"*"),a[6]&&(a[6]=a[6].replace(/\?/g,"*"))),this.mode){case"5-part":a[0]="0",a[6]="*";break;case"6-part":case"5-or-6-parts":a[6]="*"}this.throwAtIllegalCharacters(a),this.partToArray("second",a[0],0,1),this.partToArray("minute",a[1],0,1),this.partToArray("hour",a[2],0,1),this.partToArray("day",a[3],-1,1),this.partToArray("month",a[4],-1,1);let c=this.alternativeWeekdays?-1:0;this.partToArray("dayOfWeek",a[5],c,63),this.partToArray("year",a[6],0,1),!this.alternativeWeekdays&&this.dayOfWeek[7]&&(this.dayOfWeek[0]=this.dayOfWeek[7])}partToArray(a,b,c,d){let e=this[a],f="day"===a&&this.lastDayOfMonth,g="day"===a&&this.lastWeekday;if(""===b&&!f&&!g)throw TypeError("CronPattern: configuration entry "+a+" ("+b+") is empty, check for trailing spaces.");if("*"===b)return e.fill(d);let h=b.split(",");if(h.length>1)for(let b=0;b<h.length;b++)this.partToArray(a,h[b],c,d);else -1!==b.indexOf("-")&&-1!==b.indexOf("/")?this.handleRangeWithStepping(b,a,c,d):-1!==b.indexOf("-")?this.handleRange(b,a,c,d):-1!==b.indexOf("/")?this.handleStepping(b,a,c,d):""!==b&&this.handleNumber(b,a,c,d)}throwAtIllegalCharacters(a){for(let b=0;b<a.length;b++)if((3===b?/[^/*0-9,\-WwLl]+/:5===b?/[^/*0-9,\-#Ll]+/:/[^/*0-9,\-]+/).test(a[b]))throw TypeError("CronPattern: configuration entry "+b+" ("+a[b]+") contains illegal characters.")}handleNumber(a,b,c,d){let e=this.extractNth(a,b),f=a.toUpperCase().includes("W");if("day"!==b&&f)throw TypeError("CronPattern: Nearest weekday modifier (W) only allowed in day-of-month.");f&&(b="nearestWeekdays");let g=parseInt(e[0],10)+c;if(isNaN(g))throw TypeError("CronPattern: "+b+" is not a number: '"+a+"'");this.setPart(b,g,e[1]||d)}setPart(a,b,c){if(!Object.prototype.hasOwnProperty.call(this,a))throw TypeError("CronPattern: Invalid part specified: "+a);if("dayOfWeek"===a){if(7===b&&(b=0),b<0||b>6)throw RangeError("CronPattern: Invalid value for dayOfWeek: "+b);this.setNthWeekdayOfMonth(b,c);return}if("second"===a||"minute"===a){if(b<0||b>=60)throw RangeError("CronPattern: Invalid value for "+a+": "+b)}else if("hour"===a){if(b<0||b>=24)throw RangeError("CronPattern: Invalid value for "+a+": "+b)}else if("day"===a||"nearestWeekdays"===a){if(b<0||b>=31)throw RangeError("CronPattern: Invalid value for "+a+": "+b)}else if("month"===a){if(b<0||b>=12)throw RangeError("CronPattern: Invalid value for "+a+": "+b)}else if("year"===a&&(b<1||b>=1e4))throw RangeError("CronPattern: Invalid value for "+a+": "+b+" (supported range: 1-9999)");this[a][b]=c}validateNotNaN(a,b){if(isNaN(a))throw TypeError(b)}validateRange(a,b,c,d,e){if(a>b)throw TypeError("CronPattern: From value is larger than to value: '"+e+"'");if(void 0!==c){if(0===c)throw TypeError("CronPattern: Syntax error, illegal stepping: 0");if(c>this[d].length)throw TypeError("CronPattern: Syntax error, steps cannot be greater than maximum value of part ("+this[d].length+")")}}handleRangeWithStepping(a,b,c,d){if(a.toUpperCase().includes("W"))throw TypeError("CronPattern: Syntax error, W is not allowed in ranges with stepping.");let e=this.extractNth(a,b),f=e[0].match(/^(\d+)-(\d+)\/(\d+)$/);if(null===f)throw TypeError("CronPattern: Syntax error, illegal range with stepping: '"+a+"'");let[,g,h,i]=f,j=parseInt(g,10)+c,k=parseInt(h,10)+c,l=parseInt(i,10);this.validateNotNaN(j,"CronPattern: Syntax error, illegal lower range (NaN)"),this.validateNotNaN(k,"CronPattern: Syntax error, illegal upper range (NaN)"),this.validateNotNaN(l,"CronPattern: Syntax error, illegal stepping: (NaN)"),this.validateRange(j,k,l,b,a);for(let a=j;a<=k;a+=l)this.setPart(b,a,e[1]||d)}extractNth(a,b){let c=a,d;if(c.includes("#")){if("dayOfWeek"!==b)throw Error("CronPattern: nth (#) only allowed in day-of-week field");d=c.split("#")[1],c=c.split("#")[0]}else if(c.toUpperCase().endsWith("L")){if("dayOfWeek"!==b)throw Error("CronPattern: L modifier only allowed in day-of-week field (use L alone for day-of-month)");d="L",c=c.slice(0,-1)}return[c,d]}handleRange(a,b,c,d){if(a.toUpperCase().includes("W"))throw TypeError("CronPattern: Syntax error, W is not allowed in a range.");let e=this.extractNth(a,b),f=e[0].split("-");if(2!==f.length)throw TypeError("CronPattern: Syntax error, illegal range: '"+a+"'");let g=parseInt(f[0],10)+c,h=parseInt(f[1],10)+c;this.validateNotNaN(g,"CronPattern: Syntax error, illegal lower range (NaN)"),this.validateNotNaN(h,"CronPattern: Syntax error, illegal upper range (NaN)"),this.validateRange(g,h,void 0,b,a);for(let a=g;a<=h;a++)this.setPart(b,a,e[1]||d)}handleStepping(a,b,c,d){if(a.toUpperCase().includes("W"))throw TypeError("CronPattern: Syntax error, W is not allowed in parts with stepping.");let e=this.extractNth(a,b),f=e[0].split("/");if(2!==f.length)throw TypeError("CronPattern: Syntax error, illegal stepping: '"+a+"'");if(this.sloppyRanges)""===f[0]&&(f[0]="*");else{if(""===f[0])throw TypeError("CronPattern: Syntax error, stepping with missing prefix ('"+a+"') is not allowed. Use wildcard (*/step) or range (min-max/step) instead.");if("*"!==f[0])throw TypeError("CronPattern: Syntax error, stepping with numeric prefix ('"+a+"') is not allowed. Use wildcard (*/step) or range (min-max/step) instead.")}let g=0;"*"!==f[0]&&(g=parseInt(f[0],10)+c);let h=parseInt(f[1],10);this.validateNotNaN(h,"CronPattern: Syntax error, illegal stepping: (NaN)"),this.validateRange(0,this[b].length-1,h,b,a);for(let a=g;a<this[b].length;a+=h)this.setPart(b,a,e[1]||d)}replaceAlphaDays(a){return a.replace(/-sun/gi,"-7").replace(/sun/gi,"0").replace(/mon/gi,"1").replace(/tue/gi,"2").replace(/wed/gi,"3").replace(/thu/gi,"4").replace(/fri/gi,"5").replace(/sat/gi,"6")}replaceAlphaDaysQuartz(a){return a.replace(/sun/gi,"1").replace(/mon/gi,"2").replace(/tue/gi,"3").replace(/wed/gi,"4").replace(/thu/gi,"5").replace(/fri/gi,"6").replace(/sat/gi,"7")}replaceAlphaMonths(a){return a.replace(/jan/gi,"1").replace(/feb/gi,"2").replace(/mar/gi,"3").replace(/apr/gi,"4").replace(/may/gi,"5").replace(/jun/gi,"6").replace(/jul/gi,"7").replace(/aug/gi,"8").replace(/sep/gi,"9").replace(/oct/gi,"10").replace(/nov/gi,"11").replace(/dec/gi,"12")}handleNicknames(a){let b=a.trim().toLowerCase();if("@yearly"===b||"@annually"===b)return"0 0 1 1 *";if("@monthly"===b)return"0 0 1 * *";if("@weekly"===b)return"0 0 * * 0";if("@daily"===b||"@midnight"===b)return"0 0 * * *";if("@hourly"===b)return"0 * * * *";if("@reboot"===b)throw TypeError("CronPattern: @reboot is not supported in this environment. This is an event-based trigger that requires system startup detection.");return a}setNthWeekdayOfMonth(a,b){if("number"!=typeof b&&"L"===b.toUpperCase())this.dayOfWeek[a]=32|this.dayOfWeek[a];else if(63===b)this.dayOfWeek[a]=63;else if(b<6&&b>0)this.dayOfWeek[a]=this.dayOfWeek[a]|j[b-1];else throw TypeError(`CronPattern: nth weekday out of range, should be 1-5 or L. Value: ${b}, Type: ${typeof b}`)}},l=[31,28,31,30,31,30,31,31,30,31,30,31],m=[["month","year",0],["day","month",-1],["hour","day",0],["minute","hour",0],["second","minute",0]],n=class a{tz;ms;second;minute;hour;day;month;year;constructor(b,c){if(this.tz=c,b&&b instanceof Date)if(isNaN(b))throw TypeError("CronDate: Invalid date passed to CronDate constructor");else this.fromDate(b);else if(null==b)this.fromDate(new Date);else if(b&&"string"==typeof b)this.fromString(b);else if(b instanceof a)this.fromCronDate(b);else throw TypeError("CronDate: Invalid type ("+typeof b+") passed to CronDate constructor")}getLastDayOfMonth(a,b){return 1!==b?l[b]:new Date(Date.UTC(a,b+1,0)).getUTCDate()}getLastWeekday(a,b){let c=this.getLastDayOfMonth(a,b),d=new Date(Date.UTC(a,b,c)).getUTCDay();return 0===d?c-2:6===d?c-1:c}getNearestWeekday(a,b,c){let d=this.getLastDayOfMonth(a,b);if(c>d)return -1;let e=new Date(Date.UTC(a,b,c)).getUTCDay();return 0===e?c===d?c-2:c+1:6===e?1===c?c+2:c-1:c}isNthWeekdayOfMonth(a,b,c,d){let e=new Date(Date.UTC(a,b,c)).getUTCDay(),f=0;for(let d=1;d<=c;d++)new Date(Date.UTC(a,b,d)).getUTCDay()===e&&f++;if(63&d&&j[f-1]&d)return!0;if(32&d){let d=this.getLastDayOfMonth(a,b);for(let f=c+1;f<=d;f++)if(new Date(Date.UTC(a,b,f)).getUTCDay()===e)return!1;return!0}return!1}fromDate(a){if(void 0!==this.tz)if("number"==typeof this.tz)this.ms=a.getUTCMilliseconds(),this.second=a.getUTCSeconds(),this.minute=a.getUTCMinutes()+this.tz,this.hour=a.getUTCHours(),this.day=a.getUTCDate(),this.month=a.getUTCMonth(),this.year=a.getUTCFullYear(),this.apply();else try{let b=h(a,this.tz);this.ms=a.getMilliseconds(),this.second=b.s,this.minute=b.i,this.hour=b.h,this.day=b.d,this.month=b.m-1,this.year=b.y}catch(b){let a=b instanceof Error?b.message:String(b);throw TypeError(`CronDate: Failed to convert date to timezone '${this.tz}'. This may happen with invalid timezone names or dates. Original error: ${a}`)}else this.ms=a.getMilliseconds(),this.second=a.getSeconds(),this.minute=a.getMinutes(),this.hour=a.getHours(),this.day=a.getDate(),this.month=a.getMonth(),this.year=a.getFullYear()}fromCronDate(a){this.tz=a.tz,this.year=a.year,this.month=a.month,this.day=a.day,this.hour=a.hour,this.minute=a.minute,this.second=a.second,this.ms=a.ms}apply(){if(!(this.month>11)&&!(this.month<0)&&!(this.day>l[this.month])&&!(this.day<1)&&!(this.hour>59)&&!(this.minute>59)&&!(this.second>59)&&!(this.hour<0)&&!(this.minute<0)&&!(this.second<0))return!1;{let a=new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms));return this.ms=a.getUTCMilliseconds(),this.second=a.getUTCSeconds(),this.minute=a.getUTCMinutes(),this.hour=a.getUTCHours(),this.day=a.getUTCDate(),this.month=a.getUTCMonth(),this.year=a.getUTCFullYear(),!0}}fromString(a){if("number"!=typeof this.tz)return this.fromDate(f(a,this.tz));{let b=f(a);this.ms=b.getUTCMilliseconds(),this.second=b.getUTCSeconds(),this.minute=b.getUTCMinutes(),this.hour=b.getUTCHours(),this.day=b.getUTCDate(),this.month=b.getUTCMonth(),this.year=b.getUTCFullYear(),this.apply()}}findNext(a,b,c,d){return this._findMatch(a,b,c,d,1)}_findMatch(a,b,c,d,e){let f=this[b],g;c.lastDayOfMonth&&(g=this.getLastDayOfMonth(this.year,this.month));let h=c.starDOW||"day"!=b?void 0:new Date(Date.UTC(this.year,this.month,1,0,0,0,0)).getUTCDay(),i=this[b]+d,j=1===e?a=>a<c[b].length:a=>a>=0;for(let k=i;j(k);k+=e){let e=c[b][k];if("day"===b&&!e){for(let a=0;a<c.nearestWeekdays.length;a++)if(c.nearestWeekdays[a]){let b=this.getNearestWeekday(this.year,this.month,a-d);if(-1===b)continue;if(b===k-d){e=1;break}}}if("day"===b&&c.lastWeekday&&k-d===this.getLastWeekday(this.year,this.month)&&(e=1),"day"===b&&c.lastDayOfMonth&&k-d==g&&(e=1),"day"===b&&!c.starDOW){let b=c.dayOfWeek[(h+(k-d-1))%7];if(b&&63&b)b=+!!this.isNthWeekdayOfMonth(this.year,this.month,k-d,b);else if(b)throw Error(`CronDate: Invalid value for dayOfWeek encountered. ${b}`);e=c.useAndLogic||a.domAndDow||c.starDOM?e&&b:e||b}if(e)return this[b]=k-d,f!==this[b]?2:1}return 3}recurse(a,b,c){if(0===c&&!a.starYear){if(this.year>=0&&this.year<a.year.length&&0===a.year[this.year]){let b=-1;for(let c=this.year+1;c<a.year.length&&c<1e4;c++)if(1===a.year[c]){b=c;break}if(-1===b)return null;this.year=b,this.month=0,this.day=1,this.hour=0,this.minute=0,this.second=0,this.ms=0}if(this.year>=1e4)return null}let d=this.findNext(b,m[c][0],a,m[c][2]);if(d>1){let e=c+1;for(;e<m.length;)this[m[e][0]]=-m[e][2],e++;if(3===d){if(this[m[c][1]]++,this[m[c][0]]=-m[c][2],this.apply(),0===c&&!a.starYear){for(;this.year>=0&&this.year<a.year.length&&0===a.year[this.year]&&this.year<1e4;)this.year++;if(this.year>=1e4||this.year>=a.year.length)return null}return this.recurse(a,b,0)}if(this.apply())return this.recurse(a,b,c-1)}return(c+=1)>=m.length?this:(a.starYear?this.year>=3e3:this.year>=1e4)?null:this.recurse(a,b,c)}increment(a,b,c){return this.second+=void 0!==b.interval&&b.interval>1&&c?b.interval:1,this.ms=0,this.apply(),this.recurse(a,b,0)}decrement(a,b){return this.second-=void 0!==b.interval&&b.interval>1?b.interval:1,this.ms=0,this.apply(),this.recurseBackward(a,b,0,0)}recurseBackward(a,b,c,d=0){if(d>1e4)return null;if(0===c&&!a.starYear){if(this.year>=0&&this.year<a.year.length&&0===a.year[this.year]){let b=-1;for(let c=this.year-1;c>=0;c--)if(1===a.year[c]){b=c;break}if(-1===b)return null;this.year=b,this.month=11,this.day=31,this.hour=23,this.minute=59,this.second=59,this.ms=0}if(this.year<0)return null}let e=this.findPrevious(b,m[c][0],a,m[c][2]);if(e>1){let f=c+1;for(;f<m.length;){let b=m[f][0],c=m[f][2],d=this.getMaxPatternValue(b,a,c);this[b]=d,f++}if(3===e){if(this[m[c][1]]--,0===c){let a=this.getLastDayOfMonth(this.year,this.month);this.day>a&&(this.day=a)}if(1===c)if(this.day<=0)this.day=1;else{let a=this.year,b=this.month;for(;b<0;)b+=12,a--;for(;b>11;)b-=12,a++;let c=1!==b?l[b]:new Date(Date.UTC(a,b+1,0)).getUTCDate();this.day>c&&(this.day=c)}this.apply();let e=m[c][0],f=m[c][2],g=this.getMaxPatternValue(e,a,f);if("day"===e){let a=this.getLastDayOfMonth(this.year,this.month);this[e]=Math.min(g,a)}else this[e]=g;if(this.apply(),0===c){let b=m[1][2],c=Math.min(this.getMaxPatternValue("day",a,b),this.getLastDayOfMonth(this.year,this.month));c!==this.day&&(this.day=c,this.hour=this.getMaxPatternValue("hour",a,m[2][2]),this.minute=this.getMaxPatternValue("minute",a,m[3][2]),this.second=this.getMaxPatternValue("second",a,m[4][2]))}if(0===c&&!a.starYear){for(;this.year>=0&&this.year<a.year.length&&0===a.year[this.year];)this.year--;if(this.year<0)return null}return this.recurseBackward(a,b,0,d+1)}if(this.apply())return this.recurseBackward(a,b,c-1,d+1)}return(c+=1)>=m.length?this:this.year<0?null:this.recurseBackward(a,b,c,d+1)}getMaxPatternValue(a,b,c){if("day"===a&&b.lastDayOfMonth||"day"===a&&!b.starDOW)return this.getLastDayOfMonth(this.year,this.month);for(let d=b[a].length-1;d>=0;d--)if(b[a][d])return d-c;return b[a].length-1-c}findPrevious(a,b,c,d){return this._findMatch(a,b,c,d,-1)}getDate(a){return a||void 0===this.tz?new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms):"number"==typeof this.tz?new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute-this.tz,this.second,this.ms)):g(i(this.year,this.month+1,this.day,this.hour,this.minute,this.second,this.tz),!1)}getTime(){return this.getDate(!1).getTime()}match(a,b){if(!a.starYear&&(this.year<0||this.year>=a.year.length||0===a.year[this.year]))return!1;for(let c=0;c<m.length;c++){let d=m[c][0],e=m[c][2],f=this[d];if(f+e<0||f+e>=a[d].length)return!1;let g=a[d][f+e];if("day"===d){if(!g){for(let b=0;b<a.nearestWeekdays.length;b++)if(a.nearestWeekdays[b]){let a=this.getNearestWeekday(this.year,this.month,b-e);if(-1!==a&&a===f){g=1;break}}}if(a.lastWeekday&&f===this.getLastWeekday(this.year,this.month)&&(g=1),a.lastDayOfMonth&&f===this.getLastDayOfMonth(this.year,this.month)&&(g=1),!a.starDOW){let c=new Date(Date.UTC(this.year,this.month,1,0,0,0,0)).getUTCDay(),d=a.dayOfWeek[(c+(f-1))%7];d&&63&d&&(d=+!!this.isNthWeekdayOfMonth(this.year,this.month,f,d)),g=a.useAndLogic||b.domAndDow||a.starDOM?g&&d:g||d}}if(!g)return!1}return!0}};function o(a){return"[object Function]"===Object.prototype.toString.call(a)||"function"==typeof a||a instanceof Function}var p=[],q=class{name;options;_states;fn;getTz(){return this.options.timezone||this.options.utcOffset}applyDayOffset(a){if(void 0!==this.options.dayOffset&&0!==this.options.dayOffset){let b=24*this.options.dayOffset*36e5;return new Date(a.getTime()+b)}return a}constructor(a,b,c){let d,e;if(o(b))e=b;else if("object"==typeof b)d=b;else if(void 0!==b)throw Error("Cron: Invalid argument passed for optionsIn. Should be one of function, or object (options).");if(o(c))e=c;else if("object"==typeof c)d=c;else if(void 0!==c)throw Error("Cron: Invalid argument passed for funcIn. Should be one of function, or object (options).");if(this.name=d?.name,this.options=function(a){if(void 0===a&&(a={}),delete a.name,void 0!==a.legacyMode&&void 0===a.domAndDow?a.domAndDow=!a.legacyMode:void 0===a.domAndDow&&(a.domAndDow=!1),a.legacyMode=!a.domAndDow,a.paused=void 0!==a.paused&&a.paused,a.maxRuns=void 0===a.maxRuns?1/0:a.maxRuns,a.catch=void 0!==a.catch&&a.catch,a.interval=void 0===a.interval?0:parseInt(a.interval.toString(),10),a.utcOffset=void 0===a.utcOffset?void 0:parseInt(a.utcOffset.toString(),10),a.dayOffset=void 0===a.dayOffset?0:parseInt(a.dayOffset.toString(),10),a.unref=void 0!==a.unref&&a.unref,a.mode=void 0===a.mode?"auto":a.mode,a.alternativeWeekdays=void 0!==a.alternativeWeekdays&&a.alternativeWeekdays,a.sloppyRanges=void 0!==a.sloppyRanges&&a.sloppyRanges,!["auto","5-part","6-part","7-part","5-or-6-parts","6-or-7-parts"].includes(a.mode))throw Error("CronOptions: mode must be one of 'auto', '5-part', '6-part', '7-part', '5-or-6-parts', or '6-or-7-parts'.");if(a.startAt&&(a.startAt=new n(a.startAt,a.timezone)),a.stopAt&&(a.stopAt=new n(a.stopAt,a.timezone)),null!==a.interval){if(isNaN(a.interval))throw Error("CronOptions: Supplied value for interval is not a number");if(a.interval<0)throw Error("CronOptions: Supplied value for interval can not be negative")}if(void 0!==a.utcOffset){if(isNaN(a.utcOffset))throw Error("CronOptions: Invalid value passed for utcOffset, should be number representing minutes offset from UTC.");if(a.utcOffset<-870||a.utcOffset>870)throw Error("CronOptions: utcOffset out of bounds.");if(void 0!==a.utcOffset&&a.timezone)throw Error("CronOptions: Combining 'utcOffset' with 'timezone' is not allowed.")}if(!0!==a.unref&&!1!==a.unref)throw Error("CronOptions: Unref should be either true, false or undefined(false).");if(void 0!==a.dayOffset&&0!==a.dayOffset&&isNaN(a.dayOffset))throw Error("CronOptions: Invalid value passed for dayOffset, should be a number representing days to offset.");return a}(d),this._states={kill:!1,blocking:!1,previousRun:void 0,currentRun:void 0,once:void 0,currentTimeout:void 0,maxRuns:d?d.maxRuns:void 0,paused:!!d&&d.paused,pattern:new k("* * * * *",void 0,{mode:"auto"})},a&&(a instanceof Date||"string"==typeof a&&a.indexOf(":")>0)?this._states.once=new n(a,this.getTz()):this._states.pattern=new k(a,this.options.timezone,{mode:this.options.mode,alternativeWeekdays:this.options.alternativeWeekdays,sloppyRanges:this.options.sloppyRanges}),this.name){if(p.find(a=>a.name===this.name))throw Error("Cron: Tried to initialize new named job '"+this.name+"', but name already taken.");p.push(this)}return void 0!==e&&o(e)&&(this.fn=e,this.schedule()),this}nextRun(a){let b=this._next(a);return b?this.applyDayOffset(b.getDate(!1)):null}nextRuns(a,b){void 0!==this._states.maxRuns&&a>this._states.maxRuns&&(a=this._states.maxRuns);let c=b||this._states.currentRun||void 0;return this._enumerateRuns(a,c,"next")}previousRuns(a,b){return this._enumerateRuns(a,b||void 0,"previous")}_enumerateRuns(a,b,c){let d=[],e=b?new n(b,this.getTz()):null,f="next"===c?this._next:this._previous;for(;a--;){let a=f.call(this,e);if(!a)break;let b=a.getDate(!1);d.push(this.applyDayOffset(b)),e=a}return d}match(a){if(this._states.once){let b=new n(a,this.getTz());b.ms=0;let c=new n(this._states.once,this.getTz());return c.ms=0,b.getTime()===c.getTime()}let b=new n(a,this.getTz());return b.ms=0,b.match(this._states.pattern,this.options)}getPattern(){if(!this._states.once)return this._states.pattern?this._states.pattern.pattern:void 0}getOnce(){return this._states.once?this._states.once.getDate():null}isRunning(){let a=this.nextRun(this._states.currentRun),b=!this._states.paused,c=void 0!==this.fn,d=!this._states.kill;return b&&c&&d&&null!==a}isStopped(){return this._states.kill}isBusy(){return this._states.blocking}currentRun(){return this._states.currentRun?this._states.currentRun.getDate():null}previousRun(){return this._states.previousRun?this._states.previousRun.getDate():null}msToNext(a){let b=this._next(a);return b?a instanceof n||a instanceof Date?b.getTime()-a.getTime():b.getTime()-new n(a).getTime():null}stop(){this._states.kill=!0,this._states.currentTimeout&&clearTimeout(this._states.currentTimeout);let a=p.indexOf(this);a>=0&&p.splice(a,1)}pause(){return this._states.paused=!0,!this._states.kill}resume(){return this._states.paused=!1,!this._states.kill}schedule(a){var b;if(a&&this.fn)throw Error("Cron: It is not allowed to schedule two functions using the same Croner instance.");a&&(this.fn=a);let c=this.msToNext(),d=this.nextRun(this._states.currentRun);return null==c||isNaN(c)||null===d||(c>3e4&&(c=3e4),this._states.currentTimeout=setTimeout(()=>this._checkTrigger(d),c),this._states.currentTimeout&&this.options.unref&&(b=this._states.currentTimeout,"u">typeof Deno&&"u">typeof Deno.unrefTimer?Deno.unrefTimer(b):b&&"u">typeof b.unref&&b.unref())),this}async _trigger(a){this._states.blocking=!0,this._states.currentRun=new n(void 0,this.getTz());try{if(this.options.catch)try{void 0!==this.fn&&await this.fn(this,this.options.context)}catch(a){if(o(this.options.catch))try{this.options.catch(a,this)}catch{}}else void 0!==this.fn&&await this.fn(this,this.options.context)}finally{this._states.previousRun=new n(a,this.getTz()),this._states.blocking=!1}}async trigger(){await this._trigger()}runsLeft(){return this._states.maxRuns}_checkTrigger(a){let b=new Date,c=!this._states.paused&&b.getTime()>=a.getTime(),d=this._states.blocking&&this.options.protect;c&&!d?(void 0!==this._states.maxRuns&&this._states.maxRuns--,this._trigger()):c&&d&&o(this.options.protect)&&setTimeout(()=>this.options.protect(this),0),this.schedule()}_next(a){let b=!!(a||this._states.currentRun),c=!1;!a&&this.options.startAt&&this.options.interval&&([a,b]=this._calculatePreviousRun(a,b),c=!a),a=new n(a,this.getTz()),this.options.startAt&&a&&a.getTime()<this.options.startAt.getTime()&&(a=this.options.startAt);let d=this._states.once||new n(a,this.getTz());return c||d===this._states.once||(d=d.increment(this._states.pattern,this.options,b)),this._states.once&&this._states.once.getTime()<=a.getTime()||null===d||void 0!==this._states.maxRuns&&this._states.maxRuns<=0||this._states.kill||this.options.stopAt&&d.getTime()>=this.options.stopAt.getTime()?null:d}_previous(a){let b=new n(a,this.getTz());this.options.stopAt&&b.getTime()>this.options.stopAt.getTime()&&(b=this.options.stopAt);let c=new n(b,this.getTz());return this._states.once?this._states.once.getTime()<b.getTime()?this._states.once:null:null===(c=c.decrement(this._states.pattern,this.options))||this.options.startAt&&c.getTime()<this.options.startAt.getTime()?null:c}_calculatePreviousRun(a,b){let c=new n(void 0,this.getTz()),d=a;if(this.options.startAt.getTime()<=c.getTime()){let a=(d=this.options.startAt).getTime()+1e3*this.options.interval;for(;a<=c.getTime();)a=(d=new n(d,this.getTz()).increment(this._states.pattern,this.options,!0)).getTime()+1e3*this.options.interval;b=!0}return null===d&&(d=void 0),[d,b]}}},23246:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{fillRule:"evenodd",d:"M16 9V4h1c.55 0 1-.45 1-1s-.45-1-1-1H7c-.55 0-1 .45-1 1s.45 1 1 1h1v5c0 1.66-1.34 3-3 3v2h5.97v7l1 1 1-1v-7H19v-2c-1.66 0-3-1.34-3-3"}),"PushPin")},31716:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(b,{isRequestAPICallableInsideAfter:function(){return i},throwForSearchParamsAccessInUseCache:function(){return h},throwWithStaticGenerationBailoutError:function(){return f},throwWithStaticGenerationBailoutErrorWithDynamicError:function(){return g}});let d=c(11938),e=c(3295);function f(a,b){throw Object.defineProperty(new d.StaticGenBailoutError(`Route ${a} couldn't be rendered statically because it used ${b}. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E576",enumerable:!1,configurable:!0})}function g(a,b){throw Object.defineProperty(new d.StaticGenBailoutError(`Route ${a} with \`dynamic = "error"\` couldn't be rendered statically because it used ${b}. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E543",enumerable:!1,configurable:!0})}function h(a,b){let c=Object.defineProperty(Error(`Route ${a.route} used "searchParams" inside "use cache". Accessing dynamic request data inside a cache scope is not supported. If you need some search params inside a cached function await "searchParams" outside of the cached function and pass only the required search params as arguments to the cached function. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`),"__NEXT_ERROR_CODE",{value:"E779",enumerable:!1,configurable:!0});throw Error.captureStackTrace(c,b),a.invalidDynamicUsageError??=c,c}function i(){let a=e.afterTaskAsyncStorage.getStore();return(null==a?void 0:a.rootTaskSpawnPhase)==="action"}},56492:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M12 5.83 15.17 9l1.41-1.41L12 3 7.41 7.59 8.83 9zm0 12.34L8.83 15l-1.41 1.41L12 21l4.59-4.59L15.17 15z"}),"UnfoldMore")},60610:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)([(0,e.jsx)("path",{d:"M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2M12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8"},"0"),(0,e.jsx)("path",{d:"M12.5 7H11v6l5.25 3.15.75-1.23-4.5-2.67z"},"1")],"AccessTime")},71763:()=>{},84099:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M17 16.99c-1.35 0-2.2.42-2.95.8-.65.33-1.18.6-2.05.6-.9 0-1.4-.25-2.05-.6-.75-.38-1.57-.8-2.95-.8s-2.2.42-2.95.8c-.65.33-1.17.6-2.05.6v1.95c1.35 0 2.2-.42 2.95-.8.65-.33 1.17-.6 2.05-.6s1.4.25 2.05.6c.75.38 1.57.8 2.95.8s2.2-.42 2.95-.8c.65-.33 1.18-.6 2.05-.6.9 0 1.4.25 2.05.6.75.38 1.58.8 2.95.8v-1.95c-.9 0-1.4-.25-2.05-.6-.75-.38-1.6-.8-2.95-.8m0-4.45c-1.35 0-2.2.43-2.95.8-.65.32-1.18.6-2.05.6-.9 0-1.4-.25-2.05-.6-.75-.38-1.57-.8-2.95-.8s-2.2.43-2.95.8c-.65.32-1.17.6-2.05.6v1.95c1.35 0 2.2-.43 2.95-.8.65-.35 1.15-.6 2.05-.6s1.4.25 2.05.6c.75.38 1.57.8 2.95.8s2.2-.43 2.95-.8c.65-.35 1.15-.6 2.05-.6s1.4.25 2.05.6c.75.38 1.58.8 2.95.8v-1.95c-.9 0-1.4-.25-2.05-.6-.75-.38-1.6-.8-2.95-.8m2.95-8.08c-.75-.38-1.58-.8-2.95-.8s-2.2.42-2.95.8c-.65.32-1.18.6-2.05.6-.9 0-1.4-.25-2.05-.6-.75-.37-1.57-.8-2.95-.8s-2.2.42-2.95.8c-.65.33-1.17.6-2.05.6v1.93c1.35 0 2.2-.43 2.95-.8.65-.33 1.17-.6 2.05-.6s1.4.25 2.05.6c.75.38 1.57.8 2.95.8s2.2-.43 2.95-.8c.65-.32 1.18-.6 2.05-.6.9 0 1.4.25 2.05.6.75.38 1.58.8 2.95.8V5.04c-.9 0-1.4-.25-2.05-.58M17 8.09c-1.35 0-2.2.43-2.95.8-.65.35-1.15.6-2.05.6s-1.4-.25-2.05-.6c-.75-.38-1.57-.8-2.95-.8s-2.2.43-2.95.8c-.65.35-1.15.6-2.05.6v1.95c1.35 0 2.2-.43 2.95-.8.65-.32 1.18-.6 2.05-.6s1.4.25 2.05.6c.75.38 1.57.8 2.95.8s2.2-.43 2.95-.8c.65-.32 1.18-.6 2.05-.6.9 0 1.4.25 2.05.6.75.38 1.58.8 2.95.8V9.49c-.9 0-1.4-.25-2.05-.6-.75-.38-1.6-.8-2.95-.8"}),"Waves")},84226:(a,b)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(b,{describeHasCheckingStringProperty:function(){return e},describeStringPropertyAccess:function(){return d},wellKnownProperties:function(){return f}});let c=/^[A-Za-z_$][A-Za-z0-9_$]*$/;function d(a,b){return c.test(b)?"`"+a+"."+b+"`":"`"+a+"["+JSON.stringify(b)+"]`"}function e(a,b){let c=JSON.stringify(b);return"`Reflect.has("+a+", "+c+")`, `"+c+" in "+a+"`, or similar"}let f=new Set(["hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toString","valueOf","toLocaleString","then","catch","finally","status","displayName","_debugInfo","toJSON","$$typeof","__esModule"])},91059:(a,b,c)=>{"use strict";c.d(b,{A:()=>p});var d=c(38301),e=c(43249),f=c(2783),g=c(37489),h=c(18168),i=c(68333),j=c(6636),k=c(93895),l=c(21124);let m=(0,h.Ay)("div",{name:"MuiDivider",slot:"Root",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[b.root,c.absolute&&b.absolute,b[c.variant],c.light&&b.light,"vertical"===c.orientation&&b.vertical,c.flexItem&&b.flexItem,c.children&&b.withChildren,c.children&&"vertical"===c.orientation&&b.withChildrenVertical,"right"===c.textAlign&&"vertical"!==c.orientation&&b.textAlignRight,"left"===c.textAlign&&"vertical"!==c.orientation&&b.textAlignLeft]}})((0,i.A)(({theme:a})=>({margin:0,flexShrink:0,borderWidth:0,borderStyle:"solid",borderColor:(a.vars||a).palette.divider,borderBottomWidth:"thin",variants:[{props:{absolute:!0},style:{position:"absolute",bottom:0,left:0,width:"100%"}},{props:{light:!0},style:{borderColor:a.vars?`rgba(${a.vars.palette.dividerChannel} / 0.08)`:(0,g.X4)(a.palette.divider,.08)}},{props:{variant:"inset"},style:{marginLeft:72}},{props:{variant:"middle",orientation:"horizontal"},style:{marginLeft:a.spacing(2),marginRight:a.spacing(2)}},{props:{variant:"middle",orientation:"vertical"},style:{marginTop:a.spacing(1),marginBottom:a.spacing(1)}},{props:{orientation:"vertical"},style:{height:"100%",borderBottomWidth:0,borderRightWidth:"thin"}},{props:{flexItem:!0},style:{alignSelf:"stretch",height:"auto"}},{props:({ownerState:a})=>!!a.children,style:{display:"flex",textAlign:"center",border:0,borderTopStyle:"solid",borderLeftStyle:"solid","&::before, &::after":{content:'""',alignSelf:"center"}}},{props:({ownerState:a})=>a.children&&"vertical"!==a.orientation,style:{"&::before, &::after":{width:"100%",borderTop:`thin solid ${(a.vars||a).palette.divider}`,borderTopStyle:"inherit"}}},{props:({ownerState:a})=>"vertical"===a.orientation&&a.children,style:{flexDirection:"column","&::before, &::after":{height:"100%",borderLeft:`thin solid ${(a.vars||a).palette.divider}`,borderLeftStyle:"inherit"}}},{props:({ownerState:a})=>"right"===a.textAlign&&"vertical"!==a.orientation,style:{"&::before":{width:"90%"},"&::after":{width:"10%"}}},{props:({ownerState:a})=>"left"===a.textAlign&&"vertical"!==a.orientation,style:{"&::before":{width:"10%"},"&::after":{width:"90%"}}}]}))),n=(0,h.Ay)("span",{name:"MuiDivider",slot:"Wrapper",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[b.wrapper,"vertical"===c.orientation&&b.wrapperVertical]}})((0,i.A)(({theme:a})=>({display:"inline-block",paddingLeft:`calc(${a.spacing(1)} * 1.2)`,paddingRight:`calc(${a.spacing(1)} * 1.2)`,whiteSpace:"nowrap",variants:[{props:{orientation:"vertical"},style:{paddingTop:`calc(${a.spacing(1)} * 1.2)`,paddingBottom:`calc(${a.spacing(1)} * 1.2)`}}]}))),o=d.forwardRef(function(a,b){let c=(0,j.b)({props:a,name:"MuiDivider"}),{absolute:d=!1,children:g,className:h,orientation:i="horizontal",component:o=g||"vertical"===i?"div":"hr",flexItem:p=!1,light:q=!1,role:r="hr"!==o?"separator":void 0,textAlign:s="center",variant:t="fullWidth",...u}=c,v={...c,absolute:d,component:o,flexItem:p,light:q,orientation:i,role:r,textAlign:s,variant:t},w=(a=>{let{absolute:b,children:c,classes:d,flexItem:e,light:g,orientation:h,textAlign:i,variant:j}=a;return(0,f.A)({root:["root",b&&"absolute",j,g&&"light","vertical"===h&&"vertical",e&&"flexItem",c&&"withChildren",c&&"vertical"===h&&"withChildrenVertical","right"===i&&"vertical"!==h&&"textAlignRight","left"===i&&"vertical"!==h&&"textAlignLeft"],wrapper:["wrapper","vertical"===h&&"wrapperVertical"]},k.K,d)})(v);return(0,l.jsx)(m,{as:o,className:(0,e.A)(w.root,h),role:r,ref:b,ownerState:v,"aria-orientation":"separator"===r&&("hr"!==o||"vertical"===i)?i:void 0,...u,children:g?(0,l.jsx)(n,{className:w.wrapper,ownerState:v,children:g}):null})});o&&(o.muiSkipListHighlight=!0);let p=o}};