flujo-ai 3.29.0 → 3.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (741) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +457 -450
  3. package/.next/app-path-routes-manifest.json +30 -29
  4. package/.next/build-manifest.json +6 -6
  5. package/.next/prerender-manifest.json +30 -30
  6. package/.next/react-loadable-manifest.json +2 -2
  7. package/.next/required-server-files.json +4 -4
  8. package/.next/server/app/_not-found/page.js +4 -4
  9. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  10. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  11. package/.next/server/app/_not-found.html +1 -1
  12. package/.next/server/app/_not-found.rsc +2 -2
  13. package/.next/server/app/api/approvals/[id]/route.js +1 -1
  14. package/.next/server/app/api/approvals/[id]/route.js.nft.json +1 -1
  15. package/.next/server/app/api/approvals/[id]/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/approvals/route.js +2 -2
  17. package/.next/server/app/api/approvals/route.js.nft.json +1 -1
  18. package/.next/server/app/api/approvals/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/backup/route.js +1 -1
  20. package/.next/server/app/api/backup/route.js.nft.json +1 -1
  21. package/.next/server/app/api/backup/route_client-reference-manifest.js +1 -1
  22. package/.next/server/app/api/browse/route.js +1 -1
  23. package/.next/server/app/api/browse/route.js.nft.json +1 -1
  24. package/.next/server/app/api/browse/route_client-reference-manifest.js +1 -1
  25. package/.next/server/app/api/bugs/enhance/route.js +3 -3
  26. package/.next/server/app/api/bugs/enhance/route.js.nft.json +1 -1
  27. package/.next/server/app/api/bugs/enhance/route_client-reference-manifest.js +1 -1
  28. package/.next/server/app/api/cwd/route.js +1 -1
  29. package/.next/server/app/api/cwd/route.js.nft.json +1 -1
  30. package/.next/server/app/api/cwd/route_client-reference-manifest.js +1 -1
  31. package/.next/server/app/api/encryption/secure/route.js +1 -1
  32. package/.next/server/app/api/encryption/secure/route.js.nft.json +1 -1
  33. package/.next/server/app/api/encryption/secure/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/env/route.js +2 -2
  35. package/.next/server/app/api/env/route.js.nft.json +1 -1
  36. package/.next/server/app/api/env/route_client-reference-manifest.js +1 -1
  37. package/.next/server/app/api/flow/[id]/route.js +1 -1
  38. package/.next/server/app/api/flow/[id]/route.js.nft.json +1 -1
  39. package/.next/server/app/api/flow/[id]/route_client-reference-manifest.js +1 -1
  40. package/.next/server/app/api/flow/[id]/versions/[versionId]/route.js +1 -1
  41. package/.next/server/app/api/flow/[id]/versions/[versionId]/route.js.nft.json +1 -1
  42. package/.next/server/app/api/flow/[id]/versions/[versionId]/route_client-reference-manifest.js +1 -1
  43. package/.next/server/app/api/flow/[id]/versions/route.js +1 -1
  44. package/.next/server/app/api/flow/[id]/versions/route.js.nft.json +1 -1
  45. package/.next/server/app/api/flow/[id]/versions/route_client-reference-manifest.js +1 -1
  46. package/.next/server/app/api/flow/compile/route.js +1 -1
  47. package/.next/server/app/api/flow/compile/route.js.nft.json +1 -1
  48. package/.next/server/app/api/flow/compile/route_client-reference-manifest.js +1 -1
  49. package/.next/server/app/api/flow/generate/route.js +1 -1
  50. package/.next/server/app/api/flow/generate/route.js.nft.json +1 -1
  51. package/.next/server/app/api/flow/generate/route_client-reference-manifest.js +1 -1
  52. package/.next/server/app/api/flow/improve/route.js +1 -1
  53. package/.next/server/app/api/flow/improve/route.js.nft.json +1 -1
  54. package/.next/server/app/api/flow/improve/route_client-reference-manifest.js +1 -1
  55. package/.next/server/app/api/flow/prompt-renderer/route.js +2 -2
  56. package/.next/server/app/api/flow/prompt-renderer/route.js.nft.json +1 -1
  57. package/.next/server/app/api/flow/prompt-renderer/route_client-reference-manifest.js +1 -1
  58. package/.next/server/app/api/flow/quick-chat/route.js +1 -1
  59. package/.next/server/app/api/flow/quick-chat/route.js.nft.json +1 -1
  60. package/.next/server/app/api/flow/quick-chat/route_client-reference-manifest.js +1 -1
  61. package/.next/server/app/api/flow/repair/route.js +1 -1
  62. package/.next/server/app/api/flow/repair/route.js.nft.json +1 -1
  63. package/.next/server/app/api/flow/repair/route_client-reference-manifest.js +1 -1
  64. package/.next/server/app/api/flow/route.js +1 -1
  65. package/.next/server/app/api/flow/route.js.nft.json +1 -1
  66. package/.next/server/app/api/flow/route_client-reference-manifest.js +1 -1
  67. package/.next/server/app/api/git/route.js +2 -2
  68. package/.next/server/app/api/git/route.js.nft.json +1 -1
  69. package/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  70. package/.next/server/app/api/init/route.js +1 -1
  71. package/.next/server/app/api/init/route.js.nft.json +1 -1
  72. package/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  73. package/.next/server/app/api/local-models/capability/route.js +2 -2
  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.js +2 -2
  76. package/.next/server/app/api/local-models/pull/route_client-reference-manifest.js +1 -1
  77. package/.next/server/app/api/local-models/suggest/route.js +2 -2
  78. package/.next/server/app/api/local-models/suggest/route_client-reference-manifest.js +1 -1
  79. package/.next/server/app/api/mcp/app-sandbox/route.js +1 -1
  80. package/.next/server/app/api/mcp/app-sandbox/route.js.nft.json +1 -1
  81. package/.next/server/app/api/mcp/app-sandbox/route_client-reference-manifest.js +1 -1
  82. package/.next/server/app/api/mcp/cancel/route.js +2 -2
  83. package/.next/server/app/api/mcp/cancel/route.js.nft.json +1 -1
  84. package/.next/server/app/api/mcp/cancel/route_client-reference-manifest.js +1 -1
  85. package/.next/server/app/api/mcp/oauth-capability/route.js +1 -1
  86. package/.next/server/app/api/mcp/oauth-capability/route.js.nft.json +1 -1
  87. package/.next/server/app/api/mcp/oauth-capability/route_client-reference-manifest.js +1 -1
  88. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js +1 -1
  89. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js.nft.json +1 -1
  90. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route_client-reference-manifest.js +1 -1
  91. package/.next/server/app/api/mcp/servers/[name]/prompts/route.js +1 -1
  92. package/.next/server/app/api/mcp/servers/[name]/prompts/route.js.nft.json +1 -1
  93. package/.next/server/app/api/mcp/servers/[name]/prompts/route_client-reference-manifest.js +1 -1
  94. package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js +1 -1
  95. package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js.nft.json +1 -1
  96. package/.next/server/app/api/mcp/servers/[name]/resources/read/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/mcp/servers/[name]/resources/route.js +1 -1
  98. package/.next/server/app/api/mcp/servers/[name]/resources/route.js.nft.json +1 -1
  99. package/.next/server/app/api/mcp/servers/[name]/resources/route_client-reference-manifest.js +1 -1
  100. package/.next/server/app/api/mcp/servers/[name]/route.js +1 -1
  101. package/.next/server/app/api/mcp/servers/[name]/route.js.nft.json +1 -1
  102. package/.next/server/app/api/mcp/servers/[name]/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/mcp/servers/[name]/status/route.js +1 -1
  104. package/.next/server/app/api/mcp/servers/[name]/status/route.js.nft.json +1 -1
  105. package/.next/server/app/api/mcp/servers/[name]/status/route_client-reference-manifest.js +1 -1
  106. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js +1 -1
  107. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js.nft.json +1 -1
  108. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route_client-reference-manifest.js +1 -1
  109. package/.next/server/app/api/mcp/servers/[name]/tools/route.js +1 -1
  110. package/.next/server/app/api/mcp/servers/[name]/tools/route.js.nft.json +1 -1
  111. package/.next/server/app/api/mcp/servers/[name]/tools/route_client-reference-manifest.js +1 -1
  112. package/.next/server/app/api/mcp/servers/route.js +1 -1
  113. package/.next/server/app/api/mcp/servers/route.js.nft.json +1 -1
  114. package/.next/server/app/api/mcp/servers/route_client-reference-manifest.js +1 -1
  115. package/.next/server/app/api/mcp/test-connection/route.js +1 -1
  116. package/.next/server/app/api/mcp/test-connection/route.js.nft.json +1 -1
  117. package/.next/server/app/api/mcp/test-connection/route_client-reference-manifest.js +1 -1
  118. package/.next/server/app/api/mcp/test-connection/stream/route.js +1 -1
  119. package/.next/server/app/api/mcp/test-connection/stream/route.js.nft.json +1 -1
  120. package/.next/server/app/api/mcp/test-connection/stream/route_client-reference-manifest.js +1 -1
  121. package/.next/server/app/api/mcp-registry/route.js +2 -2
  122. package/.next/server/app/api/mcp-registry/route.js.nft.json +1 -1
  123. package/.next/server/app/api/mcp-registry/route_client-reference-manifest.js +1 -1
  124. package/.next/server/app/api/mcp-registry/spotlight/route.js +1 -1
  125. package/.next/server/app/api/mcp-registry/spotlight/route.js.nft.json +1 -1
  126. package/.next/server/app/api/mcp-registry/spotlight/route_client-reference-manifest.js +1 -1
  127. package/.next/server/app/api/model/[id]/route.js +1 -1
  128. package/.next/server/app/api/model/[id]/route.js.nft.json +1 -1
  129. package/.next/server/app/api/model/[id]/route_client-reference-manifest.js +1 -1
  130. package/.next/server/app/api/model/provider/route.js +2 -2
  131. package/.next/server/app/api/model/provider/route.js.nft.json +1 -1
  132. package/.next/server/app/api/model/provider/route_client-reference-manifest.js +1 -1
  133. package/.next/server/app/api/model/route.js +1 -1
  134. package/.next/server/app/api/model/route.js.nft.json +1 -1
  135. package/.next/server/app/api/model/route_client-reference-manifest.js +1 -1
  136. package/.next/server/app/api/model/test/route.js +2 -2
  137. package/.next/server/app/api/model/test/route.js.nft.json +1 -1
  138. package/.next/server/app/api/model/test/route_client-reference-manifest.js +1 -1
  139. package/.next/server/app/api/oauth/callback/route.js +2 -2
  140. package/.next/server/app/api/oauth/callback/route.js.nft.json +1 -1
  141. package/.next/server/app/api/oauth/callback/route_client-reference-manifest.js +1 -1
  142. package/.next/server/app/api/oauth/initiate/route.js +2 -2
  143. package/.next/server/app/api/oauth/initiate/route.js.nft.json +1 -1
  144. package/.next/server/app/api/oauth/initiate/route_client-reference-manifest.js +1 -1
  145. package/.next/server/app/api/oauth/reset/route.js +2 -2
  146. package/.next/server/app/api/oauth/reset/route.js.nft.json +1 -1
  147. package/.next/server/app/api/oauth/reset/route_client-reference-manifest.js +1 -1
  148. package/.next/server/app/api/packages/build/route.js +1 -1
  149. package/.next/server/app/api/packages/build/route.js.nft.json +1 -1
  150. package/.next/server/app/api/packages/build/route_client-reference-manifest.js +1 -1
  151. package/.next/server/app/api/packages/derive-secrets/route.js +1 -1
  152. package/.next/server/app/api/packages/derive-secrets/route.js.nft.json +1 -1
  153. package/.next/server/app/api/packages/derive-secrets/route_client-reference-manifest.js +1 -1
  154. package/.next/server/app/api/packages/install/route.js +1 -1
  155. package/.next/server/app/api/packages/install/route.js.nft.json +1 -1
  156. package/.next/server/app/api/packages/install/route_client-reference-manifest.js +1 -1
  157. package/.next/server/app/api/packages/install/status/route.js +1 -1
  158. package/.next/server/app/api/packages/install/status/route.js.nft.json +1 -1
  159. package/.next/server/app/api/packages/install/status/route_client-reference-manifest.js +1 -1
  160. package/.next/server/app/api/packages/installed/route.js +1 -1
  161. package/.next/server/app/api/packages/installed/route.js.nft.json +1 -1
  162. package/.next/server/app/api/packages/installed/route_client-reference-manifest.js +1 -1
  163. package/.next/server/app/api/packages/resolve/route.js +1 -1
  164. package/.next/server/app/api/packages/resolve/route.js.nft.json +1 -1
  165. package/.next/server/app/api/packages/resolve/route_client-reference-manifest.js +1 -1
  166. package/.next/server/app/api/packages/scan-targets/route.js +1 -1
  167. package/.next/server/app/api/packages/scan-targets/route.js.nft.json +1 -1
  168. package/.next/server/app/api/packages/scan-targets/route_client-reference-manifest.js +1 -1
  169. package/.next/server/app/api/packages/search/route.js +1 -0
  170. package/.next/server/app/api/packages/search/route.js.nft.json +1 -0
  171. package/.next/server/app/api/packages/search/route_client-reference-manifest.js +1 -0
  172. package/.next/server/app/api/packages/uninstall/route.js +1 -1
  173. package/.next/server/app/api/packages/uninstall/route.js.nft.json +1 -1
  174. package/.next/server/app/api/packages/uninstall/route_client-reference-manifest.js +1 -1
  175. package/.next/server/app/api/planned-executions/[id]/route.js +2 -2
  176. package/.next/server/app/api/planned-executions/[id]/route.js.nft.json +1 -1
  177. package/.next/server/app/api/planned-executions/[id]/route_client-reference-manifest.js +1 -1
  178. package/.next/server/app/api/planned-executions/[id]/run/route.js +2 -2
  179. package/.next/server/app/api/planned-executions/[id]/run/route.js.nft.json +1 -1
  180. package/.next/server/app/api/planned-executions/[id]/run/route_client-reference-manifest.js +1 -1
  181. package/.next/server/app/api/planned-executions/[id]/runs/route.js +2 -2
  182. package/.next/server/app/api/planned-executions/[id]/runs/route.js.nft.json +1 -1
  183. package/.next/server/app/api/planned-executions/[id]/runs/route_client-reference-manifest.js +1 -1
  184. package/.next/server/app/api/planned-executions/preview-schedule/route.js +1 -1
  185. package/.next/server/app/api/planned-executions/preview-schedule/route.js.nft.json +1 -1
  186. package/.next/server/app/api/planned-executions/preview-schedule/route_client-reference-manifest.js +1 -1
  187. package/.next/server/app/api/planned-executions/reconcile/route.js +1 -1
  188. package/.next/server/app/api/planned-executions/reconcile/route.js.nft.json +1 -1
  189. package/.next/server/app/api/planned-executions/reconcile/route_client-reference-manifest.js +1 -1
  190. package/.next/server/app/api/planned-executions/route.js +1 -1
  191. package/.next/server/app/api/planned-executions/route.js.nft.json +1 -1
  192. package/.next/server/app/api/planned-executions/route_client-reference-manifest.js +1 -1
  193. package/.next/server/app/api/registry/auth/resend/route.js +1 -1
  194. package/.next/server/app/api/registry/auth/resend/route.js.nft.json +1 -1
  195. package/.next/server/app/api/registry/auth/resend/route_client-reference-manifest.js +1 -1
  196. package/.next/server/app/api/registry/auth/reset/route.js +1 -1
  197. package/.next/server/app/api/registry/auth/reset/route.js.nft.json +1 -1
  198. package/.next/server/app/api/registry/auth/reset/route_client-reference-manifest.js +1 -1
  199. package/.next/server/app/api/registry/auth/route.js +1 -1
  200. package/.next/server/app/api/registry/auth/route.js.nft.json +1 -1
  201. package/.next/server/app/api/registry/auth/route_client-reference-manifest.js +1 -1
  202. package/.next/server/app/api/registry/oauth/callback/route.js +1 -1
  203. package/.next/server/app/api/registry/oauth/callback/route.js.nft.json +1 -1
  204. package/.next/server/app/api/registry/oauth/callback/route_client-reference-manifest.js +1 -1
  205. package/.next/server/app/api/registry/oauth/initiate/route.js +1 -1
  206. package/.next/server/app/api/registry/oauth/initiate/route.js.nft.json +1 -1
  207. package/.next/server/app/api/registry/oauth/initiate/route_client-reference-manifest.js +1 -1
  208. package/.next/server/app/api/registry/publish/route.js +1 -1
  209. package/.next/server/app/api/registry/publish/route.js.nft.json +1 -1
  210. package/.next/server/app/api/registry/publish/route_client-reference-manifest.js +1 -1
  211. package/.next/server/app/api/registry/settings/route.js +1 -1
  212. package/.next/server/app/api/registry/settings/route.js.nft.json +1 -1
  213. package/.next/server/app/api/registry/settings/route_client-reference-manifest.js +1 -1
  214. package/.next/server/app/api/restore/route.js +1 -1
  215. package/.next/server/app/api/restore/route.js.nft.json +1 -1
  216. package/.next/server/app/api/restore/route_client-reference-manifest.js +1 -1
  217. package/.next/server/app/api/runs/active/route.js +2 -2
  218. package/.next/server/app/api/runs/active/route.js.nft.json +1 -1
  219. package/.next/server/app/api/runs/active/route_client-reference-manifest.js +1 -1
  220. package/.next/server/app/api/storage/route.js +1 -1
  221. package/.next/server/app/api/storage/route.js.nft.json +1 -1
  222. package/.next/server/app/api/storage/route_client-reference-manifest.js +1 -1
  223. package/.next/server/app/api/update/route.js +1 -1
  224. package/.next/server/app/api/update/route.js.nft.json +1 -1
  225. package/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  226. package/.next/server/app/api/waves/route.js +1 -1
  227. package/.next/server/app/api/waves/route.js.nft.json +1 -1
  228. package/.next/server/app/api/waves/route_client-reference-manifest.js +1 -1
  229. package/.next/server/app/api/webhooks/[id]/route.js +1 -1
  230. package/.next/server/app/api/webhooks/[id]/route.js.nft.json +1 -1
  231. package/.next/server/app/api/webhooks/[id]/route_client-reference-manifest.js +1 -1
  232. package/.next/server/app/chat/page.js +8 -8
  233. package/.next/server/app/chat/page.js.nft.json +1 -1
  234. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  235. package/.next/server/app/chat.html +1 -1
  236. package/.next/server/app/chat.rsc +3 -3
  237. package/.next/server/app/docs/page.js +5 -5
  238. package/.next/server/app/docs/page.js.nft.json +1 -1
  239. package/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  240. package/.next/server/app/docs.html +1 -1
  241. package/.next/server/app/docs.rsc +3 -3
  242. package/.next/server/app/executions/page.js +2 -2
  243. package/.next/server/app/executions/page.js.nft.json +1 -1
  244. package/.next/server/app/executions/page_client-reference-manifest.js +1 -1
  245. package/.next/server/app/executions.html +1 -1
  246. package/.next/server/app/executions.rsc +3 -3
  247. package/.next/server/app/flows/page.js +2 -2
  248. package/.next/server/app/flows/page.js.nft.json +1 -1
  249. package/.next/server/app/flows/page_client-reference-manifest.js +1 -1
  250. package/.next/server/app/flows.html +1 -1
  251. package/.next/server/app/flows.rsc +3 -3
  252. package/.next/server/app/index.html +1 -1
  253. package/.next/server/app/index.rsc +3 -3
  254. package/.next/server/app/mcp/page.js +4 -4
  255. package/.next/server/app/mcp/page.js.nft.json +1 -1
  256. package/.next/server/app/mcp/page_client-reference-manifest.js +1 -1
  257. package/.next/server/app/mcp-flows/route.js +1 -1
  258. package/.next/server/app/mcp-flows/route.js.nft.json +1 -1
  259. package/.next/server/app/mcp-flows/route_client-reference-manifest.js +1 -1
  260. package/.next/server/app/mcp-proxy/[server]/route.js +1 -1
  261. package/.next/server/app/mcp-proxy/[server]/route.js.nft.json +1 -1
  262. package/.next/server/app/mcp-proxy/[server]/route_client-reference-manifest.js +1 -1
  263. package/.next/server/app/mcp.html +1 -1
  264. package/.next/server/app/mcp.rsc +3 -3
  265. package/.next/server/app/models/page.js +2 -2
  266. package/.next/server/app/models/page.js.nft.json +1 -1
  267. package/.next/server/app/models/page_client-reference-manifest.js +1 -1
  268. package/.next/server/app/packages/page.js +2 -2
  269. package/.next/server/app/packages/page.js.nft.json +1 -1
  270. package/.next/server/app/packages/page_client-reference-manifest.js +1 -1
  271. package/.next/server/app/packages.html +1 -1
  272. package/.next/server/app/packages.rsc +3 -3
  273. package/.next/server/app/page.js +3 -3
  274. package/.next/server/app/page.js.nft.json +1 -1
  275. package/.next/server/app/page_client-reference-manifest.js +1 -1
  276. package/.next/server/app/settings/page.js +2 -2
  277. package/.next/server/app/settings/page.js.nft.json +1 -1
  278. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  279. package/.next/server/app/settings.html +1 -1
  280. package/.next/server/app/settings.rsc +3 -3
  281. package/.next/server/app/v1/chat/completions/route.js +1 -1
  282. package/.next/server/app/v1/chat/completions/route.js.nft.json +1 -1
  283. package/.next/server/app/v1/chat/completions/route_client-reference-manifest.js +1 -1
  284. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js +2 -2
  285. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js.nft.json +1 -1
  286. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route_client-reference-manifest.js +1 -1
  287. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js +2 -2
  288. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js.nft.json +1 -1
  289. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route_client-reference-manifest.js +1 -1
  290. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js +1 -1
  291. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js.nft.json +1 -1
  292. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route_client-reference-manifest.js +1 -1
  293. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js +1 -1
  294. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js.nft.json +1 -1
  295. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route_client-reference-manifest.js +1 -1
  296. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js +2 -2
  297. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js.nft.json +1 -1
  298. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route_client-reference-manifest.js +1 -1
  299. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js +3 -3
  300. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js.nft.json +1 -1
  301. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route_client-reference-manifest.js +1 -1
  302. package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route.js +2 -2
  303. package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route.js.nft.json +1 -1
  304. package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route_client-reference-manifest.js +1 -1
  305. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route.js +1 -1
  306. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route.js.nft.json +1 -1
  307. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route_client-reference-manifest.js +1 -1
  308. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js +1 -1
  309. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js.nft.json +1 -1
  310. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route_client-reference-manifest.js +1 -1
  311. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js +2 -2
  312. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js.nft.json +1 -1
  313. package/.next/server/app/v1/chat/conversations/[conversationId]/route_client-reference-manifest.js +1 -1
  314. package/.next/server/app/v1/chat/conversations/route.js +2 -2
  315. package/.next/server/app/v1/chat/conversations/route.js.nft.json +1 -1
  316. package/.next/server/app/v1/chat/conversations/route_client-reference-manifest.js +1 -1
  317. package/.next/server/app/v1/chat/events/route.js +3 -3
  318. package/.next/server/app/v1/chat/events/route.js.nft.json +1 -1
  319. package/.next/server/app/v1/chat/events/route_client-reference-manifest.js +1 -1
  320. package/.next/server/app/v1/models/route.js +2 -2
  321. package/.next/server/app/v1/models/route.js.nft.json +1 -1
  322. package/.next/server/app/v1/models/route_client-reference-manifest.js +1 -1
  323. package/.next/server/app/waves/page.js +4 -4
  324. package/.next/server/app/waves/page.js.nft.json +1 -1
  325. package/.next/server/app/waves/page_client-reference-manifest.js +1 -1
  326. package/.next/server/app/waves.html +1 -1
  327. package/.next/server/app/waves.rsc +3 -3
  328. package/.next/server/app-paths-manifest.json +30 -29
  329. package/.next/server/chunks/166.js +2 -2
  330. package/.next/server/chunks/1690.js +1 -0
  331. package/.next/server/chunks/2273.js +2 -0
  332. package/.next/server/chunks/237.js +1 -0
  333. package/.next/server/chunks/2695.js +2 -2
  334. package/.next/server/chunks/2866.js +2 -0
  335. package/.next/server/chunks/{8730.js → 3489.js} +1 -1
  336. package/.next/server/chunks/3570.js +27 -27
  337. package/.next/server/chunks/3912.js +2 -0
  338. package/.next/server/chunks/3984.js +4 -4
  339. package/.next/server/chunks/4566.js +6 -0
  340. package/.next/server/chunks/544.js +10 -10
  341. package/.next/server/chunks/5548.js +62 -0
  342. package/.next/server/chunks/5561.js +1 -1
  343. package/.next/server/chunks/5705.js +1 -0
  344. package/.next/server/chunks/6404.js +2 -0
  345. package/.next/server/chunks/6432.js +1 -1
  346. package/.next/server/chunks/694.js +3 -0
  347. package/.next/server/chunks/7579.js +1 -1
  348. package/.next/server/chunks/7724.js +1 -0
  349. package/.next/server/chunks/8034.js +1 -0
  350. package/.next/server/chunks/8037.js +1 -0
  351. package/.next/server/chunks/8092.js +1 -1
  352. package/.next/server/chunks/{8568.js → 8192.js} +1 -1
  353. package/.next/server/chunks/{6518.js → 826.js} +2 -2
  354. package/.next/server/chunks/8298.js +1 -0
  355. package/.next/server/chunks/8321.js +1 -1
  356. package/.next/server/chunks/8366.js +90 -0
  357. package/.next/server/chunks/8615.js +1 -0
  358. package/.next/server/chunks/8645.js +2 -0
  359. package/.next/server/chunks/8851.js +1 -0
  360. package/.next/server/chunks/9313.js +1 -0
  361. package/.next/server/chunks/94.js +1 -1
  362. package/.next/server/chunks/9406.js +2 -2
  363. package/.next/server/chunks/9509.js +2 -2
  364. package/.next/server/chunks/9576.js +2 -0
  365. package/.next/server/chunks/9724.js +1 -1
  366. package/.next/server/chunks/9957.js +1 -0
  367. package/.next/server/chunks/9983.js +2 -0
  368. package/.next/server/edge-instrumentation.js.map +1 -1
  369. package/.next/server/functions-config-manifest.json +2 -2
  370. package/.next/server/middleware-build-manifest.js +1 -1
  371. package/.next/server/middleware-manifest.json +5 -5
  372. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  373. package/.next/server/pages/404.html +1 -1
  374. package/.next/server/pages/500.html +1 -1
  375. package/.next/server/pages-manifest.json +1 -1
  376. package/.next/server/server-reference-manifest.js +1 -1
  377. package/.next/server/server-reference-manifest.json +1 -1
  378. package/.next/server/src/middleware.js +2 -2
  379. package/.next/server/src/middleware.js.map +1 -1
  380. package/.next/static/A9jP2ydtYbqx-IayWP2Sg/_buildManifest.js +1 -0
  381. package/.next/static/chunks/1496-d478bce7d7c85080.js +1 -0
  382. package/.next/static/chunks/1641-e5ff8f112da0a335.js +1 -0
  383. package/.next/static/chunks/{8345.bc5534ec13abc9ee.js → 2969.eb9ff8cd2a5034b0.js} +1 -1
  384. package/.next/static/chunks/{2005-f9d38c39f10c321f.js → 3189-fa8ec6d719d5e72b.js} +1 -1
  385. package/.next/static/chunks/3452-a639f121f2953f50.js +62 -0
  386. package/.next/static/chunks/3560-5bdceef09b50e1c3.js +1 -0
  387. package/.next/static/chunks/3711-0050bb4d345c2c9c.js +1 -0
  388. package/.next/static/chunks/4147-20897d83b3cd3978.js +39 -0
  389. package/.next/static/chunks/469-1f043fe082d9f475.js +1 -0
  390. package/.next/static/chunks/5441-cb0c31de8bce65c3.js +1 -0
  391. package/.next/static/chunks/{3827-9e9a6e11ef808d90.js → 8041-05830e887c133085.js} +1 -1
  392. package/.next/static/chunks/8678-c6c6be2672f337f6.js +1 -0
  393. package/.next/static/chunks/8855-f802599c4af81cca.js +1 -0
  394. package/.next/static/chunks/app/_not-found/page-26055690a2426e22.js +1 -0
  395. package/.next/static/chunks/app/api/approvals/[id]/route-1a4c9e7a416ccbcf.js +1 -0
  396. package/.next/static/chunks/app/api/approvals/route-1a4c9e7a416ccbcf.js +1 -0
  397. package/.next/static/chunks/app/api/backup/route-1a4c9e7a416ccbcf.js +1 -0
  398. package/.next/static/chunks/app/api/browse/route-1a4c9e7a416ccbcf.js +1 -0
  399. package/.next/static/chunks/app/api/bugs/enhance/route-1a4c9e7a416ccbcf.js +1 -0
  400. package/.next/static/chunks/app/api/cwd/route-1a4c9e7a416ccbcf.js +1 -0
  401. package/.next/static/chunks/app/api/encryption/secure/route-1a4c9e7a416ccbcf.js +1 -0
  402. package/.next/static/chunks/app/api/env/route-1a4c9e7a416ccbcf.js +1 -0
  403. package/.next/static/chunks/app/api/flow/[id]/route-1a4c9e7a416ccbcf.js +1 -0
  404. package/.next/static/chunks/app/api/flow/[id]/versions/[versionId]/route-1a4c9e7a416ccbcf.js +1 -0
  405. package/.next/static/chunks/app/api/flow/[id]/versions/route-1a4c9e7a416ccbcf.js +1 -0
  406. package/.next/static/chunks/app/api/flow/compile/route-1a4c9e7a416ccbcf.js +1 -0
  407. package/.next/static/chunks/app/api/flow/generate/route-1a4c9e7a416ccbcf.js +1 -0
  408. package/.next/static/chunks/app/api/flow/improve/route-1a4c9e7a416ccbcf.js +1 -0
  409. package/.next/static/chunks/app/api/flow/prompt-renderer/route-1a4c9e7a416ccbcf.js +1 -0
  410. package/.next/static/chunks/app/api/flow/quick-chat/route-1a4c9e7a416ccbcf.js +1 -0
  411. package/.next/static/chunks/app/api/flow/repair/route-1a4c9e7a416ccbcf.js +1 -0
  412. package/.next/static/chunks/app/api/flow/route-1a4c9e7a416ccbcf.js +1 -0
  413. package/.next/static/chunks/app/api/git/route-1a4c9e7a416ccbcf.js +1 -0
  414. package/.next/static/chunks/app/api/init/route-1a4c9e7a416ccbcf.js +1 -0
  415. package/.next/static/chunks/app/api/local-models/capability/route-1a4c9e7a416ccbcf.js +1 -0
  416. package/.next/static/chunks/app/api/local-models/pull/route-1a4c9e7a416ccbcf.js +1 -0
  417. package/.next/static/chunks/app/api/local-models/suggest/route-1a4c9e7a416ccbcf.js +1 -0
  418. package/.next/static/chunks/app/api/mcp/app-sandbox/route-1a4c9e7a416ccbcf.js +1 -0
  419. package/.next/static/chunks/app/api/mcp/cancel/route-1a4c9e7a416ccbcf.js +1 -0
  420. package/.next/static/chunks/app/api/mcp/oauth-capability/route-1a4c9e7a416ccbcf.js +1 -0
  421. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-1a4c9e7a416ccbcf.js +1 -0
  422. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-1a4c9e7a416ccbcf.js +1 -0
  423. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-1a4c9e7a416ccbcf.js +1 -0
  424. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-1a4c9e7a416ccbcf.js +1 -0
  425. package/.next/static/chunks/app/api/mcp/servers/[name]/route-1a4c9e7a416ccbcf.js +1 -0
  426. package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-1a4c9e7a416ccbcf.js +1 -0
  427. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-1a4c9e7a416ccbcf.js +1 -0
  428. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-1a4c9e7a416ccbcf.js +1 -0
  429. package/.next/static/chunks/app/api/mcp/servers/route-1a4c9e7a416ccbcf.js +1 -0
  430. package/.next/static/chunks/app/api/mcp/test-connection/route-1a4c9e7a416ccbcf.js +1 -0
  431. package/.next/static/chunks/app/api/mcp/test-connection/stream/route-1a4c9e7a416ccbcf.js +1 -0
  432. package/.next/static/chunks/app/api/mcp-registry/route-1a4c9e7a416ccbcf.js +1 -0
  433. package/.next/static/chunks/app/api/mcp-registry/spotlight/route-1a4c9e7a416ccbcf.js +1 -0
  434. package/.next/static/chunks/app/api/model/[id]/route-1a4c9e7a416ccbcf.js +1 -0
  435. package/.next/static/chunks/app/api/model/provider/route-1a4c9e7a416ccbcf.js +1 -0
  436. package/.next/static/chunks/app/api/model/route-1a4c9e7a416ccbcf.js +1 -0
  437. package/.next/static/chunks/app/api/model/test/route-1a4c9e7a416ccbcf.js +1 -0
  438. package/.next/static/chunks/app/api/oauth/callback/route-1a4c9e7a416ccbcf.js +1 -0
  439. package/.next/static/chunks/app/api/oauth/initiate/route-1a4c9e7a416ccbcf.js +1 -0
  440. package/.next/static/chunks/app/api/oauth/reset/route-1a4c9e7a416ccbcf.js +1 -0
  441. package/.next/static/chunks/app/api/packages/build/route-1a4c9e7a416ccbcf.js +1 -0
  442. package/.next/static/chunks/app/api/packages/derive-secrets/route-1a4c9e7a416ccbcf.js +1 -0
  443. package/.next/static/chunks/app/api/packages/install/route-1a4c9e7a416ccbcf.js +1 -0
  444. package/.next/static/chunks/app/api/packages/install/status/route-1a4c9e7a416ccbcf.js +1 -0
  445. package/.next/static/chunks/app/api/packages/installed/route-1a4c9e7a416ccbcf.js +1 -0
  446. package/.next/static/chunks/app/api/packages/resolve/route-1a4c9e7a416ccbcf.js +1 -0
  447. package/.next/static/chunks/app/api/packages/scan-targets/route-1a4c9e7a416ccbcf.js +1 -0
  448. package/.next/static/chunks/app/api/packages/search/route-1a4c9e7a416ccbcf.js +1 -0
  449. package/.next/static/chunks/app/api/packages/uninstall/route-1a4c9e7a416ccbcf.js +1 -0
  450. package/.next/static/chunks/app/api/planned-executions/[id]/route-1a4c9e7a416ccbcf.js +1 -0
  451. package/.next/static/chunks/app/api/planned-executions/[id]/run/route-1a4c9e7a416ccbcf.js +1 -0
  452. package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-1a4c9e7a416ccbcf.js +1 -0
  453. package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-1a4c9e7a416ccbcf.js +1 -0
  454. package/.next/static/chunks/app/api/planned-executions/reconcile/route-1a4c9e7a416ccbcf.js +1 -0
  455. package/.next/static/chunks/app/api/planned-executions/route-1a4c9e7a416ccbcf.js +1 -0
  456. package/.next/static/chunks/app/api/registry/auth/resend/route-1a4c9e7a416ccbcf.js +1 -0
  457. package/.next/static/chunks/app/api/registry/auth/reset/route-1a4c9e7a416ccbcf.js +1 -0
  458. package/.next/static/chunks/app/api/registry/auth/route-1a4c9e7a416ccbcf.js +1 -0
  459. package/.next/static/chunks/app/api/registry/oauth/callback/route-1a4c9e7a416ccbcf.js +1 -0
  460. package/.next/static/chunks/app/api/registry/oauth/initiate/route-1a4c9e7a416ccbcf.js +1 -0
  461. package/.next/static/chunks/app/api/registry/publish/route-1a4c9e7a416ccbcf.js +1 -0
  462. package/.next/static/chunks/app/api/registry/settings/route-1a4c9e7a416ccbcf.js +1 -0
  463. package/.next/static/chunks/app/api/restore/route-1a4c9e7a416ccbcf.js +1 -0
  464. package/.next/static/chunks/app/api/runs/active/route-1a4c9e7a416ccbcf.js +1 -0
  465. package/.next/static/chunks/app/api/storage/route-1a4c9e7a416ccbcf.js +1 -0
  466. package/.next/static/chunks/app/api/update/route-1a4c9e7a416ccbcf.js +1 -0
  467. package/.next/static/chunks/app/api/waves/route-1a4c9e7a416ccbcf.js +1 -0
  468. package/.next/static/chunks/app/api/webhooks/[id]/route-1a4c9e7a416ccbcf.js +1 -0
  469. package/.next/static/chunks/app/chat/page-558edb21321a32d0.js +1 -0
  470. package/.next/static/chunks/app/docs/{page-250523af44e96120.js → page-fc30f613607b8a26.js} +1 -1
  471. package/.next/static/chunks/app/executions/{page-1d8557a642114697.js → page-e71689c7256af1e8.js} +1 -1
  472. package/.next/static/chunks/app/flows/page-e90e8d7b4c1bd1c8.js +1 -0
  473. package/.next/static/chunks/app/layout-038b35b382eef11d.js +1 -0
  474. package/.next/static/chunks/app/mcp/page-6041156fc67ef361.js +1 -0
  475. package/.next/static/chunks/app/mcp-flows/route-1a4c9e7a416ccbcf.js +1 -0
  476. package/.next/static/chunks/app/mcp-proxy/[server]/route-1a4c9e7a416ccbcf.js +1 -0
  477. package/.next/static/chunks/app/models/{error-5732fbb053e182c5.js → error-1718b538d6967e56.js} +1 -1
  478. package/.next/static/chunks/app/models/{loading-57d1c02d0817fc47.js → loading-1687ae86584f5b1b.js} +1 -1
  479. package/.next/static/chunks/app/models/page-d16f2721e7a93b43.js +1 -0
  480. package/.next/static/chunks/app/packages/page-c6b0e7aa95bc1064.js +1 -0
  481. package/.next/static/chunks/app/page-5c7fccd019942d46.js +1 -0
  482. package/.next/static/chunks/app/settings/page-fb336bb049bab72a.js +1 -0
  483. package/.next/static/chunks/app/v1/chat/completions/route-1a4c9e7a416ccbcf.js +1 -0
  484. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-1a4c9e7a416ccbcf.js +1 -0
  485. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-1a4c9e7a416ccbcf.js +1 -0
  486. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-1a4c9e7a416ccbcf.js +1 -0
  487. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-1a4c9e7a416ccbcf.js +1 -0
  488. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-1a4c9e7a416ccbcf.js +1 -0
  489. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-1a4c9e7a416ccbcf.js +1 -0
  490. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/inject/route-1a4c9e7a416ccbcf.js +1 -0
  491. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/resources/route-1a4c9e7a416ccbcf.js +1 -0
  492. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-1a4c9e7a416ccbcf.js +1 -0
  493. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-1a4c9e7a416ccbcf.js +1 -0
  494. package/.next/static/chunks/app/v1/chat/conversations/route-1a4c9e7a416ccbcf.js +1 -0
  495. package/.next/static/chunks/app/v1/chat/events/route-1a4c9e7a416ccbcf.js +1 -0
  496. package/.next/static/chunks/app/v1/models/route-1a4c9e7a416ccbcf.js +1 -0
  497. package/.next/static/chunks/app/waves/page-3cf4b47b12662196.js +1 -0
  498. package/.next/static/chunks/{main-app-faff38c77cb00119.js → main-app-2de821d2899bb841.js} +1 -1
  499. package/.next/static/chunks/{webpack-08eb993682e1fb1a.js → webpack-2d8e0c13c0b865fe.js} +1 -1
  500. package/.next/trace +10 -10
  501. package/.next/types/app/api/approvals/[id]/route.ts +1 -1
  502. package/.next/types/app/api/approvals/route.ts +1 -1
  503. package/.next/types/app/api/backup/route.ts +1 -1
  504. package/.next/types/app/api/browse/route.ts +1 -1
  505. package/.next/types/app/api/bugs/enhance/route.ts +1 -1
  506. package/.next/types/app/api/cwd/route.ts +1 -1
  507. package/.next/types/app/api/encryption/secure/route.ts +1 -1
  508. package/.next/types/app/api/env/route.ts +1 -1
  509. package/.next/types/app/api/flow/[id]/route.ts +1 -1
  510. package/.next/types/app/api/flow/[id]/versions/[versionId]/route.ts +1 -1
  511. package/.next/types/app/api/flow/[id]/versions/route.ts +1 -1
  512. package/.next/types/app/api/flow/compile/route.ts +1 -1
  513. package/.next/types/app/api/flow/generate/route.ts +1 -1
  514. package/.next/types/app/api/flow/improve/route.ts +1 -1
  515. package/.next/types/app/api/flow/prompt-renderer/route.ts +1 -1
  516. package/.next/types/app/api/flow/quick-chat/route.ts +1 -1
  517. package/.next/types/app/api/flow/repair/route.ts +1 -1
  518. package/.next/types/app/api/flow/route.ts +1 -1
  519. package/.next/types/app/api/git/route.ts +1 -1
  520. package/.next/types/app/api/init/route.ts +1 -1
  521. package/.next/types/app/api/local-models/capability/route.ts +1 -1
  522. package/.next/types/app/api/local-models/pull/route.ts +1 -1
  523. package/.next/types/app/api/local-models/suggest/route.ts +1 -1
  524. package/.next/types/app/api/mcp/app-sandbox/route.ts +1 -1
  525. package/.next/types/app/api/mcp/cancel/route.ts +1 -1
  526. package/.next/types/app/api/mcp/oauth-capability/route.ts +1 -1
  527. package/.next/types/app/api/mcp/servers/[name]/prompts/get/route.ts +1 -1
  528. package/.next/types/app/api/mcp/servers/[name]/prompts/route.ts +1 -1
  529. package/.next/types/app/api/mcp/servers/[name]/resources/read/route.ts +1 -1
  530. package/.next/types/app/api/mcp/servers/[name]/resources/route.ts +1 -1
  531. package/.next/types/app/api/mcp/servers/[name]/route.ts +1 -1
  532. package/.next/types/app/api/mcp/servers/[name]/status/route.ts +1 -1
  533. package/.next/types/app/api/mcp/servers/[name]/tools/[toolName]/route.ts +1 -1
  534. package/.next/types/app/api/mcp/servers/[name]/tools/route.ts +1 -1
  535. package/.next/types/app/api/mcp/servers/route.ts +1 -1
  536. package/.next/types/app/api/mcp/test-connection/route.ts +1 -1
  537. package/.next/types/app/api/mcp/test-connection/stream/route.ts +1 -1
  538. package/.next/types/app/api/mcp-registry/route.ts +1 -1
  539. package/.next/types/app/api/mcp-registry/spotlight/route.ts +1 -1
  540. package/.next/types/app/api/model/[id]/route.ts +1 -1
  541. package/.next/types/app/api/model/provider/route.ts +1 -1
  542. package/.next/types/app/api/model/route.ts +1 -1
  543. package/.next/types/app/api/model/test/route.ts +1 -1
  544. package/.next/types/app/api/oauth/callback/route.ts +1 -1
  545. package/.next/types/app/api/oauth/initiate/route.ts +1 -1
  546. package/.next/types/app/api/oauth/reset/route.ts +1 -1
  547. package/.next/types/app/api/packages/build/route.ts +1 -1
  548. package/.next/types/app/api/packages/derive-secrets/route.ts +1 -1
  549. package/.next/types/app/api/packages/install/route.ts +1 -1
  550. package/.next/types/app/api/packages/install/status/route.ts +1 -1
  551. package/.next/types/app/api/packages/installed/route.ts +1 -1
  552. package/.next/types/app/api/packages/resolve/route.ts +1 -1
  553. package/.next/types/app/api/packages/scan-targets/route.ts +1 -1
  554. package/.next/types/app/api/packages/search/route.ts +347 -0
  555. package/.next/types/app/api/packages/uninstall/route.ts +1 -1
  556. package/.next/types/app/api/planned-executions/[id]/route.ts +1 -1
  557. package/.next/types/app/api/planned-executions/[id]/run/route.ts +1 -1
  558. package/.next/types/app/api/planned-executions/[id]/runs/route.ts +1 -1
  559. package/.next/types/app/api/planned-executions/preview-schedule/route.ts +1 -1
  560. package/.next/types/app/api/planned-executions/reconcile/route.ts +1 -1
  561. package/.next/types/app/api/planned-executions/route.ts +1 -1
  562. package/.next/types/app/api/registry/auth/resend/route.ts +1 -1
  563. package/.next/types/app/api/registry/auth/reset/route.ts +1 -1
  564. package/.next/types/app/api/registry/auth/route.ts +1 -1
  565. package/.next/types/app/api/registry/oauth/callback/route.ts +1 -1
  566. package/.next/types/app/api/registry/oauth/initiate/route.ts +1 -1
  567. package/.next/types/app/api/registry/publish/route.ts +1 -1
  568. package/.next/types/app/api/registry/settings/route.ts +1 -1
  569. package/.next/types/app/api/restore/route.ts +1 -1
  570. package/.next/types/app/api/runs/active/route.ts +1 -1
  571. package/.next/types/app/api/storage/route.ts +1 -1
  572. package/.next/types/app/api/update/route.ts +1 -1
  573. package/.next/types/app/api/waves/route.ts +1 -1
  574. package/.next/types/app/api/webhooks/[id]/route.ts +1 -1
  575. package/.next/types/app/chat/page.ts +1 -1
  576. package/.next/types/app/docs/page.ts +1 -1
  577. package/.next/types/app/executions/page.ts +1 -1
  578. package/.next/types/app/flows/page.ts +1 -1
  579. package/.next/types/app/layout.ts +1 -1
  580. package/.next/types/app/mcp/page.ts +1 -1
  581. package/.next/types/app/mcp-flows/route.ts +1 -1
  582. package/.next/types/app/mcp-proxy/[server]/route.ts +1 -1
  583. package/.next/types/app/models/page.ts +1 -1
  584. package/.next/types/app/packages/page.ts +1 -1
  585. package/.next/types/app/page.ts +1 -1
  586. package/.next/types/app/settings/page.ts +1 -1
  587. package/.next/types/app/v1/chat/completions/route.ts +1 -1
  588. package/.next/types/app/v1/chat/conversations/[conversationId]/breakpoints/route.ts +1 -1
  589. package/.next/types/app/v1/chat/conversations/[conversationId]/cancel/route.ts +1 -1
  590. package/.next/types/app/v1/chat/conversations/[conversationId]/debug/continue/route.ts +1 -1
  591. package/.next/types/app/v1/chat/conversations/[conversationId]/debug/step/route.ts +1 -1
  592. package/.next/types/app/v1/chat/conversations/[conversationId]/edit-state/route.ts +1 -1
  593. package/.next/types/app/v1/chat/conversations/[conversationId]/events/route.ts +1 -1
  594. package/.next/types/app/v1/chat/conversations/[conversationId]/inject/route.ts +1 -1
  595. package/.next/types/app/v1/chat/conversations/[conversationId]/resources/route.ts +1 -1
  596. package/.next/types/app/v1/chat/conversations/[conversationId]/respond/route.ts +1 -1
  597. package/.next/types/app/v1/chat/conversations/[conversationId]/route.ts +1 -1
  598. package/.next/types/app/v1/chat/conversations/route.ts +1 -1
  599. package/.next/types/app/v1/chat/events/route.ts +1 -1
  600. package/.next/types/app/v1/models/route.ts +1 -1
  601. package/.next/types/app/waves/page.ts +1 -1
  602. package/.next/types/routes.d.ts +2 -1
  603. package/.next/types/validator.ts +9 -0
  604. package/README.md +1 -1
  605. package/bin/flujo.mjs +120 -120
  606. package/next.config.mjs +139 -139
  607. package/package.json +1 -1
  608. package/scripts/launch-next.mjs +112 -112
  609. package/.next/server/chunks/1083.js +0 -2
  610. package/.next/server/chunks/1819.js +0 -2
  611. package/.next/server/chunks/2368.js +0 -2
  612. package/.next/server/chunks/2666.js +0 -1
  613. package/.next/server/chunks/2985.js +0 -1
  614. package/.next/server/chunks/3101.js +0 -1
  615. package/.next/server/chunks/3273.js +0 -1
  616. package/.next/server/chunks/3648.js +0 -1
  617. package/.next/server/chunks/38.js +0 -2
  618. package/.next/server/chunks/3951.js +0 -151
  619. package/.next/server/chunks/4239.js +0 -1
  620. package/.next/server/chunks/4426.js +0 -6
  621. package/.next/server/chunks/4663.js +0 -1
  622. package/.next/server/chunks/5148.js +0 -1
  623. package/.next/server/chunks/5786.js +0 -2
  624. package/.next/server/chunks/6219.js +0 -1
  625. package/.next/server/chunks/6588.js +0 -2
  626. package/.next/server/chunks/8339.js +0 -1
  627. package/.next/server/chunks/8667.js +0 -1
  628. package/.next/server/chunks/9251.js +0 -1
  629. package/.next/server/chunks/9253.js +0 -3
  630. package/.next/server/chunks/991.js +0 -2
  631. package/.next/static/JGMk-MwwdpQ94asqw-mUR/_buildManifest.js +0 -1
  632. package/.next/static/chunks/2233-1139c1d3ef356980.js +0 -1
  633. package/.next/static/chunks/289-98f50bfcf833d661.js +0 -1
  634. package/.next/static/chunks/2988-0b197a9b468a2df9.js +0 -1
  635. package/.next/static/chunks/3418-a2f5d0c4f29ee2fb.js +0 -1
  636. package/.next/static/chunks/3958-5641a828b320f2fe.js +0 -100
  637. package/.next/static/chunks/5661-1b976072cc3d2fed.js +0 -1
  638. package/.next/static/chunks/6947-0ff3545efb53e959.js +0 -1
  639. package/.next/static/chunks/8054-f33d06ecea5d36e4.js +0 -1
  640. package/.next/static/chunks/8855-02889c9ab4bf0bcf.js +0 -1
  641. package/.next/static/chunks/8863-c140a742178a4a87.js +0 -1
  642. package/.next/static/chunks/app/_not-found/page-81dc485d60f94046.js +0 -1
  643. package/.next/static/chunks/app/api/approvals/[id]/route-7d60cffa598f4779.js +0 -1
  644. package/.next/static/chunks/app/api/approvals/route-7d60cffa598f4779.js +0 -1
  645. package/.next/static/chunks/app/api/backup/route-7d60cffa598f4779.js +0 -1
  646. package/.next/static/chunks/app/api/browse/route-7d60cffa598f4779.js +0 -1
  647. package/.next/static/chunks/app/api/bugs/enhance/route-7d60cffa598f4779.js +0 -1
  648. package/.next/static/chunks/app/api/cwd/route-7d60cffa598f4779.js +0 -1
  649. package/.next/static/chunks/app/api/encryption/secure/route-7d60cffa598f4779.js +0 -1
  650. package/.next/static/chunks/app/api/env/route-7d60cffa598f4779.js +0 -1
  651. package/.next/static/chunks/app/api/flow/[id]/route-7d60cffa598f4779.js +0 -1
  652. package/.next/static/chunks/app/api/flow/[id]/versions/[versionId]/route-7d60cffa598f4779.js +0 -1
  653. package/.next/static/chunks/app/api/flow/[id]/versions/route-7d60cffa598f4779.js +0 -1
  654. package/.next/static/chunks/app/api/flow/compile/route-7d60cffa598f4779.js +0 -1
  655. package/.next/static/chunks/app/api/flow/generate/route-7d60cffa598f4779.js +0 -1
  656. package/.next/static/chunks/app/api/flow/improve/route-7d60cffa598f4779.js +0 -1
  657. package/.next/static/chunks/app/api/flow/prompt-renderer/route-7d60cffa598f4779.js +0 -1
  658. package/.next/static/chunks/app/api/flow/quick-chat/route-7d60cffa598f4779.js +0 -1
  659. package/.next/static/chunks/app/api/flow/repair/route-7d60cffa598f4779.js +0 -1
  660. package/.next/static/chunks/app/api/flow/route-7d60cffa598f4779.js +0 -1
  661. package/.next/static/chunks/app/api/git/route-7d60cffa598f4779.js +0 -1
  662. package/.next/static/chunks/app/api/init/route-7d60cffa598f4779.js +0 -1
  663. package/.next/static/chunks/app/api/local-models/capability/route-7d60cffa598f4779.js +0 -1
  664. package/.next/static/chunks/app/api/local-models/pull/route-7d60cffa598f4779.js +0 -1
  665. package/.next/static/chunks/app/api/local-models/suggest/route-7d60cffa598f4779.js +0 -1
  666. package/.next/static/chunks/app/api/mcp/app-sandbox/route-7d60cffa598f4779.js +0 -1
  667. package/.next/static/chunks/app/api/mcp/cancel/route-7d60cffa598f4779.js +0 -1
  668. package/.next/static/chunks/app/api/mcp/oauth-capability/route-7d60cffa598f4779.js +0 -1
  669. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-7d60cffa598f4779.js +0 -1
  670. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-7d60cffa598f4779.js +0 -1
  671. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-7d60cffa598f4779.js +0 -1
  672. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-7d60cffa598f4779.js +0 -1
  673. package/.next/static/chunks/app/api/mcp/servers/[name]/route-7d60cffa598f4779.js +0 -1
  674. package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-7d60cffa598f4779.js +0 -1
  675. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-7d60cffa598f4779.js +0 -1
  676. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-7d60cffa598f4779.js +0 -1
  677. package/.next/static/chunks/app/api/mcp/servers/route-7d60cffa598f4779.js +0 -1
  678. package/.next/static/chunks/app/api/mcp/test-connection/route-7d60cffa598f4779.js +0 -1
  679. package/.next/static/chunks/app/api/mcp/test-connection/stream/route-7d60cffa598f4779.js +0 -1
  680. package/.next/static/chunks/app/api/mcp-registry/route-7d60cffa598f4779.js +0 -1
  681. package/.next/static/chunks/app/api/mcp-registry/spotlight/route-7d60cffa598f4779.js +0 -1
  682. package/.next/static/chunks/app/api/model/[id]/route-7d60cffa598f4779.js +0 -1
  683. package/.next/static/chunks/app/api/model/provider/route-7d60cffa598f4779.js +0 -1
  684. package/.next/static/chunks/app/api/model/route-7d60cffa598f4779.js +0 -1
  685. package/.next/static/chunks/app/api/model/test/route-7d60cffa598f4779.js +0 -1
  686. package/.next/static/chunks/app/api/oauth/callback/route-7d60cffa598f4779.js +0 -1
  687. package/.next/static/chunks/app/api/oauth/initiate/route-7d60cffa598f4779.js +0 -1
  688. package/.next/static/chunks/app/api/oauth/reset/route-7d60cffa598f4779.js +0 -1
  689. package/.next/static/chunks/app/api/packages/build/route-7d60cffa598f4779.js +0 -1
  690. package/.next/static/chunks/app/api/packages/derive-secrets/route-7d60cffa598f4779.js +0 -1
  691. package/.next/static/chunks/app/api/packages/install/route-7d60cffa598f4779.js +0 -1
  692. package/.next/static/chunks/app/api/packages/install/status/route-7d60cffa598f4779.js +0 -1
  693. package/.next/static/chunks/app/api/packages/installed/route-7d60cffa598f4779.js +0 -1
  694. package/.next/static/chunks/app/api/packages/resolve/route-7d60cffa598f4779.js +0 -1
  695. package/.next/static/chunks/app/api/packages/scan-targets/route-7d60cffa598f4779.js +0 -1
  696. package/.next/static/chunks/app/api/packages/uninstall/route-7d60cffa598f4779.js +0 -1
  697. package/.next/static/chunks/app/api/planned-executions/[id]/route-7d60cffa598f4779.js +0 -1
  698. package/.next/static/chunks/app/api/planned-executions/[id]/run/route-7d60cffa598f4779.js +0 -1
  699. package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-7d60cffa598f4779.js +0 -1
  700. package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-7d60cffa598f4779.js +0 -1
  701. package/.next/static/chunks/app/api/planned-executions/reconcile/route-7d60cffa598f4779.js +0 -1
  702. package/.next/static/chunks/app/api/planned-executions/route-7d60cffa598f4779.js +0 -1
  703. package/.next/static/chunks/app/api/registry/auth/resend/route-7d60cffa598f4779.js +0 -1
  704. package/.next/static/chunks/app/api/registry/auth/reset/route-7d60cffa598f4779.js +0 -1
  705. package/.next/static/chunks/app/api/registry/auth/route-7d60cffa598f4779.js +0 -1
  706. package/.next/static/chunks/app/api/registry/oauth/callback/route-7d60cffa598f4779.js +0 -1
  707. package/.next/static/chunks/app/api/registry/oauth/initiate/route-7d60cffa598f4779.js +0 -1
  708. package/.next/static/chunks/app/api/registry/publish/route-7d60cffa598f4779.js +0 -1
  709. package/.next/static/chunks/app/api/registry/settings/route-7d60cffa598f4779.js +0 -1
  710. package/.next/static/chunks/app/api/restore/route-7d60cffa598f4779.js +0 -1
  711. package/.next/static/chunks/app/api/runs/active/route-7d60cffa598f4779.js +0 -1
  712. package/.next/static/chunks/app/api/storage/route-7d60cffa598f4779.js +0 -1
  713. package/.next/static/chunks/app/api/update/route-7d60cffa598f4779.js +0 -1
  714. package/.next/static/chunks/app/api/waves/route-7d60cffa598f4779.js +0 -1
  715. package/.next/static/chunks/app/api/webhooks/[id]/route-7d60cffa598f4779.js +0 -1
  716. package/.next/static/chunks/app/chat/page-2b69c5e35164f553.js +0 -1
  717. package/.next/static/chunks/app/flows/page-3f0d7cca2edff792.js +0 -1
  718. package/.next/static/chunks/app/layout-81f91fb3b894951a.js +0 -1
  719. package/.next/static/chunks/app/mcp/page-0e90177062130679.js +0 -1
  720. package/.next/static/chunks/app/mcp-flows/route-7d60cffa598f4779.js +0 -1
  721. package/.next/static/chunks/app/mcp-proxy/[server]/route-7d60cffa598f4779.js +0 -1
  722. package/.next/static/chunks/app/models/page-c69e10b83c06535d.js +0 -1
  723. package/.next/static/chunks/app/packages/page-bf8aad441c664433.js +0 -1
  724. package/.next/static/chunks/app/page-d3ea90b065b95d1e.js +0 -1
  725. package/.next/static/chunks/app/settings/page-4a9952c514f284e0.js +0 -1
  726. package/.next/static/chunks/app/v1/chat/completions/route-7d60cffa598f4779.js +0 -1
  727. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-7d60cffa598f4779.js +0 -1
  728. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-7d60cffa598f4779.js +0 -1
  729. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-7d60cffa598f4779.js +0 -1
  730. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-7d60cffa598f4779.js +0 -1
  731. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-7d60cffa598f4779.js +0 -1
  732. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-7d60cffa598f4779.js +0 -1
  733. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/inject/route-7d60cffa598f4779.js +0 -1
  734. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/resources/route-7d60cffa598f4779.js +0 -1
  735. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-7d60cffa598f4779.js +0 -1
  736. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-7d60cffa598f4779.js +0 -1
  737. package/.next/static/chunks/app/v1/chat/conversations/route-7d60cffa598f4779.js +0 -1
  738. package/.next/static/chunks/app/v1/chat/events/route-7d60cffa598f4779.js +0 -1
  739. package/.next/static/chunks/app/v1/models/route-7d60cffa598f4779.js +0 -1
  740. package/.next/static/chunks/app/waves/page-3ca939f0f7e817b1.js +0 -1
  741. /package/.next/static/{JGMk-MwwdpQ94asqw-mUR → A9jP2ydtYbqx-IayWP2Sg}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ exports.id=9313,exports.ids=[1925,3629,4306,6793,9174,9313],exports.modules={1925:(a,b,c)=>{"use strict";c.d(b,{Hm:()=>f,xc:()=>e});let d=["key","secret","token","password"],e=a=>d.some(b=>a.toLowerCase().includes(b)),f=a=>e(a)||"authorization"===a.trim().toLowerCase()},3534:(a,b,c)=>{"use strict";c.r(b),c.d(b,{"400f9ef83b77b4fa18eef936c40907123810309034":()=>d.V,"603b08e3f479805caab0c86a5988dc208d2bb8d300":()=>d.resolveGlobalVars,"60c1cb1fb6ec50cadfd68292dc2b7c6cc8e1d8a86f":()=>d.G});var d=c(73456)},3676:(a,b,c)=>{"use strict";c.d(b,{Wj:()=>h,ln:()=>g});var d=c(10641),e=c(58739);let f="encryption_locked";async function g(){return(0,e.isEncryptionLocked)()}async function h(a){return await g()?a?.openai?d.NextResponse.json({error:{message:"Encryption is locked. Unlock FLUJO to continue.",type:f,code:f,param:null}},{status:423}):d.NextResponse.json({error:f},{status:423}):null}},41115:(a,b,c)=>{"use strict";c.d(b,{$:()=>h,v5:()=>g});var d=c(10641);let e=new Set(["localhost","127.0.0.1","::1"]);function f(a){let b=a.toLowerCase();return!!e.has(b)||(function(){let a=process.env.FLUJO_EXTRA_LOCAL_HOSTS;return a?a.split(",").map(a=>a.trim().toLowerCase()).filter(a=>a.length>0&&"."!==a):[]})().some(a=>a.startsWith(".")?b.endsWith(a):b===a)}function g(a,b){let c=function(a){if(!a)return null;let b=a.trim();if(b.startsWith("[")){let a=b.indexOf("]");return a>0?b.slice(1,a):null}return b.split(":")[0]||null}(a);if(!c||!f(c))return!1;if(b)try{if(!f(new URL(b).hostname))return!1}catch{return!1}return!0}function h(a){return g(a.headers.get("host"),a.headers.get("origin"))?null:d.NextResponse.json({error:"Forbidden: this endpoint only accepts local requests."},{status:403})}},42398:(a,b,c)=>{"use strict";c.d(b,{QE:()=>l,_u:()=>n,aZ:()=>k,qf:()=>o,v5:()=>h.v5,xK:()=>m,xV:()=>p});var d=c(50846),e=c(60453),f=c(3676),g=c(68780),h=c(41115);let i=(0,d.h)("backend/services/mcp/proxyForward"),j="FLUJO encryption is locked (encryption_locked). Unlock FLUJO to continue.";async function k(a){let b=await e.mcpService.loadServerConfigs();if(!Array.isArray(b))return i.warn("isServerExposed: failed to load server configs",{error:b.error}),!1;let c=b.find(b=>b.name===a);return!!c&&!c.disabled&&!0===c.exposeAsMcpServer}async function l(a){if(await (0,f.ln)())throw Error(j);let b=await e.mcpService.connectServer(a);if(!b.success)throw Error(`Failed to connect to MCP server '${a}': ${b.error}`);let c=await e.mcpService.listServerTools(a);if(c.error)throw Error(`Failed to list tools for '${a}': ${c.error}`);return{tools:c.tools??[]}}async function m(a,b,c){if(await (0,f.ln)())return{content:[{type:"text",text:j}],isError:!0};let d=await e.mcpService.connectServer(a);if(!d.success)return{content:[{type:"text",text:`Error connecting to '${a}': ${d.error}`}],isError:!0};let g=await e.mcpService.callTool(a,b,c);return g.success?g.data:{content:[{type:"text",text:`Error: ${g.error??"Unknown error"}`}],isError:!0}}async function n(a){if(await (0,f.ln)())throw Error(j);let b=await e.mcpService.connectServer(a);if(!b.success)throw Error(`Failed to connect to MCP server '${a}': ${b.error}`);let c=await e.mcpService.listServerResources(a);if(c.error)throw Error(`Failed to list resources for '${a}': ${c.error}`);return{resources:c.resources??[]}}async function o(a){if(await (0,f.ln)())throw Error(j);let b=await e.mcpService.connectServer(a);if(!b.success)throw Error(`Failed to connect to MCP server '${a}': ${b.error}`);let c=await e.mcpService.listServerResourceTemplates(a);if(c.error)throw Error(`Failed to list resource templates for '${a}': ${c.error}`);return{resourceTemplates:c.resourceTemplates??[]}}async function p(a,b){if(await (0,f.ln)())throw Error(j);let c=await e.mcpService.connectServer(a);if(!c.success)throw Error(`Failed to connect to MCP server '${a}': ${c.error}`);let d=await e.mcpService.readResource(a,b);if(!d.success||!d.data)throw new g.Nh(g.O4.InvalidParams,`Resource not found: '${b}' on server '${a}': ${d.error??"unknown error"}`);return d.data}},56793:(a,b,c)=>{"use strict";c.d(b,{eh:()=>g,ru:()=>e});let d=(0,c(50846).h)("backend/services/scheduler/flowRunEventBus");function e(a){return"signal"===a.kind}class f{publish(a){if(0===this.listeners.size)return;let b=e(a)?`signal topic=${a.topic} emitter=${a.emitterFlowId}`:`flow=${a.flowId} status=${a.status}`;for(let c of(d.debug(`Publishing flow event: ${b} firedBy=${a.firedBy} depth=${a.chainDepth} listeners=${this.listeners.size}`),[...this.listeners]))try{c(a)}catch(a){d.warn("A flow-run event listener threw:",a)}}subscribe(a){return this.listeners.add(a),()=>{this.listeners.delete(a)}}get listenerCount(){return this.listeners.size}constructor(){this.listeners=new Set}}function g(){return global.__flujo_flow_run_event_bus||(global.__flujo_flow_run_event_bus=new f),global.__flujo_flow_run_event_bus}},73456:(a,b,c)=>{"use strict";c.d(b,{G:()=>m,V:()=>l,resolveGlobalVars:()=>k});var d=c(75879);c(68633);var e=c(50846),f=c(92372),g=c(38844),h=c(58739),i=c(51669);let j=(0,e.h)("backend/utils/resolveGlobalVars");async function k(a,b={}){j.debug("Entering resolveGlobalVars method");let c=!1!==b.resolveSecrets,d=await (0,f.YM)(g.Z.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);j.debug(`Loaded ${Object.keys(d).length} global environment variables (${e?"new":"old"} format)`);let i={},l=new Set;if(e)for(let[a,b]of Object.entries(d))i[a]=b.value,b.metadata.isSecret&&l.add(a);else i={...d};let m=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!==i[b]){let e=i[b];if(!c&&(l.has(b)||e.startsWith("encrypted:")||e.startsWith("encrypted_failed:"))){j.debug(`Keeping secret global variable unresolved: ${b}`);continue}if(e.startsWith("encrypted:")){j.debug(`Decrypting encrypted global variable: ${b}`);try{let a=e.substring(10),c=await (0,h.decryptWithPassword)(a);if(c)e=c,j.debug(`Successfully decrypted global variable: ${b}`);else{j.warn(`Failed to decrypt global variable: ${b}`);continue}}catch(a){j.error(`Error decrypting global variable: ${b}`,a);continue}}else if(e.startsWith("encrypted_failed:")){j.warn(`Skipping failed encrypted global variable: ${b}`);continue}j.debug(`Resolved global variable: ${b}`),d=d.replace(a,e)}else j.warn(`Global variable not found: ${b}`)}return d},n=async a=>{if("string"==typeof a)return await m(a);if(Array.isArray(a))return await Promise.all(a.map(a=>n(a)));if(null!==a&&"object"==typeof a){let b={};for(let[c,d]of Object.entries(a))b[c]=await n(d);return b}return a},o=await n(a);return"object"==typeof a&&null!==a&&j.debug("Resolved global variables result:",JSON.stringify(o,null,2)),j.debug("Completed global variable resolution"),o}async function l(a){return k(a,{resolveSecrets:!1})}async function m(a,b=0){if(j.debug(`Entering resolveAndDecryptApiKey method (depth: ${b})`),!a)return j.warn("Empty value provided"),null;if(b>=10)return j.warn(`Maximum resolution depth reached (10) for value: ${a}`),a;let c=a;if(c.startsWith("encrypted:")){j.debug(`Decrypting encrypted value at depth ${b}`);try{let a=c.substring(10),d=await (0,h.decryptWithPassword)(a);if(!d)return j.warn(`Failed to decrypt value at depth ${b}`),null;j.debug(`Successfully decrypted value at depth ${b}`),j.verbose(d),c=d}catch(a){return j.error(`Error decrypting value at depth ${b}:`,a),null}}else c.startsWith("encrypted_failed:")&&(j.warn(`Skipping failed encrypted value at depth ${b}`),c=c.substring(17));if(c.includes("${global:")){j.debug(`Resolving global variables at depth ${b}`);try{let a=await k(c);if(j.verbose(a),a!==c)return j.debug(`Value changed after resolving globals at depth ${b}, processing recursively`),m(a,b+1);c=a}catch(a){return j.error(`Error resolving global variables at depth ${b}:`,a),null}}return j.debug(`Completed resolveAndDecryptApiKey at depth ${b}`),c}(0,i.D)([k,l,m]),(0,d.A)(k,"603b08e3f479805caab0c86a5988dc208d2bb8d300",null),(0,d.A)(l,"400f9ef83b77b4fa18eef936c40907123810309034",null),(0,d.A)(m,"60c1cb1fb6ec50cadfd68292dc2b7c6cc8e1d8a86f",null)},78335:()=>{},96487:()=>{}};
