flujo-ai 3.28.0 → 3.30.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 (848) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +481 -464
  3. package/.next/app-path-routes-manifest.json +20 -17
  4. package/.next/build-manifest.json +6 -6
  5. package/.next/prerender-manifest.json +30 -30
  6. package/.next/react-loadable-manifest.json +7 -6
  7. package/.next/required-server-files.json +4 -4
  8. package/.next/routes-manifest.json +8 -0
  9. package/.next/server/app/_not-found/page.js +4 -4
  10. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  11. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  12. package/.next/server/app/_not-found.html +1 -1
  13. package/.next/server/app/_not-found.rsc +3 -3
  14. package/.next/server/app/api/approvals/[id]/route.js +1 -1
  15. package/.next/server/app/api/approvals/[id]/route.js.nft.json +1 -1
  16. package/.next/server/app/api/approvals/[id]/route_client-reference-manifest.js +1 -1
  17. package/.next/server/app/api/approvals/route.js +2 -2
  18. package/.next/server/app/api/approvals/route.js.nft.json +1 -1
  19. package/.next/server/app/api/approvals/route_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/backup/route.js +1 -1
  21. package/.next/server/app/api/backup/route.js.nft.json +1 -1
  22. package/.next/server/app/api/backup/route_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/browse/route.js +1 -1
  24. package/.next/server/app/api/browse/route.js.nft.json +1 -1
  25. package/.next/server/app/api/browse/route_client-reference-manifest.js +1 -1
  26. package/.next/server/app/api/bugs/enhance/route.js +3 -3
  27. package/.next/server/app/api/bugs/enhance/route.js.nft.json +1 -1
  28. package/.next/server/app/api/bugs/enhance/route_client-reference-manifest.js +1 -1
  29. package/.next/server/app/api/cwd/route.js +1 -1
  30. package/.next/server/app/api/cwd/route.js.nft.json +1 -1
  31. package/.next/server/app/api/cwd/route_client-reference-manifest.js +1 -1
  32. package/.next/server/app/api/encryption/secure/route.js +1 -1
  33. package/.next/server/app/api/encryption/secure/route.js.nft.json +1 -1
  34. package/.next/server/app/api/encryption/secure/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/env/route.js +2 -2
  36. package/.next/server/app/api/env/route.js.nft.json +1 -1
  37. package/.next/server/app/api/env/route_client-reference-manifest.js +1 -1
  38. package/.next/server/app/api/flow/[id]/route.js +1 -1
  39. package/.next/server/app/api/flow/[id]/route.js.nft.json +1 -1
  40. package/.next/server/app/api/flow/[id]/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/flow/[id]/versions/[versionId]/route.js +1 -1
  42. package/.next/server/app/api/flow/[id]/versions/[versionId]/route.js.nft.json +1 -1
  43. package/.next/server/app/api/flow/[id]/versions/[versionId]/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/flow/[id]/versions/route.js +1 -1
  45. package/.next/server/app/api/flow/[id]/versions/route.js.nft.json +1 -1
  46. package/.next/server/app/api/flow/[id]/versions/route_client-reference-manifest.js +1 -1
  47. package/.next/server/app/api/flow/compile/route.js +1 -1
  48. package/.next/server/app/api/flow/compile/route.js.nft.json +1 -1
  49. package/.next/server/app/api/flow/compile/route_client-reference-manifest.js +1 -1
  50. package/.next/server/app/api/flow/generate/route.js +1 -1
  51. package/.next/server/app/api/flow/generate/route.js.nft.json +1 -1
  52. package/.next/server/app/api/flow/generate/route_client-reference-manifest.js +1 -1
  53. package/.next/server/app/api/flow/improve/route.js +1 -1
  54. package/.next/server/app/api/flow/improve/route.js.nft.json +1 -1
  55. package/.next/server/app/api/flow/improve/route_client-reference-manifest.js +1 -1
  56. package/.next/server/app/api/flow/prompt-renderer/route.js +2 -2
  57. package/.next/server/app/api/flow/prompt-renderer/route.js.nft.json +1 -1
  58. package/.next/server/app/api/flow/prompt-renderer/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/flow/quick-chat/route.js +1 -1
  60. package/.next/server/app/api/flow/quick-chat/route.js.nft.json +1 -1
  61. package/.next/server/app/api/flow/quick-chat/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/flow/repair/route.js +1 -1
  63. package/.next/server/app/api/flow/repair/route.js.nft.json +1 -1
  64. package/.next/server/app/api/flow/repair/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/flow/route.js +1 -1
  66. package/.next/server/app/api/flow/route.js.nft.json +1 -1
  67. package/.next/server/app/api/flow/route_client-reference-manifest.js +1 -1
  68. package/.next/server/app/api/git/route.js +2 -2
  69. package/.next/server/app/api/git/route.js.nft.json +1 -1
  70. package/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  71. package/.next/server/app/api/init/route.js +1 -1
  72. package/.next/server/app/api/init/route.js.nft.json +1 -1
  73. package/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  74. package/.next/server/app/api/local-models/capability/route.js +2 -1
  75. package/.next/server/app/api/local-models/capability/route.js.nft.json +1 -1
  76. package/.next/server/app/api/local-models/capability/route_client-reference-manifest.js +1 -1
  77. package/.next/server/app/api/local-models/pull/route.js +2 -1
  78. package/.next/server/app/api/local-models/pull/route.js.nft.json +1 -1
  79. package/.next/server/app/api/local-models/pull/route_client-reference-manifest.js +1 -1
  80. package/.next/server/app/api/local-models/suggest/route.js +2 -2
  81. package/.next/server/app/api/local-models/suggest/route_client-reference-manifest.js +1 -1
  82. package/.next/server/app/api/mcp/app-sandbox/route.js +1 -1
  83. package/.next/server/app/api/mcp/app-sandbox/route.js.nft.json +1 -1
  84. package/.next/server/app/api/mcp/app-sandbox/route_client-reference-manifest.js +1 -1
  85. package/.next/server/app/api/mcp/cancel/route.js +2 -2
  86. package/.next/server/app/api/mcp/cancel/route.js.nft.json +1 -1
  87. package/.next/server/app/api/mcp/cancel/route_client-reference-manifest.js +1 -1
  88. package/.next/server/app/api/mcp/oauth-capability/route.js +1 -1
  89. package/.next/server/app/api/mcp/oauth-capability/route.js.nft.json +1 -1
  90. package/.next/server/app/api/mcp/oauth-capability/route_client-reference-manifest.js +1 -1
  91. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js +1 -1
  92. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js.nft.json +1 -1
  93. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route_client-reference-manifest.js +1 -1
  94. package/.next/server/app/api/mcp/servers/[name]/prompts/route.js +1 -1
  95. package/.next/server/app/api/mcp/servers/[name]/prompts/route.js.nft.json +1 -1
  96. package/.next/server/app/api/mcp/servers/[name]/prompts/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js +1 -1
  98. package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js.nft.json +1 -1
  99. package/.next/server/app/api/mcp/servers/[name]/resources/read/route_client-reference-manifest.js +1 -1
  100. package/.next/server/app/api/mcp/servers/[name]/resources/route.js +1 -1
  101. package/.next/server/app/api/mcp/servers/[name]/resources/route.js.nft.json +1 -1
  102. package/.next/server/app/api/mcp/servers/[name]/resources/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/mcp/servers/[name]/route.js +1 -1
  104. package/.next/server/app/api/mcp/servers/[name]/route.js.nft.json +1 -1
  105. package/.next/server/app/api/mcp/servers/[name]/route_client-reference-manifest.js +1 -1
  106. package/.next/server/app/api/mcp/servers/[name]/status/route.js +1 -1
  107. package/.next/server/app/api/mcp/servers/[name]/status/route.js.nft.json +1 -1
  108. package/.next/server/app/api/mcp/servers/[name]/status/route_client-reference-manifest.js +1 -1
  109. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js +1 -1
  110. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js.nft.json +1 -1
  111. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route_client-reference-manifest.js +1 -1
  112. package/.next/server/app/api/mcp/servers/[name]/tools/route.js +1 -1
  113. package/.next/server/app/api/mcp/servers/[name]/tools/route.js.nft.json +1 -1
  114. package/.next/server/app/api/mcp/servers/[name]/tools/route_client-reference-manifest.js +1 -1
  115. package/.next/server/app/api/mcp/servers/route.js +1 -1
  116. package/.next/server/app/api/mcp/servers/route.js.nft.json +1 -1
  117. package/.next/server/app/api/mcp/servers/route_client-reference-manifest.js +1 -1
  118. package/.next/server/app/api/mcp/test-connection/route.js +1 -1
  119. package/.next/server/app/api/mcp/test-connection/route.js.nft.json +1 -1
  120. package/.next/server/app/api/mcp/test-connection/route_client-reference-manifest.js +1 -1
  121. package/.next/server/app/api/mcp/test-connection/stream/route.js +1 -1
  122. package/.next/server/app/api/mcp/test-connection/stream/route.js.nft.json +1 -1
  123. package/.next/server/app/api/mcp/test-connection/stream/route_client-reference-manifest.js +1 -1
  124. package/.next/server/app/api/mcp-registry/route.js +2 -2
  125. package/.next/server/app/api/mcp-registry/route.js.nft.json +1 -1
  126. package/.next/server/app/api/mcp-registry/route_client-reference-manifest.js +1 -1
  127. package/.next/server/app/api/mcp-registry/spotlight/route.js +1 -1
  128. package/.next/server/app/api/mcp-registry/spotlight/route.js.nft.json +1 -1
  129. package/.next/server/app/api/mcp-registry/spotlight/route_client-reference-manifest.js +1 -1
  130. package/.next/server/app/api/model/[id]/route.js +1 -1
  131. package/.next/server/app/api/model/[id]/route.js.nft.json +1 -1
  132. package/.next/server/app/api/model/[id]/route_client-reference-manifest.js +1 -1
  133. package/.next/server/app/api/model/provider/route.js +2 -2
  134. package/.next/server/app/api/model/provider/route.js.nft.json +1 -1
  135. package/.next/server/app/api/model/provider/route_client-reference-manifest.js +1 -1
  136. package/.next/server/app/api/model/route.js +1 -1
  137. package/.next/server/app/api/model/route.js.nft.json +1 -1
  138. package/.next/server/app/api/model/route_client-reference-manifest.js +1 -1
  139. package/.next/server/app/api/model/test/route.js +2 -2
  140. package/.next/server/app/api/model/test/route.js.nft.json +1 -1
  141. package/.next/server/app/api/model/test/route_client-reference-manifest.js +1 -1
  142. package/.next/server/app/api/oauth/callback/route.js +2 -2
  143. package/.next/server/app/api/oauth/callback/route.js.nft.json +1 -1
  144. package/.next/server/app/api/oauth/callback/route_client-reference-manifest.js +1 -1
  145. package/.next/server/app/api/oauth/initiate/route.js +2 -2
  146. package/.next/server/app/api/oauth/initiate/route.js.nft.json +1 -1
  147. package/.next/server/app/api/oauth/initiate/route_client-reference-manifest.js +1 -1
  148. package/.next/server/app/api/oauth/reset/route.js +2 -2
  149. package/.next/server/app/api/oauth/reset/route.js.nft.json +1 -1
  150. package/.next/server/app/api/oauth/reset/route_client-reference-manifest.js +1 -1
  151. package/.next/server/app/api/packages/build/route.js +1 -1
  152. package/.next/server/app/api/packages/build/route.js.nft.json +1 -1
  153. package/.next/server/app/api/packages/build/route_client-reference-manifest.js +1 -1
  154. package/.next/server/app/api/packages/derive-secrets/route.js +1 -1
  155. package/.next/server/app/api/packages/derive-secrets/route.js.nft.json +1 -1
  156. package/.next/server/app/api/packages/derive-secrets/route_client-reference-manifest.js +1 -1
  157. package/.next/server/app/api/packages/install/route.js +1 -1
  158. package/.next/server/app/api/packages/install/route.js.nft.json +1 -1
  159. package/.next/server/app/api/packages/install/route_client-reference-manifest.js +1 -1
  160. package/.next/server/app/api/packages/install/status/route.js +1 -1
  161. package/.next/server/app/api/packages/install/status/route.js.nft.json +1 -1
  162. package/.next/server/app/api/packages/install/status/route_client-reference-manifest.js +1 -1
  163. package/.next/server/app/api/packages/installed/route.js +1 -1
  164. package/.next/server/app/api/packages/installed/route.js.nft.json +1 -1
  165. package/.next/server/app/api/packages/installed/route_client-reference-manifest.js +1 -1
  166. package/.next/server/app/api/packages/resolve/route.js +1 -1
  167. package/.next/server/app/api/packages/resolve/route.js.nft.json +1 -1
  168. package/.next/server/app/api/packages/resolve/route_client-reference-manifest.js +1 -1
  169. package/.next/server/app/api/packages/scan-targets/route.js +1 -0
  170. package/.next/server/app/api/packages/scan-targets/route.js.nft.json +1 -0
  171. package/.next/server/app/api/packages/scan-targets/route_client-reference-manifest.js +1 -0
  172. package/.next/server/app/api/packages/search/route.js +1 -0
  173. package/.next/server/app/api/packages/search/route.js.nft.json +1 -0
  174. package/.next/server/app/api/packages/search/route_client-reference-manifest.js +1 -0
  175. package/.next/server/app/api/packages/uninstall/route.js +1 -1
  176. package/.next/server/app/api/packages/uninstall/route.js.nft.json +1 -1
  177. package/.next/server/app/api/packages/uninstall/route_client-reference-manifest.js +1 -1
  178. package/.next/server/app/api/planned-executions/[id]/route.js +2 -2
  179. package/.next/server/app/api/planned-executions/[id]/route.js.nft.json +1 -1
  180. package/.next/server/app/api/planned-executions/[id]/route_client-reference-manifest.js +1 -1
  181. package/.next/server/app/api/planned-executions/[id]/run/route.js +2 -2
  182. package/.next/server/app/api/planned-executions/[id]/run/route.js.nft.json +1 -1
  183. package/.next/server/app/api/planned-executions/[id]/run/route_client-reference-manifest.js +1 -1
  184. package/.next/server/app/api/planned-executions/[id]/runs/route.js +2 -2
  185. package/.next/server/app/api/planned-executions/[id]/runs/route.js.nft.json +1 -1
  186. package/.next/server/app/api/planned-executions/[id]/runs/route_client-reference-manifest.js +1 -1
  187. package/.next/server/app/api/planned-executions/preview-schedule/route.js +1 -1
  188. package/.next/server/app/api/planned-executions/preview-schedule/route.js.nft.json +1 -1
  189. package/.next/server/app/api/planned-executions/preview-schedule/route_client-reference-manifest.js +1 -1
  190. package/.next/server/app/api/planned-executions/reconcile/route.js +1 -1
  191. package/.next/server/app/api/planned-executions/reconcile/route.js.nft.json +1 -1
  192. package/.next/server/app/api/planned-executions/reconcile/route_client-reference-manifest.js +1 -1
  193. package/.next/server/app/api/planned-executions/route.js +1 -1
  194. package/.next/server/app/api/planned-executions/route.js.nft.json +1 -1
  195. package/.next/server/app/api/planned-executions/route_client-reference-manifest.js +1 -1
  196. package/.next/server/app/api/registry/auth/resend/route.js +1 -1
  197. package/.next/server/app/api/registry/auth/resend/route.js.nft.json +1 -1
  198. package/.next/server/app/api/registry/auth/resend/route_client-reference-manifest.js +1 -1
  199. package/.next/server/app/api/registry/auth/reset/route.js +1 -1
  200. package/.next/server/app/api/registry/auth/reset/route.js.nft.json +1 -1
  201. package/.next/server/app/api/registry/auth/reset/route_client-reference-manifest.js +1 -1
  202. package/.next/server/app/api/registry/auth/route.js +1 -1
  203. package/.next/server/app/api/registry/auth/route.js.nft.json +1 -1
  204. package/.next/server/app/api/registry/auth/route_client-reference-manifest.js +1 -1
  205. package/.next/server/app/api/registry/oauth/callback/route.js +1 -1
  206. package/.next/server/app/api/registry/oauth/callback/route.js.nft.json +1 -1
  207. package/.next/server/app/api/registry/oauth/callback/route_client-reference-manifest.js +1 -1
  208. package/.next/server/app/api/registry/oauth/initiate/route.js +1 -1
  209. package/.next/server/app/api/registry/oauth/initiate/route.js.nft.json +1 -1
  210. package/.next/server/app/api/registry/oauth/initiate/route_client-reference-manifest.js +1 -1
  211. package/.next/server/app/api/registry/publish/route.js +1 -1
  212. package/.next/server/app/api/registry/publish/route.js.nft.json +1 -1
  213. package/.next/server/app/api/registry/publish/route_client-reference-manifest.js +1 -1
  214. package/.next/server/app/api/registry/settings/route.js +1 -1
  215. package/.next/server/app/api/registry/settings/route.js.nft.json +1 -1
  216. package/.next/server/app/api/registry/settings/route_client-reference-manifest.js +1 -1
  217. package/.next/server/app/api/restore/route.js +1 -1
  218. package/.next/server/app/api/restore/route.js.nft.json +1 -1
  219. package/.next/server/app/api/restore/route_client-reference-manifest.js +1 -1
  220. package/.next/server/app/api/runs/active/route.js +2 -2
  221. package/.next/server/app/api/runs/active/route.js.nft.json +1 -1
  222. package/.next/server/app/api/runs/active/route_client-reference-manifest.js +1 -1
  223. package/.next/server/app/api/storage/route.js +1 -1
  224. package/.next/server/app/api/storage/route.js.nft.json +1 -1
  225. package/.next/server/app/api/storage/route_client-reference-manifest.js +1 -1
  226. package/.next/server/app/api/update/route.js +1 -1
  227. package/.next/server/app/api/update/route.js.nft.json +1 -1
  228. package/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  229. package/.next/server/app/api/waves/route.js +1 -1
  230. package/.next/server/app/api/waves/route.js.nft.json +1 -1
  231. package/.next/server/app/api/waves/route_client-reference-manifest.js +1 -1
  232. package/.next/server/app/api/webhooks/[id]/route.js +1 -1
  233. package/.next/server/app/api/webhooks/[id]/route.js.nft.json +1 -1
  234. package/.next/server/app/api/webhooks/[id]/route_client-reference-manifest.js +1 -1
  235. package/.next/server/app/chat/page.js +9 -9
  236. package/.next/server/app/chat/page.js.nft.json +1 -1
  237. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  238. package/.next/server/app/chat.html +1 -1
  239. package/.next/server/app/chat.rsc +4 -4
  240. package/.next/server/app/docs/page.js +5 -5
  241. package/.next/server/app/docs/page.js.nft.json +1 -1
  242. package/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  243. package/.next/server/app/docs.html +1 -1
  244. package/.next/server/app/docs.rsc +4 -4
  245. package/.next/server/app/executions/page.js +2 -39
  246. package/.next/server/app/executions/page.js.nft.json +1 -1
  247. package/.next/server/app/executions/page_client-reference-manifest.js +1 -1
  248. package/.next/server/app/executions.html +1 -1
  249. package/.next/server/app/executions.rsc +4 -4
  250. package/.next/server/app/flows/page.js +3 -3
  251. package/.next/server/app/flows/page.js.nft.json +1 -1
  252. package/.next/server/app/flows/page_client-reference-manifest.js +1 -1
  253. package/.next/server/app/flows.html +1 -1
  254. package/.next/server/app/flows.rsc +4 -4
  255. package/.next/server/app/index.html +1 -1
  256. package/.next/server/app/index.rsc +4 -4
  257. package/.next/server/app/mcp/page.js +11 -11
  258. package/.next/server/app/mcp/page.js.nft.json +1 -1
  259. package/.next/server/app/mcp/page_client-reference-manifest.js +1 -1
  260. package/.next/server/app/mcp-flows/route.js +1 -1
  261. package/.next/server/app/mcp-flows/route.js.nft.json +1 -1
  262. package/.next/server/app/mcp-flows/route_client-reference-manifest.js +1 -1
  263. package/.next/server/app/mcp-proxy/[server]/route.js +1 -1
  264. package/.next/server/app/mcp-proxy/[server]/route.js.nft.json +1 -1
  265. package/.next/server/app/mcp-proxy/[server]/route_client-reference-manifest.js +1 -1
  266. package/.next/server/app/mcp.html +1 -1
  267. package/.next/server/app/mcp.rsc +4 -4
  268. package/.next/server/app/models/page.js +2 -2
  269. package/.next/server/app/models/page.js.nft.json +1 -1
  270. package/.next/server/app/models/page_client-reference-manifest.js +1 -1
  271. package/.next/server/app/packages/page.js +2 -2
  272. package/.next/server/app/packages/page.js.nft.json +1 -1
  273. package/.next/server/app/packages/page_client-reference-manifest.js +1 -1
  274. package/.next/server/app/packages.html +1 -1
  275. package/.next/server/app/packages.rsc +4 -4
  276. package/.next/server/app/page.js +3 -3
  277. package/.next/server/app/page.js.nft.json +1 -1
  278. package/.next/server/app/page_client-reference-manifest.js +1 -1
  279. package/.next/server/app/settings/page.js +2 -2
  280. package/.next/server/app/settings/page.js.nft.json +1 -1
  281. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  282. package/.next/server/app/settings.html +1 -1
  283. package/.next/server/app/settings.rsc +4 -4
  284. package/.next/server/app/v1/chat/completions/route.js +1 -1
  285. package/.next/server/app/v1/chat/completions/route.js.nft.json +1 -1
  286. package/.next/server/app/v1/chat/completions/route_client-reference-manifest.js +1 -1
  287. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js +2 -2
  288. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js.nft.json +1 -1
  289. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route_client-reference-manifest.js +1 -1
  290. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js +2 -2
  291. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js.nft.json +1 -1
  292. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route_client-reference-manifest.js +1 -1
  293. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js +1 -1
  294. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js.nft.json +1 -1
  295. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route_client-reference-manifest.js +1 -1
  296. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js +1 -1
  297. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js.nft.json +1 -1
  298. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route_client-reference-manifest.js +1 -1
  299. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js +2 -2
  300. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js.nft.json +1 -1
  301. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route_client-reference-manifest.js +1 -1
  302. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js +4 -4
  303. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js.nft.json +1 -1
  304. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route_client-reference-manifest.js +1 -1
  305. package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route.js +2 -0
  306. package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route.js.nft.json +1 -0
  307. package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route_client-reference-manifest.js +1 -0
  308. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route.js +1 -1
  309. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route.js.nft.json +1 -1
  310. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route_client-reference-manifest.js +1 -1
  311. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js +1 -1
  312. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js.nft.json +1 -1
  313. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route_client-reference-manifest.js +1 -1
  314. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js +2 -2
  315. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js.nft.json +1 -1
  316. package/.next/server/app/v1/chat/conversations/[conversationId]/route_client-reference-manifest.js +1 -1
  317. package/.next/server/app/v1/chat/conversations/route.js +2 -2
  318. package/.next/server/app/v1/chat/conversations/route.js.nft.json +1 -1
  319. package/.next/server/app/v1/chat/conversations/route_client-reference-manifest.js +1 -1
  320. package/.next/server/app/v1/chat/events/route.js +3 -3
  321. package/.next/server/app/v1/chat/events/route.js.nft.json +1 -1
  322. package/.next/server/app/v1/chat/events/route_client-reference-manifest.js +1 -1
  323. package/.next/server/app/v1/models/route.js +2 -2
  324. package/.next/server/app/v1/models/route.js.nft.json +1 -1
  325. package/.next/server/app/v1/models/route_client-reference-manifest.js +1 -1
  326. package/.next/server/app/waves/page.js +4 -4
  327. package/.next/server/app/waves/page.js.nft.json +1 -1
  328. package/.next/server/app/waves/page_client-reference-manifest.js +1 -1
  329. package/.next/server/app/waves.html +1 -1
  330. package/.next/server/app/waves.rsc +4 -4
  331. package/.next/server/app-paths-manifest.json +20 -17
  332. package/.next/server/chunks/1114.js +1 -1
  333. package/.next/server/chunks/1226.js +1 -1
  334. package/.next/server/chunks/1314.js +1 -1
  335. package/.next/server/chunks/{6529.js → 1578.js} +2 -2
  336. package/.next/server/chunks/1634.js +1 -0
  337. package/.next/server/chunks/166.js +5 -5
  338. package/.next/server/chunks/1690.js +1 -0
  339. package/.next/server/chunks/2180.js +1 -0
  340. package/.next/server/chunks/227.js +2 -2
  341. package/.next/server/chunks/2273.js +2 -0
  342. package/.next/server/chunks/237.js +1 -0
  343. package/.next/server/chunks/2695.js +2 -2
  344. package/.next/server/chunks/2859.js +1 -1
  345. package/.next/server/chunks/2866.js +2 -0
  346. package/.next/server/chunks/{7674.js → 3030.js} +1 -1
  347. package/.next/server/chunks/3128.js +4 -4
  348. package/.next/server/chunks/{8730.js → 3489.js} +1 -1
  349. package/.next/server/chunks/3570.js +228 -105
  350. package/.next/server/chunks/3629.js +1 -1
  351. package/.next/server/chunks/3912.js +2 -0
  352. package/.next/server/chunks/3984.js +4 -4
  353. package/.next/server/chunks/4265.js +1 -1
  354. package/.next/server/chunks/4366.js +2 -0
  355. package/.next/server/chunks/4551.js +6 -0
  356. package/.next/server/chunks/4566.js +6 -0
  357. package/.next/server/chunks/4671.js +1 -1
  358. package/.next/server/chunks/4681.js +1 -1
  359. package/.next/server/chunks/4685.js +1 -0
  360. package/.next/server/chunks/4771.js +2 -2
  361. package/.next/server/chunks/4961.js +2 -0
  362. package/.next/server/chunks/5040.js +53 -0
  363. package/.next/server/chunks/5067.js +1 -1
  364. package/.next/server/chunks/544.js +135 -0
  365. package/.next/server/chunks/5463.js +1 -1
  366. package/.next/server/chunks/5544.js +5 -5
  367. package/.next/server/chunks/5548.js +62 -0
  368. package/.next/server/chunks/5561.js +1 -0
  369. package/.next/server/chunks/5705.js +1 -0
  370. package/.next/server/chunks/5708.js +1 -1
  371. package/.next/server/chunks/5829.js +1 -0
  372. package/.next/server/chunks/5863.js +37 -0
  373. package/.next/server/chunks/5880.js +1 -1
  374. package/.next/server/chunks/6034.js +77 -0
  375. package/.next/server/chunks/6226.js +6 -0
  376. package/.next/server/chunks/6404.js +2 -0
  377. package/.next/server/chunks/6432.js +1 -0
  378. package/.next/server/chunks/6496.js +1 -0
  379. package/.next/server/chunks/6793.js +1 -0
  380. package/.next/server/chunks/694.js +3 -0
  381. package/.next/server/chunks/701.js +1 -1
  382. package/.next/server/chunks/7506.js +1 -1
  383. package/.next/server/chunks/7579.js +4 -4
  384. package/.next/server/chunks/7634.js +4 -0
  385. package/.next/server/chunks/7724.js +1 -0
  386. package/.next/server/chunks/7821.js +1 -1
  387. package/.next/server/chunks/793.js +15 -5
  388. package/.next/server/chunks/7969.js +1 -0
  389. package/.next/server/chunks/{6537.js → 8001.js} +1 -1
  390. package/.next/server/chunks/8034.js +1 -0
  391. package/.next/server/chunks/8092.js +1 -0
  392. package/.next/server/chunks/{8568.js → 8192.js} +1 -1
  393. package/.next/server/chunks/826.js +2 -0
  394. package/.next/server/chunks/8298.js +1 -0
  395. package/.next/server/chunks/8321.js +1 -0
  396. package/.next/server/chunks/8356.js +1 -0
  397. package/.next/server/chunks/8366.js +90 -0
  398. package/.next/server/chunks/8387.js +1 -1
  399. package/.next/server/chunks/848.js +39 -0
  400. package/.next/server/chunks/8615.js +1 -0
  401. package/.next/server/chunks/8645.js +2 -0
  402. package/.next/server/chunks/8739.js +1 -1
  403. package/.next/server/chunks/8851.js +1 -0
  404. package/.next/server/chunks/9174.js +1 -0
  405. package/.next/server/chunks/9313.js +1 -0
  406. package/.next/server/chunks/94.js +1 -1
  407. package/.next/server/chunks/9406.js +2 -2
  408. package/.next/server/chunks/9509.js +2 -2
  409. package/.next/server/chunks/9537.js +39 -0
  410. package/.next/server/chunks/9576.js +2 -0
  411. package/.next/server/chunks/9671.js +1 -1
  412. package/.next/server/chunks/9724.js +16 -6
  413. package/.next/server/chunks/9857.js +1 -0
  414. package/.next/server/chunks/{3298.js → 9868.js} +2 -2
  415. package/.next/server/chunks/9957.js +1 -0
  416. package/.next/server/chunks/9983.js +2 -0
  417. package/.next/server/edge-instrumentation.js.map +1 -1
  418. package/.next/server/functions-config-manifest.json +2 -2
  419. package/.next/server/instrumentation.js.nft.json +1 -1
  420. package/.next/server/middleware-build-manifest.js +1 -1
  421. package/.next/server/middleware-manifest.json +5 -5
  422. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  423. package/.next/server/pages/404.html +1 -1
  424. package/.next/server/pages/500.html +1 -1
  425. package/.next/server/server-reference-manifest.js +1 -1
  426. package/.next/server/server-reference-manifest.json +1 -1
  427. package/.next/server/src/middleware.js +2 -2
  428. package/.next/server/src/middleware.js.map +1 -1
  429. package/.next/static/A9jP2ydtYbqx-IayWP2Sg/_buildManifest.js +1 -0
  430. package/.next/static/chunks/1496-d478bce7d7c85080.js +1 -0
  431. package/.next/static/chunks/1572-b663a83bba28a0a1.js +8 -0
  432. package/.next/static/chunks/1641-e5ff8f112da0a335.js +1 -0
  433. package/.next/static/chunks/1988-bd73f26184e930c1.js +1 -0
  434. package/.next/static/chunks/2266-d812473724cc6643.js +1 -0
  435. package/.next/static/chunks/{8345.bc5534ec13abc9ee.js → 2969.eb9ff8cd2a5034b0.js} +1 -1
  436. package/.next/static/chunks/3089.a0856f8093b90939.js +1 -0
  437. package/.next/static/chunks/{2005-f9d38c39f10c321f.js → 3189-fa8ec6d719d5e72b.js} +1 -1
  438. package/.next/static/chunks/3452-a639f121f2953f50.js +62 -0
  439. package/.next/static/chunks/3560-5bdceef09b50e1c3.js +1 -0
  440. package/.next/static/chunks/3659-0ab9580d5ee5deea.js +1 -0
  441. package/.next/static/chunks/3672-cd86ace43288da79.js +1 -0
  442. package/.next/static/chunks/3711-0050bb4d345c2c9c.js +1 -0
  443. package/.next/static/chunks/4147-20897d83b3cd3978.js +39 -0
  444. package/.next/static/chunks/435-17c79f3b9f8dd38d.js +1 -0
  445. package/.next/static/chunks/454.5fc2f8eef98483e3.js +1 -0
  446. package/.next/static/chunks/469-1f043fe082d9f475.js +1 -0
  447. package/.next/static/chunks/4740-62814d07b2b7f760.js +1 -0
  448. package/.next/static/chunks/5418-45aa7e646ad024be.js +1 -0
  449. package/.next/static/chunks/5441-cb0c31de8bce65c3.js +1 -0
  450. package/.next/static/chunks/6404-86615a5f5ce5c00f.js +1 -0
  451. package/.next/static/chunks/7445-d8a8be6e451c522e.js +1 -0
  452. package/.next/static/chunks/{3827-9e9a6e11ef808d90.js → 8041-05830e887c133085.js} +1 -1
  453. package/.next/static/chunks/812-dfe7ba07ddb7a565.js +1 -0
  454. package/.next/static/chunks/8404-14ef0345dc401ac5.js +1 -0
  455. package/.next/static/chunks/8678-c6c6be2672f337f6.js +1 -0
  456. package/.next/static/chunks/8855-f802599c4af81cca.js +1 -0
  457. package/.next/static/chunks/9562-5494feecd8c6f7a3.js +1 -0
  458. package/.next/static/chunks/9581-6d2523fd68a5e3c4.js +1 -0
  459. package/.next/static/chunks/app/_not-found/page-26055690a2426e22.js +1 -0
  460. package/.next/static/chunks/app/api/approvals/[id]/route-1a4c9e7a416ccbcf.js +1 -0
  461. package/.next/static/chunks/app/api/approvals/route-1a4c9e7a416ccbcf.js +1 -0
  462. package/.next/static/chunks/app/api/backup/route-1a4c9e7a416ccbcf.js +1 -0
  463. package/.next/static/chunks/app/api/browse/route-1a4c9e7a416ccbcf.js +1 -0
  464. package/.next/static/chunks/app/api/bugs/enhance/route-1a4c9e7a416ccbcf.js +1 -0
  465. package/.next/static/chunks/app/api/cwd/route-1a4c9e7a416ccbcf.js +1 -0
  466. package/.next/static/chunks/app/api/encryption/secure/route-1a4c9e7a416ccbcf.js +1 -0
  467. package/.next/static/chunks/app/api/env/route-1a4c9e7a416ccbcf.js +1 -0
  468. package/.next/static/chunks/app/api/flow/[id]/route-1a4c9e7a416ccbcf.js +1 -0
  469. package/.next/static/chunks/app/api/flow/[id]/versions/[versionId]/route-1a4c9e7a416ccbcf.js +1 -0
  470. package/.next/static/chunks/app/api/flow/[id]/versions/route-1a4c9e7a416ccbcf.js +1 -0
  471. package/.next/static/chunks/app/api/flow/compile/route-1a4c9e7a416ccbcf.js +1 -0
  472. package/.next/static/chunks/app/api/flow/generate/route-1a4c9e7a416ccbcf.js +1 -0
  473. package/.next/static/chunks/app/api/flow/improve/route-1a4c9e7a416ccbcf.js +1 -0
  474. package/.next/static/chunks/app/api/flow/prompt-renderer/route-1a4c9e7a416ccbcf.js +1 -0
  475. package/.next/static/chunks/app/api/flow/quick-chat/route-1a4c9e7a416ccbcf.js +1 -0
  476. package/.next/static/chunks/app/api/flow/repair/route-1a4c9e7a416ccbcf.js +1 -0
  477. package/.next/static/chunks/app/api/flow/route-1a4c9e7a416ccbcf.js +1 -0
  478. package/.next/static/chunks/app/api/git/route-1a4c9e7a416ccbcf.js +1 -0
  479. package/.next/static/chunks/app/api/init/route-1a4c9e7a416ccbcf.js +1 -0
  480. package/.next/static/chunks/app/api/local-models/capability/route-1a4c9e7a416ccbcf.js +1 -0
  481. package/.next/static/chunks/app/api/local-models/pull/route-1a4c9e7a416ccbcf.js +1 -0
  482. package/.next/static/chunks/app/api/local-models/suggest/route-1a4c9e7a416ccbcf.js +1 -0
  483. package/.next/static/chunks/app/api/mcp/app-sandbox/route-1a4c9e7a416ccbcf.js +1 -0
  484. package/.next/static/chunks/app/api/mcp/cancel/route-1a4c9e7a416ccbcf.js +1 -0
  485. package/.next/static/chunks/app/api/mcp/oauth-capability/route-1a4c9e7a416ccbcf.js +1 -0
  486. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-1a4c9e7a416ccbcf.js +1 -0
  487. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-1a4c9e7a416ccbcf.js +1 -0
  488. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-1a4c9e7a416ccbcf.js +1 -0
  489. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-1a4c9e7a416ccbcf.js +1 -0
  490. package/.next/static/chunks/app/api/mcp/servers/[name]/route-1a4c9e7a416ccbcf.js +1 -0
  491. package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-1a4c9e7a416ccbcf.js +1 -0
  492. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-1a4c9e7a416ccbcf.js +1 -0
  493. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-1a4c9e7a416ccbcf.js +1 -0
  494. package/.next/static/chunks/app/api/mcp/servers/route-1a4c9e7a416ccbcf.js +1 -0
  495. package/.next/static/chunks/app/api/mcp/test-connection/route-1a4c9e7a416ccbcf.js +1 -0
  496. package/.next/static/chunks/app/api/mcp/test-connection/stream/route-1a4c9e7a416ccbcf.js +1 -0
  497. package/.next/static/chunks/app/api/mcp-registry/route-1a4c9e7a416ccbcf.js +1 -0
  498. package/.next/static/chunks/app/api/mcp-registry/spotlight/route-1a4c9e7a416ccbcf.js +1 -0
  499. package/.next/static/chunks/app/api/model/[id]/route-1a4c9e7a416ccbcf.js +1 -0
  500. package/.next/static/chunks/app/api/model/provider/route-1a4c9e7a416ccbcf.js +1 -0
  501. package/.next/static/chunks/app/api/model/route-1a4c9e7a416ccbcf.js +1 -0
  502. package/.next/static/chunks/app/api/model/test/route-1a4c9e7a416ccbcf.js +1 -0
  503. package/.next/static/chunks/app/api/oauth/callback/route-1a4c9e7a416ccbcf.js +1 -0
  504. package/.next/static/chunks/app/api/oauth/initiate/route-1a4c9e7a416ccbcf.js +1 -0
  505. package/.next/static/chunks/app/api/oauth/reset/route-1a4c9e7a416ccbcf.js +1 -0
  506. package/.next/static/chunks/app/api/packages/build/route-1a4c9e7a416ccbcf.js +1 -0
  507. package/.next/static/chunks/app/api/packages/derive-secrets/route-1a4c9e7a416ccbcf.js +1 -0
  508. package/.next/static/chunks/app/api/packages/install/route-1a4c9e7a416ccbcf.js +1 -0
  509. package/.next/static/chunks/app/api/packages/install/status/route-1a4c9e7a416ccbcf.js +1 -0
  510. package/.next/static/chunks/app/api/packages/installed/route-1a4c9e7a416ccbcf.js +1 -0
  511. package/.next/static/chunks/app/api/packages/resolve/route-1a4c9e7a416ccbcf.js +1 -0
  512. package/.next/static/chunks/app/api/packages/scan-targets/route-1a4c9e7a416ccbcf.js +1 -0
  513. package/.next/static/chunks/app/api/packages/search/route-1a4c9e7a416ccbcf.js +1 -0
  514. package/.next/static/chunks/app/api/packages/uninstall/route-1a4c9e7a416ccbcf.js +1 -0
  515. package/.next/static/chunks/app/api/planned-executions/[id]/route-1a4c9e7a416ccbcf.js +1 -0
  516. package/.next/static/chunks/app/api/planned-executions/[id]/run/route-1a4c9e7a416ccbcf.js +1 -0
  517. package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-1a4c9e7a416ccbcf.js +1 -0
  518. package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-1a4c9e7a416ccbcf.js +1 -0
  519. package/.next/static/chunks/app/api/planned-executions/reconcile/route-1a4c9e7a416ccbcf.js +1 -0
  520. package/.next/static/chunks/app/api/planned-executions/route-1a4c9e7a416ccbcf.js +1 -0
  521. package/.next/static/chunks/app/api/registry/auth/resend/route-1a4c9e7a416ccbcf.js +1 -0
  522. package/.next/static/chunks/app/api/registry/auth/reset/route-1a4c9e7a416ccbcf.js +1 -0
  523. package/.next/static/chunks/app/api/registry/auth/route-1a4c9e7a416ccbcf.js +1 -0
  524. package/.next/static/chunks/app/api/registry/oauth/callback/route-1a4c9e7a416ccbcf.js +1 -0
  525. package/.next/static/chunks/app/api/registry/oauth/initiate/route-1a4c9e7a416ccbcf.js +1 -0
  526. package/.next/static/chunks/app/api/registry/publish/route-1a4c9e7a416ccbcf.js +1 -0
  527. package/.next/static/chunks/app/api/registry/settings/route-1a4c9e7a416ccbcf.js +1 -0
  528. package/.next/static/chunks/app/api/restore/route-1a4c9e7a416ccbcf.js +1 -0
  529. package/.next/static/chunks/app/api/runs/active/route-1a4c9e7a416ccbcf.js +1 -0
  530. package/.next/static/chunks/app/api/storage/route-1a4c9e7a416ccbcf.js +1 -0
  531. package/.next/static/chunks/app/api/update/route-1a4c9e7a416ccbcf.js +1 -0
  532. package/.next/static/chunks/app/api/waves/route-1a4c9e7a416ccbcf.js +1 -0
  533. package/.next/static/chunks/app/api/webhooks/[id]/route-1a4c9e7a416ccbcf.js +1 -0
  534. package/.next/static/chunks/app/chat/page-558edb21321a32d0.js +1 -0
  535. package/.next/static/chunks/app/docs/{page-250523af44e96120.js → page-fc30f613607b8a26.js} +1 -1
  536. package/.next/static/chunks/app/executions/page-e71689c7256af1e8.js +1 -0
  537. package/.next/static/chunks/app/flows/page-e90e8d7b4c1bd1c8.js +1 -0
  538. package/.next/static/chunks/app/layout-038b35b382eef11d.js +1 -0
  539. package/.next/static/chunks/app/mcp/page-6041156fc67ef361.js +1 -0
  540. package/.next/static/chunks/app/mcp-flows/route-1a4c9e7a416ccbcf.js +1 -0
  541. package/.next/static/chunks/app/mcp-proxy/[server]/route-1a4c9e7a416ccbcf.js +1 -0
  542. package/.next/static/chunks/app/models/{error-5732fbb053e182c5.js → error-1718b538d6967e56.js} +1 -1
  543. package/.next/static/chunks/app/models/{loading-57d1c02d0817fc47.js → loading-1687ae86584f5b1b.js} +1 -1
  544. package/.next/static/chunks/app/models/page-d16f2721e7a93b43.js +1 -0
  545. package/.next/static/chunks/app/packages/page-c6b0e7aa95bc1064.js +1 -0
  546. package/.next/static/chunks/app/page-5c7fccd019942d46.js +1 -0
  547. package/.next/static/chunks/app/settings/page-fb336bb049bab72a.js +1 -0
  548. package/.next/static/chunks/app/v1/chat/completions/route-1a4c9e7a416ccbcf.js +1 -0
  549. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-1a4c9e7a416ccbcf.js +1 -0
  550. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-1a4c9e7a416ccbcf.js +1 -0
  551. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-1a4c9e7a416ccbcf.js +1 -0
  552. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-1a4c9e7a416ccbcf.js +1 -0
  553. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-1a4c9e7a416ccbcf.js +1 -0
  554. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-1a4c9e7a416ccbcf.js +1 -0
  555. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/inject/route-1a4c9e7a416ccbcf.js +1 -0
  556. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/resources/route-1a4c9e7a416ccbcf.js +1 -0
  557. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-1a4c9e7a416ccbcf.js +1 -0
  558. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-1a4c9e7a416ccbcf.js +1 -0
  559. package/.next/static/chunks/app/v1/chat/conversations/route-1a4c9e7a416ccbcf.js +1 -0
  560. package/.next/static/chunks/app/v1/chat/events/route-1a4c9e7a416ccbcf.js +1 -0
  561. package/.next/static/chunks/app/v1/models/route-1a4c9e7a416ccbcf.js +1 -0
  562. package/.next/static/chunks/app/waves/page-3cf4b47b12662196.js +1 -0
  563. package/.next/static/chunks/{main-app-faff38c77cb00119.js → main-app-2de821d2899bb841.js} +1 -1
  564. package/.next/static/chunks/webpack-2d8e0c13c0b865fe.js +1 -0
  565. package/.next/static/css/30253fcfa8035221.css +1 -0
  566. package/.next/trace +10 -10
  567. package/.next/types/app/api/approvals/[id]/route.ts +1 -1
  568. package/.next/types/app/api/approvals/route.ts +1 -1
  569. package/.next/types/app/api/backup/route.ts +1 -1
  570. package/.next/types/app/api/browse/route.ts +1 -1
  571. package/.next/types/app/api/bugs/enhance/route.ts +1 -1
  572. package/.next/types/app/api/cwd/route.ts +1 -1
  573. package/.next/types/app/api/encryption/secure/route.ts +1 -1
  574. package/.next/types/app/api/env/route.ts +1 -1
  575. package/.next/types/app/api/flow/[id]/route.ts +1 -1
  576. package/.next/types/app/api/flow/[id]/versions/[versionId]/route.ts +1 -1
  577. package/.next/types/app/api/flow/[id]/versions/route.ts +1 -1
  578. package/.next/types/app/api/flow/compile/route.ts +1 -1
  579. package/.next/types/app/api/flow/generate/route.ts +1 -1
  580. package/.next/types/app/api/flow/improve/route.ts +1 -1
  581. package/.next/types/app/api/flow/prompt-renderer/route.ts +1 -1
  582. package/.next/types/app/api/flow/quick-chat/route.ts +1 -1
  583. package/.next/types/app/api/flow/repair/route.ts +1 -1
  584. package/.next/types/app/api/flow/route.ts +1 -1
  585. package/.next/types/app/api/git/route.ts +1 -1
  586. package/.next/types/app/api/init/route.ts +1 -1
  587. package/.next/types/app/api/local-models/capability/route.ts +1 -1
  588. package/.next/types/app/api/local-models/pull/route.ts +1 -1
  589. package/.next/types/app/api/local-models/suggest/route.ts +1 -1
  590. package/.next/types/app/api/mcp/app-sandbox/route.ts +1 -1
  591. package/.next/types/app/api/mcp/cancel/route.ts +1 -1
  592. package/.next/types/app/api/mcp/oauth-capability/route.ts +1 -1
  593. package/.next/types/app/api/mcp/servers/[name]/prompts/get/route.ts +1 -1
  594. package/.next/types/app/api/mcp/servers/[name]/prompts/route.ts +1 -1
  595. package/.next/types/app/api/mcp/servers/[name]/resources/read/route.ts +1 -1
  596. package/.next/types/app/api/mcp/servers/[name]/resources/route.ts +1 -1
  597. package/.next/types/app/api/mcp/servers/[name]/route.ts +1 -1
  598. package/.next/types/app/api/mcp/servers/[name]/status/route.ts +1 -1
  599. package/.next/types/app/api/mcp/servers/[name]/tools/[toolName]/route.ts +1 -1
  600. package/.next/types/app/api/mcp/servers/[name]/tools/route.ts +1 -1
  601. package/.next/types/app/api/mcp/servers/route.ts +1 -1
  602. package/.next/types/app/api/mcp/test-connection/route.ts +1 -1
  603. package/.next/types/app/api/mcp/test-connection/stream/route.ts +1 -1
  604. package/.next/types/app/api/mcp-registry/route.ts +1 -1
  605. package/.next/types/app/api/mcp-registry/spotlight/route.ts +1 -1
  606. package/.next/types/app/api/model/[id]/route.ts +1 -1
  607. package/.next/types/app/api/model/provider/route.ts +1 -1
  608. package/.next/types/app/api/model/route.ts +1 -1
  609. package/.next/types/app/api/model/test/route.ts +1 -1
  610. package/.next/types/app/api/oauth/callback/route.ts +1 -1
  611. package/.next/types/app/api/oauth/initiate/route.ts +1 -1
  612. package/.next/types/app/api/oauth/reset/route.ts +1 -1
  613. package/.next/types/app/api/packages/build/route.ts +1 -1
  614. package/.next/types/app/api/packages/derive-secrets/route.ts +1 -1
  615. package/.next/types/app/api/packages/install/route.ts +1 -1
  616. package/.next/types/app/api/packages/install/status/route.ts +1 -1
  617. package/.next/types/app/api/packages/installed/route.ts +1 -1
  618. package/.next/types/app/api/packages/resolve/route.ts +1 -1
  619. package/.next/types/app/api/packages/scan-targets/route.ts +347 -0
  620. package/.next/types/app/api/packages/search/route.ts +347 -0
  621. package/.next/types/app/api/packages/uninstall/route.ts +1 -1
  622. package/.next/types/app/api/planned-executions/[id]/route.ts +1 -1
  623. package/.next/types/app/api/planned-executions/[id]/run/route.ts +1 -1
  624. package/.next/types/app/api/planned-executions/[id]/runs/route.ts +1 -1
  625. package/.next/types/app/api/planned-executions/preview-schedule/route.ts +1 -1
  626. package/.next/types/app/api/planned-executions/reconcile/route.ts +1 -1
  627. package/.next/types/app/api/planned-executions/route.ts +1 -1
  628. package/.next/types/app/api/registry/auth/resend/route.ts +1 -1
  629. package/.next/types/app/api/registry/auth/reset/route.ts +1 -1
  630. package/.next/types/app/api/registry/auth/route.ts +1 -1
  631. package/.next/types/app/api/registry/oauth/callback/route.ts +1 -1
  632. package/.next/types/app/api/registry/oauth/initiate/route.ts +1 -1
  633. package/.next/types/app/api/registry/publish/route.ts +1 -1
  634. package/.next/types/app/api/registry/settings/route.ts +1 -1
  635. package/.next/types/app/api/restore/route.ts +1 -1
  636. package/.next/types/app/api/runs/active/route.ts +1 -1
  637. package/.next/types/app/api/storage/route.ts +1 -1
  638. package/.next/types/app/api/update/route.ts +1 -1
  639. package/.next/types/app/api/waves/route.ts +1 -1
  640. package/.next/types/app/api/webhooks/[id]/route.ts +1 -1
  641. package/.next/types/app/chat/page.ts +1 -1
  642. package/.next/types/app/docs/page.ts +1 -1
  643. package/.next/types/app/executions/page.ts +1 -1
  644. package/.next/types/app/flows/page.ts +1 -1
  645. package/.next/types/app/layout.ts +1 -1
  646. package/.next/types/app/mcp/page.ts +1 -1
  647. package/.next/types/app/mcp-flows/route.ts +1 -1
  648. package/.next/types/app/mcp-proxy/[server]/route.ts +1 -1
  649. package/.next/types/app/models/page.ts +1 -1
  650. package/.next/types/app/packages/page.ts +1 -1
  651. package/.next/types/app/page.ts +1 -1
  652. package/.next/types/app/settings/page.ts +1 -1
  653. package/.next/types/app/v1/chat/completions/route.ts +1 -1
  654. package/.next/types/app/v1/chat/conversations/[conversationId]/breakpoints/route.ts +1 -1
  655. package/.next/types/app/v1/chat/conversations/[conversationId]/cancel/route.ts +1 -1
  656. package/.next/types/app/v1/chat/conversations/[conversationId]/debug/continue/route.ts +1 -1
  657. package/.next/types/app/v1/chat/conversations/[conversationId]/debug/step/route.ts +1 -1
  658. package/.next/types/app/v1/chat/conversations/[conversationId]/edit-state/route.ts +1 -1
  659. package/.next/types/app/v1/chat/conversations/[conversationId]/events/route.ts +1 -1
  660. package/.next/types/app/v1/chat/conversations/[conversationId]/inject/route.ts +347 -0
  661. package/.next/types/app/v1/chat/conversations/[conversationId]/resources/route.ts +1 -1
  662. package/.next/types/app/v1/chat/conversations/[conversationId]/respond/route.ts +1 -1
  663. package/.next/types/app/v1/chat/conversations/[conversationId]/route.ts +1 -1
  664. package/.next/types/app/v1/chat/conversations/route.ts +1 -1
  665. package/.next/types/app/v1/chat/events/route.ts +1 -1
  666. package/.next/types/app/v1/models/route.ts +1 -1
  667. package/.next/types/app/waves/page.ts +1 -1
  668. package/.next/types/routes.d.ts +4 -1
  669. package/.next/types/validator.ts +27 -0
  670. package/README.md +6 -1
  671. package/bin/flujo.mjs +120 -120
  672. package/next.config.mjs +139 -139
  673. package/package.json +2 -1
  674. package/scripts/launch-next.mjs +112 -112
  675. package/.next/server/chunks/1083.js +0 -2
  676. package/.next/server/chunks/1197.js +0 -2
  677. package/.next/server/chunks/1373.js +0 -1
  678. package/.next/server/chunks/1604.js +0 -70
  679. package/.next/server/chunks/1659.js +0 -1
  680. package/.next/server/chunks/1819.js +0 -2
  681. package/.next/server/chunks/2434.js +0 -2
  682. package/.next/server/chunks/2666.js +0 -1
  683. package/.next/server/chunks/2940.js +0 -46
  684. package/.next/server/chunks/2985.js +0 -1
  685. package/.next/server/chunks/3273.js +0 -1
  686. package/.next/server/chunks/3304.js +0 -1
  687. package/.next/server/chunks/346.js +0 -1
  688. package/.next/server/chunks/3648.js +0 -1
  689. package/.next/server/chunks/38.js +0 -2
  690. package/.next/server/chunks/3951.js +0 -151
  691. package/.next/server/chunks/4042.js +0 -1
  692. package/.next/server/chunks/4239.js +0 -1
  693. package/.next/server/chunks/4426.js +0 -6
  694. package/.next/server/chunks/4661.js +0 -1
  695. package/.next/server/chunks/4765.js +0 -1
  696. package/.next/server/chunks/5148.js +0 -1
  697. package/.next/server/chunks/5471.js +0 -1
  698. package/.next/server/chunks/5958.js +0 -2
  699. package/.next/server/chunks/6005.js +0 -1
  700. package/.next/server/chunks/6126.js +0 -53
  701. package/.next/server/chunks/6849.js +0 -66
  702. package/.next/server/chunks/7214.js +0 -6
  703. package/.next/server/chunks/724.js +0 -27
  704. package/.next/server/chunks/7463.js +0 -6
  705. package/.next/server/chunks/7538.js +0 -21
  706. package/.next/server/chunks/8339.js +0 -1
  707. package/.next/server/chunks/8522.js +0 -2
  708. package/.next/server/chunks/8572.js +0 -1
  709. package/.next/server/chunks/8667.js +0 -1
  710. package/.next/server/chunks/869.js +0 -2
  711. package/.next/server/chunks/8979.js +0 -37
  712. package/.next/server/chunks/8994.js +0 -2
  713. package/.next/server/chunks/9165.js +0 -1
  714. package/.next/server/chunks/9387.js +0 -15
  715. package/.next/server/chunks/9400.js +0 -2
  716. package/.next/server/chunks/9472.js +0 -2
  717. package/.next/server/chunks/9583.js +0 -1
  718. package/.next/server/chunks/991.js +0 -2
  719. package/.next/static/Q6ITx_bZyoEOnKdZu_C7j/_buildManifest.js +0 -1
  720. package/.next/static/chunks/1594-309fa6363f215d76.js +0 -1
  721. package/.next/static/chunks/1809-e56cf3c476261e34.js +0 -1
  722. package/.next/static/chunks/1937-6bbdcdc660db562c.js +0 -1
  723. package/.next/static/chunks/1988-1b651d581fc44a36.js +0 -1
  724. package/.next/static/chunks/2164-7d6451e88a447de7.js +0 -1
  725. package/.next/static/chunks/218-6cbe09820faa3272.js +0 -1
  726. package/.next/static/chunks/2566-60acd5838abd9f3f.js +0 -1
  727. package/.next/static/chunks/2800-4fa29a3eeb693593.js +0 -1
  728. package/.next/static/chunks/289-98f50bfcf833d661.js +0 -1
  729. package/.next/static/chunks/3089.9e15df4ffd0fe4e8.js +0 -1
  730. package/.next/static/chunks/3418-a2f5d0c4f29ee2fb.js +0 -1
  731. package/.next/static/chunks/3556-b9855146c7506696.js +0 -1
  732. package/.next/static/chunks/3948-1cb8fc7a64805254.js +0 -1
  733. package/.next/static/chunks/3958-5641a828b320f2fe.js +0 -100
  734. package/.next/static/chunks/5328-4e556503b70e72b4.js +0 -1
  735. package/.next/static/chunks/5512.682bef7fd3a7c286.js +0 -1
  736. package/.next/static/chunks/6195-8c4c57628e9013d5.js +0 -1
  737. package/.next/static/chunks/6669-a949326b30ea1d39.js +0 -1
  738. package/.next/static/chunks/6777-4b0d05731a089de4.js +0 -1
  739. package/.next/static/chunks/6947-0ff3545efb53e959.js +0 -1
  740. package/.next/static/chunks/7304-e7cd725083617b81.js +0 -8
  741. package/.next/static/chunks/7445-2802e158c9093556.js +0 -1
  742. package/.next/static/chunks/795-704a0e742ecc2ef6.js +0 -1
  743. package/.next/static/chunks/812-3ceea0da38ad2891.js +0 -1
  744. package/.next/static/chunks/8551-a28272acfda62ac9.js +0 -1
  745. package/.next/static/chunks/8855-02889c9ab4bf0bcf.js +0 -1
  746. package/.next/static/chunks/9554-cb5bd72cb40e8dbe.js +0 -1
  747. package/.next/static/chunks/9562-ef0ddd4e6b9023cf.js +0 -1
  748. package/.next/static/chunks/app/_not-found/page-81dc485d60f94046.js +0 -1
  749. package/.next/static/chunks/app/api/approvals/[id]/route-c745e5b53b81491a.js +0 -1
  750. package/.next/static/chunks/app/api/approvals/route-c745e5b53b81491a.js +0 -1
  751. package/.next/static/chunks/app/api/backup/route-c745e5b53b81491a.js +0 -1
  752. package/.next/static/chunks/app/api/browse/route-c745e5b53b81491a.js +0 -1
  753. package/.next/static/chunks/app/api/bugs/enhance/route-c745e5b53b81491a.js +0 -1
  754. package/.next/static/chunks/app/api/cwd/route-c745e5b53b81491a.js +0 -1
  755. package/.next/static/chunks/app/api/encryption/secure/route-c745e5b53b81491a.js +0 -1
  756. package/.next/static/chunks/app/api/env/route-c745e5b53b81491a.js +0 -1
  757. package/.next/static/chunks/app/api/flow/[id]/route-c745e5b53b81491a.js +0 -1
  758. package/.next/static/chunks/app/api/flow/[id]/versions/[versionId]/route-c745e5b53b81491a.js +0 -1
  759. package/.next/static/chunks/app/api/flow/[id]/versions/route-c745e5b53b81491a.js +0 -1
  760. package/.next/static/chunks/app/api/flow/compile/route-c745e5b53b81491a.js +0 -1
  761. package/.next/static/chunks/app/api/flow/generate/route-c745e5b53b81491a.js +0 -1
  762. package/.next/static/chunks/app/api/flow/improve/route-c745e5b53b81491a.js +0 -1
  763. package/.next/static/chunks/app/api/flow/prompt-renderer/route-c745e5b53b81491a.js +0 -1
  764. package/.next/static/chunks/app/api/flow/quick-chat/route-c745e5b53b81491a.js +0 -1
  765. package/.next/static/chunks/app/api/flow/repair/route-c745e5b53b81491a.js +0 -1
  766. package/.next/static/chunks/app/api/flow/route-c745e5b53b81491a.js +0 -1
  767. package/.next/static/chunks/app/api/git/route-c745e5b53b81491a.js +0 -1
  768. package/.next/static/chunks/app/api/init/route-c745e5b53b81491a.js +0 -1
  769. package/.next/static/chunks/app/api/local-models/capability/route-c745e5b53b81491a.js +0 -1
  770. package/.next/static/chunks/app/api/local-models/pull/route-c745e5b53b81491a.js +0 -1
  771. package/.next/static/chunks/app/api/local-models/suggest/route-c745e5b53b81491a.js +0 -1
  772. package/.next/static/chunks/app/api/mcp/app-sandbox/route-c745e5b53b81491a.js +0 -1
  773. package/.next/static/chunks/app/api/mcp/cancel/route-c745e5b53b81491a.js +0 -1
  774. package/.next/static/chunks/app/api/mcp/oauth-capability/route-c745e5b53b81491a.js +0 -1
  775. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-c745e5b53b81491a.js +0 -1
  776. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-c745e5b53b81491a.js +0 -1
  777. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-c745e5b53b81491a.js +0 -1
  778. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-c745e5b53b81491a.js +0 -1
  779. package/.next/static/chunks/app/api/mcp/servers/[name]/route-c745e5b53b81491a.js +0 -1
  780. package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-c745e5b53b81491a.js +0 -1
  781. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-c745e5b53b81491a.js +0 -1
  782. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-c745e5b53b81491a.js +0 -1
  783. package/.next/static/chunks/app/api/mcp/servers/route-c745e5b53b81491a.js +0 -1
  784. package/.next/static/chunks/app/api/mcp/test-connection/route-c745e5b53b81491a.js +0 -1
  785. package/.next/static/chunks/app/api/mcp/test-connection/stream/route-c745e5b53b81491a.js +0 -1
  786. package/.next/static/chunks/app/api/mcp-registry/route-c745e5b53b81491a.js +0 -1
  787. package/.next/static/chunks/app/api/mcp-registry/spotlight/route-c745e5b53b81491a.js +0 -1
  788. package/.next/static/chunks/app/api/model/[id]/route-c745e5b53b81491a.js +0 -1
  789. package/.next/static/chunks/app/api/model/provider/route-c745e5b53b81491a.js +0 -1
  790. package/.next/static/chunks/app/api/model/route-c745e5b53b81491a.js +0 -1
  791. package/.next/static/chunks/app/api/model/test/route-c745e5b53b81491a.js +0 -1
  792. package/.next/static/chunks/app/api/oauth/callback/route-c745e5b53b81491a.js +0 -1
  793. package/.next/static/chunks/app/api/oauth/initiate/route-c745e5b53b81491a.js +0 -1
  794. package/.next/static/chunks/app/api/oauth/reset/route-c745e5b53b81491a.js +0 -1
  795. package/.next/static/chunks/app/api/packages/build/route-c745e5b53b81491a.js +0 -1
  796. package/.next/static/chunks/app/api/packages/derive-secrets/route-c745e5b53b81491a.js +0 -1
  797. package/.next/static/chunks/app/api/packages/install/route-c745e5b53b81491a.js +0 -1
  798. package/.next/static/chunks/app/api/packages/install/status/route-c745e5b53b81491a.js +0 -1
  799. package/.next/static/chunks/app/api/packages/installed/route-c745e5b53b81491a.js +0 -1
  800. package/.next/static/chunks/app/api/packages/resolve/route-c745e5b53b81491a.js +0 -1
  801. package/.next/static/chunks/app/api/packages/uninstall/route-c745e5b53b81491a.js +0 -1
  802. package/.next/static/chunks/app/api/planned-executions/[id]/route-c745e5b53b81491a.js +0 -1
  803. package/.next/static/chunks/app/api/planned-executions/[id]/run/route-c745e5b53b81491a.js +0 -1
  804. package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-c745e5b53b81491a.js +0 -1
  805. package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-c745e5b53b81491a.js +0 -1
  806. package/.next/static/chunks/app/api/planned-executions/reconcile/route-c745e5b53b81491a.js +0 -1
  807. package/.next/static/chunks/app/api/planned-executions/route-c745e5b53b81491a.js +0 -1
  808. package/.next/static/chunks/app/api/registry/auth/resend/route-c745e5b53b81491a.js +0 -1
  809. package/.next/static/chunks/app/api/registry/auth/reset/route-c745e5b53b81491a.js +0 -1
  810. package/.next/static/chunks/app/api/registry/auth/route-c745e5b53b81491a.js +0 -1
  811. package/.next/static/chunks/app/api/registry/oauth/callback/route-c745e5b53b81491a.js +0 -1
  812. package/.next/static/chunks/app/api/registry/oauth/initiate/route-c745e5b53b81491a.js +0 -1
  813. package/.next/static/chunks/app/api/registry/publish/route-c745e5b53b81491a.js +0 -1
  814. package/.next/static/chunks/app/api/registry/settings/route-c745e5b53b81491a.js +0 -1
  815. package/.next/static/chunks/app/api/restore/route-c745e5b53b81491a.js +0 -1
  816. package/.next/static/chunks/app/api/runs/active/route-c745e5b53b81491a.js +0 -1
  817. package/.next/static/chunks/app/api/storage/route-c745e5b53b81491a.js +0 -1
  818. package/.next/static/chunks/app/api/update/route-c745e5b53b81491a.js +0 -1
  819. package/.next/static/chunks/app/api/waves/route-c745e5b53b81491a.js +0 -1
  820. package/.next/static/chunks/app/api/webhooks/[id]/route-c745e5b53b81491a.js +0 -1
  821. package/.next/static/chunks/app/chat/page-c39160ddf90bbae9.js +0 -1
  822. package/.next/static/chunks/app/executions/page-10d09f36de30939f.js +0 -1
  823. package/.next/static/chunks/app/flows/page-0d8fb471adfc2981.js +0 -1
  824. package/.next/static/chunks/app/layout-eea7078d7553c21a.js +0 -1
  825. package/.next/static/chunks/app/mcp/page-8ad71bf5801bfe5f.js +0 -1
  826. package/.next/static/chunks/app/mcp-flows/route-c745e5b53b81491a.js +0 -1
  827. package/.next/static/chunks/app/mcp-proxy/[server]/route-c745e5b53b81491a.js +0 -1
  828. package/.next/static/chunks/app/models/page-17e8e6668f92f58d.js +0 -1
  829. package/.next/static/chunks/app/packages/page-9f61751e98134f3d.js +0 -1
  830. package/.next/static/chunks/app/page-d3ea90b065b95d1e.js +0 -1
  831. package/.next/static/chunks/app/settings/page-afbf8790e99fecaf.js +0 -1
  832. package/.next/static/chunks/app/v1/chat/completions/route-c745e5b53b81491a.js +0 -1
  833. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-c745e5b53b81491a.js +0 -1
  834. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-c745e5b53b81491a.js +0 -1
  835. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-c745e5b53b81491a.js +0 -1
  836. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-c745e5b53b81491a.js +0 -1
  837. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-c745e5b53b81491a.js +0 -1
  838. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-c745e5b53b81491a.js +0 -1
  839. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/resources/route-c745e5b53b81491a.js +0 -1
  840. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-c745e5b53b81491a.js +0 -1
  841. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-c745e5b53b81491a.js +0 -1
  842. package/.next/static/chunks/app/v1/chat/conversations/route-c745e5b53b81491a.js +0 -1
  843. package/.next/static/chunks/app/v1/chat/events/route-c745e5b53b81491a.js +0 -1
  844. package/.next/static/chunks/app/v1/models/route-c745e5b53b81491a.js +0 -1
  845. package/.next/static/chunks/app/waves/page-97ad6b51c9cae4b3.js +0 -1
  846. package/.next/static/chunks/webpack-0d4a4e773990ac44.js +0 -1
  847. package/.next/static/css/40f9bef305b11bf5.css +0 -1
  848. /package/.next/static/{Q6ITx_bZyoEOnKdZu_C7j → A9jP2ydtYbqx-IayWP2Sg}/_ssgManifest.js +0 -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(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}
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(6034),c.e(7821),c.e(5096),c.e(544),c.e(1925)]).then(c.bind(c,60453)).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(6034),c.e(7821),c.e(5096),c.e(544),c.e(1925)]).then(c.bind(c,60453)),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(6034),c.e(7821),c.e(5096),c.e(544),c.e(4671),c.e(6226),c.e(4306)]).then(c.bind(c,16226)),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":"capped"===b.status?"capped":"error",triggerSummary:g.summary,outputText:this.truncateOutput(b.outputText),usage:b.usage,error:"completed"===b.status||"capped"===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)}},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}}},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,2 @@
1
+ "use strict";exports.id=4961,exports.ids=[4961],exports.modules={13516:(a,b,c)=>{c.d(b,{G:()=>d});let d={LOG_LEVEL:3,INCLUDE_TOOL_CALLS_IN_RESPONSE:!0,ENABLE_EXECUTION_TRACKER:!1}},50846:(a,b,c)=>{c.d(b,{h:()=>i});var d=c(13516);let e={VERBOSE:-1,DEBUG:0,INFO:1,WARN:2,ERROR:3},f="number"==typeof d.G.LOG_LEVEL?d.G.LOG_LEVEL:e.ERROR;function g(a,b=0){if(b>6)return String(a);if(!(a instanceof Error))return a;let c={name:a.name,message:a.message};for(let d of Object.getOwnPropertyNames(a)){if("name"===d||"message"===d)continue;let e=a[d];"function"!=typeof e&&("stack"===d?c.stack=e:"cause"===d?c.cause=g(e,b+1):"errors"===d&&Array.isArray(e)?c.errors=e.map(a=>g(a,b+1)):c[d]=e)}return c}function h(a,b,c,d,h){if(a>=("number"==typeof h?h:f)){if("function"==typeof d)try{d=d()}catch{d="[lazy log data threw]"}let f=new Date().toISOString(),h=`[${f}] [${b}]`,i=`${h} ${c}`;if(void 0!==d)if(d instanceof Error||"object"==typeof d)try{let a=d instanceof Error?g(d):d,b=JSON.stringify(a,(a,b)=>b instanceof Error?g(b):b,2);i+=`:
2
+ ${b}`}catch(a){i+=": [Object cannot be stringified]"}else i+=`: ${d}`;switch(a){case e.VERBOSE:console.debug(`[VERBOSE] ${i}`);break;case e.DEBUG:console.debug(i);break;case e.INFO:console.info(i);break;case e.WARN:console.warn(i);break;case e.ERROR:console.error(i);break;default:console.log(i)}}}function i(a,b){let c,d=((c=a.replace(/^src\//,"")).startsWith("/")&&(c=c.substring(1)),c);return{verbose:(a,c)=>{h(e.VERBOSE,d,a,c,b)},debug:(a,c)=>{h(e.DEBUG,d,a,c,b)},info:(a,c)=>{h(e.INFO,d,a,c,b)},warn:(a,c)=>{h(e.WARN,d,a,c,b)},error:(a,c)=>{h(e.ERROR,d,a,c,b)}}}},63281:(a,b,c)=>{c.d(b,{g:()=>g});var d=c(2117);let e=(0,c(19815).h)("frontend/services/flow/index");class f{async loadFlows(){e.debug("loadFlows: Entering method");try{if(this.flowsCache)return e.debug("loadFlows: Using cached flows",{count:this.flowsCache.length}),this.flowsCache;let a=await fetch("/api/flow");if(!a.ok){let b=await a.json();throw Error(b.error||"Failed to load flows")}let b=await a.json();return e.debug("loadFlows: Loaded flows from API",{count:b.length}),this.flowsCache=b,b}catch(a){return e.warn("loadFlows: Failed to load flows:",a),[]}}async getFlow(a){e.debug("getFlow: Entering method",{flowId:a});try{if(this.flowsCache){let b=this.flowsCache.find(b=>b.id===a);if(b)return e.debug("getFlow: Using cached flow",{flowId:a}),b}let b=await fetch(`/api/flow/${encodeURIComponent(a)}`);if(!b.ok){if(404===b.status)return e.debug(`getFlow: Flow ${a} not found`),null;let c=await b.json();throw Error(c.error||`Failed to get flow: ${a}`)}let c=await b.json();return e.debug("getFlow: Retrieved flow from API",{flowId:a}),c}catch(b){return e.warn(`getFlow: Failed to get flow ${a}:`,b),null}}async addFlow(a){e.debug("addFlow: Entering method",{flowId:a.id,flowName:a.name,nodeCount:a.nodes.length,edgeCount:a.edges.length});try{let b=await fetch("/api/flow",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});if(!b.ok){let a=await b.json();return{success:!1,error:a.error||"Failed to add flow"}}let c=await b.json();return this.flowsCache&&this.flowsCache.push(c),e.debug("addFlow: Flow added successfully",{flowId:a.id}),{success:!0}}catch(a){return e.warn("addFlow: Failed to add flow:",a),{success:!1,error:a instanceof Error?a.message:"Failed to add flow"}}}async generateFlow(a,b,c){e.debug("generateFlow: Entering method",{modelId:b,allowInstall:c?.allowInstall,allowSubflows:c?.allowSubflows,maxDepth:c?.maxDepth});try{let d=await fetch("/api/flow/generate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({description:a,modelId:b,allowInstall:c?.allowInstall===!0,allowSubflows:c?.allowSubflows===!0,..."number"==typeof c?.maxDepth?{maxDepth:c.maxDepth}:{}})}),f=await d.json().catch(()=>null);if(!d.ok)return{success:!1,error:f?.error||"Failed to generate flow"};let g=Array.isArray(f.flows)&&f.flows.length>0?f.flows:[{flow:f.flow,validation:f.validation}];return e.debug("generateFlow: Draft generated",{flowId:f.flow?.id,flowCount:g.length,attempts:f.attempts,errorCount:f.validation?.errorCount,installedServers:f.installedServers?.length??0}),{success:!0,flow:f.flow,validation:f.validation,flows:g,rootFlowId:f.rootFlowId??f.flow?.id,attempts:f.attempts,installedServers:f.installedServers??[]}}catch(a){return e.warn("generateFlow: Failed to generate flow:",a),{success:!1,error:a instanceof Error?a.message:"Failed to generate flow"}}}async improveFlow(a,b,c,d){e.debug("improveFlow: Entering method",{flowId:a?.id,modelId:c,allowInstall:d?.allowInstall});try{let f=await fetch("/api/flow/improve",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({flow:a,description:b,modelId:c,allowInstall:d?.allowInstall===!0})}),g=await f.json().catch(()=>null);if(!f.ok)return{success:!1,error:g?.error||"Failed to improve flow"};return e.debug("improveFlow: Draft revised",{flowId:g.flow?.id,attempts:g.attempts,errorCount:g.validation?.errorCount,installedServers:g.installedServers?.length??0}),{success:!0,flow:g.flow,validation:g.validation,attempts:g.attempts,installedServers:g.installedServers??[]}}catch(a){return e.warn("improveFlow: Failed to improve flow:",a),{success:!1,error:a instanceof Error?a.message:"Failed to improve flow"}}}async updateFlow(a){e.debug("updateFlow: Entering method",{flowId:a.id,flowName:a.name,nodeCount:a.nodes.length,edgeCount:a.edges.length});try{let b=await fetch(`/api/flow/${encodeURIComponent(a.id)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});if(!b.ok){let a=await b.json();return{success:!1,error:a.error||"Failed to update flow"}}let c=await b.json();if(this.flowsCache){let b=this.flowsCache.findIndex(b=>b.id===a.id);b>=0?this.flowsCache[b]=c:this.flowsCache.push(c)}return e.debug("updateFlow: Flow updated successfully",{flowId:a.id}),{success:!0}}catch(a){return e.warn("updateFlow: Failed to update flow:",a),{success:!1,error:a instanceof Error?a.message:"Failed to update flow"}}}async deleteFlow(a){e.debug("deleteFlow: Entering method",{flowId:a});try{let b=await fetch(`/api/flow/${encodeURIComponent(a)}`,{method:"DELETE"});if(!b.ok){let a=await b.json();return{success:!1,error:a.error||"Failed to delete flow"}}return this.flowsCache&&(this.flowsCache=this.flowsCache.filter(b=>b.id!==a)),e.debug("deleteFlow: Flow deleted successfully",{flowId:a}),{success:!0}}catch(a){return e.warn("deleteFlow: Failed to delete flow:",a),{success:!1,error:a instanceof Error?a.message:"Failed to delete flow"}}}async listFlowVersions(a){e.debug("listFlowVersions: Entering method",{flowId:a});try{let b=await fetch(`/api/flow/${encodeURIComponent(a)}/versions`);if(!b.ok){let a=await b.json().catch(()=>null);throw Error(a?.error||"Failed to list flow versions")}let c=await b.json();return Array.isArray(c.versions)?c.versions:[]}catch(b){return e.warn(`listFlowVersions: Failed for flow ${a}:`,b),[]}}async getFlowVersion(a,b){e.debug("getFlowVersion: Entering method",{flowId:a,versionId:b});try{let c=await fetch(`/api/flow/${encodeURIComponent(a)}/versions/${encodeURIComponent(b)}`);if(!c.ok){if(404===c.status)return null;let a=await c.json().catch(()=>null);throw Error(a?.error||"Failed to get flow version")}return await c.json()}catch(c){return e.warn(`getFlowVersion: Failed for ${a}/${b}:`,c),null}}createNode(a,b){return e.debug("createNode: Entering method",{type:a,position:b}),{id:(0,d.A)(),type:a,position:b,data:{label:`${"mcp"===a?"MCP":a.charAt(0).toUpperCase()+a.slice(1)} Node`,type:a,properties:{}}}}createStartNode(){return{id:(0,d.A)(),type:"start",position:{x:250,y:150},data:{label:"Start Node",type:"start",properties:{promptTemplate:""}}}}createNewFlow(a="NewFlow"){e.debug("createNewFlow: Entering method",{name:a});let b=Date.now();return{id:(0,d.A)(),name:a,createdAt:b,updatedAt:b,nodes:[this.createStartNode()],edges:[]}}createHistoryEntry(a,b){return e.debug("createHistoryEntry: Entering method"),{nodes:[...a],edges:[...b]}}generateSampleFlow(a="Sample Flow"){return e.debug("generateSampleFlow: Entering method",{name:a}),{id:(0,d.A)(),name:a,nodes:[{id:"1",type:"start",position:{x:250,y:50},data:{label:"Start Node",type:"start",properties:{prompt:"Enter your query here",systemMessage:"You are a helpful assistant",temperature:0}}},{id:"2",type:"process",position:{x:250,y:200},data:{label:"Process Node",type:"process",properties:{operation:"transform",enabled:!0}}},{id:"3",type:"finish",position:{x:250,y:350},data:{label:"Finish Node",type:"finish",properties:{format:"json",template:'{ "result": {{data}} }'}}},{id:"4",type:"mcp",position:{x:450,y:200},data:{label:"MCP Node",type:"mcp",properties:{channels:2,mode:"parallel"}}}],edges:[{id:"e1-2",source:"1",target:"2",type:"custom"},{id:"e2-3",source:"2",target:"3",type:"custom"}]}}constructor(){this.flowsCache=null}}let g=new f},63654:(a,b,c)=>{c.d(b,{P:()=>f});let d=(0,c(19815).h)("frontend/services/plannedExecutions");class e{async list(){try{let a=await fetch("/api/planned-executions");if(!a.ok)throw Error(`HTTP ${a.status}`);return await a.json()}catch(a){return d.warn("Failed to list planned executions",a),{paused:!1,executions:[]}}}async create(a){try{let b=await fetch("/api/planned-executions",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)}),c=await b.json();if(!b.ok)return{success:!1,error:c?.error||`HTTP ${b.status}`};return{success:!0,execution:c.execution}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Request failed"}}}async update(a,b){try{let c=await fetch(`/api/planned-executions/${a}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(b)}),d=await c.json();if(!c.ok)return{success:!1,error:d?.error||`HTTP ${c.status}`};return{success:!0,execution:d.execution}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Request failed"}}}async delete(a){try{let b=await fetch(`/api/planned-executions/${a}`,{method:"DELETE"});if(!b.ok){let a=await b.json().catch(()=>null);return{success:!1,error:a?.error||`HTTP ${b.status}`}}return{success:!0}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Request failed"}}}async setPaused(a){try{let b=await fetch("/api/planned-executions",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({paused:a})});if(!b.ok){let a=await b.json().catch(()=>null);return{success:!1,error:a?.error||`HTTP ${b.status}`}}return{success:!0}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Request failed"}}}async runNow(a){try{let b=await fetch(`/api/planned-executions/${a}/run`,{method:"POST"}),c=await b.json();if(!b.ok)return{success:!1,error:c?.error||`HTTP ${b.status}`};return{success:!0,record:c.record}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Request failed"}}}async loadRuns(a){try{let b=await fetch(`/api/planned-executions/${a}/runs`);if(!b.ok)throw Error(`HTTP ${b.status}`);let c=await b.json();return Array.isArray(c?.runs)?c.runs:[]}catch(b){return d.warn(`Failed to load runs for ${a}`,b),[]}}async previewSchedule(a,b){try{let c=await fetch("/api/planned-executions/preview-schedule",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({cron:a,timezone:b})});if(!c.ok)throw Error(`HTTP ${c.status}`);return await c.json()}catch(a){return{valid:!1,error:a instanceof Error?a.message:"Preview failed",nextRuns:[]}}}}let f=new e}};
@@ -0,0 +1,53 @@
1
+ "use strict";exports.id=5040,exports.ids=[1925,3629,4306,5040,6793,9174],exports.modules={1925:(a,b,c)=>{c.d(b,{Hm:()=>f,xc:()=>e});let d=["key","secret","token","password"],e=a=>d.some(b=>a.toLowerCase().includes(b)),f=a=>e(a)||"authorization"===a.trim().toLowerCase()},5248:(a,b,c)=>{c.d(b,{P:()=>m,p:()=>k});var d=c(32524),e=c(81226);function f(a){return!!a&&a.includes("mcp")}function g(a){return!!a&&a.includes("resource")}let h=a=>({source:`${a}-bottom`,target:`${a}-top`});function i(a,b){let c=a.filter(a=>"mcp"!==a.type&&"resource"!==a.type&&"string"==typeof a.id),d=new Map(c.map(a=>[a.id,a])),e=new Map,i=new Map,j=new Set;for(let a of c)e.set(a.id,0),i.set(a.id,0);let k=(a,b)=>{j.add(`${a}->${b}`),i.set(a,(i.get(a)??0)+1),e.set(b,(e.get(b)??0)+1)};for(let a of b)d.has(a.from)&&d.has(a.to)&&a.from!==a.to&&(k(a.from,a.to),a.bidirectional&&k(a.to,a.from));let l=[];for(let a of[...c].sort((a,b)=>a.y-b.y||a.x-b.x)){let b=l[l.length-1];b&&70>=Math.abs(a.y-b[0].y)?b.push(a):l.push([a])}let m=new Map;l.forEach((a,b)=>a.forEach(a=>m.set(a.id,b)));let n=new Map;for(let a=1;a<l.length;a++){let b=l[a],c=b.filter(a=>"subflow"===a.type);if(c.length>=2&&c.length===b.length){let b=l[a-1];if(1===b.length&&"process"===b[0].type)for(let a of c)n.set(a.id,b[0].id)}}let o=[],p=(a,b)=>{if(a===b||j.has(`${a}->${b}`))return!1;let c=d.get(a),e=d.get(b);return!(!c||!e||null!==function(a,b,c,d){if("trigger"===a&&"start"===c)return b&&"trigger-bottom"!==b?"Trigger nodes must connect via their bottom handle":d&&"start-top"!==d?"Trigger nodes must connect to the top handle of the Start node":null;if("trigger"===c)return"Trigger nodes cannot have incoming connections";if("trigger"===a&&"start"!==c)return"Trigger nodes can only connect to the Start node";if("start"===c)return"Start nodes cannot have incoming connections";if("finish"===a)return"Finish nodes cannot have outgoing connections";if("mcp"===a||"mcp"===c||f(b)||f(d))return("mcp"!==a||"process"!==c)&&("process"!==a||"mcp"!==c)?"MCP connections must link an MCP node to a Process node via MCP handles":"process"!==a||f(b)?null:"Connect MCP nodes from the Process node's left/right MCP handles";if("resource"===a||"resource"===c||g(b)||g(d)){if(("resource"!==a||"process"!==c)&&("process"!==a||"resource"!==c))return"Resource connections must link a Resource node to a Process node via resource handles";if("process"===a&&!g(b))return"Connect Resource nodes from the Process node's left/right resource handles"}return null}(c.type,h(c.type).source,e.type,h(e.type).target)||"subflow"===c.type&&(i.get(a)??0)>=1)},q=(a,b,c,d)=>{o.push({from:a,to:b,bidirectional:c,reason:d}),k(a,b),c&&k(b,a)},r=a=>{let b=m.get(a.id)??0;for(let c=b-1;c>=0;c--){let b=l[c].filter(b=>b.id!==a.id&&"finish"!==b.type&&!n.has(b.id));if(0!==b.length){if(1===b.length)return b[0];return b.reduce((b,c)=>Math.abs(c.x-a.x)<Math.abs(b.x-a.x)?c:b)}}return null};for(let a of l)for(let b of a){if("start"===b.type||(e.get(b.id)??0)>0)continue;let a=n.get(b.id);if(a){p(a,b.id)&&q(a,b.id,!0,"auto-bidirectional-subflow");continue}let c=r(b);c&&p(c.id,b.id)&&q(c.id,b.id,!1,"auto-connected")}let s=c.filter(a=>"start"===a.type),t=()=>c.filter(a=>"start"!==a.type&&"finish"!==a.type&&!n.has(a.id)&&(e.get(a.id)??0)===0),u=null;if(0===s.length){let a=t();if(a.length>0)u={targets:a.map(a=>a.id)};else{let a=c.filter(a=>"finish"!==a.type).sort((a,b)=>a.y-b.y)[0];a&&(u={targets:[a.id]})}}else{let a=s[0];for(let b of t())p(a.id,b.id)&&q(a.id,b.id,!1,"auto-connected")}let v=c.filter(a=>"finish"===a.type),w=()=>c.filter(a=>"start"!==a.type&&"finish"!==a.type&&!n.has(a.id)&&(i.get(a.id)??0)===0),x=null;if(0===v.length){let a=w();a.length>0&&(x={sources:a.map(a=>a.id)})}else{let a=v[0];for(let b of w())p(b.id,a.id)&&q(b.id,a.id,!1,"auto-connected")}return{addEdges:o,addStart:u,addFinish:x}}function j(a,b){if(!b.has(a))return a;for(let c=2;;c++){let d=`${a}_${c}`;if(!b.has(d))return d}}function k(a){let b=[];return{spec:function a(b,c){let d=Array.isArray(b?.nodes)?b.nodes.map(a=>({...a})):[],e=Array.isArray(b?.edges)?b.edges.map(a=>({...a})):[];for(let b of d)b?.type==="subflow"&&b.subflowSpec&&(b.subflowSpec=a(b.subflowSpec,c));let f=d.filter(a=>a&&"string"==typeof a.key&&!!a.key&&"mcp"!==a.type);if(0===f.length)return{...b,nodes:d,edges:e};let g=i(f.map((a,b)=>({id:a.key,type:a.type,x:0,y:1e3*b})),e.filter(a=>a&&"string"==typeof a.from&&"string"==typeof a.to).map(a=>({from:a.from,to:a.to,bidirectional:!0===a.bidirectional})));for(let a of g.addEdges)e.push({from:a.from,to:a.to,...a.bidirectional?{bidirectional:!0}:{}}),c.push({code:a.reason,message:n(a.reason),nodeId:a.to});let h=new Set(d.map(a=>a.key).filter(Boolean));if(g.addStart){let a=j("start",h);for(let b of(h.add(a),d.unshift({key:a,type:"start"}),g.addStart.targets))e.push({from:a,to:b});c.push({code:"auto-added-start",message:`Added a Start node connected to ${g.addStart.targets.length} entry step(s).`})}if(g.addFinish){let a=j("finish",h);for(let b of(h.add(a),d.push({key:a,type:"finish"}),g.addFinish.sources))e.push({from:b,to:a});c.push({code:"auto-added-finish",message:`Added a Finish node connected from ${g.addFinish.sources.length} final step(s).`})}return{...b,nodes:d,edges:e}}(a,b),changes:b}}function l(a){return a.data?.type??a.type??"unknown"}function m(a){var b,c;let f=(a?.nodes??[]).map(a=>({...a,position:{...a.position??{x:0,y:0}},data:{...a.data}})),g=[...a?.edges??[]],h={...a,nodes:f,edges:g},j=[],k=i(f.filter(a=>"mcp"!==l(a)&&"resource"!==l(a)).map(a=>({id:a.id,type:l(a),x:a.position?.x??0,y:a.position?.y??0})),g.filter(a=>!function(a){let b=a.data?.edgeType;return"mcp"===b||"resource"===b}(a)).map(a=>({from:a.source,to:a.target,bidirectional:a.data?.bidirectional===!0}))),m=new Map(f.map(a=>[a.id,a])),o=(a,b,c)=>{let d=m.get(a),f=m.get(b);d&&f&&g.push((0,e.pX)(d,f,c))};for(let a of k.addEdges)o(a.from,a.to,a.bidirectional),j.push({code:a.reason,message:n(a.reason),nodeId:a.to});if(k.addStart){let a=k.addStart.targets.map(a=>m.get(a)).filter(Boolean).reduce((a,b)=>!a||b.position.y<a.position.y?b:a,null),c=(b={x:a?.position.x??250,y:(a?.position.y??150)-150},{id:(0,d.A)(),type:"start",position:b,data:{label:"Start Node",type:"start",properties:{promptTemplate:""}}});for(let a of(f.unshift(c),m.set(c.id,c),k.addStart.targets))o(c.id,a,!1);j.push({code:"auto-added-start",message:`Added a Start node connected to ${k.addStart.targets.length} entry step(s).`,nodeId:c.id})}if(k.addFinish){let a=k.addFinish.sources.map(a=>m.get(a)).filter(Boolean).reduce((a,b)=>!a||b.position.y>a.position.y?b:a,null),b=(c={x:a?.position.x??250,y:(a?.position.y??0)+150},{id:(0,d.A)(),type:"finish",position:c,data:{label:"Finish Node",type:"finish",properties:{}}});for(let a of(f.push(b),m.set(b.id,b),k.addFinish.sources))o(a,b.id,!1);j.push({code:"auto-added-finish",message:`Added a Finish node connected from ${k.addFinish.sources.length} final step(s).`,nodeId:b.id})}return{flow:h,changes:j}}function n(a){switch(a){case"auto-connected":return"Connected a disconnected step into the flow.";case"auto-bidirectional-subflow":return"Wired a parallel subflow with a two-way handoff to its orchestrator.";case"auto-added-start":return"Added a Start node.";case"auto-added-finish":return"Added a Finish node."}}},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}},71994:(a,b,c)=>{c.d(b,{GN:()=>B,Xg:()=>C,UC:()=>D});var d=c(50846),e=c(20433),f=c(75512),g=c(46496),h=c(81226),i=c(84671),j=c(5248),k=c(88185),l=c(14265),m=c(1905),n=c(33233),o=c(9312),p=c(41527);let q=["prompt","isolatedPrompt","payloadTemplate"];function r(a){return RegExp("\\$\\{var:\\s*"+a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")+"\\s*\\}","g")}function s(a,b){for(let c of q){let d=a[c];"string"==typeof d&&(a[c]=b(d))}Array.isArray(a.spawnBriefs)&&(a.spawnBriefs=a.spawnBriefs.map(a=>"string"==typeof a?b(a):a))}function t(a){return a.replace(/[ \t]{2,}/g," ").replace(/[ \t]+([.,;:!?])/g,"$1").replace(/[ \t]+\n/g,"\n")}let u=(0,d.h)("backend/services/flow/generateFlow");function v(a,b,c,d){let e=c?`MULTI-LEVEL FLOWS — you MAY design subflows that are themselves brand-new flows:
2
+ - A subflow node normally references an EXISTING flow via "flow". To instead create a NEW child flow, use ONE of these on the subflow node (not "flow"):
3
+ - "subflowSpec": an inline nested FlowSpec (you author the whole child now), or
4
+ - "generateSubflow": a short natural-language description of the child — FLUJO will generate that child flow for you.
5
+ - Nest only when a self-contained sub-task genuinely deserves its own flow. Nesting is bounded: at most ${d} level(s) deep and ${h.lk} flows total. Keep it minimal.`:`SUBFLOWS: a subflow node's "flow" must reference an EXISTING flow (by name or id). Do NOT use "subflowSpec" or "generateSubflow" — multi-level generation is off for this run.`,f=b?`CAPABILITY ACQUISITION — you are allowed to EXPAND this FLUJO instance:
6
+ - If the task needs a capability none of the configured servers provides (voice, vision, browsing, email, code execution, …), use search_mcp_marketplace to find a server for it, then install_mcp_server to install the best match. Prefer servers that need no API keys (empty requiredEnv); if the best option needs keys, install a keyless alternative or note the requirement in the flow description.
7
+ - After a successful install, reference the returned server name in a process node's "servers" list and enable the tools it reported.
8
+ - Be ambitious: an actual capability (real audio, real browsing, real files) beats a text approximation. Search with several short terms ("voice", "tts", "speech") — the registry matches server NAMES only.`:`CAPABILITY DISCOVERY — you may search but NOT install:
9
+ - If the task needs a capability none of the configured servers provides, you may use search_mcp_marketplace to see what exists. Do NOT reference unconfigured servers in the spec; instead mention the recommended server (its registry name) in the flow "description" so the user can install it.`;return`You design workflows for FLUJO, an MCP-first workflow builder. The user describes what they want; you emit a flow specification as JSON.
10
+
11
+ OUTPUT FORMAT — when you are done (after any tool use), respond with ONLY one JSON object, no prose, no code fences.
12
+
13
+ ${k.R}
14
+
15
+ GENERATED-FLOW DEFAULTS (context saving): process nodes you leave without an explicit inputMode/outputMode are compiled with inputMode "latest-message" and outputMode "latest-message" — each step sees only the current task and later steps see only its final response, not its tool calls/results. When a step genuinely needs the whole conversation or later steps need its intermediate work, set "full-history" / "full-conversation" explicitly.
16
+
17
+ GENERATED-FLOW DATA-FLOW POLICY (IMPORTANT — carry data through the conversation, NOT scratchpad variables):
18
+ 1. PREFER CONVERSATION HISTORY. For a later step to use an earlier step's output, keep that output in the thread: give the earlier (producer) step outputMode "full-conversation" (or leave "latest-message" when only its final text matters) and give the later (consumer) step inputMode "full-history" so it actually sees the producer's turn. This is the default, robust way to move data forward.
19
+ 2. DO NOT emit \${var:NAME} in generated prompts. The scratchpad variable feature (captureVariable + \${var:NAME}) is a valid HAND-AUTHORING tool, but for AUTO-GENERATED flows it is a footgun: a missing/late capture silently bakes an EMPTY string into the reading step's prompt and breaks the run. Do not use \${var:NAME} just to shuttle ordinary text one step forward — use history (rule 1).
20
+ 3. WHEN HISTORY IS INSUFFICIENT (the consumer is "isolated"/"latest-message" and still needs an earlier step's data, or the artifact is large/structured/binary), use a RUN RESOURCE instead of a scratchpad variable: the producer step sets "captureResource": "NAME" and the consumer step injects \${res:NAME} in its prompt. A run resource survives isolated/latest-message scoping and is tracked with lineage. Example:
21
+ { "key": "writer", "type": "process", "model": "...", "prompt": "Draft the full report.", "captureResource": "report" }
22
+ { "key": "critic", "type": "process", "model": "...", "inputMode": "isolated", "isolatedPrompt": "Critique this report:
23
+
24
+ \${res:report}" }
25
+ (edge writer -> critic). Use \${res:NAME}, never \${var:NAME}, in generated flows.
26
+ 4. Any \${var:NAME} you emit anyway will be automatically rewritten to history or a run resource (or removed if nothing captures it), so emit history/\${res:...} directly to keep control of the design.
27
+
28
+ ${f}
29
+
30
+ ${e}
31
+
32
+ ${a}`}function w(a){return a.map(a=>`- [${a.severity}] ${a.message}`).join("\n")}function x(a){let b=[{type:"function",function:{name:"search_mcp_marketplace",description:'Search the public MCP server registry. The registry matches the query against server NAMES only (substring), so use short single terms ("voice", "tts", "browser") and try several. Returns name, description, whether FLUJO can install it, and which env vars/keys it requires.',parameters:{type:"object",properties:{query:{type:"string",description:"Short search term matched against server names."}},required:["query"]}}}];return a&&b.push({type:"function",function:{name:"install_mcp_server",description:"Install an MCP server from the registry (by the exact name returned by search) and connect it. Returns the server name to reference in the spec and the tools it provides — or needsEnv when required keys are missing (then pick an alternative or note it for the user). Installing can take a while (package download).",parameters:{type:"object",properties:{name:{type:"string",description:'Exact registry name from search results, e.g. "ai.keenable/web-search".'}},required:["name"]}}}),b}async function y(a,b,c,d){if("search_mcp_marketplace"===a){let a="string"==typeof b.query?b.query:"";try{return await (0,l.e3)(a)}catch(a){return{error:`Registry search failed: ${a instanceof Error?a.message:String(a)}`}}}if("install_mcp_server"===a){if(!c)return{error:"Installing is not allowed in this generation (allowInstall is off)."};let a="string"==typeof b.name?b.name:"",e=await (0,l.aM)(a,void 0,{resolveOnly:!0}),f=await (0,m.Ej)(),g=(0,n.e5)({caller:"generator",settings:f,registryName:a,allowInstall:c});e.plan&&await (0,m.NB)((0,n.UM)(e.plan,"generator",g,!1));let h=await (0,l.aM)(a);return h.plan&&await (0,m.NB)((0,n.UM)(h.plan,"generator",g,h.installed,h.error)),h.installed&&h.serverName&&(d.contextDirty=!0,d.installedServers.push({name:h.serverName,tools:(h.tools??[]).map(a=>a.name),...h.alreadyExisted?{alreadyExisted:!0}:{},...h.plan?.command?{command:h.plan.command}:{},...h.plan?.args?{args:h.plan.args}:{},...h.plan?.verificationStatus?{verificationStatus:h.plan.verificationStatus}:{}})),h}return{error:`Unknown tool: ${a}`}}async function z(a,b,c,d,e,f,h){let i={};for(let a of e){if("function"!==a.type)continue;let b=a.function.name;i[b]=a=>y(b,a,f,h)}for(let j=0;j<=8;j++){let k=e.length>0&&j<8,{completion:l}=await a.createCompletion({model:b,apiKey:c,messages:d,temperature:0,maxTokens:(0,g.normalizeMaxTokens)(b.maxTokens),...k?{tools:e,localToolExecutors:i}:{}}),m=l.choices?.[0]?.message,n=m?.tool_calls??[];if(0===n.length)return"string"==typeof m?.content?m.content:"";for(let a of(d.push({role:"assistant",content:m?.content??null,tool_calls:n}),n)){if("function"!==a.type)continue;let b={};try{b=JSON.parse(a.function.arguments||"{}")}catch{}u.info(`Generator tool call: ${a.function.name}(${a.function.arguments})`);let c=await y(a.function.name,b,f,h);d.push({role:"tool",tool_call_id:a.id,content:JSON.stringify(c)})}7===j&&d.push({role:"user",content:"Tool budget exhausted. Emit the COMPLETE flow specification now as a single JSON object using what you have."})}return""}function A(a){let b=a.indexOf("{");if(-1===b)return null;let c=0,d=!1,e=!1;for(let f=b;f<a.length;f++){let g=a[f];if(d){e?e=!1:"\\"===g?e=!0:'"'===g&&(d=!1);continue}if('"'===g)d=!0;else if("{"===g)c++;else if("}"===g&&0==--c)try{return JSON.parse(a.slice(b,f+1))}catch{break}}return null}async function B(a){var b;let c="string"==typeof a?.description?a.description.trim():"";if(!c)return{success:!1,error:"A flow description is required",statusCode:400};if(!a?.modelId||"string"!=typeof a.modelId)return{success:!1,error:"A generator model id is required",statusCode:400};let d=!0===a.allowInstall,g=!0===a.allowSubflows,k=g?"number"!=typeof(b=a.maxDepth)||Number.isNaN(b)?2:Math.max(0,Math.min(h.A_,Math.floor(b))):0,l=await e.modelService.getModel(a.modelId);if(!l)return{success:!1,error:`Generator model not found: ${a.modelId}`,statusCode:404};let m=await e.modelService.resolveAndDecryptApiKey(l.ApiKey)||("codex-cli"!==l.adapter||l.ApiKey?.trim()?null:"");if(null===m)return{success:!1,error:"Could not resolve the generator model API key",statusCode:500};let n=await (0,o.jY)(),y=(0,f.getCompletionAdapter)(l),B=x(d),C={installedServers:[],contextDirty:!1},D=Math.min("number"==typeof a.maxRepairs&&a.maxRepairs>=0?a.maxRepairs:1,2),E=1;async function F(a,b){let c,e=[{role:"system",content:v(n.catalog,d,g&&b<k,k)},{role:"user",content:a}];try{c=await z(y,l,m,e,B,d,C)}catch(a){return u.warn("A child subflow generation call failed; leaving the subflow unresolved",a),null}let f=A(c);return f&&"object"==typeof f?f:null}async function G(a,b){if(a&&Array.isArray(a.nodes))for(let c of a.nodes){if(c?.type!=="subflow"||c.flow)continue;if(c.subflowSpec){await G(c.subflowSpec,b+1);continue}let a="string"==typeof c.generateSubflow?c.generateSubflow.trim():"";if(!a)continue;if(b+1>k||E>=h.lk){u.info(`Not expanding generateSubflow (depth ${b+1}, ${E} flows so far): budget/depth reached`);continue}let d=await F(a,b+1);d?(E++,c.subflowSpec=d,delete c.generateSubflow,await G(d,b+1)):delete c.generateSubflow}}let H=[{role:"system",content:v(n.catalog,d,g,k)},{role:"user",content:c}],I=null,J=0;for(let a=0;a<=D;a++){let b;J++,E=1;try{b=await z(y,l,m,H,B,d,C)}catch(a){if(u.error("Generator model call failed",a),I)break;return{success:!1,error:`The generator model call failed: ${a instanceof Error?a.message:String(a)}`,statusCode:502}}let c=A(b);if(!c){if(u.warn(`Attempt ${J}: model output contained no parseable JSON object`),C.contextDirty){try{n=await (0,o.jY)()}catch(a){u.warn("Re-gathering context after install failed; keeping the stale catalog",a)}C.contextDirty=!1}H.push({role:"assistant",content:b},{role:"user",content:"Your reply contained no parseable JSON object. Re-emit the COMPLETE flow specification as a single JSON object and nothing else."});continue}if(g)try{await G(c,0)}catch(a){u.warn("Subflow expansion failed; compiling the root spec as-is",a)}if(C.contextDirty){try{n=await (0,o.jY)()}catch(a){u.warn("Re-gathering context after install failed; validating with the stale catalog",a)}C.contextDirty=!1}let e=[];try{let a=function(a){let b=[];try{!function a(b,c){if(b&&Array.isArray(b.nodes)){for(let d of(!function(a,b){let c=Array.isArray(a?.nodes)?a.nodes.filter(a=>a&&"string"==typeof a.key):[];if(0===c.length)return;let d=Array.isArray(a?.edges)?a.edges:[],e=new Map;for(let a of c)e.set(a.key,new Set);for(let a of d)a&&"string"==typeof a.from&&"string"==typeof a.to&&(e.has(a.to)&&e.get(a.to).add(a.from),a.bidirectional&&e.has(a.from)&&e.get(a.from).add(a.to));let f=a=>{let b=new Set,c=[...e.get(a)??[]];for(;c.length;){let d=c.pop();if(!b.has(d)&&d!==a)for(let a of(b.add(d),e.get(d)??[]))c.push(a)}return b},g=new Set;for(let a of c)"string"==typeof a.parallelFlowsVariable&&a.parallelFlowsVariable.trim()&&g.add(a.parallelFlowsVariable.trim());let h=new Map;for(let a of c){let b="string"==typeof a.captureVariable?a.captureVariable.trim():"";b&&(h.has(b)||h.set(b,[]),h.get(b).push(a))}let i=new Map;for(let a of c)for(let b of function(a){let b=new Set;for(let c of q){let d=a[c];if("string"==typeof d)for(let a of(0,p.T9)(d))b.add(a)}if(Array.isArray(a.spawnBriefs)){for(let c of a.spawnBriefs)if("string"==typeof c)for(let a of(0,p.T9)(c))b.add(a)}return[...b]}(a))i.has(b)||i.set(b,[]),i.get(b).push(a);for(let[a,d]of i){if(g.has(a))continue;let e=h.get(a)??[],i=d.filter(a=>{let b=f(a.key);return e.some(c=>c.key!==a.key&&b.has(c.key))});if(0===i.length){let d=r(a);for(let a of c)s(a,a=>t(a.replace(d,"")));b.push({code:"var-dangling",message:`Removed \${var:${a}} — no earlier step captures it (it would resolve to an empty string at run time).`});continue}if(i.some(a=>"isolated"===a.inputMode)){if(e.some(b=>"string"==typeof b.captureResource&&b.captureResource.trim()&&b.captureResource.trim()!==a))continue;for(let b of e)b.captureResource=a,delete b.captureVariable;let d=r(a);for(let b of c)s(b,b=>b.replace(d,"${res:"+a+"}"));b.push({code:"var-resource",message:`Converted scratchpad \${var:${a}} to a tracked run resource \${res:${a}} (a consumer is isolated, so conversation history cannot carry it).`});continue}let j=r(a);for(let a of c)s(a,a=>t(a.replace(j,"")));for(let a of i)a.inputMode="full-history";for(let b of e)b.captureVariable===a&&delete b.captureVariable;b.push({code:"var-history",message:`Removed scratchpad \${var:${a}} and set the reading step(s) to full-history so the value flows through the conversation instead.`})}}(b,c),b.nodes))if(d&&(d.subflowSpec&&a(d.subflowSpec,c),Array.isArray(d.parallelSubflowSpecs)))for(let b of d.parallelSubflowSpecs)a(b,c)}}(a,b)}catch{}return{spec:a,changes:b}}(c);a.changes.length>0&&(u.info(`Attempt ${J}: scratchpad-var guard rewrote ${a.changes.length} reference(s)`),e=a.changes.map(a=>({severity:"warning",code:a.code,message:a.message})))}catch(a){u.warn("Scratchpad-var guard failed; compiling the spec as-is",a)}let f=c,v=[];try{let a=(0,j.p)(c);a.changes.length>0&&(f=a.spec,v=a.changes,u.info(`Attempt ${J}: auto-repair adjusted the spec (${v.length} change(s))`))}catch(a){u.warn("Auto-repair of the generated spec failed; compiling the spec as-is",a)}let x=v.map(a=>({severity:"warning",code:a.code,message:a.message})),F=(0,h.dM)(f,n.compile,{maxDepth:k,maxFlows:h.lk});if(!F.flow){H.push({role:"assistant",content:b},{role:"user",content:`The specification could not be compiled:
33
+ ${w(F.issues)}
34
+ Fix these problems and re-emit the COMPLETE corrected JSON (only the JSON).`});continue}for(let a of F.flows)(0,h.Zn)(a);let K=F.flows.map(a=>({flow:a,validation:(0,i.nC)(a,{models:n.compile.models,servers:n.validatorServers,serverTools:n.compile.serverTools})})),L=(0,o.RB)([...e,...x,...F.issues],{issues:K.flatMap(a=>a.validation.issues),errorCount:0,warningCount:0,isRunnable:!0});if(I={flows:K,rootFlow:F.flow,validation:L},0===L.errorCount)break;u.info(`Attempt ${J}: bundle has ${L.errorCount} error(s)`+(a<D?"; asking the model to repair":"; repair budget exhausted")),a<D&&H.push({role:"assistant",content:b},{role:"user",content:`The flow you specified has these problems:
35
+ ${w(L.issues)}
36
+ Fix the errors (warnings are advisory) and re-emit the COMPLETE corrected JSON (only the JSON).`})}return I?(u.info(`Generated draft bundle rooted at "${I.rootFlow.name}" (${I.flows.length} flow(s)) in ${J} attempt(s): ${I.validation.errorCount} error(s), ${I.validation.warningCount} warning(s), ${C.installedServers.length} server(s) installed`),{success:!0,flow:I.rootFlow,validation:I.validation,flows:I.flows,rootFlowId:I.rootFlow.id,attempts:J,installedServers:C.installedServers}):{success:!1,error:"The model did not produce a usable flow specification. Try rephrasing the description or a different generator model.",statusCode:422}}async function C(a){let b="string"==typeof a?.description?a.description.trim():"";if(!b)return{success:!1,error:"A change description is required",statusCode:400};if(!a?.modelId||"string"!=typeof a.modelId)return{success:!1,error:"A generator model id is required",statusCode:400};let c=a?.flow;if(!c||"object"!=typeof c||!Array.isArray(c.nodes)||!Array.isArray(c.edges))return{success:!1,error:"A valid flow to improve is required",statusCode:400};let d=await e.modelService.getModel(a.modelId);if(!d)return{success:!1,error:`Generator model not found: ${a.modelId}`,statusCode:404};let g=await e.modelService.resolveAndDecryptApiKey(d.ApiKey)||("codex-cli"!==d.adapter||d.ApiKey?.trim()?null:"");if(null===g)return{success:!1,error:"Could not resolve the generator model API key",statusCode:500};let j=!0===a.allowInstall,k=await (0,o.jY)(),l=(0,f.getCompletionAdapter)(d),m=x(j),n={installedServers:[],contextDirty:!1},p=Math.min("number"==typeof a.maxRepairs&&a.maxRepairs>=0?a.maxRepairs:1,2),q=(0,h.FH)(c),r={};for(let a of c.nodes)a?.id&&a.position&&"number"==typeof a.position.x&&"number"==typeof a.position.y&&(r[a.id]={x:a.position.x,y:a.position.y});let s=a=>({models:a.compile.models,servers:a.compile.servers,serverTools:a.compile.serverTools,flows:(a.compile.flows??[]).filter(a=>a.id!==c.id)}),t=`EXISTING FLOW (modify this — keep unchanged parts intact, and KEEP each node's "key" for any node you do NOT restructure so its canvas position is preserved):
37
+ ${JSON.stringify(q)}
38
+
39
+ CHANGE REQUEST:
40
+ ${b}
41
+
42
+ Re-emit the COMPLETE flow specification as a single JSON object (only the JSON), including the nodes you did not change.`,y=[{role:"system",content:v(k.catalog,j,!1,0)},{role:"user",content:t}],B=null,C=0;for(let a=0;a<=p;a++){let b;C++;try{b=await z(l,d,g,y,m,j,n)}catch(a){if(u.error("Improver model call failed",a),B)break;return{success:!1,error:`The generator model call failed: ${a instanceof Error?a.message:String(a)}`,statusCode:502}}if(n.contextDirty){try{k=await (0,o.jY)()}catch(a){u.warn("Re-gathering context after install failed; using the stale catalog",a)}n.contextDirty=!1}let e=A(b);if(!e){u.warn(`Improve attempt ${C}: model output contained no parseable JSON object`),y.push({role:"assistant",content:b},{role:"user",content:"Your reply contained no parseable JSON object. Re-emit the COMPLETE flow specification as a single JSON object and nothing else."});continue}let f=(0,h.dM)(e,s(k),{maxDepth:0,maxFlows:1,positions:r});if(!f.flow){y.push({role:"assistant",content:b},{role:"user",content:`The specification could not be compiled:
43
+ ${w(f.issues)}
44
+ Fix these problems and re-emit the COMPLETE corrected JSON (only the JSON).`});continue}f.flow.id=c.id,"string"==typeof e.name&&e.name.trim()||(f.flow.name=c.name),(0,h.Zn)(f.flow);let q=(0,i.nC)(f.flow,{models:k.compile.models,servers:k.validatorServers,serverTools:k.compile.serverTools}),t=(0,o.RB)(f.issues,q);if(B={flows:[{flow:f.flow,validation:q}],rootFlow:f.flow,validation:t},0===t.errorCount)break;u.info(`Improve attempt ${C}: flow has ${t.errorCount} error(s)`+(a<p?"; asking the model to repair":"; repair budget exhausted")),a<p&&y.push({role:"assistant",content:b},{role:"user",content:`The flow you specified has these problems:
45
+ ${w(t.issues)}
46
+ Fix the errors (warnings are advisory) and re-emit the COMPLETE corrected JSON (only the JSON).`})}return B?(u.info(`Improved draft "${B.rootFlow.name}" in ${C} attempt(s): ${B.validation.errorCount} error(s), ${B.validation.warningCount} warning(s), ${n.installedServers.length} server(s) installed`),{success:!0,flow:B.rootFlow,validation:B.validation,flows:B.flows,rootFlowId:B.rootFlow.id,attempts:C,installedServers:n.installedServers}):{success:!1,error:"The model did not produce a usable flow specification. Try rephrasing the change request or a different generator model.",statusCode:422}}async function D(a){let b=a?.flow;if(!b||"object"!=typeof b||!Array.isArray(b.nodes)||!Array.isArray(b.edges))return{success:!1,error:"A valid flow to repair is required",statusCode:400};if(!a?.modelId||"string"!=typeof a.modelId)return{success:!1,error:"A repair model id is required",statusCode:400};let c=(0,i.nC)(b),d=c.issues.length>0?`
47
+
48
+ Known problems to fix:
49
+ ${w(c.issues)}`:"";return C({flow:b,description:`Repair this flow's wiring so it is runnable, WITHOUT changing any node's prompt, model, or servers:
50
+ - add a Start node if one is missing, connected to the first step;
51
+ - add a Finish node if one is missing, connected from the last step;
52
+ - connect any disconnected process/subflow nodes.
53
+ Read node placement as intent: nodes stacked top-to-bottom are sequential steps, and nodes on the same horizontal line are parallel branches under a shared parent above them.${d}`,modelId:a.modelId,...void 0!==a.allowInstall?{allowInstall:a.allowInstall}:{},...void 0!==a.maxRepairs?{maxRepairs:a.maxRepairs}:{}})}}};
@@ -1 +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
+ "use strict";exports.id=5067,exports.ids=[5067],exports.modules={26961:(a,b,c)=>{c.r(b),c.d(b,{bigint:()=>i,boolean:()=>h,date:()=>j,number:()=>g,string:()=>f});var d=c(89901),e=c(10522);function f(a){return d.K_(e.ZodString,a)}function g(a){return d.qG(e.ZodNumber,a)}function h(a){return d.dN(e.ZodBoolean,a)}function i(a){return d.St(e.ZodBigInt,a)}function j(a){return d.B4(e.ZodDate,a)}},68780:(a,b,c)=>{c.d(b,{$9:()=>bE,Cs:()=>bP,Dn:()=>a1,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,UJ:()=>x,WK:()=>aX,WQ:()=>bO,WT:()=>a3,Yu:()=>aO,ZC:()=>Y,_r:()=>ab,a5:()=>ao,a8:()=>N,aE:()=>g,bZ:()=>s,b_:()=>bb,br:()=>a$,cL:()=>aK,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:()=>$,u$:()=>aW,u9:()=>bm,ve:()=>aF,vo:()=>z,w9:()=>aV,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.custom(a=>null!==a&&("object"==typeof a||"function"==typeof a)),l=e.union([e.string(),e.number().int()]),m=e.string();e.looseObject({ttl:e.number().optional(),pollInterval:e.number().optional()});let n=e.object({ttl:e.number().optional()}),o=e.object({taskId:e.string()}),p=e.looseObject({progressToken:l.optional(),[j]:o.optional()}),q=e.object({_meta:p.optional()}),r=q.extend({task:n.optional()}),s=a=>r.safeParse(a).success,t=e.object({method:e.string(),params:q.loose().optional()}),u=e.object({_meta:p.optional()}),v=e.object({method:e.string(),params:u.loose().optional()}),w=e.looseObject({_meta:p.optional()}),x=e.union([e.string(),e.number().int()]),y=e.object({jsonrpc:e.literal("2.0"),id:x,...t.shape}).strict(),z=a=>y.safeParse(a).success,A=e.object({jsonrpc:e.literal("2.0"),...v.shape}).strict(),B=a=>A.safeParse(a).success,C=e.object({jsonrpc:e.literal("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.object({jsonrpc:e.literal("2.0"),id:x.optional(),error:e.object({code:e.number().int(),message:e.string(),data:e.unknown().optional()})}).strict(),F=a=>E.safeParse(a).success,G=e.union([y,A,C,E]);e.union([C,E]);let H=w.strict(),I=u.extend({requestId:x.optional(),reason:e.string().optional()}),J=v.extend({method:e.literal("notifications/cancelled"),params:I}),K=e.object({src:e.string(),mimeType:e.string().optional(),sizes:e.array(e.string()).optional(),theme:e.enum(["light","dark"]).optional()}),L=e.object({icons:e.array(K).optional()}),M=e.object({name:e.string(),title:e.string().optional()}),N=M.extend({...M.shape,...L.shape,version:e.string(),websiteUrl:e.string().optional(),description:e.string().optional()}),O=e.intersection(e.object({applyDefaults:e.boolean().optional()}),e.record(e.string(),e.unknown())),P=e.preprocess(a=>a&&"object"==typeof a&&!Array.isArray(a)&&0===Object.keys(a).length?{form:{}}:a,e.intersection(e.object({form:O.optional(),url:k.optional()}),e.record(e.string(),e.unknown()).optional())),Q=e.looseObject({list:k.optional(),cancel:k.optional(),requests:e.looseObject({sampling:e.looseObject({createMessage:k.optional()}).optional(),elicitation:e.looseObject({create:k.optional()}).optional()}).optional()}),R=e.looseObject({list:k.optional(),cancel:k.optional(),requests:e.looseObject({tools:e.looseObject({call:k.optional()}).optional()}).optional()}),S=e.object({experimental:e.record(e.string(),k).optional(),sampling:e.object({context:k.optional(),tools:k.optional()}).optional(),elicitation:P.optional(),roots:e.object({listChanged:e.boolean().optional()}).optional(),tasks:Q.optional(),extensions:e.record(e.string(),k).optional()}),T=q.extend({protocolVersion:e.string(),capabilities:S,clientInfo:N}),U=t.extend({method:e.literal("initialize"),params:T}),V=a=>U.safeParse(a).success,W=e.object({experimental:e.record(e.string(),k).optional(),logging:k.optional(),completions:k.optional(),prompts:e.object({listChanged:e.boolean().optional()}).optional(),resources:e.object({subscribe:e.boolean().optional(),listChanged:e.boolean().optional()}).optional(),tools:e.object({listChanged:e.boolean().optional()}).optional(),tasks:R.optional(),extensions:e.record(e.string(),k).optional()}),X=w.extend({protocolVersion:e.string(),capabilities:W,serverInfo:N,instructions:e.string().optional()}),Y=v.extend({method:e.literal("notifications/initialized"),params:u.optional()}),Z=a=>Y.safeParse(a).success,$=t.extend({method:e.literal("ping"),params:q.optional()}),_=e.object({progress:e.number(),total:e.optional(e.number()),message:e.optional(e.string())}),aa=e.object({...u.shape,..._.shape,progressToken:l}),ab=v.extend({method:e.literal("notifications/progress"),params:aa}),ac=q.extend({cursor:m.optional()}),ad=t.extend({params:ac.optional()}),ae=w.extend({nextCursor:m.optional()}),af=e.enum(["working","input_required","completed","failed","cancelled"]),ag=e.object({taskId:e.string(),status:af,ttl:e.union([e.number(),e.null()]),createdAt:e.string(),lastUpdatedAt:e.string(),pollInterval:e.optional(e.number()),statusMessage:e.optional(e.string())}),ah=w.extend({task:ag}),ai=u.merge(ag),aj=v.extend({method:e.literal("notifications/tasks/status"),params:ai}),ak=t.extend({method:e.literal("tasks/get"),params:q.extend({taskId:e.string()})}),al=w.merge(ag),am=t.extend({method:e.literal("tasks/result"),params:q.extend({taskId:e.string()})});w.loose();let an=ad.extend({method:e.literal("tasks/list")}),ao=ae.extend({tasks:e.array(ag)}),ap=t.extend({method:e.literal("tasks/cancel"),params:q.extend({taskId:e.string()})}),aq=w.merge(ag),ar=e.object({uri:e.string(),mimeType:e.optional(e.string()),_meta:e.record(e.string(),e.unknown()).optional()}),as=ar.extend({text:e.string()}),at=e.string().refine(a=>{try{return atob(a),!0}catch{return!1}},{message:"Invalid Base64 string"}),au=ar.extend({blob:at}),av=e.enum(["user","assistant"]),aw=e.object({audience:e.array(av).optional(),priority:e.number().min(0).max(1).optional(),lastModified:f.datetime({offset:!0}).optional()}),ax=e.object({...M.shape,...L.shape,uri:e.string(),description:e.optional(e.string()),mimeType:e.optional(e.string()),size:e.optional(e.number()),annotations:aw.optional(),_meta:e.optional(e.looseObject({}))}),ay=e.object({...M.shape,...L.shape,uriTemplate:e.string(),description:e.optional(e.string()),mimeType:e.optional(e.string()),annotations:aw.optional(),_meta:e.optional(e.looseObject({}))}),az=ad.extend({method:e.literal("resources/list")}),aA=ae.extend({resources:e.array(ax)}),aB=ad.extend({method:e.literal("resources/templates/list")}),aC=ae.extend({resourceTemplates:e.array(ay)}),aD=q.extend({uri:e.string()}),aE=t.extend({method:e.literal("resources/read"),params:aD}),aF=w.extend({contents:e.array(e.union([as,au]))}),aG=v.extend({method:e.literal("notifications/resources/list_changed"),params:u.optional()}),aH=t.extend({method:e.literal("resources/subscribe"),params:aD}),aI=t.extend({method:e.literal("resources/unsubscribe"),params:aD}),aJ=u.extend({uri:e.string()}),aK=v.extend({method:e.literal("notifications/resources/updated"),params:aJ}),aL=e.object({name:e.string(),description:e.optional(e.string()),required:e.optional(e.boolean())}),aM=e.object({...M.shape,...L.shape,description:e.optional(e.string()),arguments:e.optional(e.array(aL)),_meta:e.optional(e.looseObject({}))}),aN=ad.extend({method:e.literal("prompts/list")}),aO=ae.extend({prompts:e.array(aM)}),aP=q.extend({name:e.string(),arguments:e.record(e.string(),e.string()).optional()}),aQ=t.extend({method:e.literal("prompts/get"),params:aP}),aR=e.object({type:e.literal("text"),text:e.string(),annotations:aw.optional(),_meta:e.record(e.string(),e.unknown()).optional()}),aS=e.object({type:e.literal("image"),data:at,mimeType:e.string(),annotations:aw.optional(),_meta:e.record(e.string(),e.unknown()).optional()}),aT=e.object({type:e.literal("audio"),data:at,mimeType:e.string(),annotations:aw.optional(),_meta:e.record(e.string(),e.unknown()).optional()}),aU=e.object({type:e.literal("tool_use"),name:e.string(),id:e.string(),input:e.record(e.string(),e.unknown()),_meta:e.record(e.string(),e.unknown()).optional()}),aV=e.object({type:e.literal("resource"),resource:e.union([as,au]),annotations:aw.optional(),_meta:e.record(e.string(),e.unknown()).optional()}),aW=ax.extend({type:e.literal("resource_link")}),aX=e.union([aR,aS,aT,aW,aV]),aY=e.object({role:av,content:aX}),aZ=w.extend({description:e.string().optional(),messages:e.array(aY)}),a$=v.extend({method:e.literal("notifications/prompts/list_changed"),params:u.optional()}),a_=e.object({title:e.string().optional(),readOnlyHint:e.boolean().optional(),destructiveHint:e.boolean().optional(),idempotentHint:e.boolean().optional(),openWorldHint:e.boolean().optional()}),a0=e.object({taskSupport:e.enum(["required","optional","forbidden"]).optional()}),a1=e.object({...M.shape,...L.shape,description:e.string().optional(),inputSchema:e.object({type:e.literal("object"),properties:e.record(e.string(),k).optional(),required:e.array(e.string()).optional()}).catchall(e.unknown()),outputSchema:e.object({type:e.literal("object"),properties:e.record(e.string(),k).optional(),required:e.array(e.string()).optional()}).catchall(e.unknown()).optional(),annotations:a_.optional(),execution:a0.optional(),_meta:e.record(e.string(),e.unknown()).optional()}),a2=ad.extend({method:e.literal("tools/list")}),a3=ae.extend({tools:e.array(a1)}),a4=w.extend({content:e.array(aX).default([]),structuredContent:e.record(e.string(),e.unknown()).optional(),isError:e.boolean().optional()});a4.or(w.extend({toolResult:e.unknown()}));let a5=r.extend({name:e.string(),arguments:e.record(e.string(),e.unknown()).optional()}),a6=t.extend({method:e.literal("tools/call"),params:a5}),a7=v.extend({method:e.literal("notifications/tools/list_changed"),params:u.optional()}),a8=e.object({autoRefresh:e.boolean().default(!0),debounceMs:e.number().int().nonnegative().default(300)}),a9=e.enum(["debug","info","notice","warning","error","critical","alert","emergency"]),ba=q.extend({level:a9}),bb=t.extend({method:e.literal("logging/setLevel"),params:ba}),bc=u.extend({level:a9,logger:e.string().optional(),data:e.unknown()}),bd=v.extend({method:e.literal("notifications/message"),params:bc}),be=e.object({name:e.string().optional()}),bf=e.object({hints:e.array(be).optional(),costPriority:e.number().min(0).max(1).optional(),speedPriority:e.number().min(0).max(1).optional(),intelligencePriority:e.number().min(0).max(1).optional()}),bg=e.object({mode:e.enum(["auto","required","none"]).optional()}),bh=e.object({type:e.literal("tool_result"),toolUseId:e.string().describe("The unique identifier for the corresponding tool call."),content:e.array(aX).default([]),structuredContent:e.object({}).loose().optional(),isError:e.boolean().optional(),_meta:e.record(e.string(),e.unknown()).optional()}),bi=e.discriminatedUnion("type",[aR,aS,aT]),bj=e.discriminatedUnion("type",[aR,aS,aT,aU,bh]),bk=e.object({role:av,content:e.union([bj,e.array(bj)]),_meta:e.record(e.string(),e.unknown()).optional()}),bl=r.extend({messages:e.array(bk),modelPreferences:bf.optional(),systemPrompt:e.string().optional(),includeContext:e.enum(["none","thisServer","allServers"]).optional(),temperature:e.number().optional(),maxTokens:e.number().int(),stopSequences:e.array(e.string()).optional(),metadata:k.optional(),tools:e.array(a1).optional(),toolChoice:bg.optional()}),bm=t.extend({method:e.literal("sampling/createMessage"),params:bl}),bn=w.extend({model:e.string(),stopReason:e.optional(e.enum(["endTurn","stopSequence","maxTokens"]).or(e.string())),role:av,content:bi}),bo=w.extend({model:e.string(),stopReason:e.optional(e.enum(["endTurn","stopSequence","maxTokens","toolUse"]).or(e.string())),role:av,content:e.union([bj,e.array(bj)])}),bp=e.object({type:e.literal("boolean"),title:e.string().optional(),description:e.string().optional(),default:e.boolean().optional()}),bq=e.object({type:e.literal("string"),title:e.string().optional(),description:e.string().optional(),minLength:e.number().optional(),maxLength:e.number().optional(),format:e.enum(["email","uri","date","date-time"]).optional(),default:e.string().optional()}),br=e.object({type:e.enum(["number","integer"]),title:e.string().optional(),description:e.string().optional(),minimum:e.number().optional(),maximum:e.number().optional(),default:e.number().optional()}),bs=e.object({type:e.literal("string"),title:e.string().optional(),description:e.string().optional(),enum:e.array(e.string()),default:e.string().optional()}),bt=e.object({type:e.literal("string"),title:e.string().optional(),description:e.string().optional(),oneOf:e.array(e.object({const:e.string(),title:e.string()})),default:e.string().optional()}),bu=e.object({type:e.literal("string"),title:e.string().optional(),description:e.string().optional(),enum:e.array(e.string()),enumNames:e.array(e.string()).optional(),default:e.string().optional()}),bv=e.union([bs,bt]),bw=e.object({type:e.literal("array"),title:e.string().optional(),description:e.string().optional(),minItems:e.number().optional(),maxItems:e.number().optional(),items:e.object({type:e.literal("string"),enum:e.array(e.string())}),default:e.array(e.string()).optional()}),bx=e.object({type:e.literal("array"),title:e.string().optional(),description:e.string().optional(),minItems:e.number().optional(),maxItems:e.number().optional(),items:e.object({anyOf:e.array(e.object({const:e.string(),title:e.string()}))}),default:e.array(e.string()).optional()}),by=e.union([bw,bx]),bz=e.union([bu,bv,by]),bA=e.union([bz,bp,bq,br]),bB=r.extend({mode:e.literal("form").optional(),message:e.string(),requestedSchema:e.object({type:e.literal("object"),properties:e.record(e.string(),bA),required:e.array(e.string()).optional()})}),bC=r.extend({mode:e.literal("url"),message:e.string(),elicitationId:e.string(),url:e.string().url()}),bD=e.union([bB,bC]),bE=t.extend({method:e.literal("elicitation/create"),params:bD}),bF=u.extend({elicitationId:e.string()}),bG=v.extend({method:e.literal("notifications/elicitation/complete"),params:bF}),bH=w.extend({action:e.enum(["accept","decline","cancel"]),content:e.preprocess(a=>null===a?void 0:a,e.record(e.string(),e.union([e.string(),e.number(),e.boolean(),e.array(e.string())])).optional())}),bI=e.object({type:e.literal("ref/resource"),uri:e.string()}),bJ=e.object({type:e.literal("ref/prompt"),name:e.string()}),bK=q.extend({ref:e.union([bJ,bI]),argument:e.object({name:e.string(),value:e.string()}),context:e.object({arguments:e.record(e.string(),e.string()).optional()}).optional()}),bL=t.extend({method:e.literal("completion/complete"),params:bK}),bM=w.extend({completion:e.looseObject({values:e.array(e.string()).max(100),total:e.optional(e.number().int()),hasMore:e.optional(e.boolean())})}),bN=e.object({uri:e.string().startsWith("file://"),name:e.string().optional(),_meta:e.record(e.string(),e.unknown()).optional()}),bO=t.extend({method:e.literal("roots/list"),params:q.optional()}),bP=w.extend({roots:e.array(bN)}),bQ=v.extend({method:e.literal("notifications/roots/list_changed"),params:u.optional()});e.union([$,U,bL,bb,aQ,aN,az,aB,aE,aH,aI,a6,a2,ak,am,an,ap]),e.union([J,ab,Y,bQ,aj]),e.union([H,bn,bo,bH,bP,al,ao,ah]),e.union([$,bm,bE,bO,ak,am,an,ap]),e.union([J,ab,bd,aK,aG,a7,a$,aj,bG]),e.union([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)=>{c.d(b,{eq:()=>f,kY:()=>d,pJ:()=>g,si:()=>h});var d,e=c(30902);let f={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"};function g(a){e.$W({customError:a})}function h(){return e.$W().customError}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.url().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.looseObject({resource:f.string().url(),authorization_servers:f.array(j).optional(),jwks_uri:f.string().url().optional(),scopes_supported:f.array(f.string()).optional(),bearer_methods_supported:f.array(f.string()).optional(),resource_signing_alg_values_supported:f.array(f.string()).optional(),resource_name:f.string().optional(),resource_documentation:f.string().optional(),resource_policy_uri:f.string().url().optional(),resource_tos_uri:f.string().url().optional(),tls_client_certificate_bound_access_tokens:f.boolean().optional(),authorization_details_types_supported:f.array(f.string()).optional(),dpop_signing_alg_values_supported:f.array(f.string()).optional(),dpop_bound_access_tokens_required:f.boolean().optional()}),l=f.looseObject({issuer:f.string(),authorization_endpoint:j,token_endpoint:j,registration_endpoint:j.optional(),scopes_supported:f.array(f.string()).optional(),response_types_supported:f.array(f.string()),response_modes_supported:f.array(f.string()).optional(),grant_types_supported:f.array(f.string()).optional(),token_endpoint_auth_methods_supported:f.array(f.string()).optional(),token_endpoint_auth_signing_alg_values_supported:f.array(f.string()).optional(),service_documentation:j.optional(),revocation_endpoint:j.optional(),revocation_endpoint_auth_methods_supported:f.array(f.string()).optional(),revocation_endpoint_auth_signing_alg_values_supported:f.array(f.string()).optional(),introspection_endpoint:f.string().optional(),introspection_endpoint_auth_methods_supported:f.array(f.string()).optional(),introspection_endpoint_auth_signing_alg_values_supported:f.array(f.string()).optional(),code_challenge_methods_supported:f.array(f.string()).optional(),client_id_metadata_document_supported:f.boolean().optional()}),m=f.looseObject({issuer:f.string(),authorization_endpoint:j,token_endpoint:j,userinfo_endpoint:j.optional(),jwks_uri:j,registration_endpoint:j.optional(),scopes_supported:f.array(f.string()).optional(),response_types_supported:f.array(f.string()),response_modes_supported:f.array(f.string()).optional(),grant_types_supported:f.array(f.string()).optional(),acr_values_supported:f.array(f.string()).optional(),subject_types_supported:f.array(f.string()),id_token_signing_alg_values_supported:f.array(f.string()),id_token_encryption_alg_values_supported:f.array(f.string()).optional(),id_token_encryption_enc_values_supported:f.array(f.string()).optional(),userinfo_signing_alg_values_supported:f.array(f.string()).optional(),userinfo_encryption_alg_values_supported:f.array(f.string()).optional(),userinfo_encryption_enc_values_supported:f.array(f.string()).optional(),request_object_signing_alg_values_supported:f.array(f.string()).optional(),request_object_encryption_alg_values_supported:f.array(f.string()).optional(),request_object_encryption_enc_values_supported:f.array(f.string()).optional(),token_endpoint_auth_methods_supported:f.array(f.string()).optional(),token_endpoint_auth_signing_alg_values_supported:f.array(f.string()).optional(),display_values_supported:f.array(f.string()).optional(),claim_types_supported:f.array(f.string()).optional(),claims_supported:f.array(f.string()).optional(),service_documentation:f.string().optional(),claims_locales_supported:f.array(f.string()).optional(),ui_locales_supported:f.array(f.string()).optional(),claims_parameter_supported:f.boolean().optional(),request_parameter_supported:f.boolean().optional(),request_uri_parameter_supported:f.boolean().optional(),require_request_uri_registration:f.boolean().optional(),op_policy_uri:j.optional(),op_tos_uri:j.optional(),client_id_metadata_document_supported:f.boolean().optional()}),n=f.object({...m.shape,...l.pick({code_challenge_methods_supported:!0}).shape}),o=f.object({access_token:f.string(),id_token:f.string().optional(),token_type:f.string(),expires_in:i.number().optional(),scope:f.string().optional(),refresh_token:f.string().optional()}).strip(),p=f.object({error:f.string(),error_description:f.string().optional(),error_uri:f.string().optional()}),q=j.optional().or(f.literal("").transform(()=>void 0)),r=f.object({redirect_uris:f.array(j),token_endpoint_auth_method:f.string().optional(),grant_types:f.array(f.string()).optional(),response_types:f.array(f.string()).optional(),client_name:f.string().optional(),client_uri:j.optional(),logo_uri:q,scope:f.string().optional(),contacts:f.array(f.string()).optional(),tos_uri:q,policy_uri:f.string().optional(),jwks_uri:j.optional(),jwks:f.any().optional(),software_id:f.string().optional(),software_version:f.string().optional(),software_statement:f.string().optional()}).strip(),s=f.object({client_id:f.string(),client_secret:f.string().optional(),client_id_issued_at:f.number().optional(),client_secret_expires_at:f.number().optional()}).strip(),t=r.merge(s);f.object({error:f.string(),error_description:f.string().optional()}).strip(),f.object({token:f.string(),token_type_hint:f.string().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)}};