flujo-ai 3.35.0 → 3.38.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 (174) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +130 -130
  3. package/.next/app-path-routes-manifest.json +19 -19
  4. package/.next/build-manifest.json +2 -2
  5. package/.next/prerender-manifest.json +21 -21
  6. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  7. package/.next/server/app/_not-found.html +1 -1
  8. package/.next/server/app/_not-found.rsc +1 -1
  9. package/.next/server/app/api/approvals/[id]/route_client-reference-manifest.js +1 -1
  10. package/.next/server/app/api/approvals/route_client-reference-manifest.js +1 -1
  11. package/.next/server/app/api/backup/route_client-reference-manifest.js +1 -1
  12. package/.next/server/app/api/browse/route_client-reference-manifest.js +1 -1
  13. package/.next/server/app/api/bugs/enhance/route_client-reference-manifest.js +1 -1
  14. package/.next/server/app/api/cwd/route_client-reference-manifest.js +1 -1
  15. package/.next/server/app/api/encryption/secure/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/env/route_client-reference-manifest.js +1 -1
  17. package/.next/server/app/api/flow/[id]/route_client-reference-manifest.js +1 -1
  18. package/.next/server/app/api/flow/[id]/versions/[versionId]/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/flow/[id]/versions/route_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/flow/compile/route_client-reference-manifest.js +1 -1
  21. package/.next/server/app/api/flow/generate/route_client-reference-manifest.js +1 -1
  22. package/.next/server/app/api/flow/generator/route_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/flow/improve/route_client-reference-manifest.js +1 -1
  24. package/.next/server/app/api/flow/prompt-renderer/route_client-reference-manifest.js +1 -1
  25. package/.next/server/app/api/flow/quick-chat/route_client-reference-manifest.js +1 -1
  26. package/.next/server/app/api/flow/repair/route_client-reference-manifest.js +1 -1
  27. package/.next/server/app/api/flow/route_client-reference-manifest.js +1 -1
  28. package/.next/server/app/api/git/route.js +5 -5
  29. package/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  30. package/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  31. package/.next/server/app/api/local-models/capability/route_client-reference-manifest.js +1 -1
  32. package/.next/server/app/api/local-models/pull/route_client-reference-manifest.js +1 -1
  33. package/.next/server/app/api/local-models/suggest/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/mcp/app-sandbox/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/mcp/cancel/route_client-reference-manifest.js +1 -1
  36. package/.next/server/app/api/mcp/oauth-capability/route_client-reference-manifest.js +1 -1
  37. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route_client-reference-manifest.js +1 -1
  38. package/.next/server/app/api/mcp/servers/[name]/prompts/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/mcp/servers/[name]/resources/read/route_client-reference-manifest.js +1 -1
  40. package/.next/server/app/api/mcp/servers/[name]/resources/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/mcp/servers/[name]/route_client-reference-manifest.js +1 -1
  42. package/.next/server/app/api/mcp/servers/[name]/status/route_client-reference-manifest.js +1 -1
  43. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/mcp/servers/[name]/tools/route_client-reference-manifest.js +1 -1
  45. package/.next/server/app/api/mcp/servers/route_client-reference-manifest.js +1 -1
  46. package/.next/server/app/api/mcp/test-connection/route_client-reference-manifest.js +1 -1
  47. package/.next/server/app/api/mcp/test-connection/stream/route_client-reference-manifest.js +1 -1
  48. package/.next/server/app/api/mcp-registry/route_client-reference-manifest.js +1 -1
  49. package/.next/server/app/api/mcp-registry/spotlight/route_client-reference-manifest.js +1 -1
  50. package/.next/server/app/api/model/[id]/route_client-reference-manifest.js +1 -1
  51. package/.next/server/app/api/model/provider/route_client-reference-manifest.js +1 -1
  52. package/.next/server/app/api/model/route_client-reference-manifest.js +1 -1
  53. package/.next/server/app/api/model/test/route_client-reference-manifest.js +1 -1
  54. package/.next/server/app/api/oauth/callback/route_client-reference-manifest.js +1 -1
  55. package/.next/server/app/api/oauth/initiate/route_client-reference-manifest.js +1 -1
  56. package/.next/server/app/api/oauth/reset/route_client-reference-manifest.js +1 -1
  57. package/.next/server/app/api/packages/build/route_client-reference-manifest.js +1 -1
  58. package/.next/server/app/api/packages/derive-secrets/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/packages/install/route.js +1 -1
  60. package/.next/server/app/api/packages/install/route.js.nft.json +1 -1
  61. package/.next/server/app/api/packages/install/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/packages/install/status/route.js +1 -1
  63. package/.next/server/app/api/packages/install/status/route.js.nft.json +1 -1
  64. package/.next/server/app/api/packages/install/status/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/packages/installed/route.js +1 -1
  66. package/.next/server/app/api/packages/installed/route.js.nft.json +1 -1
  67. package/.next/server/app/api/packages/installed/route_client-reference-manifest.js +1 -1
  68. package/.next/server/app/api/packages/resolve/route_client-reference-manifest.js +1 -1
  69. package/.next/server/app/api/packages/scan-targets/route_client-reference-manifest.js +1 -1
  70. package/.next/server/app/api/packages/search/route_client-reference-manifest.js +1 -1
  71. package/.next/server/app/api/packages/uninstall/route.js +1 -1
  72. package/.next/server/app/api/packages/uninstall/route.js.nft.json +1 -1
  73. package/.next/server/app/api/packages/uninstall/route_client-reference-manifest.js +1 -1
  74. package/.next/server/app/api/planned-executions/[id]/route_client-reference-manifest.js +1 -1
  75. package/.next/server/app/api/planned-executions/[id]/run/route_client-reference-manifest.js +1 -1
  76. package/.next/server/app/api/planned-executions/[id]/runs/route_client-reference-manifest.js +1 -1
  77. package/.next/server/app/api/planned-executions/preview-schedule/route_client-reference-manifest.js +1 -1
  78. package/.next/server/app/api/planned-executions/reconcile/route_client-reference-manifest.js +1 -1
  79. package/.next/server/app/api/planned-executions/route_client-reference-manifest.js +1 -1
  80. package/.next/server/app/api/registry/auth/resend/route_client-reference-manifest.js +1 -1
  81. package/.next/server/app/api/registry/auth/reset/route_client-reference-manifest.js +1 -1
  82. package/.next/server/app/api/registry/auth/route_client-reference-manifest.js +1 -1
  83. package/.next/server/app/api/registry/feedback/route_client-reference-manifest.js +1 -1
  84. package/.next/server/app/api/registry/oauth/callback/route_client-reference-manifest.js +1 -1
  85. package/.next/server/app/api/registry/oauth/initiate/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/registry/packages/route_client-reference-manifest.js +1 -1
  87. package/.next/server/app/api/registry/publish/route_client-reference-manifest.js +1 -1
  88. package/.next/server/app/api/registry/settings/route_client-reference-manifest.js +1 -1
  89. package/.next/server/app/api/restore/route_client-reference-manifest.js +1 -1
  90. package/.next/server/app/api/runs/active/route_client-reference-manifest.js +1 -1
  91. package/.next/server/app/api/storage/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/telemetry/daily-active/route.js +1 -1
  93. package/.next/server/app/api/telemetry/daily-active/route_client-reference-manifest.js +1 -1
  94. package/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  95. package/.next/server/app/api/waves/route_client-reference-manifest.js +1 -1
  96. package/.next/server/app/api/webhooks/[id]/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  98. package/.next/server/app/chat.html +1 -1
  99. package/.next/server/app/chat.rsc +2 -2
  100. package/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  101. package/.next/server/app/docs.html +1 -1
  102. package/.next/server/app/docs.rsc +1 -1
  103. package/.next/server/app/executions/page_client-reference-manifest.js +1 -1
  104. package/.next/server/app/executions.html +1 -1
  105. package/.next/server/app/executions.rsc +1 -1
  106. package/.next/server/app/flows/page.js +1 -1
  107. package/.next/server/app/flows/page_client-reference-manifest.js +1 -1
  108. package/.next/server/app/flows.html +1 -1
  109. package/.next/server/app/flows.rsc +2 -2
  110. package/.next/server/app/index.html +1 -1
  111. package/.next/server/app/index.rsc +1 -1
  112. package/.next/server/app/mcp/page.js +1 -1
  113. package/.next/server/app/mcp/page_client-reference-manifest.js +1 -1
  114. package/.next/server/app/mcp-flows/route.js +1 -1
  115. package/.next/server/app/mcp-flows/route_client-reference-manifest.js +1 -1
  116. package/.next/server/app/mcp-proxy/[server]/route.js +1 -1
  117. package/.next/server/app/mcp-proxy/[server]/route_client-reference-manifest.js +1 -1
  118. package/.next/server/app/mcp.html +1 -1
  119. package/.next/server/app/mcp.rsc +2 -2
  120. package/.next/server/app/models/page.js +1 -1
  121. package/.next/server/app/models/page_client-reference-manifest.js +1 -1
  122. package/.next/server/app/packages/page.js +1 -1
  123. package/.next/server/app/packages/page_client-reference-manifest.js +1 -1
  124. package/.next/server/app/packages.html +1 -1
  125. package/.next/server/app/packages.rsc +2 -2
  126. package/.next/server/app/page.js +3 -3
  127. package/.next/server/app/page_client-reference-manifest.js +1 -1
  128. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  129. package/.next/server/app/settings.html +1 -1
  130. package/.next/server/app/settings.rsc +1 -1
  131. package/.next/server/app/v1/chat/completions/route_client-reference-manifest.js +1 -1
  132. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route_client-reference-manifest.js +1 -1
  133. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route_client-reference-manifest.js +1 -1
  134. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route_client-reference-manifest.js +1 -1
  135. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route_client-reference-manifest.js +1 -1
  136. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route_client-reference-manifest.js +1 -1
  137. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route_client-reference-manifest.js +1 -1
  138. package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route_client-reference-manifest.js +1 -1
  139. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route_client-reference-manifest.js +1 -1
  140. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route_client-reference-manifest.js +1 -1
  141. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route_client-reference-manifest.js +1 -1
  142. package/.next/server/app/v1/chat/conversations/[conversationId]/route_client-reference-manifest.js +1 -1
  143. package/.next/server/app/v1/chat/conversations/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/v1/chat/events/route_client-reference-manifest.js +1 -1
  145. package/.next/server/app/v1/models/route_client-reference-manifest.js +1 -1
  146. package/.next/server/app/waves/page_client-reference-manifest.js +1 -1
  147. package/.next/server/app/waves.html +1 -1
  148. package/.next/server/app/waves.rsc +1 -1
  149. package/.next/server/app-paths-manifest.json +19 -19
  150. package/.next/server/chunks/1227.js +1 -1
  151. package/.next/server/chunks/366.js +2 -0
  152. package/.next/server/chunks/4265.js +1 -1
  153. package/.next/server/chunks/519.js +1 -1
  154. package/.next/server/chunks/5285.js +1 -1
  155. package/.next/server/chunks/5309.js +1 -1
  156. package/.next/server/chunks/544.js +1 -1
  157. package/.next/server/chunks/6747.js +2 -2
  158. package/.next/server/chunks/6826.js +1 -1
  159. package/.next/server/chunks/8645.js +1 -1
  160. package/.next/server/functions-config-manifest.json +4 -4
  161. package/.next/server/middleware-manifest.json +1 -1
  162. package/.next/server/pages/404.html +1 -1
  163. package/.next/server/pages/500.html +1 -1
  164. package/.next/server/server-reference-manifest.js +1 -1
  165. package/.next/server/server-reference-manifest.json +1 -1
  166. package/.next/static/chunks/{8650-aa22dbf7b37348f0.js → 8650-f879564a0ed89bc3.js} +1 -1
  167. package/.next/static/chunks/app/mcp/{page-1648e6fde0c41461.js → page-4a3e5a643d84ee89.js} +1 -1
  168. package/.next/static/chunks/app/packages/{page-f1a22789a6c0e0b6.js → page-2f2d29c17841b3cf.js} +1 -1
  169. package/.next/trace +10 -10
  170. package/README.md +1 -1
  171. package/package.json +1 -1
  172. package/.next/server/chunks/2273.js +0 -2
  173. /package/.next/static/{hbjnLG9RCje2AApS9TzP8 → kIFnN4S0HHOnvpPGsSzi9}/_buildManifest.js +0 -0
  174. /package/.next/static/{hbjnLG9RCje2AApS9TzP8 → kIFnN4S0HHOnvpPGsSzi9}/_ssgManifest.js +0 -0
