flujo-ai 3.23.0 → 3.26.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 (397) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +205 -186
  3. package/.next/app-path-routes-manifest.json +2 -2
  4. package/.next/build-manifest.json +7 -7
  5. package/.next/react-loadable-manifest.json +25 -20
  6. package/.next/routes-manifest.json +19 -1
  7. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  8. package/.next/server/app/_not-found.html +1 -1
  9. package/.next/server/app/_not-found.rsc +3 -3
  10. package/.next/server/app/api/approvals/[id]/route.js +1 -1
  11. package/.next/server/app/api/approvals/[id]/route.js.nft.json +1 -1
  12. package/.next/server/app/api/approvals/[id]/route_client-reference-manifest.js +1 -1
  13. package/.next/server/app/api/approvals/route.js +1 -1
  14. package/.next/server/app/api/approvals/route.js.nft.json +1 -1
  15. package/.next/server/app/api/approvals/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/backup/route.js +1 -1
  17. package/.next/server/app/api/backup/route.js.nft.json +1 -1
  18. package/.next/server/app/api/backup/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/browse/route.js +1 -1
  20. package/.next/server/app/api/browse/route_client-reference-manifest.js +1 -1
  21. package/.next/server/app/api/bugs/enhance/route.js +2 -2
  22. package/.next/server/app/api/bugs/enhance/route.js.nft.json +1 -1
  23. package/.next/server/app/api/bugs/enhance/route_client-reference-manifest.js +1 -1
  24. package/.next/server/app/api/cwd/route.js +1 -1
  25. package/.next/server/app/api/cwd/route_client-reference-manifest.js +1 -1
  26. package/.next/server/app/api/encryption/secure/route.js +1 -1
  27. package/.next/server/app/api/encryption/secure/route.js.nft.json +1 -1
  28. package/.next/server/app/api/encryption/secure/route_client-reference-manifest.js +1 -1
  29. package/.next/server/app/api/env/route.js +1 -1
  30. package/.next/server/app/api/env/route_client-reference-manifest.js +1 -1
  31. package/.next/server/app/api/flow/[id]/route.js.nft.json +1 -1
  32. package/.next/server/app/api/flow/[id]/route_client-reference-manifest.js +1 -1
  33. package/.next/server/app/api/flow/compile/route.js +1 -1
  34. package/.next/server/app/api/flow/compile/route.js.nft.json +1 -1
  35. package/.next/server/app/api/flow/compile/route_client-reference-manifest.js +1 -1
  36. package/.next/server/app/api/flow/generate/route.js +1 -1
  37. package/.next/server/app/api/flow/generate/route.js.nft.json +1 -1
  38. package/.next/server/app/api/flow/generate/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/flow/improve/route.js +1 -1
  40. package/.next/server/app/api/flow/improve/route.js.nft.json +1 -1
  41. package/.next/server/app/api/flow/improve/route_client-reference-manifest.js +1 -1
  42. package/.next/server/app/api/flow/prompt-renderer/route.js +1 -1
  43. package/.next/server/app/api/flow/prompt-renderer/route.js.nft.json +1 -1
  44. package/.next/server/app/api/flow/prompt-renderer/route_client-reference-manifest.js +1 -1
  45. package/.next/server/app/api/flow/quick-chat/route.js +1 -1
  46. package/.next/server/app/api/flow/quick-chat/route.js.nft.json +1 -1
  47. package/.next/server/app/api/flow/quick-chat/route_client-reference-manifest.js +1 -1
  48. package/.next/server/app/api/flow/repair/route.js +1 -1
  49. package/.next/server/app/api/flow/repair/route.js.nft.json +1 -1
  50. package/.next/server/app/api/flow/repair/route_client-reference-manifest.js +1 -1
  51. package/.next/server/app/api/flow/route.js.nft.json +1 -1
  52. package/.next/server/app/api/flow/route_client-reference-manifest.js +1 -1
  53. package/.next/server/app/api/git/route.js +1 -1
  54. package/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  55. package/.next/server/app/api/init/route.js +1 -1
  56. package/.next/server/app/api/init/route.js.nft.json +1 -1
  57. package/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  58. package/.next/server/app/api/local-models/capability/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/local-models/pull/route_client-reference-manifest.js +1 -1
  60. package/.next/server/app/api/local-models/suggest/route_client-reference-manifest.js +1 -1
  61. package/.next/server/app/api/mcp/cancel/route.js +1 -1
  62. package/.next/server/app/api/mcp/cancel/route.js.nft.json +1 -1
  63. package/.next/server/app/api/mcp/cancel/route_client-reference-manifest.js +1 -1
  64. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js +1 -1
  65. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js.nft.json +1 -1
  66. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route_client-reference-manifest.js +1 -1
  67. package/.next/server/app/api/mcp/servers/[name]/prompts/route.js +1 -1
  68. package/.next/server/app/api/mcp/servers/[name]/prompts/route.js.nft.json +1 -1
  69. package/.next/server/app/api/mcp/servers/[name]/prompts/route_client-reference-manifest.js +1 -1
  70. package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js +1 -1
  71. package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js.nft.json +1 -1
  72. package/.next/server/app/api/mcp/servers/[name]/resources/read/route_client-reference-manifest.js +1 -1
  73. package/.next/server/app/api/mcp/servers/[name]/resources/route.js +1 -1
  74. package/.next/server/app/api/mcp/servers/[name]/resources/route.js.nft.json +1 -1
  75. package/.next/server/app/api/mcp/servers/[name]/resources/route_client-reference-manifest.js +1 -1
  76. package/.next/server/app/api/mcp/servers/[name]/route.js +1 -1
  77. package/.next/server/app/api/mcp/servers/[name]/route.js.nft.json +1 -1
  78. package/.next/server/app/api/mcp/servers/[name]/route_client-reference-manifest.js +1 -1
  79. package/.next/server/app/api/mcp/servers/[name]/status/route.js +1 -1
  80. package/.next/server/app/api/mcp/servers/[name]/status/route.js.nft.json +1 -1
  81. package/.next/server/app/api/mcp/servers/[name]/status/route_client-reference-manifest.js +1 -1
  82. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js +1 -1
  83. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js.nft.json +1 -1
  84. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route_client-reference-manifest.js +1 -1
  85. package/.next/server/app/api/mcp/servers/[name]/tools/route.js +1 -1
  86. package/.next/server/app/api/mcp/servers/[name]/tools/route.js.nft.json +1 -1
  87. package/.next/server/app/api/mcp/servers/[name]/tools/route_client-reference-manifest.js +1 -1
  88. package/.next/server/app/api/mcp/servers/route.js +1 -1
  89. package/.next/server/app/api/mcp/servers/route.js.nft.json +1 -1
  90. package/.next/server/app/api/mcp/servers/route_client-reference-manifest.js +1 -1
  91. package/.next/server/app/api/mcp/test-connection/route.js +1 -1
  92. package/.next/server/app/api/mcp/test-connection/route.js.nft.json +1 -1
  93. package/.next/server/app/api/mcp/test-connection/route_client-reference-manifest.js +1 -1
  94. package/.next/server/app/api/mcp/test-connection/stream/route.js +1 -1
  95. package/.next/server/app/api/mcp/test-connection/stream/route.js.nft.json +1 -1
  96. package/.next/server/app/api/mcp/test-connection/stream/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/mcp-registry/route.js +1 -1
  98. package/.next/server/app/api/mcp-registry/route.js.nft.json +1 -1
  99. package/.next/server/app/api/mcp-registry/route_client-reference-manifest.js +1 -1
  100. package/.next/server/app/api/mcp-registry/spotlight/route_client-reference-manifest.js +1 -1
  101. package/.next/server/app/api/model/[id]/route.js +1 -1
  102. package/.next/server/app/api/model/[id]/route.js.nft.json +1 -1
  103. package/.next/server/app/api/model/[id]/route_client-reference-manifest.js +1 -1
  104. package/.next/server/app/api/model/provider/route.js +1 -1
  105. package/.next/server/app/api/model/provider/route.js.nft.json +1 -1
  106. package/.next/server/app/api/model/provider/route_client-reference-manifest.js +1 -1
  107. package/.next/server/app/api/model/route.js +1 -1
  108. package/.next/server/app/api/model/route.js.nft.json +1 -1
  109. package/.next/server/app/api/model/route_client-reference-manifest.js +1 -1
  110. package/.next/server/app/api/model/test/route.js +1 -1
  111. package/.next/server/app/api/model/test/route.js.nft.json +1 -1
  112. package/.next/server/app/api/model/test/route_client-reference-manifest.js +1 -1
  113. package/.next/server/app/api/oauth/callback/route_client-reference-manifest.js +1 -1
  114. package/.next/server/app/api/oauth/initiate/route_client-reference-manifest.js +1 -1
  115. package/.next/server/app/api/oauth/reset/route.js +1 -1
  116. package/.next/server/app/api/oauth/reset/route.js.nft.json +1 -1
  117. package/.next/server/app/api/oauth/reset/route_client-reference-manifest.js +1 -1
  118. package/.next/server/app/api/planned-executions/[id]/route.js.nft.json +1 -1
  119. package/.next/server/app/api/planned-executions/[id]/route_client-reference-manifest.js +1 -1
  120. package/.next/server/app/api/planned-executions/[id]/run/route.js.nft.json +1 -1
  121. package/.next/server/app/api/planned-executions/[id]/run/route_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/planned-executions/[id]/runs/route.js.nft.json +1 -1
  123. package/.next/server/app/api/planned-executions/[id]/runs/route_client-reference-manifest.js +1 -1
  124. package/.next/server/app/api/planned-executions/preview-schedule/route_client-reference-manifest.js +1 -1
  125. package/.next/server/app/api/planned-executions/reconcile/route.js +1 -1
  126. package/.next/server/app/api/planned-executions/reconcile/route.js.nft.json +1 -1
  127. package/.next/server/app/api/planned-executions/reconcile/route_client-reference-manifest.js +1 -1
  128. package/.next/server/app/api/planned-executions/route.js +1 -1
  129. package/.next/server/app/api/planned-executions/route.js.nft.json +1 -1
  130. package/.next/server/app/api/planned-executions/route_client-reference-manifest.js +1 -1
  131. package/.next/server/app/api/restore/route.js +1 -1
  132. package/.next/server/app/api/restore/route.js.nft.json +1 -1
  133. package/.next/server/app/api/restore/route_client-reference-manifest.js +1 -1
  134. package/.next/server/app/api/runs/active/route.js +1 -1
  135. package/.next/server/app/api/runs/active/route.js.nft.json +1 -1
  136. package/.next/server/app/api/runs/active/route_client-reference-manifest.js +1 -1
  137. package/.next/server/app/api/storage/route_client-reference-manifest.js +1 -1
  138. package/.next/server/app/api/update/route.js +1 -1
  139. package/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  140. package/.next/server/app/api/waves/route.js +1 -1
  141. package/.next/server/app/api/waves/route.js.nft.json +1 -1
  142. package/.next/server/app/api/waves/route_client-reference-manifest.js +1 -1
  143. package/.next/server/app/api/webhooks/[id]/route.js +1 -1
  144. package/.next/server/app/api/webhooks/[id]/route.js.nft.json +1 -1
  145. package/.next/server/app/api/webhooks/[id]/route_client-reference-manifest.js +1 -1
  146. package/.next/server/app/chat/page.js +10 -10
  147. package/.next/server/app/chat/page.js.nft.json +1 -1
  148. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  149. package/.next/server/app/chat.html +1 -1
  150. package/.next/server/app/chat.rsc +4 -4
  151. package/.next/server/app/docs/page.js +11 -8
  152. package/.next/server/app/docs/page.js.nft.json +1 -1
  153. package/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  154. package/.next/server/app/docs.html +1 -1
  155. package/.next/server/app/docs.rsc +4 -4
  156. package/.next/server/app/executions/page.js +3 -3
  157. package/.next/server/app/executions/page.js.nft.json +1 -1
  158. package/.next/server/app/executions/page_client-reference-manifest.js +1 -1
  159. package/.next/server/app/executions.html +1 -1
  160. package/.next/server/app/executions.rsc +4 -4
  161. package/.next/server/app/flows/page.js +3 -3
  162. package/.next/server/app/flows/page.js.nft.json +1 -1
  163. package/.next/server/app/flows/page_client-reference-manifest.js +1 -1
  164. package/.next/server/app/flows.html +1 -1
  165. package/.next/server/app/flows.rsc +4 -4
  166. package/.next/server/app/index.html +1 -1
  167. package/.next/server/app/index.rsc +4 -4
  168. package/.next/server/app/mcp/page.js +5 -5
  169. package/.next/server/app/mcp/page.js.nft.json +1 -1
  170. package/.next/server/app/mcp/page_client-reference-manifest.js +1 -1
  171. package/.next/server/app/mcp-flows/route.js +1 -1
  172. package/.next/server/app/mcp-flows/route.js.nft.json +1 -1
  173. package/.next/server/app/mcp-flows/route_client-reference-manifest.js +1 -1
  174. package/.next/server/app/mcp-proxy/[server]/route.js +1 -1
  175. package/.next/server/app/mcp-proxy/[server]/route.js.nft.json +1 -1
  176. package/.next/server/app/mcp-proxy/[server]/route_client-reference-manifest.js +1 -1
  177. package/.next/server/app/mcp.html +1 -1
  178. package/.next/server/app/mcp.rsc +4 -4
  179. package/.next/server/app/models/page.js +2 -2
  180. package/.next/server/app/models/page.js.nft.json +1 -1
  181. package/.next/server/app/models/page_client-reference-manifest.js +1 -1
  182. package/.next/server/app/page.js +2 -2
  183. package/.next/server/app/page_client-reference-manifest.js +1 -1
  184. package/.next/server/app/settings/page.js +2 -57
  185. package/.next/server/app/settings/page.js.nft.json +1 -1
  186. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  187. package/.next/server/app/settings.html +1 -1
  188. package/.next/server/app/settings.rsc +4 -4
  189. package/.next/server/app/v1/chat/completions/route.js +1 -1
  190. package/.next/server/app/v1/chat/completions/route.js.nft.json +1 -1
  191. package/.next/server/app/v1/chat/completions/route_client-reference-manifest.js +1 -1
  192. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js +2 -2
  193. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js.nft.json +1 -1
  194. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route_client-reference-manifest.js +1 -1
  195. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js +2 -2
  196. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js.nft.json +1 -1
  197. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route_client-reference-manifest.js +1 -1
  198. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js +1 -1
  199. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js.nft.json +1 -1
  200. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route_client-reference-manifest.js +1 -1
  201. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js +1 -1
  202. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js.nft.json +1 -1
  203. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route_client-reference-manifest.js +1 -1
  204. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js +2 -2
  205. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js.nft.json +1 -1
  206. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route_client-reference-manifest.js +1 -1
  207. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js +1 -1
  208. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js.nft.json +1 -1
  209. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route_client-reference-manifest.js +1 -1
  210. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route_client-reference-manifest.js +1 -1
  211. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js +1 -1
  212. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js.nft.json +1 -1
  213. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route_client-reference-manifest.js +1 -1
  214. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js +2 -2
  215. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js.nft.json +1 -1
  216. package/.next/server/app/v1/chat/conversations/[conversationId]/route_client-reference-manifest.js +1 -1
  217. package/.next/server/app/v1/chat/conversations/route.js +2 -2
  218. package/.next/server/app/v1/chat/conversations/route.js.nft.json +1 -1
  219. package/.next/server/app/v1/chat/conversations/route_client-reference-manifest.js +1 -1
  220. package/.next/server/app/v1/models/route.js +1 -1
  221. package/.next/server/app/v1/models/route.js.nft.json +1 -1
  222. package/.next/server/app/v1/models/route_client-reference-manifest.js +1 -1
  223. package/.next/server/app/waves/page.js +3 -3
  224. package/.next/server/app/waves/page.js.nft.json +1 -1
  225. package/.next/server/app/waves/page_client-reference-manifest.js +1 -1
  226. package/.next/server/app/waves.html +1 -1
  227. package/.next/server/app/waves.rsc +4 -4
  228. package/.next/server/app-paths-manifest.json +2 -2
  229. package/.next/server/chunks/1083.js +1 -1
  230. package/.next/server/chunks/1114.js +1 -0
  231. package/.next/server/chunks/1197.js +2 -2
  232. package/.next/server/chunks/1226.js +1 -1
  233. package/.next/server/chunks/166.js +5 -0
  234. package/.next/server/chunks/2373.js +1 -0
  235. package/.next/server/chunks/2859.js +1 -3
  236. package/.next/server/chunks/289.js +1 -1
  237. package/.next/server/chunks/3030.js +1 -1
  238. package/.next/server/chunks/3298.js +2 -0
  239. package/.next/server/chunks/3312.js +1 -0
  240. package/.next/server/chunks/3774.js +1 -1
  241. package/.next/server/chunks/3823.js +9 -8
  242. package/.next/server/chunks/3855.js +1 -0
  243. package/.next/server/chunks/3924.js +52 -0
  244. package/.next/server/chunks/4545.js +21 -0
  245. package/.next/server/chunks/4561.js +9 -8
  246. package/.next/server/chunks/4578.js +1 -0
  247. package/.next/server/chunks/4671.js +1 -1
  248. package/.next/server/chunks/4677.js +37 -0
  249. package/.next/server/chunks/4771.js +2 -2
  250. package/.next/server/chunks/4793.js +2 -0
  251. package/.next/server/chunks/4836.js +1 -0
  252. package/.next/server/chunks/5311.js +1 -1
  253. package/.next/server/chunks/5463.js +1 -0
  254. package/.next/server/chunks/5544.js +5 -0
  255. package/.next/server/chunks/5708.js +11 -8
  256. package/.next/server/chunks/584.js +1 -0
  257. package/.next/server/chunks/62.js +1 -1
  258. package/.next/server/chunks/6240.js +1 -0
  259. package/.next/server/chunks/6306.js +1 -0
  260. package/.next/server/chunks/{3928.js → 6745.js} +1 -1
  261. package/.next/server/chunks/6908.js +2 -2
  262. package/.next/server/chunks/701.js +1 -1
  263. package/.next/server/chunks/7214.js +6 -0
  264. package/.next/server/chunks/7362.js +11 -7
  265. package/.next/server/chunks/7463.js +6 -0
  266. package/.next/server/chunks/7506.js +1 -1
  267. package/.next/server/chunks/7579.js +82 -0
  268. package/.next/server/chunks/7821.js +1 -1
  269. package/.next/server/chunks/8216.js +1 -0
  270. package/.next/server/chunks/8387.js +1 -0
  271. package/.next/server/chunks/856.js +5 -0
  272. package/.next/server/chunks/8652.js +1 -1
  273. package/.next/server/chunks/8739.js +2 -2
  274. package/.next/server/chunks/9165.js +1 -0
  275. package/.next/server/chunks/94.js +1 -0
  276. package/.next/server/chunks/9427.js +1 -0
  277. package/.next/server/edge-instrumentation.js +2 -0
  278. package/.next/server/edge-instrumentation.js.map +1 -0
  279. package/.next/server/edge-runtime-webpack.js +2 -0
  280. package/.next/server/edge-runtime-webpack.js.map +1 -0
  281. package/.next/server/instrumentation.js.nft.json +1 -1
  282. package/.next/server/middleware-build-manifest.js +1 -1
  283. package/.next/server/middleware-manifest.json +33 -2
  284. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  285. package/.next/server/pages/404.html +1 -1
  286. package/.next/server/pages/500.html +1 -1
  287. package/.next/server/server-reference-manifest.js +1 -1
  288. package/.next/server/server-reference-manifest.json +1 -1
  289. package/.next/server/src/middleware.js +14 -0
  290. package/.next/server/src/middleware.js.map +1 -0
  291. package/.next/static/chunks/1675-773454288de4309d.js +1 -0
  292. package/.next/static/chunks/1731-6e45fb529f9044a3.js +1 -0
  293. package/.next/static/chunks/1871-14c3e63ca865d85e.js +1 -0
  294. package/.next/static/chunks/2003-7710c23acaef11c9.js +1 -0
  295. package/.next/static/chunks/2318-76fcb6c769b1a569.js +1 -0
  296. package/.next/static/chunks/2566-6e2b9d9349814789.js +1 -0
  297. package/.next/static/chunks/2734-59fbe2f62a59df86.js +1 -0
  298. package/.next/static/chunks/3089.6b4e21e1faa304e2.js +1 -0
  299. package/.next/static/chunks/3109-11bdec9bdfd996c3.js +1 -0
  300. package/.next/static/chunks/3217.f728df99ab5da33c.js +1 -0
  301. package/.next/static/chunks/333-5f3c5be57c80c48c.js +1 -0
  302. package/.next/static/chunks/3333-b7b3e5758a568013.js +1 -0
  303. package/.next/static/chunks/3556-3b6f7c99b015b752.js +1 -0
  304. package/.next/static/chunks/{6730-c330b55cd0fe4f47.js → 4003-3b3768446ae333df.js} +1 -1
  305. package/.next/static/chunks/4523-a540747aa2ed34e8.js +1 -0
  306. package/.next/static/chunks/4635-0fe310d3be64e71e.js +1 -0
  307. package/.next/static/chunks/4690-ec7d397cfacedac3.js +1 -0
  308. package/.next/static/chunks/4775-cb9c0be621363a08.js +8 -0
  309. package/.next/static/chunks/5336-81da1080de29ebfc.js +1 -0
  310. package/.next/static/chunks/5512.d01d565f73109a1a.js +1 -0
  311. package/.next/static/chunks/6691-117567b2b40cd9f4.js +1 -0
  312. package/.next/static/chunks/7274-1184563607f2b5f5.js +1 -0
  313. package/.next/static/chunks/8166-e75acdc559b34fcd.js +1 -0
  314. package/.next/static/chunks/8345.fbc0af16acce7256.js +1 -0
  315. package/.next/static/chunks/8405.e728bc83a7c9fed6.js +1 -0
  316. package/.next/static/chunks/8470-72cf748472d4d501.js +1 -0
  317. package/.next/static/chunks/8607-5787e42775fc3acb.js +1 -0
  318. package/.next/static/chunks/8610-660d5088bc1dd7a7.js +1 -0
  319. package/.next/static/chunks/8834-faf121e257b517d5.js +1 -0
  320. package/.next/static/chunks/8989-401559d9f3bc80a0.js +1 -0
  321. package/.next/static/chunks/{9164-d9f1abba780231e0.js → 9164-829ab5b085ec06d6.js} +1 -1
  322. package/.next/static/chunks/9240-d0a51f4d504f34b1.js +1 -0
  323. package/.next/static/chunks/9562-b7922ceb400ec536.js +1 -0
  324. package/.next/static/chunks/9704-6b7415964d7c042a.js +1 -0
  325. package/.next/static/chunks/app/chat/page-04ad1fad78048afb.js +1 -0
  326. package/.next/static/chunks/app/docs/page-5475c616764dbb18.js +1 -0
  327. package/.next/static/chunks/app/executions/page-c18708ed96d228ec.js +1 -0
  328. package/.next/static/chunks/app/flows/page-f7e44aa545bcc56e.js +1 -0
  329. package/.next/static/chunks/app/layout-e6fbae80e0f456a6.js +1 -0
  330. package/.next/static/chunks/app/mcp/page-3638fbee04a3a6ea.js +1 -0
  331. package/.next/static/chunks/app/models/error-5732fbb053e182c5.js +1 -0
  332. package/.next/static/chunks/app/models/page-e690a986047b1e62.js +1 -0
  333. package/.next/static/chunks/app/{page-a859e4dbd180df98.js → page-0a95c40a65dbd2eb.js} +1 -1
  334. package/.next/static/chunks/app/settings/page-3ef9b95187e18a5a.js +1 -0
  335. package/.next/static/chunks/app/waves/page-c9a307e2236423a4.js +1 -0
  336. package/.next/static/chunks/{main-be8e823624954fab.js → main-9bda5041078d2b6a.js} +1 -1
  337. package/.next/static/chunks/webpack-a6844e1074885c2f.js +1 -0
  338. package/.next/static/css/40f9bef305b11bf5.css +1 -0
  339. package/.next/trace +10 -8
  340. package/README.md +31 -1
  341. package/next.config.mjs +139 -119
  342. package/package.json +1 -1
  343. package/.next/server/chunks/1119.js +0 -1
  344. package/.next/server/chunks/1439.js +0 -1
  345. package/.next/server/chunks/1556.js +0 -52
  346. package/.next/server/chunks/1910.js +0 -37
  347. package/.next/server/chunks/1999.js +0 -1
  348. package/.next/server/chunks/2246.js +0 -1
  349. package/.next/server/chunks/264.js +0 -17
  350. package/.next/server/chunks/2823.js +0 -6
  351. package/.next/server/chunks/3286.js +0 -6
  352. package/.next/server/chunks/4637.js +0 -81
  353. package/.next/server/chunks/6644.js +0 -1
  354. package/.next/server/chunks/7427.js +0 -1
  355. package/.next/server/chunks/7769.js +0 -6
  356. package/.next/server/chunks/8357.js +0 -1
  357. package/.next/server/chunks/8518.js +0 -2
  358. package/.next/static/chunks/1620-0d8ecd877f123f7b.js +0 -1
  359. package/.next/static/chunks/1871-dd8c10ed9d37100b.js +0 -1
  360. package/.next/static/chunks/1983-242862b3dc022a26.js +0 -1
  361. package/.next/static/chunks/2003-460f30484998c05d.js +0 -1
  362. package/.next/static/chunks/2619-04bc32f026a0d946.js +0 -1
  363. package/.next/static/chunks/3217.058098140ec3f563.js +0 -1
  364. package/.next/static/chunks/3736-5e2b3f6cda1bb923.js +0 -1
  365. package/.next/static/chunks/4207-41abb9622eb4b4f8.js +0 -1
  366. package/.next/static/chunks/4812-4a9aceb49632a973.js +0 -1
  367. package/.next/static/chunks/5501-f5b093c8dfd74196.js +0 -1
  368. package/.next/static/chunks/5545-2ab6e5d749e103cd.js +0 -1
  369. package/.next/static/chunks/6016.8201fa15ab6aa90e.js +0 -1
  370. package/.next/static/chunks/6288-a285bbbd701e0dbf.js +0 -1
  371. package/.next/static/chunks/6731-c230e88cf0032609.js +0 -1
  372. package/.next/static/chunks/6920-a83ad5c0d5a54cf3.js +0 -1
  373. package/.next/static/chunks/7430-6e78aaeac66988a9.js +0 -1
  374. package/.next/static/chunks/7583.7af90b94e3c263f2.js +0 -1
  375. package/.next/static/chunks/7687-7edf1a6e1f063b08.js +0 -1
  376. package/.next/static/chunks/8083.16fda2c7f6d10d0c.js +0 -1
  377. package/.next/static/chunks/8480-229fd353b68b570f.js +0 -1
  378. package/.next/static/chunks/8548-8e4a95334064e8b2.js +0 -1
  379. package/.next/static/chunks/8834-bda798efab40c60a.js +0 -1
  380. package/.next/static/chunks/9181-8d8ecd3f641b7209.js +0 -8
  381. package/.next/static/chunks/9356-99ba407b60b9dfe9.js +0 -1
  382. package/.next/static/chunks/9451-680fa09f81f18806.js +0 -1
  383. package/.next/static/chunks/9659-a279e3aaba407251.js +0 -1
  384. package/.next/static/chunks/app/chat/page-ea6752144d35c892.js +0 -1
  385. package/.next/static/chunks/app/docs/page-935b0386917b91bb.js +0 -1
  386. package/.next/static/chunks/app/executions/page-d72027b0179e8fa2.js +0 -1
  387. package/.next/static/chunks/app/flows/page-1844e86dd43fa285.js +0 -1
  388. package/.next/static/chunks/app/layout-2ebf01d97702a18a.js +0 -1
  389. package/.next/static/chunks/app/mcp/page-b6866f49f76a6801.js +0 -1
  390. package/.next/static/chunks/app/models/error-a3183f168e8a9b04.js +0 -1
  391. package/.next/static/chunks/app/models/page-5a13ea6ff5ac1b9c.js +0 -1
  392. package/.next/static/chunks/app/settings/page-7a68583660508ffd.js +0 -1
  393. package/.next/static/chunks/app/waves/page-ec33cf79f6103a9e.js +0 -1
  394. package/.next/static/chunks/webpack-f4a471ab560eb19e.js +0 -1
  395. package/.next/static/css/39393a79f7cb0dee.css +0 -1
  396. /package/.next/static/{WRUzIBdypUJvv0xAct8qc → Il6IDWxf3CN0dv-P6QQrp}/_buildManifest.js +0 -0
  397. /package/.next/static/{WRUzIBdypUJvv0xAct8qc → Il6IDWxf3CN0dv-P6QQrp}/_ssgManifest.js +0 -0
