flujo-ai 3.44.0 → 3.45.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 (386) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +7 -7
  3. package/.next/build-manifest.json +3 -3
  4. package/.next/react-loadable-manifest.json +1 -1
  5. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  6. package/.next/server/app/_global-error.html +1 -1
  7. package/.next/server/app/_global-error.rsc +1 -1
  8. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  9. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  14. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  15. package/.next/server/app/_not-found.html +1 -1
  16. package/.next/server/app/_not-found.rsc +2 -2
  17. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  18. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  19. package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  20. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  21. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  22. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  23. package/.next/server/app/api/approvals/[id]/route.js +1 -1
  24. package/.next/server/app/api/approvals/[id]/route.js.nft.json +1 -1
  25. package/.next/server/app/api/approvals/route.js +1 -1
  26. package/.next/server/app/api/approvals/route.js.nft.json +1 -1
  27. package/.next/server/app/api/backup/route.js.nft.json +1 -1
  28. package/.next/server/app/api/bugs/enhance/route.js +1 -1
  29. package/.next/server/app/api/bugs/enhance/route.js.nft.json +1 -1
  30. package/.next/server/app/api/encryption/secure/route.js +1 -1
  31. package/.next/server/app/api/encryption/secure/route.js.nft.json +1 -1
  32. package/.next/server/app/api/flow/[id]/convert-process-to-subflow/route.js.nft.json +1 -1
  33. package/.next/server/app/api/flow/[id]/route.js.nft.json +1 -1
  34. package/.next/server/app/api/flow/[id]/versions/[versionId]/route.js.nft.json +1 -1
  35. package/.next/server/app/api/flow/[id]/versions/route.js.nft.json +1 -1
  36. package/.next/server/app/api/flow/assist/route.js +1 -1
  37. package/.next/server/app/api/flow/assist/route.js.nft.json +1 -1
  38. package/.next/server/app/api/flow/compile/route.js +1 -1
  39. package/.next/server/app/api/flow/compile/route.js.nft.json +1 -1
  40. package/.next/server/app/api/flow/generate/route.js +1 -1
  41. package/.next/server/app/api/flow/generate/route.js.nft.json +1 -1
  42. package/.next/server/app/api/flow/generate/visual/route.js +2 -2
  43. package/.next/server/app/api/flow/generate/visual/route.js.nft.json +1 -1
  44. package/.next/server/app/api/flow/generator/route.js +1 -1
  45. package/.next/server/app/api/flow/generator/route.js.nft.json +1 -1
  46. package/.next/server/app/api/flow/improve/route.js +1 -1
  47. package/.next/server/app/api/flow/improve/route.js.nft.json +1 -1
  48. package/.next/server/app/api/flow/prompt-renderer/route.js +1 -1
  49. package/.next/server/app/api/flow/prompt-renderer/route.js.nft.json +1 -1
  50. package/.next/server/app/api/flow/quick-chat/route.js +1 -1
  51. package/.next/server/app/api/flow/quick-chat/route.js.nft.json +1 -1
  52. package/.next/server/app/api/flow/repair/route.js +1 -1
  53. package/.next/server/app/api/flow/repair/route.js.nft.json +1 -1
  54. package/.next/server/app/api/flow/route.js.nft.json +1 -1
  55. package/.next/server/app/api/init/route.js +1 -1
  56. package/.next/server/app/api/init/route.js.nft.json +1 -1
  57. package/.next/server/app/api/mcp/app-consent/route.js +1 -1
  58. package/.next/server/app/api/mcp/app-consent/route.js.nft.json +1 -1
  59. package/.next/server/app/api/mcp/app-sandbox/route.js +2 -2
  60. package/.next/server/app/api/mcp/app-sandbox/route.js.nft.json +1 -1
  61. package/.next/server/app/api/mcp/assistant/route.js +1 -1
  62. package/.next/server/app/api/mcp/assistant/route.js.nft.json +1 -1
  63. package/.next/server/app/api/mcp/cancel/route.js +1 -1
  64. package/.next/server/app/api/mcp/cancel/route.js.nft.json +1 -1
  65. package/.next/server/app/api/mcp/flujo/authoring/route.js +1 -1
  66. package/.next/server/app/api/mcp/flujo/authoring/route.js.nft.json +1 -1
  67. package/.next/server/app/api/mcp/flujo/automation/route.js +1 -1
  68. package/.next/server/app/api/mcp/flujo/automation/route.js.nft.json +1 -1
  69. package/.next/server/app/api/mcp/flujo/flows/route.js +1 -1
  70. package/.next/server/app/api/mcp/flujo/flows/route.js.nft.json +1 -1
  71. package/.next/server/app/api/mcp/flujo/resources/read/route.js +1 -1
  72. package/.next/server/app/api/mcp/flujo/resources/read/route.js.nft.json +1 -1
  73. package/.next/server/app/api/mcp/flujo/resources/route.js +1 -1
  74. package/.next/server/app/api/mcp/flujo/resources/route.js.nft.json +1 -1
  75. package/.next/server/app/api/mcp/flujo/servers/route.js +1 -1
  76. package/.next/server/app/api/mcp/flujo/servers/route.js.nft.json +1 -1
  77. package/.next/server/app/api/mcp/flujo/state/route.js +1 -1
  78. package/.next/server/app/api/mcp/flujo/state/route.js.nft.json +1 -1
  79. package/.next/server/app/api/mcp/flujo/tools/route.js +1 -1
  80. package/.next/server/app/api/mcp/flujo/tools/route.js.nft.json +1 -1
  81. package/.next/server/app/api/mcp/oauth-capability/route.js +1 -1
  82. package/.next/server/app/api/mcp/oauth-capability/route.js.nft.json +1 -1
  83. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js +1 -1
  84. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js.nft.json +1 -1
  85. package/.next/server/app/api/mcp/servers/[name]/prompts/route.js +1 -1
  86. package/.next/server/app/api/mcp/servers/[name]/prompts/route.js.nft.json +1 -1
  87. package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js +1 -1
  88. package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js.nft.json +1 -1
  89. package/.next/server/app/api/mcp/servers/[name]/resources/route.js +1 -1
  90. package/.next/server/app/api/mcp/servers/[name]/resources/route.js.nft.json +1 -1
  91. package/.next/server/app/api/mcp/servers/[name]/route.js +1 -1
  92. package/.next/server/app/api/mcp/servers/[name]/route.js.nft.json +1 -1
  93. package/.next/server/app/api/mcp/servers/[name]/status/route.js +1 -1
  94. package/.next/server/app/api/mcp/servers/[name]/status/route.js.nft.json +1 -1
  95. package/.next/server/app/api/mcp/servers/[name]/stdio-oauth/confirm/route.js +1 -1
  96. package/.next/server/app/api/mcp/servers/[name]/stdio-oauth/confirm/route.js.nft.json +1 -1
  97. package/.next/server/app/api/mcp/servers/[name]/stdio-oauth/start/route.js +1 -1
  98. package/.next/server/app/api/mcp/servers/[name]/stdio-oauth/start/route.js.nft.json +1 -1
  99. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js +1 -1
  100. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js.nft.json +1 -1
  101. package/.next/server/app/api/mcp/servers/[name]/tools/route.js +1 -1
  102. package/.next/server/app/api/mcp/servers/[name]/tools/route.js.nft.json +1 -1
  103. package/.next/server/app/api/mcp/servers/route.js +1 -1
  104. package/.next/server/app/api/mcp/servers/route.js.nft.json +1 -1
  105. package/.next/server/app/api/mcp/test-connection/route.js +1 -1
  106. package/.next/server/app/api/mcp/test-connection/route.js.nft.json +1 -1
  107. package/.next/server/app/api/mcp/test-connection/stream/route.js +1 -1
  108. package/.next/server/app/api/mcp/test-connection/stream/route.js.nft.json +1 -1
  109. package/.next/server/app/api/mcp-registry/route.js +1 -1
  110. package/.next/server/app/api/mcp-registry/route.js.nft.json +1 -1
  111. package/.next/server/app/api/model/[id]/route.js +1 -1
  112. package/.next/server/app/api/model/[id]/route.js.nft.json +1 -1
  113. package/.next/server/app/api/model/provider/route.js +1 -1
  114. package/.next/server/app/api/model/provider/route.js.nft.json +1 -1
  115. package/.next/server/app/api/model/route.js +1 -1
  116. package/.next/server/app/api/model/route.js.nft.json +1 -1
  117. package/.next/server/app/api/model/test/route.js +1 -1
  118. package/.next/server/app/api/model/test/route.js.nft.json +1 -1
  119. package/.next/server/app/api/oauth/reset/route.js +1 -1
  120. package/.next/server/app/api/oauth/reset/route.js.nft.json +1 -1
  121. package/.next/server/app/api/packages/build/route.js.nft.json +1 -1
  122. package/.next/server/app/api/packages/derive-secrets/route.js.nft.json +1 -1
  123. package/.next/server/app/api/packages/install/route.js +1 -1
  124. package/.next/server/app/api/packages/install/route.js.nft.json +1 -1
  125. package/.next/server/app/api/packages/install/status/route.js +1 -1
  126. package/.next/server/app/api/packages/install/status/route.js.nft.json +1 -1
  127. package/.next/server/app/api/packages/installed/route.js +1 -1
  128. package/.next/server/app/api/packages/installed/route.js.nft.json +1 -1
  129. package/.next/server/app/api/packages/resolve/route.js.nft.json +1 -1
  130. package/.next/server/app/api/packages/scan-targets/route.js.nft.json +1 -1
  131. package/.next/server/app/api/packages/uninstall/route.js +1 -1
  132. package/.next/server/app/api/packages/uninstall/route.js.nft.json +1 -1
  133. package/.next/server/app/api/planned-executions/[id]/route.js.nft.json +1 -1
  134. package/.next/server/app/api/planned-executions/[id]/run/route.js.nft.json +1 -1
  135. package/.next/server/app/api/planned-executions/[id]/runs/route.js.nft.json +1 -1
  136. package/.next/server/app/api/planned-executions/reconcile/route.js +1 -1
  137. package/.next/server/app/api/planned-executions/reconcile/route.js.nft.json +1 -1
  138. package/.next/server/app/api/planned-executions/route.js +1 -1
  139. package/.next/server/app/api/planned-executions/route.js.nft.json +1 -1
  140. package/.next/server/app/api/restore/route.js.nft.json +1 -1
  141. package/.next/server/app/api/runs/active/route.js +1 -1
  142. package/.next/server/app/api/runs/active/route.js.nft.json +1 -1
  143. package/.next/server/app/api/telemetry/daily-active/route.js +1 -1
  144. package/.next/server/app/api/waves/route.js +1 -1
  145. package/.next/server/app/api/waves/route.js.nft.json +1 -1
  146. package/.next/server/app/api/webhooks/[id]/route.js +1 -1
  147. package/.next/server/app/api/webhooks/[id]/route.js.nft.json +1 -1
  148. package/.next/server/app/automation/triggers/page_client-reference-manifest.js +1 -1
  149. package/.next/server/app/automation/triggers.html +1 -1
  150. package/.next/server/app/automation/triggers.rsc +3 -3
  151. package/.next/server/app/automation/triggers.segments/_full.segment.rsc +3 -3
  152. package/.next/server/app/automation/triggers.segments/_head.segment.rsc +1 -1
  153. package/.next/server/app/automation/triggers.segments/_index.segment.rsc +2 -2
  154. package/.next/server/app/automation/triggers.segments/_tree.segment.rsc +1 -1
  155. package/.next/server/app/automation/triggers.segments/automation/triggers/__PAGE__.segment.rsc +2 -2
  156. package/.next/server/app/automation/triggers.segments/automation/triggers.segment.rsc +1 -1
  157. package/.next/server/app/automation/triggers.segments/automation.segment.rsc +1 -1
  158. package/.next/server/app/automation/waves/page_client-reference-manifest.js +1 -1
  159. package/.next/server/app/automation/waves.html +1 -1
  160. package/.next/server/app/automation/waves.rsc +3 -3
  161. package/.next/server/app/automation/waves.segments/_full.segment.rsc +3 -3
  162. package/.next/server/app/automation/waves.segments/_head.segment.rsc +1 -1
  163. package/.next/server/app/automation/waves.segments/_index.segment.rsc +2 -2
  164. package/.next/server/app/automation/waves.segments/_tree.segment.rsc +1 -1
  165. package/.next/server/app/automation/waves.segments/automation/waves/__PAGE__.segment.rsc +2 -2
  166. package/.next/server/app/automation/waves.segments/automation/waves.segment.rsc +1 -1
  167. package/.next/server/app/automation/waves.segments/automation.segment.rsc +1 -1
  168. package/.next/server/app/chain-chat/page_client-reference-manifest.js +1 -1
  169. package/.next/server/app/chain-chat.html +1 -1
  170. package/.next/server/app/chain-chat.rsc +3 -3
  171. package/.next/server/app/chain-chat.segments/_full.segment.rsc +3 -3
  172. package/.next/server/app/chain-chat.segments/_head.segment.rsc +1 -1
  173. package/.next/server/app/chain-chat.segments/_index.segment.rsc +2 -2
  174. package/.next/server/app/chain-chat.segments/_tree.segment.rsc +1 -1
  175. package/.next/server/app/chain-chat.segments/chain-chat/__PAGE__.segment.rsc +2 -2
  176. package/.next/server/app/chain-chat.segments/chain-chat.segment.rsc +1 -1
  177. package/.next/server/app/chat/page.js +4 -4
  178. package/.next/server/app/chat/page.js.nft.json +1 -1
  179. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  180. package/.next/server/app/chat.html +1 -1
  181. package/.next/server/app/chat.rsc +3 -3
  182. package/.next/server/app/chat.segments/_full.segment.rsc +3 -3
  183. package/.next/server/app/chat.segments/_head.segment.rsc +1 -1
  184. package/.next/server/app/chat.segments/_index.segment.rsc +2 -2
  185. package/.next/server/app/chat.segments/_tree.segment.rsc +1 -1
  186. package/.next/server/app/chat.segments/chat/__PAGE__.segment.rsc +2 -2
  187. package/.next/server/app/chat.segments/chat.segment.rsc +1 -1
  188. package/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  189. package/.next/server/app/docs.html +1 -1
  190. package/.next/server/app/docs.rsc +3 -3
  191. package/.next/server/app/docs.segments/_full.segment.rsc +3 -3
  192. package/.next/server/app/docs.segments/_head.segment.rsc +1 -1
  193. package/.next/server/app/docs.segments/_index.segment.rsc +2 -2
  194. package/.next/server/app/docs.segments/_tree.segment.rsc +1 -1
  195. package/.next/server/app/docs.segments/docs/__PAGE__.segment.rsc +2 -2
  196. package/.next/server/app/docs.segments/docs.segment.rsc +1 -1
  197. package/.next/server/app/executions/page_client-reference-manifest.js +1 -1
  198. package/.next/server/app/executions.html +1 -1
  199. package/.next/server/app/executions.rsc +3 -3
  200. package/.next/server/app/executions.segments/_full.segment.rsc +3 -3
  201. package/.next/server/app/executions.segments/_head.segment.rsc +1 -1
  202. package/.next/server/app/executions.segments/_index.segment.rsc +2 -2
  203. package/.next/server/app/executions.segments/_tree.segment.rsc +1 -1
  204. package/.next/server/app/executions.segments/executions/__PAGE__.segment.rsc +2 -2
  205. package/.next/server/app/executions.segments/executions.segment.rsc +1 -1
  206. package/.next/server/app/flows/page.js +5 -5
  207. package/.next/server/app/flows/page.js.nft.json +1 -1
  208. package/.next/server/app/flows/page_client-reference-manifest.js +1 -1
  209. package/.next/server/app/flows.html +1 -1
  210. package/.next/server/app/flows.rsc +3 -3
  211. package/.next/server/app/flows.segments/_full.segment.rsc +3 -3
  212. package/.next/server/app/flows.segments/_head.segment.rsc +1 -1
  213. package/.next/server/app/flows.segments/_index.segment.rsc +2 -2
  214. package/.next/server/app/flows.segments/_tree.segment.rsc +1 -1
  215. package/.next/server/app/flows.segments/flows/__PAGE__.segment.rsc +2 -2
  216. package/.next/server/app/flows.segments/flows.segment.rsc +1 -1
  217. package/.next/server/app/index.html +1 -1
  218. package/.next/server/app/index.rsc +3 -3
  219. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  220. package/.next/server/app/index.segments/_full.segment.rsc +3 -3
  221. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  222. package/.next/server/app/index.segments/_index.segment.rsc +2 -2
  223. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  224. package/.next/server/app/mcp/page.js +1 -1
  225. package/.next/server/app/mcp/page_client-reference-manifest.js +1 -1
  226. package/.next/server/app/mcp-flows/route.js +1 -1
  227. package/.next/server/app/mcp-flows/route.js.nft.json +1 -1
  228. package/.next/server/app/mcp-proxy/[server]/route.js +1 -1
  229. package/.next/server/app/mcp-proxy/[server]/route.js.nft.json +1 -1
  230. package/.next/server/app/mcp.html +1 -1
  231. package/.next/server/app/mcp.rsc +3 -3
  232. package/.next/server/app/mcp.segments/_full.segment.rsc +3 -3
  233. package/.next/server/app/mcp.segments/_head.segment.rsc +1 -1
  234. package/.next/server/app/mcp.segments/_index.segment.rsc +2 -2
  235. package/.next/server/app/mcp.segments/_tree.segment.rsc +1 -1
  236. package/.next/server/app/mcp.segments/mcp/__PAGE__.segment.rsc +2 -2
  237. package/.next/server/app/mcp.segments/mcp.segment.rsc +1 -1
  238. package/.next/server/app/meetings/page_client-reference-manifest.js +1 -1
  239. package/.next/server/app/meetings.html +1 -1
  240. package/.next/server/app/meetings.rsc +3 -3
  241. package/.next/server/app/meetings.segments/_full.segment.rsc +3 -3
  242. package/.next/server/app/meetings.segments/_head.segment.rsc +1 -1
  243. package/.next/server/app/meetings.segments/_index.segment.rsc +2 -2
  244. package/.next/server/app/meetings.segments/_tree.segment.rsc +1 -1
  245. package/.next/server/app/meetings.segments/meetings/__PAGE__.segment.rsc +2 -2
  246. package/.next/server/app/meetings.segments/meetings.segment.rsc +1 -1
  247. package/.next/server/app/models/page.js +3 -3
  248. package/.next/server/app/models/page_client-reference-manifest.js +1 -1
  249. package/.next/server/app/packages/page_client-reference-manifest.js +1 -1
  250. package/.next/server/app/packages.html +1 -1
  251. package/.next/server/app/packages.rsc +3 -3
  252. package/.next/server/app/packages.segments/_full.segment.rsc +3 -3
  253. package/.next/server/app/packages.segments/_head.segment.rsc +1 -1
  254. package/.next/server/app/packages.segments/_index.segment.rsc +2 -2
  255. package/.next/server/app/packages.segments/_tree.segment.rsc +1 -1
  256. package/.next/server/app/packages.segments/packages/__PAGE__.segment.rsc +2 -2
  257. package/.next/server/app/packages.segments/packages.segment.rsc +1 -1
  258. package/.next/server/app/page_client-reference-manifest.js +1 -1
  259. package/.next/server/app/settings/page.js +2 -2
  260. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  261. package/.next/server/app/settings.html +1 -1
  262. package/.next/server/app/settings.rsc +3 -3
  263. package/.next/server/app/settings.segments/_full.segment.rsc +3 -3
  264. package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  265. package/.next/server/app/settings.segments/_index.segment.rsc +2 -2
  266. package/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
  267. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
  268. package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
  269. package/.next/server/app/statistics/page_client-reference-manifest.js +1 -1
  270. package/.next/server/app/statistics.html +1 -1
  271. package/.next/server/app/statistics.rsc +3 -3
  272. package/.next/server/app/statistics.segments/_full.segment.rsc +3 -3
  273. package/.next/server/app/statistics.segments/_head.segment.rsc +1 -1
  274. package/.next/server/app/statistics.segments/_index.segment.rsc +2 -2
  275. package/.next/server/app/statistics.segments/_tree.segment.rsc +1 -1
  276. package/.next/server/app/statistics.segments/statistics/__PAGE__.segment.rsc +2 -2
  277. package/.next/server/app/statistics.segments/statistics.segment.rsc +1 -1
  278. package/.next/server/app/v1/chat/completions/route.js +1 -1
  279. package/.next/server/app/v1/chat/completions/route.js.nft.json +1 -1
  280. package/.next/server/app/v1/chat/conversation-chains/route.js +1 -1
  281. package/.next/server/app/v1/chat/conversation-chains/route.js.nft.json +1 -1
  282. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js +1 -1
  283. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js.nft.json +1 -1
  284. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js +1 -1
  285. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js.nft.json +1 -1
  286. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/attach/route.js +1 -1
  287. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/attach/route.js.nft.json +1 -1
  288. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js +1 -1
  289. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js.nft.json +1 -1
  290. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/state/route.js +1 -1
  291. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/state/route.js.nft.json +1 -1
  292. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js +1 -1
  293. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js.nft.json +1 -1
  294. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js +1 -1
  295. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js.nft.json +1 -1
  296. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js +1 -1
  297. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js.nft.json +1 -1
  298. package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route.js +1 -1
  299. package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route.js.nft.json +1 -1
  300. package/.next/server/app/v1/chat/conversations/[conversationId]/recovery/route.js +1 -1
  301. package/.next/server/app/v1/chat/conversations/[conversationId]/recovery/route.js.nft.json +1 -1
  302. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js +1 -1
  303. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js.nft.json +1 -1
  304. package/.next/server/app/v1/chat/conversations/[conversationId]/revert/route.js +1 -1
  305. package/.next/server/app/v1/chat/conversations/[conversationId]/revert/route.js.nft.json +1 -1
  306. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js +1 -1
  307. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js.nft.json +1 -1
  308. package/.next/server/app/v1/chat/conversations/route.js +1 -1
  309. package/.next/server/app/v1/chat/conversations/route.js.nft.json +1 -1
  310. package/.next/server/app/v1/chat/events/route.js +1 -1
  311. package/.next/server/app/v1/chat/events/route.js.nft.json +1 -1
  312. package/.next/server/app/v1/meetings/[meetingId]/cancel/route.js +1 -1
  313. package/.next/server/app/v1/meetings/[meetingId]/cancel/route.js.nft.json +1 -1
  314. package/.next/server/app/v1/meetings/[meetingId]/route.js +1 -1
  315. package/.next/server/app/v1/meetings/[meetingId]/route.js.nft.json +1 -1
  316. package/.next/server/app/v1/meetings/[meetingId]/start/route.js +1 -1
  317. package/.next/server/app/v1/meetings/[meetingId]/start/route.js.nft.json +1 -1
  318. package/.next/server/app/v1/meetings/route.js +1 -1
  319. package/.next/server/app/v1/meetings/route.js.nft.json +1 -1
  320. package/.next/server/app/v1/models/route.js +1 -1
  321. package/.next/server/app/v1/models/route.js.nft.json +1 -1
  322. package/.next/server/app/waves/page_client-reference-manifest.js +1 -1
  323. package/.next/server/app/waves.html +1 -1
  324. package/.next/server/app/waves.rsc +3 -3
  325. package/.next/server/app/waves.segments/_full.segment.rsc +3 -3
  326. package/.next/server/app/waves.segments/_head.segment.rsc +1 -1
  327. package/.next/server/app/waves.segments/_index.segment.rsc +2 -2
  328. package/.next/server/app/waves.segments/_tree.segment.rsc +1 -1
  329. package/.next/server/app/waves.segments/waves/__PAGE__.segment.rsc +2 -2
  330. package/.next/server/app/waves.segments/waves.segment.rsc +1 -1
  331. package/.next/server/app-paths-manifest.json +7 -7
  332. package/.next/server/chunks/1114.js +1 -1
  333. package/.next/server/chunks/{4271.js → 2126.js} +13 -13
  334. package/.next/server/chunks/2425.js +1 -1
  335. package/.next/server/chunks/244.js +1 -1
  336. package/.next/server/chunks/2728.js +1 -1
  337. package/.next/server/chunks/2970.js +1 -1
  338. package/.next/server/chunks/3133.js +2 -2
  339. package/.next/server/chunks/4558.js +1 -1
  340. package/.next/server/chunks/4779.js +1 -0
  341. package/.next/server/chunks/531.js +1 -1
  342. package/.next/server/chunks/5354.js +1 -1
  343. package/.next/server/chunks/5831.js +1 -1
  344. package/.next/server/chunks/609.js +1 -1
  345. package/.next/server/chunks/75.js +1 -1
  346. package/.next/server/chunks/7513.js +1 -1
  347. package/.next/server/chunks/7754.js +60 -60
  348. package/.next/server/chunks/811.js +1 -1
  349. package/.next/server/chunks/8542.js +1 -1
  350. package/.next/server/chunks/87.js +1 -1
  351. package/.next/server/chunks/8767.js +1 -1
  352. package/.next/server/middleware-build-manifest.js +1 -1
  353. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  354. package/.next/server/pages/404.html +1 -1
  355. package/.next/server/pages/500.html +1 -1
  356. package/.next/server/server-reference-manifest.js +1 -1
  357. package/.next/server/server-reference-manifest.json +1 -1
  358. package/.next/static/chunks/{8851-1ea4bbf9945c7b34.js → 2375-af6ebf80d9cb9975.js} +2 -2
  359. package/.next/static/chunks/{4742-e151939b0ae7ba74.js → 3841-0e4a10c621cac0e6.js} +1 -1
  360. package/.next/static/chunks/{5147-d239d0147237bb58.js → 5147-ec07dd70c20ec0b5.js} +1 -1
  361. package/.next/static/chunks/5212-898f308c44a32c22.js +2 -0
  362. package/.next/static/chunks/7401-cffc7c5fa1f5f06e.js +10 -0
  363. package/.next/static/chunks/app/chat/page-5b6d507b576cea9c.js +7 -0
  364. package/.next/static/chunks/app/flows/page-9b16d049d43ac817.js +9 -0
  365. package/.next/static/chunks/app/mcp/{page-70535f4bce57edbe.js → page-e4c284466c17fe32.js} +1 -1
  366. package/.next/static/chunks/app/models/page-2891efa80c126790.js +11 -0
  367. package/.next/static/chunks/{webpack-7efb2620f630c7d5.js → webpack-d9f1e56ee69d988f.js} +1 -1
  368. package/.next/trace +104 -104
  369. package/.next/trace-build +1 -1
  370. package/README.md +6 -3
  371. package/mcp-servers/bash/package.json +1 -1
  372. package/mcp-servers/browser/dist/resources.js +29 -3
  373. package/mcp-servers/browser/dist/resources.js.map +1 -1
  374. package/mcp-servers/browser/package.json +1 -1
  375. package/mcp-servers/filesystem/dist/resources.js +1 -1
  376. package/mcp-servers/filesystem/package.json +1 -1
  377. package/mcp-servers/flujo/package.json +1 -1
  378. package/package.json +5 -5
  379. package/.next/server/chunks/387.js +0 -1
  380. package/.next/static/chunks/5212-fa397222d5251b43.js +0 -2
  381. package/.next/static/chunks/7401-b0f0d4a7b2597302.js +0 -10
  382. package/.next/static/chunks/app/chat/page-3db891cc7ba29084.js +0 -7
  383. package/.next/static/chunks/app/flows/page-6b6748bc74604103.js +0 -9
  384. package/.next/static/chunks/app/models/page-e3430501cd05ff1f.js +0 -11
  385. /package/.next/static/{yjYCceqlIl4V9blcEb5AK → 4x_Vc1-WtJtqgqFZnCq3D}/_buildManifest.js +0 -0
  386. /package/.next/static/{yjYCceqlIl4V9blcEb5AK → 4x_Vc1-WtJtqgqFZnCq3D}/_ssgManifest.js +0 -0