package/README.md CHANGED
@@ -45,7 +45,7 @@ For *anything* that you struggle with (MCP Installation, Application Issues, Usa
45
45
  # FLUJO
46
46
 
47
47
  [![MIT License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
48
- [![Version](https://img.shields.io/badge/version-3.35.0-green.svg)](package.json)
48
+ [![Version](https://img.shields.io/badge/version-3.38.0-green.svg)](package.json)
49
49
 
50
50
  FLUJO is an open-source, local-first platform for building **MCP-powered AI workflows**. It brings together model management, Model-Context-Protocol (MCP) servers, a visual flow builder, and a chat interface in one app — so you can wire models and tools together, run them headlessly on triggers, and expose the result to other apps, without giving up control of your keys and data.
51
51
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "flujo-ai",
3
- "version": "3.35.0",
3
+ "version": "3.38.0",
4
4
  "bin": {
5
5
  "flujo": "bin/flujo.mjs"
6
6
  },
@@ -1,2 +0,0 @@
1
- "use strict";exports.id=2273,exports.ids=[1925,2273,3629,4306,6793,9174],exports.modules={1925:(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()},21508:(a,b,c)=>{c.d(b,{Qs:()=>d,oT:()=>f});let d="https://registry.flujo.com.co",e=["github","google"];function f(a){return"string"==typeof a&&e.includes(a)}},28511:(a,b,c)=>{c.d(b,{Ed:()=>u,ae:()=>w,jA:()=>x,qf:()=>v});var d=c(55511),e=c(32524),f=c(50846),g=c(92372),h=c(38844),i=c(25113),j=c(93868),k=c(75943),l=c(14265),m=c(20433),n=c(87821),o=c(60453),p=c(4771);let q=(0,f.h)("backend/services/packages/installPackage");function r(a){return a.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function s(a,b){if("string"==typeof a){if(!a.includes("{{secret."))return a;let c=RegExp(j.HQ.source,"g");return a.replace(c,(a,c)=>Object.prototype.hasOwnProperty.call(b,c)?b[c]:a)}if(Array.isArray(a))return a.map(a=>s(a,b));if(a&&"object"==typeof a){let c={};for(let[d,e]of Object.entries(a))c[d]=s(e,b);return c}return a}async function t(a){if(!a||0===a.length)return[];let b=await (0,g.loadItem)(h.Z.GLOBAL_ENV_VARS,{});return a.filter(a=>!Object.prototype.hasOwnProperty.call(b,a))}async function u(a){let b,c=()=>({ok:!1,dryRun:!0!==a.consentGranted,created:[],updated:[],skipped:[],disabled:[],servers:[],errors:[],missingGlobals:[]});if("registry"!==a.source){let b=c();return b.errors.push(`Unsupported package source: ${String(a.source)}`),b}try{b=await (0,k.g)(a.packageId,a.version)}catch(d){let b=c();return b.errors.push(`Failed to fetch package "${a.packageId}": ${d instanceof Error?d.message:String(d)}`),b}let d=(0,i.$j)(b);if(!d.success||!d.data){let a=c();return a.errors.push("Invalid package manifest.",...d.errors??[]),a}let e=d.data,f=a.secrets??{},j=a=>Object.prototype.hasOwnProperty.call(f,a)&&`${f[a]??""}`.length>0,l=a=>(e.secrets??[]).some(b=>b.name===a&&!0===b.required);if(!0!==a.consentGranted)return{ok:!0,dryRun:!0,package:{name:e.name,version:e.version,...e.publisher?{publisher:e.publisher}:{}},preview:{...await z(e,j),missingGlobals:await t(e.requiredGlobals)},created:[],updated:[],skipped:[],disabled:[],servers:[],errors:[],missingGlobals:[]};let n=await m.modelService.loadModels(),p=new Set((e.models??[]).map(a=>a.id)),r=new Map(n.map(a=>[a.id,a]));for(let[b,d]of Object.entries(a.modelMappings??{}))if(!p.has(b)||!r.has(d)){let a=c();return a.errors.push(`Invalid model mapping: "${b}" -> "${d}"`),a}let u={ok:!0,dryRun:!1,package:{name:e.name,version:e.version,...e.publisher?{publisher:e.publisher}:{}},created:[],updated:[],skipped:[],disabled:[],servers:[],errors:[],missingGlobals:await t(e.requiredGlobals)},v=(e.models??[]).map(a=>s(a,f)),w=(e.flows??[]).map(a=>s(a,f)),x=(e.plannedExecutions??[]).map(a=>s(a,f)),y={flows:{},models:{},servers:[],plannedExecutions:[]},A={flows:[],models:[],servers:[],plannedExecutions:[]},B=new Set,D=new Map;try{let a=await o.mcpService.loadServerConfigs();if(Array.isArray(a))for(let b of a)B.add(b.name),D.set(b.name,b)}catch(a){q.warn("installPackage: failed to snapshot existing server names",a)}for(let a of e.mcpServers??[])await C(a,{packageFolder:e.name,secrets:f,secretProvided:j,secretRequired:l,summary:u,ledgerEntities:y,ledgerCreated:A,existingServerNames:B,existingServerConfigs:D});let E={};for(let b of v){let c=a.modelMappings?.[b.id];if(c){let a=r.get(c);E[b.id]={id:a.id,name:a.name},u.skipped.push({type:"model",name:b.displayName||b.name,id:a.id,note:`substituted with installed model "${a.displayName||a.name}"`});continue}let d=await F(b,{packageFolder:e.name,secrets:f,secretProvided:j,secretRequired:l,summary:u,ledgerEntities:y,ledgerCreated:A,existingServerNames:B,existingServerConfigs:D});d&&(E[b.id]=d)}let I=await G(e.name,w,E,u,y,A);for(let a of x)await H(a,e.name,I,u,y,A);try{let a=await (0,g.loadItem)(h.Z.PACKAGE_INSTALLS,{});a[e.name]={packageName:e.name,version:e.version,installedAt:new Date().toISOString(),summary:u,entities:y,created:A},await (0,g.VH)(h.Z.PACKAGE_INSTALLS,a)}catch(a){q.warn("installPackage: failed to persist install ledger",a)}return u}async function v(a){let b=await (0,g.loadItem)(h.Z.PACKAGE_INSTALLS,{});return b[a]?.summary??null}async function w(){return Object.values(await (0,g.loadItem)(h.Z.PACKAGE_INSTALLS,{})).map(a=>({packageName:a.packageName,version:a.version,installedAt:a.installedAt,entityCounts:{flows:Object.keys(a.entities?.flows??{}).length,models:Object.keys(a.entities?.models??{}).length,servers:(a.entities?.servers??[]).length,plannedExecutions:(a.entities?.plannedExecutions??[]).length}}))}async function x(a){let b={packageName:a,ok:!0,hasErrors:!1,removed:[],skipped:[],errors:[]},c=(await (0,g.loadItem)(h.Z.PACKAGE_INSTALLS,{}))[a];if(!c)return b;let d=c.created,e=void 0!==d,f=async(a,c)=>{try{var d,e=await c();e.success?b.removed.push(a):(d=e.error)&&/not found|no planned execution with id|does not exist/i.test(d)?b.skipped.push({...a,reason:"not found"}):b.errors.push({...a,reason:e.error??"delete failed"})}catch(c){b.errors.push({...a,reason:c instanceof Error?c.message:String(c)})}},i=(0,p.getSchedulerService)();for(let a of c.entities?.plannedExecutions??[]){let c={kind:"plannedExecution",id:a};if(e&&!d.plannedExecutions.includes(a)){b.skipped.push({...c,reason:"adopted-not-created"});continue}await f(c,()=>i.delete(a))}for(let[a,g]of Object.entries(c.entities?.flows??{})){let c={kind:"flow",id:g,label:a};if(e&&!d.flows.includes(g)){b.skipped.push({...c,reason:"adopted-not-created"});continue}await f(c,()=>n.flowService.deleteFlow(g))}for(let a of c.entities?.servers??[]){let c={kind:"server",id:a};if(e&&!d.servers.includes(a)){b.skipped.push({...c,reason:"adopted-not-created"});continue}await f(c,()=>o.mcpService.deleteServerConfig(a))}for(let[a,g]of Object.entries(c.entities?.models??{})){let c={kind:"model",id:g,label:a};if(!e){b.skipped.push({...c,reason:"legacy-ledger-no-provenance"});continue}if(!d.models.includes(g)){b.skipped.push({...c,reason:"adopted-not-created"});continue}await f(c,()=>m.modelService.deleteModel(g))}if(b.hasErrors=b.errors.length>0,b.ok=!b.hasErrors,!b.hasErrors)try{let b=await (0,g.loadItem)(h.Z.PACKAGE_INSTALLS,{});delete b[a],await (0,g.VH)(h.Z.PACKAGE_INSTALLS,b)}catch(a){q.warn("uninstallPackage: failed to delete ledger entry",a)}return b}function y(a){let b=a.installOrigin;return"remote"===b.sourceType?`remote:${b.url}`:`${b.sourceType}:${b.ref??b.name??a.name}`}async function z(a,b){let c=await m.modelService.loadModels();return{servers:(a.mcpServers??[]).map(c=>({localName:c.name,source:y(c),requiredEnvMissing:[...c.envDeclarations,...c.headerDeclarations??[]].map(a=>a.secretRef).filter(a=>"string"==typeof a&&a.length>0).filter(c=>(a.secrets??[]).some(a=>a.name===c&&a.required)&&!b(c))})),models:(a.models??[]).map(c=>({id:c.id,displayName:c.displayName||c.name,..."global"===c.apiKeyRef.kind?{apiKeyFrom:`\${global:${c.apiKeyRef.var}}`}:"secret"===c.apiKeyRef.kind?{apiKeyFrom:`secret:${c.apiKeyRef.secret}`}:{},..."secret"===c.apiKeyRef.kind&&(a.secrets??[]).some(a=>a.name===c.apiKeyRef.secret&&a.required)&&!b(c.apiKeyRef.secret)?{missingRequiredSecret:!0}:{}})),installedModels:c.map(a=>({id:a.id,displayName:a.displayName||a.name,name:a.name})),flows:(a.flows??[]).map(a=>({name:a.flow.name})),plannedExecutions:(a.plannedExecutions??[]).map(a=>({name:a.name})),secrets:(a.secrets??[]).map(a=>({key:a.name,...a.description?{label:a.description}:{},required:!0===a.required,provided:b(a.name)}))}}function A(a,b){let{secrets:c,secretProvided:d,secretRequired:e}=b,f={},g=new Set,h=[];for(let b of a)b.secretRef?d(b.secretRef)?(f[b.name]=c[b.secretRef],b.isSecret&&g.add(b.name)):e(b.secretRef)&&h.push(b.name):b.globalVar?(f[b.name]=`\${global:${b.globalVar}}`,b.isSecret&&g.add(b.name)):b.globalTemplate&&(f[b.name]=b.globalTemplate,b.isSecret&&g.add(b.name));return{values:f,secretNames:g,missingRequired:h}}async function B(a,b,c,d,e){let{packageFolder:f,summary:g,ledgerEntities:h,existingServerConfigs:i}=b,j=y(a),k=i.get(a.name);if(!k){g.servers.push({localName:a.name,source:j,installed:!1,error:"server vanished between snapshot and install"}),g.skipped.push({type:"server",name:a.name,note:"server not found in configs (stale snapshot)"});return}let l={...k.env??{}};for(let[a,b]of Object.entries(d))l[a]=e.has(a)?{value:b,metadata:{isSecret:!0}}:b;let m=k.args,n=Array.isArray(m)?[...m]:[];for(let b of a.argTemplates??[]){if(b.index>n.length||b.index<n.length&&!/\$\{global:[A-Za-z0-9_.-]+\}/.test(n[b.index])){let c=`argument template index ${b.index} cannot replace a static existing argument`;g.servers.push({localName:a.name,source:j,installed:!1,error:c}),g.skipped.push({type:"server",name:a.name,note:c});return}n[b.index]=b.value}let p=await o.mcpService.updateServerConfig(a.name,{env:l,folder:f,...a.argTemplates?.length?{args:n}:{}});if(!Array.isArray(p)&&p&&"success"in p&&!1===p.success){let b=p.error??"unknown error";g.servers.push({localName:a.name,source:j,installed:!1,error:b}),g.skipped.push({type:"server",name:a.name,note:b});return}h.servers.push(a.name),g.servers.push({localName:a.name,source:j,installed:!0,serverName:a.name,alreadyExisted:!0});let q=c.length>0?`env partially merged — missing required secret(s) for: ${c.join(", ")}`:void 0;g.updated.push({type:"server",name:a.name,id:a.name,...q?{note:q}:{}})}async function C(a,b){let{secrets:c,summary:d,ledgerEntities:e,ledgerCreated:f,existingServerNames:g}=b,h=y(a),i=a.installOrigin,j=A(a.envDeclarations,b),k=A(a.headerDeclarations??[],b),m=[...j.missingRequired,...k.missingRequired],n={};for(let[a,b]of Object.entries(k.values))n[a]=k.secretNames.has(a)?{value:b,metadata:{isSecret:!0}}:b;if("github"===i.sourceType){d.servers.push({localName:a.name,source:h,installed:!1,error:"GitHub-sourced servers are not auto-installable yet — install manually from the MCP page"}),d.skipped.push({type:"server",name:a.name,note:"GitHub-sourced servers require manual install"});return}if("registry"===i.sourceType||"marketplace"===i.sourceType){let c=i.ref??i.name;if(!c){d.servers.push({localName:a.name,source:h,installed:!1,error:"missing registry ref"}),d.skipped.push({type:"server",name:a.name,note:"installOrigin has no ref/name"});return}if(g.has(a.name))return void await B(a,b,m,j.values,j.secretNames);if(m.length>0){d.disabled.push({type:"server",name:a.name,note:`missing required secret(s) for: ${m.join(", ")}`}),d.servers.push({localName:a.name,source:h,installed:!1,needsEnv:m});return}let k=a.argTemplates?.length?await (0,l.aM)(c,j.values,{argTemplates:a.argTemplates}):await (0,l.aM)(c,j.values),n={localName:a.name,source:h,installed:k.installed,...k.serverName?{serverName:k.serverName}:{},...k.alreadyExisted?{alreadyExisted:!0}:{},...k.needsEnv?{needsEnv:k.needsEnv}:{},...k.error?{error:k.error}:{}};if(d.servers.push(n),k.installed){k.serverName&&await D(k.serverName,b.packageFolder),k.serverName&&e.servers.push(k.serverName);let c={type:"server",name:a.name,...k.serverName?{id:k.serverName}:{}};k.alreadyExisted?d.updated.push(c):(k.serverName&&f.servers.push(k.serverName),d.created.push(c),k.serverName&&j.secretNames.size>0&&await E(k.serverName,j.values,j.secretNames))}else d.skipped.push({type:"server",name:a.name,note:k.error??(k.needsEnv?`needs env: ${k.needsEnv.join(", ")}`:"not installed")});return}let p=m.length>0;try{let c=function(a,b,c,d,e,f){let g=a.installOrigin;if("remote"!==g.sourceType||!g.url)throw Error("buildRemoteServerConfig called for a non-remote (or url-less) server");let h="websocket"===a.transport||"sse"===a.transport||"streamable"===a.transport?a.transport:"streamable",i={name:a.name,folder:b,disabled:d,autoApprove:a.autoApprove??[],rootPath:"",env:Object.fromEntries(Object.entries(c).map(([a,b])=>[a,f.has(a)?{value:b,metadata:{isSecret:!0}}:b])),_buildCommand:"",_installCommand:""};if("websocket"===h)return{...i,transport:"websocket",websocketUrl:g.url};let j=Object.keys(e).length>0;return{...i,transport:h,serverUrl:g.url,...j?{headers:e}:{}}}(a,b.packageFolder,j.values,p,n,j.secretNames),i=await o.mcpService.updateServerConfig(a.name,c);if(!Array.isArray(i)&&i&&"success"in i&&!1===i.success){let b=i.error??"unknown error";d.servers.push({localName:a.name,source:h,installed:!1,error:b}),d.skipped.push({type:"server",name:a.name,note:b});return}e.servers.push(a.name),g.has(a.name)||f.servers.push(a.name),d.servers.push({localName:a.name,source:h,installed:!0,serverName:a.name,...p?{disabled:!0,needsEnv:m}:{}});let k={type:"server",name:a.name,id:a.name};p?d.disabled.push({...k,note:`installed disabled — missing required secret(s) for: ${m.join(", ")}`}):d.created.push(k)}catch(c){let b=c instanceof Error?c.message:String(c);d.servers.push({localName:a.name,source:h,installed:!1,error:b}),d.skipped.push({type:"server",name:a.name,note:b})}}async function D(a,b){try{let c=await o.mcpService.updateServerConfig(a,{folder:b});!Array.isArray(c)&&c&&"success"in c&&!1===c.success&&q.warn(`assignServerPackageFolder: failed to assign "${a}" to "${b}": ${c.error??"unknown error"}`)}catch(c){q.warn(`assignServerPackageFolder: failed to assign "${a}" to "${b}"`,c)}}async function E(a,b,c){if(0===c.size)return;let d=await o.mcpService.loadServerConfigs().catch(()=>null);if(!Array.isArray(d))return;let e=d.find(b=>b.name===a);if(!e)return;let f={...e.env??{}},g=!1;for(let a of c)void 0!==b[a]&&(f[a]={value:b[a],metadata:{isSecret:!0}},g=!0);if(g)try{await o.mcpService.updateServerConfig(a,{env:f})}catch(b){q.warn(`tagSecretEnvKeys: failed to re-tag secret env for "${a}"`,b)}}async function F(a,b){let c,{packageFolder:d,secrets:f,secretProvided:g,secretRequired:h,summary:i,ledgerEntities:j,ledgerCreated:k}=b,l="";if("global"===a.apiKeyRef.kind)l=`\${global:${a.apiKeyRef.var}}`;else if("secret"===a.apiKeyRef.kind){let b=a.apiKeyRef.secret;g(b)?l=f[b]:h(b)&&(c=`installed without an API key — missing required secret "${b}"`)}let n=a.displayName||a.name,o={name:a.name,displayName:n,...a.provider?{provider:a.provider}:{},...a.adapter?{adapter:a.adapter}:{},...a.baseUrl?{baseUrl:a.baseUrl}:{},...a.description?{description:a.description}:{},...a.promptTemplate?{promptTemplate:a.promptTemplate}:{},...a.temperature?{temperature:a.temperature}:{},...a.reasoningEffort?{reasoningEffort:a.reasoningEffort}:{},...a.thinkingLevel?{thinkingLevel:a.thinkingLevel}:{},...void 0!==a.thinkingBudget?{thinkingBudget:a.thinkingBudget}:{},...a.serviceTier?{serviceTier:a.serviceTier}:{},...a.reasoningSchema?{reasoningSchema:a.reasoningSchema}:{},...a.functionCallingSchema?{functionCallingSchema:a.functionCallingSchema}:{},...void 0!==a.contextWindow?{contextWindow:a.contextWindow}:{},...void 0!==a.maxTurns?{maxTurns:a.maxTurns}:{},...void 0!==a.maxTokens?{maxTokens:a.maxTokens}:{},folder:d,ApiKey:l},p=(await m.modelService.loadModels()).find(a=>(a.displayName??"").toLowerCase()===n.toLowerCase());if(p){let b=await m.modelService.updateModel({...p,...o,id:p.id});if(b.success){j.models[n]=p.id;let b={type:"model",name:n,id:p.id};return c?i.disabled.push({...b,note:c}):i.updated.push(b),{id:p.id,name:a.name}}return void i.skipped.push({type:"model",name:n,note:b.error})}let q=(0,e.A)(),r=await m.modelService.addModel({id:q,...o});if(r.success){j.models[n]=q,k.models.push(q);let b={type:"model",name:n,id:q};return c?i.disabled.push({...b,note:c}):i.created.push(b),{id:q,name:a.name}}i.skipped.push({type:"model",name:n,note:r.error})}async function G(a,b,c,e,f,g){let h={};for(let c of b)h[c.flow.id]=function(a,b){var c;let e=`pkg-${r(a)}-${r(b)}`.replace(/[^A-Za-z0-9_-]/g,"-");return e.length<=64?e:`${e.slice(0,55)}-${c=`${a}::${b}`,(0,d.createHash)("sha1").update(c).digest("hex").slice(0,8)}`}(a,c.flow.id);let i=new Set((await n.flowService.loadFlows()).map(a=>a.id));for(let d of b){let b=d.flow.id,j=h[b],k=function(a,b,c,d){let e=JSON.parse(JSON.stringify(a.flow));for(let a of(e.id=b,delete e.createdAt,delete e.updatedAt,e.nodes??[])){let b=a?.data?.properties;if(b&&("string"==typeof b.subflowId&&c[b.subflowId]&&(b.subflowId=c[b.subflowId]),Array.isArray(b.parallelSubflowIds)&&(b.parallelSubflowIds=b.parallelSubflowIds.map(a=>"string"==typeof a&&c[a]?c[a]:a)),"string"==typeof b.boundModel&&d[b.boundModel])){let a=d[b.boundModel];b.boundModel=a.id,b.modelName=a.name}}return e}(d,j,h,c);k.folder=a;let l=i.has(j),m=await n.flowService.saveFlow(k);if(m.success){f.flows[b]=j;let a={type:"flow",name:d.flow.name,id:j};l?e.updated.push(a):(g.flows.push(j),e.created.push(a))}else e.skipped.push({type:"flow",name:d.flow.name,note:m.error})}return h}async function H(a,b,c,d,e,f){var g;let h=(0,p.getSchedulerService)(),i=(g=a.name,`pkg-${r(b)}-${r(g)}`.replace(/[^A-Za-z0-9._:-]/g,"-").slice(0,128)),j=c[a.flowId]??a.flowId,{id:k,flowId:l,createdAt:m,updatedAt:n,...o}=a,q={...o,id:i,flowId:j,folder:b,enabled:!1},s=await h.create(q);if(s.execution){e.plannedExecutions.push(i),f.plannedExecutions.push(i),d.created.push({type:"plannedExecution",name:a.name,id:i}),d.disabled.push({type:"plannedExecution",name:a.name,id:i,note:"created disabled — enable it after review"});return}if(s.conflict){let{id:b,...c}=q,f=await h.update(i,c);f.execution?(e.plannedExecutions.push(i),d.updated.push({type:"plannedExecution",name:a.name,id:i}),d.disabled.push({type:"plannedExecution",name:a.name,id:i,note:"updated (disabled) — enable it after review"})):d.skipped.push({type:"plannedExecution",name:a.name,note:f.error});return}d.skipped.push({type:"plannedExecution",name:a.name,note:s.error})}},51669:(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}})},56793:(a,b,c)=>{c.d(b,{eh:()=>g,ru:()=>e});let d=(0,c(50846).h)("backend/services/scheduler/flowRunEventBus");function e(a){return"signal"===a.kind}class f{publish(a){if(0===this.listeners.size)return;let b=e(a)?`signal topic=${a.topic} emitter=${a.emitterFlowId}`:`flow=${a.flowId} status=${a.status}`;for(let c of(d.debug(`Publishing flow event: ${b} firedBy=${a.firedBy} depth=${a.chainDepth} listeners=${this.listeners.size}`),[...this.listeners]))try{c(a)}catch(a){d.warn("A flow-run event listener threw:",a)}}subscribe(a){return this.listeners.add(a),()=>{this.listeners.delete(a)}}get listenerCount(){return this.listeners.size}constructor(){this.listeners=new Set}}function g(){return global.__flujo_flow_run_event_bus||(global.__flujo_flow_run_event_bus=new f),global.__flujo_flow_run_event_bus}},68633:(a,b,c)=>{Object.defineProperty(b,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(b,{decryptActionBoundArgs:function(){return s},encryptActionBoundArgs:function(){return r}}),c(77925);let d=c(97954),e=c(27825),f=c(47686),g=c(77533),h=c(63033),i=c(26906),j=function(a){return a&&a.__esModule?a:{default:a}}(c(74515)),k=new TextEncoder,l=new TextDecoder,m=void 0,n=void 0;async function o(a,b){let c=await (0,g.getActionEncryptionKey)();if(void 0===c)throw Object.defineProperty(Error("Missing encryption key for Server Action. This is a bug in Next.js"),"__NEXT_ERROR_CODE",{value:"E65",enumerable:!1,configurable:!0});let d=atob(b),e=d.slice(0,16),f=d.slice(16),h=l.decode(await (0,g.decrypt)(c,(0,g.stringToUint8Array)(e),(0,g.stringToUint8Array)(f)));if(!h.startsWith(a))throw Object.defineProperty(Error("Invalid Server Action payload: failed to decrypt."),"__NEXT_ERROR_CODE",{value:"E191",enumerable:!1,configurable:!0});return h.slice(a.length)}async function p(a,b){let c=await (0,g.getActionEncryptionKey)();if(void 0===c)throw Object.defineProperty(Error("Missing encryption key for Server Action. This is a bug in Next.js"),"__NEXT_ERROR_CODE",{value:"E65",enumerable:!1,configurable:!0});let d=new Uint8Array(16);h.workUnitAsyncStorage.exit(()=>crypto.getRandomValues(d));let e=(0,g.arrayBufferToString)(d.buffer),f=await (0,g.encrypt)(c,d,k.encode(a+b));return btoa(e+(0,g.arrayBufferToString)(f))}var q=function(a){return a[a.Ready=0]="Ready",a[a.Pending=1]="Pending",a[a.Complete=2]="Complete",a}(q||{});let r=j.default.cache(async function a(b,...c){let e=h.workUnitAsyncStorage.getStore(),j=e?(0,h.getCacheSignal)(e):void 0,{clientModules:k}=(0,g.getClientReferenceManifestForRsc)(),l=Error();Error.captureStackTrace(l,a);let n=!1,o=e?(0,i.createHangingInputAbortSignal)(e):void 0,q=0;function r(){0===q&&(q=1,null==j||j.beginRead())}function s(){1===q&&(null==j||j.endRead()),q=2}o&&j&&o.addEventListener("abort",r,{once:!0});let t=await (0,f.streamToString)((0,d.renderToReadableStream)(c,k,{filterStackFrame:m,signal:o,onError(a){(null==o||!o.aborted)&&(n||(n=!0,l.message=a instanceof Error?a.message:String(a)))}}),o);if(n)throw s(),l;if(!e)return p(b,t);r();let u=(0,h.getPrerenderResumeDataCache)(e),v=(0,h.getRenderResumeDataCache)(e),w=b+t,x=(null==u?void 0:u.encryptedBoundArgs.get(w))??(null==v?void 0:v.encryptedBoundArgs.get(w));if(x)return x;let y=await p(b,t);return s(),null==u||u.encryptedBoundArgs.set(w,y),y});async function s(a,b){let c,d=await b,f=h.workUnitAsyncStorage.getStore();if(f){let b=(0,h.getCacheSignal)(f),e=(0,h.getPrerenderResumeDataCache)(f),g=(0,h.getRenderResumeDataCache)(f);(c=(null==e?void 0:e.decryptedBoundArgs.get(d))??(null==g?void 0:g.decryptedBoundArgs.get(d)))||(null==b||b.beginRead(),c=await o(a,d),null==b||b.endRead(),null==e||e.decryptedBoundArgs.set(d,c))}else c=await o(a,d);let{edgeRscModuleMapping:i,rscModuleMapping:j}=(0,g.getClientReferenceManifestForRsc)();return await (0,e.createFromReadableStream)(new ReadableStream({start(a){switch(a.enqueue(k.encode(c)),null==f?void 0:f.type){case"prerender":case"prerender-runtime":f.renderSignal.aborted?a.close():f.renderSignal.addEventListener("abort",()=>a.close(),{once:!0});break;case"prerender-client":case"prerender-ppr":case"prerender-legacy":case"request":case"cache":case"private-cache":case"unstable-cache":case void 0:return a.close()}}}),{findSourceMapURL:n,serverConsumerManifest:{moduleLoading:null,moduleMap:j,serverModuleMap:(0,g.getServerModuleMap)()}})}},75879:(a,b,c)=>{Object.defineProperty(b,"A",{enumerable:!0,get:function(){return d.registerServerReference}});let d=c(97954)},75943:(a,b,c)=>{c.d(b,{g:()=>h,i:()=>g});var d=c(50846),e=c(80233);let f=(0,d.h)("backend/services/packages/packageRegistry");async function g(a){let{status:b,body:c}=await (0,e.sB)(a);return b<200||b>=300?(f.warn(`searchPackageRegistry: registry responded with status ${b}`),{items:[],page:a.page??1,pageSize:a.pageSize??20,total:0,error:c?.error??`Registry responded with status ${b}`}):c}async function h(a,b){if(!a||"string"!=typeof a)throw Error("A package id is required");let{status:c,body:d}=await (0,e.wf)(a,b&&b.trim()?b.trim():"latest");if(c<200||c>=300)throw Error(d?.error??d?.message??`Registry responded with status ${c}`);return d}},80233:(a,b,c)=>{c.d(b,{$5:()=>p,Nb:()=>s,Ow:()=>r,Tr:()=>x,Wz:()=>w,eo:()=>u,iD:()=>q,s2:()=>v,sB:()=>n,uJ:()=>j,w2:()=>t,wf:()=>o});var d=c(50846),e=c(92372),f=c(38844),g=c(21508);let h=(0,d.h)("backend/utils/packageRegistryClient");function i(a){return a.trim().replace(/\/+$/,"")}async function j(){let a=process.env.FLUJO_REGISTRY_BASE_URL?.trim();if(a)return i(a);let b=await (0,e.loadItem)(f.Z.REGISTRY_SETTINGS,{});return b?.baseUrl&&b.baseUrl.trim()?i(b.baseUrl):i(g.Qs)}async function k(a,b,c){let d=await j(),e=`${d}${a}`,f=new AbortController,g=setTimeout(()=>f.abort(),2e4);try{let d={"Content-Type":"application/json",Accept:"application/json"};c&&(d.Authorization=`Bearer ${c}`),h.info(`POST ${a}`);let g=await fetch(e,{method:"POST",headers:d,body:JSON.stringify(b??{}),signal:f.signal,cache:"no-store"}),i=await g.text(),j=null;if(i)try{j=JSON.parse(i)}catch{j={message:i}}return{status:g.status,body:j}}catch(b){return h.warn(`POST ${a} failed at transport level`,b instanceof Error?b.message:b),{status:0,body:{message:"Could not reach the package registry."}}}finally{clearTimeout(g)}}async function l(a){let b=await j(),c=`${b}${a}`,d=new AbortController,e=setTimeout(()=>d.abort(),2e4);try{h.info(`GET ${a}`);let b=await fetch(c,{headers:{Accept:"application/json"},signal:d.signal,cache:"no-store"}),e=await b.text(),f=null;if(e)try{f=JSON.parse(e)}catch{f={message:e}}return{status:b.status,body:f}}catch(b){return h.warn(`GET ${a} failed at transport level`,b instanceof Error?b.message:b),{status:0,body:{message:"Could not reach the package registry."}}}finally{clearTimeout(e)}}async function m(a,b){let c=await j(),d=`${c}${a}`,e=new AbortController,f=setTimeout(()=>e.abort(),2e4);try{h.info(`DELETE ${a}`);let c=await fetch(d,{method:"DELETE",headers:{Accept:"application/json",Authorization:`Bearer ${b}`},signal:e.signal,cache:"no-store"}),f=await c.text(),g=null;if(f)try{g=JSON.parse(f)}catch{g={message:f}}return{status:c.status,body:g}}catch(b){return h.warn(`DELETE ${a} failed at transport level`,b instanceof Error?b.message:b),{status:0,body:{message:"Could not reach the package registry."}}}finally{clearTimeout(f)}}function n(a){let b=new URLSearchParams;a.q&&b.set("q",a.q),a.tag&&b.set("tag",a.tag),a.page&&b.set("page",String(a.page)),a.pageSize&&b.set("pageSize",String(a.pageSize));let c=b.toString()?`?${b.toString()}`:"";return l(`/v1/packages${c}`)}function o(a,b="latest"){return l(`/v1/packages/${encodeURIComponent(a)}/versions/${encodeURIComponent(b)}/manifest`)}function p(a,b,c){return k("/v1/auth/signup",{email:a,password:b,handle:c})}function q(a,b){return k("/v1/auth/login",{email:a,password:b})}function r(a){return k("/v1/auth/refresh",{refresh_token:a})}function s(a){return k("/v1/auth/resend-confirmation",{email:a})}function t(a){return k("/v1/auth/forgot-password",{email:a})}function u(a,b){return k("/v1/packages",a,b)}function v(a,b){return m(`/v1/packages/${encodeURIComponent(a)}`,b)}function w(a,b){return k("/v1/feedback",{notice:a,rating:b})}function x(a){return k("/v1/auth/oauth/token",{code:a.code,code_verifier:a.codeVerifier,redirect_uri:a.redirectUri,provider:a.provider})}}};