@@ -12,7 +12,7 @@ NODE TYPES:
12
12
  "model": "<model id or name from the catalog>",
13
13
  "prompt": "instructions for this step",
14
14
  "servers": [ { "name": "<server name>", "tools": ["tool_a"] } ], // optional; omit "tools" to enable all
15
- "inputMode": "full-history" | "latest-message" | "isolated", // optional, default full-history
15
+ "inputMode": "full-history" | "latest-message" | "isolated", // optional, default full-history. Reshapes ONLY the wire view the model sees (persisted history stays lossless): full-history = the whole assembled context; latest-message = leading system prompt(s) + everything FROM the most recent user message ONWARD (NOT "last user + last assistant"), INCLUDING this turn's in-flight tool calls/results; isolated = system prompt(s) + isolatedPrompt as a synthetic user message, prior conversation dropped. NOTE: for Claude-subscription models the whole wire history (incl. prior tool calls/results under full-history) is flattened into one text prompt rather than sent as native tool turns
16
16
  "isolatedPrompt": "...", // only with inputMode "isolated"
17
17
  "outputMode": "full-conversation" | "latest-message", // optional, default full-conversation; latest-message hides this step's tool calls/results from later steps (they see only its final response)
18
18
  "maxTurns": 20, // optional; per-step cap on agentic tool-loop turns (retry-until-done in ONE node). Unset = model/system default (50)
