flujo-ai 3.27.0 → 3.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (614) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +367 -296
  3. package/.next/app-path-routes-manifest.json +20 -10
  4. package/.next/build-manifest.json +5 -5
  5. package/.next/react-loadable-manifest.json +12 -0
  6. package/.next/routes-manifest.json +23 -0
  7. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  8. package/.next/server/app/_not-found.html +1 -1
  9. package/.next/server/app/_not-found.rsc +1 -1
  10. package/.next/server/app/api/approvals/[id]/route.js +1 -1
  11. package/.next/server/app/api/approvals/[id]/route.js.nft.json +1 -1
  12. package/.next/server/app/api/approvals/[id]/route_client-reference-manifest.js +1 -1
  13. package/.next/server/app/api/approvals/route.js +2 -2
  14. package/.next/server/app/api/approvals/route.js.nft.json +1 -1
  15. package/.next/server/app/api/approvals/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/backup/route.js +1 -1
  17. package/.next/server/app/api/backup/route.js.nft.json +1 -1
  18. package/.next/server/app/api/backup/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/browse/route_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/bugs/enhance/route.js +2 -2
  21. package/.next/server/app/api/bugs/enhance/route.js.nft.json +1 -1
  22. package/.next/server/app/api/bugs/enhance/route_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/cwd/route.js +1 -1
  24. package/.next/server/app/api/cwd/route_client-reference-manifest.js +1 -1
  25. package/.next/server/app/api/encryption/secure/route.js +1 -1
  26. package/.next/server/app/api/encryption/secure/route.js.nft.json +1 -1
  27. package/.next/server/app/api/encryption/secure/route_client-reference-manifest.js +1 -1
  28. package/.next/server/app/api/env/route.js +2 -2
  29. package/.next/server/app/api/env/route_client-reference-manifest.js +1 -1
  30. package/.next/server/app/api/flow/[id]/route.js.nft.json +1 -1
  31. package/.next/server/app/api/flow/[id]/route_client-reference-manifest.js +1 -1
  32. package/.next/server/app/api/flow/[id]/versions/[versionId]/route.js +1 -0
  33. package/.next/server/app/api/flow/[id]/versions/[versionId]/route.js.nft.json +1 -0
  34. package/.next/server/app/api/flow/[id]/versions/[versionId]/route_client-reference-manifest.js +1 -0
  35. package/.next/server/app/api/flow/[id]/versions/route.js +1 -0
  36. package/.next/server/app/api/flow/[id]/versions/route.js.nft.json +1 -0
  37. package/.next/server/app/api/flow/[id]/versions/route_client-reference-manifest.js +1 -0
  38. package/.next/server/app/api/flow/compile/route.js +1 -1
  39. package/.next/server/app/api/flow/compile/route.js.nft.json +1 -1
  40. package/.next/server/app/api/flow/compile/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/flow/generate/route.js +1 -1
  42. package/.next/server/app/api/flow/generate/route.js.nft.json +1 -1
  43. package/.next/server/app/api/flow/generate/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/flow/improve/route.js +1 -1
  45. package/.next/server/app/api/flow/improve/route.js.nft.json +1 -1
  46. package/.next/server/app/api/flow/improve/route_client-reference-manifest.js +1 -1
  47. package/.next/server/app/api/flow/prompt-renderer/route.js +2 -2
  48. package/.next/server/app/api/flow/prompt-renderer/route.js.nft.json +1 -1
  49. package/.next/server/app/api/flow/prompt-renderer/route_client-reference-manifest.js +1 -1
  50. package/.next/server/app/api/flow/quick-chat/route.js +1 -1
  51. package/.next/server/app/api/flow/quick-chat/route.js.nft.json +1 -1
  52. package/.next/server/app/api/flow/quick-chat/route_client-reference-manifest.js +1 -1
  53. package/.next/server/app/api/flow/repair/route.js +1 -1
  54. package/.next/server/app/api/flow/repair/route.js.nft.json +1 -1
  55. package/.next/server/app/api/flow/repair/route_client-reference-manifest.js +1 -1
  56. package/.next/server/app/api/flow/route.js.nft.json +1 -1
  57. package/.next/server/app/api/flow/route_client-reference-manifest.js +1 -1
  58. package/.next/server/app/api/git/route.js +1 -1
  59. package/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  60. package/.next/server/app/api/init/route.js +1 -1
  61. package/.next/server/app/api/init/route.js.nft.json +1 -1
  62. package/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  63. package/.next/server/app/api/local-models/capability/route_client-reference-manifest.js +1 -1
  64. package/.next/server/app/api/local-models/pull/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/local-models/suggest/route_client-reference-manifest.js +1 -1
  66. package/.next/server/app/api/mcp/app-sandbox/route.js +1 -0
  67. package/.next/server/app/api/mcp/app-sandbox/route.js.nft.json +1 -0
  68. package/.next/server/app/api/mcp/app-sandbox/route_client-reference-manifest.js +1 -0
  69. package/.next/server/app/api/mcp/cancel/route.js +2 -2
  70. package/.next/server/app/api/mcp/cancel/route.js.nft.json +1 -1
  71. package/.next/server/app/api/mcp/cancel/route_client-reference-manifest.js +1 -1
  72. package/.next/server/app/api/mcp/oauth-capability/route.js +1 -0
  73. package/.next/server/app/api/mcp/oauth-capability/route.js.nft.json +1 -0
  74. package/.next/server/app/api/mcp/oauth-capability/route_client-reference-manifest.js +1 -0
  75. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js +1 -1
  76. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js.nft.json +1 -1
  77. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route_client-reference-manifest.js +1 -1
  78. package/.next/server/app/api/mcp/servers/[name]/prompts/route.js +1 -1
  79. package/.next/server/app/api/mcp/servers/[name]/prompts/route.js.nft.json +1 -1
  80. package/.next/server/app/api/mcp/servers/[name]/prompts/route_client-reference-manifest.js +1 -1
  81. package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js +1 -1
  82. package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js.nft.json +1 -1
  83. package/.next/server/app/api/mcp/servers/[name]/resources/read/route_client-reference-manifest.js +1 -1
  84. package/.next/server/app/api/mcp/servers/[name]/resources/route.js +1 -1
  85. package/.next/server/app/api/mcp/servers/[name]/resources/route.js.nft.json +1 -1
  86. package/.next/server/app/api/mcp/servers/[name]/resources/route_client-reference-manifest.js +1 -1
  87. package/.next/server/app/api/mcp/servers/[name]/route.js +1 -1
  88. package/.next/server/app/api/mcp/servers/[name]/route.js.nft.json +1 -1
  89. package/.next/server/app/api/mcp/servers/[name]/route_client-reference-manifest.js +1 -1
  90. package/.next/server/app/api/mcp/servers/[name]/status/route.js +1 -1
  91. package/.next/server/app/api/mcp/servers/[name]/status/route.js.nft.json +1 -1
  92. package/.next/server/app/api/mcp/servers/[name]/status/route_client-reference-manifest.js +1 -1
  93. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js +1 -1
  94. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js.nft.json +1 -1
  95. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route_client-reference-manifest.js +1 -1
  96. package/.next/server/app/api/mcp/servers/[name]/tools/route.js +1 -1
  97. package/.next/server/app/api/mcp/servers/[name]/tools/route.js.nft.json +1 -1
  98. package/.next/server/app/api/mcp/servers/[name]/tools/route_client-reference-manifest.js +1 -1
  99. package/.next/server/app/api/mcp/servers/route.js +1 -1
  100. package/.next/server/app/api/mcp/servers/route.js.nft.json +1 -1
  101. package/.next/server/app/api/mcp/servers/route_client-reference-manifest.js +1 -1
  102. package/.next/server/app/api/mcp/test-connection/route.js +1 -1
  103. package/.next/server/app/api/mcp/test-connection/route.js.nft.json +1 -1
  104. package/.next/server/app/api/mcp/test-connection/route_client-reference-manifest.js +1 -1
  105. package/.next/server/app/api/mcp/test-connection/stream/route.js +1 -1
  106. package/.next/server/app/api/mcp/test-connection/stream/route.js.nft.json +1 -1
  107. package/.next/server/app/api/mcp/test-connection/stream/route_client-reference-manifest.js +1 -1
  108. package/.next/server/app/api/mcp-registry/route.js +2 -2
  109. package/.next/server/app/api/mcp-registry/route.js.nft.json +1 -1
  110. package/.next/server/app/api/mcp-registry/route_client-reference-manifest.js +1 -1
  111. package/.next/server/app/api/mcp-registry/spotlight/route.js +1 -1
  112. package/.next/server/app/api/mcp-registry/spotlight/route_client-reference-manifest.js +1 -1
  113. package/.next/server/app/api/model/[id]/route.js +1 -1
  114. package/.next/server/app/api/model/[id]/route.js.nft.json +1 -1
  115. package/.next/server/app/api/model/[id]/route_client-reference-manifest.js +1 -1
  116. package/.next/server/app/api/model/provider/route.js +2 -2
  117. package/.next/server/app/api/model/provider/route.js.nft.json +1 -1
  118. package/.next/server/app/api/model/provider/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/model/route.js +1 -1
  120. package/.next/server/app/api/model/route.js.nft.json +1 -1
  121. package/.next/server/app/api/model/route_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/model/test/route.js +2 -2
  123. package/.next/server/app/api/model/test/route.js.nft.json +1 -1
  124. package/.next/server/app/api/model/test/route_client-reference-manifest.js +1 -1
  125. package/.next/server/app/api/oauth/callback/route.js +2 -2
  126. package/.next/server/app/api/oauth/callback/route.js.nft.json +1 -1
  127. package/.next/server/app/api/oauth/callback/route_client-reference-manifest.js +1 -1
  128. package/.next/server/app/api/oauth/initiate/route.js +2 -2
  129. package/.next/server/app/api/oauth/initiate/route.js.nft.json +1 -1
  130. package/.next/server/app/api/oauth/initiate/route_client-reference-manifest.js +1 -1
  131. package/.next/server/app/api/oauth/reset/route.js +2 -2
  132. package/.next/server/app/api/oauth/reset/route.js.nft.json +1 -1
  133. package/.next/server/app/api/oauth/reset/route_client-reference-manifest.js +1 -1
  134. package/.next/server/app/api/packages/build/route.js +1 -1
  135. package/.next/server/app/api/packages/build/route.js.nft.json +1 -1
  136. package/.next/server/app/api/packages/build/route_client-reference-manifest.js +1 -1
  137. package/.next/server/app/api/packages/derive-secrets/route.js +1 -1
  138. package/.next/server/app/api/packages/derive-secrets/route.js.nft.json +1 -1
  139. package/.next/server/app/api/packages/derive-secrets/route_client-reference-manifest.js +1 -1
  140. package/.next/server/app/api/packages/install/route.js +1 -1
  141. package/.next/server/app/api/packages/install/route.js.nft.json +1 -1
  142. package/.next/server/app/api/packages/install/route_client-reference-manifest.js +1 -1
  143. package/.next/server/app/api/packages/install/status/route.js +1 -1
  144. package/.next/server/app/api/packages/install/status/route.js.nft.json +1 -1
  145. package/.next/server/app/api/packages/install/status/route_client-reference-manifest.js +1 -1
  146. package/.next/server/app/api/packages/installed/route.js +1 -0
  147. package/.next/server/app/api/packages/installed/route.js.nft.json +1 -0
  148. package/.next/server/app/api/packages/installed/route_client-reference-manifest.js +1 -0
  149. package/.next/server/app/api/packages/resolve/route.js +1 -1
  150. package/.next/server/app/api/packages/resolve/route.js.nft.json +1 -1
  151. package/.next/server/app/api/packages/resolve/route_client-reference-manifest.js +1 -1
  152. package/.next/server/app/api/packages/uninstall/route.js +1 -0
  153. package/.next/server/app/api/packages/uninstall/route.js.nft.json +1 -0
  154. package/.next/server/app/api/packages/uninstall/route_client-reference-manifest.js +1 -0
  155. package/.next/server/app/api/planned-executions/[id]/route.js +2 -2
  156. package/.next/server/app/api/planned-executions/[id]/route.js.nft.json +1 -1
  157. package/.next/server/app/api/planned-executions/[id]/route_client-reference-manifest.js +1 -1
  158. package/.next/server/app/api/planned-executions/[id]/run/route.js +2 -2
  159. package/.next/server/app/api/planned-executions/[id]/run/route.js.nft.json +1 -1
  160. package/.next/server/app/api/planned-executions/[id]/run/route_client-reference-manifest.js +1 -1
  161. package/.next/server/app/api/planned-executions/[id]/runs/route.js +2 -2
  162. package/.next/server/app/api/planned-executions/[id]/runs/route.js.nft.json +1 -1
  163. package/.next/server/app/api/planned-executions/[id]/runs/route_client-reference-manifest.js +1 -1
  164. package/.next/server/app/api/planned-executions/preview-schedule/route_client-reference-manifest.js +1 -1
  165. package/.next/server/app/api/planned-executions/reconcile/route.js +1 -1
  166. package/.next/server/app/api/planned-executions/reconcile/route.js.nft.json +1 -1
  167. package/.next/server/app/api/planned-executions/reconcile/route_client-reference-manifest.js +1 -1
  168. package/.next/server/app/api/planned-executions/route.js +1 -1
  169. package/.next/server/app/api/planned-executions/route.js.nft.json +1 -1
  170. package/.next/server/app/api/planned-executions/route_client-reference-manifest.js +1 -1
  171. package/.next/server/app/api/registry/auth/resend/route.js +1 -1
  172. package/.next/server/app/api/registry/auth/resend/route.js.nft.json +1 -1
  173. package/.next/server/app/api/registry/auth/resend/route_client-reference-manifest.js +1 -1
  174. package/.next/server/app/api/registry/auth/reset/route.js +1 -0
  175. package/.next/server/app/api/registry/auth/reset/route.js.nft.json +1 -0
  176. package/.next/server/app/api/registry/auth/reset/route_client-reference-manifest.js +1 -0
  177. package/.next/server/app/api/registry/auth/route.js +1 -1
  178. package/.next/server/app/api/registry/auth/route.js.nft.json +1 -1
  179. package/.next/server/app/api/registry/auth/route_client-reference-manifest.js +1 -1
  180. package/.next/server/app/api/registry/oauth/callback/route.js +1 -0
  181. package/.next/server/app/api/registry/oauth/callback/route.js.nft.json +1 -0
  182. package/.next/server/app/api/registry/oauth/callback/route_client-reference-manifest.js +1 -0
  183. package/.next/server/app/api/registry/oauth/initiate/route.js +1 -0
  184. package/.next/server/app/api/registry/oauth/initiate/route.js.nft.json +1 -0
  185. package/.next/server/app/api/registry/oauth/initiate/route_client-reference-manifest.js +1 -0
  186. package/.next/server/app/api/registry/publish/route.js +1 -1
  187. package/.next/server/app/api/registry/publish/route.js.nft.json +1 -1
  188. package/.next/server/app/api/registry/publish/route_client-reference-manifest.js +1 -1
  189. package/.next/server/app/api/registry/settings/route.js +1 -1
  190. package/.next/server/app/api/registry/settings/route.js.nft.json +1 -1
  191. package/.next/server/app/api/registry/settings/route_client-reference-manifest.js +1 -1
  192. package/.next/server/app/api/restore/route.js +1 -1
  193. package/.next/server/app/api/restore/route.js.nft.json +1 -1
  194. package/.next/server/app/api/restore/route_client-reference-manifest.js +1 -1
  195. package/.next/server/app/api/runs/active/route.js +2 -2
  196. package/.next/server/app/api/runs/active/route.js.nft.json +1 -1
  197. package/.next/server/app/api/runs/active/route_client-reference-manifest.js +1 -1
  198. package/.next/server/app/api/storage/route.js +1 -1
  199. package/.next/server/app/api/storage/route_client-reference-manifest.js +1 -1
  200. package/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  201. package/.next/server/app/api/waves/route.js +1 -1
  202. package/.next/server/app/api/waves/route.js.nft.json +1 -1
  203. package/.next/server/app/api/waves/route_client-reference-manifest.js +1 -1
  204. package/.next/server/app/api/webhooks/[id]/route.js +1 -1
  205. package/.next/server/app/api/webhooks/[id]/route.js.nft.json +1 -1
  206. package/.next/server/app/api/webhooks/[id]/route_client-reference-manifest.js +1 -1
  207. package/.next/server/app/chat/page.js +8 -8
  208. package/.next/server/app/chat/page.js.nft.json +1 -1
  209. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  210. package/.next/server/app/chat.html +1 -1
  211. package/.next/server/app/chat.rsc +2 -2
  212. package/.next/server/app/docs/page.js +4 -3
  213. package/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  214. package/.next/server/app/docs.html +1 -1
  215. package/.next/server/app/docs.rsc +2 -2
  216. package/.next/server/app/executions/page.js +38 -2
  217. package/.next/server/app/executions/page.js.nft.json +1 -1
  218. package/.next/server/app/executions/page_client-reference-manifest.js +1 -1
  219. package/.next/server/app/executions.html +1 -1
  220. package/.next/server/app/executions.rsc +2 -2
  221. package/.next/server/app/flows/page.js +3 -3
  222. package/.next/server/app/flows/page.js.nft.json +1 -1
  223. package/.next/server/app/flows/page_client-reference-manifest.js +1 -1
  224. package/.next/server/app/flows.html +1 -1
  225. package/.next/server/app/flows.rsc +2 -2
  226. package/.next/server/app/index.html +1 -1
  227. package/.next/server/app/index.rsc +1 -1
  228. package/.next/server/app/mcp/page.js +13 -13
  229. package/.next/server/app/mcp/page.js.nft.json +1 -1
  230. package/.next/server/app/mcp/page_client-reference-manifest.js +1 -1
  231. package/.next/server/app/mcp-flows/route.js +1 -1
  232. package/.next/server/app/mcp-flows/route.js.nft.json +1 -1
  233. package/.next/server/app/mcp-flows/route_client-reference-manifest.js +1 -1
  234. package/.next/server/app/mcp-proxy/[server]/route.js +1 -1
  235. package/.next/server/app/mcp-proxy/[server]/route.js.nft.json +1 -1
  236. package/.next/server/app/mcp-proxy/[server]/route_client-reference-manifest.js +1 -1
  237. package/.next/server/app/mcp.html +1 -1
  238. package/.next/server/app/mcp.rsc +2 -2
  239. package/.next/server/app/models/page.js +2 -2
  240. package/.next/server/app/models/page.js.nft.json +1 -1
  241. package/.next/server/app/models/page_client-reference-manifest.js +1 -1
  242. package/.next/server/app/packages/page.js +2 -3
  243. package/.next/server/app/packages/page.js.nft.json +1 -1
  244. package/.next/server/app/packages/page_client-reference-manifest.js +1 -1
  245. package/.next/server/app/packages.html +1 -1
  246. package/.next/server/app/packages.rsc +2 -2
  247. package/.next/server/app/page_client-reference-manifest.js +1 -1
  248. package/.next/server/app/settings/page.js +2 -3
  249. package/.next/server/app/settings/page.js.nft.json +1 -1
  250. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  251. package/.next/server/app/settings.html +1 -1
  252. package/.next/server/app/settings.rsc +2 -2
  253. package/.next/server/app/v1/chat/completions/route.js +1 -1
  254. package/.next/server/app/v1/chat/completions/route.js.nft.json +1 -1
  255. package/.next/server/app/v1/chat/completions/route_client-reference-manifest.js +1 -1
  256. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js +2 -2
  257. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js.nft.json +1 -1
  258. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route_client-reference-manifest.js +1 -1
  259. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js +2 -2
  260. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js.nft.json +1 -1
  261. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route_client-reference-manifest.js +1 -1
  262. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js +1 -1
  263. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js.nft.json +1 -1
  264. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route_client-reference-manifest.js +1 -1
  265. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js +1 -1
  266. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js.nft.json +1 -1
  267. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route_client-reference-manifest.js +1 -1
  268. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js +2 -2
  269. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js.nft.json +1 -1
  270. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route_client-reference-manifest.js +1 -1
  271. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js +2 -2
  272. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js.nft.json +1 -1
  273. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route_client-reference-manifest.js +1 -1
  274. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route.js +1 -1
  275. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route_client-reference-manifest.js +1 -1
  276. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js +1 -1
  277. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js.nft.json +1 -1
  278. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route_client-reference-manifest.js +1 -1
  279. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js +2 -2
  280. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js.nft.json +1 -1
  281. package/.next/server/app/v1/chat/conversations/[conversationId]/route_client-reference-manifest.js +1 -1
  282. package/.next/server/app/v1/chat/conversations/route.js +2 -2
  283. package/.next/server/app/v1/chat/conversations/route.js.nft.json +1 -1
  284. package/.next/server/app/v1/chat/conversations/route_client-reference-manifest.js +1 -1
  285. package/.next/server/app/v1/chat/events/route.js +11 -0
  286. package/.next/server/app/v1/chat/events/route.js.nft.json +1 -0
  287. package/.next/server/app/v1/chat/events/route_client-reference-manifest.js +1 -0
  288. package/.next/server/app/v1/models/route.js +2 -2
  289. package/.next/server/app/v1/models/route.js.nft.json +1 -1
  290. package/.next/server/app/v1/models/route_client-reference-manifest.js +1 -1
  291. package/.next/server/app/waves/page.js +2 -2
  292. package/.next/server/app/waves/page_client-reference-manifest.js +1 -1
  293. package/.next/server/app/waves.html +1 -1
  294. package/.next/server/app/waves.rsc +2 -2
  295. package/.next/server/app-paths-manifest.json +20 -10
  296. package/.next/server/chunks/1226.js +1 -1
  297. package/.next/server/chunks/1314.js +1 -1
  298. package/.next/server/chunks/1604.js +14 -9
  299. package/.next/server/chunks/1615.js +1 -0
  300. package/.next/server/chunks/1659.js +1 -1
  301. package/.next/server/chunks/166.js +5 -5
  302. package/.next/server/chunks/1805.js +1 -1
  303. package/.next/server/chunks/1819.js +1 -1
  304. package/.next/server/chunks/2434.js +2 -2
  305. package/.next/server/chunks/2859.js +1 -1
  306. package/.next/server/chunks/2940.js +13 -8
  307. package/.next/server/chunks/3128.js +62 -0
  308. package/.next/server/chunks/3273.js +1 -0
  309. package/.next/server/chunks/3570.js +249 -0
  310. package/.next/server/chunks/38.js +2 -2
  311. package/.next/server/chunks/3951.js +151 -0
  312. package/.next/server/chunks/4265.js +1 -1
  313. package/.next/server/chunks/4426.js +2 -2
  314. package/.next/server/chunks/4671.js +1 -1
  315. package/.next/server/chunks/4681.js +1 -1
  316. package/.next/server/chunks/4771.js +2 -2
  317. package/.next/server/chunks/5067.js +1 -0
  318. package/.next/server/chunks/5096.js +1 -1
  319. package/.next/server/chunks/5148.js +1 -0
  320. package/.next/server/chunks/5200.js +1 -0
  321. package/.next/server/chunks/5463.js +1 -1
  322. package/.next/server/chunks/{1089.js → 5471.js} +1 -1
  323. package/.next/server/chunks/5544.js +5 -5
  324. package/.next/server/chunks/5708.js +5 -4
  325. package/.next/server/chunks/5958.js +2 -0
  326. package/.next/server/chunks/6005.js +1 -1
  327. package/.next/server/chunks/{7498.js → 6126.js} +24 -13
  328. package/.next/server/chunks/6849.js +66 -0
  329. package/.next/server/chunks/688.js +3 -0
  330. package/.next/server/chunks/701.js +1 -1
  331. package/.next/server/chunks/7032.js +1 -1
  332. package/.next/server/chunks/7214.js +4 -4
  333. package/.next/server/chunks/724.js +1 -1
  334. package/.next/server/chunks/7463.js +4 -4
  335. package/.next/server/chunks/7506.js +1 -1
  336. package/.next/server/chunks/7538.js +21 -0
  337. package/.next/server/chunks/7579.js +7 -6
  338. package/.next/server/chunks/7821.js +1 -1
  339. package/.next/server/chunks/793.js +393 -0
  340. package/.next/server/chunks/8037.js +1 -0
  341. package/.next/server/chunks/8165.js +3 -0
  342. package/.next/server/chunks/8339.js +1 -0
  343. package/.next/server/chunks/8387.js +1 -1
  344. package/.next/server/chunks/8522.js +2 -2
  345. package/.next/server/chunks/{8192.js → 8568.js} +1 -1
  346. package/.next/server/chunks/8667.js +1 -1
  347. package/.next/server/chunks/8739.js +2 -2
  348. package/.next/server/chunks/8979.js +37 -0
  349. package/.next/server/chunks/8994.js +1 -1
  350. package/.next/server/chunks/9165.js +1 -0
  351. package/.next/server/chunks/9285.js +1 -1
  352. package/.next/server/chunks/94.js +1 -1
  353. package/.next/server/chunks/9400.js +2 -2
  354. package/.next/server/chunks/9472.js +2 -2
  355. package/.next/server/chunks/9671.js +1 -0
  356. package/.next/server/chunks/9724.js +393 -0
  357. package/.next/server/chunks/991.js +2 -0
  358. package/.next/server/functions-config-manifest.json +1 -0
  359. package/.next/server/instrumentation.js +1 -1
  360. package/.next/server/instrumentation.js.nft.json +1 -1
  361. package/.next/server/middleware-build-manifest.js +1 -1
  362. package/.next/server/middleware-manifest.json +1 -1
  363. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  364. package/.next/server/pages/404.html +1 -1
  365. package/.next/server/pages/500.html +1 -1
  366. package/.next/server/server-reference-manifest.js +1 -1
  367. package/.next/server/server-reference-manifest.json +1 -1
  368. package/.next/server/src/middleware.js +1 -1
  369. package/.next/server/src/middleware.js.map +1 -1
  370. package/.next/static/Q6ITx_bZyoEOnKdZu_C7j/_buildManifest.js +1 -0
  371. package/.next/static/chunks/1594-309fa6363f215d76.js +1 -0
  372. package/.next/static/chunks/{9720-5ecb48f1a28808fe.js → 1809-e56cf3c476261e34.js} +1 -1
  373. package/.next/static/chunks/1937-6bbdcdc660db562c.js +1 -0
  374. package/.next/static/chunks/1988-1b651d581fc44a36.js +1 -0
  375. package/.next/static/chunks/2164-7d6451e88a447de7.js +1 -0
  376. package/.next/static/chunks/{4483-463f8bfc6f3dd5fa.js → 218-6cbe09820faa3272.js} +1 -1
  377. package/.next/static/chunks/2800-4fa29a3eeb693593.js +1 -0
  378. package/.next/static/chunks/3418-a2f5d0c4f29ee2fb.js +1 -0
  379. package/.next/static/chunks/{8041-05830e887c133085.js → 3827-9e9a6e11ef808d90.js} +1 -1
  380. package/.next/static/chunks/3910.5c6885d7a5bd753e.js +1 -0
  381. package/.next/static/chunks/{3028-fc1f04241ed578ff.js → 3948-1cb8fc7a64805254.js} +1 -1
  382. package/.next/static/chunks/3958-5641a828b320f2fe.js +100 -0
  383. package/.next/static/chunks/{3574-94e9f20550550a58.js → 5328-4e556503b70e72b4.js} +1 -1
  384. package/.next/static/chunks/{2981-10313d395eb99645.js → 6195-8c4c57628e9013d5.js} +1 -1
  385. package/.next/static/chunks/{6669-012c73587a6628fc.js → 6669-a949326b30ea1d39.js} +1 -1
  386. package/.next/static/chunks/6777-4b0d05731a089de4.js +1 -0
  387. package/.next/static/chunks/6947-0ff3545efb53e959.js +1 -0
  388. package/.next/static/chunks/7304-e7cd725083617b81.js +8 -0
  389. package/.next/static/chunks/812-3ceea0da38ad2891.js +1 -0
  390. package/.next/static/chunks/{5578-49bc150686c13b6f.js → 8551-a28272acfda62ac9.js} +1 -1
  391. package/.next/static/chunks/8855-02889c9ab4bf0bcf.js +1 -0
  392. package/.next/static/chunks/app/api/approvals/[id]/route-c745e5b53b81491a.js +1 -0
  393. package/.next/static/chunks/app/api/approvals/route-c745e5b53b81491a.js +1 -0
  394. package/.next/static/chunks/app/api/backup/route-c745e5b53b81491a.js +1 -0
  395. package/.next/static/chunks/app/api/browse/route-c745e5b53b81491a.js +1 -0
  396. package/.next/static/chunks/app/api/bugs/enhance/route-c745e5b53b81491a.js +1 -0
  397. package/.next/static/chunks/app/api/cwd/route-c745e5b53b81491a.js +1 -0
  398. package/.next/static/chunks/app/api/encryption/secure/route-c745e5b53b81491a.js +1 -0
  399. package/.next/static/chunks/app/api/env/route-c745e5b53b81491a.js +1 -0
  400. package/.next/static/chunks/app/api/flow/[id]/route-c745e5b53b81491a.js +1 -0
  401. package/.next/static/chunks/app/api/flow/[id]/versions/[versionId]/route-c745e5b53b81491a.js +1 -0
  402. package/.next/static/chunks/app/api/flow/[id]/versions/route-c745e5b53b81491a.js +1 -0
  403. package/.next/static/chunks/app/api/flow/compile/route-c745e5b53b81491a.js +1 -0
  404. package/.next/static/chunks/app/api/flow/generate/route-c745e5b53b81491a.js +1 -0
  405. package/.next/static/chunks/app/api/flow/improve/route-c745e5b53b81491a.js +1 -0
  406. package/.next/static/chunks/app/api/flow/prompt-renderer/route-c745e5b53b81491a.js +1 -0
  407. package/.next/static/chunks/app/api/flow/quick-chat/route-c745e5b53b81491a.js +1 -0
  408. package/.next/static/chunks/app/api/flow/repair/route-c745e5b53b81491a.js +1 -0
  409. package/.next/static/chunks/app/api/flow/route-c745e5b53b81491a.js +1 -0
  410. package/.next/static/chunks/app/api/git/route-c745e5b53b81491a.js +1 -0
  411. package/.next/static/chunks/app/api/init/route-c745e5b53b81491a.js +1 -0
  412. package/.next/static/chunks/app/api/local-models/capability/route-c745e5b53b81491a.js +1 -0
  413. package/.next/static/chunks/app/api/local-models/pull/route-c745e5b53b81491a.js +1 -0
  414. package/.next/static/chunks/app/api/local-models/suggest/route-c745e5b53b81491a.js +1 -0
  415. package/.next/static/chunks/app/api/mcp/app-sandbox/route-c745e5b53b81491a.js +1 -0
  416. package/.next/static/chunks/app/api/mcp/cancel/route-c745e5b53b81491a.js +1 -0
  417. package/.next/static/chunks/app/api/mcp/oauth-capability/route-c745e5b53b81491a.js +1 -0
  418. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-c745e5b53b81491a.js +1 -0
  419. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-c745e5b53b81491a.js +1 -0
  420. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-c745e5b53b81491a.js +1 -0
  421. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-c745e5b53b81491a.js +1 -0
  422. package/.next/static/chunks/app/api/mcp/servers/[name]/route-c745e5b53b81491a.js +1 -0
  423. package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-c745e5b53b81491a.js +1 -0
  424. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-c745e5b53b81491a.js +1 -0
  425. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-c745e5b53b81491a.js +1 -0
  426. package/.next/static/chunks/app/api/mcp/servers/route-c745e5b53b81491a.js +1 -0
  427. package/.next/static/chunks/app/api/mcp/test-connection/route-c745e5b53b81491a.js +1 -0
  428. package/.next/static/chunks/app/api/mcp/test-connection/stream/route-c745e5b53b81491a.js +1 -0
  429. package/.next/static/chunks/app/api/mcp-registry/route-c745e5b53b81491a.js +1 -0
  430. package/.next/static/chunks/app/api/mcp-registry/spotlight/route-c745e5b53b81491a.js +1 -0
  431. package/.next/static/chunks/app/api/model/[id]/route-c745e5b53b81491a.js +1 -0
  432. package/.next/static/chunks/app/api/model/provider/route-c745e5b53b81491a.js +1 -0
  433. package/.next/static/chunks/app/api/model/route-c745e5b53b81491a.js +1 -0
  434. package/.next/static/chunks/app/api/model/test/route-c745e5b53b81491a.js +1 -0
  435. package/.next/static/chunks/app/api/oauth/callback/route-c745e5b53b81491a.js +1 -0
  436. package/.next/static/chunks/app/api/oauth/initiate/route-c745e5b53b81491a.js +1 -0
  437. package/.next/static/chunks/app/api/oauth/reset/route-c745e5b53b81491a.js +1 -0
  438. package/.next/static/chunks/app/api/packages/build/route-c745e5b53b81491a.js +1 -0
  439. package/.next/static/chunks/app/api/packages/derive-secrets/route-c745e5b53b81491a.js +1 -0
  440. package/.next/static/chunks/app/api/packages/install/route-c745e5b53b81491a.js +1 -0
  441. package/.next/static/chunks/app/api/packages/install/status/route-c745e5b53b81491a.js +1 -0
  442. package/.next/static/chunks/app/api/packages/installed/route-c745e5b53b81491a.js +1 -0
  443. package/.next/static/chunks/app/api/packages/resolve/route-c745e5b53b81491a.js +1 -0
  444. package/.next/static/chunks/app/api/packages/uninstall/route-c745e5b53b81491a.js +1 -0
  445. package/.next/static/chunks/app/api/planned-executions/[id]/route-c745e5b53b81491a.js +1 -0
  446. package/.next/static/chunks/app/api/planned-executions/[id]/run/route-c745e5b53b81491a.js +1 -0
  447. package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-c745e5b53b81491a.js +1 -0
  448. package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-c745e5b53b81491a.js +1 -0
  449. package/.next/static/chunks/app/api/planned-executions/reconcile/route-c745e5b53b81491a.js +1 -0
  450. package/.next/static/chunks/app/api/planned-executions/route-c745e5b53b81491a.js +1 -0
  451. package/.next/static/chunks/app/api/registry/auth/resend/route-c745e5b53b81491a.js +1 -0
  452. package/.next/static/chunks/app/api/registry/auth/reset/route-c745e5b53b81491a.js +1 -0
  453. package/.next/static/chunks/app/api/registry/auth/route-c745e5b53b81491a.js +1 -0
  454. package/.next/static/chunks/app/api/registry/oauth/callback/route-c745e5b53b81491a.js +1 -0
  455. package/.next/static/chunks/app/api/registry/oauth/initiate/route-c745e5b53b81491a.js +1 -0
  456. package/.next/static/chunks/app/api/registry/publish/route-c745e5b53b81491a.js +1 -0
  457. package/.next/static/chunks/app/api/registry/settings/route-c745e5b53b81491a.js +1 -0
  458. package/.next/static/chunks/app/api/restore/route-c745e5b53b81491a.js +1 -0
  459. package/.next/static/chunks/app/api/runs/active/route-c745e5b53b81491a.js +1 -0
  460. package/.next/static/chunks/app/api/storage/route-c745e5b53b81491a.js +1 -0
  461. package/.next/static/chunks/app/api/update/route-c745e5b53b81491a.js +1 -0
  462. package/.next/static/chunks/app/api/waves/route-c745e5b53b81491a.js +1 -0
  463. package/.next/static/chunks/app/api/webhooks/[id]/route-c745e5b53b81491a.js +1 -0
  464. package/.next/static/chunks/app/chat/page-c39160ddf90bbae9.js +1 -0
  465. package/.next/static/chunks/app/docs/page-250523af44e96120.js +1 -0
  466. package/.next/static/chunks/app/executions/{page-bb2fef60b2240f69.js → page-10d09f36de30939f.js} +1 -1
  467. package/.next/static/chunks/app/flows/page-0d8fb471adfc2981.js +1 -0
  468. package/.next/static/chunks/app/mcp/page-8ad71bf5801bfe5f.js +1 -0
  469. package/.next/static/chunks/app/mcp-flows/route-c745e5b53b81491a.js +1 -0
  470. package/.next/static/chunks/app/mcp-proxy/[server]/route-c745e5b53b81491a.js +1 -0
  471. package/.next/static/chunks/app/models/{page-d71e5606a8e29479.js → page-17e8e6668f92f58d.js} +1 -1
  472. package/.next/static/chunks/app/packages/page-9f61751e98134f3d.js +1 -0
  473. package/.next/static/chunks/app/settings/page-afbf8790e99fecaf.js +1 -0
  474. package/.next/static/chunks/app/v1/chat/completions/route-c745e5b53b81491a.js +1 -0
  475. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-c745e5b53b81491a.js +1 -0
  476. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-c745e5b53b81491a.js +1 -0
  477. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-c745e5b53b81491a.js +1 -0
  478. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-c745e5b53b81491a.js +1 -0
  479. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-c745e5b53b81491a.js +1 -0
  480. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-c745e5b53b81491a.js +1 -0
  481. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/resources/route-c745e5b53b81491a.js +1 -0
  482. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-c745e5b53b81491a.js +1 -0
  483. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-c745e5b53b81491a.js +1 -0
  484. package/.next/static/chunks/app/v1/chat/conversations/route-c745e5b53b81491a.js +1 -0
  485. package/.next/static/chunks/app/v1/chat/events/route-c745e5b53b81491a.js +1 -0
  486. package/.next/static/chunks/app/v1/models/route-c745e5b53b81491a.js +1 -0
  487. package/.next/static/chunks/app/waves/page-97ad6b51c9cae4b3.js +1 -0
  488. package/.next/static/chunks/webpack-0d4a4e773990ac44.js +1 -0
  489. package/.next/trace +10 -9
  490. package/.next/types/app/api/flow/[id]/versions/[versionId]/route.ts +347 -0
  491. package/.next/types/app/api/flow/[id]/versions/route.ts +347 -0
  492. package/.next/types/app/api/mcp/app-sandbox/route.ts +347 -0
  493. package/.next/types/app/api/mcp/oauth-capability/route.ts +347 -0
  494. package/.next/types/app/api/packages/installed/route.ts +347 -0
  495. package/.next/types/app/api/packages/uninstall/route.ts +347 -0
  496. package/.next/types/app/api/registry/auth/reset/route.ts +347 -0
  497. package/.next/types/app/api/registry/oauth/callback/route.ts +347 -0
  498. package/.next/types/app/api/registry/oauth/initiate/route.ts +347 -0
  499. package/.next/types/app/v1/chat/events/route.ts +347 -0
  500. package/.next/types/routes.d.ts +11 -1
  501. package/.next/types/validator.ts +90 -0
  502. package/README.md +1 -1
  503. package/package.json +97 -95
  504. package/.next/server/chunks/237.js +0 -1
  505. package/.next/server/chunks/2373.js +0 -1
  506. package/.next/server/chunks/3569.js +0 -1
  507. package/.next/server/chunks/4545.js +0 -21
  508. package/.next/server/chunks/5094.js +0 -2
  509. package/.next/server/chunks/5734.js +0 -60
  510. package/.next/server/chunks/6996.js +0 -1
  511. package/.next/server/chunks/7028.js +0 -1
  512. package/.next/server/chunks/7362.js +0 -158
  513. package/.next/server/chunks/7485.js +0 -1
  514. package/.next/server/chunks/7764.js +0 -37
  515. package/.next/server/chunks/826.js +0 -52
  516. package/.next/server/chunks/8732.js +0 -62
  517. package/.next/server/chunks/8851.js +0 -1
  518. package/.next/static/O-elWbT5rs6ci1CrCqez1/_buildManifest.js +0 -1
  519. package/.next/static/chunks/2019-f22580cb726c5dca.js +0 -1
  520. package/.next/static/chunks/256-a13a59247ac6cc68.js +0 -1
  521. package/.next/static/chunks/2822-8168e3bb8443a1ec.js +0 -1
  522. package/.next/static/chunks/3560-5bdceef09b50e1c3.js +0 -1
  523. package/.next/static/chunks/5766-dbd21cb8435605aa.js +0 -1
  524. package/.next/static/chunks/5866-6834cbc4ab02d86f.js +0 -1
  525. package/.next/static/chunks/6691-117567b2b40cd9f4.js +0 -1
  526. package/.next/static/chunks/6961-a40e97c06e616300.js +0 -1
  527. package/.next/static/chunks/7554-db290baed5782cab.js +0 -8
  528. package/.next/static/chunks/812-8b3d4e0f6546d6f9.js +0 -1
  529. package/.next/static/chunks/app/api/approvals/[id]/route-3e3cc52436d34625.js +0 -1
  530. package/.next/static/chunks/app/api/approvals/route-3e3cc52436d34625.js +0 -1
  531. package/.next/static/chunks/app/api/backup/route-3e3cc52436d34625.js +0 -1
  532. package/.next/static/chunks/app/api/browse/route-3e3cc52436d34625.js +0 -1
  533. package/.next/static/chunks/app/api/bugs/enhance/route-3e3cc52436d34625.js +0 -1
  534. package/.next/static/chunks/app/api/cwd/route-3e3cc52436d34625.js +0 -1
  535. package/.next/static/chunks/app/api/encryption/secure/route-3e3cc52436d34625.js +0 -1
  536. package/.next/static/chunks/app/api/env/route-3e3cc52436d34625.js +0 -1
  537. package/.next/static/chunks/app/api/flow/[id]/route-3e3cc52436d34625.js +0 -1
  538. package/.next/static/chunks/app/api/flow/compile/route-3e3cc52436d34625.js +0 -1
  539. package/.next/static/chunks/app/api/flow/generate/route-3e3cc52436d34625.js +0 -1
  540. package/.next/static/chunks/app/api/flow/improve/route-3e3cc52436d34625.js +0 -1
  541. package/.next/static/chunks/app/api/flow/prompt-renderer/route-3e3cc52436d34625.js +0 -1
  542. package/.next/static/chunks/app/api/flow/quick-chat/route-3e3cc52436d34625.js +0 -1
  543. package/.next/static/chunks/app/api/flow/repair/route-3e3cc52436d34625.js +0 -1
  544. package/.next/static/chunks/app/api/flow/route-3e3cc52436d34625.js +0 -1
  545. package/.next/static/chunks/app/api/git/route-3e3cc52436d34625.js +0 -1
  546. package/.next/static/chunks/app/api/init/route-3e3cc52436d34625.js +0 -1
  547. package/.next/static/chunks/app/api/local-models/capability/route-3e3cc52436d34625.js +0 -1
  548. package/.next/static/chunks/app/api/local-models/pull/route-3e3cc52436d34625.js +0 -1
  549. package/.next/static/chunks/app/api/local-models/suggest/route-3e3cc52436d34625.js +0 -1
  550. package/.next/static/chunks/app/api/mcp/cancel/route-3e3cc52436d34625.js +0 -1
  551. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-3e3cc52436d34625.js +0 -1
  552. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-3e3cc52436d34625.js +0 -1
  553. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-3e3cc52436d34625.js +0 -1
  554. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-3e3cc52436d34625.js +0 -1
  555. package/.next/static/chunks/app/api/mcp/servers/[name]/route-3e3cc52436d34625.js +0 -1
  556. package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-3e3cc52436d34625.js +0 -1
  557. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-3e3cc52436d34625.js +0 -1
  558. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-3e3cc52436d34625.js +0 -1
  559. package/.next/static/chunks/app/api/mcp/servers/route-3e3cc52436d34625.js +0 -1
  560. package/.next/static/chunks/app/api/mcp/test-connection/route-3e3cc52436d34625.js +0 -1
  561. package/.next/static/chunks/app/api/mcp/test-connection/stream/route-3e3cc52436d34625.js +0 -1
  562. package/.next/static/chunks/app/api/mcp-registry/route-3e3cc52436d34625.js +0 -1
  563. package/.next/static/chunks/app/api/mcp-registry/spotlight/route-3e3cc52436d34625.js +0 -1
  564. package/.next/static/chunks/app/api/model/[id]/route-3e3cc52436d34625.js +0 -1
  565. package/.next/static/chunks/app/api/model/provider/route-3e3cc52436d34625.js +0 -1
  566. package/.next/static/chunks/app/api/model/route-3e3cc52436d34625.js +0 -1
  567. package/.next/static/chunks/app/api/model/test/route-3e3cc52436d34625.js +0 -1
  568. package/.next/static/chunks/app/api/oauth/callback/route-3e3cc52436d34625.js +0 -1
  569. package/.next/static/chunks/app/api/oauth/initiate/route-3e3cc52436d34625.js +0 -1
  570. package/.next/static/chunks/app/api/oauth/reset/route-3e3cc52436d34625.js +0 -1
  571. package/.next/static/chunks/app/api/packages/build/route-3e3cc52436d34625.js +0 -1
  572. package/.next/static/chunks/app/api/packages/derive-secrets/route-3e3cc52436d34625.js +0 -1
  573. package/.next/static/chunks/app/api/packages/install/route-3e3cc52436d34625.js +0 -1
  574. package/.next/static/chunks/app/api/packages/install/status/route-3e3cc52436d34625.js +0 -1
  575. package/.next/static/chunks/app/api/packages/resolve/route-3e3cc52436d34625.js +0 -1
  576. package/.next/static/chunks/app/api/planned-executions/[id]/route-3e3cc52436d34625.js +0 -1
  577. package/.next/static/chunks/app/api/planned-executions/[id]/run/route-3e3cc52436d34625.js +0 -1
  578. package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-3e3cc52436d34625.js +0 -1
  579. package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-3e3cc52436d34625.js +0 -1
  580. package/.next/static/chunks/app/api/planned-executions/reconcile/route-3e3cc52436d34625.js +0 -1
  581. package/.next/static/chunks/app/api/planned-executions/route-3e3cc52436d34625.js +0 -1
  582. package/.next/static/chunks/app/api/registry/auth/resend/route-3e3cc52436d34625.js +0 -1
  583. package/.next/static/chunks/app/api/registry/auth/route-3e3cc52436d34625.js +0 -1
  584. package/.next/static/chunks/app/api/registry/publish/route-3e3cc52436d34625.js +0 -1
  585. package/.next/static/chunks/app/api/registry/settings/route-3e3cc52436d34625.js +0 -1
  586. package/.next/static/chunks/app/api/restore/route-3e3cc52436d34625.js +0 -1
  587. package/.next/static/chunks/app/api/runs/active/route-3e3cc52436d34625.js +0 -1
  588. package/.next/static/chunks/app/api/storage/route-3e3cc52436d34625.js +0 -1
  589. package/.next/static/chunks/app/api/update/route-3e3cc52436d34625.js +0 -1
  590. package/.next/static/chunks/app/api/waves/route-3e3cc52436d34625.js +0 -1
  591. package/.next/static/chunks/app/api/webhooks/[id]/route-3e3cc52436d34625.js +0 -1
  592. package/.next/static/chunks/app/chat/page-93403b0e520ba8d3.js +0 -1
  593. package/.next/static/chunks/app/docs/page-2c972a639cd9a41c.js +0 -1
  594. package/.next/static/chunks/app/flows/page-d60c5b47c923564a.js +0 -1
  595. package/.next/static/chunks/app/mcp/page-92c03186d566a4f5.js +0 -1
  596. package/.next/static/chunks/app/mcp-flows/route-3e3cc52436d34625.js +0 -1
  597. package/.next/static/chunks/app/mcp-proxy/[server]/route-3e3cc52436d34625.js +0 -1
  598. package/.next/static/chunks/app/packages/page-e64480d78312edd0.js +0 -1
  599. package/.next/static/chunks/app/settings/page-d067a3a624ec2fa0.js +0 -1
  600. package/.next/static/chunks/app/v1/chat/completions/route-3e3cc52436d34625.js +0 -1
  601. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-3e3cc52436d34625.js +0 -1
  602. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-3e3cc52436d34625.js +0 -1
  603. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-3e3cc52436d34625.js +0 -1
  604. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-3e3cc52436d34625.js +0 -1
  605. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-3e3cc52436d34625.js +0 -1
  606. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-3e3cc52436d34625.js +0 -1
  607. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/resources/route-3e3cc52436d34625.js +0 -1
  608. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-3e3cc52436d34625.js +0 -1
  609. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-3e3cc52436d34625.js +0 -1
  610. package/.next/static/chunks/app/v1/chat/conversations/route-3e3cc52436d34625.js +0 -1
  611. package/.next/static/chunks/app/v1/models/route-3e3cc52436d34625.js +0 -1
  612. package/.next/static/chunks/app/waves/page-ff15db2f75fb5d62.js +0 -1
  613. package/.next/static/chunks/webpack-2b2d7505a2ac6538.js +0 -1
  614. /package/.next/static/{O-elWbT5rs6ci1CrCqez1 → Q6ITx_bZyoEOnKdZu_C7j}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- "use strict";exports.id=4265,exports.ids=[4265],exports.modules={14265:(a,b,c)=>{let d;c.d(b,{LG:()=>T,aM:()=>S,a$:()=>Q,e3:()=>O});var e=c(50846),f=c(8665),g=c(25250),h=c(61397),i=c(92372);let j=(0,e.h)("backend/services/mcp/quality/cache"),k="mcp-quality-cache";class l{constructor(a=Date.now()){this.entries={},this.dirty=!1,this.now=a}async load(){try{let a=await (0,i.YM)(k,{entries:{}});this.entries=a?.entries&&"object"==typeof a.entries?a.entries:{}}catch(a){j.warn("Failed to load quality cache; starting empty",a),this.entries={}}}get(a,b){let c=this.entries[`${a}::${b}`];if(c&&!(this.now-c.at>864e5))return c.signal}set(a,b,c){this.entries[`${a}::${b}`]={at:this.now,signal:c},this.dirty=!0}async flush(){let a=!1;for(let[b,c]of Object.entries(this.entries))this.now-c.at>864e5&&(delete this.entries[b],a=!0);if(this.dirty||a)try{await (0,i.VH)(k,{entries:this.entries})}catch(a){j.warn("Failed to persist quality cache",a)}}}function m(a){return!Number.isFinite(a)||a<0?0:a>1?1:a}function n(a,b){return!Number.isFinite(a)||a<=0?0:!Number.isFinite(b)||b<=1?+(a>0):m(Math.log10(a+1)/Math.log10(b+1))}let o=(0,e.h)("backend/services/mcp/quality/providers/githubStars"),p="github",q=new Map;function r(){return d??(process.env.GITHUB_TOKEN||void 0)}function s(a){let b,c=a.server.repository;if(c?.source&&"github"!==c.source.toLowerCase())return null;var d=c?.url;if(!d)return null;try{b=new URL(d.replace(/^git\+/,""))}catch{return null}if(!/(^|\.)github\.com$/i.test(b.hostname))return null;let e=b.pathname.replace(/\.git$/i,"").split("/").filter(Boolean);return e.length<2?null:`${e[0]}/${e[1]}`.toLowerCase()}async function t(a,b){let c=new AbortController,d=()=>c.abort();b.addEventListener("abort",d,{once:!0});let e=setTimeout(()=>c.abort(),6e3);try{return await fetch(`https://api.github.com${a}`,{headers:function(){let a={Accept:"application/vnd.github+json","User-Agent":"FLUJO-mcp-quality","X-GitHub-Api-Version":"2022-11-28"},b=r();return b&&(a.Authorization=`Bearer ${b}`),a}(),signal:c.signal,cache:"no-store"})}catch(b){return o.warn(`GitHub request failed (${a})`,b instanceof Error?b.message:b),null}finally{clearTimeout(e),b.removeEventListener("abort",d)}}function u(a){return(403===a.status||429===a.status)&&"0"===a.headers.get("x-ratelimit-remaining")}let v=(0,e.h)("backend/services/mcp/quality/providers/npmDownloads"),w="npm-downloads",x=new Map;function y(a){for(let b of a.server.packages??[])if("npm"===b.registryType&&b.identifier)return b.identifier;return null}function z(a){return a.startsWith("@")}async function A(a,b){let c=new AbortController,d=()=>c.abort();b.addEventListener("abort",d,{once:!0});let e=setTimeout(()=>c.abort(),6e3);try{return await fetch(`https://api.npmjs.org${a}`,{signal:c.signal,cache:"no-store"})}catch(b){return v.warn(`npm request failed (${a})`,b instanceof Error?b.message:b),null}finally{clearTimeout(e),b.removeEventListener("abort",d)}}let B="registry-status",C=[{id:p,label:"GitHub Stars & Activity",defaultWeight:.5,isApplicable:a=>null!==s(a),cacheKey:a=>s(a),async prefetch(a,b,c){let d=`${a??""} mcp`.trim(),e=`/search/repositories?q=${encodeURIComponent(d)}&sort=stars&order=desc&per_page=50`,f=await t(e,c);if(f&&f.ok)try{for(let a of(await f.json()).items??[])a.full_name&&q.set(a.full_name.toLowerCase(),{stars:"number"==typeof a.stargazers_count?a.stargazers_count:0,pushedAtMs:a.pushed_at?Date.parse(a.pushed_at):null})}catch(a){o.warn("Failed to parse GitHub search response",a)}else if(f&&u(f))return void o.warn("GitHub search rate-limited; ranking will degrade to other providers");if(!r())return;let g=3;for(let a of b){if(g<=0)break;let b=s(a);if(!b||q.has(b))continue;g-=1;let d=await t(`/repos/${b}`,c);if(d){if(u(d))break;if(d.ok)try{let a=await d.json();q.set(b,{stars:"number"==typeof a.stargazers_count?a.stargazers_count:0,pushedAtMs:a.pushed_at?Date.parse(a.pushed_at):null})}catch{}}}},async fetch(a){let b=s(a);if(!b)return null;let c=q.get(b);if(!c)return null;let d=n(c.stars,5e4),e=function(a,b,c=30,d=730){if(!a||!Number.isFinite(a))return 0;let e=(b-a)/864e5;return e<=c?1:e>=d?0:m(1-(e-c)/(d-c))}(c.pushedAtMs,Date.now());return{providerId:p,score:m(.7*d+.3*e),evidence:{repo:b,stars:c.stars,...c.pushedAtMs?{pushedAt:new Date(c.pushedAtMs).toISOString()}:{},starsScore:d,recencyScore:e}}}},{id:w,label:"npm Weekly Downloads",defaultWeight:.35,isApplicable:a=>null!==y(a),cacheKey:a=>y(a),async prefetch(a,b,c){let d=b.map(y).filter(a=>!!a&&!x.has(a)),e=d.filter(a=>!z(a)),f=d.filter(z);for(let a=0;a<e.length;a+=100){let b=e.slice(a,a+100),d=await A(`/downloads/point/last-week/${b.join(",")}`,c);if(d&&d.ok)try{let a=await d.json();if(1===b.length)"number"==typeof a.downloads&&x.set(b[0],a.downloads);else for(let c of b){let b=a[c];x.set(c,b&&"number"==typeof b.downloads?b.downloads:0)}}catch(a){v.warn("Failed to parse npm bulk downloads response",a)}}for(let a of f){let b=await A(`/downloads/point/last-week/${a}`,c);if(b&&b.ok)try{let c=await b.json();"number"==typeof c.downloads&&x.set(a,c.downloads)}catch{}}},async fetch(a){let b=y(a);if(!b)return null;let c=x.get(b);return void 0===c?null:{providerId:w,score:n(c,1e6),evidence:{package:b,weeklyDownloads:c}}}},{id:B,label:"Registry Status",defaultWeight:.15,isApplicable:a=>!0,cacheKey:()=>null,fetch:async a=>({providerId:B,score:+("active"===a.verificationStatus),evidence:{status:a.verificationStatus}})}];var D=c(46480);let E=(0,e.h)("backend/services/mcp/quality/settings");function F(){return{providers:C.map(a=>({id:a.id,enabled:!0,weight:a.defaultWeight})),minScore:0,worksGate:!0}}async function G(){try{let a=await (0,i.YM)(D.Z.MCP_QUALITY_SETTINGS,F());return function(a){var b,c;let d=F(),e=a??{},f=new Map;if(Array.isArray(e.providers))for(let a of e.providers)a&&"string"==typeof a.id&&f.set(a.id,a);return{providers:d.providers.map(a=>{let b=f.get(a.id);return{id:a.id,enabled:"boolean"==typeof b?.enabled?b.enabled:a.enabled,weight:"number"==typeof b?.weight&&Number.isFinite(b.weight)&&b.weight>=0?b.weight:a.weight}}),minScore:(b=e.minScore,c=d.minScore,"number"==typeof b&&Number.isFinite(b)?Math.min(1,Math.max(0,b)):c),worksGate:"boolean"==typeof e.worksGate?e.worksGate:d.worksGate,..."string"==typeof e.githubToken&&e.githubToken.length>0?{githubToken:e.githubToken}:{}}}(a)}catch(a){return E.warn("Failed to load mcpQuality settings; using defaults",a),F()}}let H=(0,e.h)("backend/services/mcp/quality/orchestrator");async function I(a,b){let c=new AbortController,d=setTimeout(()=>c.abort(),b);try{return await a(c.signal)}finally{clearTimeout(d)}}async function J(a,b,c={}){let e=c.topN??10;try{var f;let g=c.settings??await G(),h=C.filter(a=>(function(a,b){let c=a.providers.find(a=>a.id===b);return!!c?.enabled})(g,a.id));if(0===h.length)return b.map(a=>({candidate:a,score:0,signals:[]}));d=(f=g.githubToken)&&f.length>0?f:void 0;let i=b.slice(0,e),j=b.slice(e),k=new l(c.now??Date.now());await k.load();let n=i.map(()=>[]);for(let b of h){let c=i.map((a,b)=>({c:a,i:b})).filter(({c:a})=>b.isApplicable(a)),d=[],e=[];for(let a of c){let c=b.cacheKey(a.c);if(c){let d=k.get(b.id,c);if(d){e.push({i:a.i,signal:d});continue}}d.push(a)}if(b.prefetch&&d.length>0)try{await I(c=>b.prefetch(a,d.map(a=>a.c),c),12e3)}catch(a){H.warn(`Provider "${b.id}" prefetch failed; degrading`,a)}for(let{c:a,i:c}of d)try{let d=await I(c=>b.fetch(a,c),2e3);if(d){n[c].push(d);let e=b.cacheKey(a);e&&k.set(b.id,e,d)}}catch(c){H.warn(`Provider "${b.id}" fetch failed for "${a.registryName}"`,c)}for(let{i:a,signal:b}of e)n[a].push(b)}await k.flush();let o=i.map((a,b)=>{let c=n[b],d=new Map(c.map(a=>[a.providerId,a])),e=h.filter(b=>b.isApplicable(a)).map(a=>({providerId:a.id,weight:function(a,b){let c=a.providers.find(a=>a.id===b);return c&&c.enabled?c.weight:0}(g,a.id),score:d.get(a.id)?.score??0})),{score:f}=function(a){let b=0,c=0;for(let d of a){let a=Number.isFinite(d.weight)&&d.weight>0?d.weight:0,e=m(d.score);b+=a,c+=a*e}return{score:b>0?c/b:0,breakdown:a}}(e);return{candidate:a,score:f,signals:c}}).map((a,b)=>({s:a,idx:b})).sort((a,b)=>b.s.score-a.s.score||a.idx-b.idx).map(a=>a.s),p=j.map(a=>({candidate:a,score:0,signals:[]}));return[...o,...p]}catch(a){return H.warn("enrichAndRank failed; returning unranked candidates",a),b.map(a=>({candidate:a,score:0,signals:[]}))}}let K=(0,e.h)("backend/services/mcp/registryInstall"),L="/v0.1/servers";function M(a){return{registryName:a.server.name,server:a.server,verificationStatus:(0,g.vf)(a)}}function N(a){let b=b=>a.signals.find(a=>a.providerId===b)?.evidence,c=b(p),d=b(w),e=b(B);return{score:a.score,..."number"==typeof c?.stars?{stars:c.stars}:{},..."number"==typeof d?.weeklyDownloads?{weeklyDownloads:d.weeklyDownloads}:{},..."string"==typeof e?.status?{status:e.status}:{}}}async function O(a,b=8){let c=await P(a,b);return(await J(a,c.map(M))).map(a=>(function(a,b){let c=(0,g.AH)(a),d=c[0];return{name:a.name,...a.title?{title:a.title}:{},...a.description?{description:a.description}:{},installable:c.length>0,requiredEnv:d?(0,g.jg)(d):[],...b?{quality:N(b)}:{}}})(a.candidate.server,a))}async function P(a,b){let c=new URL(f.jD+L);c.searchParams.set("version","latest"),c.searchParams.set("limit",String(Math.min(Math.max(b,1),30))),a&&c.searchParams.set("search",a);let d=await (0,f.Ws)(c,15e3);return Array.isArray(d?.servers)?d.servers:[]}async function Q(a,b){try{let c=await J(a,b.map(M)),d=new Map(b.map(a=>[a.server.name,a])),e=[];for(let a of c){let b=d.get(a.candidate.server.name);b&&e.push(a.signals.length>0?{...b,quality:N(a)}:b)}return e.length===b.length?e:b}catch{return b}}async function R(a){let b=new URL(f.jD+L);b.searchParams.set("version","latest"),b.searchParams.set("limit","10"),b.searchParams.set("search",a);let c=await (0,f.Ws)(b,15e3),d=Array.isArray(c?.servers)?c.servers:[];return d.find(b=>b.server?.name===a)??d[0]??null}async function S(a,b,c){let d;if(!a||"string"!=typeof a)return{installed:!1,error:"A registry server name is required"};try{d=await R(a)}catch(a){return{installed:!1,error:`Registry lookup failed: ${a instanceof Error?a.message:String(a)}`}}let e=d?.server??null;if(!e)return{installed:!1,error:`No registry entry found for "${a}"`};let f=(0,g.AH)(e)[0];if(!f)return{installed:!1,error:`"${e.name}" has no install method FLUJO supports (stdio package or HTTP remote)`};let i=(0,g.vf)(d),j=(0,g.O$)(a,e,f,i);if(c?.resolveOnly)return{installed:!1,serverName:j.serverName,plan:j};let k=(0,g.jg)(f,b);if(k.length>0)return{installed:!1,needsEnv:k,plan:j,error:`"${e.name}" requires values for: ${k.join(", ")}`};let l=(0,g.cy)((0,g.Yr)(e,f),b),m=l.name,n=await h.mcpService.loadServerConfigs();if(Array.isArray(n)&&n.some(a=>a.name===m)){K.info(`installRegistryServer: "${m}" already configured; reusing`);let{tools:a,error:b}=await h.mcpService.listServerTools(m);return{installed:!0,alreadyExisted:!0,serverName:m,plan:j,tools:(a??[]).map(a=>({name:a.name,...a.description?{description:a.description}:{}})),...b?{error:b}:{}}}K.info(`installRegistryServer: installing "${e.name}" as "${m}" (${f.kind})`);let o=await h.mcpService.updateServerConfig(m,l);if(!Array.isArray(o)&&o&&"success"in o&&!1===o.success)return{installed:!1,error:`Saving the server failed: ${o.error??"unknown error"}`};let{tools:p,error:q}=await h.mcpService.listServerTools(m),r=(p??[]).map(a=>({name:a.name,...a.description?{description:a.description}:{}}));if((c?.worksGate??(await G()).worksGate)&&0===r.length){K.warn(`installRegistryServer: "${m}" exposed no tools${q?` (${q})`:""}; rolling back (works-gate)`);try{await h.mcpService.deleteServerConfig(m)}catch(a){K.error(`installRegistryServer: rollback of "${m}" failed`,a)}return{installed:!1,worksGateRejected:!0,serverName:m,plan:j,error:q?`"${e.name}" failed to start: ${q}`:`"${e.name}" connected but exposed no tools — rejected by the works-gate. Try a different server.`}}return{installed:!0,serverName:m,plan:j,tools:r,...q?{error:q}:{}}}async function T(a,b,c){let d;if(!a||"string"!=typeof a)return{installed:!1,error:"A capability search query is required"};try{d=await P(a,10)}catch(a){return{installed:!1,error:`Registry lookup failed: ${a instanceof Error?a.message:String(a)}`}}let e=await J(a,d.map(M)),f=await G(),h=c?.minScore??f.minScore,i=c?.maxAttempts??3,j=[],k=0;for(let a of e){let d=a.candidate.registryName;if(a.score<h){j.push({name:d,score:a.score,reason:`below minScore ${h}`});break}if(0===(0,g.AH)(a.candidate.server).length){j.push({name:d,score:a.score,reason:"no supported install method"});continue}if(k>=i)break;k+=1;let e=await S(d,b,{worksGate:!0});if(c?.onAttempt)try{await c.onAttempt(e.plan,e)}catch(a){K.error("installBestForCapability: onAttempt hook failed",a)}if(e.installed)return{...e,attempts:j};let f=e.needsEnv?.length?`needs env: ${e.needsEnv.join(", ")}`:e.worksGateRejected?"works-gate rejected (no tools / failed to start)":e.error??"install failed";j.push({name:d,score:a.score,reason:f})}return{installed:!1,attempts:j,error:`No working server found for "${a}" among the top ${k} installable candidate(s).`}}}};
