flujo-ai 3.31.0 → 3.34.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 (707) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +384 -342
  3. package/.next/app-path-routes-manifest.json +23 -19
  4. package/.next/build-manifest.json +5 -5
  5. package/.next/prerender-manifest.json +24 -24
  6. package/.next/react-loadable-manifest.json +29 -14
  7. package/.next/server/app/_not-found/page.js +1 -1
  8. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  9. package/.next/server/app/_not-found.html +1 -1
  10. package/.next/server/app/_not-found.rsc +2 -2
  11. package/.next/server/app/api/approvals/[id]/route.js +1 -1
  12. package/.next/server/app/api/approvals/[id]/route.js.nft.json +1 -1
  13. package/.next/server/app/api/approvals/[id]/route_client-reference-manifest.js +1 -1
  14. package/.next/server/app/api/approvals/route.js +2 -2
  15. package/.next/server/app/api/approvals/route.js.nft.json +1 -1
  16. package/.next/server/app/api/approvals/route_client-reference-manifest.js +1 -1
  17. package/.next/server/app/api/backup/route.js +1 -1
  18. package/.next/server/app/api/backup/route.js.nft.json +1 -1
  19. package/.next/server/app/api/backup/route_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/browse/route.js +1 -1
  21. package/.next/server/app/api/browse/route.js.nft.json +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 +3 -3
  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.js +1 -1
  27. package/.next/server/app/api/cwd/route.js.nft.json +1 -1
  28. package/.next/server/app/api/cwd/route_client-reference-manifest.js +1 -1
  29. package/.next/server/app/api/encryption/secure/route.js +1 -1
  30. package/.next/server/app/api/encryption/secure/route.js.nft.json +1 -1
  31. package/.next/server/app/api/encryption/secure/route_client-reference-manifest.js +1 -1
  32. package/.next/server/app/api/env/route.js +2 -2
  33. package/.next/server/app/api/env/route.js.nft.json +1 -1
  34. package/.next/server/app/api/env/route_client-reference-manifest.js +1 -1
  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/compile/route.js +1 -1
  45. package/.next/server/app/api/flow/compile/route.js.nft.json +1 -1
  46. package/.next/server/app/api/flow/compile/route_client-reference-manifest.js +1 -1
  47. package/.next/server/app/api/flow/generate/route.js +1 -1
  48. package/.next/server/app/api/flow/generate/route.js.nft.json +1 -1
  49. package/.next/server/app/api/flow/generate/route_client-reference-manifest.js +1 -1
  50. package/.next/server/app/api/flow/generator/route.js +28 -0
  51. package/.next/server/app/api/flow/generator/route.js.nft.json +1 -0
  52. package/.next/server/app/api/flow/generator/route_client-reference-manifest.js +1 -0
  53. package/.next/server/app/api/flow/improve/route.js +1 -1
  54. package/.next/server/app/api/flow/improve/route.js.nft.json +1 -1
  55. package/.next/server/app/api/flow/improve/route_client-reference-manifest.js +1 -1
  56. package/.next/server/app/api/flow/prompt-renderer/route.js +2 -2
  57. package/.next/server/app/api/flow/prompt-renderer/route.js.nft.json +1 -1
  58. package/.next/server/app/api/flow/prompt-renderer/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/flow/quick-chat/route.js +1 -1
  60. package/.next/server/app/api/flow/quick-chat/route.js.nft.json +1 -1
  61. package/.next/server/app/api/flow/quick-chat/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/flow/repair/route.js +1 -1
  63. package/.next/server/app/api/flow/repair/route.js.nft.json +1 -1
  64. package/.next/server/app/api/flow/repair/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/flow/route.js +1 -1
  66. package/.next/server/app/api/flow/route.js.nft.json +1 -1
  67. package/.next/server/app/api/flow/route_client-reference-manifest.js +1 -1
  68. package/.next/server/app/api/git/route.js +1 -1
  69. package/.next/server/app/api/git/route.js.nft.json +1 -1
  70. package/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  71. package/.next/server/app/api/init/route.js +1 -1
  72. package/.next/server/app/api/init/route.js.nft.json +1 -1
  73. package/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  74. package/.next/server/app/api/local-models/capability/route_client-reference-manifest.js +1 -1
  75. package/.next/server/app/api/local-models/pull/route_client-reference-manifest.js +1 -1
  76. package/.next/server/app/api/local-models/suggest/route_client-reference-manifest.js +1 -1
  77. package/.next/server/app/api/mcp/app-sandbox/route.js +1 -1
  78. package/.next/server/app/api/mcp/app-sandbox/route.js.nft.json +1 -1
  79. package/.next/server/app/api/mcp/app-sandbox/route_client-reference-manifest.js +1 -1
  80. package/.next/server/app/api/mcp/cancel/route.js +2 -2
  81. package/.next/server/app/api/mcp/cancel/route.js.nft.json +1 -1
  82. package/.next/server/app/api/mcp/cancel/route_client-reference-manifest.js +1 -1
  83. package/.next/server/app/api/mcp/oauth-capability/route.js +1 -1
  84. package/.next/server/app/api/mcp/oauth-capability/route.js.nft.json +1 -1
  85. package/.next/server/app/api/mcp/oauth-capability/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js +1 -1
  87. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js.nft.json +1 -1
  88. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route_client-reference-manifest.js +1 -1
  89. package/.next/server/app/api/mcp/servers/[name]/prompts/route.js +1 -1
  90. package/.next/server/app/api/mcp/servers/[name]/prompts/route.js.nft.json +1 -1
  91. package/.next/server/app/api/mcp/servers/[name]/prompts/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js +1 -1
  93. package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js.nft.json +1 -1
  94. package/.next/server/app/api/mcp/servers/[name]/resources/read/route_client-reference-manifest.js +1 -1
  95. package/.next/server/app/api/mcp/servers/[name]/resources/route.js +1 -1
  96. package/.next/server/app/api/mcp/servers/[name]/resources/route.js.nft.json +1 -1
  97. package/.next/server/app/api/mcp/servers/[name]/resources/route_client-reference-manifest.js +1 -1
  98. package/.next/server/app/api/mcp/servers/[name]/route.js +1 -1
  99. package/.next/server/app/api/mcp/servers/[name]/route.js.nft.json +1 -1
  100. package/.next/server/app/api/mcp/servers/[name]/route_client-reference-manifest.js +1 -1
  101. package/.next/server/app/api/mcp/servers/[name]/status/route.js +1 -1
  102. package/.next/server/app/api/mcp/servers/[name]/status/route.js.nft.json +1 -1
  103. package/.next/server/app/api/mcp/servers/[name]/status/route_client-reference-manifest.js +1 -1
  104. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js +1 -1
  105. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js.nft.json +1 -1
  106. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route_client-reference-manifest.js +1 -1
  107. package/.next/server/app/api/mcp/servers/[name]/tools/route.js +1 -1
  108. package/.next/server/app/api/mcp/servers/[name]/tools/route.js.nft.json +1 -1
  109. package/.next/server/app/api/mcp/servers/[name]/tools/route_client-reference-manifest.js +1 -1
  110. package/.next/server/app/api/mcp/servers/route.js +1 -1
  111. package/.next/server/app/api/mcp/servers/route.js.nft.json +1 -1
  112. package/.next/server/app/api/mcp/servers/route_client-reference-manifest.js +1 -1
  113. package/.next/server/app/api/mcp/test-connection/route.js +1 -1
  114. package/.next/server/app/api/mcp/test-connection/route.js.nft.json +1 -1
  115. package/.next/server/app/api/mcp/test-connection/route_client-reference-manifest.js +1 -1
  116. package/.next/server/app/api/mcp/test-connection/stream/route.js +1 -1
  117. package/.next/server/app/api/mcp/test-connection/stream/route.js.nft.json +1 -1
  118. package/.next/server/app/api/mcp/test-connection/stream/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/mcp-registry/route.js +2 -2
  120. package/.next/server/app/api/mcp-registry/route.js.nft.json +1 -1
  121. package/.next/server/app/api/mcp-registry/route_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/mcp-registry/spotlight/route.js +1 -1
  123. package/.next/server/app/api/mcp-registry/spotlight/route.js.nft.json +1 -1
  124. package/.next/server/app/api/mcp-registry/spotlight/route_client-reference-manifest.js +1 -1
  125. package/.next/server/app/api/model/[id]/route.js +1 -1
  126. package/.next/server/app/api/model/[id]/route.js.nft.json +1 -1
  127. package/.next/server/app/api/model/[id]/route_client-reference-manifest.js +1 -1
  128. package/.next/server/app/api/model/provider/route.js +2 -2
  129. package/.next/server/app/api/model/provider/route.js.nft.json +1 -1
  130. package/.next/server/app/api/model/provider/route_client-reference-manifest.js +1 -1
  131. package/.next/server/app/api/model/route.js +1 -1
  132. package/.next/server/app/api/model/route.js.nft.json +1 -1
  133. package/.next/server/app/api/model/route_client-reference-manifest.js +1 -1
  134. package/.next/server/app/api/model/test/route.js +2 -2
  135. package/.next/server/app/api/model/test/route.js.nft.json +1 -1
  136. package/.next/server/app/api/model/test/route_client-reference-manifest.js +1 -1
  137. package/.next/server/app/api/oauth/callback/route.js +2 -2
  138. package/.next/server/app/api/oauth/callback/route.js.nft.json +1 -1
  139. package/.next/server/app/api/oauth/callback/route_client-reference-manifest.js +1 -1
  140. package/.next/server/app/api/oauth/initiate/route.js +2 -2
  141. package/.next/server/app/api/oauth/initiate/route.js.nft.json +1 -1
  142. package/.next/server/app/api/oauth/initiate/route_client-reference-manifest.js +1 -1
  143. package/.next/server/app/api/oauth/reset/route.js +2 -2
  144. package/.next/server/app/api/oauth/reset/route.js.nft.json +1 -1
  145. package/.next/server/app/api/oauth/reset/route_client-reference-manifest.js +1 -1
  146. package/.next/server/app/api/packages/build/route.js +1 -1
  147. package/.next/server/app/api/packages/build/route.js.nft.json +1 -1
  148. package/.next/server/app/api/packages/build/route_client-reference-manifest.js +1 -1
  149. package/.next/server/app/api/packages/derive-secrets/route.js +1 -1
  150. package/.next/server/app/api/packages/derive-secrets/route.js.nft.json +1 -1
  151. package/.next/server/app/api/packages/derive-secrets/route_client-reference-manifest.js +1 -1
  152. package/.next/server/app/api/packages/install/route.js +1 -1
  153. package/.next/server/app/api/packages/install/route.js.nft.json +1 -1
  154. package/.next/server/app/api/packages/install/route_client-reference-manifest.js +1 -1
  155. package/.next/server/app/api/packages/install/status/route.js +1 -1
  156. package/.next/server/app/api/packages/install/status/route.js.nft.json +1 -1
  157. package/.next/server/app/api/packages/install/status/route_client-reference-manifest.js +1 -1
  158. package/.next/server/app/api/packages/installed/route.js +1 -1
  159. package/.next/server/app/api/packages/installed/route.js.nft.json +1 -1
  160. package/.next/server/app/api/packages/installed/route_client-reference-manifest.js +1 -1
  161. package/.next/server/app/api/packages/resolve/route.js +1 -1
  162. package/.next/server/app/api/packages/resolve/route.js.nft.json +1 -1
  163. package/.next/server/app/api/packages/resolve/route_client-reference-manifest.js +1 -1
  164. package/.next/server/app/api/packages/scan-targets/route.js +1 -1
  165. package/.next/server/app/api/packages/scan-targets/route.js.nft.json +1 -1
  166. package/.next/server/app/api/packages/scan-targets/route_client-reference-manifest.js +1 -1
  167. package/.next/server/app/api/packages/search/route.js +1 -1
  168. package/.next/server/app/api/packages/search/route.js.nft.json +1 -1
  169. package/.next/server/app/api/packages/search/route_client-reference-manifest.js +1 -1
  170. package/.next/server/app/api/packages/uninstall/route.js +1 -1
  171. package/.next/server/app/api/packages/uninstall/route.js.nft.json +1 -1
  172. package/.next/server/app/api/packages/uninstall/route_client-reference-manifest.js +1 -1
  173. package/.next/server/app/api/planned-executions/[id]/route.js +2 -2
  174. package/.next/server/app/api/planned-executions/[id]/route.js.nft.json +1 -1
  175. package/.next/server/app/api/planned-executions/[id]/route_client-reference-manifest.js +1 -1
  176. package/.next/server/app/api/planned-executions/[id]/run/route.js +2 -2
  177. package/.next/server/app/api/planned-executions/[id]/run/route.js.nft.json +1 -1
  178. package/.next/server/app/api/planned-executions/[id]/run/route_client-reference-manifest.js +1 -1
  179. package/.next/server/app/api/planned-executions/[id]/runs/route.js +2 -2
  180. package/.next/server/app/api/planned-executions/[id]/runs/route.js.nft.json +1 -1
  181. package/.next/server/app/api/planned-executions/[id]/runs/route_client-reference-manifest.js +1 -1
  182. package/.next/server/app/api/planned-executions/preview-schedule/route.js +1 -1
  183. package/.next/server/app/api/planned-executions/preview-schedule/route.js.nft.json +1 -1
  184. package/.next/server/app/api/planned-executions/preview-schedule/route_client-reference-manifest.js +1 -1
  185. package/.next/server/app/api/planned-executions/reconcile/route.js +1 -1
  186. package/.next/server/app/api/planned-executions/reconcile/route.js.nft.json +1 -1
  187. package/.next/server/app/api/planned-executions/reconcile/route_client-reference-manifest.js +1 -1
  188. package/.next/server/app/api/planned-executions/route.js +1 -1
  189. package/.next/server/app/api/planned-executions/route.js.nft.json +1 -1
  190. package/.next/server/app/api/planned-executions/route_client-reference-manifest.js +1 -1
  191. package/.next/server/app/api/registry/auth/resend/route.js +1 -1
  192. package/.next/server/app/api/registry/auth/resend/route.js.nft.json +1 -1
  193. package/.next/server/app/api/registry/auth/resend/route_client-reference-manifest.js +1 -1
  194. package/.next/server/app/api/registry/auth/reset/route.js +1 -1
  195. package/.next/server/app/api/registry/auth/reset/route.js.nft.json +1 -1
  196. package/.next/server/app/api/registry/auth/reset/route_client-reference-manifest.js +1 -1
  197. package/.next/server/app/api/registry/auth/route.js +1 -1
  198. package/.next/server/app/api/registry/auth/route.js.nft.json +1 -1
  199. package/.next/server/app/api/registry/auth/route_client-reference-manifest.js +1 -1
  200. package/.next/server/app/api/registry/feedback/route.js +1 -0
  201. package/.next/server/app/api/registry/feedback/route.js.nft.json +1 -0
  202. package/.next/server/app/api/registry/feedback/route_client-reference-manifest.js +1 -0
  203. package/.next/server/app/api/registry/oauth/callback/route.js +1 -1
  204. package/.next/server/app/api/registry/oauth/callback/route.js.nft.json +1 -1
  205. package/.next/server/app/api/registry/oauth/callback/route_client-reference-manifest.js +1 -1
  206. package/.next/server/app/api/registry/oauth/initiate/route.js +1 -1
  207. package/.next/server/app/api/registry/oauth/initiate/route.js.nft.json +1 -1
  208. package/.next/server/app/api/registry/oauth/initiate/route_client-reference-manifest.js +1 -1
  209. package/.next/server/app/api/registry/packages/route.js +1 -0
  210. package/.next/server/app/api/registry/packages/route.js.nft.json +1 -0
  211. package/.next/server/app/api/registry/packages/route_client-reference-manifest.js +1 -0
  212. package/.next/server/app/api/registry/publish/route.js +1 -1
  213. package/.next/server/app/api/registry/publish/route.js.nft.json +1 -1
  214. package/.next/server/app/api/registry/publish/route_client-reference-manifest.js +1 -1
  215. package/.next/server/app/api/registry/settings/route.js +1 -1
  216. package/.next/server/app/api/registry/settings/route.js.nft.json +1 -1
  217. package/.next/server/app/api/registry/settings/route_client-reference-manifest.js +1 -1
  218. package/.next/server/app/api/restore/route.js +1 -1
  219. package/.next/server/app/api/restore/route.js.nft.json +1 -1
  220. package/.next/server/app/api/restore/route_client-reference-manifest.js +1 -1
  221. package/.next/server/app/api/runs/active/route.js +2 -2
  222. package/.next/server/app/api/runs/active/route.js.nft.json +1 -1
  223. package/.next/server/app/api/runs/active/route_client-reference-manifest.js +1 -1
  224. package/.next/server/app/api/storage/route.js +1 -1
  225. package/.next/server/app/api/storage/route.js.nft.json +1 -1
  226. package/.next/server/app/api/storage/route_client-reference-manifest.js +1 -1
  227. package/.next/server/app/api/telemetry/daily-active/route.js +1 -0
  228. package/.next/server/app/api/telemetry/daily-active/route.js.nft.json +1 -0
  229. package/.next/server/app/api/telemetry/daily-active/route_client-reference-manifest.js +1 -0
  230. package/.next/server/app/api/update/route.js +1 -1
  231. package/.next/server/app/api/update/route.js.nft.json +1 -1
  232. package/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  233. package/.next/server/app/api/waves/route.js +1 -1
  234. package/.next/server/app/api/waves/route.js.nft.json +1 -1
  235. package/.next/server/app/api/waves/route_client-reference-manifest.js +1 -1
  236. package/.next/server/app/api/webhooks/[id]/route.js +1 -1
  237. package/.next/server/app/api/webhooks/[id]/route.js.nft.json +1 -1
  238. package/.next/server/app/api/webhooks/[id]/route_client-reference-manifest.js +1 -1
  239. package/.next/server/app/chat/page.js +58 -10
  240. package/.next/server/app/chat/page.js.nft.json +1 -1
  241. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  242. package/.next/server/app/chat.html +1 -1
  243. package/.next/server/app/chat.rsc +3 -3
  244. package/.next/server/app/docs/page.js +4 -5
  245. package/.next/server/app/docs/page.js.nft.json +1 -1
  246. package/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  247. package/.next/server/app/docs.html +1 -1
  248. package/.next/server/app/docs.rsc +3 -3
  249. package/.next/server/app/executions/page.js +3 -2
  250. package/.next/server/app/executions/page.js.nft.json +1 -1
  251. package/.next/server/app/executions/page_client-reference-manifest.js +1 -1
  252. package/.next/server/app/executions.html +1 -1
  253. package/.next/server/app/executions.rsc +3 -3
  254. package/.next/server/app/flows/page.js +3 -3
  255. package/.next/server/app/flows/page.js.nft.json +1 -1
  256. package/.next/server/app/flows/page_client-reference-manifest.js +1 -1
  257. package/.next/server/app/flows.html +1 -1
  258. package/.next/server/app/flows.rsc +3 -3
  259. package/.next/server/app/index.html +1 -1
  260. package/.next/server/app/index.rsc +3 -3
  261. package/.next/server/app/mcp/page.js +56 -5
  262. package/.next/server/app/mcp/page.js.nft.json +1 -1
  263. package/.next/server/app/mcp/page_client-reference-manifest.js +1 -1
  264. package/.next/server/app/mcp-flows/route.js +1 -1
  265. package/.next/server/app/mcp-flows/route.js.nft.json +1 -1
  266. package/.next/server/app/mcp-flows/route_client-reference-manifest.js +1 -1
  267. package/.next/server/app/mcp-proxy/[server]/route.js +1 -1
  268. package/.next/server/app/mcp-proxy/[server]/route.js.nft.json +1 -1
  269. package/.next/server/app/mcp-proxy/[server]/route_client-reference-manifest.js +1 -1
  270. package/.next/server/app/mcp.html +1 -1
  271. package/.next/server/app/mcp.rsc +3 -3
  272. package/.next/server/app/models/page.js +2 -2
  273. package/.next/server/app/models/page.js.nft.json +1 -1
  274. package/.next/server/app/models/page_client-reference-manifest.js +1 -1
  275. package/.next/server/app/packages/page.js +2 -2
  276. package/.next/server/app/packages/page.js.nft.json +1 -1
  277. package/.next/server/app/packages/page_client-reference-manifest.js +1 -1
  278. package/.next/server/app/packages.html +1 -1
  279. package/.next/server/app/packages.rsc +3 -3
  280. package/.next/server/app/page.js +5 -3
  281. package/.next/server/app/page.js.nft.json +1 -1
  282. package/.next/server/app/page_client-reference-manifest.js +1 -1
  283. package/.next/server/app/settings/page.js +2 -2
  284. package/.next/server/app/settings/page.js.nft.json +1 -1
  285. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  286. package/.next/server/app/settings.html +1 -1
  287. package/.next/server/app/settings.rsc +3 -3
  288. package/.next/server/app/v1/chat/completions/route.js +1 -1
  289. package/.next/server/app/v1/chat/completions/route.js.nft.json +1 -1
  290. package/.next/server/app/v1/chat/completions/route_client-reference-manifest.js +1 -1
  291. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js +2 -2
  292. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js.nft.json +1 -1
  293. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route_client-reference-manifest.js +1 -1
  294. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js +2 -2
  295. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js.nft.json +1 -1
  296. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route_client-reference-manifest.js +1 -1
  297. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js +1 -1
  298. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js.nft.json +1 -1
  299. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route_client-reference-manifest.js +1 -1
  300. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js +1 -1
  301. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js.nft.json +1 -1
  302. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route_client-reference-manifest.js +1 -1
  303. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js +2 -2
  304. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js.nft.json +1 -1
  305. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route_client-reference-manifest.js +1 -1
  306. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js +2 -2
  307. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js.nft.json +1 -1
  308. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route_client-reference-manifest.js +1 -1
  309. package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route.js +2 -2
  310. package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route.js.nft.json +1 -1
  311. package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route_client-reference-manifest.js +1 -1
  312. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route.js +1 -1
  313. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route.js.nft.json +1 -1
  314. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route_client-reference-manifest.js +1 -1
  315. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js +1 -1
  316. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js.nft.json +1 -1
  317. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route_client-reference-manifest.js +1 -1
  318. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js +2 -2
  319. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js.nft.json +1 -1
  320. package/.next/server/app/v1/chat/conversations/[conversationId]/route_client-reference-manifest.js +1 -1
  321. package/.next/server/app/v1/chat/conversations/route.js +2 -2
  322. package/.next/server/app/v1/chat/conversations/route.js.nft.json +1 -1
  323. package/.next/server/app/v1/chat/conversations/route_client-reference-manifest.js +1 -1
  324. package/.next/server/app/v1/chat/events/route.js +3 -3
  325. package/.next/server/app/v1/chat/events/route.js.nft.json +1 -1
  326. package/.next/server/app/v1/chat/events/route_client-reference-manifest.js +1 -1
  327. package/.next/server/app/v1/models/route.js +2 -2
  328. package/.next/server/app/v1/models/route.js.nft.json +1 -1
  329. package/.next/server/app/v1/models/route_client-reference-manifest.js +1 -1
  330. package/.next/server/app/waves/page.js +3 -3
  331. package/.next/server/app/waves/page.js.nft.json +1 -1
  332. package/.next/server/app/waves/page_client-reference-manifest.js +1 -1
  333. package/.next/server/app/waves.html +1 -1
  334. package/.next/server/app/waves.rsc +3 -3
  335. package/.next/server/app-paths-manifest.json +23 -19
  336. package/.next/server/chunks/1114.js +1 -1
  337. package/.next/server/chunks/1226.js +1 -1
  338. package/.next/server/chunks/1227.js +1 -0
  339. package/.next/server/chunks/1314.js +1 -1
  340. package/.next/server/chunks/1439.js +1 -0
  341. package/.next/server/chunks/1578.js +1 -1
  342. package/.next/server/chunks/1634.js +1 -1
  343. package/.next/server/chunks/166.js +5 -5
  344. package/.next/server/chunks/1664.js +2 -0
  345. package/.next/server/chunks/180.js +12 -0
  346. package/.next/server/chunks/227.js +1 -5
  347. package/.next/server/chunks/2273.js +2 -2
  348. package/.next/server/chunks/2372.js +2 -0
  349. package/.next/server/chunks/2859.js +1 -1
  350. package/.next/server/chunks/3128.js +4 -4
  351. package/.next/server/chunks/3653.js +2 -0
  352. package/.next/server/chunks/3717.js +1 -0
  353. package/.next/server/chunks/3855.js +1 -0
  354. package/.next/server/chunks/4013.js +1 -0
  355. package/.next/server/chunks/4308.js +4 -0
  356. package/.next/server/chunks/{4685.js → 4466.js} +1 -1
  357. package/.next/server/chunks/4551.js +1 -1
  358. package/.next/server/chunks/4663.js +1 -0
  359. package/.next/server/chunks/4771.js +1 -1
  360. package/.next/server/chunks/4822.js +1 -0
  361. package/.next/server/chunks/5067.js +1 -1
  362. package/.next/server/chunks/519.js +2 -0
  363. package/.next/server/chunks/5285.js +1 -0
  364. package/.next/server/chunks/5309.js +78 -0
  365. package/.next/server/chunks/544.js +28 -27
  366. package/.next/server/chunks/5463.js +1 -1
  367. package/.next/server/chunks/5544.js +5 -5
  368. package/.next/server/chunks/5703.js +2 -0
  369. package/.next/server/chunks/6034.js +1 -1
  370. package/.next/server/chunks/{5708.js → 6041.js} +3 -4
  371. package/.next/server/chunks/6226.js +1 -1
  372. package/.next/server/chunks/6747.js +435 -0
  373. package/.next/server/chunks/6967.js +82 -0
  374. package/.next/server/chunks/{5548.js → 7058.js} +2 -2
  375. package/.next/server/chunks/{4566.js → 7069.js} +3 -3
  376. package/.next/server/chunks/{2388.js → 7104.js} +1 -1
  377. package/.next/server/chunks/7519.js +1 -0
  378. package/.next/server/chunks/7628.js +1 -0
  379. package/.next/server/chunks/7630.js +11 -0
  380. package/.next/server/chunks/{3030.js → 7674.js} +1 -1
  381. package/.next/server/chunks/{2866.js → 7891.js} +2 -2
  382. package/.next/server/chunks/793.js +3 -3
  383. package/.next/server/chunks/7965.js +39 -0
  384. package/.next/server/chunks/{6404.js → 7993.js} +2 -2
  385. package/.next/server/chunks/8284.js +42 -0
  386. package/.next/server/chunks/8645.js +1 -1
  387. package/.next/server/chunks/87.js +1 -0
  388. package/.next/server/chunks/8739.js +1 -2
  389. package/.next/server/chunks/{3912.js → 9085.js} +2 -2
  390. package/.next/server/chunks/9235.js +29 -0
  391. package/.next/server/chunks/9724.js +3 -3
  392. package/.next/server/chunks/9983.js +1 -1
  393. package/.next/server/functions-config-manifest.json +1 -1
  394. package/.next/server/instrumentation.js +1 -1
  395. package/.next/server/instrumentation.js.nft.json +1 -1
  396. package/.next/server/middleware-build-manifest.js +1 -1
  397. package/.next/server/middleware-manifest.json +5 -5
  398. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  399. package/.next/server/pages/404.html +1 -1
  400. package/.next/server/pages/500.html +1 -1
  401. package/.next/server/server-reference-manifest.js +1 -1
  402. package/.next/server/server-reference-manifest.json +1 -1
  403. package/.next/static/Zz_Vh59XdtLIPcf-PxCpo/_buildManifest.js +1 -0
  404. package/.next/static/chunks/1675-773454288de4309d.js +1 -0
  405. package/.next/static/chunks/2005.4eea65c00d9a29cd.js +1 -0
  406. package/.next/static/chunks/2318-13ef0d3048e97834.js +1 -0
  407. package/.next/static/chunks/3429-34fb1a84aed96703.js +1 -0
  408. package/.next/static/chunks/361.bb75b03b740930cd.js +1 -0
  409. package/.next/static/chunks/3772-20197853c04a6993.js +1 -0
  410. package/.next/static/chunks/422-61b173ba64cf0c94.js +1 -0
  411. package/.next/static/chunks/{3189-fa8ec6d719d5e72b.js → 4386-e9621d3c94969a68.js} +1 -1
  412. package/.next/static/chunks/4555-c9070f8c79bccfad.js +39 -0
  413. package/.next/static/chunks/4919-6c8a48e3cc642349.js +1 -0
  414. package/.next/static/chunks/4929-150b03595474c9d8.js +1 -0
  415. package/.next/static/chunks/5733-1419095a28c1ddc3.js +1 -0
  416. package/.next/static/chunks/639-90ed75d402dc872b.js +1 -0
  417. package/.next/static/chunks/{3452-a639f121f2953f50.js → 6428-951188daa6f74b86.js} +3 -3
  418. package/.next/static/chunks/6430-8c6dac4a758119f2.js +1 -0
  419. package/.next/static/chunks/6539-118a0084e0bfae34.js +1 -0
  420. package/.next/static/chunks/6733-c9029143901e62e9.js +1 -0
  421. package/.next/static/chunks/7264-91d1fa99abcd91ad.js +1 -0
  422. package/.next/static/chunks/7328-c8a51bb8c7470d77.js +1 -0
  423. package/.next/static/chunks/7391-5a0abd837ba241f5.js +1 -0
  424. package/.next/static/chunks/7561-2b366ddcbc3cc0ec.js +1 -0
  425. package/.next/static/chunks/8124-4a80e3201b8e51b0.js +1 -0
  426. package/.next/static/chunks/{2969.eb9ff8cd2a5034b0.js → 8345.bc5534ec13abc9ee.js} +1 -1
  427. package/.next/static/chunks/8404-5aa8ea49197b98b8.js +1 -0
  428. package/.next/static/chunks/{8405.73e8be2c8e5b55c5.js → 8405.a425f94b6b13d2be.js} +1 -1
  429. package/.next/static/chunks/8551-a28272acfda62ac9.js +1 -0
  430. package/.next/static/chunks/8650-5294c6ed1173b014.js +1 -0
  431. package/.next/static/chunks/{9164-840f056a0e11d979.js → 9164-de1d167d87614a6d.js} +1 -1
  432. package/.next/static/chunks/9203-786f457ecf60b49c.js +1 -0
  433. package/.next/static/chunks/9345-11d6e48d892b1862.js +8 -0
  434. package/.next/static/chunks/9562-f8371be653010627.js +1 -0
  435. package/.next/static/chunks/981-dd289e60d81da0d1.js +1 -0
  436. package/.next/static/chunks/9951-566fc6b05c12209e.js +1 -0
  437. package/.next/static/chunks/app/api/approvals/[id]/route-9ea2990be4b67136.js +1 -0
  438. package/.next/static/chunks/app/api/approvals/route-9ea2990be4b67136.js +1 -0
  439. package/.next/static/chunks/app/api/backup/route-9ea2990be4b67136.js +1 -0
  440. package/.next/static/chunks/app/api/browse/route-9ea2990be4b67136.js +1 -0
  441. package/.next/static/chunks/app/api/bugs/enhance/route-9ea2990be4b67136.js +1 -0
  442. package/.next/static/chunks/app/api/cwd/route-9ea2990be4b67136.js +1 -0
  443. package/.next/static/chunks/app/api/encryption/secure/route-9ea2990be4b67136.js +1 -0
  444. package/.next/static/chunks/app/api/env/route-9ea2990be4b67136.js +1 -0
  445. package/.next/static/chunks/app/api/flow/[id]/route-9ea2990be4b67136.js +1 -0
  446. package/.next/static/chunks/app/api/flow/[id]/versions/[versionId]/route-9ea2990be4b67136.js +1 -0
  447. package/.next/static/chunks/app/api/flow/[id]/versions/route-9ea2990be4b67136.js +1 -0
  448. package/.next/static/chunks/app/api/flow/compile/route-9ea2990be4b67136.js +1 -0
  449. package/.next/static/chunks/app/api/flow/generate/route-9ea2990be4b67136.js +1 -0
  450. package/.next/static/chunks/app/api/flow/generator/route-9ea2990be4b67136.js +1 -0
  451. package/.next/static/chunks/app/api/flow/improve/route-9ea2990be4b67136.js +1 -0
  452. package/.next/static/chunks/app/api/flow/prompt-renderer/route-9ea2990be4b67136.js +1 -0
  453. package/.next/static/chunks/app/api/flow/quick-chat/route-9ea2990be4b67136.js +1 -0
  454. package/.next/static/chunks/app/api/flow/repair/route-9ea2990be4b67136.js +1 -0
  455. package/.next/static/chunks/app/api/flow/route-9ea2990be4b67136.js +1 -0
  456. package/.next/static/chunks/app/api/git/route-9ea2990be4b67136.js +1 -0
  457. package/.next/static/chunks/app/api/init/route-9ea2990be4b67136.js +1 -0
  458. package/.next/static/chunks/app/api/local-models/capability/route-9ea2990be4b67136.js +1 -0
  459. package/.next/static/chunks/app/api/local-models/pull/route-9ea2990be4b67136.js +1 -0
  460. package/.next/static/chunks/app/api/local-models/suggest/route-9ea2990be4b67136.js +1 -0
  461. package/.next/static/chunks/app/api/mcp/app-sandbox/route-9ea2990be4b67136.js +1 -0
  462. package/.next/static/chunks/app/api/mcp/cancel/route-9ea2990be4b67136.js +1 -0
  463. package/.next/static/chunks/app/api/mcp/oauth-capability/route-9ea2990be4b67136.js +1 -0
  464. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-9ea2990be4b67136.js +1 -0
  465. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-9ea2990be4b67136.js +1 -0
  466. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-9ea2990be4b67136.js +1 -0
  467. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-9ea2990be4b67136.js +1 -0
  468. package/.next/static/chunks/app/api/mcp/servers/[name]/route-9ea2990be4b67136.js +1 -0
  469. package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-9ea2990be4b67136.js +1 -0
  470. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-9ea2990be4b67136.js +1 -0
  471. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-9ea2990be4b67136.js +1 -0
  472. package/.next/static/chunks/app/api/mcp/servers/route-9ea2990be4b67136.js +1 -0
  473. package/.next/static/chunks/app/api/mcp/test-connection/route-9ea2990be4b67136.js +1 -0
  474. package/.next/static/chunks/app/api/mcp/test-connection/stream/route-9ea2990be4b67136.js +1 -0
  475. package/.next/static/chunks/app/api/mcp-registry/route-9ea2990be4b67136.js +1 -0
  476. package/.next/static/chunks/app/api/mcp-registry/spotlight/route-9ea2990be4b67136.js +1 -0
  477. package/.next/static/chunks/app/api/model/[id]/route-9ea2990be4b67136.js +1 -0
  478. package/.next/static/chunks/app/api/model/provider/route-9ea2990be4b67136.js +1 -0
  479. package/.next/static/chunks/app/api/model/route-9ea2990be4b67136.js +1 -0
  480. package/.next/static/chunks/app/api/model/test/route-9ea2990be4b67136.js +1 -0
  481. package/.next/static/chunks/app/api/oauth/callback/route-9ea2990be4b67136.js +1 -0
  482. package/.next/static/chunks/app/api/oauth/initiate/route-9ea2990be4b67136.js +1 -0
  483. package/.next/static/chunks/app/api/oauth/reset/route-9ea2990be4b67136.js +1 -0
  484. package/.next/static/chunks/app/api/packages/build/route-9ea2990be4b67136.js +1 -0
  485. package/.next/static/chunks/app/api/packages/derive-secrets/route-9ea2990be4b67136.js +1 -0
  486. package/.next/static/chunks/app/api/packages/install/route-9ea2990be4b67136.js +1 -0
  487. package/.next/static/chunks/app/api/packages/install/status/route-9ea2990be4b67136.js +1 -0
  488. package/.next/static/chunks/app/api/packages/installed/route-9ea2990be4b67136.js +1 -0
  489. package/.next/static/chunks/app/api/packages/resolve/route-9ea2990be4b67136.js +1 -0
  490. package/.next/static/chunks/app/api/packages/scan-targets/route-9ea2990be4b67136.js +1 -0
  491. package/.next/static/chunks/app/api/packages/search/route-9ea2990be4b67136.js +1 -0
  492. package/.next/static/chunks/app/api/packages/uninstall/route-9ea2990be4b67136.js +1 -0
  493. package/.next/static/chunks/app/api/planned-executions/[id]/route-9ea2990be4b67136.js +1 -0
  494. package/.next/static/chunks/app/api/planned-executions/[id]/run/route-9ea2990be4b67136.js +1 -0
  495. package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-9ea2990be4b67136.js +1 -0
  496. package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-9ea2990be4b67136.js +1 -0
  497. package/.next/static/chunks/app/api/planned-executions/reconcile/route-9ea2990be4b67136.js +1 -0
  498. package/.next/static/chunks/app/api/planned-executions/route-9ea2990be4b67136.js +1 -0
  499. package/.next/static/chunks/app/api/registry/auth/resend/route-9ea2990be4b67136.js +1 -0
  500. package/.next/static/chunks/app/api/registry/auth/reset/route-9ea2990be4b67136.js +1 -0
  501. package/.next/static/chunks/app/api/registry/auth/route-9ea2990be4b67136.js +1 -0
  502. package/.next/static/chunks/app/api/registry/feedback/route-9ea2990be4b67136.js +1 -0
  503. package/.next/static/chunks/app/api/registry/oauth/callback/route-9ea2990be4b67136.js +1 -0
  504. package/.next/static/chunks/app/api/registry/oauth/initiate/route-9ea2990be4b67136.js +1 -0
  505. package/.next/static/chunks/app/api/registry/packages/route-9ea2990be4b67136.js +1 -0
  506. package/.next/static/chunks/app/api/registry/publish/route-9ea2990be4b67136.js +1 -0
  507. package/.next/static/chunks/app/api/registry/settings/route-9ea2990be4b67136.js +1 -0
  508. package/.next/static/chunks/app/api/restore/route-9ea2990be4b67136.js +1 -0
  509. package/.next/static/chunks/app/api/runs/active/route-9ea2990be4b67136.js +1 -0
  510. package/.next/static/chunks/app/api/storage/route-9ea2990be4b67136.js +1 -0
  511. package/.next/static/chunks/app/api/telemetry/daily-active/route-9ea2990be4b67136.js +1 -0
  512. package/.next/static/chunks/app/api/update/route-9ea2990be4b67136.js +1 -0
  513. package/.next/static/chunks/app/api/waves/route-9ea2990be4b67136.js +1 -0
  514. package/.next/static/chunks/app/api/webhooks/[id]/route-9ea2990be4b67136.js +1 -0
  515. package/.next/static/chunks/app/chat/page-bc7807593b8b7394.js +1 -0
  516. package/.next/static/chunks/app/docs/page-3b9ce48854b2147d.js +1 -0
  517. package/.next/static/chunks/app/executions/page-8296fd69c439ccee.js +1 -0
  518. package/.next/static/chunks/app/flows/page-87fb466e491fc068.js +1 -0
  519. package/.next/static/chunks/app/layout-abed1f211e03152f.js +1 -0
  520. package/.next/static/chunks/app/mcp/page-1648e6fde0c41461.js +1 -0
  521. package/.next/static/chunks/app/mcp-flows/route-9ea2990be4b67136.js +1 -0
  522. package/.next/static/chunks/app/mcp-proxy/[server]/route-9ea2990be4b67136.js +1 -0
  523. package/.next/static/chunks/app/models/page-a5e2437356b06db8.js +1 -0
  524. package/.next/static/chunks/app/packages/page-fba5696f33d9cdfb.js +1 -0
  525. package/.next/static/chunks/app/page-2f9da78a4891731a.js +1 -0
  526. package/.next/static/chunks/app/settings/page-2fc3a70bfd25c48b.js +1 -0
  527. package/.next/static/chunks/app/v1/chat/completions/route-9ea2990be4b67136.js +1 -0
  528. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-9ea2990be4b67136.js +1 -0
  529. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-9ea2990be4b67136.js +1 -0
  530. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-9ea2990be4b67136.js +1 -0
  531. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-9ea2990be4b67136.js +1 -0
  532. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-9ea2990be4b67136.js +1 -0
  533. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-9ea2990be4b67136.js +1 -0
  534. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/inject/route-9ea2990be4b67136.js +1 -0
  535. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/resources/route-9ea2990be4b67136.js +1 -0
  536. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-9ea2990be4b67136.js +1 -0
  537. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-9ea2990be4b67136.js +1 -0
  538. package/.next/static/chunks/app/v1/chat/conversations/route-9ea2990be4b67136.js +1 -0
  539. package/.next/static/chunks/app/v1/chat/events/route-9ea2990be4b67136.js +1 -0
  540. package/.next/static/chunks/app/v1/models/route-9ea2990be4b67136.js +1 -0
  541. package/.next/static/chunks/app/waves/{page-3cf4b47b12662196.js → page-dc99a16141dd902b.js} +1 -1
  542. package/.next/static/chunks/webpack-d5d737ff6a86674f.js +1 -0
  543. package/.next/trace +10 -10
  544. package/.next/types/app/api/flow/generator/route.ts +347 -0
  545. package/.next/types/app/api/registry/feedback/route.ts +347 -0
  546. package/.next/types/app/api/registry/packages/route.ts +347 -0
  547. package/.next/types/app/api/telemetry/daily-active/route.ts +347 -0
  548. package/.next/types/routes.d.ts +5 -1
  549. package/.next/types/validator.ts +36 -0
  550. package/README.md +58 -18
  551. package/next.config.mjs +2 -2
  552. package/package.json +3 -2
  553. package/.next/server/chunks/2180.js +0 -1
  554. package/.next/server/chunks/237.js +0 -1
  555. package/.next/server/chunks/3392.js +0 -82
  556. package/.next/server/chunks/3570.js +0 -372
  557. package/.next/server/chunks/4366.js +0 -2
  558. package/.next/server/chunks/4961.js +0 -2
  559. package/.next/server/chunks/5040.js +0 -53
  560. package/.next/server/chunks/510.js +0 -1
  561. package/.next/server/chunks/5150.js +0 -1
  562. package/.next/server/chunks/5561.js +0 -1
  563. package/.next/server/chunks/5705.js +0 -1
  564. package/.next/server/chunks/5829.js +0 -1
  565. package/.next/server/chunks/694.js +0 -3
  566. package/.next/server/chunks/7579.js +0 -83
  567. package/.next/server/chunks/7724.js +0 -1
  568. package/.next/server/chunks/8034.js +0 -1
  569. package/.next/server/chunks/8037.js +0 -1
  570. package/.next/server/chunks/8192.js +0 -12
  571. package/.next/server/chunks/826.js +0 -2
  572. package/.next/server/chunks/8366.js +0 -90
  573. package/.next/server/chunks/848.js +0 -39
  574. package/.next/server/chunks/8615.js +0 -1
  575. package/.next/server/chunks/8851.js +0 -1
  576. package/.next/server/chunks/9313.js +0 -1
  577. package/.next/server/chunks/9537.js +0 -39
  578. package/.next/server/chunks/9576.js +0 -2
  579. package/.next/server/chunks/9632.js +0 -1
  580. package/.next/server/chunks/9671.js +0 -1
  581. package/.next/server/chunks/9857.js +0 -1
  582. package/.next/static/chunks/1496-d478bce7d7c85080.js +0 -1
  583. package/.next/static/chunks/1572-b663a83bba28a0a1.js +0 -8
  584. package/.next/static/chunks/1641-e5ff8f112da0a335.js +0 -1
  585. package/.next/static/chunks/1988-bd73f26184e930c1.js +0 -1
  586. package/.next/static/chunks/2266-d812473724cc6643.js +0 -1
  587. package/.next/static/chunks/3089.a0856f8093b90939.js +0 -1
  588. package/.next/static/chunks/3560-5bdceef09b50e1c3.js +0 -1
  589. package/.next/static/chunks/3672-cd86ace43288da79.js +0 -1
  590. package/.next/static/chunks/3711-0050bb4d345c2c9c.js +0 -1
  591. package/.next/static/chunks/4147-20897d83b3cd3978.js +0 -39
  592. package/.next/static/chunks/435-17c79f3b9f8dd38d.js +0 -1
  593. package/.next/static/chunks/469-1f043fe082d9f475.js +0 -1
  594. package/.next/static/chunks/4740-62814d07b2b7f760.js +0 -1
  595. package/.next/static/chunks/5441-cb0c31de8bce65c3.js +0 -1
  596. package/.next/static/chunks/7111-44538f8a64241b74.js +0 -1
  597. package/.next/static/chunks/8041-05830e887c133085.js +0 -1
  598. package/.next/static/chunks/812-dfe7ba07ddb7a565.js +0 -1
  599. package/.next/static/chunks/8401-0f39d91810180a88.js +0 -1
  600. package/.next/static/chunks/8404-14ef0345dc401ac5.js +0 -1
  601. package/.next/static/chunks/8678-c6c6be2672f337f6.js +0 -1
  602. package/.next/static/chunks/8834-faf121e257b517d5.js +0 -1
  603. package/.next/static/chunks/8855-f802599c4af81cca.js +0 -1
  604. package/.next/static/chunks/9562-5494feecd8c6f7a3.js +0 -1
  605. package/.next/static/chunks/app/api/approvals/[id]/route-1a4c9e7a416ccbcf.js +0 -1
  606. package/.next/static/chunks/app/api/approvals/route-1a4c9e7a416ccbcf.js +0 -1
  607. package/.next/static/chunks/app/api/backup/route-1a4c9e7a416ccbcf.js +0 -1
  608. package/.next/static/chunks/app/api/browse/route-1a4c9e7a416ccbcf.js +0 -1
  609. package/.next/static/chunks/app/api/bugs/enhance/route-1a4c9e7a416ccbcf.js +0 -1
  610. package/.next/static/chunks/app/api/cwd/route-1a4c9e7a416ccbcf.js +0 -1
  611. package/.next/static/chunks/app/api/encryption/secure/route-1a4c9e7a416ccbcf.js +0 -1
  612. package/.next/static/chunks/app/api/env/route-1a4c9e7a416ccbcf.js +0 -1
  613. package/.next/static/chunks/app/api/flow/[id]/route-1a4c9e7a416ccbcf.js +0 -1
  614. package/.next/static/chunks/app/api/flow/[id]/versions/[versionId]/route-1a4c9e7a416ccbcf.js +0 -1
  615. package/.next/static/chunks/app/api/flow/[id]/versions/route-1a4c9e7a416ccbcf.js +0 -1
  616. package/.next/static/chunks/app/api/flow/compile/route-1a4c9e7a416ccbcf.js +0 -1
  617. package/.next/static/chunks/app/api/flow/generate/route-1a4c9e7a416ccbcf.js +0 -1
  618. package/.next/static/chunks/app/api/flow/improve/route-1a4c9e7a416ccbcf.js +0 -1
  619. package/.next/static/chunks/app/api/flow/prompt-renderer/route-1a4c9e7a416ccbcf.js +0 -1
  620. package/.next/static/chunks/app/api/flow/quick-chat/route-1a4c9e7a416ccbcf.js +0 -1
  621. package/.next/static/chunks/app/api/flow/repair/route-1a4c9e7a416ccbcf.js +0 -1
  622. package/.next/static/chunks/app/api/flow/route-1a4c9e7a416ccbcf.js +0 -1
  623. package/.next/static/chunks/app/api/git/route-1a4c9e7a416ccbcf.js +0 -1
  624. package/.next/static/chunks/app/api/init/route-1a4c9e7a416ccbcf.js +0 -1
  625. package/.next/static/chunks/app/api/local-models/capability/route-1a4c9e7a416ccbcf.js +0 -1
  626. package/.next/static/chunks/app/api/local-models/pull/route-1a4c9e7a416ccbcf.js +0 -1
  627. package/.next/static/chunks/app/api/local-models/suggest/route-1a4c9e7a416ccbcf.js +0 -1
  628. package/.next/static/chunks/app/api/mcp/app-sandbox/route-1a4c9e7a416ccbcf.js +0 -1
  629. package/.next/static/chunks/app/api/mcp/cancel/route-1a4c9e7a416ccbcf.js +0 -1
  630. package/.next/static/chunks/app/api/mcp/oauth-capability/route-1a4c9e7a416ccbcf.js +0 -1
  631. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-1a4c9e7a416ccbcf.js +0 -1
  632. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-1a4c9e7a416ccbcf.js +0 -1
  633. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-1a4c9e7a416ccbcf.js +0 -1
  634. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-1a4c9e7a416ccbcf.js +0 -1
  635. package/.next/static/chunks/app/api/mcp/servers/[name]/route-1a4c9e7a416ccbcf.js +0 -1
  636. package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-1a4c9e7a416ccbcf.js +0 -1
  637. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-1a4c9e7a416ccbcf.js +0 -1
  638. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-1a4c9e7a416ccbcf.js +0 -1
  639. package/.next/static/chunks/app/api/mcp/servers/route-1a4c9e7a416ccbcf.js +0 -1
  640. package/.next/static/chunks/app/api/mcp/test-connection/route-1a4c9e7a416ccbcf.js +0 -1
  641. package/.next/static/chunks/app/api/mcp/test-connection/stream/route-1a4c9e7a416ccbcf.js +0 -1
  642. package/.next/static/chunks/app/api/mcp-registry/route-1a4c9e7a416ccbcf.js +0 -1
  643. package/.next/static/chunks/app/api/mcp-registry/spotlight/route-1a4c9e7a416ccbcf.js +0 -1
  644. package/.next/static/chunks/app/api/model/[id]/route-1a4c9e7a416ccbcf.js +0 -1
  645. package/.next/static/chunks/app/api/model/provider/route-1a4c9e7a416ccbcf.js +0 -1
  646. package/.next/static/chunks/app/api/model/route-1a4c9e7a416ccbcf.js +0 -1
  647. package/.next/static/chunks/app/api/model/test/route-1a4c9e7a416ccbcf.js +0 -1
  648. package/.next/static/chunks/app/api/oauth/callback/route-1a4c9e7a416ccbcf.js +0 -1
  649. package/.next/static/chunks/app/api/oauth/initiate/route-1a4c9e7a416ccbcf.js +0 -1
  650. package/.next/static/chunks/app/api/oauth/reset/route-1a4c9e7a416ccbcf.js +0 -1
  651. package/.next/static/chunks/app/api/packages/build/route-1a4c9e7a416ccbcf.js +0 -1
  652. package/.next/static/chunks/app/api/packages/derive-secrets/route-1a4c9e7a416ccbcf.js +0 -1
  653. package/.next/static/chunks/app/api/packages/install/route-1a4c9e7a416ccbcf.js +0 -1
  654. package/.next/static/chunks/app/api/packages/install/status/route-1a4c9e7a416ccbcf.js +0 -1
  655. package/.next/static/chunks/app/api/packages/installed/route-1a4c9e7a416ccbcf.js +0 -1
  656. package/.next/static/chunks/app/api/packages/resolve/route-1a4c9e7a416ccbcf.js +0 -1
  657. package/.next/static/chunks/app/api/packages/scan-targets/route-1a4c9e7a416ccbcf.js +0 -1
  658. package/.next/static/chunks/app/api/packages/search/route-1a4c9e7a416ccbcf.js +0 -1
  659. package/.next/static/chunks/app/api/packages/uninstall/route-1a4c9e7a416ccbcf.js +0 -1
  660. package/.next/static/chunks/app/api/planned-executions/[id]/route-1a4c9e7a416ccbcf.js +0 -1
  661. package/.next/static/chunks/app/api/planned-executions/[id]/run/route-1a4c9e7a416ccbcf.js +0 -1
  662. package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-1a4c9e7a416ccbcf.js +0 -1
  663. package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-1a4c9e7a416ccbcf.js +0 -1
  664. package/.next/static/chunks/app/api/planned-executions/reconcile/route-1a4c9e7a416ccbcf.js +0 -1
  665. package/.next/static/chunks/app/api/planned-executions/route-1a4c9e7a416ccbcf.js +0 -1
  666. package/.next/static/chunks/app/api/registry/auth/resend/route-1a4c9e7a416ccbcf.js +0 -1
  667. package/.next/static/chunks/app/api/registry/auth/reset/route-1a4c9e7a416ccbcf.js +0 -1
  668. package/.next/static/chunks/app/api/registry/auth/route-1a4c9e7a416ccbcf.js +0 -1
  669. package/.next/static/chunks/app/api/registry/oauth/callback/route-1a4c9e7a416ccbcf.js +0 -1
  670. package/.next/static/chunks/app/api/registry/oauth/initiate/route-1a4c9e7a416ccbcf.js +0 -1
  671. package/.next/static/chunks/app/api/registry/publish/route-1a4c9e7a416ccbcf.js +0 -1
  672. package/.next/static/chunks/app/api/registry/settings/route-1a4c9e7a416ccbcf.js +0 -1
  673. package/.next/static/chunks/app/api/restore/route-1a4c9e7a416ccbcf.js +0 -1
  674. package/.next/static/chunks/app/api/runs/active/route-1a4c9e7a416ccbcf.js +0 -1
  675. package/.next/static/chunks/app/api/storage/route-1a4c9e7a416ccbcf.js +0 -1
  676. package/.next/static/chunks/app/api/update/route-1a4c9e7a416ccbcf.js +0 -1
  677. package/.next/static/chunks/app/api/waves/route-1a4c9e7a416ccbcf.js +0 -1
  678. package/.next/static/chunks/app/api/webhooks/[id]/route-1a4c9e7a416ccbcf.js +0 -1
  679. package/.next/static/chunks/app/chat/page-558edb21321a32d0.js +0 -1
  680. package/.next/static/chunks/app/docs/page-fc30f613607b8a26.js +0 -1
  681. package/.next/static/chunks/app/executions/page-e71689c7256af1e8.js +0 -1
  682. package/.next/static/chunks/app/flows/page-e90e8d7b4c1bd1c8.js +0 -1
  683. package/.next/static/chunks/app/layout-038b35b382eef11d.js +0 -1
  684. package/.next/static/chunks/app/mcp/page-6041156fc67ef361.js +0 -1
  685. package/.next/static/chunks/app/mcp-flows/route-1a4c9e7a416ccbcf.js +0 -1
  686. package/.next/static/chunks/app/mcp-proxy/[server]/route-1a4c9e7a416ccbcf.js +0 -1
  687. package/.next/static/chunks/app/models/page-d16f2721e7a93b43.js +0 -1
  688. package/.next/static/chunks/app/packages/page-c6b0e7aa95bc1064.js +0 -1
  689. package/.next/static/chunks/app/page-5c7fccd019942d46.js +0 -1
  690. package/.next/static/chunks/app/settings/page-e3d9ffd69d16873a.js +0 -1
  691. package/.next/static/chunks/app/v1/chat/completions/route-1a4c9e7a416ccbcf.js +0 -1
  692. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-1a4c9e7a416ccbcf.js +0 -1
  693. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-1a4c9e7a416ccbcf.js +0 -1
  694. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-1a4c9e7a416ccbcf.js +0 -1
  695. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-1a4c9e7a416ccbcf.js +0 -1
  696. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-1a4c9e7a416ccbcf.js +0 -1
  697. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-1a4c9e7a416ccbcf.js +0 -1
  698. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/inject/route-1a4c9e7a416ccbcf.js +0 -1
  699. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/resources/route-1a4c9e7a416ccbcf.js +0 -1
  700. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-1a4c9e7a416ccbcf.js +0 -1
  701. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-1a4c9e7a416ccbcf.js +0 -1
  702. package/.next/static/chunks/app/v1/chat/conversations/route-1a4c9e7a416ccbcf.js +0 -1
  703. package/.next/static/chunks/app/v1/chat/events/route-1a4c9e7a416ccbcf.js +0 -1
  704. package/.next/static/chunks/app/v1/models/route-1a4c9e7a416ccbcf.js +0 -1
  705. package/.next/static/chunks/webpack-2d8e0c13c0b865fe.js +0 -1
  706. package/.next/static/eaxwKaaFHlA1_FLDIyFGi/_buildManifest.js +0 -1
  707. /package/.next/static/{eaxwKaaFHlA1_FLDIyFGi → Zz_Vh59XdtLIPcf-PxCpo}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- "use strict";exports.id=1314,exports.ids=[1314],exports.modules={28055:(a,b,c)=>{c.d(b,{S:()=>g});var d=c(50648);let e=(0,c(19815).h)("frontend/services/mcp/index");class f{async loadServerConfigs(){try{let a=await fetch("/api/mcp/servers"),b=await a.json();if(!a.ok||b&&b.error){let a=b&&b.error||"Failed to load server configs";return e.warn("Failed to load server configs:",a),{error:a}}return b}catch(a){return e.warn("Failed to load server configs:",a),{error:"Failed to load server configs"}}}async listServerTools(a){try{let b=this.toolsCache.get(a),c=Date.now();if(b&&c-b.timestamp<this.CACHE_TTL)return e.debug(`Using cached tools for server ${a}`),{tools:b.tools};let d=await fetch(`/api/mcp/servers/${encodeURIComponent(a)}/tools`),f=await d.json();if(f.error)return e.warn(`Error listing tools for server ${a}:`,f.error),{tools:[],error:f.error};let g=Array.isArray(f.tools)?f.tools:[];return this.toolsCache.set(a,{tools:g,timestamp:c}),{tools:g}}catch(b){return e.warn(`Failed to list tools for server ${a}:`,b),{tools:[],error:`Failed to list tools: ${b instanceof Error?b.message:"Unknown error"}`}}}clearToolsCache(a){a?(this.toolsCache.delete(a),e.debug(`Cleared tools cache for server ${a}`)):(this.toolsCache.clear(),e.debug("Cleared all tools cache"))}async listServerResources(a){try{let b=this.resourcesCache.get(a),c=Date.now();if(b&&c-b.timestamp<this.CACHE_TTL)return e.debug(`Using cached resources for server ${a}`),b.data;let d=await fetch(`/api/mcp/servers/${encodeURIComponent(a)}/resources`),f=await d.json(),g={resources:Array.isArray(f.resources)?f.resources:[],resourceTemplates:Array.isArray(f.resourceTemplates)?f.resourceTemplates:[],error:f.error};return g.error||this.resourcesCache.set(a,{data:g,timestamp:c}),g}catch(b){return e.warn(`Failed to list resources for server ${a}:`,b),{resources:[],resourceTemplates:[],error:`Failed to list resources: ${b instanceof Error?b.message:"Unknown error"}`}}}async readResource(a,b){try{let c=await fetch(`/api/mcp/servers/${encodeURIComponent(a)}/resources/read?uri=${encodeURIComponent(b)}`);return await c.json()}catch(c){return e.warn(`Failed to read resource ${b} on server ${a}:`,c),{success:!1,error:"Failed to read resource"}}}async listServerPrompts(a){try{let b=this.promptsCache.get(a),c=Date.now();if(b&&c-b.timestamp<this.CACHE_TTL)return e.debug(`Using cached prompts for server ${a}`),{prompts:b.prompts};let d=await fetch(`/api/mcp/servers/${encodeURIComponent(a)}/prompts`),f=await d.json();if(f.error)return e.warn(`Error listing prompts for server ${a}:`,f.error),{prompts:[],error:f.error};let g=Array.isArray(f.prompts)?f.prompts:[];return this.promptsCache.set(a,{prompts:g,timestamp:c}),{prompts:g}}catch(b){return e.warn(`Failed to list prompts for server ${a}:`,b),{prompts:[],error:`Failed to list prompts: ${b instanceof Error?b.message:"Unknown error"}`}}}async getPrompt(a,b,c){try{let d=await fetch(`/api/mcp/servers/${encodeURIComponent(a)}/prompts/get`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:b,arguments:c})});return await d.json()}catch(c){return e.warn(`Failed to get prompt ${b} on server ${a}:`,c),{success:!1,error:"Failed to get prompt"}}}clearCapabilitiesCache(a){a?(this.resourcesCache.delete(a),this.promptsCache.delete(a)):(this.resourcesCache.clear(),this.promptsCache.clear())}checkResourceListVersion(a,b){let c=this.resourceListVersions.get(a)??-1;return b>c&&(this.resourceListVersions.set(a,b),this.resourcesCache.delete(a),e.debug(`checkResourceListVersion: cache invalidated for ${a} (${c} -> ${b})`),!0)}async callTool(a,b,c,d){try{let e=await fetch(`/api/mcp/servers/${encodeURIComponent(a)}/tools/${encodeURIComponent(b)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({args:c,timeout:d})});return await e.json()}catch(c){return e.warn(`Failed to call tool ${b} on server ${a}:`,c),{error:"Failed to call tool"}}}async updateServerConfig(a,b){try{let c=await fetch(`/api/mcp/servers/${encodeURIComponent(a)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(b)}),d=await c.json();if(c.ok)return e.info(`Successfully updated server config for ${a}`),{success:!0,data:d};if(void 0!==b.disabled)return e.info(`Config update for ${a} treated as success for toggle operation`),{success:!0,data:{...b,name:a},_originalError:d.error};return e.warn(`Failed to update server config for ${a}:`,d.error),{success:!1,error:d.error}}catch(b){return e.warn(`Failed to update server config for ${a}:`,b),{error:"Failed to update server config"}}}async testConnection(a,b){try{let c=await fetch("/api/mcp/test-connection",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...a,storedName:b})});return await c.json()}catch(b){return e.warn(`Failed to test connection for ${a.name}:`,b),{success:!1,error:`Failed to reach the FLUJO backend to run the connection test: ${b instanceof Error?b.message:"Unknown error"}`}}}async testConnectionStreaming(a,b,c){try{let f=await fetch("/api/mcp/test-connection/stream",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...a,storedName:c})});if(!f.ok||!f.body)return e.warn(`Streaming test-connection unavailable (status ${f.status}); falling back`),this.testConnection(a,c);let g=null;if(await (0,d.z)(f,a=>{b(a),"result"===a.type&&(g={success:a.success,error:a.error,requiresAuthentication:a.requiresAuthentication,oauthCapable:a.oauthCapable,data:a.data})}),g)return g;return e.warn("Streaming test-connection ended without a result event"),{success:!1,error:"The connection test stream ended unexpectedly without a result."}}catch(b){return e.warn(`Streaming test connection failed for ${a.name}; falling back to non-streaming:`,b),this.testConnection(a,c)}}async probeOAuthCapability(a){try{let b=await fetch("/api/mcp/oauth-capability",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({serverUrl:a})});if(!b.ok)return{oauthCapable:!1};return await b.json()}catch(b){return e.warn(`Failed to probe OAuth capability for ${a}:`,b),{oauthCapable:!1}}}async getServerStatus(a){try{let b=await fetch(`/api/mcp/servers/${encodeURIComponent(a)}/status`,{headers:{Accept:"application/json"}}),c=await b.json();if(c.error)return e.warn(`Error getting status for server ${a}:`,c.error),{status:"error",message:c.error};return c}catch(b){return e.warn(`Failed to get status for server ${a}:`,b),{status:"error",message:`Failed to get server status: ${b instanceof Error?b.message:"Unknown error"}`}}}async deleteServerConfig(a){try{let b=await fetch(`/api/mcp/servers/${encodeURIComponent(a)}`,{method:"DELETE"});return await b.json()}catch(b){return e.warn(`Failed to delete server config for ${a}:`,b),{error:"Failed to delete server config"}}}async retryServer(a){return e.debug(`Retrying server status for: ${a}`),this.getServerStatus(a)}async restartServer(a){e.debug(`Restarting server: ${a}`);try{let b=await this.updateServerConfig(a,{disabled:!0});if(b.error)return e.warn(`Failed to disable server ${a} during restart:`,b.error),{error:`Failed to restart server: ${b.error}`};await new Promise(a=>setTimeout(a,1e3));let c=await this.updateServerConfig(a,{disabled:!1});if(c.error)return e.warn(`Failed to enable server ${a} during restart:`,c.error),{error:`Failed to restart server: ${c.error}`};return e.info(`Successfully restarted server ${a}`),{success:!0}}catch(b){return e.warn(`Failed to restart server ${a}:`,b),{error:`Failed to restart server: ${b instanceof Error?b.message:"Unknown error"}`}}}constructor(){this.toolsCache=new Map,this.resourcesCache=new Map,this.promptsCache=new Map,this.CACHE_TTL=6e4,this.resourceListVersions=new Map}}let g=new f},50648:(a,b,c)=>{c.d(b,{z:()=>d});async function d(a,b){if(!a.body||"function"!=typeof a.body.getReader)throw Error("Response has no readable body to stream");let c=a.body.getReader(),d=new TextDecoder,e=function(){let a="",b=(a,b)=>{let c=a.trim();if(c)try{b.push(JSON.parse(c))}catch{}};return{push(c){let d;a+=c;let e=[];for(;(d=a.indexOf("\n"))>=0;)b(a.slice(0,d),e),a=a.slice(d+1);return e},flush(){let c=[];return b(a,c),a="",c}}}();try{for(;;){let{value:a,done:f}=await c.read();if(f)break;for(let c of e.push(d.decode(a,{stream:!0})))b(c)}let a=d.decode();if(a)for(let c of e.push(a))b(c);for(let a of e.flush())b(a)}finally{try{c.releaseLock()}catch{}}}},61615:(a,b,c)=>{c.d(b,{default:()=>g});var d=c(21124);c(38301);var e=c(81637),f=c(8521);let g=({size:a="medium",color:b="primary",className:c="",sx:g={}})=>{let h="white"===b?{color:"#fff",...g}:g;return(0,d.jsxs)(e.default,{component:"span",sx:{display:"inline-block",lineHeight:0,...h},className:c,role:"status",children:[(0,d.jsx)(f.default,{size:{small:16,medium:24,large:36}[a],color:"white"===b?"inherit":b,"aria-hidden":"true"}),(0,d.jsx)(e.default,{component:"span",sx:{position:"absolute",width:"1px",height:"1px",padding:0,margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:0},children:"Loading..."})]})}},83434:(a,b,c)=>{c.d(b,{N:()=>e,X:()=>d}),(0,c(19815).h)("frontend/services/model");let d=()=>{throw Error("ModelService can only be used in browser environment")},e=new Proxy({},{get(a,b){let c=d(),e=c[b];return"function"==typeof e?e.bind(c):e}})}};