@@ -1 +1 @@
1
- "use strict";exports.id=94,exports.ids=[94],exports.modules={50094:(a,b,c)=>{c.d(b,{filesystemCallTool:()=>O,filesystemToolDefinitions:()=>t});var d=c(33873),e=c.n(d),f=c(29021),g=c(55511),h=c(4984),i=c.n(h),j=c(18230),k=c(63129),l=c(94749),m=c(48092),n=c(65858),o=c(19724);let p=(0,j.h)("backend/services/mcp/internal/filesystemTools");function q(a){return{content:[{type:"text",text:JSON.stringify(a,null,2)}],structuredContent:a}}function r(a){return{content:[{type:"text",text:JSON.stringify({error:a},null,2)}],isError:!0}}function s(a,b){let c="string"==typeof a?a.trim():"";if(!c)throw Error('Provide "path".');let d=(0,k.getDataDir)(),f=e().isAbsolute(c)?e().resolve(c):e().resolve(d,c),g=(0,n.bz)(f);if(g.denied)throw Error(`Path "${f}" is within a protected location (${g.matchedRoot}) and is blocked by the FLUJO built-in server protected-path policy. Set ${n.wp}=1 to override (operator only).`);if(0===b.length||!b.some(a=>(0,m.F)(a,f)))throw Error(`Path "${f}" is outside the configured filesystem roots.`);return f}function t(){let a={type:"string",description:"File or directory path. Relative paths resolve against the FLUJO data directory; absolute paths are used as-is."};return[{name:"read_file",description:'Read a text file and return its content. Optionally read only a line range with "from"/"to" (1-based, inclusive). For large files (> 100 KB) read WHOLE (no "from"/"to"), a "pattern" is REQUIRED: the server greps the file and returns only matching lines (with a little surrounding context) so you can follow up with targeted "from"/"to" reads. Pass pattern "*" to force-read the entire large file anyway. Returns { path, from, to, totalLines, content, truncated, contentHash, matches? }. Pass the returned contentHash back as "expectedHash" on a follow-up edit_file/write_file to guard against the file changing in between (TOCTOU).',inputSchema:{type:"object",properties:{path:a,from:{type:"number",description:"Optional 1-based first line to return (inclusive)."},to:{type:"number",description:"Optional 1-based last line to return (inclusive)."},pattern:{type:"string",description:'Case-insensitive substring to grep for. Required to read a large file whole without a "from"/"to" range; matching lines (plus context) are returned instead of the full body. Use "*" to read the whole large file anyway.'}},required:["path"]},outputSchema:{type:"object",properties:{path:{type:"string"},from:{type:"number"},to:{type:"number"},totalLines:{type:"number"},truncated:{type:"boolean"},content:{type:"string"},contentHash:{type:"string",description:'SHA-256 (hex) of the raw file content. Pass this back as "expectedHash" to edit_file/write_file to guard against the file changing between read and write (TOCTOU).'},matches:{type:"array",items:{type:"object",properties:{line:{type:"number"},text:{type:"string"}},required:["line","text"]}}},required:["path","from","to","totalLines","truncated","content"]}},{name:"write_file",description:'Create or write a text file (parent directories are created). "mode": "overwrite" (default) replaces the whole file, or a line range when "startLine"/"endLine" (1-based inclusive) are given; "append" adds content at the end; "insert" inserts content before "startLine". Optionally pass "expectedHash" (the contentHash from a prior read_file) to reject the write if the file changed on disk since it was read (TOCTOU guard); ignored for a whole-file overwrite. Returns { path, bytesWritten, mode, ... }.',_meta:{ui:{resourceUri:"ui://devcanvas/diff"}},inputSchema:{type:"object",properties:{path:a,content:{type:"string",description:"The content to write/insert/append."},mode:{type:"string",enum:["overwrite","append","insert"],description:'Write mode (default "overwrite").'},startLine:{type:"number",description:'For "insert": line to insert before. For "overwrite": first line of the range to replace (1-based).'},endLine:{type:"number",description:'For "overwrite": last line (inclusive, 1-based) of the range to replace.'},expectedHash:{type:"string",description:"Optional SHA-256 (contentHash from read_file). For append/insert/range-overwrite modes, the write is rejected if the file no longer hashes to this value (TOCTOU guard)."}},required:["path","content"]},outputSchema:{type:"object",properties:{path:{type:"string"},bytesWritten:{type:"number"},mode:{type:"string"},startLine:{type:"number"},endLine:{type:"number"},linesReplaced:{type:"number"},linesInserted:{type:"number"}},required:["path","bytesWritten","mode"]}},{name:"edit_file",description:'Edit a text file two ways (mutually exclusive): (1) "edits": [{ oldText, newText, startLine?, endLine? }] literal find/replace — each replaces the unique occurrence of oldText. startLine/endLine are an optional disambiguation HINT (if exactly one match starts in that range it wins); a wrong/missing range still works as long as oldText is unique in the file. Include enough surrounding context to make oldText unique. Or (2) "diff": a unified diff string ("@@ -a,b +c,d @@" hunks) applied atomically — hunks are relocated to where their context actually matches, so slightly-off @@ line numbers still apply, and CRLF files are handled. Fails with no partial write only when text is missing/ambiguous or a hunk context is not found. Optionally pass "expectedHash" (the contentHash from a prior read_file) to reject the edit if the file changed on disk since it was read (TOCTOU guard). Returns { path, editsApplied|applied, diff:{added,removed} }.',_meta:{ui:{resourceUri:"ui://devcanvas/diff"}},inputSchema:{type:"object",properties:{path:a,edits:{type:"array",description:"List of literal { oldText, newText } edits applied in order (optionally scoped with startLine/endLine).",items:{type:"object",properties:{oldText:{type:"string",description:"Exact text to find."},newText:{type:"string",description:"Replacement text."},startLine:{type:"number",description:"Optional 1-based first line to scope this edit to."},endLine:{type:"number",description:"Optional 1-based last line (inclusive) to scope this edit to."}},required:["oldText","newText"]}},diff:{type:"string",description:'A unified diff to apply atomically. Mutually exclusive with "edits".'},startLine:{type:"number",description:"Optional default 1-based first line to scope all literal edits to."},endLine:{type:"number",description:"Optional default 1-based last line (inclusive) to scope all literal edits to."},expectedHash:{type:"string",description:"Optional SHA-256 (contentHash from read_file). If provided and the freshly-read file no longer hashes to it, the edit is rejected with no changes written (TOCTOU guard)."}},required:["path"]},outputSchema:{type:"object",properties:{path:{type:"string"},mode:{type:"string"},editsApplied:{type:"number"},applied:{type:"boolean"},diff:{type:"object",properties:{added:{type:"number"},removed:{type:"number"}},required:["added","removed"]}},required:["path","diff"]}},{name:"list_dir",description:'List the entries of a directory. Returns { path, entries: [{ name, type, size }] } where type is "file" | "directory" | "other".',inputSchema:{type:"object",properties:{path:a},required:["path"]},outputSchema:{type:"object",properties:{path:{type:"string"},entries:{type:"array",items:{type:"object",properties:{name:{type:"string"},type:{type:"string"},size:{type:"number"}},required:["name","type","size"]}}},required:["path","entries"]}},{name:"file_browser_ui",description:'Open an interactive file browser in the chat so the USER can pick a file. This returns IMMEDIATELY without a selection — the browser is shown to the user and the file they choose arrives afterwards as a follow-up user message (e.g. "Selected file: <path>"). After calling this tool you MUST stop and wait for that message; do not guess a path or continue until the user has selected.',_meta:{ui:{resourceUri:"ui://filesystem/browser"}},inputSchema:{type:"object",properties:{path:{...a,description:"Optional starting directory for the browser (defaults to the FLUJO data directory)."}},required:[]}},{name:"dir_tree",description:"Return a recursive, depth-limited directory tree as nested JSON. Returns { path, depth, tree }.",inputSchema:{type:"object",properties:{path:a,depth:{type:"number",description:"Maximum recursion depth (default 3, max 10)."}},required:["path"]},outputSchema:{type:"object",properties:{path:{type:"string"},depth:{type:"number"},truncated:{type:"boolean"},tree:{type:"array"}},required:["path","depth","tree"]}},{name:"search",description:'Search a directory tree. Match file/dir NAMES against "namePattern" (substring, case-insensitive) and/or file CONTENT against "content" (substring, case-insensitive). Content search DOES look inside every text file, returning each matching line with its 1-based line number; likely-binary and very large files are skipped for speed. Returns { matches: [{ path, line?, text? }], truncated }.',inputSchema:{type:"object",properties:{path:a,namePattern:{type:"string",description:"Optional case-insensitive substring to match against entry names."},content:{type:"string",description:"Optional case-insensitive substring to match inside text files."}},required:["path"]},outputSchema:{type:"object",properties:{matches:{type:"array",items:{type:"object",properties:{path:{type:"string"},line:{type:"number"},text:{type:"string"}},required:["path"]}},truncated:{type:"boolean"}},required:["matches","truncated"]}},{name:"get_file_info",description:"Stat a path. Returns { path, type, size, isFile, isDirectory, createdAt, modifiedAt }.",inputSchema:{type:"object",properties:{path:a},required:["path"]},outputSchema:{type:"object",properties:{path:{type:"string"},type:{type:"string"},size:{type:"number"},isFile:{type:"boolean"},isDirectory:{type:"boolean"},createdAt:{type:"string"},modifiedAt:{type:"string"}},required:["path","type","size","isFile","isDirectory","createdAt","modifiedAt"]}},{name:"create_directory",description:"Create a directory (recursively). Succeeds if it already exists. Returns { path, created }.",inputSchema:{type:"object",properties:{path:a},required:["path"]},outputSchema:{type:"object",properties:{path:{type:"string"},created:{type:"boolean"}},required:["path","created"]}},{name:"move",description:'Move or rename a file/directory from "source" to "destination". Returns { source, destination }.',inputSchema:{type:"object",properties:{source:{type:"string",description:"Existing path to move."},destination:{type:"string",description:"Target path."}},required:["source","destination"]},outputSchema:{type:"object",properties:{source:{type:"string"},destination:{type:"string"}},required:["source","destination"]}},{name:"delete",description:'Delete a file or directory. Pass "recursive": true to remove a non-empty directory. Returns { path, deleted }.',inputSchema:{type:"object",properties:{path:a,recursive:{type:"boolean",description:"Remove directories and their contents recursively."}},required:["path"]},outputSchema:{type:"object",properties:{path:{type:"string"},deleted:{type:"boolean"}},required:["path","deleted"]}},{name:"get_allowed_directories",description:"Returns the list of directories that this filesystem MCP server is currently allowed to access. The list is the merged result of server-level roots (configured via FLUJO MCP settings), MCP-node-level roots (set in the FlowBuilder), and the FLUJO_FS_ROOTS environment variable ceiling. When no roots are configured at all, returns the FLUJO data directory as the default (so the file browser is usable out of the box).",inputSchema:{type:"object",properties:{},required:[]},outputSchema:{type:"object",properties:{directories:{type:"array",items:{type:"string"},description:"Absolute paths of all allowed directories."}},required:["directories"]}}]}function u(a){return a.replace(/\r\n?/g,"\n").split("\n")}function v(a){return a.includes("\r\n")?"\r\n":"\n"}function w(a){return(0,g.createHash)("sha256").update(a,"utf8").digest("hex")}function x(a){return a.startsWith("\uFEFF")?{bom:"\uFEFF",body:a.slice(1)}:{bom:"",body:a}}let y="File changed after permission approval. Read it again before editing. No changes written.";function z(a){let b=Math.min(a.length,8e3);for(let c=0;c<b;c++)if(0===a[c])return!0;return!1}async function A(a,b,c){let d=b.toLowerCase(),e=[],g=!1,h=(0,f.createReadStream)(a,{encoding:"utf8"}),j=i().createInterface({input:h,crlfDelay:1/0}),k=0;try{for await(let a of j)if(k++,a.toLowerCase().includes(d)&&(e.push({line:k,text:a.slice(0,400)}),e.length>=c)){g=!0;break}}finally{j.close(),h.destroy()}return{matches:e,truncated:g}}async function B(a,b){let c=s(a.path,b),d="number"==typeof a.from||"number"==typeof a.to,e="string"==typeof a.pattern?a.pattern.trim():"",g=0;try{g=(await f.promises.stat(c)).size}catch{}if(g>1e5&&!d&&!e)return r(`File is large (${g} bytes > 100000 threshold). Reading it whole would flood the context. Provide a "pattern" to grep for (matching lines + context are returned, then read targeted ranges with "from"/"to"), or pass pattern "*" to read the whole file anyway.`);if(e&&"*"!==e&&!d){let a=await f.promises.readFile(c);if(z(a))return r(`File appears to be binary; cannot grep for a pattern: ${c}`);let b=a.toString("utf8"),d=u(b),h=d.length,i=e.toLowerCase(),j=[];for(let a=0;a<d.length&&(!d[a].toLowerCase().includes(i)||(j.push({line:a+1,text:d[a].slice(0,400)}),!(j.length>=200)));a++);let k=j.length>=200,l=new Set;for(let a of j)for(let b=a.line-2;b<=a.line+2;b++)b>=1&&b<=h&&l.add(b);let m=[...l].sort((a,b)=>a-b),n=[],p=0;for(let a of m)p&&a>p+1&&n.push("…"),n.push(`${a}: ${d[a-1]}`),p=a;let s=n.join("\n");return s.length>2e5&&(s=s.slice(0,2e5)+"\n…[truncated]"),(0,o.Wk)(c,"read",g),q({path:c,from:1,to:h,totalLines:h,truncated:k,content:j.length?s:`(no lines matched pattern ${JSON.stringify(e)})`,matches:j,contentHash:w(b)})}let h=await f.promises.readFile(c,"utf8"),i=u(h),j=i.length,k="number"==typeof a.from?Math.max(1,Math.floor(a.from)):1,l="number"==typeof a.to?Math.floor(a.to):j;l<k&&([k,l]=[l,k]),l=Math.min(l,j);let m=d?i.slice(k-1,l).join("\n"):h,n=!1;return m.length>2e5&&(m=m.slice(0,2e5)+"\n…[truncated]",n=!0),(0,o.Wk)(c,"read",g),q({path:c,from:d?k:1,to:d?l:j,totalLines:j,truncated:n,content:m,contentHash:w(h)})}async function C(a,b){let c=s(a.path,b),d="string"==typeof a.content?a.content:"",g="append"===a.mode||"insert"===a.mode?a.mode:"overwrite",h="number"==typeof a.startLine||"number"==typeof a.endLine;if(await f.promises.mkdir(e().dirname(c),{recursive:!0}),(0,o.Wk)(c,"write"),"overwrite"===g&&!h)return await f.promises.writeFile(c,d,"utf8"),q({path:c,bytesWritten:Buffer.byteLength(d,"utf8"),mode:"overwrite"});let i="";try{i=await f.promises.readFile(c,"utf8")}catch{i=""}let j="string"==typeof a.expectedHash?a.expectedHash:void 0;if(j&&w(i)!==j)return r(y);let{bom:k,body:l}=x(i);if("append"===g){let a=!l.length||l.endsWith("\n")||l.endsWith("\r\n")?"":v(l),b=k+l+a+d;return await f.promises.writeFile(c,b,"utf8"),q({path:c,bytesWritten:Buffer.byteLength(b,"utf8"),mode:"append"})}let m=v(l),n=l.length?l.split(/\r?\n/):[],p=d.split(/\r?\n/),t=n.length;if("insert"===g){let b="number"==typeof a.startLine?Math.max(1,Math.floor(a.startLine)):t+1,d=Math.min(b-1,t);n.splice(d,0,...p);let e=k+n.join(m);return await f.promises.writeFile(c,e,"utf8"),q({path:c,bytesWritten:Buffer.byteLength(e,"utf8"),mode:"insert",startLine:b,linesInserted:p.length})}let u="number"==typeof a.startLine?Math.max(1,Math.floor(a.startLine)):1,z="number"==typeof a.endLine?Math.floor(a.endLine):u;z<u&&([u,z]=[z,u]);let A=Math.max(0,(z=Math.min(z,t))-u+1);n.splice(u-1,A,...p);let B=k+n.join(m);return await f.promises.writeFile(c,B,"utf8"),q({path:c,bytesWritten:Buffer.byteLength(B,"utf8"),mode:"overwrite",startLine:u,endLine:z,linesReplaced:A})}async function D(a,b){let c=s(a.path,b),d="string"==typeof a.diff&&a.diff.trim().length>0,e=Array.isArray(a.edits)&&a.edits.length>0;if(d&&e)return r('Provide either "diff" or "edits", not both.');let g=await f.promises.readFile(c,"utf8"),h="string"==typeof a.expectedHash?a.expectedHash:void 0;if(h&&w(g)!==h)return r(y);let{bom:i,body:j}=x(g);if(d){let b,d=v(j),e=j.replace(/\r\n?/g,"\n");try{b=function(a,b){let c=a.split("\n"),d=b.split(/\r?\n/),e=/^@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/,f=[],g=null;for(let a=0;a<d.length;a++){let b=d[a];if(void 0===b)break;let c=e.exec(b);if(c){g={oldStart:parseInt(c[1],10),ops:[]},f.push(g);continue}if(b.startsWith("--- ")||b.startsWith("+++ ")){g=null;continue}if(!g)continue;let h=b.length?b[0]:" ",i=b.length?b.slice(1):"";if(" "===h||"-"===h||"+"===h)g.ops.push({tag:h,body:i});else if("\\"===h);else throw Error(`unexpected diff line: ${JSON.stringify(b)}`)}if(0===f.length)throw Error("no unified-diff hunks (@@ ... @@) found");let h=[],i=0,j=0,k=0;for(let a of f){let b=function(a,b,c,d){if(0===b.length)return Math.min(Math.max(c,d),a.length);let e=a.length-b.length,f=c=>{if(c<d||c>e)return!1;for(let d=0;d<b.length;d++)if(a[c+d]!==b[d])return!1;return!0},g=Math.max(d,c);if(f(g))return g;let h=Math.max(g-d,e-g);for(let a=1;a<=h;a++){if(f(g-a))return g-a;if(f(g+a))return g+a}throw Error(`could not locate hunk near line ${c+1}; its context/removed lines do not match the file. First expected line: ${JSON.stringify(b[0])}`)}(c,a.ops.filter(a=>" "===a.tag||"-"===a.tag).map(a=>a.body),Math.max(0,a.oldStart-1),i);if(b<i)throw Error("overlapping or out-of-order hunks");for(;i<b;)h.push(c[i]),i++;for(let b of a.ops)" "===b.tag?(h.push(c[i]),i++):"-"===b.tag?(i++,k++):(h.push(b.body),j++)}for(;i<c.length;)h.push(c[i]),i++;return{result:h.join("\n"),added:j,removed:k}}(e,a.diff)}catch(a){return r(`Diff apply failed: ${a instanceof Error?a.message:String(a)}. No changes written.`)}let g=i+("\r\n"===d?b.result.replace(/\n/g,"\r\n"):b.result);return await f.promises.writeFile(c,g,"utf8"),(0,o.Wk)(c,"write"),q({path:c,applied:!0,mode:"diff",diff:{added:b.added,removed:b.removed}})}let k=Array.isArray(a.edits)?a.edits:[];if(0===k.length)return r('Provide a non-empty "edits" array of { oldText, newText } or a "diff" string.');let l="number"==typeof a.startLine?a.startLine:void 0,m="number"==typeof a.endLine?a.endLine:void 0,n=v(j),p=j.replace(/\r\n?/g,"\n"),t=0;for(let a of k){let b="string"==typeof a.oldText?a.oldText.replace(/\r\n?/g,"\n"):"",d="string"==typeof a.newText?a.newText.replace(/\r\n?/g,"\n"):"";if(!b)return r(`Edit #${t+1} has an empty "oldText".`);let e="number"==typeof a.startLine?a.startLine:l,f="number"==typeof a.endLine?a.endLine:m,g=void 0!==e||void 0!==f,h=[];for(let a=p.indexOf(b);-1!==a;a=p.indexOf(b,a+1))h.push(a);if(0===h.length)return r(`Edit #${t+1}: "oldText" not found in ${c}. No changes written.`);let i=-1;if(g){let{lo:a,hi:b}=function(a,b,c){if(void 0===b&&void 0===c)return{lo:0,hi:a.length};let d=a.split("\n"),e=Math.max(1,Math.floor(b??1)),f=Math.min(d.length,Math.floor(c??d.length)),g=0;for(let a=0;a<e-1&&a<d.length;a++)g+=d[a].length+1;let h=g;for(let a=e-1;a<f&&a<d.length;a++)h+=d[a].length+ +(a<d.length-1);return{lo:g,hi:Math.max(g,h)}}(p,e,f),c=h.filter(c=>c>=a&&c<b);1===c.length&&(i=c[0])}if(-1===i)if(1!==h.length)return r(`Edit #${t+1}: "oldText" is ambiguous (appears ${h.length} times); add more surrounding context or a tighter startLine/endLine so exactly one occurrence is in range. No changes written.`);else i=h[0];p=p.slice(0,i)+d+p.slice(i+b.length),t+=1}let z=function(a,b){let c=u(a),d=u(b),e=new Map;for(let a of d)e.set(a,(e.get(a)??0)+1);let f=new Map;for(let a of c)f.set(a,(f.get(a)??0)+1);let g=0;for(let[a,b]of f)g+=Math.max(0,b-(e.get(a)??0));let h=0;for(let[a,b]of e)h+=Math.max(0,b-(f.get(a)??0));return{added:h,removed:g}}(j,p),A=i+("\r\n"===n?p.replace(/\n/g,"\r\n"):p);return await f.promises.writeFile(c,A,"utf8"),(0,o.Wk)(c,"write"),q({path:c,mode:"edits",editsApplied:t,diff:z})}async function E(a){try{let b=await f.promises.lstat(a);if(b.isFile())return"file";if(b.isDirectory())return"directory";return"other"}catch{return"other"}}async function F(a,b){let c=s(a.path,b),d=await f.promises.readdir(c),g=await Promise.all(d.map(async a=>{let b=e().join(c,a),d=await E(b),g=0;try{g=(await f.promises.stat(b)).size}catch{}return{name:a,type:d,size:g}}));return g.sort((a,b)=>a.type===b.type?a.name.localeCompare(b.name):"directory"===a.type?-1:1),q({path:c,entries:g})}async function G(a,b){let c=s(a.path,b),d=Math.min("number"==typeof a.depth?Math.max(1,Math.floor(a.depth)):3,10),g=0,h=!1;async function i(a,b){let c;if(b>d||h)return[];try{c=await f.promises.readdir(a)}catch{return[]}c.sort((a,b)=>a.localeCompare(b));let j=[];for(let f of c){if(++g>5e3){h=!0;break}let c=e().join(a,f),k=await E(c),l={name:f,type:k};"directory"===k&&b<d&&(l.children=await i(c,b+1)),j.push(l)}return j}let j=await i(c,1);return q({path:c,depth:d,truncated:h,tree:j})}async function H(a,b,c){let d;try{d=await f.promises.stat(a)}catch{return[]}if(!d.isFile()||d.size>5e6)return[];try{let b=await f.promises.open(a,"r");try{let a=Buffer.alloc(Math.min(8e3,d.size));if(a.length&&await b.read(a,0,a.length,0),z(a))return[]}finally{await b.close()}}catch{return[]}let{matches:e}=await A(a,b,Math.max(1,c));return e.map(b=>({path:a,line:b.line,text:b.text}))}async function I(a,b){let c=s(a.path,b),d="string"==typeof a.namePattern?a.namePattern.toLowerCase():"",g="string"==typeof a.content?a.content:"";if(!d&&!g)return r('Provide "namePattern" and/or "content" to search for.');let h=[],i=!1,j=[];async function k(a){let b;if(!i){try{b=await f.promises.readdir(a)}catch{return}for(let c of b){if(i)return;let b=e().join(a,c),f=await E(b);if(d&&c.toLowerCase().includes(d)&&(h.push({path:b}),h.length>=1e3)){i=!0;return}"directory"===f?await k(b):"file"===f&&g&&j.push(b)}}}if(await k(c),g&&!i)for(let a=0;a<j.length&&!i;a+=16){let b=j.slice(a,a+16);for(let a of(await Promise.all(b.map(a=>H(a,g,1e3))))){for(let b of a)if(h.push(b),h.length>=1e3){i=!0;break}if(i)break}}return q({matches:h,truncated:i})}async function J(a,b){let c=s(a.path,b),d=await f.promises.stat(c);return q({path:c,type:d.isFile()?"file":d.isDirectory()?"directory":"other",size:d.size,isFile:d.isFile(),isDirectory:d.isDirectory(),createdAt:d.birthtime.toISOString(),modifiedAt:d.mtime.toISOString()})}async function K(a,b){let c=s(a.path,b);return await f.promises.mkdir(c,{recursive:!0}),q({path:c,created:!0})}async function L(a,b){let c=s(a.source,b),d=s(a.destination,b);return await f.promises.mkdir(e().dirname(d),{recursive:!0}),await f.promises.rename(c,d),q({source:c,destination:d})}async function M(a,b){let c=s(a.path,b),d=!0===a.recursive;return await f.promises.rm(c,{recursive:d,force:!1}),q({path:c,deleted:!0})}async function N(a){return q({directories:a})}async function O(a,b,c){try{if("file_browser_ui"===a)return function(a,b=!1){return{content:[{type:"text",text:a}],...b?{isError:!0}:{}}}("File browser shown to the user. Waiting for them to select a file — their choice will arrive as a follow-up message. Do not proceed until then.");let d=await (0,m.loadEffectiveRoots)(l.K3,"FLUJO_FS_ROOTS",c);switch(a){case"read_file":return await B(b,d);case"write_file":return await C(b,d);case"edit_file":return await D(b,d);case"list_dir":return await F(b,d);case"dir_tree":return await G(b,d);case"search":return await I(b,d);case"get_file_info":return await J(b,d);case"create_directory":return await K(b,d);case"move":return await L(b,d);case"delete":return await M(b,d);case"get_allowed_directories":return await N(d);default:return r(`Unknown tool on the built-in filesystem server: ${a}`)}}catch(c){let b=c instanceof Error?c.message:String(c);return p.warn("filesystemCallTool failed",{toolName:a,err:c}),{isError:!0,content:[{type:"text",text:JSON.stringify({error:b})}],structuredContent:{error:b}}}}},65858:(a,b,c)=>{c.d(b,{bz:()=>m,wp:()=>j});var d=c(33873),e=c.n(d),f=c(21820),g=c.n(f),h=c(63129),i=c(48092);let j="FLUJO_ALLOW_PROTECTED_PATHS",k=null;function l(a,...b){return e().resolve(a,...b)}function m(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,i.F)(a,b)))return{denied:!1};for(let a of function(){var a;let b="string"==typeof(a=process.env[j])&&/^(1|true|yes|on)$/i.test(a.trim()),c=(0,h.getHomeDir)(),d=`${b?"off":"on"}::${c}`;if(k&&k.key===d)return k.paths;let f=b?[]:function(a){let b=[];if("win32"===process.platform)for(let c of["AppData","Downloads","Desktop","Documents","Pictures","Music","Videos","OneDrive"])b.push(l(a,c));else if("darwin"===process.platform){for(let c of["Downloads","Desktop","Documents","Pictures","Music","Movies"])b.push(l(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(l(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(l(a,c));return Array.from(new Set(b))}(c);return k={key:d,paths:f},f}())if((0,i.F)(a,b))return{denied:!0,matchedRoot:a};return{denied:!1}}}};
1
+ "use strict";exports.id=94,exports.ids=[94],exports.modules={50094:(a,b,c)=>{c.d(b,{filesystemCallTool:()=>O,filesystemToolDefinitions:()=>t});var d=c(33873),e=c.n(d),f=c(29021),g=c(55511),h=c(4984),i=c.n(h),j=c(18230),k=c(85510),l=c(94749),m=c(48092),n=c(65858),o=c(19724);let p=(0,j.h)("backend/services/mcp/internal/filesystemTools");function q(a){return{content:[{type:"text",text:JSON.stringify(a,null,2)}],structuredContent:a}}function r(a){return{content:[{type:"text",text:JSON.stringify({error:a},null,2)}],isError:!0}}function s(a,b){let c="string"==typeof a?a.trim():"";if(!c)throw Error('Provide "path".');let d=(0,k.getDataDir)(),f=e().isAbsolute(c)?e().resolve(c):e().resolve(d,c),g=(0,n.bz)(f);if(g.denied)throw Error(`Path "${f}" is within a protected location (${g.matchedRoot}) and is blocked by the FLUJO built-in server protected-path policy. Set ${n.wp}=1 to override (operator only).`);if(0===b.length||!b.some(a=>(0,m.F)(a,f)))throw Error(`Path "${f}" is outside the configured filesystem roots.`);return f}function t(){let a={type:"string",description:"File or directory path. Relative paths resolve against the FLUJO data directory; absolute paths are used as-is."};return[{name:"read_file",description:'Read a text file and return its content. Optionally read only a line range with "from"/"to" (1-based, inclusive). For large files (> 100 KB) read WHOLE (no "from"/"to"), a "pattern" is REQUIRED: the server greps the file and returns only matching lines (with a little surrounding context) so you can follow up with targeted "from"/"to" reads. Pass pattern "*" to force-read the entire large file anyway. Returns { path, from, to, totalLines, content, truncated, contentHash, matches? }. Pass the returned contentHash back as "expectedHash" on a follow-up edit_file/write_file to guard against the file changing in between (TOCTOU).',inputSchema:{type:"object",properties:{path:a,from:{type:"number",description:"Optional 1-based first line to return (inclusive)."},to:{type:"number",description:"Optional 1-based last line to return (inclusive)."},pattern:{type:"string",description:'Case-insensitive substring to grep for. Required to read a large file whole without a "from"/"to" range; matching lines (plus context) are returned instead of the full body. Use "*" to read the whole large file anyway.'}},required:["path"]},outputSchema:{type:"object",properties:{path:{type:"string"},from:{type:"number"},to:{type:"number"},totalLines:{type:"number"},truncated:{type:"boolean"},content:{type:"string"},contentHash:{type:"string",description:'SHA-256 (hex) of the raw file content. Pass this back as "expectedHash" to edit_file/write_file to guard against the file changing between read and write (TOCTOU).'},matches:{type:"array",items:{type:"object",properties:{line:{type:"number"},text:{type:"string"}},required:["line","text"]}}},required:["path","from","to","totalLines","truncated","content"]}},{name:"write_file",description:'Create or write a text file (parent directories are created). "mode": "overwrite" (default) replaces the whole file, or a line range when "startLine"/"endLine" (1-based inclusive) are given; "append" adds content at the end; "insert" inserts content before "startLine". Optionally pass "expectedHash" (the contentHash from a prior read_file) to reject the write if the file changed on disk since it was read (TOCTOU guard); ignored for a whole-file overwrite. Returns { path, bytesWritten, mode, ... }.',_meta:{ui:{resourceUri:"ui://devcanvas/diff"}},inputSchema:{type:"object",properties:{path:a,content:{type:"string",description:"The content to write/insert/append."},mode:{type:"string",enum:["overwrite","append","insert"],description:'Write mode (default "overwrite").'},startLine:{type:"number",description:'For "insert": line to insert before. For "overwrite": first line of the range to replace (1-based).'},endLine:{type:"number",description:'For "overwrite": last line (inclusive, 1-based) of the range to replace.'},expectedHash:{type:"string",description:"Optional SHA-256 (contentHash from read_file). For append/insert/range-overwrite modes, the write is rejected if the file no longer hashes to this value (TOCTOU guard)."}},required:["path","content"]},outputSchema:{type:"object",properties:{path:{type:"string"},bytesWritten:{type:"number"},mode:{type:"string"},startLine:{type:"number"},endLine:{type:"number"},linesReplaced:{type:"number"},linesInserted:{type:"number"}},required:["path","bytesWritten","mode"]}},{name:"edit_file",description:'Edit a text file two ways (mutually exclusive): (1) "edits": [{ oldText, newText, startLine?, endLine? }] literal find/replace — each replaces the unique occurrence of oldText. startLine/endLine are an optional disambiguation HINT (if exactly one match starts in that range it wins); a wrong/missing range still works as long as oldText is unique in the file. Include enough surrounding context to make oldText unique. Or (2) "diff": a unified diff string ("@@ -a,b +c,d @@" hunks) applied atomically — hunks are relocated to where their context actually matches, so slightly-off @@ line numbers still apply, and CRLF files are handled. Fails with no partial write only when text is missing/ambiguous or a hunk context is not found. Optionally pass "expectedHash" (the contentHash from a prior read_file) to reject the edit if the file changed on disk since it was read (TOCTOU guard). Returns { path, editsApplied|applied, diff:{added,removed} }.',_meta:{ui:{resourceUri:"ui://devcanvas/diff"}},inputSchema:{type:"object",properties:{path:a,edits:{type:"array",description:"List of literal { oldText, newText } edits applied in order (optionally scoped with startLine/endLine).",items:{type:"object",properties:{oldText:{type:"string",description:"Exact text to find."},newText:{type:"string",description:"Replacement text."},startLine:{type:"number",description:"Optional 1-based first line to scope this edit to."},endLine:{type:"number",description:"Optional 1-based last line (inclusive) to scope this edit to."}},required:["oldText","newText"]}},diff:{type:"string",description:'A unified diff to apply atomically. Mutually exclusive with "edits".'},startLine:{type:"number",description:"Optional default 1-based first line to scope all literal edits to."},endLine:{type:"number",description:"Optional default 1-based last line (inclusive) to scope all literal edits to."},expectedHash:{type:"string",description:"Optional SHA-256 (contentHash from read_file). If provided and the freshly-read file no longer hashes to it, the edit is rejected with no changes written (TOCTOU guard)."}},required:["path"]},outputSchema:{type:"object",properties:{path:{type:"string"},mode:{type:"string"},editsApplied:{type:"number"},applied:{type:"boolean"},diff:{type:"object",properties:{added:{type:"number"},removed:{type:"number"}},required:["added","removed"]}},required:["path","diff"]}},{name:"list_dir",description:'List the entries of a directory. Returns { path, entries: [{ name, type, size }] } where type is "file" | "directory" | "other".',inputSchema:{type:"object",properties:{path:a},required:["path"]},outputSchema:{type:"object",properties:{path:{type:"string"},entries:{type:"array",items:{type:"object",properties:{name:{type:"string"},type:{type:"string"},size:{type:"number"}},required:["name","type","size"]}}},required:["path","entries"]}},{name:"file_browser_ui",description:'Open an interactive file browser in the chat so the USER can pick a file. This returns IMMEDIATELY without a selection — the browser is shown to the user and the file they choose arrives afterwards as a follow-up user message (e.g. "Selected file: <path>"). After calling this tool you MUST stop and wait for that message; do not guess a path or continue until the user has selected.',_meta:{ui:{resourceUri:"ui://filesystem/browser"}},inputSchema:{type:"object",properties:{path:{...a,description:"Optional starting directory for the browser (defaults to the FLUJO data directory)."}},required:[]}},{name:"dir_tree",description:"Return a recursive, depth-limited directory tree as nested JSON. Returns { path, depth, tree }.",inputSchema:{type:"object",properties:{path:a,depth:{type:"number",description:"Maximum recursion depth (default 3, max 10)."}},required:["path"]},outputSchema:{type:"object",properties:{path:{type:"string"},depth:{type:"number"},truncated:{type:"boolean"},tree:{type:"array"}},required:["path","depth","tree"]}},{name:"search",description:'Search a directory tree. Match file/dir NAMES against "namePattern" (substring, case-insensitive) and/or file CONTENT against "content" (substring, case-insensitive). Content search DOES look inside every text file, returning each matching line with its 1-based line number; likely-binary and very large files are skipped for speed. Returns { matches: [{ path, line?, text? }], truncated }.',inputSchema:{type:"object",properties:{path:a,namePattern:{type:"string",description:"Optional case-insensitive substring to match against entry names."},content:{type:"string",description:"Optional case-insensitive substring to match inside text files."}},required:["path"]},outputSchema:{type:"object",properties:{matches:{type:"array",items:{type:"object",properties:{path:{type:"string"},line:{type:"number"},text:{type:"string"}},required:["path"]}},truncated:{type:"boolean"}},required:["matches","truncated"]}},{name:"get_file_info",description:"Stat a path. Returns { path, type, size, isFile, isDirectory, createdAt, modifiedAt }.",inputSchema:{type:"object",properties:{path:a},required:["path"]},outputSchema:{type:"object",properties:{path:{type:"string"},type:{type:"string"},size:{type:"number"},isFile:{type:"boolean"},isDirectory:{type:"boolean"},createdAt:{type:"string"},modifiedAt:{type:"string"}},required:["path","type","size","isFile","isDirectory","createdAt","modifiedAt"]}},{name:"create_directory",description:"Create a directory (recursively). Succeeds if it already exists. Returns { path, created }.",inputSchema:{type:"object",properties:{path:a},required:["path"]},outputSchema:{type:"object",properties:{path:{type:"string"},created:{type:"boolean"}},required:["path","created"]}},{name:"move",description:'Move or rename a file/directory from "source" to "destination". Returns { source, destination }.',inputSchema:{type:"object",properties:{source:{type:"string",description:"Existing path to move."},destination:{type:"string",description:"Target path."}},required:["source","destination"]},outputSchema:{type:"object",properties:{source:{type:"string"},destination:{type:"string"}},required:["source","destination"]}},{name:"delete",description:'Delete a file or directory. Pass "recursive": true to remove a non-empty directory. Returns { path, deleted }.',inputSchema:{type:"object",properties:{path:a,recursive:{type:"boolean",description:"Remove directories and their contents recursively."}},required:["path"]},outputSchema:{type:"object",properties:{path:{type:"string"},deleted:{type:"boolean"}},required:["path","deleted"]}},{name:"get_allowed_directories",description:"Returns the list of directories that this filesystem MCP server is currently allowed to access. The list is the merged result of server-level roots (configured via FLUJO MCP settings), MCP-node-level roots (set in the FlowBuilder), and the FLUJO_FS_ROOTS environment variable ceiling. When no roots are configured at all, returns the FLUJO data directory as the default (so the file browser is usable out of the box).",inputSchema:{type:"object",properties:{},required:[]},outputSchema:{type:"object",properties:{directories:{type:"array",items:{type:"string"},description:"Absolute paths of all allowed directories."}},required:["directories"]}}]}function u(a){return a.replace(/\r\n?/g,"\n").split("\n")}function v(a){return a.includes("\r\n")?"\r\n":"\n"}function w(a){return(0,g.createHash)("sha256").update(a,"utf8").digest("hex")}function x(a){return a.startsWith("\uFEFF")?{bom:"\uFEFF",body:a.slice(1)}:{bom:"",body:a}}let y="File changed after permission approval. Read it again before editing. No changes written.";function z(a){let b=Math.min(a.length,8e3);for(let c=0;c<b;c++)if(0===a[c])return!0;return!1}async function A(a,b,c){let d=b.toLowerCase(),e=[],g=!1,h=(0,f.createReadStream)(a,{encoding:"utf8"}),j=i().createInterface({input:h,crlfDelay:1/0}),k=0;try{for await(let a of j)if(k++,a.toLowerCase().includes(d)&&(e.push({line:k,text:a.slice(0,400)}),e.length>=c)){g=!0;break}}finally{j.close(),h.destroy()}return{matches:e,truncated:g}}async function B(a,b){let c=s(a.path,b),d="number"==typeof a.from||"number"==typeof a.to,e="string"==typeof a.pattern?a.pattern.trim():"",g=0;try{g=(await f.promises.stat(c)).size}catch{}if(g>1e5&&!d&&!e)return r(`File is large (${g} bytes > 100000 threshold). Reading it whole would flood the context. Provide a "pattern" to grep for (matching lines + context are returned, then read targeted ranges with "from"/"to"), or pass pattern "*" to read the whole file anyway.`);if(e&&"*"!==e&&!d){let a=await f.promises.readFile(c);if(z(a))return r(`File appears to be binary; cannot grep for a pattern: ${c}`);let b=a.toString("utf8"),d=u(b),h=d.length,i=e.toLowerCase(),j=[];for(let a=0;a<d.length&&(!d[a].toLowerCase().includes(i)||(j.push({line:a+1,text:d[a].slice(0,400)}),!(j.length>=200)));a++);let k=j.length>=200,l=new Set;for(let a of j)for(let b=a.line-2;b<=a.line+2;b++)b>=1&&b<=h&&l.add(b);let m=[...l].sort((a,b)=>a-b),n=[],p=0;for(let a of m)p&&a>p+1&&n.push("…"),n.push(`${a}: ${d[a-1]}`),p=a;let s=n.join("\n");return s.length>2e5&&(s=s.slice(0,2e5)+"\n…[truncated]"),(0,o.Wk)(c,"read",g),q({path:c,from:1,to:h,totalLines:h,truncated:k,content:j.length?s:`(no lines matched pattern ${JSON.stringify(e)})`,matches:j,contentHash:w(b)})}let h=await f.promises.readFile(c,"utf8"),i=u(h),j=i.length,k="number"==typeof a.from?Math.max(1,Math.floor(a.from)):1,l="number"==typeof a.to?Math.floor(a.to):j;l<k&&([k,l]=[l,k]),l=Math.min(l,j);let m=d?i.slice(k-1,l).join("\n"):h,n=!1;return m.length>2e5&&(m=m.slice(0,2e5)+"\n…[truncated]",n=!0),(0,o.Wk)(c,"read",g),q({path:c,from:d?k:1,to:d?l:j,totalLines:j,truncated:n,content:m,contentHash:w(h)})}async function C(a,b){let c=s(a.path,b),d="string"==typeof a.content?a.content:"",g="append"===a.mode||"insert"===a.mode?a.mode:"overwrite",h="number"==typeof a.startLine||"number"==typeof a.endLine;if(await f.promises.mkdir(e().dirname(c),{recursive:!0}),(0,o.Wk)(c,"write"),"overwrite"===g&&!h)return await f.promises.writeFile(c,d,"utf8"),q({path:c,bytesWritten:Buffer.byteLength(d,"utf8"),mode:"overwrite"});let i="";try{i=await f.promises.readFile(c,"utf8")}catch{i=""}let j="string"==typeof a.expectedHash?a.expectedHash:void 0;if(j&&w(i)!==j)return r(y);let{bom:k,body:l}=x(i);if("append"===g){let a=!l.length||l.endsWith("\n")||l.endsWith("\r\n")?"":v(l),b=k+l+a+d;return await f.promises.writeFile(c,b,"utf8"),q({path:c,bytesWritten:Buffer.byteLength(b,"utf8"),mode:"append"})}let m=v(l),n=l.length?l.split(/\r?\n/):[],p=d.split(/\r?\n/),t=n.length;if("insert"===g){let b="number"==typeof a.startLine?Math.max(1,Math.floor(a.startLine)):t+1,d=Math.min(b-1,t);n.splice(d,0,...p);let e=k+n.join(m);return await f.promises.writeFile(c,e,"utf8"),q({path:c,bytesWritten:Buffer.byteLength(e,"utf8"),mode:"insert",startLine:b,linesInserted:p.length})}let u="number"==typeof a.startLine?Math.max(1,Math.floor(a.startLine)):1,z="number"==typeof a.endLine?Math.floor(a.endLine):u;z<u&&([u,z]=[z,u]);let A=Math.max(0,(z=Math.min(z,t))-u+1);n.splice(u-1,A,...p);let B=k+n.join(m);return await f.promises.writeFile(c,B,"utf8"),q({path:c,bytesWritten:Buffer.byteLength(B,"utf8"),mode:"overwrite",startLine:u,endLine:z,linesReplaced:A})}async function D(a,b){let c=s(a.path,b),d="string"==typeof a.diff&&a.diff.trim().length>0,e=Array.isArray(a.edits)&&a.edits.length>0;if(d&&e)return r('Provide either "diff" or "edits", not both.');let g=await f.promises.readFile(c,"utf8"),h="string"==typeof a.expectedHash?a.expectedHash:void 0;if(h&&w(g)!==h)return r(y);let{bom:i,body:j}=x(g);if(d){let b,d=v(j),e=j.replace(/\r\n?/g,"\n");try{b=function(a,b){let c=a.split("\n"),d=b.split(/\r?\n/),e=/^@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/,f=[],g=null;for(let a=0;a<d.length;a++){let b=d[a];if(void 0===b)break;let c=e.exec(b);if(c){g={oldStart:parseInt(c[1],10),ops:[]},f.push(g);continue}if(b.startsWith("--- ")||b.startsWith("+++ ")){g=null;continue}if(!g)continue;let h=b.length?b[0]:" ",i=b.length?b.slice(1):"";if(" "===h||"-"===h||"+"===h)g.ops.push({tag:h,body:i});else if("\\"===h);else throw Error(`unexpected diff line: ${JSON.stringify(b)}`)}if(0===f.length)throw Error("no unified-diff hunks (@@ ... @@) found");let h=[],i=0,j=0,k=0;for(let a of f){let b=function(a,b,c,d){if(0===b.length)return Math.min(Math.max(c,d),a.length);let e=a.length-b.length,f=c=>{if(c<d||c>e)return!1;for(let d=0;d<b.length;d++)if(a[c+d]!==b[d])return!1;return!0},g=Math.max(d,c);if(f(g))return g;let h=Math.max(g-d,e-g);for(let a=1;a<=h;a++){if(f(g-a))return g-a;if(f(g+a))return g+a}throw Error(`could not locate hunk near line ${c+1}; its context/removed lines do not match the file. First expected line: ${JSON.stringify(b[0])}`)}(c,a.ops.filter(a=>" "===a.tag||"-"===a.tag).map(a=>a.body),Math.max(0,a.oldStart-1),i);if(b<i)throw Error("overlapping or out-of-order hunks");for(;i<b;)h.push(c[i]),i++;for(let b of a.ops)" "===b.tag?(h.push(c[i]),i++):"-"===b.tag?(i++,k++):(h.push(b.body),j++)}for(;i<c.length;)h.push(c[i]),i++;return{result:h.join("\n"),added:j,removed:k}}(e,a.diff)}catch(a){return r(`Diff apply failed: ${a instanceof Error?a.message:String(a)}. No changes written.`)}let g=i+("\r\n"===d?b.result.replace(/\n/g,"\r\n"):b.result);return await f.promises.writeFile(c,g,"utf8"),(0,o.Wk)(c,"write"),q({path:c,applied:!0,mode:"diff",diff:{added:b.added,removed:b.removed}})}let k=Array.isArray(a.edits)?a.edits:[];if(0===k.length)return r('Provide a non-empty "edits" array of { oldText, newText } or a "diff" string.');let l="number"==typeof a.startLine?a.startLine:void 0,m="number"==typeof a.endLine?a.endLine:void 0,n=v(j),p=j.replace(/\r\n?/g,"\n"),t=0;for(let a of k){let b="string"==typeof a.oldText?a.oldText.replace(/\r\n?/g,"\n"):"",d="string"==typeof a.newText?a.newText.replace(/\r\n?/g,"\n"):"";if(!b)return r(`Edit #${t+1} has an empty "oldText".`);let e="number"==typeof a.startLine?a.startLine:l,f="number"==typeof a.endLine?a.endLine:m,g=void 0!==e||void 0!==f,h=[];for(let a=p.indexOf(b);-1!==a;a=p.indexOf(b,a+1))h.push(a);if(0===h.length)return r(`Edit #${t+1}: "oldText" not found in ${c}. No changes written.`);let i=-1;if(g){let{lo:a,hi:b}=function(a,b,c){if(void 0===b&&void 0===c)return{lo:0,hi:a.length};let d=a.split("\n"),e=Math.max(1,Math.floor(b??1)),f=Math.min(d.length,Math.floor(c??d.length)),g=0;for(let a=0;a<e-1&&a<d.length;a++)g+=d[a].length+1;let h=g;for(let a=e-1;a<f&&a<d.length;a++)h+=d[a].length+ +(a<d.length-1);return{lo:g,hi:Math.max(g,h)}}(p,e,f),c=h.filter(c=>c>=a&&c<b);1===c.length&&(i=c[0])}if(-1===i)if(1!==h.length)return r(`Edit #${t+1}: "oldText" is ambiguous (appears ${h.length} times); add more surrounding context or a tighter startLine/endLine so exactly one occurrence is in range. No changes written.`);else i=h[0];p=p.slice(0,i)+d+p.slice(i+b.length),t+=1}let z=function(a,b){let c=u(a),d=u(b),e=new Map;for(let a of d)e.set(a,(e.get(a)??0)+1);let f=new Map;for(let a of c)f.set(a,(f.get(a)??0)+1);let g=0;for(let[a,b]of f)g+=Math.max(0,b-(e.get(a)??0));let h=0;for(let[a,b]of e)h+=Math.max(0,b-(f.get(a)??0));return{added:h,removed:g}}(j,p),A=i+("\r\n"===n?p.replace(/\n/g,"\r\n"):p);return await f.promises.writeFile(c,A,"utf8"),(0,o.Wk)(c,"write"),q({path:c,mode:"edits",editsApplied:t,diff:z})}async function E(a){try{let b=await f.promises.lstat(a);if(b.isFile())return"file";if(b.isDirectory())return"directory";return"other"}catch{return"other"}}async function F(a,b){let c=s(a.path,b),d=await f.promises.readdir(c),g=await Promise.all(d.map(async a=>{let b=e().join(c,a),d=await E(b),g=0;try{g=(await f.promises.stat(b)).size}catch{}return{name:a,type:d,size:g}}));return g.sort((a,b)=>a.type===b.type?a.name.localeCompare(b.name):"directory"===a.type?-1:1),q({path:c,entries:g})}async function G(a,b){let c=s(a.path,b),d=Math.min("number"==typeof a.depth?Math.max(1,Math.floor(a.depth)):3,10),g=0,h=!1;async function i(a,b){let c;if(b>d||h)return[];try{c=await f.promises.readdir(a)}catch{return[]}c.sort((a,b)=>a.localeCompare(b));let j=[];for(let f of c){if(++g>5e3){h=!0;break}let c=e().join(a,f),k=await E(c),l={name:f,type:k};"directory"===k&&b<d&&(l.children=await i(c,b+1)),j.push(l)}return j}let j=await i(c,1);return q({path:c,depth:d,truncated:h,tree:j})}async function H(a,b,c){let d;try{d=await f.promises.stat(a)}catch{return[]}if(!d.isFile()||d.size>5e6)return[];try{let b=await f.promises.open(a,"r");try{let a=Buffer.alloc(Math.min(8e3,d.size));if(a.length&&await b.read(a,0,a.length,0),z(a))return[]}finally{await b.close()}}catch{return[]}let{matches:e}=await A(a,b,Math.max(1,c));return e.map(b=>({path:a,line:b.line,text:b.text}))}async function I(a,b){let c=s(a.path,b),d="string"==typeof a.namePattern?a.namePattern.toLowerCase():"",g="string"==typeof a.content?a.content:"";if(!d&&!g)return r('Provide "namePattern" and/or "content" to search for.');let h=[],i=!1,j=[];async function k(a){let b;if(!i){try{b=await f.promises.readdir(a)}catch{return}for(let c of b){if(i)return;let b=e().join(a,c),f=await E(b);if(d&&c.toLowerCase().includes(d)&&(h.push({path:b}),h.length>=1e3)){i=!0;return}"directory"===f?await k(b):"file"===f&&g&&j.push(b)}}}if(await k(c),g&&!i)for(let a=0;a<j.length&&!i;a+=16){let b=j.slice(a,a+16);for(let a of(await Promise.all(b.map(a=>H(a,g,1e3))))){for(let b of a)if(h.push(b),h.length>=1e3){i=!0;break}if(i)break}}return q({matches:h,truncated:i})}async function J(a,b){let c=s(a.path,b),d=await f.promises.stat(c);return q({path:c,type:d.isFile()?"file":d.isDirectory()?"directory":"other",size:d.size,isFile:d.isFile(),isDirectory:d.isDirectory(),createdAt:d.birthtime.toISOString(),modifiedAt:d.mtime.toISOString()})}async function K(a,b){let c=s(a.path,b);return await f.promises.mkdir(c,{recursive:!0}),q({path:c,created:!0})}async function L(a,b){let c=s(a.source,b),d=s(a.destination,b);return await f.promises.mkdir(e().dirname(d),{recursive:!0}),await f.promises.rename(c,d),q({source:c,destination:d})}async function M(a,b){let c=s(a.path,b),d=!0===a.recursive;return await f.promises.rm(c,{recursive:d,force:!1}),q({path:c,deleted:!0})}async function N(a){return q({directories:a})}async function O(a,b,c){try{if("file_browser_ui"===a)return function(a,b=!1){return{content:[{type:"text",text:a}],...b?{isError:!0}:{}}}("File browser shown to the user. Waiting for them to select a file — their choice will arrive as a follow-up message. Do not proceed until then.");let d=await (0,m.loadEffectiveRoots)(l.K3,"FLUJO_FS_ROOTS",c);switch(a){case"read_file":return await B(b,d);case"write_file":return await C(b,d);case"edit_file":return await D(b,d);case"list_dir":return await F(b,d);case"dir_tree":return await G(b,d);case"search":return await I(b,d);case"get_file_info":return await J(b,d);case"create_directory":return await K(b,d);case"move":return await L(b,d);case"delete":return await M(b,d);case"get_allowed_directories":return await N(d);default:return r(`Unknown tool on the built-in filesystem server: ${a}`)}}catch(c){let b=c instanceof Error?c.message:String(c);return p.warn("filesystemCallTool failed",{toolName:a,err:c}),{isError:!0,content:[{type:"text",text:JSON.stringify({error:b})}],structuredContent:{error:b}}}}},65858:(a,b,c)=>{c.d(b,{bz:()=>m,wp:()=>j});var d=c(33873),e=c.n(d),f=c(21820),g=c.n(f),h=c(85510),i=c(48092);let j="FLUJO_ALLOW_PROTECTED_PATHS",k=null;function l(a,...b){return e().resolve(a,...b)}function m(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,i.F)(a,b)))return{denied:!1};for(let a of function(){var a;let b="string"==typeof(a=process.env[j])&&/^(1|true|yes|on)$/i.test(a.trim()),c=(0,h.getHomeDir)(),d=`${b?"off":"on"}::${c}`;if(k&&k.key===d)return k.paths;let f=b?[]:function(a){let b=[];if("win32"===process.platform)for(let c of["AppData","Downloads","Desktop","Documents","Pictures","Music","Videos","OneDrive"])b.push(l(a,c));else if("darwin"===process.platform){for(let c of["Downloads","Desktop","Documents","Pictures","Music","Movies"])b.push(l(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(l(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(l(a,c));return Array.from(new Set(b))}(c);return k={key:d,paths:f},f}())if((0,i.F)(a,b))return{denied:!0,matchedRoot:a};return{denied:!1}}}};