1
+ "use strict";exports.id=4265,exports.ids=[4265],exports.modules={14265:(a,b,c)=>{let d;c.d(b,{LG:()=>T,aM:()=>S,a$:()=>Q,e3:()=>O});var e=c(50846),f=c(8665),g=c(25250),h=c(24463),i=c(92372);let j=(0,e.h)("backend/services/mcp/quality/cache"),k="mcp-quality-cache";class l{constructor(a=Date.now()){this.entries={},this.dirty=!1,this.now=a}async load(){try{let a=await (0,i.YM)(k,{entries:{}});this.entries=a?.entries&&"object"==typeof a.entries?a.entries:{}}catch(a){j.warn("Failed to load quality cache; starting empty",a),this.entries={}}}get(a,b){let c=this.entries[`${a}::${b}`];if(c&&!(this.now-c.at>864e5))return c.signal}set(a,b,c){this.entries[`${a}::${b}`]={at:this.now,signal:c},this.dirty=!0}async flush(){let a=!1;for(let[b,c]of Object.entries(this.entries))this.now-c.at>864e5&&(delete this.entries[b],a=!0);if(this.dirty||a)try{await (0,i.VH)(k,{entries:this.entries})}catch(a){j.warn("Failed to persist quality cache",a)}}}function m(a){return!Number.isFinite(a)||a<0?0:a>1?1:a}function n(a,b){return!Number.isFinite(a)||a<=0?0:!Number.isFinite(b)||b<=1?+(a>0):m(Math.log10(a+1)/Math.log10(b+1))}let o=(0,e.h)("backend/services/mcp/quality/providers/githubStars"),p="github",q=new Map;function r(){return d??(process.env.GITHUB_TOKEN||void 0)}function s(a){let b,c=a.server.repository;if(c?.source&&"github"!==c.source.toLowerCase())return null;var d=c?.url;if(!d)return null;try{b=new URL(d.replace(/^git\+/,""))}catch{return null}if(!/(^|\.)github\.com$/i.test(b.hostname))return null;let e=b.pathname.replace(/\.git$/i,"").split("/").filter(Boolean);return e.length<2?null:`${e[0]}/${e[1]}`.toLowerCase()}async function t(a,b){let c=new AbortController,d=()=>c.abort();b.addEventListener("abort",d,{once:!0});let e=setTimeout(()=>c.abort(),6e3);try{return await fetch(`https://api.github.com${a}`,{headers:function(){let a={Accept:"application/vnd.github+json","User-Agent":"FLUJO-mcp-quality","X-GitHub-Api-Version":"2022-11-28"},b=r();return b&&(a.Authorization=`Bearer ${b}`),a}(),signal:c.signal,cache:"no-store"})}catch(b){return o.warn(`GitHub request failed (${a})`,b instanceof Error?b.message:b),null}finally{clearTimeout(e),b.removeEventListener("abort",d)}}function u(a){return(403===a.status||429===a.status)&&"0"===a.headers.get("x-ratelimit-remaining")}let v=(0,e.h)("backend/services/mcp/quality/providers/npmDownloads"),w="npm-downloads",x=new Map;function y(a){for(let b of a.server.packages??[])if("npm"===b.registryType&&b.identifier)return b.identifier;return null}function z(a){return a.startsWith("@")}async function A(a,b){let c=new AbortController,d=()=>c.abort();b.addEventListener("abort",d,{once:!0});let e=setTimeout(()=>c.abort(),6e3);try{return await fetch(`https://api.npmjs.org${a}`,{signal:c.signal,cache:"no-store"})}catch(b){return v.warn(`npm request failed (${a})`,b instanceof Error?b.message:b),null}finally{clearTimeout(e),b.removeEventListener("abort",d)}}let B="registry-status",C=[{id:p,label:"GitHub Stars & Activity",defaultWeight:.5,isApplicable:a=>null!==s(a),cacheKey:a=>s(a),async prefetch(a,b,c){let d=`${a??""} mcp`.trim(),e=`/search/repositories?q=${encodeURIComponent(d)}&sort=stars&order=desc&per_page=50`,f=await t(e,c);if(f&&f.ok)try{for(let a of(await f.json()).items??[])a.full_name&&q.set(a.full_name.toLowerCase(),{stars:"number"==typeof a.stargazers_count?a.stargazers_count:0,pushedAtMs:a.pushed_at?Date.parse(a.pushed_at):null})}catch(a){o.warn("Failed to parse GitHub search response",a)}else if(f&&u(f))return void o.warn("GitHub search rate-limited; ranking will degrade to other providers");if(!r())return;let g=3;for(let a of b){if(g<=0)break;let b=s(a);if(!b||q.has(b))continue;g-=1;let d=await t(`/repos/${b}`,c);if(d){if(u(d))break;if(d.ok)try{let a=await d.json();q.set(b,{stars:"number"==typeof a.stargazers_count?a.stargazers_count:0,pushedAtMs:a.pushed_at?Date.parse(a.pushed_at):null})}catch{}}}},async fetch(a){let b=s(a);if(!b)return null;let c=q.get(b);if(!c)return null;let d=n(c.stars,5e4),e=function(a,b,c=30,d=730){if(!a||!Number.isFinite(a))return 0;let e=(b-a)/864e5;return e<=c?1:e>=d?0:m(1-(e-c)/(d-c))}(c.pushedAtMs,Date.now());return{providerId:p,score:m(.7*d+.3*e),evidence:{repo:b,stars:c.stars,...c.pushedAtMs?{pushedAt:new Date(c.pushedAtMs).toISOString()}:{},starsScore:d,recencyScore:e}}}},{id:w,label:"npm Weekly Downloads",defaultWeight:.35,isApplicable:a=>null!==y(a),cacheKey:a=>y(a),async prefetch(a,b,c){let d=b.map(y).filter(a=>!!a&&!x.has(a)),e=d.filter(a=>!z(a)),f=d.filter(z);for(let a=0;a<e.length;a+=100){let b=e.slice(a,a+100),d=await A(`/downloads/point/last-week/${b.join(",")}`,c);if(d&&d.ok)try{let a=await d.json();if(1===b.length)"number"==typeof a.downloads&&x.set(b[0],a.downloads);else for(let c of b){let b=a[c];x.set(c,b&&"number"==typeof b.downloads?b.downloads:0)}}catch(a){v.warn("Failed to parse npm bulk downloads response",a)}}for(let a of f){let b=await A(`/downloads/point/last-week/${a}`,c);if(b&&b.ok)try{let c=await b.json();"number"==typeof c.downloads&&x.set(a,c.downloads)}catch{}}},async fetch(a){let b=y(a);if(!b)return null;let c=x.get(b);return void 0===c?null:{providerId:w,score:n(c,1e6),evidence:{package:b,weeklyDownloads:c}}}},{id:B,label:"Registry Status",defaultWeight:.15,isApplicable:a=>!0,cacheKey:()=>null,fetch:async a=>({providerId:B,score:+("active"===a.verificationStatus),evidence:{status:a.verificationStatus}})}];var D=c(38844);let E=(0,e.h)("backend/services/mcp/quality/settings");function F(){return{providers:C.map(a=>({id:a.id,enabled:!0,weight:a.defaultWeight})),minScore:0,worksGate:!0}}async function G(){try{let a=await (0,i.YM)(D.Z.MCP_QUALITY_SETTINGS,F());return function(a){var b,c;let d=F(),e=a??{},f=new Map;if(Array.isArray(e.providers))for(let a of e.providers)a&&"string"==typeof a.id&&f.set(a.id,a);return{providers:d.providers.map(a=>{let b=f.get(a.id);return{id:a.id,enabled:"boolean"==typeof b?.enabled?b.enabled:a.enabled,weight:"number"==typeof b?.weight&&Number.isFinite(b.weight)&&b.weight>=0?b.weight:a.weight}}),minScore:(b=e.minScore,c=d.minScore,"number"==typeof b&&Number.isFinite(b)?Math.min(1,Math.max(0,b)):c),worksGate:"boolean"==typeof e.worksGate?e.worksGate:d.worksGate,..."string"==typeof e.githubToken&&e.githubToken.length>0?{githubToken:e.githubToken}:{}}}(a)}catch(a){return E.warn("Failed to load mcpQuality settings; using defaults",a),F()}}let H=(0,e.h)("backend/services/mcp/quality/orchestrator");async function I(a,b){let c=new AbortController,d=setTimeout(()=>c.abort(),b);try{return await a(c.signal)}finally{clearTimeout(d)}}async function J(a,b,c={}){let e=c.topN??10;try{var f;let g=c.settings??await G(),h=C.filter(a=>(function(a,b){let c=a.providers.find(a=>a.id===b);return!!c?.enabled})(g,a.id));if(0===h.length)return b.map(a=>({candidate:a,score:0,signals:[]}));d=(f=g.githubToken)&&f.length>0?f:void 0;let i=b.slice(0,e),j=b.slice(e),k=new l(c.now??Date.now());await k.load();let n=i.map(()=>[]);for(let b of h){let c=i.map((a,b)=>({c:a,i:b})).filter(({c:a})=>b.isApplicable(a)),d=[],e=[];for(let a of c){let c=b.cacheKey(a.c);if(c){let d=k.get(b.id,c);if(d){e.push({i:a.i,signal:d});continue}}d.push(a)}if(b.prefetch&&d.length>0)try{await I(c=>b.prefetch(a,d.map(a=>a.c),c),12e3)}catch(a){H.warn(`Provider "${b.id}" prefetch failed; degrading`,a)}for(let{c:a,i:c}of d)try{let d=await I(c=>b.fetch(a,c),2e3);if(d){n[c].push(d);let e=b.cacheKey(a);e&&k.set(b.id,e,d)}}catch(c){H.warn(`Provider "${b.id}" fetch failed for "${a.registryName}"`,c)}for(let{i:a,signal:b}of e)n[a].push(b)}await k.flush();let o=i.map((a,b)=>{let c=n[b],d=new Map(c.map(a=>[a.providerId,a])),e=h.filter(b=>b.isApplicable(a)).map(a=>({providerId:a.id,weight:function(a,b){let c=a.providers.find(a=>a.id===b);return c&&c.enabled?c.weight:0}(g,a.id),score:d.get(a.id)?.score??0})),{score:f}=function(a){let b=0,c=0;for(let d of a){let a=Number.isFinite(d.weight)&&d.weight>0?d.weight:0,e=m(d.score);b+=a,c+=a*e}return{score:b>0?c/b:0,breakdown:a}}(e);return{candidate:a,score:f,signals:c}}).map((a,b)=>({s:a,idx:b})).sort((a,b)=>b.s.score-a.s.score||a.idx-b.idx).map(a=>a.s),p=j.map(a=>({candidate:a,score:0,signals:[]}));return[...o,...p]}catch(a){return H.warn("enrichAndRank failed; returning unranked candidates",a),b.map(a=>({candidate:a,score:0,signals:[]}))}}let K=(0,e.h)("backend/services/mcp/registryInstall"),L="/v0.1/servers";function M(a){return{registryName:a.server.name,server:a.server,verificationStatus:(0,g.vf)(a)}}function N(a){let b=b=>a.signals.find(a=>a.providerId===b)?.evidence,c=b(p),d=b(w),e=b(B);return{score:a.score,..."number"==typeof c?.stars?{stars:c.stars}:{},..."number"==typeof d?.weeklyDownloads?{weeklyDownloads:d.weeklyDownloads}:{},..."string"==typeof e?.status?{status:e.status}:{}}}async function O(a,b=8){let c=await P(a,b);return(await J(a,c.map(M))).map(a=>(function(a,b){let c=(0,g.AH)(a),d=c[0];return{name:a.name,...a.title?{title:a.title}:{},...a.description?{description:a.description}:{},installable:c.length>0,requiredEnv:d?(0,g.jg)(d):[],...b?{quality:N(b)}:{}}})(a.candidate.server,a))}async function P(a,b){let c=new URL(f.jD+L);c.searchParams.set("version","latest"),c.searchParams.set("limit",String(Math.min(Math.max(b,1),30))),a&&c.searchParams.set("search",a);let d=await (0,f.Ws)(c,15e3);return Array.isArray(d?.servers)?d.servers:[]}async function Q(a,b){try{let c=await J(a,b.map(M)),d=new Map(b.map(a=>[a.server.name,a])),e=[];for(let a of c){let b=d.get(a.candidate.server.name);b&&e.push(a.signals.length>0?{...b,quality:N(a)}:b)}return e.length===b.length?e:b}catch{return b}}async function R(a){let b=new URL(f.jD+L);b.searchParams.set("version","latest"),b.searchParams.set("limit","10"),b.searchParams.set("search",a);let c=await (0,f.Ws)(b,15e3),d=Array.isArray(c?.servers)?c.servers:[];return d.find(b=>b.server?.name===a)??d[0]??null}async function S(a,b,c){let d;if(!a||"string"!=typeof a)return{installed:!1,error:"A registry server name is required"};try{d=await R(a)}catch(a){return{installed:!1,error:`Registry lookup failed: ${a instanceof Error?a.message:String(a)}`}}let e=d?.server??null;if(!e)return{installed:!1,error:`No registry entry found for "${a}"`};let f=(0,g.AH)(e)[0];if(!f)return{installed:!1,error:`"${e.name}" has no install method FLUJO supports (stdio package or HTTP remote)`};let i=(0,g.vf)(d),j=(0,g.O$)(a,e,f,i);if(c?.resolveOnly)return{installed:!1,serverName:j.serverName,plan:j};let k=(0,g.jg)(f,b);if(k.length>0)return{installed:!1,needsEnv:k,plan:j,error:`"${e.name}" requires values for: ${k.join(", ")}`};let l=(0,g.cy)((0,g.Yr)(e,f),b),m=l.name,n=await h.mcpService.loadServerConfigs();if(Array.isArray(n)&&n.some(a=>a.name===m)){K.info(`installRegistryServer: "${m}" already configured; reusing`);let{tools:a,error:b}=await h.mcpService.listServerTools(m);return{installed:!0,alreadyExisted:!0,serverName:m,plan:j,tools:(a??[]).map(a=>({name:a.name,...a.description?{description:a.description}:{}})),...b?{error:b}:{}}}K.info(`installRegistryServer: installing "${e.name}" as "${m}" (${f.kind})`);let o=await h.mcpService.updateServerConfig(m,l);if(!Array.isArray(o)&&o&&"success"in o&&!1===o.success)return{installed:!1,error:`Saving the server failed: ${o.error??"unknown error"}`};let{tools:p,error:q}=await h.mcpService.listServerTools(m),r=(p??[]).map(a=>({name:a.name,...a.description?{description:a.description}:{}}));if((c?.worksGate??(await G()).worksGate)&&0===r.length){K.warn(`installRegistryServer: "${m}" exposed no tools${q?` (${q})`:""}; rolling back (works-gate)`);try{await h.mcpService.deleteServerConfig(m)}catch(a){K.error(`installRegistryServer: rollback of "${m}" failed`,a)}return{installed:!1,worksGateRejected:!0,serverName:m,plan:j,error:q?`"${e.name}" failed to start: ${q}`:`"${e.name}" connected but exposed no tools — rejected by the works-gate. Try a different server.`}}return{installed:!0,serverName:m,plan:j,tools:r,...q?{error:q}:{}}}async function T(a,b,c){let d;if(!a||"string"!=typeof a)return{installed:!1,error:"A capability search query is required"};try{d=await P(a,10)}catch(a){return{installed:!1,error:`Registry lookup failed: ${a instanceof Error?a.message:String(a)}`}}let e=await J(a,d.map(M)),f=await G(),h=c?.minScore??f.minScore,i=c?.maxAttempts??3,j=[],k=0;for(let a of e){let d=a.candidate.registryName;if(a.score<h){j.push({name:d,score:a.score,reason:`below minScore ${h}`});break}if(0===(0,g.AH)(a.candidate.server).length){j.push({name:d,score:a.score,reason:"no supported install method"});continue}if(k>=i)break;k+=1;let e=await S(d,b,{worksGate:!0});if(c?.onAttempt)try{await c.onAttempt(e.plan,e)}catch(a){K.error("installBestForCapability: onAttempt hook failed",a)}if(e.installed)return{...e,attempts:j};let f=e.needsEnv?.length?`needs env: ${e.needsEnv.join(", ")}`:e.worksGateRejected?"works-gate rejected (no tools / failed to start)":e.error??"install failed";j.push({name:d,score:a.score,reason:f})}return{installed:!1,attempts:j,error:`No working server found for "${a}" among the top ${k} installable candidate(s).`}}}};
@@ -1,6 +1,6 @@
1
- exports.id=4426,exports.ids=[1925,3629,4306,4426],exports.modules={1925:(a,b,c)=>{"use strict";c.d(b,{Hm:()=>f,xc:()=>e});let d=["key","secret","token","password"],e=a=>d.some(b=>a.toLowerCase().includes(b)),f=a=>e(a)||"authorization"===a.trim().toLowerCase()},3676:(a,b,c)=>{"use strict";c.d(b,{Wj:()=>h,ln:()=>g});var d=c(10641),e=c(58739);let f="encryption_locked";async function g(){return(0,e.isEncryptionLocked)()}async function h(a){return await g()?a?.openai?d.NextResponse.json({error:{message:"Encryption is locked. Unlock FLUJO to continue.",type:f,code:f,param:null}},{status:423}):d.NextResponse.json({error:f},{status:423}):null}},37426:(a,b,c)=>{"use strict";c.r(b),c.d(b,{"40ec842092ea232b6d4aa599a380d422184da5e1ca":()=>d.c,"602ea7ca289a8eaa1000fb321a71e292e6c766b6bb":()=>d.G});var d=c(73456)},48312:(a,b,c)=>{"use strict";c.d(b,{cA:()=>p});var d=c(10641),e=c(50846),f=c(52940),g=c(38291),h=c(99978),i=c(57214),j=c(14214),k=c(20433);let l=(0,e.h)("app/v1/chat/completions/chatCompletionService");function m(a){return Math.ceil((a||"").length/4)}let n=g.n;async function o(a,b,c,e,f,g=!1,j=!1){let k=Date.now();l.info("Processing chat completion request",{model:a.model,messageCount:a.messages?.length||0,stream:a.stream,flujo:b,requireApproval:c,flujodebug:e,conversationId:f});let n=await (0,i.runFlow)({modelName:a.model,messages:a.messages,processNodeId:a.processNodeId,mode:"conversation",conversationId:f,flujo:b,requireApproval:c,debug:e,continueDebug:g,userTurn:j,source:"api"});if(n.flowNotFound)return d.NextResponse.json({error:{message:`Flow not found: ${n.flowNotFound.name}`,type:"invalid_request_error",code:"flow_not_found"}},{status:400});if("paused_debug"===n.status)return l.info(`Returning paused debug state for conv ${n.conversationId}`),d.NextResponse.json({status:"paused_debug",conversation_id:n.conversationId,debugState:n.sharedState});if("error"===n.status){let a=n.error?.message??"Unknown error during execution",b=n.error?.details??{message:a},c=n.error?.statusCode??500;return l.error(`Returning error response for conv ${n.conversationId}`,{errorMessage:a,errorDetails:b,statusCode:c}),d.NextResponse.json({error:{message:a,type:b.type||"api_error",code:b.code||"internal_error",param:b.param,details:b}},{status:c})}let p={role:"assistant",content:n.outputText,tool_calls:n.toolCalls},q="stop";"awaiting_tool_approval"===n.sharedState.status?q="stop":n.finalAction===h.Jp&&p.tool_calls&&p.tool_calls.length>0?q="tool_calls":n.finalAction===h.E5&&(q="length");let r=m(n.messages.map(a=>a.content||"").join("\n")),s=m(n.outputText),t={id:`chatcmpl-${Date.now()}`,object:"chat.completion",created:Math.floor(k/1e3),model:a.model,choices:[{index:0,message:p,finish_reason:q}],usage:{prompt_tokens:r,completion_tokens:s,total_tokens:r+s},messages:n.messages,conversation_id:n.conversationId,status:n.sharedState.status||(n.finalAction===h.g4?"completed":"running"),pendingToolCalls:n.sharedState.pendingToolCalls};return l.info(`Returning success response for conv ${n.conversationId}`,{action:n.finalAction,status:t.status,flujo:b,requireApproval:c,flujodebug:e,finish_reason:q}),l.verbose(`Final response data for conv ${n.conversationId}`,t),d.NextResponse.json(t)}async function p(a,b,c,d,e,g=!1,h=!1){if("string"==typeof a.model&&a.model.startsWith("model-"))return(b||c||d||e)&&l.debug("Ignoring flow-only flags on a direct model completion",{flujo:b,requireApproval:c,flujodebug:d,conversationId:e}),q(a);if(!0!==a.stream)return o(a,b,c,d,e,g,h);{let i=e||crypto.randomUUID();return l.info(`Streaming requested for conversation ${i}. Starting async processing.`),o(a,b,c,d,i,g,h).catch(a=>{l.error(`Error in background processing for conversation ${i}:`,a);let b=f.FlowExecutor.conversationStates.get(i);b&&(b.status="error",b.lastResponse={success:!1,error:a instanceof Error?a.message:String(a)},f.FlowExecutor.conversationStates.set(i,b),n(`conversations/${i}`,b).catch(a=>{l.error(`Failed to save error state for conversation ${i}:`,a)})),j.$.emitterFor(i)({type:"run:done",status:"error"})}),function(a,b){let c=new TextEncoder,d=`chatcmpl-${Date.now()}`,e=Math.floor(Date.now()/1e3);return l.debug("create streaming response (event-bus driven)",{conversationId:b}),new Response(new ReadableStream({start(g){let h=!1,i=null,k=-1,l=a=>{g.enqueue(c.encode(`data: ${JSON.stringify(a)}
1
+ exports.id=4426,exports.ids=[1925,3629,4306,4426],exports.modules={1925:(a,b,c)=>{"use strict";c.d(b,{Hm:()=>f,xc:()=>e});let d=["key","secret","token","password"],e=a=>d.some(b=>a.toLowerCase().includes(b)),f=a=>e(a)||"authorization"===a.trim().toLowerCase()},3676:(a,b,c)=>{"use strict";c.d(b,{Wj:()=>h,ln:()=>g});var d=c(10641),e=c(58739);let f="encryption_locked";async function g(){return(0,e.isEncryptionLocked)()}async function h(a){return await g()?a?.openai?d.NextResponse.json({error:{message:"Encryption is locked. Unlock FLUJO to continue.",type:f,code:f,param:null}},{status:423}):d.NextResponse.json({error:f},{status:423}):null}},37426:(a,b,c)=>{"use strict";c.r(b),c.d(b,{"40ec842092ea232b6d4aa599a380d422184da5e1ca":()=>d.resolveGlobalVars,"602ea7ca289a8eaa1000fb321a71e292e6c766b6bb":()=>d.G});var d=c(73456)},48312:(a,b,c)=>{"use strict";c.d(b,{cA:()=>p});var d=c(10641),e=c(50846),f=c(52940),g=c(38291),h=c(99978),i=c(57214),j=c(14214),k=c(20433);let l=(0,e.h)("app/v1/chat/completions/chatCompletionService");function m(a){return Math.ceil((a||"").length/4)}let n=g.n;async function o(a,b,c,e,f,g=!1,j=!1){let k=Date.now();l.info("Processing chat completion request",{model:a.model,messageCount:a.messages?.length||0,stream:a.stream,flujo:b,requireApproval:c,flujodebug:e,conversationId:f});let n=await (0,i.runFlow)({modelName:a.model,messages:a.messages,processNodeId:a.processNodeId,mode:"conversation",conversationId:f,flujo:b,requireApproval:c,debug:e,continueDebug:g,userTurn:j,source:"api"});if(n.flowNotFound)return d.NextResponse.json({error:{message:`Flow not found: ${n.flowNotFound.name}`,type:"invalid_request_error",code:"flow_not_found"}},{status:400});if("paused_debug"===n.status)return l.info(`Returning paused debug state for conv ${n.conversationId}`),d.NextResponse.json({status:"paused_debug",conversation_id:n.conversationId,debugState:n.sharedState});if("error"===n.status){let a=n.error?.message??"Unknown error during execution",b=n.error?.details??{message:a},c=n.error?.statusCode??500;return l.error(`Returning error response for conv ${n.conversationId}`,{errorMessage:a,errorDetails:b,statusCode:c}),d.NextResponse.json({error:{message:a,type:b.type||"api_error",code:b.code||"internal_error",param:b.param,details:b}},{status:c})}let p={role:"assistant",content:n.outputText,tool_calls:n.toolCalls},q="stop";"awaiting_tool_approval"===n.sharedState.status?q="stop":n.finalAction===h.Jp&&p.tool_calls&&p.tool_calls.length>0?q="tool_calls":n.finalAction===h.E5&&(q="length");let r=m(n.messages.map(a=>a.content||"").join("\n")),s=m(n.outputText),t={id:`chatcmpl-${Date.now()}`,object:"chat.completion",created:Math.floor(k/1e3),model:a.model,choices:[{index:0,message:p,finish_reason:q}],usage:{prompt_tokens:r,completion_tokens:s,total_tokens:r+s},messages:n.messages,conversation_id:n.conversationId,status:n.sharedState.status||(n.finalAction===h.g4?"completed":"running"),pendingToolCalls:n.sharedState.pendingToolCalls};return l.info(`Returning success response for conv ${n.conversationId}`,{action:n.finalAction,status:t.status,flujo:b,requireApproval:c,flujodebug:e,finish_reason:q}),l.verbose(`Final response data for conv ${n.conversationId}`,t),d.NextResponse.json(t)}async function p(a,b,c,d,e,g=!1,h=!1){if("string"==typeof a.model&&a.model.startsWith("model-"))return(b||c||d||e)&&l.debug("Ignoring flow-only flags on a direct model completion",{flujo:b,requireApproval:c,flujodebug:d,conversationId:e}),q(a);if(!0!==a.stream)return o(a,b,c,d,e,g,h);{let i=e||crypto.randomUUID();return l.info(`Streaming requested for conversation ${i}. Starting async processing.`),o(a,b,c,d,i,g,h).catch(a=>{l.error(`Error in background processing for conversation ${i}:`,a);let b=f.FlowExecutor.conversationStates.get(i);b&&(b.status="error",b.lastResponse={success:!1,error:a instanceof Error?a.message:String(a)},f.FlowExecutor.conversationStates.set(i,b),n(`conversations/${i}`,b).catch(a=>{l.error(`Failed to save error state for conversation ${i}:`,a)})),j.$.emitterFor(i)({type:"run:done",status:"error"})}),function(a,b){let c=new TextEncoder,d=`chatcmpl-${Date.now()}`,e=Math.floor(Date.now()/1e3);return l.debug("create streaming response (event-bus driven)",{conversationId:b}),new Response(new ReadableStream({start(g){let h=!1,i=null,k=-1,l=a=>{g.enqueue(c.encode(`data: ${JSON.stringify(a)}
2
2
 
3
3
  `))},m=(b,c)=>({id:d,object:"chat.completion.chunk",created:e,model:a,choices:[{index:0,delta:b,finish_reason:c}]}),n=a=>{if(h)return;h=!0;let d="error"===a?"error":"stop";l(m({content:"",conversation:f.FlowExecutor.conversationStates.get(b)},d)),l(m({},d)),g.enqueue(c.encode("data: [DONE]\n\n")),i&&i();try{g.close()}catch{}},o=a=>{if(!h&&!(a.seq<=k))if(k=a.seq,"message"===a.type){let b=a.message;b&&"assistant"===b.role&&"string"==typeof b.content&&b.content.length>0&&l(m({content:b.content},null))}else"run:done"===a.type?n("error"===a.status?"error":"completed"):("run:awaiting_approval"===a.type||"run:paused"===a.type)&&n("stop")};for(let a of(l(m({role:"assistant",content:""},null)),i=j.$.subscribe(b,o),j.$.getBufferedSince(b,0)))o(a);if(!h){let a=f.FlowExecutor.conversationStates.get(b);a&&("completed"===a.status||"error"===a.status)&&n("error"===a.status?"error":"completed")}}}),{headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}})}(a.model,i)}}async function q(a){let b=a.model.slice(6);l.info("Processing direct model completion",{model:a.model,messageCount:a.messages?.length||0,stream:a.stream,hasTools:!!(a.tools&&a.tools.length>0)});let c=await k.modelService.generateChatCompletion({modelIdentifier:b,messages:a.messages,temperature:a.temperature,maxTokens:a.max_tokens,tools:a.tools});return c.success?!0===a.stream?function(a,b){let c=new TextEncoder,d=b.id||`chatcmpl-${Date.now()}`,e=b.created||Math.floor(Date.now()/1e3),f=b.choices?.[0],g=f?.finish_reason??"stop";return new Response(new ReadableStream({start(b){let h=a=>{b.enqueue(c.encode(`data: ${JSON.stringify(a)}
4
4
 
5
5
  `))},i=(b,c)=>({id:d,object:"chat.completion.chunk",created:e,model:a,choices:[{index:0,delta:b,finish_reason:c}]});h(i({role:"assistant",content:""},null));let j="string"==typeof f?.message?.content?f.message.content:"";j.length>0&&h(i({content:j},null));let k=f?.message?.tool_calls;k&&k.length>0&&h(i({tool_calls:k.map((a,b)=>({index:b,...a}))},null)),h(i({},g)),b.enqueue(c.encode("data: [DONE]\n\n")),b.close()}}),{headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}})}(a.model,c.completion):d.NextResponse.json(c.completion):(l.warn("Direct model completion failed",{model:a.model,code:c.error.code,statusCode:c.statusCode}),d.NextResponse.json({error:{message:c.error.message,type:c.error.type,code:c.error.code,param:c.error.param??null}},{status:c.statusCode}))}},51669:(a,b)=>{"use strict";function c(a){for(let b=0;b<a.length;b++){let c=a[b];if("function"!=typeof c)throw Object.defineProperty(Error(`A "use server" file can only export async functions, found ${typeof c}.
6
- Read more: https://nextjs.org/docs/messages/invalid-use-server-value`),"__NEXT_ERROR_CODE",{value:"E352",enumerable:!1,configurable:!0})}}Object.defineProperty(b,"D",{enumerable:!0,get:function(){return c}})},56793:(a,b,c)=>{"use strict";c.d(b,{eh:()=>g,ru:()=>e});let d=(0,c(50846).h)("backend/services/scheduler/flowRunEventBus");function e(a){return"signal"===a.kind}class f{publish(a){if(0===this.listeners.size)return;let b=e(a)?`signal topic=${a.topic} emitter=${a.emitterFlowId}`:`flow=${a.flowId} status=${a.status}`;for(let c of(d.debug(`Publishing flow event: ${b} firedBy=${a.firedBy} depth=${a.chainDepth} listeners=${this.listeners.size}`),[...this.listeners]))try{c(a)}catch(a){d.warn("A flow-run event listener threw:",a)}}subscribe(a){return this.listeners.add(a),()=>{this.listeners.delete(a)}}get listenerCount(){return this.listeners.size}constructor(){this.listeners=new Set}}function g(){return global.__flujo_flow_run_event_bus||(global.__flujo_flow_run_event_bus=new f),global.__flujo_flow_run_event_bus}},68633:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(b,{decryptActionBoundArgs:function(){return s},encryptActionBoundArgs:function(){return r}}),c(77925);let d=c(97954),e=c(27825),f=c(47686),g=c(77533),h=c(63033),i=c(26906),j=function(a){return a&&a.__esModule?a:{default:a}}(c(74515)),k=new TextEncoder,l=new TextDecoder,m=void 0,n=void 0;async function o(a,b){let c=await (0,g.getActionEncryptionKey)();if(void 0===c)throw Object.defineProperty(Error("Missing encryption key for Server Action. This is a bug in Next.js"),"__NEXT_ERROR_CODE",{value:"E65",enumerable:!1,configurable:!0});let d=atob(b),e=d.slice(0,16),f=d.slice(16),h=l.decode(await (0,g.decrypt)(c,(0,g.stringToUint8Array)(e),(0,g.stringToUint8Array)(f)));if(!h.startsWith(a))throw Object.defineProperty(Error("Invalid Server Action payload: failed to decrypt."),"__NEXT_ERROR_CODE",{value:"E191",enumerable:!1,configurable:!0});return h.slice(a.length)}async function p(a,b){let c=await (0,g.getActionEncryptionKey)();if(void 0===c)throw Object.defineProperty(Error("Missing encryption key for Server Action. This is a bug in Next.js"),"__NEXT_ERROR_CODE",{value:"E65",enumerable:!1,configurable:!0});let d=new Uint8Array(16);h.workUnitAsyncStorage.exit(()=>crypto.getRandomValues(d));let e=(0,g.arrayBufferToString)(d.buffer),f=await (0,g.encrypt)(c,d,k.encode(a+b));return btoa(e+(0,g.arrayBufferToString)(f))}var q=function(a){return a[a.Ready=0]="Ready",a[a.Pending=1]="Pending",a[a.Complete=2]="Complete",a}(q||{});let r=j.default.cache(async function a(b,...c){let e=h.workUnitAsyncStorage.getStore(),j=e?(0,h.getCacheSignal)(e):void 0,{clientModules:k}=(0,g.getClientReferenceManifestForRsc)(),l=Error();Error.captureStackTrace(l,a);let n=!1,o=e?(0,i.createHangingInputAbortSignal)(e):void 0,q=0;function r(){0===q&&(q=1,null==j||j.beginRead())}function s(){1===q&&(null==j||j.endRead()),q=2}o&&j&&o.addEventListener("abort",r,{once:!0});let t=await (0,f.streamToString)((0,d.renderToReadableStream)(c,k,{filterStackFrame:m,signal:o,onError(a){(null==o||!o.aborted)&&(n||(n=!0,l.message=a instanceof Error?a.message:String(a)))}}),o);if(n)throw s(),l;if(!e)return p(b,t);r();let u=(0,h.getPrerenderResumeDataCache)(e),v=(0,h.getRenderResumeDataCache)(e),w=b+t,x=(null==u?void 0:u.encryptedBoundArgs.get(w))??(null==v?void 0:v.encryptedBoundArgs.get(w));if(x)return x;let y=await p(b,t);return s(),null==u||u.encryptedBoundArgs.set(w,y),y});async function s(a,b){let c,d=await b,f=h.workUnitAsyncStorage.getStore();if(f){let b=(0,h.getCacheSignal)(f),e=(0,h.getPrerenderResumeDataCache)(f),g=(0,h.getRenderResumeDataCache)(f);(c=(null==e?void 0:e.decryptedBoundArgs.get(d))??(null==g?void 0:g.decryptedBoundArgs.get(d)))||(null==b||b.beginRead(),c=await o(a,d),null==b||b.endRead(),null==e||e.decryptedBoundArgs.set(d,c))}else c=await o(a,d);let{edgeRscModuleMapping:i,rscModuleMapping:j}=(0,g.getClientReferenceManifestForRsc)();return await (0,e.createFromReadableStream)(new ReadableStream({start(a){switch(a.enqueue(k.encode(c)),null==f?void 0:f.type){case"prerender":case"prerender-runtime":f.renderSignal.aborted?a.close():f.renderSignal.addEventListener("abort",()=>a.close(),{once:!0});break;case"prerender-client":case"prerender-ppr":case"prerender-legacy":case"request":case"cache":case"private-cache":case"unstable-cache":case void 0:return a.close()}}}),{findSourceMapURL:n,serverConsumerManifest:{moduleLoading:null,moduleMap:j,serverModuleMap:(0,g.getServerModuleMap)()}})}},73456:(a,b,c)=>{"use strict";c.d(b,{G:()=>l,c:()=>k});var d=c(75879);c(68633);var e=c(50846),f=c(92372),g=c(46480),h=c(58739),i=c(51669);let j=(0,e.h)("backend/utils/resolveGlobalVars");async function k(a){j.debug("Entering resolveGlobalVars method");let b=await (0,f.YM)(g.Z.GLOBAL_ENV_VARS,{}),c=function(a){if(!a||"object"!=typeof a)return!1;let b=Object.keys(a);if(0===b.length)return!0;let c=a[b[0]];return c&&"object"==typeof c&&"value"in c&&"metadata"in c&&"object"==typeof c.metadata&&"isSecret"in c.metadata}(b);j.debug(`Loaded ${Object.keys(b).length} global environment variables (${c?"new":"old"} format)`);let d={};if(c)for(let[a,c]of Object.entries(b))d[a]=c.value;else d={...b};let e=async a=>{let b=a.match(/\$\{global:([^}]+)\}/g);if(!b)return a;let c=a;for(let a of b){let b=a.substring(9,a.length-1);if(void 0!==d[b]){let e=d[b];if(e.startsWith("encrypted:")){j.debug(`Decrypting encrypted global variable: ${b}`);try{let a=e.substring(10),c=await (0,h.decryptWithPassword)(a);if(c)e=c,j.debug(`Successfully decrypted global variable: ${b}`);else{j.warn(`Failed to decrypt global variable: ${b}`);continue}}catch(a){j.error(`Error decrypting global variable: ${b}`,a);continue}}else if(e.startsWith("encrypted_failed:")){j.warn(`Skipping failed encrypted global variable: ${b}`);continue}j.debug(`Resolved global variable: ${b}`),c=c.replace(a,e)}else j.warn(`Global variable not found: ${b}`)}return c},i=async a=>{if("string"==typeof a)return await e(a);if(Array.isArray(a))return await Promise.all(a.map(a=>i(a)));if(null!==a&&"object"==typeof a){let b={};for(let[c,d]of Object.entries(a))b[c]=await i(d);return b}return a},k=await i(a);return"object"==typeof a&&null!==a&&j.debug("Resolved global variables result:",JSON.stringify(k,null,2)),j.debug("Completed global variable resolution"),k}async function l(a,b=0){if(j.debug(`Entering resolveAndDecryptApiKey method (depth: ${b})`),!a)return j.warn("Empty value provided"),null;if(b>=10)return j.warn(`Maximum resolution depth reached (10) for value: ${a}`),a;let c=a;if(c.startsWith("encrypted:")){j.debug(`Decrypting encrypted value at depth ${b}`);try{let a=c.substring(10),d=await (0,h.decryptWithPassword)(a);if(!d)return j.warn(`Failed to decrypt value at depth ${b}`),null;j.debug(`Successfully decrypted value at depth ${b}`),j.verbose(d),c=d}catch(a){return j.error(`Error decrypting value at depth ${b}:`,a),null}}else c.startsWith("encrypted_failed:")&&(j.warn(`Skipping failed encrypted value at depth ${b}`),c=c.substring(17));if(c.includes("${global:")){j.debug(`Resolving global variables at depth ${b}`);try{let a=await k(c);if(j.verbose(a),a!==c)return j.debug(`Value changed after resolving globals at depth ${b}, processing recursively`),l(a,b+1);c=a}catch(a){return j.error(`Error resolving global variables at depth ${b}:`,a),null}}return j.debug(`Completed resolveAndDecryptApiKey at depth ${b}`),c}(0,i.D)([k,l]),(0,d.A)(k,"40ec842092ea232b6d4aa599a380d422184da5e1ca",null),(0,d.A)(l,"602ea7ca289a8eaa1000fb321a71e292e6c766b6bb",null)},75879:(a,b,c)=>{"use strict";Object.defineProperty(b,"A",{enumerable:!0,get:function(){return d.registerServerReference}});let d=c(97954)},78335:()=>{},96487:()=>{}};
6
+ Read more: https://nextjs.org/docs/messages/invalid-use-server-value`),"__NEXT_ERROR_CODE",{value:"E352",enumerable:!1,configurable:!0})}}Object.defineProperty(b,"D",{enumerable:!0,get:function(){return c}})},56793:(a,b,c)=>{"use strict";c.d(b,{eh:()=>g,ru:()=>e});let d=(0,c(50846).h)("backend/services/scheduler/flowRunEventBus");function e(a){return"signal"===a.kind}class f{publish(a){if(0===this.listeners.size)return;let b=e(a)?`signal topic=${a.topic} emitter=${a.emitterFlowId}`:`flow=${a.flowId} status=${a.status}`;for(let c of(d.debug(`Publishing flow event: ${b} firedBy=${a.firedBy} depth=${a.chainDepth} listeners=${this.listeners.size}`),[...this.listeners]))try{c(a)}catch(a){d.warn("A flow-run event listener threw:",a)}}subscribe(a){return this.listeners.add(a),()=>{this.listeners.delete(a)}}get listenerCount(){return this.listeners.size}constructor(){this.listeners=new Set}}function g(){return global.__flujo_flow_run_event_bus||(global.__flujo_flow_run_event_bus=new f),global.__flujo_flow_run_event_bus}},68633:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(b,{decryptActionBoundArgs:function(){return s},encryptActionBoundArgs:function(){return r}}),c(77925);let d=c(97954),e=c(27825),f=c(47686),g=c(77533),h=c(63033),i=c(26906),j=function(a){return a&&a.__esModule?a:{default:a}}(c(74515)),k=new TextEncoder,l=new TextDecoder,m=void 0,n=void 0;async function o(a,b){let c=await (0,g.getActionEncryptionKey)();if(void 0===c)throw Object.defineProperty(Error("Missing encryption key for Server Action. This is a bug in Next.js"),"__NEXT_ERROR_CODE",{value:"E65",enumerable:!1,configurable:!0});let d=atob(b),e=d.slice(0,16),f=d.slice(16),h=l.decode(await (0,g.decrypt)(c,(0,g.stringToUint8Array)(e),(0,g.stringToUint8Array)(f)));if(!h.startsWith(a))throw Object.defineProperty(Error("Invalid Server Action payload: failed to decrypt."),"__NEXT_ERROR_CODE",{value:"E191",enumerable:!1,configurable:!0});return h.slice(a.length)}async function p(a,b){let c=await (0,g.getActionEncryptionKey)();if(void 0===c)throw Object.defineProperty(Error("Missing encryption key for Server Action. This is a bug in Next.js"),"__NEXT_ERROR_CODE",{value:"E65",enumerable:!1,configurable:!0});let d=new Uint8Array(16);h.workUnitAsyncStorage.exit(()=>crypto.getRandomValues(d));let e=(0,g.arrayBufferToString)(d.buffer),f=await (0,g.encrypt)(c,d,k.encode(a+b));return btoa(e+(0,g.arrayBufferToString)(f))}var q=function(a){return a[a.Ready=0]="Ready",a[a.Pending=1]="Pending",a[a.Complete=2]="Complete",a}(q||{});let r=j.default.cache(async function a(b,...c){let e=h.workUnitAsyncStorage.getStore(),j=e?(0,h.getCacheSignal)(e):void 0,{clientModules:k}=(0,g.getClientReferenceManifestForRsc)(),l=Error();Error.captureStackTrace(l,a);let n=!1,o=e?(0,i.createHangingInputAbortSignal)(e):void 0,q=0;function r(){0===q&&(q=1,null==j||j.beginRead())}function s(){1===q&&(null==j||j.endRead()),q=2}o&&j&&o.addEventListener("abort",r,{once:!0});let t=await (0,f.streamToString)((0,d.renderToReadableStream)(c,k,{filterStackFrame:m,signal:o,onError(a){(null==o||!o.aborted)&&(n||(n=!0,l.message=a instanceof Error?a.message:String(a)))}}),o);if(n)throw s(),l;if(!e)return p(b,t);r();let u=(0,h.getPrerenderResumeDataCache)(e),v=(0,h.getRenderResumeDataCache)(e),w=b+t,x=(null==u?void 0:u.encryptedBoundArgs.get(w))??(null==v?void 0:v.encryptedBoundArgs.get(w));if(x)return x;let y=await p(b,t);return s(),null==u||u.encryptedBoundArgs.set(w,y),y});async function s(a,b){let c,d=await b,f=h.workUnitAsyncStorage.getStore();if(f){let b=(0,h.getCacheSignal)(f),e=(0,h.getPrerenderResumeDataCache)(f),g=(0,h.getRenderResumeDataCache)(f);(c=(null==e?void 0:e.decryptedBoundArgs.get(d))??(null==g?void 0:g.decryptedBoundArgs.get(d)))||(null==b||b.beginRead(),c=await o(a,d),null==b||b.endRead(),null==e||e.decryptedBoundArgs.set(d,c))}else c=await o(a,d);let{edgeRscModuleMapping:i,rscModuleMapping:j}=(0,g.getClientReferenceManifestForRsc)();return await (0,e.createFromReadableStream)(new ReadableStream({start(a){switch(a.enqueue(k.encode(c)),null==f?void 0:f.type){case"prerender":case"prerender-runtime":f.renderSignal.aborted?a.close():f.renderSignal.addEventListener("abort",()=>a.close(),{once:!0});break;case"prerender-client":case"prerender-ppr":case"prerender-legacy":case"request":case"cache":case"private-cache":case"unstable-cache":case void 0:return a.close()}}}),{findSourceMapURL:n,serverConsumerManifest:{moduleLoading:null,moduleMap:j,serverModuleMap:(0,g.getServerModuleMap)()}})}},73456:(a,b,c)=>{"use strict";c.d(b,{G:()=>l,resolveGlobalVars:()=>k});var d=c(75879);c(68633);var e=c(50846),f=c(92372),g=c(38844),h=c(58739),i=c(51669);let j=(0,e.h)("backend/utils/resolveGlobalVars");async function k(a){j.debug("Entering resolveGlobalVars method");let b=await (0,f.YM)(g.Z.GLOBAL_ENV_VARS,{}),c=function(a){if(!a||"object"!=typeof a)return!1;let b=Object.keys(a);if(0===b.length)return!0;let c=a[b[0]];return c&&"object"==typeof c&&"value"in c&&"metadata"in c&&"object"==typeof c.metadata&&"isSecret"in c.metadata}(b);j.debug(`Loaded ${Object.keys(b).length} global environment variables (${c?"new":"old"} format)`);let d={};if(c)for(let[a,c]of Object.entries(b))d[a]=c.value;else d={...b};let e=async a=>{let b=a.match(/\$\{global:([^}]+)\}/g);if(!b)return a;let c=a;for(let a of b){let b=a.substring(9,a.length-1);if(void 0!==d[b]){let e=d[b];if(e.startsWith("encrypted:")){j.debug(`Decrypting encrypted global variable: ${b}`);try{let a=e.substring(10),c=await (0,h.decryptWithPassword)(a);if(c)e=c,j.debug(`Successfully decrypted global variable: ${b}`);else{j.warn(`Failed to decrypt global variable: ${b}`);continue}}catch(a){j.error(`Error decrypting global variable: ${b}`,a);continue}}else if(e.startsWith("encrypted_failed:")){j.warn(`Skipping failed encrypted global variable: ${b}`);continue}j.debug(`Resolved global variable: ${b}`),c=c.replace(a,e)}else j.warn(`Global variable not found: ${b}`)}return c},i=async a=>{if("string"==typeof a)return await e(a);if(Array.isArray(a))return await Promise.all(a.map(a=>i(a)));if(null!==a&&"object"==typeof a){let b={};for(let[c,d]of Object.entries(a))b[c]=await i(d);return b}return a},k=await i(a);return"object"==typeof a&&null!==a&&j.debug("Resolved global variables result:",JSON.stringify(k,null,2)),j.debug("Completed global variable resolution"),k}async function l(a,b=0){if(j.debug(`Entering resolveAndDecryptApiKey method (depth: ${b})`),!a)return j.warn("Empty value provided"),null;if(b>=10)return j.warn(`Maximum resolution depth reached (10) for value: ${a}`),a;let c=a;if(c.startsWith("encrypted:")){j.debug(`Decrypting encrypted value at depth ${b}`);try{let a=c.substring(10),d=await (0,h.decryptWithPassword)(a);if(!d)return j.warn(`Failed to decrypt value at depth ${b}`),null;j.debug(`Successfully decrypted value at depth ${b}`),j.verbose(d),c=d}catch(a){return j.error(`Error decrypting value at depth ${b}:`,a),null}}else c.startsWith("encrypted_failed:")&&(j.warn(`Skipping failed encrypted value at depth ${b}`),c=c.substring(17));if(c.includes("${global:")){j.debug(`Resolving global variables at depth ${b}`);try{let a=await k(c);if(j.verbose(a),a!==c)return j.debug(`Value changed after resolving globals at depth ${b}, processing recursively`),l(a,b+1);c=a}catch(a){return j.error(`Error resolving global variables at depth ${b}:`,a),null}}return j.debug(`Completed resolveAndDecryptApiKey at depth ${b}`),c}(0,i.D)([k,l]),(0,d.A)(k,"40ec842092ea232b6d4aa599a380d422184da5e1ca",null),(0,d.A)(l,"602ea7ca289a8eaa1000fb321a71e292e6c766b6bb",null)},75879:(a,b,c)=>{"use strict";Object.defineProperty(b,"A",{enumerable:!0,get:function(){return d.registerServerReference}});let d=c(97954)},78335:()=>{},96487:()=>{}};
@@ -1 +1 @@
1
- "use strict";exports.id=4671,exports.ids=[4671],exports.modules={84671:(a,b,c)=>{c.d(b,{nC:()=>o});var d=c(49181),e=c(89224),f=c(67512),g=c(41527),h=c(58505);function i(a){return a.data?.type??a.type??"unknown"}function j(a){return a.data?.label||a.id}function k(a){return a.data?.edgeType==="mcp"}function l(a){return a.data?.edgeType==="resource"}function m(a){return k(a)||l(a)}function n(a,b,c){let d=new Map(b.map(a=>[a.id,a])),e=new Set;for(let b of c){if(!k(b))continue;let c=null;if(b.source===a?c=b.target:b.target===a&&(c=b.source),!c)continue;let f=d.get(c);if(!f||"mcp"!==i(f))continue;let g=f.data?.properties?.boundServer;"string"==typeof g&&g&&e.add(g)}return e}function o(a,b={}){let c=[],p=Array.isArray(a?.nodes)?a.nodes:[],q=Array.isArray(a?.edges)?a.edges:[],r=(a,b,d,e)=>c.push({severity:a,code:b,message:d,nodeId:e?.id,nodeLabel:e?j(e):void 0}),s=new Map((b.models??[]).map(a=>[a.id,a])),t=new Map((b.servers??[]).map(a=>[a.name,a])),u=!!b.models,v=!!b.servers,w=p.filter(a=>"start"===i(a)),x=p.filter(a=>"finish"===i(a)),y=p.filter(a=>"process"===i(a)),z=p.filter(a=>"mcp"===i(a));if(0===w.length)r("error","no-start-node","The flow has no Start node, so it has no entry point.");else if(w.length>1)for(let a of w.slice(1))r("error","multiple-start-nodes","The flow has more than one Start node; only one is allowed.",a);for(let a of(0===x.length&&r("warning","no-finish-node","The flow has no Finish node; it will run but never reaches a defined end."),y)){let b=a.data?.properties??{},c=b.boundModel;if(c){if(u&&!s.has(c)){let c="string"==typeof b.modelName&&b.modelName?` (was "${b.modelName}")`:"";r("error","process-model-missing",`Process node "${j(a)}" is bound to a model that no longer exists${c}.`,a)}}else r("error","process-missing-model",`Process node "${j(a)}" has no model bound.`,a)}for(let a of z){let b=(a.data?.properties??{}).boundServer;if(b){if(v&&!t.has(b))r("warning","mcp-server-missing",`MCP node "${j(a)}" is bound to server "${b}", which isn't in your current MCP server list. It may be offline (e.g. not connected), renamed, or removed — if it was renamed or removed, rebind this node.`,a);else if(v){let c=t.get(b);if(c.status&&"connected"!==c.status){let d="disabled"===c.status?"disabled":`not connected (${c.status})`;r("warning","mcp-server-disconnected",`MCP node "${j(a)}" is bound to server "${b}", which is currently ${d}. It will provide tools again once it reconnects.`,a)}}}else r("warning","mcp-missing-server",`MCP node "${j(a)}" is not bound to a server.`,a);q.some(b=>k(b)&&(b.source===a.id||b.target===a.id))||r("warning","mcp-node-unconnected",`MCP node "${j(a)}" is not connected to any Process node.`,a)}for(let a of p.filter(a=>"resource"===i(a))){let b=a.data?.properties??{},c="run"===b.scope?"run":"mcp",d="string"==typeof b.boundServer?b.boundServer:"",e="string"==typeof b.uri?b.uri:"",f="string"==typeof b.runName?b.runName.trim():"";"mcp"!==c||d&&e||r("warning","resource-missing-binding",`Resource node "${j(a)}" has no ${!d?"server":"resource URI"} bound; connected steps will receive nothing.`,a),"run"!==c||f||r("warning","resource-missing-binding",`Resource node "${j(a)}" is a run artifact with no name; give it a name so steps can produce/consume it.`,a),"run"===c&&f&&!(0,g.qW)(f)&&r("warning","resource-run-name",`Resource node "${j(a)}" is named "${f}", which is not a valid artifact name (letters, digits, _ and - only, not starting with a digit); it will be awkward to reference with \${res:...}.`,a),"mcp"===c&&d&&v&&!t.has(d)&&r("warning","resource-server-missing",`Resource node "${j(a)}" is bound to server "${d}", which isn't in your current MCP server list.`,a);let h=q.filter(b=>l(b)&&(b.source===a.id||b.target===a.id));0===h.length&&r("warning","resource-node-unconnected",`Resource node "${j(a)}" is not connected to any Process node.`,a);let i=h.filter(b=>b.target===a.id);"mcp"===c&&i.length>0&&r("error","resource-produce-static",`Resource node "${j(a)}" is a static MCP resource, but a step writes INTO it. Only run artifacts (scope "run") can be produced by a step — flip the edge or make this a run artifact.`,a),"run"===c&&i.length>1&&r("warning","resource-multiple-producers",`Resource node "${j(a)}" is produced by ${i.length} steps; the last writer wins. Consider one producer per artifact.`,a),"run"===c&&0===i.length&&h.length>0&&r("warning","resource-consumed-never-produced",`Resource node "${j(a)}" is consumed but no step in this flow produces it; it resolves to nothing unless an earlier run captured it.`,a)}for(let a of p.filter(a=>"signal"===i(a))){let b=a.data?.properties??{};("string"==typeof b.topic?b.topic.trim():"")||r("warning","signal-missing-topic",`Signal node "${j(a)}" has no topic; it emits nothing. Give it a topic that a flow-event trigger can listen for.`,a)}if(w.length>0){let a=function(a){let b=new Map,c=(a,c)=>{b.has(a)||b.set(a,[]),b.get(a).push(c)};for(let b of a)!m(b)&&(c(b.source,b.target),b.data?.bidirectional&&c(b.target,b.source));return b}(q);for(let b of w)a.get(b.id)?.length||r("error","start-no-outgoing","The Start node is not connected to anything; the flow cannot run.",b);let b=function(a,b){let c=new Set(a),d=[...a];for(;d.length;){let a=d.shift();for(let e of b.get(a)??[])c.has(e)||(c.add(e),d.push(e))}return c}(w.map(a=>a.id),a);for(let a of[...y,...x])b.has(a.id)||r("warning","unreachable-node",`${"finish"===i(a)?"Finish":"Process"} node "${j(a)}" is not reachable from the Start node.`,a)}for(let a of p.filter(a=>"subflow"===i(a))){let b=q.filter(b=>!m(b)&&(b.source===a.id||b.target===a.id&&!!b.data?.bidirectional));b.length>1&&r("error","subflow-multiple-outgoing",`Subflow node "${j(a)}" has ${b.length} outgoing connections; a subflow can only have one (either A > B > C or a bidirectional A <> B).`,a);let c=a.data?.properties??{},d="string"==typeof c.subflowId&&c.subflowId?c.subflowId:void 0,e=Array.isArray(c.parallelSubflowIds)?c.parallelSubflowIds.filter(a=>"string"==typeof a&&!!a):[];d&&e.length>0&&r("error","subflow-both-targets",`Subflow node "${j(a)}" sets both a single "subflowId" and "parallelSubflowIds"; use one or the other.`,a);let f=!0===c.mapOverList;f&&e.length>0&&r("error","subflow-map-and-parallel",`Subflow node "${j(a)}" combines "mapOverList" with "parallelSubflowIds"; map-over-list runs a single child once per item and cannot be combined with parallel fan-out.`,a),f&&!d&&0===e.length&&r("error","subflow-map-no-child",`Subflow node "${j(a)}" has "mapOverList" but no child flow ("subflowId"); select a flow to run once per item.`,a);let h=Array.isArray(c.spawnBriefs)?c.spawnBriefs.filter(a=>"string"==typeof a&&""!==a.trim()):[];h.length>0&&!d&&r("error","subflow-spawn-no-child",`Subflow node "${j(a)}" has spawn briefs but no sub-agent flow ("subflowId"); select the flow to spawn once per brief.`,a),h.length>0&&e.length>0&&r("error","subflow-spawn-and-parallel",`Subflow node "${j(a)}" combines "spawnBriefs" with "parallelSubflowIds"; spawn briefs run one sub-agent per brief and cannot be combined with a multi-flow fan-out list.`,a),h.length>0&&f&&r("error","subflow-spawn-and-map",`Subflow node "${j(a)}" combines "spawnBriefs" with "mapOverList"; use one lane source or the other.`,a);let i="string"==typeof c.parallelSubflowIdsVar?c.parallelSubflowIdsVar.trim():"";if(i&&((0,g.qW)(i)||r("warning","subflow-parallel-var-name",`Subflow node "${j(a)}" reads dynamic fan-out targets from "${i}", which is not a valid variable name (letters, digits, _ and - only, not starting with a digit); it will be awkward to capture with \${var:...}.`,a),f&&r("error","subflow-map-and-parallel-var",`Subflow node "${j(a)}" combines "mapOverList" with dynamic fan-out ("parallelSubflowIdsVar"); map-over-list runs a single child once per item and cannot be combined with fan-out.`,a),p.some(a=>{let b=a.data?.properties?.captureVariable;return"string"==typeof b&&b.trim()===i})||r("warning","subflow-parallel-var-uncaptured",`Subflow node "${j(a)}" reads dynamic fan-out targets from variable "${i}", but no node captures it (captureVariable). It may be seeded by the caller; otherwise it resolves to no targets and the node falls back to its static parallel list.`,a)),!0===c.allowCallerFanout&&f&&r("error","subflow-map-and-caller-fanout",`Subflow node "${j(a)}" combines "mapOverList" with agentic fan-out ("allowCallerFanout"); map-over-list runs a single child once per item and cannot be combined with fan-out.`,a),e.length>0||h.length>0){let b=c.concurrencyLimit;"number"==typeof b&&b<1&&r("warning","subflow-concurrency-limit",`Subflow node "${j(a)}" has a concurrencyLimit of ${b}; it must be at least 1 (the runtime default will be used).`,a)}}{let a=new Map(p.map(a=>[a.id,a])),b=new Set;for(let c of q){if(m(c))continue;let d=c.data?.condition;if(!d||"object"!=typeof d)continue;let e=a.get(c.source),g=e?i(e):"unknown";if("process"!==g){r("error","edge-condition-non-process",`An edge leaving ${"unknown"===g?"an unknown":`the ${g}`} node "${e?j(e):c.source}" has a routing condition, but only process nodes can route on a condition.`,e??void 0);continue}b.add(c.source),(0,f.C)(d.kind)?"always"===d.kind||("string"!=typeof d.value||0===d.value.length?r("warning","edge-condition-value",`Process node "${j(e)}" has an outgoing edge condition with no "value"; it will never match.`,e):"regex"!==d.kind||(0,f.wM)(d.value)||r("warning","edge-condition-regex",`Process node "${j(e)}" has an outgoing edge with a regex condition that does not compile; it will never match.`,e)):r("warning","edge-condition-kind",`Process node "${j(e)}" has an outgoing edge whose condition kind "${String(d.kind)}" is unknown; it will never match.`,e)}for(let c of b){let b=a.get(c);b&&(q.some(a=>!m(a)&&(a.source===c?!a.data?.condition||"always"===a.data.condition.kind&&!a.data.condition.negate:!!(a.target===c&&a.data?.bidirectional)))||r("warning","edge-condition-no-fallback",`Process node "${j(b)}" has conditioned outgoing edges but no bare fallback edge; if no condition matches, the flow ends here.`,b))}}{let a=new Set;for(let b of p){let c=b.data?.properties?.captureVariable;if("string"==typeof c&&c.trim()){let d=c.trim();a.add(d),(0,g.qW)(d)||r("warning","capture-var-name",`${"subflow"===i(b)?"Subflow":"Process"} node "${j(b)}" captures into "${d}", which is not a valid variable name (letters, digits, _ and - only, not starting with a digit); it will be awkward to reference with \${var:...}.`,b)}}let b=["promptTemplate","isolatedPrompt"],c=new Set;for(let d of p){let e=d.data?.properties??{};for(let f of b){let b=e[f];if("string"==typeof b&&b)for(let e of(0,g.T9)(b)){if(a.has(e))continue;let b=`${d.id}:${e}`;c.has(b)||(c.add(b),r("warning","var-ref-uncaptured",`${j(d)} references \${var:${e}} but no step in this flow captures "${e}" (via captureVariable). It resolves to empty unless supplied as a run input — check for a typo or a step ordered after this one.`,d))}}}}{for(let a of p){let b=a.data?.properties?.captureKv;if("string"==typeof b&&b.trim()){let{key:c}=(0,h.g2)(b.trim());(0,h.ng)(c)||r("warning","capture-kv-name",`${"subflow"===i(a)?"Subflow":"Process"} node "${j(a)}" captures into kv "${b.trim()}", whose key is not a valid name (letters, digits, _ and - only, not starting with a digit); it will be awkward to reference with \${kv:...}.`,a)}}let a=["promptTemplate","isolatedPrompt"],b=new Set;for(let c of p){let d=c.data?.properties??{};for(let e of a){let a=d[e];if("string"==typeof a&&a)for(let d of(0,h.pf)(a)){let{key:a}=(0,h.g2)(d);if((0,h.ng)(a))continue;let e=`${c.id}:${d}`;b.has(e)||(b.add(e),r("warning","kv-ref-name",`${j(c)} references \${kv:${d}}, whose key is not a valid name (letters, digits, _ and - only, not starting with a digit); it resolves to empty.`,c))}}}}for(let a of y){let c=a.data?.properties?.promptTemplate;if("string"!=typeof c||!c)continue;let f=n(a.id,p,q),g=null,h=new Set;for(let k of(0,d.A$)(c)){if("handoff"===k.server){let b=`handoff:${k.name}`;if(h.has(b))continue;h.add(b),g||(g=function(a,b,c){let d=new Map(b.map(a=>[a.id,a])),f=[],g=new Set;for(let b of c){if(m(b))continue;let c=null;b.source===a?c=b.target:b.target===a&&b.data?.bidirectional&&(c=b.source),!c||g.has(c)||(g.add(c),f.push(c))}let h=f.map(a=>d.get(a)).filter(a=>!!a).map(a=>({id:a.id,label:a.data?.label,type:i(a)}));return new Set((0,e.E9)(h).values())}(a.id,p,q)),g.has(k.name)||r("warning","handoff-pill-obsolete",`Process node "${j(a)}" references handoff tool "${k.name}", which no longer exists (the target node was removed, or renamed so the tool name changed). Update or remove the pill.`,a);continue}let c=`${k.kind}:${k.server}:${k.name}`;!h.has(c)&&(h.add(c),f.has(k.server)?"tool"===k.kind&&b.serverTools&&b.serverTools[k.server]&&!b.serverTools[k.server].includes(k.name)&&r("warning","tool-unavailable",`Process node "${j(a)}" references tool "${k.name}" which server "${k.server}" no longer provides.`,a):r("error","tool-pill-disconnected",`Process node "${j(a)}" references ${k.kind} "${k.name}" from server "${k.server}", but it is not connected to that server (the MCP node was removed or the server was renamed).`,a))}}if(b.serverTools)for(let a of y)for(let c of n(a.id,p,q)){let d=b.serverTools[c];Array.isArray(d)&&0===d.length&&r("warning","mcp-server-no-tools",`Process node "${j(a)}" is connected to MCP server "${c}", which currently exposes 0 tools. The connection has no effect until the server provides tools.`,a)}let A=c.filter(a=>"error"===a.severity).length,B=c.length-A;return{issues:c,errorCount:A,warningCount:B,isRunnable:0===A}}}};
1
+ "use strict";exports.id=4671,exports.ids=[4671],exports.modules={84671:(a,b,c)=>{c.d(b,{nC:()=>p});var d=c(49181),e=c(89224),f=c(67512),g=c(41527),h=c(58505);function i(a){return a.data?.type??a.type??"unknown"}function j(a){return a.data?.label||a.id}function k(a){return a.data?.edgeType==="mcp"}function l(a){return a.data?.edgeType==="resource"}function m(a){return k(a)||l(a)}function n(a,b,c){let d=new Map(b.map(a=>[a.id,a])),e=new Set;for(let b of c){if(!k(b))continue;let c=null;if(b.source===a?c=b.target:b.target===a&&(c=b.source),!c)continue;let f=d.get(c);if(!f||"mcp"!==i(f))continue;let g=f.data?.properties?.boundServer;"string"==typeof g&&g&&e.add(g)}return e}function o(a,b,c){let d=new Map(b.map(a=>[a.id,a])),f=[],g=new Set;for(let b of c){if(m(b))continue;let c=null;b.source===a?c=b.target:b.target===a&&b.data?.bidirectional&&(c=b.source),!c||g.has(c)||(g.add(c),f.push(c))}let h=f.map(a=>d.get(a)).filter(a=>!!a).map(a=>({id:a.id,label:a.data?.label,type:i(a)}));return new Set((0,e.E9)(h).values())}function p(a,b={}){let c=[],e=Array.isArray(a?.nodes)?a.nodes:[],q=Array.isArray(a?.edges)?a.edges:[],r=(a,b,d,e)=>c.push({severity:a,code:b,message:d,nodeId:e?.id,nodeLabel:e?j(e):void 0}),s=new Map((b.models??[]).map(a=>[a.id,a])),t=new Map((b.servers??[]).map(a=>[a.name,a])),u=!!b.models,v=!!b.servers,w=e.filter(a=>"start"===i(a)),x=e.filter(a=>"finish"===i(a)),y=e.filter(a=>"process"===i(a)),z=e.filter(a=>"mcp"===i(a));if(0===w.length)r("error","no-start-node","The flow has no Start node, so it has no entry point.");else if(w.length>1)for(let a of w.slice(1))r("error","multiple-start-nodes","The flow has more than one Start node; only one is allowed.",a);for(let a of(0===x.length&&r("warning","no-finish-node","The flow has no Finish node; it will run but never reaches a defined end."),y)){let b=a.data?.properties??{},c=b.boundModel;if(c){if(u&&!s.has(c)){let c="string"==typeof b.modelName&&b.modelName?` (was "${b.modelName}")`:"";r("error","process-model-missing",`Process node "${j(a)}" is bound to a model that no longer exists${c}.`,a)}}else r("error","process-missing-model",`Process node "${j(a)}" has no model bound.`,a)}for(let a of z){let b=(a.data?.properties??{}).boundServer;if(b){if(v&&!t.has(b))r("warning","mcp-server-missing",`MCP node "${j(a)}" is bound to server "${b}", which isn't in your current MCP server list. It may be offline (e.g. not connected), renamed, or removed — if it was renamed or removed, rebind this node.`,a);else if(v){let c=t.get(b);if(c.status&&"connected"!==c.status){let d="disabled"===c.status?"disabled":`not connected (${c.status})`;r("warning","mcp-server-disconnected",`MCP node "${j(a)}" is bound to server "${b}", which is currently ${d}. It will provide tools again once it reconnects.`,a)}}}else r("warning","mcp-missing-server",`MCP node "${j(a)}" is not bound to a server.`,a);q.some(b=>k(b)&&(b.source===a.id||b.target===a.id))||r("warning","mcp-node-unconnected",`MCP node "${j(a)}" is not connected to any Process node.`,a)}for(let a of e.filter(a=>"resource"===i(a))){let b=a.data?.properties??{},c="run"===b.scope?"run":"mcp",d="string"==typeof b.boundServer?b.boundServer:"",e="string"==typeof b.uri?b.uri:"",f="string"==typeof b.runName?b.runName.trim():"";"mcp"!==c||d&&e||r("warning","resource-missing-binding",`Resource node "${j(a)}" has no ${!d?"server":"resource URI"} bound; connected steps will receive nothing.`,a),"run"!==c||f||r("warning","resource-missing-binding",`Resource node "${j(a)}" is a run artifact with no name; give it a name so steps can produce/consume it.`,a),"run"===c&&f&&!(0,g.qW)(f)&&r("warning","resource-run-name",`Resource node "${j(a)}" is named "${f}", which is not a valid artifact name (letters, digits, _ and - only, not starting with a digit); it will be awkward to reference with \${res:...}.`,a),"mcp"===c&&d&&v&&!t.has(d)&&r("warning","resource-server-missing",`Resource node "${j(a)}" is bound to server "${d}", which isn't in your current MCP server list.`,a);let h=q.filter(b=>l(b)&&(b.source===a.id||b.target===a.id));0===h.length&&r("warning","resource-node-unconnected",`Resource node "${j(a)}" is not connected to any Process node.`,a);let i=h.filter(b=>b.target===a.id);"mcp"===c&&i.length>0&&r("error","resource-produce-static",`Resource node "${j(a)}" is a static MCP resource, but a step writes INTO it. Only run artifacts (scope "run") can be produced by a step — flip the edge or make this a run artifact.`,a),"run"===c&&i.length>1&&r("warning","resource-multiple-producers",`Resource node "${j(a)}" is produced by ${i.length} steps; the last writer wins. Consider one producer per artifact.`,a),"run"===c&&0===i.length&&h.length>0&&r("warning","resource-consumed-never-produced",`Resource node "${j(a)}" is consumed but no step in this flow produces it; it resolves to nothing unless an earlier run captured it.`,a)}for(let a of e.filter(a=>"signal"===i(a))){let b=a.data?.properties??{};("string"==typeof b.topic?b.topic.trim():"")||r("warning","signal-missing-topic",`Signal node "${j(a)}" has no topic; it emits nothing. Give it a topic that a flow-event trigger can listen for.`,a)}if(w.length>0){let a=function(a){let b=new Map,c=(a,c)=>{b.has(a)||b.set(a,[]),b.get(a).push(c)};for(let b of a)!m(b)&&(c(b.source,b.target),b.data?.bidirectional&&c(b.target,b.source));return b}(q);for(let b of w)a.get(b.id)?.length||r("error","start-no-outgoing","The Start node is not connected to anything; the flow cannot run.",b);let b=function(a,b){let c=new Set(a),d=[...a];for(;d.length;){let a=d.shift();for(let e of b.get(a)??[])c.has(e)||(c.add(e),d.push(e))}return c}(w.map(a=>a.id),a);for(let a of[...y,...x])b.has(a.id)||r("warning","unreachable-node",`${"finish"===i(a)?"Finish":"Process"} node "${j(a)}" is not reachable from the Start node.`,a)}for(let a of e.filter(a=>"subflow"===i(a))){let b=q.filter(b=>!m(b)&&(b.source===a.id||b.target===a.id&&!!b.data?.bidirectional));b.length>1&&r("error","subflow-multiple-outgoing",`Subflow node "${j(a)}" has ${b.length} outgoing connections; a subflow can only have one (either A > B > C or a bidirectional A <> B).`,a);let c=a.data?.properties??{},d="string"==typeof c.subflowId&&c.subflowId?c.subflowId:void 0,f=Array.isArray(c.parallelSubflowIds)?c.parallelSubflowIds.filter(a=>"string"==typeof a&&!!a):[];d&&f.length>0&&r("error","subflow-both-targets",`Subflow node "${j(a)}" sets both a single "subflowId" and "parallelSubflowIds"; use one or the other.`,a);let h=!0===c.mapOverList;h&&f.length>0&&r("error","subflow-map-and-parallel",`Subflow node "${j(a)}" combines "mapOverList" with "parallelSubflowIds"; map-over-list runs a single child once per item and cannot be combined with parallel fan-out.`,a),h&&!d&&0===f.length&&r("error","subflow-map-no-child",`Subflow node "${j(a)}" has "mapOverList" but no child flow ("subflowId"); select a flow to run once per item.`,a);let i=Array.isArray(c.spawnBriefs)?c.spawnBriefs.filter(a=>"string"==typeof a&&""!==a.trim()):[];i.length>0&&!d&&r("error","subflow-spawn-no-child",`Subflow node "${j(a)}" has spawn briefs but no sub-agent flow ("subflowId"); select the flow to spawn once per brief.`,a),i.length>0&&f.length>0&&r("error","subflow-spawn-and-parallel",`Subflow node "${j(a)}" combines "spawnBriefs" with "parallelSubflowIds"; spawn briefs run one sub-agent per brief and cannot be combined with a multi-flow fan-out list.`,a),i.length>0&&h&&r("error","subflow-spawn-and-map",`Subflow node "${j(a)}" combines "spawnBriefs" with "mapOverList"; use one lane source or the other.`,a);let k="string"==typeof c.parallelSubflowIdsVar?c.parallelSubflowIdsVar.trim():"";if(k&&((0,g.qW)(k)||r("warning","subflow-parallel-var-name",`Subflow node "${j(a)}" reads dynamic fan-out targets from "${k}", which is not a valid variable name (letters, digits, _ and - only, not starting with a digit); it will be awkward to capture with \${var:...}.`,a),h&&r("error","subflow-map-and-parallel-var",`Subflow node "${j(a)}" combines "mapOverList" with dynamic fan-out ("parallelSubflowIdsVar"); map-over-list runs a single child once per item and cannot be combined with fan-out.`,a),e.some(a=>{let b=a.data?.properties?.captureVariable;return"string"==typeof b&&b.trim()===k})||r("warning","subflow-parallel-var-uncaptured",`Subflow node "${j(a)}" reads dynamic fan-out targets from variable "${k}", but no node captures it (captureVariable). It may be seeded by the caller; otherwise it resolves to no targets and the node falls back to its static parallel list.`,a)),!0===c.allowCallerFanout&&h&&r("error","subflow-map-and-caller-fanout",`Subflow node "${j(a)}" combines "mapOverList" with agentic fan-out ("allowCallerFanout"); map-over-list runs a single child once per item and cannot be combined with fan-out.`,a),f.length>0||i.length>0){let b=c.concurrencyLimit;"number"==typeof b&&b<1&&r("warning","subflow-concurrency-limit",`Subflow node "${j(a)}" has a concurrencyLimit of ${b}; it must be at least 1 (the runtime default will be used).`,a)}}{let a=new Map(e.map(a=>[a.id,a])),b=new Set;for(let c of q){if(m(c))continue;let d=c.data?.condition;if(!d||"object"!=typeof d)continue;let e=a.get(c.source),g=e?i(e):"unknown";if("process"!==g){r("error","edge-condition-non-process",`An edge leaving ${"unknown"===g?"an unknown":`the ${g}`} node "${e?j(e):c.source}" has a routing condition, but only process nodes can route on a condition.`,e??void 0);continue}b.add(c.source),(0,f.C)(d.kind)?"always"===d.kind||("string"!=typeof d.value||0===d.value.length?r("warning","edge-condition-value",`Process node "${j(e)}" has an outgoing edge condition with no "value"; it will never match.`,e):"regex"!==d.kind||(0,f.wM)(d.value)||r("warning","edge-condition-regex",`Process node "${j(e)}" has an outgoing edge with a regex condition that does not compile; it will never match.`,e)):r("warning","edge-condition-kind",`Process node "${j(e)}" has an outgoing edge whose condition kind "${String(d.kind)}" is unknown; it will never match.`,e)}for(let c of b){let b=a.get(c);b&&(q.some(a=>!m(a)&&(a.source===c?!a.data?.condition||"always"===a.data.condition.kind&&!a.data.condition.negate:!!(a.target===c&&a.data?.bidirectional)))||r("warning","edge-condition-no-fallback",`Process node "${j(b)}" has conditioned outgoing edges but no bare fallback edge; if no condition matches, the flow ends here.`,b))}}{let a=new Set;for(let b of e){let c=b.data?.properties?.captureVariable;if("string"==typeof c&&c.trim()){let d=c.trim();a.add(d),(0,g.qW)(d)||r("warning","capture-var-name",`${"subflow"===i(b)?"Subflow":"Process"} node "${j(b)}" captures into "${d}", which is not a valid variable name (letters, digits, _ and - only, not starting with a digit); it will be awkward to reference with \${var:...}.`,b)}}let b=["promptTemplate","isolatedPrompt"],c=new Set;for(let d of e){let e=d.data?.properties??{};for(let f of b){let b=e[f];if("string"==typeof b&&b)for(let e of(0,g.T9)(b)){if(a.has(e))continue;let b=`${d.id}:${e}`;c.has(b)||(c.add(b),r("warning","var-ref-uncaptured",`${j(d)} references \${var:${e}} but no step in this flow captures "${e}" (via captureVariable). It resolves to empty unless supplied as a run input — check for a typo or a step ordered after this one.`,d))}}}}{for(let a of e){let b=a.data?.properties?.captureKv;if("string"==typeof b&&b.trim()){let{key:c}=(0,h.g2)(b.trim());(0,h.ng)(c)||r("warning","capture-kv-name",`${"subflow"===i(a)?"Subflow":"Process"} node "${j(a)}" captures into kv "${b.trim()}", whose key is not a valid name (letters, digits, _ and - only, not starting with a digit); it will be awkward to reference with \${kv:...}.`,a)}}let a=["promptTemplate","isolatedPrompt"],b=new Set;for(let c of e){let d=c.data?.properties??{};for(let e of a){let a=d[e];if("string"==typeof a&&a)for(let d of(0,h.pf)(a)){let{key:a}=(0,h.g2)(d);if((0,h.ng)(a))continue;let e=`${c.id}:${d}`;b.has(e)||(b.add(e),r("warning","kv-ref-name",`${j(c)} references \${kv:${d}}, whose key is not a valid name (letters, digits, _ and - only, not starting with a digit); it resolves to empty.`,c))}}}}for(let a of y){let c=a.data?.properties?.promptTemplate;if("string"!=typeof c||!c)continue;let f=n(a.id,e,q),g=null,h=new Set,i=new Set;for(let k of(0,d.A$)(c)){if("handoff"===k.server){let b=`handoff:${k.name}`;if(i.has(b))continue;i.add(b),h.add(k.name),g||(g=o(a.id,e,q)),g.has(k.name)||r("warning","handoff-pill-obsolete",`Process node "${j(a)}" references handoff tool "${k.name}", which no longer exists (the target node was removed, or renamed so the tool name changed). Update or remove the pill.`,a);continue}let c=`${k.kind}:${k.server}:${k.name}`;!i.has(c)&&(i.add(c),f.has(k.server)?"tool"===k.kind&&b.serverTools&&b.serverTools[k.server]&&!b.serverTools[k.server].includes(k.name)&&r("warning","tool-unavailable",`Process node "${j(a)}" references tool "${k.name}" which server "${k.server}" no longer provides.`,a):r("error","tool-pill-disconnected",`Process node "${j(a)}" references ${k.kind} "${k.name}" from server "${k.server}", but it is not connected to that server (the MCP node was removed or the server was renamed).`,a))}if(h.size>0)for(let b of g??o(a.id,e,q))h.has(b)||r("warning","handoff-target-unreferenced",`Process node "${j(a)}" can hand off to "${b}" but its prompt never references \${tool:handoff__${b}}, so the model may never route there.`,a)}if(b.serverTools)for(let a of y)for(let c of n(a.id,e,q)){let d=b.serverTools[c];Array.isArray(d)&&0===d.length&&r("warning","mcp-server-no-tools",`Process node "${j(a)}" is connected to MCP server "${c}", which currently exposes 0 tools. The connection has no effect until the server provides tools.`,a)}let A=c.filter(a=>"error"===a.severity).length,B=c.length-A;return{issues:c,errorCount:A,warningCount:B,isRunnable:0===A}}}};
@@ -1 +1 @@
1
- "use strict";exports.id=4681,exports.ids=[4681],exports.modules={44681:(a,b,c)=>{c.d(b,{Q:()=>j,validateFlowForRun:()=>k});var d=c(50846),e=c(87821),f=c(20433),g=c(61397),h=c(84671);let i=(0,d.h)("backend/execution/flow/validateFlowForRun");async function j(a){let b,c;try{b=await f.modelService.loadModels()}catch(a){i.warn("validateFlowObjectForRun: could not load models; skipping model checks",a)}try{let a=await g.mcpService.loadServerConfigs();Array.isArray(a)&&(c=a.map(a=>({name:a.name,status:a.disabled?"disabled":void 0})))}catch(a){i.warn("validateFlowObjectForRun: could not load servers; skipping server checks",a)}return(0,h.nC)(a,{models:b,servers:c})}async function k(a){let b=await e.flowService.getFlow(a);return b?j(b):(i.warn(`validateFlowForRun: flow ${a} could not be loaded; skipping pre-run checks`),{issues:[],errorCount:0,warningCount:0,isRunnable:!0})}}};
1
+ "use strict";exports.id=4681,exports.ids=[4681],exports.modules={44681:(a,b,c)=>{c.d(b,{Q:()=>j,validateFlowForRun:()=>k});var d=c(50846),e=c(87821),f=c(20433),g=c(24463),h=c(84671);let i=(0,d.h)("backend/execution/flow/validateFlowForRun");async function j(a){let b,c;try{b=await f.modelService.loadModels()}catch(a){i.warn("validateFlowObjectForRun: could not load models; skipping model checks",a)}try{let a=await g.mcpService.loadServerConfigs();Array.isArray(a)&&(c=a.map(a=>({name:a.name,status:a.disabled?"disabled":void 0})))}catch(a){i.warn("validateFlowObjectForRun: could not load servers; skipping server checks",a)}return(0,h.nC)(a,{models:b,servers:c})}async function k(a){let b=await e.flowService.getFlow(a);return b?j(b):(i.warn(`validateFlowForRun: flow ${a} could not be loaded; skipping pre-run checks`),{issues:[],errorCount:0,warningCount:0,isRunnable:!0})}}};
@@ -1,6 +1,6 @@
1
- "use strict";exports.id=4771,exports.ids=[4771],exports.modules={4771:(a,b,c)=>{c.d(b,{getSchedulerService:()=>F});var d=c(32524),e=c(92372),f=c(46480),g=c(50846),h=c(58739),i=c(52189),j=c(33873),k=c.n(j),l=c(29021),m=c(9794);let n=(0,g.h)("backend/services/scheduler/triggers/fileWatch");var o=c(73736),p=c(10960),q=c(51875);let r=(0,g.h)("backend/services/scheduler/triggers/mcpPoll"),s=(0,g.h)("backend/services/scheduler/triggers/urlWatch");var t=c(56793);let u=(0,g.h)("backend/services/scheduler/triggers/flowEvent");function v(a){return a&&a.length>8192?`${a.slice(0,8192)}… (truncated)`:a}var w=c(59911);let x=(0,g.h)("backend/services/scheduler/state"),y=a=>`planned-execution-state/${a}`;async function z(a){try{return await (0,e.YM)(y(a),{})}catch(b){return x.error(`Failed to load trigger state for ${a}:`,b),{}}}async function A(a,b){await (0,e.VH)(y(a),b)}async function B(a){await (0,e.N2)(y(a))}let C=(0,g.h)("backend/services/scheduler/index"),D={version:1,paused:!1,executions:[]};class E{static{this.MAX_QUEUE_DEPTH=50}async start(){this.started||(this.started=!0,C.info("Starting scheduler"),await this.reconcile())}reconcile(){let a=this.reconcileChain.catch(()=>{}).then(()=>this.doReconcile());return this.reconcileChain=a,a}async doReconcile(){for(let[a,b]of this.armed)try{b.dispose()}catch(b){C.warn(`Failed to dispose trigger for ${a}:`,b)}this.armed.clear();let a=await this.loadFile();if(this.pausedCache=a.paused,a.paused)return void C.info("Scheduler is paused — nothing armed");for(let b of a.executions)if(b.enabled)try{await this.armExecution(b)}catch(c){let a=c instanceof Error?c.message:String(c);this.lastTriggerErrors.set(b.id,a),C.error(`Failed to arm "${b.name}" (${b.id}):`,c)}C.info(`Scheduler armed ${this.armed.size} execution(s)`)}async armExecution(a){let b=a.trigger;switch(b.type){case"schedule":{let c=await z(a.id);c.lastScheduledFireAt?b.catchUp&&(0,i.hk)(b,c.lastScheduledFireAt)&&(await A(a.id,{...c,lastScheduledFireAt:new Date().toISOString()}),C.info(`Catch-up run for "${a.name}" (missed while closed)`),this.fire(a,{kind:"schedule-catchup",summary:"Schedule (missed while FLUJO was closed — ran once at startup)"})):await A(a.id,{...c,lastScheduledFireAt:new Date().toISOString()}),this.armed.set(a.id,(0,i.wv)(b,()=>{(async()=>{let b=await z(a.id);await A(a.id,{...b,lastScheduledFireAt:new Date().toISOString()}),await this.fire(a,{kind:"schedule",summary:"Schedule"})})().catch(b=>C.error(`Scheduled fire failed for ${a.id}:`,b))}));break}case"webhook":break;case"file-watch":this.armed.set(a.id,function(a,b,c){let d,e=a.debounceMs??2e3,f=new Set(a.events),g=a.glob?.trim()?function(a){let b=a.replace(/\\/g,"/"),c="";for(let a=0;a<b.length;a++){let d=b[a];"*"===d?"*"===b[a+1]?"/"===b[++a+1]?(a++,c+="(?:.*/)?"):c+=".*":c+="[^/]*":"?"===d?c+="[^/]":c+=d.replace(/[.+^${}()|[\]\\]/g,"\\$&")}return RegExp(`^${c}$`)}(a.glob.trim()):null;try{d=l.realpathSync.native(a.path)}catch(d){let b=d instanceof Error?d.message:String(d);return n.warn(`Cannot watch "${a.path}": ${b}`),c(`Cannot watch "${a.path}": ${b}`),{dispose:()=>void 0}}let h=[],i=!1,j=null,o=!1,p=()=>{if(j=null,o||0===h.length)return;let a=h;i&&n.info("File-watch batch overflowed; reporting first 50 events"),h=[],i=!1,b({events:a})},q=(0,m.wB)(d,{ignoreInitial:!0,awaitWriteFinish:{stabilityThreshold:500,pollInterval:100}});return q.on("all",(a,b)=>{if(!o&&("add"===a||"change"===a||"unlink"===a)&&f.has(a)){if(g){let a=k().relative(d,b).replace(/\\/g,"/")||k().basename(b);if(!g.test(a))return}h.length>=50?i=!0:h.push({event:a,path:b}),j&&clearTimeout(j),j=setTimeout(p,e),j.unref?.()}}),q.on("error",a=>{let b=a instanceof Error?a.message:String(a);n.warn(`Watcher error for ${d}: ${b}`),c(b)}),{dispose:()=>{o=!0,j&&(clearTimeout(j),j=null),h=[],q.close().catch(a=>n.warn(`Failed to close watcher for ${d}:`,a))}}}(b,({events:c})=>{this.lastTriggerErrors.delete(a.id),this.fire(a,{kind:"file",summary:1===c.length?`File ${"unlink"===c[0].event?"deleted":"add"===c[0].event?"added":"changed"}`:`${c.length} file changes`,context:{watchedPath:b.path,events:c}})},b=>this.lastTriggerErrors.set(a.id,b)));break;case"mcp-poll":Promise.all([c.e(8732),c.e(4322),c.e(6996),c.e(5734),c.e(5096),c.e(4545),c.e(1925)]).then(c.bind(c,61397)).then(async({mcpService:c})=>{await c.isServerDisabled(b.serverName)&&this.lastTriggerErrors.set(a.id,`MCP server '${b.serverName}' is disabled — enable it on the MCP page or change the trigger`)}).catch(b=>C.warn(`Arm-time disabled-server check failed for ${a.id}:`,b)),this.armed.set(a.id,function(a,b){let c=a.cron||(0,p.X)(a.intervalMs),d=!1,e=!1,f=0,g=0,h=async()=>{if(!e&&!d){if(g>0)return void g--;d=!0;try{let c,d=await b.callTool(a.serverName,a.toolName,a.args);if(!d.success)throw Error(d.error||"Tool call failed");f=0;let g=await b.loadState(),h=a.evaluate;if(c="on-change"===h.mode?(0,q.Jl)(d.data,g):"new-items"===h.mode?(0,q.A1)(d.data,h.itemsPath,h.idField,g):b.evaluateAiGate?await b.evaluateAiGate(d.data,h,g):{fire:!1,newState:{},error:'The "AI decides" condition is not available yet'},e)return;if(Object.keys(c.newState).length>0&&await b.saveState(c.newState),c.error)b.onError(c.error);else if(c.fire){let{status:d}=await b.onFire({summary:`Watched tool: ${c.summary??"condition met"}`,context:{server:a.serverName,tool:a.toolName,..."object"==typeof c.context&&null!==c.context?c.context:{result:c.context}}});if(e)return;if(c.pendingState){let{giveUpError:a}=await (0,q.vV)({status:d,pendingState:c.pendingState,priorFailures:g.pendingFailures??0,saveState:b.saveState});a&&b.onError(a)}}else b.onSuccess?.()}catch(d){f++,g=Math.min(2**(f-1),8);let c=d instanceof Error?d.message:String(d);r.warn(`Poll failed for ${a.serverName}/${a.toolName} (backing off ${g} check(s)): ${c}`),b.onError(c)}finally{d=!1}}},i=new o.l4(c,{timezone:a.timezone,unref:!0},()=>void h());return h(),{dispose:()=>{e=!0,i.stop()},nextRun:()=>i.nextRun()?.toISOString()??null}}(b,{callTool:async(a,b,d)=>{let{mcpService:e}=await Promise.all([c.e(8732),c.e(4322),c.e(6996),c.e(5734),c.e(5096),c.e(4545),c.e(1925)]).then(c.bind(c,61397)),f=await e.callTool(a,b,d);return{success:!0===f.success,data:f.data,error:"string"==typeof f.error?f.error:void 0}},loadState:()=>z(a.id),saveState:async b=>{let c=await z(a.id);await A(a.id,{...c,...b})},onFire:async({summary:b,context:c})=>(this.lastTriggerErrors.delete(a.id),{status:(await this.fire(a,{kind:"mcp-poll",summary:b,context:c})).status}),onError:b=>this.lastTriggerErrors.set(a.id,b),onSuccess:()=>this.lastTriggerErrors.delete(a.id),evaluateAiGate:async(a,b,d)=>{let{evaluateAiGate:e}=await c.e(7506).then(c.bind(c,47506));return e(a,b,d)}}));break;case"url-watch":this.armed.set(a.id,function(a,b){let c=b.fetchImpl??fetch,d=!1,e=!1,f=async()=>{if(!e&&!d){d=!0;try{let d=await c(a.url,{redirect:"follow",headers:{"User-Agent":"FLUJO-url-watch"},signal:AbortSignal.timeout(3e4)});if(!d.ok)return void b.onError(`The URL answered with HTTP ${d.status}`);let f=await d.text(),g=(0,q.qq)(f),h=await b.loadState();if(e)return;if(!h.lastHash){await b.saveState({lastHash:g}),b.onSuccess?.();return}if(h.lastHash===g)return void b.onSuccess?.();let{status:i}=await b.onFire({summary:"Online content changed",context:{url:a.url,status:d.status,contentType:d.headers.get("content-type")??void 0,content:f.length>8192?`${f.slice(0,8192)}… (truncated, ${f.length} chars total)`:f}});if(e)return;let{giveUpError:j}=await (0,q.vV)({status:i,pendingState:{lastHash:g},priorFailures:h.pendingFailures??0,saveState:b.saveState});j&&b.onError(j)}catch(d){let c=d instanceof Error&&"TimeoutError"===d.name?"The URL did not answer within 30s":d instanceof Error?d.message:String(d);s.warn(`URL check failed for ${a.url}: ${c}`),b.onError(c)}finally{d=!1}}},g=new o.l4(a.cron,{timezone:a.timezone,unref:!0},()=>void f());return f(),{dispose:()=>{e=!0,g.stop()},nextRun:()=>g.nextRun()?.toISOString()??null}}(b,{loadState:()=>z(a.id),saveState:async b=>{let c=await z(a.id);await A(a.id,{...c,...b})},onFire:async({summary:b,context:c})=>(this.lastTriggerErrors.delete(a.id),{status:(await this.fire(a,{kind:"url-watch",summary:b,context:c})).status}),onError:b=>this.lastTriggerErrors.set(a.id,b),onSuccess:()=>this.lastTriggerErrors.delete(a.id)}));break;case"flow-event":this.armed.set(a.id,function(a,b){let c=a.maxChainDepth??5,d="string"==typeof a.source.topic?a.source.topic.trim():"",e=d.length>0,f=0,g=null,h=!1;if(a.outputMatch?.regex)try{g=new RegExp(a.outputMatch.regex)}catch(c){h=!0;let a=`Invalid output-match regex: ${c instanceof Error?c.message:String(c)}`;u.warn(a),b.onError(a)}let i=b=>{if(!a.outputMatch)return!0;if(h)return!1;let c=(b??"").slice(0,16384);return(!a.outputMatch.contains||!!c.includes(a.outputMatch.contains))&&(!g||!!g.test(c))},j=(d,e,g)=>{if(d>=c){let a=`Flow-event chain reached the depth limit (${c}); not firing again`;u.info(a),b.onSkip(a);return}let h=Date.now();if(a.minIntervalMs&&h-f<a.minIntervalMs)return void u.debug(`Flow-event cooldown active (${a.minIntervalMs}ms); ignoring event`);f=h,b.onFire({summary:e,context:g,chainDepth:d+1})},k=(0,t.eh)().subscribe(c=>{try{if(e){if(!(0,t.ru)(c)||c.topic!==d||!i(c.payload))return;j(c.chainDepth,`Signal "${c.topic}"`,{topic:c.topic,payload:v(c.payload),emitterFlowId:c.emitterFlowId,flowName:c.flowName,runId:c.runId,conversationId:c.conversationId,firedBy:c.firedBy});return}if((0,t.ru)(c)||!(b=>{let c=a.source;return c.executionId?b.executionId===c.executionId:c.flowId?b.flowId===c.flowId:!!c.flowName&&b.flowName===c.flowName})(c)||!c.status||!(a.on??[]).includes(c.status)||!i(c.outputText))return;let b=c.flowName??c.flowId;j(c.chainDepth,`Flow "${b}" ${c.status}`,{flowId:c.flowId,flowName:c.flowName,executionId:c.executionId,runId:c.runId,conversationId:c.conversationId,status:c.status,firedBy:c.firedBy,outputText:v(c.outputText),error:c.error})}catch(c){let a=c instanceof Error?c.message:String(c);u.warn(`Flow-event handling failed: ${a}`),b.onError(a)}});return{dispose:()=>k(),nextRun:()=>null}}(b,{onFire:({summary:b,context:c,chainDepth:d})=>{this.lastTriggerErrors.delete(a.id),this.fire(a,{kind:"flow-event",summary:b,context:c,chainDepth:d}).catch(b=>C.error(`Flow-event fire failed for ${a.id}:`,b))},onSkip:b=>{let c=new Date().toISOString();(0,w.Hy)(a.id,{runId:(0,d.A)(),conversationId:"",firedAt:c,finishedAt:c,status:"skipped",triggerSummary:"Flow event",error:b}).catch(b=>C.warn(`Failed to record flow-event skip for ${a.id}:`,b))},onError:b=>this.lastTriggerErrors.set(a.id,b)}));break;default:C.warn(`Trigger type "${b.type}" is not implemented — "${a.name}" not armed`)}}async loadFile(){let a=await (0,e.YM)(f.Z.PLANNED_EXECUTIONS,D);return{version:1,paused:!0===a.paused,executions:Array.isArray(a.executions)?a.executions:[]}}async saveFile(a){await (0,e.VH)(f.Z.PLANNED_EXECUTIONS,a)}async isPaused(){return(await this.loadFile()).paused}async setPaused(a){let b=await this.loadFile();if(await this.saveFile({...b,paused:a}),await this.reconcile(),a){for(let a of[...this.queued.keys()])await this.cancelQueued(a,"scheduler paused",!0);await this.cancelAllExclusiveWaiting("scheduler paused",!0)}}async list(){return Promise.all((await this.loadFile()).executions.map(async a=>({execution:a,status:this.getStatus(a),lastRun:await (0,w.tl)(a.id)})))}async get(a){return(await this.loadFile()).executions.find(b=>b.id===a)??null}async create(a){let b=this.validateInput(a);if(b)return{error:b};if(void 0!==a.id&&!/^[A-Za-z0-9._:-]{1,128}$/.test(a.id))return{error:"The id must be 1-128 characters of letters, digits, dot, underscore, colon or hyphen"};if("."===a.id||".."===a.id)return{error:'The id must be a safe identifier, not "." or ".."'};let c=new Date().toISOString(),e={...a,trigger:this.normalizeTrigger(a.trigger),id:a.id??(0,d.A)(),createdAt:c,updatedAt:c},f=await this.loadFile();return f.executions.some(a=>a.id===e.id)?{error:`A planned execution with id "${e.id}" already exists`,conflict:!0}:(await this.saveFile({...f,executions:[...f.executions,e]}),await this.reconcile(),{execution:e})}async update(a,b){let c=await this.loadFile(),d=c.executions.findIndex(b=>b.id===a);if(d<0)return{error:`No planned execution with id "${a}"`};let e={...c.executions[d],...b,...b.trigger?{trigger:this.normalizeTrigger(b.trigger)}:{},id:a,createdAt:c.executions[d].createdAt,updatedAt:new Date().toISOString()},f=this.validateInput(e);if(f)return{error:f};let g=[...c.executions];return g[d]=e,await this.saveFile({...c,executions:g}),await this.reconcile(),await this.cancelQueued(a,"execution updated",!0),await this.cancelExclusiveWaiting(a,"execution updated",!0),{execution:e}}async delete(a){let b=await this.loadFile();return b.executions.some(b=>b.id===a)?(await this.saveFile({...b,executions:b.executions.filter(b=>b.id!==a)}),await this.reconcile(),this.lastTriggerErrors.delete(a),await this.cancelQueued(a,"execution deleted",!1),await this.cancelExclusiveWaiting(a,"execution deleted",!1),await (0,w.xC)(a),await B(a),{success:!0}):{success:!1,error:`No planned execution with id "${a}"`}}normalizeTrigger(a){return a?.type!=="webhook"||a.token?a?.type!=="mcp-poll"||a.cron?a:{...a,cron:(0,p.X)(a.intervalMs)}:{...a,token:(0,d.A)()}}validateInput(a){if(!a.name?.trim())return"A name is required";if(!a.flowId)return"A flow is required";if("string"!=typeof a.prompt)return"A prompt is required (may be empty)";if(void 0!==a.overlapStrategy&&!["skip","queue","parallel","error"].includes(a.overlapStrategy))return"Overlap strategy must be one of: skip, queue, parallel, error";if(void 0!==a.exclusive&&"boolean"!=typeof a.exclusive)return"Exclusive must be true or false";if(void 0!==a.nonExclusiveBehavior&&!["queue","skip","error"].includes(a.nonExclusiveBehavior))return"When exclusive is on, other triggers must be one of: queue, skip, error";let b=a.trigger;if(!b||"object"!=typeof b)return"A trigger is required";switch(b.type){case"schedule":{let a=(0,i.O9)(b.cron,b.timezone);return a.valid?null:`Invalid schedule: ${a.error}`}case"webhook":return null;case"file-watch":if(!b.path?.trim())return"A folder or file path to watch is required";if(!Array.isArray(b.events)||0===b.events.length)return"At least one file event is required";return null;case"mcp-poll":if(!b.serverName||!b.toolName)return"A server and tool are required";if(b.cron){let a=(0,i.O9)(b.cron,b.timezone);if(!a.valid)return`Invalid schedule: ${a.error}`}if(b.evaluate?.mode==="new-items"&&!b.evaluate.idField?.trim())return"An id field is required to detect new items";if((b.evaluate?.mode==="llm-gate"||b.evaluate?.mode==="flow-gate")&&!b.evaluate.condition?.trim())return"A condition is required for the AI to check";if(b.evaluate?.mode==="llm-gate"&&!b.evaluate.modelId)return"A model is required to check the condition";if(b.evaluate?.mode==="flow-gate"&&!b.evaluate.flowId)return"A flow is required to check the condition";return null;case"url-watch":{try{let a=new URL(b.url??"");if("http:"!==a.protocol&&"https:"!==a.protocol)return"The URL must start with http:// or https://"}catch{return"A valid URL is required"}let a=(0,i.O9)(b.cron,b.timezone);return a.valid?null:`Invalid schedule: ${a.error}`}case"flow-event":{let a=b.source;if(1!==[a?.executionId,a?.flowId,a?.flowName,a?.topic].filter(a=>"string"==typeof a&&a.trim().length>0).length)return"Choose exactly one source: a flow, a planned execution, or a signal topic";if(!("string"==typeof a?.topic&&a.topic.trim().length>0)){if(!Array.isArray(b.on)||0===b.on.length)return"Select at least one outcome to react to (completed or error)";if(b.on.some(a=>"completed"!==a&&"error"!==a))return'Outcomes must be "completed" or "error"'}if(b.outputMatch?.regex)try{new RegExp(b.outputMatch.regex)}catch(a){return`Invalid output-match regex: ${a instanceof Error?a.message:String(a)}`}if(void 0!==b.maxChainDepth&&(!Number.isInteger(b.maxChainDepth)||b.maxChainDepth<1))return"Max chain depth must be a positive whole number";if(void 0!==b.minIntervalMs&&(!Number.isFinite(b.minIntervalMs)||b.minIntervalMs<0))return"Minimum interval must be zero or more milliseconds";return null}default:return"Unknown trigger type"}}isRunning(a){let b=this.running.get(a);return void 0!==b&&b.size>0}addRunning(a,b,c){let d=this.running.get(a);d||(d=new Map,this.running.set(a,d)),d.set(b,c)}removeRunning(a,b){let c=this.running.get(a);c&&(c.delete(b),0===c.size&&this.running.delete(a))}earliestRunningSince(a){let b,c=this.running.get(a);if(c&&0!==c.size){for(let a of c.values())(void 0===b||a<b)&&(b=a);return b}}skippedRecord(a,b){let c=new Date().toISOString();return{runId:a.runId,conversationId:"",firedAt:c,finishedAt:c,status:"skipped",triggerSummary:a.payload.summary,error:b}}async cancelQueued(a,b,c){let d=this.queued.get(a);if(d&&0!==d.length){for(let e of(this.queued.delete(a),d)){let d=this.skippedRecord(e,b);if(c)try{await (0,w.Hy)(a,d)}catch(b){C.warn(`Failed to record cancelled queued fire for ${a}:`,b)}e.resolve(d)}C.info(`Cancelled ${d.length} queued fire(s) for ${a}: ${b}`)}}drainQueue(a){let b=this.queued.get(a);if(!b||0===b.length||this.isRunning(a))return;let c=b.shift();0===b.length&&this.queued.delete(a),c&&(async()=>{let b=await this.get(a);if(!b||!b.enabled||this.pausedCache){let a=b?b.enabled?"scheduler paused":"execution disabled":"execution deleted";c.resolve(this.skippedRecord(c,a));return}let d=await this.fire(b,c.payload,c.runId);c.resolve(d)})().catch(b=>C.error(`Queued fire failed for ${a}:`,b))}isSchedulerIdle(){for(let a of this.running.values())if(a.size>0)return!1;return!0}isExclusiveActive(){return null!==this.exclusiveHolder||this.exclusiveWaiting.length>0}currentExclusiveBehavior(){return null!==this.exclusiveHolder?this.exclusiveHolderBehavior:this.exclusiveWaiting[0]?.execution.nonExclusiveBehavior??"queue"}exclusiveGateFor(a){return!0!==a.exclusive&&this.isExclusiveActive()?this.currentExclusiveBehavior():null}drainExclusive(){if(null===this.exclusiveHolder&&this.exclusiveWaiting.length>0&&this.isSchedulerIdle())return void this.acquireNextExclusive();this.isExclusiveActive()||this.drainBlockedByExclusive()}acquireNextExclusive(){if(null!==this.exclusiveHolder||!this.isSchedulerIdle())return;let a=this.exclusiveWaiting.shift();if(!a)return;let b=a.execution.id;this.exclusiveHolder=b,this.exclusiveHolderBehavior=a.execution.nonExclusiveBehavior??"queue",(async()=>{let c=await this.get(b);if(!c||!c.enabled||this.pausedCache||!0!==c.exclusive){let d=c?c.enabled?this.pausedCache?"scheduler paused":"no longer exclusive":"execution disabled":"execution deleted";this.exclusiveHolder===b&&(this.exclusiveHolder=null),a.resolve(this.skippedRecord(a,d)),this.drainExclusive();return}this.exclusiveHolderBehavior=c.nonExclusiveBehavior??"queue";let d=await this.fire(c,a.payload,a.runId);a.resolve(d)})().catch(c=>{this.exclusiveHolder===b&&(this.exclusiveHolder=null),C.error(`Exclusive acquire failed for ${b}:`,c),a.resolve(this.skippedRecord(a,"exclusive acquire failed")),this.drainExclusive()})}drainBlockedByExclusive(){if(0===this.blockedByExclusive.length)return;let a=this.blockedByExclusive;for(let b of(this.blockedByExclusive=[],a))(async()=>{let a=await this.get(b.execution.id);if(!a||!a.enabled||this.pausedCache){let c=a?a.enabled?"scheduler paused":"execution disabled":"execution deleted";b.resolve(this.skippedRecord(b,c));return}let c=await this.fire(a,b.payload,b.runId);b.resolve(c)})().catch(a=>C.error(`Deferred non-exclusive fire failed for ${b.execution.id}:`,a))}async cancelExclusiveWaiting(a,b,c){let d=[];if(this.exclusiveWaiting=this.exclusiveWaiting.filter(b=>b.execution.id!==a||(d.push(b),!1)),this.blockedByExclusive=this.blockedByExclusive.filter(b=>b.execution.id!==a||(d.push(b),!1)),0!==d.length){for(let e of d){let d=this.skippedRecord(e,b);if(c)try{await (0,w.Hy)(a,d)}catch(b){C.warn(`Failed to record cancelled exclusive fire for ${a}:`,b)}e.resolve(d)}C.info(`Cancelled ${d.length} exclusive-related fire(s) for ${a}: ${b}`)}}async cancelAllExclusiveWaiting(a,b){let c=[...this.exclusiveWaiting,...this.blockedByExclusive];if(this.exclusiveWaiting=[],this.blockedByExclusive=[],0!==c.length){for(let d of c){let c=this.skippedRecord(d,a);if(b)try{await (0,w.Hy)(d.execution.id,c)}catch(a){C.warn(`Failed to record cancelled exclusive fire for ${d.execution.id}:`,a)}d.resolve(c)}C.info(`Cancelled ${c.length} exclusive-related fire(s): ${a}`)}}getStatus(a){let b=this.armed.get(a.id),c=void 0!==b||a.enabled&&"webhook"===a.trigger.type&&this.started&&!this.pausedCache,d=this.earliestRunningSince(a.id),e=c?void 0:a.enabled?this.pausedCache?"paused":void 0:"disabled",f=this.exclusiveHolder??void 0,g=!0!==a.exclusive&&this.isExclusiveActive();return{armed:c,notArmedReason:e,nextRun:b?.nextRun?b.nextRun():void 0,lastTriggerError:this.lastTriggerErrors.get(a.id),running:void 0!==d,runningSince:d,exclusiveHolderId:f,blockedByExclusive:g}}async runNow(a){let b=await this.get(a);return b?{record:await this.fire(b,{kind:"manual",summary:"Manual run"},(0,d.A)(),!0)}:{error:`No planned execution with id "${a}"`}}async fire(a,b,e=(0,d.A)(),f=!1){let g,i=new Date().toISOString();if(await (0,h.isEncryptionLocked)()){let c={runId:e,conversationId:"",firedAt:i,finishedAt:i,status:"skipped",triggerSummary:b.summary,error:"encryption locked"};return await (0,w.Hy)(a.id,c),C.info(`Skipped fire for "${a.name}" — encryption locked`),c}let j="flow-event"===b.kind;if(!f&&!j){if(!0===a.exclusive){if(this.exclusiveHolder!==a.id){if(null!==this.exclusiveHolder||!this.isSchedulerIdle()){let c=this.exclusiveWaiting.length;if(c>=E.MAX_QUEUE_DEPTH){let c={runId:e,conversationId:"",firedAt:i,finishedAt:i,status:"skipped",triggerSummary:b.summary,error:`Exclusive wait queue full (cap ${E.MAX_QUEUE_DEPTH}) — fire dropped`};return await (0,w.Hy)(a.id,c),C.warn(`Exclusive wait queue full for "${a.name}" — dropped fire`),c}return C.info(`Exclusive "${a.name}" waiting for scheduler to idle (depth ${c+1})`),new Promise(c=>{this.exclusiveWaiting.push({execution:a,payload:b,runId:e,resolve:c})})}this.exclusiveHolder=a.id,this.exclusiveHolderBehavior=a.nonExclusiveBehavior??"queue",C.info(`Exclusive "${a.name}" acquired the scheduler lock`)}}else if(this.isExclusiveActive()){let c=this.currentExclusiveBehavior();if("skip"===c){let c={runId:e,conversationId:"",firedAt:i,finishedAt:i,status:"skipped",triggerSummary:b.summary,error:"Skipped — an exclusive execution holds the scheduler lock"};return await (0,w.Hy)(a.id,c),C.info(`Skipped non-exclusive fire for "${a.name}" — exclusive lock held`),c}if("error"===c){let c={runId:e,conversationId:"",firedAt:i,finishedAt:i,status:"error",triggerSummary:b.summary,error:"Rejected — an exclusive execution holds the scheduler lock"};return await (0,w.Hy)(a.id,c),C.info(`Rejected non-exclusive fire for "${a.name}" — exclusive lock held`),c}let d=this.blockedByExclusive.length;if(d>=E.MAX_QUEUE_DEPTH){let c={runId:e,conversationId:"",firedAt:i,finishedAt:i,status:"skipped",triggerSummary:b.summary,error:`Exclusive-block queue full (cap ${E.MAX_QUEUE_DEPTH}) — fire dropped`};return await (0,w.Hy)(a.id,c),C.warn(`Exclusive-block queue full for "${a.name}" — dropped fire`),c}return C.info(`Deferred non-exclusive fire for "${a.name}" — exclusive lock held (depth ${d+1})`),new Promise(c=>{this.blockedByExclusive.push({execution:a,payload:b,runId:e,resolve:c})})}}let k=a.overlapStrategy??"skip";if(!f&&this.isRunning(a.id)){if("skip"===k){let c={runId:e,conversationId:"",firedAt:i,finishedAt:i,status:"skipped",triggerSummary:b.summary,error:"Previous run still in progress"};return await (0,w.Hy)(a.id,c),C.info(`Skipped overlapping fire for "${a.name}"`),c}if("error"===k){let c={runId:e,conversationId:"",firedAt:i,finishedAt:i,status:"error",triggerSummary:b.summary,error:"Overlapping run rejected (overlapStrategy=error)"};return await (0,w.Hy)(a.id,c),C.info(`Rejected overlapping fire for "${a.name}" (overlapStrategy=error)`),c}if("queue"===k){let c=this.queued.get(a.id)?.length??0;if(c>=E.MAX_QUEUE_DEPTH){let c={runId:e,conversationId:"",firedAt:i,finishedAt:i,status:"skipped",triggerSummary:b.summary,error:`Overlap queue full (cap ${E.MAX_QUEUE_DEPTH}) — fire dropped`};return await (0,w.Hy)(a.id,c),C.warn(`Overlap queue full for "${a.name}" — dropped fire`),c}return C.info(`Queued overlapping fire for "${a.name}" (depth ${c+1})`),new Promise(c=>{let d=this.queued.get(a.id)??[];d.push({execution:a,payload:b,runId:e,resolve:c}),this.queued.set(a.id,d)})}}this.addRunning(a.id,e,i);let l=(0,d.A)();try{C.info(`Firing "${a.name}" (${b.kind})`);let d=await (0,w.Sw)(a.id),f=d.length>0?d[d.length-1]:null,h={executionName:a.name,trigger:b.kind,now:i,timezone:Intl.DateTimeFormat().resolvedOptions().timeZone,lastRun:f?{at:f.firedAt,status:f.status}:null,nextPlannedRun:this.getStatus(a).nextRun??null},j=a.approvalPolicy??"auto",k=a.saveConversations||"pause"===j?"conversation":"ephemeral",{runFlow:m}=await Promise.all([c.e(8732),c.e(4322),c.e(6996),c.e(5734),c.e(1373),c.e(5096),c.e(4545),c.e(7821),c.e(346),c.e(724),c.e(2940),c.e(4671),c.e(7214),c.e(4306)]).then(c.bind(c,57214)),n=await m({flowId:a.flowId,prompt:this.composePrompt(a.prompt,b,h),mode:k,conversationId:l,source:"schedule",plannedExecutionId:a.id,chainDepth:b.chainDepth??0,requireApproval:"auto"!==j,onApprovalRequired:j,debug:!1,userTurn:!0});g=await this.recordFromResult(a,n,{runId:e,conversationId:l,firedAt:i,payload:b})}catch(c){g={runId:e,conversationId:l,firedAt:i,finishedAt:new Date().toISOString(),status:"error",triggerSummary:b.summary,error:c instanceof Error?c.message:String(c)},C.error(`Run crashed for "${a.name}":`,c)}finally{this.removeRunning(a.id,e),this.exclusiveHolder!==a.id||this.isRunning(a.id)||(this.exclusiveHolder=null,C.info(`Exclusive "${a.name}" released the scheduler lock`)),this.drainExclusive(),this.drainQueue(a.id)}return await this.get(a.id)===null?C.info(`Dropping run record for deleted execution ${a.id}`):(await (0,w.Hy)(a.id,g),("completed"===g.status||"error"===g.status)&&await this.publishFlowRunEvent(a,g,b)),g}async recordFromResult(a,b,c){let{runId:d,conversationId:e,firedAt:f,payload:g}=c,h=new Date().toISOString(),i="awaiting_tool_approval"===b.status,j="error"===b.status&&b.error?.details?.type==="approval_required";if(i||j){let c=(b.pendingToolCalls??[]).map(a=>({id:a.id,name:"function"===a.type?a.function.name:String(a.type)})),k={runId:d,conversationId:e,firedAt:f,finishedAt:h,status:"needs_approval",triggerSummary:g.summary,outputText:this.truncateOutput(b.outputText),usage:b.usage,error:j?b.error?.message??"Tool approval required":"Awaiting tool approval",pendingApproval:{tool:c[0]?.name??b.error?.details?.name,toolCallId:c[0]?.id,pendingToolCalls:c.length>0?c:void 0}};return i&&await this.registerPendingApproval(a,k,c),k}return{runId:d,conversationId:e,firedAt:f,finishedAt:h,status:"completed"===b.status?"completed":"error",triggerSummary:g.summary,outputText:this.truncateOutput(b.outputText),usage:b.usage,error:"completed"===b.status?void 0:b.error?.message??`Run ended with status "${b.status}"`}}async registerPendingApproval(a,b,d){try{let e;try{let{flowService:b}=await c.e(7821).then(c.bind(c,87821));e=(await b.getFlow(a.flowId))?.name??void 0}catch(b){C.debug(`Could not resolve flow name for pending approval (${a.flowId}):`,b)}let{putPendingApproval:f}=await c.e(9285).then(c.bind(c,39285));await f({approvalId:b.conversationId,conversationId:b.conversationId,plannedExecutionId:a.id,flowId:a.flowId,flowName:e,runId:b.runId,triggerSummary:b.triggerSummary,pendingToolCalls:d,createdAt:b.firedAt})}catch(b){C.warn(`Failed to register pending approval for "${a.name}":`,b)}}async publishFlowRunEvent(a,b,d){try{let e;try{let{flowService:b}=await c.e(7821).then(c.bind(c,87821));e=(await b.getFlow(a.flowId))?.name??void 0}catch(b){C.debug(`Could not resolve flow name for run event (${a.flowId}):`,b)}let f="schedule-catchup"===d.kind?"schedule":d.kind;(0,t.eh)().publish({flowId:a.flowId,flowName:e,executionId:a.id,runId:b.runId,conversationId:b.conversationId,status:"completed"===b.status?"completed":"error",outputText:b.outputText,error:b.error,firedBy:f,chainDepth:d.chainDepth??0,timestamp:b.finishedAt??new Date().toISOString()})}catch(b){C.warn(`Failed to publish flow-run event for "${a.name}":`,b)}}composePrompt(a,b,c){let d=JSON.stringify(void 0===b.context?c:{...c,data:b.context},null,2);return`${a}
1
+ "use strict";exports.id=4771,exports.ids=[4771],exports.modules={4771:(a,b,c)=>{c.d(b,{getSchedulerService:()=>F});var d=c(32524),e=c(92372),f=c(38844),g=c(50846),h=c(58739),i=c(52189),j=c(33873),k=c.n(j),l=c(29021),m=c(9794);let n=(0,g.h)("backend/services/scheduler/triggers/fileWatch");var o=c(73736),p=c(10960),q=c(51875);let r=(0,g.h)("backend/services/scheduler/triggers/mcpPoll"),s=(0,g.h)("backend/services/scheduler/triggers/urlWatch");var t=c(56793);let u=(0,g.h)("backend/services/scheduler/triggers/flowEvent");function v(a){return a&&a.length>8192?`${a.slice(0,8192)}… (truncated)`:a}var w=c(59911);let x=(0,g.h)("backend/services/scheduler/state"),y=a=>`planned-execution-state/${a}`;async function z(a){try{return await (0,e.YM)(y(a),{})}catch(b){return x.error(`Failed to load trigger state for ${a}:`,b),{}}}async function A(a,b){await (0,e.VH)(y(a),b)}async function B(a){await (0,e.N2)(y(a))}let C=(0,g.h)("backend/services/scheduler/index"),D={version:1,paused:!1,executions:[]};class E{static{this.MAX_QUEUE_DEPTH=50}async start(){this.started||(this.started=!0,C.info("Starting scheduler"),await this.reconcile())}reconcile(){let a=this.reconcileChain.catch(()=>{}).then(()=>this.doReconcile());return this.reconcileChain=a,a}async doReconcile(){for(let[a,b]of this.armed)try{b.dispose()}catch(b){C.warn(`Failed to dispose trigger for ${a}:`,b)}this.armed.clear();let a=await this.loadFile();if(this.pausedCache=a.paused,a.paused)return void C.info("Scheduler is paused — nothing armed");for(let b of a.executions)if(b.enabled)try{await this.armExecution(b)}catch(c){let a=c instanceof Error?c.message:String(c);this.lastTriggerErrors.set(b.id,a),C.error(`Failed to arm "${b.name}" (${b.id}):`,c)}C.info(`Scheduler armed ${this.armed.size} execution(s)`)}async armExecution(a){let b=a.trigger;switch(b.type){case"schedule":{let c=await z(a.id);c.lastScheduledFireAt?b.catchUp&&(0,i.hk)(b,c.lastScheduledFireAt)&&(await A(a.id,{...c,lastScheduledFireAt:new Date().toISOString()}),C.info(`Catch-up run for "${a.name}" (missed while closed)`),this.fire(a,{kind:"schedule-catchup",summary:"Schedule (missed while FLUJO was closed — ran once at startup)"})):await A(a.id,{...c,lastScheduledFireAt:new Date().toISOString()}),this.armed.set(a.id,(0,i.wv)(b,()=>{(async()=>{let b=await z(a.id);await A(a.id,{...b,lastScheduledFireAt:new Date().toISOString()}),await this.fire(a,{kind:"schedule",summary:"Schedule"})})().catch(b=>C.error(`Scheduled fire failed for ${a.id}:`,b))}));break}case"webhook":break;case"file-watch":this.armed.set(a.id,function(a,b,c){let d,e=a.debounceMs??2e3,f=new Set(a.events),g=a.glob?.trim()?function(a){let b=a.replace(/\\/g,"/"),c="";for(let a=0;a<b.length;a++){let d=b[a];"*"===d?"*"===b[a+1]?"/"===b[++a+1]?(a++,c+="(?:.*/)?"):c+=".*":c+="[^/]*":"?"===d?c+="[^/]":c+=d.replace(/[.+^${}()|[\]\\]/g,"\\$&")}return RegExp(`^${c}$`)}(a.glob.trim()):null;try{d=l.realpathSync.native(a.path)}catch(d){let b=d instanceof Error?d.message:String(d);return n.warn(`Cannot watch "${a.path}": ${b}`),c(`Cannot watch "${a.path}": ${b}`),{dispose:()=>void 0}}let h=[],i=!1,j=null,o=!1,p=()=>{if(j=null,o||0===h.length)return;let a=h;i&&n.info("File-watch batch overflowed; reporting first 50 events"),h=[],i=!1,b({events:a})},q=(0,m.wB)(d,{ignoreInitial:!0,awaitWriteFinish:{stabilityThreshold:500,pollInterval:100}});return q.on("all",(a,b)=>{if(!o&&("add"===a||"change"===a||"unlink"===a)&&f.has(a)){if(g){let a=k().relative(d,b).replace(/\\/g,"/")||k().basename(b);if(!g.test(a))return}h.length>=50?i=!0:h.push({event:a,path:b}),j&&clearTimeout(j),j=setTimeout(p,e),j.unref?.()}}),q.on("error",a=>{let b=a instanceof Error?a.message:String(a);n.warn(`Watcher error for ${d}: ${b}`),c(b)}),{dispose:()=>{o=!0,j&&(clearTimeout(j),j=null),h=[],q.close().catch(a=>n.warn(`Failed to close watcher for ${d}:`,a))}}}(b,({events:c})=>{this.lastTriggerErrors.delete(a.id),this.fire(a,{kind:"file",summary:1===c.length?`File ${"unlink"===c[0].event?"deleted":"add"===c[0].event?"added":"changed"}`:`${c.length} file changes`,context:{watchedPath:b.path,events:c}})},b=>this.lastTriggerErrors.set(a.id,b)));break;case"mcp-poll":Promise.all([c.e(3128),c.e(4322),c.e(5067),c.e(6849),c.e(5096),c.e(7538),c.e(1925)]).then(c.bind(c,24463)).then(async({mcpService:c})=>{await c.isServerDisabled(b.serverName)&&this.lastTriggerErrors.set(a.id,`MCP server '${b.serverName}' is disabled — enable it on the MCP page or change the trigger`)}).catch(b=>C.warn(`Arm-time disabled-server check failed for ${a.id}:`,b)),this.armed.set(a.id,function(a,b){let c=a.cron||(0,p.X)(a.intervalMs),d=!1,e=!1,f=0,g=0,h=async()=>{if(!e&&!d){if(g>0)return void g--;d=!0;try{let c,d=await b.callTool(a.serverName,a.toolName,a.args);if(!d.success)throw Error(d.error||"Tool call failed");f=0;let g=await b.loadState(),h=a.evaluate;if(c="on-change"===h.mode?(0,q.Jl)(d.data,g):"new-items"===h.mode?(0,q.A1)(d.data,h.itemsPath,h.idField,g):b.evaluateAiGate?await b.evaluateAiGate(d.data,h,g):{fire:!1,newState:{},error:'The "AI decides" condition is not available yet'},e)return;if(Object.keys(c.newState).length>0&&await b.saveState(c.newState),c.error)b.onError(c.error);else if(c.fire){let{status:d}=await b.onFire({summary:`Watched tool: ${c.summary??"condition met"}`,context:{server:a.serverName,tool:a.toolName,..."object"==typeof c.context&&null!==c.context?c.context:{result:c.context}}});if(e)return;if(c.pendingState){let{giveUpError:a}=await (0,q.vV)({status:d,pendingState:c.pendingState,priorFailures:g.pendingFailures??0,saveState:b.saveState});a&&b.onError(a)}}else b.onSuccess?.()}catch(d){f++,g=Math.min(2**(f-1),8);let c=d instanceof Error?d.message:String(d);r.warn(`Poll failed for ${a.serverName}/${a.toolName} (backing off ${g} check(s)): ${c}`),b.onError(c)}finally{d=!1}}},i=new o.l4(c,{timezone:a.timezone,unref:!0},()=>void h());return h(),{dispose:()=>{e=!0,i.stop()},nextRun:()=>i.nextRun()?.toISOString()??null}}(b,{callTool:async(a,b,d)=>{let{mcpService:e}=await Promise.all([c.e(3128),c.e(4322),c.e(5067),c.e(6849),c.e(5096),c.e(7538),c.e(1925)]).then(c.bind(c,24463)),f=await e.callTool(a,b,d);return{success:!0===f.success,data:f.data,error:"string"==typeof f.error?f.error:void 0}},loadState:()=>z(a.id),saveState:async b=>{let c=await z(a.id);await A(a.id,{...c,...b})},onFire:async({summary:b,context:c})=>(this.lastTriggerErrors.delete(a.id),{status:(await this.fire(a,{kind:"mcp-poll",summary:b,context:c})).status}),onError:b=>this.lastTriggerErrors.set(a.id,b),onSuccess:()=>this.lastTriggerErrors.delete(a.id),evaluateAiGate:async(a,b,d)=>{let{evaluateAiGate:e}=await c.e(7506).then(c.bind(c,47506));return e(a,b,d)}}));break;case"url-watch":this.armed.set(a.id,function(a,b){let c=b.fetchImpl??fetch,d=!1,e=!1,f=async()=>{if(!e&&!d){d=!0;try{let d=await c(a.url,{redirect:"follow",headers:{"User-Agent":"FLUJO-url-watch"},signal:AbortSignal.timeout(3e4)});if(!d.ok)return void b.onError(`The URL answered with HTTP ${d.status}`);let f=await d.text(),g=(0,q.qq)(f),h=await b.loadState();if(e)return;if(!h.lastHash){await b.saveState({lastHash:g}),b.onSuccess?.();return}if(h.lastHash===g)return void b.onSuccess?.();let{status:i}=await b.onFire({summary:"Online content changed",context:{url:a.url,status:d.status,contentType:d.headers.get("content-type")??void 0,content:f.length>8192?`${f.slice(0,8192)}… (truncated, ${f.length} chars total)`:f}});if(e)return;let{giveUpError:j}=await (0,q.vV)({status:i,pendingState:{lastHash:g},priorFailures:h.pendingFailures??0,saveState:b.saveState});j&&b.onError(j)}catch(d){let c=d instanceof Error&&"TimeoutError"===d.name?"The URL did not answer within 30s":d instanceof Error?d.message:String(d);s.warn(`URL check failed for ${a.url}: ${c}`),b.onError(c)}finally{d=!1}}},g=new o.l4(a.cron,{timezone:a.timezone,unref:!0},()=>void f());return f(),{dispose:()=>{e=!0,g.stop()},nextRun:()=>g.nextRun()?.toISOString()??null}}(b,{loadState:()=>z(a.id),saveState:async b=>{let c=await z(a.id);await A(a.id,{...c,...b})},onFire:async({summary:b,context:c})=>(this.lastTriggerErrors.delete(a.id),{status:(await this.fire(a,{kind:"url-watch",summary:b,context:c})).status}),onError:b=>this.lastTriggerErrors.set(a.id,b),onSuccess:()=>this.lastTriggerErrors.delete(a.id)}));break;case"flow-event":this.armed.set(a.id,function(a,b){let c=a.maxChainDepth??5,d="string"==typeof a.source.topic?a.source.topic.trim():"",e=d.length>0,f=0,g=null,h=!1;if(a.outputMatch?.regex)try{g=new RegExp(a.outputMatch.regex)}catch(c){h=!0;let a=`Invalid output-match regex: ${c instanceof Error?c.message:String(c)}`;u.warn(a),b.onError(a)}let i=b=>{if(!a.outputMatch)return!0;if(h)return!1;let c=(b??"").slice(0,16384);return(!a.outputMatch.contains||!!c.includes(a.outputMatch.contains))&&(!g||!!g.test(c))},j=(d,e,g,h)=>{if(d>=c){let a=`Flow-event chain reached the depth limit (${c}); not firing again`;u.info(a),b.onSkip(a);return}let i=Date.now();if(a.minIntervalMs&&i-f<a.minIntervalMs)return void u.debug(`Flow-event cooldown active (${a.minIntervalMs}ms); ignoring event`);f=i,b.onFire({summary:e,context:g,chainDepth:d+1,sourceConversationId:h})},k=(0,t.eh)().subscribe(c=>{try{if(e){if(!(0,t.ru)(c)||c.topic!==d||!i(c.payload))return;j(c.chainDepth,`Signal "${c.topic}"`,{topic:c.topic,payload:v(c.payload),emitterFlowId:c.emitterFlowId,flowName:c.flowName,runId:c.runId,conversationId:c.conversationId,firedBy:c.firedBy},c.conversationId);return}if((0,t.ru)(c)||!(b=>{let c=a.source;return c.executionId?b.executionId===c.executionId:c.flowId?b.flowId===c.flowId:!!c.flowName&&b.flowName===c.flowName})(c)||!c.status||!(a.on??[]).includes(c.status)||!i(c.outputText))return;let b=c.flowName??c.flowId;j(c.chainDepth,`Flow "${b}" ${c.status}`,{flowId:c.flowId,flowName:c.flowName,executionId:c.executionId,runId:c.runId,conversationId:c.conversationId,status:c.status,firedBy:c.firedBy,outputText:v(c.outputText),error:c.error},c.conversationId)}catch(c){let a=c instanceof Error?c.message:String(c);u.warn(`Flow-event handling failed: ${a}`),b.onError(a)}});return{dispose:()=>k(),nextRun:()=>null}}(b,{onFire:({summary:b,context:c,chainDepth:d,sourceConversationId:e})=>{this.lastTriggerErrors.delete(a.id),this.fire(a,{kind:"flow-event",summary:b,context:c,chainDepth:d,parentConversationId:e}).catch(b=>C.error(`Flow-event fire failed for ${a.id}:`,b))},onSkip:b=>{let c=new Date().toISOString();(0,w.Hy)(a.id,{runId:(0,d.A)(),conversationId:"",firedAt:c,finishedAt:c,status:"skipped",triggerSummary:"Flow event",error:b}).catch(b=>C.warn(`Failed to record flow-event skip for ${a.id}:`,b))},onError:b=>this.lastTriggerErrors.set(a.id,b)}));break;default:C.warn(`Trigger type "${b.type}" is not implemented — "${a.name}" not armed`)}}async loadFile(){let a=await (0,e.YM)(f.Z.PLANNED_EXECUTIONS,D);return{version:1,paused:!0===a.paused,executions:Array.isArray(a.executions)?a.executions:[]}}async saveFile(a){await (0,e.VH)(f.Z.PLANNED_EXECUTIONS,a)}async isPaused(){return(await this.loadFile()).paused}async setPaused(a){let b=await this.loadFile();if(await this.saveFile({...b,paused:a}),await this.reconcile(),a){for(let a of[...this.queued.keys()])await this.cancelQueued(a,"scheduler paused",!0);await this.cancelAllExclusiveWaiting("scheduler paused",!0)}}async list(){return Promise.all((await this.loadFile()).executions.map(async a=>({execution:a,status:this.getStatus(a),lastRun:await (0,w.tl)(a.id)})))}async get(a){return(await this.loadFile()).executions.find(b=>b.id===a)??null}async create(a){let b=this.validateInput(a);if(b)return{error:b};if(void 0!==a.id&&!/^[A-Za-z0-9._:-]{1,128}$/.test(a.id))return{error:"The id must be 1-128 characters of letters, digits, dot, underscore, colon or hyphen"};if("."===a.id||".."===a.id)return{error:'The id must be a safe identifier, not "." or ".."'};let c=new Date().toISOString(),e={...a,trigger:this.normalizeTrigger(a.trigger),id:a.id??(0,d.A)(),createdAt:c,updatedAt:c},f=await this.loadFile();return f.executions.some(a=>a.id===e.id)?{error:`A planned execution with id "${e.id}" already exists`,conflict:!0}:(await this.saveFile({...f,executions:[...f.executions,e]}),await this.reconcile(),{execution:e})}async update(a,b){let c=await this.loadFile(),d=c.executions.findIndex(b=>b.id===a);if(d<0)return{error:`No planned execution with id "${a}"`};let e={...c.executions[d],...b,...b.trigger?{trigger:this.normalizeTrigger(b.trigger)}:{},id:a,createdAt:c.executions[d].createdAt,updatedAt:new Date().toISOString()},f=this.validateInput(e);if(f)return{error:f};let g=[...c.executions];return g[d]=e,await this.saveFile({...c,executions:g}),await this.reconcile(),await this.cancelQueued(a,"execution updated",!0),await this.cancelExclusiveWaiting(a,"execution updated",!0),{execution:e}}async delete(a){let b=await this.loadFile();return b.executions.some(b=>b.id===a)?(await this.saveFile({...b,executions:b.executions.filter(b=>b.id!==a)}),await this.reconcile(),this.lastTriggerErrors.delete(a),await this.cancelQueued(a,"execution deleted",!1),await this.cancelExclusiveWaiting(a,"execution deleted",!1),await (0,w.xC)(a),await B(a),{success:!0}):{success:!1,error:`No planned execution with id "${a}"`}}normalizeTrigger(a){return a?.type!=="webhook"||a.token?a?.type!=="mcp-poll"||a.cron?a:{...a,cron:(0,p.X)(a.intervalMs)}:{...a,token:(0,d.A)()}}validateInput(a){if(!a.name?.trim())return"A name is required";if(!a.flowId)return"A flow is required";if("string"!=typeof a.prompt)return"A prompt is required (may be empty)";if(void 0!==a.overlapStrategy&&!["skip","queue","parallel","error"].includes(a.overlapStrategy))return"Overlap strategy must be one of: skip, queue, parallel, error";if(void 0!==a.exclusive&&"boolean"!=typeof a.exclusive)return"Exclusive must be true or false";if(void 0!==a.nonExclusiveBehavior&&!["queue","skip","error"].includes(a.nonExclusiveBehavior))return"When exclusive is on, other triggers must be one of: queue, skip, error";let b=a.trigger;if(!b||"object"!=typeof b)return"A trigger is required";switch(b.type){case"schedule":{let a=(0,i.O9)(b.cron,b.timezone);return a.valid?null:`Invalid schedule: ${a.error}`}case"webhook":return null;case"file-watch":if(!b.path?.trim())return"A folder or file path to watch is required";if(!Array.isArray(b.events)||0===b.events.length)return"At least one file event is required";return null;case"mcp-poll":if(!b.serverName||!b.toolName)return"A server and tool are required";if(b.cron){let a=(0,i.O9)(b.cron,b.timezone);if(!a.valid)return`Invalid schedule: ${a.error}`}if(b.evaluate?.mode==="new-items"&&!b.evaluate.idField?.trim())return"An id field is required to detect new items";if((b.evaluate?.mode==="llm-gate"||b.evaluate?.mode==="flow-gate")&&!b.evaluate.condition?.trim())return"A condition is required for the AI to check";if(b.evaluate?.mode==="llm-gate"&&!b.evaluate.modelId)return"A model is required to check the condition";if(b.evaluate?.mode==="flow-gate"&&!b.evaluate.flowId)return"A flow is required to check the condition";return null;case"url-watch":{try{let a=new URL(b.url??"");if("http:"!==a.protocol&&"https:"!==a.protocol)return"The URL must start with http:// or https://"}catch{return"A valid URL is required"}let a=(0,i.O9)(b.cron,b.timezone);return a.valid?null:`Invalid schedule: ${a.error}`}case"flow-event":{let a=b.source;if(1!==[a?.executionId,a?.flowId,a?.flowName,a?.topic].filter(a=>"string"==typeof a&&a.trim().length>0).length)return"Choose exactly one source: a flow, a planned execution, or a signal topic";if(!("string"==typeof a?.topic&&a.topic.trim().length>0)){if(!Array.isArray(b.on)||0===b.on.length)return"Select at least one outcome to react to (completed or error)";if(b.on.some(a=>"completed"!==a&&"error"!==a))return'Outcomes must be "completed" or "error"'}if(b.outputMatch?.regex)try{new RegExp(b.outputMatch.regex)}catch(a){return`Invalid output-match regex: ${a instanceof Error?a.message:String(a)}`}if(void 0!==b.maxChainDepth&&(!Number.isInteger(b.maxChainDepth)||b.maxChainDepth<1))return"Max chain depth must be a positive whole number";if(void 0!==b.minIntervalMs&&(!Number.isFinite(b.minIntervalMs)||b.minIntervalMs<0))return"Minimum interval must be zero or more milliseconds";return null}default:return"Unknown trigger type"}}isRunning(a){let b=this.running.get(a);return void 0!==b&&b.size>0}addRunning(a,b,c){let d=this.running.get(a);d||(d=new Map,this.running.set(a,d)),d.set(b,c)}removeRunning(a,b){let c=this.running.get(a);c&&(c.delete(b),0===c.size&&this.running.delete(a))}earliestRunningSince(a){let b,c=this.running.get(a);if(c&&0!==c.size){for(let a of c.values())(void 0===b||a<b)&&(b=a);return b}}skippedRecord(a,b){let c=new Date().toISOString();return{runId:a.runId,conversationId:"",firedAt:c,finishedAt:c,status:"skipped",triggerSummary:a.payload.summary,error:b}}async cancelQueued(a,b,c){let d=this.queued.get(a);if(d&&0!==d.length){for(let e of(this.queued.delete(a),d)){let d=this.skippedRecord(e,b);if(c)try{await (0,w.Hy)(a,d)}catch(b){C.warn(`Failed to record cancelled queued fire for ${a}:`,b)}e.resolve(d)}C.info(`Cancelled ${d.length} queued fire(s) for ${a}: ${b}`)}}drainQueue(a){let b=this.queued.get(a);if(!b||0===b.length||this.isRunning(a))return;let c=b.shift();0===b.length&&this.queued.delete(a),c&&(async()=>{let b=await this.get(a);if(!b||!b.enabled||this.pausedCache){let a=b?b.enabled?"scheduler paused":"execution disabled":"execution deleted";c.resolve(this.skippedRecord(c,a));return}let d=await this.fire(b,c.payload,c.runId);c.resolve(d)})().catch(b=>C.error(`Queued fire failed for ${a}:`,b))}isSchedulerIdle(){for(let a of this.running.values())if(a.size>0)return!1;return!0}isExclusiveActive(){return null!==this.exclusiveHolder||this.exclusiveWaiting.length>0}currentExclusiveBehavior(){return null!==this.exclusiveHolder?this.exclusiveHolderBehavior:this.exclusiveWaiting[0]?.execution.nonExclusiveBehavior??"queue"}exclusiveGateFor(a){return!0!==a.exclusive&&this.isExclusiveActive()?this.currentExclusiveBehavior():null}drainExclusive(){if(null===this.exclusiveHolder&&this.exclusiveWaiting.length>0&&this.isSchedulerIdle())return void this.acquireNextExclusive();this.isExclusiveActive()||this.drainBlockedByExclusive()}acquireNextExclusive(){if(null!==this.exclusiveHolder||!this.isSchedulerIdle())return;let a=this.exclusiveWaiting.shift();if(!a)return;let b=a.execution.id;this.exclusiveHolder=b,this.exclusiveHolderBehavior=a.execution.nonExclusiveBehavior??"queue",(async()=>{let c=await this.get(b);if(!c||!c.enabled||this.pausedCache||!0!==c.exclusive){let d=c?c.enabled?this.pausedCache?"scheduler paused":"no longer exclusive":"execution disabled":"execution deleted";this.exclusiveHolder===b&&(this.exclusiveHolder=null),a.resolve(this.skippedRecord(a,d)),this.drainExclusive();return}this.exclusiveHolderBehavior=c.nonExclusiveBehavior??"queue";let d=await this.fire(c,a.payload,a.runId);a.resolve(d)})().catch(c=>{this.exclusiveHolder===b&&(this.exclusiveHolder=null),C.error(`Exclusive acquire failed for ${b}:`,c),a.resolve(this.skippedRecord(a,"exclusive acquire failed")),this.drainExclusive()})}drainBlockedByExclusive(){if(0===this.blockedByExclusive.length)return;let a=this.blockedByExclusive;for(let b of(this.blockedByExclusive=[],a))(async()=>{let a=await this.get(b.execution.id);if(!a||!a.enabled||this.pausedCache){let c=a?a.enabled?"scheduler paused":"execution disabled":"execution deleted";b.resolve(this.skippedRecord(b,c));return}let c=await this.fire(a,b.payload,b.runId);b.resolve(c)})().catch(a=>C.error(`Deferred non-exclusive fire failed for ${b.execution.id}:`,a))}async cancelExclusiveWaiting(a,b,c){let d=[];if(this.exclusiveWaiting=this.exclusiveWaiting.filter(b=>b.execution.id!==a||(d.push(b),!1)),this.blockedByExclusive=this.blockedByExclusive.filter(b=>b.execution.id!==a||(d.push(b),!1)),0!==d.length){for(let e of d){let d=this.skippedRecord(e,b);if(c)try{await (0,w.Hy)(a,d)}catch(b){C.warn(`Failed to record cancelled exclusive fire for ${a}:`,b)}e.resolve(d)}C.info(`Cancelled ${d.length} exclusive-related fire(s) for ${a}: ${b}`)}}async cancelAllExclusiveWaiting(a,b){let c=[...this.exclusiveWaiting,...this.blockedByExclusive];if(this.exclusiveWaiting=[],this.blockedByExclusive=[],0!==c.length){for(let d of c){let c=this.skippedRecord(d,a);if(b)try{await (0,w.Hy)(d.execution.id,c)}catch(a){C.warn(`Failed to record cancelled exclusive fire for ${d.execution.id}:`,a)}d.resolve(c)}C.info(`Cancelled ${c.length} exclusive-related fire(s): ${a}`)}}getStatus(a){let b=this.armed.get(a.id),c=void 0!==b||a.enabled&&"webhook"===a.trigger.type&&this.started&&!this.pausedCache,d=this.earliestRunningSince(a.id),e=c?void 0:a.enabled?this.pausedCache?"paused":void 0:"disabled",f=this.exclusiveHolder??void 0,g=!0!==a.exclusive&&this.isExclusiveActive();return{armed:c,notArmedReason:e,nextRun:b?.nextRun?b.nextRun():void 0,lastTriggerError:this.lastTriggerErrors.get(a.id),running:void 0!==d,runningSince:d,exclusiveHolderId:f,blockedByExclusive:g}}async runNow(a){let b=await this.get(a);return b?{record:await this.fire(b,{kind:"manual",summary:"Manual run"},(0,d.A)(),!0)}:{error:`No planned execution with id "${a}"`}}async fire(a,b,e=(0,d.A)(),f=!1){let g,i=new Date().toISOString();if(await (0,h.isEncryptionLocked)()){let c={runId:e,conversationId:"",firedAt:i,finishedAt:i,status:"skipped",triggerSummary:b.summary,error:"encryption locked"};return await (0,w.Hy)(a.id,c),C.info(`Skipped fire for "${a.name}" — encryption locked`),c}let j="flow-event"===b.kind;if(!f&&!j){if(!0===a.exclusive){if(this.exclusiveHolder!==a.id){if(null!==this.exclusiveHolder||!this.isSchedulerIdle()){let c=this.exclusiveWaiting.length;if(c>=E.MAX_QUEUE_DEPTH){let c={runId:e,conversationId:"",firedAt:i,finishedAt:i,status:"skipped",triggerSummary:b.summary,error:`Exclusive wait queue full (cap ${E.MAX_QUEUE_DEPTH}) — fire dropped`};return await (0,w.Hy)(a.id,c),C.warn(`Exclusive wait queue full for "${a.name}" — dropped fire`),c}return C.info(`Exclusive "${a.name}" waiting for scheduler to idle (depth ${c+1})`),new Promise(c=>{this.exclusiveWaiting.push({execution:a,payload:b,runId:e,resolve:c})})}this.exclusiveHolder=a.id,this.exclusiveHolderBehavior=a.nonExclusiveBehavior??"queue",C.info(`Exclusive "${a.name}" acquired the scheduler lock`)}}else if(this.isExclusiveActive()){let c=this.currentExclusiveBehavior();if("skip"===c){let c={runId:e,conversationId:"",firedAt:i,finishedAt:i,status:"skipped",triggerSummary:b.summary,error:"Skipped — an exclusive execution holds the scheduler lock"};return await (0,w.Hy)(a.id,c),C.info(`Skipped non-exclusive fire for "${a.name}" — exclusive lock held`),c}if("error"===c){let c={runId:e,conversationId:"",firedAt:i,finishedAt:i,status:"error",triggerSummary:b.summary,error:"Rejected — an exclusive execution holds the scheduler lock"};return await (0,w.Hy)(a.id,c),C.info(`Rejected non-exclusive fire for "${a.name}" — exclusive lock held`),c}let d=this.blockedByExclusive.length;if(d>=E.MAX_QUEUE_DEPTH){let c={runId:e,conversationId:"",firedAt:i,finishedAt:i,status:"skipped",triggerSummary:b.summary,error:`Exclusive-block queue full (cap ${E.MAX_QUEUE_DEPTH}) — fire dropped`};return await (0,w.Hy)(a.id,c),C.warn(`Exclusive-block queue full for "${a.name}" — dropped fire`),c}return C.info(`Deferred non-exclusive fire for "${a.name}" — exclusive lock held (depth ${d+1})`),new Promise(c=>{this.blockedByExclusive.push({execution:a,payload:b,runId:e,resolve:c})})}}let k=a.overlapStrategy??"skip";if(!f&&this.isRunning(a.id)){if("skip"===k){let c={runId:e,conversationId:"",firedAt:i,finishedAt:i,status:"skipped",triggerSummary:b.summary,error:"Previous run still in progress"};return await (0,w.Hy)(a.id,c),C.info(`Skipped overlapping fire for "${a.name}"`),c}if("error"===k){let c={runId:e,conversationId:"",firedAt:i,finishedAt:i,status:"error",triggerSummary:b.summary,error:"Overlapping run rejected (overlapStrategy=error)"};return await (0,w.Hy)(a.id,c),C.info(`Rejected overlapping fire for "${a.name}" (overlapStrategy=error)`),c}if("queue"===k){let c=this.queued.get(a.id)?.length??0;if(c>=E.MAX_QUEUE_DEPTH){let c={runId:e,conversationId:"",firedAt:i,finishedAt:i,status:"skipped",triggerSummary:b.summary,error:`Overlap queue full (cap ${E.MAX_QUEUE_DEPTH}) — fire dropped`};return await (0,w.Hy)(a.id,c),C.warn(`Overlap queue full for "${a.name}" — dropped fire`),c}return C.info(`Queued overlapping fire for "${a.name}" (depth ${c+1})`),new Promise(c=>{let d=this.queued.get(a.id)??[];d.push({execution:a,payload:b,runId:e,resolve:c}),this.queued.set(a.id,d)})}}this.addRunning(a.id,e,i);let l=(0,d.A)();try{C.info(`Firing "${a.name}" (${b.kind})`);let d=await (0,w.Sw)(a.id),f=d.length>0?d[d.length-1]:null,h={executionName:a.name,trigger:b.kind,now:i,timezone:Intl.DateTimeFormat().resolvedOptions().timeZone,lastRun:f?{at:f.firedAt,status:f.status}:null,nextPlannedRun:this.getStatus(a).nextRun??null},j=a.approvalPolicy??"auto",k=a.saveConversations||"pause"===j?"conversation":"ephemeral",{runFlow:m}=await Promise.all([c.e(3128),c.e(4322),c.e(5067),c.e(6849),c.e(1373),c.e(5096),c.e(7538),c.e(7821),c.e(346),c.e(724),c.e(2940),c.e(4671),c.e(7214),c.e(4306)]).then(c.bind(c,57214)),n=await m({flowId:a.flowId,prompt:this.composePrompt(a.prompt,b,h),mode:k,conversationId:l,source:"schedule",plannedExecutionId:a.id,parentRunId:b.parentConversationId,chainDepth:b.chainDepth??0,requireApproval:"auto"!==j,onApprovalRequired:j,debug:!1,userTurn:!0});g=await this.recordFromResult(a,n,{runId:e,conversationId:l,firedAt:i,payload:b})}catch(c){g={runId:e,conversationId:l,firedAt:i,finishedAt:new Date().toISOString(),status:"error",triggerSummary:b.summary,error:c instanceof Error?c.message:String(c)},C.error(`Run crashed for "${a.name}":`,c)}finally{this.removeRunning(a.id,e),this.exclusiveHolder!==a.id||this.isRunning(a.id)||(this.exclusiveHolder=null,C.info(`Exclusive "${a.name}" released the scheduler lock`)),this.drainExclusive(),this.drainQueue(a.id)}return await this.get(a.id)===null?C.info(`Dropping run record for deleted execution ${a.id}`):(await (0,w.Hy)(a.id,g),("completed"===g.status||"error"===g.status)&&await this.publishFlowRunEvent(a,g,b)),g}async recordFromResult(a,b,c){let{runId:d,conversationId:e,firedAt:f,payload:g}=c,h=new Date().toISOString(),i="awaiting_tool_approval"===b.status,j="error"===b.status&&b.error?.details?.type==="approval_required";if(i||j){let c=(b.pendingToolCalls??[]).map(a=>({id:a.id,name:"function"===a.type?a.function.name:String(a.type)})),k={runId:d,conversationId:e,firedAt:f,finishedAt:h,status:"needs_approval",triggerSummary:g.summary,outputText:this.truncateOutput(b.outputText),usage:b.usage,error:j?b.error?.message??"Tool approval required":"Awaiting tool approval",pendingApproval:{tool:c[0]?.name??b.error?.details?.name,toolCallId:c[0]?.id,pendingToolCalls:c.length>0?c:void 0}};return i&&await this.registerPendingApproval(a,k,c),k}return{runId:d,conversationId:e,firedAt:f,finishedAt:h,status:"completed"===b.status?"completed":"error",triggerSummary:g.summary,outputText:this.truncateOutput(b.outputText),usage:b.usage,error:"completed"===b.status?void 0:b.error?.message??`Run ended with status "${b.status}"`}}async registerPendingApproval(a,b,d){try{let e;try{let{flowService:b}=await c.e(7821).then(c.bind(c,87821));e=(await b.getFlow(a.flowId))?.name??void 0}catch(b){C.debug(`Could not resolve flow name for pending approval (${a.flowId}):`,b)}let{putPendingApproval:f}=await c.e(9285).then(c.bind(c,39285));await f({approvalId:b.conversationId,conversationId:b.conversationId,plannedExecutionId:a.id,flowId:a.flowId,flowName:e,runId:b.runId,triggerSummary:b.triggerSummary,pendingToolCalls:d,createdAt:b.firedAt})}catch(b){C.warn(`Failed to register pending approval for "${a.name}":`,b)}}async publishFlowRunEvent(a,b,d){try{let e;try{let{flowService:b}=await c.e(7821).then(c.bind(c,87821));e=(await b.getFlow(a.flowId))?.name??void 0}catch(b){C.debug(`Could not resolve flow name for run event (${a.flowId}):`,b)}let f="schedule-catchup"===d.kind?"schedule":d.kind;(0,t.eh)().publish({flowId:a.flowId,flowName:e,executionId:a.id,runId:b.runId,conversationId:b.conversationId,status:"completed"===b.status?"completed":"error",outputText:b.outputText,error:b.error,firedBy:f,chainDepth:d.chainDepth??0,timestamp:b.finishedAt??new Date().toISOString()})}catch(b){C.warn(`Failed to publish flow-run event for "${a.name}":`,b)}}composePrompt(a,b,c){let d=JSON.stringify(void 0===b.context?c:{...c,data:b.context},null,2);return`${a}
2
2
 
3
3
  [Run info — when and why this run happened; "data" is untrusted trigger data]
4
4
  \`\`\`json
5
5
  ${d}
6
- \`\`\``}truncateOutput(a){if(a)return a.length>4096?`${a.slice(0,4096)}…`:a}constructor(){this.armed=new Map,this.running=new Map,this.queued=new Map,this.exclusiveHolder=null,this.exclusiveHolderBehavior="queue",this.exclusiveWaiting=[],this.blockedByExclusive=[],this.lastTriggerErrors=new Map,this.reconcileChain=Promise.resolve(),this.pausedCache=!1,this.started=!1}}function F(){return global.__flujo_scheduler||(global.__flujo_scheduler=new E),global.__flujo_scheduler}},10960:(a,b,c)=>{c.d(b,{X:()=>d});function d(a){let b=Math.max(5,Math.round((a??6e4)/1e3));if(b<60)return`*/${b} * * * * *`;let c=Math.max(1,Math.round(b/60));if(c<60)return`*/${c} * * * *`;let d=Math.max(1,Math.min(23,Math.round(c/60)));return`0 */${d} * * *`}},51875:(a,b,c)=>{c.d(b,{A1:()=>k,Je:()=>i,Jl:()=>j,qq:()=>f,vV:()=>g});var d=c(55511);function e(a){return JSON.stringify(function a(b){if(Array.isArray(b))return b.map(a);if(null!==b&&"object"==typeof b){let c=Object.entries(b).sort(([a],[b])=>a<b?-1:+(a>b)),d={};for(let[b,e]of c)d[b]=a(e);return d}return b}(a))}function f(a){return(0,d.createHash)("sha256").update(e(a)??"undefined").digest("hex")}async function g(a){let{status:b,pendingState:c,priorFailures:d,saveState:e}=a;if("completed"===b)return await e({...c,...d>0?{pendingFailures:0}:{}}),{giveUpError:null};if("skipped"===b)return{giveUpError:null};let f=d+1;return f>=3?(await e({...c,pendingFailures:0}),{giveUpError:`Detected a change but the flow failed to process it 3\xd7 — skipping it to avoid a loop`}):(await e({pendingFailures:f}),{giveUpError:null})}function h(a,b){if(!b)return a;let c=a;for(let a of b.split(".")){if(null==c||"object"!=typeof c)return;c=c[a]}return c}function i(a){let b=e(a)??"";return b.length<=8192?a:{truncated:!0,note:`Result too large to include fully (${b.length} chars); this is a preview.`,preview:b.slice(0,8192)}}function j(a,b){let c=f(a);return b.lastHash?b.lastHash===c?{fire:!1,newState:{}}:{fire:!0,summary:"Tool result changed",context:{result:i(a)},newState:{},pendingState:{lastHash:c}}:{fire:!1,newState:{lastHash:c}}}function k(a,b,c,d){let e=h(a,b);if(!Array.isArray(e))return{fire:!1,newState:{},error:`"${b||"(root)"}" did not resolve to a list in the tool result`};let g=e.map(a=>{let b=h(a,c);return{id:null==b||"object"==typeof b?`hash:${f(a)}`:String(b),item:a}}),j=d.seenIds,k=g.map(({id:a})=>a),l=(a,b)=>{let c=[...a??[]],d=new Set(c);for(let a of b)d.has(a)||(d.add(a),c.push(a));return c.slice(-1e3)};if(!j)return{fire:!1,newState:{seenIds:l(void 0,k)}};let m=new Set(j),n=g.filter(({id:a})=>!m.has(a));if(0===n.length)return{fire:!1,newState:{}};let o=n.slice(0,50);return{fire:!0,summary:1===n.length?"1 new item":`${n.length} new items`,context:{newItems:i(o.map(({item:a})=>a)),...n.length>50?{omitted:n.length-50}:{}},newState:{},pendingState:{seenIds:l(j,o.map(({id:a})=>a))}}}},52189:(a,b,c)=>{c.d(b,{O9:()=>e,Z9:()=>f,hk:()=>g,wv:()=>h});var d=c(73736);function e(a,b){try{let c=new d.l4(a,{timezone:b,paused:!0});return c.nextRun(),c.stop(),{valid:!0}}catch(a){return{valid:!1,error:a instanceof Error?a.message:"Invalid cron pattern"}}}function f(a,b,c){let e=new d.l4(a,{timezone:b,paused:!0});try{return e.nextRuns(c).map(a=>a.toISOString())}finally{e.stop()}}function g(a,b){let c=new d.l4(a.cron,{timezone:a.timezone,paused:!0});try{let a=c.nextRun(new Date(b));return null!==a&&a.getTime()<=Date.now()}finally{c.stop()}}function h(a,b){let c=new d.l4(a.cron,{timezone:a.timezone,unref:!0},b);return{dispose:()=>c.stop(),nextRun:()=>c.nextRun()?.toISOString()??null}}},56793:(a,b,c)=>{c.d(b,{eh:()=>g,ru:()=>e});let d=(0,c(50846).h)("backend/services/scheduler/flowRunEventBus");function e(a){return"signal"===a.kind}class f{publish(a){if(0===this.listeners.size)return;let b=e(a)?`signal topic=${a.topic} emitter=${a.emitterFlowId}`:`flow=${a.flowId} status=${a.status}`;for(let c of(d.debug(`Publishing flow event: ${b} firedBy=${a.firedBy} depth=${a.chainDepth} listeners=${this.listeners.size}`),[...this.listeners]))try{c(a)}catch(a){d.warn("A flow-run event listener threw:",a)}}subscribe(a){return this.listeners.add(a),()=>{this.listeners.delete(a)}}get listenerCount(){return this.listeners.size}constructor(){this.listeners=new Set}}function g(){return global.__flujo_flow_run_event_bus||(global.__flujo_flow_run_event_bus=new f),global.__flujo_flow_run_event_bus}},59911:(a,b,c)=>{c.d(b,{Hy:()=>i,Sw:()=>h,s1:()=>j,tl:()=>k,xC:()=>l});var d=c(92372);let e=(0,c(50846).h)("backend/services/scheduler/runHistory"),f=a=>`planned-execution-runs/${a}`,g=new Map;async function h(a){try{return await (0,d.YM)(f(a),[])}catch(b){return e.error(`Failed to load run history for ${a}:`,b),[]}}async function i(a,b){let c=(g.get(a)??Promise.resolve()).catch(()=>{}).then(async()=>{let c=await h(a);c.push(b);let e=c.slice(-100);await (0,d.VH)(f(a),e)});g.set(a,c);try{await c}finally{g.get(a)===c&&g.delete(a)}}async function j(a,b,c){let e=g.get(a)??Promise.resolve(),i=null,j=e.catch(()=>{}).then(async()=>{let e=await h(a),g=e.findIndex(a=>a.runId===b);if(g<0){i=null;return}e[g]={...e[g],...c,runId:b},i=e[g],await (0,d.VH)(f(a),e)});g.set(a,j);try{await j}finally{g.get(a)===j&&g.delete(a)}return i}async function k(a){let b=await h(a);return b.length>0?b[b.length-1]:null}async function l(a){await (0,d.N2)(f(a))}}};
6
+ \`\`\``}truncateOutput(a){if(a)return a.length>4096?`${a.slice(0,4096)}…`:a}constructor(){this.armed=new Map,this.running=new Map,this.queued=new Map,this.exclusiveHolder=null,this.exclusiveHolderBehavior="queue",this.exclusiveWaiting=[],this.blockedByExclusive=[],this.lastTriggerErrors=new Map,this.reconcileChain=Promise.resolve(),this.pausedCache=!1,this.started=!1}}function F(){return global.__flujo_scheduler??(global.__flujo_scheduler=new E)}},10960:(a,b,c)=>{c.d(b,{X:()=>d});function d(a){let b=Math.max(5,Math.round((a??6e4)/1e3));if(b<60)return`*/${b} * * * * *`;let c=Math.max(1,Math.round(b/60));if(c<60)return`*/${c} * * * *`;let d=Math.max(1,Math.min(23,Math.round(c/60)));return`0 */${d} * * *`}},51875:(a,b,c)=>{c.d(b,{A1:()=>k,Je:()=>i,Jl:()=>j,qq:()=>f,vV:()=>g});var d=c(55511);function e(a){return JSON.stringify(function a(b){if(Array.isArray(b))return b.map(a);if(null!==b&&"object"==typeof b){let c=Object.entries(b).sort(([a],[b])=>a<b?-1:+(a>b)),d={};for(let[b,e]of c)d[b]=a(e);return d}return b}(a))}function f(a){return(0,d.createHash)("sha256").update(e(a)??"undefined").digest("hex")}async function g(a){let{status:b,pendingState:c,priorFailures:d,saveState:e}=a;if("completed"===b)return await e({...c,...d>0?{pendingFailures:0}:{}}),{giveUpError:null};if("skipped"===b)return{giveUpError:null};let f=d+1;return f>=3?(await e({...c,pendingFailures:0}),{giveUpError:`Detected a change but the flow failed to process it 3\xd7 — skipping it to avoid a loop`}):(await e({pendingFailures:f}),{giveUpError:null})}function h(a,b){if(!b)return a;let c=a;for(let a of b.split(".")){if(null==c||"object"!=typeof c)return;c=c[a]}return c}function i(a){let b=e(a)??"";return b.length<=8192?a:{truncated:!0,note:`Result too large to include fully (${b.length} chars); this is a preview.`,preview:b.slice(0,8192)}}function j(a,b){let c=f(a);return b.lastHash?b.lastHash===c?{fire:!1,newState:{}}:{fire:!0,summary:"Tool result changed",context:{result:i(a)},newState:{},pendingState:{lastHash:c}}:{fire:!1,newState:{lastHash:c}}}function k(a,b,c,d){let e=h(a,b);if(!Array.isArray(e))return{fire:!1,newState:{},error:`"${b||"(root)"}" did not resolve to a list in the tool result`};let g=e.map(a=>{let b=h(a,c);return{id:null==b||"object"==typeof b?`hash:${f(a)}`:String(b),item:a}}),j=d.seenIds,k=g.map(({id:a})=>a),l=(a,b)=>{let c=[...a??[]],d=new Set(c);for(let a of b)d.has(a)||(d.add(a),c.push(a));return c.slice(-1e3)};if(!j)return{fire:!1,newState:{seenIds:l(void 0,k)}};let m=new Set(j),n=g.filter(({id:a})=>!m.has(a));if(0===n.length)return{fire:!1,newState:{}};let o=n.slice(0,50);return{fire:!0,summary:1===n.length?"1 new item":`${n.length} new items`,context:{newItems:i(o.map(({item:a})=>a)),...n.length>50?{omitted:n.length-50}:{}},newState:{},pendingState:{seenIds:l(j,o.map(({id:a})=>a))}}}},52189:(a,b,c)=>{c.d(b,{O9:()=>e,Z9:()=>f,hk:()=>g,wv:()=>h});var d=c(73736);function e(a,b){try{let c=new d.l4(a,{timezone:b,paused:!0});return c.nextRun(),c.stop(),{valid:!0}}catch(a){return{valid:!1,error:a instanceof Error?a.message:"Invalid cron pattern"}}}function f(a,b,c){let e=new d.l4(a,{timezone:b,paused:!0});try{return e.nextRuns(c).map(a=>a.toISOString())}finally{e.stop()}}function g(a,b){let c=new d.l4(a.cron,{timezone:a.timezone,paused:!0});try{let a=c.nextRun(new Date(b));return null!==a&&a.getTime()<=Date.now()}finally{c.stop()}}function h(a,b){let c=new d.l4(a.cron,{timezone:a.timezone,unref:!0},b);return{dispose:()=>c.stop(),nextRun:()=>c.nextRun()?.toISOString()??null}}},56793:(a,b,c)=>{c.d(b,{eh:()=>g,ru:()=>e});let d=(0,c(50846).h)("backend/services/scheduler/flowRunEventBus");function e(a){return"signal"===a.kind}class f{publish(a){if(0===this.listeners.size)return;let b=e(a)?`signal topic=${a.topic} emitter=${a.emitterFlowId}`:`flow=${a.flowId} status=${a.status}`;for(let c of(d.debug(`Publishing flow event: ${b} firedBy=${a.firedBy} depth=${a.chainDepth} listeners=${this.listeners.size}`),[...this.listeners]))try{c(a)}catch(a){d.warn("A flow-run event listener threw:",a)}}subscribe(a){return this.listeners.add(a),()=>{this.listeners.delete(a)}}get listenerCount(){return this.listeners.size}constructor(){this.listeners=new Set}}function g(){return global.__flujo_flow_run_event_bus||(global.__flujo_flow_run_event_bus=new f),global.__flujo_flow_run_event_bus}},59911:(a,b,c)=>{c.d(b,{Hy:()=>i,Sw:()=>h,s1:()=>j,tl:()=>k,xC:()=>l});var d=c(92372);let e=(0,c(50846).h)("backend/services/scheduler/runHistory"),f=a=>`planned-execution-runs/${a}`,g=new Map;async function h(a){try{return await (0,d.YM)(f(a),[])}catch(b){return e.error(`Failed to load run history for ${a}:`,b),[]}}async function i(a,b){let c=(g.get(a)??Promise.resolve()).catch(()=>{}).then(async()=>{let c=await h(a);c.push(b);let e=c.slice(-100);await (0,d.VH)(f(a),e)});g.set(a,c);try{await c}finally{g.get(a)===c&&g.delete(a)}}async function j(a,b,c){let e=g.get(a)??Promise.resolve(),i=null,j=e.catch(()=>{}).then(async()=>{let e=await h(a),g=e.findIndex(a=>a.runId===b);if(g<0){i=null;return}e[g]={...e[g],...c,runId:b},i=e[g],await (0,d.VH)(f(a),e)});g.set(a,j);try{await j}finally{g.get(a)===j&&g.delete(a)}return i}async function k(a){let b=await h(a);return b.length>0?b[b.length-1]:null}async function l(a){await (0,d.N2)(f(a))}}};
@@ -0,0 +1 @@
1
+ "use strict";exports.id=5067,exports.ids=[5067],exports.modules={26961:(a,b,c)=>{c.d(b,{ai:()=>f});var d=c(89901),e=c(10522);function f(a){return d.qG(e.rS,a)}},68780:(a,b,c)=>{c.d(b,{$9:()=>bE,Cs:()=>bP,EV:()=>j,FP:()=>a9,FT:()=>a6,GU:()=>bM,HM:()=>aZ,Iu:()=>i,K1:()=>bn,LW:()=>F,Mg:()=>ah,Nh:()=>bR,O$:()=>aC,O4:()=>d,OI:()=>az,OR:()=>G,PC:()=>h,Ql:()=>ak,R6:()=>aE,Rk:()=>X,Sc:()=>al,Sq:()=>J,TF:()=>a4,TI:()=>bo,WQ:()=>bO,WT:()=>a3,Yu:()=>aO,ZC:()=>Y,_r:()=>ab,a5:()=>ao,aE:()=>g,bZ:()=>s,b_:()=>bb,br:()=>a$,cv:()=>aA,eK:()=>V,fH:()=>a7,gH:()=>aq,gW:()=>a2,gd:()=>ap,hh:()=>aG,ig:()=>D,ki:()=>aj,lg:()=>B,n_:()=>bH,oQ:()=>am,rk:()=>U,s:()=>aB,tC:()=>$,u9:()=>bm,ve:()=>aF,vo:()=>z,wR:()=>H,wU:()=>Z,xI:()=>a8,zR:()=>an});var d,e=c(10522),f=c(92139);let g="2025-11-25",h="2025-03-26",i=[g,"2025-06-18","2025-03-26","2024-11-05","2024-10-07"],j="io.modelcontextprotocol/related-task",k=e.Ie(a=>null!==a&&("object"==typeof a||"function"==typeof a)),l=e.KC([e.Yj(),e.ai().int()]),m=e.Yj();e._H({ttl:e.ai().optional(),pollInterval:e.ai().optional()});let n=e.Ik({ttl:e.ai().optional()}),o=e.Ik({taskId:e.Yj()}),p=e._H({progressToken:l.optional(),[j]:o.optional()}),q=e.Ik({_meta:p.optional()}),r=q.extend({task:n.optional()}),s=a=>r.safeParse(a).success,t=e.Ik({method:e.Yj(),params:q.loose().optional()}),u=e.Ik({_meta:p.optional()}),v=e.Ik({method:e.Yj(),params:u.loose().optional()}),w=e._H({_meta:p.optional()}),x=e.KC([e.Yj(),e.ai().int()]),y=e.Ik({jsonrpc:e.eu("2.0"),id:x,...t.shape}).strict(),z=a=>y.safeParse(a).success,A=e.Ik({jsonrpc:e.eu("2.0"),...v.shape}).strict(),B=a=>A.safeParse(a).success,C=e.Ik({jsonrpc:e.eu("2.0"),id:x,result:w}).strict(),D=a=>C.safeParse(a).success;!function(a){a[a.ConnectionClosed=-32e3]="ConnectionClosed",a[a.RequestTimeout=-32001]="RequestTimeout",a[a.ParseError=-32700]="ParseError",a[a.InvalidRequest=-32600]="InvalidRequest",a[a.MethodNotFound=-32601]="MethodNotFound",a[a.InvalidParams=-32602]="InvalidParams",a[a.InternalError=-32603]="InternalError",a[a.UrlElicitationRequired=-32042]="UrlElicitationRequired"}(d||(d={}));let E=e.Ik({jsonrpc:e.eu("2.0"),id:x.optional(),error:e.Ik({code:e.ai().int(),message:e.Yj(),data:e.L5().optional()})}).strict(),F=a=>E.safeParse(a).success,G=e.KC([y,A,C,E]);e.KC([C,E]);let H=w.strict(),I=u.extend({requestId:x.optional(),reason:e.Yj().optional()}),J=v.extend({method:e.eu("notifications/cancelled"),params:I}),K=e.Ik({src:e.Yj(),mimeType:e.Yj().optional(),sizes:e.YO(e.Yj()).optional(),theme:e.k5(["light","dark"]).optional()}),L=e.Ik({icons:e.YO(K).optional()}),M=e.Ik({name:e.Yj(),title:e.Yj().optional()}),N=M.extend({...M.shape,...L.shape,version:e.Yj(),websiteUrl:e.Yj().optional(),description:e.Yj().optional()}),O=e.E$(e.Ik({applyDefaults:e.zM().optional()}),e.g1(e.Yj(),e.L5())),P=e.vk(a=>a&&"object"==typeof a&&!Array.isArray(a)&&0===Object.keys(a).length?{form:{}}:a,e.E$(e.Ik({form:O.optional(),url:k.optional()}),e.g1(e.Yj(),e.L5()).optional())),Q=e._H({list:k.optional(),cancel:k.optional(),requests:e._H({sampling:e._H({createMessage:k.optional()}).optional(),elicitation:e._H({create:k.optional()}).optional()}).optional()}),R=e._H({list:k.optional(),cancel:k.optional(),requests:e._H({tools:e._H({call:k.optional()}).optional()}).optional()}),S=e.Ik({experimental:e.g1(e.Yj(),k).optional(),sampling:e.Ik({context:k.optional(),tools:k.optional()}).optional(),elicitation:P.optional(),roots:e.Ik({listChanged:e.zM().optional()}).optional(),tasks:Q.optional(),extensions:e.g1(e.Yj(),k).optional()}),T=q.extend({protocolVersion:e.Yj(),capabilities:S,clientInfo:N}),U=t.extend({method:e.eu("initialize"),params:T}),V=a=>U.safeParse(a).success,W=e.Ik({experimental:e.g1(e.Yj(),k).optional(),logging:k.optional(),completions:k.optional(),prompts:e.Ik({listChanged:e.zM().optional()}).optional(),resources:e.Ik({subscribe:e.zM().optional(),listChanged:e.zM().optional()}).optional(),tools:e.Ik({listChanged:e.zM().optional()}).optional(),tasks:R.optional(),extensions:e.g1(e.Yj(),k).optional()}),X=w.extend({protocolVersion:e.Yj(),capabilities:W,serverInfo:N,instructions:e.Yj().optional()}),Y=v.extend({method:e.eu("notifications/initialized"),params:u.optional()}),Z=a=>Y.safeParse(a).success,$=t.extend({method:e.eu("ping"),params:q.optional()}),_=e.Ik({progress:e.ai(),total:e.lq(e.ai()),message:e.lq(e.Yj())}),aa=e.Ik({...u.shape,..._.shape,progressToken:l}),ab=v.extend({method:e.eu("notifications/progress"),params:aa}),ac=q.extend({cursor:m.optional()}),ad=t.extend({params:ac.optional()}),ae=w.extend({nextCursor:m.optional()}),af=e.k5(["working","input_required","completed","failed","cancelled"]),ag=e.Ik({taskId:e.Yj(),status:af,ttl:e.KC([e.ai(),e.ch()]),createdAt:e.Yj(),lastUpdatedAt:e.Yj(),pollInterval:e.lq(e.ai()),statusMessage:e.lq(e.Yj())}),ah=w.extend({task:ag}),ai=u.merge(ag),aj=v.extend({method:e.eu("notifications/tasks/status"),params:ai}),ak=t.extend({method:e.eu("tasks/get"),params:q.extend({taskId:e.Yj()})}),al=w.merge(ag),am=t.extend({method:e.eu("tasks/result"),params:q.extend({taskId:e.Yj()})});w.loose();let an=ad.extend({method:e.eu("tasks/list")}),ao=ae.extend({tasks:e.YO(ag)}),ap=t.extend({method:e.eu("tasks/cancel"),params:q.extend({taskId:e.Yj()})}),aq=w.merge(ag),ar=e.Ik({uri:e.Yj(),mimeType:e.lq(e.Yj()),_meta:e.g1(e.Yj(),e.L5()).optional()}),as=ar.extend({text:e.Yj()}),at=e.Yj().refine(a=>{try{return atob(a),!0}catch{return!1}},{message:"Invalid Base64 string"}),au=ar.extend({blob:at}),av=e.k5(["user","assistant"]),aw=e.Ik({audience:e.YO(av).optional(),priority:e.ai().min(0).max(1).optional(),lastModified:f.w$({offset:!0}).optional()}),ax=e.Ik({...M.shape,...L.shape,uri:e.Yj(),description:e.lq(e.Yj()),mimeType:e.lq(e.Yj()),size:e.lq(e.ai()),annotations:aw.optional(),_meta:e.lq(e._H({}))}),ay=e.Ik({...M.shape,...L.shape,uriTemplate:e.Yj(),description:e.lq(e.Yj()),mimeType:e.lq(e.Yj()),annotations:aw.optional(),_meta:e.lq(e._H({}))}),az=ad.extend({method:e.eu("resources/list")}),aA=ae.extend({resources:e.YO(ax)}),aB=ad.extend({method:e.eu("resources/templates/list")}),aC=ae.extend({resourceTemplates:e.YO(ay)}),aD=q.extend({uri:e.Yj()}),aE=t.extend({method:e.eu("resources/read"),params:aD}),aF=w.extend({contents:e.YO(e.KC([as,au]))}),aG=v.extend({method:e.eu("notifications/resources/list_changed"),params:u.optional()}),aH=t.extend({method:e.eu("resources/subscribe"),params:aD}),aI=t.extend({method:e.eu("resources/unsubscribe"),params:aD}),aJ=u.extend({uri:e.Yj()}),aK=v.extend({method:e.eu("notifications/resources/updated"),params:aJ}),aL=e.Ik({name:e.Yj(),description:e.lq(e.Yj()),required:e.lq(e.zM())}),aM=e.Ik({...M.shape,...L.shape,description:e.lq(e.Yj()),arguments:e.lq(e.YO(aL)),_meta:e.lq(e._H({}))}),aN=ad.extend({method:e.eu("prompts/list")}),aO=ae.extend({prompts:e.YO(aM)}),aP=q.extend({name:e.Yj(),arguments:e.g1(e.Yj(),e.Yj()).optional()}),aQ=t.extend({method:e.eu("prompts/get"),params:aP}),aR=e.Ik({type:e.eu("text"),text:e.Yj(),annotations:aw.optional(),_meta:e.g1(e.Yj(),e.L5()).optional()}),aS=e.Ik({type:e.eu("image"),data:at,mimeType:e.Yj(),annotations:aw.optional(),_meta:e.g1(e.Yj(),e.L5()).optional()}),aT=e.Ik({type:e.eu("audio"),data:at,mimeType:e.Yj(),annotations:aw.optional(),_meta:e.g1(e.Yj(),e.L5()).optional()}),aU=e.Ik({type:e.eu("tool_use"),name:e.Yj(),id:e.Yj(),input:e.g1(e.Yj(),e.L5()),_meta:e.g1(e.Yj(),e.L5()).optional()}),aV=e.Ik({type:e.eu("resource"),resource:e.KC([as,au]),annotations:aw.optional(),_meta:e.g1(e.Yj(),e.L5()).optional()}),aW=ax.extend({type:e.eu("resource_link")}),aX=e.KC([aR,aS,aT,aW,aV]),aY=e.Ik({role:av,content:aX}),aZ=w.extend({description:e.Yj().optional(),messages:e.YO(aY)}),a$=v.extend({method:e.eu("notifications/prompts/list_changed"),params:u.optional()}),a_=e.Ik({title:e.Yj().optional(),readOnlyHint:e.zM().optional(),destructiveHint:e.zM().optional(),idempotentHint:e.zM().optional(),openWorldHint:e.zM().optional()}),a0=e.Ik({taskSupport:e.k5(["required","optional","forbidden"]).optional()}),a1=e.Ik({...M.shape,...L.shape,description:e.Yj().optional(),inputSchema:e.Ik({type:e.eu("object"),properties:e.g1(e.Yj(),k).optional(),required:e.YO(e.Yj()).optional()}).catchall(e.L5()),outputSchema:e.Ik({type:e.eu("object"),properties:e.g1(e.Yj(),k).optional(),required:e.YO(e.Yj()).optional()}).catchall(e.L5()).optional(),annotations:a_.optional(),execution:a0.optional(),_meta:e.g1(e.Yj(),e.L5()).optional()}),a2=ad.extend({method:e.eu("tools/list")}),a3=ae.extend({tools:e.YO(a1)}),a4=w.extend({content:e.YO(aX).default([]),structuredContent:e.g1(e.Yj(),e.L5()).optional(),isError:e.zM().optional()});a4.or(w.extend({toolResult:e.L5()}));let a5=r.extend({name:e.Yj(),arguments:e.g1(e.Yj(),e.L5()).optional()}),a6=t.extend({method:e.eu("tools/call"),params:a5}),a7=v.extend({method:e.eu("notifications/tools/list_changed"),params:u.optional()}),a8=e.Ik({autoRefresh:e.zM().default(!0),debounceMs:e.ai().int().nonnegative().default(300)}),a9=e.k5(["debug","info","notice","warning","error","critical","alert","emergency"]),ba=q.extend({level:a9}),bb=t.extend({method:e.eu("logging/setLevel"),params:ba}),bc=u.extend({level:a9,logger:e.Yj().optional(),data:e.L5()}),bd=v.extend({method:e.eu("notifications/message"),params:bc}),be=e.Ik({name:e.Yj().optional()}),bf=e.Ik({hints:e.YO(be).optional(),costPriority:e.ai().min(0).max(1).optional(),speedPriority:e.ai().min(0).max(1).optional(),intelligencePriority:e.ai().min(0).max(1).optional()}),bg=e.Ik({mode:e.k5(["auto","required","none"]).optional()}),bh=e.Ik({type:e.eu("tool_result"),toolUseId:e.Yj().describe("The unique identifier for the corresponding tool call."),content:e.YO(aX).default([]),structuredContent:e.Ik({}).loose().optional(),isError:e.zM().optional(),_meta:e.g1(e.Yj(),e.L5()).optional()}),bi=e.gM("type",[aR,aS,aT]),bj=e.gM("type",[aR,aS,aT,aU,bh]),bk=e.Ik({role:av,content:e.KC([bj,e.YO(bj)]),_meta:e.g1(e.Yj(),e.L5()).optional()}),bl=r.extend({messages:e.YO(bk),modelPreferences:bf.optional(),systemPrompt:e.Yj().optional(),includeContext:e.k5(["none","thisServer","allServers"]).optional(),temperature:e.ai().optional(),maxTokens:e.ai().int(),stopSequences:e.YO(e.Yj()).optional(),metadata:k.optional(),tools:e.YO(a1).optional(),toolChoice:bg.optional()}),bm=t.extend({method:e.eu("sampling/createMessage"),params:bl}),bn=w.extend({model:e.Yj(),stopReason:e.lq(e.k5(["endTurn","stopSequence","maxTokens"]).or(e.Yj())),role:av,content:bi}),bo=w.extend({model:e.Yj(),stopReason:e.lq(e.k5(["endTurn","stopSequence","maxTokens","toolUse"]).or(e.Yj())),role:av,content:e.KC([bj,e.YO(bj)])}),bp=e.Ik({type:e.eu("boolean"),title:e.Yj().optional(),description:e.Yj().optional(),default:e.zM().optional()}),bq=e.Ik({type:e.eu("string"),title:e.Yj().optional(),description:e.Yj().optional(),minLength:e.ai().optional(),maxLength:e.ai().optional(),format:e.k5(["email","uri","date","date-time"]).optional(),default:e.Yj().optional()}),br=e.Ik({type:e.k5(["number","integer"]),title:e.Yj().optional(),description:e.Yj().optional(),minimum:e.ai().optional(),maximum:e.ai().optional(),default:e.ai().optional()}),bs=e.Ik({type:e.eu("string"),title:e.Yj().optional(),description:e.Yj().optional(),enum:e.YO(e.Yj()),default:e.Yj().optional()}),bt=e.Ik({type:e.eu("string"),title:e.Yj().optional(),description:e.Yj().optional(),oneOf:e.YO(e.Ik({const:e.Yj(),title:e.Yj()})),default:e.Yj().optional()}),bu=e.Ik({type:e.eu("string"),title:e.Yj().optional(),description:e.Yj().optional(),enum:e.YO(e.Yj()),enumNames:e.YO(e.Yj()).optional(),default:e.Yj().optional()}),bv=e.KC([bs,bt]),bw=e.Ik({type:e.eu("array"),title:e.Yj().optional(),description:e.Yj().optional(),minItems:e.ai().optional(),maxItems:e.ai().optional(),items:e.Ik({type:e.eu("string"),enum:e.YO(e.Yj())}),default:e.YO(e.Yj()).optional()}),bx=e.Ik({type:e.eu("array"),title:e.Yj().optional(),description:e.Yj().optional(),minItems:e.ai().optional(),maxItems:e.ai().optional(),items:e.Ik({anyOf:e.YO(e.Ik({const:e.Yj(),title:e.Yj()}))}),default:e.YO(e.Yj()).optional()}),by=e.KC([bw,bx]),bz=e.KC([bu,bv,by]),bA=e.KC([bz,bp,bq,br]),bB=r.extend({mode:e.eu("form").optional(),message:e.Yj(),requestedSchema:e.Ik({type:e.eu("object"),properties:e.g1(e.Yj(),bA),required:e.YO(e.Yj()).optional()})}),bC=r.extend({mode:e.eu("url"),message:e.Yj(),elicitationId:e.Yj(),url:e.Yj().url()}),bD=e.KC([bB,bC]),bE=t.extend({method:e.eu("elicitation/create"),params:bD}),bF=u.extend({elicitationId:e.Yj()}),bG=v.extend({method:e.eu("notifications/elicitation/complete"),params:bF}),bH=w.extend({action:e.k5(["accept","decline","cancel"]),content:e.vk(a=>null===a?void 0:a,e.g1(e.Yj(),e.KC([e.Yj(),e.ai(),e.zM(),e.YO(e.Yj())])).optional())}),bI=e.Ik({type:e.eu("ref/resource"),uri:e.Yj()}),bJ=e.Ik({type:e.eu("ref/prompt"),name:e.Yj()}),bK=q.extend({ref:e.KC([bJ,bI]),argument:e.Ik({name:e.Yj(),value:e.Yj()}),context:e.Ik({arguments:e.g1(e.Yj(),e.Yj()).optional()}).optional()}),bL=t.extend({method:e.eu("completion/complete"),params:bK}),bM=w.extend({completion:e._H({values:e.YO(e.Yj()).max(100),total:e.lq(e.ai().int()),hasMore:e.lq(e.zM())})}),bN=e.Ik({uri:e.Yj().startsWith("file://"),name:e.Yj().optional(),_meta:e.g1(e.Yj(),e.L5()).optional()}),bO=t.extend({method:e.eu("roots/list"),params:q.optional()}),bP=w.extend({roots:e.YO(bN)}),bQ=v.extend({method:e.eu("notifications/roots/list_changed"),params:u.optional()});e.KC([$,U,bL,bb,aQ,aN,az,aB,aE,aH,aI,a6,a2,ak,am,an,ap]),e.KC([J,ab,Y,bQ,aj]),e.KC([H,bn,bo,bH,bP,al,ao,ah]),e.KC([$,bm,bE,bO,ak,am,an,ap]),e.KC([J,ab,bd,aK,aG,a7,a$,aj,bG]),e.KC([H,X,bM,aZ,aO,aA,aC,aF,a4,a3,al,ao,ah]);class bR extends Error{constructor(a,b,c){super(`MCP error ${a}: ${b}`),this.code=a,this.data=c,this.name="McpError"}static fromError(a,b,c){return a===d.UrlElicitationRequired&&c&&c.elicitations?new bS(c.elicitations,b):new bR(a,b,c)}}class bS extends bR{constructor(a,b=`URL elicitation${a.length>1?"s":""} required`){super(d.UrlElicitationRequired,b,{elicitations:a})}get elicitations(){return this.data?.elicitations??[]}}},83578:(a,b,c)=>{var d;c.d(b,{eq:()=>e});let e={invalid_type:"invalid_type",too_big:"too_big",too_small:"too_small",invalid_format:"invalid_format",not_multiple_of:"not_multiple_of",unrecognized_keys:"unrecognized_keys",invalid_union:"invalid_union",invalid_key:"invalid_key",invalid_element:"invalid_element",invalid_value:"invalid_value",custom:"custom"};d||(d={})},95067:(a,b,c)=>{c.d(b,{D_:()=>N,j2:()=>R,eH:()=>U});var d=c(96271),e=c(68780),f=c(10522),g=c(83578),h=c(30902),i=c(26961);let j=f.OZ().superRefine((a,b)=>{if(!URL.canParse(a))return b.addIssue({code:g.eq.custom,message:"URL must be parseable",fatal:!0}),h.tm}).refine(a=>{let b=new URL(a);return"javascript:"!==b.protocol&&"data:"!==b.protocol&&"vbscript:"!==b.protocol},{message:"URL cannot use javascript:, data:, or vbscript: scheme"}),k=f._H({resource:f.Yj().url(),authorization_servers:f.YO(j).optional(),jwks_uri:f.Yj().url().optional(),scopes_supported:f.YO(f.Yj()).optional(),bearer_methods_supported:f.YO(f.Yj()).optional(),resource_signing_alg_values_supported:f.YO(f.Yj()).optional(),resource_name:f.Yj().optional(),resource_documentation:f.Yj().optional(),resource_policy_uri:f.Yj().url().optional(),resource_tos_uri:f.Yj().url().optional(),tls_client_certificate_bound_access_tokens:f.zM().optional(),authorization_details_types_supported:f.YO(f.Yj()).optional(),dpop_signing_alg_values_supported:f.YO(f.Yj()).optional(),dpop_bound_access_tokens_required:f.zM().optional()}),l=f._H({issuer:f.Yj(),authorization_endpoint:j,token_endpoint:j,registration_endpoint:j.optional(),scopes_supported:f.YO(f.Yj()).optional(),response_types_supported:f.YO(f.Yj()),response_modes_supported:f.YO(f.Yj()).optional(),grant_types_supported:f.YO(f.Yj()).optional(),token_endpoint_auth_methods_supported:f.YO(f.Yj()).optional(),token_endpoint_auth_signing_alg_values_supported:f.YO(f.Yj()).optional(),service_documentation:j.optional(),revocation_endpoint:j.optional(),revocation_endpoint_auth_methods_supported:f.YO(f.Yj()).optional(),revocation_endpoint_auth_signing_alg_values_supported:f.YO(f.Yj()).optional(),introspection_endpoint:f.Yj().optional(),introspection_endpoint_auth_methods_supported:f.YO(f.Yj()).optional(),introspection_endpoint_auth_signing_alg_values_supported:f.YO(f.Yj()).optional(),code_challenge_methods_supported:f.YO(f.Yj()).optional(),client_id_metadata_document_supported:f.zM().optional()}),m=f._H({issuer:f.Yj(),authorization_endpoint:j,token_endpoint:j,userinfo_endpoint:j.optional(),jwks_uri:j,registration_endpoint:j.optional(),scopes_supported:f.YO(f.Yj()).optional(),response_types_supported:f.YO(f.Yj()),response_modes_supported:f.YO(f.Yj()).optional(),grant_types_supported:f.YO(f.Yj()).optional(),acr_values_supported:f.YO(f.Yj()).optional(),subject_types_supported:f.YO(f.Yj()),id_token_signing_alg_values_supported:f.YO(f.Yj()),id_token_encryption_alg_values_supported:f.YO(f.Yj()).optional(),id_token_encryption_enc_values_supported:f.YO(f.Yj()).optional(),userinfo_signing_alg_values_supported:f.YO(f.Yj()).optional(),userinfo_encryption_alg_values_supported:f.YO(f.Yj()).optional(),userinfo_encryption_enc_values_supported:f.YO(f.Yj()).optional(),request_object_signing_alg_values_supported:f.YO(f.Yj()).optional(),request_object_encryption_alg_values_supported:f.YO(f.Yj()).optional(),request_object_encryption_enc_values_supported:f.YO(f.Yj()).optional(),token_endpoint_auth_methods_supported:f.YO(f.Yj()).optional(),token_endpoint_auth_signing_alg_values_supported:f.YO(f.Yj()).optional(),display_values_supported:f.YO(f.Yj()).optional(),claim_types_supported:f.YO(f.Yj()).optional(),claims_supported:f.YO(f.Yj()).optional(),service_documentation:f.Yj().optional(),claims_locales_supported:f.YO(f.Yj()).optional(),ui_locales_supported:f.YO(f.Yj()).optional(),claims_parameter_supported:f.zM().optional(),request_parameter_supported:f.zM().optional(),request_uri_parameter_supported:f.zM().optional(),require_request_uri_registration:f.zM().optional(),op_policy_uri:j.optional(),op_tos_uri:j.optional(),client_id_metadata_document_supported:f.zM().optional()}),n=f.Ik({...m.shape,...l.pick({code_challenge_methods_supported:!0}).shape}),o=f.Ik({access_token:f.Yj(),id_token:f.Yj().optional(),token_type:f.Yj(),expires_in:i.ai().optional(),scope:f.Yj().optional(),refresh_token:f.Yj().optional()}).strip(),p=f.Ik({error:f.Yj(),error_description:f.Yj().optional(),error_uri:f.Yj().optional()}),q=j.optional().or(f.eu("").transform(()=>void 0)),r=f.Ik({redirect_uris:f.YO(j),token_endpoint_auth_method:f.Yj().optional(),grant_types:f.YO(f.Yj()).optional(),response_types:f.YO(f.Yj()).optional(),client_name:f.Yj().optional(),client_uri:j.optional(),logo_uri:q,scope:f.Yj().optional(),contacts:f.YO(f.Yj()).optional(),tos_uri:q,policy_uri:f.Yj().optional(),jwks_uri:j.optional(),jwks:f.bz().optional(),software_id:f.Yj().optional(),software_version:f.Yj().optional(),software_statement:f.Yj().optional()}).strip(),s=f.Ik({client_id:f.Yj(),client_secret:f.Yj().optional(),client_id_issued_at:f.ai().optional(),client_secret_expires_at:f.ai().optional()}).strip(),t=r.merge(s);f.Ik({error:f.Yj(),error_description:f.Yj().optional()}).strip(),f.Ik({token:f.Yj(),token_type_hint:f.Yj().optional()}).strip();class u extends Error{constructor(a,b){super(a),this.errorUri=b,this.name=this.constructor.name}toResponseObject(){let a={error:this.errorCode,error_description:this.message};return this.errorUri&&(a.error_uri=this.errorUri),a}get errorCode(){return this.constructor.errorCode}}class v extends u{}v.errorCode="invalid_request";class w extends u{}w.errorCode="invalid_client";class x extends u{}x.errorCode="invalid_grant";class y extends u{}y.errorCode="unauthorized_client";class z extends u{}z.errorCode="unsupported_grant_type";class A extends u{}A.errorCode="invalid_scope";class B extends u{}B.errorCode="access_denied";class C extends u{}C.errorCode="server_error";class D extends u{}D.errorCode="temporarily_unavailable";class E extends u{}E.errorCode="unsupported_response_type";class F extends u{}F.errorCode="unsupported_token_type";class G extends u{}G.errorCode="invalid_token";class H extends u{}H.errorCode="method_not_allowed";class I extends u{}I.errorCode="too_many_requests";class J extends u{}J.errorCode="invalid_client_metadata";class K extends u{}K.errorCode="insufficient_scope";class L extends u{}L.errorCode="invalid_target";let M={[v.errorCode]:v,[w.errorCode]:w,[x.errorCode]:x,[y.errorCode]:y,[z.errorCode]:z,[A.errorCode]:A,[B.errorCode]:B,[C.errorCode]:C,[D.errorCode]:D,[E.errorCode]:E,[F.errorCode]:F,[G.errorCode]:G,[H.errorCode]:H,[I.errorCode]:I,[J.errorCode]:J,[K.errorCode]:K,[L.errorCode]:L};class N extends Error{constructor(a){super(a??"Unauthorized")}}let O="code",P="S256";async function Q(a){let b=a instanceof Response?a.status:void 0,c=a instanceof Response?await a.text():a;try{let{error:a,error_description:b,error_uri:d}=p.parse(JSON.parse(c));return new(M[a]||C)(b||"",d)}catch(a){return new C(`${b?`HTTP ${b}: `:""}Invalid OAuth error response: ${a}. Raw body: ${c}`)}}async function R(a,b){try{return await S(a,b)}catch(c){if(c instanceof w||c instanceof y)return await a.invalidateCredentials?.("all"),await S(a,b);if(c instanceof x)return await a.invalidateCredentials?.("tokens"),await S(a,b);throw c}}async function S(a,{serverUrl:b,authorizationCode:c,scope:d,resourceMetadataUrl:e,fetchFn:f}){let g,h,i,j=await a.discoveryState?.(),k=e;if(!k&&j?.resourceMetadataUrl&&(k=new URL(j.resourceMetadataUrl)),j?.authorizationServerUrl){if(h=j.authorizationServerUrl,g=j.resourceMetadata,i=j.authorizationServerMetadata??await $(h,{fetchFn:f}),!g)try{g=await W(b,{resourceMetadataUrl:k},f)}catch{}(i!==j.authorizationServerMetadata||g!==j.resourceMetadata)&&await a.saveDiscoveryState?.({authorizationServerUrl:String(h),resourceMetadataUrl:k?.toString(),resourceMetadata:g,authorizationServerMetadata:i})}else{let c=await _(b,{resourceMetadataUrl:k,fetchFn:f});h=c.authorizationServerUrl,i=c.authorizationServerMetadata,g=c.resourceMetadata,await a.saveDiscoveryState?.({authorizationServerUrl:String(h),resourceMetadataUrl:k?.toString(),resourceMetadata:g,authorizationServerMetadata:i})}let l=await T(b,a,g),m=d||g?.scopes_supported?.join(" ")||a.clientMetadata.scope,n=await Promise.resolve(a.clientInformation());if(!n){if(void 0!==c)throw Error("Existing OAuth client information is required when exchanging an authorization code");let b=i?.client_id_metadata_document_supported===!0,d=a.clientMetadataUrl;if(d&&!function(a){if(!a)return!1;try{let b=new URL(a);return"https:"===b.protocol&&"/"!==b.pathname}catch{return!1}}(d))throw new J(`clientMetadataUrl must be a valid HTTPS URL with a non-root pathname, got: ${d}`);if(b&&d)n={client_id:d},await a.saveClientInformation?.(n);else{if(!a.saveClientInformation)throw Error("OAuth client information must be saveable for dynamic registration");let b=await ae(h,{metadata:i,clientMetadata:a.clientMetadata,scope:m,fetchFn:f});await a.saveClientInformation(b),n=b}}let o=!a.redirectUrl;if(void 0!==c||o){let b=await ad(a,h,{metadata:i,resource:l,authorizationCode:c,fetchFn:f});return await a.saveTokens(b),"AUTHORIZED"}let p=await a.tokens();if(p?.refresh_token)try{let b=await ac(h,{metadata:i,clientInformation:n,refreshToken:p.refresh_token,resource:l,addClientAuthentication:a.addClientAuthentication,fetchFn:f});return await a.saveTokens(b),"AUTHORIZED"}catch(a){if(!(a instanceof u)||a instanceof C);else throw a}let q=a.state?await a.state():void 0,{authorizationUrl:r,codeVerifier:s}=await aa(h,{metadata:i,clientInformation:n,state:q,redirectUrl:a.redirectUrl,scope:m,resource:l});return await a.saveCodeVerifier(s),await a.redirectToAuthorization(r),"REDIRECT"}async function T(a,b,c){let d=function(a){let b=new URL("string"==typeof a?a:a.href);return b.hash="",b}(a);if(b.validateResourceURL)return await b.validateResourceURL(d,c?.resource);if(c){if(!function({requestedResource:a,configuredResource:b}){let c=new URL("string"==typeof a?a:a.href),d=new URL("string"==typeof b?b:b.href);if(c.origin!==d.origin||c.pathname.length<d.pathname.length)return!1;let e=c.pathname.endsWith("/")?c.pathname:c.pathname+"/",f=d.pathname.endsWith("/")?d.pathname:d.pathname+"/";return e.startsWith(f)}({requestedResource:d,configuredResource:c.resource}))throw Error(`Protected resource ${c.resource} does not match expected ${d} (or origin)`);return new URL(c.resource)}}function U(a){let b,c=a.headers.get("WWW-Authenticate");if(!c)return{};let[d,e]=c.split(" ");if("bearer"!==d.toLowerCase()||!e)return{};let f=V(a,"resource_metadata")||void 0;if(f)try{b=new URL(f)}catch{}return{resourceMetadataUrl:b,scope:V(a,"scope")||void 0,error:V(a,"error")||void 0}}function V(a,b){let c=a.headers.get("WWW-Authenticate");if(!c)return null;let d=RegExp(`${b}=(?:"([^"]+)"|([^\\s,]+))`),e=c.match(d);return e?e[1]||e[2]:null}async function W(a,b,c=fetch){let d=await Z(a,"oauth-protected-resource",c,{protocolVersion:b?.protocolVersion,metadataUrl:b?.resourceMetadataUrl});if(!d||404===d.status)throw await d?.body?.cancel(),Error("Resource server does not implement OAuth 2.0 Protected Resource Metadata.");if(!d.ok)throw await d.body?.cancel(),Error(`HTTP ${d.status} trying to load well-known OAuth protected resource metadata.`);return k.parse(await d.json())}async function X(a,b,c=fetch){try{return await c(a,{headers:b})}catch(d){if(d instanceof TypeError)if(b)return X(a,void 0,c);else return;throw d}}async function Y(a,b,c=fetch){return await X(a,{"MCP-Protocol-Version":b},c)}async function Z(a,b,c,d){var f,g;let h,i=new URL(a),j=d?.protocolVersion??e.aE;d?.metadataUrl?h=new URL(d.metadataUrl):(h=new URL(function(a,b="",c={}){return b.endsWith("/")&&(b=b.slice(0,-1)),c.prependPathname?`${b}/.well-known/${a}`:`/.well-known/${a}${b}`}(b,i.pathname),d?.metadataServerUrl??i)).search=i.search;let k=await Y(h,j,c);if(!d?.metadataUrl&&(f=k,g=i.pathname,!f||f.status>=400&&f.status<500&&"/"!==g)){let a=new URL(`/.well-known/${b}`,i);k=await Y(a,j,c)}return k}async function $(a,{fetchFn:b=fetch,protocolVersion:c=e.aE}={}){let d={"MCP-Protocol-Version":c,Accept:"application/json"};for(let{url:c,type:e}of function(a){let b="string"==typeof a?new URL(a):a,c="/"!==b.pathname,d=[];if(!c)return d.push({url:new URL("/.well-known/oauth-authorization-server",b.origin),type:"oauth"}),d.push({url:new URL("/.well-known/openid-configuration",b.origin),type:"oidc"}),d;let e=b.pathname;return e.endsWith("/")&&(e=e.slice(0,-1)),d.push({url:new URL(`/.well-known/oauth-authorization-server${e}`,b.origin),type:"oauth"}),d.push({url:new URL(`/.well-known/openid-configuration${e}`,b.origin),type:"oidc"}),d.push({url:new URL(`${e}/.well-known/openid-configuration`,b.origin),type:"oidc"}),d}(a)){let a=await X(c,d,b);if(a){if(!a.ok){if(await a.body?.cancel(),a.status>=400&&a.status<500)continue;throw Error(`HTTP ${a.status} trying to load ${"oauth"===e?"OAuth":"OpenID provider"} metadata from ${c}`)}if("oauth"===e)return l.parse(await a.json());return n.parse(await a.json())}}}async function _(a,b){let c,d;try{(c=await W(a,{resourceMetadataUrl:b?.resourceMetadataUrl},b?.fetchFn)).authorization_servers&&c.authorization_servers.length>0&&(d=c.authorization_servers[0])}catch{}d||(d=String(new URL("/",a)));let e=await $(d,{fetchFn:b?.fetchFn});return{authorizationServerUrl:d,authorizationServerMetadata:e,resourceMetadata:c}}async function aa(a,{metadata:b,clientInformation:c,redirectUrl:e,scope:f,state:g,resource:h}){let i;if(b){if(i=new URL(b.authorization_endpoint),!b.response_types_supported.includes(O))throw Error(`Incompatible auth server: does not support response type ${O}`);if(b.code_challenge_methods_supported&&!b.code_challenge_methods_supported.includes(P))throw Error(`Incompatible auth server: does not support code challenge method ${P}`)}else i=new URL("/authorize",a);let j=await (0,d.Ay)(),k=j.code_verifier,l=j.code_challenge;return i.searchParams.set("response_type",O),i.searchParams.set("client_id",c.client_id),i.searchParams.set("code_challenge",l),i.searchParams.set("code_challenge_method",P),i.searchParams.set("redirect_uri",String(e)),g&&i.searchParams.set("state",g),f&&i.searchParams.set("scope",f),f?.includes("offline_access")&&i.searchParams.append("prompt","consent"),h&&i.searchParams.set("resource",h.href),{authorizationUrl:i,codeVerifier:k}}async function ab(a,{metadata:b,tokenRequestParams:c,clientInformation:d,addClientAuthentication:e,resource:f,fetchFn:g}){let h=b?.token_endpoint?new URL(b.token_endpoint):new URL("/token",a),i=new Headers({"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"});f&&c.set("resource",f.href),e?await e(i,c,h,b):d&&function(a,b,c,d){let{client_id:e,client_secret:f}=b;switch(a){case"client_secret_basic":var g,h,i,j,k=e,l=f,m=c;if(!l)throw Error("client_secret_basic authentication requires a client_secret");let n=btoa(`${k}:${l}`);m.set("Authorization",`Basic ${n}`);return;case"client_secret_post":g=e,h=f,(i=d).set("client_id",g),h&&i.set("client_secret",h);return;case"none":j=e,d.set("client_id",j);return;default:throw Error(`Unsupported client authentication method: ${a}`)}}(function(a,b){let c=void 0!==a.client_secret;return"token_endpoint_auth_method"in a&&a.token_endpoint_auth_method&&["client_secret_basic","client_secret_post","none"].includes(a.token_endpoint_auth_method)&&(0===b.length||b.includes(a.token_endpoint_auth_method))?a.token_endpoint_auth_method:0===b.length?c?"client_secret_basic":"none":c&&b.includes("client_secret_basic")?"client_secret_basic":c&&b.includes("client_secret_post")?"client_secret_post":b.includes("none")?"none":c?"client_secret_post":"none"}(d,b?.token_endpoint_auth_methods_supported??[]),d,i,c);let j=await (g??fetch)(h,{method:"POST",headers:i,body:c});if(!j.ok)throw await Q(j);return o.parse(await j.json())}async function ac(a,{metadata:b,clientInformation:c,refreshToken:d,resource:e,addClientAuthentication:f,fetchFn:g}){let h=new URLSearchParams({grant_type:"refresh_token",refresh_token:d});return{refresh_token:d,...await ab(a,{metadata:b,tokenRequestParams:h,clientInformation:c,addClientAuthentication:f,resource:e,fetchFn:g})}}async function ad(a,b,{metadata:c,resource:d,authorizationCode:e,fetchFn:f}={}){let g,h=a.clientMetadata.scope;if(a.prepareTokenRequest&&(g=await a.prepareTokenRequest(h)),!g){if(!e)throw Error("Either provider.prepareTokenRequest() or authorizationCode is required");if(!a.redirectUrl)throw Error("redirectUrl is required for authorization_code flow");g=new URLSearchParams({grant_type:"authorization_code",code:e,code_verifier:await a.codeVerifier(),redirect_uri:String(a.redirectUrl)})}return ab(b,{metadata:c,tokenRequestParams:g,clientInformation:await a.clientInformation()??void 0,addClientAuthentication:a.addClientAuthentication,resource:d,fetchFn:f})}async function ae(a,{metadata:b,clientMetadata:c,scope:d,fetchFn:e}){let f;if(b){if(!b.registration_endpoint)throw Error("Incompatible auth server: does not support dynamic client registration");f=new URL(b.registration_endpoint)}else f=new URL("/register",a);let g=await (e??fetch)(f,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...c,...void 0!==d?{scope:d}:{}})});if(!g.ok)throw await Q(g);return t.parse(await g.json())}},96271:(a,b,c)=>{let d;async function e(a){return(await d).getRandomValues(new Uint8Array(a))}async function f(a){let b="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~",c="",d=await e(a);for(let e=0;e<a;e++){let a=d[e]%b.length;c+=b[a]}return c}async function g(a){return await f(a)}async function h(a){return btoa(String.fromCharCode(...new Uint8Array(await (await d).subtle.digest("SHA-256",new TextEncoder().encode(a))))).replace(/\//g,"_").replace(/\+/g,"-").replace(/=/g,"")}async function i(a){if(a||(a=43),a<43||a>128)throw`Expected a length between 43 and 128. Received ${a}.`;let b=await g(a),c=await h(b);return{code_verifier:b,code_challenge:c}}c.d(b,{Ay:()=>i}),d=globalThis.crypto?.webcrypto??globalThis.crypto??Promise.resolve().then(c.t.bind(c,77598,19)).then(a=>a.webcrypto)}};
@@ -1 +1 @@
1
- "use strict";exports.id=5096,exports.ids=[1805,5096],exports.modules={25096:(a,b,c)=>{c.d(b,{C:()=>i});var d=c(50846),e=c(74186),f=c(73456);let g=(0,d.h)("backend/services/mcp/oauth");class h{constructor(a,b){this.config=a,this._redirectUrl=b,this._clientMetadata={redirect_uris:[b],client_name:`FLUJO MCP Client - ${a.name}`,client_uri:"https://github.com/mario-andreschak/FLUJO",grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"client_secret_post",scope:a.oauthScopes?.join(" ")||"read"},g.info(`Created OAuth client provider for ${a.name}`),g.verbose("OAuth client metadata",JSON.stringify(this._clientMetadata))}get redirectUrl(){return this._redirectUrl}get clientMetadata(){return this._clientMetadata}state(){return encodeURIComponent(JSON.stringify({serverName:this.config.name}))}async clientInformation(){if(this.config.oauthClientInformation)return g.debug(`Returning stored client information for ${this.config.name}`),this.config.oauthClientInformation;if(this.config.oauthClientId){let a=this.config.oauthClientSecret?await (0,f.G)(this.config.oauthClientSecret)??void 0:void 0;return g.debug(`Created client information from config for ${this.config.name}`),{client_id:this.config.oauthClientId,client_secret:a}}g.debug(`No client information available for ${this.config.name}`)}async persist(){let a=await (0,e.loadServerConfigs)();if(!Array.isArray(a))return void g.warn(`persist: failed to load server configs for ${this.config.name}, cannot persist OAuth state`);let b=new Map(a.map(a=>[a.name,a]));b.set(this.config.name,this.config);let c=await (0,e.q)(b);c.success||g.warn(`persist: failed to save OAuth state for ${this.config.name}: ${c.error}`)}async invalidateCredentials(a){g.info(`Invalidating OAuth credentials for ${this.config.name} (scope: ${a})`),("all"===a||"tokens"===a)&&(this.config.oauthTokens=void 0),("all"===a||"client"===a)&&(this.config.oauthClientInformation=void 0,this.config.oauthClientMetadata=void 0),("all"===a||"verifier"===a)&&(this.config.oauthCodeVerifier=void 0),await this.persist()}async saveClientInformation(a){g.info(`Saving client information for ${this.config.name}`),g.verbose("Client information to save",JSON.stringify(a)),this.config.oauthClientInformation={client_id:a.client_id,client_secret:a.client_secret,client_id_issued_at:a.client_id_issued_at,client_secret_expires_at:a.client_secret_expires_at},this.config.oauthClientMetadata={redirect_uris:a.redirect_uris,client_name:a.client_name,client_uri:a.client_uri,grant_types:a.grant_types,response_types:a.response_types,token_endpoint_auth_method:a.token_endpoint_auth_method,scope:a.scope,contacts:a.contacts,tos_uri:a.tos_uri,policy_uri:a.policy_uri,jwks_uri:a.jwks_uri,jwks:a.jwks,software_id:a.software_id,software_version:a.software_version},await this.persist(),g.info(`Client information saved for ${this.config.name}`)}async tokens(){if(this.config.oauthTokens){if(g.debug(`Returning stored tokens for ${this.config.name}`),this.config.oauthTokens.expires_in&&this.config.oauthTokens.issued_at){let a=this.config.oauthTokens.issued_at,b=this.config.oauthTokens.expires_in,c=Math.floor(Date.now()/1e3),d=a+b;c>=d?g.info(`Access token for ${this.config.name} has expired (issued: ${a}, expires: ${d}, current: ${c}); SDK will refresh via refresh_token`):g.debug(`Tokens for ${this.config.name} are valid (expires in ${d-c} seconds)`)}return this.config.oauthTokens}g.debug(`No tokens available for ${this.config.name}`)}async saveTokens(a){g.info(`Saving OAuth tokens for ${this.config.name}`),g.verbose("Tokens to save",JSON.stringify({...a,access_token:a.access_token?"[REDACTED]":void 0,refresh_token:a.refresh_token?"[REDACTED]":void 0}));let b={...a,issued_at:Math.floor(Date.now()/1e3)};this.config.oauthTokens=b,await this.persist(),g.info(`OAuth tokens saved for ${this.config.name}`)}async redirectToAuthorization(a){g.info(`Authorization required for ${this.config.name}`),g.info(`Authorization URL: ${a.toString()}`),this.config.authorizationUrl=a.toString();let b=Error(`OAuth authentication required for ${this.config.name}. Please complete the OAuth flow.`);throw b.name="OAuthAuthenticationRequired",b}async saveCodeVerifier(a){g.debug(`Saving code verifier for ${this.config.name}`),this.config.oauthCodeVerifier=a,await this.persist(),g.debug(`Code verifier saved for ${this.config.name}`)}async codeVerifier(){if(!this.config.oauthCodeVerifier){let a=`No code verifier found for ${this.config.name}`;throw g.error(a),Error(a)}return g.debug(`Returning code verifier for ${this.config.name}`),this.config.oauthCodeVerifier}}function i(a,b="http://localhost:4200/api/oauth/callback"){return new h(a,b)}},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(46480),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.ok)(),"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.ok)(),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.YM)(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=5096,exports.ids=[1805,5096],exports.modules={25096:(a,b,c)=>{c.d(b,{C:()=>i});var d=c(50846),e=c(74186),f=c(73456);let g=(0,d.h)("backend/services/mcp/oauth");class h{constructor(a,b){this.config=a,this._redirectUrl=b,this._clientMetadata={redirect_uris:[b],client_name:`FLUJO MCP Client - ${a.name}`,client_uri:"https://github.com/mario-andreschak/FLUJO",grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"client_secret_post",scope:a.oauthScopes?.join(" ")||"read"},g.info(`Created OAuth client provider for ${a.name}`),g.verbose("OAuth client metadata",JSON.stringify(this._clientMetadata))}get redirectUrl(){return this._redirectUrl}get clientMetadata(){return this._clientMetadata}state(){return encodeURIComponent(JSON.stringify({serverName:this.config.name}))}async clientInformation(){if(this.config.oauthClientInformation)return g.debug(`Returning stored client information for ${this.config.name}`),this.config.oauthClientInformation;if(this.config.oauthClientId){let a=this.config.oauthClientSecret?await (0,f.G)(this.config.oauthClientSecret)??void 0:void 0;return g.debug(`Created client information from config for ${this.config.name}`),{client_id:this.config.oauthClientId,client_secret:a}}g.debug(`No client information available for ${this.config.name}`)}async persist(){let a=await (0,e.loadServerConfigs)();if(!Array.isArray(a))return void g.warn(`persist: failed to load server configs for ${this.config.name}, cannot persist OAuth state`);let b=new Map(a.map(a=>[a.name,a]));b.set(this.config.name,this.config);let c=await (0,e.q)(b);c.success||g.warn(`persist: failed to save OAuth state for ${this.config.name}: ${c.error}`)}async invalidateCredentials(a){g.info(`Invalidating OAuth credentials for ${this.config.name} (scope: ${a})`),("all"===a||"tokens"===a)&&(this.config.oauthTokens=void 0),("all"===a||"client"===a)&&(this.config.oauthClientInformation=void 0,this.config.oauthClientMetadata=void 0),("all"===a||"verifier"===a)&&(this.config.oauthCodeVerifier=void 0),await this.persist()}async saveClientInformation(a){g.info(`Saving client information for ${this.config.name}`),g.verbose("Client information to save",JSON.stringify(a)),this.config.oauthClientInformation={client_id:a.client_id,client_secret:a.client_secret,client_id_issued_at:a.client_id_issued_at,client_secret_expires_at:a.client_secret_expires_at},this.config.oauthClientMetadata={redirect_uris:a.redirect_uris,client_name:a.client_name,client_uri:a.client_uri,grant_types:a.grant_types,response_types:a.response_types,token_endpoint_auth_method:a.token_endpoint_auth_method,scope:a.scope,contacts:a.contacts,tos_uri:a.tos_uri,policy_uri:a.policy_uri,jwks_uri:a.jwks_uri,jwks:a.jwks,software_id:a.software_id,software_version:a.software_version},await this.persist(),g.info(`Client information saved for ${this.config.name}`)}async tokens(){if(this.config.oauthTokens){if(g.debug(`Returning stored tokens for ${this.config.name}`),this.config.oauthTokens.expires_in&&this.config.oauthTokens.issued_at){let a=this.config.oauthTokens.issued_at,b=this.config.oauthTokens.expires_in,c=Math.floor(Date.now()/1e3),d=a+b;c>=d?g.info(`Access token for ${this.config.name} has expired (issued: ${a}, expires: ${d}, current: ${c}); SDK will refresh via refresh_token`):g.debug(`Tokens for ${this.config.name} are valid (expires in ${d-c} seconds)`)}return this.config.oauthTokens}g.debug(`No tokens available for ${this.config.name}`)}async saveTokens(a){g.info(`Saving OAuth tokens for ${this.config.name}`),g.verbose("Tokens to save",JSON.stringify({...a,access_token:a.access_token?"[REDACTED]":void 0,refresh_token:a.refresh_token?"[REDACTED]":void 0}));let b={...a,issued_at:Math.floor(Date.now()/1e3)};this.config.oauthTokens=b,await this.persist(),g.info(`OAuth tokens saved for ${this.config.name}`)}async redirectToAuthorization(a){g.info(`Authorization required for ${this.config.name}`),g.info(`Authorization URL: ${a.toString()}`),this.config.authorizationUrl=a.toString();let b=Error(`OAuth authentication required for ${this.config.name}. Please complete the OAuth flow.`);throw b.name="OAuthAuthenticationRequired",b}async saveCodeVerifier(a){g.debug(`Saving code verifier for ${this.config.name}`),this.config.oauthCodeVerifier=a,await this.persist(),g.debug(`Code verifier saved for ${this.config.name}`)}async codeVerifier(){if(!this.config.oauthCodeVerifier){let a=`No code verifier found for ${this.config.name}`;throw g.error(a),Error(a)}return g.debug(`Returning code verifier for ${this.config.name}`),this.config.oauthCodeVerifier}}function i(a,b="http://localhost:4200/api/oauth/callback"){return new h(a,b)}},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.YM)(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"}`}}}}};
@@ -0,0 +1 @@
1
+ "use strict";exports.id=5148,exports.ids=[5148],exports.modules={67191:(a,b,c)=>{c.d(b,{A:()=>x});var d=c(38301),e=c(43249),f=c(2783),g=c(37489),h=c(6638),i=c(54716),j=c(99515),k=c(18168),l=c(68333),m=c(6636),n=c(29565),o=c(33105);function p(a){return(0,o.Ay)("MuiSwitch",a)}let q=(0,n.A)("MuiSwitch",["root","edgeStart","edgeEnd","switchBase","colorPrimary","colorSecondary","sizeSmall","sizeMedium","checked","disabled","input","thumb","track"]);var r=c(20385),s=c(21124);let t=(0,k.Ay)("span",{name:"MuiSwitch",slot:"Root",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[b.root,c.edge&&b[`edge${(0,h.A)(c.edge)}`],b[`size${(0,h.A)(c.size)}`]]}})({display:"inline-flex",width:58,height:38,overflow:"hidden",padding:12,boxSizing:"border-box",position:"relative",flexShrink:0,zIndex:0,verticalAlign:"middle","@media print":{colorAdjust:"exact"},variants:[{props:{edge:"start"},style:{marginLeft:-8}},{props:{edge:"end"},style:{marginRight:-8}},{props:{size:"small"},style:{width:40,height:24,padding:7,[`& .${q.thumb}`]:{width:16,height:16},[`& .${q.switchBase}`]:{padding:4,[`&.${q.checked}`]:{transform:"translateX(16px)"}}}}]}),u=(0,k.Ay)(j.A,{name:"MuiSwitch",slot:"SwitchBase",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[b.switchBase,{[`& .${q.input}`]:b.input},"default"!==c.color&&b[`color${(0,h.A)(c.color)}`]]}})((0,l.A)(({theme:a})=>({position:"absolute",top:0,left:0,zIndex:1,color:a.vars?a.vars.palette.Switch.defaultColor:`${"light"===a.palette.mode?a.palette.common.white:a.palette.grey[300]}`,transition:a.transitions.create(["left","transform"],{duration:a.transitions.duration.shortest}),[`&.${q.checked}`]:{transform:"translateX(20px)"},[`&.${q.disabled}`]:{color:a.vars?a.vars.palette.Switch.defaultDisabledColor:`${"light"===a.palette.mode?a.palette.grey[100]:a.palette.grey[600]}`},[`&.${q.checked} + .${q.track}`]:{opacity:.5},[`&.${q.disabled} + .${q.track}`]:{opacity:a.vars?a.vars.opacity.switchTrackDisabled:`${"light"===a.palette.mode?.12:.2}`},[`& .${q.input}`]:{left:"-100%",width:"300%"}})),(0,l.A)(({theme:a})=>({"&:hover":{backgroundColor:a.vars?`rgba(${a.vars.palette.action.activeChannel} / ${a.vars.palette.action.hoverOpacity})`:(0,g.X4)(a.palette.action.active,a.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}},variants:[...Object.entries(a.palette).filter((0,i.A)(["light"])).map(([b])=>({props:{color:b},style:{[`&.${q.checked}`]:{color:(a.vars||a).palette[b].main,"&:hover":{backgroundColor:a.vars?`rgba(${a.vars.palette[b].mainChannel} / ${a.vars.palette.action.hoverOpacity})`:(0,g.X4)(a.palette[b].main,a.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}},[`&.${q.disabled}`]:{color:a.vars?a.vars.palette.Switch[`${b}DisabledColor`]:`${"light"===a.palette.mode?(0,g.a)(a.palette[b].main,.62):(0,g.e$)(a.palette[b].main,.55)}`}},[`&.${q.checked} + .${q.track}`]:{backgroundColor:(a.vars||a).palette[b].main}}}))]}))),v=(0,k.Ay)("span",{name:"MuiSwitch",slot:"Track",overridesResolver:(a,b)=>b.track})((0,l.A)(({theme:a})=>({height:"100%",width:"100%",borderRadius:7,zIndex:-1,transition:a.transitions.create(["opacity","background-color"],{duration:a.transitions.duration.shortest}),backgroundColor:a.vars?a.vars.palette.common.onBackground:`${"light"===a.palette.mode?a.palette.common.black:a.palette.common.white}`,opacity:a.vars?a.vars.opacity.switchTrack:`${"light"===a.palette.mode?.38:.3}`}))),w=(0,k.Ay)("span",{name:"MuiSwitch",slot:"Thumb",overridesResolver:(a,b)=>b.thumb})((0,l.A)(({theme:a})=>({boxShadow:(a.vars||a).shadows[1],backgroundColor:"currentColor",width:20,height:20,borderRadius:"50%"}))),x=d.forwardRef(function(a,b){let c=(0,m.b)({props:a,name:"MuiSwitch"}),{className:d,color:g="primary",edge:i=!1,size:j="medium",sx:k,slots:l={},slotProps:n={},...o}=c,q={...c,color:g,edge:i,size:j},x=(a=>{let{classes:b,edge:c,size:d,color:e,checked:g,disabled:i}=a,j={root:["root",c&&`edge${(0,h.A)(c)}`,`size${(0,h.A)(d)}`],switchBase:["switchBase",`color${(0,h.A)(e)}`,g&&"checked",i&&"disabled"],thumb:["thumb"],track:["track"],input:["input"]},k=(0,f.A)(j,p,b);return{...b,...k}})(q),y={slots:l,slotProps:n},[z,A]=(0,r.A)("root",{className:(0,e.A)(x.root,d),elementType:t,externalForwardedProps:y,ownerState:q,additionalProps:{sx:k}}),[B,C]=(0,r.A)("thumb",{className:x.thumb,elementType:w,externalForwardedProps:y,ownerState:q}),D=(0,s.jsx)(B,{...C}),[E,F]=(0,r.A)("track",{className:x.track,elementType:v,externalForwardedProps:y,ownerState:q});return(0,s.jsxs)(z,{...A,children:[(0,s.jsx)(u,{type:"checkbox",icon:D,checkedIcon:D,ref:b,ownerState:q,...o,classes:{...x,root:x.switchBase},slots:{...l.switchBase&&{root:l.switchBase},...l.input&&{input:l.input}},slotProps:{...n.switchBase&&{root:"function"==typeof n.switchBase?n.switchBase(q):n.switchBase},...n.input&&{input:"function"==typeof n.input?n.input(q):n.input}}}),(0,s.jsx)(E,{...F})]})})},77028:(a,b,c)=>{c.d(b,{A:()=>D});var d=c(38301),e=c(43249),f=c(2783),g=c(37489),h=c(99515),i=c(11801),j=c(21124);let k=(0,i.A)((0,j.jsx)("path",{d:"M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z"}),"CheckBoxOutlineBlank"),l=(0,i.A)((0,j.jsx)("path",{d:"M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"}),"CheckBox"),m=(0,i.A)((0,j.jsx)("path",{d:"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10H7v-2h10v2z"}),"IndeterminateCheckBox");var n=c(6638),o=c(41126),p=c(29565),q=c(33105);function r(a){return(0,q.Ay)("MuiCheckbox",a)}let s=(0,p.A)("MuiCheckbox",["root","checked","disabled","indeterminate","colorPrimary","colorSecondary","sizeSmall","sizeMedium"]);var t=c(18168),u=c(68333),v=c(54716),w=c(6636),x=c(19902),y=c(20385);let z=(0,t.Ay)(h.A,{shouldForwardProp:a=>(0,o.A)(a)||"classes"===a,name:"MuiCheckbox",slot:"Root",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[b.root,c.indeterminate&&b.indeterminate,b[`size${(0,n.A)(c.size)}`],"default"!==c.color&&b[`color${(0,n.A)(c.color)}`]]}})((0,u.A)(({theme:a})=>({color:(a.vars||a).palette.text.secondary,variants:[{props:{color:"default",disableRipple:!1},style:{"&:hover":{backgroundColor:a.vars?`rgba(${a.vars.palette.action.activeChannel} / ${a.vars.palette.action.hoverOpacity})`:(0,g.X4)(a.palette.action.active,a.palette.action.hoverOpacity)}}},...Object.entries(a.palette).filter((0,v.A)()).map(([b])=>({props:{color:b,disableRipple:!1},style:{"&:hover":{backgroundColor:a.vars?`rgba(${a.vars.palette[b].mainChannel} / ${a.vars.palette.action.hoverOpacity})`:(0,g.X4)(a.palette[b].main,a.palette.action.hoverOpacity)}}})),...Object.entries(a.palette).filter((0,v.A)()).map(([b])=>({props:{color:b},style:{[`&.${s.checked}, &.${s.indeterminate}`]:{color:(a.vars||a).palette[b].main},[`&.${s.disabled}`]:{color:(a.vars||a).palette.action.disabled}}})),{props:{disableRipple:!1},style:{"&:hover":{"@media (hover: none)":{backgroundColor:"transparent"}}}}]}))),A=(0,j.jsx)(l,{}),B=(0,j.jsx)(k,{}),C=(0,j.jsx)(m,{}),D=d.forwardRef(function(a,b){let c=(0,w.b)({props:a,name:"MuiCheckbox"}),{checkedIcon:g=A,color:h="primary",icon:i=B,indeterminate:k=!1,indeterminateIcon:l=C,inputProps:m,size:o="medium",disableRipple:p=!1,className:q,slots:s={},slotProps:t={},...u}=c,v=k?l:i,D=k?l:g,E={...c,disableRipple:p,color:h,indeterminate:k,size:o},F=(a=>{let{classes:b,indeterminate:c,color:d,size:e}=a,g={root:["root",c&&"indeterminate",`color${(0,n.A)(d)}`,`size${(0,n.A)(e)}`]},h=(0,f.A)(g,r,b);return{...b,...h}})(E),G=t.input??m,[H,I]=(0,y.A)("root",{ref:b,elementType:z,className:(0,e.A)(F.root,q),shouldForwardComponentProp:!0,externalForwardedProps:{slots:s,slotProps:t,...u},ownerState:E,additionalProps:{type:"checkbox",icon:d.cloneElement(v,{fontSize:v.props.fontSize??o}),checkedIcon:d.cloneElement(D,{fontSize:D.props.fontSize??o}),disableRipple:p,slots:s,slotProps:{input:(0,x.A)("function"==typeof G?G(E):G,{"data-indeterminate":k})}}});return(0,j.jsx)(H,{...I,classes:F})})},95587:(a,b,c)=>{c.d(b,{A:()=>v});var d=c(38301),e=c(43249),f=c(2783),g=c(49628),h=c(18168),i=c(68333),j=c(6636),k=c(79515),l=c(6638),m=c(29565),n=c(33105);function o(a){return(0,n.Ay)("MuiFormControlLabel",a)}let p=(0,m.A)("MuiFormControlLabel",["root","labelPlacementStart","labelPlacementTop","labelPlacementBottom","disabled","label","error","required","asterisk"]);var q=c(83738),r=c(20385),s=c(21124);let t=(0,h.Ay)("label",{name:"MuiFormControlLabel",slot:"Root",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[{[`& .${p.label}`]:b.label},b.root,b[`labelPlacement${(0,l.A)(c.labelPlacement)}`]]}})((0,i.A)(({theme:a})=>({display:"inline-flex",alignItems:"center",cursor:"pointer",verticalAlign:"middle",WebkitTapHighlightColor:"transparent",marginLeft:-11,marginRight:16,[`&.${p.disabled}`]:{cursor:"default"},[`& .${p.label}`]:{[`&.${p.disabled}`]:{color:(a.vars||a).palette.text.disabled}},variants:[{props:{labelPlacement:"start"},style:{flexDirection:"row-reverse",marginRight:-11}},{props:{labelPlacement:"top"},style:{flexDirection:"column-reverse"}},{props:{labelPlacement:"bottom"},style:{flexDirection:"column"}},{props:({labelPlacement:a})=>"start"===a||"top"===a||"bottom"===a,style:{marginLeft:16}}]}))),u=(0,h.Ay)("span",{name:"MuiFormControlLabel",slot:"Asterisk",overridesResolver:(a,b)=>b.asterisk})((0,i.A)(({theme:a})=>({[`&.${p.error}`]:{color:(a.vars||a).palette.error.main}}))),v=d.forwardRef(function(a,b){let c=(0,j.b)({props:a,name:"MuiFormControlLabel"}),{checked:h,className:i,componentsProps:m={},control:n,disabled:p,disableTypography:v,inputRef:w,label:x,labelPlacement:y="end",name:z,onChange:A,required:B,slots:C={},slotProps:D={},value:E,...F}=c,G=(0,g.A)(),H=p??n.props.disabled??G?.disabled,I=B??n.props.required,J={disabled:H,required:I};["checked","name","onChange","value","inputRef"].forEach(a=>{void 0===n.props[a]&&void 0!==c[a]&&(J[a]=c[a])});let K=(0,q.A)({props:c,muiFormControl:G,states:["error"]}),L={...c,disabled:H,labelPlacement:y,required:I,error:K.error},M=(a=>{let{classes:b,disabled:c,labelPlacement:d,error:e,required:g}=a,h={root:["root",c&&"disabled",`labelPlacement${(0,l.A)(d)}`,e&&"error",g&&"required"],label:["label",c&&"disabled"],asterisk:["asterisk",e&&"error"]};return(0,f.A)(h,o,b)})(L),N={slots:C,slotProps:{...m,...D}},[O,P]=(0,r.A)("typography",{elementType:k.default,externalForwardedProps:N,ownerState:L}),Q=x;return null==Q||Q.type===k.default||v||(Q=(0,s.jsx)(O,{component:"span",...P,className:(0,e.A)(M.label,P?.className),children:Q})),(0,s.jsxs)(t,{className:(0,e.A)(M.root,i),ownerState:L,ref:b,...F,children:[d.cloneElement(n,J),I?(0,s.jsxs)("div",{children:[Q,(0,s.jsxs)(u,{ownerState:L,"aria-hidden":!0,className:M.asterisk,children:[" ","*"]})]}):Q]})})},99515:(a,b,c)=>{c.d(b,{A:()=>s});var d=c(38301),e=c(2783),f=c(6638),g=c(41126),h=c(18168),i=c(65603),j=c(49628),k=c(14328),l=c(29565),m=c(33105);function n(a){return(0,m.Ay)("PrivateSwitchBase",a)}(0,l.A)("PrivateSwitchBase",["root","checked","disabled","input","edgeStart","edgeEnd"]);var o=c(20385),p=c(21124);let q=(0,h.Ay)(k.A,{name:"MuiSwitchBase"})({padding:9,borderRadius:"50%",variants:[{props:{edge:"start",size:"small"},style:{marginLeft:-3}},{props:({edge:a,ownerState:b})=>"start"===a&&"small"!==b.size,style:{marginLeft:-12}},{props:{edge:"end",size:"small"},style:{marginRight:-3}},{props:({edge:a,ownerState:b})=>"end"===a&&"small"!==b.size,style:{marginRight:-12}}]}),r=(0,h.Ay)("input",{name:"MuiSwitchBase",shouldForwardProp:g.A})({cursor:"inherit",position:"absolute",opacity:0,width:"100%",height:"100%",top:0,left:0,margin:0,padding:0,zIndex:1}),s=d.forwardRef(function(a,b){let{autoFocus:c,checked:d,checkedIcon:g,defaultChecked:h,disabled:k,disableFocusRipple:l=!1,edge:m=!1,icon:s,id:t,inputProps:u,inputRef:v,name:w,onBlur:x,onChange:y,onFocus:z,readOnly:A,required:B=!1,tabIndex:C,type:D,value:E,slots:F={},slotProps:G={},...H}=a,[I,J]=(0,i.A)({controlled:d,default:!!h,name:"SwitchBase",state:"checked"}),K=(0,j.A)(),L=k;K&&void 0===L&&(L=K.disabled);let M="checkbox"===D||"radio"===D,N={...a,checked:I,disabled:L,disableFocusRipple:l,edge:m},O=(a=>{let{classes:b,checked:c,disabled:d,edge:g}=a,h={root:["root",c&&"checked",d&&"disabled",g&&`edge${(0,f.A)(g)}`],input:["input"]};return(0,e.A)(h,n,b)})(N),P={slots:F,slotProps:{input:u,...G}},[Q,R]=(0,o.A)("root",{ref:b,elementType:q,className:O.root,shouldForwardComponentProp:!0,externalForwardedProps:{...P,component:"span",...H},getSlotProps:a=>({...a,onFocus:b=>{a.onFocus?.(b),z&&z(b),K&&K.onFocus&&K.onFocus(b)},onBlur:b=>{a.onBlur?.(b),x&&x(b),K&&K.onBlur&&K.onBlur(b)}}),ownerState:N,additionalProps:{centerRipple:!0,focusRipple:!l,disabled:L,role:void 0,tabIndex:null}}),[S,T]=(0,o.A)("input",{ref:v,elementType:r,className:O.input,externalForwardedProps:P,getSlotProps:a=>({onChange:b=>{a.onChange?.(b),(a=>{if(a.nativeEvent.defaultPrevented)return;let b=a.target.checked;J(b),y&&y(a,b)})(b)}}),ownerState:N,additionalProps:{autoFocus:c,checked:d,defaultChecked:h,disabled:L,id:M?t:void 0,name:w,readOnly:A,required:B,tabIndex:C,type:D,..."checkbox"===D&&void 0===E?{}:{value:E}}});return(0,p.jsxs)(Q,{...R,children:[(0,p.jsx)(S,{...T}),I?g:s]})})}};