@@ -32,12 +32,13 @@ NODE TYPES:
32
32
  "mapOverList": true | false, // optional; run the SINGLE child ("flow"/"subflowSpec") ONCE PER ITEM parsed from the input; mutually exclusive with parallelFlows/parallelSubflowSpecs
33
33
  "itemSplit": "json-array" | "lines", // optional (mapOverList only), how to split the input into items, default json-array
34
34
  "sequential": true | false, // optional (mapOverList only), run items one at a time in order instead of concurrently, default false
35
- "concurrencyLimit": 4, // optional (parallel / mapOverList), default 4
36
- "joinSeparator": "\\n\\n---\\n\\n", // optional (parallel / mapOverList), string between joined lane outputs, default "\\n\\n"
37
- "errorStrategy": "collect-all" | "fail-fast", // optional (parallel / mapOverList), default collect-all
38
- "inputMode": "full-history" | "latest-message" | "isolated",
35
+ "spawnBriefs": ["brief 1", "brief 2"], // optional (rule 7d); run the SINGLE child once PER BRIEF, in parallel — the author-defined spawn set; mutually exclusive with parallelFlows/parallelSubflowSpecs/mapOverList
36
+ "concurrencyLimit": 4, // optional (parallel / mapOverList / spawn), default 4
37
+ "joinSeparator": "\\n\\n---\\n\\n", // optional (parallel / mapOverList / spawn), string between joined lane outputs, default "\\n\\n"
38
+ "errorStrategy": "collect-all" | "fail-fast", // optional (parallel / mapOverList / spawn), default collect-all
39
+ "inputMode": "full-history" | "latest-message" | "isolated", // optional, default full-history. DIFFERS from a process node: history modes ALWAYS sanitize the parent transcript first — system messages, tool-result messages, and ANY assistant turn that made tool calls are dropped (only user + prose-only assistant messages survive). full-history = the full sanitized transcript; latest-message = the sanitized transcript FROM the most recent user message ONWARD (NOT "last user + last assistant"); isolated = ignore the parent conversation and send "prompt" as the child's single user message
39
40
  "allowCallerPrompt": true | false, // optional, only with inputMode "isolated"; when true a routing step may pass a "prompt" via its handoff tool that overrides the subflow's "prompt" (default)
40
- "allowCallerFanout": true | false, // optional (subflow); when true a routing step may pass a "parallelFlows" array (+ optional "concurrencyLimit") via its handoff tool to CHOOSE the parallel fan-out set at runtime (rule 7c)
41
+ "allowCallerFanout": true | false, // optional (subflow); makes this a SPAWNABLE sub-agent: the routing step may call its handoff tool SEVERAL TIMES in one turn, each call with a "task" brief spawning one parallel instance of the child flow (rule 7c)
41
42
  "captureVariable": "NAME", // optional; save the subflow's output into a run variable other steps inject with \${var:NAME}
42
43
  "captureResource": "NAME", // optional; ALSO save the subflow's output as a tracked run resource (\${res:NAME}, rule 9b)
43
44
  "captureKv": "NAME", // optional; ALSO save the subflow's output to a PERSISTENT cross-run key (\${kv:NAME}, rule 9d)
@@ -65,11 +66,13 @@ RULES:
65
66
  6. A subflow node may have only ONE outgoing edge. Give it EITHER a "flow" (naming an existing flow) OR a "subflowSpec" (an inline nested FlowSpec that becomes its own child flow) — not both. A "subflowSpec" may itself contain subflow nodes with their own "subflowSpec" (bounded nesting), so you can author whole multi-level flows in one object.
66
67
  7. A subflow node may instead fan out to SEVERAL child flows CONCURRENTLY via "parallelFlows" (existing flows) or "parallelSubflowSpecs" (inline). These are STATIC (fixed at author time): the same input is sent to every lane and their outputs are joined. This is about multiple CHILDREN, not successors — the single-outgoing-edge rule (rule 6) still holds. Prefer "parallelFlows" for large fan-outs.
67
68
  7b. For DYNAMIC fan-out — when the set of target flows should be decided AT RUNTIME by an earlier step — use "parallelFlowsVariable": "NAME". An upstream process/subflow node captures a JSON array of flow ids/names (or a newline list) into run variable NAME via "captureVariable": "NAME"; this subflow node then fans out over exactly those flows. Unknown ids and a self-reference are dropped, the count is capped, and a non-empty resolution overrides any static "parallelFlows" (empty falls back to it). Mutually exclusive with "mapOverList". Still one outgoing edge (rule 6).