@@ -1,2 +1,2 @@
1
1
  "use strict";exports.id=2425,exports.ids=[2425,5111,7492],exports.modules={17492:(a,b,c)=>{c.d(b,{Hm:()=>f,xc:()=>e});let d=["key","secret","token","password"],e=a=>d.some(b=>a.toLowerCase().includes(b)),f=a=>e(a)||"authorization"===a.trim().toLowerCase()},24424:(a,b)=>{function c(a){for(let b=0;b<a.length;b++){let c=a[b];if("function"!=typeof c)throw Object.defineProperty(Error(`A "use server" file can only export async functions, found ${typeof c}.
2
- Read more: https://nextjs.org/docs/messages/invalid-use-server-value`),"__NEXT_ERROR_CODE",{value:"E352",enumerable:!1,configurable:!0})}}Object.defineProperty(b,"D",{enumerable:!0,get:function(){return c}})},36103:(a,b,c)=>{c.d(b,{DP:()=>i,Er:()=>f,FH:()=>e,Vc:()=>h,tv:()=>g});class d extends Error{constructor(){super("Workspace layout preparation has not started."),this.code="WORKSPACE_LAYOUT_NOT_STARTED",this.name="WorkspaceLayoutNotStartedError"}}function e(){return global.__flujo_workspace_migration_promise}function f(){return global.__flujo_workspace_layout_status??"not-started"}function g(a){global.__flujo_workspace_migration_promise=a,global.__flujo_workspace_layout_status=a?"preparing":"not-started",a&&a.then(()=>{global.__flujo_workspace_migration_promise===a&&(global.__flujo_workspace_layout_status="ready")},()=>{global.__flujo_workspace_migration_promise===a&&(global.__flujo_workspace_layout_status="failed")})}function h(a,b){global.__flujo_workspace_migration_promise===a&&(global.__flujo_workspace_migration_promise=void 0,global.__flujo_workspace_layout_status="failed")}async function i(){let a=e();if(!a)throw new d;await a}},38813:(a,b,c)=>{c.d(b,{Wj:()=>h,ln:()=>g});var d=c(23211),e=c(63078);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}},49796:(a,b,c)=>{Object.defineProperty(b,"A",{enumerable:!0,get:function(){return d.registerServerReference}});let d=c(77943)},77943:(a,b,c)=>{a.exports=c(7553).vendored["react-rsc"].ReactServerDOMWebpackServer},84708:(a,b,c)=>{c.d(b,{SA:()=>Q,MH:()=>S,lJ:()=>G,M2:()=>N,HV:()=>P,$Z:()=>T,Xd:()=>I});var d=c(66844),e=c(55207),f=c(47046),g=c(52499);function h(a,b,c){if("string"!=typeof c)return;let d=c.trim();0!==d.length&&a.push({location:b,text:d})}function i(a){let b=[];for(let c of a.flows??[])b.push(...function(a){let b=[];for(let c of(h(b,`flow:${a.id}.description`,a.description),a.nodes??[]))!function(a,b,c){let d=c.id,e=`flow:${b}.node:${d}`;h(a,`${e}.description`,c.data?.description),c.data?.properties&&"object"==typeof c.data.properties&&function a(b,c,d,e,f=0){if(!(f>12)&&null!=d){if("string"==typeof d)return void h(b,c,d);if("object"==typeof d&&!e.has(d)){if(e.add(d),Array.isArray(d))return void d.forEach((d,g)=>a(b,`${c}[${g}]`,d,e,f+1));for(let[g,h]of Object.entries(d))a(b,`${c}.${g}`,h,e,f+1)}}}(a,`${e}.properties`,c.data.properties,new WeakSet)}(b,a.id,c);return b}(c));for(let c of a.models??[])b.push(...function(a){let b=[],c=`model:${a.id}`;return h(b,`${c}.baseUrl`,a.baseUrl),h(b,`${c}.promptTemplate`,a.promptTemplate),h(b,`${c}.displayName`,a.displayName),h(b,`${c}.description`,a.description),h(b,`${c}.name`,a.name),b}(c));for(let c of a.plannedExecutions??[])b.push(...function(a){let b=[],c=`plannedExecution:${a.id}`;return h(b,`${c}.name`,a.name),h(b,`${c}.prompt`,a.prompt),b}(c));return b}var j=c(17492);let k=["path","repo","token","email","url-cred","name","other"];function l(a,b){return`sp_${function(a){let b=5381;for(let c=0;c<a.length;c++)b=(b<<5)+b^a.charCodeAt(c);return(b>>>0).toString(16).padStart(8,"0")}(`${a}\0${b}`)}`}function m(a,b){let c=`${a}_${b}`.toUpperCase().replace(/[^A-Z0-9_.-]+/g,"_").replace(/^[_.-]+|[_.-]+$/g,"")||`${a}_SECRET`;return e.IE.test(c)?c:`${a}_SECRET`}let n=["/usr/","/bin/","/sbin/","/lib/","/lib64/","/etc/","/var/","/opt/","/proc/","/sys/","/dev/","/tmp/","/run/","/boot/","/mnt/","/srv/","/node_modules/"],o=["c:\\windows","c:\\program files","c:\\programdata"],p=/[.,;:!?)\]}'"/\\]$/;function q(a){if(!a)return 0;let b=new Map;for(let c of a)b.set(c,(b.get(c)??0)+1);let c=0;for(let d of b.values()){let b=d/a.length;c-=b*Math.log2(b)}return c}let r=[{re:/\bhttps?:\/\/[^/\s:@]+:[^/\s:@]+@[^\s"'<>]+/gi,kind:"url-cred",priority:1,rationale:"URL with embedded credentials",confidence:"high"},{re:/\bBearer\s+([A-Za-z0-9._~+/=-]{16,})/gi,kind:"token",priority:2,rationale:"Bearer token",confidence:"high",group:1},{re:/(?:https?:\/\/)?(?:www\.)?(?:github\.com|gitlab\.com|bitbucket\.org)[/:]([A-Za-z0-9](?:[A-Za-z0-9._-]{0,38})\/[A-Za-z0-9](?:[A-Za-z0-9._-]{0,99}?))(?=(?:\.git)?(?![A-Za-z0-9._/-]))/gi,kind:"repo",priority:3,rationale:"owner/repo slug in a VCS URL",confidence:"high",group:1},{re:/\bgit@[A-Za-z0-9.-]+:([A-Za-z0-9](?:[A-Za-z0-9._-]{0,38})\/[A-Za-z0-9](?:[A-Za-z0-9._-]{0,99}?))(?=(?:\.git)?(?![A-Za-z0-9._/-]))/gi,kind:"repo",priority:3,rationale:"owner/repo slug in a git SSH URL",confidence:"high",group:1},{re:/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b/g,kind:"email",priority:4,rationale:"Email address",confidence:"medium"},{re:/\b[A-Za-z]:\\[^\s"'<>|?*]+/g,kind:"path",priority:5,rationale:"Windows absolute file path",confidence:"medium"},{re:/(?<![A-Za-z0-9._~:/])\/[A-Za-z0-9._-]+(?:\/[A-Za-z0-9._-]+)+/g,kind:"path",priority:6,rationale:"POSIX absolute file path",confidence:"medium"}],s={re:/(?<![A-Za-z0-9._/-])[A-Za-z0-9](?:[A-Za-z0-9._-]{0,38})\/[A-Za-z0-9](?:[A-Za-z0-9._-]{0,99})(?![A-Za-z0-9._/-])/g,kind:"repo",priority:8,rationale:"owner/repo-shaped slug (opt-in, low confidence)",confidence:"low"},t=new Set(["and/or","input/output","read/write","client/server","tcp/ip","files/folders","yes/no","true/false","on/off","src/utils","a/b"]),u=/(?<![A-Za-z0-9_-])([A-Za-z][A-Za-z0-9_-]{1,64})\s*[:=]\s*("[^"]{4,}"|'[^']{4,}'|[^\s"']{6,})/g;function v(a){return new RegExp(e.HQ.source).test(a)}let w={path:"PATH",repo:"REPO",token:"TOKEN",email:"EMAIL","url-cred":"URL",name:"NAME",other:"SECRET"};function x(a,b){let c=b;if("path"===a){let a=b.split(/[\\/]/).filter(Boolean);c=a[a.length-1]||b}else"email"===a?c=b.split("@")[0]||b:"repo"===a?c=b.replace(/\//g,"_"):"url-cred"===a?c=b.replace(/^https?:\/\//i,"").split(/[/:@]/)[0]||b:"token"===a&&(c=b.slice(0,8));return m(w[a],c)}function y(a,b={}){let c=b.entropyThreshold??4,d=!0===b.enableEntropy,e=!0===b.enableRepoSlug?[...r,s]:r,f=[],g=new Set;for(let b of a)for(let a of function(a){let b=[...a].sort((a,b)=>a.priority-b.priority||b.end-b.start-(a.end-a.start)||a.start-b.start),c=[];for(let a of b)c.some(b=>a.start<b.end&&b.start<a.end)||c.push(a);return c.sort((a,b)=>a.start-b.start)}([...function(a,b){let c=[];for(let d of b){let b,e=new RegExp(d.re.source,d.re.flags);for(;null!==(b=e.exec(a));){let a=d.group??0,f=b[a];if(!f){e.lastIndex===b.index&&e.lastIndex++;continue}let g=b.index+(a>0?b[0].indexOf(f):0);if("path"===d.kind&&(f=function(a){let b=a;for(;b.length>1&&p.test(b);)b=b.slice(0,-1);return b}(f)),"path"===d.kind&&function(a){let b=a.toLowerCase();return!!(b.includes("node_modules/")||b.includes("node_modules\\"))||(/^[a-z]:\\/.test(b)?o.some(a=>b.startsWith(a)):n.some(a=>b.startsWith(a)))}(f)||"repo"===d.kind&&"low"===d.confidence&&t.has(f.toLowerCase())){e.lastIndex===b.index&&e.lastIndex++;continue}c.push({start:g,end:g+f.length,value:f,kind:d.kind,priority:d.priority,rationale:d.rationale,confidence:d.confidence}),e.lastIndex===b.index&&e.lastIndex++}}return c}(b.text,e),...function(a){let b,c=[],d=new RegExp(u.source,u.flags);for(;null!==(b=d.exec(a));){let a=b[1],d=b[2];if(!(0,j.xc)(a)||((d.startsWith('"')&&d.endsWith('"')||d.startsWith("'")&&d.endsWith("'"))&&(d=d.slice(1,-1)),!d||v(d)))continue;let e=b.index+b[0].indexOf(d,a.length);c.push({start:e,end:e+d.length,value:d,kind:"token",priority:2,rationale:`Value assigned to secret-like key "${a}"`,confidence:"high"})}return c}(b.text),...d?function(a,b){let c,d=[],e=/[A-Za-z0-9._~+/=-]{20,}/g;for(;null!==(c=e.exec(a));){let a=c[0];(function(a,b){if(a.length<24)return!1;let c=/[A-Za-z]/.test(a),d=/[0-9]/.test(a);return!!c&&!!d&&q(a)>=b})(a,b)&&d.push({start:c.index,end:c.index+a.length,value:a,kind:"token",priority:7,rationale:`High-entropy string (${q(a).toFixed(2)} bits/char)`,confidence:"low"})}return d}(b.text,c):[]].filter(a=>!v(a.value)))){let c=`${b.location}\0${a.value}`;g.has(c)||(g.add(c),f.push({id:l(b.location,a.value),location:b.location,excerpt:a.value,kind:a.kind,source:"heuristic",confidence:a.confidence,suggestedSecretName:x(a.kind,a.value),rationale:a.rationale}))}return f}async function z(a,b){let c,d=[];if(0===a.length)return{proposals:[],warnings:d};let e=b.maxTargets??200,f=b.maxCharsPerTarget??2e3,g=a.slice(0,e).map(a=>({location:a.location,text:a.text.length>f?a.text.slice(0,f):a.text})),h=new Map(a.map(a=>[a.location,a]));try{c=await b.completion({modelIdentifier:b.modelIdentifier,temperature:0,messages:[{role:"system",content:'You are a security assistant helping to package a workflow for sharing.\nYou are given a JSON array of content slices, each { "location", "text" }.\nIdentify substrings that are SECRETS or INSTANCE-SPECIFIC values that should\nNOT be shared verbatim: absolute file paths, owner/repo slugs, API tokens or\nkeys, credential-bearing URLs, email addresses, and similar.\n\nReturn ONLY a JSON array (no prose, no markdown fences). Each element:\n{ "location": string (echo the slice location exactly),\n "excerpt": string (the EXACT substring, copied verbatim from that slice text),\n "kind": one of "path"|"repo"|"token"|"email"|"url-cred"|"name"|"other",\n "suggestedSecretName": UPPER_SNAKE identifier,\n "suggestedDescription": short human description,\n "rationale": one short sentence }.\nDo NOT invent excerpts that are not present in the given text. If nothing\nqualifies, return [].'},{role:"user",content:JSON.stringify(g)}]})}catch(a){return d.push(`Model-driven pass failed: ${a instanceof Error?a.message:String(a)}`),{proposals:[],warnings:d}}if(!c?.success)return d.push(`Model-driven pass returned an error: ${c?.error?.message??"unknown error"}`),{proposals:[],warnings:d};let i=c.completion?.choices?.[0]?.message?.content??"",j=function(a){if("string"!=typeof a)return null;let b=a.trim(),c=/^```(?:json)?\s*([\s\S]*?)\s*```$/i.exec(b);c&&(b=c[1].trim());let d=a=>{try{let b=JSON.parse(a);return Array.isArray(b)?b:null}catch{return null}},e=d(b);if(e)return e;let f=b.indexOf("["),g=b.lastIndexOf("]");return f>=0&&g>f?d(b.slice(f,g+1)):null}("string"==typeof i?i:"");if(!j)return d.push("Model-driven pass returned no parseable JSON; ignoring its output."),{proposals:[],warnings:d};let n=[],o=new Set;for(let a of j){let b=function(a,b){var c;if(!a||"object"!=typeof a)return null;let d="string"==typeof a.location?a.location:"",e="string"==typeof a.excerpt?a.excerpt.trim():"";if(!d||!e)return null;let f=b.get(d);if(!f||!f.text.includes(e))return null;let g="string"==typeof(c=a.kind)&&k.includes(c)?c:"other",h="string"==typeof a.suggestedSecretName&&a.suggestedSecretName.trim()?m("SECRET",a.suggestedSecretName):x(g,e);return{id:l(d,e),location:d,excerpt:e,kind:g,source:"model",suggestedSecretName:h,suggestedDescription:"string"==typeof a.suggestedDescription?a.suggestedDescription.slice(0,200):void 0,rationale:"string"==typeof a.rationale?a.rationale.slice(0,200):void 0}}(a,h);if(!b)continue;let c=`${b.location} ${b.excerpt}`;o.has(c)||(o.add(c),n.push(b))}return{proposals:n,warnings:d}}async function A(a,b={}){let c=i(a),d=[],e=y(c,b),f=[];if(b.model){let a=await z(c,{modelIdentifier:b.model.modelIdentifier,completion:b.model.completion});f=a.proposals,d.push(...a.warnings)}return{proposals:function(a,b){let c=new Map,d=a=>`${a.location}\0${a.excerpt}`;for(let b of a)c.set(d(b),b);for(let a of b){let b=d(a);c.has(b)||c.set(b,a)}return Array.from(c.values())}(e,f),warnings:d}}function B(a,b){if("string"==typeof a)return b(a);if(Array.isArray(a))return a.map(a=>B(a,b));if(a&&"object"==typeof a){let c={};for(let[d,e]of Object.entries(a))c[d]=B(e,b);return c}return a}var C=c(74755);let D=(0,d.h)("backend/services/packages/buildPackage"),E=/\$\{global:([A-Za-z0-9_.-]+)\}/g;function F(a,b=new Set){if("string"==typeof a){let c=RegExp(E.source,"g");for(let d of a.matchAll(c))b.add(d[1]);return b}if(Array.isArray(a)){for(let c of a)F(c,b);return b}if(a&&"object"==typeof a)for(let c of Object.values(a))F(c,b);return b}function G(a,b){let c=new Set,d=new Set(a.flowIds),e=new Set(a.modelIds),f=new Set(a.plannedExecutionIds);for(let a of b.flows)d.has(a.id)&&F(a,c);for(let a of b.models)e.has(a.id)&&F(a,c);for(let a of b.plannedExecutions)f.has(a.id)&&F(a,c);for(let d of I(a.mcpServerNames,b.mcpServers).packaged){for(let a of[...d.envDeclarations,...d.headerDeclarations??[]])a.globalVar&&c.add(a.globalVar),a.globalTemplate&&F(a.globalTemplate,c);for(let a of d.argTemplates??[])F(a.value,c)}return Array.from(c,a=>({name:a,description:`Global variable ${a} required by this package`,required:!0,isSecret:b.globalVariables?.[a]?.isSecret===!0}))}function H(a,b){return a?Object.entries(a).map(([a,c])=>{let d="object"==typeof c&&null!==c&&"boolean"==typeof c.metadata?.isSecret,f=("string"==typeof c?c:c&&"object"==typeof c&&"string"==typeof c.value?c.value:void 0)??"",g=e.mQ.exec(f),h=F(f);return{name:a,isSecret:d?"object"==typeof c&&null!==c&&c.metadata?.isSecret===!0:b(a),...g?{globalVar:g[1]}:{},...!g&&h.size>0?{globalTemplate:f}:{}}}):[]}function I(a,b){let c=new Map(b.map(a=>[a.name,a])),d=[],e=[];for(let b of a){let a=c.get(b);if(!a){e.push(`MCP server "${b}" was not found.`);continue}let f=function(a){let b=a.source;if(!b||"local"===b.type)return null;switch(b.type){case"github":{let c=a._installCommand?.trim(),d=a._buildCommand?.trim();return{sourceType:"github",ref:b.repositoryUrl,...b.ref?{gitRef:b.ref}:{},...b.subdirectory?{subdirectory:b.subdirectory}:{},...c?{installCommand:c}:{},...d?{buildCommand:d}:{},name:a.name}}case"registry":return{sourceType:"registry",ref:b.registryName,name:a.name};case"marketplace":return{sourceType:"marketplace",ref:b.id,name:a.name};case"remote":return{sourceType:"remote",url:a.serverUrl??a.websocketUrl,name:a.name};default:return null}}(a);if(!f){e.push(`MCP server "${b}" is a local server and cannot be packaged. Re-install it from GitHub, the registry, the marketplace, or as a remote server, then try again.`);continue}if(a.launch){e.push(`MCP server "${b}" is a launch-and-connect server (it runs locally but speaks HTTP). Packages cannot carry its launch command yet, so it cannot be exported.`);continue}let g=H(a.headers,j.Hm),h="stdio"===a.transport&&Array.isArray(a.args)?a.args.flatMap((a,b)=>"string"==typeof a&&F(a).size>0?[{index:b,value:a}]:[]):[];d.push({name:a.name,transport:a.transport,...a.disabled?{disabled:!0}:{},...a.autoApprove&&a.autoApprove.length?{autoApprove:a.autoApprove}:{},...a.folder?{folder:a.folder}:{},installOrigin:f,envDeclarations:H(a.env,j.xc),...g.length?{headerDeclarations:g}:{},...h.length?{argTemplates:h}:{}})}return{packaged:d,errors:e}}function J(a,b){let c=`${a}_${b}`.toUpperCase().replace(/[^A-Z0-9_.-]+/g,"_").replace(/^_+|_+$/g,"")||`${a}_SECRET`;return e.IE.test(c)?c:`${a}_SECRET`}function K(a){let b=(a.ApiKey??"").trim();if(!b)return{ref:{kind:"none"}};let c=e.mQ.exec(b);if(c)return{ref:{kind:"global",var:c[1]}};let d=J("MODEL",a.displayName||a.name||a.id);return{ref:{kind:"secret",secret:d},secret:{name:d,description:`API key for model "${a.displayName||a.name}"`,required:!0}}}function L(a){let b=[],c=new Set,d=(a,d)=>{for(let e of d??[]){if(!e.isSecret||e.secretRef||e.globalVar||e.globalTemplate)continue;let d=J("MCP",`${a}_${e.name}`);e.secretRef=d,c.has(d)||(c.add(d),b.push({name:d,description:`Secret "${e.name}" for MCP server "${a}"`,required:!0}))}};for(let b of a)d(b.name,b.envDeclarations),d(b.name,b.headerDeclarations);return b}function M(a,b,c){let d=b.map(({ApiKey:a,...b})=>b),e=c.map(a=>{if(a.trigger?.type!=="webhook")return a;let{token:b,...c}=a.trigger;return{...a,trigger:c}});return(0,g.D)({flows:a,models:d,plannedExecutions:e}).map(a=>({name:a,description:`Secret "${a}" referenced by packaged content`,required:!0}))}function N(a,b){let c=new Map(b.flows.map(a=>[a.id,a])),d=new Map(b.models.map(a=>[a.id,a])),e=new Map(b.plannedExecutions.map(a=>[a.id,a])),f=[],g=new Set,h=a=>{a&&!g.has(a.name)&&(g.add(a.name),f.push(a))};for(let b of a.modelIds){let a=d.get(b);a&&h(K(a).secret)}for(let c of L(I(a.mcpServerNames,b.mcpServers).packaged))h(c);for(let b of M(a.flowIds.map(a=>c.get(a)).filter(a=>!!a),a.modelIds.map(a=>d.get(a)).filter(a=>!!a),a.plannedExecutionIds.map(a=>e.get(a)).filter(a=>!!a)))h(b);return f}async function O(){let{flowService:a}=await c.e(1114).then(c.bind(c,71114)),{modelService:b}=await Promise.all([c.e(8775),c.e(4165),c.e(3133),c.e(1114),c.e(8619),c.e(7798),c.e(531),c.e(4271),c.e(6702)]).then(c.bind(c,42740)),{loadServerConfigs:d}=await Promise.all([c.e(8775),c.e(244)]).then(c.bind(c,80244)),{getSchedulerService:e}=await Promise.all([c.e(5481),c.e(4314),c.e(8619),c.e(5354),c.e(4321)]).then(c.bind(c,65354)),{loadItem:f}=await Promise.resolve().then(c.bind(c,65445)),[g,h,i,j,k]=await Promise.all([a.loadFlows(),b.loadModels(),d(),e().list(),f(C.Zg.GLOBAL_ENV_VARS,{})]),l=Array.isArray(i)?i:[];return{flows:g,models:h,mcpServers:l,plannedExecutions:j.map(a=>a.execution),globalVariables:Object.fromEntries(Object.entries(k).map(([a,b])=>[a,{isSecret:"object"==typeof b&&null!==b&&b.metadata?.isSecret===!0||"string"==typeof b&&(b.startsWith("encrypted:")||b.startsWith("encrypted_failed:"))}]))}}async function P(a){let b=await O();return{resolved:function(a,b){let c=new Map(b.flows.map(a=>[a.id,a])),d=new Map(b.models.map(a=>[a.id,a])),e=new Map(b.mcpServers.map(a=>[a.name,a])),g=new Map(b.plannedExecutions.map(a=>[a.id,a])),h=new Set,i=new Set(a.modelIds??[]),j=new Set(a.mcpServerNames??[]),k=new Set(a.plannedExecutionIds??[]),l=[],m=[],n=new Set(a.flowIds??[]),o=new Set(a.modelIds??[]),p=new Set(a.mcpServerNames??[]);for(let a of k){let b=g.get(a);if(!b){m.push(`Planned execution "${a}" was not found and will be skipped.`);continue}!b.flowId||n.has(b.flowId)||h.has(b.flowId)||l.push({type:"flow",id:b.flowId,reason:`used by planned execution "${b.name}"`}),b.flowId&&n.add(b.flowId)}let q=new Set,r=Array.from(n);for(;r.length>0;){let a=r.shift();if(q.has(a))continue;q.add(a);let b=c.get(a);if(!b){m.push(`Referenced flow "${a}" was not found and will be skipped.`);continue}h.add(a);let g=(0,f.Xw)(b);for(let d of g.flowIds??[])q.has(d)||r.push(d),!n.has(d)&&d!==a&&(c.has(d)?l.some(a=>"flow"===a.type&&a.id===d)||l.push({type:"flow",id:d,reason:`subflow of "${b.name}"`}):m.push(`Flow "${b.name}" references missing subflow "${d}".`));for(let a of g.modelIds??[]){if(!d.has(a)){m.push(`Flow "${b.name}" references missing model "${a}".`);continue}!i.has(a)&&(i.add(a),o.has(a)||l.push({type:"model",id:a,reason:`used by flow "${b.name}"`}))}for(let a of g.mcpServerNames??[]){if(!e.has(a)){m.push(`Flow "${b.name}" references missing MCP server "${a}".`);continue}!j.has(a)&&(j.add(a),p.has(a)||l.push({type:"mcpServer",id:a,reason:`used by flow "${b.name}"`}))}}return{flowIds:Array.from(h),modelIds:Array.from(i),mcpServerNames:Array.from(j),plannedExecutionIds:Array.from(k),autoAdded:l,warnings:m}}(a,b),entities:b}}async function Q(a,b,c=[],d=[],g=[]){D.info(`Building package "${b.name}" v${b.version}`);let{resolved:h,entities:j}=await P(a);return function(a,b,c,d=[],g=[],h=[]){var j;let k,l=[],m=[...a.warnings],n=new Map(b.flows.map(a=>[a.id,a])),o=new Map(b.models.map(a=>[a.id,a])),p=new Map(b.plannedExecutions.map(a=>[a.id,a])),q=I(a.mcpServerNames,b.mcpServers);l.push(...q.errors);let r=new Set(h),s=[],t=new Set,u=a=>{a&&!t.has(a.name)&&(t.add(a.name),s.push(a))},v=a.modelIds.map(a=>o.get(a)).filter(a=>!!a),w=a.flowIds.map(a=>n.get(a)).filter(a=>!!a),x=a.plannedExecutionIds.map(a=>p.get(a)).filter(a=>!!a),z=v,A=w,C=x;if(d.length>0){let a=function(a,b){let c=[],d=b.filter(a=>!!a.excerpt&&(!!e.IE.test(a.secretName)||(c.push(`Skipped substitution with invalid secret name "${a.secretName}".`),!1))).sort((a,b)=>b.excerpt.length-a.excerpt.length),f=a=>{let b=a;for(let a of d)b.includes(a.excerpt)&&(b=b.split(a.excerpt).join(`{{secret.${a.secretName}}}`));return b},g={flows:a.flows.map(a=>B(a,f)),models:a.models.map(a=>B(a,f)),plannedExecutions:a.plannedExecutions.map(a=>B(a,f))},h=[],i=new Set;for(let a of d)i.has(a.secretName)||(i.add(a.secretName),h.push({name:a.secretName,description:a.description?f(a.description):`Derived secret ${a.secretName}`,required:!0}));return{entities:g,secrets:h,warnings:c}}({flows:A,models:v,plannedExecutions:x},d);for(let b of(z=a.entities.models,A=a.entities.flows,C=a.entities.plannedExecutions,m.push(...a.warnings),a.secrets))u(b)}let D=z.map(a=>{var b;let{ref:c,secret:d}=(b=K(a),b.secret&&r.has(b.secret.name)?{ref:{kind:"none"}}:b);return u(d),{model:a,apiKeyRef:c}});for(let a of L(q.packaged))u(a);for(let a of q.packaged)for(let b of[...a.envDeclarations,...a.headerDeclarations??[]])b.secretRef&&r.has(b.secretRef)&&delete b.secretRef;let E=M(A,z,C),H=new Set(E.map(a=>a.name));for(let a=s.length-1;a>=0;a-=1)r.has(s[a].name)&&!H.has(s[a].name)&&(t.delete(s[a].name),s.splice(a,1));for(let a of E)u(a);let J=new Set;for(let{apiKeyRef:a}of D)"global"===a.kind&&J.add(a.var);for(let a of q.packaged){for(let b of[...a.envDeclarations,...a.headerDeclarations??[]])b.globalVar&&J.add(b.globalVar),b.globalTemplate&&F(b.globalTemplate,J);for(let b of a.argTemplates??[])F(b.value,J)}let N=(j=G(a,b),k=new Map(g.map(a=>[a.name,a])),j.map(a=>{let b=k.get(a.name);return b?{...a,description:b.description?.trim()||a.description,required:!1!==b.required,isSecret:!0===b.isSecret}:a}));for(let a of N)a.required&&J.add(a.name);if(l.length>0)return{ok:!1,resolved:a,errors:l,warnings:m};try{let{json:b,package:e}=(0,f.Zp)({id:c.id,name:c.name,version:c.version,description:c.description,author:c.author,publisher:c.publisher,tags:c.tags,...J.size>0?{requiredGlobals:Array.from(J)}:{},...N.length>0?{globals:N}:{},secrets:s,models:D,mcpServers:q.packaged,flows:A,plannedExecutions:C}),g=(0,f.$j)(e);return g.warnings?.length&&m.push(...g.warnings),d.length>0&&m.push(...function(a,b={}){return y(i(a),b).map(a=>`Possible secret left in package at ${a.location}: "${a.excerpt}" (${a.kind}).`)}({flows:A,models:z,plannedExecutions:C})),{ok:!0,json:b,package:e,resolved:a,errors:l,warnings:m}}catch(b){return l.push(b instanceof Error?b.message:String(b)),{ok:!1,resolved:a,errors:l,warnings:m}}}(h,j,b,c.filter(a=>a.excerpt&&a.suggestedSecretName).map(a=>({excerpt:a.excerpt,secretName:a.suggestedSecretName,description:a.suggestedDescription})),d,g)}function R(a,b){let c=new Set(a.flowIds),d=new Set(a.modelIds),e=new Set(a.plannedExecutionIds);return{flows:b.flows.filter(a=>c.has(a.id)),models:b.models.filter(a=>d.has(a.id)),plannedExecutions:b.plannedExecutions.filter(a=>e.has(a.id))}}async function S(a,b={}){let{resolved:d,entities:e}=await P(a),f=R(d,e),g={entropyThreshold:b.entropyThreshold,enableEntropy:b.enableEntropy,enableRepoSlug:b.enableRepoSlug};if(b.modelIdentifier){let{modelService:a}=await Promise.all([c.e(8775),c.e(4165),c.e(3133),c.e(1114),c.e(8619),c.e(7798),c.e(531),c.e(4271),c.e(6702)]).then(c.bind(c,42740));g.model={modelIdentifier:b.modelIdentifier,completion:async b=>await a.generateChatCompletion({modelIdentifier:b.modelIdentifier,messages:b.messages,temperature:b.temperature})}}return A(f,g)}async function T(a){let{resolved:b,entities:c}=await P(a),d=i(R(b,c)),e=new Set,f=[];for(let a of d){if(e.has(a.text))continue;e.add(a.text);let b=a.location.split(":")[0]||"other";f.push({source:b,location:a.location,text:a.text})}return f.sort((a,b)=>b.text.length-a.text.length),f}},87182:(a,b,c)=>{c.d(b,{pZ:()=>l});var d=c(7986),e=c(66844),f=c(36103);let g=(0,e.h)("app/api/_workspace");class h extends Error{constructor(a,b){super(a),this.name="WorkspaceRequestError",this.status=b}}async function i(a){let b=function(a){let b=null;try{b=new URL(a.url).searchParams.get("workspace")}catch{}null===b&&(b=a.headers?.get?.("x-flujo-workspace")??null);try{return(0,d.normalizeWorkspaceName)(b)}catch(a){if(a instanceof d.InvalidWorkspaceNameError)throw new h("Invalid workspace name. Workspace names must match /^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/.",400);throw a}}(a);try{await (0,f.DP)()}catch(a){throw g.error("Workspace layout is not ready; refusing workspace request",a),new h("Workspace storage is temporarily unavailable while its layout is being prepared.",503)}if(!await (0,d.workspaceExists)(b))throw new h(`Unknown workspace: ${b}`,404);return b}function j(a){return new Response(JSON.stringify({error:a.message}),{status:a.status,headers:{"Content-Type":"application/json",...503===a.status?{"Retry-After":"5"}:{}}})}async function k(a,b){let c;try{c=await i(a)}catch(a){if(a instanceof h)return j(a);throw a}return(0,d.runWithWorkspace)(c,async()=>{try{await (0,d.ensureWorkspaceDirs)(c)}catch(a){return g.error(`Workspace ${c} has an unsafe or unavailable storage layout`,a),j(new h(`Workspace storage is unavailable: ${c}`,503))}return b(c)})}function l(a){return async(b,...c)=>{let d=b instanceof Request?b:new Request("http://localhost/"),e=b??d;return k(d,()=>Promise.resolve(a(e,...c)))}}}};
2
+ Read more: https://nextjs.org/docs/messages/invalid-use-server-value`),"__NEXT_ERROR_CODE",{value:"E352",enumerable:!1,configurable:!0})}}Object.defineProperty(b,"D",{enumerable:!0,get:function(){return c}})},36103:(a,b,c)=>{c.d(b,{DP:()=>i,Er:()=>f,FH:()=>e,Vc:()=>h,tv:()=>g});class d extends Error{constructor(){super("Workspace layout preparation has not started."),this.code="WORKSPACE_LAYOUT_NOT_STARTED",this.name="WorkspaceLayoutNotStartedError"}}function e(){return global.__flujo_workspace_migration_promise}function f(){return global.__flujo_workspace_layout_status??"not-started"}function g(a){global.__flujo_workspace_migration_promise=a,global.__flujo_workspace_layout_status=a?"preparing":"not-started",a&&a.then(()=>{global.__flujo_workspace_migration_promise===a&&(global.__flujo_workspace_layout_status="ready")},()=>{global.__flujo_workspace_migration_promise===a&&(global.__flujo_workspace_layout_status="failed")})}function h(a,b){global.__flujo_workspace_migration_promise===a&&(global.__flujo_workspace_migration_promise=void 0,global.__flujo_workspace_layout_status="failed")}async function i(){let a=e();if(!a)throw new d;await a}},38813:(a,b,c)=>{c.d(b,{Wj:()=>h,ln:()=>g});var d=c(23211),e=c(63078);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}},49796:(a,b,c)=>{Object.defineProperty(b,"A",{enumerable:!0,get:function(){return d.registerServerReference}});let d=c(77943)},77943:(a,b,c)=>{a.exports=c(7553).vendored["react-rsc"].ReactServerDOMWebpackServer},84708:(a,b,c)=>{c.d(b,{SA:()=>Q,MH:()=>S,lJ:()=>G,M2:()=>N,HV:()=>P,$Z:()=>T,Xd:()=>I});var d=c(66844),e=c(55207),f=c(47046),g=c(52499);function h(a,b,c){if("string"!=typeof c)return;let d=c.trim();0!==d.length&&a.push({location:b,text:d})}function i(a){let b=[];for(let c of a.flows??[])b.push(...function(a){let b=[];for(let c of(h(b,`flow:${a.id}.description`,a.description),a.nodes??[]))!function(a,b,c){let d=c.id,e=`flow:${b}.node:${d}`;h(a,`${e}.description`,c.data?.description),c.data?.properties&&"object"==typeof c.data.properties&&function a(b,c,d,e,f=0){if(!(f>12)&&null!=d){if("string"==typeof d)return void h(b,c,d);if("object"==typeof d&&!e.has(d)){if(e.add(d),Array.isArray(d))return void d.forEach((d,g)=>a(b,`${c}[${g}]`,d,e,f+1));for(let[g,h]of Object.entries(d))a(b,`${c}.${g}`,h,e,f+1)}}}(a,`${e}.properties`,c.data.properties,new WeakSet)}(b,a.id,c);return b}(c));for(let c of a.models??[])b.push(...function(a){let b=[],c=`model:${a.id}`;return h(b,`${c}.baseUrl`,a.baseUrl),h(b,`${c}.promptTemplate`,a.promptTemplate),h(b,`${c}.displayName`,a.displayName),h(b,`${c}.description`,a.description),h(b,`${c}.name`,a.name),b}(c));for(let c of a.plannedExecutions??[])b.push(...function(a){let b=[],c=`plannedExecution:${a.id}`;return h(b,`${c}.name`,a.name),h(b,`${c}.prompt`,a.prompt),b}(c));return b}var j=c(17492);let k=["path","repo","token","email","url-cred","name","other"];function l(a,b){return`sp_${function(a){let b=5381;for(let c=0;c<a.length;c++)b=(b<<5)+b^a.charCodeAt(c);return(b>>>0).toString(16).padStart(8,"0")}(`${a}\0${b}`)}`}function m(a,b){let c=`${a}_${b}`.toUpperCase().replace(/[^A-Z0-9_.-]+/g,"_").replace(/^[_.-]+|[_.-]+$/g,"")||`${a}_SECRET`;return e.IE.test(c)?c:`${a}_SECRET`}let n=["/usr/","/bin/","/sbin/","/lib/","/lib64/","/etc/","/var/","/opt/","/proc/","/sys/","/dev/","/tmp/","/run/","/boot/","/mnt/","/srv/","/node_modules/"],o=["c:\\windows","c:\\program files","c:\\programdata"],p=/[.,;:!?)\]}'"/\\]$/;function q(a){if(!a)return 0;let b=new Map;for(let c of a)b.set(c,(b.get(c)??0)+1);let c=0;for(let d of b.values()){let b=d/a.length;c-=b*Math.log2(b)}return c}let r=[{re:/\bhttps?:\/\/[^/\s:@]+:[^/\s:@]+@[^\s"'<>]+/gi,kind:"url-cred",priority:1,rationale:"URL with embedded credentials",confidence:"high"},{re:/\bBearer\s+([A-Za-z0-9._~+/=-]{16,})/gi,kind:"token",priority:2,rationale:"Bearer token",confidence:"high",group:1},{re:/(?:https?:\/\/)?(?:www\.)?(?:github\.com|gitlab\.com|bitbucket\.org)[/:]([A-Za-z0-9](?:[A-Za-z0-9._-]{0,38})\/[A-Za-z0-9](?:[A-Za-z0-9._-]{0,99}?))(?=(?:\.git)?(?![A-Za-z0-9._/-]))/gi,kind:"repo",priority:3,rationale:"owner/repo slug in a VCS URL",confidence:"high",group:1},{re:/\bgit@[A-Za-z0-9.-]+:([A-Za-z0-9](?:[A-Za-z0-9._-]{0,38})\/[A-Za-z0-9](?:[A-Za-z0-9._-]{0,99}?))(?=(?:\.git)?(?![A-Za-z0-9._/-]))/gi,kind:"repo",priority:3,rationale:"owner/repo slug in a git SSH URL",confidence:"high",group:1},{re:/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b/g,kind:"email",priority:4,rationale:"Email address",confidence:"medium"},{re:/\b[A-Za-z]:\\[^\s"'<>|?*]+/g,kind:"path",priority:5,rationale:"Windows absolute file path",confidence:"medium"},{re:/(?<![A-Za-z0-9._~:/])\/[A-Za-z0-9._-]+(?:\/[A-Za-z0-9._-]+)+/g,kind:"path",priority:6,rationale:"POSIX absolute file path",confidence:"medium"}],s={re:/(?<![A-Za-z0-9._/-])[A-Za-z0-9](?:[A-Za-z0-9._-]{0,38})\/[A-Za-z0-9](?:[A-Za-z0-9._-]{0,99})(?![A-Za-z0-9._/-])/g,kind:"repo",priority:8,rationale:"owner/repo-shaped slug (opt-in, low confidence)",confidence:"low"},t=new Set(["and/or","input/output","read/write","client/server","tcp/ip","files/folders","yes/no","true/false","on/off","src/utils","a/b"]),u=/(?<![A-Za-z0-9_-])([A-Za-z][A-Za-z0-9_-]{1,64})\s*[:=]\s*("[^"]{4,}"|'[^']{4,}'|[^\s"']{6,})/g;function v(a){return new RegExp(e.HQ.source).test(a)}let w={path:"PATH",repo:"REPO",token:"TOKEN",email:"EMAIL","url-cred":"URL",name:"NAME",other:"SECRET"};function x(a,b){let c=b;if("path"===a){let a=b.split(/[\\/]/).filter(Boolean);c=a[a.length-1]||b}else"email"===a?c=b.split("@")[0]||b:"repo"===a?c=b.replace(/\//g,"_"):"url-cred"===a?c=b.replace(/^https?:\/\//i,"").split(/[/:@]/)[0]||b:"token"===a&&(c=b.slice(0,8));return m(w[a],c)}function y(a,b={}){let c=b.entropyThreshold??4,d=!0===b.enableEntropy,e=!0===b.enableRepoSlug?[...r,s]:r,f=[],g=new Set;for(let b of a)for(let a of function(a){let b=[...a].sort((a,b)=>a.priority-b.priority||b.end-b.start-(a.end-a.start)||a.start-b.start),c=[];for(let a of b)c.some(b=>a.start<b.end&&b.start<a.end)||c.push(a);return c.sort((a,b)=>a.start-b.start)}([...function(a,b){let c=[];for(let d of b){let b,e=new RegExp(d.re.source,d.re.flags);for(;null!==(b=e.exec(a));){let a=d.group??0,f=b[a];if(!f){e.lastIndex===b.index&&e.lastIndex++;continue}let g=b.index+(a>0?b[0].indexOf(f):0);if("path"===d.kind&&(f=function(a){let b=a;for(;b.length>1&&p.test(b);)b=b.slice(0,-1);return b}(f)),"path"===d.kind&&function(a){let b=a.toLowerCase();return!!(b.includes("node_modules/")||b.includes("node_modules\\"))||(/^[a-z]:\\/.test(b)?o.some(a=>b.startsWith(a)):n.some(a=>b.startsWith(a)))}(f)||"repo"===d.kind&&"low"===d.confidence&&t.has(f.toLowerCase())){e.lastIndex===b.index&&e.lastIndex++;continue}c.push({start:g,end:g+f.length,value:f,kind:d.kind,priority:d.priority,rationale:d.rationale,confidence:d.confidence}),e.lastIndex===b.index&&e.lastIndex++}}return c}(b.text,e),...function(a){let b,c=[],d=new RegExp(u.source,u.flags);for(;null!==(b=d.exec(a));){let a=b[1],d=b[2];if(!(0,j.xc)(a)||((d.startsWith('"')&&d.endsWith('"')||d.startsWith("'")&&d.endsWith("'"))&&(d=d.slice(1,-1)),!d||v(d)))continue;let e=b.index+b[0].indexOf(d,a.length);c.push({start:e,end:e+d.length,value:d,kind:"token",priority:2,rationale:`Value assigned to secret-like key "${a}"`,confidence:"high"})}return c}(b.text),...d?function(a,b){let c,d=[],e=/[A-Za-z0-9._~+/=-]{20,}/g;for(;null!==(c=e.exec(a));){let a=c[0];(function(a,b){if(a.length<24)return!1;let c=/[A-Za-z]/.test(a),d=/[0-9]/.test(a);return!!c&&!!d&&q(a)>=b})(a,b)&&d.push({start:c.index,end:c.index+a.length,value:a,kind:"token",priority:7,rationale:`High-entropy string (${q(a).toFixed(2)} bits/char)`,confidence:"low"})}return d}(b.text,c):[]].filter(a=>!v(a.value)))){let c=`${b.location}\0${a.value}`;g.has(c)||(g.add(c),f.push({id:l(b.location,a.value),location:b.location,excerpt:a.value,kind:a.kind,source:"heuristic",confidence:a.confidence,suggestedSecretName:x(a.kind,a.value),rationale:a.rationale}))}return f}async function z(a,b){let c,d=[];if(0===a.length)return{proposals:[],warnings:d};let e=b.maxTargets??200,f=b.maxCharsPerTarget??2e3,g=a.slice(0,e).map(a=>({location:a.location,text:a.text.length>f?a.text.slice(0,f):a.text})),h=new Map(a.map(a=>[a.location,a]));try{c=await b.completion({modelIdentifier:b.modelIdentifier,temperature:0,messages:[{role:"system",content:'You are a security assistant helping to package a workflow for sharing.\nYou are given a JSON array of content slices, each { "location", "text" }.\nIdentify substrings that are SECRETS or INSTANCE-SPECIFIC values that should\nNOT be shared verbatim: absolute file paths, owner/repo slugs, API tokens or\nkeys, credential-bearing URLs, email addresses, and similar.\n\nReturn ONLY a JSON array (no prose, no markdown fences). Each element:\n{ "location": string (echo the slice location exactly),\n "excerpt": string (the EXACT substring, copied verbatim from that slice text),\n "kind": one of "path"|"repo"|"token"|"email"|"url-cred"|"name"|"other",\n "suggestedSecretName": UPPER_SNAKE identifier,\n "suggestedDescription": short human description,\n "rationale": one short sentence }.\nDo NOT invent excerpts that are not present in the given text. If nothing\nqualifies, return [].'},{role:"user",content:JSON.stringify(g)}]})}catch(a){return d.push(`Model-driven pass failed: ${a instanceof Error?a.message:String(a)}`),{proposals:[],warnings:d}}if(!c?.success)return d.push(`Model-driven pass returned an error: ${c?.error?.message??"unknown error"}`),{proposals:[],warnings:d};let i=c.completion?.choices?.[0]?.message?.content??"",j=function(a){if("string"!=typeof a)return null;let b=a.trim(),c=/^```(?:json)?\s*([\s\S]*?)\s*```$/i.exec(b);c&&(b=c[1].trim());let d=a=>{try{let b=JSON.parse(a);return Array.isArray(b)?b:null}catch{return null}},e=d(b);if(e)return e;let f=b.indexOf("["),g=b.lastIndexOf("]");return f>=0&&g>f?d(b.slice(f,g+1)):null}("string"==typeof i?i:"");if(!j)return d.push("Model-driven pass returned no parseable JSON; ignoring its output."),{proposals:[],warnings:d};let n=[],o=new Set;for(let a of j){let b=function(a,b){var c;if(!a||"object"!=typeof a)return null;let d="string"==typeof a.location?a.location:"",e="string"==typeof a.excerpt?a.excerpt.trim():"";if(!d||!e)return null;let f=b.get(d);if(!f||!f.text.includes(e))return null;let g="string"==typeof(c=a.kind)&&k.includes(c)?c:"other",h="string"==typeof a.suggestedSecretName&&a.suggestedSecretName.trim()?m("SECRET",a.suggestedSecretName):x(g,e);return{id:l(d,e),location:d,excerpt:e,kind:g,source:"model",suggestedSecretName:h,suggestedDescription:"string"==typeof a.suggestedDescription?a.suggestedDescription.slice(0,200):void 0,rationale:"string"==typeof a.rationale?a.rationale.slice(0,200):void 0}}(a,h);if(!b)continue;let c=`${b.location} ${b.excerpt}`;o.has(c)||(o.add(c),n.push(b))}return{proposals:n,warnings:d}}async function A(a,b={}){let c=i(a),d=[],e=y(c,b),f=[];if(b.model){let a=await z(c,{modelIdentifier:b.model.modelIdentifier,completion:b.model.completion});f=a.proposals,d.push(...a.warnings)}return{proposals:function(a,b){let c=new Map,d=a=>`${a.location}\0${a.excerpt}`;for(let b of a)c.set(d(b),b);for(let a of b){let b=d(a);c.has(b)||c.set(b,a)}return Array.from(c.values())}(e,f),warnings:d}}function B(a,b){if("string"==typeof a)return b(a);if(Array.isArray(a))return a.map(a=>B(a,b));if(a&&"object"==typeof a){let c={};for(let[d,e]of Object.entries(a))c[d]=B(e,b);return c}return a}var C=c(74755);let D=(0,d.h)("backend/services/packages/buildPackage"),E=/\$\{global:([A-Za-z0-9_.-]+)\}/g;function F(a,b=new Set){if("string"==typeof a){let c=RegExp(E.source,"g");for(let d of a.matchAll(c))b.add(d[1]);return b}if(Array.isArray(a)){for(let c of a)F(c,b);return b}if(a&&"object"==typeof a)for(let c of Object.values(a))F(c,b);return b}function G(a,b){let c=new Set,d=new Set(a.flowIds),e=new Set(a.modelIds),f=new Set(a.plannedExecutionIds);for(let a of b.flows)d.has(a.id)&&F(a,c);for(let a of b.models)e.has(a.id)&&F(a,c);for(let a of b.plannedExecutions)f.has(a.id)&&F(a,c);for(let d of I(a.mcpServerNames,b.mcpServers).packaged){for(let a of[...d.envDeclarations,...d.headerDeclarations??[]])a.globalVar&&c.add(a.globalVar),a.globalTemplate&&F(a.globalTemplate,c);for(let a of d.argTemplates??[])F(a.value,c)}return Array.from(c,a=>({name:a,description:`Global variable ${a} required by this package`,required:!0,isSecret:b.globalVariables?.[a]?.isSecret===!0}))}function H(a,b){return a?Object.entries(a).map(([a,c])=>{let d="object"==typeof c&&null!==c&&"boolean"==typeof c.metadata?.isSecret,f=("string"==typeof c?c:c&&"object"==typeof c&&"string"==typeof c.value?c.value:void 0)??"",g=e.mQ.exec(f),h=F(f);return{name:a,isSecret:d?"object"==typeof c&&null!==c&&c.metadata?.isSecret===!0:b(a),...g?{globalVar:g[1]}:{},...!g&&h.size>0?{globalTemplate:f}:{}}}):[]}function I(a,b){let c=new Map(b.map(a=>[a.name,a])),d=[],e=[];for(let b of a){let a=c.get(b);if(!a){e.push(`MCP server "${b}" was not found.`);continue}let f=function(a){let b=a.source;if(!b||"local"===b.type)return null;switch(b.type){case"github":{let c=a._installCommand?.trim(),d=a._buildCommand?.trim();return{sourceType:"github",ref:b.repositoryUrl,...b.ref?{gitRef:b.ref}:{},...b.subdirectory?{subdirectory:b.subdirectory}:{},...c?{installCommand:c}:{},...d?{buildCommand:d}:{},name:a.name}}case"registry":return{sourceType:"registry",ref:b.registryName,name:a.name};case"marketplace":return{sourceType:"marketplace",ref:b.id,name:a.name};case"remote":return{sourceType:"remote",url:a.serverUrl??a.websocketUrl,name:a.name};default:return null}}(a);if(!f){e.push(`MCP server "${b}" is a local server and cannot be packaged. Re-install it from GitHub, the registry, the marketplace, or as a remote server, then try again.`);continue}if(a.launch){e.push(`MCP server "${b}" is a launch-and-connect server (it runs locally but speaks HTTP). Packages cannot carry its launch command yet, so it cannot be exported.`);continue}let g=H(a.headers,j.Hm),h="stdio"===a.transport&&Array.isArray(a.args)?a.args.flatMap((a,b)=>"string"==typeof a&&F(a).size>0?[{index:b,value:a}]:[]):[];d.push({name:a.name,transport:a.transport,...a.disabled?{disabled:!0}:{},...a.autoApprove&&a.autoApprove.length?{autoApprove:a.autoApprove}:{},...a.folder?{folder:a.folder}:{},installOrigin:f,envDeclarations:H(a.env,j.xc),...g.length?{headerDeclarations:g}:{},...h.length?{argTemplates:h}:{}})}return{packaged:d,errors:e}}function J(a,b){let c=`${a}_${b}`.toUpperCase().replace(/[^A-Z0-9_.-]+/g,"_").replace(/^_+|_+$/g,"")||`${a}_SECRET`;return e.IE.test(c)?c:`${a}_SECRET`}function K(a){let b=(a.ApiKey??"").trim();if(!b)return{ref:{kind:"none"}};let c=e.mQ.exec(b);if(c)return{ref:{kind:"global",var:c[1]}};let d=J("MODEL",a.displayName||a.name||a.id);return{ref:{kind:"secret",secret:d},secret:{name:d,description:`API key for model "${a.displayName||a.name}"`,required:!0}}}function L(a){let b=[],c=new Set,d=(a,d)=>{for(let e of d??[]){if(!e.isSecret||e.secretRef||e.globalVar||e.globalTemplate)continue;let d=J("MCP",`${a}_${e.name}`);e.secretRef=d,c.has(d)||(c.add(d),b.push({name:d,description:`Secret "${e.name}" for MCP server "${a}"`,required:!0}))}};for(let b of a)d(b.name,b.envDeclarations),d(b.name,b.headerDeclarations);return b}function M(a,b,c){let d=b.map(({ApiKey:a,...b})=>b),e=c.map(a=>{if(a.trigger?.type!=="webhook")return a;let{token:b,...c}=a.trigger;return{...a,trigger:c}});return(0,g.D)({flows:a,models:d,plannedExecutions:e}).map(a=>({name:a,description:`Secret "${a}" referenced by packaged content`,required:!0}))}function N(a,b){let c=new Map(b.flows.map(a=>[a.id,a])),d=new Map(b.models.map(a=>[a.id,a])),e=new Map(b.plannedExecutions.map(a=>[a.id,a])),f=[],g=new Set,h=a=>{a&&!g.has(a.name)&&(g.add(a.name),f.push(a))};for(let b of a.modelIds){let a=d.get(b);a&&h(K(a).secret)}for(let c of L(I(a.mcpServerNames,b.mcpServers).packaged))h(c);for(let b of M(a.flowIds.map(a=>c.get(a)).filter(a=>!!a),a.modelIds.map(a=>d.get(a)).filter(a=>!!a),a.plannedExecutionIds.map(a=>e.get(a)).filter(a=>!!a)))h(b);return f}async function O(){let{flowService:a}=await c.e(1114).then(c.bind(c,71114)),{modelService:b}=await Promise.all([c.e(8775),c.e(4165),c.e(3133),c.e(1114),c.e(8619),c.e(531),c.e(7798),c.e(2126),c.e(6702)]).then(c.bind(c,42740)),{loadServerConfigs:d}=await Promise.all([c.e(8775),c.e(244)]).then(c.bind(c,80244)),{getSchedulerService:e}=await Promise.all([c.e(5481),c.e(4314),c.e(8619),c.e(5354),c.e(4321)]).then(c.bind(c,65354)),{loadItem:f}=await Promise.resolve().then(c.bind(c,65445)),[g,h,i,j,k]=await Promise.all([a.loadFlows(),b.loadModels(),d(),e().list(),f(C.Zg.GLOBAL_ENV_VARS,{})]),l=Array.isArray(i)?i:[];return{flows:g,models:h,mcpServers:l,plannedExecutions:j.map(a=>a.execution),globalVariables:Object.fromEntries(Object.entries(k).map(([a,b])=>[a,{isSecret:"object"==typeof b&&null!==b&&b.metadata?.isSecret===!0||"string"==typeof b&&(b.startsWith("encrypted:")||b.startsWith("encrypted_failed:"))}]))}}async function P(a){let b=await O();return{resolved:function(a,b){let c=new Map(b.flows.map(a=>[a.id,a])),d=new Map(b.models.map(a=>[a.id,a])),e=new Map(b.mcpServers.map(a=>[a.name,a])),g=new Map(b.plannedExecutions.map(a=>[a.id,a])),h=new Set,i=new Set(a.modelIds??[]),j=new Set(a.mcpServerNames??[]),k=new Set(a.plannedExecutionIds??[]),l=[],m=[],n=new Set(a.flowIds??[]),o=new Set(a.modelIds??[]),p=new Set(a.mcpServerNames??[]);for(let a of k){let b=g.get(a);if(!b){m.push(`Planned execution "${a}" was not found and will be skipped.`);continue}!b.flowId||n.has(b.flowId)||h.has(b.flowId)||l.push({type:"flow",id:b.flowId,reason:`used by planned execution "${b.name}"`}),b.flowId&&n.add(b.flowId)}let q=new Set,r=Array.from(n);for(;r.length>0;){let a=r.shift();if(q.has(a))continue;q.add(a);let b=c.get(a);if(!b){m.push(`Referenced flow "${a}" was not found and will be skipped.`);continue}h.add(a);let g=(0,f.Xw)(b);for(let d of g.flowIds??[])q.has(d)||r.push(d),!n.has(d)&&d!==a&&(c.has(d)?l.some(a=>"flow"===a.type&&a.id===d)||l.push({type:"flow",id:d,reason:`subflow of "${b.name}"`}):m.push(`Flow "${b.name}" references missing subflow "${d}".`));for(let a of g.modelIds??[]){if(!d.has(a)){m.push(`Flow "${b.name}" references missing model "${a}".`);continue}!i.has(a)&&(i.add(a),o.has(a)||l.push({type:"model",id:a,reason:`used by flow "${b.name}"`}))}for(let a of g.mcpServerNames??[]){if(!e.has(a)){m.push(`Flow "${b.name}" references missing MCP server "${a}".`);continue}!j.has(a)&&(j.add(a),p.has(a)||l.push({type:"mcpServer",id:a,reason:`used by flow "${b.name}"`}))}}return{flowIds:Array.from(h),modelIds:Array.from(i),mcpServerNames:Array.from(j),plannedExecutionIds:Array.from(k),autoAdded:l,warnings:m}}(a,b),entities:b}}async function Q(a,b,c=[],d=[],g=[]){D.info(`Building package "${b.name}" v${b.version}`);let{resolved:h,entities:j}=await P(a);return function(a,b,c,d=[],g=[],h=[]){var j;let k,l=[],m=[...a.warnings],n=new Map(b.flows.map(a=>[a.id,a])),o=new Map(b.models.map(a=>[a.id,a])),p=new Map(b.plannedExecutions.map(a=>[a.id,a])),q=I(a.mcpServerNames,b.mcpServers);l.push(...q.errors);let r=new Set(h),s=[],t=new Set,u=a=>{a&&!t.has(a.name)&&(t.add(a.name),s.push(a))},v=a.modelIds.map(a=>o.get(a)).filter(a=>!!a),w=a.flowIds.map(a=>n.get(a)).filter(a=>!!a),x=a.plannedExecutionIds.map(a=>p.get(a)).filter(a=>!!a),z=v,A=w,C=x;if(d.length>0){let a=function(a,b){let c=[],d=b.filter(a=>!!a.excerpt&&(!!e.IE.test(a.secretName)||(c.push(`Skipped substitution with invalid secret name "${a.secretName}".`),!1))).sort((a,b)=>b.excerpt.length-a.excerpt.length),f=a=>{let b=a;for(let a of d)b.includes(a.excerpt)&&(b=b.split(a.excerpt).join(`{{secret.${a.secretName}}}`));return b},g={flows:a.flows.map(a=>B(a,f)),models:a.models.map(a=>B(a,f)),plannedExecutions:a.plannedExecutions.map(a=>B(a,f))},h=[],i=new Set;for(let a of d)i.has(a.secretName)||(i.add(a.secretName),h.push({name:a.secretName,description:a.description?f(a.description):`Derived secret ${a.secretName}`,required:!0}));return{entities:g,secrets:h,warnings:c}}({flows:A,models:v,plannedExecutions:x},d);for(let b of(z=a.entities.models,A=a.entities.flows,C=a.entities.plannedExecutions,m.push(...a.warnings),a.secrets))u(b)}let D=z.map(a=>{var b;let{ref:c,secret:d}=(b=K(a),b.secret&&r.has(b.secret.name)?{ref:{kind:"none"}}:b);return u(d),{model:a,apiKeyRef:c}});for(let a of L(q.packaged))u(a);for(let a of q.packaged)for(let b of[...a.envDeclarations,...a.headerDeclarations??[]])b.secretRef&&r.has(b.secretRef)&&delete b.secretRef;let E=M(A,z,C),H=new Set(E.map(a=>a.name));for(let a=s.length-1;a>=0;a-=1)r.has(s[a].name)&&!H.has(s[a].name)&&(t.delete(s[a].name),s.splice(a,1));for(let a of E)u(a);let J=new Set;for(let{apiKeyRef:a}of D)"global"===a.kind&&J.add(a.var);for(let a of q.packaged){for(let b of[...a.envDeclarations,...a.headerDeclarations??[]])b.globalVar&&J.add(b.globalVar),b.globalTemplate&&F(b.globalTemplate,J);for(let b of a.argTemplates??[])F(b.value,J)}let N=(j=G(a,b),k=new Map(g.map(a=>[a.name,a])),j.map(a=>{let b=k.get(a.name);return b?{...a,description:b.description?.trim()||a.description,required:!1!==b.required,isSecret:!0===b.isSecret}:a}));for(let a of N)a.required&&J.add(a.name);if(l.length>0)return{ok:!1,resolved:a,errors:l,warnings:m};try{let{json:b,package:e}=(0,f.Zp)({id:c.id,name:c.name,version:c.version,description:c.description,author:c.author,publisher:c.publisher,tags:c.tags,...J.size>0?{requiredGlobals:Array.from(J)}:{},...N.length>0?{globals:N}:{},secrets:s,models:D,mcpServers:q.packaged,flows:A,plannedExecutions:C}),g=(0,f.$j)(e);return g.warnings?.length&&m.push(...g.warnings),d.length>0&&m.push(...function(a,b={}){return y(i(a),b).map(a=>`Possible secret left in package at ${a.location}: "${a.excerpt}" (${a.kind}).`)}({flows:A,models:z,plannedExecutions:C})),{ok:!0,json:b,package:e,resolved:a,errors:l,warnings:m}}catch(b){return l.push(b instanceof Error?b.message:String(b)),{ok:!1,resolved:a,errors:l,warnings:m}}}(h,j,b,c.filter(a=>a.excerpt&&a.suggestedSecretName).map(a=>({excerpt:a.excerpt,secretName:a.suggestedSecretName,description:a.suggestedDescription})),d,g)}function R(a,b){let c=new Set(a.flowIds),d=new Set(a.modelIds),e=new Set(a.plannedExecutionIds);return{flows:b.flows.filter(a=>c.has(a.id)),models:b.models.filter(a=>d.has(a.id)),plannedExecutions:b.plannedExecutions.filter(a=>e.has(a.id))}}async function S(a,b={}){let{resolved:d,entities:e}=await P(a),f=R(d,e),g={entropyThreshold:b.entropyThreshold,enableEntropy:b.enableEntropy,enableRepoSlug:b.enableRepoSlug};if(b.modelIdentifier){let{modelService:a}=await Promise.all([c.e(8775),c.e(4165),c.e(3133),c.e(1114),c.e(8619),c.e(531),c.e(7798),c.e(2126),c.e(6702)]).then(c.bind(c,42740));g.model={modelIdentifier:b.modelIdentifier,completion:async b=>await a.generateChatCompletion({modelIdentifier:b.modelIdentifier,messages:b.messages,temperature:b.temperature})}}return A(f,g)}async function T(a){let{resolved:b,entities:c}=await P(a),d=i(R(b,c)),e=new Set,f=[];for(let a of d){if(e.has(a.text))continue;e.add(a.text);let b=a.location.split(":")[0]||"other";f.push({source:b,location:a.location,text:a.text})}return f.sort((a,b)=>b.text.length-a.text.length),f}},87182:(a,b,c)=>{c.d(b,{pZ:()=>l});var d=c(7986),e=c(66844),f=c(36103);let g=(0,e.h)("app/api/_workspace");class h extends Error{constructor(a,b){super(a),this.name="WorkspaceRequestError",this.status=b}}async function i(a){let b=function(a){let b=null;try{b=new URL(a.url).searchParams.get("workspace")}catch{}null===b&&(b=a.headers?.get?.("x-flujo-workspace")??null);try{return(0,d.normalizeWorkspaceName)(b)}catch(a){if(a instanceof d.InvalidWorkspaceNameError)throw new h("Invalid workspace name. Workspace names must match /^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/.",400);throw a}}(a);try{await (0,f.DP)()}catch(a){throw g.error("Workspace layout is not ready; refusing workspace request",a),new h("Workspace storage is temporarily unavailable while its layout is being prepared.",503)}if(!await (0,d.workspaceExists)(b))throw new h(`Unknown workspace: ${b}`,404);return b}function j(a){return new Response(JSON.stringify({error:a.message}),{status:a.status,headers:{"Content-Type":"application/json",...503===a.status?{"Retry-After":"5"}:{}}})}async function k(a,b){let c;try{c=await i(a)}catch(a){if(a instanceof h)return j(a);throw a}return(0,d.runWithWorkspace)(c,async()=>{try{await (0,d.ensureWorkspaceDirs)(c)}catch(a){return g.error(`Workspace ${c} has an unsafe or unavailable storage layout`,a),j(new h(`Workspace storage is unavailable: ${c}`,503))}return b(c)})}function l(a){return async(b,...c)=>{let d=b instanceof Request?b:new Request("http://localhost/"),e=b??d;return k(d,()=>Promise.resolve(a(e,...c)))}}}};
@@ -1 +1 @@
1
- "use strict";exports.id=244,exports.ids=[244],exports.modules={80244:(a,b,c)=>{c.r(b),c.d(b,{loadServerConfigs:()=>p,loadServerRoots:()=>q,saveConfig:()=>s});var d=c(33873),e=c.n(d),f=c(98775),g=c(65445),h=c(74755),i=c(66844),j=c(7986);let k=(0,i.h)("backend/services/mcp/config"),l=new Set(["streamable","sse","websocket"]),m=new Map;async function n(a){if(m.has(a))return m.get(a);let b=null;try{let c=(0,f.Ay)({baseDir:a,timeout:{block:5e3}});b=(await c.remote(["get-url","origin"])||"").trim()||null}catch{b=null}return m.set(a,b),b}async function o(a){var b;let c;if(l.has(a.transport))return{type:"remote"};let d="string"!=typeof(b=a.rootPath)||""===b.trim()?null:e().isAbsolute(b)?b:e().resolve((0,j.getWorkspaceDataDir)(),b);if(d&&""!==(c=e().relative(e().join((0,j.getWorkspaceDataDir)(),"mcp-servers"),d))&&!c.startsWith("..")&&!e().isAbsolute(c)){let a=await n(d);if(a)return{type:"github",repositoryUrl:a}}return{type:"local"}}async function p(){k.debug("Entering loadServerConfigs method");try{let a=await (0,g.loadItem)(h.Zg.MCP_SERVERS,{}),b=Object.entries(a).map(([a,b])=>{let c=b.transport||"stdio",d=a=>"string"==typeof a?(0,j.remapLegacyDefaultWorkspaceReference)(a,"mcp-servers"):a,e=a=>!a||"object"!=typeof a||Array.isArray(a)?a:Object.fromEntries(Object.entries(a).map(([a,b])=>"string"==typeof b?[a,d(b)]:b&&"object"==typeof b&&"string"==typeof b.value?[a,{...b,value:d(b.value)}]:[a,b]));b={...b,rootPath:d(b.rootPath),cwd:d(b.cwd),command:d(b.command),args:Array.isArray(b.args)?b.args.map(d):b.args,roots:Array.isArray(b.roots)?b.roots.map(d):b.roots,env:e(b.env),...Object.prototype.hasOwnProperty.call(b,"launch")?{launch:b.launch&&"object"==typeof b.launch?{...b.launch,command:d(b.launch.command),cwd:d(b.launch.cwd),args:Array.isArray(b.launch.args)?b.launch.args.map(d):b.launch.args,env:e(b.launch.env)}:b.launch}:{}},l.has(c)&&function(a){if("string"!=typeof a)return!1;let b=a.trim();return"/"===b||"\\"===b||/^[A-Za-z]:[\\/]?$/.test(b)}(b.rootPath)&&(k.info(`Normalizing filesystem-root rootPath "${b.rootPath}" of remote server ${a} to mcp-servers/${a}`),b={...b,rootPath:`mcp-servers/${a}`});let f={name:a,disabled:!1,autoApprove:[],rootPath:"",env:{},_buildCommand:"",_installCommand:""};return"streamable"===c?{...f,...b,name:a,requestInit:b.requestInit&&"object"==typeof b.requestInit?b.requestInit:void 0,reconnectionOptions:b.reconnectionOptions&&"object"==typeof b.reconnectionOptions?b.reconnectionOptions:void 0,sessionId:b.sessionId||void 0,oauthClientId:b.oauthClientId||"",oauthClientSecret:b.oauthClientSecret||"",oauthScopes:b.oauthScopes||(b.oauthClientId||b.oauthClientInformation?["read"]:void 0),oauthClientMetadata:b.oauthClientMetadata,oauthClientInformation:b.oauthClientInformation,oauthTokens:b.oauthTokens,oauthCodeVerifier:b.oauthCodeVerifier}:"sse"===c?{...f,...b,name:a,eventSourceInit:b.eventSourceInit&&"object"==typeof b.eventSourceInit?b.eventSourceInit:void 0,requestInit:b.requestInit&&"object"==typeof b.requestInit?b.requestInit:void 0}:"websocket"===c?{...f,...b,name:a,websocketUrl:b.websocketUrl||""}:{...f,...b,name:a,command:b.command||"",args:b.args||[],stderr:b.stderr||"pipe"}});return await Promise.all(b.map(async a=>{a.source||(a.source=await o(a))})),b}catch(a){return k.warn("Failed to load server configs",a),{success:!1,error:`Failed to load server configs: ${a instanceof Error?a.message:"Unknown error"}`}}}async function q(a){let b=await p();if(!Array.isArray(b))return[];let c=b.find(b=>b.name===a)?.roots;return Array.isArray(c)?c.filter(a=>"string"==typeof a):[]}let r=["_buildCommand","_installCommand","oauthClientId","oauthClientSecret"];async function s(a){k.debug("Entering saveConfig method");try{let b=Object.fromEntries(Array.from(a.entries()).map(([a,b])=>[a,function(a){let{name:b,...c}=a,d={};for(let[a,b]of Object.entries(c))void 0!==b&&(""===b&&r.includes(a)||(d[a]=b));return d}(b)]));return await (0,g.VH)(h.Zg.MCP_SERVERS,b),{success:!0}}catch(a){return k.warn("Failed to save config",a),{success:!1,error:`Failed to save config: ${a instanceof Error?a.message:"Unknown error"}`}}}}};
1
+ "use strict";exports.id=244,exports.ids=[244],exports.modules={80244:(a,b,c)=>{c.r(b),c.d(b,{loadServerConfigs:()=>p,loadServerRoots:()=>q,saveConfig:()=>s});var d=c(33873),e=c.n(d),f=c(98775),g=c(65445),h=c(74755),i=c(66844),j=c(7986);let k=(0,i.h)("backend/services/mcp/config"),l=new Set(["streamable","sse","websocket"]),m=new Map;async function n(a){if(m.has(a))return m.get(a);let b=null;try{let c=(0,f.Ay)({baseDir:a,timeout:{block:5e3}});b=(await c.remote(["get-url","origin"])||"").trim()||null}catch{b=null}return m.set(a,b),b}async function o(a){var b;let c;if(l.has(a.transport))return{type:"remote"};let d="string"!=typeof(b=a.rootPath)||""===b.trim()?null:e().isAbsolute(b)?b:e().resolve((0,j.getWorkspaceDataDir)(),b);if(d&&""!==(c=e().relative(e().join((0,j.getWorkspaceDataDir)(),"mcp-servers"),d))&&!c.startsWith("..")&&!e().isAbsolute(c)){let a=await n(d);if(a)return{type:"github",repositoryUrl:a}}return{type:"local"}}async function p(){k.debug("Entering loadServerConfigs method");try{let a=await (0,g.loadItem)(h.Zg.MCP_SERVERS,{}),b=Object.entries(a).map(([a,b])=>{let c=b.transport||"stdio",d=a=>"string"==typeof a?(0,j.remapLegacyDefaultWorkspaceReference)(a,"mcp-servers"):a,e=a=>!a||"object"!=typeof a||Array.isArray(a)?a:Object.fromEntries(Object.entries(a).map(([a,b])=>"string"==typeof b?[a,d(b)]:b&&"object"==typeof b&&"string"==typeof b.value?[a,{...b,value:d(b.value)}]:[a,b]));b={...b,rootPath:d(b.rootPath),cwd:d(b.cwd),command:d(b.command),args:Array.isArray(b.args)?b.args.map(d):b.args,roots:Array.isArray(b.roots)?b.roots.map(d):b.roots,env:e(b.env),...Object.prototype.hasOwnProperty.call(b,"launch")?{launch:b.launch&&"object"==typeof b.launch?{...b.launch,command:d(b.launch.command),cwd:d(b.launch.cwd),args:Array.isArray(b.launch.args)?b.launch.args.map(d):b.launch.args,env:e(b.launch.env)}:b.launch}:{}},l.has(c)&&function(a){if("string"!=typeof a)return!1;let b=a.trim();return"/"===b||"\\"===b||/^[A-Za-z]:[\\/]?$/.test(b)}(b.rootPath)&&(k.info(`Normalizing filesystem-root rootPath "${b.rootPath}" of remote server ${a} to mcp-servers/${a}`),b={...b,rootPath:`mcp-servers/${a}`});let f=b.source?.type;"stdio"===c&&"string"==typeof b.rootPath&&"."===b.rootPath.trim()&&("registry"===f||"marketplace"===f)&&/^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/.test(a)&&(k.info(`Normalizing shared Registry rootPath "." of ${a} to mcp-servers/${a}`),b={...b,rootPath:`mcp-servers/${a}`});let g={name:a,disabled:!1,autoApprove:[],rootPath:"",env:{},_buildCommand:"",_installCommand:""};return"streamable"===c?{...g,...b,name:a,requestInit:b.requestInit&&"object"==typeof b.requestInit?b.requestInit:void 0,reconnectionOptions:b.reconnectionOptions&&"object"==typeof b.reconnectionOptions?b.reconnectionOptions:void 0,sessionId:b.sessionId||void 0,oauthClientId:b.oauthClientId||"",oauthClientSecret:b.oauthClientSecret||"",oauthScopes:b.oauthScopes||(b.oauthClientId||b.oauthClientInformation?["read"]:void 0),oauthClientMetadata:b.oauthClientMetadata,oauthClientInformation:b.oauthClientInformation,oauthTokens:b.oauthTokens,oauthCodeVerifier:b.oauthCodeVerifier}:"sse"===c?{...g,...b,name:a,eventSourceInit:b.eventSourceInit&&"object"==typeof b.eventSourceInit?b.eventSourceInit:void 0,requestInit:b.requestInit&&"object"==typeof b.requestInit?b.requestInit:void 0}:"websocket"===c?{...g,...b,name:a,websocketUrl:b.websocketUrl||""}:{...g,...b,name:a,command:b.command||"",args:b.args||[],stderr:b.stderr||"pipe"}});return await Promise.all(b.map(async a=>{a.source||(a.source=await o(a))})),b}catch(a){return k.warn("Failed to load server configs",a),{success:!1,error:`Failed to load server configs: ${a instanceof Error?a.message:"Unknown error"}`}}}async function q(a){let b=await p();if(!Array.isArray(b))return[];let c=b.find(b=>b.name===a)?.roots;return Array.isArray(c)?c.filter(a=>"string"==typeof a):[]}let r=["_buildCommand","_installCommand","oauthClientId","oauthClientSecret"];async function s(a){k.debug("Entering saveConfig method");try{let b=Object.fromEntries(Array.from(a.entries()).map(([a,b])=>[a,function(a){let{name:b,...c}=a,d={};for(let[a,b]of Object.entries(c))void 0!==b&&(""===b&&r.includes(a)||(d[a]=b));return d}(b)]));return await (0,g.VH)(h.Zg.MCP_SERVERS,b),{success:!0}}catch(a){return k.warn("Failed to save config",a),{success:!1,error:`Failed to save config: ${a instanceof Error?a.message:"Unknown error"}`}}}}};
@@ -1 +1 @@
1
- "use strict";exports.id=2728,exports.ids=[2728],exports.modules={26790:(a,b,c)=>{c.d(b,{ED:()=>i,Ws:()=>j,jD:()=>g});var d=c(73496),e=c.n(d);let f=(0,c(66844).h)("backend/utils/registryClient"),g="https://registry.modelcontextprotocol.io";async function h(a,b){let c=new AbortController,d=setTimeout(()=>c.abort(),b);try{let b=await fetch(a,{headers:{Accept:"application/json"},signal:c.signal,cache:"no-store"});return{status:b.status,body:await b.text()}}finally{clearTimeout(d)}}async function i(a,b){try{return await new Promise((c,d)=>{let f=e().connect(a.origin),g=!1,h=a=>{g||(g=!0,a(),f.close())};f.setTimeout(b,()=>h(()=>d(Error(`HTTP/2 session timed out after ${b}ms`)))),f.on("error",a=>h(()=>d(a)));let i=f.request({":method":"GET",":path":a.pathname+a.search,accept:"application/json"});i.setTimeout(b,()=>h(()=>d(Error(`HTTP/2 request timed out after ${b}ms`)))),i.on("error",a=>h(()=>d(a)));let j=0,k="";i.setEncoding("utf8"),i.on("response",a=>{j=Number(a[":status"]||0)}),i.on("data",a=>{k+=a}),i.on("end",()=>h(()=>c({status:j,body:k}))),i.end()})}catch(c){return f.warn("HTTP/2 request to registry failed, retrying over HTTP/1.1",c instanceof Error?c.message:c),await h(a,b)}}async function j(a,b){let c=await i(a,b);if(c.status<200||c.status>=300)throw Error(`MCP Registry responded with status ${c.status}`);return JSON.parse(c.body)}},76145:(a,b,c)=>{function d(a){return"manual-launch"!==a.kind}c.d(b,{AH:()=>h,O$:()=>t,P1:()=>d,XQ:()=>u,Yr:()=>q,cy:()=>w,jg:()=>x,nO:()=>r,q7:()=>j,vf:()=>s,zz:()=>v});let e={npm:"npx",pypi:"uvx",oci:"docker",nuget:"dnx"},f={npm:"npm",pypi:"PyPI",oci:"Docker",nuget:"NuGet",mcpb:"MCPB",cargo:"Cargo"};function g(a){return""!==a&&/^[A-Za-z0-9_@%+=:,./-]+$/.test(a)?a:`"${a.replace(/(["$`\\])/g,"\\$1")}"`}function h(a){var b;let c=[],d=[];for(let h of a.packages??[]){let a=function(a){if(!a.identifier)return{supported:!1,reason:"no-identifier"};if(!e[a.registryType]&&!a.runtimeHint)return{supported:!1,reason:"unknown-runner"};let b=a.transport?.type;return b&&"stdio"!==b?"streamable-http"===b||"sse"===b?{supported:!1,reason:"launch-and-connect"}:{supported:!1,reason:"unknown-transport"}:{supported:!0}}(h);a.supported?c.push({kind:"package",label:`${f[b=h.registryType]||b}: ${h.identifier}`,pkg:h}):"launch-and-connect"===a.reason&&d.push(function(a){var b;let{command:c,args:d}=p(a,{envFlags:"inline"}),e=a.transport?.type==="sse"?"sse":"streamable",h=a.transport?.url,i={kind:"manual-launch",label:`${f[b=a.registryType]||b}: ${a.identifier} (manual start)`,pkg:a,transport:e,runLine:[c,...d].map(g).join(" ")};if(!h)return{...i,urlError:"missing-url",urlErrorDetail:"no transport.url declared"};let j=function(a,b){let c,d=[],e=a.replace(/\{([^{}]+)\}/g,(a,c)=>{let e=b.args[c]??b.env[c];return void 0===e||""===e?(d.push(c),""):e});if(d.length>0)return{error:"unresolved-placeholder",detail:d.join(", ")};try{c=new URL(e)}catch{return{error:"invalid-url",detail:e}}return/^https?:$/.test(c.protocol)?!function(a){let b=a.toLowerCase().replace(/^\[/,"").replace(/\]$/,"");if("localhost"===b||"::1"===b||"0:0:0:0:0:0:0:1"===b)return!0;let c=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(b);if(!c)return!1;let d=c.slice(1,5).map(Number);return!d.some(a=>a>255)&&127===d[0]}(c.hostname)?{error:"non-loopback",detail:c.hostname}:{url:c.toString()}:{error:"invalid-url",detail:e}}(h,{env:function(a){let b={};for(let c of a??[]){if(!c.name)continue;let a=c.value??c.default;void 0!==a&&""!==a&&(b[c.name]=a)}return b}(a.environmentVariables),args:{...m(a.runtimeArguments),...m(a.packageArguments)}});return"url"in j?{...i,resolvedUrl:j.url}:{...i,urlError:j.error,urlErrorDetail:j.detail}}(h))}for(let b of a.remotes??[])b.url&&("streamable-http"===b.type||"sse"===b.type)&&c.push({kind:"remote",label:`Remote (${"sse"===b.type?"SSE":"Streamable HTTP"}): ${b.url}`,remote:b});return[...c,...d]}let i=new Set(["mcp","server","mcp-server","mcpserver"]);function j(a){return(function(a){let b=a.indexOf("/"),c=b>=0?a.slice(0,b):"",d=b>=0?a.slice(b+1):a;if(!i.has(d.toLowerCase())||!c)return d;let e=c.split(".").reverse().find(a=>a&&!i.has(a.toLowerCase()))||"";return e?`${e}-${d}`:d})(a).replace(/[^a-zA-Z0-9_-]+/g,"-").replace(/^-+|-+$/g,"")||"mcp-server"}function k(a){let b=a.value??a.default;return"named"===a.type?a.name?void 0!==b&&""!==b?[a.name,b]:a.isRequired&&a.valueHint?[a.name,`<${a.valueHint}>`]:a.isRequired?[a.name]:[]:[]:void 0!==b&&""!==b?[b]:a.isRequired?[`<${a.valueHint||"value"}>`]:[]}function l(a){return(a??[]).flatMap(k)}function m(a){let b={};for(let c of a??[]){if("named"!==c.type||!c.name)continue;let a=c.value??c.default;void 0!==a&&""!==a&&(b[c.name]=a)}return b}function n(a){let b=(a.icons??[]).flatMap(a=>{if(!a?.src)return[];try{if(!/^https?:$/.test(new URL(a.src).protocol))return[]}catch{return[]}return[{src:a.src,...a.sizes?{sizes:a.sizes}:{},...a.mimeType?{mimeType:a.mimeType}:{},..."light"===a.theme||"dark"===a.theme?{theme:a.theme}:{}}]});return{name:j(a.name),disabled:!1,autoApprove:[],env:{},_buildCommand:"",_installCommand:"",...b.length>0?{icons:b}:{}}}function o(a){return a.version?`${a.identifier}@${a.version}`:a.identifier}function p(a,b={}){let c,d=a.runtimeHint||e[a.registryType],f=l(a.packageArguments),g=l(a.runtimeArguments),h=function(a){let b={};for(let c of a??[]){if(!c.name)continue;let a=c.value??c.default??"";b[c.name]=c.isSecret?{value:a,metadata:{isSecret:!0}}:a}return b}(a.environmentVariables);switch(a.registryType){case"npm":c=[...g,"-y",o(a),...f];break;case"pypi":c=[...g,a.version?`${a.identifier}==${a.version}`:a.identifier,...f];break;case"oci":{let d,e="inline"===b.envFlags?function(a){let b=[];for(let c of a??[]){if(!c.name)continue;let a=c.value??c.default,d=!c.isSecret&&void 0!==a&&""!==a;b.push("-e",`${c.name}=${d?a:`<${c.name}>`}`)}return b}(a.environmentVariables):Object.keys(h).flatMap(a=>["-e",a]);c=[..."run"===g[0]?[]:["run","-i","--rm"],...g,...e,!((d=a.identifier.split("/").pop()||a.identifier).includes(":")||d.includes("@"))&&a.version?`${a.identifier}:${a.version}`:a.identifier,...f];break}case"nuget":c=[...g,o(a),"--yes",...f];break;default:c=[...g,o(a),...f]}return{command:d,args:c,env:h}}function q(a,b){let c="package"===b.kind?function(a,b){let{command:c,args:d,env:e}=p(b);return{...n(a),transport:"stdio",command:c,args:d,env:e,rootPath:"."}}(a,b.pkg):"manual-launch"===b.kind?function(a,b){let{command:c,args:d,env:e}=p(b.pkg),f={command:c,...d.length>0?{args:d}:{},...Object.keys(e).length>0?{env:e}:{}};return{...n(a),transport:b.transport,serverUrl:b.resolvedUrl??"",headers:{},env:e,launch:f,rootPath:"."}}(a,b):function(a,b){let c={};for(let a of b.headers??[])a.name&&(c[a.name]=a.value??a.default??"");let d=n(a);return{...d,transport:"sse"===b.type?"sse":"streamable",serverUrl:b.url,headers:c,rootPath:`mcp-servers/${d.name}`}}(a,b.remote),d="remote"===b.kind?a.version:b.pkg.version??a.version,e={type:"registry",registryName:a.name,...d?{version:d}:{}};return{...c,source:e}}function r(a){return"active"===a}function s(a){let b=a?._meta?.["io.modelcontextprotocol.registry/official"]?.status;return"string"==typeof b&&b.length>0?b:"unverified"}function t(a,b,c,d){let e=q(b,c),f=e.transport??"stdio";return{registryName:a,resolvedName:b.name,serverName:e.name??j(b.name),transport:f,...e.command?{command:e.command}:{},...Array.isArray(e.args)?{args:e.args}:{},...e.serverUrl?{serverUrl:e.serverUrl}:{},requiredEnvNames:"remote"===c.kind?(c.remote.headers??[]).filter(a=>a.isRequired&&a.name).map(a=>a.name):(c.pkg.environmentVariables??[]).filter(a=>a.isRequired&&a.name).map(a=>a.name),verificationStatus:d}}function u(a){let b;try{b=new URL(a)}catch{return null}let c=b.searchParams.get("q");if(c)return`/v0.1/servers?search=${encodeURIComponent(c)}&version=latest&limit=1`;if(/^\/v[\d.]+\/servers\/[^/]+\/versions\/[^/]+$/.test(b.pathname))return b.pathname;let d=b.pathname.match(/^\/v[\d.]+\/servers\/([^/]+)(?:\/versions)?\/?$/);if(d){let a=decodeURIComponent(d[1]);return`/v0.1/servers?search=${encodeURIComponent(a)}&version=latest&limit=1`}return null}function v(a){return a?.servers&&a.servers.length>0?a.servers[0]:a?.server?.name?a:null}function w(a,b){if(!b||0===Object.keys(b).length)return a;let c={...a.env??{}};for(let[a,d]of Object.entries(b)){let b=c[a];b&&"object"==typeof b&&b.metadata?.isSecret?c[a]={value:d,metadata:{isSecret:!0}}:c[a]=d}return{...a,env:c}}function x(a,b){return"remote"===a.kind?(a.remote.headers??[]).filter(a=>a.isRequired&&!(a.value??a.default)&&!b?.[a.name]).map(a=>a.name):(a.pkg.environmentVariables??[]).filter(a=>a.isRequired&&!(a.value??a.default)&&!b?.[a.name]).map(a=>a.name)}}};
1
+ "use strict";exports.id=2728,exports.ids=[2728],exports.modules={26790:(a,b,c)=>{c.d(b,{ED:()=>i,Ws:()=>j,jD:()=>g});var d=c(73496),e=c.n(d);let f=(0,c(66844).h)("backend/utils/registryClient"),g="https://registry.modelcontextprotocol.io";async function h(a,b){let c=new AbortController,d=setTimeout(()=>c.abort(),b);try{let b=await fetch(a,{headers:{Accept:"application/json"},signal:c.signal,cache:"no-store"});return{status:b.status,body:await b.text()}}finally{clearTimeout(d)}}async function i(a,b){try{return await new Promise((c,d)=>{let f=e().connect(a.origin),g=!1,h=a=>{g||(g=!0,a(),f.close())};f.setTimeout(b,()=>h(()=>d(Error(`HTTP/2 session timed out after ${b}ms`)))),f.on("error",a=>h(()=>d(a)));let i=f.request({":method":"GET",":path":a.pathname+a.search,accept:"application/json"});i.setTimeout(b,()=>h(()=>d(Error(`HTTP/2 request timed out after ${b}ms`)))),i.on("error",a=>h(()=>d(a)));let j=0,k="";i.setEncoding("utf8"),i.on("response",a=>{j=Number(a[":status"]||0)}),i.on("data",a=>{k+=a}),i.on("end",()=>h(()=>c({status:j,body:k}))),i.end()})}catch(c){return f.warn("HTTP/2 request to registry failed, retrying over HTTP/1.1",c instanceof Error?c.message:c),await h(a,b)}}async function j(a,b){let c=await i(a,b);if(c.status<200||c.status>=300)throw Error(`MCP Registry responded with status ${c.status}`);return JSON.parse(c.body)}},76145:(a,b,c)=>{function d(a){return"manual-launch"!==a.kind}c.d(b,{AH:()=>h,O$:()=>t,P1:()=>d,XQ:()=>u,Yr:()=>q,cy:()=>w,jg:()=>x,nO:()=>r,q7:()=>j,vf:()=>s,zz:()=>v});let e={npm:"npx",pypi:"uvx",oci:"docker",nuget:"dnx"},f={npm:"npm",pypi:"PyPI",oci:"Docker",nuget:"NuGet",mcpb:"MCPB",cargo:"Cargo"};function g(a){return""!==a&&/^[A-Za-z0-9_@%+=:,./-]+$/.test(a)?a:`"${a.replace(/(["$`\\])/g,"\\$1")}"`}function h(a){var b;let c=[],d=[];for(let h of a.packages??[]){let a=function(a){if(!a.identifier)return{supported:!1,reason:"no-identifier"};if(!e[a.registryType]&&!a.runtimeHint)return{supported:!1,reason:"unknown-runner"};let b=a.transport?.type;return b&&"stdio"!==b?"streamable-http"===b||"sse"===b?{supported:!1,reason:"launch-and-connect"}:{supported:!1,reason:"unknown-transport"}:{supported:!0}}(h);a.supported?c.push({kind:"package",label:`${f[b=h.registryType]||b}: ${h.identifier}`,pkg:h}):"launch-and-connect"===a.reason&&d.push(function(a){var b;let{command:c,args:d}=p(a,{envFlags:"inline"}),e=a.transport?.type==="sse"?"sse":"streamable",h=a.transport?.url,i={kind:"manual-launch",label:`${f[b=a.registryType]||b}: ${a.identifier} (manual start)`,pkg:a,transport:e,runLine:[c,...d].map(g).join(" ")};if(!h)return{...i,urlError:"missing-url",urlErrorDetail:"no transport.url declared"};let j=function(a,b){let c,d=[],e=a.replace(/\{([^{}]+)\}/g,(a,c)=>{let e=b.args[c]??b.env[c];return void 0===e||""===e?(d.push(c),""):e});if(d.length>0)return{error:"unresolved-placeholder",detail:d.join(", ")};try{c=new URL(e)}catch{return{error:"invalid-url",detail:e}}return/^https?:$/.test(c.protocol)?!function(a){let b=a.toLowerCase().replace(/^\[/,"").replace(/\]$/,"");if("localhost"===b||"::1"===b||"0:0:0:0:0:0:0:1"===b)return!0;let c=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(b);if(!c)return!1;let d=c.slice(1,5).map(Number);return!d.some(a=>a>255)&&127===d[0]}(c.hostname)?{error:"non-loopback",detail:c.hostname}:{url:c.toString()}:{error:"invalid-url",detail:e}}(h,{env:function(a){let b={};for(let c of a??[]){if(!c.name)continue;let a=c.value??c.default;void 0!==a&&""!==a&&(b[c.name]=a)}return b}(a.environmentVariables),args:{...m(a.runtimeArguments),...m(a.packageArguments)}});return"url"in j?{...i,resolvedUrl:j.url}:{...i,urlError:j.error,urlErrorDetail:j.detail}}(h))}for(let b of a.remotes??[])b.url&&("streamable-http"===b.type||"sse"===b.type)&&c.push({kind:"remote",label:`Remote (${"sse"===b.type?"SSE":"Streamable HTTP"}): ${b.url}`,remote:b});return[...c,...d]}let i=new Set(["mcp","server","mcp-server","mcpserver"]);function j(a){return(function(a){let b=a.indexOf("/"),c=b>=0?a.slice(0,b):"",d=b>=0?a.slice(b+1):a;if(!i.has(d.toLowerCase())||!c)return d;let e=c.split(".").reverse().find(a=>a&&!i.has(a.toLowerCase()))||"";return e?`${e}-${d}`:d})(a).replace(/[^a-zA-Z0-9_-]+/g,"-").replace(/^-+|-+$/g,"")||"mcp-server"}function k(a){let b=a.value??a.default;return"named"===a.type?a.name?void 0!==b&&""!==b?[a.name,b]:a.isRequired&&a.valueHint?[a.name,`<${a.valueHint}>`]:a.isRequired?[a.name]:[]:[]:void 0!==b&&""!==b?[b]:a.isRequired?[`<${a.valueHint||"value"}>`]:[]}function l(a){return(a??[]).flatMap(k)}function m(a){let b={};for(let c of a??[]){if("named"!==c.type||!c.name)continue;let a=c.value??c.default;void 0!==a&&""!==a&&(b[c.name]=a)}return b}function n(a){let b=(a.icons??[]).flatMap(a=>{if(!a?.src)return[];try{if(!/^https?:$/.test(new URL(a.src).protocol))return[]}catch{return[]}return[{src:a.src,...a.sizes?{sizes:a.sizes}:{},...a.mimeType?{mimeType:a.mimeType}:{},..."light"===a.theme||"dark"===a.theme?{theme:a.theme}:{}}]});return{name:j(a.name),disabled:!1,autoApprove:[],env:{},_buildCommand:"",_installCommand:"",...b.length>0?{icons:b}:{}}}function o(a){return a.version?`${a.identifier}@${a.version}`:a.identifier}function p(a,b={}){let c,d=a.runtimeHint||e[a.registryType],f=l(a.packageArguments),g=l(a.runtimeArguments),h=function(a){let b={};for(let c of a??[]){if(!c.name)continue;let a=c.value??c.default??"";b[c.name]=c.isSecret?{value:a,metadata:{isSecret:!0}}:a}return b}(a.environmentVariables);switch(a.registryType){case"npm":c=[...g,"-y",o(a),...f];break;case"pypi":c=[...g,a.version?`${a.identifier}==${a.version}`:a.identifier,...f];break;case"oci":{let d,e="inline"===b.envFlags?function(a){let b=[];for(let c of a??[]){if(!c.name)continue;let a=c.value??c.default,d=!c.isSecret&&void 0!==a&&""!==a;b.push("-e",`${c.name}=${d?a:`<${c.name}>`}`)}return b}(a.environmentVariables):Object.keys(h).flatMap(a=>["-e",a]);c=[..."run"===g[0]?[]:["run","-i","--rm"],...g,...e,!((d=a.identifier.split("/").pop()||a.identifier).includes(":")||d.includes("@"))&&a.version?`${a.identifier}:${a.version}`:a.identifier,...f];break}case"nuget":c=[...g,o(a),"--yes",...f];break;default:c=[...g,o(a),...f]}return{command:d,args:c,env:h}}function q(a,b){let c="package"===b.kind?function(a,b){let{command:c,args:d,env:e}=p(b),f=n(a);return{...f,transport:"stdio",command:c,args:d,env:e,rootPath:`mcp-servers/${f.name}`}}(a,b.pkg):"manual-launch"===b.kind?function(a,b){let{command:c,args:d,env:e}=p(b.pkg),f=n(a),g={command:c,...d.length>0?{args:d}:{},...Object.keys(e).length>0?{env:e}:{}};return{...f,transport:b.transport,serverUrl:b.resolvedUrl??"",headers:{},env:e,launch:g,rootPath:`mcp-servers/${f.name}`}}(a,b):function(a,b){let c={};for(let a of b.headers??[])a.name&&(c[a.name]=a.value??a.default??"");let d=n(a);return{...d,transport:"sse"===b.type?"sse":"streamable",serverUrl:b.url,headers:c,rootPath:`mcp-servers/${d.name}`}}(a,b.remote),d="remote"===b.kind?a.version:b.pkg.version??a.version,e={type:"registry",registryName:a.name,...d?{version:d}:{}};return{...c,source:e}}function r(a){return"active"===a}function s(a){let b=a?._meta?.["io.modelcontextprotocol.registry/official"]?.status;return"string"==typeof b&&b.length>0?b:"unverified"}function t(a,b,c,d){let e=q(b,c),f=e.transport??"stdio";return{registryName:a,resolvedName:b.name,serverName:e.name??j(b.name),transport:f,...e.command?{command:e.command}:{},...Array.isArray(e.args)?{args:e.args}:{},...e.serverUrl?{serverUrl:e.serverUrl}:{},requiredEnvNames:"remote"===c.kind?(c.remote.headers??[]).filter(a=>a.isRequired&&a.name).map(a=>a.name):(c.pkg.environmentVariables??[]).filter(a=>a.isRequired&&a.name).map(a=>a.name),verificationStatus:d}}function u(a){let b;try{b=new URL(a)}catch{return null}let c=b.searchParams.get("q");if(c)return`/v0.1/servers?search=${encodeURIComponent(c)}&version=latest&limit=1`;if(/^\/v[\d.]+\/servers\/[^/]+\/versions\/[^/]+$/.test(b.pathname))return b.pathname;let d=b.pathname.match(/^\/v[\d.]+\/servers\/([^/]+)(?:\/versions)?\/?$/);if(d){let a=decodeURIComponent(d[1]);return`/v0.1/servers?search=${encodeURIComponent(a)}&version=latest&limit=1`}return null}function v(a){return a?.servers&&a.servers.length>0?a.servers[0]:a?.server?.name?a:null}function w(a,b){if(!b||0===Object.keys(b).length)return a;let c={...a.env??{}};for(let[a,d]of Object.entries(b)){let b=c[a];b&&"object"==typeof b&&b.metadata?.isSecret?c[a]={value:d,metadata:{isSecret:!0}}:c[a]=d}return{...a,env:c}}function x(a,b){return"remote"===a.kind?(a.remote.headers??[]).filter(a=>a.isRequired&&!(a.value??a.default)&&!b?.[a.name]).map(a=>a.name):(a.pkg.environmentVariables??[]).filter(a=>a.isRequired&&!(a.value??a.default)&&!b?.[a.name]).map(a=>a.name)}}};
@@ -5,6 +5,6 @@ ${b.condition}
5
5
  Tool result (untrusted data):
