flujo-ai 3.38.0 → 3.40.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (997) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +617 -433
  3. package/.next/app-path-routes-manifest.json +42 -26
  4. package/.next/build-manifest.json +5 -5
  5. package/.next/prerender-manifest.json +90 -18
  6. package/.next/react-loadable-manifest.json +40 -47
  7. package/.next/routes-manifest.json +34 -0
  8. package/.next/server/app/_not-found/page.js +3 -4
  9. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  10. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  11. package/.next/server/app/_not-found.html +1 -1
  12. package/.next/server/app/_not-found.rsc +5 -5
  13. package/.next/server/app/api/approvals/[id]/route.js +1 -1
  14. package/.next/server/app/api/approvals/[id]/route.js.nft.json +1 -1
  15. package/.next/server/app/api/approvals/[id]/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/approvals/route.js +2 -2
  17. package/.next/server/app/api/approvals/route.js.nft.json +1 -1
  18. package/.next/server/app/api/approvals/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/backup/route.js +1 -1
  20. package/.next/server/app/api/backup/route.js.nft.json +1 -1
  21. package/.next/server/app/api/backup/route_client-reference-manifest.js +1 -1
  22. package/.next/server/app/api/browse/route_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/bugs/enhance/route.js +2 -2
  24. package/.next/server/app/api/bugs/enhance/route.js.nft.json +1 -1
  25. package/.next/server/app/api/bugs/enhance/route_client-reference-manifest.js +1 -1
  26. package/.next/server/app/api/cwd/route_client-reference-manifest.js +1 -1
  27. package/.next/server/app/api/encryption/secure/route.js +1 -1
  28. package/.next/server/app/api/encryption/secure/route.js.nft.json +1 -1
  29. package/.next/server/app/api/encryption/secure/route_client-reference-manifest.js +1 -1
  30. package/.next/server/app/api/env/route.js +2 -2
  31. package/.next/server/app/api/env/route_client-reference-manifest.js +1 -1
  32. package/.next/server/app/api/flow/[id]/convert-process-to-subflow/route.js +1 -0
  33. package/.next/server/app/api/flow/[id]/convert-process-to-subflow/route.js.nft.json +1 -0
  34. package/.next/server/app/api/flow/[id]/convert-process-to-subflow/route_client-reference-manifest.js +1 -0
  35. package/.next/server/app/api/flow/[id]/route.js +1 -1
  36. package/.next/server/app/api/flow/[id]/route.js.nft.json +1 -1
  37. package/.next/server/app/api/flow/[id]/route_client-reference-manifest.js +1 -1
  38. package/.next/server/app/api/flow/[id]/versions/[versionId]/route.js +1 -1
  39. package/.next/server/app/api/flow/[id]/versions/[versionId]/route.js.nft.json +1 -1
  40. package/.next/server/app/api/flow/[id]/versions/[versionId]/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/flow/[id]/versions/route.js +1 -1
  42. package/.next/server/app/api/flow/[id]/versions/route.js.nft.json +1 -1
  43. package/.next/server/app/api/flow/[id]/versions/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/flow/assist/route.js +1 -0
  45. package/.next/server/app/api/flow/assist/route.js.nft.json +1 -0
  46. package/.next/server/app/api/flow/assist/route_client-reference-manifest.js +1 -0
  47. package/.next/server/app/api/flow/compile/route.js +1 -1
  48. package/.next/server/app/api/flow/compile/route.js.nft.json +1 -1
  49. package/.next/server/app/api/flow/compile/route_client-reference-manifest.js +1 -1
  50. package/.next/server/app/api/flow/generate/route.js +1 -1
  51. package/.next/server/app/api/flow/generate/route.js.nft.json +1 -1
  52. package/.next/server/app/api/flow/generate/route_client-reference-manifest.js +1 -1
  53. package/.next/server/app/api/flow/generator/route.js +2 -2
  54. package/.next/server/app/api/flow/generator/route.js.nft.json +1 -1
  55. package/.next/server/app/api/flow/generator/route_client-reference-manifest.js +1 -1
  56. package/.next/server/app/api/flow/improve/route.js +1 -1
  57. package/.next/server/app/api/flow/improve/route.js.nft.json +1 -1
  58. package/.next/server/app/api/flow/improve/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/flow/prompt-renderer/route.js +2 -2
  60. package/.next/server/app/api/flow/prompt-renderer/route.js.nft.json +1 -1
  61. package/.next/server/app/api/flow/prompt-renderer/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/flow/quick-chat/route.js +1 -1
  63. package/.next/server/app/api/flow/quick-chat/route.js.nft.json +1 -1
  64. package/.next/server/app/api/flow/quick-chat/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/flow/repair/route.js +1 -1
  66. package/.next/server/app/api/flow/repair/route.js.nft.json +1 -1
  67. package/.next/server/app/api/flow/repair/route_client-reference-manifest.js +1 -1
  68. package/.next/server/app/api/flow/route.js +1 -1
  69. package/.next/server/app/api/flow/route.js.nft.json +1 -1
  70. package/.next/server/app/api/flow/route_client-reference-manifest.js +1 -1
  71. package/.next/server/app/api/git/route.js +6 -6
  72. package/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  73. package/.next/server/app/api/init/route.js +1 -1
  74. package/.next/server/app/api/init/route.js.nft.json +1 -1
  75. package/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  76. package/.next/server/app/api/local-models/capability/route.js +1 -1
  77. package/.next/server/app/api/local-models/capability/route_client-reference-manifest.js +1 -1
  78. package/.next/server/app/api/local-models/pull/route.js +1 -1
  79. package/.next/server/app/api/local-models/pull/route_client-reference-manifest.js +1 -1
  80. package/.next/server/app/api/local-models/suggest/route.js +1 -1
  81. package/.next/server/app/api/local-models/suggest/route_client-reference-manifest.js +1 -1
  82. package/.next/server/app/api/mcp/app-sandbox/route_client-reference-manifest.js +1 -1
  83. package/.next/server/app/api/mcp/cancel/route.js +2 -2
  84. package/.next/server/app/api/mcp/cancel/route.js.nft.json +1 -1
  85. package/.next/server/app/api/mcp/cancel/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/mcp/flujo/authoring/route.js +1 -0
  87. package/.next/server/app/api/mcp/flujo/authoring/route.js.nft.json +1 -0
  88. package/.next/server/app/api/mcp/flujo/authoring/route_client-reference-manifest.js +1 -0
  89. package/.next/server/app/api/mcp/flujo/automation/route.js +1 -0
  90. package/.next/server/app/api/mcp/flujo/automation/route.js.nft.json +1 -0
  91. package/.next/server/app/api/mcp/flujo/automation/route_client-reference-manifest.js +1 -0
  92. package/.next/server/app/api/mcp/flujo/flows/route.js +1 -0
  93. package/.next/server/app/api/mcp/flujo/flows/route.js.nft.json +1 -0
  94. package/.next/server/app/api/mcp/flujo/flows/route_client-reference-manifest.js +1 -0
  95. package/.next/server/app/api/mcp/flujo/resources/read/route.js +1 -0
  96. package/.next/server/app/api/mcp/flujo/resources/read/route.js.nft.json +1 -0
  97. package/.next/server/app/api/mcp/flujo/resources/read/route_client-reference-manifest.js +1 -0
  98. package/.next/server/app/api/mcp/flujo/resources/route.js +1 -0
  99. package/.next/server/app/api/mcp/flujo/resources/route.js.nft.json +1 -0
  100. package/.next/server/app/api/mcp/flujo/resources/route_client-reference-manifest.js +1 -0
  101. package/.next/server/app/api/mcp/flujo/servers/route.js +1 -0
  102. package/.next/server/app/api/mcp/flujo/servers/route.js.nft.json +1 -0
  103. package/.next/server/app/api/mcp/flujo/servers/route_client-reference-manifest.js +1 -0
  104. package/.next/server/app/api/mcp/flujo/state/route.js +1 -0
  105. package/.next/server/app/api/mcp/flujo/state/route.js.nft.json +1 -0
  106. package/.next/server/app/api/mcp/flujo/state/route_client-reference-manifest.js +1 -0
  107. package/.next/server/app/api/mcp/flujo/tools/route.js +1 -0
  108. package/.next/server/app/api/mcp/flujo/tools/route.js.nft.json +1 -0
  109. package/.next/server/app/api/mcp/flujo/tools/route_client-reference-manifest.js +1 -0
  110. package/.next/server/app/api/mcp/oauth-capability/route.js +1 -1
  111. package/.next/server/app/api/mcp/oauth-capability/route.js.nft.json +1 -1
  112. package/.next/server/app/api/mcp/oauth-capability/route_client-reference-manifest.js +1 -1
  113. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js +1 -1
  114. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js.nft.json +1 -1
  115. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route_client-reference-manifest.js +1 -1
  116. package/.next/server/app/api/mcp/servers/[name]/prompts/route.js +1 -1
  117. package/.next/server/app/api/mcp/servers/[name]/prompts/route.js.nft.json +1 -1
  118. package/.next/server/app/api/mcp/servers/[name]/prompts/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js +1 -1
  120. package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js.nft.json +1 -1
  121. package/.next/server/app/api/mcp/servers/[name]/resources/read/route_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/mcp/servers/[name]/resources/route.js +1 -1
  123. package/.next/server/app/api/mcp/servers/[name]/resources/route.js.nft.json +1 -1
  124. package/.next/server/app/api/mcp/servers/[name]/resources/route_client-reference-manifest.js +1 -1
  125. package/.next/server/app/api/mcp/servers/[name]/route.js +1 -1
  126. package/.next/server/app/api/mcp/servers/[name]/route.js.nft.json +1 -1
  127. package/.next/server/app/api/mcp/servers/[name]/route_client-reference-manifest.js +1 -1
  128. package/.next/server/app/api/mcp/servers/[name]/status/route.js +1 -1
  129. package/.next/server/app/api/mcp/servers/[name]/status/route.js.nft.json +1 -1
  130. package/.next/server/app/api/mcp/servers/[name]/status/route_client-reference-manifest.js +1 -1
  131. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js +1 -1
  132. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js.nft.json +1 -1
  133. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route_client-reference-manifest.js +1 -1
  134. package/.next/server/app/api/mcp/servers/[name]/tools/route.js +1 -1
  135. package/.next/server/app/api/mcp/servers/[name]/tools/route.js.nft.json +1 -1
  136. package/.next/server/app/api/mcp/servers/[name]/tools/route_client-reference-manifest.js +1 -1
  137. package/.next/server/app/api/mcp/servers/route.js +1 -1
  138. package/.next/server/app/api/mcp/servers/route.js.nft.json +1 -1
  139. package/.next/server/app/api/mcp/servers/route_client-reference-manifest.js +1 -1
  140. package/.next/server/app/api/mcp/test-connection/route.js +1 -1
  141. package/.next/server/app/api/mcp/test-connection/route.js.nft.json +1 -1
  142. package/.next/server/app/api/mcp/test-connection/route_client-reference-manifest.js +1 -1
  143. package/.next/server/app/api/mcp/test-connection/stream/route.js +1 -1
  144. package/.next/server/app/api/mcp/test-connection/stream/route.js.nft.json +1 -1
  145. package/.next/server/app/api/mcp/test-connection/stream/route_client-reference-manifest.js +1 -1
  146. package/.next/server/app/api/mcp-registry/route.js +2 -2
  147. package/.next/server/app/api/mcp-registry/route.js.nft.json +1 -1
  148. package/.next/server/app/api/mcp-registry/route_client-reference-manifest.js +1 -1
  149. package/.next/server/app/api/mcp-registry/spotlight/route_client-reference-manifest.js +1 -1
  150. package/.next/server/app/api/model/[id]/route.js +1 -1
  151. package/.next/server/app/api/model/[id]/route.js.nft.json +1 -1
  152. package/.next/server/app/api/model/[id]/route_client-reference-manifest.js +1 -1
  153. package/.next/server/app/api/model/provider/route.js +2 -2
  154. package/.next/server/app/api/model/provider/route.js.nft.json +1 -1
  155. package/.next/server/app/api/model/provider/route_client-reference-manifest.js +1 -1
  156. package/.next/server/app/api/model/route.js +1 -1
  157. package/.next/server/app/api/model/route.js.nft.json +1 -1
  158. package/.next/server/app/api/model/route_client-reference-manifest.js +1 -1
  159. package/.next/server/app/api/model/test/route.js +2 -2
  160. package/.next/server/app/api/model/test/route.js.nft.json +1 -1
  161. package/.next/server/app/api/model/test/route_client-reference-manifest.js +1 -1
  162. package/.next/server/app/api/oauth/callback/route.js +1 -1
  163. package/.next/server/app/api/oauth/callback/route_client-reference-manifest.js +1 -1
  164. package/.next/server/app/api/oauth/initiate/route.js +1 -1
  165. package/.next/server/app/api/oauth/initiate/route_client-reference-manifest.js +1 -1
  166. package/.next/server/app/api/oauth/reset/route.js +2 -2
  167. package/.next/server/app/api/oauth/reset/route.js.nft.json +1 -1
  168. package/.next/server/app/api/oauth/reset/route_client-reference-manifest.js +1 -1
  169. package/.next/server/app/api/packages/build/route.js +1 -1
  170. package/.next/server/app/api/packages/build/route.js.nft.json +1 -1
  171. package/.next/server/app/api/packages/build/route_client-reference-manifest.js +1 -1
  172. package/.next/server/app/api/packages/derive-secrets/route.js +1 -1
  173. package/.next/server/app/api/packages/derive-secrets/route.js.nft.json +1 -1
  174. package/.next/server/app/api/packages/derive-secrets/route_client-reference-manifest.js +1 -1
  175. package/.next/server/app/api/packages/install/route.js +1 -1
  176. package/.next/server/app/api/packages/install/route.js.nft.json +1 -1
  177. package/.next/server/app/api/packages/install/route_client-reference-manifest.js +1 -1
  178. package/.next/server/app/api/packages/install/status/route.js +1 -1
  179. package/.next/server/app/api/packages/install/status/route.js.nft.json +1 -1
  180. package/.next/server/app/api/packages/install/status/route_client-reference-manifest.js +1 -1
  181. package/.next/server/app/api/packages/installed/route.js +1 -1
  182. package/.next/server/app/api/packages/installed/route.js.nft.json +1 -1
  183. package/.next/server/app/api/packages/installed/route_client-reference-manifest.js +1 -1
  184. package/.next/server/app/api/packages/resolve/route.js +1 -1
  185. package/.next/server/app/api/packages/resolve/route.js.nft.json +1 -1
  186. package/.next/server/app/api/packages/resolve/route_client-reference-manifest.js +1 -1
  187. package/.next/server/app/api/packages/scan-targets/route.js +1 -1
  188. package/.next/server/app/api/packages/scan-targets/route.js.nft.json +1 -1
  189. package/.next/server/app/api/packages/scan-targets/route_client-reference-manifest.js +1 -1
  190. package/.next/server/app/api/packages/search/route_client-reference-manifest.js +1 -1
  191. package/.next/server/app/api/packages/uninstall/route.js +1 -1
  192. package/.next/server/app/api/packages/uninstall/route.js.nft.json +1 -1
  193. package/.next/server/app/api/packages/uninstall/route_client-reference-manifest.js +1 -1
  194. package/.next/server/app/api/planned-executions/[id]/route.js +2 -2
  195. package/.next/server/app/api/planned-executions/[id]/route.js.nft.json +1 -1
  196. package/.next/server/app/api/planned-executions/[id]/route_client-reference-manifest.js +1 -1
  197. package/.next/server/app/api/planned-executions/[id]/run/route.js +2 -2
  198. package/.next/server/app/api/planned-executions/[id]/run/route.js.nft.json +1 -1
  199. package/.next/server/app/api/planned-executions/[id]/run/route_client-reference-manifest.js +1 -1
  200. package/.next/server/app/api/planned-executions/[id]/runs/route.js +2 -2
  201. package/.next/server/app/api/planned-executions/[id]/runs/route.js.nft.json +1 -1
  202. package/.next/server/app/api/planned-executions/[id]/runs/route_client-reference-manifest.js +1 -1
  203. package/.next/server/app/api/planned-executions/preview-schedule/route_client-reference-manifest.js +1 -1
  204. package/.next/server/app/api/planned-executions/reconcile/route.js +1 -1
  205. package/.next/server/app/api/planned-executions/reconcile/route.js.nft.json +1 -1
  206. package/.next/server/app/api/planned-executions/reconcile/route_client-reference-manifest.js +1 -1
  207. package/.next/server/app/api/planned-executions/route.js +1 -1
  208. package/.next/server/app/api/planned-executions/route.js.nft.json +1 -1
  209. package/.next/server/app/api/planned-executions/route_client-reference-manifest.js +1 -1
  210. package/.next/server/app/api/registry/auth/resend/route.js +1 -1
  211. package/.next/server/app/api/registry/auth/resend/route_client-reference-manifest.js +1 -1
  212. package/.next/server/app/api/registry/auth/reset/route.js +1 -1
  213. package/.next/server/app/api/registry/auth/reset/route_client-reference-manifest.js +1 -1
  214. package/.next/server/app/api/registry/auth/route.js +1 -1
  215. package/.next/server/app/api/registry/auth/route_client-reference-manifest.js +1 -1
  216. package/.next/server/app/api/registry/feedback/route_client-reference-manifest.js +1 -1
  217. package/.next/server/app/api/registry/oauth/callback/route.js +1 -1
  218. package/.next/server/app/api/registry/oauth/callback/route_client-reference-manifest.js +1 -1
  219. package/.next/server/app/api/registry/oauth/initiate/route.js +1 -1
  220. package/.next/server/app/api/registry/oauth/initiate/route_client-reference-manifest.js +1 -1
  221. package/.next/server/app/api/registry/packages/route.js +1 -1
  222. package/.next/server/app/api/registry/packages/route_client-reference-manifest.js +1 -1
  223. package/.next/server/app/api/registry/publish/route.js +1 -1
  224. package/.next/server/app/api/registry/publish/route_client-reference-manifest.js +1 -1
  225. package/.next/server/app/api/registry/settings/route.js +1 -1
  226. package/.next/server/app/api/registry/settings/route_client-reference-manifest.js +1 -1
  227. package/.next/server/app/api/restore/route.js +1 -1
  228. package/.next/server/app/api/restore/route.js.nft.json +1 -1
  229. package/.next/server/app/api/restore/route_client-reference-manifest.js +1 -1
  230. package/.next/server/app/api/runs/active/route.js +2 -2
  231. package/.next/server/app/api/runs/active/route.js.nft.json +1 -1
  232. package/.next/server/app/api/runs/active/route_client-reference-manifest.js +1 -1
  233. package/.next/server/app/api/setup/ai-cli/route.js +3 -0
  234. package/.next/server/app/api/setup/ai-cli/route.js.nft.json +1 -0
  235. package/.next/server/app/api/setup/ai-cli/route_client-reference-manifest.js +1 -0
  236. package/.next/server/app/api/statistics/route.js +2 -0
  237. package/.next/server/app/api/statistics/route.js.nft.json +1 -0
  238. package/.next/server/app/api/statistics/route_client-reference-manifest.js +1 -0
  239. package/.next/server/app/api/storage/route_client-reference-manifest.js +1 -1
  240. package/.next/server/app/api/telemetry/daily-active/route.js +1 -1
  241. package/.next/server/app/api/telemetry/daily-active/route_client-reference-manifest.js +1 -1
  242. package/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  243. package/.next/server/app/api/waves/route.js +1 -1
  244. package/.next/server/app/api/waves/route.js.nft.json +1 -1
  245. package/.next/server/app/api/waves/route_client-reference-manifest.js +1 -1
  246. package/.next/server/app/api/webhooks/[id]/route.js +1 -1
  247. package/.next/server/app/api/webhooks/[id]/route.js.nft.json +1 -1
  248. package/.next/server/app/api/webhooks/[id]/route_client-reference-manifest.js +1 -1
  249. package/.next/server/app/automation/triggers/page.js +2 -0
  250. package/.next/server/app/automation/triggers/page.js.nft.json +1 -0
  251. package/.next/server/app/automation/triggers/page_client-reference-manifest.js +1 -0
  252. package/.next/server/app/automation/triggers.html +1 -0
  253. package/.next/server/app/automation/triggers.meta +7 -0
  254. package/.next/server/app/automation/triggers.rsc +23 -0
  255. package/.next/server/app/automation/waves/page.js +2 -0
  256. package/.next/server/app/automation/waves/page.js.nft.json +1 -0
  257. package/.next/server/app/automation/waves/page_client-reference-manifest.js +1 -0
  258. package/.next/server/app/automation/waves.html +1 -0
  259. package/.next/server/app/automation/waves.meta +7 -0
  260. package/.next/server/app/automation/waves.rsc +22 -0
  261. package/.next/server/app/chat/page.js +6 -58
  262. package/.next/server/app/chat/page.js.nft.json +1 -1
  263. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  264. package/.next/server/app/chat.html +1 -1
  265. package/.next/server/app/chat.rsc +7 -6
  266. package/.next/server/app/docs/page.js +3 -4
  267. package/.next/server/app/docs/page.js.nft.json +1 -1
  268. package/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  269. package/.next/server/app/docs.html +1 -1
  270. package/.next/server/app/docs.rsc +6 -6
  271. package/.next/server/app/executions/page.js +2 -3
  272. package/.next/server/app/executions/page.js.nft.json +1 -1
  273. package/.next/server/app/executions/page_client-reference-manifest.js +1 -1
  274. package/.next/server/app/executions.html +1 -1
  275. package/.next/server/app/executions.rsc +7 -6
  276. package/.next/server/app/flows/page.js +3 -3
  277. package/.next/server/app/flows/page.js.nft.json +1 -1
  278. package/.next/server/app/flows/page_client-reference-manifest.js +1 -1
  279. package/.next/server/app/flows.html +1 -1
  280. package/.next/server/app/flows.rsc +7 -7
  281. package/.next/server/app/index.html +1 -1
  282. package/.next/server/app/index.rsc +6 -6
  283. package/.next/server/app/mcp/page.js +6 -57
  284. package/.next/server/app/mcp/page.js.nft.json +1 -1
  285. package/.next/server/app/mcp/page_client-reference-manifest.js +1 -1
  286. package/.next/server/app/mcp-flows/route.js +2 -1
  287. package/.next/server/app/mcp-flows/route.js.nft.json +1 -1
  288. package/.next/server/app/mcp-flows/route_client-reference-manifest.js +1 -1
  289. package/.next/server/app/mcp-proxy/[server]/route.js +2 -1
  290. package/.next/server/app/mcp-proxy/[server]/route.js.nft.json +1 -1
  291. package/.next/server/app/mcp-proxy/[server]/route_client-reference-manifest.js +1 -1
  292. package/.next/server/app/mcp.html +1 -1
  293. package/.next/server/app/mcp.rsc +7 -6
  294. package/.next/server/app/models/page.js +64 -2
  295. package/.next/server/app/models/page.js.nft.json +1 -1
  296. package/.next/server/app/models/page_client-reference-manifest.js +1 -1
  297. package/.next/server/app/packages/page.js +2 -2
  298. package/.next/server/app/packages/page.js.nft.json +1 -1
  299. package/.next/server/app/packages/page_client-reference-manifest.js +1 -1
  300. package/.next/server/app/packages.html +1 -1
  301. package/.next/server/app/packages.rsc +6 -6
  302. package/.next/server/app/page.js +3 -4
  303. package/.next/server/app/page.js.nft.json +1 -1
  304. package/.next/server/app/page_client-reference-manifest.js +1 -1
  305. package/.next/server/app/settings/page.js +2 -2
  306. package/.next/server/app/settings/page.js.nft.json +1 -1
  307. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  308. package/.next/server/app/settings.html +1 -1
  309. package/.next/server/app/settings.rsc +6 -6
  310. package/.next/server/app/statistics/page.js +54 -0
  311. package/.next/server/app/statistics/page.js.nft.json +1 -0
  312. package/.next/server/app/statistics/page_client-reference-manifest.js +1 -0
  313. package/.next/server/app/statistics.html +1 -0
  314. package/.next/server/app/statistics.meta +7 -0
  315. package/.next/server/app/statistics.rsc +22 -0
  316. package/.next/server/app/v1/chat/completions/route.js +1 -1
  317. package/.next/server/app/v1/chat/completions/route.js.nft.json +1 -1
  318. package/.next/server/app/v1/chat/completions/route_client-reference-manifest.js +1 -1
  319. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js +2 -2
  320. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js.nft.json +1 -1
  321. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route_client-reference-manifest.js +1 -1
  322. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js +2 -2
  323. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js.nft.json +1 -1
  324. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route_client-reference-manifest.js +1 -1
  325. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js +1 -1
  326. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js.nft.json +1 -1
  327. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route_client-reference-manifest.js +1 -1
  328. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js +1 -1
  329. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js.nft.json +1 -1
  330. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route_client-reference-manifest.js +1 -1
  331. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js +2 -2
  332. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js.nft.json +1 -1
  333. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route_client-reference-manifest.js +1 -1
  334. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js +3 -3
  335. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js.nft.json +1 -1
  336. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route_client-reference-manifest.js +1 -1
  337. package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route.js +2 -2
  338. package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route.js.nft.json +1 -1
  339. package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route_client-reference-manifest.js +1 -1
  340. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route.js +1 -1
  341. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route.js.nft.json +1 -1
  342. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route_client-reference-manifest.js +1 -1
  343. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route.js +1 -1
  344. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route.js.nft.json +1 -1
  345. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route_client-reference-manifest.js +1 -1
  346. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js +1 -1
  347. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js.nft.json +1 -1
  348. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route_client-reference-manifest.js +1 -1
  349. package/.next/server/app/v1/chat/conversations/[conversationId]/revert/route.js +2 -0
  350. package/.next/server/app/v1/chat/conversations/[conversationId]/revert/route.js.nft.json +1 -0
  351. package/.next/server/app/v1/chat/conversations/[conversationId]/revert/route_client-reference-manifest.js +1 -0
  352. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js +2 -2
  353. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js.nft.json +1 -1
  354. package/.next/server/app/v1/chat/conversations/[conversationId]/route_client-reference-manifest.js +1 -1
  355. package/.next/server/app/v1/chat/conversations/route.js +2 -2
  356. package/.next/server/app/v1/chat/conversations/route.js.nft.json +1 -1
  357. package/.next/server/app/v1/chat/conversations/route_client-reference-manifest.js +1 -1
  358. package/.next/server/app/v1/chat/events/route.js +6 -6
  359. package/.next/server/app/v1/chat/events/route.js.nft.json +1 -1
  360. package/.next/server/app/v1/chat/events/route_client-reference-manifest.js +1 -1
  361. package/.next/server/app/v1/models/route.js +2 -2
  362. package/.next/server/app/v1/models/route.js.nft.json +1 -1
  363. package/.next/server/app/v1/models/route_client-reference-manifest.js +1 -1
  364. package/.next/server/app/waves/page.js +2 -4
  365. package/.next/server/app/waves/page.js.nft.json +1 -1
  366. package/.next/server/app/waves/page_client-reference-manifest.js +1 -1
  367. package/.next/server/app/waves.html +1 -1
  368. package/.next/server/app/waves.rsc +6 -6
  369. package/.next/server/app-paths-manifest.json +42 -26
  370. package/.next/server/chunks/1227.js +1 -1
  371. package/.next/server/chunks/1314.js +1 -1
  372. package/.next/server/chunks/1403.js +3 -0
  373. package/.next/server/chunks/{180.js → 1532.js} +1 -1
  374. package/.next/server/chunks/1539.js +1 -0
  375. package/.next/server/chunks/1662.js +2 -0
  376. package/.next/server/chunks/1805.js +1 -1
  377. package/.next/server/chunks/1925.js +1 -1
  378. package/.next/server/chunks/2069.js +1 -0
  379. package/.next/server/chunks/227.js +1 -1
  380. package/.next/server/chunks/2372.js +2 -2
  381. package/.next/server/chunks/2446.js +1 -0
  382. package/.next/server/chunks/2828.js +2 -0
  383. package/.next/server/chunks/2949.js +1 -0
  384. package/.next/server/chunks/{6034.js → 300.js} +15 -15
  385. package/.next/server/chunks/3032.js +29 -0
  386. package/.next/server/chunks/3206.js +2 -0
  387. package/.next/server/chunks/3262.js +90 -0
  388. package/.next/server/chunks/3418.js +1 -0
  389. package/.next/server/chunks/3945.js +10 -0
  390. package/.next/server/chunks/{6967.js → 3954.js} +3 -3
  391. package/.next/server/chunks/3963.js +6 -0
  392. package/.next/server/chunks/3991.js +2 -0
  393. package/.next/server/chunks/4265.js +1 -1
  394. package/.next/server/chunks/4306.js +1 -1
  395. package/.next/server/chunks/4671.js +1 -1
  396. package/.next/server/chunks/4681.js +1 -1
  397. package/.next/server/chunks/4771.js +2 -2
  398. package/.next/server/chunks/5096.js +1 -1
  399. package/.next/server/chunks/5141.js +2 -0
  400. package/.next/server/chunks/519.js +2 -2
  401. package/.next/server/chunks/5444.js +2 -0
  402. package/.next/server/chunks/5446.js +1 -0
  403. package/.next/server/chunks/{7058.js → 5494.js} +2 -2
  404. package/.next/server/chunks/558.js +1 -1
  405. package/.next/server/chunks/5591.js +1 -0
  406. package/.next/server/chunks/{3312.js → 5642.js} +1 -1
  407. package/.next/server/chunks/566.js +2 -0
  408. package/.next/server/chunks/5750.js +1 -0
  409. package/.next/server/chunks/{7519.js → 5807.js} +1 -1
  410. package/.next/server/chunks/5858.js +1 -0
  411. package/.next/server/chunks/5918.js +436 -0
  412. package/.next/server/chunks/5936.js +1 -0
  413. package/.next/server/chunks/6033.js +1 -0
  414. package/.next/server/chunks/6226.js +4 -4
  415. package/.next/server/chunks/6607.js +1 -0
  416. package/.next/server/chunks/6687.js +1 -0
  417. package/.next/server/chunks/701.js +2 -2
  418. package/.next/server/chunks/7031.js +1 -0
  419. package/.next/server/chunks/7147.js +1 -0
  420. package/.next/server/chunks/7480.js +2 -0
  421. package/.next/server/chunks/{8284.js → 7498.js} +2 -2
  422. package/.next/server/chunks/7506.js +2 -2
  423. package/.next/server/chunks/7508.js +5 -0
  424. package/.next/server/chunks/7628.js +1 -1
  425. package/.next/server/chunks/7630.js +1 -1
  426. package/.next/server/chunks/773.js +9 -0
  427. package/.next/server/chunks/7821.js +1 -1
  428. package/.next/server/chunks/7883.js +1 -0
  429. package/.next/server/chunks/7969.js +1 -1
  430. package/.next/server/chunks/8001.js +1 -1
  431. package/.next/server/chunks/8092.js +1 -1
  432. package/.next/server/chunks/8291.js +1 -0
  433. package/.next/server/chunks/8598.js +1 -0
  434. package/.next/server/chunks/8645.js +1 -1
  435. package/.next/server/chunks/{3489.js → 8730.js} +1 -1
  436. package/.next/server/chunks/8897.js +1 -0
  437. package/.next/server/chunks/8903.js +4 -0
  438. package/.next/server/chunks/8940.js +1 -0
  439. package/.next/server/chunks/9088.js +6 -0
  440. package/.next/server/chunks/9543.js +8 -0
  441. package/.next/server/chunks/9624.js +136 -0
  442. package/.next/server/functions-config-manifest.json +4 -3
  443. package/.next/server/instrumentation.js +1 -1
  444. package/.next/server/instrumentation.js.nft.json +1 -1
  445. package/.next/server/middleware-build-manifest.js +1 -1
  446. package/.next/server/middleware-manifest.json +1 -1
  447. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  448. package/.next/server/pages/404.html +1 -1
  449. package/.next/server/pages/500.html +1 -1
  450. package/.next/server/server-reference-manifest.js +1 -1
  451. package/.next/server/server-reference-manifest.json +1 -1
  452. package/.next/static/b1aMk0634gkkiunttd1SQ/_buildManifest.js +1 -0
  453. package/.next/static/chunks/1161-19176c3e7c655121.js +1 -0
  454. package/.next/static/chunks/1521-1c98c9a56726e053.js +1 -0
  455. package/.next/static/chunks/155-12f2a537db5dacec.js +1 -0
  456. package/.next/static/chunks/1576.bc6ae6c9e6d939d8.js +1 -0
  457. package/.next/static/chunks/1871-dd8c10ed9d37100b.js +1 -0
  458. package/.next/static/chunks/1983-242862b3dc022a26.js +1 -0
  459. package/.next/static/chunks/2005.300528b5119c2d38.js +1 -0
  460. package/.next/static/chunks/2141-dba0d13715fe1a28.js +1 -0
  461. package/.next/static/chunks/2498-4f7f5de1cac6feba.js +1 -0
  462. package/.next/static/chunks/2499-92cd97ce4993999f.js +1 -0
  463. package/.next/static/chunks/3272-42d1acae08d1ef0a.js +1 -0
  464. package/.next/static/chunks/3303-febfba58226aebed.js +1 -0
  465. package/.next/static/chunks/{361.bb75b03b740930cd.js → 361.51d642c530c84295.js} +1 -1
  466. package/.next/static/chunks/3731-64070760ae44448f.js +1 -0
  467. package/.next/static/chunks/3776.72638b35ce9bb874.js +1 -0
  468. package/.next/static/chunks/3816-807978463638bb71.js +1 -0
  469. package/.next/static/chunks/4122-d82fad8d1fca26d6.js +1 -0
  470. package/.next/static/chunks/4123-906362aeb986d6db.js +1 -0
  471. package/.next/static/chunks/4156-3823d1c89c4a7e3d.js +1 -0
  472. package/.next/static/chunks/{4555-c9070f8c79bccfad.js → 4483-00dc5c1b601ec898.js} +3 -3
  473. package/.next/static/chunks/4755-83df83d0dbd97483.js +1 -0
  474. package/.next/static/chunks/4814-31eb5f3b10c651c1.js +1 -0
  475. package/.next/static/chunks/4965.39e24b54c3c6ca58.js +1 -0
  476. package/.next/static/chunks/57-64bab7d5db89c9cc.js +1 -0
  477. package/.next/static/chunks/5954-dd2b25224f389fc0.js +1 -0
  478. package/.next/static/chunks/5962-8c59d06b3ee1c42a.js +1 -0
  479. package/.next/static/chunks/5967-59fde8c214c9ca9f.js +1 -0
  480. package/.next/static/chunks/6417.70056fe81ca21682.js +1 -0
  481. package/.next/static/chunks/6420-25dd04f98f3b34b8.js +1 -0
  482. package/.next/static/chunks/6547-2adc20e1ace927fc.js +1 -0
  483. package/.next/static/chunks/684-289a73150568def2.js +1 -0
  484. package/.next/static/chunks/7203-2704865539fa551d.js +1 -0
  485. package/.next/static/chunks/760-2ad13a61701630da.js +1 -0
  486. package/.next/static/chunks/7711-4b017720ec49c96d.js +1 -0
  487. package/.next/static/chunks/7758-42ab0b9cce1dc0e3.js +1 -0
  488. package/.next/static/chunks/8124-94140ee1dd8ed87c.js +1 -0
  489. package/.next/static/chunks/8135-5b975b9014f8920b.js +1 -0
  490. package/.next/static/chunks/{8198.cd0d3f8429c02862.js → 8198.a9cc35771b354b03.js} +1 -1
  491. package/.next/static/chunks/8326-4915403bc93459d2.js +1 -0
  492. package/.next/static/chunks/8529.b5a43e728bb5bb8a.js +1 -0
  493. package/.next/static/chunks/{6428-951188daa6f74b86.js → 8620-c9fa9d75cdc18a5e.js} +3 -3
  494. package/.next/static/chunks/8853-b80e50cbec6fd13c.js +1 -0
  495. package/.next/static/chunks/8862-0e37dd5488b21c77.js +1 -0
  496. package/.next/static/chunks/889-e64385ddb2259b1b.js +1 -0
  497. package/.next/static/chunks/9001-4c27a608feddb878.js +1 -0
  498. package/.next/static/chunks/9050-fcb7a0c89314acb4.js +1 -0
  499. package/.next/static/chunks/9053-283dd8d615f904a5.js +8 -0
  500. package/.next/static/chunks/9136-9c415453ec02519c.js +1 -0
  501. package/.next/static/chunks/9140.6502327a2c098d33.js +1 -0
  502. package/.next/static/chunks/9195-3c9c4300e7505d9e.js +1 -0
  503. package/.next/static/chunks/9524-b9d2c7e4426edd07.js +1 -0
  504. package/.next/static/chunks/9562-5494feecd8c6f7a3.js +1 -0
  505. package/.next/static/chunks/9611-190b55ade8b3af3c.js +1 -0
  506. package/.next/static/chunks/app/api/approvals/[id]/route-e70b5e2b4e09002b.js +1 -0
  507. package/.next/static/chunks/app/api/approvals/route-e70b5e2b4e09002b.js +1 -0
  508. package/.next/static/chunks/app/api/backup/route-e70b5e2b4e09002b.js +1 -0
  509. package/.next/static/chunks/app/api/browse/route-e70b5e2b4e09002b.js +1 -0
  510. package/.next/static/chunks/app/api/bugs/enhance/route-e70b5e2b4e09002b.js +1 -0
  511. package/.next/static/chunks/app/api/cwd/route-e70b5e2b4e09002b.js +1 -0
  512. package/.next/static/chunks/app/api/encryption/secure/route-e70b5e2b4e09002b.js +1 -0
  513. package/.next/static/chunks/app/api/env/route-e70b5e2b4e09002b.js +1 -0
  514. package/.next/static/chunks/app/api/flow/[id]/convert-process-to-subflow/route-e70b5e2b4e09002b.js +1 -0
  515. package/.next/static/chunks/app/api/flow/[id]/route-e70b5e2b4e09002b.js +1 -0
  516. package/.next/static/chunks/app/api/flow/[id]/versions/[versionId]/route-e70b5e2b4e09002b.js +1 -0
  517. package/.next/static/chunks/app/api/flow/[id]/versions/route-e70b5e2b4e09002b.js +1 -0
  518. package/.next/static/chunks/app/api/flow/assist/route-e70b5e2b4e09002b.js +1 -0
  519. package/.next/static/chunks/app/api/flow/compile/route-e70b5e2b4e09002b.js +1 -0
  520. package/.next/static/chunks/app/api/flow/generate/route-e70b5e2b4e09002b.js +1 -0
  521. package/.next/static/chunks/app/api/flow/generator/route-e70b5e2b4e09002b.js +1 -0
  522. package/.next/static/chunks/app/api/flow/improve/route-e70b5e2b4e09002b.js +1 -0
  523. package/.next/static/chunks/app/api/flow/prompt-renderer/route-e70b5e2b4e09002b.js +1 -0
  524. package/.next/static/chunks/app/api/flow/quick-chat/route-e70b5e2b4e09002b.js +1 -0
  525. package/.next/static/chunks/app/api/flow/repair/route-e70b5e2b4e09002b.js +1 -0
  526. package/.next/static/chunks/app/api/flow/route-e70b5e2b4e09002b.js +1 -0
  527. package/.next/static/chunks/app/api/git/route-e70b5e2b4e09002b.js +1 -0
  528. package/.next/static/chunks/app/api/init/route-e70b5e2b4e09002b.js +1 -0
  529. package/.next/static/chunks/app/api/local-models/capability/route-e70b5e2b4e09002b.js +1 -0
  530. package/.next/static/chunks/app/api/local-models/pull/route-e70b5e2b4e09002b.js +1 -0
  531. package/.next/static/chunks/app/api/local-models/suggest/route-e70b5e2b4e09002b.js +1 -0
  532. package/.next/static/chunks/app/api/mcp/app-sandbox/route-e70b5e2b4e09002b.js +1 -0
  533. package/.next/static/chunks/app/api/mcp/cancel/route-e70b5e2b4e09002b.js +1 -0
  534. package/.next/static/chunks/app/api/mcp/flujo/authoring/route-e70b5e2b4e09002b.js +1 -0
  535. package/.next/static/chunks/app/api/mcp/flujo/automation/route-e70b5e2b4e09002b.js +1 -0
  536. package/.next/static/chunks/app/api/mcp/flujo/flows/route-e70b5e2b4e09002b.js +1 -0
  537. package/.next/static/chunks/app/api/mcp/flujo/resources/read/route-e70b5e2b4e09002b.js +1 -0
  538. package/.next/static/chunks/app/api/mcp/flujo/resources/route-e70b5e2b4e09002b.js +1 -0
  539. package/.next/static/chunks/app/api/mcp/flujo/servers/route-e70b5e2b4e09002b.js +1 -0
  540. package/.next/static/chunks/app/api/mcp/flujo/state/route-e70b5e2b4e09002b.js +1 -0
  541. package/.next/static/chunks/app/api/mcp/flujo/tools/route-e70b5e2b4e09002b.js +1 -0
  542. package/.next/static/chunks/app/api/mcp/oauth-capability/route-e70b5e2b4e09002b.js +1 -0
  543. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-e70b5e2b4e09002b.js +1 -0
  544. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-e70b5e2b4e09002b.js +1 -0
  545. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-e70b5e2b4e09002b.js +1 -0
  546. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-e70b5e2b4e09002b.js +1 -0
  547. package/.next/static/chunks/app/api/mcp/servers/[name]/route-e70b5e2b4e09002b.js +1 -0
  548. package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-e70b5e2b4e09002b.js +1 -0
  549. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-e70b5e2b4e09002b.js +1 -0
  550. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-e70b5e2b4e09002b.js +1 -0
  551. package/.next/static/chunks/app/api/mcp/servers/route-e70b5e2b4e09002b.js +1 -0
  552. package/.next/static/chunks/app/api/mcp/test-connection/route-e70b5e2b4e09002b.js +1 -0
  553. package/.next/static/chunks/app/api/mcp/test-connection/stream/route-e70b5e2b4e09002b.js +1 -0
  554. package/.next/static/chunks/app/api/mcp-registry/route-e70b5e2b4e09002b.js +1 -0
  555. package/.next/static/chunks/app/api/mcp-registry/spotlight/route-e70b5e2b4e09002b.js +1 -0
  556. package/.next/static/chunks/app/api/model/[id]/route-e70b5e2b4e09002b.js +1 -0
  557. package/.next/static/chunks/app/api/model/provider/route-e70b5e2b4e09002b.js +1 -0
  558. package/.next/static/chunks/app/api/model/route-e70b5e2b4e09002b.js +1 -0
  559. package/.next/static/chunks/app/api/model/test/route-e70b5e2b4e09002b.js +1 -0
  560. package/.next/static/chunks/app/api/oauth/callback/route-e70b5e2b4e09002b.js +1 -0
  561. package/.next/static/chunks/app/api/oauth/initiate/route-e70b5e2b4e09002b.js +1 -0
  562. package/.next/static/chunks/app/api/oauth/reset/route-e70b5e2b4e09002b.js +1 -0
  563. package/.next/static/chunks/app/api/packages/build/route-e70b5e2b4e09002b.js +1 -0
  564. package/.next/static/chunks/app/api/packages/derive-secrets/route-e70b5e2b4e09002b.js +1 -0
  565. package/.next/static/chunks/app/api/packages/install/route-e70b5e2b4e09002b.js +1 -0
  566. package/.next/static/chunks/app/api/packages/install/status/route-e70b5e2b4e09002b.js +1 -0
  567. package/.next/static/chunks/app/api/packages/installed/route-e70b5e2b4e09002b.js +1 -0
  568. package/.next/static/chunks/app/api/packages/resolve/route-e70b5e2b4e09002b.js +1 -0
  569. package/.next/static/chunks/app/api/packages/scan-targets/route-e70b5e2b4e09002b.js +1 -0
  570. package/.next/static/chunks/app/api/packages/search/route-e70b5e2b4e09002b.js +1 -0
  571. package/.next/static/chunks/app/api/packages/uninstall/route-e70b5e2b4e09002b.js +1 -0
  572. package/.next/static/chunks/app/api/planned-executions/[id]/route-e70b5e2b4e09002b.js +1 -0
  573. package/.next/static/chunks/app/api/planned-executions/[id]/run/route-e70b5e2b4e09002b.js +1 -0
  574. package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-e70b5e2b4e09002b.js +1 -0
  575. package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-e70b5e2b4e09002b.js +1 -0
  576. package/.next/static/chunks/app/api/planned-executions/reconcile/route-e70b5e2b4e09002b.js +1 -0
  577. package/.next/static/chunks/app/api/planned-executions/route-e70b5e2b4e09002b.js +1 -0
  578. package/.next/static/chunks/app/api/registry/auth/resend/route-e70b5e2b4e09002b.js +1 -0
  579. package/.next/static/chunks/app/api/registry/auth/reset/route-e70b5e2b4e09002b.js +1 -0
  580. package/.next/static/chunks/app/api/registry/auth/route-e70b5e2b4e09002b.js +1 -0
  581. package/.next/static/chunks/app/api/registry/feedback/route-e70b5e2b4e09002b.js +1 -0
  582. package/.next/static/chunks/app/api/registry/oauth/callback/route-e70b5e2b4e09002b.js +1 -0
  583. package/.next/static/chunks/app/api/registry/oauth/initiate/route-e70b5e2b4e09002b.js +1 -0
  584. package/.next/static/chunks/app/api/registry/packages/route-e70b5e2b4e09002b.js +1 -0
  585. package/.next/static/chunks/app/api/registry/publish/route-e70b5e2b4e09002b.js +1 -0
  586. package/.next/static/chunks/app/api/registry/settings/route-e70b5e2b4e09002b.js +1 -0
  587. package/.next/static/chunks/app/api/restore/route-e70b5e2b4e09002b.js +1 -0
  588. package/.next/static/chunks/app/api/runs/active/route-e70b5e2b4e09002b.js +1 -0
  589. package/.next/static/chunks/app/api/setup/ai-cli/route-e70b5e2b4e09002b.js +1 -0
  590. package/.next/static/chunks/app/api/statistics/route-e70b5e2b4e09002b.js +1 -0
  591. package/.next/static/chunks/app/api/storage/route-e70b5e2b4e09002b.js +1 -0
  592. package/.next/static/chunks/app/api/telemetry/daily-active/route-e70b5e2b4e09002b.js +1 -0
  593. package/.next/static/chunks/app/api/update/route-e70b5e2b4e09002b.js +1 -0
  594. package/.next/static/chunks/app/api/waves/route-e70b5e2b4e09002b.js +1 -0
  595. package/.next/static/chunks/app/api/webhooks/[id]/route-e70b5e2b4e09002b.js +1 -0
  596. package/.next/static/chunks/app/automation/triggers/page-594a6294c58344bf.js +1 -0
  597. package/.next/static/chunks/app/automation/waves/page-ce2fef4996cad8e6.js +1 -0
  598. package/.next/static/chunks/app/chat/page-203cb7bf21638ada.js +1 -0
  599. package/.next/static/chunks/app/docs/page-c466a58caf5e3336.js +1 -0
  600. package/.next/static/chunks/app/executions/page-fcc848de86714386.js +1 -0
  601. package/.next/static/chunks/app/flows/page-172c759ca81ba02f.js +1 -0
  602. package/.next/static/chunks/app/layout-a6ca531683a518a7.js +1 -0
  603. package/.next/static/chunks/app/mcp/page-0a96e6b30e45b1e6.js +1 -0
  604. package/.next/static/chunks/app/mcp-flows/route-e70b5e2b4e09002b.js +1 -0
  605. package/.next/static/chunks/app/mcp-proxy/[server]/route-e70b5e2b4e09002b.js +1 -0
  606. package/.next/static/chunks/app/models/error-1964203c5c6e7d0e.js +1 -0
  607. package/.next/static/chunks/app/models/{loading-1687ae86584f5b1b.js → loading-0cdcf9bae7d3b8f3.js} +1 -1
  608. package/.next/static/chunks/app/models/page-ad1cbea6d3324966.js +1 -0
  609. package/.next/static/chunks/app/packages/page-dda48425be9fc137.js +1 -0
  610. package/.next/static/chunks/app/page-04189aa1b1318c2d.js +1 -0
  611. package/.next/static/chunks/app/settings/page-906c229c87011ead.js +1 -0
  612. package/.next/static/chunks/app/statistics/page-9b13a95549f438c0.js +1 -0
  613. package/.next/static/chunks/app/v1/chat/completions/route-e70b5e2b4e09002b.js +1 -0
  614. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-e70b5e2b4e09002b.js +1 -0
  615. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-e70b5e2b4e09002b.js +1 -0
  616. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-e70b5e2b4e09002b.js +1 -0
  617. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-e70b5e2b4e09002b.js +1 -0
  618. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-e70b5e2b4e09002b.js +1 -0
  619. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-e70b5e2b4e09002b.js +1 -0
  620. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/inject/route-e70b5e2b4e09002b.js +1 -0
  621. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route-e70b5e2b4e09002b.js +1 -0
  622. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/resources/route-e70b5e2b4e09002b.js +1 -0
  623. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-e70b5e2b4e09002b.js +1 -0
  624. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/revert/route-e70b5e2b4e09002b.js +1 -0
  625. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-e70b5e2b4e09002b.js +1 -0
  626. package/.next/static/chunks/app/v1/chat/conversations/route-e70b5e2b4e09002b.js +1 -0
  627. package/.next/static/chunks/app/v1/chat/events/route-e70b5e2b4e09002b.js +1 -0
  628. package/.next/static/chunks/app/v1/models/route-e70b5e2b4e09002b.js +1 -0
  629. package/.next/static/chunks/app/waves/page-5b53af3eb9409414.js +1 -0
  630. package/.next/static/chunks/webpack-9fbd3587b9ef4dca.js +1 -0
  631. package/.next/static/css/400b1b927c3ffaf6.css +1 -0
  632. package/.next/static/css/82efa7d39b03a714.css +1 -0
  633. package/.next/trace +11 -10
  634. package/.next/types/app/api/flow/[id]/convert-process-to-subflow/route.ts +347 -0
  635. package/.next/types/app/api/flow/assist/route.ts +347 -0
  636. package/.next/types/app/api/mcp/flujo/authoring/route.ts +347 -0
  637. package/.next/types/app/api/mcp/flujo/automation/route.ts +347 -0
  638. package/.next/types/app/api/mcp/flujo/flows/route.ts +347 -0
  639. package/.next/types/app/api/mcp/flujo/resources/read/route.ts +347 -0
  640. package/.next/types/app/api/mcp/flujo/resources/route.ts +347 -0
  641. package/.next/types/app/api/mcp/flujo/servers/route.ts +347 -0
  642. package/.next/types/app/api/mcp/flujo/state/route.ts +347 -0
  643. package/.next/types/app/api/mcp/flujo/tools/route.ts +347 -0
  644. package/.next/types/app/api/setup/ai-cli/route.ts +347 -0
  645. package/.next/types/app/api/statistics/route.ts +347 -0
  646. package/.next/types/app/{layout.ts → automation/triggers/page.ts} +6 -6
  647. package/.next/types/app/{waves → automation/waves}/page.ts +3 -3
  648. package/.next/types/app/{executions → statistics}/page.ts +3 -3
  649. package/.next/types/app/v1/chat/conversations/[conversationId]/revert/route.ts +347 -0
  650. package/.next/types/routes.d.ts +18 -2
  651. package/.next/types/validator.ts +144 -0
  652. package/README.md +79 -52
  653. package/bin/flujo.mjs +42 -5
  654. package/mcp-servers/README.md +94 -0
  655. package/mcp-servers/bash/dist/index.d.ts +3 -0
  656. package/mcp-servers/bash/dist/index.js +85 -0
  657. package/mcp-servers/bash/dist/index.js.map +1 -0
  658. package/mcp-servers/bash/dist/resources.d.ts +13 -0
  659. package/mcp-servers/bash/dist/resources.js +298 -0
  660. package/mcp-servers/bash/dist/resources.js.map +1 -0
  661. package/mcp-servers/bash/dist/shared.d.ts +24 -0
  662. package/mcp-servers/bash/dist/shared.js +161 -0
  663. package/mcp-servers/bash/dist/shared.js.map +1 -0
  664. package/mcp-servers/bash/dist/tools.d.ts +59 -0
  665. package/mcp-servers/bash/dist/tools.js +1493 -0
  666. package/mcp-servers/bash/dist/tools.js.map +1 -0
  667. package/mcp-servers/bash/package.json +33 -0
  668. package/mcp-servers/browser/dist/index.d.ts +4 -0
  669. package/mcp-servers/browser/dist/index.js +34 -0
  670. package/mcp-servers/browser/dist/index.js.map +1 -0
  671. package/mcp-servers/browser/dist/resources.d.ts +6 -0
  672. package/mcp-servers/browser/dist/resources.js +78 -0
  673. package/mcp-servers/browser/dist/resources.js.map +1 -0
  674. package/mcp-servers/browser/dist/runtime.d.ts +26 -0
  675. package/mcp-servers/browser/dist/runtime.js +343 -0
  676. package/mcp-servers/browser/dist/runtime.js.map +1 -0
  677. package/mcp-servers/browser/dist/tools.d.ts +3 -0
  678. package/mcp-servers/browser/dist/tools.js +283 -0
  679. package/mcp-servers/browser/dist/tools.js.map +1 -0
  680. package/mcp-servers/browser/package.json +31 -0
  681. package/mcp-servers/filesystem/dist/index.d.ts +3 -0
  682. package/mcp-servers/filesystem/dist/index.js +56 -0
  683. package/mcp-servers/filesystem/dist/index.js.map +1 -0
  684. package/mcp-servers/filesystem/dist/resources.d.ts +49 -0
  685. package/{.next/server/chunks/9724.js → mcp-servers/filesystem/dist/resources.js} +592 -391
  686. package/mcp-servers/filesystem/dist/resources.js.map +1 -0
  687. package/mcp-servers/filesystem/dist/shared.d.ts +24 -0
  688. package/mcp-servers/filesystem/dist/shared.js +161 -0
  689. package/mcp-servers/filesystem/dist/shared.js.map +1 -0
  690. package/mcp-servers/filesystem/dist/tools.d.ts +3 -0
  691. package/mcp-servers/filesystem/dist/tools.js +1229 -0
  692. package/mcp-servers/filesystem/dist/tools.js.map +1 -0
  693. package/mcp-servers/filesystem/package.json +30 -0
  694. package/mcp-servers/flujo/dist/client.d.ts +12 -0
  695. package/mcp-servers/flujo/dist/client.js +144 -0
  696. package/mcp-servers/flujo/dist/client.js.map +1 -0
  697. package/mcp-servers/flujo/dist/index.d.ts +2 -0
  698. package/mcp-servers/flujo/dist/index.js +31 -0
  699. package/mcp-servers/flujo/dist/index.js.map +1 -0
  700. package/mcp-servers/flujo/package.json +29 -0
  701. package/mcp-servers/mcp-whatsapp-web/dist/auth/link-page.d.ts +11 -0
  702. package/mcp-servers/mcp-whatsapp-web/dist/auth/link-page.js +161 -0
  703. package/mcp-servers/mcp-whatsapp-web/dist/auth/link-page.js.map +1 -0
  704. package/mcp-servers/mcp-whatsapp-web/dist/auth/oauth-provider.d.ts +53 -0
  705. package/mcp-servers/mcp-whatsapp-web/dist/auth/oauth-provider.js +206 -0
  706. package/mcp-servers/mcp-whatsapp-web/dist/auth/oauth-provider.js.map +1 -0
  707. package/mcp-servers/mcp-whatsapp-web/dist/index.d.ts +2 -0
  708. package/mcp-servers/mcp-whatsapp-web/dist/index.js +128 -0
  709. package/mcp-servers/mcp-whatsapp-web/dist/index.js.map +1 -0
  710. package/mcp-servers/mcp-whatsapp-web/dist/server.d.ts +28 -0
  711. package/mcp-servers/mcp-whatsapp-web/dist/server.js +268 -0
  712. package/mcp-servers/mcp-whatsapp-web/dist/server.js.map +1 -0
  713. package/mcp-servers/mcp-whatsapp-web/dist/services/whatsapp.d.ts +149 -0
  714. package/mcp-servers/mcp-whatsapp-web/dist/services/whatsapp.js +818 -0
  715. package/mcp-servers/mcp-whatsapp-web/dist/services/whatsapp.js.map +1 -0
  716. package/mcp-servers/mcp-whatsapp-web/dist/tools/auth.d.ts +8 -0
  717. package/mcp-servers/mcp-whatsapp-web/dist/tools/auth.js +232 -0
  718. package/mcp-servers/mcp-whatsapp-web/dist/tools/auth.js.map +1 -0
  719. package/mcp-servers/mcp-whatsapp-web/dist/tools/chats.d.ts +3 -0
  720. package/mcp-servers/mcp-whatsapp-web/dist/tools/chats.js +90 -0
  721. package/mcp-servers/mcp-whatsapp-web/dist/tools/chats.js.map +1 -0
  722. package/mcp-servers/mcp-whatsapp-web/dist/tools/contacts.d.ts +3 -0
  723. package/mcp-servers/mcp-whatsapp-web/dist/tools/contacts.js +65 -0
  724. package/mcp-servers/mcp-whatsapp-web/dist/tools/contacts.js.map +1 -0
  725. package/mcp-servers/mcp-whatsapp-web/dist/tools/media.d.ts +3 -0
  726. package/mcp-servers/mcp-whatsapp-web/dist/tools/media.js +245 -0
  727. package/mcp-servers/mcp-whatsapp-web/dist/tools/media.js.map +1 -0
  728. package/mcp-servers/mcp-whatsapp-web/dist/tools/messages.d.ts +3 -0
  729. package/mcp-servers/mcp-whatsapp-web/dist/tools/messages.js +141 -0
  730. package/mcp-servers/mcp-whatsapp-web/dist/tools/messages.js.map +1 -0
  731. package/mcp-servers/mcp-whatsapp-web/dist/types/index.d.ts +1 -0
  732. package/mcp-servers/mcp-whatsapp-web/dist/types/index.js +3 -0
  733. package/mcp-servers/mcp-whatsapp-web/dist/types/index.js.map +1 -0
  734. package/mcp-servers/mcp-whatsapp-web/dist/types/whatsapp.d.ts +16 -0
  735. package/mcp-servers/mcp-whatsapp-web/dist/types/whatsapp.js +5 -0
  736. package/mcp-servers/mcp-whatsapp-web/dist/types/whatsapp.js.map +1 -0
  737. package/mcp-servers/mcp-whatsapp-web/dist/utils/audio.d.ts +23 -0
  738. package/mcp-servers/mcp-whatsapp-web/dist/utils/audio.js +99 -0
  739. package/mcp-servers/mcp-whatsapp-web/dist/utils/audio.js.map +1 -0
  740. package/mcp-servers/mcp-whatsapp-web/dist/utils/browser-finder.d.ts +12 -0
  741. package/mcp-servers/mcp-whatsapp-web/dist/utils/browser-finder.js +72 -0
  742. package/mcp-servers/mcp-whatsapp-web/dist/utils/browser-finder.js.map +1 -0
  743. package/mcp-servers/mcp-whatsapp-web/dist/utils/browser-process-manager.d.ts +84 -0
  744. package/mcp-servers/mcp-whatsapp-web/dist/utils/browser-process-manager.js +297 -0
  745. package/mcp-servers/mcp-whatsapp-web/dist/utils/browser-process-manager.js.map +1 -0
  746. package/mcp-servers/mcp-whatsapp-web/dist/utils/cleanup-browsers.d.ts +12 -0
  747. package/mcp-servers/mcp-whatsapp-web/dist/utils/cleanup-browsers.js +141 -0
  748. package/mcp-servers/mcp-whatsapp-web/dist/utils/cleanup-browsers.js.map +1 -0
  749. package/mcp-servers/mcp-whatsapp-web/dist/utils/logger.d.ts +2 -0
  750. package/mcp-servers/mcp-whatsapp-web/dist/utils/logger.js +69 -0
  751. package/mcp-servers/mcp-whatsapp-web/dist/utils/logger.js.map +1 -0
  752. package/mcp-servers/mcp-whatsapp-web/package.json +75 -0
  753. package/mcp-servers/mcp-windows-desktop-automation/dist/index.d.ts +8 -0
  754. package/mcp-servers/mcp-windows-desktop-automation/dist/index.js +95 -0
  755. package/mcp-servers/mcp-windows-desktop-automation/dist/index.js.map +1 -0
  756. package/mcp-servers/mcp-windows-desktop-automation/dist/prompts/index.d.ts +8 -0
  757. package/mcp-servers/mcp-windows-desktop-automation/dist/prompts/index.js +195 -0
  758. package/mcp-servers/mcp-windows-desktop-automation/dist/prompts/index.js.map +1 -0
  759. package/mcp-servers/mcp-windows-desktop-automation/dist/resources/index.d.ts +8 -0
  760. package/mcp-servers/mcp-windows-desktop-automation/dist/resources/index.js +214 -0
  761. package/mcp-servers/mcp-windows-desktop-automation/dist/resources/index.js.map +1 -0
  762. package/mcp-servers/mcp-windows-desktop-automation/dist/server/server.d.ts +21 -0
  763. package/mcp-servers/mcp-windows-desktop-automation/dist/server/server.js +108 -0
  764. package/mcp-servers/mcp-windows-desktop-automation/dist/server/server.js.map +1 -0
  765. package/mcp-servers/mcp-windows-desktop-automation/dist/tools/control.d.ts +8 -0
  766. package/mcp-servers/mcp-windows-desktop-automation/dist/tools/control.js +301 -0
  767. package/mcp-servers/mcp-windows-desktop-automation/dist/tools/control.js.map +1 -0
  768. package/mcp-servers/mcp-windows-desktop-automation/dist/tools/index.d.ts +8 -0
  769. package/mcp-servers/mcp-windows-desktop-automation/dist/tools/index.js +22 -0
  770. package/mcp-servers/mcp-windows-desktop-automation/dist/tools/index.js.map +1 -0
  771. package/mcp-servers/mcp-windows-desktop-automation/dist/tools/keyboard.d.ts +8 -0
  772. package/mcp-servers/mcp-windows-desktop-automation/dist/tools/keyboard.js +146 -0
  773. package/mcp-servers/mcp-windows-desktop-automation/dist/tools/keyboard.js.map +1 -0
  774. package/mcp-servers/mcp-windows-desktop-automation/dist/tools/mouse.d.ts +8 -0
  775. package/mcp-servers/mcp-windows-desktop-automation/dist/tools/mouse.js +179 -0
  776. package/mcp-servers/mcp-windows-desktop-automation/dist/tools/mouse.js.map +1 -0
  777. package/mcp-servers/mcp-windows-desktop-automation/dist/tools/process.d.ts +8 -0
  778. package/mcp-servers/mcp-windows-desktop-automation/dist/tools/process.js +236 -0
  779. package/mcp-servers/mcp-windows-desktop-automation/dist/tools/process.js.map +1 -0
  780. package/mcp-servers/mcp-windows-desktop-automation/dist/tools/window.d.ts +8 -0
  781. package/mcp-servers/mcp-windows-desktop-automation/dist/tools/window.js +300 -0
  782. package/mcp-servers/mcp-windows-desktop-automation/dist/tools/window.js.map +1 -0
  783. package/mcp-servers/mcp-windows-desktop-automation/dist/utils/logger/logger.d.ts +50 -0
  784. package/mcp-servers/mcp-windows-desktop-automation/dist/utils/logger/logger.js +78 -0
  785. package/mcp-servers/mcp-windows-desktop-automation/dist/utils/logger/logger.js.map +1 -0
  786. package/mcp-servers/mcp-windows-desktop-automation/dist/utils/types.d.ts +51 -0
  787. package/mcp-servers/mcp-windows-desktop-automation/dist/utils/types.js +61 -0
  788. package/mcp-servers/mcp-windows-desktop-automation/dist/utils/types.js.map +1 -0
  789. package/mcp-servers/mcp-windows-desktop-automation/package.json +38 -0
  790. package/mcp-servers/patchright-mcp/package.json +32 -0
  791. package/mcp-servers/reddit-mcp-server/package.json +88 -0
  792. package/mcp-servers/servers/package.json +31 -0
  793. package/mcp-servers/shared/dist/index.d.ts +24 -0
  794. package/mcp-servers/shared/dist/index.js +161 -0
  795. package/mcp-servers/shared/dist/index.js.map +1 -0
  796. package/mcp-servers/shared/package.json +26 -0
  797. package/package.json +119 -99
  798. package/scripts/launch-next.mjs +13 -1
  799. package/.next/server/chunks/1114.js +0 -1
  800. package/.next/server/chunks/1439.js +0 -1
  801. package/.next/server/chunks/1578.js +0 -5
  802. package/.next/server/chunks/1634.js +0 -1
  803. package/.next/server/chunks/166.js +0 -5
  804. package/.next/server/chunks/1664.js +0 -2
  805. package/.next/server/chunks/1690.js +0 -1
  806. package/.next/server/chunks/2859.js +0 -1
  807. package/.next/server/chunks/3629.js +0 -1
  808. package/.next/server/chunks/3653.js +0 -2
  809. package/.next/server/chunks/366.js +0 -2
  810. package/.next/server/chunks/3717.js +0 -1
  811. package/.next/server/chunks/3935.js +0 -4
  812. package/.next/server/chunks/3984.js +0 -9
  813. package/.next/server/chunks/4013.js +0 -1
  814. package/.next/server/chunks/4436.js +0 -1
  815. package/.next/server/chunks/4466.js +0 -1
  816. package/.next/server/chunks/4551.js +0 -6
  817. package/.next/server/chunks/4663.js +0 -1
  818. package/.next/server/chunks/4822.js +0 -1
  819. package/.next/server/chunks/5200.js +0 -1
  820. package/.next/server/chunks/5285.js +0 -1
  821. package/.next/server/chunks/5309.js +0 -78
  822. package/.next/server/chunks/544.js +0 -136
  823. package/.next/server/chunks/5463.js +0 -1
  824. package/.next/server/chunks/5544.js +0 -5
  825. package/.next/server/chunks/5880.js +0 -1
  826. package/.next/server/chunks/6747.js +0 -435
  827. package/.next/server/chunks/6793.js +0 -1
  828. package/.next/server/chunks/7069.js +0 -6
  829. package/.next/server/chunks/7104.js +0 -1
  830. package/.next/server/chunks/7634.js +0 -4
  831. package/.next/server/chunks/793.js +0 -403
  832. package/.next/server/chunks/7965.js +0 -39
  833. package/.next/server/chunks/7993.js +0 -2
  834. package/.next/server/chunks/8356.js +0 -1
  835. package/.next/server/chunks/8387.js +0 -1
  836. package/.next/server/chunks/87.js +0 -1
  837. package/.next/server/chunks/9085.js +0 -2
  838. package/.next/server/chunks/9174.js +0 -1
  839. package/.next/server/chunks/9235.js +0 -29
  840. package/.next/server/chunks/94.js +0 -1
  841. package/.next/server/chunks/9983.js +0 -2
  842. package/.next/static/chunks/1871-14c3e63ca865d85e.js +0 -1
  843. package/.next/static/chunks/2003-f826c607d609d1fa.js +0 -1
  844. package/.next/static/chunks/2005.4eea65c00d9a29cd.js +0 -1
  845. package/.next/static/chunks/2318-13ef0d3048e97834.js +0 -1
  846. package/.next/static/chunks/3077-565833c67440a7fa.js +0 -1
  847. package/.next/static/chunks/3217.260785c2198d1e9d.js +0 -1
  848. package/.next/static/chunks/3272-fd8d59523f61da96.js +0 -1
  849. package/.next/static/chunks/3429-34fb1a84aed96703.js +0 -1
  850. package/.next/static/chunks/3545.353a62a68d3b7fd1.js +0 -1
  851. package/.next/static/chunks/3659-0ab9580d5ee5deea.js +0 -1
  852. package/.next/static/chunks/3772-20197853c04a6993.js +0 -1
  853. package/.next/static/chunks/422-61b173ba64cf0c94.js +0 -1
  854. package/.next/static/chunks/4523-a540747aa2ed34e8.js +0 -1
  855. package/.next/static/chunks/454.5fc2f8eef98483e3.js +0 -1
  856. package/.next/static/chunks/488-7ab54d8ae2b4b550.js +0 -1
  857. package/.next/static/chunks/4919-6c8a48e3cc642349.js +0 -1
  858. package/.next/static/chunks/4929-150b03595474c9d8.js +0 -1
  859. package/.next/static/chunks/5733-1419095a28c1ddc3.js +0 -1
  860. package/.next/static/chunks/639-90ed75d402dc872b.js +0 -1
  861. package/.next/static/chunks/6404-86615a5f5ce5c00f.js +0 -1
  862. package/.next/static/chunks/6430-8c6dac4a758119f2.js +0 -1
  863. package/.next/static/chunks/6539-118a0084e0bfae34.js +0 -1
  864. package/.next/static/chunks/7264-91d1fa99abcd91ad.js +0 -1
  865. package/.next/static/chunks/7328-c8a51bb8c7470d77.js +0 -1
  866. package/.next/static/chunks/7391-5a0abd837ba241f5.js +0 -1
  867. package/.next/static/chunks/7445-d8a8be6e451c522e.js +0 -1
  868. package/.next/static/chunks/7561-2b366ddcbc3cc0ec.js +0 -1
  869. package/.next/static/chunks/8124-4a80e3201b8e51b0.js +0 -1
  870. package/.next/static/chunks/8345.bc5534ec13abc9ee.js +0 -1
  871. package/.next/static/chunks/8404-5aa8ea49197b98b8.js +0 -1
  872. package/.next/static/chunks/8405.a425f94b6b13d2be.js +0 -1
  873. package/.next/static/chunks/8470-72cf748472d4d501.js +0 -1
  874. package/.next/static/chunks/8551-a28272acfda62ac9.js +0 -1
  875. package/.next/static/chunks/8650-f879564a0ed89bc3.js +0 -1
  876. package/.next/static/chunks/8989-5fa9c7c670eb9a1a.js +0 -1
  877. package/.next/static/chunks/9164-de1d167d87614a6d.js +0 -1
  878. package/.next/static/chunks/9195.294887f083b1a11b.js +0 -1
  879. package/.next/static/chunks/9203-786f457ecf60b49c.js +0 -1
  880. package/.next/static/chunks/9244-3281f7fd02003a2c.js +0 -1
  881. package/.next/static/chunks/9345-11d6e48d892b1862.js +0 -8
  882. package/.next/static/chunks/9562-f8371be653010627.js +0 -1
  883. package/.next/static/chunks/9581-6d2523fd68a5e3c4.js +0 -1
  884. package/.next/static/chunks/9611-9867e6e8e65172ec.js +0 -1
  885. package/.next/static/chunks/9951-566fc6b05c12209e.js +0 -1
  886. package/.next/static/chunks/app/api/approvals/[id]/route-b9c783850b4c2acf.js +0 -1
  887. package/.next/static/chunks/app/api/approvals/route-b9c783850b4c2acf.js +0 -1
  888. package/.next/static/chunks/app/api/backup/route-b9c783850b4c2acf.js +0 -1
  889. package/.next/static/chunks/app/api/browse/route-b9c783850b4c2acf.js +0 -1
  890. package/.next/static/chunks/app/api/bugs/enhance/route-b9c783850b4c2acf.js +0 -1
  891. package/.next/static/chunks/app/api/cwd/route-b9c783850b4c2acf.js +0 -1
  892. package/.next/static/chunks/app/api/encryption/secure/route-b9c783850b4c2acf.js +0 -1
  893. package/.next/static/chunks/app/api/env/route-b9c783850b4c2acf.js +0 -1
  894. package/.next/static/chunks/app/api/flow/[id]/route-b9c783850b4c2acf.js +0 -1
  895. package/.next/static/chunks/app/api/flow/[id]/versions/[versionId]/route-b9c783850b4c2acf.js +0 -1
  896. package/.next/static/chunks/app/api/flow/[id]/versions/route-b9c783850b4c2acf.js +0 -1
  897. package/.next/static/chunks/app/api/flow/compile/route-b9c783850b4c2acf.js +0 -1
  898. package/.next/static/chunks/app/api/flow/generate/route-b9c783850b4c2acf.js +0 -1
  899. package/.next/static/chunks/app/api/flow/generator/route-b9c783850b4c2acf.js +0 -1
  900. package/.next/static/chunks/app/api/flow/improve/route-b9c783850b4c2acf.js +0 -1
  901. package/.next/static/chunks/app/api/flow/prompt-renderer/route-b9c783850b4c2acf.js +0 -1
  902. package/.next/static/chunks/app/api/flow/quick-chat/route-b9c783850b4c2acf.js +0 -1
  903. package/.next/static/chunks/app/api/flow/repair/route-b9c783850b4c2acf.js +0 -1
  904. package/.next/static/chunks/app/api/flow/route-b9c783850b4c2acf.js +0 -1
  905. package/.next/static/chunks/app/api/git/route-b9c783850b4c2acf.js +0 -1
  906. package/.next/static/chunks/app/api/init/route-b9c783850b4c2acf.js +0 -1
  907. package/.next/static/chunks/app/api/local-models/capability/route-b9c783850b4c2acf.js +0 -1
  908. package/.next/static/chunks/app/api/local-models/pull/route-b9c783850b4c2acf.js +0 -1
  909. package/.next/static/chunks/app/api/local-models/suggest/route-b9c783850b4c2acf.js +0 -1
  910. package/.next/static/chunks/app/api/mcp/app-sandbox/route-b9c783850b4c2acf.js +0 -1
  911. package/.next/static/chunks/app/api/mcp/cancel/route-b9c783850b4c2acf.js +0 -1
  912. package/.next/static/chunks/app/api/mcp/oauth-capability/route-b9c783850b4c2acf.js +0 -1
  913. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-b9c783850b4c2acf.js +0 -1
  914. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-b9c783850b4c2acf.js +0 -1
  915. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-b9c783850b4c2acf.js +0 -1
  916. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-b9c783850b4c2acf.js +0 -1
  917. package/.next/static/chunks/app/api/mcp/servers/[name]/route-b9c783850b4c2acf.js +0 -1
  918. package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-b9c783850b4c2acf.js +0 -1
  919. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-b9c783850b4c2acf.js +0 -1
  920. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-b9c783850b4c2acf.js +0 -1
  921. package/.next/static/chunks/app/api/mcp/servers/route-b9c783850b4c2acf.js +0 -1
  922. package/.next/static/chunks/app/api/mcp/test-connection/route-b9c783850b4c2acf.js +0 -1
  923. package/.next/static/chunks/app/api/mcp/test-connection/stream/route-b9c783850b4c2acf.js +0 -1
  924. package/.next/static/chunks/app/api/mcp-registry/route-b9c783850b4c2acf.js +0 -1
  925. package/.next/static/chunks/app/api/mcp-registry/spotlight/route-b9c783850b4c2acf.js +0 -1
  926. package/.next/static/chunks/app/api/model/[id]/route-b9c783850b4c2acf.js +0 -1
  927. package/.next/static/chunks/app/api/model/provider/route-b9c783850b4c2acf.js +0 -1
  928. package/.next/static/chunks/app/api/model/route-b9c783850b4c2acf.js +0 -1
  929. package/.next/static/chunks/app/api/model/test/route-b9c783850b4c2acf.js +0 -1
  930. package/.next/static/chunks/app/api/oauth/callback/route-b9c783850b4c2acf.js +0 -1
  931. package/.next/static/chunks/app/api/oauth/initiate/route-b9c783850b4c2acf.js +0 -1
  932. package/.next/static/chunks/app/api/oauth/reset/route-b9c783850b4c2acf.js +0 -1
  933. package/.next/static/chunks/app/api/packages/build/route-b9c783850b4c2acf.js +0 -1
  934. package/.next/static/chunks/app/api/packages/derive-secrets/route-b9c783850b4c2acf.js +0 -1
  935. package/.next/static/chunks/app/api/packages/install/route-b9c783850b4c2acf.js +0 -1
  936. package/.next/static/chunks/app/api/packages/install/status/route-b9c783850b4c2acf.js +0 -1
  937. package/.next/static/chunks/app/api/packages/installed/route-b9c783850b4c2acf.js +0 -1
  938. package/.next/static/chunks/app/api/packages/resolve/route-b9c783850b4c2acf.js +0 -1
  939. package/.next/static/chunks/app/api/packages/scan-targets/route-b9c783850b4c2acf.js +0 -1
  940. package/.next/static/chunks/app/api/packages/search/route-b9c783850b4c2acf.js +0 -1
  941. package/.next/static/chunks/app/api/packages/uninstall/route-b9c783850b4c2acf.js +0 -1
  942. package/.next/static/chunks/app/api/planned-executions/[id]/route-b9c783850b4c2acf.js +0 -1
  943. package/.next/static/chunks/app/api/planned-executions/[id]/run/route-b9c783850b4c2acf.js +0 -1
  944. package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-b9c783850b4c2acf.js +0 -1
  945. package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-b9c783850b4c2acf.js +0 -1
  946. package/.next/static/chunks/app/api/planned-executions/reconcile/route-b9c783850b4c2acf.js +0 -1
  947. package/.next/static/chunks/app/api/planned-executions/route-b9c783850b4c2acf.js +0 -1
  948. package/.next/static/chunks/app/api/registry/auth/resend/route-b9c783850b4c2acf.js +0 -1
  949. package/.next/static/chunks/app/api/registry/auth/reset/route-b9c783850b4c2acf.js +0 -1
  950. package/.next/static/chunks/app/api/registry/auth/route-b9c783850b4c2acf.js +0 -1
  951. package/.next/static/chunks/app/api/registry/feedback/route-b9c783850b4c2acf.js +0 -1
  952. package/.next/static/chunks/app/api/registry/oauth/callback/route-b9c783850b4c2acf.js +0 -1
  953. package/.next/static/chunks/app/api/registry/oauth/initiate/route-b9c783850b4c2acf.js +0 -1
  954. package/.next/static/chunks/app/api/registry/packages/route-b9c783850b4c2acf.js +0 -1
  955. package/.next/static/chunks/app/api/registry/publish/route-b9c783850b4c2acf.js +0 -1
  956. package/.next/static/chunks/app/api/registry/settings/route-b9c783850b4c2acf.js +0 -1
  957. package/.next/static/chunks/app/api/restore/route-b9c783850b4c2acf.js +0 -1
  958. package/.next/static/chunks/app/api/runs/active/route-b9c783850b4c2acf.js +0 -1
  959. package/.next/static/chunks/app/api/storage/route-b9c783850b4c2acf.js +0 -1
  960. package/.next/static/chunks/app/api/telemetry/daily-active/route-b9c783850b4c2acf.js +0 -1
  961. package/.next/static/chunks/app/api/update/route-b9c783850b4c2acf.js +0 -1
  962. package/.next/static/chunks/app/api/waves/route-b9c783850b4c2acf.js +0 -1
  963. package/.next/static/chunks/app/api/webhooks/[id]/route-b9c783850b4c2acf.js +0 -1
  964. package/.next/static/chunks/app/chat/page-e37bbc561f40ce60.js +0 -1
  965. package/.next/static/chunks/app/docs/page-3b9ce48854b2147d.js +0 -1
  966. package/.next/static/chunks/app/executions/page-8296fd69c439ccee.js +0 -1
  967. package/.next/static/chunks/app/flows/page-e52c8943555e38dd.js +0 -1
  968. package/.next/static/chunks/app/layout-abed1f211e03152f.js +0 -1
  969. package/.next/static/chunks/app/mcp/page-4a3e5a643d84ee89.js +0 -1
  970. package/.next/static/chunks/app/mcp-flows/route-b9c783850b4c2acf.js +0 -1
  971. package/.next/static/chunks/app/mcp-proxy/[server]/route-b9c783850b4c2acf.js +0 -1
  972. package/.next/static/chunks/app/models/error-1718b538d6967e56.js +0 -1
  973. package/.next/static/chunks/app/models/page-595597042e227970.js +0 -1
  974. package/.next/static/chunks/app/packages/page-2f2d29c17841b3cf.js +0 -1
  975. package/.next/static/chunks/app/page-2f9da78a4891731a.js +0 -1
  976. package/.next/static/chunks/app/settings/page-f35e939032b0277d.js +0 -1
  977. package/.next/static/chunks/app/v1/chat/completions/route-b9c783850b4c2acf.js +0 -1
  978. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-b9c783850b4c2acf.js +0 -1
  979. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-b9c783850b4c2acf.js +0 -1
  980. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-b9c783850b4c2acf.js +0 -1
  981. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-b9c783850b4c2acf.js +0 -1
  982. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-b9c783850b4c2acf.js +0 -1
  983. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-b9c783850b4c2acf.js +0 -1
  984. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/inject/route-b9c783850b4c2acf.js +0 -1
  985. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route-b9c783850b4c2acf.js +0 -1
  986. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/resources/route-b9c783850b4c2acf.js +0 -1
  987. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-b9c783850b4c2acf.js +0 -1
  988. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-b9c783850b4c2acf.js +0 -1
  989. package/.next/static/chunks/app/v1/chat/conversations/route-b9c783850b4c2acf.js +0 -1
  990. package/.next/static/chunks/app/v1/chat/events/route-b9c783850b4c2acf.js +0 -1
  991. package/.next/static/chunks/app/v1/models/route-b9c783850b4c2acf.js +0 -1
  992. package/.next/static/chunks/app/waves/page-dc99a16141dd902b.js +0 -1
  993. package/.next/static/chunks/webpack-9d09d53b271f49e2.js +0 -1
  994. package/.next/static/css/30253fcfa8035221.css +0 -1
  995. package/.next/static/css/69ab44eb350e0b6c.css +0 -1
  996. package/.next/static/kIFnN4S0HHOnvpPGsSzi9/_buildManifest.js +0 -1
  997. /package/.next/static/{kIFnN4S0HHOnvpPGsSzi9 → b1aMk0634gkkiunttd1SQ}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ "use strict";exports.id=8940,exports.ids=[8940],exports.modules={2117:(a,b,c)=>{c.d(b,{A:()=>i});var d=c(55511);let e={randomUUID:d.randomUUID},f=new Uint8Array(256),g=f.length,h=[];for(let a=0;a<256;++a)h.push((a+256).toString(16).slice(1));let i=function(a,b,c){if(e.randomUUID&&!b&&!a)return e.randomUUID();let i=(a=a||{}).random??a.rng?.()??(g>f.length-16&&((0,d.randomFillSync)(f),g=0),f.slice(g,g+=16));if(i.length<16)throw Error("Random bytes length must be >= 16");if(i[6]=15&i[6]|64,i[8]=63&i[8]|128,b){if((c=c||0)<0||c+16>b.length)throw RangeError(`UUID byte range ${c}:${c+15} is out of buffer bounds`);for(let a=0;a<16;++a)b[c+a]=i[a];return b}return function(a,b=0){return(h[a[b+0]]+h[a[b+1]]+h[a[b+2]]+h[a[b+3]]+"-"+h[a[b+4]]+h[a[b+5]]+"-"+h[a[b+6]]+h[a[b+7]]+"-"+h[a[b+8]]+h[a[b+9]]+"-"+h[a[b+10]]+h[a[b+11]]+h[a[b+12]]+h[a[b+13]]+h[a[b+14]]+h[a[b+15]]).toLowerCase()}(i)}},9863:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"m11.99 18.54-7.37-5.73L3 14.07l9 7 9-7-1.63-1.27zM12 16l7.36-5.73L21 9l-9-7-9 7 1.63 1.27z"}),"Layers")},11402:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M14.94 4.66h-4.72l2.36-2.36zm-4.69 14.71h4.66l-2.33 2.33zM6.1 6.27 1.6 17.73h1.84l.92-2.45h5.11l.92 2.45h1.84L7.74 6.27zm-1.13 7.37 1.94-5.18 1.94 5.18zm10.76 2.5h6.12v1.59h-8.53v-1.29l5.92-8.56h-5.88v-1.6h8.3v1.26z"}),"SortByAlpha")},15426:(a,b,c)=>{c.d(b,{A:()=>$});var d,e,f=c(38301),g=c(43249),h=c(2783),i=c(37489),j=c(92869),k=c(55973),l=c(66335),m=c(62383),n=c(10005);function o(a){return a.normalize("NFD").replace(/[\u0300-\u036f]/g,"")}let p=function(a={}){let{ignoreAccents:b=!0,ignoreCase:c=!0,limit:d,matchFrom:e="any",stringify:f,trim:g=!1}=a;return(a,{inputValue:h,getOptionLabel:i})=>{let j=g?h.trim():h;c&&(j=j.toLowerCase()),b&&(j=o(j));let k=j?a.filter(a=>{let d=(f||i)(a);return c&&(d=d.toLowerCase()),b&&(d=o(d)),"start"===e?d.startsWith(j):d.includes(j)}):a;return"number"==typeof d?k.slice(0,d):k}}(),q=a=>null!==a.current&&a.current.parentElement?.contains(document.activeElement),r=[];function s(a,b,c){if(b||null==a)return"";let d=c(a);return"string"==typeof d?d:""}let t=function(a){let{unstable_isActiveElementInListbox:b=q,unstable_classNamePrefix:c="Mui",autoComplete:d=!1,autoHighlight:e=!1,autoSelect:g=!1,blurOnSelect:h=!1,clearOnBlur:i=!a.freeSolo,clearOnEscape:o=!1,componentName:t="useAutocomplete",defaultValue:u=a.multiple?r:null,disableClearable:v=!1,disableCloseOnSelect:w=!1,disabled:x,disabledItemsFocusable:y=!1,disableListWrap:z=!1,filterOptions:A=p,filterSelectedOptions:B=!1,freeSolo:C=!1,getOptionDisabled:D,getOptionKey:E,getOptionLabel:F=a=>a.label??a,groupBy:G,handleHomeEndKeys:H=!a.freeSolo,id:I,includeInputInList:J=!1,inputValue:K,isOptionEqualToValue:L=(a,b)=>a===b,multiple:M=!1,onChange:N,onClose:O,onHighlightChange:P,onInputChange:Q,onOpen:R,open:S,openOnFocus:T=!1,options:U,readOnly:V=!1,selectOnFocus:W=!a.freeSolo,value:X}=a,Y=(0,j.A)(I),Z=F;Z=a=>{let b=F(a);return"string"!=typeof b?String(b):b};let $=f.useRef(!1),_=f.useRef(!0),aa=f.useRef(null),ab=f.useRef(null),[ac,ad]=f.useState(null),[ae,af]=f.useState(-1),ag=e?0:-1,ah=f.useRef(ag),ai=f.useRef(s(u??X,M,Z)).current,[aj,ak]=(0,k.A)({controlled:X,default:u,name:t}),[al,am]=(0,k.A)({controlled:K,default:ai,name:t,state:"inputValue"}),[an,ao]=f.useState(!1),ap=f.useCallback((a,b,c)=>{if(!(M?aj.length<b.length:null!==b)&&!i)return;let d=s(b,M,Z);al!==d&&(am(d),Q&&Q(a,d,c))},[Z,al,M,Q,am,i,aj]),[aq,ar]=(0,k.A)({controlled:S,default:!1,name:t,state:"open"}),[as,at]=f.useState(!0),au=!M&&null!=aj&&al===Z(aj),av=aq&&!V,aw=av?A(U.filter(a=>!(B&&(M?aj:[aj]).some(b=>null!==b&&L(a,b)))),{inputValue:au&&as?"":al,getOptionLabel:Z}):[],ax=(0,l.A)({filteredOptions:aw,value:aj,inputValue:al});f.useEffect(()=>{let a=aj!==ax.value;(!an||a)&&(!C||a)&&ap(null,aj,"reset")},[aj,ap,an,ax.value,C]);let ay=aq&&aw.length>0&&!V,az=(0,m.A)(a=>{-1===a?aa.current.focus():ac.querySelector(`[data-tag-index="${a}"]`).focus()});f.useEffect(()=>{M&&ae>aj.length-1&&(af(-1),az(-1))},[aj,M,ae,az]);let aA=(0,m.A)(({event:a,index:b,reason:d})=>{if(ah.current=b,-1===b?aa.current.removeAttribute("aria-activedescendant"):aa.current.setAttribute("aria-activedescendant",`${Y}-option-${b}`),P&&["mouse","keyboard","touch"].includes(d)&&P(a,-1===b?null:aw[b],d),!ab.current)return;let e=ab.current.querySelector(`[role="option"].${c}-focused`);e&&(e.classList.remove(`${c}-focused`),e.classList.remove(`${c}-focusVisible`));let f=ab.current;if("listbox"!==ab.current.getAttribute("role")&&(f=ab.current.parentElement.querySelector('[role="listbox"]')),!f)return;if(-1===b){f.scrollTop=0;return}let g=ab.current.querySelector(`[data-option-index="${b}"]`);if(g&&(g.classList.add(`${c}-focused`),"keyboard"===d&&g.classList.add(`${c}-focusVisible`),f.scrollHeight>f.clientHeight&&"mouse"!==d&&"touch"!==d)){let a=f.clientHeight+f.scrollTop,b=g.offsetTop+g.offsetHeight;b>a?f.scrollTop=b-f.clientHeight:g.offsetTop-g.offsetHeight*(1.3*!!G)<f.scrollTop&&(f.scrollTop=g.offsetTop-g.offsetHeight*(1.3*!!G))}}),aB=(0,m.A)(({event:a,diff:b,direction:c="next",reason:e})=>{if(!av)return;let f=function(a,b){if(!ab.current||a<0||a>=aw.length)return -1;let c=a;for(;;){let d=ab.current.querySelector(`[data-option-index="${c}"]`),e=!y&&(!d||d.disabled||"true"===d.getAttribute("aria-disabled"));if(d&&d.hasAttribute("tabindex")&&!e)return c;if((c="next"===b?(c+1)%aw.length:(c-1+aw.length)%aw.length)===a)return -1}}((()=>{let a=aw.length-1;if("reset"===b)return ag;if("start"===b)return 0;if("end"===b)return a;let c=ah.current+b;return c<0?-1===c&&J?-1:z&&-1!==ah.current||Math.abs(b)>1?0:a:c>a?c===a+1&&J?-1:z||Math.abs(b)>1?a:0:c})(),c);if(aA({index:f,reason:e,event:a}),d&&"reset"!==b)if(-1===f)aa.current.value=al;else{let a=Z(aw[f]);aa.current.value=a,0===a.toLowerCase().indexOf(al.toLowerCase())&&al.length>0&&aa.current.setSelectionRange(al.length,a.length)}}),aC=f.useCallback(()=>{if(!av)return;let a=(()=>{var a,b;if(-1!==ah.current&&ax.filteredOptions&&ax.filteredOptions.length!==aw.length&&ax.inputValue===al&&(M?aj.length===ax.value.length&&ax.value.every((a,b)=>Z(aj[b])===Z(a)):(a=ax.value,b=aj,(a?Z(a):"")===(b?Z(b):"")))){let a=ax.filteredOptions[ah.current];if(a)return aw.findIndex(b=>Z(b)===Z(a))}return -1})();if(-1!==a){ah.current=a;return}let b=M?aj[0]:aj;if(0===aw.length||null==b)return void aB({diff:"reset"});if(ab.current){if(null!=b){let a=aw[ah.current];if(M&&a&&-1!==aj.findIndex(b=>L(a,b)))return;let c=aw.findIndex(a=>L(a,b));-1===c?aB({diff:"reset"}):aA({index:c});return}if(ah.current>=aw.length-1)return void aA({index:aw.length-1});aA({index:ah.current})}},[aw.length,!M&&aj,B,aB,aA,av,al,M]),aD=(0,m.A)(a=>{(0,n.A)(ab,a),a&&aC()});f.useEffect(()=>{aC()},[aC]);let aE=a=>{!aq&&(ar(!0),at(!0),R&&R(a))},aF=(a,b)=>{aq&&(ar(!1),O&&O(a,b))},aG=(a,b,c,d)=>{if(M){if(aj.length===b.length&&aj.every((a,c)=>a===b[c]))return}else if(aj===b)return;N&&N(a,b,c,d),ak(b)},aH=f.useRef(!1),aI=(a,b,c="selectOption",d="options")=>{let e=c,f=b;if(M){let a=(f=Array.isArray(aj)?aj.slice():[]).findIndex(a=>L(b,a));-1===a?f.push(b):"freeSolo"!==d&&(f.splice(a,1),e="removeOption")}ap(a,f,e),aG(a,f,e,{option:b}),w||a&&(a.ctrlKey||a.metaKey)||aF(a,e),(!0===h||"touch"===h&&aH.current||"mouse"===h&&!aH.current)&&aa.current.blur()},aJ=(a,b)=>{if(!M)return;""===al&&aF(a,"toggleInput");let c=ae;-1===ae?""===al&&"previous"===b&&(c=aj.length-1):((c+="next"===b?1:-1)<0&&(c=0),c===aj.length&&(c=-1)),af(c=function(a,b){if(-1===a)return -1;let c=a;for(;;){if("next"===b&&c===aj.length||"previous"===b&&-1===c)return -1;let a=ac.querySelector(`[data-tag-index="${c}"]`);if(a&&a.hasAttribute("tabindex")&&!a.disabled&&"true"!==a.getAttribute("aria-disabled"))return c;c+="next"===b?1:-1}}(c,b)),az(c)},aK=a=>{$.current=!0,am(""),Q&&Q(a,"","clear"),aG(a,M?[]:null,"clear")},aL=a=>{ao(!0),T&&!$.current&&aE(a)},aM=a=>{if(b(ab))return void aa.current.focus();ao(!1),_.current=!0,$.current=!1,g&&-1!==ah.current&&av?aI(a,aw[ah.current],"blur"):g&&C&&""!==al?aI(a,al,"blur","freeSolo"):i&&ap(a,aj,"blur"),aF(a,"blur")},aN=a=>{let b=a.target.value;al!==b&&(am(b),at(!1),Q&&Q(a,b,"input")),""===b?v||M||aG(a,null,"clear"):aE(a)},aO=a=>{let b=Number(a.currentTarget.getAttribute("data-option-index"));ah.current!==b&&aA({event:a,index:b,reason:"mouse"})},aP=a=>{aA({event:a,index:Number(a.currentTarget.getAttribute("data-option-index")),reason:"touch"}),aH.current=!0},aQ=a=>{let b=Number(a.currentTarget.getAttribute("data-option-index"));aI(a,aw[b],"selectOption"),aH.current=!1},aR=a=>{aq?aF(a,"toggleInput"):aE(a)},aS=a=>{a.currentTarget.contains(a.target)&&a.target.getAttribute("id")!==Y&&a.preventDefault()},aT=a=>{a.currentTarget.contains(a.target)&&(aa.current.focus(),W&&_.current&&aa.current.selectionEnd-aa.current.selectionStart==0&&aa.current.select(),_.current=!1)},aU=a=>{x||""!==al&&aq||aR(a)},aV=C&&al.length>0;aV=aV||(M?aj.length>0:null!==aj);let aW=aw;return G&&(aW=aw.reduce((a,b,c)=>{let d=G(b);return a.length>0&&a[a.length-1].group===d?a[a.length-1].options.push(b):a.push({key:c,index:c,group:d,options:[b]}),a},[])),x&&an&&aM(),{getRootProps:(a={})=>({...a,onKeyDown:b=>{if(a.onKeyDown&&a.onKeyDown(b),!b.defaultMuiPrevented&&(-1===ae||["ArrowLeft","ArrowRight"].includes(b.key)||(af(-1),az(-1)),229!==b.which))switch(b.key){case"Home":av&&H&&(b.preventDefault(),aB({diff:"start",direction:"next",reason:"keyboard",event:b}));break;case"End":av&&H&&(b.preventDefault(),aB({diff:"end",direction:"previous",reason:"keyboard",event:b}));break;case"PageUp":b.preventDefault(),aB({diff:-5,direction:"previous",reason:"keyboard",event:b}),aE(b);break;case"PageDown":b.preventDefault(),aB({diff:5,direction:"next",reason:"keyboard",event:b}),aE(b);break;case"ArrowDown":b.preventDefault(),aB({diff:1,direction:"next",reason:"keyboard",event:b}),aE(b);break;case"ArrowUp":b.preventDefault(),aB({diff:-1,direction:"previous",reason:"keyboard",event:b}),aE(b);break;case"ArrowLeft":aJ(b,"previous");break;case"ArrowRight":aJ(b,"next");break;case"Enter":if(-1!==ah.current&&av){let a=aw[ah.current],c=!!D&&D(a);if(b.preventDefault(),c)return;aI(b,a,"selectOption"),d&&aa.current.setSelectionRange(aa.current.value.length,aa.current.value.length)}else C&&""!==al&&!1===au&&(M&&b.preventDefault(),aI(b,al,"createOption","freeSolo"));break;case"Escape":av?(b.preventDefault(),b.stopPropagation(),aF(b,"escape")):o&&(""!==al||M&&aj.length>0)&&(b.preventDefault(),b.stopPropagation(),aK(b));break;case"Backspace":if(M&&!V&&""===al&&aj.length>0){let a=-1===ae?aj.length-1:ae,c=aj.slice();c.splice(a,1),aG(b,c,"removeOption",{option:aj[a]})}break;case"Delete":if(M&&!V&&""===al&&aj.length>0&&-1!==ae){let a=aj.slice();a.splice(ae,1),aG(b,a,"removeOption",{option:aj[ae]})}}},onMouseDown:aS,onClick:aT}),getInputLabelProps:()=>({id:`${Y}-label`,htmlFor:Y}),getInputProps:()=>({id:Y,value:al,onBlur:aM,onFocus:aL,onChange:aN,onMouseDown:aU,"aria-activedescendant":av?"":null,"aria-autocomplete":d?"both":"list","aria-controls":ay?`${Y}-listbox`:void 0,"aria-expanded":ay,autoComplete:"off",ref:aa,autoCapitalize:"none",spellCheck:"false",role:"combobox",disabled:x}),getClearProps:()=>({tabIndex:-1,type:"button",onClick:aK}),getPopupIndicatorProps:()=>({tabIndex:-1,type:"button",onClick:aR}),getTagProps:({index:a})=>({key:a,"data-tag-index":a,tabIndex:-1,...!V&&{onDelete:b=>{let c=aj.slice();c.splice(a,1),aG(b,c,"removeOption",{option:aj[a]})}}}),getListboxProps:()=>({role:"listbox",id:`${Y}-listbox`,"aria-labelledby":`${Y}-label`,ref:aD,onMouseDown:a=>{a.preventDefault()}}),getOptionProps:({index:a,option:b})=>{let c=(M?aj:[aj]).some(a=>null!=a&&L(b,a)),d=!!D&&D(b);return{key:E?.(b)??Z(b),tabIndex:-1,role:"option",id:`${Y}-option-${a}`,onMouseMove:aO,onClick:aQ,onTouchStart:aP,"data-option-index":a,"aria-disabled":d,"aria-selected":c}},id:Y,inputValue:al,value:aj,dirty:aV,expanded:av&&ac,popupOpen:av,focused:an||-1!==ae,anchorEl:ac,setAnchorEl:ad,focusedTag:ae,groupedOptions:aW}};var u=c(31605),v=c(57534),w=c(54573),x=c(44079),y=c(41893),z=c(88679),A=c(13763),B=c(91003),C=c(37659),D=c(88570),E=c(41606),F=c(18168),G=c(68333),H=c(6636),I=c(29565),J=c(33105);function K(a){return(0,J.Ay)("MuiAutocomplete",a)}let L=(0,I.A)("MuiAutocomplete",["root","expanded","fullWidth","focused","focusVisible","tag","tagSizeSmall","tagSizeMedium","hasPopupIcon","hasClearIcon","inputRoot","input","inputFocused","endAdornment","clearIndicator","popupIndicator","popupIndicatorOpen","popper","popperDisablePortal","paper","listbox","loading","noOptions","option","groupLabel","groupUl"]);var M=c(6638),N=c(20385),O=c(21124);let P=(0,F.Ay)("div",{name:"MuiAutocomplete",slot:"Root",overridesResolver:(a,b)=>{let{ownerState:c}=a,{fullWidth:d,hasClearIcon:e,hasPopupIcon:f,inputFocused:g,size:h}=c;return[{[`& .${L.tag}`]:b.tag},{[`& .${L.tag}`]:b[`tagSize${(0,M.A)(h)}`]},{[`& .${L.inputRoot}`]:b.inputRoot},{[`& .${L.input}`]:b.input},{[`& .${L.input}`]:g&&b.inputFocused},b.root,d&&b.fullWidth,f&&b.hasPopupIcon,e&&b.hasClearIcon]}})({[`&.${L.focused} .${L.clearIndicator}`]:{visibility:"visible"},"@media (pointer: fine)":{[`&:hover .${L.clearIndicator}`]:{visibility:"visible"}},[`& .${L.tag}`]:{margin:3,maxWidth:"calc(100% - 6px)"},[`& .${L.inputRoot}`]:{[`.${L.hasPopupIcon}&, .${L.hasClearIcon}&`]:{paddingRight:30},[`.${L.hasPopupIcon}.${L.hasClearIcon}&`]:{paddingRight:56},[`& .${L.input}`]:{width:0,minWidth:30}},[`& .${z.A.root}`]:{paddingBottom:1,"& .MuiInput-input":{padding:"4px 4px 4px 0px"}},[`& .${z.A.root}.${A.A.sizeSmall}`]:{[`& .${z.A.input}`]:{padding:"2px 4px 3px 0"}},[`& .${B.A.root}`]:{padding:9,[`.${L.hasPopupIcon}&, .${L.hasClearIcon}&`]:{paddingRight:39},[`.${L.hasPopupIcon}.${L.hasClearIcon}&`]:{paddingRight:65},[`& .${L.input}`]:{padding:"7.5px 4px 7.5px 5px"},[`& .${L.endAdornment}`]:{right:9}},[`& .${B.A.root}.${A.A.sizeSmall}`]:{paddingTop:6,paddingBottom:6,paddingLeft:6,[`& .${L.input}`]:{padding:"2.5px 4px 2.5px 8px"}},[`& .${C.A.root}`]:{paddingTop:19,paddingLeft:8,[`.${L.hasPopupIcon}&, .${L.hasClearIcon}&`]:{paddingRight:39},[`.${L.hasPopupIcon}.${L.hasClearIcon}&`]:{paddingRight:65},[`& .${C.A.input}`]:{padding:"7px 4px"},[`& .${L.endAdornment}`]:{right:9}},[`& .${C.A.root}.${A.A.sizeSmall}`]:{paddingBottom:1,[`& .${C.A.input}`]:{padding:"2.5px 4px"}},[`& .${A.A.hiddenLabel}`]:{paddingTop:8},[`& .${C.A.root}.${A.A.hiddenLabel}`]:{paddingTop:0,paddingBottom:0,[`& .${L.input}`]:{paddingTop:16,paddingBottom:17}},[`& .${C.A.root}.${A.A.hiddenLabel}.${A.A.sizeSmall}`]:{[`& .${L.input}`]:{paddingTop:8,paddingBottom:9}},[`& .${L.input}`]:{flexGrow:1,textOverflow:"ellipsis",opacity:0},variants:[{props:{fullWidth:!0},style:{width:"100%"}},{props:{size:"small"},style:{[`& .${L.tag}`]:{margin:2,maxWidth:"calc(100% - 4px)"}}},{props:{inputFocused:!0},style:{[`& .${L.input}`]:{opacity:1}}},{props:{multiple:!0},style:{[`& .${L.inputRoot}`]:{flexWrap:"wrap"}}}]}),Q=(0,F.Ay)("div",{name:"MuiAutocomplete",slot:"EndAdornment",overridesResolver:(a,b)=>b.endAdornment})({position:"absolute",right:0,top:"50%",transform:"translate(0, -50%)"}),R=(0,F.Ay)(x.A,{name:"MuiAutocomplete",slot:"ClearIndicator",overridesResolver:(a,b)=>b.clearIndicator})({marginRight:-2,padding:4,visibility:"hidden"}),S=(0,F.Ay)(x.A,{name:"MuiAutocomplete",slot:"PopupIndicator",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[b.popupIndicator,c.popupOpen&&b.popupIndicatorOpen]}})({padding:2,marginRight:-2,variants:[{props:{popupOpen:!0},style:{transform:"rotate(180deg)"}}]}),T=(0,F.Ay)(u.A,{name:"MuiAutocomplete",slot:"Popper",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[{[`& .${L.option}`]:b.option},b.popper,c.disablePortal&&b.popperDisablePortal]}})((0,G.A)(({theme:a})=>({zIndex:(a.vars||a).zIndex.modal,variants:[{props:{disablePortal:!0},style:{position:"absolute"}}]}))),U=(0,F.Ay)(w.A,{name:"MuiAutocomplete",slot:"Paper",overridesResolver:(a,b)=>b.paper})((0,G.A)(({theme:a})=>({...a.typography.body1,overflow:"auto"}))),V=(0,F.Ay)("div",{name:"MuiAutocomplete",slot:"Loading",overridesResolver:(a,b)=>b.loading})((0,G.A)(({theme:a})=>({color:(a.vars||a).palette.text.secondary,padding:"14px 16px"}))),W=(0,F.Ay)("div",{name:"MuiAutocomplete",slot:"NoOptions",overridesResolver:(a,b)=>b.noOptions})((0,G.A)(({theme:a})=>({color:(a.vars||a).palette.text.secondary,padding:"14px 16px"}))),X=(0,F.Ay)("ul",{name:"MuiAutocomplete",slot:"Listbox",overridesResolver:(a,b)=>b.listbox})((0,G.A)(({theme:a})=>({listStyle:"none",margin:0,padding:"8px 0",maxHeight:"40vh",overflow:"auto",position:"relative",[`& .${L.option}`]:{minHeight:48,display:"flex",overflow:"hidden",justifyContent:"flex-start",alignItems:"center",cursor:"pointer",paddingTop:6,boxSizing:"border-box",outline:"0",WebkitTapHighlightColor:"transparent",paddingBottom:6,paddingLeft:16,paddingRight:16,[a.breakpoints.up("sm")]:{minHeight:"auto"},[`&.${L.focused}`]:{backgroundColor:(a.vars||a).palette.action.hover,"@media (hover: none)":{backgroundColor:"transparent"}},'&[aria-disabled="true"]':{opacity:(a.vars||a).palette.action.disabledOpacity,pointerEvents:"none"},[`&.${L.focusVisible}`]:{backgroundColor:(a.vars||a).palette.action.focus},'&[aria-selected="true"]':{backgroundColor:a.vars?`rgba(${a.vars.palette.primary.mainChannel} / ${a.vars.palette.action.selectedOpacity})`:(0,i.X4)(a.palette.primary.main,a.palette.action.selectedOpacity),[`&.${L.focused}`]:{backgroundColor:a.vars?`rgba(${a.vars.palette.primary.mainChannel} / calc(${a.vars.palette.action.selectedOpacity} + ${a.vars.palette.action.hoverOpacity}))`:(0,i.X4)(a.palette.primary.main,a.palette.action.selectedOpacity+a.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:(a.vars||a).palette.action.selected}},[`&.${L.focusVisible}`]:{backgroundColor:a.vars?`rgba(${a.vars.palette.primary.mainChannel} / calc(${a.vars.palette.action.selectedOpacity} + ${a.vars.palette.action.focusOpacity}))`:(0,i.X4)(a.palette.primary.main,a.palette.action.selectedOpacity+a.palette.action.focusOpacity)}}}}))),Y=(0,F.Ay)(v.A,{name:"MuiAutocomplete",slot:"GroupLabel",overridesResolver:(a,b)=>b.groupLabel})((0,G.A)(({theme:a})=>({backgroundColor:(a.vars||a).palette.background.paper,top:-8}))),Z=(0,F.Ay)("ul",{name:"MuiAutocomplete",slot:"GroupUl",overridesResolver:(a,b)=>b.groupUl})({padding:0,[`& .${L.option}`]:{paddingLeft:24}}),$=f.forwardRef(function(a,b){let c,i=(0,H.b)({props:a,name:"MuiAutocomplete"}),{autoComplete:j=!1,autoHighlight:k=!1,autoSelect:l=!1,blurOnSelect:m=!1,ChipProps:n,className:o,clearIcon:p=d||(d=(0,O.jsx)(D.A,{fontSize:"small"})),clearOnBlur:q=!i.freeSolo,clearOnEscape:r=!1,clearText:s="Clear",closeText:v="Close",componentsProps:x,defaultValue:z=i.multiple?[]:null,disableClearable:A=!1,disableCloseOnSelect:B=!1,disabled:C=!1,disabledItemsFocusable:F=!1,disableListWrap:G=!1,disablePortal:I=!1,filterOptions:J,filterSelectedOptions:L=!1,forcePopupIcon:$="auto",freeSolo:_=!1,fullWidth:aa=!1,getLimitTagsText:ab=a=>`+${a}`,getOptionDisabled:ac,getOptionKey:ad,getOptionLabel:ae,isOptionEqualToValue:af,groupBy:ag,handleHomeEndKeys:ah=!i.freeSolo,id:ai,includeInputInList:aj=!1,inputValue:ak,limitTags:al=-1,ListboxComponent:am,ListboxProps:an,loading:ao=!1,loadingText:ap="Loading…",multiple:aq=!1,noOptionsText:ar="No options",onChange:as,onClose:at,onHighlightChange:au,onInputChange:av,onOpen:aw,open:ax,openOnFocus:ay=!1,openText:az="Open",options:aA,PaperComponent:aB,PopperComponent:aC,popupIcon:aD=e||(e=(0,O.jsx)(E.A,{})),readOnly:aE=!1,renderGroup:aF,renderInput:aG,renderOption:aH,renderTags:aI,selectOnFocus:aJ=!i.freeSolo,size:aK="medium",slots:aL={},slotProps:aM={},value:aN,...aO}=i,{getRootProps:aP,getInputProps:aQ,getInputLabelProps:aR,getPopupIndicatorProps:aS,getClearProps:aT,getTagProps:aU,getListboxProps:aV,getOptionProps:aW,value:aX,dirty:aY,expanded:aZ,id:a$,popupOpen:a_,focused:a0,focusedTag:a1,anchorEl:a2,setAnchorEl:a3,inputValue:a4,groupedOptions:a5}=t({...i,componentName:"Autocomplete"}),a6=!A&&!C&&aY&&!aE,a7=(!_||!0===$)&&!1!==$,{onMouseDown:a8}=aQ(),{ref:a9,...ba}=aV(),bb=ae||(a=>a.label??a),bc={...i,disablePortal:I,expanded:aZ,focused:a0,fullWidth:aa,getOptionLabel:bb,hasClearIcon:a6,hasPopupIcon:a7,inputFocused:-1===a1,popupOpen:a_,size:aK},bd=(a=>{let{classes:b,disablePortal:c,expanded:d,focused:e,fullWidth:f,hasClearIcon:g,hasPopupIcon:i,inputFocused:j,popupOpen:k,size:l}=a,m={root:["root",d&&"expanded",e&&"focused",f&&"fullWidth",g&&"hasClearIcon",i&&"hasPopupIcon"],inputRoot:["inputRoot"],input:["input",j&&"inputFocused"],tag:["tag",`tagSize${(0,M.A)(l)}`],endAdornment:["endAdornment"],clearIndicator:["clearIndicator"],popupIndicator:["popupIndicator",k&&"popupIndicatorOpen"],popper:["popper",c&&"popperDisablePortal"],paper:["paper"],listbox:["listbox"],loading:["loading"],noOptions:["noOptions"],option:["option"],groupLabel:["groupLabel"],groupUl:["groupUl"]};return(0,h.A)(m,K,b)})(bc),be={slots:{paper:aB,popper:aC,...aL},slotProps:{chip:n,listbox:an,...x,...aM}},[bf,bg]=(0,N.A)("listbox",{elementType:X,externalForwardedProps:be,ownerState:bc,className:bd.listbox,additionalProps:ba,ref:a9}),[bh,bi]=(0,N.A)("paper",{elementType:w.A,externalForwardedProps:be,ownerState:bc,className:bd.paper}),[bj,bk]=(0,N.A)("popper",{elementType:u.A,externalForwardedProps:be,ownerState:bc,className:bd.popper,additionalProps:{disablePortal:I,style:{width:a2?a2.clientWidth:null},role:"presentation",anchorEl:a2,open:a_}});if(aq&&aX.length>0){let a=a=>({className:bd.tag,disabled:C,...aU(a)});c=aI?aI(aX,a,bc):aX.map((b,c)=>{let{key:d,...e}=a({index:c});return(0,O.jsx)(y.A,{label:bb(b),size:aK,...e,...be.slotProps.chip},d)})}if(al>-1&&Array.isArray(c)){let a=c.length-al;!a0&&a>0&&(c=c.splice(0,al)).push((0,O.jsx)("span",{className:bd.tag,children:ab(a)},c.length))}let bl=aF||(a=>(0,O.jsxs)("li",{children:[(0,O.jsx)(Y,{className:bd.groupLabel,ownerState:bc,component:"div",children:a.group}),(0,O.jsx)(Z,{className:bd.groupUl,ownerState:bc,children:a.children})]},a.key)),bm=aH||((a,b)=>{let{key:c,...d}=a;return(0,O.jsx)("li",{...d,children:bb(b)},c)}),bn=(a,b)=>{let c=aW({option:a,index:b});return bm({...c,className:bd.option},a,{selected:c["aria-selected"],index:b,inputValue:a4},bc)},bo=be.slotProps.clearIndicator,bp=be.slotProps.popupIndicator;return(0,O.jsxs)(f.Fragment,{children:[(0,O.jsx)(P,{ref:b,className:(0,g.A)(bd.root,o),ownerState:bc,...aP(aO),children:aG({id:a$,disabled:C,fullWidth:!0,size:"small"===aK?"small":void 0,InputLabelProps:aR(),InputProps:{ref:a3,className:bd.inputRoot,startAdornment:c,onMouseDown:a=>{a.target===a.currentTarget&&a8(a)},...(a6||a7)&&{endAdornment:(0,O.jsxs)(Q,{className:bd.endAdornment,ownerState:bc,children:[a6?(0,O.jsx)(R,{...aT(),"aria-label":s,title:s,ownerState:bc,...bo,className:(0,g.A)(bd.clearIndicator,bo?.className),children:p}):null,a7?(0,O.jsx)(S,{...aS(),disabled:C,"aria-label":a_?v:az,title:a_?v:az,ownerState:bc,...bp,className:(0,g.A)(bd.popupIndicator,bp?.className),children:aD}):null]})}},inputProps:{className:bd.input,disabled:C,readOnly:aE,...aQ()}})}),a2?(0,O.jsx)(T,{as:bj,...bk,children:(0,O.jsxs)(U,{as:bh,...bi,children:[ao&&0===a5.length?(0,O.jsx)(V,{className:bd.loading,ownerState:bc,children:ap}):null,0!==a5.length||_||ao?null:(0,O.jsx)(W,{className:bd.noOptions,ownerState:bc,role:"presentation",onMouseDown:a=>{a.preventDefault()},children:ar}),a5.length>0?(0,O.jsx)(bf,{as:am,...bg,children:a5.map((a,b)=>ag?bl({key:a.key,group:a.group,children:a.options.map((b,c)=>bn(b,a.index+c))}):bn(a,b))}):null]})}):null]})})},57534:(a,b,c)=>{c.d(b,{A:()=>q});var d=c(38301),e=c(43249),f=c(2783),g=c(18168),h=c(68333),i=c(6636),j=c(6638),k=c(29565),l=c(33105);function m(a){return(0,l.Ay)("MuiListSubheader",a)}(0,k.A)("MuiListSubheader",["root","colorPrimary","colorInherit","gutters","inset","sticky"]);var n=c(21124);let o=(0,g.Ay)("li",{name:"MuiListSubheader",slot:"Root",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[b.root,"default"!==c.color&&b[`color${(0,j.A)(c.color)}`],!c.disableGutters&&b.gutters,c.inset&&b.inset,!c.disableSticky&&b.sticky]}})((0,h.A)(({theme:a})=>({boxSizing:"border-box",lineHeight:"48px",listStyle:"none",color:(a.vars||a).palette.text.secondary,fontFamily:a.typography.fontFamily,fontWeight:a.typography.fontWeightMedium,fontSize:a.typography.pxToRem(14),variants:[{props:{color:"primary"},style:{color:(a.vars||a).palette.primary.main}},{props:{color:"inherit"},style:{color:"inherit"}},{props:({ownerState:a})=>!a.disableGutters,style:{paddingLeft:16,paddingRight:16}},{props:({ownerState:a})=>a.inset,style:{paddingLeft:72}},{props:({ownerState:a})=>!a.disableSticky,style:{position:"sticky",top:0,zIndex:1,backgroundColor:(a.vars||a).palette.background.paper}}]}))),p=d.forwardRef(function(a,b){let c=(0,i.b)({props:a,name:"MuiListSubheader"}),{className:d,color:g="default",component:h="li",disableGutters:k=!1,disableSticky:l=!1,inset:p=!1,...q}=c,r={...c,color:g,component:h,disableGutters:k,disableSticky:l,inset:p},s=(a=>{let{classes:b,color:c,disableGutters:d,inset:e,disableSticky:g}=a,h={root:["root","default"!==c&&`color${(0,j.A)(c)}`,!d&&"gutters",e&&"inset",!g&&"sticky"]};return(0,f.A)(h,m,b)})(r);return(0,n.jsx)(o,{as:h,className:(0,e.A)(s.root,d),ref:b,ownerState:r,...q})});p&&(p.muiSkipListHighlight=!0);let q=p},63757:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M3 18h6v-2H3zM3 6v2h18V6zm0 7h12v-2H3z"}),"Sort")},65343:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m1 15h-2v-2h2zm0-4h-2V7h2z"}),"Error")},66335:(a,b,c)=>{c.d(b,{A:()=>e});var d=c(38301);let e=a=>{let b=d.useRef({});return d.useEffect(()=>{b.current=a}),b.current}},81310:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"m19.81 14.99 1.19-.92-1.43-1.43-1.19.92zm-.45-4.72L21 9l-9-7-2.91 2.27 7.87 7.88zM3.27 1 2 2.27l4.22 4.22L3 9l1.63 1.27L12 16l2.1-1.63 1.43 1.43L12 18.54l-7.37-5.73L3 14.07l9 7 4.95-3.85L20.73 21 22 19.73z"}),"LayersClear")}};