68
- 7c. For AGENTIC fan-out — when the ROUTING MODEL itself should decide the parallel set at the very moment it hands off — set "allowCallerFanout": true on the target subflow node. Its handoff tool then exposes an optional "parallelFlows" (array of flow ids/names) argument plus an optional "concurrencyLimit"; the model passes them at call time to fan out over exactly those flows. A non-empty caller set overrides "parallelFlows"/"parallelFlowsVariable"; unknown ids and a self-reference are dropped and the count is capped. Mutually exclusive with "mapOverList". Still one outgoing edge (rule 6). Prefer 7b's "parallelFlowsVariable" when an EARLIER step computes the set; use 7c when the DECIDING (routing) step is the one that chooses it.
69
+ 7c. For AGENTIC spawning — when the ROUTING MODEL itself should split the work at the very moment it hands off — set "allowCallerFanout": true on the target subflow node. This makes it a SPAWNABLE sub-agent: its handoff tool gains an optional "task" (string) argument and the routing model may call the tool SEVERAL TIMES IN ONE TURN, each call spawning one parallel instance of the child flow briefed with that call's "task". All instances run concurrently, their outputs are joined in call order, and the flow continues once every instance finishes. A call with no "task" is a plain single handoff. Caller briefs override "spawnBriefs"/"parallelFlows"/"parallelFlowsVariable"; the count is capped. Mutually exclusive with "mapOverList". Still one outgoing edge (rule 6). Use 7c when the deciding (routing) step should choose how to split the work; use 7d's "spawnBriefs" when the AUTHOR fixes the briefs; use 7b when an earlier step computes a set of DIFFERENT flows.
70
+ 7d. For AUTHOR-DEFINED spawning — a fixed set of parallel briefs for ONE sub-agent — give the subflow node "spawnBriefs": ["...", "..."]. Every visit runs the single child once per brief, concurrently (same pool/tuning as parallel). Each brief may inject \${var:NAME}/\${res:NAME}/\${kv:NAME}. With inputMode "isolated" the brief is the lane's whole prompt; with history modes each lane sees the conversation plus its brief as the closing instruction. Mutually exclusive with "parallelFlows"/"parallelSubflowSpecs"/"mapOverList"; needs a single child ("flow"/"subflowSpec").
69
71
  8. A subflow node may instead run its SINGLE child flow ONCE PER ITEM via "mapOverList": true. The input is split into items by "itemSplit" ("json-array" default, or "lines"), each item is sent to its own child run, and the per-item outputs are joined (same pool/tuning as parallel). Use "sequential": true to run items in order. Mutually exclusive with "parallelFlows"/"parallelSubflowSpecs".
70
72
  9. Named variables (scratchpad): a step can save its output with "captureVariable": "NAME" (process or subflow) and any LATER step injects it with \${var:NAME} inside its "prompt" / "isolatedPrompt" / subflow prompt. This survives "latest-message"/"isolated" scoping, unlike conversation history — use it to carry a todo list, a file path, a diff, or a captured result across steps that don't share history. \${var:NAME} is run-scoped and plaintext; it is DISTINCT from \${global:VAR} (configured secrets/config, resolved only for tool args). Capture a subflow's output on the PARENT subflow node — a variable set inside a child flow is not visible to the parent.
71
73
  9b. Run resources (tracked data): "captureResource": "NAME" (process or subflow) ALSO saves the step's output as a run-scoped RESOURCE — an addressable artifact (flujo://run/... URI) with lineage (which step produced it, which steps read it), readable via the built-in "flujo" MCP server. A later step injects it with \${res:NAME} exactly like \${var:NAME}. Prefer "captureVariable" for short strings; use "captureResource" when the output is a large document/report/dataset worth tracking, or when other tools/agents should be able to read it back. Large or binary MCP tool results (screenshots, files) are auto-captured as run resources without any spec field.
72
74
  9c. Resource nodes are OPTIONAL/advanced — most flows should not use them; prefer rule 9b's captureResource/\${res:NAME}. Emit one only when the data artifact itself should be VISIBLE in the graph: an edge resource→process means the step READS the artifact (its contents are injected into the step's context); process→resource means the step's output is SAVED to it (run artifacts only, equivalent to captureResource with the node's runName). Resource edges are data wiring, not flow control — they never carry conditions and don't count as a step's successor.
73
75
  9d. Persistent state (cross-run): "captureKv": "NAME" (process or subflow) saves the step's output to a PERSISTENT key-value store that SURVIVES ACROSS RUNS, injected by any step with \${kv:NAME}. Unlike \${var:} / \${res:} (discarded when the run ends), \${kv:} is what a long-lived SCHEDULED flow uses to carry a loop counter, a pagination cursor, a last-seen id, or a flag to its NEXT run. By default a key lives on the flow's FOLDER board (flows in the same folder share it); prefix the name to change scope: "flow/NAME" (this flow only) or "global/NAME" (whole instance). Plaintext, never secrets (distinct from \${global:VAR}). A model can also read/update a key mid-run via the built-in "flujo" server's kv_get / kv_set tools.
74
76
  10. Keep flows minimal — only the steps the task needs. Write clear, specific prompts and labels; fill "description" on process nodes.