6
6
  \`\`\`json
7
7
  ${m}
8
- \`\`\``;try{let c="llm-gate"===b.mode?await j(b.modelId,n):await k(b.flowId,n),g=function(a){let b=a.match(/\{[\s\S]*\}/);if(!b)return null;try{let a=JSON.parse(b[0]);if("boolean"!=typeof a?.fire)return null;return{fire:a.fire,reason:"string"==typeof a.reason?a.reason:""}}catch{return null}}(c);if(!g)return f.warn(`Gate returned unparseable output: ${c.slice(0,200)}`),{fire:!1,newState:{lastHash:d,...l},error:"The AI check returned an unreadable answer — did not run the flow"};if(!g.fire)return{fire:!1,newState:{lastHash:d,...l}};return{fire:!0,summary:"flow-gate"===b.mode?"Flow condition met":"AI condition met",context:{result:(0,e.Je)(a),aiReason:g.reason},newState:{lastHash:d,...l}}}catch(b){let a=b instanceof Error?b.message:String(b);return f.warn(`Gate check failed: ${a}`),{fire:!1,newState:a.startsWith("config:")?{lastHash:d}:l,error:a.replace(/^config:\s*/,"")}}}async function j(a,b){let{modelService:d}=await Promise.resolve().then(c.bind(c,14493)),{getCompletionAdapter:e}=await Promise.resolve().then(c.bind(c,196)),{normalizeMaxTokens:f}=await Promise.resolve().then(c.bind(c,70690)),g=await d.getModel(a);if(!g)throw Error(`config: The AI-check model no longer exists (${a})`);let i=await d.resolveAndDecryptApiKey(g.ApiKey);if(!i)throw Error("config: Could not resolve the AI-check model API key");let j=e(g),{completion:k}=await j.createCompletion({model:g,apiKey:i,temperature:0,maxTokens:f(g.maxTokens),messages:[{role:"system",content:h},{role:"user",content:b}]}),l=k.choices?.[0]?.message?.content;return"string"==typeof l?l:""}async function k(a,b){let{runFlow:d}=await c.e(3112).then(c.bind(c,53112)),e=await d({flowId:a,prompt:`${b}
8
+ \`\`\``;try{let c="llm-gate"===b.mode?await j(b.modelId,n):await k(b.flowId,n),g=function(a){let b=a.match(/\{[\s\S]*\}/);if(!b)return null;try{let a=JSON.parse(b[0]);if("boolean"!=typeof a?.fire)return null;return{fire:a.fire,reason:"string"==typeof a.reason?a.reason:""}}catch{return null}}(c);if(!g)return f.warn(`Gate returned unparseable output: ${c.slice(0,200)}`),{fire:!1,newState:{lastHash:d,...l},error:"The AI check returned an unreadable answer — did not run the flow"};if(!g.fire)return{fire:!1,newState:{lastHash:d,...l}};return{fire:!0,summary:"flow-gate"===b.mode?"Flow condition met":"AI condition met",context:{result:(0,e.Je)(a),aiReason:g.reason},newState:{lastHash:d,...l}}}catch(b){let a=b instanceof Error?b.message:String(b);return f.warn(`Gate check failed: ${a}`),{fire:!1,newState:a.startsWith("config:")?{lastHash:d}:l,error:a.replace(/^config:\s*/,"")}}}async function j(a,b){let{modelService:d}=await Promise.resolve().then(c.bind(c,14493)),{getCompletionAdapter:e}=await Promise.resolve().then(c.bind(c,95879)),{normalizeMaxTokens:f}=await Promise.resolve().then(c.bind(c,70690)),g=await d.getModel(a);if(!g)throw Error(`config: The AI-check model no longer exists (${a})`);let i=await d.resolveAndDecryptApiKey(g.ApiKey);if(!i)throw Error("config: Could not resolve the AI-check model API key");let j=e(g),{completion:k}=await j.createCompletion({model:g,apiKey:i,temperature:0,maxTokens:f(g.maxTokens),messages:[{role:"system",content:h},{role:"user",content:b}]}),l=k.choices?.[0]?.message?.content;return"string"==typeof l?l:""}async function k(a,b){let{runFlow:d}=await c.e(3112).then(c.bind(c,53112)),e=await d({flowId:a,prompt:`${b}
9
9
 
10
10
  ${g}`,source:"trigger",mode:"ephemeral",requireApproval:!1,debug:!1,userTurn:!0});if("completed"!==e.status)throw Error(e.error?.message??`The checker flow ended with status "${e.status}"`);return e.outputText??""}}};