@@ -0,0 +1,6 @@
1
+ "use strict";exports.id=9088,exports.ids=[6033,9088],exports.modules={49088:(a,b,c)=>{c.d(b,{runFlow:()=>ag});var d=c(18230),e=c(96441),f=c(66033),g=c(34115);let h=globalThis,i=h.__flujoSteeringInbox??(h.__flujoSteeringInbox=new Map);var j=c(96249),k=c(37860),l=c(26485),m=c(31084),n=c(59448),o=c(11659),p=c(79111),q=c(86028),r=c(12763),s=c(98844),t=c(8336),u=c(17587),v=c(78606),w=c(27386),x=c(33132);function y(a){return a.data?.type??a.type??"unknown"}function z(a){return a.data?.label||a.id}function A(a){return a.data?.edgeType==="mcp"}function B(a){return a.data?.edgeType==="resource"}function C(a){return A(a)||B(a)}function D(a,b,c){let d=new Map(b.map(a=>[a.id,a])),e=new Set;for(let b of c){if(!A(b))continue;let c=null;if(b.source===a?c=b.target:b.target===a&&(c=b.source),!c)continue;let f=d.get(c);if(!f||"mcp"!==y(f))continue;let g=f.data?.properties?.boundServer;"string"==typeof g&&g&&e.add(g)}return e}function E(a,b,c){let d=new Map(b.map(a=>[a.id,a])),e=[],f=new Set;for(let b of c){if(C(b))continue;let c=null;b.source===a?c=b.target:b.target===a&&b.data?.bidirectional&&(c=b.source),!c||f.has(c)||(f.add(c),e.push(c))}let g=e.map(a=>d.get(a)).filter(a=>!!a).map(a=>({id:a.id,label:a.data?.label,type:y(a)}));return new Set((0,u.E9)(g).values())}function F(a){let b=a.replace(/\S*\$\{[^}]*\}\S*/g," ");return/(?:^|[\s("'`])file:\/\/(?:\/|[^/\s]+\/)[^\s<>"'`]+/i.test(b)||/(?:^|[\s("'`])(?:[A-Za-z]:[\\/][^\s<>"'`]*|\\\\[^\\\s<>"'`]+\\[^\\\s<>"'`]+(?:\\[^\s<>"'`]*)?)/.test(b)||/(?:^|[\s("'`])\/(?!\/)[^\s<>"'`]+/.test(b)}function G(a){if("string"!=typeof a)return!1;let b=a.trim();if(!b)return!1;if(/^\$\{global:[^{}]+\}$/.test(b))return!0;if(b.includes("${"))return!1;if(/^file:/i.test(b))try{let a=new URL(b);return"file:"===a.protocol&&(!!a.hostname||!!a.pathname)}catch{return!1}return!b.includes("\0")}let H=(0,d.h)("backend/execution/flow/validateFlowForRun");async function I(a){let b,c,d,e;try{b=await r.modelService.loadModels()}catch(a){H.warn("validateFlowObjectForRun: could not load models; skipping model checks",a)}try{let a=await s.mcpService.loadServerConfigs();Array.isArray(a)&&(d=a,c=a.map(a=>({name:a.name,status:a.disabled?"disabled":void 0})))}catch(a){H.warn("validateFlowObjectForRun: could not load servers; skipping server checks",a)}try{let b=new Map((Array.isArray(d)?d:[]).map(a=>[a.name,!!a.disabled])),c=new Set;for(let b of a.nodes??[]){let a=b?.data?.type??b?.type,d=b?.data?.properties?.boundServer;"mcp"===a&&"string"==typeof d&&d&&c.add(d)}let f=await Promise.all([...c].map(async a=>{if(b.get(a))return null;let c=await s.mcpService.listServerTools(a);if(c.error||!Array.isArray(c.tools))return null;let d=c.tools.map(a=>a?.name).filter(a=>"string"==typeof a);return[a,d]}));for(let a of(e={},f))a&&(e[a[0]]=a[1])}catch(a){H.warn("validateFlowObjectForRun: could not gather serverTools; skipping tool checks",a),e=void 0}return function(a,b={}){let c=[],d=Array.isArray(a?.nodes)?a.nodes:[],e=Array.isArray(a?.edges)?a.edges:[],f=(a,b,d,e)=>c.push({severity:a,code:b,message:d,nodeId:e?.id,nodeLabel:e?z(e):void 0}),g=new Map((b.models??[]).map(a=>[a.id,a])),h=new Map((b.servers??[]).map(a=>[a.name,a])),i=!!b.models,j=!!b.servers,k=d.filter(a=>"start"===y(a)),l=d.filter(a=>"finish"===y(a)),m=d.filter(a=>"process"===y(a)),n=d.filter(a=>"mcp"===y(a));if(0===k.length)f("error","no-start-node","The flow has no Start node, so it has no entry point.");else if(k.length>1)for(let a of k.slice(1))f("error","multiple-start-nodes","The flow has more than one Start node; only one is allowed.",a);for(let a of(0===l.length&&f("warning","no-finish-node","The flow has no Finish node; it will run but never reaches a defined end."),m)){let b=a.data?.properties??{},c=b.boundModel;if(c){if(i&&!g.has(c)){let c="string"==typeof b.modelName&&b.modelName?` (was "${b.modelName}")`:"";f("error","process-model-missing",`Process node "${z(a)}" is bound to a model that no longer exists${c}.`,a)}}else f("error","process-missing-model",`Process node "${z(a)}" has no model bound.`,a)}for(let a of n){let b=(a.data?.properties??{}).boundServer;if(b){if(j&&!h.has(b))f("warning","mcp-server-missing",`MCP node "${z(a)}" is bound to server "${b}", which isn't in your current MCP server list. It may be offline (e.g. not connected), renamed, or removed — if it was renamed or removed, rebind this node.`,a);else if(j){let c=h.get(b);if(c.status&&"connected"!==c.status){let d="disabled"===c.status?"disabled":`not connected (${c.status})`;f("warning","mcp-server-disconnected",`MCP node "${z(a)}" is bound to server "${b}", which is currently ${d}. It will provide tools again once it reconnects.`,a)}}}else f("warning","mcp-missing-server",`MCP node "${z(a)}" is not bound to a server.`,a);e.some(b=>A(b)&&(b.source===a.id||b.target===a.id))||f("warning","mcp-node-unconnected",`MCP node "${z(a)}" is not connected to any Process node.`,a)}if(b.fileAccessMcp){let a=b.fileAccessMcp,c=Object.entries(a).filter(([,a])=>a.configured&&!a.disabled&&"usable"===a.usability).map(([a])=>a),d=Object.values(a).some(a=>a.configured&&!a.disabled&&"unknown"===a.usability);for(let b of m)if((function(a){let b=a.data?.properties??{},c=[];return"string"==typeof b.promptTemplate&&b.promptTemplate&&c.push(b.promptTemplate),"isolated"===b.inputMode&&"string"==typeof b.isolatedPrompt&&b.isolatedPrompt&&c.push(b.isolatedPrompt),c})(b).some(F)){if(0===c.length){d||f("warning","process-filepath-mcp-unavailable",`Process node "${z(b)}" contains a literal filepath, but no configured file-access MCP server is currently available. Enable or reconnect one so this flow can access the path.`,b);continue}!d&&c.every(b=>!function(a,b,c){return!![...Array.isArray(b.roots)?b.roots:[],...c.filter(b=>b.data?.properties?.boundServer===a).flatMap(a=>{let b=a.data?.properties?.roots;return Array.isArray(b)?b:[]})].some(G)||G(b.rootPath)}(b,a[b],n))&&f("warning","process-filepath-mcp-roots-missing",`Process node "${z(b)}" contains a literal filepath, but the available file-access MCP servers have no effective roots configured. Add roots globally or on the corresponding MCP node in this flow.`,b)}}for(let a of d.filter(a=>"resource"===y(a))){let b=a.data?.properties??{},c="run"===b.scope?"run":"mcp",d="string"==typeof b.boundServer?b.boundServer:"",g="string"==typeof b.uri?b.uri:"",i="string"==typeof b.runName?b.runName.trim():"";"mcp"!==c||d&&g||f("warning","resource-missing-binding",`Resource node "${z(a)}" has no ${!d?"server":"resource URI"} bound; connected steps will receive nothing.`,a),"run"!==c||i||f("warning","resource-missing-binding",`Resource node "${z(a)}" is a run artifact with no name; give it a name so steps can produce/consume it.`,a),"run"===c&&i&&!(0,w.qW)(i)&&f("warning","resource-run-name",`Resource node "${z(a)}" is named "${i}", which is not a valid artifact name (letters, digits, _ and - only, not starting with a digit); it will be awkward to reference with \${res:...}.`,a),"mcp"===c&&d&&j&&!h.has(d)&&f("warning","resource-server-missing",`Resource node "${z(a)}" is bound to server "${d}", which isn't in your current MCP server list.`,a);let k=e.filter(b=>B(b)&&(b.source===a.id||b.target===a.id));0===k.length&&f("warning","resource-node-unconnected",`Resource node "${z(a)}" is not connected to any Process node.`,a);let l=k.filter(b=>b.target===a.id);"mcp"===c&&l.length>0&&f("error","resource-produce-static",`Resource node "${z(a)}" is a static MCP resource, but a step writes INTO it. Only run artifacts (scope "run") can be produced by a step — flip the edge or make this a run artifact.`,a),"run"===c&&l.length>1&&f("warning","resource-multiple-producers",`Resource node "${z(a)}" is produced by ${l.length} steps; the last writer wins. Consider one producer per artifact.`,a),"run"===c&&0===l.length&&k.length>0&&f("warning","resource-consumed-never-produced",`Resource node "${z(a)}" is consumed but no step in this flow produces it; it resolves to nothing unless an earlier run captured it.`,a)}for(let a of d.filter(a=>"signal"===y(a))){let b=a.data?.properties??{};("string"==typeof b.topic?b.topic.trim():"")||f("warning","signal-missing-topic",`Signal node "${z(a)}" has no topic; it emits nothing. Give it a topic that a flow-event trigger can listen for.`,a)}if(k.length>0){let a=function(a){let b=new Map,c=(a,c)=>{b.has(a)||b.set(a,[]),b.get(a).push(c)};for(let b of a)!C(b)&&(c(b.source,b.target),b.data?.bidirectional&&c(b.target,b.source));return b}(e);for(let b of k)a.get(b.id)?.length||f("error","start-no-outgoing","The Start node is not connected to anything; the flow cannot run.",b);let b=function(a,b){let c=new Set(a),d=[...a];for(;d.length;){let a=d.shift();for(let e of b.get(a)??[])c.has(e)||(c.add(e),d.push(e))}return c}(k.map(a=>a.id),a);for(let a of[...m,...l])b.has(a.id)||f("warning","unreachable-node",`${"finish"===y(a)?"Finish":"Process"} node "${z(a)}" is not reachable from the Start node.`,a)}for(let a of d.filter(a=>"subflow"===y(a))){let b=e.filter(b=>!C(b)&&(b.source===a.id||b.target===a.id&&!!b.data?.bidirectional));b.length>1&&f("error","subflow-multiple-outgoing",`Subflow node "${z(a)}" has ${b.length} outgoing connections; a subflow can only have one (either A > B > C or a bidirectional A <> B).`,a);let c=a.data?.properties??{},g="string"==typeof c.subflowId&&c.subflowId?c.subflowId:void 0,h=Array.isArray(c.parallelSubflowIds)?c.parallelSubflowIds.filter(a=>"string"==typeof a&&!!a):[];g&&h.length>0&&f("error","subflow-both-targets",`Subflow node "${z(a)}" sets both a single "subflowId" and "parallelSubflowIds"; use one or the other.`,a);let i=!0===c.mapOverList;i&&h.length>0&&f("error","subflow-map-and-parallel",`Subflow node "${z(a)}" combines "mapOverList" with "parallelSubflowIds"; map-over-list runs a single child once per item and cannot be combined with parallel fan-out.`,a),i&&!g&&0===h.length&&f("error","subflow-map-no-child",`Subflow node "${z(a)}" has "mapOverList" but no child flow ("subflowId"); select a flow to run once per item.`,a);let j=Array.isArray(c.spawnBriefs)?c.spawnBriefs.filter(a=>"string"==typeof a&&""!==a.trim()):[];j.length>0&&!g&&f("error","subflow-spawn-no-child",`Subflow node "${z(a)}" has spawn briefs but no sub-agent flow ("subflowId"); select the flow to spawn once per brief.`,a),j.length>0&&h.length>0&&f("error","subflow-spawn-and-parallel",`Subflow node "${z(a)}" combines "spawnBriefs" with "parallelSubflowIds"; spawn briefs run one sub-agent per brief and cannot be combined with a multi-flow fan-out list.`,a),j.length>0&&i&&f("error","subflow-spawn-and-map",`Subflow node "${z(a)}" combines "spawnBriefs" with "mapOverList"; use one lane source or the other.`,a);let k="string"==typeof c.parallelSubflowIdsVar?c.parallelSubflowIdsVar.trim():"";if(k&&((0,w.qW)(k)||f("warning","subflow-parallel-var-name",`Subflow node "${z(a)}" reads dynamic fan-out targets from "${k}", which is not a valid variable name (letters, digits, _ and - only, not starting with a digit); it will be awkward to capture with \${var:...}.`,a),i&&f("error","subflow-map-and-parallel-var",`Subflow node "${z(a)}" combines "mapOverList" with dynamic fan-out ("parallelSubflowIdsVar"); map-over-list runs a single child once per item and cannot be combined with fan-out.`,a),d.some(a=>{let b=a.data?.properties?.captureVariable;return"string"==typeof b&&b.trim()===k})||f("warning","subflow-parallel-var-uncaptured",`Subflow node "${z(a)}" reads dynamic fan-out targets from variable "${k}", but no node captures it (captureVariable). It may be seeded by the caller; otherwise it resolves to no targets and the node falls back to its static parallel list.`,a)),!0===c.allowCallerFanout&&i&&f("error","subflow-map-and-caller-fanout",`Subflow node "${z(a)}" combines "mapOverList" with agentic fan-out ("allowCallerFanout"); map-over-list runs a single child once per item and cannot be combined with fan-out.`,a),h.length>0||j.length>0){let b=c.concurrencyLimit;"number"==typeof b&&b<1&&f("warning","subflow-concurrency-limit",`Subflow node "${z(a)}" has a concurrencyLimit of ${b}; it must be at least 1 (the runtime default will be used).`,a)}}{let a=new Map(d.map(a=>[a.id,a])),b=new Set;for(let c of e){if(C(c))continue;let d=c.data?.condition;if(!d||"object"!=typeof d)continue;let e=a.get(c.source),g=e?y(e):"unknown";if("process"!==g){f("error","edge-condition-non-process",`An edge leaving ${"unknown"===g?"an unknown":`the ${g}`} node "${e?z(e):c.source}" has a routing condition, but only process nodes can route on a condition.`,e??void 0);continue}b.add(c.source),(0,v.C)(d.kind)?"always"===d.kind||("string"!=typeof d.value||0===d.value.length?f("warning","edge-condition-value",`Process node "${z(e)}" has an outgoing edge condition with no "value"; it will never match.`,e):"regex"!==d.kind||(0,v.wM)(d.value)||f("warning","edge-condition-regex",`Process node "${z(e)}" has an outgoing edge with a regex condition that does not compile; it will never match.`,e)):f("warning","edge-condition-kind",`Process node "${z(e)}" has an outgoing edge whose condition kind "${String(d.kind)}" is unknown; it will never match.`,e)}for(let c of b){let b=a.get(c);b&&(e.some(a=>!C(a)&&(a.source===c?!a.data?.condition||"always"===a.data.condition.kind&&!a.data.condition.negate:!!(a.target===c&&a.data?.bidirectional)))||f("warning","edge-condition-no-fallback",`Process node "${z(b)}" has conditioned outgoing edges but no bare fallback edge; if no condition matches, the flow ends here.`,b))}}{let a=new Set;for(let b of d){let c=b.data?.properties?.captureVariable;if("string"==typeof c&&c.trim()){let d=c.trim();a.add(d),(0,w.qW)(d)||f("warning","capture-var-name",`${"subflow"===y(b)?"Subflow":"Process"} node "${z(b)}" captures into "${d}", which is not a valid variable name (letters, digits, _ and - only, not starting with a digit); it will be awkward to reference with \${var:...}.`,b)}}let b=["promptTemplate","isolatedPrompt"],c=new Set;for(let e of d){let d=e.data?.properties??{};for(let g of b){let b=d[g];if("string"==typeof b&&b)for(let d of(0,w.T9)(b)){if(a.has(d))continue;let b=`${e.id}:${d}`;c.has(b)||(c.add(b),f("warning","var-ref-uncaptured",`${z(e)} references \${var:${d}} but no step in this flow captures "${d}" (via captureVariable). It resolves to empty unless supplied as a run input — check for a typo or a step ordered after this one.`,e))}}}}{for(let a of d){let b=a.data?.properties?.captureKv;if("string"==typeof b&&b.trim()){let{key:c}=(0,x.g2)(b.trim());(0,x.ng)(c)||f("warning","capture-kv-name",`${"subflow"===y(a)?"Subflow":"Process"} node "${z(a)}" captures into kv "${b.trim()}", whose key is not a valid name (letters, digits, _ and - only, not starting with a digit); it will be awkward to reference with \${kv:...}.`,a)}}let a=["promptTemplate","isolatedPrompt"],b=new Set;for(let c of d){let d=c.data?.properties??{};for(let e of a){let a=d[e];if("string"==typeof a&&a)for(let d of(0,x.pf)(a)){let{key:a}=(0,x.g2)(d);if((0,x.ng)(a))continue;let e=`${c.id}:${d}`;b.has(e)||(b.add(e),f("warning","kv-ref-name",`${z(c)} references \${kv:${d}}, whose key is not a valid name (letters, digits, _ and - only, not starting with a digit); it resolves to empty.`,c))}}}}for(let a of m){let c=a.data?.properties?.promptTemplate;if("string"!=typeof c||!c)continue;let g=D(a.id,d,e),h=null,i=new Set,j=new Set;for(let k of(0,t.A$)(c)){if("handoff"===k.server){let b=`handoff:${k.name}`;if(j.has(b))continue;j.add(b),i.add(k.name),h||(h=E(a.id,d,e)),h.has(k.name)||f("warning","handoff-pill-obsolete",`Process node "${z(a)}" references handoff tool "${k.name}", which no longer exists (the target node was removed, or renamed so the tool name changed). Update or remove the pill.`,a);continue}let c=`${k.kind}:${k.server}:${k.name}`;!j.has(c)&&(j.add(c),g.has(k.server)?"tool"===k.kind&&b.serverTools&&b.serverTools[k.server]&&!b.serverTools[k.server].includes(k.name)&&f("warning","tool-unavailable",`Process node "${z(a)}" references tool "${k.name}" which server "${k.server}" does not currently expose.`,a):f("error","tool-pill-disconnected",`Process node "${z(a)}" references ${k.kind} "${k.name}" from server "${k.server}", but it is not connected to that server (the MCP node was removed or the server was renamed).`,a))}if(i.size>0)for(let b of h??E(a.id,d,e))i.has(b)||f("warning","handoff-target-unreferenced",`Process node "${z(a)}" can hand off to "${b}" but its prompt never references \${tool:handoff__${b}}, so the model may never route there.`,a)}if(b.serverTools)for(let a of m){let c=D(a.id,d,e),g=new Set;for(let d of c){let c=b.serverTools[d];if(Array.isArray(c)&&0===c.length&&f("warning","mcp-server-no-tools",`Process node "${z(a)}" is connected to MCP server "${d}", which currently exposes 0 tools. The connection has no effect until the server provides tools.`,a),Array.isArray(c))for(let b of Array.isArray(a.data?.properties?.enabledTools)?a.data.properties.enabledTools:[]){let e=`enabledTool:${d}:${b}`;!g.has(e)&&(c.includes(b)||(g.add(e),f("warning","tool-unavailable",`Process node "${z(a)}" has enabledTool "${b}" which server "${d}" does not currently expose.`,a)))}}}let o=c.filter(a=>"error"===a.severity).length,p=c.length-o;return{issues:c,errorCount:o,warningCount:p,isRunnable:0===o}}(a,{models:b,servers:c,serverTools:e})}async function J(a){let b=await o.flowService.getFlow(a);return b?I(b):(H.warn(`validateFlowForRun: flow ${a} could not be loaded; skipping pre-run checks`),{issues:[],errorCount:0,warningCount:0,isRunnable:!0})}var K=c(85701),L=c(44479),M=c(35796),N=c(81970),O=c(18205),P=c(22124),Q=c(55264),R=c(55511);let S=(0,R.randomUUID)(),T="A tool may have produced an external side effect before execution stopped. Automatic replay is disabled; restart the turn or confirm the effect before retrying.";function U(a){return"number"==typeof a&&Number.isFinite(a)?a:void 0}function V(a){return"string"==typeof a&&a.length>0?a:void 0}function W(a,b){let c=Date.now(),d=a.recovery;if(d?.runId===b)return d.classification="running",d.ownerId=S,d.ownerHeartbeatAt=c,d.updatedAt=c,d.terminalAt=void 0,d.failure=void 0,d.retryAfterAt=void 0,d.manualActionRequired=!1,d.sideEffectWarning=void 0,a.recovery=d,d;let e={version:1,runId:b,attemptId:(0,R.randomUUID)(),attempt:1,classification:"running",parentRunId:a.parentRunId,ownerId:S,ownerHeartbeatAt:c,startedAt:c,updatedAt:c};return a.recovery=e,e}function X(a,b){let c=(a.messages??[]).slice(-8).map(a=>({id:a.id,role:a.role,content:a.content,toolCalls:a.tool_calls,toolCallId:a.tool_call_id}));return(0,R.createHash)("sha256").update(JSON.stringify({flowId:a.flowId,nodeId:b,messages:c})).digest("hex")}async function Y(a,b,c,d){d?(d(c),b.conversationId&&!b.ephemeral&&await (0,g.u8)(b.conversationId)):await (0,g.D$)(b,[c]),await (0,f.persistConversationState)(a,b)}async function Z(a,b,c,d){if(b.ephemeral)return;let e=b.recovery??W(b,b.logicalRunId??(0,R.randomUUID)()),f=Date.now(),g={id:(0,R.randomUUID)(),phase:c.phase,nodeId:c.nodeId,turnEntryNodeId:c.turnEntryNodeId??e.lastSafeCheckpoint?.turnEntryNodeId??c.nodeId,attempt:e.attempt,inputFingerprint:X(b,c.nodeId),safe:c.safe,effectStatus:c.effectStatus??"none",parentRunId:b.parentRunId,lane:e.lane,tools:c.tools,createdAt:f};return e.currentCheckpoint=g,g.safe&&(e.lastSafeCheckpoint=g),e.ownerId=S,e.ownerHeartbeatAt=f,e.updatedAt=f,g.safe||"unknown"!==g.effectStatus||(e.manualActionRequired=!0,e.sideEffectWarning=T),b.recovery=e,await Y(a,b,{type:"recovery:checkpoint",checkpoint:g},d),g}async function $(a,b,c,d,e){let f=c.map(a=>{let c=b.toolNameMap?.[a.function.name],d=c?.annotations,e=d?.readOnlyHint===!0;return{toolCallId:a.id,name:a.function.name,readOnly:e,idempotent:e||d?.idempotentHint===!0,destructive:d?.destructiveHint}});f.some(a=>!a.readOnly)&&await Z(a,b,{phase:"before"===d?"tool:before":"completed"===d?"tool:after":"tool:unknown",nodeId:b.currentNodeId,safe:"completed"===d,effectStatus:"before"===d?"pending":"completed"===d?"completed":"unknown",tools:f},e)}async function _(a,b,c,d={},e){let f=function(a,b,c={}){let d=a.recovery??W(a,a.logicalRunId??(0,R.randomUUID)()),e=Date.now();return d.classification=b,d.failure=c.failure,d.retryAfterAt=c.retryAfterAt,d.cancellationRequestedAt=c.cancellationRequestedAt??d.cancellationRequestedAt,d.manualActionRequired=c.manualActionRequired??d.manualActionRequired,d.sideEffectWarning=c.sideEffectWarning??d.sideEffectWarning,d.updatedAt=e,d.ownerHeartbeatAt=e,"running"!==b&&"paused"!==b&&(d.terminalAt=e),a.recovery=d,d}(b,c,d);return await Y(a,b,{type:"recovery:transition",recovery:{...f}},e),f}async function aa(a,b){let c=b.recovery;return"running"===b.status&&!!c?.ownerId&&c.ownerId!==S&&(b.status="error",b.isCancelled=!1,b.lastResponse={success:!1,error:"Execution was interrupted before it reached a terminal boundary."},await _(a,b,"interrupted",{failure:{category:"unclean_process_interruption",message:"The process that owned this run is no longer active.",retryable:!1},manualActionRequired:!0}),!0)}let ab=(0,d.h)("backend/execution/flow/runFlow");o.flowService.getFlowByName||(o.flowService.getFlowByName=async a=>(await o.flowService.loadFlows()).find(b=>b.name===a)||null,ab.info("Added getFlowByName method directly to flowService instance."));let ac=o.flowService,ad=f.persistConversationState;async function ae(a,b,c){let d;if(!a.unattended)return"complete";let e=a.currentNodeId;if(!e)return"complete";try{d=a.flowSnapshot??(a.flowId?await o.flowService.getFlow(a.flowId)??void 0:void 0)}catch(a){return ab.debug("[Unattended] flow load failed; completing normally",{err:a}),"complete"}if(!d)return"complete";let f=d.nodes?.find(a=>a.id===e);if(!f||"process"!==f.type)return"complete";let g=new Set((d.nodes??[]).filter(a=>"mcp"===a.type).map(a=>a.id)),h=Array.from(new Set((d.edges??[]).filter(a=>a.source===e&&"mcpEdge"!==a.type&&a.data?.edgeType!=="mcp"&&a.data?.bidirectional!==!0&&!g.has(a.target)).map(a=>a.target))).filter(a=>(d.nodes??[]).some(b=>b.id===a));if(1===h.length){let d=h[0];ab.info(`[Unattended] Process node ${e} ended on plain text; auto-advancing to sole forward successor ${d} for conv ${a.conversationId}.`);let f=a.currentNodeId;return a.currentNodeId=d,a.handoffRequested=void 0,c.delete(e),b({type:"handoff",from:f?{nodeId:f}:void 0,toNodeId:d,edgeId:`unattended-auto:${e}->${d}`}),"advanced"}if(h.length>1){let b=c.get(e)??0;if(b<1)return c.set(e,b+1),ab.info(`[Unattended] Process node ${e} ended on plain text with ${h.length} forward successors; nudging to hand off (attempt ${b+1}/1).`),a.messages.push({id:crypto.randomUUID(),role:"user",content:"You ended your turn without calling a tool or handing off, but this is an unattended run that cannot stop at this step. To continue you MUST call one of your handoff tools to route to the next step. If your work at this step is complete, hand off to the finishing/next step now.",timestamp:Date.now(),processNodeId:e}),"nudged";ab.warn(`[Unattended] Process node ${e} still did not hand off after 1 nudge(s); completing the run to avoid a loop.`)}return"complete"}async function af(a,b,c){try{let d,e=a.flowId;if(!e)return;try{d=(await o.flowService.getFlow(e))?.name??void 0}catch{}let f="chat"===a.source?"chat":"api",g=c&&c.length>4096?`${c.slice(0,4096)}…`:c;(0,k.eh)().publish({flowId:e,flowName:d,executionId:a.plannedExecutionId,runId:a.conversationId||"",conversationId:a.conversationId||"",status:b,outputText:g,firedBy:f,chainDepth:a.chainDepth??0,timestamp:new Date().toISOString()})}catch(a){ab.warn("Failed to publish runFlow flow-run event:",a)}}async function ag(a){let b,c,d;if(!(0,l.M6)(a.source))throw TypeError(`runFlow requires an explicit invocation source (${String(a.source)} is invalid)`);let f=Date.now(),h=a.flujo??!0,k=a.requireApproval??!1,r=a.debug??!1,s=a.continueDebug??!1,t=a.userTurn??!1,u="ephemeral"===a.mode,v=a.messages??(void 0!==a.prompt?[{role:"user",content:a.prompt}]:[]),w={model:a.modelName,messages:v,processNodeId:a.processNodeId};ab.info("runFlow invoked",{flowId:a.flowId,model:a.modelName,messageCount:v.length,mode:u?"ephemeral":"conversation",flujo:h,requireApproval:k,flujodebug:r,conversationId:a.conversationId});let x=a.conversationId||crypto.randomUUID(),y=`conversations/${x}`,z="new",A=!1;if(ab.info(`Effective Conversation ID for this run: ${x}`,{providedId:a.conversationId}),e.FlowExecutor.conversationStates.has(x))c=e.FlowExecutor.conversationStates.get(x),ab.info(`Resuming conversation ${x} from memory`,{currentNodeId:c.currentNodeId}),z="memory";else if(!u)try{(c=await (0,p.YM)(y,void 0))?(ab.info(`Loaded conversation state from storage: ${x}`),z="storage",await (0,g.jM)(c),await aa(y,c),e.FlowExecutor.conversationStates.set(x,c)):ab.info(`No state found in storage for conversation: ${x}. Will create new state.`)}catch(a){ab.warn(`Error loading conversation state from storage for ${x}:`,a)}let B=!!(c?.logicalRunId&&("awaiting_tool_approval"===c.status||"paused_debug"===c.status));if(c?((b=c).conversationId!==x&&(ab.warn(`Loaded state's internal conversationId (${b.conversationId}) differs from effectiveConvId (${x}). Using effectiveConvId.`),b.conversationId=x),"new"!==z&&("completed"===b.status||"error"===b.status||void 0===b.status)&&(ab.info(`Resuming completed/errored/fresh conversation ${x}. Resetting status to 'running'.`),A="error"===b.status,b.status="running",b.lastResponse=void 0,b.isCancelled=!1,"storage"===z&&e.FlowExecutor.conversationStates.set(x,b)),w.processNodeId&&"new"!==z&&(ab.info(`Edit detected: Resetting currentNodeId for conversation ${x} to provided processNodeId: ${w.processNodeId}`),b.currentNodeId=w.processNodeId,b.status="running",b.lastResponse=void 0,b.pendingToolCalls=void 0,b.handoffRequested=void 0,b.isCancelled=!1,b.trackingInfo={executionId:crypto.randomUUID(),startTime:Date.now(),nodeExecutionTracker:[]},q.G.ENABLE_EXECUTION_TRACKER&&b.executionTrace&&(b.executionTrace=[]),e.FlowExecutor.conversationStates.set(x,b),ab.verbose(`State updated in memory with reset currentNodeId: ${b.currentNodeId}`))):(ab.info(`Creating new conversation state object for ID: ${x}`),b={trackingInfo:{executionId:crypto.randomUUID(),startTime:Date.now(),nodeExecutionTracker:(q.G.ENABLE_EXECUTION_TRACKER,[])},messages:[],flowId:"",conversationId:x,currentNodeId:void 0,status:"running",title:a.title?.trim()||"New Conversation",createdAt:Date.now(),updatedAt:Date.now(),debugMode:r,executionTrace:r&&q.G.ENABLE_EXECUTION_TRACKER?[]:void 0,variables:{}}),a.variables&&"object"==typeof a.variables)for(let[c,d]of(b.variables=b.variables??{},Object.entries(a.variables)))null!=d&&(b.variables[c]="string"==typeof d?d:String(d));if(void 0!==a.mcpAppContexts&&(b.mcpAppContexts=a.mcpAppContexts),b.requireApproval=k,b.source=a.source,b.unattended=(0,l.xg)(a.source),a.plannedExecutionId&&(b.plannedExecutionId=a.plannedExecutionId),a.plannedExecutionName&&(b.statisticsPlannedExecutionName=a.plannedExecutionName),u&&(b.ephemeral=!0),a.parentRunId&&(b.parentRunId=a.parentRunId,b.parentConversationId=a.parentRunId,!b.rootConversationId)){let c=e.FlowExecutor.conversationStates.get(a.parentRunId);b.rootConversationId=c?.rootConversationId??c?.conversationId??a.parentRunId}b.runDepth=a.depth??b.runDepth??0,b.chainDepth=a.chainDepth??b.chainDepth??0,b.onApprovalRequired=a.onApprovalRequired??b.onApprovalRequired??"auto",B||(b.logicalRunId=a.runId??crypto.randomUUID(),b.statisticsRunStartedAt=Date.now(),b.statisticsRunStarted=!1,b.statisticsRunFinished=!1,b.statisticsFlowName=a.flowDefinition?.name??(a.modelName?.startsWith("flow-")?a.modelName.slice(5):void 0),b.statisticsPlannedExecutionName=a.plannedExecutionName);let C=b.logicalRunId??a.runId??crypto.randomUUID();b.logicalRunId=C,b.statisticsRunStartedAt??=Date.now(),W(b,C),a.lane&&(b.recovery.lane=a.lane);let D=()=>({id:b.flowId||a.flowId||a.flowDefinition?.id||a.modelName||"unknown",name:b.statisticsFlowName??b.flowSnapshot?.name??a.flowDefinition?.name}),E=b.plannedExecutionId?{id:b.plannedExecutionId,name:b.statisticsPlannedExecutionName}:void 0,F=()=>{b.statisticsRunStarted||((0,Q.z9)((0,Q.k)({type:"run.started",runId:C,source:a.source,flow:D(),plannedExecution:E,conversationId:x})),b.statisticsRunStarted=!0)},G=c=>{F();let d=Math.max(0,Date.now()-(b.statisticsRunStartedAt??f));if("awaiting_tool_approval"===c.status||"paused_debug"===c.status)(0,Q.z9)((0,Q.k)({type:"run.paused",runId:C,source:a.source,flow:D(),plannedExecution:E,pauseKind:"paused_debug"===c.status?"debug":"approval",durationMs:d}));else if(!b.statisticsRunFinished){let e=b.isCancelled?"cancelled":"error"===c.status?"error":"capped"===c.status||b.capped?"capped":"completed";(0,Q.z9)((0,Q.k)({type:"run.finished",runId:C,source:a.source,flow:D(),plannedExecution:E,outcome:e,durationMs:d,errorClass:"error"===e?(0,Q.Ys)(c.error):void 0,usage:c.usage?{inputTokens:c.usage.promptTokens,outputTokens:c.usage.completionTokens,totalTokens:c.usage.totalTokens,cachedInputTokens:c.usage.cacheReadTokens}:void 0})),b.statisticsRunFinished=!0}return{...c,runId:C}};if(b.runDepth>K.A)return ab.error(`runFlow aborted: subflow depth ${b.runDepth} exceeds max ${K.A}`),b.status="error",G({status:"error",conversationId:x,outputText:"",messages:b.messages,error:{message:`Subflow recursion limit (${K.A}) exceeded`,statusCode:500},finalAction:l.O,sharedState:b});let H=[...b.messages??[]];if("new"===z){a.flowDefinition&&(b.flowSnapshot=a.flowDefinition,b.flowId=a.flowDefinition.id);let c=a.flowDefinition?a.flowDefinition.id:a.flowId;if(!c&&w.model){let a=w.model.substring(5),d=await ac.getFlowByName(a);if(!d)return ab.error(`Flow not found: ${a}`),G({status:"error",conversationId:x,outputText:"",messages:b.messages,flowNotFound:{name:a},error:{message:`Flow not found: ${a}`,statusCode:400},finalAction:l.O,sharedState:b});c=d.id}if(!c)return ab.error("No flow specified for run (neither flowId nor model provided)."),G({status:"error",conversationId:x,outputText:"",messages:b.messages,error:{message:"No flow specified (provide flowId or model).",statusCode:400},finalAction:l.O,sharedState:b});b.flowId=c;let d=(w.messages||[]).filter(a=>!(a.depth>0)).map(a=>({...a,id:a.id||crypto.randomUUID(),timestamp:a.timestamp||Date.now(),processNodeId:a.processNodeId||void 0}));b.messages=d;let f=[...d].reverse().find(a=>"user"===a.role);f&&(b.lastUserMessageAt=f.timestamp??Date.now());try{if(b.updatedAt=Date.now(),"New Conversation"===b.title&&b.messages.length>0){let a=b.messages.find(a=>"user"===a.role);a&&"string"==typeof a.content&&(b.title=(0,M.oO)(a.content),ab.verbose(`Updated conversation title for ${x} during init to: ${b.title}`))}await ad(y,b),ab.debug(`Saved initial state for new conversation ${x}.`)}catch(a){ab.error(`Failed to save initial state for new conversation ${x}:`,a)}e.FlowExecutor.conversationStates.set(x,b)}else{if(w.messages&&w.messages.length>0&&(b.messages=w.messages.filter(a=>!(a.depth>0)).map(a=>({...a,id:a.id||crypto.randomUUID(),timestamp:a.timestamp||Date.now(),processNodeId:a.processNodeId||void 0})),ab.info(`Updated conversation ${b.conversationId} with ${b.messages.length} messages from request`),t)){let a=[...b.messages].reverse().find(a=>"user"===a.role);a&&(b.lastUserMessageAt=a.timestamp??Date.now())}(t||void 0===b.debugMode)&&(b.debugMode=r),t&&(b.debugPendingToolCalls=void 0),b.debugMode&&q.G.ENABLE_EXECUTION_TRACKER&&!b.executionTrace&&(b.executionTrace=[])}if(!b.statisticsFlowName&&b.flowId)try{b.statisticsFlowName=(await o.flowService.getFlow(b.flowId))?.name}catch{}F();try{await (0,g.reconcileConversationLog)(b,H);let a=(0,g.bS)(b);a.length&&(ab.info(`Repaired ${a.length} dangling tool call(s) for ${x} at run start (issue #256).`),function(a,b="interrupted"){let c=a.recovery??W(a,a.logicalRunId??(0,R.randomUUID)()),d=Date.now(),e={id:(0,R.randomUUID)(),phase:"tool:unknown",nodeId:a.currentNodeId,turnEntryNodeId:c.lastSafeCheckpoint?.turnEntryNodeId,attempt:c.attempt,inputFingerprint:X(a,a.currentNodeId),safe:!1,effectStatus:"unknown",parentRunId:a.parentRunId,lane:c.lane,createdAt:d};c.currentCheckpoint=e,c.classification=b,c.failure={category:"tool_failure",message:"A dangling tool call was repaired after interruption; its external effect is unknown.",retryable:!1},c.manualActionRequired=!0,c.sideEffectWarning=T,c.updatedAt=d,c.terminalAt="interrupted"===b?d:void 0,a.recovery=c}(b,"running"),await (0,g.D$)(b,[...a.map(a=>({type:"message",message:a})),{type:"recovery:checkpoint",checkpoint:b.recovery.currentCheckpoint},{type:"recovery:transition",recovery:{...b.recovery}}]))}catch(a){ab.warn(`Conversation-log reconcile failed for ${x}; continuing`,a)}if(t&&"new"!==z&&!w.processNodeId){let a=b.messages.length>0?b.messages[b.messages.length-1]:void 0;a?.role==="user"&&a.processNodeId&&a.processNodeId!==b.currentNodeId&&(ab.info(`New user turn for ${x}: directing execution to node ${a.processNodeId} (was ${b.currentNodeId}).`),b.currentNodeId=a.processNodeId,e.FlowExecutor.conversationStates.set(x,b))}if(A&&t&&!u&&"new"!==z&&!w.processNodeId){let a=b.messages.length>0?b.messages[b.messages.length-1]:void 0;if(a?.role!=="user"){let a;for(let c=b.messages.length-1;c>=0;c--)if("user"===b.messages[c].role){a=b.messages[c].processNodeId;break}if(!a&&b.flowId)try{let c=await o.flowService.getFlow(b.flowId);a=c?.nodes?.find(a=>"start"===a.type)?.id}catch(a){ab.warn(`Could not resolve start node for error-resume of ${x}`,a)}a&&a!==b.currentNodeId&&(ab.info(`Error-resume for ${x}: replaying turn from entry node ${a} (was ${b.currentNodeId}).`),b.currentNodeId=a,e.FlowExecutor.conversationStates.set(x,b))}}t&&b.flowId&&(e.FlowExecutor.clearFlowCache(b.flowId),ab.debug(`Cleared compiled-flow cache for ${b.flowId} at start of user turn ${x}.`));let S=!1,Y=0,ag=new Map,ah=new Map,ai=a.emit??j.$.emitterFor(x),aj=a.emit?void 0:ai,ak=new Set(b.messages.map(a=>a.id).filter(a=>!!a)),al=a=>{if(!a.usage)return;let c=b.usage??{promptTokens:0,completionTokens:0,totalTokens:0,costUsd:0,byNode:{}};c.promptTokens+=a.usage.promptTokens,c.completionTokens+=a.usage.completionTokens,c.totalTokens+=a.usage.totalTokens;let d=a.usage.cacheReadTokens??0;d&&(c.cacheReadTokens=(c.cacheReadTokens??0)+d);let e=a.processNodeId||"unknown",f=c.byNode[e]??{promptTokens:0,completionTokens:0,totalTokens:0,costUsd:0};f.promptTokens+=a.usage.promptTokens,f.completionTokens+=a.usage.completionTokens,f.totalTokens+=a.usage.totalTokens,d&&(f.cacheReadTokens=(f.cacheReadTokens??0)+d),c.byNode[e]=f,b.usage=c,ai({type:"usage",node:a.processNodeId?{nodeId:a.processNodeId}:void 0,promptTokens:a.usage.promptTokens,completionTokens:a.usage.completionTokens,totalTokens:a.usage.totalTokens,costUsd:0,...d?{cacheReadTokens:d}:{}})},am=()=>{for(let a of b.messages)a.id||(a.id=crypto.randomUUID()),ak.has(a.id)||(ak.add(a.id),"system"!==a.role&&(ai({type:"message",message:a,node:a.processNodeId?{nodeId:a.processNodeId}:void 0}),al(a)))};ai({type:"run:start",flowId:b.flowId}),await _(y,b,"running",{},aj);let an=[];if(b.flowId)try{let a=b.flowSnapshot??await o.flowService.getFlow(b.flowId);if(a)for(let c of a.nodes||[]){let a=c.data?.properties?.boundServer;c.data?.type==="mcp"&&a&&(an.push(a),(0,N.F7)(a,{conversationId:x,getUnattended:()=>!!b.unattended}))}}catch(a){ab.debug("Could not enumerate MCP servers for elicitation context; skipping",{err:a})}if((t||"new"===z)&&b.flowId)try{let a=b.flowSnapshot?await I(b.flowSnapshot):await J(b.flowId);if(!a.isRunnable){let c=a.issues.filter(a=>"error"===a.severity),e=`This flow can't run yet — please fix the following before running:
2
+ `+c.map(a=>`• ${a.message}`).join("\n");ab.warn(`Pre-run validation blocked flow ${b.flowId} for conv ${x}`,{errorCount:c.length,codes:c.map(a=>a.code)}),b.lastResponse={success:!1,error:e,errorDetails:{message:e,type:"invalid_request_error",code:"flow_invalid",status:400}},d=l.O,S=!0}}catch(a){ab.warn(`Pre-run validation could not complete for ${b.flowId}; proceeding`,a)}let ao=!1,ap=()=>!!b.isCancelled||!!(0,L.isCancelledByAncestry)(b.parentRunId,e.FlowExecutor.conversationStates)&&(ao=!0,b.isCancelled=!0,!0),aq=async a=>{await $(y,b,a.toolCalls,"before",aj);try{let c=await m.s.processToolCalls(a);return c.success||await $(y,b,a.toolCalls,"unknown",aj),c}catch(c){throw await $(y,b,a.toolCalls,"unknown",aj),c}},ar=async()=>{if(0===(i.get(x)?.length??0))return!1;if((()=>{let a=new Set;for(let c of b.messages)if("tool"===c.role){let b=c.tool_call_id;b&&a.add(b)}return b.messages.some(b=>"assistant"===b.role&&Array.isArray(b.tool_calls)&&b.tool_calls.some(b=>b.id&&!a.has(b.id)))})())return ab.debug(`Steering message(s) waiting for ${x} but a tool exchange is in flight; deferring.`),!1;let a=function(a){let b=i.get(a);return b&&0!==b.length?(i.delete(a),b):[]}(x);if(0===a.length)return!1;try{for(let c of a)!c.processNodeId&&b.currentNodeId&&(c.processNodeId=b.currentNodeId);return b.messages.push(...a),b.lastUserMessageAt=a[a.length-1].timestamp??Date.now(),e.FlowExecutor.conversationStates.set(x,b),am(),b.ephemeral||await (0,g.D$)(b,a.map(a=>({type:"message",message:a}))),ab.info(`Folded ${a.length} steering message(s) into the live run for ${x}.`),!0}catch(b){return!function(a,b){if(0===b.length)return;let c=i.get(a)??[];i.set(a,[...b,...c])}(x,a),ab.warn(`Failed to fold steering message(s) for ${x}; re-queued`,b),!1}},as=!!b.debugMode&&!s,at=()=>{b.status="paused_debug",ai({type:"run:paused",reason:"debug",node:b.currentNodeId?{nodeId:b.currentNodeId}:void 0})};try{if(!S)for(;;){if(Y++,ab.debug(`--- Starting Execution Step ${Y} for Conv ${x} ---`),Y>150){ab.warn(`Max internal iterations (150) reached for conv ${x}. Breaking loop.`),d!==l.O&&(b.lastResponse={success:!1,error:"Maximum internal iterations (150) reached."},d=l.O);break}if(ap()){ab.info(`Cancellation flag detected for conv ${x}. Terminating execution.`),b.status="error",b.lastResponse={success:!1,error:"Execution cancelled by user."},d=l.O;break}if(await ar(),b.debugPendingToolCalls&&b.debugPendingToolCalls.length>0){let a=b.debugPendingToolCalls;b.debugPendingToolCalls=void 0,ab.info(`[Debug Step] Executing ${a.length} pending tool call(s) for conv ${x}.`);let c=await aq({toolCalls:a,toolNameMap:b.toolNameMap,emit:ai,conversationId:b.ephemeral?void 0:b.conversationId,runId:C,node:b.currentNodeId?{nodeId:b.currentNodeId}:void 0,shouldAbort:ap,mcpNodes:b.currentMCPNodes});if(!c.success){ab.error(`Debug tool processing failed for conv ${x}`,{error:c.error}),b.lastResponse={success:!1,error:"Tool processing failed",errorDetails:c.error},d=l.O;break}let f=c.value.toolCallMessages.map(a=>({...a,id:crypto.randomUUID(),timestamp:Date.now(),processNodeId:b.currentNodeId}));b.messages.push(...f),e.FlowExecutor.conversationStates.set(x,b),am(),await $(y,b,a,"completed",aj);try{b.updatedAt=Date.now(),await ad(y,b)}catch(a){ab.error(`Failed to save state after debug tool execution for conv ${x}:`,a)}if(as){ab.info(`[Debug Step] Paused after tool execution for conv ${x}.`),at();break}continue}if(!as&&b.breakpoints&&b.breakpoints.length>0){let a=await e.FlowExecutor.peekNextNodeId(b),c=b.breakpoints.includes("*");if(a&&(c||b.breakpoints.includes(a))&&b.lastBreakNodeId!==a){c&&(b.breakpoints=b.breakpoints.filter(a=>"*"!==a)),ab.info(`Breakpoint hit at node ${a}${c?" (attach)":""} for conv ${x}. Pausing.`),b.status="paused_debug",b.debugMode=!0,b.lastBreakNodeId=a,ai({type:"breakpoint:hit",node:{nodeId:a}}),ai({type:"run:paused",reason:"breakpoint",node:{nodeId:a}});try{b.updatedAt=Date.now(),await ad(y,b)}catch(a){ab.error(`Failed to save state on breakpoint for conv ${x}:`,a)}break}a&&b.lastBreakNodeId&&a!==b.lastBreakNodeId&&(b.lastBreakNodeId=void 0)}if(b.messages.length>0){let a=b.messages.slice(-3);ab.verbose(`Message history before step ${Y}`,a)}else ab.verbose(`No messages in history before step ${Y}`);let a=await e.FlowExecutor.peekNextNodeId(b)??b.currentNodeId;await Z(y,b,{phase:"node:before",nodeId:a,safe:!0},aj);let c=await e.FlowExecutor.executeStep(b,ai);if(b=c.sharedState,d=c.action,am(),d!==l.O&&await Z(y,b,{phase:"node:after",nodeId:a,safe:!0},aj),b.updatedAt=Date.now(),"New Conversation"===b.title&&b.messages.length>0){let a=b.messages.find(a=>"user"===a.role);a&&"string"==typeof a.content&&(b.title=(0,M.oO)(a.content),ab.verbose(`Updated conversation title for ${x} after step ${Y} to: ${b.title}`))}if(ab.info(`Step ${Y} completed for conv ${x}. Action: ${d}`,{currentNodeId:b.currentNodeId}),ab.verbose(`Shared state after step ${Y}`,b),ab.debug(`[Action Handling] Step ${Y}: Received action "${d}" for conv ${x}`),d===l.O){ab.info(`[Action Handling] Step ${Y}: Handling ERROR_ACTION for conv ${x}`),ab.error(`Error action received during step ${Y} for conv ${x}`,{error:b.lastResponse});break}if(d===l.g4){if(ab.info(`[Action Handling] Step ${Y}: Handling FINAL_RESPONSE_ACTION for conv ${x}`),ab.info(`Final response action received at step ${Y} for conv ${x}`),b.forceSummaryTurn){b.forceSummaryTurn=!1,b.capped=!0,b.status="capped",ab.info(`[#253] Graceful landing complete for conv ${x}; status=capped.`);break}let a=await ae(b,ai,ag);if("advanced"===a||"nudged"===a){am(),e.FlowExecutor.conversationStates.set(x,b);continue}if(await ar()){ab.info(`Steering message arrived as ${x} was completing; continuing the run to answer it.`),e.FlowExecutor.conversationStates.set(x,b);continue}b.status="completed",ab.info(`Setting conversation status to 'completed' for conv ${x}`);break}if(d===l.Jp){ab.info(`[Action Handling] Step ${Y}: Handling TOOL_CALL_ACTION for conv ${x}`),ab.info(`Tool call action received at step ${Y} for conv ${x}`);let a=b.messages.length>0?b.messages[b.messages.length-1]:null;if(a?.role==="assistant"&&a.tool_calls)if(h){let c=b.currentNodeId;if(c&&!b.forceSummaryTurn){let d=(ah.get(c)??0)+1;ah.set(c,d);let f=b.turnBudgets?.[c]??P.m;if(d>=f){ab.info(`[#253] Turn budget (${f}) reached for node ${c} on conv ${x}; forcing a graceful summary turn instead of executing tools.`);let d=Date.now(),h=a.tool_calls.map(a=>({id:crypto.randomUUID(),role:"tool",tool_call_id:a.id,content:"Turn budget reached: this tool was not executed. No further tool calls are possible. Provide a final text-only summary instead.",timestamp:d,processNodeId:c})),i={id:crypto.randomUUID(),role:"user",content:"SYSTEM NOTICE — TURN BUDGET REACHED. You have used up the maximum number of agentic turns allotted for this task, so no further tool calls are possible. This overrides every previous instruction to keep working or to call a tool. Produce a single, final, text-only message that:\n1. Summarizes what was accomplished so far.\n2. Lists the tasks that remain unfinished.\n3. Recommends concrete next steps for whoever continues this work.\nDo NOT attempt to call any tool. Answer with plain text only.",timestamp:d+1,processNodeId:c};if(b.messages.push(...h,i),b.forceSummaryTurn=!0,b.cappedReason="maxTurns",e.FlowExecutor.conversationStates.set(x,b),am(),!b.ephemeral)try{await (0,g.D$)(b,[...h,i].map(a=>({type:"message",message:a})))}catch(a){ab.warn(`Failed to append graceful-cap messages to log for ${x}`,a)}continue}}if(k&&"fail"===b.onApprovalRequired){let c=a.tool_calls[0],e=c&&"function"===c.type?c.function.name:"unknown";ab.info(`[flujo=true, onApprovalRequired=fail] Failing fast for tool "${e}" (conv ${x})`),b.status="error",b.pendingToolCalls=a.tool_calls,b.lastResponse={success:!1,error:`Headless run requires approval for tool "${e}" but no approver is available (approvalPolicy: fail).`,errorDetails:{message:`Headless run requires approval for tool "${e}" but no approver is available (approvalPolicy: fail).`,type:"approval_required",name:e}},d=l.O;break}if(k){let c=[],d=[],f=b.permissionRules??[],g=b.savedPermissionRules??[];if(f.length>0||g.length>0)for(let e of a.tool_calls){let a=(0,n.ud)(e.function.name,b.toolNameMap);if(!a){c.push(e);continue}let h={};try{h=JSON.parse(e.function.arguments)}catch{}let i=(0,O.SX)(h),j=(0,O.R6)(f,g,a.server,a.tool,i);"deny"===j||"allow"===j?d.push(e):c.push(e)}else c.push(...a.tool_calls);if(d.length>0){let a=await aq({toolCalls:d,toolNameMap:b.toolNameMap,emit:ai,conversationId:b.ephemeral?void 0:b.conversationId,runId:C,node:b.currentNodeId?{nodeId:b.currentNodeId}:void 0,shouldAbort:ap,mcpNodes:b.currentMCPNodes,permissionRules:f,savedPermissionRules:g,unattended:b.unattended});if(a.success){let c=a.value.toolCallMessages.map(a=>({...a,id:crypto.randomUUID(),timestamp:Date.now(),processNodeId:b.currentNodeId}));b.messages.push(...c),am(),await $(y,b,d,"completed",aj)}}if(0===c.length){e.FlowExecutor.conversationStates.set(x,b);continue}ab.info(`[flujo=true, requireApproval=true] Pausing execution for tool approval for conv ${x}`),b.status="awaiting_tool_approval",b.pendingToolCalls=c,b.lastResponse=void 0,e.FlowExecutor.conversationStates.set(x,b);try{if(b.updatedAt=Date.now(),"New Conversation"===b.title&&b.messages.length>0){let a=b.messages.find(a=>"user"===a.role);a&&"string"==typeof a.content&&(b.title=(0,M.oO)(a.content),ab.verbose(`Updated conversation title for ${x} before pausing to: ${b.title}`))}await ad(y,b),ab.verbose(`Saved state before pausing for approval for conv ${x}`)}catch(a){ab.error(`Failed to save state before pausing for approval for conv ${x}:`,a)}ai({type:"run:awaiting_approval",pendingToolCalls:a.tool_calls});break}if(as){ab.info(`[Debug Step] Paused before executing ${a.tool_calls.length} tool call(s) for conv ${x}.`),b.debugPendingToolCalls=a.tool_calls,e.FlowExecutor.conversationStates.set(x,b);try{b.updatedAt=Date.now(),await ad(y,b)}catch(a){ab.error(`Failed to save state before debug tool pause for conv ${x}:`,a)}at();break}{ab.info(`[flujo=true, requireApproval=false] Processing ${a.tool_calls.length} tools internally for conv ${x}`);let c=await aq({toolCalls:a.tool_calls,toolNameMap:b.toolNameMap,emit:ai,conversationId:b.ephemeral?void 0:b.conversationId,runId:C,node:b.currentNodeId?{nodeId:b.currentNodeId}:void 0,shouldAbort:ap,mcpNodes:b.currentMCPNodes,permissionRules:b.permissionRules,savedPermissionRules:b.savedPermissionRules,unattended:b.unattended});if(!c.success){ab.error(`Internal tool processing failed for conv ${x}`,{error:c.error}),b.lastResponse={success:!1,error:"Tool processing failed",errorDetails:c.error},d=l.O;break}ab.info(`Adding ${c.value.toolCallMessages.length} tool result messages for conv ${x}`);let f=c.value.toolCallMessages.map(a=>({...a,id:crypto.randomUUID(),timestamp:Date.now(),processNodeId:b.currentNodeId}));b.messages.push(...f),e.FlowExecutor.conversationStates.set(x,b),am(),await $(y,b,a.tool_calls,"completed",aj),ab.info(`Continuing loop for conv ${x} after internal tool processing (no approval needed).`);continue}}else{ab.info(`[flujo=false] Tool call action received for conv ${x}. Checking tool types.`);let c=a.tool_calls||[],f=[],g=[];if(c.forEach(a=>{"function"===a.type&&(0,n.$9)(a.function.name,b.toolNameMap)?(ab.verbose("tool is internal:",a.function.name),f.push(a)):(ab.verbose("tool is external:",a.function.name),g.push(a))}),f.length>0){ab.info(`[flujo=false] Processing ${f.length} internal tools for conv ${x}. External tools (${g.length}) will be ignored this step.`);let a=await aq({toolCalls:f,toolNameMap:b.toolNameMap,emit:ai,conversationId:b.ephemeral?void 0:b.conversationId,runId:C,node:b.currentNodeId?{nodeId:b.currentNodeId}:void 0,shouldAbort:ap,mcpNodes:b.currentMCPNodes});if(!a.success){ab.error(`[flujo=false] Internal tool processing failed for conv ${x}`,{error:a.error}),b.lastResponse={success:!1,error:"Internal tool processing failed",errorDetails:a.error},d=l.O;break}ab.info(`Adding ${a.value.toolCallMessages.length} internal tool result messages for conv ${x}`);let c=a.value.toolCallMessages.map(a=>({...a,id:crypto.randomUUID(),timestamp:Date.now(),processNodeId:b.currentNodeId}));b.messages.push(...c),e.FlowExecutor.conversationStates.set(x,b),am(),await $(y,b,f,"completed",aj),ab.info(`Continuing loop for conv ${x} after internal tool processing (flujo=false).`);continue}if(g.length>0){ab.info(`[flujo=false] Found ${g.length} external tools for conv ${x}. Wrapping in XML and returning.`);let a=[];for(let b of g)if("function"===b.type)try{let c=JSON.parse(b.function.arguments||"{}"),d="";for(let a in c){let b=String(c[a]).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;");d+=`
3
+ <${a}>${b}</${a}>`}a.push(`<${b.function.name}>${d}
4
+ </${b.function.name}>`)}catch(c){ab.error(`[flujo=false] Failed to parse arguments for external tool ${b.function.name}`,{args:b.function.arguments,error:c,convId:x}),a.push(`<${b.function.name}>
5
+ <error>Failed to parse arguments: ${c instanceof Error?c.message:String(c)}</error>
6
+ </${b.function.name}>`)}b.lastResponse={_flujo_xml_tools:a.join("\n\n")},d=l.g4,ab.info(`[flujo=false] Prepared XML for external tools. Exiting loop for conv ${x}.`);break}ab.warn(`[flujo=false] TOOL_CALL_ACTION received for conv ${x} but no tools found after classification. Treating as final.`),d=l.g4;break}ab.warn(`TOOL_CALL_ACTION received for conv ${x} but no tool_calls found in last message. Treating as final.`),d=l.g4;break}let f=await e.FlowExecutor.resolveHandoff(b,d);if(f.isSuccessorEdge){ab.info(`[Action Handling] Step ${Y}: Handling Handoff Action (Edge ID) for conv ${x}`),ab.info(`Handoff action received for conv ${x}. Edge: ${d}`);let a=f.targetNodeId;if("string"==typeof a&&a.length>0){b.handoffInput=void 0;let c=b.messages.length>0?b.messages[b.messages.length-1]:null;if(c?.role==="assistant"&&c.tool_calls){let e,f,g=c.tool_calls.filter(a=>"function"===a.type&&("handoff"===a.function.name||a.function.name.startsWith("handoff_to_"))),h=a=>b.handoffNameMap?.[a]||a.replace("handoff_to_",""),i=g.filter(b=>"function"===b.type&&h(b.function.name)===a),j=i.length>0?i:g.slice(0,1);0===j.length&&ab.warn(`Handoff action received for edge ${d}, but could not find corresponding handoff tool call in last assistant message.`);let k=[],l="",m="";for(let c of(j.forEach((c,g)=>{if("function"===c.type)try{let a=JSON.parse(c.function.arguments||"{}"),b="string"==typeof a?.task?a.task.trim():"",d="string"==typeof a?.prompt?a.prompt.trim():"",g="string"==typeof a?.body?a.body.trim():"";!m&&g&&(m=g);let h=b||(j.length>1?d:"");if(h&&k.push(h),!l&&d&&(l=d),!e&&Array.isArray(a?.parallelFlows)){let b=a.parallelFlows.filter(a=>"string"==typeof a&&""!==a.trim());b.length>0&&(e=b)}let i=a?.concurrencyLimit;void 0===f&&"number"==typeof i&&i>=1&&(f=Math.floor(i))}catch(a){ab.warn(`Could not parse handoff tool-call arguments for edge ${d}; ignoring caller input for this call`,{parseError:a})}b.messages.push({id:crypto.randomUUID(),role:"tool",tool_call_id:c.id,content:JSON.stringify({status:"Handoff processed",targetNodeId:a,...j.length>1?{lane:g+1,laneCount:j.length}:{}}),timestamp:Date.now(),processNodeId:b.currentNodeId})}),g))j.includes(c)||(b.messages.push({id:crypto.randomUUID(),role:"tool",tool_call_id:c.id,content:JSON.stringify({status:"Not executed",reason:"A different handoff was chosen this turn."}),timestamp:Date.now(),processNodeId:b.currentNodeId}),ab.warn(`Handoff call ${"function"===c.type?c.function.name:c.id} targeted a different node than the chosen route; answered as not executed.`));l||1!==k.length||(l=k[0]);let n=b.handoffTargetTypes?.[a]==="signal";if(n||m||l||k.length>0||e&&e.length>0)b.handoffInput={targetNodeId:a,prompt:l,...n?{fromHandoffTool:!0}:{},...m?{signalBody:m}:{},...k.length>0?{tasks:k}:{},...e&&e.length>0?{parallelFlows:e}:{},...void 0!==f?{concurrencyLimit:f}:{}},ab.info(`Captured caller handoff input for node ${a}`,{promptChars:l.length,signalBodyChars:m.length,spawnBriefs:k.length,fanoutCount:e?.length??0});else try{let c=await o.flowService.getFlow(b.flowId),d=c?.nodes?.find(b=>b.id===a),e=d?.data?.properties,f=d?.type==="subflow"?e?.promptTemplate:e?.isolatedPrompt;d?.type!=="subflow"&&d?.type!=="process"||e?.inputMode!=="isolated"||e?.allowCallerPrompt===!1||e?.allowCallerFanout===!0||f?.trim()||ab.warn(`Handoff to isolated ${d?.type} node ${a} has neither a caller-supplied prompt nor an authored message; the target will start with an empty prompt and may stall. The routing model should have supplied the required "prompt" argument (issue #169).`,{targetNodeId:a})}catch(a){ab.debug("Issue #169 empty-prompt handoff guard check failed (non-fatal)",{guardErr:a})}}else ab.warn(`Handoff action received for edge ${d}, but the last message was not an assistant message with tool calls.`);am();let f=b.currentNodeId;if(b.currentNodeId=a,b.handoffRequested=void 0,ai({type:"handoff",from:f?{nodeId:f}:void 0,toNodeId:a,edgeId:d}),ab.info(`Transitioning conv ${x} to node ${b.currentNodeId}`),e.FlowExecutor.conversationStates.set(x,b),as){ab.info(`[Debug Step] Paused after handoff to node ${b.currentNodeId} for conv ${x}.`),at();break}ab.info(`Continuing loop for conv ${x} after handoff.`);continue}ab.error(`Handoff failed for conv ${x}: Successor node for edge ${d} has invalid ID.`),b.lastResponse={success:!1,error:`Handoff failed: Target node for edge ${d} has invalid ID.`},d=l.O;break}if(d===l.E5){ab.info(`[Action Handling] Step ${Y}: Handling STAY_ON_NODE_ACTION for conv ${x}`),ab.info(`Stay on node action received for conv ${x} at step ${Y}`);break}ab.warn(`Unrecognized action '${d}' received at step ${Y} for conv ${x}. Treating as final response.`),d=l.g4;break}}catch(a){if(ab.error(`Unhandled error during execution loop for conv ${x}`,{loopError:a}),d!==l.O&&ap()&&(b.status="error",b.lastResponse={success:!1,error:"Execution cancelled by user."},d=l.O),d!==l.O){let c=a?.details;b.lastResponse={success:!1,error:a instanceof Error?a.message:String(a),errorDetails:a instanceof Error?{name:a.name,message:a.message,stack:a.stack,...c&&"object"==typeof c?c:{}}:void 0},d=l.O}}for(let a of(d!==l.O&&ap()&&(ab.info(`Cancellation flag set at run end for conv ${x}; reporting cancelled instead of '${b.status}'.`),b.status="error",b.lastResponse={success:!1,error:"Execution cancelled by user."},d=l.O),d===l.O&&"error"!==b.status&&(b.status="error"),an))(0,N.mR)(a);let au=Date.now()-f,av=b.status||(d===l.g4?"completed":d===l.O?"error":"running");if(ab.info(`Execution finished for conv ${x}. Final Action: ${d}, Final Status: ${av}`,{duration:`${au}ms`}),b.isCancelled)await _(y,b,"cancelled",{failure:{category:ao?"ancestor_cancelled":"user_cancelled",message:ao?"Execution was cancelled because an ancestor run was cancelled.":"Execution was cancelled by the user.",retryable:!1},cancellationRequestedAt:b.recovery?.cancellationRequestedAt??Date.now()},aj);else if("completed"===av)await _(y,b,"completed",{},aj);else if("capped"===av)await _(y,b,"capped",{},aj);else if("awaiting_tool_approval"===av||"paused_debug"===av)await _(y,b,"paused",{},aj);else if("error"===av){let a=function(a){let b=a&&"object"==typeof a?a:{},c=b.details&&"object"==typeof b.details?b.details:b.errorDetails&&"object"==typeof b.errorDetails?b.errorDetails:b,d=U(c.status)??U(c.statusCode),e=V(c.code)??V(c.type)??V(b.code),f=a instanceof Error?a.message:"string"==typeof a?a:"string"==typeof a?.message?a.message:"string"==typeof a?.error?a.error:"Execution failed.",g=`${e??""} ${f}`.toLowerCase(),h="unknown",i=!1;429===d||/rate.?limit|too many requests/.test(g)?(h="rate_limit",i=!0):/context.{0,12}(limit|length|window)|maximum context/.test(g)?h="context_limit":/input.{0,12}(limit|length|too large)|request.{0,12}too large/.test(g)?h="input_limit":/session.{0,12}(lost|expired|invalid)|thread.{0,12}(lost|expired|not found)/.test(g)?h="session_loss":/empty response|no response content|response was empty/.test(g)?(h="model_empty_response",i=!0):/truncated response|unexpected end|premature end/.test(g)?(h="model_truncated_response",i=!0):/tool/.test(g)?h="tool_failure":408===d||502===d||503===d||504===d||/timeout|timed out|econnreset|econnrefused|socket|network|fetch failed|connection closed/.test(g)?(h="transport_failure",i=!0):(void 0!==d||/provider|model|api/.test(g))&&(h="provider_failure",i=void 0===d||d>=500);let j=U(c.retryAfterMs)??(void 0!==U(c.retryAfter)?1e3*U(c.retryAfter):void 0);return{classification:i?"retryable_failure":"permanent_failure",failure:{category:h,message:f,code:e,status:d,retryable:i},retryAfterAt:void 0!==j?Date.now()+Math.max(0,j):void 0}}(b.lastResponse);await _(y,b,a.classification,{failure:a.failure,retryAfterAt:a.retryAfterAt,manualActionRequired:"tool_failure"===a.failure.category||b.recovery?.manualActionRequired},aj)}if(am(),("completed"===av||"error"===av||"capped"===av)&&(ai({type:"run:done",status:av}),"schedule"!==b.source&&"trigger"!==b.source&&(b.runDepth??0)===0)){let a=b.messages[b.messages.length-1],c=a&&"assistant"===a.role&&"string"==typeof a.content?a.content:void 0;af(b,"capped"===av?"completed":av,c)}try{if(b.updatedAt=Date.now(),"New Conversation"===b.title&&b.messages.length>0){let a=b.messages.find(a=>"user"===a.role);a&&"string"==typeof a.content&&(b.title=(0,M.oO)(a.content),ab.verbose(`Updated conversation title for ${x} before final return to: ${b.title}`))}await ad(y,b),ab.debug(`Saved final state for conversation ${x} before returning.`)}catch(a){ab.error(`Failed to save final state for conversation ${x}:`,a)}(0,L.isConversationDeleted)(x)?e.FlowExecutor.conversationStates.delete(x):e.FlowExecutor.conversationStates.set(x,b);let aw=()=>{u&&("completed"===b.status||"error"===b.status)&&e.FlowExecutor.conversationStates.delete(x)},ax={conversationId:b.conversationId||x,messages:b.messages,usage:b.usage,finalAction:d,sharedState:b};if("paused_debug"===b.status)return ab.info(`Returning paused debug state for conv ${x}`),G({...ax,status:"paused_debug",outputText:"",pendingToolCalls:b.pendingToolCalls});if("error"===b.status||d===l.O){let a,c="Unknown error during execution",d=500;if("object"==typeof b.lastResponse&&null!==b.lastResponse)if("success"in b.lastResponse&&!1===b.lastResponse.success&&"error"in b.lastResponse&&"string"==typeof b.lastResponse.error){if(c=b.lastResponse.error,"errorDetails"in b.lastResponse&&"object"==typeof b.lastResponse.errorDetails&&null!==b.lastResponse.errorDetails){let e=b.lastResponse.errorDetails;(a={message:"string"==typeof e.message?e.message:c,type:"string"==typeof e.type?e.type:void 0,code:"string"==typeof e.code?e.code:void 0,param:"string"==typeof e.param?e.param:void 0,status:"number"==typeof e.status?e.status:void 0,stack:"string"==typeof e.stack?e.stack:void 0,name:"string"==typeof e.name?e.name:void 0}).status&&(d=a.status)}}else try{c=`Unexpected error state object: ${JSON.stringify(b.lastResponse)}`}catch{c="Unexpected error state object (unserializable)"}else"string"==typeof b.lastResponse&&(c=b.lastResponse);return a?a.message=a.message||c:a={message:c},ab.error(`Returning error result for conv ${x}`,{errorMessage:c,errorDetails:a,statusCode:d}),"error"!==b.status&&(b.status="error"),aw(),G({...ax,status:"error",outputText:"",error:{message:c,details:a,statusCode:d}})}let ay=b.messages.length>0?b.messages[b.messages.length-1]:null,az="",aA="";"object"==typeof b.lastResponse&&null!==b.lastResponse&&"_flujo_xml_tools"in b.lastResponse?(aA=b.lastResponse._flujo_xml_tools,az=ay?.role==="assistant"&&"string"==typeof ay.content?ay.content:"",az+=(az?"\n\n":"")+aA,b.lastResponse=az):az="string"==typeof b.lastResponse?b.lastResponse:ay?.role==="assistant"&&"string"==typeof ay.content?ay.content:d!==l.Jp||h?"Processing complete.":"";let aB=aA?void 0:ay?.role==="assistant"?ay.tool_calls:void 0;return ab.info(`Returning success result for conv ${x}`,{action:d,status:b.status,flujo:h,requireApproval:k,flujodebug:r}),aw(),G({...ax,status:b.status||(d===l.g4?"completed":"running"),outputText:az,toolCalls:aB,pendingToolCalls:b.pendingToolCalls})}},66033:(a,b,c)=>{c.d(b,{persistConversationState:()=>o});var d=c(79111),e=c(44479),f=c(18230),g=c(33873),h=c.n(g),i=c(29021),j=c(85510);let k=(0,f.h)("backend/execution/flow/conversationSummaryStore");async function l(a,b,c){(0,d.ln)(a);let e=c??await i.promises.stat(h().join(h().join((0,j.getDataDir)(),"db","conversations"),`${a}.json`)),f={version:1,...{id:b.conversationId||a,title:b.title||"Untitled Conversation",flowId:b.flowId||null,...b.status?{status:b.status}:{},createdAt:b.createdAt||0,updatedAt:b.updatedAt||0,...void 0!==b.lastUserMessageAt?{lastUserMessageAt:b.lastUserMessageAt}:{},...void 0!==b.plannedExecutionId?{plannedExecutionId:b.plannedExecutionId}:{},...void 0!==b.parentConversationId?{parentConversationId:b.parentConversationId}:{},...void 0!==b.rootConversationId?{rootConversationId:b.rootConversationId}:{},...b.recovery?{recovery:b.recovery}:{}},snapshotMtimeMs:e.mtimeMs,snapshotSize:e.size};await (0,d.l_)(`conversation-summaries/${a}`,()=>(0,d.Zf)(h().join(h().join((0,j.getDataDir)(),"db","conversation-summaries"),`${a}.json`),JSON.stringify(f,null,2)))}async function m(a,b){try{await l(a,b)}catch(b){k.warn(`Could not refresh conversation summary ${a}; it will be rebuilt on list.`,b)}}let n=(0,f.h)("backend/execution/flow/persistConversationState");async function o(a,b){let c="conversations/",f=String(a).startsWith(c)?String(a).slice(c.length):String(a);return((0,d.ln)(f),null!=b.conversationId&&(0,d.ln)(b.conversationId),b.ephemeral)?(n.debug(`Refusing to persist ephemeral state (key ${a}); ephemeral runs never reach the conversations store.`),Promise.resolve()):(0,e.isConversationDeleted)(b.conversationId)?(n.info(`Refusing to persist state for deleted conversation ${b.conversationId} (key ${a}).`),Promise.resolve()):void(await (0,d.VH)(a,{...b,executionTrace:void 0,emit:void 0}),await m(f,b))}}};
@@ -0,0 +1,8 @@
1
+ "use strict";exports.id=9543,exports.ids=[9543],exports.modules={4580:(a,b,c)=>{async function d(a,b){throw Error("Web Speech API is only available in browser environments")}function e(){return{supported:!1,message:"Not in browser environment"}}c.d(b,{G:()=>e,S:()=>d}),(0,c(42819).h)("frontend/services/transcription/webSpeech")},24856:(a,b,c)=>{c.d(b,{pX:()=>d});function d(a,b,c,d){let e=`${a.type}-bottom`,f=`${b.type}-top`;return{id:`${a.id}:${e}->${b.id}:${f}`,source:a.id,sourceHandle:e,target:b.id,targetHandle:f,type:"custom",data:{edgeType:"standard",...c?{bidirectional:!0}:{},...d?{condition:d}:{}},animated:!0}}},29237:(a,b,c)=>{c.d(b,{C:()=>f,L2:()=>e,P2:()=>h,w4:()=>d,wM:()=>g});let d=["contains","regex","equals","always"],e=["last-assistant","last-message"];function f(a){return"string"==typeof a&&d.includes(a)}function g(a){try{return new RegExp(a),!0}catch{return!1}}function h(a){if(!a||!f(a.kind))return"";let b=a.negate?"!":"";if("always"===a.kind)return`${b}always`;let c=a.ignoreCase?" i":"",d="string"==typeof a.value?a.value:"",e=d.length>8?`${d.slice(0,8)}…`:d,g="regex"===a.kind?`/${e}/`:`"${e}"`;return`${b}${a.kind}:${g}${c}`}},31164:(a,b,c)=>{c.d(b,{jY:()=>f,oY:()=>g,sZ:()=>h});var d=c(21124);c(38301);var e=c(97004);let f=a=>(0,d.jsx)(e.A,{...a,variant:"standard"}),g=a=>(0,d.jsx)(e.A,{...a,variant:"mcp"}),h=a=>(0,d.jsx)(e.A,{...a,variant:"resource"})},38259:(a,b,c)=>{c.d(b,{O:()=>i,b:()=>e});let d=(0,c(42819).h)("frontend/services/chat/index");class e extends Error{constructor(a,b,c){super(a),this.name="ChatApiError",this.status=b,this.body=c}}let f="/v1/chat/conversations";async function g(a){let b;if(204===a.status)return;let c=await a.text();if(c)try{b=JSON.parse(c)}catch{b=c}if(!a.ok)throw new e(b&&"object"==typeof b&&(b.error||b.message)||`Request failed with status ${a.status}`,a.status,b);return b}class h{async listConversations(){return d.debug("listConversations: Entering method"),g(await fetch(f))}async getConversation(a){return d.debug("getConversation: Entering method",{conversationId:a}),g(await fetch(`${f}/${encodeURIComponent(a)}`))}async createConversation(a){return d.debug("createConversation: Entering method",{conversationId:a.id}),g(await fetch(f,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)}))}async updateConversationFlow(a,b){return d.debug("updateConversationFlow: Entering method",{conversationId:a,flowId:b}),g(await fetch(`${f}/${encodeURIComponent(a)}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({flowId:b})}))}async updateConversationTitle(a,b){return d.debug("updateConversationTitle: Entering method",{conversationId:a}),g(await fetch(`${f}/${encodeURIComponent(a)}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({title:b})}))}async updateConversationApproval(a,b){return d.debug("updateConversationApproval: Entering method",{conversationId:a,requireApproval:b}),g(await fetch(`${f}/${encodeURIComponent(a)}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({requireApproval:b})}))}async deleteConversation(a){d.debug("deleteConversation: Entering method",{conversationId:a});let b=await fetch(`${f}/${encodeURIComponent(a)}`,{method:"DELETE"});await g(b)}async deleteConversations(a){return d.debug("deleteConversations: Entering method",{count:a.length}),g(await fetch(f,{method:"DELETE",headers:{"Content-Type":"application/json"},body:JSON.stringify({ids:a})}))}async respondToToolCall(a,b,c,e,h){return d.debug("respondToToolCall: Entering method",{conversationId:a,action:b,toolCallId:c,always:e}),g(await fetch(`${f}/${encodeURIComponent(a)}/respond`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:b,toolCallId:c,...e?{always:!0}:{},...h?{feedback:h}:{}})}))}async debugStep(a){return d.debug("debugStep: Entering method",{conversationId:a}),g(await fetch(`${f}/${encodeURIComponent(a)}/debug/step`,{method:"POST"}))}async debugContinue(a){return d.debug("debugContinue: Entering method",{conversationId:a}),g(await fetch(`${f}/${encodeURIComponent(a)}/debug/continue`,{method:"POST"}))}async setBreakpoints(a,b){d.debug("setBreakpoints: Entering method",{conversationId:a,count:b.length});let c=await fetch(`${f}/${encodeURIComponent(a)}/breakpoints`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({breakpoints:b})});await g(c)}async synthesizeQuickChat(a){return d.debug("synthesizeQuickChat: Entering method",{conversationId:a.conversationId}),g(await fetch("/api/flow/quick-chat",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)}))}async synthesizeFlowGenerator(a){return g(await fetch("/api/flow/generator",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)}))}async completeFlowGeneratorTurn(a){return g(await fetch("/v1/chat/completions",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:"flow-Flow Generator Session",messages:a.messages,stream:!1,metadata:{flujo:"true",conversationId:a.conversationId}})}))}async restoreFlowGenerator(){return g(await fetch("/api/flow/generator",{method:"PUT"}))}async cancel(a){d.debug("cancel: Entering method",{conversationId:a});let b=await fetch(`${f}/${encodeURIComponent(a)}/cancel`,{method:"POST"});await g(b)}async injectMessage(a,b,c){d.debug("injectMessage: Entering method",{conversationId:a,messageId:c});try{let e=await fetch(`${f}/${encodeURIComponent(a)}/inject`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({content:b,id:c})});if(e.ok)return{delivered:!0};if(409===e.status)return d.debug("injectMessage: run is not live; caller should send normally",{conversationId:a}),{delivered:!1};return d.warn("injectMessage: unexpected response; falling back to a normal send",{conversationId:a,status:e.status}),{delivered:!1}}catch(b){return d.warn("injectMessage: request failed; falling back to a normal send",{conversationId:a,err:b}),{delivered:!1}}}async previewRevert(a,b){return g(await fetch(`${f}/${encodeURIComponent(a)}/revert?messageId=${encodeURIComponent(b)}`))}async revertToMessage(a,b,c){return g(await fetch(`${f}/${encodeURIComponent(a)}/revert`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({messageId:b,previewId:c})}))}async undoRevert(a,b){let c=await fetch(`${f}/${encodeURIComponent(a)}/revert`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({operationId:b,action:"undo"})});await g(c)}subscribeToEvents(a,b,c){let e=new EventSource(void 0!==c?`${f}/${encodeURIComponent(a)}/events?fromSeq=${c}`:`${f}/${encodeURIComponent(a)}/events`);return e.onopen=()=>{d.debug("Execution event stream open",{conversationId:a}),b.onOpen?.()},e.onmessage=a=>{try{b.onEvent(JSON.parse(a.data))}catch(a){d.warn("Failed to parse SSE event",{err:a})}},e.onerror=a=>{d.debug("SSE stream error (browser will retry if still open)"),b.onError?.(a)},e}subscribeToSidebarEvents(a){let b=new EventSource("/v1/chat/events?scope=sidebar");return b.onopen=()=>{d.debug("Sidebar lifecycle event stream open"),a.onOpen?.()},b.onmessage=b=>{try{a.onEvent(JSON.parse(b.data))}catch(a){d.warn("Failed to parse sidebar lifecycle event",{err:a})}},b.onerror=b=>{d.debug("Sidebar lifecycle stream error (browser will retry if still open)"),a.onError?.(b)},b}}let i=new h},61220:(a,b,c)=>{c.d(b,{A:()=>T});var d=c(21124),e=c(38301),f=c(42819);async function g(a,b={}){return{text:"Speech recognition is only available in browser environments",success:!1,error:"Server-side transcription is not supported"}}c(4580),(0,f.h)("frontend/services/transcription");var h=c(49938),i=c(60839),j=c(54573),k=c(37489),l=c(81637),m=c(79515),n=c(44079),o=c(41893),p=c(43312),q=c(95587),r=c(77028),s=c(40512),t=c(83899),u=c(52327),v=c(8521),w=c(37674),x=c(19925),y=c(68730),z=c(70011),A=c(9258),B=c(73245),C=c(30137),D=c(88970),E=c(36698),F=c(12033),G=c(73821),H=c(46973),I=c(95791),J=c(63787);let K=new Set(["start","process","subflow"]),L=a=>a.type??a.data?.type,M=({flow:a,selectedNodeId:b,onSelect:c,onClose:f})=>{let g=(0,i.A)(),h=(0,e.useMemo)(()=>(a?.nodes||[]).map(a=>{let c=K.has(L(a)||""),d=a.id===b;return{...a,draggable:!1,selectable:!1,style:{...a.style||{},opacity:c?1:.35,cursor:c?"pointer":"default",borderRadius:8,boxShadow:d?`0 0 0 3px ${g.palette.primary.main}`:void 0,transition:"box-shadow 120ms ease"}}}),[a?.nodes,b,g.palette.primary.main]),j=(0,e.useMemo)(()=>(a?.edges||[]).filter(a=>a.source&&a.target&&a.sourceHandle&&a.targetHandle),[a?.edges]),k=(0,e.useMemo)(()=>({type:"custom",animated:!1,style:{stroke:g.palette.text.secondary,strokeWidth:2},markerEnd:{type:H.TG.ArrowClosed,width:20,height:20,color:g.palette.text.secondary}}),[g.palette.text.secondary]);return(0,d.jsx)(I.Gc,{nodes:h,edges:j,nodeTypes:J.c_,edgeTypes:J.nd,defaultEdgeOptions:k,connectionLineType:H.Do.SmoothStep,fitView:!0,minZoom:.1,maxZoom:2,onNodeClick:(a,b)=>{K.has(L(b)||"")&&(c(b.id),f())},nodesDraggable:!1,nodesConnectable:!1,elementsSelectable:!1,deleteKeyCode:null,proOptions:{hideAttribution:!0},children:(0,d.jsx)(I.VS,{})})},N=({open:a,flow:b,selectedNodeId:c,allowAutomatic:e,onSelect:f,onClose:g})=>{let h=!!(b&&(b.nodes?.length??0)>0);return(0,d.jsxs)(s.A,{open:a,onClose:g,maxWidth:"lg",fullWidth:!0,children:[(0,d.jsx)(t.A,{children:"Pick a node to run on"}),(0,d.jsxs)(u.A,{dividers:!0,sx:{p:0},children:[(0,d.jsx)(l.default,{sx:{px:2,pt:1.5},children:(0,d.jsxs)(m.A,{variant:"caption",color:"text.secondary",children:["Click a ",(0,d.jsx)("strong",{children:"Start"}),", ",(0,d.jsx)("strong",{children:"Process"}),", or"," ",(0,d.jsx)("strong",{children:"Subflow"})," node. Other nodes and edges can't be picked."]})}),(0,d.jsx)(l.default,{sx:{height:"62vh",width:"100%"},children:h?(0,d.jsx)(I.Ln,{children:(0,d.jsx)(M,{flow:b,selectedNodeId:c,onSelect:f,onClose:g})}):(0,d.jsx)(l.default,{sx:{height:"100%",display:"flex",alignItems:"center",justifyContent:"center"},children:(0,d.jsx)(m.A,{variant:"body2",color:"text.secondary",children:"No agent to display."})})})]}),(0,d.jsxs)(x.A,{children:[e&&(0,d.jsx)(y.A,{startIcon:(0,d.jsx)(G.A,{}),onClick:()=>{f(null),g()},children:"Automatic"}),(0,d.jsx)(l.default,{sx:{flex:1}}),(0,d.jsx)(y.A,{onClick:g,children:"Cancel"})]})]})};var O=c(2117),P=c(50551),Q=c(28055),R=c(80518);let S=(0,f.h)("frontend/components/Chat/ChatInput"),T=({onSendMessage:a,disabled:b=!1,placeholder:c="Type a message...",requireApproval:f=!1,onRequireApprovalChange:G,executeInDebugger:H=!1,onExecuteInDebuggerChange:I,availableNodes:J=[],flow:K=null,currentNodeId:L=null,nodeOverrideActive:M=!1,onSelectNode:T,editing:U=null,onEditingContentChange:V,onEditingNodeChange:W,onSaveEdit:X,onCancelEdit:Y})=>{let Z=(0,i.A)(),{settings:$,globalEnvVars:_}=(0,h.rX)(),aa=(0,e.useMemo)(()=>Object.entries(_).filter(([,a])=>!a.metadata?.isSecret).map(([a])=>a).sort((a,b)=>a.localeCompare(b)),[_]),[ab,ac]=(0,e.useState)(""),[ad,ae]=(0,e.useState)([]),[af,ag]=(0,e.useState)(!1),[ah,ai]=(0,e.useState)(0),[aj,ak]=(0,e.useState)(null),al=(0,e.useRef)(null),am=(0,e.useRef)(null),an=(0,e.useRef)([]),[ao,ap]=(0,e.useState)(!1),aq=!!U,ar=aq?U?.nodeId??null:L,as=(a=>J.find(b=>b.id===a)?.label||(a?`${a.substring(0,6)}...`:"Start"))(ar),[at,au]=(0,e.useState)([]);(0,e.useEffect)(()=>{let a=!1;if(!K)return au([]),()=>{a=!0};let b=K.nodes.find(a=>(a.data?.type??a.type)==="start"),c=b?K.edges.find(a=>a.source===b.id&&a.data?.edgeType!=="mcp")?.target:void 0,d=ar??c??K.nodes.find(a=>(a.data?.type??a.type)==="process")?.id;if(!d)return au([]),()=>{a=!0};let e=new Set(K.edges.filter(a=>a.data?.edgeType==="mcp"&&(a.source===d||a.target===d)).map(a=>a.source===d?a.target:a.source)),f=K.nodes.filter(a=>(a.data?.type??a.type)==="mcp"&&e.has(a.id)).map(a=>({server:a.data.properties?.boundServer,enabledTools:new Set(a.data.properties?.enabledTools??[]),enabledResources:a.data.properties?.enabledResources})).filter(a=>!!a.server);return 0===f.length?(au([]),()=>{a=!0}):(Promise.all(f.map(async({server:a,enabledTools:b,enabledResources:c})=>{let d=[];try{for(let c of(await Q.S.listServerTools(a)).tools??[])c?.name&&b.has(c.name)&&d.push((0,R.Ub)({kind:"tool",server:a,name:c.name},c.name,c.description||a))}catch(b){S.warn(`Failed to load chat @ tool suggestions for ${a}`,b)}try{let b=await Q.S.listServerResources(a),e=a=>void 0===c||"all"===c||c.includes(a);for(let c of b.resources??[])e(c.uri)&&d.push((0,R.Ub)({kind:"resource",server:a,name:c.uri},c.name||c.uri,c.description||`${a} \xb7 ${c.uri}`));for(let c of b.resourceTemplates??[])e(c.uriTemplate)&&d.push((0,R.Ub)({kind:"resource",server:a,name:c.uriTemplate},c.name||c.uriTemplate,c.description||`${a} \xb7 ${c.uriTemplate}`))}catch(b){S.warn(`Failed to load chat @ resource suggestions for ${a}`,b)}return d})).then(b=>{a||au(b.flat())}),()=>{a=!0})},[K,ar]);let[av,aw]=(0,e.useState)(!1),[ax,ay]=(0,e.useState)(""),[az,aA]=(0,e.useState)(""),[aB,aC]=(0,e.useState)("document"),[aD,aE]=(0,e.useState)(null),[aF,aG]=(0,e.useState)(),[aH,aI]=(0,e.useState)(!1),[aJ,aK]=(0,e.useState)(0),[aL,aM]=(0,e.useState)(""),aN=()=>{U&&U.content.trim()&&X?.()},aO=()=>{(ab.trim()||ad.length>0)&&(S.debug("Sending message",{messageLength:ab.length,attachmentsCount:ad.length}),a(ab,ad),ac(""),ae([]))},aP=async a=>{let b=a.target.files;if(!b||0===b.length)return;let c=b[0];S.debug("File selected",{fileName:c.name,fileSize:c.size,fileType:c.type});try{let a=c.type||"application/octet-stream";if(a.startsWith("text/")||/\.(txt|md|json|csv|html?|xml|js|ts|jsx|tsx|css|scss)$/i.test(c.name)){aA(`Processing ${c.name}`),aC("document"),ay(""),aI(!0),aw(!0);let a=await aQ(c);S.debug("File read successfully",{contentLength:a.length}),ay(a),aI(!1)}else{let b=await aR(c),d=a.startsWith("image/")?"image":a.startsWith("audio/")?"audio":a.startsWith("video/")?"video":"document";ae(e=>[...e,{id:(0,O.A)(),type:d,content:b,originalName:c.name,mimeType:a}])}}catch(a){S.error("Error reading file:",a),ay("Error reading file. Please try again."),aI(!1)}al.current&&(al.current.value="")},aQ=a=>new Promise((b,c)=>{let d=new FileReader;d.onload=a=>{a.target?.result?b(a.target.result):c(Error("Failed to read file"))},d.onerror=()=>{c(Error("Error reading file"))},d.readAsText(a)}),aR=a=>new Promise((b,c)=>{let d=new FileReader;d.onload=()=>"string"==typeof d.result?b(d.result):c(Error("Failed to encode file")),d.onerror=()=>c(Error("Error reading file")),d.readAsDataURL(a)}),aS=async()=>{S.debug("Starting audio recording");try{let a=await navigator.mediaDevices.getUserMedia({audio:!0});S.debug("Audio stream obtained successfully"),an.current=[];let b=new MediaRecorder(a);am.current=b,b.ondataavailable=a=>{a.data.size>0&&an.current.push(a.data)},b.onstop=async()=>{let c=b.mimeType||an.current[0]?.type||"audio/webm",d=new Blob(an.current,{type:c});aA("Audio Recording"),aC("audio"),aE(await aR(d)),aG(c),ay(""),aI(!0),aw(!0);try{if(($?.speech||{enabled:!0,modelSize:"base",autoDownload:!1}).enabled){aM("Initializing transcription..."),aK(0);let a=await g(d,{onProgress:aK,onStatusChange:aM,language:navigator.language});if(a.success){let b=a.text;ay(b),S.debug("Transcription successful",{textLength:a.text.length,engine:a.engine})}else ay(`Error transcribing audio: ${a.error}.`),S.error("Transcription failed",{error:a.error})}else ay("Speech recognition is disabled in settings. Enable it to get automatic transcriptions.")}catch(a){S.error("Error handling audio recording",{error:a}),ay(`Failed to process audio: ${a}`)}finally{aI(!1),a.getTracks().forEach(a=>a.stop())}},b.start(),ag(!0);let c=setInterval(()=>{ai(a=>a+1)},1e3);ak(c)}catch(a){S.error("Error starting recording:",a),alert("Could not access microphone. Please check permissions.")}};return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(j.A,{elevation:0,sx:{width:"100%",maxWidth:"none",mx:0,p:{xs:1,sm:1.25},display:"flex",flexDirection:"column",border:`1px solid ${(0,k.X4)(Z.palette.primary.main,.24)}`,borderRadius:0,bgcolor:(0,k.X4)(Z.palette.background.paper,"dark"===Z.palette.mode?.82:.92),boxShadow:`0 22px 70px ${(0,k.X4)(Z.palette.common.black,"dark"===Z.palette.mode?.34:.12)}, 0 0 0 1px ${(0,k.X4)(Z.palette.common.white,.03)} inset`,backdropFilter:"blur(24px) saturate(145%)"},children:[ad.length>0&&(0,d.jsx)(l.default,{sx:{mb:2,display:"flex",flexWrap:"wrap",gap:1},children:ad.map(a=>(0,d.jsxs)(j.A,{variant:"outlined",sx:{p:1,display:"flex",alignItems:"center",borderRadius:1,bgcolor:"background.default"},children:["image"===a.type?(0,d.jsx)(l.default,{component:"img",src:a.content,alt:a.originalName||"pasted image",sx:{width:40,height:40,objectFit:"cover",borderRadius:1,mr:1}}):"video"===a.type?(0,d.jsx)(l.default,{component:"video",src:a.content,sx:{width:40,height:40,objectFit:"cover",borderRadius:1,mr:1}}):"document"===a.type?(0,d.jsx)(A.A,{fontSize:"small",sx:{mr:1}}):(0,d.jsx)(B.A,{fontSize:"small",sx:{mr:1}}),(0,d.jsx)(m.A,{variant:"body2",noWrap:!0,sx:{maxWidth:150},children:a.originalName||`${a.type} attachment`}),(0,d.jsx)(n.A,{size:"small",onClick:()=>(a=>{S.debug("Removing attachment",{id:a}),ae(ad.filter(b=>b.id!==a))})(a.id),sx:{ml:1},children:(0,d.jsx)(C.A,{fontSize:"small"})})]},a.id))}),aq&&(0,d.jsxs)(l.default,{sx:{mb:1,display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(o.A,{icon:(0,d.jsx)(F.A,{}),label:"Editing message",size:"small",color:"warning",variant:"outlined"}),(0,d.jsx)(m.A,{variant:"caption",color:"text.secondary",children:"Enter to save \xb7 Esc to cancel"})]}),(0,d.jsxs)(l.default,{sx:{display:"flex",alignItems:"flex-end",gap:.35},children:[(0,d.jsx)(P.Ay,{value:aq?U?.content??"":ab,onChange:a=>{aq?V?.(a):ac(a)},globalNames:aa,suggestions:at,multiline:!0,minRows:1,maxRows:aq?12:4,dataTour:"chat-input",ariaLabel:aq?"Edit message":"Message",placeholder:aq?"Edit message...":c,onKeyDown:a=>{"Enter"!==a.key||a.shiftKey?"Escape"===a.key&&aq&&(a.preventDefault(),Y?.()):(a.preventDefault(),aq?aN():(S.debug("Enter key pressed, sending message"),aO()))},onPaste:a=>{let b=a.clipboardData?.items;if(!b)return;let c=[];for(let a=0;a<b.length;a++){let d=b[a];if("file"===d.kind&&d.type.startsWith("image/")){let a=d.getAsFile();a&&c.push(a)}}0!==c.length&&(a.preventDefault(),S.debug("Pasting image attachment(s)",{count:c.length}),c.forEach(a=>{let b=new FileReader;b.onload=b=>{let c=b.target?.result;if("string"!=typeof c)return;let d=(a.type.split("/")[1]||"png").split("+")[0];ae(b=>[...b,{id:(0,O.A)(),type:"image",content:c,originalName:a.name&&!/^image\.\w+$/i.test(a.name)?a.name:`Pasted image.${d}`}])},b.onerror=()=>S.error("Failed to read pasted image"),b.readAsDataURL(a)}))},disabled:!aq&&b,autoFocus:aq,containerSx:{flex:1}}),!aq&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(p.A,{title:"Attach document",children:(0,d.jsx)(n.A,{color:"primary",onClick:()=>{S.debug("File selection triggered"),al.current?.click()},disabled:b||af,children:(0,d.jsx)(A.A,{})})}),(0,d.jsx)("input",{type:"file",ref:al,onChange:aP,style:{display:"none"},accept:"image/*,audio/*,video/*,.pdf,.txt,.md,.json,.csv,.html,.xml,.js,.ts,.jsx,.tsx,.css,.scss"}),(0,d.jsx)(p.A,{title:af?"Stop recording":"Record audio",children:(0,d.jsxs)(n.A,{color:af?"error":"primary",onClick:af?()=>{S.debug("Stopping audio recording"),am.current&&"inactive"!==am.current.state&&(am.current.stop(),ag(!1),aj&&(clearInterval(aj),ak(null)),ai(0))}:aS,disabled:b,children:[(0,d.jsx)(B.A,{}),af&&(0,d.jsx)(m.A,{variant:"caption",sx:{position:"absolute",bottom:-15,fontSize:"0.7rem",color:"error.main"},children:(a=>{let b=Math.floor(a/60);return`${b.toString().padStart(2,"0")}:${(a%60).toString().padStart(2,"0")}`})(ah)})]})})]}),aq?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(p.A,{title:"Save edit",children:(0,d.jsx)("span",{children:(0,d.jsx)(n.A,{color:"primary","aria-label":"Save edit",onClick:aN,disabled:!U?.content.trim(),children:(0,d.jsx)(E.A,{})})})}),(0,d.jsx)(p.A,{title:"Cancel edit",children:(0,d.jsx)(n.A,{color:"default","aria-label":"Cancel edit",onClick:()=>Y?.(),children:(0,d.jsx)(C.A,{})})})]}):(0,d.jsx)(p.A,{title:"Send message",children:(0,d.jsx)("span",{children:(0,d.jsx)(n.A,{color:"primary",onClick:aO,disabled:b||!ab.trim()&&0===ad.length,"aria-label":"Send message",sx:{width:44,height:44,color:"#fff",background:`linear-gradient(135deg, ${Z.palette.primary.light}, ${Z.palette.primary.main} 58%, ${Z.palette.secondary.main})`,boxShadow:`0 10px 24px ${(0,k.X4)(Z.palette.primary.main,.28)}`,"&:hover":{background:`linear-gradient(135deg, ${Z.palette.primary.light}, ${Z.palette.primary.main} 48%, ${Z.palette.secondary.main})`,boxShadow:`0 14px 30px ${(0,k.X4)(Z.palette.primary.main,.38)}`},"&.Mui-disabled":{color:"text.disabled",background:(0,k.X4)(Z.palette.text.disabled,.12),boxShadow:"none"}},children:(0,d.jsx)(z.A,{})})})})]})," ",(G||(T||aq)&&J.length>0)&&(0,d.jsxs)(l.default,{sx:{mt:1,pt:1,display:"flex",justifyContent:"flex-start",alignItems:"center",flexWrap:"wrap",gap:1,borderTop:1,borderColor:"divider"},children:[(T||aq)&&J.length>0&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(p.A,{title:aq?"Node this message runs on — click to pick from the agent":M?"Next message will run on this manually picked node — click to change":"Node the next message will run on — click to pick from the agent",children:(0,d.jsx)(o.A,{icon:(0,d.jsx)(D.A,{}),label:as,size:"small",color:aq||M?"primary":"default",variant:aq||M?"filled":"outlined",onClick:()=>ap(!0),disabled:!aq&&b})}),(0,d.jsx)(N,{open:ao,flow:K,selectedNodeId:ar,allowAutomatic:!aq,onSelect:a=>{aq?W?.(a):T?.(a)},onClose:()=>ap(!1)})]}),G&&(0,d.jsx)(q.A,{control:(0,d.jsx)(r.A,{checked:f,onChange:a=>G(a.target.checked),size:"small",disabled:b}),label:(0,d.jsx)(m.A,{variant:"caption",children:"Require Tool Approvals"}),sx:{mr:"auto"}}),I&&(0,d.jsx)(q.A,{control:(0,d.jsx)(r.A,{checked:H,onChange:a=>I(a.target.checked),size:"small",disabled:b}),label:(0,d.jsx)(m.A,{variant:"caption",children:"Execute in Debugger"}),sx:{ml:2}})]})," "]})," ",(0,d.jsxs)(s.A,{open:av,onClose:()=>!aH&&aw(!1),maxWidth:"md",fullWidth:!0,children:[(0,d.jsxs)(t.A,{children:[az,!aH&&(0,d.jsx)(n.A,{"aria-label":"close",onClick:()=>aw(!1),sx:{position:"absolute",right:8,top:8},children:(0,d.jsx)(C.A,{})})]}),(0,d.jsx)(u.A,{dividers:!0,children:aH?(0,d.jsxs)(l.default,{sx:{display:"flex",justifyContent:"center",flexDirection:"column",alignItems:"center",p:4},children:[(0,d.jsx)(v.default,{value:"audio"===aB&&aJ?aJ:void 0,variant:"audio"===aB&&aJ>0?"determinate":"indeterminate"}),"audio"===aB&&(0,d.jsxs)(l.default,{sx:{mt:2,textAlign:"center"},children:[(0,d.jsx)(m.A,{variant:"body2",children:aL||"Processing audio..."}),aJ>0&&(0,d.jsxs)(m.A,{variant:"body2",color:"text.secondary",sx:{mt:1},children:[Math.round(aJ),"%"]})]})]}):(0,d.jsx)(w.A,{multiline:!0,fullWidth:!0,minRows:10,maxRows:20,value:ax,onChange:a=>ay(a.target.value),variant:"outlined",placeholder:"document"===aB?"Document content":"Audio transcription"})}),(0,d.jsxs)(x.A,{children:[(0,d.jsx)(y.A,{onClick:()=>aw(!1),disabled:aH,children:"Cancel"}),(0,d.jsx)(y.A,{onClick:()=>{S.debug("Adding attachment",{type:aB,titleLength:az.length}),ae([...ad,{id:(0,O.A)(),type:aB,content:"audio"===aB&&aD?aD:ax,originalName:az,..."audio"===aB&&aF?{mimeType:aF,transcript:ax}:{}}]),aE(null),aG(void 0),aw(!1)},variant:"contained",disabled:aH||!ax.trim(),children:"Add to Message"})]})]})]})}},62815:(a,b,c)=>{c.d(b,{A:()=>ay});var d=c(21124),e=c(38301),f=c.n(e),g=c(79515),h=c(81637),i=c(68730),j=c(8521),k=c(43312),l=c(41893),m=c(99561),n=c(95587),o=c(67191),p=c(44079),q=c(54573),r=c(61628),s=c(19787),t=c(95803),u=c(77028),v=c(82605),w=c(50062),x=c(7675),y=c(94367),z=c(38233),A=c(37674),B=c(29231),C=c(86374),D=c(74419),E=c(7118),F=c(50553),G=c(84233),H=c(45798),I=c(18954),J=c(96955),K=c(16348),L=c(13665),M=c(9258),N=c(73245),O=c(17332),P=c(84049),Q=c(56685),R=c(82543),S=c(22797),T=c(12033),U=c(24276),V=c(885),W=c(91353),X=c(11939),Y=c(49066),Z=c(40512),$=c(83899),_=c(52327),aa=c(42387),ab=c(88745),ac=c(89490),ad=c(71439),ae=c(19925),af=c(38259);function ag({open:a,conversationId:b,messageId:c,onClose:f,onReverted:j}){let[k,l]=(0,e.useState)(null),[m,n]=(0,e.useState)(null),[o,p]=(0,e.useState)(!1),[q,r]=(0,e.useState)(!1),[s,t]=(0,e.useState)(null),u=async()=>{if(c&&k){r(!0),n(null);try{let a=await af.O.revertToMessage(b,c,k.previewId);t(a.operationId),j?.(c)}catch(a){n(a instanceof Error?a.message:"Unable to revert changes")}finally{r(!1)}}},v=async()=>{if(s){r(!0),n(null);try{await af.O.undoRevert(b,s),t(null),f()}catch(a){n(a instanceof Error?a.message:"Unable to undo revert")}finally{r(!1)}}};return(0,d.jsxs)(Z.A,{open:a,onClose:q?void 0:f,fullWidth:!0,maxWidth:"md",children:[(0,d.jsx)($.A,{children:"Revert to here"}),(0,d.jsxs)(_.A,{children:[(o||q)&&(0,d.jsx)(aa.A,{sx:{mb:2}}),m&&(0,d.jsx)(ab.A,{severity:"error",sx:{mb:2},children:m}),s?(0,d.jsx)(ab.A,{severity:"success",children:"Changes were reverted. You can undo this operation now."}):k&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(g.A,{variant:"body2",children:"Review the affected files before changing the worktree."}),(0,d.jsx)(ac.A,{dense:!0,children:k.files.map(a=>(0,d.jsx)(ad.Ay,{disableGutters:!0,children:(0,d.jsx)(G.A,{primary:a.path,secondary:a.status})},`${a.status}:${a.path}`))}),(0,d.jsx)(h.default,{component:"pre",sx:{maxHeight:360,overflow:"auto",p:1.5,bgcolor:"action.hover",borderRadius:1,fontFamily:"monospace",fontSize:12,whiteSpace:"pre-wrap"},children:k.diff||"No textual diff available."}),k.truncated&&(0,d.jsx)(g.A,{variant:"caption",children:"Preview truncated for safety."})]})]}),(0,d.jsxs)(ae.A,{children:[(0,d.jsx)(i.A,{onClick:f,disabled:q,children:"Cancel"}),s?(0,d.jsx)(i.A,{onClick:v,disabled:q,children:"Undo revert"}):(0,d.jsx)(i.A,{color:"error",variant:"contained",onClick:u,disabled:!k||o||q,children:"Confirm Revert"})]})]})}var ah=c(65690),ai=c(82571),aj=c(98502);function ak(a){return!!a&&(a.startsWith(aj.n9)||"handoff"===a)}var al=c(34641);function am(a){return a.url?a.url:a.data?`data:${a.mimeType??"application/octet-stream"};base64,${a.data}`:void 0}let an=(0,c(42819).h)("frontend/components/Chat/ChatMessages");function ao(a){return"assistant"===a.role&&"tool_calls"in a&&Array.isArray(a.tool_calls)}function ap(a){if("tool"!==a.role||"string"!=typeof a.content)return!1;try{return JSON.parse(a.content)?.handoff===!0}catch{return!1}}let aq={p:a=>(0,d.jsx)(g.A,{variant:"body1",sx:{mb:.5,whiteSpace:"pre-line"},children:a.children}),h1:a=>(0,d.jsx)(g.A,{variant:"h5",sx:{mt:2,mb:.5},children:a.children}),h2:a=>(0,d.jsx)(g.A,{variant:"h6",sx:{mt:2,mb:.5},children:a.children}),h3:a=>(0,d.jsx)(g.A,{variant:"subtitle1",sx:{mt:1.5,mb:.5},children:a.children}),h4:a=>(0,d.jsx)(g.A,{variant:"subtitle2",sx:{mt:1.5,mb:.5},children:a.children}),h5:a=>(0,d.jsx)(g.A,{variant:"body1",sx:{mt:1,mb:.5,fontWeight:"bold"},children:a.children}),h6:a=>(0,d.jsx)(g.A,{variant:"body2",sx:{mt:1,mb:.5,fontWeight:"bold"},children:a.children}),ul:a=>(0,d.jsx)(h.default,{component:"ul",sx:{pl:2,mb:1},children:a.children}),ol:a=>(0,d.jsx)(h.default,{component:"ol",sx:{pl:2,mb:1},children:a.children}),li:a=>(0,d.jsx)(h.default,{component:"li",sx:{mb:.5,whiteSpace:"pre-line"},children:a.children}),a:a=>(0,d.jsx)(g.A,{component:"a",sx:{color:"primary.main"},href:a.href,children:a.children}),blockquote:a=>(0,d.jsx)(h.default,{component:"blockquote",sx:{borderLeft:"4px solid",borderColor:"divider",pl:2,py:.5,my:1,bgcolor:"action.hover",borderRadius:"4px"},children:a.children}),code:({node:a,className:b,children:c,...e})=>/language-(\w+)/.exec(b||"")||b?(0,d.jsx)(h.default,{component:"pre",sx:{bgcolor:"action.hover",p:1.5,borderRadius:"4px",overflowX:"auto",fontFamily:"monospace",fontSize:"0.875rem",my:1,whiteSpace:"pre-wrap",wordBreak:"break-word"},children:c}):(0,d.jsx)(g.A,{component:"code",sx:{bgcolor:"action.hover",px:.5,py:.25,borderRadius:"4px",fontFamily:"monospace",wordBreak:"break-all"},children:c})},ar=({media:a})=>(0,d.jsx)(h.default,{sx:{display:"flex",flexDirection:"column",gap:1,mt:1},children:a.map((a,b)=>{let c=am(a),e=a.resourceUri??a.url??`${a.type}-${b}`;return c?"image"===a.type?(0,d.jsx)(h.default,{component:"img",src:c,alt:a.name??`Generated image ${b+1}`,sx:{maxWidth:"100%",height:"auto",borderRadius:1}},e):"audio"===a.type?(0,d.jsxs)(h.default,{children:[(0,d.jsx)(h.default,{component:"audio",controls:!0,src:c,sx:{width:"100%"}}),a.transcript&&(0,d.jsx)(g.A,{variant:"caption",color:"text.secondary",sx:{display:"block",mt:.5},children:a.transcript})]},e):"video"===a.type?(0,d.jsx)(h.default,{component:"video",controls:!0,src:c,sx:{maxWidth:"100%",maxHeight:560,borderRadius:1}},e):(0,d.jsx)(i.A,{component:"a",href:c,download:a.name||!0,target:"_blank",rel:"noopener noreferrer",variant:"outlined",size:"small",startIcon:(0,d.jsx)(M.A,{}),sx:{alignSelf:"flex-start"},children:a.name??"Download generated file"},e):null})}),as=({content:a,showRaw:b})=>b?(0,d.jsx)(h.default,{component:"pre",sx:{whiteSpace:"pre-wrap",wordBreak:"break-all",fontSize:"0.8rem",p:1,borderRadius:1,border:1,borderColor:a=>a.palette.divider,bgcolor:"action.hover",color:a=>a.palette.text.primary,overflow:"auto",maxHeight:"300px"},children:"string"==typeof a?a:"[Invalid tool content]"}):"string"!=typeof a?(0,d.jsx)(g.A,{variant:"body2",fontStyle:"italic",color:"text.secondary",children:"[Invalid tool content]"}):(0,d.jsx)(h.default,{sx:{width:"100%",minWidth:0},children:(()=>{try{let b=JSON.parse(a);if(b&&Array.isArray(b.content))return(0,d.jsx)(h.default,{sx:{display:"flex",flexDirection:"column",gap:1},children:b.content.map((a,b)=>"text"===a.type?(0,d.jsx)(H.oz,{remarkPlugins:[I.A],children:a.text},b):"image"===a.type&&a.data&&a.mimeType?(0,d.jsx)("img",{src:`data:${a.mimeType};base64,${a.data}`,alt:`Tool Result Image ${b+1}`,style:{maxWidth:"100%",height:"auto",borderRadius:"4px",marginTop:"8px"}},b):"audio"===a.type&&a.data&&a.mimeType?(0,d.jsx)("audio",{controls:!0,src:`data:${a.mimeType};base64,${a.data}`,style:{width:"100%",marginTop:"8px"},children:"Your browser does not support the audio element."},b):"video"===a.type&&a.data&&a.mimeType?(0,d.jsx)("video",{controls:!0,src:`data:${a.mimeType};base64,${a.data}`,style:{maxWidth:"100%",maxHeight:"560px",marginTop:"8px"},children:"Your browser does not support the video element."},b):(0,d.jsx)(h.default,{component:"pre",sx:{whiteSpace:"pre-wrap",wordBreak:"break-all",fontSize:"0.8rem",p:1,borderRadius:1,border:1,borderColor:a=>a.palette.divider,bgcolor:"action.hover",color:a=>a.palette.text.primary,overflow:"auto",mt:1},children:`Unsupported content type: ${a.type}
2
+ ${JSON.stringify(a,null,2)}`},b))});return(0,d.jsx)(H.oz,{remarkPlugins:[I.A],children:`\`\`\`json
3
+ ${JSON.stringify(b,null,2)}
4
+ \`\`\``})}catch(b){return(0,d.jsx)(H.oz,{remarkPlugins:[I.A],children:a})}})()}),at=({pairs:a,messageId:b,conversationId:c,onAppMessage:p,onUpdateModelContext:q,onRegisterAppTeardown:r,onOpenInCanvas:s})=>{let[t,u]=(0,e.useState)(null),[v,w]=(0,e.useState)({}),x=(a,c)=>a.toolCall.id||`tc-${b}-${c}`;return(0,d.jsxs)(h.default,{sx:{mt:1,pt:1,borderTop:"1px solid",borderColor:"divider"},children:[(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",color:"primary.main",mb:1},children:[(0,d.jsx)(P.A,{fontSize:"small",sx:{mr:1}}),(0,d.jsx)(g.A,{variant:"body2",children:1===a.length?"The agent used a tool":`The agent used ${a.length} tools`})]}),(0,d.jsx)(h.default,{sx:{display:"flex",flexWrap:"wrap",alignItems:"center",gap:.5},children:a.map((a,b)=>{let c=x(a,b),e=function(a){if(!a)return"pending";if("string"==typeof a.content)try{let b=JSON.parse(a.content);if(b&&(!0===b.isError||null!=b.error))return"error"}catch{}return"done"}(a.result),g=t===c;return(0,d.jsxs)(f().Fragment,{children:[b>0&&(0,d.jsx)(h.default,{sx:{width:14,height:"2px",bgcolor:"divider",flexShrink:0}}),(0,d.jsx)(k.A,{title:g?"Hide call & result":"Show call & result",children:(0,d.jsx)(l.A,{icon:function(a){return"pending"===a?(0,d.jsx)(j.default,{size:14,thickness:6}):"error"===a?(0,d.jsx)(S.A,{fontSize:"small"}):(0,d.jsx)(R.A,{fontSize:"small"})}(e),label:(0,ai.yo)(a.toolCall.function.name),size:"small",clickable:!0,variant:g?"filled":"outlined",color:"error"===e?"error":"pending"===e?"default":"primary",onClick:()=>u(g?null:c),sx:{maxWidth:"100%"}})})]},c)})}),a.map((a,b)=>{let e=x(a,b),f=a.toolCall.function.arguments;try{f=JSON.stringify(JSON.parse(a.toolCall.function.arguments),null,2)}catch(a){}let k=!!v[e],u=a.mcpDestination?()=>{let b={};try{let c=JSON.parse(a.toolCall.function.arguments);c&&"object"==typeof c&&!Array.isArray(c)&&(b=c)}catch{}let c=new URLSearchParams({server:a.mcpDestination.serverName,tool:a.mcpDestination.toolName,args:JSON.stringify(b)});window.location.assign(`/mcp?${c.toString()}`)}:void 0;return(0,d.jsx)(m.A,{in:t===e,children:(0,d.jsxs)(h.default,{sx:{mt:1,p:1,borderRadius:1,bgcolor:"rgba(0, 0, 0, 0.03)"},children:[(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",mb:.5},children:[(0,d.jsx)(P.A,{fontSize:"small",sx:{mr:.5,color:"primary.main"}}),(0,d.jsx)(g.A,{variant:"caption",sx:{fontWeight:"bold"},children:"Parameters"}),(0,d.jsx)(l.A,{label:`ID: ${a.toolCall.id?a.toolCall.id.substring(0,8):"N/A"}...`,size:"small",color:"default",variant:"outlined",sx:{ml:1,height:20,fontSize:"0.7rem"}})]}),(0,d.jsx)(h.default,{component:"pre",sx:{bgcolor:"action.hover",p:1,borderRadius:"4px",overflowX:"auto",fontFamily:"monospace",fontSize:"0.75rem",my:.5,maxHeight:"150px",whiteSpace:"pre-wrap",wordBreak:"break-word"},children:f}),u&&(0,d.jsx)(i.A,{size:"small",variant:"outlined",startIcon:(0,d.jsx)(Y.A,{}),onClick:u,sx:{mt:.5},children:"Execute in Tool Tester"}),(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",mt:1,mb:.5},children:[(0,d.jsx)(Q.A,{fontSize:"small",sx:{mr:.5,color:"text.secondary"}}),(0,d.jsx)(g.A,{variant:"caption",sx:{fontWeight:"bold"},children:"Result"}),a.result&&(0,d.jsx)(n.A,{control:(0,d.jsx)(o.A,{size:"small",checked:k,onChange:a=>w(b=>({...b,[e]:a.target.checked}))}),label:"Raw",sx:{ml:"auto",mr:0,"& .MuiTypography-root":{fontSize:"0.75rem"}}})]}),a.result?(0,d.jsx)(as,{content:a.result.content,showRaw:k}):(0,d.jsxs)(g.A,{variant:"body2",fontStyle:"italic",color:"text.secondary",sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(j.default,{size:14,thickness:6})," Waiting for the tool to respond…"]}),a.result?.ui?.uri&&a.result.ui.serverName&&(0,d.jsx)(al.Ay,{conversationId:c,serverName:a.result.ui.serverName,uri:a.result.ui.uri,toolName:a.result.ui.toolName??a.toolCall.function.name,toolArgs:a.toolCall.function.arguments,toolResultContent:"string"==typeof a.result.content?a.result.content:void 0,toolCancelledReason:a.result.ui.cancelledReason,toolIsError:a.result.ui.isError,onAppMessage:p,onUpdateModelContext:q,onRegisterTeardown:r,teardownRegistrationKey:`${a.result.ui.serverName}::${a.result.ui.uri}::${e}`,onRequestDock:s?()=>s({serverName:a.result.ui.serverName,uri:a.result.ui.uri,toolName:a.result.ui.toolName??a.toolCall.function.name,toolArgs:a.toolCall.function.arguments,resultContent:"string"==typeof a.result.content?a.result.content:void 0,cancelledReason:a.result.ui.cancelledReason,isError:a.result.ui.isError}):void 0})]})},e)})]})},au=f().memo(function({message:a,conversationId:b,nodeLabel:c,availableNodes:e,showRaw:f,toolCallPairs:i,onAppMessage:j,onUpdateModelContext:m,onRegisterAppTeardown:u,onOpenInCanvas:v,hoistedHandoffs:w,isBeingEdited:x,onMenuOpen:y,onToggleRaw:z}){var A;let B,C=a.depth??0;return(0,d.jsxs)(h.default,{sx:{display:"flex",flexDirection:"column",alignItems:"user"===a.role?"flex-end":"flex-start",opacity:a.disabled?.5:1,...C>0&&{pl:3*C,borderLeft:"2px solid",borderColor:"divider",ml:1}},children:[(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",mb:.5},children:[(0,d.jsxs)(g.A,{variant:"caption",color:"text.secondary",sx:{mr:1},children:["user"===a.role?"You":"assistant"===a.role?"Agent":"tool"===a.role?"Tool":"System"," • ","number"!=typeof(A=a.timestamp)||isNaN(A)?(an.warn("formatTime received invalid timestamp:",A),"Invalid Date"):new Date(A).toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit"})]}),a.processNodeId&&(0,d.jsx)(k.A,{title:`${c?`${c} — `:""}Process Node ID: ${a.processNodeId}`,children:(0,d.jsx)(l.A,{label:`Node: ${c||`${a.processNodeId.substring(0,6)}...`}`,size:"small",color:"primary",variant:"outlined",sx:{height:20,fontSize:"0.7rem",mr:1}})}),C>0&&(0,d.jsx)(k.A,{title:`Nested subflow step (depth ${C})`,children:(0,d.jsx)(l.A,{label:"Subflow step",size:"small",color:"secondary",variant:"outlined",sx:{height:20,fontSize:"0.7rem",mr:1}})}),a.disabled&&(0,d.jsx)(l.A,{label:"Disabled",size:"small",color:"default",variant:"outlined",sx:{height:20,fontSize:"0.7rem"}}),a.usage&&(0,d.jsx)(k.A,{title:`${a.usage.promptTokens.toLocaleString()} prompt + ${a.usage.completionTokens.toLocaleString()} completion tokens (provider-reported)`,children:(0,d.jsx)(l.A,{label:`${(B=a.usage.totalTokens)>=1e3?`${(B/1e3).toFixed(B>=1e5?0:1)}k`:`${B}`} tok`,size:"small",color:"default",variant:"outlined",sx:{height:20,fontSize:"0.7rem",mr:1}})}),(0,d.jsx)(p.A,{size:"small",onClick:b=>y(b,a.id),sx:{ml:1},children:(0,d.jsx)(J.A,{fontSize:"small"})})]}),(0,d.jsxs)(q.A,{elevation:1,sx:{p:2,maxWidth:"75vw",borderRadius:2,bgcolor:"user"===a.role?"primary.light":"assistant"===a.role||"tool"===a.role?"background.paper":"info.light",color:"user"===a.role?"primary.contrastText":"assistant"===a.role||"tool"===a.role?"text.primary":"info.contrastText",position:"relative",borderLeft:"tool"===a.role?"4px solid":"none",borderColor:"tool"===a.role?"grey.400":"transparent",opacity:x?.55:1,outline:x?"2px dashed":"none",outlineColor:"warning.main",overflowWrap:"break-word",wordBreak:"break-word",overflow:"hidden"},children:[(0,d.jsxs)(d.Fragment,{children:["tool"!==a.role&&"string"==typeof a.content&&(0,d.jsx)(H.oz,{remarkPlugins:[I.A],components:aq,children:a.content}),"tool"!==a.role&&Array.isArray(a.content)&&(0,d.jsx)(h.default,{sx:{display:"flex",flexDirection:"column",gap:1},children:a.content.map((a,b)=>a?.type==="text"?(0,d.jsx)(H.oz,{remarkPlugins:[I.A],children:a.text},b):a?.type==="image_url"&&a.image_url?.url?(0,d.jsx)("img",{src:a.image_url.url,alt:`Image ${b+1}`,style:{maxWidth:"100%",height:"auto",borderRadius:"4px"}},b):null)}),"tool"!==a.role&&a.media&&a.media.length>0&&(0,d.jsx)(ar,{media:a.media.filter(b=>"image"!==b.type||!Array.isArray(a.content)||!a.content.some(a=>a?.type==="image_url"&&a.image_url?.url===am(b)))}),"tool"!==a.role&&"string"!=typeof a.content&&!Array.isArray(a.content)&&!ao(a)&&!a.media?.length&&(0,d.jsx)(g.A,{variant:"body2",fontStyle:"italic",color:"text.secondary",children:"[No text content]"})]}),(()=>{let b=[...ao(a)?a.tool_calls.filter(a=>{var b;return!!(b=a.function.name)&&(b.startsWith(aj.n9)||"handoff"===b)}):[],...w??[]];return(0,d.jsx)(h.default,{sx:{mt:1,display:"flex",flexWrap:"wrap",gap:.5},children:b.map((b,c)=>(0,d.jsx)(l.A,{size:"small",variant:"outlined",color:"secondary",icon:(0,d.jsx)(W.A,{fontSize:"small"}),label:`Handoff → ${function(a,b){let c=a.startsWith(aj.n9)?a.slice(aj.n9.length):a,d=c.replace(/_\d+$/,""),e=b.find(a=>{let b=(0,aj.RN)(a.label);return b===c||b===d});return e?.label?e.label:d.split("_").filter(Boolean).map(a=>a.charAt(0).toUpperCase()+a.slice(1)).join(" ")||"target node"}(b.function.name,e)}`,sx:{maxWidth:"100%",fontWeight:500}},b.id||`handoff-${a.id}-${c}`))})})(),i&&i.length>0&&(0,d.jsx)(at,{pairs:i,messageId:a.id,conversationId:b,onAppMessage:j,onUpdateModelContext:m,onRegisterAppTeardown:u,onOpenInCanvas:v}),"tool"===a.role&&a.tool_call_id&&!ap(a)&&(0,d.jsxs)(h.default,{children:[(0,d.jsxs)(g.A,{variant:"body2",sx:{display:"flex",alignItems:"center",color:"text.secondary",mb:1},children:[(0,d.jsx)(Q.A,{fontSize:"small",sx:{mr:1}}),"The tool responded to the agent"]}),(0,d.jsxs)(r.A,{defaultExpanded:!1,sx:{mb:.5,"&:before":{display:"none"},boxShadow:"none",bgcolor:"rgba(0, 0, 0, 0.02)"},children:[(0,d.jsx)(s.A,{expandIcon:(0,d.jsx)(O.A,{}),children:(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(Q.A,{fontSize:"small",sx:{mr:1,color:"text.secondary"}}),(0,d.jsx)(g.A,{variant:"subtitle2",children:"Tool Result"}),(0,d.jsx)(l.A,{label:`ID: ${a.tool_call_id.substring(0,8)}...`,size:"small",color:"default",variant:"outlined",sx:{ml:1,height:20,fontSize:"0.7rem"}}),(0,d.jsx)(n.A,{control:(0,d.jsx)(o.A,{size:"small",checked:f,onChange:b=>z(a.id,b.target.checked),onClick:a=>a.stopPropagation()}),label:"Raw",sx:{mr:1,ml:"auto","& .MuiTypography-root":{fontSize:"0.75rem"}},onClick:a=>a.stopPropagation()})]})}),(0,d.jsx)(t.A,{sx:{pt:0,pb:1,overflow:"hidden"},children:(0,d.jsx)(as,{content:a.content,showRaw:f})})]})]}),a.attachments&&a.attachments.length>0&&(0,d.jsxs)(h.default,{sx:{mt:1,pt:1,borderTop:"1px solid",borderColor:"divider"},children:[(0,d.jsx)(g.A,{variant:"caption",color:"text.secondary",sx:{display:"block",mb:.5},children:"Attachments:"}),a.attachments.map(a=>"image"===a.type?(0,d.jsx)(h.default,{sx:{mb:.5},children:(0,d.jsx)("img",{src:a.content,alt:a.originalName||"image attachment",style:{maxWidth:"100%",height:"auto",borderRadius:"4px"}})},a.id):(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",p:1,borderRadius:1,bgcolor:"rgba(0, 0, 0, 0.04)",mb:.5},children:["document"===a.type?(0,d.jsx)(M.A,{fontSize:"small",sx:{mr:1}}):(0,d.jsx)(N.A,{fontSize:"small",sx:{mr:1}}),(0,d.jsx)(g.A,{variant:"caption",sx:{wordBreak:"break-all"},children:a.originalName||`${a.type} attachment`})]},a.id))]})]})]})}),av=({elicitation:a,onSubmit:b,onCancel:c})=>{let{elicitationId:f,message:j,requestedSchema:k}=a,l=k?.properties??{},m=Object.keys(l),[o,p]=(0,e.useState)(()=>{let a={};for(let b of m){let c=l[b];void 0!==c.default?a[b]=c.default:"boolean"===c.type?a[b]=!1:"number"===c.type||"integer"===c.type?a[b]=0:a[b]=""}return a}),r=(a,b)=>{p(c=>({...c,[a]:b}))};return(0,d.jsxs)(q.A,{elevation:2,sx:{p:2,mt:2,bgcolor:"info.light",border:"1px solid",borderColor:"info.main",borderRadius:2},children:[(0,d.jsx)(g.A,{variant:"h6",sx:{mb:1},children:"Server needs more information"}),(0,d.jsx)(g.A,{variant:"body2",sx:{mb:2},children:j}),(0,d.jsx)(h.default,{sx:{display:"flex",flexDirection:"column",gap:1.5},children:m.map(a=>{let b=l[a],c=b.title||a,e=o[a];if("boolean"===b.type)return(0,d.jsx)(n.A,{control:(0,d.jsx)(u.A,{checked:!!e,onChange:b=>r(a,b.target.checked),size:"small"}),label:c},a);if(b.enum&&b.enum.length>0)return(0,d.jsxs)(v.A,{size:"small",sx:{minWidth:200},children:[(0,d.jsx)(w.A,{children:c}),(0,d.jsx)(x.A,{label:c,value:String(e??""),onChange:b=>r(a,b.target.value),children:b.enum.map((a,c)=>(0,d.jsx)(y.A,{value:a,children:b.enumNames?.[c]||a},a))}),b.description&&(0,d.jsx)(z.A,{children:b.description})]},a);let f="number"===b.type||"integer"===b.type;return(0,d.jsx)(A.A,{size:"small",label:c,type:f?"number":"text",value:String(e??""),helperText:b.description,inputProps:{minLength:b.minLength,maxLength:b.maxLength,min:b.minimum,max:b.maximum},onChange:b=>{if(f){let c=parseFloat(b.target.value);r(a,isNaN(c)?0:c)}else r(a,b.target.value)}},a)})}),(0,d.jsxs)(h.default,{sx:{display:"flex",justifyContent:"flex-end",gap:1,mt:2},children:[(0,d.jsx)(i.A,{variant:"outlined",color:"inherit",size:"small",onClick:()=>{c&&c(f)},disabled:!c,children:"Cancel"}),(0,d.jsx)(i.A,{variant:"contained",color:"primary",size:"small",onClick:()=>{b&&b(f,o)},disabled:!b,children:"Submit"})]})]})},aw="Type your own answer",ax=({question:a,onAnswer:b,onDecline:c})=>{let{questionId:f,questions:j}=a,[k,l]=(0,e.useState)(()=>j.map(()=>[])),[m,o]=(0,e.useState)(()=>j.map(()=>"")),p=()=>j.map((a,b)=>(k[b]??[]).map(a=>a===aw?m[b].trim():a).filter(a=>a.length>0)),r=j.every((a,b)=>(p()[b]??[]).length>0);return(0,d.jsxs)(q.A,{elevation:2,sx:{p:2,mt:2,bgcolor:"info.light",border:"1px solid",borderColor:"info.main",borderRadius:2},children:[(0,d.jsx)(g.A,{variant:"h6",sx:{mb:1},children:"The agent is asking"}),(0,d.jsx)(h.default,{sx:{display:"flex",flexDirection:"column",gap:2},children:j.map((a,b)=>(0,d.jsxs)(v.A,{component:"fieldset",sx:{display:"flex"},children:[(0,d.jsx)(B.A,{sx:{mb:.5},children:a.prompt}),a.multiple?(0,d.jsx)(h.default,{sx:{display:"flex",flexDirection:"column"},children:a.options.map(a=>(0,d.jsx)(n.A,{control:(0,d.jsx)(u.A,{size:"small",checked:(k[b]??[]).includes(a),onChange:()=>((a,b)=>{l(c=>{let d=c.map(a=>[...a]),e=d[a],f=e.indexOf(b);return f>=0?e.splice(f,1):e.push(b),d})})(b,a)}),label:a},a))}):(0,d.jsx)(C.A,{value:(k[b]??[])[0]??"",onChange:a=>{var c;return c=a.target.value,void l(a=>{let d=a.map(a=>[...a]);return d[b]=[c],d})},children:a.options.map(a=>(0,d.jsx)(n.A,{value:a,control:(0,d.jsx)(D.A,{size:"small"}),label:a},a))}),(k[b]??[]).includes(aw)&&(0,d.jsx)(A.A,{size:"small",sx:{mt:1},placeholder:"Your answer…",value:m[b],onChange:a=>o(c=>{let d=[...c];return d[b]=a.target.value,d})})]},b))}),(0,d.jsxs)(h.default,{sx:{display:"flex",justifyContent:"flex-end",gap:1,mt:2},children:[(0,d.jsx)(i.A,{variant:"outlined",color:"inherit",size:"small",onClick:()=>{c&&c(f)},disabled:!c,children:"Decline"}),(0,d.jsx)(i.A,{variant:"contained",color:"primary",size:"small",onClick:()=>{b&&b(f,p())},disabled:!b||!r,children:"Answer"})]})]})},ay=({messages:a,pendingToolCalls:b,pendingElicitation:c,availableNodes:k=[],conversationId:m,editingMessageId:n,onToggleDisabled:o,onSplitConversation:p,onRevertToHere:u,onBeginEditMessage:v,onApproveToolCall:w,onRejectToolCall:x,onSubmitElicitation:z,onCancelElicitation:B,pendingQuestion:C,onAnswerQuestion:D,onDeclineQuestion:H,onAppMessage:I,onUpdateModelContext:J,onRegisterAppTeardown:M,onOpenInCanvas:N,queuedMessages:Q=[],queueHoldReason:R=null})=>{let[S,W]=(0,e.useState)({}),[Y,Z]=(0,e.useState)(50);(0,e.useEffect)(()=>{Z(50)},[m]);let $=Math.max(0,(Array.isArray(a)?a.length:0)-Y),_=(0,e.useMemo)(()=>Array.isArray(a)?$>0?a.slice($):a:[],[a,$]),{pairsByAnchorId:aa,handoffsByAnchorId:ab,consumedToolCallIds:ac,groups:ad}=(0,e.useMemo)(()=>(function(a){let b=new Map,c=new Map,d=new Set,e=new Set,f=new Map,g=[];if(!Array.isArray(a))return{pairsByAnchorId:b,handoffsByAnchorId:c,hoistedAssistantIds:d,consumedToolCallIds:e,groups:g};let h=new Map;for(let b of a)"tool"===b.role&&"string"==typeof b.tool_call_id&&b.tool_call_id&&!h.has(b.tool_call_id)&&h.set(b.tool_call_id,b);let i=a=>{let d=f.get(a);return d||(d={anchorId:a,memberIds:[a],hoistedIds:[]},f.set(a,d),g.push(d),b.set(a,[]),c.set(a,[])),d},j=null;for(let f of a){if("user"===f.role||"system"===f.role){j=null;continue}if("assistant"!==f.role)continue;let a=Array.isArray(f.tool_calls)?f.tool_calls:[],g=[],k=[];for(let b of a){if("function"!==b.type)continue;if(ak(b.function?.name)){k.push(b);continue}let a=b.id,c=a?h.get(a):void 0;a&&e.add(a),g.push({toolCall:b,result:c,mcpDestination:a?f.mcpToolCalls?.[a]:void 0})}let l=function(a){let b=a.content;return"string"==typeof b?b.trim().length>0:!!Array.isArray(b)&&b.some(a=>!!a&&"object"==typeof a&&("text"===a.type?"string"==typeof a.text&&a.text.trim().length>0:"image_url"===a.type?!!a.image_url?.url:"input_audio"===a.type&&!!a.input_audio?.data))}(f),m=g.length>0||k.length>0;if(l){j=f.id,m&&(i(f.id),b.get(f.id).push(...g),c.get(f.id).push(...k));continue}if(m)if(j){let a=i(j);b.get(j).push(...g),c.get(j).push(...k),a.memberIds.push(f.id),a.hoistedIds.push(f.id),d.add(f.id)}else j=f.id,i(f.id),b.get(f.id).push(...g),c.get(f.id).push(...k)}return{pairsByAnchorId:b,handoffsByAnchorId:c,hoistedAssistantIds:d,consumedToolCallIds:e,groups:g}})(a),[a]),ae=(0,e.useMemo)(()=>(function(a){let b=new Set;if(!Array.isArray(a))return b;for(let c of a){if("assistant"!==c.role)continue;let a=c.tool_calls;if(Array.isArray(a))for(let c of a)"function"===c.type&&ak(c.function?.name)&&"string"==typeof c.id&&c.id&&b.add(c.id)}return b})(a),[a]),af=(0,e.useMemo)(()=>new Set(_.map(a=>a.id)),[_]),{renderPairsById:aj,renderHandoffsById:al,suppressedIds:am}=(0,e.useMemo)(()=>{let a=new Map,b=new Map,c=new Set;for(let d of ad){let e=aa.get(d.anchorId)??[],f=ab.get(d.anchorId)??[],g=d.memberIds.find(a=>af.has(a))??d.anchorId;for(let h of(e.length>0&&a.set(g,e),f.length>0&&b.set(g,f),d.hoistedIds))h!==g&&c.add(h)}return{renderPairsById:a,renderHandoffsById:b,suppressedIds:c}},[ad,aa,ab,af]),[ao,aq]=f().useState(null),[ar,as]=f().useState(null),[at,aw]=f().useState(null),[ay,az]=f().useState({}),aA=(0,e.useCallback)((a,b)=>{an.debug(`handleMenuOpen called with messageId: ${b}`),aq(a.currentTarget),as(b)},[]),aB=(0,e.useCallback)((a,b)=>{az(c=>({...c,[a]:b}))},[]),aC=()=>{aq(null),as(null)},aD=()=>{ar&&(v?.(ar),aC())},aE=(0,e.useMemo)(()=>{let a=new Map;for(let b of k)a.set(b.id,b.label);return a},[k]),aF=(0,e.useMemo)(()=>ar&&a.find(a=>a.id===ar)||null,[ar,a]);return(0,d.jsxs)(h.default,{sx:{display:"flex",flexDirection:"column",gap:2},children:[$>0&&(0,d.jsx)(h.default,{sx:{display:"flex",justifyContent:"center"},children:(0,d.jsxs)(i.A,{size:"small",variant:"outlined",onClick:()=>Z(a=>a+200),children:["Show earlier messages (",$," more)"]})}),_.map((a,b)=>ap(a)||"tool"===a.role&&"string"==typeof a.tool_call_id&&ae.has(a.tool_call_id)||"tool"===a.role&&"string"==typeof a.tool_call_id&&ac.has(a.tool_call_id)||am.has(a.id)?null:(0,d.jsx)(au,{message:a,conversationId:m,nodeLabel:a.processNodeId?aE.get(a.processNodeId):void 0,availableNodes:k,showRaw:!!ay[a.id],toolCallPairs:aj.get(a.id),onAppMessage:I,onUpdateModelContext:J,onRegisterAppTeardown:M,onOpenInCanvas:N,hoistedHandoffs:al.get(a.id),isBeingEdited:!!n&&a.id===n,onMenuOpen:aA,onToggleRaw:aB},a.id||`msg-${$+b}`)),Q.map(a=>(0,d.jsx)(h.default,{"data-testid":"queued-bubble",sx:{display:"flex",justifyContent:"flex-end",opacity:.6},children:(0,d.jsxs)(h.default,{sx:{maxWidth:"70%",bgcolor:"primary.light",color:"primary.contrastText",borderRadius:2,px:2,py:1,display:"flex",flexDirection:"column",gap:.5},children:[(0,d.jsx)(g.A,{variant:"body2",sx:{whiteSpace:"pre-wrap",wordBreak:"break-word"},children:a.content||(a.attachments.length>0?`${a.attachments.length} attachment(s)`:"")}),(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",gap:.5,justifyContent:"flex-end"},children:[!R&&(0,d.jsx)(j.default,{size:10,color:"inherit"}),(0,d.jsx)(g.A,{variant:"caption",sx:{opacity:.85},children:R??"Queued"})]})]})},a.id)),(0,d.jsxs)(E.A,{anchorEl:ao,open:!!ao,onClose:aC,children:[aF&&(()=>{an.debug("Entering menu item rendering logic",{activeMessageId:ar}),an.debug("Active message object for menu:",aF),an.debug("Active message role for menu:",aF?.role);try{if("user"===aF.role&&"string"==typeof aF.content&&v)return(0,d.jsxs)(y.A,{onClick:aD,children:[(0,d.jsx)(F.A,{children:(0,d.jsx)(T.A,{fontSize:"small"})}),(0,d.jsx)(G.A,{children:"Edit Message"})]});return null}catch(a){return an.error("Error rendering Edit Message menu item",{error:a}),null}})(),(0,d.jsxs)(y.A,{onClick:()=>{ar&&(o(ar),aC())},children:[(0,d.jsx)(F.A,{children:(0,d.jsx)(K.A,{fontSize:"small"})}),(0,d.jsx)(G.A,{children:aF?.disabled?"Enable Message":"Disable Message"})]}),(0,d.jsxs)(y.A,{onClick:()=>{ar&&(p(ar),aC())},children:[(0,d.jsx)(F.A,{children:(0,d.jsx)(L.A,{fontSize:"small"})}),(0,d.jsx)(G.A,{children:"Split Conversation Here"})]}),ah.G.ENABLE_REVERT_TO_HERE&&aF?.changedFiles?.length?(0,d.jsxs)(y.A,{onClick:()=>{ar&&(aw(ar),aC())},children:[(0,d.jsx)(F.A,{children:(0,d.jsx)(X.A,{fontSize:"small"})}),(0,d.jsx)(G.A,{children:"Revert to here"})]}):null]}),ah.G.ENABLE_REVERT_TO_HERE&&m&&(0,d.jsx)(ag,{open:!!at,conversationId:m,messageId:at,onClose:()=>aw(null),onReverted:u}),c&&(0,d.jsx)(av,{elicitation:c,onSubmit:z,onCancel:B}),C&&(0,d.jsx)(ax,{question:C,onAnswer:D,onDecline:H}),b&&b.length>0&&(0,d.jsxs)(q.A,{elevation:2,sx:{p:2,mt:2,bgcolor:"warning.light",border:"1px solid",borderColor:"warning.main",borderRadius:2},children:[(0,d.jsxs)(g.A,{variant:"h6",sx:{mb:1,display:"flex",alignItems:"center"},children:[(0,d.jsx)(P.A,{sx:{mr:1}})," Tool Approval Required"]}),(0,d.jsx)(g.A,{variant:"body2",sx:{mb:2},children:"The agent wants to use the following tool(s). Please approve or reject each request."}),b.map((a,b)=>{let c=(0,ai.yo)(a.function.name),e=a.function.arguments;try{let b=JSON.parse(a.function.arguments);e=JSON.stringify(b,null,2)}catch(a){}return(0,d.jsxs)(r.A,{defaultExpanded:!0,sx:{mb:1,"&:before":{display:"none"},boxShadow:1},children:[(0,d.jsx)(s.A,{expandIcon:(0,d.jsx)(O.A,{}),children:(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",width:"100%"},children:[(0,d.jsx)(P.A,{fontSize:"small",sx:{mr:1,color:"primary.main"}}),(0,d.jsx)(g.A,{variant:"subtitle2",sx:{fontWeight:"bold",flexGrow:1},children:c}),(0,d.jsx)(l.A,{label:`ID: ${a.id?a.id.substring(0,8):"N/A"}...`,size:"small",variant:"outlined",sx:{ml:1,height:20,fontSize:"0.7rem"}})]})}),(0,d.jsxs)(t.A,{sx:{pt:0},children:[(0,d.jsx)(h.default,{component:"pre",sx:{bgcolor:"action.hover",p:1,borderRadius:"4px",overflowX:"auto",fontFamily:"monospace",fontSize:"0.75rem",my:.5,maxHeight:"150px",whiteSpace:"pre-wrap",wordBreak:"break-word"},children:e}),(0,d.jsx)(A.A,{label:"Rejection reason (optional)",placeholder:"e.g. write to dist/ instead",value:S[a.id]??"",onChange:b=>W(c=>({...c,[a.id]:b.target.value})),multiline:!0,minRows:1,maxRows:4,fullWidth:!0,size:"small",sx:{mt:1,mb:1}}),(0,d.jsxs)(h.default,{sx:{display:"flex",justifyContent:"flex-end",gap:1,mt:1,flexWrap:"wrap"},children:[(0,d.jsx)(i.A,{variant:"outlined",color:"error",size:"small",startIcon:(0,d.jsx)(V.A,{}),onClick:()=>x&&x(a.id,!1,S[a.id]?.trim()||void 0),disabled:!x,children:"Reject"}),(0,d.jsx)(i.A,{variant:"outlined",color:"error",size:"small",onClick:()=>x&&x(a.id,!0),disabled:!x,title:"Always deny this tool — saves a rule so future calls are auto-denied",children:"Always Deny"}),(0,d.jsx)(i.A,{variant:"outlined",color:"success",size:"small",startIcon:(0,d.jsx)(U.A,{}),onClick:()=>w&&w(a.id,!0),disabled:!w,title:"Always allow this tool — saves a rule so future calls are auto-approved",children:"Always Allow"}),(0,d.jsx)(i.A,{variant:"contained",color:"success",size:"small",startIcon:(0,d.jsx)(U.A,{}),onClick:()=>w&&w(a.id),disabled:!w,children:"Approve"})]})]})]},a.id||`ptc-${b}`)})]})]})}},63787:(a,b,c)=>{c.d(b,{Ay:()=>$,nd:()=>W,c_:()=>V});var d=c(21124),e=c(38301),f=c(1509),g=c(21903),h=c(54573),i=c(79515),j=c(37674),k=c(67101),l=c(81637),m=c(24077),n=c(95791),o=c(46973),p=c(60839),q=c(37489),r=c(18168),s=c(2117),t=c(63281),u=c(63654),v=c(11361),w=c(94367),x=c(50553),y=c(84233),z=c(91059),A=c(7118),B=c(91034),C=c(38941),D=c(95345),E=c(12033),F=c(1010),G=c(88970);let H=({open:a,position:b,onClose:c,onDelete:e,onEditProperties:f,onConvertToSubflow:g,onToggleBidirectional:h,onCopy:i,onPaste:j,canPaste:k,canCopy:l,nodeId:m,selection:n,edgeId:o})=>{let p=()=>{f&&f(),c()},q=[];return m&&!n&&(q.push((0,d.jsxs)(w.A,{onClick:p,children:[(0,d.jsx)(x.A,{children:(0,d.jsx)(E.A,{fontSize:"small"})}),(0,d.jsx)(y.A,{children:"Edit Properties"})]},"edit")),g&&q.push((0,d.jsxs)(w.A,{onClick:()=>{g&&g(),c()},children:[(0,d.jsx)(x.A,{children:(0,d.jsx)(G.A,{fontSize:"small"})}),(0,d.jsx)(y.A,{children:"Convert to subflow"})]},"convert-to-subflow"))),o&&!m&&!n&&(f&&q.push((0,d.jsxs)(w.A,{onClick:p,children:[(0,d.jsx)(x.A,{children:(0,d.jsx)(E.A,{fontSize:"small"})}),(0,d.jsx)(y.A,{children:"Edit Properties"})]},"edge-edit")),h&&q.push((0,d.jsxs)(w.A,{onClick:()=>{h&&h(),c()},children:[(0,d.jsx)(x.A,{children:(0,d.jsx)(F.A,{fontSize:"small"})}),(0,d.jsx)(y.A,{children:"Toggle Bidirectional"})]},"edge-bidirectional"))),i&&(m||n)&&q.push((0,d.jsxs)(w.A,{onClick:()=>{i&&i(),c()},disabled:!l,children:[(0,d.jsx)(x.A,{children:(0,d.jsx)(C.A,{fontSize:"small"})}),(0,d.jsx)(y.A,{children:"Copy"})]},"copy")),j&&q.push((0,d.jsxs)(w.A,{onClick:()=>{j&&j(),c()},disabled:!k,children:[(0,d.jsx)(x.A,{children:(0,d.jsx)(D.A,{fontSize:"small"})}),(0,d.jsx)(y.A,{children:"Paste"})]},"paste")),(m||o||n)&&q.push((0,d.jsx)(z.A,{},"delete-divider"),(0,d.jsxs)(w.A,{onClick:()=>{e(),c()},sx:{color:"error.main"},children:[(0,d.jsx)(x.A,{sx:{color:"error.main"},children:(0,d.jsx)(B.A,{fontSize:"small"})}),(0,d.jsx)(y.A,{children:"Delete"})]},"delete")),(0,d.jsx)(A.A,{open:a,onClose:c,anchorReference:"anchorPosition",anchorPosition:null!==b.y&&null!==b.x?{top:b.y,left:b.x}:void 0,children:q})};var I=c(31164),J=c(97004);function K(a,b){return b.find(b=>b.id===a)}var L=c(42819);let M=(0,L.h)("components/flow/FlowBuilder/Canvas/hooks/useCanvasEvents.ts");var N=c(90430),O=c(36627);let P=({showMiniMap:a=!0,showControls:b=!0,showBackground:c=!0})=>{let e=(0,p.A)(),f="dark"===e.palette.mode;return(0,d.jsxs)(d.Fragment,{children:[c&&(0,d.jsx)(n.VS,{color:f?e.palette.text.disabled:e.palette.divider,gap:20,size:1}),b&&(0,d.jsx)(n.H2,{}),a&&(0,d.jsx)(n.of,{nodeColor:f?e.palette.primary.dark:e.palette.primary.light,maskColor:f?"rgba(0, 0, 0, 0.4)":"rgba(255, 255, 255, 0.6)"})]})};var Q=c(5240);let R=(0,L.h)("components/flow/FlowBuilder/Canvas/Canvas.tsx"),S="flujo:flowClipboard",T=null;function U(a){T=a;try{localStorage.setItem(S,JSON.stringify(a))}catch(a){R.warn("Could not persist flow clipboard to localStorage",a)}}let V={start:v.vm,process:v.Uw,finish:v.IK,mcp:v.v2,subflow:v.lA,resource:v.z9,signal:v.z3,trigger:v.pF},W={custom:I.jY,mcpEdge:I.oY,resourceEdge:I.sZ},X=({open:a,position:b,anchorPosition:c,onClose:m,onSelectNodeType:n,sourceNodeType:o,sourceHandleId:r})=>{let s=(0,p.A)(),[t,u]=(0,e.useState)("");(0,e.useEffect)(()=>{a&&u("")},[a]);let w=(0,O._w)(o,r);R.debug(`NodeSelectionModal: Source node type: ${o}, Source handle ID: ${r}`),R.debug(`NodeSelectionModal: Valid node types: ${w.join(", ")}`);let x=[{type:"process",label:"Process Node",description:"Let a LLM do your work"},{type:"finish",label:"Finish Node",description:"End your flow here"},{type:"mcp",label:"MCP Node",description:"Add functionality"},{type:"subflow",label:"Subflow Node",description:"Run another flow"},{type:"resource",label:"Resource Node",description:"A data artifact steps read or write"},{type:"signal",label:"Signal Node",description:"Emit an event to trigger another flow"},{type:"trigger",label:"Trigger Node",description:"Schedule or event-trigger for this flow"}].filter(a=>w.includes(a.type)).filter(a=>{let b=t.trim().toLowerCase();return!b||`${a.label} ${a.description}`.toLowerCase().includes(b)});return a&&b?(0,d.jsx)(f.A,{children:(0,d.jsx)(g.x,{onClickAway:m,children:(0,d.jsxs)(h.A,{role:"dialog","aria-modal":"false","aria-labelledby":"node-selection-title",elevation:16,onKeyDown:a=>{"Escape"===a.key&&(a.preventDefault(),m())},sx:{position:"fixed",top:{xs:"auto",sm:c?`clamp(12px, ${c.y+10}px, calc(100dvh - 460px))`:"50%"},bottom:{xs:12,sm:"auto"},left:{xs:12,sm:c?`clamp(12px, ${c.x+10}px, calc(100vw - 392px))`:"50%"},right:{xs:12,sm:"auto"},transform:{xs:"none",sm:c?"none":"translate(-50%, -50%)"},zIndex:a=>a.zIndex.modal+1,width:{xs:"auto",sm:380},maxHeight:"min(70dvh, 520px)",overflow:"hidden",border:1,borderColor:"divider",borderRadius:3.5,bgcolor:"background.paper",boxShadow:"dark"===s.palette.mode?"0 28px 80px rgba(0,0,0,.55)":"0 28px 80px rgba(31,27,74,.22)",p:1.5},children:[(0,d.jsx)(i.A,{id:"node-selection-title",variant:"subtitle1",fontWeight:800,children:"Add the next step"}),(0,d.jsx)(i.A,{variant:"caption",color:"text.secondary",children:"It will be connected and selected automatically."}),(0,d.jsx)(j.A,{autoFocus:!0,fullWidth:!0,size:"small",value:t,onChange:a=>u(a.target.value),placeholder:"Search legal node types",inputProps:{"aria-label":"Search legal node types"},sx:{my:1.25},InputProps:{startAdornment:(0,d.jsx)(k.A,{position:"start",children:(0,d.jsx)(Q.A,{fontSize:"small"})})}}),(0,d.jsxs)(l.default,{display:"flex",flexDirection:"column",gap:.75,sx:{overflowY:"auto",maxHeight:360},children:[x.map(a=>(0,d.jsx)(h.A,{component:"button",type:"button",onClick:()=>n(a.type,b),sx:{appearance:"none",width:"100%",p:1.1,textAlign:"left",color:"text.primary",bgcolor:"transparent",borderRadius:2.5,border:1,borderColor:"divider",cursor:"pointer",transition:"border-color 160ms ease, background-color 160ms ease, transform 160ms ease","&:hover, &:focus-visible":{outline:"none",borderColor:"finish"===a.type?s.palette.success.main:"subflow"===a.type?s.palette.warning.main:"resource"===a.type?v.nH:s.palette.primary.main,bgcolor:(0,q.X4)(s.palette.primary.main,.06),transform:"translateX(2px)"}},children:(0,d.jsxs)(l.default,{display:"flex",alignItems:"center",gap:1.25,children:[(a=>{switch(a){case"process":default:return(0,d.jsx)("div",{style:{width:24,height:24,backgroundColor:s.palette.primary.main,borderRadius:"50%"}});case"finish":return(0,d.jsx)("div",{style:{width:24,height:24,backgroundColor:s.palette.success.main,borderRadius:"50%"}});case"mcp":return(0,d.jsx)("div",{style:{width:24,height:24,backgroundColor:s.palette.info.main,borderRadius:"50%"}});case"subflow":return(0,d.jsx)("div",{style:{width:24,height:24,backgroundColor:s.palette.warning.main,borderRadius:"50%"}});case"resource":return(0,d.jsx)("div",{style:{width:24,height:24,backgroundColor:v.nH,borderRadius:"50%"}});case"signal":return(0,d.jsx)("div",{style:{width:24,height:24,backgroundColor:v.vp,borderRadius:"50%"}});case"trigger":return(0,d.jsx)("div",{style:{width:24,height:24,backgroundColor:v.$Q,borderRadius:"50%"}})}})(a.type),(0,d.jsxs)(l.default,{children:[(0,d.jsx)(i.A,{variant:"subtitle2",fontWeight:800,children:a.label}),(0,d.jsx)(i.A,{variant:"caption",color:"text.secondary",children:a.description})]})]})},a.type)),0===x.length&&(0,d.jsx)(i.A,{variant:"body2",color:"text.secondary",sx:{p:1},children:"No matching node types are valid for this connection."})]})]})})}):null},Y=(0,r.Ay)("div")(({theme:a})=>({flex:"1 1 0",height:"100%",minHeight:0,width:"100%",border:`1px solid ${a.palette.divider}`,borderRadius:"18px",overflow:"hidden",backgroundColor:a.palette.background.paper,backgroundImage:`
5
+ linear-gradient(${a.palette.divider} 1px, transparent 1px),
6
+ linear-gradient(90deg, ${a.palette.divider} 1px, transparent 1px),
7
+ radial-gradient(circle at 22% 0%, ${(0,q.X4)(a.palette.primary.main,.1)}, transparent 38%)
8
+ `,backgroundSize:"28px 28px, 28px 28px, auto",boxShadow:"dark"===a.palette.mode?"inset 0 1px 0 rgba(255,255,255,.035), 0 22px 65px rgba(0,0,0,.24)":"inset 0 1px 0 rgba(255,255,255,.7), 0 22px 65px rgba(53,48,105,.1)",position:"relative",[a.breakpoints.down("sm")]:{flex:"none",height:440,minHeight:440,maxWidth:"100%"}})),Z=(0,e.forwardRef)((a,b)=>{let c=(0,p.A)(),f=(0,m.A)(c.breakpoints.down("sm"),{noSsr:!0}),{nodes:g,edges:h,onNodesChange:i,onEdgesChange:j,onDrop:k,onDragOver:l,onInit:q,reactFlowWrapper:r,onEditNode:v,onCreateNode:w,onSelectNode:x,onConvertProcessToSubflow:y,onEditEdge:z}=a,{contextMenu:A,selectedElements:B,closeContextMenu:C,handleDelete:D,onNodeContextMenu:E,onEdgeContextMenu:F,onPaneContextMenu:G,onSelectionContextMenu:I}=function(a){let{deleteElements:b}=(0,n.VH)(),[c,d]=(0,e.useState)({open:!1,position:{x:0,y:0}}),[f,g]=(0,e.useState)({nodes:[],edges:[]});(0,n.p4)({onChange:({nodes:a,edges:b})=>{let c=a.map(a=>a.id),d=b.map(a=>a.id);M.debug(`Selection changed: ${c.length} nodes, ${d.length} edges selected`),g({nodes:c,edges:d})}});let h=(0,e.useCallback)((a,b,c,e)=>{a.preventDefault(),b?M.debug(`Context menu opened for node: ${b}`):c?M.debug(`Context menu opened for edge: ${c}`):e?M.debug("Context menu opened for the current selection"):M.debug(`Context menu opened on canvas at (${a.clientX}, ${a.clientY})`),d({open:!0,position:{x:a.clientX,y:a.clientY},nodeId:b,edgeId:c,selection:e})},[]),i=(0,e.useCallback)(()=>{M.debug("Context menu closed"),d(a=>({...a,open:!1}))},[]),j=(0,e.useCallback)(()=>{if(c.selection)M.debug("handleDelete: Deleting the current selection"),b({nodes:f.nodes.map(a=>({id:a})),edges:f.edges.map(a=>({id:a}))});else if(c.nodeId){if(M.debug(`handleDelete: Attempting to delete node ${c.nodeId}`),!function(a,b){let c=K(a,b);return!!c&&"start"!==c.type}(c.nodeId,a)){M.warn(`Cannot delete Start node: ${c.nodeId}`),alert("Start nodes cannot be deleted");return}b({nodes:[{id:c.nodeId}]})}else c.edgeId&&(M.debug(`handleDelete: Deleting edge ${c.edgeId}`),b({edges:[{id:c.edgeId}]}))},[c,b,a,f]),k=(0,e.useCallback)((a,b)=>{h(a,b.id)},[h]),l=(0,e.useCallback)((a,b)=>{h(a,void 0,b.id)},[h]),m=(0,e.useCallback)(a=>{h(a)},[h]),o=(0,e.useCallback)(a=>{h(a,void 0,void 0,!0)},[h]);return{contextMenu:c,selectedElements:f,onContextMenu:h,closeContextMenu:i,handleDelete:j,onNodeContextMenu:k,onEdgeContextMenu:l,onPaneContextMenu:m,onSelectionContextMenu:o}}(g),{deleteElements:L}=(0,n.VH)(),Q=(0,n.PI)(),Z=(0,e.useRef)(null),[$,_]=(0,e.useState)(null),[aa,ab]=(0,e.useState)({open:!1,position:null}),ac=(0,e.useCallback)(a=>[...g.filter(a=>a.selected).map(a=>({type:"select",id:a.id,selected:!1})),{type:"add",item:{...a,selected:!0}}],[g]);(0,e.useEffect)(()=>{if(!v)return;let a=a=>{if(a.detail&&a.detail.nodeId){let b=K(a.detail.nodeId,g);b&&v(b)}};return document.addEventListener("editNode",a),()=>{document.removeEventListener("editNode",a)}},[g,v]),(0,e.useEffect)(()=>{let a=a=>{let b=a.detail?.nodeId;if(!b)return;let c=K(b,g);c&&(i([...g.filter(a=>a.selected&&a.id!==b).map(a=>({type:"select",id:a.id,selected:!1})),{type:"select",id:b,selected:!0}]),x?.(c))};return document.addEventListener("selectNode",a),()=>document.removeEventListener("selectNode",a)},[g,i,x]);let ad=(0,e.useCallback)(a=>{if(!a.sourceHandle||!a.targetHandle)return void R.error("Invalid connection: Missing source or target handle",a);let b=Q.getState().connection.fromHandle?.type==="target";if(!(0,N.JL)(a,g,h))return;let d=(0,N.wn)(a,g);if(d.data?.edgeType==="standard"){let d=a=>a.data?.edgeType!=="mcp",e=a=>!!a.data?.bidirectional,f=h.find(b=>d(b)&&b.source===a.source&&b.target===a.target),i=h.find(b=>d(b)&&b.source===a.target&&b.target===a.source),k=a=>{R.info(`Merging reverse connection into bidirectional edge ${a.id}`),j([{type:"replace",id:a.id,item:{...a,data:{...a.data,bidirectional:!0},markerStart:{type:o.TG.ArrowClosed,width:20,height:20,color:c.palette.text.secondary}}}])};if(b){let a=f??i;return a?void(!e(a)&&(0,N.y2)(a,g,h)&&k(a)):void R.info("Connection drawn from a top handle is only allowed to convert an existing edge to bidirectional")}if(f&&e(f))return;if(i){!e(i)&&(0,N.y2)(i,g,h)&&k(i);return}}j([...(0,N.Cm)(d,h).map(a=>({type:"remove",id:a})),{type:"add",item:d}])},[g,h,j,Q,c.palette.text.secondary]),ae=(0,e.useCallback)(a=>(0,N.p9)(a,g,h),[g,h]);(0,e.useEffect)(()=>{let a=a=>{let{edgeId:b,waypoints:c}=a.detail,d=h.find(a=>a.id===b);if(!d)return;let{waypoint:e,...f}=d.data??{};j([{type:"replace",id:b,item:{...d,data:{...f,waypoints:c??void 0}}}])};return document.addEventListener(J.R,a),()=>document.removeEventListener(J.R,a)},[h,j]);let af=(0,e.useCallback)(async({nodes:a,edges:b})=>{let c=a.filter(a=>"start"!==a.type),d=new Set(c.map(a=>a.id)),e=new Set(a.map(a=>a.id)),f=b.filter(a=>!!(a.selected||d.has(a.source)||d.has(a.target))||!(e.has(a.source)||e.has(a.target))),g=c.filter(a=>"trigger"===a.type);return g.length>0&&await Promise.all(g.map(async a=>{let b=a.data?.properties?.executionId;if("string"==typeof b&&b)try{await u.P.update(b,{enabled:!1})}catch(a){console.warn("TriggerNode: failed to disarm PlannedExecution",b,a)}})),(0!==c.length||0!==f.length)&&{nodes:c,edges:f}},[]),ag=(0,e.useCallback)(a=>{_(a),q&&q(a)},[q]),ah=(0,e.useCallback)(()=>{if(A.nodeId&&v){let a=K(A.nodeId,g);a&&v(a)}else if(A.edgeId&&z){let a=h.find(a=>a.id===A.edgeId);a&&z(a)}},[A.nodeId,A.edgeId,g,h,v,z]),ai=(0,e.useCallback)(()=>{if(!A.nodeId||!y)return;let a=K(A.nodeId,g);(a?.type==="process"||a?.data?.type==="process")&&y(a)},[A.nodeId,g,y]),aj=(0,e.useCallback)(()=>{let a;if(!A.edgeId)return;let b=h.find(a=>a.id===A.edgeId);if(!b)return;if(b.data?.edgeType!=="standard")return void R.debug(`Toggle bidirectional ignored for non-standard edge ${b.id}`);let d=!!b.data?.bidirectional;if(!d&&!(0,N.y2)(b,g,h))return void R.info(`Edge ${b.id} cannot be made bidirectional (reverse direction is not a legal connection)`);let e={...b.data??{},bidirectional:!d};if(d){let{markerStart:c,...d}=b;a={...d,data:e}}else a={...b,data:e,markerStart:{type:o.TG.ArrowClosed,width:20,height:20,color:c.palette.text.secondary}};j([{type:"replace",id:b.id,item:a}])},[A.edgeId,h,g,j,c.palette.text.secondary]),ak=(0,e.useCallback)((a,b)=>{a.preventDefault(),v&&v(b)},[v]),al=(0,e.useCallback)((a,b)=>{let{fromNode:c,fromHandle:d,toHandle:e}=b;if(!c||!d?.id||!$)return void R.debug("onConnectEnd: No valid connection start data");R.debug(`onConnectEnd: Connection ended from node ${c.id}, handle ${d.id}`);let f="subflow"===c.type&&h.some(a=>{let b=a.data;return b?.edgeType!=="mcp"&&b?.edgeType!=="resource"&&(a.source===c.id||a.target===c.id&&!!b?.bidirectional)}),g=!!a.target?.closest?.(".react-flow__pane");if(!function(a){let{fromNodeType:b,fromHandleType:c,fromHandleId:d,landedOnHandle:e,droppedOnPane:f,subflowHasOutgoing:g}=a;return!e&&!!f&&!!d&&("target"!==c||!!(0,O.z5)(d))&&("subflow"!==b||"source"!==c||!g)}({fromNodeType:c.type,fromHandleType:d.type,fromHandleId:d.id,landedOnHandle:!!e,droppedOnPane:g,subflowHasOutgoing:f}))return;let i=a instanceof MouseEvent?a:a.changedTouches[0],j=$.screenToFlowPosition({x:i.clientX,y:i.clientY});R.debug(`onConnectEnd: Connection dropped on pane at position (${j.x}, ${j.y})`),ab({open:!0,position:j,screenPosition:{x:i.clientX,y:i.clientY},sourceNodeId:c.id,sourceNodeType:c.type,sourceHandleId:d.id})},[$,h]),am=(0,e.useCallback)((a,b)=>{if(R.debug(`handleNodeTypeSelection: Selected node type ${a} at position (${b.x}, ${b.y})`),"trigger"===a&&g.some(a=>"trigger"===a.type))return void ab({open:!1,position:null});let c=t.g.createNode(a,b),{sourceNodeId:d,sourceHandleId:e}=aa,f=d?K(d,g):void 0,k=null;if(f&&e&&(k={source:f.id,sourceHandle:e,target:c.id,targetHandle:(0,O.CW)(a,e)},!(0,N.JL)(k,[...g,c],h)))return void ab({open:!1,position:null});let l=w?w(a,b,c):c;if(!l)return void ab({open:!1,position:null});if(w||i(ac(l)),k){R.debug(`handleNodeTypeSelection: Creating connection from ${k.source} to ${k.target}`);let a=(0,N.wn)(k,[...g,l]);j([...(0,N.Cm)(a,h).map(a=>({type:"remove",id:a})),{type:"add",item:a}]),R.debug(`handleNodeTypeSelection: Edge created with id ${a.id}`)}ab({open:!1,position:null}),x?.(l)},[aa,g,h,ac,i,j,w,x]),an=(0,e.useCallback)(()=>{R.debug("handleCloseNodeSelectionModal: Closing node selection modal"),ab({open:!1,position:null})},[]),ao=(0,e.useCallback)(()=>{let a=new Set(B.nodes),b=g.filter(b=>a.has(b.id)&&"start"!==b.type);if(0===b.length)return!1;let c=new Set(b.map(a=>a.id)),d=h.filter(a=>c.has(a.source)&&c.has(a.target));return U({nodes:JSON.parse(JSON.stringify(b)),edges:JSON.parse(JSON.stringify(d))}),R.debug(`Copied ${b.length} node(s) and ${d.length} edge(s)`),!0},[B,g,h]),ap=(0,e.useCallback)(()=>{let a=T;if(!a)try{let b=localStorage.getItem(S);b&&(a=JSON.parse(b))}catch(a){R.warn("Could not read flow clipboard from localStorage",a)}if(!a||!a.nodes||0===a.nodes.length)return void R.debug("Paste requested but clipboard is empty");let b=new Map;a.nodes.forEach(a=>b.set(a.id,(0,s.A)()));let c=a.nodes.map(a=>({...a,id:b.get(a.id),position:{x:(a.position?.x??0)+40,y:(a.position?.y??0)+40},selected:!0,data:{...a.data}})),d=(a.edges||[]).filter(a=>b.has(a.source)&&b.has(a.target)).map(a=>({...a,id:(0,s.A)(),source:b.get(a.source),target:b.get(a.target),selected:!1}));i([...g.filter(a=>a.selected).map(a=>({type:"select",id:a.id,selected:!1})),...c.map(a=>({type:"add",item:a}))]),d.length>0&&j(d.map(a=>({type:"add",item:a}))),R.info(`Pasted ${c.length} node(s) and ${d.length} edge(s)`)},[g,i,j]),aq=(0,e.useCallback)(a=>{let b=a.ctrlKey||a.metaKey,c=a.key.toLowerCase();if(b&&"c"===c){ao()&&a.preventDefault();return}if(b&&"x"===c){ao()&&(a.preventDefault(),L({nodes:B.nodes.map(a=>({id:a})),edges:B.edges.map(a=>({id:a}))}));return}if(b&&"v"===c){a.preventDefault(),ap();return}},[ao,ap,L,B]),ar=(0,e.useCallback)(()=>{if(A.nodeId&&!B.nodes.includes(A.nodeId)){let a=g.find(a=>a.id===A.nodeId);a&&"start"!==a.type&&(U({nodes:JSON.parse(JSON.stringify([a])),edges:[]}),R.debug("Copied right-clicked node to clipboard"));return}ao()},[A.nodeId,B,g,ao]),as=(0,e.useMemo)(()=>{if(T)return!0;try{return!!localStorage.getItem(S)}catch{return!1}},[A.open]),at=(0,e.useMemo)(()=>{if(A.selection){let a=new Set(B.nodes);return g.some(b=>a.has(b.id)&&"start"!==b.type)}if(A.nodeId){let a=g.find(a=>a.id===A.nodeId);return!!a&&"start"!==a.type}return!1},[A.selection,A.nodeId,B,g]);return(0,d.jsxs)(Y,{style:f?{flex:"none",width:"100%",maxWidth:"100%",height:440,minHeight:440}:void 0,ref:a=>{b&&("function"==typeof b?b(a):b.current=a),r&&(r.current=a),Z.current=a},children:[(0,d.jsx)(n.Gc,{nodes:g,edges:h,nodeTypes:V,edgeTypes:W,defaultEdgeOptions:(0,e.useMemo)(()=>({type:"custom",animated:!1,style:{stroke:c.palette.text.secondary,strokeWidth:2},markerEnd:{type:o.TG.ArrowClosed,width:20,height:20,color:c.palette.text.secondary}}),[c.palette.text.secondary]),connectionLineType:o.Do.SmoothStep,connectionMode:o.WZ.Loose,isValidConnection:ae,onNodesChange:i,onEdgesChange:j,onConnect:ad,onBeforeDelete:af,deleteKeyCode:["Backspace","Delete"],onDrop:k,onDragOver:l,onInit:ag,onNodeContextMenu:E,onEdgeContextMenu:F,onPaneContextMenu:G,onSelectionContextMenu:I,onKeyDown:aq,onNodeDoubleClick:ak,onNodeClick:(a,b)=>x?.(b),onConnectEnd:al,tabIndex:0,fitView:!0,attributionPosition:"bottom-right",minZoom:.1,maxZoom:2,snapToGrid:!0,snapGrid:[15,15],connectOnClick:!1,children:(0,d.jsx)(P,{})}),(0,d.jsx)(H,{open:A.open,position:A.position,onClose:C,onDelete:D,onEditProperties:ah,onConvertToSubflow:y&&A.nodeId&&g.find(a=>a.id===A.nodeId)?.type==="process"?ai:void 0,onToggleBidirectional:aj,onCopy:ar,onPaste:ap,canPaste:as,canCopy:at,nodeId:A.nodeId,selection:A.selection,edgeId:A.edgeId}),(0,d.jsx)(X,{open:aa.open,position:aa.position,anchorPosition:aa.screenPosition,onClose:an,onSelectNodeType:am,sourceNodeType:aa.sourceNodeType,sourceHandleId:aa.sourceHandleId})]})});Z.displayName="Canvas";let $=Z},74855:(a,b,c)=>{c.d(b,{MG:()=>e,Ud:()=>f});var d=c(46973);d.TG.ArrowClosed;let e={type:"resourceEdge",animated:!1,style:{stroke:"#009688",strokeWidth:2},markerEnd:{type:d.TG.ArrowClosed,width:20,height:20,color:"#009688"}},f={type:"mcpEdge",animated:!1,style:{stroke:"#1976d2",strokeWidth:2},markerEnd:{type:d.TG.ArrowClosed,width:20,height:20,color:"#1976d2"},markerStart:{type:d.TG.ArrowClosed,width:20,height:20,color:"#1976d2"}}},90430:(a,b,c)=>{c.d(b,{Cm:()=>l,JL:()=>i,p9:()=>h,wn:()=>j,y2:()=>k});var d=c(74855),e=c(36627);function f(a,b,c){return b.filter(b=>!(0,e.BY)(b)&&(b.source===a?b.target!==c:!!(b.target===a&&b.data?.bidirectional)&&b.source!==c))}function g(a,b,c=[]){if(!a.source||!a.target||!a.sourceHandle||!a.targetHandle)return"Missing source, target, or handles";let d=b.find(b=>b.id===a.source),h=b.find(b=>b.id===a.target);if(!d||!h)return"Source or target node not found";let i=(0,e.vC)(d.type,a.sourceHandle,h.type,a.targetHandle);return i||("subflow"===d.type&&f(d.id,c,a.target).length>0?"Subflow nodes can only have one outgoing connection":null)}function h(a,b,c=[]){return null===g(a,b,c)}function i(a,b,c=[]){let d=g(a,b,c);return!d||(console.error(`Invalid connection: ${d}`,a),!1)}function j(a,b,c){let f=b.find(b=>b.id===a.source),g=b.find(b=>b.id===a.target),h=a.sourceHandle,i=a.targetHandle,j=f?.type==="mcp"||g?.type==="mcp"||(0,e.z5)(h)||(0,e.z5)(i),k=!j&&(f?.type==="resource"||g?.type==="resource"||(0,e.vM)(h)||(0,e.vM)(i)),l=`${a.source}:${h}->${a.target}:${i}`;return j?{id:l,...a,type:"mcpEdge",data:{edgeType:"mcp"},animated:!1,markerEnd:d.Ud.markerEnd,markerStart:d.Ud.markerStart,style:d.Ud.style}:k?{id:l,...a,type:"resourceEdge",data:{edgeType:"resource"},animated:!1,markerEnd:d.MG.markerEnd,style:d.MG.style}:{id:l,...a,type:"custom",data:{edgeType:"standard",...c?{condition:c}:{}},animated:!0}}function k(a,b,c=[]){let d=b.find(b=>b.id===a.source),g=b.find(b=>b.id===a.target);return!!d&&!!g&&("subflow"!==g.type||!(f(g.id,c,a.source).length>0))&&null===(0,e.vC)(g.type,null,d.type,null)}function l(a,b){let c=a=>a.data?.edgeType,d=a=>"mcp"===c(a),e=a=>"resource"===c(a);return b.filter(b=>b.id===a.id||(d(a)?d(b)&&(b.source===a.source&&b.target===a.target||b.source===a.target&&b.target===a.source):e(a)?e(b)&&b.source===a.source&&b.target===a.target:!d(b)&&!e(b)&&b.source===a.source&&b.target===a.target)).map(a=>a.id)}},97004:(a,b,c)=>{c.d(b,{R:()=>l,A:()=>r});var d=c(21124),e=c(38301),f=c(95791),g=c(46973),h=c(18168),i=c(60839);function j(a){return a===g.yX.Left||a===g.yX.Right?"h":"v"}var k=c(29237);let l="flowEdgeWaypoint",m={x:16,y:-16},n=(0,h.Ay)("button")(({theme:a})=>({background:a.palette.background.paper,border:`1px solid ${a.palette.divider}`,cursor:"pointer",borderRadius:"50%",fontSize:"10px",width:"20px",height:"20px",display:"flex",justifyContent:"center",alignItems:"center",color:a.palette.text.secondary,boxShadow:"dark"===a.palette.mode?"0 2px 4px rgba(0,0,0,0.3)":"0 2px 4px rgba(0,0,0,0.1)","&:hover":{background:a.palette.error.main,borderColor:a.palette.error.main,color:a.palette.error.contrastText}})),o=(0,h.Ay)(f.tE)({"&&.animated":{strokeDasharray:5,animation:"flowPathAnimation 500ms infinite linear"},"&&.animated-both":{strokeDasharray:5,animation:"flowPathAnimation 750ms infinite linear alternate"},"@keyframes flowPathAnimation":{"0%":{strokeDashoffset:10},"100%":{strokeDashoffset:0}}}),p="#009688",q="#4DB6AC",r=({variant:a,id:b,source:c,target:h,sourceHandleId:r,targetHandleId:s,sourceX:t,sourceY:u,targetX:v,targetY:w,sourcePosition:x,targetPosition:y,style:z={},markerEnd:A,markerStart:B,data:C,selected:D})=>{let E,F,G=(0,i.A)(),{deleteElements:H,screenToFlowPosition:I,getNode:J}=(0,f.VH)(),[K,L]=(0,e.useState)(!1),[M,N]=(0,e.useState)(null),O=(0,e.useRef)(null),P=(0,e.useRef)(!1),Q="standard"===a&&C?.condition?(0,k.P2)(C.condition):"",R=a=>!!a&&a.includes("process")&&a.includes("resource"),S="";if("resource"===a){let a=J(c)?.type,b=J(h)?.type;"resource"===a&&"process"===b?S="consume":"process"===a&&"resource"===b||R(r)?S="produce":R(s)&&(S="consume")}let T=C?.waypoints??(C?.waypoint?[C.waypoint]:[]),U=M??T,V="standard"===a&&!!C?.bidirectional,W="mcp"===a||"resource"===a,X=x||(W?g.yX.Left:g.yX.Bottom),Y=y||(W?g.yX.Right:g.yX.Top),Z=null;if(U.length>0)E=(Z=function(a,b,c,d,e,f=8){let g=[a,...e,c],h=[a],i=[],j=b,k=(a,b)=>{let c;c=h[h.length-1],.01>Math.abs(c.x-a.x)&&.01>Math.abs(c.y-a.y)||(h.push(a),i.push(b))};for(let a=1;a<g.length;a++){let b=h[h.length-1],c=g[a],e=a-1;if(a===g.length-1){if("v"===d)if("h"===j)k({x:c.x,y:b.y},e);else{let a=(b.y+c.y)/2;k({x:b.x,y:a},e),k({x:c.x,y:a},e)}else if("v"===j)k({x:b.x,y:c.y},e);else{let a=(b.x+c.x)/2;k({x:a,y:b.y},e),k({x:a,y:c.y},e)}k(c,e)}else k("v"===j?{x:b.x,y:c.y}:{x:c.x,y:b.y},e),k(c,e),j="v"===j?"h":"v"}!function(a,b){for(let c=1;c<a.length-1;c++){let d=a[c-1],e=a[c],f=a[c+1],g=.01>Math.abs(d.x-e.x)&&.01>Math.abs(f.x-e.x)&&(e.y-d.y)*(f.y-e.y)<0,h=.01>Math.abs(d.y-e.y)&&.01>Math.abs(f.y-e.y)&&(e.x-d.x)*(f.x-e.x)<0;if(g||h){if(g){let g=(a[c-2]?.x??e.x-1)<=e.x,h=g?e.x-12:e.x+12,i=g?e.x+12:e.x-12,j=b[c-1];a.splice(c-1,3,{x:h,y:d.y},{x:h,y:e.y},{x:i,y:e.y},{x:i,y:f.y}),b.splice(c-1,2,j,j,j)}else{let g=(a[c-2]?.y??e.y-1)<=e.y,h=g?e.y-12:e.y+12,i=g?e.y+12:e.y-12,j=b[c-1];a.splice(c-1,3,{x:d.x,y:h},{x:e.x,y:h},{x:e.x,y:i},{x:f.x,y:i}),b.splice(c-1,2,j,j,j)}c++}}}(h,i);let l=[];for(let a=0;a<h.length-1;a++)l.push({a:h[a],b:h[a+1],gap:i[a]});return{d:function(a,b){if(0===a.length)return"";let c=`M ${a[0].x},${a[0].y}`;for(let d=1;d<a.length-1;d++){let e=a[d-1],f=a[d],g=a[d+1],h=Math.hypot(f.x-e.x,f.y-e.y),i=Math.hypot(g.x-f.x,g.y-f.y),j=Math.min(b,h/2,i/2);if(j<.5){c+=` L ${f.x},${f.y}`;continue}let k={x:f.x-(f.x-e.x)/h*j,y:f.y-(f.y-e.y)/h*j},l={x:f.x+(g.x-f.x)/i*j,y:f.y+(g.y-f.y)/i*j};c+=` L ${k.x},${k.y} Q ${f.x},${f.y} ${l.x},${l.y}`}let d=a[a.length-1];return c+` L ${d.x},${d.y}`}(h,f),points:h,segments:l,midpoint:function(a,b){let c=0;for(let b=0;b<a.length-1;b++)c+=Math.hypot(a[b+1].x-a[b].x,a[b+1].y-a[b].y);if(0===c)return a[0];let d=.5*c;for(let b=0;b<a.length-1;b++){let c=Math.hypot(a[b+1].x-a[b].x,a[b+1].y-a[b].y);if(d<=c){let e=0===c?0:d/c;return{x:a[b].x+(a[b+1].x-a[b].x)*e,y:a[b].y+(a[b+1].y-a[b].y)*e}}d-=c}return a[a.length-1]}(h,.5)}}({x:t,y:u},j(X),{x:v,y:w},j(Y),U,16)).d,F=Z.midpoint;else{let[a,b,c]=(0,g.oN)({sourceX:t,sourceY:u,sourcePosition:X,targetX:v,targetY:w,targetPosition:Y,borderRadius:16});E=a,F={x:b,y:c}}let $=W?"":V?"animated-both":C?.animated!==!1?"animated":"",_={...z,strokeWidth:D?3:2,stroke:"mcp"===a?D?G.palette.info.light:G.palette.info.main:"resource"===a?D?q:p:D?G.palette.primary.main:G.palette.text.secondary,..."resource"===a?{strokeDasharray:"6 4"}:{},...$?{animationDuration:`${Math.round((V?750:500)*(a=>{let b=0;for(let c=0;c<a.length;c++)b=31*b+a.charCodeAt(c)|0;return .9+Math.abs(b)%1e3/1e3*.2})(b))}ms`}:{}},aa=a=>{document.dispatchEvent(new CustomEvent(l,{detail:{edgeId:b,waypoints:a&&a.length>0?a:null}}))},ab=a=>{if(0!==a.button)return;let b=I({x:a.clientX,y:a.clientY}),c=Z?function(a,b){let c=0,d=1/0;for(let e of b){let b=function(a,b,c){let d=c.x-b.x,e=c.y-b.y,f=d*d+e*e,g=0===f?0:Math.max(0,Math.min(1,((a.x-b.x)*d+(a.y-b.y)*e)/f));return Math.hypot(a.x-(b.x+d*g),a.y-(b.y+e*g))}(a,e.a,e.b);b<d&&(d=b,c=e.gap)}return c}(b,Z.segments):0,d=[...U];d.splice(c,0,b),O.current={index:c,pointerId:a.pointerId,startClient:{x:a.clientX,y:a.clientY},base:d,active:!1,fromPath:!0},a.target.setPointerCapture(a.pointerId)},ac=a=>{let b=O.current;if(!b||a.pointerId!==b.pointerId)return;if(!b.active){if(4>Math.hypot(a.clientX-b.startClient.x,a.clientY-b.startClient.y))return;b.active=!0}let c=[...b.base];c[b.index]=I({x:a.clientX,y:a.clientY}),N(c)},ad=a=>{let b=O.current;if(!b||a.pointerId!==b.pointerId||(O.current=null,a.target.releasePointerCapture(a.pointerId),P.current=b.active,!b.active))return;let c=[...b.base];c[b.index]=I({x:a.clientX,y:a.clientY}),aa(c),N(null)},ae=null!==M,af=D||K||ae;return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(o,{path:E,markerEnd:A,markerStart:B,style:_,id:b,className:$}),(0,d.jsx)("path",{d:E,fill:"none",stroke:"transparent",strokeWidth:20,style:{cursor:ae?"grabbing":"grab"},onMouseEnter:()=>L(!0),onMouseLeave:()=>L(!1),onPointerDown:ab,onPointerMove:ac,onPointerUp:ad}),(0,d.jsxs)(f.rV,{children:[Q&&(0,d.jsx)("div",{style:{position:"absolute",transform:`translate(-50%, -50%) translate(${F.x}px,${F.y-18}px)`,pointerEvents:"none",background:G.palette.info.main,color:G.palette.info.contrastText,borderRadius:4,padding:"1px 6px",fontSize:10,fontWeight:600,whiteSpace:"nowrap",boxShadow:G.shadows[1],zIndex:1002},className:"nodrag nopan",title:`Routing condition: ${Q}`,children:Q}),S&&(0,d.jsx)("div",{style:{position:"absolute",transform:`translate(-50%, -50%) translate(${F.x}px,${F.y-18}px)`,pointerEvents:"none",background:D?q:p,color:"#ffffff",borderRadius:4,padding:"1px 6px",fontSize:10,fontWeight:600,whiteSpace:"nowrap",boxShadow:G.shadows[1],zIndex:1002},className:"nodrag nopan",title:"consume"===S?"This step consumes (reads) the resource":"This step produces (writes) the resource",children:S}),af&&U.map((a,b)=>(0,d.jsx)("div",{style:{position:"absolute",transform:`translate(-50%, -50%) translate(${a.x}px,${a.y}px)`,width:12,height:12,borderRadius:"50%",background:G.palette.primary.main,border:`2px solid ${G.palette.background.paper}`,boxShadow:G.shadows[1],cursor:"move",pointerEvents:"all",touchAction:"none",zIndex:1001},className:"nodrag nopan",title:"Drag to move; double-click to remove this bend",onMouseEnter:()=>L(!0),onMouseLeave:()=>L(!1),onPointerDown:a=>{0===a.button&&(a.stopPropagation(),O.current={index:b,pointerId:a.pointerId,startClient:{x:a.clientX,y:a.clientY},base:[...U],active:!1,fromPath:!1},a.target.setPointerCapture(a.pointerId))},onPointerMove:ac,onPointerUp:ad,onDoubleClick:a=>{a.stopPropagation(),(a=>{let b=U.filter((b,c)=>c!==a);N(null),aa(b)})(b)}},b)),(0,d.jsx)("div",{style:{position:"absolute",transform:`translate(-50%, -50%) translate(${F.x+m.x}px,${F.y+m.y}px)`,pointerEvents:af&&!ae?"all":"none",opacity:af&&!ae?1:0,transition:"opacity 120ms ease",zIndex:1e3},className:"nodrag nopan",onMouseEnter:()=>L(!0),onMouseLeave:()=>L(!1),children:(0,d.jsx)(n,{title:"Delete connection (drag to re-route)",style:{touchAction:"none"},onPointerDown:ab,onPointerMove:ac,onPointerUp:ad,onClick:a=>{if(a.stopPropagation(),P.current){P.current=!1;return}H({edges:[{id:b}]})},children:"\xd7"})})]})]})}},98502:(a,b,c)=>{c.d(b,{E9:()=>f,RN:()=>e,n9:()=>d});let d="handoff_to_";function e(a,b){let c=(a&&a.trim()||b&&b.trim()||"node").toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/_+/g,"_").replace(/^_+|_+$/g,"");return c.length>48&&(c=c.slice(0,48).replace(/_+$/g,"")),c||(c=b&&b.trim().toLowerCase().replace(/[^a-z0-9]+/g,"_")||"node"),c||"node"}function f(a){let b=new Set,c=new Map;for(let f of a){if(c.has(f.id))continue;let a=e(f.label,f.type),g=`${d}${a}`;if(b.has(g)){let c=2;for(;b.has(`${d}${a}_${c}`);)c++;g=`${d}${a}_${c}`}b.add(g),c.set(f.id,g)}return c}}};