75
- 11. Signals (fire-and-forget events): a "signal" node is a deterministic pass-through that, when the path reaches it, emits an event {topic, payload} onto the flow-run event bus and then continues to its successor unchanged (it never calls a model or touches the conversation). Use it when the flow should notify or kick off ANOTHER flow mid-run — a flow-event trigger configured elsewhere listens for the same "topic" (e.g. "when the review finds blockers, emit a review-blocked signal"). Always give it a "topic" (a signal with no topic emits nothing); "payloadTemplate" is the optional event body and may inject \${var:NAME}. Make emission conditional by putting a conditioned edge (rule 5b) INTO the signal node.`}};
77
+ 11. Signals (fire-and-forget events): a "signal" node is a deterministic pass-through that, when the path reaches it, emits an event {topic, payload} onto the flow-run event bus and then continues to its successor unchanged (it never calls a model or touches the conversation). Use it when the flow should notify or kick off ANOTHER flow mid-run — a flow-event trigger configured elsewhere listens for the same "topic" (e.g. "when the review finds blockers, emit a review-blocked signal"). Always give it a "topic" (a signal with no topic emits nothing); "payloadTemplate" is the optional event body and may inject \${var:NAME}. Make emission conditional by putting a conditioned edge (rule 5b) INTO the signal node.
78
+ 12. Input vs output modes are two DISTINCT axes whose value names differ per node type (issue #152 clarification). inputMode ("full-history" | "latest-message" | "isolated") controls what a step RECEIVES and exists on BOTH process and subflow nodes, but they behave differently: a process node keeps the current turn's tool calls/results, while a subflow node ALWAYS strips system/tool-result/tool-call turns from the parent transcript in every history mode (see the inputMode notes above). "latest-message" means "from the most recent user message onward", NOT "last user + last assistant". outputMode controls what LATER steps see of a step's work and is a SEPARATE enum per node type: a process node uses "full-conversation" | "latest-message" (latest-message hides this step's tool exchange from later steps), a subflow node uses "steps" | "final-only" (live-view folding only). Common word traps: "last-message" = inputMode latest-message; "full-conversation" is a process outputMode value, NOT an input mode. A subflow's final answer is always injected back into the parent transcript regardless of outputMode.`}};
@@ -0,0 +1 @@
1
+ "use strict";exports.id=584,exports.ids=[584],exports.modules={22042:(a,b,c)=>{c.d(b,{A:()=>Q});var d=c(38301),e=c(43249),f=c(2783),g=c(38404),h=c(94633),i=c(18168),j=c(60839),k=c(68333),l=c(6636),m=c(74907);function n(a){return(1+Math.sin(Math.PI*a-Math.PI/2))/2}var o=c(14758),p=c(5141),q=c(21124);let r={width:99,height:99,position:"absolute",top:-9999,overflow:"scroll"};var s=c(27080);let t=(0,s.A)((0,q.jsx)("path",{d:"M15.41 16.09l-4.58-4.59 4.58-4.59L14 5.5l-6 6 6 6z"}),"KeyboardArrowLeft"),u=(0,s.A)((0,q.jsx)("path",{d:"M8.59 16.34l4.58-4.59-4.58-4.59L10 5.75l6 6-6 6z"}),"KeyboardArrowRight");var v=c(14328),w=c(29565),x=c(33105);function y(a){return(0,x.Ay)("MuiTabScrollButton",a)}let z=(0,w.A)("MuiTabScrollButton",["root","vertical","horizontal","disabled"]),A=(0,i.Ay)(v.A,{name:"MuiTabScrollButton",slot:"Root",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[b.root,c.orientation&&b[c.orientation]]}})({width:40,flexShrink:0,opacity:.8,[`&.${z.disabled}`]:{opacity:0},variants:[{props:{orientation:"vertical"},style:{width:"100%",height:40,"& svg":{transform:"var(--TabScrollButton-svgRotate)"}}}]}),B=d.forwardRef(function(a,b){let c=(0,l.b)({props:a,name:"MuiTabScrollButton"}),{className:d,slots:i={},slotProps:j={},direction:k,orientation:m,disabled:n,...o}=c,p=(0,g.I)(),r={isRtl:p,...c},s=(a=>{let{classes:b,orientation:c,disabled:d}=a;return(0,f.A)({root:["root",c,d&&"disabled"]},y,b)})(r),v=i.StartScrollButtonIcon??t,w=i.EndScrollButtonIcon??u,x=(0,h.A)({elementType:v,externalSlotProps:j.startScrollButtonIcon,additionalProps:{fontSize:"small"},ownerState:r}),z=(0,h.A)({elementType:w,externalSlotProps:j.endScrollButtonIcon,additionalProps:{fontSize:"small"},ownerState:r});return(0,q.jsx)(A,{component:"div",className:(0,e.A)(s.root,d),ref:b,role:null,ownerState:r,tabIndex:null,...o,style:{...o.style,..."vertical"===m&&{"--TabScrollButton-svgRotate":`rotate(${p?-90:90}deg)`}},children:"left"===k?(0,q.jsx)(v,{...x}):(0,q.jsx)(w,{...z})})});var C=c(87974);function D(a){return(0,x.Ay)("MuiTabs",a)}let E=(0,w.A)("MuiTabs",["root","vertical","list","flexContainer","flexContainerVertical","centered","scroller","fixed","scrollableX","scrollableY","hideScrollbar","scrollButtons","scrollButtonsHideMobile","indicator"]);var F=c(97896),G=c(20385);let H=(a,b)=>a===b?a.firstChild:b&&b.nextElementSibling?b.nextElementSibling:a.firstChild,I=(a,b)=>a===b?a.lastChild:b&&b.previousElementSibling?b.previousElementSibling:a.lastChild,J=(a,b,c)=>{let d=!1,e=c(a,b);for(;e;){if(e===a.firstChild){if(d)return;d=!0}let b=e.disabled||"true"===e.getAttribute("aria-disabled");if(e.hasAttribute("tabindex")&&!b)return void e.focus();e=c(a,e)}},K=(0,i.Ay)("div",{name:"MuiTabs",slot:"Root",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[{[`& .${E.scrollButtons}`]:b.scrollButtons},{[`& .${E.scrollButtons}`]:c.scrollButtonsHideMobile&&b.scrollButtonsHideMobile},b.root,c.vertical&&b.vertical]}})((0,k.A)(({theme:a})=>({overflow:"hidden",minHeight:48,WebkitOverflowScrolling:"touch",display:"flex",variants:[{props:({ownerState:a})=>a.vertical,style:{flexDirection:"column"}},{props:({ownerState:a})=>a.scrollButtonsHideMobile,style:{[`& .${E.scrollButtons}`]:{[a.breakpoints.down("sm")]:{display:"none"}}}}]}))),L=(0,i.Ay)("div",{name:"MuiTabs",slot:"Scroller",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[b.scroller,c.fixed&&b.fixed,c.hideScrollbar&&b.hideScrollbar,c.scrollableX&&b.scrollableX,c.scrollableY&&b.scrollableY]}})({position:"relative",display:"inline-block",flex:"1 1 auto",whiteSpace:"nowrap",variants:[{props:({ownerState:a})=>a.fixed,style:{overflowX:"hidden",width:"100%"}},{props:({ownerState:a})=>a.hideScrollbar,style:{scrollbarWidth:"none","&::-webkit-scrollbar":{display:"none"}}},{props:({ownerState:a})=>a.scrollableX,style:{overflowX:"auto",overflowY:"hidden"}},{props:({ownerState:a})=>a.scrollableY,style:{overflowY:"auto",overflowX:"hidden"}}]}),M=(0,i.Ay)("div",{name:"MuiTabs",slot:"List",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[b.list,b.flexContainer,c.vertical&&b.flexContainerVertical,c.centered&&b.centered]}})({display:"flex",variants:[{props:({ownerState:a})=>a.vertical,style:{flexDirection:"column"}},{props:({ownerState:a})=>a.centered,style:{justifyContent:"center"}}]}),N=(0,i.Ay)("span",{name:"MuiTabs",slot:"Indicator",overridesResolver:(a,b)=>b.indicator})((0,k.A)(({theme:a})=>({position:"absolute",height:2,bottom:0,width:"100%",transition:a.transitions.create(),variants:[{props:{indicatorColor:"primary"},style:{backgroundColor:(a.vars||a).palette.primary.main}},{props:{indicatorColor:"secondary"},style:{backgroundColor:(a.vars||a).palette.secondary.main}},{props:({ownerState:a})=>a.vertical,style:{height:"100%",width:2,right:0}}]}))),O=(0,i.Ay)(function(a){let{onChange:b,...c}=a,e=d.useRef(),f=d.useRef(null),g=()=>{e.current=f.current.offsetHeight-f.current.clientHeight};return(0,o.A)(()=>{let a=(0,m.A)(()=>{let a=e.current;g(),a!==e.current&&b(e.current)}),c=(0,p.A)(f.current);return c.addEventListener("resize",a),()=>{a.clear(),c.removeEventListener("resize",a)}},[b]),d.useEffect(()=>{g(),b(e.current)},[b]),(0,q.jsx)("div",{style:r,...c,ref:f})})({overflowX:"auto",overflowY:"hidden",scrollbarWidth:"none","&::-webkit-scrollbar":{display:"none"}}),P={},Q=d.forwardRef(function(a,b){let c=(0,l.b)({props:a,name:"MuiTabs"}),i=(0,j.A)(),k=(0,g.I)(),{"aria-label":o,"aria-labelledby":r,action:s,centered:t=!1,children:u,className:v,component:w="div",allowScrollButtonsMobile:x=!1,indicatorColor:y="primary",onChange:z,orientation:A="horizontal",ScrollButtonComponent:E,scrollButtons:Q="auto",selectionFollowsFocus:R,slots:S={},slotProps:T={},TabIndicatorProps:U={},TabScrollButtonProps:V={},textColor:W="primary",value:X,variant:Y="standard",visibleScrollbar:Z=!1,...$}=c,_="scrollable"===Y,aa="vertical"===A,ab=aa?"scrollTop":"scrollLeft",ac=aa?"top":"left",ad=aa?"bottom":"right",ae=aa?"clientHeight":"clientWidth",af=aa?"height":"width",ag={...c,component:w,allowScrollButtonsMobile:x,indicatorColor:y,orientation:A,vertical:aa,scrollButtons:Q,textColor:W,variant:Y,visibleScrollbar:Z,fixed:!_,hideScrollbar:_&&!Z,scrollableX:_&&!aa,scrollableY:_&&aa,centered:t&&!_,scrollButtonsHideMobile:!x},ah=(a=>{let{vertical:b,fixed:c,hideScrollbar:d,scrollableX:e,scrollableY:g,centered:h,scrollButtonsHideMobile:i,classes:j}=a;return(0,f.A)({root:["root",b&&"vertical"],scroller:["scroller",c&&"fixed",d&&"hideScrollbar",e&&"scrollableX",g&&"scrollableY"],list:["list","flexContainer",b&&"flexContainerVertical",b&&"vertical",h&&"centered"],indicator:["indicator"],scrollButtons:["scrollButtons",i&&"scrollButtonsHideMobile"],scrollableX:[e&&"scrollableX"],hideScrollbar:[d&&"hideScrollbar"]},D,j)})(ag),ai=(0,h.A)({elementType:S.StartScrollButtonIcon,externalSlotProps:T.startScrollButtonIcon,ownerState:ag}),aj=(0,h.A)({elementType:S.EndScrollButtonIcon,externalSlotProps:T.endScrollButtonIcon,ownerState:ag}),[ak,al]=d.useState(!1),[am,an]=d.useState(P),[ao,ap]=d.useState(!1),[aq,ar]=d.useState(!1),[as,at]=d.useState(!1),[au,av]=d.useState({overflow:"hidden",scrollbarWidth:0}),aw=new Map,ax=d.useRef(null),ay=d.useRef(null),az={slots:S,slotProps:{indicator:U,scrollButton:V,...T}},aA=()=>{let a,b,c=ax.current;if(c){let b=c.getBoundingClientRect();a={clientWidth:c.clientWidth,scrollLeft:c.scrollLeft,scrollTop:c.scrollTop,scrollWidth:c.scrollWidth,top:b.top,bottom:b.bottom,left:b.left,right:b.right}}if(c&&!1!==X){let a=ay.current.children;if(a.length>0){let c=a[aw.get(X)];b=c?c.getBoundingClientRect():null}}return{tabsMeta:a,tabMeta:b}},aB=(0,C.A)(()=>{let a,{tabsMeta:b,tabMeta:c}=aA(),d=0;aa?(a="top",c&&b&&(d=c.top-b.top+b.scrollTop)):(a=k?"right":"left",c&&b&&(d=(k?-1:1)*(c[a]-b[a]+b.scrollLeft)));let e={[a]:d,[af]:c?c[af]:0};if("number"!=typeof am[a]||"number"!=typeof am[af])an(e);else{let b=Math.abs(am[a]-e[a]),c=Math.abs(am[af]-e[af]);(b>=1||c>=1)&&an(e)}}),aC=(a,{animation:b=!0}={})=>{b?function(a,b,c,d={},e=()=>{}){let{ease:f=n,duration:g=300}=d,h=null,i=b[a],j=!1,k=d=>{if(j)return void e(Error("Animation cancelled"));null===h&&(h=d);let l=Math.min(1,(d-h)/g);if(b[a]=f(l)*(c-i)+i,l>=1)return void requestAnimationFrame(()=>{e(null)});requestAnimationFrame(k)};i===c?e(Error("Element already at target position")):requestAnimationFrame(k)}(ab,ax.current,a,{duration:i.transitions.duration.standard}):ax.current[ab]=a},aD=a=>{let b=ax.current[ab];aa?b+=a:b+=a*(k?-1:1),aC(b)},aE=()=>{let a=ax.current[ae],b=0,c=Array.from(ay.current.children);for(let d=0;d<c.length;d+=1){let e=c[d];if(b+e[ae]>a){0===d&&(b=a);break}b+=e[ae]}return b},aF=()=>{aD(-1*aE())},aG=()=>{aD(aE())},[aH,{onChange:aI,...aJ}]=(0,G.A)("scrollbar",{className:(0,e.A)(ah.scrollableX,ah.hideScrollbar),elementType:O,shouldForwardComponentProp:!0,externalForwardedProps:az,ownerState:ag}),aK=d.useCallback(a=>{aI?.(a),av({overflow:null,scrollbarWidth:a})},[aI]),[aL,aM]=(0,G.A)("scrollButtons",{className:(0,e.A)(ah.scrollButtons,V.className),elementType:B,externalForwardedProps:az,ownerState:ag,additionalProps:{orientation:A,slots:{StartScrollButtonIcon:S.startScrollButtonIcon||S.StartScrollButtonIcon,EndScrollButtonIcon:S.endScrollButtonIcon||S.EndScrollButtonIcon},slotProps:{startScrollButtonIcon:ai,endScrollButtonIcon:aj}}}),aN=(0,C.A)(a=>{let{tabsMeta:b,tabMeta:c}=aA();c&&b&&(c[ac]<b[ac]?aC(b[ab]+(c[ac]-b[ac]),{animation:a}):c[ad]>b[ad]&&aC(b[ab]+(c[ad]-b[ad]),{animation:a}))}),aO=(0,C.A)(()=>{_&&!1!==Q&&at(!as)});d.useEffect(()=>{let a,b,c=(0,m.A)(()=>{ax.current&&aB()}),d=(0,p.A)(ax.current);return d.addEventListener("resize",c),"undefined"!=typeof ResizeObserver&&(a=new ResizeObserver(c),Array.from(ay.current.children).forEach(b=>{a.observe(b)})),"undefined"!=typeof MutationObserver&&(b=new MutationObserver(b=>{b.forEach(b=>{b.removedNodes.forEach(b=>{a?.unobserve(b)}),b.addedNodes.forEach(b=>{a?.observe(b)})}),c(),aO()})).observe(ay.current,{childList:!0}),()=>{c.clear(),d.removeEventListener("resize",c),b?.disconnect(),a?.disconnect()}},[aB,aO]),d.useEffect(()=>{let a=Array.from(ay.current.children),b=a.length;if("undefined"!=typeof IntersectionObserver&&b>0&&_&&!1!==Q){let c=a[0],d=a[b-1],e={root:ax.current,threshold:.99},f=new IntersectionObserver(a=>{ap(!a[0].isIntersecting)},e);f.observe(c);let g=new IntersectionObserver(a=>{ar(!a[0].isIntersecting)},e);return g.observe(d),()=>{f.disconnect(),g.disconnect()}}},[_,Q,as,u?.length]),d.useEffect(()=>{al(!0)},[]),d.useEffect(()=>{aB()}),d.useEffect(()=>{aN(P!==am)},[aN,am]),d.useImperativeHandle(s,()=>({updateIndicator:aB,updateScrollButtons:aO}),[aB,aO]);let[aP,aQ]=(0,G.A)("indicator",{className:(0,e.A)(ah.indicator,U.className),elementType:N,externalForwardedProps:az,ownerState:ag,additionalProps:{style:am}}),aR=(0,q.jsx)(aP,{...aQ}),aS=0,aT=d.Children.map(u,a=>{if(!d.isValidElement(a))return null;let b=void 0===a.props.value?aS:a.props.value;aw.set(b,aS);let c=b===X;return aS+=1,d.cloneElement(a,{fullWidth:"fullWidth"===Y,indicator:c&&!ak&&aR,selected:c,selectionFollowsFocus:R,onChange:z,textColor:W,value:b,...1===aS&&!1===X&&!a.props.tabIndex?{tabIndex:0}:{}})}),aU=(()=>{let a={};a.scrollbarSizeListener=_?(0,q.jsx)(aH,{...aJ,onChange:aK}):null;let b=_&&("auto"===Q&&(ao||aq)||!0===Q);return a.scrollButtonStart=b?(0,q.jsx)(aL,{direction:k?"right":"left",onClick:aF,disabled:!ao,...aM}):null,a.scrollButtonEnd=b?(0,q.jsx)(aL,{direction:k?"left":"right",onClick:aG,disabled:!aq,...aM}):null,a})(),[aV,aW]=(0,G.A)("root",{ref:b,className:(0,e.A)(ah.root,v),elementType:K,externalForwardedProps:{...az,...$,component:w},ownerState:ag}),[aX,aY]=(0,G.A)("scroller",{ref:ax,className:ah.scroller,elementType:L,externalForwardedProps:az,ownerState:ag,additionalProps:{style:{overflow:au.overflow,[aa?`margin${k?"Left":"Right"}`:"marginBottom"]:Z?void 0:-au.scrollbarWidth}}}),[aZ,a$]=(0,G.A)("list",{ref:ay,className:(0,e.A)(ah.list,ah.flexContainer),elementType:M,externalForwardedProps:az,ownerState:ag,getSlotProps:a=>({...a,onKeyDown:b=>{(a=>{if(a.altKey||a.shiftKey||a.ctrlKey||a.metaKey)return;let b=ay.current,c=(0,F.A)(b).activeElement;if("tab"!==c.getAttribute("role"))return;let d="horizontal"===A?"ArrowLeft":"ArrowUp",e="horizontal"===A?"ArrowRight":"ArrowDown";switch("horizontal"===A&&k&&(d="ArrowRight",e="ArrowLeft"),a.key){case d:a.preventDefault(),J(b,c,I);break;case e:a.preventDefault(),J(b,c,H);break;case"Home":a.preventDefault(),J(b,null,H);break;case"End":a.preventDefault(),J(b,null,I)}})(b),a.onKeyDown?.(b)}})});return(0,q.jsxs)(aV,{...aW,children:[aU.scrollButtonStart,aU.scrollbarSizeListener,(0,q.jsxs)(aX,{...aY,children:[(0,q.jsx)(aZ,{"aria-label":o,"aria-labelledby":r,"aria-orientation":"vertical"===A?"vertical":null,role:"tablist",...a$,children:aT}),ak&&aR]}),aU.scrollButtonEnd]})})},27409:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(27080),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"m7 10 5 5 5-5z"}),"ArrowDropDown")},34304:(a,b,c)=>{c.d(b,{A:()=>r});var d=c(38301),e=c(43249),f=c(2783),g=c(14328),h=c(6638),i=c(18168),j=c(68333),k=c(6636),l=c(29565),m=c(33105);function n(a){return(0,m.Ay)("MuiTab",a)}let o=(0,l.A)("MuiTab",["root","labelIcon","textColorInherit","textColorPrimary","textColorSecondary","selected","disabled","fullWidth","wrapped","iconWrapper","icon"]);var p=c(21124);let q=(0,i.Ay)(g.A,{name:"MuiTab",slot:"Root",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[b.root,c.label&&c.icon&&b.labelIcon,b[`textColor${(0,h.A)(c.textColor)}`],c.fullWidth&&b.fullWidth,c.wrapped&&b.wrapped,{[`& .${o.iconWrapper}`]:b.iconWrapper},{[`& .${o.icon}`]:b.icon}]}})((0,j.A)(({theme:a})=>({...a.typography.button,maxWidth:360,minWidth:90,position:"relative",minHeight:48,flexShrink:0,padding:"12px 16px",overflow:"hidden",whiteSpace:"normal",textAlign:"center",lineHeight:1.25,variants:[{props:({ownerState:a})=>a.label&&("top"===a.iconPosition||"bottom"===a.iconPosition),style:{flexDirection:"column"}},{props:({ownerState:a})=>a.label&&"top"!==a.iconPosition&&"bottom"!==a.iconPosition,style:{flexDirection:"row"}},{props:({ownerState:a})=>a.icon&&a.label,style:{minHeight:72,paddingTop:9,paddingBottom:9}},{props:({ownerState:a,iconPosition:b})=>a.icon&&a.label&&"top"===b,style:{[`& > .${o.icon}`]:{marginBottom:6}}},{props:({ownerState:a,iconPosition:b})=>a.icon&&a.label&&"bottom"===b,style:{[`& > .${o.icon}`]:{marginTop:6}}},{props:({ownerState:a,iconPosition:b})=>a.icon&&a.label&&"start"===b,style:{[`& > .${o.icon}`]:{marginRight:a.spacing(1)}}},{props:({ownerState:a,iconPosition:b})=>a.icon&&a.label&&"end"===b,style:{[`& > .${o.icon}`]:{marginLeft:a.spacing(1)}}},{props:{textColor:"inherit"},style:{color:"inherit",opacity:.6,[`&.${o.selected}`]:{opacity:1},[`&.${o.disabled}`]:{opacity:(a.vars||a).palette.action.disabledOpacity}}},{props:{textColor:"primary"},style:{color:(a.vars||a).palette.text.secondary,[`&.${o.selected}`]:{color:(a.vars||a).palette.primary.main},[`&.${o.disabled}`]:{color:(a.vars||a).palette.text.disabled}}},{props:{textColor:"secondary"},style:{color:(a.vars||a).palette.text.secondary,[`&.${o.selected}`]:{color:(a.vars||a).palette.secondary.main},[`&.${o.disabled}`]:{color:(a.vars||a).palette.text.disabled}}},{props:({ownerState:a})=>a.fullWidth,style:{flexShrink:1,flexGrow:1,flexBasis:0,maxWidth:"none"}},{props:({ownerState:a})=>a.wrapped,style:{fontSize:a.typography.pxToRem(12)}}]}))),r=d.forwardRef(function(a,b){let c=(0,k.b)({props:a,name:"MuiTab"}),{className:g,disabled:i=!1,disableFocusRipple:j=!1,fullWidth:l,icon:m,iconPosition:o="top",indicator:r,label:s,onChange:t,onClick:u,onFocus:v,selected:w,selectionFollowsFocus:x,textColor:y="inherit",value:z,wrapped:A=!1,...B}=c,C={...c,disabled:i,disableFocusRipple:j,selected:w,icon:!!m,iconPosition:o,label:!!s,fullWidth:l,textColor:y,wrapped:A},D=(a=>{let{classes:b,textColor:c,fullWidth:d,wrapped:e,icon:g,label:i,selected:j,disabled:k}=a,l={root:["root",g&&i&&"labelIcon",`textColor${(0,h.A)(c)}`,d&&"fullWidth",e&&"wrapped",j&&"selected",k&&"disabled"],icon:["iconWrapper","icon"]};return(0,f.A)(l,n,b)})(C),E=m&&s&&d.isValidElement(m)?d.cloneElement(m,{className:(0,e.A)(D.icon,m.props.className)}):m;return(0,p.jsxs)(q,{focusRipple:!j,className:(0,e.A)(D.root,g),ref:b,role:"tab","aria-selected":w,disabled:i,onClick:a=>{!w&&t&&t(a,z),u&&u(a)},onFocus:a=>{x&&!w&&t&&t(a,z),v&&v(a)},ownerState:C,tabIndex:w?0:-1,...B,children:["top"===o||"start"===o?(0,p.jsxs)(d.Fragment,{children:[E,s]}):(0,p.jsxs)(d.Fragment,{children:[s,E]}),r]})})},35406:(a,b,c)=>{c.d(b,{A:()=>x});var d=c(38301),e=c(43249),f=c(37489),g=c(2783),h=c(4007),i=c(6638),j=c(18168),k=c(60839),l=c(68333),m=c(54716),n=c(6636),o=c(79515),p=c(29565),q=c(33105);function r(a){return(0,q.Ay)("MuiLink",a)}let s=(0,p.A)("MuiLink",["root","underlineNone","underlineHover","underlineAlways","button","focusVisible"]);var t=c(97287),u=c(21124);let v={primary:!0,secondary:!0,error:!0,info:!0,success:!0,warning:!0,textPrimary:!0,textSecondary:!0,textDisabled:!0},w=(0,j.Ay)(o.default,{name:"MuiLink",slot:"Root",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[b.root,b[`underline${(0,i.A)(c.underline)}`],"button"===c.component&&b.button]}})((0,l.A)(({theme:a})=>({variants:[{props:{underline:"none"},style:{textDecoration:"none"}},{props:{underline:"hover"},style:{textDecoration:"none","&:hover":{textDecoration:"underline"}}},{props:{underline:"always"},style:{textDecoration:"underline","&:hover":{textDecorationColor:"inherit"}}},{props:({underline:a,ownerState:b})=>"always"===a&&"inherit"!==b.color,style:{textDecorationColor:"var(--Link-underlineColor)"}},...Object.entries(a.palette).filter((0,m.A)()).map(([b])=>({props:{underline:"always",color:b},style:{"--Link-underlineColor":a.vars?`rgba(${a.vars.palette[b].mainChannel} / 0.4)`:(0,f.X4)(a.palette[b].main,.4)}})),{props:{underline:"always",color:"textPrimary"},style:{"--Link-underlineColor":a.vars?`rgba(${a.vars.palette.text.primaryChannel} / 0.4)`:(0,f.X4)(a.palette.text.primary,.4)}},{props:{underline:"always",color:"textSecondary"},style:{"--Link-underlineColor":a.vars?`rgba(${a.vars.palette.text.secondaryChannel} / 0.4)`:(0,f.X4)(a.palette.text.secondary,.4)}},{props:{underline:"always",color:"textDisabled"},style:{"--Link-underlineColor":(a.vars||a).palette.text.disabled}},{props:{component:"button"},style:{position:"relative",WebkitTapHighlightColor:"transparent",backgroundColor:"transparent",outline:0,border:0,margin:0,borderRadius:0,padding:0,cursor:"pointer",userSelect:"none",verticalAlign:"middle",MozAppearance:"none",WebkitAppearance:"none","&::-moz-focus-inner":{borderStyle:"none"},[`&.${s.focusVisible}`]:{outline:"auto"}}}]}))),x=d.forwardRef(function(a,b){let c=(0,n.b)({props:a,name:"MuiLink"}),j=(0,k.A)(),{className:l,color:m="primary",component:o="a",onBlur:p,onFocus:q,TypographyClasses:s,underline:x="always",variant:y="inherit",sx:z,...A}=c,[B,C]=d.useState(!1),D={...c,color:m,component:o,focusVisible:B,underline:x,variant:y},E=(a=>{let{classes:b,component:c,focusVisible:d,underline:e}=a,f={root:["root",`underline${(0,i.A)(e)}`,"button"===c&&"button",d&&"focusVisible"]};return(0,g.A)(f,r,b)})(D);return(0,u.jsx)(w,{color:m,className:(0,e.A)(E.root,l),classes:s,component:o,onBlur:a=>{(0,h.A)(a.target)||C(!1),p&&p(a)},onFocus:a=>{(0,h.A)(a.target)&&C(!0),q&&q(a)},ref:b,ownerState:D,variant:y,...A,sx:[...void 0===v[m]?[{color:m}]:[],...Array.isArray(z)?z:[z]],style:{...A.style,..."always"===x&&"inherit"!==m&&!v[m]&&{"--Link-underlineColor":(({theme:a,ownerState:b})=>{let c=b.color,d=(0,t.Yn)(a,`palette.${c}.main`,!1)||(0,t.Yn)(a,`palette.${c}`,!1)||b.color,e=(0,t.Yn)(a,`palette.${c}.mainChannel`)||(0,t.Yn)(a,`palette.${c}Channel`);return"vars"in a&&e?`rgba(${e} / 0.4)`:(0,f.X4)(d,.4)})({theme:j,ownerState:D})}}})})},95345:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(27080),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M19 2h-4.18C14.4.84 13.3 0 12 0S9.6.84 9.18 2H5c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2m-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1m7 18H5V4h2v3h10V4h2z"}),"ContentPaste")}};
@@ -1 +1 @@
1
- "use strict";exports.id=62,exports.ids=[62],exports.modules={2173:(a,b,c)=>{c.d(b,{A:()=>r});var d=c(21124),e=c(38301),f=c(81637),g=c(79515),h=c(53773),i=c(37674),j=c(43312),k=c(44079),l=c(68730),m=c(47902),n=c(91034),o=c(30717),p=c(46410),q=c(32720);let r=({roots:a,onChange:b})=>{let c=Array.isArray(a)?a:[],[r,s]=(0,e.useState)(null),t=(a,d)=>{b(c.map((b,c)=>c===a?d:b))};return(0,d.jsxs)(f.default,{children:[(0,d.jsxs)(f.default,{sx:{display:"flex",alignItems:"center",mb:.5},children:[(0,d.jsx)(o.A,{fontSize:"small",sx:{mr:1,color:"text.secondary"}}),(0,d.jsx)(g.default,{variant:"subtitle1",children:"Workspace folders"})]}),(0,d.jsxs)(g.default,{variant:"caption",color:"text.secondary",sx:{display:"block",mb:1.5},children:["Limit which folders this server may work in. Advisory only — the server is told these paths via MCP roots; it is not a hard sandbox. Leave empty to default to the server's own root dir. Supports ",(0,d.jsx)("code",{children:"${global:VAR}"}),"."]}),(0,d.jsx)(h.A,{spacing:1,children:c.map((a,e)=>(0,d.jsxs)(f.default,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(i.A,{size:"small",fullWidth:!0,placeholder:"/path/to/folder or file:///path",value:a,onChange:a=>t(e,a.target.value)}),(0,d.jsx)(j.A,{title:"Browse folders (on the FLUJO machine)",children:(0,d.jsx)(k.A,{size:"small",onClick:()=>s(e),"aria-label":"browse for folder",children:(0,d.jsx)(p.A,{fontSize:"small"})})}),(0,d.jsx)(j.A,{title:"Remove",children:(0,d.jsx)(k.A,{size:"small",onClick:()=>b(c.filter((a,b)=>b!==e)),"aria-label":"remove workspace folder",children:(0,d.jsx)(n.A,{fontSize:"small"})})})]},e))}),(0,d.jsx)(l.A,{size:"small",startIcon:(0,d.jsx)(m.A,{}),onClick:()=>b([...c,""]),sx:{mt:1},children:"Add folder"}),(0,d.jsx)(q.A,{open:null!==r,title:"Choose a workspace folder",initialPath:null!==r&&c[r]||void 0,onClose:()=>s(null),onSelect:a=>{null!==r&&t(r,a)}})]})}},63650:(a,b,c)=>{c.d(b,{v:()=>h});var d=c(38301),e=c(28055);let f=(0,c(19815).h)("frontend/hooks/useServerStatus");function g(a){return"stdio"===a.transport?a.args&&a.args.length>0?a.args[0]:"Unknown path":"websocket"===a.transport?a.websocketUrl||"Unknown URL":a.serverUrl||"Unknown URL"}function h(){let[a,b]=(0,d.useState)([]),[c,h]=(0,d.useState)(!0),[i,j]=(0,d.useState)(null),[k,l]=(0,d.useState)(new Set),m=(0,d.useCallback)(async()=>{f.debug("Loading servers"),h(!0),j(null);try{let a=await e.S.loadServerConfigs();if(!a||"error"in a){f.warn("Failed to load server configurations:",a?.error),j(a?.error||"Failed to load server configurations"),h(!1);return}let c=await Promise.all(a.map(async a=>{f.debug(`Getting status for server: ${a.name}`);let b=await e.S.getServerStatus(a.name),c="string"==typeof b?b:b.status,d="object"==typeof b&&b.message?b.message:void 0,h="object"==typeof b&&b.stderrOutput?b.stderrOutput:void 0,i=g(a);return{...a,path:i,status:c,error:d,stderrOutput:h}}));f.debug("Final server states:",c),b(c),h(!1)}catch(a){f.warn("Failed to load servers:",a),j("Failed to load servers"),h(!1)}},[]),n=(0,d.useCallback)(async(c,d)=>{f.debug(`Toggling server ${c} to ${d?"enabled":"disabled"}`);try{let g=a.find(a=>a.name===c);if(!g)return f.warn(`Server not found: ${c}`),!1;f.debug(`Found server ${c}, current disabled state: ${g.disabled}`);let h=await e.S.updateServerConfig(c,{disabled:!d});if(h.error)return f.warn("Failed to update server config:",[h.error,c]),!1;f.debug(`Updating server ${c} state in UI, new disabled state: ${!d}`),b(a=>a.map(a=>a.name===c?{...a,disabled:!d}:a)),f.info(`Successfully toggled server ${c} to ${d?"enabled":"disabled"}`);try{let a=await e.S.getServerStatus(c),d="string"==typeof a?a:a.status,f="object"==typeof a&&a.message?a.message:void 0,g="object"==typeof a&&a.stderrOutput?a.stderrOutput:void 0;b(a=>a.map(a=>a.name===c?{...a,status:d,error:f,stderrOutput:g}:a))}catch(a){f.warn(`Failed to get status for server ${c} after toggle:`,a)}return!0}catch(a){return f.warn("Failed to toggle server:",a),!1}},[a]),o=(0,d.useCallback)(async c=>{f.debug(`Deleting server: ${c}`);try{if(!a.find(a=>a.name===c))return f.warn("Server not found:",c),!1;let d=await e.S.deleteServerConfig(c);if(d.error)return f.warn("Failed to delete server config:",d.error),!1;return b(a=>a.filter(a=>a.name!==c)),!0}catch(a){return f.warn("Failed to delete server:",a),!1}},[a]),p=(0,d.useCallback)(async a=>{f.debug("Adding server:",a);try{let c=g(a),d={...a,path:c,status:"connecting",tools:[],env:a.env||{}};b(a=>[...a,d]),l(b=>new Set(b).add(a.name));let h=await e.S.updateServerConfig(a.name,a);if(h.error)return f.warn("Failed to update server config:",h.error),b(b=>b.map(b=>b.name===a.name?{...b,status:"error",error:h.error}:b)),l(b=>{let c=new Set(b);return c.delete(a.name),c}),!1;f.info(`Successfully added server ${a.name}`);try{let c=await e.S.getServerStatus(a.name),d="string"==typeof c?c:c.status,f="object"==typeof c&&c.message?c.message:void 0,g="object"==typeof c&&c.stderrOutput?c.stderrOutput:void 0;b(b=>b.map(b=>b.name===a.name?{...b,status:d,error:f,stderrOutput:g}:b))}catch(b){f.warn(`Failed to get status for server ${a.name} after adding:`,b)}return l(b=>{let c=new Set(b);return c.delete(a.name),c}),!0}catch(c){return f.warn("Failed to add server:",c),b(b=>b.map(b=>b.name===a.name?{...b,status:"error",error:c instanceof Error?c.message:"Unknown error during server addition"}:b)),l(b=>{let c=new Set(b);return c.delete(a.name),c}),!1}},[]),q=(0,d.useCallback)(async(a,c)=>{let d=c??a.name,h=d!==a.name;f.debug("Updating server:",a);try{b(b=>b.map(b=>b.name===d?{...a,path:g(a),status:b.status,error:b.error,stderrOutput:b.stderrOutput}:b));let c=await e.S.updateServerConfig(d,a);if(c.error){if(f.warn("Failed to update server config:",c.error),h)return await m(),!1;return b(b=>b.map(b=>b.name===a.name?{...b,status:"error",error:c.error}:b)),!1}f.info(`Successfully updated config for server ${a.name}`);try{let c=await e.S.getServerStatus(a.name),d="string"==typeof c?c:c.status,f="object"==typeof c&&c.message?c.message:void 0,g="object"==typeof c&&c.stderrOutput?c.stderrOutput:void 0;b(b=>b.map(b=>b.name===a.name?{...b,status:d,error:f,stderrOutput:g}:b))}catch(b){f.warn(`Failed to get status for server ${a.name} after config update:`,b)}return!0}catch(d){if(f.warn("Failed to update server:",d),h)return await m(),!1;let c=d instanceof Error?d.message:"Unknown error during update";return b(b=>b.map(b=>b.name===a.name?{...b,status:"error",error:c}:b)),!1}},[m]),r=(0,d.useCallback)(async(a,c)=>{let d=c&&c.trim()?c.trim():"";f.debug(`Setting folder for server ${a} to ${d||"(none)"}`);try{let c=await e.S.updateServerConfig(a,{folder:d});if("error"in c&&c.error)return f.warn("Failed to update server folder:",c.error),!1;return b(b=>b.map(b=>b.name===a?{...b,folder:d||void 0}:b)),!0}catch(a){return f.warn("Failed to set server folder:",a),!1}},[]),s=(0,d.useCallback)(async(c,d)=>{f.debug(`Saving environment variables for server: ${c}`,d);try{if(!a.find(a=>a.name===c))return f.warn(`Server not found: ${c}`),!1;let g=await e.S.updateServerConfig(c,{env:d});if(g.error)return f.warn("Failed to update server config:",g.error),!1;return f.debug(`Updating environment variables in UI for server: ${c}`),b(a=>a.map(a=>a.name===c?{...a,env:d}:a)),f.info(`Successfully saved environment variables for server: ${c}`),!0}catch(a){return f.warn("Failed to save environment variables:",a),!1}},[a]);return{servers:a,isLoading:c,loadError:i,connectingServers:k,loadServers:m,toggleServer:n,retryServer:(0,d.useCallback)(async a=>{f.debug(`Retrying server status for: ${a}`);try{let c=await e.S.getServerStatus(a),d="string"==typeof c?c:c.status,f="object"==typeof c&&c.message?c.message:void 0,g="object"==typeof c&&c.stderrOutput?c.stderrOutput:void 0;return b(b=>b.map(b=>b.name===a?{...b,status:d,error:f,stderrOutput:g}:b)),!0}catch(a){return f.warn("Failed to retry server status:",a),!1}},[]),deleteServer:o,addServer:p,updateServer:q,setServerFolder:r,saveEnv:s}}},88117:(a,b,c)=>{c.d(b,{O:()=>g});var d=c(38301),e=c(28055);let f=(0,c(19815).h)("frontend/hooks/useServerTools");function g(a){let[b,c]=(0,d.useState)([]),[g,h]=(0,d.useState)(!1),[i,j]=(0,d.useState)(null),[k,l]=(0,d.useState)(null),[m,n]=(0,d.useState)(null),[o,p]=(0,d.useState)(0),[q,r]=(0,d.useState)(!1),s=(0,d.useRef)(null),t=(0,d.useCallback)(async(d=!1)=>{if(!a){c([]),j(null);return}if(n(a),!d&&k&&new Date().getTime()-k.getTime()<200&&b.length>0&&a===m)return void f.debug(`Rate limiting tool refresh for server: ${a}`);f.debug(`Loading tools for server: ${a}`),h(!0),j(null);try{let b=await e.S.listServerTools(a);if(a!==m)return void f.debug(`Server changed during tool loading from ${a} to ${m}`);if(b.error)f.warn(`Error loading tools for ${a}:`,b.error),j(b.error),c([]);else{let d=b.tools||[];f.debug(`Loaded ${d.length} tools for ${a}`),c(d),l(new Date),p(0)}}catch(b){if(a!==m)return void f.debug(`Server changed during tool loading from ${a} to ${m}`);f.warn(`Failed to load tools for server ${a}:`,b),j(`Failed to load tools: ${b instanceof Error?b.message:"Unknown error"}`),c([])}finally{a===m&&h(!1)}},[a,k,b.length,m]),u=(0,d.useCallback)(()=>{if(!a)return;s.current&&(clearTimeout(s.current),s.current=null),r(!0);let b=Math.min(1e3*Math.pow(2,o),1e4);return f.debug(`Retrying tool load for ${a} in ${b}ms (attempt ${o+1})`),s.current=setTimeout(()=>{p(a=>a+1),t(!0),r(!1)},b),()=>{s.current&&clearTimeout(s.current)}},[a,o,t]);return{tools:b,isLoading:g||q,error:i,loadTools:t,retryLoadTools:u,isRetrying:q,retryCount:o,testTool:(0,d.useCallback)(async(b,c,d)=>{if(!a)return{success:!1,output:"",error:"No server selected"};f.debug(`Testing tool ${b} on server ${a} with params:`,c);try{let g=await e.S.callTool(a,b,c,d);if(g.error)return f.warn(`Error calling tool ${b}:`,g.error),{success:!1,output:"",error:g.error};return f.debug(`Tool ${b} executed successfully:`,g),{success:!0,output:JSON.stringify(g,null,2)}}catch(a){return f.error(`Exception calling tool ${b}:`,a),{success:!1,output:"",error:a instanceof Error?a.message:"Unknown error occurred"}}},[a])}}}};
1
+ "use strict";exports.id=62,exports.ids=[62],exports.modules={2173:(a,b,c)=>{c.d(b,{A:()=>r});var d=c(21124),e=c(38301),f=c(81637),g=c(79515),h=c(53773),i=c(37674),j=c(43312),k=c(44079),l=c(68730),m=c(47902),n=c(91034),o=c(30717),p=c(46410),q=c(32720);let r=({roots:a,onChange:b})=>{let c=Array.isArray(a)?a:[],[r,s]=(0,e.useState)(null),t=(a,d)=>{b(c.map((b,c)=>c===a?d:b))};return(0,d.jsxs)(f.default,{children:[(0,d.jsxs)(f.default,{sx:{display:"flex",alignItems:"center",mb:.5},children:[(0,d.jsx)(o.A,{fontSize:"small",sx:{mr:1,color:"text.secondary"}}),(0,d.jsx)(g.default,{variant:"subtitle1",children:"Workspace folders"})]}),(0,d.jsxs)(g.default,{variant:"caption",color:"text.secondary",sx:{display:"block",mb:1.5},children:["Limit which folders this server may work in. Advisory only — the server is told these paths via MCP roots; it is not a hard sandbox. Leave empty to default to the server's own root dir. Supports ",(0,d.jsx)("code",{children:"${global:VAR}"}),"."]}),(0,d.jsx)(h.A,{spacing:1,children:c.map((a,e)=>(0,d.jsxs)(f.default,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(i.A,{size:"small",fullWidth:!0,placeholder:"/path/to/folder or file:///path",value:a,onChange:a=>t(e,a.target.value)}),(0,d.jsx)(j.A,{title:"Browse folders (on the FLUJO machine)",children:(0,d.jsx)(k.A,{size:"small",onClick:()=>s(e),"aria-label":"browse for folder",children:(0,d.jsx)(p.A,{fontSize:"small"})})}),(0,d.jsx)(j.A,{title:"Remove",children:(0,d.jsx)(k.A,{size:"small",onClick:()=>b(c.filter((a,b)=>b!==e)),"aria-label":"remove workspace folder",children:(0,d.jsx)(n.A,{fontSize:"small"})})})]},e))}),(0,d.jsx)(l.A,{size:"small",startIcon:(0,d.jsx)(m.A,{}),onClick:()=>b([...c,""]),sx:{mt:1},children:"Add folder"}),(0,d.jsx)(q.A,{open:null!==r,title:"Choose a workspace folder",initialPath:null!==r&&c[r]||void 0,onClose:()=>s(null),onSelect:a=>{null!==r&&t(r,a)}})]})}},63650:(a,b,c)=>{c.d(b,{v:()=>h});var d=c(38301),e=c(28055);let f=(0,c(19815).h)("frontend/hooks/useServerStatus");function g(a){return"stdio"===a.transport?a.args&&a.args.length>0?a.args[0]:"Unknown path":"websocket"===a.transport?a.websocketUrl||"Unknown URL":a.serverUrl||"Unknown URL"}function h(){let[a,b]=(0,d.useState)([]),[c,h]=(0,d.useState)(!0),[i,j]=(0,d.useState)(null),[k,l]=(0,d.useState)(new Set),m=(0,d.useCallback)(async()=>{f.debug("Loading servers"),h(!0),j(null);try{let a=await e.S.loadServerConfigs();if(!a||"error"in a){f.warn("Failed to load server configurations:",a?.error),j(a?.error||"Failed to load server configurations"),h(!1);return}let c=await Promise.all(a.map(async a=>{f.debug(`Getting status for server: ${a.name}`);let b=await e.S.getServerStatus(a.name),c="string"==typeof b?b:b.status,d="object"==typeof b&&b.message?b.message:void 0,h="object"==typeof b&&b.stderrOutput?b.stderrOutput:void 0,i=g(a);return{...a,path:i,status:c,error:d,stderrOutput:h}}));f.debug("Final server states:",c),b(c),h(!1)}catch(a){f.warn("Failed to load servers:",a),j("Failed to load servers"),h(!1)}},[]),n=(0,d.useCallback)(async(c,d)=>{f.debug(`Toggling server ${c} to ${d?"enabled":"disabled"}`);try{let g=a.find(a=>a.name===c);if(!g)return f.warn(`Server not found: ${c}`),!1;f.debug(`Found server ${c}, current disabled state: ${g.disabled}`);let h=await e.S.updateServerConfig(c,{disabled:!d});if(h.error)return f.warn("Failed to update server config:",[h.error,c]),!1;f.debug(`Updating server ${c} state in UI, new disabled state: ${!d}`),b(a=>a.map(a=>a.name===c?{...a,disabled:!d}:a)),f.info(`Successfully toggled server ${c} to ${d?"enabled":"disabled"}`);try{let a=await e.S.getServerStatus(c),d="string"==typeof a?a:a.status,f="object"==typeof a&&a.message?a.message:void 0,g="object"==typeof a&&a.stderrOutput?a.stderrOutput:void 0;b(a=>a.map(a=>a.name===c?{...a,status:d,error:f,stderrOutput:g}:a))}catch(a){f.warn(`Failed to get status for server ${c} after toggle:`,a)}return!0}catch(a){return f.warn("Failed to toggle server:",a),!1}},[a]),o=(0,d.useCallback)(async c=>{f.debug(`Deleting server: ${c}`);try{if(!a.find(a=>a.name===c))return f.warn("Server not found:",c),!1;let d=await e.S.deleteServerConfig(c);if(d.error)return f.warn("Failed to delete server config:",d.error),!1;return b(a=>a.filter(a=>a.name!==c)),!0}catch(a){return f.warn("Failed to delete server:",a),!1}},[a]),p=(0,d.useCallback)(async a=>{f.debug("Adding server:",a);try{let c=g(a),d={...a,path:c,status:"connecting",tools:[],env:a.env||{}};b(a=>[...a,d]),l(b=>new Set(b).add(a.name));let h=await e.S.updateServerConfig(a.name,a);if(h.error)return f.warn("Failed to update server config:",h.error),b(b=>b.map(b=>b.name===a.name?{...b,status:"error",error:h.error}:b)),l(b=>{let c=new Set(b);return c.delete(a.name),c}),!1;f.info(`Successfully added server ${a.name}`);try{let c=await e.S.getServerStatus(a.name),d="string"==typeof c?c:c.status,f="object"==typeof c&&c.message?c.message:void 0,g="object"==typeof c&&c.stderrOutput?c.stderrOutput:void 0;b(b=>b.map(b=>b.name===a.name?{...b,status:d,error:f,stderrOutput:g}:b))}catch(b){f.warn(`Failed to get status for server ${a.name} after adding:`,b)}return l(b=>{let c=new Set(b);return c.delete(a.name),c}),!0}catch(c){return f.warn("Failed to add server:",c),b(b=>b.map(b=>b.name===a.name?{...b,status:"error",error:c instanceof Error?c.message:"Unknown error during server addition"}:b)),l(b=>{let c=new Set(b);return c.delete(a.name),c}),!1}},[]),q=(0,d.useCallback)(async(a,c)=>{let d=c??a.name,h=d!==a.name;f.debug("Updating server:",a);try{b(b=>b.map(b=>b.name===d?{...a,path:g(a),status:b.status,error:b.error,stderrOutput:b.stderrOutput}:b));let c=await e.S.updateServerConfig(d,a);if(c.error){if(f.warn("Failed to update server config:",c.error),h)return await m(),!1;return b(b=>b.map(b=>b.name===a.name?{...b,status:"error",error:c.error}:b)),!1}f.info(`Successfully updated config for server ${a.name}`);try{let c=await e.S.getServerStatus(a.name),d="string"==typeof c?c:c.status,f="object"==typeof c&&c.message?c.message:void 0,g="object"==typeof c&&c.stderrOutput?c.stderrOutput:void 0;b(b=>b.map(b=>b.name===a.name?{...b,status:d,error:f,stderrOutput:g}:b))}catch(b){f.warn(`Failed to get status for server ${a.name} after config update:`,b)}return!0}catch(d){if(f.warn("Failed to update server:",d),h)return await m(),!1;let c=d instanceof Error?d.message:"Unknown error during update";return b(b=>b.map(b=>b.name===a.name?{...b,status:"error",error:c}:b)),!1}},[m]),r=(0,d.useCallback)(async(a,c)=>{let d=c&&c.trim()?c.trim():"";f.debug(`Setting folder for server ${a} to ${d||"(none)"}`);try{let c=await e.S.updateServerConfig(a,{folder:d});if("error"in c&&c.error)return f.warn("Failed to update server folder:",c.error),!1;return b(b=>b.map(b=>b.name===a?{...b,folder:d||void 0}:b)),!0}catch(a){return f.warn("Failed to set server folder:",a),!1}},[]),s=(0,d.useCallback)(async(a,c)=>{f.debug(`Setting favorite for server ${a} to ${c}`);try{let d=await e.S.updateServerConfig(a,{favorite:c});if("error"in d&&d.error)return f.warn("Failed to update server favorite:",d.error),!1;return b(b=>b.map(b=>b.name===a?{...b,favorite:c}:b)),!0}catch(a){return f.warn("Failed to set server favorite:",a),!1}},[]),t=(0,d.useCallback)(async(c,d)=>{f.debug(`Saving environment variables for server: ${c}`,d);try{if(!a.find(a=>a.name===c))return f.warn(`Server not found: ${c}`),!1;let g=await e.S.updateServerConfig(c,{env:d});if(g.error)return f.warn("Failed to update server config:",g.error),!1;return f.debug(`Updating environment variables in UI for server: ${c}`),b(a=>a.map(a=>a.name===c?{...a,env:d}:a)),f.info(`Successfully saved environment variables for server: ${c}`),!0}catch(a){return f.warn("Failed to save environment variables:",a),!1}},[a]);return{servers:a,isLoading:c,loadError:i,connectingServers:k,loadServers:m,toggleServer:n,retryServer:(0,d.useCallback)(async a=>{f.debug(`Retrying server status for: ${a}`);try{let c=await e.S.getServerStatus(a),d="string"==typeof c?c:c.status,f="object"==typeof c&&c.message?c.message:void 0,g="object"==typeof c&&c.stderrOutput?c.stderrOutput:void 0;return b(b=>b.map(b=>b.name===a?{...b,status:d,error:f,stderrOutput:g}:b)),!0}catch(a){return f.warn("Failed to retry server status:",a),!1}},[]),deleteServer:o,addServer:p,updateServer:q,setServerFolder:r,setServerFavorite:s,saveEnv:t}}},88117:(a,b,c)=>{c.d(b,{O:()=>g});var d=c(38301),e=c(28055);let f=(0,c(19815).h)("frontend/hooks/useServerTools");function g(a){let[b,c]=(0,d.useState)([]),[g,h]=(0,d.useState)(!1),[i,j]=(0,d.useState)(null),[k,l]=(0,d.useState)(null),[m,n]=(0,d.useState)(null),[o,p]=(0,d.useState)(0),[q,r]=(0,d.useState)(!1),s=(0,d.useRef)(null),t=(0,d.useCallback)(async(d=!1)=>{if(!a){c([]),j(null);return}if(n(a),!d&&k&&new Date().getTime()-k.getTime()<200&&b.length>0&&a===m)return void f.debug(`Rate limiting tool refresh for server: ${a}`);f.debug(`Loading tools for server: ${a}`),h(!0),j(null);try{let b=await e.S.listServerTools(a);if(a!==m)return void f.debug(`Server changed during tool loading from ${a} to ${m}`);if(b.error)f.warn(`Error loading tools for ${a}:`,b.error),j(b.error),c([]);else{let d=b.tools||[];f.debug(`Loaded ${d.length} tools for ${a}`),c(d),l(new Date),p(0)}}catch(b){if(a!==m)return void f.debug(`Server changed during tool loading from ${a} to ${m}`);f.warn(`Failed to load tools for server ${a}:`,b),j(`Failed to load tools: ${b instanceof Error?b.message:"Unknown error"}`),c([])}finally{a===m&&h(!1)}},[a,k,b.length,m]),u=(0,d.useCallback)(()=>{if(!a)return;s.current&&(clearTimeout(s.current),s.current=null),r(!0);let b=Math.min(1e3*Math.pow(2,o),1e4);return f.debug(`Retrying tool load for ${a} in ${b}ms (attempt ${o+1})`),s.current=setTimeout(()=>{p(a=>a+1),t(!0),r(!1)},b),()=>{s.current&&clearTimeout(s.current)}},[a,o,t]);return{tools:b,isLoading:g||q,error:i,loadTools:t,retryLoadTools:u,isRetrying:q,retryCount:o,testTool:(0,d.useCallback)(async(b,c,d)=>{if(!a)return{success:!1,output:"",error:"No server selected"};f.debug(`Testing tool ${b} on server ${a} with params:`,c);try{let g=await e.S.callTool(a,b,c,d);if(g.error)return f.warn(`Error calling tool ${b}:`,g.error),{success:!1,output:"",error:g.error};return f.debug(`Tool ${b} executed successfully:`,g),{success:!0,output:JSON.stringify(g,null,2)}}catch(a){return f.error(`Exception calling tool ${b}:`,a),{success:!1,output:"",error:a instanceof Error?a.message:"Unknown error occurred"}}},[a])}}}};