1
+ "use strict";exports.id=1314,exports.ids=[1314],exports.modules={28055:(a,b,c)=>{c.d(b,{S:()=>g});var d=c(50648);let e=(0,c(19815).h)("frontend/services/mcp/index");class f{async loadServerConfigs(){try{let a=await fetch("/api/mcp/servers"),b=await a.json();if(!a.ok||b&&b.error){let a=b&&b.error||"Failed to load server configs";return e.warn("Failed to load server configs:",a),{error:a}}return b}catch(a){return e.warn("Failed to load server configs:",a),{error:"Failed to load server configs"}}}async listServerTools(a){try{let b=this.toolsCache.get(a),c=Date.now();if(b&&c-b.timestamp<this.CACHE_TTL)return e.debug(`Using cached tools for server ${a}`),{tools:b.tools};let d=await fetch(`/api/mcp/servers/${encodeURIComponent(a)}/tools`),f=await d.json();if(f.error)return e.warn(`Error listing tools for server ${a}:`,f.error),{tools:[],error:f.error};let g=Array.isArray(f.tools)?f.tools:[];return this.toolsCache.set(a,{tools:g,timestamp:c}),{tools:g}}catch(b){return e.warn(`Failed to list tools for server ${a}:`,b),{tools:[],error:`Failed to list tools: ${b instanceof Error?b.message:"Unknown error"}`}}}clearToolsCache(a){a?(this.toolsCache.delete(a),e.debug(`Cleared tools cache for server ${a}`)):(this.toolsCache.clear(),e.debug("Cleared all tools cache"))}async listServerResources(a){try{let b=this.resourcesCache.get(a),c=Date.now();if(b&&c-b.timestamp<this.CACHE_TTL)return e.debug(`Using cached resources for server ${a}`),b.data;let d=await fetch(`/api/mcp/servers/${encodeURIComponent(a)}/resources`),f=await d.json(),g={resources:Array.isArray(f.resources)?f.resources:[],resourceTemplates:Array.isArray(f.resourceTemplates)?f.resourceTemplates:[],error:f.error};return g.error||this.resourcesCache.set(a,{data:g,timestamp:c}),g}catch(b){return e.warn(`Failed to list resources for server ${a}:`,b),{resources:[],resourceTemplates:[],error:`Failed to list resources: ${b instanceof Error?b.message:"Unknown error"}`}}}async readResource(a,b){try{let c=await fetch(`/api/mcp/servers/${encodeURIComponent(a)}/resources/read?uri=${encodeURIComponent(b)}`);return await c.json()}catch(c){return e.warn(`Failed to read resource ${b} on server ${a}:`,c),{success:!1,error:"Failed to read resource"}}}async listServerPrompts(a){try{let b=this.promptsCache.get(a),c=Date.now();if(b&&c-b.timestamp<this.CACHE_TTL)return e.debug(`Using cached prompts for server ${a}`),{prompts:b.prompts};let d=await fetch(`/api/mcp/servers/${encodeURIComponent(a)}/prompts`),f=await d.json();if(f.error)return e.warn(`Error listing prompts for server ${a}:`,f.error),{prompts:[],error:f.error};let g=Array.isArray(f.prompts)?f.prompts:[];return this.promptsCache.set(a,{prompts:g,timestamp:c}),{prompts:g}}catch(b){return e.warn(`Failed to list prompts for server ${a}:`,b),{prompts:[],error:`Failed to list prompts: ${b instanceof Error?b.message:"Unknown error"}`}}}async getPrompt(a,b,c){try{let d=await fetch(`/api/mcp/servers/${encodeURIComponent(a)}/prompts/get`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:b,arguments:c})});return await d.json()}catch(c){return e.warn(`Failed to get prompt ${b} on server ${a}:`,c),{success:!1,error:"Failed to get prompt"}}}clearCapabilitiesCache(a){a?(this.resourcesCache.delete(a),this.promptsCache.delete(a)):(this.resourcesCache.clear(),this.promptsCache.clear())}checkResourceListVersion(a,b){let c=this.resourceListVersions.get(a)??-1;return b>c&&(this.resourceListVersions.set(a,b),this.resourcesCache.delete(a),e.debug(`checkResourceListVersion: cache invalidated for ${a} (${c} -> ${b})`),!0)}async callTool(a,b,c,d){try{let e=await fetch(`/api/mcp/servers/${encodeURIComponent(a)}/tools/${encodeURIComponent(b)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({args:c,timeout:d})});return await e.json()}catch(c){return e.warn(`Failed to call tool ${b} on server ${a}:`,c),{error:"Failed to call tool"}}}async readResourceFromApp(a,b){try{let c=await fetch(`/api/mcp/servers/${encodeURIComponent(a)}/resources/read?uri=${encodeURIComponent(b)}&source=app`);return{...await c.json(),httpStatus:c.status}}catch(c){return e.warn(`MCP App failed to read resource ${b} on server ${a}:`,c),{success:!1,error:"Failed to read MCP App resource"}}}async callToolFromApp(a,b,c,d,f){try{let e=await fetch(`/api/mcp/servers/${encodeURIComponent(a)}/tools/${encodeURIComponent(b)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({args:c,timeout:d,source:"app"}),...f?{signal:f}:{}});return{...await e.json(),httpStatus:e.status}}catch(c){return e.warn(`Failed to call MCP App tool ${b} on server ${a}:`,c),{success:!1,error:"Failed to call MCP App tool"}}}async updateServerConfig(a,b){try{let c=await fetch(`/api/mcp/servers/${encodeURIComponent(a)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(b)}),d=await c.json();if(c.ok)return e.info(`Successfully updated server config for ${a}`),{success:!0,data:d};if(void 0!==b.disabled){e.info(`Config update for ${a} treated as success for toggle operation`);let c={...b,name:a};return{success:!0,data:c,_originalError:d.error}}return e.warn(`Failed to update server config for ${a}:`,d.error),{success:!1,error:d.error}}catch(b){return e.warn(`Failed to update server config for ${a}:`,b),{error:"Failed to update server config"}}}async testConnection(a,b){try{let c=await fetch("/api/mcp/test-connection",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...a,storedName:b})});return await c.json()}catch(b){return e.warn(`Failed to test connection for ${a.name}:`,b),{success:!1,error:`Failed to reach the FLUJO backend to run the connection test: ${b instanceof Error?b.message:"Unknown error"}`}}}async testConnectionStreaming(a,b,c){try{let f=await fetch("/api/mcp/test-connection/stream",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...a,storedName:c})});if(!f.ok||!f.body)return e.warn(`Streaming test-connection unavailable (status ${f.status}); falling back`),this.testConnection(a,c);let g=null;if(await (0,d.z)(f,a=>{b(a),"result"===a.type&&(g={success:a.success,error:a.error,requiresAuthentication:a.requiresAuthentication,oauthCapable:a.oauthCapable,data:a.data})}),g)return g;return e.warn("Streaming test-connection ended without a result event"),{success:!1,error:"The connection test stream ended unexpectedly without a result."}}catch(b){return e.warn(`Streaming test connection failed for ${a.name}; falling back to non-streaming:`,b),this.testConnection(a,c)}}async probeOAuthCapability(a){try{let b=await fetch("/api/mcp/oauth-capability",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({serverUrl:a})});if(!b.ok)return{oauthCapable:!1};return await b.json()}catch(b){return e.warn(`Failed to probe OAuth capability for ${a}:`,b),{oauthCapable:!1}}}async getServerStatus(a){try{let b=await fetch(`/api/mcp/servers/${encodeURIComponent(a)}/status`,{headers:{Accept:"application/json"}}),c=await b.json();if(c.error)return e.warn(`Error getting status for server ${a}:`,c.error),{status:"error",message:c.error};return c}catch(b){return e.warn(`Failed to get status for server ${a}:`,b),{status:"error",message:`Failed to get server status: ${b instanceof Error?b.message:"Unknown error"}`}}}async deleteServerConfig(a){try{let b=await fetch(`/api/mcp/servers/${encodeURIComponent(a)}`,{method:"DELETE"});return await b.json()}catch(b){return e.warn(`Failed to delete server config for ${a}:`,b),{error:"Failed to delete server config"}}}async retryServer(a){return e.debug(`Retrying server status for: ${a}`),this.getServerStatus(a)}async restartServer(a){e.debug(`Restarting server: ${a}`);try{let b=await this.updateServerConfig(a,{disabled:!0});if(b.error)return e.warn(`Failed to disable server ${a} during restart:`,b.error),{error:`Failed to restart server: ${b.error}`};await new Promise(a=>setTimeout(a,1e3));let c=await this.updateServerConfig(a,{disabled:!1});if(c.error)return e.warn(`Failed to enable server ${a} during restart:`,c.error),{error:`Failed to restart server: ${c.error}`};return e.info(`Successfully restarted server ${a}`),{success:!0}}catch(b){return e.warn(`Failed to restart server ${a}:`,b),{error:`Failed to restart server: ${b instanceof Error?b.message:"Unknown error"}`}}}constructor(){this.toolsCache=new Map,this.resourcesCache=new Map,this.promptsCache=new Map,this.CACHE_TTL=6e4,this.resourceListVersions=new Map}}let g=new f},50648:(a,b,c)=>{c.d(b,{z:()=>d});async function d(a,b){if(!a.body||"function"!=typeof a.body.getReader)throw Error("Response has no readable body to stream");let c=a.body.getReader(),d=new TextDecoder,e=function(){let a="",b=(a,b)=>{let c=a.trim();if(c)try{b.push(JSON.parse(c))}catch{}};return{push(c){let d;a+=c;let e=[];for(;(d=a.indexOf("\n"))>=0;)b(a.slice(0,d),e),a=a.slice(d+1);return e},flush(){let c=[];return b(a,c),a="",c}}}();try{for(;;){let{value:a,done:f}=await c.read();if(f)break;for(let c of e.push(d.decode(a,{stream:!0})))b(c)}let a=d.decode();if(a)for(let c of e.push(a))b(c);for(let a of e.flush())b(a)}finally{try{c.releaseLock()}catch{}}}},61615:(a,b,c)=>{c.d(b,{default:()=>g});var d=c(21124);c(38301);var e=c(81637),f=c(8521);let g=({size:a="medium",color:b="primary",className:c="",sx:g={}})=>{let h="white"===b?{color:"#fff",...g}:g;return(0,d.jsxs)(e.default,{component:"span",sx:{display:"inline-block",lineHeight:0,...h},className:c,role:"status",children:[(0,d.jsx)(f.default,{size:{small:16,medium:24,large:36}[a],color:"white"===b?"inherit":b,"aria-hidden":"true"}),(0,d.jsx)(e.default,{component:"span",sx:{position:"absolute",width:"1px",height:"1px",padding:0,margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:0},children:"Loading..."})]})}},83434:(a,b,c)=>{c.d(b,{N:()=>e,X:()=>d}),(0,c(19815).h)("frontend/services/model");let d=()=>{throw Error("ModelService can only be used in browser environment")},e=new Proxy({},{get(a,b){let c=d(),e=c[b];return"function"==typeof e?e.bind(c):e}})}};
@@ -0,0 +1 @@
1
+ "use strict";exports.id=1439,exports.ids=[1439],exports.modules={41893:(a,b,c)=>{c.d(b,{A:()=>y});var d=c(38301),e=c(43249),f=c(2783),g=c(37489),h=c(11801),i=c(21124);let j=(0,h.A)((0,i.jsx)("path",{d:"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z"}),"Cancel");var k=c(26636),l=c(6638),m=c(14328),n=c(18168),o=c(68333),p=c(54716),q=c(6636),r=c(29565),s=c(33105);function t(a){return(0,s.Ay)("MuiChip",a)}let u=(0,r.A)("MuiChip",["root","sizeSmall","sizeMedium","colorDefault","colorError","colorInfo","colorPrimary","colorSecondary","colorSuccess","colorWarning","disabled","clickable","clickableColorPrimary","clickableColorSecondary","deletable","deletableColorPrimary","deletableColorSecondary","outlined","filled","outlinedPrimary","outlinedSecondary","filledPrimary","filledSecondary","avatar","avatarSmall","avatarMedium","avatarColorPrimary","avatarColorSecondary","icon","iconSmall","iconMedium","iconColorPrimary","iconColorSecondary","label","labelSmall","labelMedium","deleteIcon","deleteIconSmall","deleteIconMedium","deleteIconColorPrimary","deleteIconColorSecondary","deleteIconOutlinedColorPrimary","deleteIconOutlinedColorSecondary","deleteIconFilledColorPrimary","deleteIconFilledColorSecondary","focusVisible"]),v=(0,n.Ay)("div",{name:"MuiChip",slot:"Root",overridesResolver:(a,b)=>{let{ownerState:c}=a,{color:d,iconColor:e,clickable:f,onDelete:g,size:h,variant:i}=c;return[{[`& .${u.avatar}`]:b.avatar},{[`& .${u.avatar}`]:b[`avatar${(0,l.A)(h)}`]},{[`& .${u.avatar}`]:b[`avatarColor${(0,l.A)(d)}`]},{[`& .${u.icon}`]:b.icon},{[`& .${u.icon}`]:b[`icon${(0,l.A)(h)}`]},{[`& .${u.icon}`]:b[`iconColor${(0,l.A)(e)}`]},{[`& .${u.deleteIcon}`]:b.deleteIcon},{[`& .${u.deleteIcon}`]:b[`deleteIcon${(0,l.A)(h)}`]},{[`& .${u.deleteIcon}`]:b[`deleteIconColor${(0,l.A)(d)}`]},{[`& .${u.deleteIcon}`]:b[`deleteIcon${(0,l.A)(i)}Color${(0,l.A)(d)}`]},b.root,b[`size${(0,l.A)(h)}`],b[`color${(0,l.A)(d)}`],f&&b.clickable,f&&"default"!==d&&b[`clickableColor${(0,l.A)(d)})`],g&&b.deletable,g&&"default"!==d&&b[`deletableColor${(0,l.A)(d)}`],b[i],b[`${i}${(0,l.A)(d)}`]]}})((0,o.A)(({theme:a})=>{let b="light"===a.palette.mode?a.palette.grey[700]:a.palette.grey[300];return{maxWidth:"100%",fontFamily:a.typography.fontFamily,fontSize:a.typography.pxToRem(13),display:"inline-flex",alignItems:"center",justifyContent:"center",height:32,color:(a.vars||a).palette.text.primary,backgroundColor:(a.vars||a).palette.action.selected,borderRadius:16,whiteSpace:"nowrap",transition:a.transitions.create(["background-color","box-shadow"]),cursor:"unset",outline:0,textDecoration:"none",border:0,padding:0,verticalAlign:"middle",boxSizing:"border-box",[`&.${u.disabled}`]:{opacity:(a.vars||a).palette.action.disabledOpacity,pointerEvents:"none"},[`& .${u.avatar}`]:{marginLeft:5,marginRight:-6,width:24,height:24,color:a.vars?a.vars.palette.Chip.defaultAvatarColor:b,fontSize:a.typography.pxToRem(12)},[`& .${u.avatarColorPrimary}`]:{color:(a.vars||a).palette.primary.contrastText,backgroundColor:(a.vars||a).palette.primary.dark},[`& .${u.avatarColorSecondary}`]:{color:(a.vars||a).palette.secondary.contrastText,backgroundColor:(a.vars||a).palette.secondary.dark},[`& .${u.avatarSmall}`]:{marginLeft:4,marginRight:-4,width:18,height:18,fontSize:a.typography.pxToRem(10)},[`& .${u.icon}`]:{marginLeft:5,marginRight:-6},[`& .${u.deleteIcon}`]:{WebkitTapHighlightColor:"transparent",color:a.vars?`rgba(${a.vars.palette.text.primaryChannel} / 0.26)`:(0,g.X4)(a.palette.text.primary,.26),fontSize:22,cursor:"pointer",margin:"0 5px 0 -6px","&:hover":{color:a.vars?`rgba(${a.vars.palette.text.primaryChannel} / 0.4)`:(0,g.X4)(a.palette.text.primary,.4)}},variants:[{props:{size:"small"},style:{height:24,[`& .${u.icon}`]:{fontSize:18,marginLeft:4,marginRight:-4},[`& .${u.deleteIcon}`]:{fontSize:16,marginRight:4,marginLeft:-4}}},...Object.entries(a.palette).filter((0,p.A)(["contrastText"])).map(([b])=>({props:{color:b},style:{backgroundColor:(a.vars||a).palette[b].main,color:(a.vars||a).palette[b].contrastText,[`& .${u.deleteIcon}`]:{color:a.vars?`rgba(${a.vars.palette[b].contrastTextChannel} / 0.7)`:(0,g.X4)(a.palette[b].contrastText,.7),"&:hover, &:active":{color:(a.vars||a).palette[b].contrastText}}}})),{props:a=>a.iconColor===a.color,style:{[`& .${u.icon}`]:{color:a.vars?a.vars.palette.Chip.defaultIconColor:b}}},{props:a=>a.iconColor===a.color&&"default"!==a.color,style:{[`& .${u.icon}`]:{color:"inherit"}}},{props:{onDelete:!0},style:{[`&.${u.focusVisible}`]:{backgroundColor:a.vars?`rgba(${a.vars.palette.action.selectedChannel} / calc(${a.vars.palette.action.selectedOpacity} + ${a.vars.palette.action.focusOpacity}))`:(0,g.X4)(a.palette.action.selected,a.palette.action.selectedOpacity+a.palette.action.focusOpacity)}}},...Object.entries(a.palette).filter((0,p.A)(["dark"])).map(([b])=>({props:{color:b,onDelete:!0},style:{[`&.${u.focusVisible}`]:{background:(a.vars||a).palette[b].dark}}})),{props:{clickable:!0},style:{userSelect:"none",WebkitTapHighlightColor:"transparent",cursor:"pointer","&:hover":{backgroundColor:a.vars?`rgba(${a.vars.palette.action.selectedChannel} / calc(${a.vars.palette.action.selectedOpacity} + ${a.vars.palette.action.hoverOpacity}))`:(0,g.X4)(a.palette.action.selected,a.palette.action.selectedOpacity+a.palette.action.hoverOpacity)},[`&.${u.focusVisible}`]:{backgroundColor:a.vars?`rgba(${a.vars.palette.action.selectedChannel} / calc(${a.vars.palette.action.selectedOpacity} + ${a.vars.palette.action.focusOpacity}))`:(0,g.X4)(a.palette.action.selected,a.palette.action.selectedOpacity+a.palette.action.focusOpacity)},"&:active":{boxShadow:(a.vars||a).shadows[1]}}},...Object.entries(a.palette).filter((0,p.A)(["dark"])).map(([b])=>({props:{color:b,clickable:!0},style:{[`&:hover, &.${u.focusVisible}`]:{backgroundColor:(a.vars||a).palette[b].dark}}})),{props:{variant:"outlined"},style:{backgroundColor:"transparent",border:a.vars?`1px solid ${a.vars.palette.Chip.defaultBorder}`:`1px solid ${"light"===a.palette.mode?a.palette.grey[400]:a.palette.grey[700]}`,[`&.${u.clickable}:hover`]:{backgroundColor:(a.vars||a).palette.action.hover},[`&.${u.focusVisible}`]:{backgroundColor:(a.vars||a).palette.action.focus},[`& .${u.avatar}`]:{marginLeft:4},[`& .${u.avatarSmall}`]:{marginLeft:2},[`& .${u.icon}`]:{marginLeft:4},[`& .${u.iconSmall}`]:{marginLeft:2},[`& .${u.deleteIcon}`]:{marginRight:5},[`& .${u.deleteIconSmall}`]:{marginRight:3}}},...Object.entries(a.palette).filter((0,p.A)()).map(([b])=>({props:{variant:"outlined",color:b},style:{color:(a.vars||a).palette[b].main,border:`1px solid ${a.vars?`rgba(${a.vars.palette[b].mainChannel} / 0.7)`:(0,g.X4)(a.palette[b].main,.7)}`,[`&.${u.clickable}:hover`]:{backgroundColor:a.vars?`rgba(${a.vars.palette[b].mainChannel} / ${a.vars.palette.action.hoverOpacity})`:(0,g.X4)(a.palette[b].main,a.palette.action.hoverOpacity)},[`&.${u.focusVisible}`]:{backgroundColor:a.vars?`rgba(${a.vars.palette[b].mainChannel} / ${a.vars.palette.action.focusOpacity})`:(0,g.X4)(a.palette[b].main,a.palette.action.focusOpacity)},[`& .${u.deleteIcon}`]:{color:a.vars?`rgba(${a.vars.palette[b].mainChannel} / 0.7)`:(0,g.X4)(a.palette[b].main,.7),"&:hover, &:active":{color:(a.vars||a).palette[b].main}}}}))]}})),w=(0,n.Ay)("span",{name:"MuiChip",slot:"Label",overridesResolver:(a,b)=>{let{ownerState:c}=a,{size:d}=c;return[b.label,b[`label${(0,l.A)(d)}`]]}})({overflow:"hidden",textOverflow:"ellipsis",paddingLeft:12,paddingRight:12,whiteSpace:"nowrap",variants:[{props:{variant:"outlined"},style:{paddingLeft:11,paddingRight:11}},{props:{size:"small"},style:{paddingLeft:8,paddingRight:8}},{props:{size:"small",variant:"outlined"},style:{paddingLeft:7,paddingRight:7}}]});function x(a){return"Backspace"===a.key||"Delete"===a.key}let y=d.forwardRef(function(a,b){let c=(0,q.b)({props:a,name:"MuiChip"}),{avatar:g,className:h,clickable:n,color:o="default",component:p,deleteIcon:r,disabled:s=!1,icon:u,label:y,onClick:z,onDelete:A,onKeyDown:B,onKeyUp:C,size:D="medium",variant:E="filled",tabIndex:F,skipFocusWhenDisabled:G=!1,...H}=c,I=d.useRef(null),J=(0,k.A)(I,b),K=a=>{a.stopPropagation(),A&&A(a)},L=!1!==n&&!!z||n,M=L||A?m.A:p||"div",N={...c,component:M,disabled:s,size:D,color:o,iconColor:d.isValidElement(u)&&u.props.color||o,onDelete:!!A,clickable:L,variant:E},O=(a=>{let{classes:b,disabled:c,size:d,color:e,iconColor:g,onDelete:h,clickable:i,variant:j}=a,k={root:["root",j,c&&"disabled",`size${(0,l.A)(d)}`,`color${(0,l.A)(e)}`,i&&"clickable",i&&`clickableColor${(0,l.A)(e)}`,h&&"deletable",h&&`deletableColor${(0,l.A)(e)}`,`${j}${(0,l.A)(e)}`],label:["label",`label${(0,l.A)(d)}`],avatar:["avatar",`avatar${(0,l.A)(d)}`,`avatarColor${(0,l.A)(e)}`],icon:["icon",`icon${(0,l.A)(d)}`,`iconColor${(0,l.A)(g)}`],deleteIcon:["deleteIcon",`deleteIcon${(0,l.A)(d)}`,`deleteIconColor${(0,l.A)(e)}`,`deleteIcon${(0,l.A)(j)}Color${(0,l.A)(e)}`]};return(0,f.A)(k,t,b)})(N),P=M===m.A?{component:p||"div",focusVisibleClassName:O.focusVisible,...A&&{disableRipple:!0}}:{},Q=null;A&&(Q=r&&d.isValidElement(r)?d.cloneElement(r,{className:(0,e.A)(r.props.className,O.deleteIcon),onClick:K}):(0,i.jsx)(j,{className:(0,e.A)(O.deleteIcon),onClick:K}));let R=null;g&&d.isValidElement(g)&&(R=d.cloneElement(g,{className:(0,e.A)(O.avatar,g.props.className)}));let S=null;return u&&d.isValidElement(u)&&(S=d.cloneElement(u,{className:(0,e.A)(O.icon,u.props.className)})),(0,i.jsxs)(v,{as:M,className:(0,e.A)(O.root,h),disabled:!!L&&!!s||void 0,onClick:z,onKeyDown:a=>{a.currentTarget===a.target&&x(a)&&a.preventDefault(),B&&B(a)},onKeyUp:a=>{a.currentTarget===a.target&&A&&x(a)&&A(a),C&&C(a)},ref:J,tabIndex:G&&s?-1:F,ownerState:N,...P,...H,children:[R||S,(0,i.jsx)(w,{className:(0,e.A)(O.label),ownerState:N,children:y}),Q]})})},91059:(a,b,c)=>{c.d(b,{A:()=>p});var d=c(38301),e=c(43249),f=c(2783),g=c(37489),h=c(18168),i=c(68333),j=c(6636),k=c(93895),l=c(21124);let m=(0,h.Ay)("div",{name:"MuiDivider",slot:"Root",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[b.root,c.absolute&&b.absolute,b[c.variant],c.light&&b.light,"vertical"===c.orientation&&b.vertical,c.flexItem&&b.flexItem,c.children&&b.withChildren,c.children&&"vertical"===c.orientation&&b.withChildrenVertical,"right"===c.textAlign&&"vertical"!==c.orientation&&b.textAlignRight,"left"===c.textAlign&&"vertical"!==c.orientation&&b.textAlignLeft]}})((0,i.A)(({theme:a})=>({margin:0,flexShrink:0,borderWidth:0,borderStyle:"solid",borderColor:(a.vars||a).palette.divider,borderBottomWidth:"thin",variants:[{props:{absolute:!0},style:{position:"absolute",bottom:0,left:0,width:"100%"}},{props:{light:!0},style:{borderColor:a.vars?`rgba(${a.vars.palette.dividerChannel} / 0.08)`:(0,g.X4)(a.palette.divider,.08)}},{props:{variant:"inset"},style:{marginLeft:72}},{props:{variant:"middle",orientation:"horizontal"},style:{marginLeft:a.spacing(2),marginRight:a.spacing(2)}},{props:{variant:"middle",orientation:"vertical"},style:{marginTop:a.spacing(1),marginBottom:a.spacing(1)}},{props:{orientation:"vertical"},style:{height:"100%",borderBottomWidth:0,borderRightWidth:"thin"}},{props:{flexItem:!0},style:{alignSelf:"stretch",height:"auto"}},{props:({ownerState:a})=>!!a.children,style:{display:"flex",textAlign:"center",border:0,borderTopStyle:"solid",borderLeftStyle:"solid","&::before, &::after":{content:'""',alignSelf:"center"}}},{props:({ownerState:a})=>a.children&&"vertical"!==a.orientation,style:{"&::before, &::after":{width:"100%",borderTop:`thin solid ${(a.vars||a).palette.divider}`,borderTopStyle:"inherit"}}},{props:({ownerState:a})=>"vertical"===a.orientation&&a.children,style:{flexDirection:"column","&::before, &::after":{height:"100%",borderLeft:`thin solid ${(a.vars||a).palette.divider}`,borderLeftStyle:"inherit"}}},{props:({ownerState:a})=>"right"===a.textAlign&&"vertical"!==a.orientation,style:{"&::before":{width:"90%"},"&::after":{width:"10%"}}},{props:({ownerState:a})=>"left"===a.textAlign&&"vertical"!==a.orientation,style:{"&::before":{width:"10%"},"&::after":{width:"90%"}}}]}))),n=(0,h.Ay)("span",{name:"MuiDivider",slot:"Wrapper",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[b.wrapper,"vertical"===c.orientation&&b.wrapperVertical]}})((0,i.A)(({theme:a})=>({display:"inline-block",paddingLeft:`calc(${a.spacing(1)} * 1.2)`,paddingRight:`calc(${a.spacing(1)} * 1.2)`,whiteSpace:"nowrap",variants:[{props:{orientation:"vertical"},style:{paddingTop:`calc(${a.spacing(1)} * 1.2)`,paddingBottom:`calc(${a.spacing(1)} * 1.2)`}}]}))),o=d.forwardRef(function(a,b){let c=(0,j.b)({props:a,name:"MuiDivider"}),{absolute:d=!1,children:g,className:h,orientation:i="horizontal",component:o=g||"vertical"===i?"div":"hr",flexItem:p=!1,light:q=!1,role:r="hr"!==o?"separator":void 0,textAlign:s="center",variant:t="fullWidth",...u}=c,v={...c,absolute:d,component:o,flexItem:p,light:q,orientation:i,role:r,textAlign:s,variant:t},w=(a=>{let{absolute:b,children:c,classes:d,flexItem:e,light:g,orientation:h,textAlign:i,variant:j}=a;return(0,f.A)({root:["root",b&&"absolute",j,g&&"light","vertical"===h&&"vertical",e&&"flexItem",c&&"withChildren",c&&"vertical"===h&&"withChildrenVertical","right"===i&&"vertical"!==h&&"textAlignRight","left"===i&&"vertical"!==h&&"textAlignLeft"],wrapper:["wrapper","vertical"===h&&"wrapperVertical"]},k.K,d)})(v);return(0,l.jsx)(m,{as:o,className:(0,e.A)(w.root,h),role:r,ref:b,ownerState:v,"aria-orientation":"separator"===r&&("hr"!==o||"vertical"===i)?i:void 0,...u,children:g?(0,l.jsx)(n,{className:w.wrapper,ownerState:v,children:g}):null})});o&&(o.muiSkipListHighlight=!0);let p=o},93895:(a,b,c)=>{c.d(b,{A:()=>g,K:()=>f});var d=c(29565),e=c(33105);function f(a){return(0,e.Ay)("MuiDivider",a)}let g=(0,d.A)("MuiDivider",["root","absolute","fullWidth","inset","middle","flexItem","light","vertical","withChildren","withChildrenVertical","textAlignRight","textAlignLeft","wrapper","wrapperVertical"])}};
@@ -1,5 +1,5 @@
1
1
  "use strict";exports.id=1578,exports.ids=[1578],exports.modules={31411:(a,b,c)=>{c.d(b,{A:()=>o});var d=c(21124),e=c(38301),f=c(79515),g=c(81637),h=c(95587),i=c(67191),j=c(82605),k=c(50062),l=c(7675),m=c(94367),n=c(37674);let o=({schema:a,values:b,onChange:c,size:o="small"})=>{let[p,q]=(0,e.useState)({}),r=a?.properties??{},s=Array.isArray(a?.required)?a.required:[],t=Object.keys(r);if(0===t.length)return(0,d.jsx)(f.default,{variant:"body2",color:"text.secondary",children:"This tool takes no parameters."});let u=(a,d)=>{let e={...b};void 0===d?delete e[a]:e[a]=d,c(e)};return(0,d.jsx)(g.default,{sx:{display:"flex",flexDirection:"column",gap:2},children:t.map(a=>{let c=r[a]??{},e=s.includes(a)?`${a} *`:a,t="string"==typeof c.description?c.description:"";if("boolean"===c.type)return(0,d.jsx)(h.A,{control:(0,d.jsx)(i.A,{size:o,checked:!0===b[a],onChange:b=>u(a,b.target.checked)}),label:(0,d.jsxs)(g.default,{children:[(0,d.jsx)(f.default,{variant:"body2",children:e}),t&&(0,d.jsx)(f.default,{variant:"caption",color:"text.secondary",children:t})]})},a);if(Array.isArray(c.enum)&&c.enum.length>0){let g=b[a];return(0,d.jsxs)(j.A,{size:o,fullWidth:!0,children:[(0,d.jsx)(k.A,{id:`schema-param-${a}`,children:e}),(0,d.jsx)(l.A,{labelId:`schema-param-${a}`,label:e,value:c.enum.includes(g)?g:"",onChange:b=>u(a,b.target.value),children:c.enum.map(a=>(0,d.jsx)(m.A,{value:a,children:String(a)},String(a)))}),t&&(0,d.jsx)(f.default,{variant:"caption",color:"text.secondary",sx:{mt:.5,mx:1.75},children:t})]},a)}if("number"===c.type||"integer"===c.type)return(0,d.jsx)(n.A,{fullWidth:!0,size:o,type:"number",label:e,value:void 0!==b[a]?String(b[a]):"",onChange:b=>{let d=b.target.value;if(""===d)return void u(a,void 0);let e="integer"===c.type?parseInt(d,10):parseFloat(d);u(a,Number.isNaN(e)?void 0:e)},helperText:t},a);if("object"===c.type||"array"===c.type){let f=p[a]??(void 0!==b[a]?JSON.stringify(b[a],null,2):""),g=null;if(f.trim())try{JSON.parse(f)}catch{g="Not valid JSON yet"}return(0,d.jsx)(n.A,{fullWidth:!0,size:o,multiline:!0,minRows:2,label:`${e} (JSON ${c.type})`,value:f,error:!!g,helperText:g??t,onChange:b=>{let c=b.target.value;if(q(b=>({...b,[a]:c})),!c.trim())return void u(a,void 0);try{u(a,JSON.parse(c))}catch{}},slotProps:{input:{sx:{fontFamily:"monospace",fontSize:13}}}},a)}return(0,d.jsx)(n.A,{fullWidth:!0,size:o,label:e,value:void 0!==b[a]?String(b[a]):"",onChange:b=>u(a,""===b.target.value?void 0:b.target.value),helperText:t},a)})})}},32631:(a,b,c)=>{c.d(b,{D:()=>h}),c(21124);var d=c(38301),e=c(19815);c(48748),c(9718);let f=(0,e.h)("frontend/contexts/ThemeContext"),g=(0,d.createContext)(void 0),h=()=>{let a=(0,d.useContext)(g);if(!a)throw f.error("useTheme hook used outside of ThemeProvider"),Error("useTheme must be used within a ThemeProvider");return f.debug("useTheme hook accessed"),a}},32720:(a,b,c)=>{c.d(b,{A:()=>B});var d=c(21124),e=c(38301),f=c(40512),g=c(83899),h=c(52327),i=c(81637),j=c(43312),k=c(44079),l=c(37674),m=c(41893),n=c(88745),o=c(8521),p=c(79515),q=c(89490),r=c(75983),s=c(50553),t=c(84233),u=c(19925),v=c(68730),w=c(30717),x=c(98810),y=c(52399),z=c(91314);let A=(0,c(19815).h)("frontend/components/shared/FolderPickerDialog"),B=({open:a,title:b="Choose a folder",selectFiles:c=!1,initialPath:B,onClose:C,onSelect:D})=>{let[E,F]=(0,e.useState)(null),[G,H]=(0,e.useState)(""),[I,J]=(0,e.useState)(!1),[K,L]=(0,e.useState)(null),M=(0,e.useCallback)(async a=>{J(!0),L(null);try{let b=a?`?path=${encodeURIComponent(a)}`:"",c=await fetch(`/api/browse${b}`),d=await c.json();if(!c.ok||d.error)return void L(d.error||`HTTP ${c.status}`);F(d),H(d.path)}catch(a){A.warn("Browse failed",a),L("Could not reach the backend to browse folders.")}finally{J(!1)}},[]);(0,e.useEffect)(()=>{a?M(B||void 0):(F(null),L(null))},[a,B,M]);let N=a=>{D(a),C()};return(0,d.jsxs)(f.A,{open:a,onClose:C,maxWidth:"sm",fullWidth:!0,children:[(0,d.jsx)(g.A,{children:b}),(0,d.jsxs)(h.A,{dividers:!0,sx:{display:"flex",flexDirection:"column",gap:1.5},children:[(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(j.A,{title:"Up one folder",children:(0,d.jsx)("span",{children:(0,d.jsx)(k.A,{size:"small",disabled:!E?.parent||I,onClick:()=>E?.parent&&void M(E.parent),children:(0,d.jsx)(y.A,{fontSize:"small"})})})}),(0,d.jsx)(j.A,{title:"Home folder",children:(0,d.jsx)("span",{children:(0,d.jsx)(k.A,{size:"small",disabled:I,onClick:()=>void M(),children:(0,d.jsx)(z.A,{fontSize:"small"})})})}),(0,d.jsx)(l.A,{fullWidth:!0,size:"small",value:G,onChange:a=>H(a.target.value),onKeyDown:a=>{"Enter"===a.key&&(a.preventDefault(),M(G))},placeholder:"Type a path and press Enter"})]}),E&&E.drives.length>0&&(0,d.jsx)(i.default,{sx:{display:"flex",gap:.75,flexWrap:"wrap"},children:E.drives.map(a=>(0,d.jsx)(m.A,{label:a,size:"small",variant:E.path.toLowerCase().startsWith(a.toLowerCase())?"filled":"outlined",onClick:()=>void M(a)},a))}),K&&(0,d.jsx)(n.A,{severity:"error",children:K}),(0,d.jsxs)(i.default,{sx:{minHeight:240,maxHeight:"45vh",overflow:"auto",border:1,borderColor:"divider",borderRadius:1},children:[I&&(0,d.jsx)(i.default,{sx:{display:"flex",justifyContent:"center",py:4},children:(0,d.jsx)(o.default,{size:24})}),!I&&E&&0===E.entries.length&&(0,d.jsx)(p.default,{variant:"body2",color:"text.secondary",sx:{p:2},children:"This folder is empty."}),!I&&(0,d.jsx)(q.A,{dense:!0,disablePadding:!0,children:E?.entries.map(a=>(0,d.jsxs)(r.A,{disabled:!a.isDirectory&&!c,onClick:()=>a.isDirectory?void M(a.path):N(a.path),children:[(0,d.jsx)(s.A,{sx:{minWidth:34},children:a.isDirectory?(0,d.jsx)(w.A,{fontSize:"small",color:"primary"}):(0,d.jsx)(x.A,{fontSize:"small"})}),(0,d.jsx)(t.A,{primary:a.name,primaryTypographyProps:{noWrap:!0}})]},a.path))})]})]}),(0,d.jsxs)(u.A,{children:[(0,d.jsx)(v.A,{onClick:C,children:"Cancel"}),(0,d.jsx)(v.A,{variant:"contained",disabled:!E||I,onClick:()=>E&&N(E.path),children:"Select this folder"})]})]})}},33799:(a,b,c)=>{c.d(b,{b:()=>f,c:()=>g});var d=c(50648);async function e(a,b){try{let c=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});if(!c.ok||!c.body)return null;let e=null;return await (0,d.z)(c,a=>{"stdout"===a.type||"stderr"===a.type?b(a.data):"result"===a.type&&(e={success:a.success,output:a.commandOutput??""})}),e}catch(a){return console.error("Error streaming git command:",a),null}}let f=async(a,b,c)=>{if(c){let d=await e({action:"installStream",savePath:a,installCommand:b},c);if(d)return{success:d.success,message:d.success?{type:"success",text:"Dependencies installed successfully. You can now build the server."}:{type:"error",text:"Error installing dependencies. You can still try to build the server."},output:d.output||"No output was returned from the installation process."}}try{let c=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"install",savePath:a,installCommand:b})}),d=await c.json();if(!c.ok)throw Error(d.error||"Failed to install dependencies");return{success:!0,message:{type:"success",text:"Dependencies installed successfully. You can now build the server."},output:d.commandOutput||"No output was returned from the installation process."}}catch(a){return console.error("Error installing dependencies:",a),{success:!1,message:{type:"error",text:`Error installing dependencies: ${a.message||"Unknown error"}. You can still try to build the server.`},output:a instanceof Response?await a.text():a?.message||"Unknown error"}}},g=async(a,b,c)=>{if(c){let d=await e({action:"buildStream",savePath:a,buildCommand:b},c);if(d)return{success:d.success,message:d.success?{type:"success",text:"Server built successfully."}:{type:"error",text:"Error building server."},output:d.output||"No output was returned from the build process."}}try{let c=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"build",savePath:a,buildCommand:b})}),d=await c.json();if(!c.ok)throw Error(d.error||"Failed to build repository");return{success:!0,message:{type:"success",text:"Server built successfully."},output:d.commandOutput||"No output was returned from the build process."}}catch(a){return console.error("Error building server:",a),{success:!1,message:{type:"error",text:`Error building server: ${a.message||"Unknown error"}.`},output:a instanceof Response?await a.text():a?.message||"Unknown error"}}}},35070:(a,b,c)=>{c.d(b,{A:()=>ao});var d=c(21124),e=c(38301),f=c(19815),g=c(48748),h=c(8165),i=c(93083),j=c(65343),k=c(53222),l=c(12033),m=c(91034),n=c(95786),o=c(64956),p=c(55641),q=c(29320),r=c(5748),s=c(38941),t=c(51694),u=c(1312),v=c(25750),w=c(5501),x=c(99587),y=c(61615),z=c(78352),A=c(28055),B=c(44920),C=c(46410),D=c(41893),E=c(56685),F=c(71756),G=c(91901),H=c(83013);let I=({transport:a,size:b="small"})=>{let{colors:c}=(0,g.Ic)(),e=c.domain.transport,f=(()=>{switch(a){case"stdio":return{label:"STDIO",icon:(0,d.jsx)(E.A,{fontSize:"small"}),color:e.stdio.fg,bgColor:e.stdio.bg};case"websocket":return{label:"WebSocket",icon:(0,d.jsx)(F.A,{fontSize:"small"}),color:e.websocket.fg,bgColor:e.websocket.bg};case"sse":return{label:"SSE",icon:(0,d.jsx)(G.A,{fontSize:"small"}),color:e.sse.fg,bgColor:e.sse.bg};case"streamable":return{label:"HTTP Stream",icon:(0,d.jsx)(H.A,{fontSize:"small"}),color:e.streamable.fg,bgColor:e.streamable.bg};default:return{label:"UNKNOWN",icon:(0,d.jsx)(E.A,{fontSize:"small"}),color:e.default.fg,bgColor:e.default.bg}}})();return(0,d.jsx)(D.A,{icon:f.icon,label:f.label,size:b,sx:{backgroundColor:f.bgColor,color:f.color,fontWeight:500,fontSize:"small"===b?"0.75rem":"0.875rem",height:"small"===b?24:32,"& .MuiChip-icon":{color:f.color}}})};var J=c(40512),K=c(83899),L=c(52327),M=c(19925),N=c(68730),O=c(81637),P=c(79515),Q=c(88745),R=c(95587),S=c(77028),T=c(89490),U=c(71439),V=c(50553),W=c(84233),X=c(72264),Y=c(53455),Z=c(33799);let $=(0,f.h)("frontend/components/mcp/MCPServerManager/ServerUpdateDialog"),_=({open:a,onClose:b,serverName:c,rootPath:f,installCommand:g,buildCommand:i,enabled:k,updateInfo:l,onToggle:m,onUpdated:n})=>{let[o,p]=(0,e.useState)(null),[q,r]=(0,e.useState)(!1),[s,t]=(0,e.useState)(!1),[u,w]=(0,e.useState)(!1),[x,z]=(0,e.useState)(null),[A,B]=(0,e.useState)({}),[C,E]=(0,e.useState)(""),F=!!(g&&g.trim()),G=!!(i&&i.trim()),H=[{key:"stop",label:"Stop server",active:k},{key:"pull",label:"Pull latest changes",active:!0},{key:"install",label:`Install dependencies (${g})`,active:F},{key:"build",label:`Build (${i})`,active:G},{key:"restart",label:"Restart server",active:k}];(0,e.useEffect)(()=>{a&&(r(!1),t(!1),w(!1),z(null),B({}),E(""))},[a,c]),(0,e.useEffect)(()=>{if(a&&l.remoteUrl&&l.localSha&&l.remoteSha){let a=!1;return(0,Y.Qz)(l.remoteUrl,l.localSha,l.remoteSha).then(b=>{a||p(b)}),()=>{a=!0}}p(null)},[a,l.remoteUrl,l.localSha,l.remoteSha]);let I=(0,e.useCallback)((a,b)=>{B(c=>({...c,[a]:b}))},[]),_=(0,e.useCallback)((a,b)=>{E(c=>c+(c?"\n":"")+`--- ${a} ---
2
- `+(b||"").trim()+"\n")},[]),aa=async()=>{t(!0),z(null),$.info(`Starting update for server ${c}`);let a=(a,b)=>{I(a,"error"),z(b),t(!1)};try{k&&(I("stop","running"),await Promise.resolve(m(!1)),I("stop","done")),I("pull","running");let b=await (0,Y.Qv)(f);if(!b.success)return void a("pull",b.error||"Failed to pull updates");if(_("Pull",`Updated ${(0,Y.Fu)(b.oldSha)} -> ${(0,Y.Fu)(b.newSha)}`),I("pull","done"),F){I("install","running");let b=await (0,Z.b)(f,g.trim());if(_("Install",b.output),!b.success)return void a("install",b.message.text);I("install","done")}if(G){I("build","running");let b=await (0,Z.c)(f,i.trim());if(_("Build",b.output),!b.success)return void a("build",b.message.text);I("build","done")}k&&(I("restart","running"),await Promise.resolve(m(!0)),I("restart","done")),$.info(`Update completed for server ${c}`),w(!0),t(!1),n?.()}catch(a){$.error(`Update failed for server ${c}`,a),z(a.message||"Update failed"),t(!1)}},ab=s||u||Object.keys(A).length>0,ac=l.hasLocalChanges&&!q;return(0,d.jsxs)(J.A,{open:a,onClose:s?void 0:b,maxWidth:"sm",fullWidth:!0,onClick:a=>a.stopPropagation(),children:[(0,d.jsxs)(K.A,{component:"div",sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(v.A,{color:"primary"}),"Update ",c]}),(0,d.jsxs)(L.A,{children:[(0,d.jsxs)(O.default,{sx:{display:"flex",alignItems:"center",gap:1,mb:1,flexWrap:"wrap"},children:[(0,d.jsx)(D.A,{size:"small",label:(0,Y.Fu)(l.localSha),sx:{fontFamily:"monospace"}}),(0,d.jsx)(P.default,{variant:"body2",color:"text.secondary",children:"→"}),(0,d.jsx)(D.A,{size:"small",color:"primary",label:(0,Y.Fu)(l.remoteSha),sx:{fontFamily:"monospace"}}),l.branch&&"HEAD"!==l.branch&&(0,d.jsxs)(P.default,{variant:"body2",color:"text.secondary",children:["on ",(0,d.jsx)("code",{children:l.branch})]}),o?.behindBy!=null&&(0,d.jsxs)(P.default,{variant:"body2",color:"text.secondary",children:["(",o.behindBy," commit",1===o.behindBy?"":"s"," behind)"]})]}),l.repoRoot&&l.repoRoot.replace(/\\/g,"/").replace(/\/+$/,"").toLowerCase()!==f.replace(/\\/g,"/").replace(/\/+$/,"").toLowerCase()&&(0,d.jsxs)(P.default,{variant:"body2",color:"text.secondary",sx:{mb:1},children:["This server lives inside a larger repository — the update pulls"," ",(0,d.jsx)("code",{children:l.repoRoot})," as a whole (other servers from the same repository are updated along with it)."]}),o&&o.commits.length>0&&!ab&&(0,d.jsx)(O.default,{sx:{mb:2,p:1,borderRadius:1,border:"1px solid",borderColor:"divider",maxHeight:160,overflow:"auto"},children:o.commits.map(a=>(0,d.jsxs)(P.default,{variant:"body2",sx:{fontSize:"0.8rem"},noWrap:!0,title:a.message,children:[(0,d.jsx)("code",{children:a.sha})," ",a.message]},a.sha))}),l.hasLocalChanges&&!ab&&(0,d.jsxs)(Q.A,{severity:"warning",sx:{mb:2},children:[(0,d.jsxs)(P.default,{variant:"body2",sx:{mb:1},children:["This repository has local changes to tracked files. Updating will ",(0,d.jsx)("strong",{children:"discard"})," them. Untracked files (e.g. a ",(0,d.jsx)("code",{children:".env"})," you created) and all FLUJO settings for this server are kept."]}),(0,d.jsx)(O.default,{component:"ul",sx:{m:0,pl:3,maxHeight:100,overflow:"auto"},children:l.dirtyFiles.map(a=>(0,d.jsx)("li",{children:(0,d.jsx)(P.default,{variant:"body2",component:"span",sx:{fontFamily:"monospace",fontSize:"0.8rem"},children:a})},a))}),(0,d.jsx)(R.A,{sx:{mt:1},control:(0,d.jsx)(S.A,{size:"small",checked:q,onChange:a=>r(a.target.checked)}),label:(0,d.jsx)(P.default,{variant:"body2",children:"Discard my local changes and update"})})]}),(0,d.jsx)(T.A,{dense:!0,disablePadding:!0,children:H.filter(a=>a.active).map(a=>(0,d.jsxs)(U.Ay,{disableGutters:!0,sx:{py:.25},children:[(0,d.jsx)(V.A,{sx:{minWidth:32},children:(a=>{switch(a){case"running":return(0,d.jsx)(y.default,{size:"small",color:"primary"});case"done":return(0,d.jsx)(h.A,{color:"success",fontSize:"small"});case"error":return(0,d.jsx)(j.A,{color:"error",fontSize:"small"});default:return(0,d.jsx)(X.A,{color:"disabled",fontSize:"small"})}})(A[a.key])}),(0,d.jsx)(W.A,{primary:a.label,primaryTypographyProps:{variant:"body2",noWrap:!0,title:a.label}})]},a.key))}),x&&(0,d.jsxs)(Q.A,{severity:"error",sx:{mt:2,whiteSpace:"pre-wrap"},children:[x,k&&(0,d.jsx)(P.default,{variant:"body2",sx:{mt:1},children:"The server was left stopped. Adjust the install/build commands via Edit, then re-enable it."})]}),u&&(0,d.jsxs)(Q.A,{severity:"success",sx:{mt:2},children:["Server updated successfully",k?" and restarted":"","."]}),C&&(0,d.jsx)(O.default,{sx:{mt:2,p:1,borderRadius:1,bgcolor:"background.paper",border:"1px solid",borderColor:"divider",fontFamily:"monospace",fontSize:"0.75rem",whiteSpace:"pre-wrap",overflow:"auto",maxHeight:200},children:C})]}),(0,d.jsxs)(M.A,{children:[(0,d.jsx)(N.A,{onClick:b,disabled:s,children:u?"Close":"Cancel"}),!u&&(0,d.jsx)(N.A,{variant:"contained",color:"primary",startIcon:(0,d.jsx)(v.A,{}),onClick:aa,disabled:s||ac,children:s?"Updating…":x?"Retry Update":"Update"})]})]})};var aa=c(37674),ab=c(44079),ac=c(47902);let ad=(0,f.h)("frontend/components/mcp/MCPServerManager/FilesystemRootsModal"),ae=({open:a,serverName:b,initialRoots:c,onClose:f,onSaved:g})=>{let[h,i]=(0,e.useState)([]),[j,k]=(0,e.useState)(""),[l,n]=(0,e.useState)(!1),[o,p]=(0,e.useState)(null),q="bash"===b;(0,e.useEffect)(()=>{a&&(i(Array.isArray(c)?[...c]:[]),k(""),p(null))},[a,c]);let r=()=>{let a=j.trim();if(a){if(h.includes(a))return void p("That root is already in the list.");i(b=>[...b,a]),k(""),p(null)}},s=async()=>{n(!0),p(null);try{let a=await A.S.updateServerConfig(b,{roots:h});if(a&&"error"in a&&a.error)return void p("string"==typeof a.error?a.error:"Failed to save roots.");ad.info(`Saved ${h.length} root(s) for ${b}`),g?.(h),f()}catch(a){ad.warn("Failed to save filesystem roots",a),p(a instanceof Error?a.message:"Failed to save roots.")}finally{n(!1)}};return(0,d.jsxs)(J.A,{open:a,onClose:f,maxWidth:"sm",fullWidth:!0,onClick:a=>a.stopPropagation(),children:[(0,d.jsxs)(K.A,{children:["Configure ",b," roots"]}),(0,d.jsxs)(L.A,{children:[(0,d.jsxs)(P.default,{variant:"body2",color:"text.secondary",sx:{mb:2},children:["Confine the built-in ",(0,d.jsx)("b",{children:b})," server to these folders. Leave the list empty for full host access (unless the ",(0,d.jsx)("code",{children:q?"FLUJO_BASH_ROOTS":"FLUJO_FS_ROOTS"})," environment variable is set, which always acts as a hard ceiling)."]}),q&&(0,d.jsxs)(Q.A,{severity:"info",sx:{mb:2},children:["The bash ",(0,d.jsx)("code",{children:"cwd"})," fence is best-effort: a shell can still ",(0,d.jsx)("code",{children:"cd"})," elsewhere or use absolute paths, so ",(0,d.jsx)("code",{children:"FLUJO_FS_ROOTS"}),"/",(0,d.jsx)("code",{children:"FLUJO_BASH_ROOTS"})," and OS permissions remain the real boundary."]}),o&&(0,d.jsx)(Q.A,{severity:"error",sx:{mb:2},onClose:()=>p(null),children:o}),(0,d.jsxs)(O.default,{sx:{display:"flex",gap:1,mb:1},children:[(0,d.jsx)(aa.A,{fullWidth:!0,size:"small",label:"Add a root folder (absolute path)",value:j,onChange:a=>k(a.target.value),onKeyDown:a=>{"Enter"===a.key&&(a.preventDefault(),r())},placeholder:"e.g. C:\\\\Users\\\\me\\\\project or /home/me/project"}),(0,d.jsx)(N.A,{variant:"outlined",startIcon:(0,d.jsx)(ac.A,{}),onClick:r,disabled:!j.trim(),children:"Add"})]}),0===h.length?(0,d.jsx)(P.default,{variant:"body2",color:"text.secondary",sx:{mt:1},children:"No roots configured — the server has full host access."}):(0,d.jsx)(T.A,{dense:!0,children:h.map((a,b)=>(0,d.jsx)(U.Ay,{secondaryAction:(0,d.jsx)(ab.A,{edge:"end","aria-label":"remove root",onClick:()=>{i(a=>a.filter((a,c)=>c!==b))},children:(0,d.jsx)(m.A,{fontSize:"small"})}),children:(0,d.jsx)(P.default,{variant:"body2",sx:{wordBreak:"break-all"},children:a})},`${a}-${b}`))})]}),(0,d.jsxs)(M.A,{children:[(0,d.jsx)(N.A,{onClick:f,disabled:l,children:"Cancel"}),(0,d.jsx)(N.A,{onClick:s,variant:"contained",disabled:l,children:l?"Saving…":"Save"})]})]})};var af=c(30873),ag=c(60839),ah=c(30818),ai=c(43312),aj=c(37489),ak=c(27114),al=c(67191),am=c(98463);let an=(0,f.h)("frontend/components/mcp/MCPServerManager/ServerCard"),ao=({name:a,status:b,path:f,enabled:E,transport:F,onToggle:G=()=>{},onRetry:H=()=>{},onDelete:R=()=>{},onClick:T,onEdit:U=()=>{},onAuthenticate:V,pickerMode:W=!1,error:X,stderrOutput:Z,authorizationUrl:$,selected:aa=!1,onSelect:ac,selectionMode:ad=!1,hasOAuthTokens:ao=!1,exposeAsMcpServer:ap=!1,enableMcpApps:aq=!1,updateInfo:ar,installCommand:as,buildCommand:at,onUpdated:au,folder:av,folders:aw=[],onSetFolder:ax,favorite:ay=!1,onToggleFavorite:az,builtIn:aA=!1,serverConfig:aB})=>{let[aC,aD]=(0,e.useState)(!1),[aE,aF]=(0,e.useState)(null),[aG,aH]=(0,e.useState)(!1),[aI,aJ]=(0,e.useState)(!1),[aK,aL]=(0,e.useState)(""),[aM,aN]=(0,e.useState)("success"),[aO,aP]=(0,e.useState)(!1),[aQ,aR]=(0,e.useState)(!1),[aS,aT]=(0,e.useState)(!1),[aU,aV]=(0,e.useState)(aB?.roots);(0,e.useEffect)(()=>{aV(aB?.roots)},[aB?.roots]);let[aW,aX]=(0,e.useState)(ap),[aY,aZ]=(0,e.useState)(aq),a$=(0,ag.A)();(0,e.useEffect)(()=>{aX(ap)},[ap]),(0,e.useEffect)(()=>{aZ(aq)},[aq]);let a_=async b=>{aX(b);let c=await A.S.updateServerConfig(a,{exposeAsMcpServer:b});"success"in c&&c.success?(aL(b?"Server is now exposed to external apps.":"Server is no longer exposed."),aN("success")):(aX(!b),aL("Failed to update exposure setting."),aN("error")),aJ(!0)},a0=async b=>{aZ(b);let c=await A.S.updateServerConfig(a,{enableMcpApps:b});"success"in c&&c.success?(aL(b?"This server may now render interactive apps in chat (sandboxed).":"Interactive apps disabled for this server."),aN("success")):(aZ(!b),aL("Failed to update the MCP Apps setting."),aN("error")),aJ(!0)},a1=()=>{navigator.clipboard.writeText(""),aL("Endpoint URL copied to clipboard."),aN("success"),aJ(!0)},a2=()=>{navigator.clipboard.writeText((0,B.CZ)(a,aB,"")),aL("Server JSON copied to clipboard."),aN("success"),aJ(!0)},a3={connected:"success.main",disconnected:"text.secondary",error:"error.main",connecting:"info.main",initialization:"info.main",requires_authentication:"warning.main"}[b];(0,e.useEffect)(()=>{if(("connecting"===b||"initialization"===b)&&E&&!W){aP(!0);let b=setTimeout(()=>{an.debug(`Polling status for server: ${a}`),H()},2e3);return()=>{clearTimeout(b),aP(!1)}}"connecting"!==b&&"initialization"!==b&&aP(!1)},[b,E,a,H]);let[a4,a5]=(0,e.useState)(null);(0,e.useEffect)(()=>()=>{a4&&clearTimeout(a4)},[a4]);let a6=async b=>{b.stopPropagation(),an.debug(`Reset OAuth tokens button clicked for server: ${a}`),aR(!0);try{let b=await fetch("/api/oauth/reset",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({serverName:a})});if(!b.ok){let a=await b.json();throw Error(a.error||"Failed to reset OAuth tokens")}let c=await b.json();an.info(`OAuth tokens reset successfully for ${a}`,c),aL("OAuth tokens reset successfully. Server will require re-authentication."),aN("success"),aJ(!0),setTimeout(()=>{H()},500)}catch(b){an.error(`Failed to reset OAuth tokens for ${a}`,b),aL(`Failed to reset OAuth tokens: ${b instanceof Error?b.message:"Unknown error"}`),aN("error"),aJ(!0)}finally{aR(!1)}},{getThemeValue:a7,getThemeColor:a8,colors:a9}=(0,g.Ic)(),ba=()=>{an.debug(`Server restart initiated for: ${a}`),G(!1),setTimeout(()=>{G(!0),an.info(`Server ${a} restarted`)},1e3)};return(0,d.jsxs)(ah.A,{role:W?"button":void 0,"aria-pressed":W?aa:void 0,sx:{cursor:"pointer",position:"relative",height:W?"100%":void 0,transition:"box-shadow 0.3s ease, border-color 0.12s ease",border:a=>W&&aa?`2px solid ${a.palette.primary.main}`:"2px solid transparent","&:hover":{boxShadow:3}},onClick:()=>{an.debug(`Server card clicked: ${a}`),T()},children:[az&&!aA&&(0,d.jsx)(ai.A,{title:ay?"Remove from favorites":"Add to favorites",arrow:!0,placement:"top",children:(0,d.jsx)(ab.A,{size:"small","aria-label":ay?"remove from favorites":"add to favorites",onClick:a=>{a.stopPropagation(),az()},sx:{position:"absolute",top:4,left:4,zIndex:2,color:ay?a$.palette.warning.main:a$.palette.text.secondary,backgroundColor:(0,aj.X4)(a$.palette.background.paper,.6),"&:hover":{backgroundColor:(0,aj.X4)(a$.palette.background.paper,.9)}},children:ay?(0,d.jsx)(w.A,{fontSize:"small"}):(0,d.jsx)(x.A,{fontSize:"small"})})}),(0,d.jsxs)(ak.A,{sx:{pb:1},children:[(0,d.jsxs)(O.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"flex-start",mb:1},children:[(0,d.jsxs)(O.default,{sx:{display:"flex",alignItems:"center",flex:1},children:[ad&&ac&&(0,d.jsx)(S.A,{checked:aa,onClick:a=>a.stopPropagation(),onChange:a=>ac(a.target.checked),size:"small",sx:{mr:1,p:.5}}),(0,d.jsx)(P.default,{variant:"h6",component:"h3",sx:{flex:1},children:a})]}),(0,d.jsxs)(O.default,{sx:{display:"flex",flexDirection:"column",alignItems:"flex-end",gap:.5},children:[(0,d.jsxs)(O.default,{sx:{display:"flex",alignItems:"center",gap:.5},children:[ar?.updateAvailable&&(0,d.jsx)(ai.A,{title:`Update available: ${(0,Y.Fu)(ar.localSha)} → ${(0,Y.Fu)(ar.remoteSha)}. Click to update.`,children:(0,d.jsx)(D.A,{icon:(0,d.jsx)(v.A,{}),label:"Update",color:"warning",size:"small",onClick:b=>{b.stopPropagation(),an.debug(`Update badge clicked for server: ${a}`),aH(!0)}})}),aA?(0,d.jsx)(ai.A,{title:"FLUJO's built-in server — can be enabled or disabled below, but not edited or removed.",children:(0,d.jsx)(D.A,{label:"Built-in",color:"primary",size:"small"})}):(0,d.jsx)(I,{transport:F,size:"small"})]}),(0,d.jsxs)(O.default,{sx:{display:"flex",alignItems:"center"},children:["connected"===b&&(0,d.jsx)(h.A,{color:"success",sx:{mr:.5},fontSize:"small"}),"disconnected"===b&&(0,d.jsx)(i.A,{color:"action",sx:{mr:.5},fontSize:"small"}),"error"===b&&(0,d.jsx)(j.A,{color:"error",sx:{mr:.5},fontSize:"small"}),"requires_authentication"===b&&(0,d.jsx)(n.A,{color:"warning",sx:{mr:.5},fontSize:"small"}),("connecting"===b||"initialization"===b)&&(0,d.jsx)(y.default,{size:"small",color:"primary",sx:{mr:.5}}),(0,d.jsx)(P.default,{variant:"body2",color:a3,children:"requires_authentication"===b?"Requires Authentication":b})]})]})]}),(0,d.jsx)(P.default,{variant:"body2",color:"text.secondary",sx:{mb:1,fontSize:"0.875rem"},noWrap:!0,title:aA?void 0:f,children:aA?"FLUJO's own backend API — flow authoring, execution and server management as MCP tools.":f}),aA&&!W&&(0,d.jsxs)(O.default,{sx:{mt:1,mb:1,p:1,borderRadius:1,border:"1px solid",borderColor:"divider"},onClick:a=>a.stopPropagation(),children:[(0,d.jsxs)(O.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(q.A,{fontSize:"small",sx:{mr:.5,color:"primary.main"}}),(0,d.jsx)(ai.A,{title:"External MCP clients (Claude Code, Claude Desktop, Cursor, …) can drive FLUJO through this local endpoint.",children:(0,d.jsx)(P.default,{variant:"body2",sx:{fontWeight:500},children:"Exposed to external apps"})})]}),(0,d.jsxs)(O.default,{sx:{display:"flex",alignItems:"center",mt:.5},children:[(0,d.jsx)(P.default,{variant:"caption",sx:{flex:1,fontFamily:"monospace",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:"",children:""}),(0,d.jsx)(ai.A,{title:"Copy endpoint URL",children:(0,d.jsx)(ab.A,{size:"small",onClick:a1,children:(0,d.jsx)(s.A,{fontSize:"small"})})}),(0,d.jsx)(ai.A,{title:"Copy MCP server JSON",children:(0,d.jsx)(ab.A,{size:"small",onClick:a2,children:(0,d.jsx)(t.A,{fontSize:"small"})})})]})]}),!aA&&!W&&(0,d.jsxs)(O.default,{sx:{mt:1,mb:1,p:1,borderRadius:1,border:"1px solid",borderColor:"divider"},onClick:a=>a.stopPropagation(),children:[(0,d.jsxs)(O.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(q.A,{fontSize:"small",sx:{mr:.5,color:aW?"primary.main":"text.disabled"}}),(0,d.jsx)(al.A,{checked:aW,onChange:a=>a_(a.target.checked),size:"small"}),(0,d.jsx)(ai.A,{title:"Re-expose this server's tools to external MCP clients (Claude Desktop, Cursor, …) at a local URL.",children:(0,d.jsx)(P.default,{variant:"body2",sx:{fontWeight:500},children:"Expose to external apps"})})]}),aW&&(0,d.jsxs)(O.default,{sx:{display:"flex",alignItems:"center",mt:.5},children:[(0,d.jsx)(P.default,{variant:"caption",sx:{flex:1,fontFamily:"monospace",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:"",children:""}),(0,d.jsx)(ai.A,{title:"Copy endpoint URL",children:(0,d.jsx)(ab.A,{size:"small",onClick:a1,children:(0,d.jsx)(s.A,{fontSize:"small"})})}),(0,d.jsx)(ai.A,{title:"Copy MCP server JSON",children:(0,d.jsx)(ab.A,{size:"small",onClick:a2,children:(0,d.jsx)(t.A,{fontSize:"small"})})})]})]}),!aA&&!W&&(0,d.jsx)(O.default,{sx:{mt:1,mb:1,p:1,borderRadius:1,border:"1px solid",borderColor:"divider"},onClick:a=>a.stopPropagation(),children:(0,d.jsxs)(O.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(r.A,{fontSize:"small",sx:{mr:.5,color:aY?"primary.main":"text.disabled"}}),(0,d.jsx)(al.A,{checked:aY,onChange:a=>a0(a.target.checked),size:"small"}),(0,d.jsx)(ai.A,{title:"Allow this server's tools to render interactive apps (MCP Apps / ui:// resources) in chat. Rendered read-only in a strict sandbox. Only enable for servers you trust.",children:(0,d.jsx)(P.default,{variant:"body2",sx:{fontWeight:500},children:"Render interactive apps"})})]})}),"error"===b&&(0,d.jsxs)(O.default,{sx:{mt:1,mb:1},children:[(0,d.jsxs)(O.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:.5},children:[(0,d.jsx)(P.default,{variant:"body2",fontWeight:"medium",color:"error",children:"Error:"}),(0,d.jsx)(N.A,{size:"small",color:"primary",onClick:b=>{b.stopPropagation(),an.debug(`View full error clicked for server: ${a}`),aD(!0)},children:"View Full Error"})]}),(0,d.jsx)(O.default,{sx:{maxHeight:"80px",overflow:"auto",p:1,borderRadius:1,bgcolor:a=>a8("error.background"),color:a=>a8("error.text"),border:"1px solid",borderColor:a=>a8("error.border"),fontSize:"0.75rem",fontWeight:500,whiteSpace:"pre-wrap"},children:X||"Unknown error"})]}),"requires_authentication"===b&&!W&&(0,d.jsxs)(O.default,{sx:{mt:1,mb:1},children:[(0,d.jsx)(O.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:1},children:(0,d.jsx)(P.default,{variant:"body2",fontWeight:"medium",color:"warning.main",children:"Authentication Required"})}),(0,d.jsxs)(N.A,{variant:"contained",color:"warning",size:"small",startIcon:(0,d.jsx)(o.A,{}),onClick:async b=>{if(b.stopPropagation(),an.debug(`Authenticate button clicked for server: ${a}`),V)V();else try{let b=await fetch("/api/oauth/initiate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({serverName:a})});if(!b.ok){let a=await b.json();throw Error(a.error||"Failed to initiate OAuth")}let{authorizationUrl:d,alreadyAuthorized:e}=await b.json();if(e||!d){an.info(`Server ${a} already authorized, no popup needed`),ba();return}let{openOAuthPopup:f}=await c.e(558).then(c.bind(c,60558));await f({url:d,windowName:`oauth_${a}`,onSuccess:b=>{an.info(`OAuth authentication successful for ${a}`,b),an.info(`Automatically restarting server ${a} after OAuth completion`),ba()},onError:b=>{an.error(`OAuth authentication failed for ${a}`,b),aL("OAuth authentication failed"),aN("error"),aJ(!0)}})}catch(b){an.error(`Failed to start OAuth authentication for ${a}`,b),aL("Failed to start OAuth authentication"),aN("error"),aJ(!0)}},sx:{width:"100%"},children:["Authenticate with ",a]})]})]}),aA&&!W&&G&&(0,d.jsx)(am.A,{sx:{justifyContent:"flex-start",px:2,py:1},onClick:a=>a.stopPropagation(),children:(0,d.jsxs)(O.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(al.A,{checked:E,onClick:a=>a.stopPropagation(),onChange:b=>{an.debug(`Built-in server ${a} toggle changed to: ${b.target.checked}`),G(b.target.checked)},color:"primary",size:"small"}),(0,d.jsx)(P.default,{variant:"body2",sx:{ml:.5,fontWeight:500,color:E?"primary.main":"text.secondary"},children:E?"Enabled":"Disabled"}),("filesystem"===a||"bash"===a)&&(0,d.jsx)(ai.A,{title:`Configure ${a} roots`,children:(0,d.jsxs)(N.A,{size:"small",variant:"text",startIcon:(0,d.jsx)(C.A,{fontSize:"small"}),sx:{ml:1.5,textTransform:"none"},onClick:a=>{a.stopPropagation(),aT(!0)},children:["Configure roots",aU&&aU.length?` (${aU.length})`:""]})})]})}),("filesystem"===a||"bash"===a)&&(0,d.jsx)(ae,{open:aS,serverName:a,initialRoots:aU,onClose:()=>aT(!1),onSaved:a=>aV(a)}),!aA&&!W&&(0,d.jsxs)(am.A,{sx:{justifyContent:"space-between",px:2,py:1},children:[(0,d.jsxs)(O.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(al.A,{checked:E,onClick:a=>a.stopPropagation(),onChange:b=>{an.debug(`Server ${a} toggle changed to: ${b.target.checked}`),G(b.target.checked)},color:"primary",size:"small"}),(0,d.jsx)(P.default,{variant:"body2",sx:{ml:.5,fontWeight:500,color:E?"primary.main":"text.secondary"},children:E?"Enabled":"Disabled"}),E&&(0,d.jsx)(ai.A,{title:"Restart server",children:(0,d.jsx)(ab.A,{size:"small",onClick:b=>{b.stopPropagation(),an.debug(`Restart button clicked for server: ${a}`),ba()},sx:{ml:1},children:(0,d.jsx)(k.A,{fontSize:"small"})})})]}),(0,d.jsxs)(O.default,{children:[(0,d.jsx)(ai.A,{title:"Retry connection",children:(0,d.jsx)(ab.A,{color:"primary",onClick:c=>{c.stopPropagation(),an.debug(`Retry button clicked for server: ${a}`),a4&&clearTimeout(a4),aP(!0),H();let d=setTimeout(()=>{"connecting"!==b&&"initialization"!==b&&aP(!1),a5(null)},1e4);a5(d)},disabled:aO,size:"small",children:aO?(0,d.jsx)(y.default,{size:"small",color:"primary"}):(0,d.jsx)(k.A,{})})}),"streamable"===F&&ao&&(0,d.jsx)(ai.A,{title:"Reset OAuth tokens",children:(0,d.jsx)(ab.A,{color:"warning",onClick:a6,disabled:aQ,size:"small",children:aQ?(0,d.jsx)(y.default,{size:"small",color:"primary"}):(0,d.jsx)(p.A,{})})}),ax&&(0,d.jsx)(ai.A,{title:av?`Folder: ${av}`:"Move to folder",children:(0,d.jsx)(ab.A,{color:av?"primary":"default",onClick:a=>{a.stopPropagation(),aF(a.currentTarget)},size:"small",children:(0,d.jsx)(u.A,{})})}),(0,d.jsx)(ai.A,{title:"Edit server",children:(0,d.jsx)(ab.A,{color:"primary",onClick:a=>{a.stopPropagation(),U()},size:"small",children:(0,d.jsx)(l.A,{})})}),(0,d.jsx)(ai.A,{title:"Delete server",children:(0,d.jsx)(ab.A,{color:"error",onClick:a=>{a.stopPropagation(),R()},size:"small",children:(0,d.jsx)(m.A,{})})})]})]}),ax&&(0,d.jsx)(z.A,{anchorEl:aE,open:!!aE,currentFolder:av,folders:aw,onClose:()=>aF(null),onAssign:a=>ax(a)}),(0,d.jsxs)(J.A,{open:aC,onClose:()=>{an.debug(`Error modal closed for server: ${a}`),aD(!1)},maxWidth:"md",fullWidth:!0,onClick:a=>a.stopPropagation(),children:[(0,d.jsxs)(K.A,{component:"div",children:["Error Details for ",a]}),(0,d.jsxs)(L.A,{children:[(0,d.jsx)(O.default,{sx:{p:2,borderRadius:1,bgcolor:a=>a8("error.background"),color:a=>a8("error.text"),border:"1px solid",borderColor:a=>a8("error.border"),fontFamily:"monospace",fontSize:"0.875rem",fontWeight:500,whiteSpace:"pre-wrap",overflow:"auto",maxHeight:"300px",mb:2},children:X||"Unknown error"}),Z&&(0,d.jsxs)(O.default,{sx:{mt:2},children:[(0,d.jsx)(P.default,{variant:"h6",gutterBottom:!0,children:"Stderr Output:"}),(0,d.jsx)(O.default,{sx:{p:2,borderRadius:1,bgcolor:"background.paper",border:"1px solid",borderColor:"divider",fontFamily:"monospace",fontSize:"0.875rem",whiteSpace:"pre-wrap",overflow:"auto",maxHeight:"300px"},children:Z})]})]}),(0,d.jsxs)(M.A,{children:[(0,d.jsx)(N.A,{onClick:()=>aD(!1),children:"Close"}),(0,d.jsx)(N.A,{onClick:()=>{let b=[X||"Unknown error",Z?`
2
+ `+(b||"").trim()+"\n")},[]),aa=async()=>{t(!0),z(null),$.info(`Starting update for server ${c}`);let a=(a,b)=>{I(a,"error"),z(b),t(!1)};try{k&&(I("stop","running"),await Promise.resolve(m(!1)),I("stop","done")),I("pull","running");let b=await (0,Y.Qv)(f);if(!b.success)return void a("pull",b.error||"Failed to pull updates");if(_("Pull",`Updated ${(0,Y.Fu)(b.oldSha)} -> ${(0,Y.Fu)(b.newSha)}`),I("pull","done"),F){I("install","running");let b=await (0,Z.b)(f,g.trim());if(_("Install",b.output),!b.success)return void a("install",b.message.text);I("install","done")}if(G){I("build","running");let b=await (0,Z.c)(f,i.trim());if(_("Build",b.output),!b.success)return void a("build",b.message.text);I("build","done")}k&&(I("restart","running"),await Promise.resolve(m(!0)),I("restart","done")),$.info(`Update completed for server ${c}`),w(!0),t(!1),n?.()}catch(a){$.error(`Update failed for server ${c}`,a),z(a.message||"Update failed"),t(!1)}},ab=s||u||Object.keys(A).length>0,ac=l.hasLocalChanges&&!q;return(0,d.jsxs)(J.A,{open:a,onClose:s?void 0:b,maxWidth:"sm",fullWidth:!0,onClick:a=>a.stopPropagation(),children:[(0,d.jsxs)(K.A,{component:"div",sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(v.A,{color:"primary"}),"Update ",c]}),(0,d.jsxs)(L.A,{children:[(0,d.jsxs)(O.default,{sx:{display:"flex",alignItems:"center",gap:1,mb:1,flexWrap:"wrap"},children:[(0,d.jsx)(D.A,{size:"small",label:(0,Y.Fu)(l.localSha),sx:{fontFamily:"monospace"}}),(0,d.jsx)(P.default,{variant:"body2",color:"text.secondary",children:"→"}),(0,d.jsx)(D.A,{size:"small",color:"primary",label:(0,Y.Fu)(l.remoteSha),sx:{fontFamily:"monospace"}}),l.branch&&"HEAD"!==l.branch&&(0,d.jsxs)(P.default,{variant:"body2",color:"text.secondary",children:["on ",(0,d.jsx)("code",{children:l.branch})]}),o?.behindBy!=null&&(0,d.jsxs)(P.default,{variant:"body2",color:"text.secondary",children:["(",o.behindBy," commit",1===o.behindBy?"":"s"," behind)"]})]}),l.repoRoot&&l.repoRoot.replace(/\\/g,"/").replace(/\/+$/,"").toLowerCase()!==f.replace(/\\/g,"/").replace(/\/+$/,"").toLowerCase()&&(0,d.jsxs)(P.default,{variant:"body2",color:"text.secondary",sx:{mb:1},children:["This server lives inside a larger repository — the update pulls"," ",(0,d.jsx)("code",{children:l.repoRoot})," as a whole (other servers from the same repository are updated along with it)."]}),o&&o.commits.length>0&&!ab&&(0,d.jsx)(O.default,{sx:{mb:2,p:1,borderRadius:1,border:"1px solid",borderColor:"divider",maxHeight:160,overflow:"auto"},children:o.commits.map(a=>(0,d.jsxs)(P.default,{variant:"body2",sx:{fontSize:"0.8rem"},noWrap:!0,title:a.message,children:[(0,d.jsx)("code",{children:a.sha})," ",a.message]},a.sha))}),l.hasLocalChanges&&!ab&&(0,d.jsxs)(Q.A,{severity:"warning",sx:{mb:2},children:[(0,d.jsxs)(P.default,{variant:"body2",sx:{mb:1},children:["This repository has local changes to tracked files. Updating will ",(0,d.jsx)("strong",{children:"discard"})," them. Untracked files (e.g. a ",(0,d.jsx)("code",{children:".env"})," you created) and all FLUJO settings for this server are kept."]}),(0,d.jsx)(O.default,{component:"ul",sx:{m:0,pl:3,maxHeight:100,overflow:"auto"},children:l.dirtyFiles.map(a=>(0,d.jsx)("li",{children:(0,d.jsx)(P.default,{variant:"body2",component:"span",sx:{fontFamily:"monospace",fontSize:"0.8rem"},children:a})},a))}),(0,d.jsx)(R.A,{sx:{mt:1},control:(0,d.jsx)(S.A,{size:"small",checked:q,onChange:a=>r(a.target.checked)}),label:(0,d.jsx)(P.default,{variant:"body2",children:"Discard my local changes and update"})})]}),(0,d.jsx)(T.A,{dense:!0,disablePadding:!0,children:H.filter(a=>a.active).map(a=>(0,d.jsxs)(U.Ay,{disableGutters:!0,sx:{py:.25},children:[(0,d.jsx)(V.A,{sx:{minWidth:32},children:(a=>{switch(a){case"running":return(0,d.jsx)(y.default,{size:"small",color:"primary"});case"done":return(0,d.jsx)(h.A,{color:"success",fontSize:"small"});case"error":return(0,d.jsx)(j.A,{color:"error",fontSize:"small"});default:return(0,d.jsx)(X.A,{color:"disabled",fontSize:"small"})}})(A[a.key])}),(0,d.jsx)(W.A,{primary:a.label,primaryTypographyProps:{variant:"body2",noWrap:!0,title:a.label}})]},a.key))}),x&&(0,d.jsxs)(Q.A,{severity:"error",sx:{mt:2,whiteSpace:"pre-wrap"},children:[x,k&&(0,d.jsx)(P.default,{variant:"body2",sx:{mt:1},children:"The server was left stopped. Adjust the install/build commands via Edit, then re-enable it."})]}),u&&(0,d.jsxs)(Q.A,{severity:"success",sx:{mt:2},children:["Server updated successfully",k?" and restarted":"","."]}),C&&(0,d.jsx)(O.default,{sx:{mt:2,p:1,borderRadius:1,bgcolor:"background.paper",border:"1px solid",borderColor:"divider",fontFamily:"monospace",fontSize:"0.75rem",whiteSpace:"pre-wrap",overflow:"auto",maxHeight:200},children:C})]}),(0,d.jsxs)(M.A,{children:[(0,d.jsx)(N.A,{onClick:b,disabled:s,children:u?"Close":"Cancel"}),!u&&(0,d.jsx)(N.A,{variant:"contained",color:"primary",startIcon:(0,d.jsx)(v.A,{}),onClick:aa,disabled:s||ac,children:s?"Updating…":x?"Retry Update":"Update"})]})]})};var aa=c(37674),ab=c(44079),ac=c(47902);let ad=(0,f.h)("frontend/components/mcp/MCPServerManager/FilesystemRootsModal"),ae=({open:a,serverName:b,initialRoots:c,onClose:f,onSaved:g})=>{let[h,i]=(0,e.useState)([]),[j,k]=(0,e.useState)(""),[l,n]=(0,e.useState)(!1),[o,p]=(0,e.useState)(null),q="bash"===b;(0,e.useEffect)(()=>{a&&(i(Array.isArray(c)?[...c]:[]),k(""),p(null))},[a,c]);let r=()=>{let a=j.trim();if(a){if(h.includes(a))return void p("That root is already in the list.");i(b=>[...b,a]),k(""),p(null)}},s=async()=>{n(!0),p(null);try{let a=await A.S.updateServerConfig(b,{roots:h});if(a&&"error"in a&&a.error)return void p("string"==typeof a.error?a.error:"Failed to save roots.");ad.info(`Saved ${h.length} root(s) for ${b}`),g?.(h),f()}catch(a){ad.warn("Failed to save filesystem roots",a),p(a instanceof Error?a.message:"Failed to save roots.")}finally{n(!1)}};return(0,d.jsxs)(J.A,{open:a,onClose:f,maxWidth:"sm",fullWidth:!0,onClick:a=>a.stopPropagation(),children:[(0,d.jsxs)(K.A,{children:["Configure ",b," roots"]}),(0,d.jsxs)(L.A,{children:[(0,d.jsxs)(P.default,{variant:"body2",color:"text.secondary",sx:{mb:2},children:["Confine the built-in ",(0,d.jsx)("b",{children:b})," server to these folders. Leave the list empty for full host access (unless the ",(0,d.jsx)("code",{children:q?"FLUJO_BASH_ROOTS":"FLUJO_FS_ROOTS"})," environment variable is set, which always acts as a hard ceiling)."]}),q&&(0,d.jsxs)(Q.A,{severity:"info",sx:{mb:2},children:["The bash ",(0,d.jsx)("code",{children:"cwd"})," fence is best-effort: a shell can still ",(0,d.jsx)("code",{children:"cd"})," elsewhere or use absolute paths, so ",(0,d.jsx)("code",{children:"FLUJO_FS_ROOTS"}),"/",(0,d.jsx)("code",{children:"FLUJO_BASH_ROOTS"})," and OS permissions remain the real boundary."]}),o&&(0,d.jsx)(Q.A,{severity:"error",sx:{mb:2},onClose:()=>p(null),children:o}),(0,d.jsxs)(O.default,{sx:{display:"flex",gap:1,mb:1},children:[(0,d.jsx)(aa.A,{fullWidth:!0,size:"small",label:"Add a root folder (absolute path)",value:j,onChange:a=>k(a.target.value),onKeyDown:a=>{"Enter"===a.key&&(a.preventDefault(),r())},placeholder:"e.g. C:\\\\Users\\\\me\\\\project or /home/me/project"}),(0,d.jsx)(N.A,{variant:"outlined",startIcon:(0,d.jsx)(ac.A,{}),onClick:r,disabled:!j.trim(),children:"Add"})]}),0===h.length?(0,d.jsx)(P.default,{variant:"body2",color:"text.secondary",sx:{mt:1},children:"No roots configured — the server has full host access."}):(0,d.jsx)(T.A,{dense:!0,children:h.map((a,b)=>(0,d.jsx)(U.Ay,{secondaryAction:(0,d.jsx)(ab.A,{edge:"end","aria-label":"remove root",onClick:()=>{i(a=>a.filter((a,c)=>c!==b))},children:(0,d.jsx)(m.A,{fontSize:"small"})}),children:(0,d.jsx)(P.default,{variant:"body2",sx:{wordBreak:"break-all"},children:a})},`${a}-${b}`))})]}),(0,d.jsxs)(M.A,{children:[(0,d.jsx)(N.A,{onClick:f,disabled:l,children:"Cancel"}),(0,d.jsx)(N.A,{onClick:s,variant:"contained",disabled:l,children:l?"Saving…":"Save"})]})]})};var af=c(30873),ag=c(60839),ah=c(30818),ai=c(43312),aj=c(37489),ak=c(27114),al=c(67191),am=c(98463);let an=(0,f.h)("frontend/components/mcp/MCPServerManager/ServerCard"),ao=({name:a,status:b,path:f,enabled:E,transport:F,onToggle:G=()=>{},onRetry:H=()=>{},onDelete:R=()=>{},onClick:T,onEdit:U=()=>{},onAuthenticate:V,pickerMode:W=!1,error:X,stderrOutput:Z,authorizationUrl:$,selected:aa=!1,onSelect:ac,selectionMode:ad=!1,hasOAuthTokens:ao=!1,exposeAsMcpServer:ap=!1,enableMcpApps:aq=!1,updateInfo:ar,installCommand:as,buildCommand:at,onUpdated:au,folder:av,folders:aw=[],onSetFolder:ax,favorite:ay=!1,onToggleFavorite:az,builtIn:aA=!1,serverConfig:aB})=>{let[aC,aD]=(0,e.useState)(!1),[aE,aF]=(0,e.useState)(null),[aG,aH]=(0,e.useState)(!1),[aI,aJ]=(0,e.useState)(!1),[aK,aL]=(0,e.useState)(""),[aM,aN]=(0,e.useState)("success"),[aO,aP]=(0,e.useState)(!1),[aQ,aR]=(0,e.useState)(!1),[aS,aT]=(0,e.useState)(!1),[aU,aV]=(0,e.useState)(aB?.roots);(0,e.useEffect)(()=>{aV(aB?.roots)},[aB?.roots]);let[aW,aX]=(0,e.useState)(ap),[aY,aZ]=(0,e.useState)(aq),a$=(0,ag.A)();(0,e.useEffect)(()=>{aX(ap)},[ap]),(0,e.useEffect)(()=>{aZ(aq)},[aq]);let a_=async b=>{aX(b);let c=await A.S.updateServerConfig(a,{exposeAsMcpServer:b});"success"in c&&c.success?(aL(b?"Server is now exposed to external apps.":"Server is no longer exposed."),aN("success")):(aX(!b),aL("Failed to update exposure setting."),aN("error")),aJ(!0)},a0=async b=>{aZ(b);let c=await A.S.updateServerConfig(a,{enableMcpApps:b});"success"in c&&c.success?(aL(b?"This server may now render interactive apps in chat (sandboxed).":"Interactive apps disabled for this server."),aN("success")):(aZ(!b),aL("Failed to update the MCP Apps setting."),aN("error")),aJ(!0)},a1=()=>{navigator.clipboard.writeText(""),aL("Endpoint URL copied to clipboard."),aN("success"),aJ(!0)},a2=()=>{navigator.clipboard.writeText((0,B.CZ)(a,aB,"")),aL("Server JSON copied to clipboard."),aN("success"),aJ(!0)},a3={connected:"success.main",disconnected:"text.secondary",error:"error.main",connecting:"info.main",initialization:"info.main",requires_authentication:"warning.main"}[b];(0,e.useEffect)(()=>{if(("connecting"===b||"initialization"===b)&&E&&!W){aP(!0);let b=setTimeout(()=>{an.debug(`Polling status for server: ${a}`),H()},2e3);return()=>{clearTimeout(b),aP(!1)}}"connecting"!==b&&"initialization"!==b&&aP(!1)},[b,E,a,H]);let[a4,a5]=(0,e.useState)(null);(0,e.useEffect)(()=>()=>{a4&&clearTimeout(a4)},[a4]);let a6=async b=>{b.stopPropagation(),an.debug(`Reset OAuth tokens button clicked for server: ${a}`),aR(!0);try{let b=await fetch("/api/oauth/reset",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({serverName:a})});if(!b.ok){let a=await b.json();throw Error(a.error||"Failed to reset OAuth tokens")}let c=await b.json();an.info(`OAuth tokens reset successfully for ${a}`,c),aL("OAuth tokens reset successfully. Server will require re-authentication."),aN("success"),aJ(!0),setTimeout(()=>{H()},500)}catch(b){an.error(`Failed to reset OAuth tokens for ${a}`,b),aL(`Failed to reset OAuth tokens: ${b instanceof Error?b.message:"Unknown error"}`),aN("error"),aJ(!0)}finally{aR(!1)}},{getThemeValue:a7,getThemeColor:a8,colors:a9}=(0,g.Ic)(),ba=()=>{an.debug(`Server restart initiated for: ${a}`),G(!1),setTimeout(()=>{G(!0),an.info(`Server ${a} restarted`)},1e3)};return(0,d.jsxs)(ah.A,{role:W?"button":void 0,"aria-pressed":W?aa:void 0,sx:{cursor:"pointer",position:"relative",height:W?"100%":void 0,transition:"box-shadow 0.3s ease, border-color 0.12s ease",border:a=>W&&aa?`2px solid ${a.palette.primary.main}`:"2px solid transparent","&:hover":{boxShadow:3}},onClick:()=>{an.debug(`Server card clicked: ${a}`),T()},children:[az&&!aA&&(0,d.jsx)(ai.A,{title:ay?"Remove from favorites":"Add to favorites",arrow:!0,placement:"top",children:(0,d.jsx)(ab.A,{size:"small","aria-label":ay?"remove from favorites":"add to favorites",onClick:a=>{a.stopPropagation(),az()},sx:{position:"absolute",top:4,left:4,zIndex:2,color:ay?a$.palette.warning.main:a$.palette.text.secondary,backgroundColor:(0,aj.X4)(a$.palette.background.paper,.6),"&:hover":{backgroundColor:(0,aj.X4)(a$.palette.background.paper,.9)}},children:ay?(0,d.jsx)(w.A,{fontSize:"small"}):(0,d.jsx)(x.A,{fontSize:"small"})})}),(0,d.jsxs)(ak.A,{sx:{pb:1},children:[(0,d.jsxs)(O.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"flex-start",mb:1},children:[(0,d.jsxs)(O.default,{sx:{display:"flex",alignItems:"center",flex:1},children:[ad&&ac&&(0,d.jsx)(S.A,{checked:aa,onClick:a=>a.stopPropagation(),onChange:a=>ac(a.target.checked),size:"small",sx:{mr:1,p:.5}}),(0,d.jsx)(P.default,{variant:"h6",component:"h3",sx:{flex:1},children:a})]}),(0,d.jsxs)(O.default,{sx:{display:"flex",flexDirection:"column",alignItems:"flex-end",gap:.5},children:[(0,d.jsxs)(O.default,{sx:{display:"flex",alignItems:"center",gap:.5},children:[ar?.updateAvailable&&(0,d.jsx)(ai.A,{title:`Update available: ${(0,Y.Fu)(ar.localSha)} → ${(0,Y.Fu)(ar.remoteSha)}. Click to update.`,children:(0,d.jsx)(D.A,{icon:(0,d.jsx)(v.A,{}),label:"Update",color:"warning",size:"small",onClick:b=>{b.stopPropagation(),an.debug(`Update badge clicked for server: ${a}`),aH(!0)}})}),aA?(0,d.jsx)(ai.A,{title:"FLUJO's built-in server — can be enabled or disabled below, but not edited or removed.",children:(0,d.jsx)(D.A,{label:"Built-in",color:"primary",size:"small"})}):(0,d.jsx)(I,{transport:F,size:"small"})]}),(0,d.jsxs)(O.default,{sx:{display:"flex",alignItems:"center"},children:["connected"===b&&(0,d.jsx)(h.A,{color:"success",sx:{mr:.5},fontSize:"small"}),"disconnected"===b&&(0,d.jsx)(i.A,{color:"action",sx:{mr:.5},fontSize:"small"}),"error"===b&&(0,d.jsx)(j.A,{color:"error",sx:{mr:.5},fontSize:"small"}),"requires_authentication"===b&&(0,d.jsx)(n.A,{color:"warning",sx:{mr:.5},fontSize:"small"}),("connecting"===b||"initialization"===b)&&(0,d.jsx)(y.default,{size:"small",color:"primary",sx:{mr:.5}}),(0,d.jsx)(P.default,{variant:"body2",color:a3,children:"requires_authentication"===b?"Requires Authentication":b})]})]})]}),(0,d.jsx)(P.default,{variant:"body2",color:"text.secondary",sx:{mb:1,fontSize:"0.875rem"},noWrap:!0,title:aA?void 0:f,children:aA?"FLUJO's own backend API — flow authoring, execution and server management as MCP tools.":f}),aA&&!W&&(0,d.jsxs)(O.default,{sx:{mt:1,mb:1,p:1,borderRadius:1,border:"1px solid",borderColor:"divider"},onClick:a=>a.stopPropagation(),children:[(0,d.jsxs)(O.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(q.A,{fontSize:"small",sx:{mr:.5,color:"primary.main"}}),(0,d.jsx)(ai.A,{title:"External MCP clients (Claude Code, Claude Desktop, Cursor, …) can drive FLUJO through this local endpoint.",children:(0,d.jsx)(P.default,{variant:"body2",sx:{fontWeight:500},children:"Exposed to external apps"})})]}),(0,d.jsxs)(O.default,{sx:{display:"flex",alignItems:"center",mt:.5},children:[(0,d.jsx)(P.default,{variant:"caption",sx:{flex:1,fontFamily:"monospace",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:"",children:""}),(0,d.jsx)(ai.A,{title:"Copy endpoint URL",children:(0,d.jsx)(ab.A,{size:"small",onClick:a1,children:(0,d.jsx)(s.A,{fontSize:"small"})})}),(0,d.jsx)(ai.A,{title:"Copy MCP server JSON",children:(0,d.jsx)(ab.A,{size:"small",onClick:a2,children:(0,d.jsx)(t.A,{fontSize:"small"})})})]})]}),!aA&&!W&&(0,d.jsxs)(O.default,{sx:{mt:1,mb:1,p:1,borderRadius:1,border:"1px solid",borderColor:"divider"},onClick:a=>a.stopPropagation(),children:[(0,d.jsxs)(O.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(q.A,{fontSize:"small",sx:{mr:.5,color:aW?"primary.main":"text.disabled"}}),(0,d.jsx)(al.A,{checked:aW,onChange:a=>a_(a.target.checked),size:"small"}),(0,d.jsx)(ai.A,{title:"Re-expose this server's tools to external MCP clients (Claude Desktop, Cursor, …) at a local URL.",children:(0,d.jsx)(P.default,{variant:"body2",sx:{fontWeight:500},children:"Expose to external apps"})})]}),aW&&(0,d.jsxs)(O.default,{sx:{display:"flex",alignItems:"center",mt:.5},children:[(0,d.jsx)(P.default,{variant:"caption",sx:{flex:1,fontFamily:"monospace",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:"",children:""}),(0,d.jsx)(ai.A,{title:"Copy endpoint URL",children:(0,d.jsx)(ab.A,{size:"small",onClick:a1,children:(0,d.jsx)(s.A,{fontSize:"small"})})}),(0,d.jsx)(ai.A,{title:"Copy MCP server JSON",children:(0,d.jsx)(ab.A,{size:"small",onClick:a2,children:(0,d.jsx)(t.A,{fontSize:"small"})})})]})]}),!aA&&!W&&(0,d.jsx)(O.default,{sx:{mt:1,mb:1,p:1,borderRadius:1,border:"1px solid",borderColor:"divider"},onClick:a=>a.stopPropagation(),children:(0,d.jsxs)(O.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(r.A,{fontSize:"small",sx:{mr:.5,color:aY?"primary.main":"text.disabled"}}),(0,d.jsx)(al.A,{checked:aY,onChange:a=>a0(a.target.checked),size:"small"}),(0,d.jsx)(ai.A,{title:"Allow this server's tools to render isolated interactive apps (MCP Apps / ui:// resources) and broker same-server tool/resource requests. Only enable for servers you trust.",children:(0,d.jsx)(P.default,{variant:"body2",sx:{fontWeight:500},children:"Render interactive apps"})})]})}),"error"===b&&(0,d.jsxs)(O.default,{sx:{mt:1,mb:1},children:[(0,d.jsxs)(O.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:.5},children:[(0,d.jsx)(P.default,{variant:"body2",fontWeight:"medium",color:"error",children:"Error:"}),(0,d.jsx)(N.A,{size:"small",color:"primary",onClick:b=>{b.stopPropagation(),an.debug(`View full error clicked for server: ${a}`),aD(!0)},children:"View Full Error"})]}),(0,d.jsx)(O.default,{sx:{maxHeight:"80px",overflow:"auto",p:1,borderRadius:1,bgcolor:a=>a8("error.background"),color:a=>a8("error.text"),border:"1px solid",borderColor:a=>a8("error.border"),fontSize:"0.75rem",fontWeight:500,whiteSpace:"pre-wrap"},children:X||"Unknown error"})]}),"requires_authentication"===b&&!W&&(0,d.jsxs)(O.default,{sx:{mt:1,mb:1},children:[(0,d.jsx)(O.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:1},children:(0,d.jsx)(P.default,{variant:"body2",fontWeight:"medium",color:"warning.main",children:"Authentication Required"})}),(0,d.jsxs)(N.A,{variant:"contained",color:"warning",size:"small",startIcon:(0,d.jsx)(o.A,{}),onClick:async b=>{if(b.stopPropagation(),an.debug(`Authenticate button clicked for server: ${a}`),V)V();else try{let b=await fetch("/api/oauth/initiate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({serverName:a})});if(!b.ok){let a=await b.json();throw Error(a.error||"Failed to initiate OAuth")}let{authorizationUrl:d,alreadyAuthorized:e}=await b.json();if(e||!d){an.info(`Server ${a} already authorized, no popup needed`),ba();return}let{openOAuthPopup:f}=await c.e(558).then(c.bind(c,60558));await f({url:d,windowName:`oauth_${a}`,onSuccess:b=>{an.info(`OAuth authentication successful for ${a}`,b),an.info(`Automatically restarting server ${a} after OAuth completion`),ba()},onError:b=>{an.error(`OAuth authentication failed for ${a}`,b),aL("OAuth authentication failed"),aN("error"),aJ(!0)}})}catch(b){an.error(`Failed to start OAuth authentication for ${a}`,b),aL("Failed to start OAuth authentication"),aN("error"),aJ(!0)}},sx:{width:"100%"},children:["Authenticate with ",a]})]})]}),aA&&!W&&G&&(0,d.jsx)(am.A,{sx:{justifyContent:"flex-start",px:2,py:1},onClick:a=>a.stopPropagation(),children:(0,d.jsxs)(O.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(al.A,{checked:E,onClick:a=>a.stopPropagation(),onChange:b=>{an.debug(`Built-in server ${a} toggle changed to: ${b.target.checked}`),G(b.target.checked)},color:"primary",size:"small"}),(0,d.jsx)(P.default,{variant:"body2",sx:{ml:.5,fontWeight:500,color:E?"primary.main":"text.secondary"},children:E?"Enabled":"Disabled"}),("filesystem"===a||"bash"===a)&&(0,d.jsx)(ai.A,{title:`Configure ${a} roots`,children:(0,d.jsxs)(N.A,{size:"small",variant:"text",startIcon:(0,d.jsx)(C.A,{fontSize:"small"}),sx:{ml:1.5,textTransform:"none"},onClick:a=>{a.stopPropagation(),aT(!0)},children:["Configure roots",aU&&aU.length?` (${aU.length})`:""]})})]})}),("filesystem"===a||"bash"===a)&&(0,d.jsx)(ae,{open:aS,serverName:a,initialRoots:aU,onClose:()=>aT(!1),onSaved:a=>aV(a)}),!aA&&!W&&(0,d.jsxs)(am.A,{sx:{justifyContent:"space-between",px:2,py:1},children:[(0,d.jsxs)(O.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(al.A,{checked:E,onClick:a=>a.stopPropagation(),onChange:b=>{an.debug(`Server ${a} toggle changed to: ${b.target.checked}`),G(b.target.checked)},color:"primary",size:"small"}),(0,d.jsx)(P.default,{variant:"body2",sx:{ml:.5,fontWeight:500,color:E?"primary.main":"text.secondary"},children:E?"Enabled":"Disabled"}),E&&(0,d.jsx)(ai.A,{title:"Restart server",children:(0,d.jsx)(ab.A,{size:"small",onClick:b=>{b.stopPropagation(),an.debug(`Restart button clicked for server: ${a}`),ba()},sx:{ml:1},children:(0,d.jsx)(k.A,{fontSize:"small"})})})]}),(0,d.jsxs)(O.default,{children:[(0,d.jsx)(ai.A,{title:"Retry connection",children:(0,d.jsx)(ab.A,{color:"primary",onClick:c=>{c.stopPropagation(),an.debug(`Retry button clicked for server: ${a}`),a4&&clearTimeout(a4),aP(!0),H();let d=setTimeout(()=>{"connecting"!==b&&"initialization"!==b&&aP(!1),a5(null)},1e4);a5(d)},disabled:aO,size:"small",children:aO?(0,d.jsx)(y.default,{size:"small",color:"primary"}):(0,d.jsx)(k.A,{})})}),"streamable"===F&&ao&&(0,d.jsx)(ai.A,{title:"Reset OAuth tokens",children:(0,d.jsx)(ab.A,{color:"warning",onClick:a6,disabled:aQ,size:"small",children:aQ?(0,d.jsx)(y.default,{size:"small",color:"primary"}):(0,d.jsx)(p.A,{})})}),ax&&(0,d.jsx)(ai.A,{title:av?`Folder: ${av}`:"Move to folder",children:(0,d.jsx)(ab.A,{color:av?"primary":"default",onClick:a=>{a.stopPropagation(),aF(a.currentTarget)},size:"small",children:(0,d.jsx)(u.A,{})})}),(0,d.jsx)(ai.A,{title:"Edit server",children:(0,d.jsx)(ab.A,{color:"primary",onClick:a=>{a.stopPropagation(),U()},size:"small",children:(0,d.jsx)(l.A,{})})}),(0,d.jsx)(ai.A,{title:"Delete server",children:(0,d.jsx)(ab.A,{color:"error",onClick:a=>{a.stopPropagation(),R()},size:"small",children:(0,d.jsx)(m.A,{})})})]})]}),ax&&(0,d.jsx)(z.A,{anchorEl:aE,open:!!aE,currentFolder:av,folders:aw,onClose:()=>aF(null),onAssign:a=>ax(a)}),(0,d.jsxs)(J.A,{open:aC,onClose:()=>{an.debug(`Error modal closed for server: ${a}`),aD(!1)},maxWidth:"md",fullWidth:!0,onClick:a=>a.stopPropagation(),children:[(0,d.jsxs)(K.A,{component:"div",children:["Error Details for ",a]}),(0,d.jsxs)(L.A,{children:[(0,d.jsx)(O.default,{sx:{p:2,borderRadius:1,bgcolor:a=>a8("error.background"),color:a=>a8("error.text"),border:"1px solid",borderColor:a=>a8("error.border"),fontFamily:"monospace",fontSize:"0.875rem",fontWeight:500,whiteSpace:"pre-wrap",overflow:"auto",maxHeight:"300px",mb:2},children:X||"Unknown error"}),Z&&(0,d.jsxs)(O.default,{sx:{mt:2},children:[(0,d.jsx)(P.default,{variant:"h6",gutterBottom:!0,children:"Stderr Output:"}),(0,d.jsx)(O.default,{sx:{p:2,borderRadius:1,bgcolor:"background.paper",border:"1px solid",borderColor:"divider",fontFamily:"monospace",fontSize:"0.875rem",whiteSpace:"pre-wrap",overflow:"auto",maxHeight:"300px"},children:Z})]})]}),(0,d.jsxs)(M.A,{children:[(0,d.jsx)(N.A,{onClick:()=>aD(!1),children:"Close"}),(0,d.jsx)(N.A,{onClick:()=>{let b=[X||"Unknown error",Z?`
3
3
 
4
4
  Stderr Output:
5
5
  ${Z}`:""].join("");navigator.clipboard.writeText(b),an.debug(`Error copied to clipboard for server: ${a}`),aL("Error message copied to clipboard"),aN("success"),aJ(!0)},color:"primary",children:"Copy to Clipboard"})]})]}),ar&&(0,d.jsx)(_,{open:aG,onClose:()=>aH(!1),serverName:a,rootPath:f,installCommand:as,buildCommand:at,enabled:E,updateInfo:ar,onToggle:G,onUpdated:au}),(0,d.jsx)(af.A,{open:aI,autoHideDuration:3e3,onClose:()=>aJ(!1),anchorOrigin:{vertical:"bottom",horizontal:"center"},children:(0,d.jsx)(Q.A,{onClose:()=>aJ(!1),severity:aM,sx:{width:"100%"},children:aK||"Error message copied to clipboard"})})]})}},44920:(a,b,c)=>{function d(a){let b={};if(!a)return b;for(let[c,d]of Object.entries(a))b[c]=d&&"object"==typeof d&&"value"in d?d.value:"string"==typeof d?d:"";return b}function e(a){let b,c=[],d=[];if("string"==typeof a)try{b=JSON.parse(a)}catch(a){return{servers:d,errors:[`Invalid JSON: ${a.message}`]}}else b=a;if(!b||"object"!=typeof b)return{servers:d,errors:["Expected a JSON object."]};let e=b,f=e.mcpServers&&"object"==typeof e.mcpServers?e.mcpServers:e;if(0===Object.keys(f).length)return{servers:d,errors:['No servers found. Expected an "mcpServers" object.']};for(let[a,b]of Object.entries(f)){if(!b||"object"!=typeof b){c.push(`"${a}": entry is not an object.`);continue}let e=function(a){let b=(a.transport||a.type||"").toString().toLowerCase().trim();if(!b)return"stdio";switch(b){case"stdio":return"stdio";case"http":case"streamable-http":case"streamable":case"streamablehttp":return"streamable";case"sse":return"sse";case"ws":case"websocket":return"websocket";default:return null}}(b);if(!e){c.push(`"${a}": unknown transport type "${b.type||b.transport}".`);continue}let f={};if(b.env&&"object"==typeof b.env)for(let[a,c]of Object.entries(b.env))f[a]="string"==typeof c?c:String(c??"");let g={name:a,env:f,disabled:b.disabled??!1,autoApprove:Array.isArray(b.autoApprove)?b.autoApprove:[],rootPath:"",_buildCommand:"",_installCommand:""};if("stdio"===e){if(!b.command||"string"!=typeof b.command){c.push(`"${a}": stdio server is missing a "command".`);continue}d.push({...g,transport:"stdio",command:b.command,args:Array.isArray(b.args)?b.args:[]})}else if("websocket"===e){let e=b.url||b.websocketUrl;if(!e){c.push(`"${a}": websocket server is missing a "url".`);continue}d.push({...g,transport:"websocket",websocketUrl:e})}else{let f=b.url||b.serverUrl;if(!f){c.push(`"${a}": ${e} server is missing a "url".`);continue}let h=b.headers&&"object"==typeof b.headers?b.headers:void 0;d.push({...g,transport:e,serverUrl:f,...h?{headers:h}:{}})}}return{servers:d,errors:c}}c.d(b,{_i:()=>f,CZ:()=>h,Kt:()=>g});let f=[{id:"claude",label:"Claude",fileName:"mcp_config.json",export:function(a,b={}){let c=(b.proxyBaseUrl||"").replace(/\/$/,""),e={};for(let b of a){if(b.exposeAsMcpServer){e[b.name]={type:"http",url:`${c}/mcp-proxy/${b.name}`};continue}let a={},f=d(b.env);switch(b.transport){case"stdio":a.command=b.command,a.args=b.args||[],Object.keys(f).length>0&&(a.env=f);break;case"streamable":a.type="http",a.url=b.serverUrl,b.headers&&Object.keys(b.headers).length>0&&(a.headers=d(b.headers)),Object.keys(f).length>0&&(a.env=f);break;case"sse":a.type="sse",a.url=b.serverUrl,b.headers&&Object.keys(b.headers).length>0&&(a.headers=d(b.headers)),Object.keys(f).length>0&&(a.env=f);break;case"websocket":a.type="ws",a.url=b.websocketUrl,Object.keys(f).length>0&&(a.env=f);break;default:Object.keys(f).length>0&&(a.env=f)}e[b.name]=a}return{mcpServers:e}},import:e},{id:"cline",label:"Cline",fileName:"cline_mcp_settings.json",export:function(a,b={}){let c=(b.proxyBaseUrl||"").replace(/\/$/,""),e={};for(let b of a){let a={disabled:b.disabled??!1,autoApprove:b.autoApprove??[],timeout:60};if(b.exposeAsMcpServer){e[b.name]={...a,type:"streamableHttp",url:`${c}/mcp-proxy/${b.name}`};continue}let f=d(b.env),g={...a};switch(b.transport){case"stdio":g.command=b.command,g.args=b.args||[],Object.keys(f).length>0&&(g.env=f);break;case"streamable":g.type="streamableHttp",g.url=b.serverUrl,b.headers&&Object.keys(b.headers).length>0&&(g.headers=d(b.headers));break;case"sse":g.type="sse",g.url=b.serverUrl,b.headers&&Object.keys(b.headers).length>0&&(g.headers=d(b.headers));break;case"websocket":g.type="ws",g.url=b.websocketUrl;break;default:Object.keys(f).length>0&&(g.env=f)}e[b.name]=g}return{mcpServers:e}},import:function(a){return e(a)}}];function g(a){return f.find(b=>b.id===a)??f[0]}function h(a,b,c,d="claude"){let e=(c||"").replace(/\/$/,"");return JSON.stringify(b?g(d).export([b],{proxyBaseUrl:e}):{mcpServers:{[a]:{type:"http",url:`${e}/mcp-proxy/${a}`}}},null,2)}},48748:(a,b,c)=>{c.d(b,{Ic:()=>h});var d=c(32631),e=c(19815);let f={light:{background:"#FFFFFF",foreground:"#2C3E50",surface:"#F5F6FA",surfaceRaised:"#FFFFFF",paperBackground:"#F5F6FA",textSecondary:"#7F8C8D",textDisabled:"#9CA3AF",border:"#e5e7eb",heading:"#111",text:"#333",secondaryText:"#666",error:{background:"#fef2f2",border:"#fecaca",text:"#dc2626"},domain:{resource:"#009688",resourceSoft:"#4DB6AC",signal:"#7E57C2",startNode:"#795548",codeBackground:"#f5f5f5",http:{get:"#2e7d32",post:"#1565c0",put:"#e65100",patch:"#6a1b9a",delete:"#c62828"},transport:{stdio:{fg:"#1976d2",bg:"#e3f2fd"},websocket:{fg:"#2e7d32",bg:"#e8f5e8"},sse:{fg:"#f57c00",bg:"#fff3e0"},streamable:{fg:"#00796b",bg:"#e0f2f1"},default:{fg:"#757575",bg:"#f5f5f5"}}}},dark:{background:"#0f1319",foreground:"#eef1f5",surface:"#1a212b",surfaceRaised:"#242d3a",paperBackground:"#1a212b",textSecondary:"#b4bdca",textDisabled:"#6b7280",border:"#37404e",heading:"#f5f7fa",text:"#eef1f5",secondaryText:"#b4bdca",error:{background:"#2a1618",border:"#5a2a2e",text:"#ff6b6b"},domain:{resource:"#26a69a",resourceSoft:"#4DB6AC",signal:"#9575CD",startNode:"#a1887f",codeBackground:"#242d3a",http:{get:"#66bb6a",post:"#5b9dff",put:"#ffa726",patch:"#ba68c8",delete:"#ef5350"},transport:{stdio:{fg:"#90caf9",bg:"#1e2a3a"},websocket:{fg:"#a5d6a7",bg:"#1e2e22"},sse:{fg:"#ffcc80",bg:"#33281a"},streamable:{fg:"#80cbc4",bg:"#17322e"},default:{fg:"#b4bdca",bg:"#242d3a"}}}}},g=(0,e.h)("frontend/utils/theme");function h(){let{isDarkMode:a}=(0,d.D)();return g.debug(`useThemeUtils called with isDarkMode: ${a}`),{getThemeValue:(b,c)=>a?c:b,getThemeColor:b=>{let c=b.split("."),d=f[a?"dark":"light"];for(let a of c)if(!d||"object"!=typeof d||!(a in d))return g.warn(`Theme color path not found: ${b}`),"";else d=d[a];return d},colors:a?f.dark:f.light,isDarkMode:a}}},53455:(a,b,c)=>{c.d(b,{Fu:()=>i,M8:()=>f,Qv:()=>g,Qz:()=>h});let d=(0,c(19815).h)("frontend/components/mcp/MCPServerManager/utils/serverUpdates"),e=new Map;async function f(a,b=!1){let c=Date.now(),g={},h=[];for(let d of new Set(a.filter(Boolean))){let a=e.get(d);!b&&a&&c-a.at<6e5?g[d]=a.info:h.push(d)}if(h.length>0)try{let a=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"checkUpdatesBatch",paths:h})}),b=await a.json();if(a.ok&&b.results)for(let[a,d]of Object.entries(b.results))e.set(a,{at:c,info:d}),g[a]=d;else d.warn("Batch update check failed",b.error)}catch(a){d.warn("Batch update check request failed",a)}return g}async function g(a){try{let b=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"pullUpdates",savePath:a})}),c=await b.json();if(!b.ok)return{success:!1,error:c.error||"Failed to pull updates"};return{success:!0,oldSha:c.oldSha,newSha:c.newSha,updated:c.updated}}catch(a){return{success:!1,error:a.message||"Failed to pull updates"}}}async function h(a,b,c){let e=a.match(/github\.com[:/]([^/]+)\/([^/]+?)(?:\.git)?\/?$/i);if(!e)return null;try{let a=await fetch(`https://api.github.com/repos/${e[1]}/${e[2]}/compare/${b}...${c}`);if(!a.ok)return null;let d=await a.json(),f=Array.isArray(d.commits)?d.commits:[];return{behindBy:"number"==typeof d.total_commits?d.total_commits:null,commits:f.slice(-10).reverse().map(a=>({sha:(a.sha||"").slice(0,7),message:(a.commit?.message||"").split("\n")[0]}))}}catch(a){return d.debug("GitHub compare preview failed (non-fatal)",a),null}}function i(a){return a?a.slice(0,7):""}},61160:(a,b,c)=>{c.d(b,{mO:()=>f,oO:()=>g});var d=c(7329);let e=["stdio","websocket","sse","streamable"];function f(a,b){switch(b){case"name-asc":case"name-desc":return(0,d.po)(a.name);case"status-connected":case"status-disconnected":{let b=a.status;if("connected"===b)return{key:"status:connected",label:"Connected"};if("error"===b)return{key:"status:error",label:"Error"};if("requires_authentication"===b)return{key:"status:auth",label:"Requires authentication"};return{key:"status:disconnected",label:"Disconnected"}}case"transport":{let b=a.transport||"unknown";return{key:`transport:${b}`,label:({stdio:"Stdio",websocket:"WebSocket",sse:"SSE",streamable:"Streamable HTTP"})[b]||b}}default:return{key:"all",label:"All servers"}}}function g(a,b){let c=(a,c)=>{switch(b){case"name-asc":return a.name.localeCompare(c.name);case"name-desc":return c.name.localeCompare(a.name);case"status-connected":if("connected"===a.status&&"connected"!==c.status)return -1;if("connected"!==a.status&&"connected"===c.status)return 1;return a.name.localeCompare(c.name);case"status-disconnected":if("disconnected"===a.status&&"disconnected"!==c.status)return -1;if("disconnected"!==a.status&&"disconnected"===c.status)return 1;return a.name.localeCompare(c.name);case"transport":{let b=e.indexOf(a.transport??""),d=e.indexOf(c.transport??"");if(b!==d)return b-d;return a.name.localeCompare(c.name)}default:return 0}};return[...a].sort((a,b)=>{let d=Number(!!b.favorite)-Number(!!a.favorite);return 0!==d?d:c(a,b)})}}};
@@ -1 +1 @@
1
- "use strict";exports.id=1634,exports.ids=[1634],exports.modules={2560:(a,b,c)=>{c.d(b,{Aq:()=>e,Xk:()=>g,vi:()=>f});var d=c(38301);function e(a,b){return b}function f(a,b){}function g(a,b){let[c,e]=(0,d.useState)(()=>b);return[c,(0,d.useCallback)(b=>{e(c=>{let d="function"==typeof b?b(c):b;return f(a,d),d})},[a])]}},7329:(a,b,c)=>{function d(a,b){let c=[],d=new Map;for(let e of a){let{key:a,label:f}=b(e),g=d.get(a);g||(g={key:a,label:f,items:[]},d.set(a,g),c.push(g)),g.items.push(e)}return c}function e(a){let b=(a??"").trim().charAt(0).toUpperCase();return b>="A"&&b<="Z"?{key:`letter:${b}`,label:b}:{key:"letter:#",label:"#"}}function f(a,b,c="Ungrouped"){let d=new Map,e=[];for(let c of a){let a=b(c)?.trim();if(a){let b=d.get(a);b?b.push(c):d.set(a,[c])}else e.push(c)}let g=Array.from(d.keys()).sort((a,b)=>a.localeCompare(b)).map(a=>({key:`folder:${a}`,label:a,items:d.get(a)}));return e.length>0&&g.push({key:"folder:__ungrouped__",label:c,items:e}),g}function g(a,b){let c=new Set;for(let d of a){let a=b(d)?.trim();a&&c.add(a)}return Array.from(c).sort((a,b)=>a.localeCompare(b))}c.d(b,{Az:()=>d,Je:()=>f,po:()=>e,yF:()=>g})},32640:(a,b,c)=>{c.d(b,{CR:()=>j,Lg:()=>g,eZ:()=>i,fC:()=>f});var d=c(76133),e=c(7329);let f={"name-asc":"Name (A-Z)","name-desc":"Name (Z-A)",provider:"Provider","context-desc":"Context (largest)","context-asc":"Context (smallest)"},g=a=>a.displayName||a.name||"",h=a=>(0,d.T_)(a.provider,a.adapter).label;function i(a,b){switch(b){case"provider":{let b=h(a);return{key:`provider:${b}`,label:b}}case"context-asc":case"context-desc":var c;return"number"!=typeof(c=a.contextWindow)||Number.isNaN(c)?{key:"ctx:unknown",label:"Unknown context"}:c<=8e3?{key:"ctx:<=8k",label:"≤ 8K tokens"}:c<=32e3?{key:"ctx:8k-32k",label:"8K–32K tokens"}:c<=128e3?{key:"ctx:32k-128k",label:"32K–128K tokens"}:c<=1e6?{key:"ctx:128k-1m",label:"128K–1M tokens"}:{key:"ctx:>1m",label:"> 1M tokens"};default:return(0,e.po)(g(a))}}function j(a,b){let c=(a,c)=>{switch(b){case"name-asc":return g(a).localeCompare(g(c));case"name-desc":return g(c).localeCompare(g(a));case"provider":return h(a).localeCompare(h(c))||g(a).localeCompare(g(c));case"context-desc":case"context-asc":{let d="number"!=typeof a.contextWindow||Number.isNaN(a.contextWindow)?void 0:a.contextWindow,e="number"!=typeof c.contextWindow||Number.isNaN(c.contextWindow)?void 0:c.contextWindow;if(void 0===d&&void 0===e)return g(a).localeCompare(g(c));if(void 0===d)return 1;if(void 0===e)return -1;let f="context-desc"===b?e-d:d-e;return 0!==f?f:g(a).localeCompare(g(c))}default:return 0}};return[...a].sort((a,b)=>{let d=Number(!!b.favorite)-Number(!!a.favorite);return 0!==d?d:c(a,b)})}},59737:(a,b,c)=>{c.d(b,{A:()=>m});var d=c(21124);c(38301);var e=c(60839),f=c(81637),g=c(44079),h=c(79515),i=c(41893),j=c(99561),k=c(17332),l=c(18467);let m=({label:a,count:b,expanded:c,onToggle:m,showFolderIcon:n=!1,children:o})=>{let p=(0,e.A)();return(0,d.jsxs)(f.default,{sx:{mb:1.5},children:[(0,d.jsxs)(f.default,{role:"button",tabIndex:0,"aria-expanded":c,onClick:m,onKeyDown:a=>{("Enter"===a.key||" "===a.key)&&(a.preventDefault(),m())},sx:{display:"flex",alignItems:"center",gap:1,px:1,py:.75,borderRadius:1,cursor:"pointer",userSelect:"none",backgroundColor:p.palette.background.default,border:`1px solid ${p.palette.divider}`,"&:hover":{backgroundColor:p.palette.action.hover}},children:[(0,d.jsx)(g.A,{size:"small","aria-label":c?"Collapse section":"Expand section",onClick:a=>{a.stopPropagation(),m()},sx:{transition:"transform 0.2s",transform:c?"rotate(0deg)":"rotate(-90deg)"},children:(0,d.jsx)(k.A,{fontSize:"small"})}),n&&(0,d.jsx)(l.A,{fontSize:"small",sx:{color:"text.secondary"}}),(0,d.jsx)(h.default,{variant:"subtitle2",sx:{fontWeight:600},children:a}),(0,d.jsx)(i.A,{label:b,size:"small",sx:{height:20,fontSize:"0.7rem"}})]}),(0,d.jsx)(j.A,{in:c,unmountOnExit:!0,children:(0,d.jsx)(f.default,{sx:{pt:1.5},children:o})})]})}},76133:(a,b,c)=>{c.d(b,{T_:()=>e,xx:()=>d});let d=[{id:"openai",label:"OpenAI",provider:"openai",adapter:"openai",sdkLabel:"OpenAI SDK",baseUrl:"https://api.openai.com/v1",showBaseUrl:!0},{id:"openai-responses",label:"OpenAI (Responses API)",provider:"openai",adapter:"openai-responses",sdkLabel:"OpenAI SDK (Responses)",baseUrl:"https://api.openai.com/v1",showBaseUrl:!0,defaultModels:["gpt-5","gpt-5-mini","o4-mini","o3"]},{id:"openrouter",label:"OpenRouter",provider:"openrouter",adapter:"openai",sdkLabel:"OpenAI SDK",baseUrl:"https://openrouter.ai/api/v1",showBaseUrl:!0},{id:"requesty",label:"Requesty",provider:"requesty",adapter:"openai",sdkLabel:"OpenAI SDK",baseUrl:"https://router.requesty.ai/v1",showBaseUrl:!0},{id:"xai",label:"X.ai",provider:"xai",adapter:"openai",sdkLabel:"OpenAI SDK",baseUrl:"https://api.x.ai/v1",showBaseUrl:!0},{id:"ollama",label:"Ollama",provider:"ollama",adapter:"openai",sdkLabel:"OpenAI SDK",baseUrl:"http://localhost:11434/v1",showBaseUrl:!0},{id:"litellm",label:"LiteLLM",provider:"litellm",adapter:"openai",sdkLabel:"OpenAI SDK (via LiteLLM Proxy)",baseUrl:"http://localhost:4000/v1",showBaseUrl:!0},{id:"gemini-openai",label:"Gemini (OpenAI Format)",provider:"gemini",adapter:"openai",sdkLabel:"OpenAI SDK",baseUrl:"https://generativelanguage.googleapis.com/v1beta/openai/",showBaseUrl:!0},{id:"gemini-native",label:"Gemini (Native)",provider:"gemini",adapter:"gemini",sdkLabel:"GenAI SDK",baseUrl:"",showBaseUrl:!1,defaultModels:["gemini-2.5-pro","gemini-2.5-flash","gemini-2.5-flash-lite","gemini-2.0-flash"]},{id:"anthropic-openai",label:"Anthropic (OpenAI Format)",provider:"anthropic",adapter:"openai",sdkLabel:"OpenAI SDK",baseUrl:"https://api.anthropic.com/v1/",showBaseUrl:!0},{id:"anthropic-native",label:"Anthropic (Native)",provider:"anthropic",adapter:"anthropic",sdkLabel:"Anthropic SDK",baseUrl:"",showBaseUrl:!1,defaultModels:["claude-opus-4-8","claude-sonnet-4-6","claude-haiku-4-5-20251001","claude-fable-5"]},{id:"claude-subscription",label:"Claude Subscription",provider:"claude-subscription",adapter:"claude-cli",sdkLabel:"Claude CLI",baseUrl:"",showBaseUrl:!1,defaultModels:["opus","sonnet","haiku","fable"]},{id:"codex",label:"Codex (OpenAI)",provider:"codex",adapter:"codex-cli",sdkLabel:"Codex SDK",baseUrl:"",showBaseUrl:!1,defaultModels:["gpt-5.6-sol","gpt-5.6-terra","gpt-5.6-luna","gpt-5.5","gpt-5.4","gpt-5.4-mini"]}];function e(a,b){let c=a||"openai",e=b||"openai";return d.find(a=>a.provider===c&&a.adapter===e)||d.find(a=>a.provider===c)||d[0]}},78352:(a,b,c)=>{c.d(b,{A:()=>u});var d=c(21124),e=c(38301),f=c(7118),g=c(94367),h=c(50553),i=c(84233),j=c(91059),k=c(40512),l=c(83899),m=c(52327),n=c(37674),o=c(19925),p=c(68730),q=c(36698),r=c(18467),s=c(31973),t=c(354);let u=({anchorEl:a,open:b,currentFolder:c,folders:u,onClose:v,onAssign:w})=>{let[x,y]=(0,e.useState)(!1),[z,A]=(0,e.useState)(""),B=a=>{w(a),v()},C=()=>{let a=z.trim();a&&(y(!1),B(a))};return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(f.A,{anchorEl:a,open:b,onClose:v,children:[u.length>0&&u.map(a=>(0,d.jsxs)(g.A,{onClick:()=>B(a),selected:a===c,children:[(0,d.jsx)(h.A,{children:a===c?(0,d.jsx)(q.A,{fontSize:"small"}):(0,d.jsx)(r.A,{fontSize:"small"})}),(0,d.jsx)(i.A,{primary:a})]},a)),u.length>0&&(0,d.jsx)(j.A,{}),(0,d.jsxs)(g.A,{onClick:()=>{A(""),y(!0)},children:[(0,d.jsx)(h.A,{children:(0,d.jsx)(s.A,{fontSize:"small"})}),(0,d.jsx)(i.A,{primary:"New folder…"})]}),c&&(0,d.jsxs)(g.A,{onClick:()=>B(void 0),children:[(0,d.jsx)(h.A,{children:(0,d.jsx)(t.A,{fontSize:"small"})}),(0,d.jsx)(i.A,{primary:"Remove from folder"})]})]}),(0,d.jsxs)(k.A,{open:x,onClose:()=>y(!1),maxWidth:"xs",fullWidth:!0,children:[(0,d.jsx)(l.A,{children:"New folder"}),(0,d.jsx)(m.A,{children:(0,d.jsx)(n.A,{autoFocus:!0,margin:"dense",label:"Folder name",fullWidth:!0,value:z,onChange:a=>A(a.target.value),onKeyDown:a=>{"Enter"===a.key&&(a.preventDefault(),C())}})}),(0,d.jsxs)(o.A,{children:[(0,d.jsx)(p.A,{onClick:()=>y(!1),children:"Cancel"}),(0,d.jsx)(p.A,{variant:"contained",disabled:!z.trim(),onClick:C,children:"Create"})]})]})]})}}};
1
+ "use strict";exports.id=1634,exports.ids=[1634],exports.modules={2560:(a,b,c)=>{c.d(b,{Aq:()=>e,Xk:()=>g,vi:()=>f});var d=c(38301);function e(a,b){return b}function f(a,b){}function g(a,b){let[c,e]=(0,d.useState)(()=>b);return[c,(0,d.useCallback)(b=>{e(c=>{let d="function"==typeof b?b(c):b;return f(a,d),d})},[a])]}},7329:(a,b,c)=>{c.d(b,{Az:()=>e,FM:()=>d,Je:()=>g,po:()=>f,yF:()=>h});let d="folder";function e(a,b){let c=[],d=new Map;for(let e of a){let{key:a,label:f}=b(e),g=d.get(a);g||(g={key:a,label:f,items:[]},d.set(a,g),c.push(g)),g.items.push(e)}return c}function f(a){let b=(a??"").trim().charAt(0).toUpperCase();return b>="A"&&b<="Z"?{key:`letter:${b}`,label:b}:{key:"letter:#",label:"#"}}function g(a,b,c="Ungrouped"){let d=new Map,e=[];for(let c of a){let a=b(c)?.trim();if(a){let b=d.get(a);b?b.push(c):d.set(a,[c])}else e.push(c)}let f=Array.from(d.keys()).sort((a,b)=>a.localeCompare(b)).map(a=>({key:`folder:${a}`,label:a,items:d.get(a)}));return e.length>0&&f.push({key:"folder:__ungrouped__",label:c,items:e}),f}function h(a,b){let c=new Set;for(let d of a){let a=b(d)?.trim();a&&c.add(a)}return Array.from(c).sort((a,b)=>a.localeCompare(b))}},32640:(a,b,c)=>{c.d(b,{CR:()=>j,Lg:()=>g,eZ:()=>i,fC:()=>f});var d=c(76133),e=c(7329);let f={"name-asc":"Name (A-Z)","name-desc":"Name (Z-A)",provider:"Provider","context-desc":"Context (largest)","context-asc":"Context (smallest)"},g=a=>a.displayName||a.name||"",h=a=>(0,d.T_)(a.provider,a.adapter).label;function i(a,b){switch(b){case"provider":{let b=h(a);return{key:`provider:${b}`,label:b}}case"context-asc":case"context-desc":var c;return"number"!=typeof(c=a.contextWindow)||Number.isNaN(c)?{key:"ctx:unknown",label:"Unknown context"}:c<=8e3?{key:"ctx:<=8k",label:"≤ 8K tokens"}:c<=32e3?{key:"ctx:8k-32k",label:"8K–32K tokens"}:c<=128e3?{key:"ctx:32k-128k",label:"32K–128K tokens"}:c<=1e6?{key:"ctx:128k-1m",label:"128K–1M tokens"}:{key:"ctx:>1m",label:"> 1M tokens"};default:return(0,e.po)(g(a))}}function j(a,b){let c=(a,c)=>{switch(b){case"name-asc":return g(a).localeCompare(g(c));case"name-desc":return g(c).localeCompare(g(a));case"provider":return h(a).localeCompare(h(c))||g(a).localeCompare(g(c));case"context-desc":case"context-asc":{let d="number"!=typeof a.contextWindow||Number.isNaN(a.contextWindow)?void 0:a.contextWindow,e="number"!=typeof c.contextWindow||Number.isNaN(c.contextWindow)?void 0:c.contextWindow;if(void 0===d&&void 0===e)return g(a).localeCompare(g(c));if(void 0===d)return 1;if(void 0===e)return -1;let f="context-desc"===b?e-d:d-e;return 0!==f?f:g(a).localeCompare(g(c))}default:return 0}};return[...a].sort((a,b)=>{let d=Number(!!b.favorite)-Number(!!a.favorite);return 0!==d?d:c(a,b)})}},59737:(a,b,c)=>{c.d(b,{A:()=>m});var d=c(21124);c(38301);var e=c(60839),f=c(81637),g=c(44079),h=c(79515),i=c(41893),j=c(99561),k=c(17332),l=c(18467);let m=({label:a,count:b,expanded:c,onToggle:m,showFolderIcon:n=!1,children:o})=>{let p=(0,e.A)();return(0,d.jsxs)(f.default,{sx:{mb:1.5},children:[(0,d.jsxs)(f.default,{role:"button",tabIndex:0,"aria-expanded":c,onClick:m,onKeyDown:a=>{("Enter"===a.key||" "===a.key)&&(a.preventDefault(),m())},sx:{display:"flex",alignItems:"center",gap:1,px:1,py:.75,borderRadius:1,cursor:"pointer",userSelect:"none",backgroundColor:p.palette.background.default,border:`1px solid ${p.palette.divider}`,"&:hover":{backgroundColor:p.palette.action.hover}},children:[(0,d.jsx)(g.A,{size:"small","aria-label":c?"Collapse section":"Expand section",onClick:a=>{a.stopPropagation(),m()},sx:{transition:"transform 0.2s",transform:c?"rotate(0deg)":"rotate(-90deg)"},children:(0,d.jsx)(k.A,{fontSize:"small"})}),n&&(0,d.jsx)(l.A,{fontSize:"small",sx:{color:"text.secondary"}}),(0,d.jsx)(h.default,{variant:"subtitle2",sx:{fontWeight:600},children:a}),(0,d.jsx)(i.A,{label:b,size:"small",sx:{height:20,fontSize:"0.7rem"}})]}),(0,d.jsx)(j.A,{in:c,unmountOnExit:!0,children:(0,d.jsx)(f.default,{sx:{pt:1.5},children:o})})]})}},76133:(a,b,c)=>{c.d(b,{T_:()=>i,g3:()=>g,xx:()=>h});let d=/(^|[/_-])(o[1-9]|gpt-5)(?:[./_-]|$)/i,e=/claude-(?:fable|mythos)-5|claude-opus-4-(?:[7-9]|\d{2,})|claude-sonnet-5/i,f=/^(?:opus|sonnet|fable)$|claude-(?:fable|mythos)-5|claude-opus-4-(?:[6-9]|\d{2,})|claude-sonnet-4-6/i;function g(a,b,c=""){let h=b||"openai",i=c.trim();if("codex-cli"===h)return{effortLevels:/^gpt-5\.6-(?:sol|terra)$/i.test(i)?["low","medium","high","xhigh","max","ultra"]:/^gpt-5\.6-/i.test(i)?["low","medium","high","xhigh","max"]:["low","medium","high","xhigh"],priority:!/(?:mini|spark|review)/i.test(i),maxOutputTokens:!1};if("claude-cli"===h)return{...f.test(i)?{effortLevels:["low","medium","high","xhigh","max"]}:{},maxOutputTokens:!1};if("anthropic"===h)return{...!e.test(i)?{creativity:{min:0,max:1,step:.1}}:{},...f.test(i)?{effortLevels:["low","medium","high","xhigh","max"]}:{},maxOutputTokens:!0};if("gemini"===h)return{creativity:{min:0,max:2,step:.1},.../^gemini-2\.5/i.test(i)?{thinkingBudget:!0}:!/^gemini-2\.0/i.test(i)?{thinkingLevels:["minimal","low","medium","high"]}:{},maxOutputTokens:!0};let j="openai"===(a||"openai")&&d.test(i);return{...!j?{creativity:{min:0,max:2,step:.1}}:{},...j?{effortLevels:["low","medium","high"]}:{},maxOutputTokens:!0}}let h=[{id:"openai",label:"OpenAI",provider:"openai",adapter:"openai",sdkLabel:"OpenAI SDK",baseUrl:"https://api.openai.com/v1",showBaseUrl:!0},{id:"openai-responses",label:"OpenAI (Responses API)",provider:"openai",adapter:"openai-responses",sdkLabel:"OpenAI SDK (Responses)",baseUrl:"https://api.openai.com/v1",showBaseUrl:!0,defaultModels:["gpt-5","gpt-5-mini","o4-mini","o3"]},{id:"openrouter",label:"OpenRouter",provider:"openrouter",adapter:"openai",sdkLabel:"OpenAI SDK",baseUrl:"https://openrouter.ai/api/v1",showBaseUrl:!0},{id:"requesty",label:"Requesty",provider:"requesty",adapter:"openai",sdkLabel:"OpenAI SDK",baseUrl:"https://router.requesty.ai/v1",showBaseUrl:!0},{id:"xai",label:"X.ai",provider:"xai",adapter:"openai",sdkLabel:"OpenAI SDK",baseUrl:"https://api.x.ai/v1",showBaseUrl:!0},{id:"ollama",label:"Ollama",provider:"ollama",adapter:"openai",sdkLabel:"OpenAI SDK",baseUrl:"http://localhost:11434/v1",showBaseUrl:!0},{id:"litellm",label:"LiteLLM",provider:"litellm",adapter:"openai",sdkLabel:"OpenAI SDK (via LiteLLM Proxy)",baseUrl:"http://localhost:4000/v1",showBaseUrl:!0},{id:"gemini-openai",label:"Gemini (OpenAI Format)",provider:"gemini",adapter:"openai",sdkLabel:"OpenAI SDK",baseUrl:"https://generativelanguage.googleapis.com/v1beta/openai/",showBaseUrl:!0},{id:"gemini-native",label:"Gemini (Native)",provider:"gemini",adapter:"gemini",sdkLabel:"GenAI SDK",baseUrl:"",showBaseUrl:!1,defaultModels:["gemini-2.5-pro","gemini-2.5-flash","gemini-2.5-flash-lite","gemini-2.0-flash"]},{id:"anthropic-openai",label:"Anthropic (OpenAI Format)",provider:"anthropic",adapter:"openai",sdkLabel:"OpenAI SDK",baseUrl:"https://api.anthropic.com/v1/",showBaseUrl:!0},{id:"anthropic-native",label:"Anthropic (Native)",provider:"anthropic",adapter:"anthropic",sdkLabel:"Anthropic SDK",baseUrl:"",showBaseUrl:!1,defaultModels:["claude-opus-4-8","claude-sonnet-4-6","claude-haiku-4-5-20251001","claude-fable-5"]},{id:"claude-subscription",label:"Claude Subscription",provider:"claude-subscription",adapter:"claude-cli",sdkLabel:"Claude CLI",baseUrl:"",showBaseUrl:!1,defaultModels:["opus","sonnet","haiku","fable"]},{id:"codex",label:"Codex (OpenAI)",provider:"codex",adapter:"codex-cli",sdkLabel:"Codex SDK",baseUrl:"",showBaseUrl:!1,defaultModels:["gpt-5.6-sol","gpt-5.6-terra","gpt-5.6-luna","gpt-5.5","gpt-5.4","gpt-5.4-mini"]}];function i(a,b){let c=a||"openai",d=b||"openai";return h.find(a=>a.provider===c&&a.adapter===d)||h.find(a=>a.provider===c)||h[0]}},78352:(a,b,c)=>{c.d(b,{A:()=>u});var d=c(21124),e=c(38301),f=c(7118),g=c(94367),h=c(50553),i=c(84233),j=c(91059),k=c(40512),l=c(83899),m=c(52327),n=c(37674),o=c(19925),p=c(68730),q=c(36698),r=c(18467),s=c(31973),t=c(354);let u=({anchorEl:a,open:b,currentFolder:c,folders:u,onClose:v,onAssign:w})=>{let[x,y]=(0,e.useState)(!1),[z,A]=(0,e.useState)(""),B=a=>{w(a),v()},C=()=>{let a=z.trim();a&&(y(!1),B(a))};return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(f.A,{anchorEl:a,open:b,onClose:v,children:[u.length>0&&u.map(a=>(0,d.jsxs)(g.A,{onClick:()=>B(a),selected:a===c,children:[(0,d.jsx)(h.A,{children:a===c?(0,d.jsx)(q.A,{fontSize:"small"}):(0,d.jsx)(r.A,{fontSize:"small"})}),(0,d.jsx)(i.A,{primary:a})]},a)),u.length>0&&(0,d.jsx)(j.A,{}),(0,d.jsxs)(g.A,{onClick:()=>{A(""),y(!0)},children:[(0,d.jsx)(h.A,{children:(0,d.jsx)(s.A,{fontSize:"small"})}),(0,d.jsx)(i.A,{primary:"New folder…"})]}),c&&(0,d.jsxs)(g.A,{onClick:()=>B(void 0),children:[(0,d.jsx)(h.A,{children:(0,d.jsx)(t.A,{fontSize:"small"})}),(0,d.jsx)(i.A,{primary:"Remove from folder"})]})]}),(0,d.jsxs)(k.A,{open:x,onClose:()=>y(!1),maxWidth:"xs",fullWidth:!0,children:[(0,d.jsx)(l.A,{children:"New folder"}),(0,d.jsx)(m.A,{children:(0,d.jsx)(n.A,{autoFocus:!0,margin:"dense",label:"Folder name",fullWidth:!0,value:z,onChange:a=>A(a.target.value),onKeyDown:a=>{"Enter"===a.key&&(a.preventDefault(),C())}})}),(0,d.jsxs)(o.A,{children:[(0,d.jsx)(p.A,{onClick:()=>y(!1),children:"Cancel"}),(0,d.jsx)(p.A,{variant:"contained",disabled:!z.trim(),onClick:C,children:"Create"})]})]})]})}}};
@@ -1,5 +1,5 @@
1
- "use strict";exports.id=166,exports.ids=[166,8092],exports.modules={40166:(a,b,c)=>{let d,e;c.d(b,{bashCallTool:()=>J,bashToolDefinitions:()=>C});var f=c(33873),g=c.n(f),h=c(29021),i=c.n(h),j=c(79646),k=c(18230);let l=(0,k.h)("utils/process/killProcessTree");function m(a,b=2e3){let c=a.pid;if(void 0===c)return()=>{};if("win32"===process.platform){try{(0,j.spawn)("taskkill",["/pid",String(c),"/T","/F"]).on("error",a=>l.debug(`taskkill failed for pid ${c}: ${a.message}`))}catch(a){l.debug(`taskkill spawn threw for pid ${c}: ${a instanceof Error?a.message:String(a)}`)}return()=>{}}try{process.kill(-c,"SIGTERM")}catch{}let d=setTimeout(()=>{try{process.kill(-c,"SIGKILL")}catch{}},b);return d.unref?.(),()=>clearTimeout(d)}var n=c(85510),o=c(94749),p=c(48092),q=c(65858);let r=(0,k.h)("backend/services/mcp/internal/bashTools");function s(a){let b=(process.env.PATH??process.env.Path??"").split(g().delimiter).filter(Boolean),c="win32"===process.platform?(process.env.PATHEXT??".EXE;.CMD;.BAT;.COM").split(";").filter(Boolean):[""];for(let d of b)for(let b of c){let c=g().join(d,`${a}${b}`);try{if(i().statSync(c).isFile())return c}catch{}}return null}function t(){return global.__flujo_bash_sessions||(global.__flujo_bash_sessions=new Map),global.__flujo_bash_sessions}function u(a,b=!1){return{content:[{type:"text",text:"string"==typeof a?a:JSON.stringify(a,null,2)}],...b?{isError:!0}:{}}}let v=["FLUJO_BASH_ROOTS","FLUJO_FS_ROOTS"];async function w(a,b){let c=(0,n.getDataDir)(),d="string"==typeof a?a.trim():"",e=d?g().isAbsolute(d)?g().resolve(d):g().resolve(c,d):c;if(await (0,q.cd)()){let a=(0,q.bz)(e);if(a.denied)throw Error(`cwd "${e}" is within a protected location (${a.matchedRoot}) and is blocked by the FLUJO built-in server protected-path policy. Disable "Protect sensitive home-directory paths" in Experimental Features or set ${q.wp}=1 to override.`)}if(0===b.length||!b.some(a=>(0,p.F)(a,e)))throw Error(`cwd "${e}" is outside the configured bash roots.`);return e}async function x(a,b,c){let d=[],e=await (0,q.cd)(),f=new Set,h=a.match(/(?:[A-Za-z]:[\\/][^\s"']*|\\\\[^\s"']+|~\/[^\s"']*|(?<![\w.])\/[^\s"']+)/g)??[],i=(()=>{try{return(0,n.getHomeDir)()}catch{return""}})();for(let a of h){let h,j=a;j.startsWith("~/")&&i&&(j=g().join(i,j.slice(2)));try{h=g().isAbsolute(j)?g().resolve(j):g().resolve(b,j)}catch{continue}if(f.has(h))continue;f.add(h);let k=e?(0,q.bz)(h):{denied:!1};k.denied?d.push(`Command references "${a}", which is inside a protected location (${k.matchedRoot}).`):c.length>0&&!c.some(a=>(0,p.F)(a,h))&&d.push(`Command references "${a}", which is outside the configured working roots.`)}return d}let y=new Set(["PATH","Path","HOME","USERPROFILE","TMP","TEMP","TMPDIR","LANG","LC_ALL","SystemRoot","windir","ComSpec","PATHEXT","SystemDrive","NUMBER_OF_PROCESSORS","PROCESSOR_ARCHITECTURE"]);function z(a){return"pwsh"===a||"bash"===a?a:"default"}function A(a,b,c){let{file:f,args:h,useShell:k,effectiveShell:l,fallbackFrom:m}=function(a,b){if("pwsh"===b){let b=void 0!==e?e:e=s("pwsh");return b?{file:b,args:["-NoProfile","-NonInteractive","-Command",a],useShell:!1,effectiveShell:"pwsh"}:{file:a,args:[],useShell:!0,effectiveShell:"default",fallbackFrom:"pwsh"}}if("bash"===b){let b=function(){if(void 0!==d)return d;let a=s("bash");return a||"win32"!==process.platform||(a=[process.env.ProgramFiles,process.env["ProgramFiles(x86)"],process.env.LocalAppData].filter(a=>!!a).flatMap(a=>[g().join(a,"Git","bin","bash.exe"),g().join(a,"Git","usr","bin","bash.exe"),g().join(a,"Programs","Git","bin","bash.exe"),g().join(a,"Programs","Git","usr","bin","bash.exe")]).find(a=>{try{return i().statSync(a).isFile()}catch{return!1}})??null),d=a,a}();return b?{file:b,args:["-c",a],useShell:!1,effectiveShell:"bash"}:{file:a,args:[],useShell:!0,effectiveShell:"default",fallbackFrom:"bash"}}return{file:a,args:[],useShell:!0,effectiveShell:"default"}}(a,c),n="win32"!==process.platform;try{return{child:(0,j.spawn)(f,h,{cwd:b,shell:k,env:function(){var a;if("string"==typeof(a=process.env.FLUJO_BASH_INHERIT_ENV)&&/^(1|true|yes|on)$/i.test(a.trim()))return process.env;let b={};for(let a of Object.keys(process.env))(y.has(a)||/^LC_/.test(a))&&(b[a]=process.env[a]);return b}(),detached:n}),effectiveShell:l,fallbackFrom:m}}catch(a){return{child:void 0,startError:a instanceof Error?a.message:String(a),effectiveShell:l,fallbackFrom:m}}}function B(a,b){return c=>{let d=a();if(d.length>=1e5)return;let e=!1;(d+=c).length>1e5&&(d=d.slice(0,1e5)+"\n…[output truncated]",e=!0),b(d,e)}}function C(){let a={type:"string",enum:["default","pwsh","bash"],description:'Which shell to use: "default" (the OS shell), "pwsh" (PowerShell 7+), or "bash". Falls back to the default shell if the requested one is unavailable.'},b={type:"string",description:"Working directory. Relative paths resolve against the FLUJO data directory. Defaults to the data directory. When bash roots are configured (via the MCP manager, or the FLUJO_BASH_ROOTS / FLUJO_FS_ROOTS env hard ceiling) a cwd outside them is rejected."};return[{name:"run",description:"Run a shell command to completion and return combined stdout/stderr plus the exit code. Pipes and chained commands work. Killed if it exceeds the timeout; large output is truncated. Returns { exitCode, cwd, shell, output, timedOut }.",inputSchema:{type:"object",properties:{command:{type:"string",description:'The command line to execute, e.g. "grep -r foo ." or "curl -s https://…".'},cwd:b,shell:a,timeout:{type:"number",description:"Timeout in seconds (default 60, max 600)."},normalizeNewlines:{type:"boolean",description:"If true, CRLF/CR in the captured output are normalized to LF."}},required:["command"]}},{name:"start",description:"Start a command in the BACKGROUND and return immediately with a { sessionId }. Use status/wait to observe it, write_stdin to feed it input, and kill to stop it.",inputSchema:{type:"object",properties:{command:{type:"string",description:"The command line to execute in the background."},cwd:b,shell:a},required:["command"]}},{name:"status",description:"Return the current state of a background session: { sessionId, running, exitCode, output, truncated }.",inputSchema:{type:"object",properties:{sessionId:{type:"string",description:"The id returned by start."}},required:["sessionId"]}},{name:"wait",description:"Wait until a background session finishes (or the timeout elapses). Returns { sessionId, running, exitCode, output, truncated, timedOut }.",inputSchema:{type:"object",properties:{sessionId:{type:"string",description:"The id returned by start."},timeout:{type:"number",description:"Max seconds to wait (default 60, max 600)."}},required:["sessionId"]}},{name:"write_stdin",description:'Write a string to a running background session\'s stdin. Pass "newline": false to omit the trailing newline. Returns { sessionId, written }.',inputSchema:{type:"object",properties:{sessionId:{type:"string",description:"The id returned by start."},data:{type:"string",description:"Text to write to stdin."},newline:{type:"boolean",description:"Append a trailing newline (default true)."}},required:["sessionId","data"]}},{name:"kill",description:"Kill a background session (and its whole process tree). Returns { sessionId, killed }.",inputSchema:{type:"object",properties:{sessionId:{type:"string",description:"The id returned by start."}},required:["sessionId"]}},{name:"list_sessions",description:"List all known background sessions with their state. Returns { sessions: [{ sessionId, command, running, exitCode, startedAt, endedAt }] }.",inputSchema:{type:"object",properties:{}}}]}function D(a,b){return b?a.replace(/\r\n?/g,"\n"):a}async function E(a,b){let c=String(a?.command??"").trim();if(!c)return u({error:'Provide "command": a shell command line to run.'},!0);let d=await w(a.cwd,b),e=await x(c,d,b),f=e.length?{warnings:e}:{},g=z(a.shell),h=!0===a.normalizeNewlines,i=Math.min(1e3*("number"==typeof a.timeout&&a.timeout>0?a.timeout:60),6e5);return await new Promise(a=>{let b,e="",j=!1,k=!1,l=!1,n=B(()=>e,(a,b)=>{e=a,j=b||j}),{child:o,startError:p,effectiveShell:q,fallbackFrom:r}=A(c,d,g),s=r?{requestedShell:r,usedShell:q}:void 0;if(p||!o)return void a(u({error:`Failed to start command (${q}): ${p??"unknown error"}`,cwd:d,shell:q,shellFallback:s},!0));let t=setTimeout(()=>{l=!0,b=m(o)},i),v=c=>{k||(k=!0,clearTimeout(t),b?.(),a(c))};o.stdout?.on("data",a=>n(a.toString())),o.stderr?.on("data",a=>n(a.toString())),o.on("error",a=>{n(`
2
- ${a.message}`),v(u({error:`Command failed to start (${q}): ${a.message}`,cwd:d,shell:q,shellFallback:s,output:D(e,h)},!0))}),o.on("close",a=>{let b=D(e,h);if(l)return void v(u({timedOut:!0,cwd:d,shell:q,shellFallback:s,exitCode:a,truncated:j,output:`${b}
3
- [killed after ${i/1e3}s timeout]`,...f},!0));v(u({exitCode:a,cwd:d,shell:q,shellFallback:s,truncated:j,output:b,...f},0!==a))})})}function F(a){a.reapTimer=setTimeout(()=>{t().delete(a.id)},6e5),a.reapTimer.unref?.()}async function G(a,b){let c=String(a?.command??"").trim();if(!c)return u({error:'Provide "command": a shell command line to run.'},!0);let d=t();if(d.size>=25)for(let[a,b]of d)b.running||d.delete(a);if(d.size>=25)return u({error:"Too many active background sessions (max 25). Kill some first."},!0);!function(){if(global.__flujo_bash_cleanup_registered)return;global.__flujo_bash_cleanup_registered=!0;let a=()=>(function(){for(let a of t().values()){if(a.running)try{m(a.child)}catch{}a.reapTimer&&clearTimeout(a.reapTimer)}})();process.on("exit",a),process.on("SIGINT",a),process.on("SIGTERM",a)}();let e=await w(a.cwd,b),f=await x(c,e,b),g=f.length?{warnings:f}:{},{child:h,startError:i,effectiveShell:j,fallbackFrom:k}=A(c,e,z(a.shell)),l=k?{requestedShell:k,usedShell:j}:void 0;if(i||!h)return u({error:`Failed to start command (${j}): ${i??"unknown error"}`,cwd:e,shell:j,shellFallback:l},!0);let n=`bash-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,o={id:n,command:c,cwd:e,child:h,output:"",truncated:!1,running:!0,exitCode:null,startedAt:Date.now()};d.set(n,o);let p=B(()=>o.output,(a,b)=>{o.output=a,o.truncated=b||o.truncated});return h.stdout?.on("data",a=>p(a.toString())),h.stderr?.on("data",a=>p(a.toString())),h.on("error",a=>{p(`
4
- ${a.message}`),o.running=!1,o.endedAt=Date.now(),F(o)}),h.on("close",a=>{o.running=!1,o.exitCode=a,o.endedAt=Date.now(),F(o)}),u({sessionId:n,cwd:e,shell:j,shellFallback:l,...g})}function H(a,b={}){return{sessionId:a.id,running:a.running,exitCode:a.exitCode,output:a.output,truncated:a.truncated,...b}}async function I(a){let b=String(a?.sessionId??""),c=t().get(b);if(!c)return u({error:`No background session with id "${b}".`},!0);if(!c.running)return u(H(c,{timedOut:!1}));let d=Math.min(1e3*("number"==typeof a.timeout&&a.timeout>0?a.timeout:60),6e5),e=await new Promise(a=>{let b=Date.now(),e=()=>c.running?Date.now()-b>=d?a(!0):void setTimeout(e,100):a(!1);e()});return u(H(c,{timedOut:e}))}async function J(a,b,c){try{switch(a){case"run":{let a=await (0,p.loadEffectiveRoots)(o.PA,v,c);return await E(b,a)}case"start":{let a=await (0,p.loadEffectiveRoots)(o.PA,v,c);return await G(b,a)}case"status":let d=String(b?.sessionId??""),e=t().get(d);return e?u(H(e)):u({error:`No background session with id "${d}".`},!0);case"wait":return await I(b);case"write_stdin":let f=String(b?.sessionId??""),g=t().get(f);if(!g)return u({error:`No background session with id "${f}".`},!0);if(!g.running)return u({error:`Session "${f}" has already exited.`},!0);let h="string"==typeof b.data?b.data:"",i=!1===b.newline?h:`${h}
5
- `;try{g.child.stdin?.write(i)}catch(a){return u({error:`Failed to write to stdin: ${a instanceof Error?a.message:String(a)}`},!0)}return u({sessionId:f,written:Buffer.byteLength(i,"utf8")});case"kill":let j=String(b?.sessionId??""),k=t().get(j);return k?(k.running&&(k.cancelEscalation=m(k.child)),u({sessionId:j,killed:!0})):u({error:`No background session with id "${j}".`},!0);case"list_sessions":return u({sessions:Array.from(t().values()).map(a=>({sessionId:a.id,command:a.command,running:a.running,exitCode:a.exitCode,startedAt:new Date(a.startedAt).toISOString(),endedAt:a.endedAt?new Date(a.endedAt).toISOString():void 0}))});default:return u({error:`Unknown tool on the built-in bash server: ${a}`},!0)}}catch(b){return r.warn("bashCallTool failed",{toolName:a,err:b}),u({error:`Tool failed: ${b instanceof Error?b.message:String(b)}`},!0)}}},48092:(a,b,c)=>{c.d(b,{F:()=>j,loadEffectiveRoots:()=>l});var d=c(33873),e=c.n(d),f=c(79551),g=c(18230),h=c(94749);let i=(0,g.h)("backend/services/mcp/internal/confinement");function j(a,b){let c=e().relative(a,b);return""===c||!c.startsWith("..")&&!e().isAbsolute(c)}async function k(a,b){let{resolveGlobalVars:d}=await Promise.resolve().then(c.bind(c,87507)),g=(await d(a)).trim();if(!g)return null;if(g.startsWith("file://"))try{return e().resolve((0,f.fileURLToPath)(g))}catch(a){return i.warn(`resolveRootToPath: could not parse file URI "${g}"`,a),null}return e().isAbsolute(g)?e().resolve(g):e().resolve(b,g)}async function l(a,b,d){let{getDataDir:f}=await Promise.resolve().then(c.bind(c,85510)),g=f(),l=function(a){for(let b of Array.isArray(a)?a:[a]){let a=process.env[b];if(!a||!a.trim())continue;let c=a.split(e().delimiter).map(a=>a.trim()).filter(Boolean).map(a=>e().resolve(a));if(c.length)return c}return null}(b),m=[];try{for(let b of(await (0,h.AC)(a)))m.push(e().isAbsolute(b)?e().resolve(b):e().resolve(g,b))}catch(a){i.warn("loadEffectiveRoots: could not read persisted roots",a)}try{let{getNodeRoots:b,getNodeRootsForId:e}=await Promise.resolve().then(c.bind(c,28181));for(let c of void 0!==d?(()=>{let c=e(a,d);return c.length>0?c:b(a)})():b(a)){let a=await k(c,g);a&&m.push(a)}}catch(a){i.warn("loadEffectiveRoots: could not read node roots",a)}let n=Array.from(new Set(m));if(!l)return 0===n.length?[g]:n;let o=n.filter(a=>l.some(b=>j(b,a)));return o.length?o:l}},65858:(a,b,c)=>{c.d(b,{bz:()=>q,cd:()=>n,wp:()=>m});var d=c(33873),e=c.n(d),f=c(21820),g=c.n(f),h=c(85510),i=c(79111),j=c(31296),k=c(48092);function l(a){return"string"==typeof a&&/^(1|true|yes|on)$/i.test(a.trim())}let m="FLUJO_ALLOW_PROTECTED_PATHS";async function n(){if(l(process.env[m]))return!1;try{let a=await (0,i.YM)(j.Z.SPEECH_SETTINGS,void 0);return a?.experimental?.protectedPathsEnabled===!0}catch{return!1}}let o=null;function p(a,...b){return e().resolve(a,...b)}function q(a){let b=e().resolve(a);if((function(){let a=[];try{a.push(e().resolve((0,h.getDataDir)()))}catch{}try{a.push(e().resolve(g().tmpdir()))}catch{}return a})().some(a=>(0,k.F)(a,b)))return{denied:!1};for(let a of function(){let a=l(process.env[m]),b=(0,h.getHomeDir)(),c=`${a?"off":"on"}::${b}`;if(o&&o.key===c)return o.paths;let d=a?[]:function(a){let b=[];if("win32"===process.platform)for(let c of["AppData","Downloads","Desktop","Documents","Pictures","Music","Videos","OneDrive"])b.push(p(a,c));else if("darwin"===process.platform){for(let c of["Downloads","Desktop","Documents","Pictures","Music","Movies"])b.push(p(a,c));for(let c of["Library/Mail","Library/Messages","Library/Safari","Library/Cookies","Library/Calendars","Library/Application Support/AddressBook","Library/Application Support/com.apple.TCC","Library/PersonalizationPortrait","Library/Metadata/CoreSpotlight","Library/Suggestions"])b.push(p(a,c));for(let a of["/.Spotlight-V100","/.fseventsd","/.DocumentRevisions-V100"])b.push(e().resolve(a))}else for(let c of["Documents","Downloads","Desktop",".ssh",".gnupg",".aws",".config"])b.push(p(a,c));return Array.from(new Set(b))}(b);return o={key:c,paths:d},d}())if((0,k.F)(a,b))return{denied:!0,matchedRoot:a};return{denied:!1}}}};
1
+ exports.id=166,exports.ids=[166,8092],exports.modules={40166:(a,b,c)=>{"use strict";let d,e;c.d(b,{bashCallTool:()=>L,bashToolDefinitions:()=>E});var f=c(33873),g=c.n(f),h=c(29021),i=c.n(h),j=c(79646),k=c(18230);let l=(0,k.h)("utils/process/killProcessTree");function m(a,b=2e3){let c=a.pid;if(void 0===c)return()=>{};if("win32"===process.platform){try{(0,j.spawn)("taskkill",["/pid",String(c),"/T","/F"]).on("error",a=>l.debug(`taskkill failed for pid ${c}: ${a.message}`))}catch(a){l.debug(`taskkill spawn threw for pid ${c}: ${a instanceof Error?a.message:String(a)}`)}return()=>{}}try{process.kill(-c,"SIGTERM")}catch{}let d=setTimeout(()=>{try{process.kill(-c,"SIGKILL")}catch{}},b);return d.unref?.(),()=>clearTimeout(d)}var n=c(85510),o=c(94749),p=c(48092),q=c(65858);let r=(0,k.h)("backend/services/mcp/internal/bashTools");function s(a){let b=process.env[a];if(void 0!==b)return b;let c=Object.keys(process.env).find(b=>b.toLowerCase()===a.toLowerCase());return c?process.env[c]:void 0}function t(a){let b=(s("PATH")??"").split(g().delimiter).filter(Boolean),c="win32"===process.platform?(s("PATHEXT")??".EXE;.CMD;.BAT;.COM").split(";").filter(Boolean):[""];for(let d of b)for(let b of c){let c=g().join(d,`${a}${b}`);try{if(i().statSync(c).isFile())return c}catch{}}return null}function u(){return global.__flujo_bash_sessions||(global.__flujo_bash_sessions=new Map),global.__flujo_bash_sessions}function v(a,b=!1){return{content:[{type:"text",text:"string"==typeof a?a:JSON.stringify(a,null,2)}],...b?{isError:!0}:{}}}let w=["FLUJO_BASH_ROOTS","FLUJO_FS_ROOTS"];async function x(a,b){let c=(0,n.getDataDir)(),d="string"==typeof a?a.trim():"",e=d?g().isAbsolute(d)?g().resolve(d):g().resolve(c,d):c;if(await (0,q.cd)()){let a=(0,q.bz)(e);if(a.denied)throw Error(`cwd "${e}" is within a protected location (${a.matchedRoot}) and is blocked by the FLUJO built-in server protected-path policy. Disable "Protect sensitive home-directory paths" in Experimental Features or set ${q.wp}=1 to override.`)}if(0===b.length||!b.some(a=>(0,p.F)(a,e)))throw Error(`cwd "${e}" is outside the configured bash roots.`);return e}async function y(a,b,c){let d=[],e=await (0,q.cd)(),f=new Set,h=((function(a){let b=[...a],c=[...a.matchAll(/"(?:\\.|[^"\\])*"|'[^']*'|[^\s]+/g)],d=!1;for(let a of c){let c=a[0],e=a.index??0,f=c.length>=2&&(c.startsWith('"')&&c.endsWith('"')||c.startsWith("'")&&c.endsWith("'"))?c.slice(1,-1):c,g=0;if(d)d=!1;else if("-g"===f||"--glob"===f||"--iglob"===f){d=!0;continue}else{if(!/^(?:--glob|--iglob)=/.test(f))continue;g=c.indexOf("=")+1}for(let a=e+g;a<e+c.length;a+=1)b[a]=" "}return b.join("")})(a).match(/(?:[A-Za-z]:[\\/][^\s"']*|\\\\[^\s"']+|~\/[^\s"']*|(?<![\w.])\/[^\s"']+)/g)??[]).filter(a=>!("win32"===process.platform&&/^\/[A-Za-z]$/.test(a))),i=(()=>{try{return(0,n.getHomeDir)()}catch{return""}})();for(let a of h){let h,j=a;j.startsWith("~/")&&i&&(j=g().join(i,j.slice(2)));try{h=g().isAbsolute(j)?g().resolve(j):g().resolve(b,j)}catch{continue}if(f.has(h))continue;f.add(h);let k=e?(0,q.bz)(h):{denied:!1};k.denied?d.push(`Command references "${a}", which is inside a protected location (${k.matchedRoot}).`):c.length>0&&!c.some(a=>(0,p.F)(a,h))&&d.push(`Command references "${a}", which is outside the configured working roots.`)}return d}let z=new Set(["PATH","Path","HOME","USERPROFILE","TMP","TEMP","TMPDIR","LANG","LC_ALL","SystemRoot","windir","ComSpec","PATHEXT","SystemDrive","NUMBER_OF_PROCESSORS","PROCESSOR_ARCHITECTURE"]),A={win32:{x64:["@openai/codex-win32-x64","x86_64-pc-windows-msvc"],arm64:["@openai/codex-win32-arm64","aarch64-pc-windows-msvc"]},darwin:{x64:["@openai/codex-darwin-x64","x86_64-apple-darwin"],arm64:["@openai/codex-darwin-arm64","aarch64-apple-darwin"]},linux:{x64:["@openai/codex-linux-x64","x86_64-unknown-linux-musl"],arm64:["@openai/codex-linux-arm64","aarch64-unknown-linux-musl"]}};function B(a){return"pwsh"===a||"bash"===a?a:"default"}function C(a,b,f){let{file:h,args:k,useShell:l,effectiveShell:m,unavailableShell:o}=function(a,b){if("pwsh"===b){let b=void 0!==e?e:e=t("pwsh");return b?{file:b,args:["-NoProfile","-NonInteractive","-Command",a],useShell:!1,effectiveShell:"pwsh"}:{file:"",args:[],useShell:!1,effectiveShell:"pwsh",unavailableShell:"pwsh"}}if("bash"===b){let b=function(){if(void 0!==d)return d;let a=t("bash");return a||"win32"!==process.platform||(a=[process.env.ProgramFiles,process.env["ProgramFiles(x86)"],process.env.LocalAppData].filter(a=>!!a).flatMap(a=>[g().join(a,"Git","bin","bash.exe"),g().join(a,"Git","usr","bin","bash.exe"),g().join(a,"Programs","Git","bin","bash.exe"),g().join(a,"Programs","Git","usr","bin","bash.exe")]).find(a=>{try{return i().statSync(a).isFile()}catch{return!1}})??null),d=a,a}();return b?{file:b,args:["-c",a],useShell:!1,effectiveShell:"bash"}:{file:"",args:[],useShell:!1,effectiveShell:"bash",unavailableShell:"bash"}}return{file:a,args:[],useShell:!0,effectiveShell:"default"}}(a,f);if(o)return{effectiveShell:m,unavailableShell:o};let p="win32"!==process.platform;try{return{child:(0,j.spawn)(h,k,{cwd:b,shell:l,env:function(){var a;let b="string"==typeof(a=process.env.FLUJO_BASH_INHERIT_ENV)&&/^(1|true|yes|on)$/i.test(a.trim())?{...process.env}:Object.fromEntries(Object.entries(process.env).filter(([a])=>z.has(a)||/^LC_/.test(a))),d=s("PATH")??"";if(b.PATH=[...[g().join((0,n.getDataDir)(),"bash-utils"),function(){let a=A[process.platform]?.[process.arch];if(!a)return null;try{let b=c(85781).resolve(`${a[0]}/package.json`),d=g().join(g().dirname(b),"vendor",a[1],"codex-path"),e=g().join(d,"win32"===process.platform?"rg.exe":"rg");return i().statSync(e).isFile()?d:null}catch{return null}}()].filter(a=>!!a).filter(a=>{try{return i().statSync(a).isDirectory()}catch{return!1}}),d].filter(Boolean).join(g().delimiter),"win32"===process.platform)for(let a of Object.keys(b))"PATH"!==a&&"path"===a.toLowerCase()&&delete b[a];return b}(),detached:p}),effectiveShell:m}}catch(a){return{startError:a instanceof Error?a.message:String(a),effectiveShell:m}}}function D(a,b){return c=>{let d=a();if(d.length>=1e5)return;let e=!1;(d+=c).length>1e5&&(d=d.slice(0,1e5)+"\n…[output truncated]",e=!0),b(d,e)}}function E(){let a={type:"string",enum:["default","pwsh","bash"],description:'Which shell to use: "default" (the OS shell), "pwsh" (PowerShell 7+), or "bash". Explicit shells return an error if unavailable.'},b={type:"string",description:"Working directory. Relative paths resolve against the FLUJO data directory. Defaults to the data directory. When bash roots are configured (via the MCP manager, or the FLUJO_BASH_ROOTS / FLUJO_FS_ROOTS env hard ceiling) a cwd outside them is rejected."};return[{name:"run",description:"Run a shell command to completion and return combined stdout/stderr plus the exit code. Pipes and chained commands work. Killed if it exceeds the timeout; large output is truncated. Returns { exitCode, cwd, shell, output, timedOut }.",inputSchema:{type:"object",properties:{command:{type:"string",description:'The command line to execute, e.g. "grep -r foo ." or "curl -s https://…".'},cwd:b,shell:a,timeout:{type:"number",description:"Timeout in seconds (default 60, max 600)."},normalizeNewlines:{type:"boolean",description:"If true, CRLF/CR in the captured output are normalized to LF."}},required:["command"]}},{name:"start",description:"Start a command in the BACKGROUND and return immediately with a { sessionId }. Use status/wait to observe it, write_stdin to feed it input, and kill to stop it.",inputSchema:{type:"object",properties:{command:{type:"string",description:"The command line to execute in the background."},cwd:b,shell:a},required:["command"]}},{name:"status",description:"Return the current state of a background session: { sessionId, running, exitCode, output, truncated }.",inputSchema:{type:"object",properties:{sessionId:{type:"string",description:"The id returned by start."}},required:["sessionId"]}},{name:"wait",description:"Wait until a background session finishes (or the timeout elapses). Returns { sessionId, running, exitCode, output, truncated, timedOut }.",inputSchema:{type:"object",properties:{sessionId:{type:"string",description:"The id returned by start."},timeout:{type:"number",description:"Max seconds to wait (default 60, max 600)."}},required:["sessionId"]}},{name:"write_stdin",description:'Write a string to a running background session\'s stdin. Pass "newline": false to omit the trailing newline. Returns { sessionId, written }.',inputSchema:{type:"object",properties:{sessionId:{type:"string",description:"The id returned by start."},data:{type:"string",description:"Text to write to stdin."},newline:{type:"boolean",description:"Append a trailing newline (default true)."}},required:["sessionId","data"]}},{name:"kill",description:"Kill a background session (and its whole process tree). Returns { sessionId, killed }.",inputSchema:{type:"object",properties:{sessionId:{type:"string",description:"The id returned by start."}},required:["sessionId"]}},{name:"list_sessions",description:"List all known background sessions with their state. Returns { sessions: [{ sessionId, command, running, exitCode, startedAt, endedAt }] }.",inputSchema:{type:"object",properties:{}}}]}function F(a,b){return b?a.replace(/\r\n?/g,"\n"):a}async function G(a,b){let c=String(a?.command??"").trim();if(!c)return v({error:'Provide "command": a shell command line to run.'},!0);let d=await x(a.cwd,b),e=await y(c,d,b),f=e.length?{warnings:e}:{},g=B(a.shell),h=!0===a.normalizeNewlines,i=Math.min(1e3*("number"==typeof a.timeout&&a.timeout>0?a.timeout:60),6e5);return await new Promise(a=>{let b,e="",j=!1,k=!1,l=!1,n=D(()=>e,(a,b)=>{e=a,j=b||j}),{child:o,startError:p,effectiveShell:q,unavailableShell:r}=C(c,d,g);if(r)return void a(v({error:`Requested shell "${r}" is unavailable or could not be resolved.`,cwd:d,shell:r},!0));if(p||!o)return void a(v({error:`Failed to start command (${q}): ${p??"unknown error"}`,cwd:d,shell:q},!0));let s=setTimeout(()=>{l=!0,b=m(o)},i),t=c=>{k||(k=!0,clearTimeout(s),b?.(),a(c))};o.stdout?.on("data",a=>n(a.toString())),o.stderr?.on("data",a=>n(a.toString())),o.on("error",a=>{n(`
2
+ ${a.message}`),t(v({error:`Command failed to start (${q}): ${a.message}`,cwd:d,shell:q,output:F(e,h)},!0))}),o.on("close",a=>{let b=F(e,h);if(l)return void t(v({timedOut:!0,cwd:d,shell:q,exitCode:a,truncated:j,output:`${b}
3
+ [killed after ${i/1e3}s timeout]`,...f},!0));t(v({exitCode:a,cwd:d,shell:q,truncated:j,output:b,...f},0!==a))})})}function H(a){a.reapTimer=setTimeout(()=>{u().delete(a.id)},6e5),a.reapTimer.unref?.()}async function I(a,b){let c=String(a?.command??"").trim();if(!c)return v({error:'Provide "command": a shell command line to run.'},!0);let d=u();if(d.size>=25)for(let[a,b]of d)b.running||d.delete(a);if(d.size>=25)return v({error:"Too many active background sessions (max 25). Kill some first."},!0);!function(){if(global.__flujo_bash_cleanup_registered)return;global.__flujo_bash_cleanup_registered=!0;let a=()=>(function(){for(let a of u().values()){if(a.running)try{m(a.child)}catch{}a.reapTimer&&clearTimeout(a.reapTimer)}})();process.on("exit",a),process.on("SIGINT",a),process.on("SIGTERM",a)}();let e=await x(a.cwd,b),f=await y(c,e,b),g=f.length?{warnings:f}:{},{child:h,startError:i,effectiveShell:j,unavailableShell:k}=C(c,e,B(a.shell));if(k)return v({error:`Requested shell "${k}" is unavailable or could not be resolved.`,cwd:e,shell:k},!0);if(i||!h)return v({error:`Failed to start command (${j}): ${i??"unknown error"}`,cwd:e,shell:j},!0);let l=`bash-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,n={id:l,command:c,cwd:e,child:h,output:"",truncated:!1,running:!0,exitCode:null,startedAt:Date.now()};d.set(l,n);let o=D(()=>n.output,(a,b)=>{n.output=a,n.truncated=b||n.truncated});return h.stdout?.on("data",a=>o(a.toString())),h.stderr?.on("data",a=>o(a.toString())),h.on("error",a=>{o(`
4
+ ${a.message}`),n.running=!1,n.endedAt=Date.now(),H(n)}),h.on("close",a=>{n.running=!1,n.exitCode=a,n.endedAt=Date.now(),H(n)}),v({sessionId:l,cwd:e,shell:j,...g})}function J(a,b={}){return{sessionId:a.id,running:a.running,exitCode:a.exitCode,output:a.output,truncated:a.truncated,...b}}async function K(a){let b=String(a?.sessionId??""),c=u().get(b);if(!c)return v({error:`No background session with id "${b}".`},!0);if(!c.running)return v(J(c,{timedOut:!1}));let d=Math.min(1e3*("number"==typeof a.timeout&&a.timeout>0?a.timeout:60),6e5),e=await new Promise(a=>{let b=Date.now(),e=()=>c.running?Date.now()-b>=d?a(!0):void setTimeout(e,100):a(!1);e()});return v(J(c,{timedOut:e}))}async function L(a,b,c){try{switch(a){case"run":{let a=await (0,p.loadEffectiveRoots)(o.PA,w,c);return await G(b,a)}case"start":{let a=await (0,p.loadEffectiveRoots)(o.PA,w,c);return await I(b,a)}case"status":let d=String(b?.sessionId??""),e=u().get(d);return e?v(J(e)):v({error:`No background session with id "${d}".`},!0);case"wait":return await K(b);case"write_stdin":let f=String(b?.sessionId??""),g=u().get(f);if(!g)return v({error:`No background session with id "${f}".`},!0);if(!g.running)return v({error:`Session "${f}" has already exited.`},!0);let h="string"==typeof b.data?b.data:"",i=!1===b.newline?h:`${h}
5
+ `;try{g.child.stdin?.write(i)}catch(a){return v({error:`Failed to write to stdin: ${a instanceof Error?a.message:String(a)}`},!0)}return v({sessionId:f,written:Buffer.byteLength(i,"utf8")});case"kill":let j=String(b?.sessionId??""),k=u().get(j);return k?(k.running&&(k.cancelEscalation=m(k.child)),v({sessionId:j,killed:!0})):v({error:`No background session with id "${j}".`},!0);case"list_sessions":return v({sessions:Array.from(u().values()).map(a=>({sessionId:a.id,command:a.command,running:a.running,exitCode:a.exitCode,startedAt:new Date(a.startedAt).toISOString(),endedAt:a.endedAt?new Date(a.endedAt).toISOString():void 0}))});default:return v({error:`Unknown tool on the built-in bash server: ${a}`},!0)}}catch(b){return r.warn("bashCallTool failed",{toolName:a,err:b}),v({error:`Tool failed: ${b instanceof Error?b.message:String(b)}`},!0)}}},48092:(a,b,c)=>{"use strict";c.d(b,{F:()=>j,loadEffectiveRoots:()=>l});var d=c(33873),e=c.n(d),f=c(79551),g=c(18230),h=c(94749);let i=(0,g.h)("backend/services/mcp/internal/confinement");function j(a,b){let c=e().relative(a,b);return""===c||!c.startsWith("..")&&!e().isAbsolute(c)}async function k(a,b){let{resolveGlobalVars:d}=await Promise.resolve().then(c.bind(c,87507)),g=(await d(a)).trim();if(!g)return null;if(g.startsWith("file://"))try{return e().resolve((0,f.fileURLToPath)(g))}catch(a){return i.warn(`resolveRootToPath: could not parse file URI "${g}"`,a),null}return e().isAbsolute(g)?e().resolve(g):e().resolve(b,g)}async function l(a,b,d){let{getDataDir:f}=await Promise.resolve().then(c.bind(c,85510)),g=f(),l=function(a){for(let b of Array.isArray(a)?a:[a]){let a=process.env[b];if(!a||!a.trim())continue;let c=a.split(e().delimiter).map(a=>a.trim()).filter(Boolean).map(a=>e().resolve(a));if(c.length)return c}return null}(b),m=[];try{for(let b of(await (0,h.AC)(a)))m.push(e().isAbsolute(b)?e().resolve(b):e().resolve(g,b))}catch(a){i.warn("loadEffectiveRoots: could not read persisted roots",a)}try{let{getNodeRoots:b,getNodeRootsForId:e}=await Promise.resolve().then(c.bind(c,28181));for(let c of void 0!==d?(()=>{let c=e(a,d);return c.length>0?c:b(a)})():b(a)){let a=await k(c,g);a&&m.push(a)}}catch(a){i.warn("loadEffectiveRoots: could not read node roots",a)}let n=Array.from(new Set(m));if(!l)return 0===n.length?[g]:n;let o=n.filter(a=>l.some(b=>j(b,a)));return o.length?o:l}},65858:(a,b,c)=>{"use strict";c.d(b,{bz:()=>q,cd:()=>n,wp:()=>m});var d=c(33873),e=c.n(d),f=c(21820),g=c.n(f),h=c(85510),i=c(79111),j=c(31296),k=c(48092);function l(a){return"string"==typeof a&&/^(1|true|yes|on)$/i.test(a.trim())}let m="FLUJO_ALLOW_PROTECTED_PATHS";async function n(){if(l(process.env[m]))return!1;try{let a=await (0,i.YM)(j.Z.SPEECH_SETTINGS,void 0);return a?.experimental?.protectedPathsEnabled===!0}catch{return!1}}let o=null;function p(a,...b){return e().resolve(a,...b)}function q(a){let b=e().resolve(a);if((function(){let a=[];try{a.push(e().resolve((0,h.getDataDir)()))}catch{}try{a.push(e().resolve(g().tmpdir()))}catch{}return a})().some(a=>(0,k.F)(a,b)))return{denied:!1};for(let a of function(){let a=l(process.env[m]),b=(0,h.getHomeDir)(),c=`${a?"off":"on"}::${b}`;if(o&&o.key===c)return o.paths;let d=a?[]:function(a){let b=[];if("win32"===process.platform)for(let c of["AppData","Downloads","Desktop","Documents","Pictures","Music","Videos","OneDrive"])b.push(p(a,c));else if("darwin"===process.platform){for(let c of["Downloads","Desktop","Documents","Pictures","Music","Movies"])b.push(p(a,c));for(let c of["Library/Mail","Library/Messages","Library/Safari","Library/Cookies","Library/Calendars","Library/Application Support/AddressBook","Library/Application Support/com.apple.TCC","Library/PersonalizationPortrait","Library/Metadata/CoreSpotlight","Library/Suggestions"])b.push(p(a,c));for(let a of["/.Spotlight-V100","/.fseventsd","/.DocumentRevisions-V100"])b.push(e().resolve(a))}else for(let c of["Documents","Downloads","Desktop",".ssh",".gnupg",".aws",".config"])b.push(p(a,c));return Array.from(new Set(b))}(b);return o={key:c,paths:d},d}())if((0,k.F)(a,b))return{denied:!0,matchedRoot:a};return{denied:!1}}},85781:a=>{function b(a){var b=Error("Cannot find module '"+a+"'");throw b.code="MODULE_NOT_FOUND",b}b.keys=()=>[],b.resolve=b,b.id=85781,a.exports=b}};
@@ -0,0 +1,2 @@
1
+ "use strict";exports.id=1664,exports.ids=[1664],exports.modules={38296:(a,b,c)=>{c.d(b,{A:()=>D});var d=c(21124),e=c(38301),f=c(54573),g=c(81637),h=c(79515),i=c(68730),j=c(53773),k=c(82666),l=c(37674),m=c(67101),n=c(41893),o=c(95587),p=c(77028),q=c(44079),r=c(6537),s=c(19815),t=c(49938),u=c(47902),v=c(11480),w=c(93083),x=c(85557),y=c(91034),z=c(82571),A=c(92173);let B=(0,s.h)("frontend/components/mcp/MCPEnvManager/EnvEditor"),C=/^\$\{global:([A-Za-z0-9_.-]+)\}$/,D=({serverName:a,initialEnv:b,onSave:c,onDelete:s,onServerRestart:D})=>{let{globalEnvVars:E}=(0,t.rX)(),[F,G]=(0,e.useState)([]),[H,I]=(0,e.useState)(!1),[J,K]=(0,e.useState)(!1),[L,M]=(0,e.useState)(!1),[N,O]=(0,e.useState)(null);(0,e.useEffect)(()=>{B.debug(`Initializing environment variables for server: ${a}`,{variableCount:Object.keys(b).length}),G(Object.entries(b).map(([a,b])=>{let c="object"==typeof b&&null!==b&&"value"in b?b.value:b,d="object"==typeof b&&null!==b&&"metadata"in b?b.metadata:{isSecret:(0,z.xc)(a)},e=c.match(C);if(e){let b=e[1];return{key:a,value:c,isSecret:d.isSecret,isBound:!0,boundTo:b}}let f="string"==typeof c&&(c.startsWith("encrypted:")||c.startsWith("encrypted_failed:"));return{key:a,value:f?A.gF:c,isSecret:d.isSecret,isEncrypted:f}}))},[b]);let P=async b=>{B.debug(`Removing environment variable at index: ${b}`);let c=F[b];if("Global"===a&&s&&c.key)try{await s(c.key),G(F.filter((a,c)=>c!==b))}catch(a){B.error(`Failed to delete environment variable: ${c.key}`,a)}else G(F.filter((a,c)=>c!==b)),I(!0)},Q=(a,b,c)=>{let d=[...F];if("isSecret"===b){let b=d[a];b.isSecret&&!c?d[a]={...b,isSecret:c,value:"",isEncrypted:!1,showWarning:!0}:d[a]={...b,isSecret:c}}else{let e={...d[a],[b]:c,isSecret:"key"===b?(0,z.xc)(c):d[a].isSecret};if("key"===b&&(e.isValidKey=""===c||/^[a-zA-Z0-9_]+$/.test(c)),"value"===b){let b=c.match(C);e.isBound=!!b,e.boundTo=b?.[1],d[a].isEncrypted&&(e.isEncrypted=!1),d[a].showWarning&&c&&(e.showWarning=!1)}d[a]=e}G(d),I(!0)},R=async()=>{if(F.some(a=>""!==a.key&&!1===a.isValidKey))return void B.error("Cannot save: Some variable names contain invalid characters");B.debug(`Saving environment variables for server: ${a}`,{variableCount:F.length}),K(!0);try{let b=F.reduce((a,b)=>{let{key:c,value:d,isBound:e,boundTo:f,isSecret:g,isEncrypted:h}=b;return c&&(e&&f?a[c]={value:`$\{global:${f}}`,metadata:{isSecret:g}}:g&&d===A.gF||(a[c]={value:d,metadata:{isSecret:g}})),a},{});await c(b),I(!1),D&&"Global"!==a&&(B.debug(`Restarting server after env variable changes: ${a}`),await D(a))}catch(a){B.error("Failed to save environment variables:",a)}K(!1)};return(0,d.jsxs)(f.A,{sx:{p:3,borderRadius:2,border:1,borderColor:a=>"dark"===a.palette.mode?"#3a3a3a":"#e5e7eb"},children:[(0,d.jsxs)(g.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:3},children:[(0,d.jsxs)(h.default,{variant:"h6",sx:{fontWeight:"semibold"},children:["Environment Variables - ",a]}),(0,d.jsx)(i.A,{variant:"contained",color:"primary",size:"small",startIcon:(0,d.jsx)(u.A,{}),onClick:()=>{B.debug("Adding new environment variable"),G([...F,{key:"",value:"",isSecret:!1}]),I(!0)},children:"Add Variable"})]}),(0,d.jsx)(j.A,{spacing:3,children:F.map((a,b)=>(0,d.jsxs)(k.Ay,{container:!0,spacing:2,alignItems:"flex-start",children:[(0,d.jsx)(k.Ay,{item:!0,xs:12,sm:5,children:(0,d.jsx)(l.A,{fullWidth:!0,placeholder:"Variable name",value:a.key,onChange:a=>Q(b,"key",a.target.value),error:!1===a.isValidKey,helperText:!1===a.isValidKey?"Only alphanumeric characters and underscores allowed":"",size:"small"})}),(0,d.jsx)(k.Ay,{item:!0,xs:12,sm:5,children:(0,d.jsx)(l.A,{fullWidth:!0,type:a.isSecret?"password":"text",placeholder:a.showWarning?"Re-enter value":"Value",value:a.value,onChange:a=>Q(b,"value",a.target.value),InputProps:{readOnly:a.isBound,startAdornment:a.isEncrypted?(0,d.jsx)(m.A,{position:"start",children:(0,d.jsx)(v.A,{fontSize:"small",titleAccess:"This value is stored encrypted"})}):null,endAdornment:a.isBound?(0,d.jsx)(m.A,{position:"end",children:(0,d.jsx)(n.A,{size:"small",label:`Bound to global: ${a.boundTo}`,color:"primary",variant:"outlined",onDelete:()=>(a=>{B.debug(`Unbinding variable at index: ${a}`);let b=[...F];b[a]={...b[a],isBound:!1,boundTo:void 0},G(b),I(!0)})(b),deleteIcon:(0,d.jsx)(w.A,{fontSize:"small"})})}):null},error:a.showWarning,helperText:a.showWarning?"You must re-enter the value after switching from secret to normal mode":"",size:"small",sx:{bgcolor:b=>a.isBound?"dark"===b.palette.mode?"#1a1a1a":"#f9fafb":b.palette.background.paper}})}),(0,d.jsx)(k.Ay,{item:!0,xs:12,sm:2,children:(0,d.jsxs)(g.default,{sx:{display:"flex",alignItems:"center",mt:.5},children:[(0,d.jsx)(o.A,{control:(0,d.jsx)(p.A,{checked:a.isSecret,onChange:a=>Q(b,"isSecret",a.target.checked),size:"small"}),label:"Secret",sx:{mr:1}}),!a.isBound&&(0,d.jsx)(q.A,{size:"small",color:"primary",onClick:()=>(a=>{B.debug(`Opening bind modal for variable at index: ${a}`),O(a),M(!0)})(b),title:"Bind to global variable",sx:{mr:1},children:(0,d.jsx)(x.A,{fontSize:"small"})}),(0,d.jsx)(q.A,{size:"small",color:"error",onClick:()=>P(b),title:"Remove variable",children:(0,d.jsx)(y.A,{fontSize:"small"})})]})})]},b))}),(0,d.jsx)(r.A,{open:L,onClose:()=>{M(!1),O(null)},children:(0,d.jsxs)(g.default,{sx:{position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",width:400,maxWidth:"90%",bgcolor:"background.paper",boxShadow:24,p:4,borderRadius:2},children:[(0,d.jsx)(h.default,{variant:"h6",sx:{mb:2},children:"Bind to Global Variable"}),0===Object.keys(E).length?(0,d.jsx)(h.default,{color:"text.secondary",sx:{mb:2},children:"No global variables available. Add some in Settings first."}):(0,d.jsx)(g.default,{sx:{maxHeight:300,overflow:"auto",mb:2},children:Object.entries(E).map(([a,b])=>(0,d.jsxs)(i.A,{fullWidth:!0,variant:"text",onClick:()=>(a=>{if(null!==N){B.debug(`Binding variable at index ${N} to global variable: ${a}`);let b=[...F];b[N]={...b[N],isBound:!0,boundTo:a,value:`$\{global:${a}}`},G(b),M(!1),O(null),I(!0)}})(a),sx:{justifyContent:"space-between",textAlign:"left",mb:1,p:1,borderRadius:1},children:[(0,d.jsx)(h.default,{variant:"body2",children:a}),(0,d.jsx)(h.default,{variant:"caption",color:"text.secondary",children:b&&"object"==typeof b&&b.metadata&&b.metadata.isSecret?A.gF:b&&"object"==typeof b?b.value:b})]},a))}),(0,d.jsx)(g.default,{sx:{display:"flex",justifyContent:"flex-end"},children:(0,d.jsx)(i.A,{variant:"outlined",onClick:()=>{M(!1),O(null)},children:"Cancel"})})]})}),H&&(0,d.jsx)(g.default,{sx:{display:"flex",justifyContent:"flex-end",mt:3},children:(0,d.jsx)(i.A,{variant:"contained",color:"success",onClick:R,disabled:J||F.some(a=>""!==a.key&&!1===a.isValidKey),children:J?"Saving...":"Save Changes"})})]})}},81017:(a,b,c)=>{c.r(b),c.d(b,{"4003ce37366709f5add0c98a6e32e47a1006fd7c7d":()=>V,"605caa1e030009a4bc7e820854ff481d3e0295325d":()=>U,"6061ed6d99a98b5d9f5d2d15065caab0a27d6a8987":()=>W});var d=c(91488);c(27806);let e={LOG_LEVEL:3},f={VERBOSE:-1,DEBUG:0,INFO:1,WARN:2,ERROR:3},g="number"==typeof e.LOG_LEVEL?e.LOG_LEVEL:f.ERROR;function h(a,b=0){if(b>6)return String(a);if(!(a instanceof Error))return a;let c={name:a.name,message:a.message};for(let d of Object.getOwnPropertyNames(a)){if("name"===d||"message"===d)continue;let e=a[d];"function"!=typeof e&&("stack"===d?c.stack=e:"cause"===d?c.cause=h(e,b+1):"errors"===d&&Array.isArray(e)?c.errors=e.map(a=>h(a,b+1)):c[d]=e)}return c}function i(a,b,c,d,e){if(a>=("number"==typeof e?e:g)){if("function"==typeof d)try{d=d()}catch{d="[lazy log data threw]"}let e=new Date().toISOString(),g=`[${e}] [${b}]`,i=`${g} ${c}`;if(void 0!==d)if(d instanceof Error||"object"==typeof d)try{let a=d instanceof Error?h(d):d,b=JSON.stringify(a,(a,b)=>b instanceof Error?h(b):b,2);i+=`:
2
+ ${b}`}catch(a){i+=": [Object cannot be stringified]"}else i+=`: ${d}`;switch(a){case f.VERBOSE:console.debug(`[VERBOSE] ${i}`);break;case f.DEBUG:console.debug(i);break;case f.INFO:console.info(i);break;case f.WARN:console.warn(i);break;case f.ERROR:console.error(i);break;default:console.log(i)}}}function j(a,b){let c,d=((c=a.replace(/^src\//,"")).startsWith("/")&&(c=c.substring(1)),c);return{verbose:(a,c)=>{i(f.VERBOSE,d,a,c,b)},debug:(a,c)=>{i(f.DEBUG,d,a,c,b)},info:(a,c)=>{i(f.INFO,d,a,c,b)},warn:(a,c)=>{i(f.WARN,d,a,c,b)},error:(a,c)=>{i(f.ERROR,d,a,c,b)}}}var k=c(29021),l=c(33873),m=c.n(l),n=function(a){return a.MODELS="models",a.FLOWS="flows",a.CHAT_HISTORY="history",a.THEME="theme",a.ENCRYPTION_KEY="encryption_key",a.MCP_SERVERS="mcp_servers",a.GLOBAL_ENV_VARS="global_env_vars",a.CURRENT_CONVERSATION_ID="current_conversation_id",a.SELECTED_FLOW_ID="selected_flow_id",a.LAST_PICKED_FLOW_ID="last_picked_flow_id",a.SPEECH_SETTINGS="speech_settings",a.SPOTLIGHT_SERVERS="spotlight_servers",a.PLANNED_EXECUTIONS="planned_executions",a.MCP_AUTO_INSTALL_SETTINGS="mcp_auto_install_settings",a.MCP_QUALITY_SETTINGS="mcp_quality_settings",a.RUN_RESOURCE_SETTINGS="run_resource_settings",a.KV_STORE_SETTINGS="kv_store_settings",a.PENDING_APPROVALS="pending_approvals",a.MCP_INTERNAL_OVERRIDES="mcp_internal_overrides",a.PACKAGE_INSTALLS="package_installs",a.EXPERIMENTAL_SETTINGS="experimental_settings",a.REGISTRY_ACCOUNT="registry_account",a.REGISTRY_SETTINGS="registry_settings",a.TELEMETRY_STATE="telemetry_state",a}({});function o(){let a=process.env.FLUJO_DATA_DIR;return a&&a.trim().length>0?m().resolve(a):process.cwd()}c(21820);let p=j("utils/storage/backend"),q=m().join(o(),"db"),r=m().join(o(),".next","storage"),s=a=>m().join(q,`${a}.json`);async function t(){try{await k.promises.access(q),p.verbose(`Storage directory exists: ${q}`)}catch{p.debug(`Creating storage directory: ${q}`),await k.promises.mkdir(q,{recursive:!0})}try{await k.promises.access(r),p.warn(`Old storage directory found: ${r}. This may cause data inconsistency issues.`)}catch{}}let u=new Map,v=0;async function w(a,b){let c=m().dirname(a);await k.promises.mkdir(c,{recursive:!0});let d=`${a}.tmp.${process.pid}.${++v}`;try{await k.promises.writeFile(d,b),await k.promises.rename(d,a)}catch(a){try{await k.promises.unlink(d)}catch{}throw a}}async function x(a,b){let c=s(a),d=(u.get(a)??Promise.resolve()).catch(()=>{}).then(()=>w(c,JSON.stringify(b,null,2)));u.set(a,d);try{await d,p.verbose(`Successfully saved item to: ${c}`)}catch(b){throw p.error(`Error saving item with key "${a}" to ${c}:`,b),b}finally{u.get(a)===d&&u.delete(a)}}async function y(a,b){try{await t();let c=s(a),d=await k.promises.readFile(c,"utf-8");if(0===d.trim().length)return p.warn(`Item with key "${a}" at ${c} is empty; treating as missing and returning default.`),b;try{let a=JSON.parse(d);return p.verbose(`Successfully loaded item from: ${c}`),a}catch(b){p.error(`CRITICAL: Failed to parse JSON from ${c}:`,b);let a=`${c}.corrupted.${Date.now()}.bak`;try{await k.promises.writeFile(a,d),p.info(`Created backup of corrupted file at: ${a}`)}catch(a){p.error("Failed to create backup of corrupted file:",a)}throw Error(`Failed to parse JSON from ${c}. A backup has been created at ${a}. Original error: ${b.message}`)}}catch(c){if("ENOENT"===c.code)return p.verbose(`Item with key "${a}" not found at ${s(a)}, returning default.`),b;throw p.error(`CRITICAL: Error loading item with key "${a}" from ${s(a)}:`,c),c}}var z=c(92347),A=c.n(z);let B=j("utils/encryption/session"),C=global.__flujo_encryption_sessions??(global.__flujo_encryption_sessions=new Map),D=j("utils/encryption/secure");class E extends Error{constructor(a="Encryption is locked: user password required to access secrets"){super(a),this.name="EncryptionLockedError",Object.setPrototypeOf(this,E.prototype)}}let F="data_encryption_key",G="data_encryption_iv",H="data_encryption_salt",I="encryption_type";var J=function(a){return a.DEFAULT="default",a.USER="user",a}(J||{});function K(){let a=A().enc.Utf8.parse("flujo_fixed_salt_v1");return A().PBKDF2("FLUJO~",a,{keySize:8,iterations:1e5})}function L(a){let b;try{b=a.toString(A().enc.Utf8)}catch{return null}return RegExp("^[0-9a-f]{16}$").test(b)?b:null}async function M(){D.debug("initializeDefaultEncryption: Entering method");try{if(await R())return!0;let a=K(),b=A().lib.WordArray.random(8),c=A().lib.WordArray.random(16),d=A().AES.encrypt(b.toString(),a,{iv:c,mode:A().mode.CBC,padding:A().pad.Pkcs7}),e=A().enc.Utf8.parse("flujo_fixed_salt_v1"),f={[F]:d.toString(),[G]:c.toString(),[H]:e.toString(),encryption_version:1,[I]:"default"};return await x(n.ENCRYPTION_KEY,f),!0}catch(a){return D.error("initializeDefaultEncryption: Failed to initialize default encryption:",a),!1}}async function N(){D.debug("getDefaultDEK: Entering method");try{let a=await y(n.ENCRYPTION_KEY,null);if(!a){if(!await M())return D.error("getDefaultDEK: Failed to initialize default encryption"),null;return await N()}if("default"!==a[I])return D.error("getDefaultDEK: Not using default encryption"),null;let b=a[F],c=A().enc.Hex.parse(a[G]),d=K(),e=A().AES.decrypt(b,d,{iv:c,mode:A().mode.CBC,padding:A().pad.Pkcs7});if(!L(e))return D.error("getDefaultDEK: Failed to decrypt DEK with default key"),null;return A().enc.Hex.parse(e.toString())}catch(a){return D.error("getDefaultDEK: Failed to get default DEK:",a),null}}async function O(a){D.debug("getUserDEK: Entering method");try{let b=await y(n.ENCRYPTION_KEY,null);if(!b)return D.error("getUserDEK: No encryption metadata found"),null;if("user"!==b[I])return D.error("getUserDEK: Not using user encryption"),null;let c=b[F],d=A().enc.Hex.parse(b[G]),e=A().enc.Hex.parse(b[H]),f=A().PBKDF2(a,e,{keySize:8,iterations:1e5}),g=A().AES.decrypt(c,f,{iv:d,mode:A().mode.CBC,padding:A().pad.Pkcs7});if(!L(g))return D.error("getUserDEK: Failed to decrypt DEK with provided password"),null;return A().enc.Hex.parse(g.toString())}catch(a){return D.error("getUserDEK: Failed to get user DEK:",a),null}}async function P(a,b=!1){D.debug("getDEK: Entering method");try{if(b&&a){D.debug("getDEK: Using session token");let b=function(a){let b=C.get(a);if(!b)return B.warn(`Session not found: ${a}`),null;let c=Date.now();return c-b.createdAt>72e5?(B.warn(`Session expired: ${a}`),C.delete(a),null):(b.lastUsed=c,b.dek)}(a);if(b)return A().enc.Hex.parse(b);D.warn("getDEK: Invalid or expired session token, falling back to default encryption")}let c=await y(n.ENCRYPTION_KEY,null);if(!c){if(D.info("getDEK: No encryption metadata found, initializing default encryption"),!await M())return D.error("getDEK: Failed to initialize default encryption"),null;return await P(a,b)}if("user"!==c[I])return await N();{let c=global.__flujo_server_dek??null;if(c)return D.debug("getDEK: Using server unlock state for user encryption"),A().enc.Hex.parse(c);if(a&&!b){let b=await O(a);if(b)return b;D.warn("getDEK: Provided password did not yield a valid user DEK")}throw D.warn("getDEK: User encryption is locked (no unlock state or valid credential)"),new E}}catch(a){if(a instanceof E)throw a;D.error("getDEK: Failed to get DEK:",a);try{if(D.warn("getDEK: Attempting to initialize default encryption as error recovery"),await M())return await N()}catch(a){D.error("getDEK: Failed to initialize default encryption as error recovery:",a)}return null}}async function Q(a,b,c=!1){D.debug("decryptWithPassword: Entering method");try{let d=await P(b,c);if(!d)return null;let e=a.split(":");if(2!==e.length)return D.error("decryptWithPassword: Invalid ciphertext format"),null;let f=A().enc.Hex.parse(e[0]),g=e[1];return A().AES.decrypt(g,d,{iv:f,mode:A().mode.CBC,padding:A().pad.Pkcs7}).toString(A().enc.Utf8)}catch(a){if(a instanceof E)throw a;return D.error("decryptWithPassword: Failed to decrypt data:",a),null}}async function R(){return D.debug("isEncryptionInitialized: Entering method"),null!==await y(n.ENCRYPTION_KEY,null)}var S=c(40410);let T=j("backend/utils/resolveGlobalVars");async function U(a,b={}){T.debug("Entering resolveGlobalVars method");let c=!1!==b.resolveSecrets,d=await y(n.GLOBAL_ENV_VARS,{}),e=function(a){if(!a||"object"!=typeof a)return!1;let b=Object.keys(a);if(0===b.length)return!0;let c=a[b[0]];return c&&"object"==typeof c&&"value"in c&&"metadata"in c&&"object"==typeof c.metadata&&"isSecret"in c.metadata}(d);T.debug(`Loaded ${Object.keys(d).length} global environment variables (${e?"new":"old"} format)`);let f={},g=new Set;if(e)for(let[a,b]of Object.entries(d))f[a]=b.value,b.metadata.isSecret&&g.add(a);else f={...d};let h=async a=>{let b=a.match(/\$\{global:([^}]+)\}/g);if(!b)return a;let d=a;for(let a of b){let b=a.substring(9,a.length-1);if(void 0!==f[b]){let e=f[b];if(!c&&(g.has(b)||e.startsWith("encrypted:")||e.startsWith("encrypted_failed:"))){T.debug(`Keeping secret global variable unresolved: ${b}`);continue}if(e.startsWith("encrypted:")){T.debug(`Decrypting encrypted global variable: ${b}`);try{let a=e.substring(10),c=await Q(a);if(c)e=c,T.debug(`Successfully decrypted global variable: ${b}`);else{T.warn(`Failed to decrypt global variable: ${b}`);continue}}catch(a){T.error(`Error decrypting global variable: ${b}`,a);continue}}else if(e.startsWith("encrypted_failed:")){T.warn(`Skipping failed encrypted global variable: ${b}`);continue}T.debug(`Resolved global variable: ${b}`),d=d.replace(a,e)}else T.warn(`Global variable not found: ${b}`)}return d},i=async a=>{if("string"==typeof a)return await h(a);if(Array.isArray(a))return await Promise.all(a.map(a=>i(a)));if(null!==a&&"object"==typeof a){let b={};for(let[c,d]of Object.entries(a))b[c]=await i(d);return b}return a},j=await i(a);return"object"==typeof a&&null!==a&&T.debug("Resolved global variables result:",JSON.stringify(j,null,2)),T.debug("Completed global variable resolution"),j}async function V(a){return U(a,{resolveSecrets:!1})}async function W(a,b=0){if(T.debug(`Entering resolveAndDecryptApiKey method (depth: ${b})`),!a)return T.warn("Empty value provided"),null;if(b>=10)return T.warn(`Maximum resolution depth reached (10) for value: ${a}`),a;let c=a;if(c.startsWith("encrypted:")){T.debug(`Decrypting encrypted value at depth ${b}`);try{let a=c.substring(10),d=await Q(a);if(!d)return T.warn(`Failed to decrypt value at depth ${b}`),null;T.debug(`Successfully decrypted value at depth ${b}`),T.verbose(d),c=d}catch(a){return T.error(`Error decrypting value at depth ${b}:`,a),null}}else c.startsWith("encrypted_failed:")&&(T.warn(`Skipping failed encrypted value at depth ${b}`),c=c.substring(17));if(c.includes("${global:")){T.debug(`Resolving global variables at depth ${b}`);try{let a=await U(c);if(T.verbose(a),a!==c)return T.debug(`Value changed after resolving globals at depth ${b}, processing recursively`),W(a,b+1);c=a}catch(a){return T.error(`Error resolving global variables at depth ${b}:`,a),null}}return T.debug(`Completed resolveAndDecryptApiKey at depth ${b}`),c}(0,S.D)([U,V,W]),(0,d.A)(U,"605caa1e030009a4bc7e820854ff481d3e0295325d",null),(0,d.A)(V,"4003ce37366709f5add0c98a6e32e47a1006fd7c7d",null),(0,d.A)(W,"6061ed6d99a98b5d9f5d2d15065caab0a27d6a8987",null)},92173:(a,b,c)=>{c.d(b,{RJ:()=>e,gF:()=>d});let d="masked:********",e="********"}};