flujo-ai 3.45.1 → 3.45.2

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 (192) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +37 -37
  3. package/.next/build-manifest.json +3 -3
  4. package/.next/react-loadable-manifest.json +2 -2
  5. package/.next/server/app/_global-error.html +1 -1
  6. package/.next/server/app/_global-error.rsc +1 -1
  7. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  8. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  9. package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  13. package/.next/server/app/_not-found.html +1 -1
  14. package/.next/server/app/_not-found.rsc +1 -1
  15. package/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  16. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  17. package/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  18. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  19. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  20. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  21. package/.next/server/app/api/telemetry/daily-active/route.js +1 -1
  22. package/.next/server/app/automation/triggers.html +1 -1
  23. package/.next/server/app/automation/triggers.rsc +1 -1
  24. package/.next/server/app/automation/triggers.segments/_full.segment.rsc +1 -1
  25. package/.next/server/app/automation/triggers.segments/_head.segment.rsc +1 -1
  26. package/.next/server/app/automation/triggers.segments/_index.segment.rsc +1 -1
  27. package/.next/server/app/automation/triggers.segments/_tree.segment.rsc +1 -1
  28. package/.next/server/app/automation/triggers.segments/automation/triggers/__PAGE__.segment.rsc +1 -1
  29. package/.next/server/app/automation/triggers.segments/automation/triggers.segment.rsc +1 -1
  30. package/.next/server/app/automation/triggers.segments/automation.segment.rsc +1 -1
  31. package/.next/server/app/automation/waves.html +1 -1
  32. package/.next/server/app/automation/waves.rsc +1 -1
  33. package/.next/server/app/automation/waves.segments/_full.segment.rsc +1 -1
  34. package/.next/server/app/automation/waves.segments/_head.segment.rsc +1 -1
  35. package/.next/server/app/automation/waves.segments/_index.segment.rsc +1 -1
  36. package/.next/server/app/automation/waves.segments/_tree.segment.rsc +1 -1
  37. package/.next/server/app/automation/waves.segments/automation/waves/__PAGE__.segment.rsc +1 -1
  38. package/.next/server/app/automation/waves.segments/automation/waves.segment.rsc +1 -1
  39. package/.next/server/app/automation/waves.segments/automation.segment.rsc +1 -1
  40. package/.next/server/app/chain-chat.html +1 -1
  41. package/.next/server/app/chain-chat.rsc +1 -1
  42. package/.next/server/app/chain-chat.segments/_full.segment.rsc +1 -1
  43. package/.next/server/app/chain-chat.segments/_head.segment.rsc +1 -1
  44. package/.next/server/app/chain-chat.segments/_index.segment.rsc +1 -1
  45. package/.next/server/app/chain-chat.segments/_tree.segment.rsc +1 -1
  46. package/.next/server/app/chain-chat.segments/chain-chat/__PAGE__.segment.rsc +1 -1
  47. package/.next/server/app/chain-chat.segments/chain-chat.segment.rsc +1 -1
  48. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  49. package/.next/server/app/chat.html +1 -1
  50. package/.next/server/app/chat.rsc +2 -2
  51. package/.next/server/app/chat.segments/_full.segment.rsc +2 -2
  52. package/.next/server/app/chat.segments/_head.segment.rsc +1 -1
  53. package/.next/server/app/chat.segments/_index.segment.rsc +1 -1
  54. package/.next/server/app/chat.segments/_tree.segment.rsc +1 -1
  55. package/.next/server/app/chat.segments/chat/__PAGE__.segment.rsc +2 -2
  56. package/.next/server/app/chat.segments/chat.segment.rsc +1 -1
  57. package/.next/server/app/docs.html +1 -1
  58. package/.next/server/app/docs.rsc +1 -1
  59. package/.next/server/app/docs.segments/_full.segment.rsc +1 -1
  60. package/.next/server/app/docs.segments/_head.segment.rsc +1 -1
  61. package/.next/server/app/docs.segments/_index.segment.rsc +1 -1
  62. package/.next/server/app/docs.segments/_tree.segment.rsc +1 -1
  63. package/.next/server/app/docs.segments/docs/__PAGE__.segment.rsc +1 -1
  64. package/.next/server/app/docs.segments/docs.segment.rsc +1 -1
  65. package/.next/server/app/executions.html +1 -1
  66. package/.next/server/app/executions.rsc +1 -1
  67. package/.next/server/app/executions.segments/_full.segment.rsc +1 -1
  68. package/.next/server/app/executions.segments/_head.segment.rsc +1 -1
  69. package/.next/server/app/executions.segments/_index.segment.rsc +1 -1
  70. package/.next/server/app/executions.segments/_tree.segment.rsc +1 -1
  71. package/.next/server/app/executions.segments/executions/__PAGE__.segment.rsc +1 -1
  72. package/.next/server/app/executions.segments/executions.segment.rsc +1 -1
  73. package/.next/server/app/flows/page_client-reference-manifest.js +1 -1
  74. package/.next/server/app/flows.html +1 -1
  75. package/.next/server/app/flows.rsc +2 -2
  76. package/.next/server/app/flows.segments/_full.segment.rsc +2 -2
  77. package/.next/server/app/flows.segments/_head.segment.rsc +1 -1
  78. package/.next/server/app/flows.segments/_index.segment.rsc +1 -1
  79. package/.next/server/app/flows.segments/_tree.segment.rsc +1 -1
  80. package/.next/server/app/flows.segments/flows/__PAGE__.segment.rsc +2 -2
  81. package/.next/server/app/flows.segments/flows.segment.rsc +1 -1
  82. package/.next/server/app/index.html +1 -1
  83. package/.next/server/app/index.rsc +1 -1
  84. package/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  85. package/.next/server/app/index.segments/_full.segment.rsc +1 -1
  86. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  87. package/.next/server/app/index.segments/_index.segment.rsc +1 -1
  88. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  89. package/.next/server/app/mcp/page_client-reference-manifest.js +1 -1
  90. package/.next/server/app/mcp-flows/route.js +1 -1
  91. package/.next/server/app/mcp-proxy/[server]/route.js +1 -1
  92. package/.next/server/app/mcp.html +1 -1
  93. package/.next/server/app/mcp.rsc +2 -2
  94. package/.next/server/app/mcp.segments/_full.segment.rsc +2 -2
  95. package/.next/server/app/mcp.segments/_head.segment.rsc +1 -1
  96. package/.next/server/app/mcp.segments/_index.segment.rsc +1 -1
  97. package/.next/server/app/mcp.segments/_tree.segment.rsc +1 -1
  98. package/.next/server/app/mcp.segments/mcp/__PAGE__.segment.rsc +2 -2
  99. package/.next/server/app/mcp.segments/mcp.segment.rsc +1 -1
  100. package/.next/server/app/meetings.html +1 -1
  101. package/.next/server/app/meetings.rsc +1 -1
  102. package/.next/server/app/meetings.segments/_full.segment.rsc +1 -1
  103. package/.next/server/app/meetings.segments/_head.segment.rsc +1 -1
  104. package/.next/server/app/meetings.segments/_index.segment.rsc +1 -1
  105. package/.next/server/app/meetings.segments/_tree.segment.rsc +1 -1
  106. package/.next/server/app/meetings.segments/meetings/__PAGE__.segment.rsc +1 -1
  107. package/.next/server/app/meetings.segments/meetings.segment.rsc +1 -1
  108. package/.next/server/app/packages.html +1 -1
  109. package/.next/server/app/packages.rsc +1 -1
  110. package/.next/server/app/packages.segments/_full.segment.rsc +1 -1
  111. package/.next/server/app/packages.segments/_head.segment.rsc +1 -1
  112. package/.next/server/app/packages.segments/_index.segment.rsc +1 -1
  113. package/.next/server/app/packages.segments/_tree.segment.rsc +1 -1
  114. package/.next/server/app/packages.segments/packages/__PAGE__.segment.rsc +1 -1
  115. package/.next/server/app/packages.segments/packages.segment.rsc +1 -1
  116. package/.next/server/app/personas.html +1 -1
  117. package/.next/server/app/personas.rsc +1 -1
  118. package/.next/server/app/personas.segments/_full.segment.rsc +1 -1
  119. package/.next/server/app/personas.segments/_head.segment.rsc +1 -1
  120. package/.next/server/app/personas.segments/_index.segment.rsc +1 -1
  121. package/.next/server/app/personas.segments/_tree.segment.rsc +1 -1
  122. package/.next/server/app/personas.segments/personas/__PAGE__.segment.rsc +1 -1
  123. package/.next/server/app/personas.segments/personas.segment.rsc +1 -1
  124. package/.next/server/app/roles/new.html +1 -1
  125. package/.next/server/app/roles/new.rsc +1 -1
  126. package/.next/server/app/roles/new.segments/_full.segment.rsc +1 -1
  127. package/.next/server/app/roles/new.segments/_head.segment.rsc +1 -1
  128. package/.next/server/app/roles/new.segments/_index.segment.rsc +1 -1
  129. package/.next/server/app/roles/new.segments/_tree.segment.rsc +1 -1
  130. package/.next/server/app/roles/new.segments/roles/new/__PAGE__.segment.rsc +1 -1
  131. package/.next/server/app/roles/new.segments/roles/new.segment.rsc +1 -1
  132. package/.next/server/app/roles/new.segments/roles.segment.rsc +1 -1
  133. package/.next/server/app/roles.html +1 -1
  134. package/.next/server/app/roles.rsc +1 -1
  135. package/.next/server/app/roles.segments/_full.segment.rsc +1 -1
  136. package/.next/server/app/roles.segments/_head.segment.rsc +1 -1
  137. package/.next/server/app/roles.segments/_index.segment.rsc +1 -1
  138. package/.next/server/app/roles.segments/_tree.segment.rsc +1 -1
  139. package/.next/server/app/roles.segments/roles/__PAGE__.segment.rsc +1 -1
  140. package/.next/server/app/roles.segments/roles.segment.rsc +1 -1
  141. package/.next/server/app/settings.html +1 -1
  142. package/.next/server/app/settings.rsc +1 -1
  143. package/.next/server/app/settings.segments/_full.segment.rsc +1 -1
  144. package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  145. package/.next/server/app/settings.segments/_index.segment.rsc +1 -1
  146. package/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
  147. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +1 -1
  148. package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
  149. package/.next/server/app/statistics.html +1 -1
  150. package/.next/server/app/statistics.rsc +1 -1
  151. package/.next/server/app/statistics.segments/_full.segment.rsc +1 -1
  152. package/.next/server/app/statistics.segments/_head.segment.rsc +1 -1
  153. package/.next/server/app/statistics.segments/_index.segment.rsc +1 -1
  154. package/.next/server/app/statistics.segments/_tree.segment.rsc +1 -1
  155. package/.next/server/app/statistics.segments/statistics/__PAGE__.segment.rsc +1 -1
  156. package/.next/server/app/statistics.segments/statistics.segment.rsc +1 -1
  157. package/.next/server/app/waves.html +1 -1
  158. package/.next/server/app/waves.rsc +1 -1
  159. package/.next/server/app/waves.segments/_full.segment.rsc +1 -1
  160. package/.next/server/app/waves.segments/_head.segment.rsc +1 -1
  161. package/.next/server/app/waves.segments/_index.segment.rsc +1 -1
  162. package/.next/server/app/waves.segments/_tree.segment.rsc +1 -1
  163. package/.next/server/app/waves.segments/waves/__PAGE__.segment.rsc +1 -1
  164. package/.next/server/app/waves.segments/waves.segment.rsc +1 -1
  165. package/.next/server/app-paths-manifest.json +37 -37
  166. package/.next/server/chunks/1475.js +1 -1
  167. package/.next/server/chunks/1914.js +1 -1
  168. package/.next/server/chunks/2887.js +1 -1
  169. package/.next/server/chunks/3686.js +1 -1
  170. package/.next/server/chunks/5189.js +1 -1
  171. package/.next/server/chunks/5399.js +1 -1
  172. package/.next/server/chunks/5560.js +2 -2
  173. package/.next/server/chunks/7570.js +1 -1
  174. package/.next/server/middleware-build-manifest.js +1 -1
  175. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  176. package/.next/server/pages/404.html +1 -1
  177. package/.next/server/pages/500.html +1 -1
  178. package/.next/server/server-reference-manifest.js +1 -1
  179. package/.next/server/server-reference-manifest.json +1 -1
  180. package/.next/static/chunks/{7208-5af7190dbc0e142b.js → 7208-714230aba8f0df89.js} +1 -1
  181. package/.next/static/chunks/webpack-f1c3062d7039f0c7.js +1 -0
  182. package/.next/trace +118 -118
  183. package/.next/trace-build +1 -1
  184. package/README.md +1 -1
  185. package/mcp-servers/bash/package.json +1 -1
  186. package/mcp-servers/browser/package.json +1 -1
  187. package/mcp-servers/filesystem/package.json +1 -1
  188. package/mcp-servers/flujo/package.json +1 -1
  189. package/package.json +5 -5
  190. package/.next/static/chunks/webpack-489c70bebf5a4745.js +0 -1
  191. /package/.next/static/{PEARC3s6DHN81nwlN8qpZ → 21CjEbc0FIa9X6No7R5M-}/_buildManifest.js +0 -0
  192. /package/.next/static/{PEARC3s6DHN81nwlN8qpZ → 21CjEbc0FIa9X6No7R5M-}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- "use strict";exports.id=2887,exports.ids=[2887],exports.modules={3146:(a,b,c)=>{c.d(b,{Hm:()=>f,xc:()=>e,yo:()=>g});let d=["key","secret","token","password"],e=a=>d.some(b=>a.toLowerCase().includes(b)),f=a=>e(a)||"authorization"===a.trim().toLowerCase(),g=a=>{if(!a)return a;if(a.includes("_-_-_")){let b=a.split("_-_-_");return 3===b.length?b[2]:a}let b=/^mcp_(.+)_[0-9a-z]+$/.exec(a);if(b&&b[1])return b[1];let c=a.indexOf("__");return c>0&&c+2<a.length?a.slice(c+2):a}},8528:(a,b,c)=>{c.d(b,{uJ:()=>J,Ay:()=>Y,Yw:()=>M});var d=c(48249),e=c(67484),f=c(33480),g=c(29184),h=c(55784),i=c(77217),j=c(76108),k=c(52454),l=c(88458),m=c(13288),n=c(2247),o=c(25303),p=c(52317),q=c(78717),r=c(30193),s=c(58137),t=c(65505),u=c(66547),v=c(32166),w=c(23806),x=c(92646),y=c(94651);let z=a=>null===a||"object"!=typeof a||Array.isArray(a)?void 0:a;function A(a){return"string"==typeof a&&a.length>0&&a.length<=512&&a.trim()===a}var B=c(39361),C=c(6680),D=c(15380);let E=(0,C.h)("frontend/components/Chat/McpAppFrame"),F={name:"FLUJO",version:"3.45.1"},G=new Set(["https:","http:"]),H=["inline","fullscreen","pip"],I=new Set(["text"]),J=262144,K=a=>null===a||"object"!=typeof a||Array.isArray(a)?void 0:a,L=a=>{let b=K(a);return b?.type==="text"&&"string"==typeof b.text};function M(a){try{return new TextEncoder().encode(JSON.stringify(a)).length}catch{return 1/0}}let N=new Map;async function O(a,b,c){let d=(0,B.dJ)(),e=JSON.stringify([d,a,b,c??null]);if(!N.has(e)){let f=new URLSearchParams;f.set("serverName",a),f.set("uri",b),c&&f.set("conversationId",c);let g=fetch((0,B.TA)(`/api/mcp/app-sandbox${f.toString()?`?${f}`:""}`,d)).then(async a=>{if(!a.ok){let b="";try{let c=await a.json();"string"==typeof c.error&&c.error.trim()&&(b=`: ${c.error.trim()}`)}catch{}throw Error(`Sandbox endpoint discovery failed (${a.status})${b}`)}return await a.json()}).catch(a=>{throw N.delete(e),a});N.set(e,g)}let f=await N.get(e);return{href:function(a,b){let c;if("boolean"!=typeof a.shared)throw Error("Sandbox endpoint discovery did not describe its origin mode");if(!function(a){if("string"!=typeof a)return!1;let b=a.trim();if(0===b.length||b.length>253||b!==a||b!==b.toLowerCase()||/[^\w.-]|[^\x00-\x7f]/i.test(b)||/^\d+(\.\d+)*$/.test(b)||b.includes(":")||/[/?#@]/.test(b))return!1;let c=b.split(".");return!(0===c.length||c.some(a=>0===a.length))&&c.every(a=>a.length<=63&&/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/.test(a))}(a.originKey))throw Error("Sandbox endpoint discovery returned an invalid origin key");if("string"!=typeof a.token||0===a.token.length)throw Error("Sandbox endpoint discovery returned invalid credentials");if("string"!=typeof a.url)throw Error("Sandbox endpoint discovery did not return an isolated app URL");try{c=new URL(a.url)}catch{throw Error("Sandbox endpoint discovery returned an invalid public URL")}if("http:"!==c.protocol&&"https:"!==c.protocol||c.username||c.password)throw Error("Sandbox public URL must be an absolute HTTP(S) URL without credentials");if("https:"===b.protocol&&"https:"!==c.protocol)throw Error("HTTPS FLUJO deployments require an HTTPS MCP Apps sandbox URL");if(a.shared){if(c.searchParams.get("originKey")!==a.originKey)throw Error("Shared sandbox URL is not bound to the verified app origin key")}else if(!c.hostname.split(".").includes(a.originKey))throw Error("Sandbox URL is not bound to the verified app origin key");if(c.origin===b.origin)throw Error("MCP Apps sandbox must use a distinct origin from FLUJO");return c.searchParams.set("token",a.token),c.href}(f,window.location),allowAll:!0===f.allowAll}}function P(a,b,c=!1,d=!1){let e=a=>{let c=/^(https|wss):\/\/(\*\.)?([^/:?#]+)(?::(\d{1,5}))?$/i.exec(a);if(!c||!b.includes(c[1].toLowerCase()))return!1;let d=c[3].split(".");if(c[3].length>253||d.some(a=>0===a.length||a.length>63||!/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i.test(a)))return!1;let e=c[4]?Number(c[4]):void 0;return void 0===e||Number.isInteger(e)&&e>=1&&e<=65535},f=[],g=new Set;for(let h of a??[]){if(0===h.length||h.length>2048||/[^\x21-\x7e]/.test(h))continue;if("*"===h){if(d)return["*"];continue}let a=c?(0,y._w)(h,b.includes("wss")?["http","ws"]:["http"]):void 0;if(!a&&!e(h))continue;let i=a??h,j=i.toLowerCase();if(!g.has(j)&&(g.add(j),f.push(i),f.length>=64))break}return f}function Q(a){return!!a&&"http:"===a.protocol}function R(a,b=Q(),c=!1){return{connectDomains:P(a.connectDomains,["https","wss"],b,c),resourceDomains:P(a.resourceDomains,["https"],b,c),frameDomains:P(a.frameDomains,["https"],b,c),baseUriDomains:P(a.baseUriDomains,["https"],b,c)}}function S(a){if(a)try{return JSON.parse(a)}catch{return}}async function T(a,b,c,d,e){let f;if(await a.sendToolInput({arguments:(f=S(b))&&"object"==typeof f&&!Array.isArray(f)?f:{}}),void 0!==d)return void await a.sendToolCancelled({reason:d});let g=function(a,b){if(void 0===a)return!0===b?{content:[],isError:!0}:null;let c=u.TF.safeParse(S(a));return c.success?{...c.data,...!0===b?{isError:!0}:{}}:{content:[{type:"text",text:a}],...!0===b?{isError:!0}:{}}}(c,e);g&&await a.sendToolResult(g)}function U(a,b,c){return b.includes(a)&&c.includes(a)}function V(a,b,c,d,e,f){let g=void 0===b?`${c??""}\u0000${d??""}\u0000${e??""}\u0000${f??""}`:`${typeof b}:${String(b)}`;return`${a??""}\u0000${g}`}function W(a,b){let c=a.getBoundingClientRect(),d=Math.max(1,Math.round(c.width||a.clientWidth||1));return b?{width:d,height:Math.max(1,Math.round(c.height||a.clientHeight||1))}:{width:d,maxHeight:6e3}}async function X(a,b,c){try{let d=await x.S.listServerTools(a),e=Array.isArray(d.tools)?d.tools:[],f=c?e.find(a=>a?.name===c):e.find(a=>(0,y.Gt)(a?._meta)===b);if(f?.name&&f?.inputSchema&&(0,y.Gt)(f._meta)===b)return{tool:f}}catch(a){E.debug("Could not resolve the full MCP App tool definition",a)}}let Y=({conversationId:a,ownerScopeId:b,serverName:c,uri:u,toolName:B,toolArgs:C,toolResultContent:N,toolOwnerScope:P,toolUpdateId:S,toolCancelledReason:Y,toolIsError:Z,onAppMessage:$,onUpdateModelContext:_,onRequestDock:aa,onDockable:ab,onAvailableDisplayModes:ac,hostDisplayMode:ad,onRequestDisplayMode:ae,onRequestClose:af,onRegisterTeardown:ag,teardownRegistrationKey:ah,docked:ai=!1,visible:aj=!0,defaultExpanded:ak=!1,autoDock:al=!1,linkedToolCallCount:am=1,onUserOpen:an})=>{let{t:ao}=(0,v.s9)(),{settings:ap,settingsHydrated:aq}=(0,w.rX)(),ar=!1!==aq,as=ap?.experimental?.requireMcpAppLaunchClick===!0,at=(0,f.A)(),au=(0,e.useId)(),av=(0,e.useMemo)(()=>{var d;let e;return(e=A((d={toolOwnerScope:P,toolResultContent:N,conversationId:a,ownerScopeId:b,serverName:c,uri:u,frameInstanceId:au}).toolOwnerScope)?d.toolOwnerScope:function(a){if(void 0!==a)try{let b="string"==typeof a?JSON.parse(a):a,c=z(z(b)?._meta),d=c?.["io.flujo/host-owner-scope"];return A(d)?d:void 0}catch{return}}(d.toolResultContent))||(d.conversationId?`conversation:${d.conversationId}`:d.ownerScopeId?.trim()?`app:${d.ownerScopeId.trim().slice(0,500)}`:`app:${d.serverName}:${d.uri}:${d.frameInstanceId}`)},[a,au,b,c,P,N,u]),[aw,ax]=(0,e.useState)(ak),[ay,az]=(0,e.useState)(!1),[aA,aB]=(0,e.useState)(null),[aC,aD]=(0,e.useState)(ar&&!as?"granted":"loading"),[aE,aF]=(0,e.useState)(!1),[aG,aH]=(0,e.useState)(null),aI=(0,e.useRef)(null);(0,e.useEffect)(()=>{aI.current=aA},[aA]),(0,e.useEffect)(()=>{if(!ar)return void aD("loading");if(!as){aD("granted"),aH(null);return}let b=!0;aD("loading");let d=new URLSearchParams({serverName:c,uri:u});return a&&d.set("conversationId",a),fetch(`/api/mcp/app-consent?${d}`).then(async a=>a.ok?a.json():Promise.reject(Error("Consent lookup failed"))).then(a=>{b&&["internal","granted","prompt","denied"].includes(a.status??"")&&aD(a.status)}).catch(()=>{b&&aD("denied")}),()=>{b=!1}},[ar,as,a,c,u]);let aJ=(0,e.useCallback)(async b=>{aF(!0),aH(null);try{let d=await fetch("/api/mcp/app-consent",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({serverName:c,uri:u,conversationId:a,decision:b})});if(!d.ok)throw Error("Unable to save MCP App consent");let e=await d.json();aD("granted"===e.status?"granted":"denied")}catch{aH(ao("chat.app.consentSaveFailed"))}finally{aF(!1)}},[a,c,ao,u]),aK=(0,e.useCallback)(async()=>{aF(!0),aH(null);try{let a=new URLSearchParams({serverName:c,uri:u});if(!(await fetch(`/api/mcp/app-consent?${a}`,{method:"DELETE"})).ok)throw Error("Unable to reset MCP App consent");aD("prompt")}catch{aH(ao("chat.app.consentSaveFailed"))}finally{aF(!1)}},[c,ao,u]),[aL,aM]=(0,e.useState)(ai?"pip":"inline"),[aN,aO]=(0,e.useState)(null),[aP,aQ]=(0,e.useState)([]),[aR,aS]=(0,e.useState)(!1),aT=(0,e.useRef)(ak),{activeCursor:aU,startPointerDrag:aV}=(0,D.LI)(),aW=ad??aL,aX=(0,e.useMemo)(()=>ai?["pip","fullscreen"]:["inline","fullscreen",...aa?["pip"]:[]],[ai,aa]),aY=(0,e.useRef)(null),aZ=(0,e.useRef)(null),a$=(0,e.useRef)(null),a_=(0,e.useRef)(200),a0=(0,e.useRef)(null),a1=(0,e.useRef)(!1),a2=(0,e.useRef)(0),a3=(0,e.useRef)(!1),a4=(0,e.useRef)(null),a5=(0,e.useRef)(null),a6=(0,e.useRef)(!1),a7=(0,e.useRef)(!0),a8=(0,e.useRef)([]),a9=(0,e.useRef)(aW),ba=(0,e.useRef)(aX),bb=(0,e.useRef)(B),bc=(0,e.useRef)(B),bd=(0,e.useRef)(av),be=(0,e.useRef)(av);bd.current=av;let bf=(0,e.useRef)(Promise.resolve()),bg=(0,e.useRef)(void 0),bh=(0,e.useRef)({toolName:B,args:C,resultContent:N,cancelledReason:Y,isError:Z,updateId:S});(0,e.useEffect)(()=>{},[ai,aW]),(0,e.useEffect)(()=>{},[ai,aW]);let bi=(0,e.useCallback)(a=>{if("fullscreen"!==aW||!aZ.current||a.target.closest('button,[role="button"]'))return;a.preventDefault();let b=aZ.current.getBoundingClientRect(),c=a.clientX,d=a.clientY;aV(a,"move",a=>{aO({...(0,D.RA)({x:b.left+a.clientX-c,y:b.top+a.clientY-d},{width:b.width,height:b.height},{width:window.innerWidth,height:window.innerHeight}),width:b.width,height:b.height})})},[aW,aV]),bj=(0,e.useCallback)((a,b,c)=>{if("fullscreen"!==aW||!aZ.current)return;let d=aZ.current.getBoundingClientRect(),e={x:d.left,y:d.top,width:d.width,height:d.height},f=a.clientX,g=a.clientY;aV(a,c,a=>{aO((0,D.hU)(e,b,a.clientX-f,a.clientY-g,{width:window.innerWidth,height:window.innerHeight},{width:Math.min(480,window.innerWidth),height:Math.min(320,window.innerHeight)}))})},[aW,aV]),bk=(0,D.ri)(aZ,"fullscreen"===aL&&!ai);bh.current={toolName:B,args:C,resultContent:N,cancelledReason:Y,isError:Z,updateId:S},bb.current=B;let bl=(0,e.useRef)($);(0,e.useEffect)(()=>{bl.current=$},[$]);let bm=(0,e.useRef)(_);(0,e.useEffect)(()=>{bm.current=_},[_]);let bn=(0,e.useRef)(aa);(0,e.useEffect)(()=>{bn.current=aa},[aa]);let bo=(0,e.useRef)(al);(0,e.useEffect)(()=>{al&&(bo.current=!0)},[al]);let bp=(0,e.useRef)(ab);(0,e.useEffect)(()=>{bp.current=ab},[ab]);let bq=(0,e.useRef)(ac);(0,e.useEffect)(()=>{bq.current=ac},[ac]);let br=(0,e.useRef)(ae);(0,e.useEffect)(()=>{br.current=ae},[ae]);let bs=(0,e.useRef)(af);(0,e.useEffect)(()=>{bs.current=af},[af]);let bt=(0,e.useRef)(ai);(0,e.useEffect)(()=>{bt.current=ai},[ai]),(0,e.useEffect)(()=>{a9.current=aW},[aW]),(0,e.useEffect)(()=>{ba.current=aX},[aX]);let bu=(0,e.useCallback)(()=>{if(a5.current)return a5.current;a2.current+=1;let a=a0.current,b=a$.current,c=a3.current;a0.current=null,a$.current=null,a3.current=!1,a1.current=!1,a8.current=[],a4.current?.disconnect(),a4.current=null;let d=(async()=>{if(a&&c){let b;try{await Promise.race([a.teardownResource({},{timeout:1e3}),new Promise(a=>{b=setTimeout(a,1e3)})])}catch(a){E.debug("MCP App did not acknowledge resource teardown",a)}finally{b&&clearTimeout(b)}}try{await a?.close()}catch{}b?.remove()})();return a5.current=d,d.finally(()=>{a5.current===d&&(a5.current=null)}),d},[]),bv=(0,e.useCallback)(()=>{a6.current||!bn.current||aI.current||(a6.current=!0,bu().then(()=>{a7.current&&(bn.current?.(),ax(!1))}).finally(()=>{a6.current=!1}))},[bu]),bw=(0,e.useCallback)((a,b,c,d,e)=>{bf.current=bf.current.catch(()=>void 0).then(async()=>{a0.current===a&&a3.current&&await T(a,b,c,d,e)}).catch(a=>{E.warn("MCP App tool delivery failed",a)})},[]),bx=(0,e.useCallback)(async()=>{if(a5.current&&await a5.current,a1.current||!aY.current)return;let b=a2.current+1;a2.current=b;let d=()=>a2.current===b&&a1.current;a1.current=!0,aQ([]),az(!0),aB(null);try{var e,f,g,h;let i,j,[k,l]=await Promise.all([x.S.readResourceFromApp(c,u),X(c,u,bb.current)]);if(!d())return;if(k?.httpStatus===403)throw Error(k?.error||ao("chat.app.accessDisabled"));if(!k||!1===k.success)throw Error(k?.error||ao("chat.app.readFailed"));let m=function(a,b){let c,d=a?.contents;if(!Array.isArray(d)||0===d.length)throw Error("Resource has no contents");let e=d.find(a=>a.uri===b&&"string"==typeof a.mimeType&&(0,y.q$)(a.mimeType)&&("string"==typeof a.text||"string"==typeof a.blob));if(!e)throw Error(`Resource ${b} did not return MCP App HTML`);try{if("string"==typeof e.text)c=e.text;else if("string"==typeof e.blob){var f;let a;f=e.blob,a=Uint8Array.from(atob(f),a=>a.charCodeAt(0)),c=new TextDecoder("utf-8",{fatal:!0}).decode(a)}else throw Error("Missing app resource body")}catch{throw Error(`Resource ${b} contains invalid base64 UTF-8 HTML`)}if(new TextEncoder().encode(c).length>y.Pt)throw Error(`Resource exceeds the ${Math.round(y.Pt/1024)} KiB size cap`);let g=K(e._meta??e.meta),h=K(g?.ui),i=t.c0.safeParse(h?.csp);if(h?.csp!==void 0&&!i.success)throw Error(`Resource ${b} declares an invalid CSP policy`);let j=t.Ml.safeParse(h?.permissions);if(h?.permissions!==void 0&&!j.success)throw Error(`Resource ${b} declares invalid sandbox permissions`);return{html:c,csp:i.success?R(i.data):void 0,rawCsp:i.success?i.data:void 0,permissions:j.success&&j.data.clipboardWrite?{clipboardWrite:{}}:void 0,prefersBorder:"boolean"==typeof h?.prefersBorder?h.prefersBorder:void 0}}(k.data,u);aS(!1===m.prefersBorder);let n=await O(c,u,a);if(!d()||!aY.current)return;n.allowAll&&m.rawCsp&&(m.csp=R(m.rawCsp,Q(),!0));let o=document.createElement("iframe");o.title=ao("chat.app.frameTitle",{uri:u}),o.setAttribute("sandbox","allow-scripts allow-same-origin"),o.referrerPolicy="origin";let p=(0,t.Sy)(m.permissions);p&&o.setAttribute("allow",p);let q=!1===m.prefersBorder?"transparent":"#fff";o.style.cssText=bt.current||"fullscreen"===a9.current?`width:100%;height:100%;border:none;background:${q};`:`width:100%;min-height:120px;height:200px;border:none;background:${q};`+(!1===m.prefersBorder?"":"border-radius:4px;"),aY.current.appendChild(o),a$.current=o;let r=new URL(n.href);m.csp&&r.searchParams.set("csp",JSON.stringify(m.csp));let s=r.origin,v=new Promise((a,b)=>{let c=setTimeout(()=>{window.removeEventListener("message",d),b(Error(ao("chat.app.proxyTimeout")))},1e4),d=b=>{b.source===o.contentWindow&&b.origin===s&&b.data?.jsonrpc==="2.0"&&b.data?.method==="ui/notifications/sandbox-proxy-ready"&&(clearTimeout(c),window.removeEventListener("message",d),a())};window.addEventListener("message",d)});if(o.src=r.href,await v,!d()||a$.current!==o)return;let w=a9.current,z="inline";a9.current=z;let A=new t.T1((e=bd.current,f=a=>{a2.current===b&&a0.current===A&&(aB(a),az(!1),bu().finally(()=>{bt.current&&bs.current?.()}))},{getServerCapabilities:()=>({tools:{},resources:{}}),setNotificationHandler:()=>{},request:async(a,b,d)=>{let{method:g,params:h}=a;if("tools/call"===g){let a=K(h),b="string"==typeof a?.name?a.name:void 0;if(!b)throw Error("MCP App tool call is missing a tool name");E.info(`MCP App tools/call: ${c}/${b}`);let g=await x.S.callToolFromApp(c,b,K(a?.arguments)??{},void 0,d?.signal,e);if(g?.httpStatus===403){let a=g?.error||"MCP Apps access was disabled for this server";throw f(a),Error(a)}if(!g||!1===g.success)throw Error(g?.error||`Tool call failed: ${b}`);return g.data}if("resources/read"===g){let a=K(h),b="string"==typeof a?.uri?a.uri:void 0;if(!b)throw Error("MCP App resource read is missing a URI");let d=await x.S.readResourceFromApp(c,b);if(d?.httpStatus===403){let a=d?.error||"MCP Apps access was disabled for this server";throw f(a),Error(a)}if(!d||!1===d.success)throw Error(d?.error||`Resource read failed: ${b}`);return d.data}if("resources/list"===g)return{resources:[]};if("resources/templates/list"===g)return{resourceTemplates:[]};throw Error(`MCP App requested unsupported method: ${g}`)}}),F,{openLinks:{},serverTools:{},serverResources:{},logging:{},...bl.current?{message:{text:{}}}:{},...bm.current?{updateModelContext:{text:{},structuredContent:{}}}:{},sandbox:{csp:m.csp,permissions:m.permissions}},{hostContext:{...l?{toolInfo:l}:{},theme:"dark"===at.palette.mode?"dark":"light",platform:"web",displayMode:z,availableDisplayModes:ba.current,containerDimensions:W(aY.current,bt.current),locale:navigator.language,timeZone:Intl.DateTimeFormat().resolvedOptions().timeZone,userAgent:navigator.userAgent,deviceCapabilities:{touch:navigator.maxTouchPoints>0,hover:window.matchMedia?.("(hover: hover)").matches??!1}}});a0.current=A;let B=()=>d()&&a0.current===A;if(A.onopenlink=async({url:a})=>{if(!B())return{isError:!0};let b=function(a){try{let b=new URL(a);if(!G.has(b.protocol)||b.username||b.password)return null;return b.href}catch{return null}}(a);if(!b)return E.warn("MCP App open-link rejected by URL policy",{serverName:c,uri:u}),{isError:!0};let d=window.open(b,"_blank","noopener,noreferrer");return d?(d.opener=null,{}):{isError:!0}},A.ondownloadfile=async({contents:a})=>{if(!B())return{isError:!0};try{for(let b of a??[]){let a,c=K(K(b)?.resource);if(!c)continue;let d=("string"==typeof c.uri?c.uri.split("/").pop():"")||"download",e="string"==typeof c.mimeType?c.mimeType:"application/octet-stream";if("string"==typeof c.blob){let b=Uint8Array.from(atob(c.blob),a=>a.charCodeAt(0));a=new Blob([b],{type:e})}else a=new Blob([String(c.text??"")],{type:e});let f=URL.createObjectURL(a),g=document.createElement("a");g.href=f,g.download=d,document.body.appendChild(g),g.click(),g.remove(),setTimeout(()=>URL.revokeObjectURL(f),4e3)}return{}}catch(a){return E.warn("MCP App download failed",a),{isError:!0}}},A.onloggingmessage=a=>{B()&&E.debug("MCP App log",a?.data)},A.onmessage=async a=>{if(!B())return{};if(!bl.current)throw Error("This host cannot deliver ui/message in this surface");let b=function(a){let b=K(a);if(b?.role!=="user")throw Error('This host accepts ui/message only with role "user"');let c=b.content,d=Array.isArray(c)?c:c&&"object"==typeof c?[c]:[];if(0===d.length||!d.every(L))throw Error("This host accepts text-only ui/message content");let e=d.map(a=>a.text).join("\n").trim();if(!e)throw Error("ui/message text must not be empty");return e}(a);if(!await bl.current(b))throw Error("ui/message was not delivered");return{}},A.onupdatemodelcontext=async a=>{if(!B())return{};let b=function(a){if(!a||"object"!=typeof a||Array.isArray(a))return"ui/update-model-context params must be an object";if(void 0!==a.content){if(!Array.isArray(a.content))return"Model context content must be an array";for(let b of a.content)if(!b||"object"!=typeof b||Array.isArray(b)||!I.has(b.type))return"Model context contains a modality this host did not advertise"}return void 0!==a.structuredContent&&(!a.structuredContent||"object"!=typeof a.structuredContent||Array.isArray(a.structuredContent))?"Model structuredContent must be an object":M(a)>J?`Model context exceeds ${J} bytes`:null}(a);if(b)throw Error(b);let d=`${c}::${u}`;if(!bm.current)throw Error("This host cannot preserve model context in this surface");if(!await bm.current(d,a))throw Error("MCP App model context was not stored");return{}},A.onsizechange=async({width:a,height:b})=>{if(!B()||bt.current)return;let c=aY.current?.getBoundingClientRect().width||aY.current?.clientWidth||0,d=function(a,b){let c={};if(Number.isFinite(a.width)&&a.width>0){let d=Number.isFinite(b)&&b>0?b:6e3;c.width=Math.min(a.width,d,6e3)}return Number.isFinite(a.height)&&a.height>0&&(c.height=Math.min(a.height,6e3)),c}({width:a,height:b},c);void 0!==d.height&&(a_.current=d.height,"fullscreen"!==a9.current&&(o.style.height=`${d.height}px`)),void 0!==d.width&&(o.style.width=`${d.width}px`,o.style.maxWidth="100%")},A.onrequestdisplaymode=async({mode:a})=>{if(!B())return{mode:a9.current};let b=a9.current,c=a8.current;if(!U(a,ba.current,c))return{mode:b};if("pip"===a&&!bt.current&&bn.current)return setTimeout(bv,0),{mode:b};let d=b;return(d=br.current?await br.current(a,[...c]):a)===b||U(d,ba.current,c)||(d=b),d!==b&&(a9.current=d,aM(d),await A.sendHostContextChange({displayMode:d})),{mode:d}},A.onrequestteardown=()=>{B()&&bu().finally(()=>{bs.current?bs.current():(a9.current="inline",aM("inline"),ax(!1))})},A.oninitialized=()=>{var a,b,c,d;if(!B())return;let e=A.getAppCapabilities()?.availableDisplayModes,f=Array.isArray(e)?[...new Set(e.filter(a=>H.includes(a)))]:[];a8.current=f,aQ(f),bp.current?.(f.includes("pip")),bq.current?.([...f]),a3.current=!0;let g=(a=w,b=bt.current,c=ba.current,d=f,b?U("pip",c,d)?"fullscreen"===a&&U("fullscreen",c,d)?"fullscreen":"pip":null:"fullscreen"===a&&U("fullscreen",c,d)?"fullscreen":"inline");if(null===g){aB(ao("chat.app.canvasUnsupported")),az(!1),bu();return}bo.current&&f.includes("pip")&&!bt.current&&bn.current&&setTimeout(bv,0),a9.current=g,aM(g),g!==z&&A.sendHostContextChange({displayMode:g});let h=aY.current;if(h&&"u">typeof ResizeObserver){let a=()=>{if(!B()||!a3.current)return;let a=h.getBoundingClientRect();a.width<=0||bt.current&&a.height<=0||A.sendHostContextChange({containerDimensions:W(h,bt.current)})};a4.current?.disconnect(),a4.current=new ResizeObserver(a),a4.current.observe(h),a()}let i=bh.current;bg.current=V(i.toolName,i.updateId,i.args,i.resultContent,i.cancelledReason,i.isError),(void 0!==i.args||void 0!==i.resultContent||void 0!==i.cancelledReason||!0===i.isError)&&bw(A,i.args,i.resultContent,i.cancelledReason,i.isError),az(!1)},await A.connect((g=o.contentWindow,h=o.contentWindow,i=new t.hJ(g,h),j={start:async()=>{i.onmessage=(a,b)=>{j.onmessage?.("ui/message"!==a.method||!a.params||Array.isArray(a.params.content)||!a.params.content||"object"!=typeof a.params.content?a:{...a,params:{...a.params,content:[a.params.content]}},b)},i.onerror=a=>j.onerror?.(a),i.onclose=()=>j.onclose?.(),await i.start()},send:(a,b)=>i.send(a,b),close:()=>i.close(),setProtocolVersion:a=>i.setProtocolVersion?.(a)})),!B())return;await A.sendSandboxResourceReady({html:m.html,csp:m.csp,permissions:m.permissions})}catch(a){if(!d())return;E.warn(`Failed to mount MCP App ${u} from ${c}`,a),aB(a instanceof Error?a.message:ao("chat.app.loadFailed")),az(!1),bu()}},[bv,av,bw,c,bu,at.palette.mode,u,ao]),by=(0,e.useCallback)(()=>{let a=!aw;a||"fullscreen"!==a9.current||(a9.current="inline",aM("inline"),a0.current?.sendHostContextChange({displayMode:"inline"})),a&&an?.(),ax(a),a&&("internal"===aC||"granted"===aC)&&setTimeout(()=>{bx()},0)},[aC,aw,bx,an]);if((0,e.useEffect)(()=>{let a=aT.current;aT.current=ak,ai||!ak||a||aw||ax(!0)},[ak,ai,aw]),(0,e.useEffect)(()=>{ai&&("internal"===aC||"granted"===aC)&&!a1.current&&bx()},[aC,ai,bx]),(0,e.useEffect)(()=>{if(!ai&&("internal"===aC||"granted"===aC)&&aw&&!a1.current){let a=window.setTimeout(()=>{bx()},0);return()=>window.clearTimeout(a)}},[aC,ak,ai,aw,bx]),(0,e.useEffect)(()=>{let a=a$.current;if(a){if(ai||"fullscreen"===aW){a.style.width="100%",a.style.height="100%",a.style.minHeight="0",a.style.borderRadius="0";return}a.style.width="100%",a.style.height=`${a_.current}px`,a.style.minHeight="120px",a.style.borderRadius=aR?"0":"4px"}},[aR,ai,aW]),(0,e.useEffect)(()=>{bc.current===B&&be.current===av||(bc.current=B,be.current=av,(a1.current||a5.current)&&bu().then(()=>{a7.current&&(bt.current||aw)&&bx()}))},[aw,bx,av,bu,B]),(0,e.useEffect)(()=>{let a=V(B,S,C,N,Y,Z);a3.current&&a0.current&&a!==bg.current&&(bg.current=a,bu().then(()=>{a7.current&&(bt.current||aw)&&bx()}))},[aw,bx,bu,C,Y,Z,B,N,S]),(0,e.useEffect)(()=>{ad&&a3.current&&a0.current&&a9.current!==ad&&U(ad,ba.current,a8.current)&&(a9.current=ad,aM(ad),a0.current.sendHostContextChange({displayMode:ad}))},[ad]),(0,e.useEffect)(()=>{a3.current&&a0.current&&a0.current?.sendHostContextChange({theme:"dark"===at.palette.mode?"dark":"light"})},[at.palette.mode]),(0,e.useEffect)(()=>{let a=ah??`${c}::${u}`;return ag?.(a,bu),()=>ag?.(a,null)},[ag,c,bu,ah,u]),(0,e.useEffect)(()=>{let a=a=>{let b=a.detail;b?.serverName===c&&(b.config?.enableMcpApps===!1||b.config?.disabled===!0)&&(aB(ao("chat.app.accessDisabled")),az(!1),bu().finally(()=>{bt.current&&bs.current?.()}))};return window.addEventListener("flujo:mcp-server-config-changed",a),()=>{window.removeEventListener("flujo:mcp-server-config-changed",a)}},[c,bu,ao]),(0,e.useEffect)(()=>(a7.current=!0,()=>{a7.current=!1,bu()}),[bu]),ai)return(0,d.jsxs)(g.default,{sx:{height:"100%",width:"100%",minHeight:0,display:"flex",visibility:aj?"visible":"hidden",pointerEvents:aj?"auto":"none",flexDirection:"column"},children:[ar&&as&&"loading"===aC&&(0,d.jsx)(h.A,{variant:"body2",sx:{p:2},children:ao("chat.app.consentChecking")}),"prompt"===aC&&(0,d.jsxs)(g.default,{sx:{p:2},children:[(0,d.jsx)(h.A,{variant:"body2",sx:{mb:1},children:ao("chat.app.consentPrompt")}),(0,d.jsxs)(h.A,{variant:"caption",color:"text.secondary",display:"block",sx:{mb:1},children:[c," — ",u]}),(0,d.jsx)(i.A,{size:"small",disabled:aE,onClick:()=>{aJ("allow-once")},children:ao("chat.app.consentAllowOnce")}),(0,d.jsx)(i.A,{size:"small",disabled:aE,onClick:()=>{aJ("allow-always")},children:ao("chat.app.consentAllowAlways")}),(0,d.jsx)(i.A,{size:"small",disabled:aE,color:"inherit",onClick:()=>{aJ("deny-always")},children:ao("chat.app.consentNeverAllow")})]}),"denied"===aC&&(0,d.jsxs)(g.default,{sx:{p:2},children:[(0,d.jsx)(h.A,{variant:"body2",color:"text.secondary",sx:{mb:1},children:ao("chat.app.consentBlocked")}),(0,d.jsx)(i.A,{size:"small",disabled:aE,onClick:()=>{aJ("allow-always")},children:ao("chat.app.consentAllowAlways")}),(0,d.jsx)(i.A,{size:"small",disabled:aE,color:"inherit",onClick:()=>{aK()},children:ao("chat.app.consentAskAgain")})]}),aG&&(0,d.jsx)(j.A,{severity:"error",sx:{m:1},children:aG}),("internal"===aC||"granted"===aC)&&ay&&(0,d.jsxs)(g.default,{sx:{display:"flex",alignItems:"center",gap:1,py:2,justifyContent:"center"},children:[(0,d.jsx)(k.default,{size:16,thickness:6}),(0,d.jsx)(h.A,{variant:"body2",color:"text.secondary",children:ao("chat.app.loading")})]}),aA&&(0,d.jsx)(j.A,{severity:"error",sx:{m:1},children:aA}),(0,d.jsx)(g.default,{ref:aY,sx:{flex:1,minHeight:0,width:"100%",display:aA?"none":"block"}})]});let bz=aP.includes("inline")&&aP.includes("fullscreen")&&aX.includes("fullscreen"),bA=aP.includes("inline")&&aP.includes("pip")&&aX.includes("pip")&&!!aa;return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(g.default,{ref:aZ,sx:{mt:1,...aR?{border:0,borderRadius:0}:{border:"1px solid",borderColor:"divider",borderRadius:1},overflow:"hidden",..."fullscreen"===aL?{position:"fixed",left:(aN?.x??16)-bk.x,top:(aN?.y??16)-bk.y,width:aN?.width??"calc(100vw - 32px)",height:aN?.height??"calc(100vh - 32px)",minWidth:"min(480px, 100vw)",minHeight:"min(320px, 100vh)",maxWidth:"100vw",maxHeight:"100vh",zIndex:1300,bgcolor:"background.paper",boxShadow:6,display:"flex",flexDirection:"column"}:{}},children:["fullscreen"===aL&&(0,d.jsx)(D.y1,{label:ao("chat.canvas.resize"),onResizeStart:bj}),(0,d.jsxs)(g.default,{onPointerDown:bi,sx:{display:"flex",alignItems:"center",gap:1,px:1,py:.5,bgcolor:"action.hover",cursor:"fullscreen"===aL?"move":"default",userSelect:"none",flexShrink:0},children:[(0,d.jsx)(n.A,{fontSize:"small",color:"primary"}),(0,d.jsx)(h.A,{variant:"body2",sx:{fontWeight:500},children:ao("chat.app.fromServer",{server:c})}),am>1&&(0,d.jsxs)(h.A,{variant:"caption",color:"text.secondary",children:["\xd7",am]}),(0,d.jsx)(l.A,{title:ao("chat.app.sandboxHelp"),children:(0,d.jsx)(o.A,{fontSize:"small",color:"action"})}),(0,d.jsx)(g.default,{sx:{flex:1}}),aw&&bA&&(0,d.jsx)(i.A,{size:"small",onClick:bv,children:ao("chat.app.canvas")}),aw&&(0,d.jsx)(l.A,{title:bz?"fullscreen"===aL?ao("chat.app.exitFullscreen"):ao("chat.app.fullscreen"):ao("chat.app.fullscreenUnsupported"),children:(0,d.jsx)("span",{children:(0,d.jsx)(i.A,{size:"small",disabled:!bz,onClick:()=>{let a="fullscreen"===aL?"inline":"fullscreen";U(a,aX,aP)&&(a9.current=a,aM(a),a0.current?.sendHostContextChange({displayMode:a}))},sx:{minWidth:0},children:"fullscreen"===aL?(0,d.jsx)(s.A,{fontSize:"small"}):(0,d.jsx)(r.A,{fontSize:"small"})})})}),(0,d.jsx)(i.A,{size:"small",onClick:by,startIcon:aw?(0,d.jsx)(q.A,{}):(0,d.jsx)(p.A,{}),children:aw?ao("chat.app.hide"):ao("chat.app.open")})]}),aw&&"prompt"===aC&&(0,d.jsxs)(g.default,{sx:{p:1},children:[(0,d.jsx)(h.A,{variant:"body2",sx:{mb:1},children:ao("chat.app.consentPrompt")}),(0,d.jsx)(h.A,{variant:"caption",color:"text.secondary",display:"block",sx:{mb:1},children:u}),(0,d.jsx)(i.A,{size:"small",disabled:aE,onClick:()=>{aJ("allow-once")},children:ao("chat.app.consentAllowOnce")}),(0,d.jsx)(i.A,{size:"small",disabled:aE,onClick:()=>{aJ("allow-always")},children:ao("chat.app.consentAllowAlways")}),(0,d.jsx)(i.A,{size:"small",disabled:aE,color:"inherit",onClick:()=>{aJ("deny-always")},children:ao("chat.app.consentNeverAllow")})]}),aw&&"denied"===aC&&(0,d.jsxs)(g.default,{sx:{p:1},children:[(0,d.jsx)(h.A,{variant:"body2",color:"text.secondary",sx:{mb:1},children:ao("chat.app.consentBlocked")}),(0,d.jsx)(i.A,{size:"small",disabled:aE,onClick:()=>{aJ("allow-always")},children:ao("chat.app.consentAllowAlways")}),(0,d.jsx)(i.A,{size:"small",disabled:aE,color:"inherit",onClick:()=>{aK()},children:ao("chat.app.consentAskAgain")})]}),aw&&aG&&(0,d.jsx)(j.A,{severity:"error",sx:{m:1},children:aG}),(0,d.jsx)(m.A,{in:aw&&("internal"===aC||"granted"===aC),onExited:()=>{bu()},sx:"fullscreen"===aL?{flex:1,minHeight:0,display:"flex",flexDirection:"column","& .MuiCollapse-wrapper, & .MuiCollapse-wrapperInner":{height:"100%",minHeight:0,display:"flex",flexDirection:"column"}}:void 0,children:(0,d.jsxs)(g.default,{sx:{p:1,height:"fullscreen"===aL?"100%":"auto",minHeight:0,display:"flex",flexDirection:"column"},children:[ay&&(0,d.jsxs)(g.default,{sx:{display:"flex",alignItems:"center",gap:1,py:2,justifyContent:"center"},children:[(0,d.jsx)(k.default,{size:16,thickness:6}),(0,d.jsx)(h.A,{variant:"body2",color:"text.secondary",children:ao("chat.app.loading")})]}),aA&&(0,d.jsx)(j.A,{severity:"error",sx:{my:1},children:aA}),(0,d.jsx)(g.default,{ref:aY,sx:{width:"100%",flex:"fullscreen"===aL?1:void 0,minHeight:0,height:"fullscreen"===aL?"100%":"auto",display:aA?"none":"block"}})]})})]}),(0,d.jsx)(D.Fy,{cursor:aU})]})}},15380:(a,b,c)=>{c.d(b,{Fy:()=>n,LI:()=>m,RA:()=>i,eH:()=>k,hU:()=>j,ri:()=>l,y1:()=>q});var d=c(48249),e=c(67484),f=c(29184);let g=(a,b,c)=>Math.min(Math.max(a,b),Math.max(b,c)),h={x:0,y:0};function i(a,b,c){return{x:g(a.x,0,Math.max(0,c.width-b.width)),y:g(a.y,0,Math.max(0,c.height-b.height))}}function j(a,b,c,d,e,f){let h=b.includes("left"),i=b.includes("right"),j=b.includes("top"),k=b.includes("bottom"),l=a.x+a.width,m=a.y+a.height,n=a.x,o=a.y,p=a.width,q=a.height;return h?(n=g(a.x+c,0,l-f.width),p=l-n):i&&(p=g(a.width+c,f.width,e.width-a.x)),j?(o=g(a.y+d,0,m-f.height),q=m-o):k&&(q=g(a.height+d,f.height,e.height-a.y)),{x:n,y:o,width:p,height:q}}function k(a,b,c){let d=g(a.width,c.width,b.width),e=g(a.height,c.height,b.height);return{x:g(a.x,0,b.width-d),y:g(a.y,0,b.height-e),width:d,height:e}}function l(a,b){let[c,d]=(0,e.useState)(h);return c}function m(){let[a,b]=(0,e.useState)(null),c=(0,e.useRef)(null),d=(0,e.useRef)(!0);return{activeCursor:a,startPointerDrag:(0,e.useCallback)((a,e,f)=>{c.current?.(),a.preventDefault(),a.stopPropagation();let g=a.currentTarget,h=a.pointerId,i=g.ownerDocument,j=i.defaultView??window,k=i.body.style.userSelect,l=i.body.style.cursor;try{g.setPointerCapture?.(h)}catch{}i.body.style.userSelect="none",i.body.style.cursor=e??"",b(e);let m=a=>{a.pointerId===h&&(a.preventDefault(),f(a))},n=(a=!0)=>{j.removeEventListener("pointermove",m,!0),j.removeEventListener("pointerup",o,!0),j.removeEventListener("pointercancel",o,!0);try{g.hasPointerCapture?.(h)&&g.releasePointerCapture(h)}catch{}i.body.style.userSelect=k,i.body.style.cursor=l,a&&d.current&&b(null),c.current===n&&(c.current=null)},o=a=>{a.pointerId===h&&n()};c.current=n,j.addEventListener("pointermove",m,!0),j.addEventListener("pointerup",o,!0),j.addEventListener("pointercancel",o,!0)},[])}}let n=({cursor:a})=>a?(0,d.jsx)(f.default,{"aria-hidden":!0,"data-testid":"pointer-drag-shield",sx:{position:"fixed",inset:0,zIndex:0x7ffffffe,cursor:a,touchAction:"none"}}):null,o={top:{top:-3,left:10,right:10,height:8},right:{right:-3,top:10,bottom:10,width:8},bottom:{bottom:-3,left:10,right:10,height:8},left:{left:-3,top:10,bottom:10,width:8},"top-left":{top:-3,left:-3,width:14,height:14},"top-right":{top:-3,right:-3,width:14,height:14},"bottom-left":{bottom:-3,left:-3,width:14,height:14},"bottom-right":{bottom:-3,right:-3,width:14,height:14}},p=Object.keys(o),q=({label:a,onResizeStart:b})=>(0,d.jsx)(d.Fragment,{children:p.map(c=>{let e="top"===c||"bottom"===c?"ns-resize":"left"===c||"right"===c?"ew-resize":"top-left"===c||"bottom-right"===c?"nwse-resize":"nesw-resize";return(0,d.jsx)(f.default,{component:"span",role:"separator","aria-label":`${a} (${c})`,onPointerDown:a=>b(a,c,e),sx:{position:"absolute",zIndex:8,cursor:e,touchAction:"none",...o[c],..."bottom-right"===c?{"&::after":{content:'""',position:"absolute",right:3,bottom:3,width:7,height:7,borderRight:2,borderBottom:2,borderColor:"text.secondary",opacity:.7}}:{}}},c)})})},97701:(a,b,c)=>{c.d(b,{aI:()=>d,$Z:()=>g,Th:()=>e,BC:()=>r});let d=300,e=-1;var f=c(98469);let g=8,h=/^[a-z0-9]+(?:-[a-z0-9]+)*$/,i=/^sha256:[0-9a-f]{64}$/;class j extends Error{constructor(a){super(a),this.name="McpSkillsValidationError"}}function k(a){throw new j(a)}function l(a,b){return(null===a||"object"!=typeof a||Array.isArray(a))&&k(`${b} must be an object`),a}function m(a){let b;"string"==typeof a&&a||k("resource URI must be a non-empty string"),a.includes("\\")&&k("resource URI must use forward slashes");try{b=new URL(a)}catch{k("resource URI must be an absolute URI")}(!b.protocol||b.username||b.password||b.port||b.search||b.hash)&&k("resource URI must have no credentials, port, query, or fragment");var c="resource URI";let d=b.pathname.split("/");for(let a=0;a<d.length;a+=1){let b,e=d[a];if(0!==a||""!==e){e||k(`${c} contains an empty path segment`);try{b=decodeURIComponent(e)}catch{k(`${c} contains invalid percent encoding`)}("."===b||".."===b||b.includes("/")||b.includes("\\"))&&k(`${c} contains an unsafe path segment`)}}return b.href}function n(a){let b,c=m(a),d=new URL(c),e=d.pathname.split("/").filter(Boolean);"SKILL.md"!==e[e.length-1]&&k("skill URI must identify a top-level SKILL.md");let f=e.slice(0,-1),g=f.length>0?f[f.length-1]:d.hostname;try{b=decodeURIComponent(g)}catch{k("skill URI contains an invalid name")}o(b);let h=c.slice(0,-9);return{normalizedUri:c,rootUri:h,name:b,scheme:d.protocol.slice(0,-1)}}function o(a){return("string"!=typeof a||a.length<1||a.length>64||!h.test(a))&&k("skill name must be 1-64 lowercase alphanumeric or hyphen characters without leading, trailing, or consecutive hyphens"),a}function p(a){let b={};return void 0!==a.ttlMs&&(("number"!=typeof a.ttlMs||!Number.isInteger(a.ttlMs)||a.ttlMs<0)&&k("ttlMs must be a non-negative integer"),b.ttlMs=a.ttlMs),void 0!==a.cacheScope&&("public"!==a.cacheScope&&"private"!==a.cacheScope&&k('cacheScope must be "public" or "private"'),b.cacheScope=a.cacheScope),b}function q(a){var b,c;let d,e,f=l(a,"skill entry"),g=n(f.uri),h=(b=f.frontmatter,c=g.name,(e=o((d=l(b,"skill frontmatter")).name))!==c&&k("skill frontmatter name must match the final skill path segment"),("string"!=typeof d.description||d.description.length<1||d.description.length>1024)&&k("skill description must be a non-empty string of at most 1024 characters"),{...d,name:e,description:d.description});if("dynamic"===f.resources)return{uri:g.normalizedUri,frontmatter:h,resources:"dynamic"};Array.isArray(f.resources)||k('skill resources must be a complete array or "dynamic"'),(f.resources.length<1||f.resources.length>512)&&k("skill resources must contain 1-512 entries");let j=new Set,p=0,q=!1,r=f.resources.map((a,b)=>{var c;let d=l(a,`skill resource ${b}`),e=m(d.uri);e===g.normalizedUri||e.startsWith(`${g.rootUri}/`)||k("skill resource URI must be contained within the skill root"),j.has(e)&&k("skill resource URIs must be unique"),j.add(e),("number"!=typeof d.size||!Number.isSafeInteger(d.size)||d.size<0)&&k("skill resource size must be a non-negative safe integer");let f=("string"==typeof(c=d.digest)&&i.test(c)||k("skill resource digest must be sha256 followed by 64 lowercase hex characters"),c);return(p+=d.size)>0x1000000&&k("skill resources exceed the 16777216-byte limit"),e===g.normalizedUri&&(q=!0),{uri:e,digest:f,size:d.size}});return q||k("skill resources must include the top-level SKILL.md"),{uri:g.normalizedUri,frontmatter:h,resources:r}}function r(a,b,c){return JSON.stringify([a,n(b).normalizedUri,c])}f.object({method:f.literal("skills/list"),params:f.object({cursor:f.string().optional()}).optional()}),f.object({method:f.literal("skills/get"),params:f.object({uri:f.string().min(1)})}),f.object({method:f.literal("resources/directory/read"),params:f.object({uri:f.string().min(1),cursor:f.string().optional()})}),f.unknown().transform(a=>(function(a){let b=l(a,"skills/list result");"complete"!==b.resultType&&k('skills/list resultType must be "complete"'),Array.isArray(b.skills)||k("skills/list skills must be an array"),void 0!==b.nextCursor&&"string"!=typeof b.nextCursor&&k("skills/list nextCursor must be a string");let c=b.skills.map(q),d=new Set;for(let a of c)d.has(a.uri)&&k("skills/list skill URIs must be unique"),d.add(a.uri);return{resultType:"complete",skills:c,...void 0===b.nextCursor?{}:{nextCursor:b.nextCursor},...p(b)}})(a)),f.unknown().transform(a=>{let b;return"complete"!==(b=l(a,"skills/get result")).resultType&&k('skills/get resultType must be "complete"'),{resultType:"complete",skill:q(b.skill),...p(b)}}),f.unknown().transform(a=>{let b;return"complete"!==(b=l(a,"resources/directory/read result")).resultType&&k('resources/directory/read resultType must be "complete"'),Array.isArray(b.resources)||k("resources/directory/read resources must be an array"),void 0!==b.nextCursor&&"string"!=typeof b.nextCursor&&k("resources/directory/read nextCursor must be a string"),{resultType:"complete",resources:b.resources.map((a,b)=>{let c=l(a,`directory resource ${b}`),d=m(c.uri);return"string"==typeof c.name&&c.name||k("directory resource name must be a non-empty string"),void 0!==c.description&&"string"!=typeof c.description&&k("directory resource description must be a string"),void 0!==c.mimeType&&"string"!=typeof c.mimeType&&k("directory resource mimeType must be a string"),{...c,uri:d,name:c.name,...void 0===c.description?{}:{description:c.description},...void 0===c.mimeType?{}:{mimeType:c.mimeType}}}),...void 0===b.nextCursor?{}:{nextCursor:b.nextCursor},...p(b)}})}};
1
+ "use strict";exports.id=2887,exports.ids=[2887],exports.modules={3146:(a,b,c)=>{c.d(b,{Hm:()=>f,xc:()=>e,yo:()=>g});let d=["key","secret","token","password"],e=a=>d.some(b=>a.toLowerCase().includes(b)),f=a=>e(a)||"authorization"===a.trim().toLowerCase(),g=a=>{if(!a)return a;if(a.includes("_-_-_")){let b=a.split("_-_-_");return 3===b.length?b[2]:a}let b=/^mcp_(.+)_[0-9a-z]+$/.exec(a);if(b&&b[1])return b[1];let c=a.indexOf("__");return c>0&&c+2<a.length?a.slice(c+2):a}},8528:(a,b,c)=>{c.d(b,{uJ:()=>J,Ay:()=>Y,Yw:()=>M});var d=c(48249),e=c(67484),f=c(33480),g=c(29184),h=c(55784),i=c(77217),j=c(76108),k=c(52454),l=c(88458),m=c(13288),n=c(2247),o=c(25303),p=c(52317),q=c(78717),r=c(30193),s=c(58137),t=c(65505),u=c(66547),v=c(32166),w=c(23806),x=c(92646),y=c(94651);let z=a=>null===a||"object"!=typeof a||Array.isArray(a)?void 0:a;function A(a){return"string"==typeof a&&a.length>0&&a.length<=512&&a.trim()===a}var B=c(39361),C=c(6680),D=c(15380);let E=(0,C.h)("frontend/components/Chat/McpAppFrame"),F={name:"FLUJO",version:"3.45.2"},G=new Set(["https:","http:"]),H=["inline","fullscreen","pip"],I=new Set(["text"]),J=262144,K=a=>null===a||"object"!=typeof a||Array.isArray(a)?void 0:a,L=a=>{let b=K(a);return b?.type==="text"&&"string"==typeof b.text};function M(a){try{return new TextEncoder().encode(JSON.stringify(a)).length}catch{return 1/0}}let N=new Map;async function O(a,b,c){let d=(0,B.dJ)(),e=JSON.stringify([d,a,b,c??null]);if(!N.has(e)){let f=new URLSearchParams;f.set("serverName",a),f.set("uri",b),c&&f.set("conversationId",c);let g=fetch((0,B.TA)(`/api/mcp/app-sandbox${f.toString()?`?${f}`:""}`,d)).then(async a=>{if(!a.ok){let b="";try{let c=await a.json();"string"==typeof c.error&&c.error.trim()&&(b=`: ${c.error.trim()}`)}catch{}throw Error(`Sandbox endpoint discovery failed (${a.status})${b}`)}return await a.json()}).catch(a=>{throw N.delete(e),a});N.set(e,g)}let f=await N.get(e);return{href:function(a,b){let c;if("boolean"!=typeof a.shared)throw Error("Sandbox endpoint discovery did not describe its origin mode");if(!function(a){if("string"!=typeof a)return!1;let b=a.trim();if(0===b.length||b.length>253||b!==a||b!==b.toLowerCase()||/[^\w.-]|[^\x00-\x7f]/i.test(b)||/^\d+(\.\d+)*$/.test(b)||b.includes(":")||/[/?#@]/.test(b))return!1;let c=b.split(".");return!(0===c.length||c.some(a=>0===a.length))&&c.every(a=>a.length<=63&&/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/.test(a))}(a.originKey))throw Error("Sandbox endpoint discovery returned an invalid origin key");if("string"!=typeof a.token||0===a.token.length)throw Error("Sandbox endpoint discovery returned invalid credentials");if("string"!=typeof a.url)throw Error("Sandbox endpoint discovery did not return an isolated app URL");try{c=new URL(a.url)}catch{throw Error("Sandbox endpoint discovery returned an invalid public URL")}if("http:"!==c.protocol&&"https:"!==c.protocol||c.username||c.password)throw Error("Sandbox public URL must be an absolute HTTP(S) URL without credentials");if("https:"===b.protocol&&"https:"!==c.protocol)throw Error("HTTPS FLUJO deployments require an HTTPS MCP Apps sandbox URL");if(a.shared){if(c.searchParams.get("originKey")!==a.originKey)throw Error("Shared sandbox URL is not bound to the verified app origin key")}else if(!c.hostname.split(".").includes(a.originKey))throw Error("Sandbox URL is not bound to the verified app origin key");if(c.origin===b.origin)throw Error("MCP Apps sandbox must use a distinct origin from FLUJO");return c.searchParams.set("token",a.token),c.href}(f,window.location),allowAll:!0===f.allowAll}}function P(a,b,c=!1,d=!1){let e=a=>{let c=/^(https|wss):\/\/(\*\.)?([^/:?#]+)(?::(\d{1,5}))?$/i.exec(a);if(!c||!b.includes(c[1].toLowerCase()))return!1;let d=c[3].split(".");if(c[3].length>253||d.some(a=>0===a.length||a.length>63||!/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i.test(a)))return!1;let e=c[4]?Number(c[4]):void 0;return void 0===e||Number.isInteger(e)&&e>=1&&e<=65535},f=[],g=new Set;for(let h of a??[]){if(0===h.length||h.length>2048||/[^\x21-\x7e]/.test(h))continue;if("*"===h){if(d)return["*"];continue}let a=c?(0,y._w)(h,b.includes("wss")?["http","ws"]:["http"]):void 0;if(!a&&!e(h))continue;let i=a??h,j=i.toLowerCase();if(!g.has(j)&&(g.add(j),f.push(i),f.length>=64))break}return f}function Q(a){return!!a&&"http:"===a.protocol}function R(a,b=Q(),c=!1){return{connectDomains:P(a.connectDomains,["https","wss"],b,c),resourceDomains:P(a.resourceDomains,["https"],b,c),frameDomains:P(a.frameDomains,["https"],b,c),baseUriDomains:P(a.baseUriDomains,["https"],b,c)}}function S(a){if(a)try{return JSON.parse(a)}catch{return}}async function T(a,b,c,d,e){let f;if(await a.sendToolInput({arguments:(f=S(b))&&"object"==typeof f&&!Array.isArray(f)?f:{}}),void 0!==d)return void await a.sendToolCancelled({reason:d});let g=function(a,b){if(void 0===a)return!0===b?{content:[],isError:!0}:null;let c=u.TF.safeParse(S(a));return c.success?{...c.data,...!0===b?{isError:!0}:{}}:{content:[{type:"text",text:a}],...!0===b?{isError:!0}:{}}}(c,e);g&&await a.sendToolResult(g)}function U(a,b,c){return b.includes(a)&&c.includes(a)}function V(a,b,c,d,e,f){let g=void 0===b?`${c??""}\u0000${d??""}\u0000${e??""}\u0000${f??""}`:`${typeof b}:${String(b)}`;return`${a??""}\u0000${g}`}function W(a,b){let c=a.getBoundingClientRect(),d=Math.max(1,Math.round(c.width||a.clientWidth||1));return b?{width:d,height:Math.max(1,Math.round(c.height||a.clientHeight||1))}:{width:d,maxHeight:6e3}}async function X(a,b,c){try{let d=await x.S.listServerTools(a),e=Array.isArray(d.tools)?d.tools:[],f=c?e.find(a=>a?.name===c):e.find(a=>(0,y.Gt)(a?._meta)===b);if(f?.name&&f?.inputSchema&&(0,y.Gt)(f._meta)===b)return{tool:f}}catch(a){E.debug("Could not resolve the full MCP App tool definition",a)}}let Y=({conversationId:a,ownerScopeId:b,serverName:c,uri:u,toolName:B,toolArgs:C,toolResultContent:N,toolOwnerScope:P,toolUpdateId:S,toolCancelledReason:Y,toolIsError:Z,onAppMessage:$,onUpdateModelContext:_,onRequestDock:aa,onDockable:ab,onAvailableDisplayModes:ac,hostDisplayMode:ad,onRequestDisplayMode:ae,onRequestClose:af,onRegisterTeardown:ag,teardownRegistrationKey:ah,docked:ai=!1,visible:aj=!0,defaultExpanded:ak=!1,autoDock:al=!1,linkedToolCallCount:am=1,onUserOpen:an})=>{let{t:ao}=(0,v.s9)(),{settings:ap,settingsHydrated:aq}=(0,w.rX)(),ar=!1!==aq,as=ap?.experimental?.requireMcpAppLaunchClick===!0,at=(0,f.A)(),au=(0,e.useId)(),av=(0,e.useMemo)(()=>{var d;let e;return(e=A((d={toolOwnerScope:P,toolResultContent:N,conversationId:a,ownerScopeId:b,serverName:c,uri:u,frameInstanceId:au}).toolOwnerScope)?d.toolOwnerScope:function(a){if(void 0!==a)try{let b="string"==typeof a?JSON.parse(a):a,c=z(z(b)?._meta),d=c?.["io.flujo/host-owner-scope"];return A(d)?d:void 0}catch{return}}(d.toolResultContent))||(d.conversationId?`conversation:${d.conversationId}`:d.ownerScopeId?.trim()?`app:${d.ownerScopeId.trim().slice(0,500)}`:`app:${d.serverName}:${d.uri}:${d.frameInstanceId}`)},[a,au,b,c,P,N,u]),[aw,ax]=(0,e.useState)(ak),[ay,az]=(0,e.useState)(!1),[aA,aB]=(0,e.useState)(null),[aC,aD]=(0,e.useState)(ar&&!as?"granted":"loading"),[aE,aF]=(0,e.useState)(!1),[aG,aH]=(0,e.useState)(null),aI=(0,e.useRef)(null);(0,e.useEffect)(()=>{aI.current=aA},[aA]),(0,e.useEffect)(()=>{if(!ar)return void aD("loading");if(!as){aD("granted"),aH(null);return}let b=!0;aD("loading");let d=new URLSearchParams({serverName:c,uri:u});return a&&d.set("conversationId",a),fetch(`/api/mcp/app-consent?${d}`).then(async a=>a.ok?a.json():Promise.reject(Error("Consent lookup failed"))).then(a=>{b&&["internal","granted","prompt","denied"].includes(a.status??"")&&aD(a.status)}).catch(()=>{b&&aD("denied")}),()=>{b=!1}},[ar,as,a,c,u]);let aJ=(0,e.useCallback)(async b=>{aF(!0),aH(null);try{let d=await fetch("/api/mcp/app-consent",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({serverName:c,uri:u,conversationId:a,decision:b})});if(!d.ok)throw Error("Unable to save MCP App consent");let e=await d.json();aD("granted"===e.status?"granted":"denied")}catch{aH(ao("chat.app.consentSaveFailed"))}finally{aF(!1)}},[a,c,ao,u]),aK=(0,e.useCallback)(async()=>{aF(!0),aH(null);try{let a=new URLSearchParams({serverName:c,uri:u});if(!(await fetch(`/api/mcp/app-consent?${a}`,{method:"DELETE"})).ok)throw Error("Unable to reset MCP App consent");aD("prompt")}catch{aH(ao("chat.app.consentSaveFailed"))}finally{aF(!1)}},[c,ao,u]),[aL,aM]=(0,e.useState)(ai?"pip":"inline"),[aN,aO]=(0,e.useState)(null),[aP,aQ]=(0,e.useState)([]),[aR,aS]=(0,e.useState)(!1),aT=(0,e.useRef)(ak),{activeCursor:aU,startPointerDrag:aV}=(0,D.LI)(),aW=ad??aL,aX=(0,e.useMemo)(()=>ai?["pip","fullscreen"]:["inline","fullscreen",...aa?["pip"]:[]],[ai,aa]),aY=(0,e.useRef)(null),aZ=(0,e.useRef)(null),a$=(0,e.useRef)(null),a_=(0,e.useRef)(200),a0=(0,e.useRef)(null),a1=(0,e.useRef)(!1),a2=(0,e.useRef)(0),a3=(0,e.useRef)(!1),a4=(0,e.useRef)(null),a5=(0,e.useRef)(null),a6=(0,e.useRef)(!1),a7=(0,e.useRef)(!0),a8=(0,e.useRef)([]),a9=(0,e.useRef)(aW),ba=(0,e.useRef)(aX),bb=(0,e.useRef)(B),bc=(0,e.useRef)(B),bd=(0,e.useRef)(av),be=(0,e.useRef)(av);bd.current=av;let bf=(0,e.useRef)(Promise.resolve()),bg=(0,e.useRef)(void 0),bh=(0,e.useRef)({toolName:B,args:C,resultContent:N,cancelledReason:Y,isError:Z,updateId:S});(0,e.useEffect)(()=>{},[ai,aW]),(0,e.useEffect)(()=>{},[ai,aW]);let bi=(0,e.useCallback)(a=>{if("fullscreen"!==aW||!aZ.current||a.target.closest('button,[role="button"]'))return;a.preventDefault();let b=aZ.current.getBoundingClientRect(),c=a.clientX,d=a.clientY;aV(a,"move",a=>{aO({...(0,D.RA)({x:b.left+a.clientX-c,y:b.top+a.clientY-d},{width:b.width,height:b.height},{width:window.innerWidth,height:window.innerHeight}),width:b.width,height:b.height})})},[aW,aV]),bj=(0,e.useCallback)((a,b,c)=>{if("fullscreen"!==aW||!aZ.current)return;let d=aZ.current.getBoundingClientRect(),e={x:d.left,y:d.top,width:d.width,height:d.height},f=a.clientX,g=a.clientY;aV(a,c,a=>{aO((0,D.hU)(e,b,a.clientX-f,a.clientY-g,{width:window.innerWidth,height:window.innerHeight},{width:Math.min(480,window.innerWidth),height:Math.min(320,window.innerHeight)}))})},[aW,aV]),bk=(0,D.ri)(aZ,"fullscreen"===aL&&!ai);bh.current={toolName:B,args:C,resultContent:N,cancelledReason:Y,isError:Z,updateId:S},bb.current=B;let bl=(0,e.useRef)($);(0,e.useEffect)(()=>{bl.current=$},[$]);let bm=(0,e.useRef)(_);(0,e.useEffect)(()=>{bm.current=_},[_]);let bn=(0,e.useRef)(aa);(0,e.useEffect)(()=>{bn.current=aa},[aa]);let bo=(0,e.useRef)(al);(0,e.useEffect)(()=>{al&&(bo.current=!0)},[al]);let bp=(0,e.useRef)(ab);(0,e.useEffect)(()=>{bp.current=ab},[ab]);let bq=(0,e.useRef)(ac);(0,e.useEffect)(()=>{bq.current=ac},[ac]);let br=(0,e.useRef)(ae);(0,e.useEffect)(()=>{br.current=ae},[ae]);let bs=(0,e.useRef)(af);(0,e.useEffect)(()=>{bs.current=af},[af]);let bt=(0,e.useRef)(ai);(0,e.useEffect)(()=>{bt.current=ai},[ai]),(0,e.useEffect)(()=>{a9.current=aW},[aW]),(0,e.useEffect)(()=>{ba.current=aX},[aX]);let bu=(0,e.useCallback)(()=>{if(a5.current)return a5.current;a2.current+=1;let a=a0.current,b=a$.current,c=a3.current;a0.current=null,a$.current=null,a3.current=!1,a1.current=!1,a8.current=[],a4.current?.disconnect(),a4.current=null;let d=(async()=>{if(a&&c){let b;try{await Promise.race([a.teardownResource({},{timeout:1e3}),new Promise(a=>{b=setTimeout(a,1e3)})])}catch(a){E.debug("MCP App did not acknowledge resource teardown",a)}finally{b&&clearTimeout(b)}}try{await a?.close()}catch{}b?.remove()})();return a5.current=d,d.finally(()=>{a5.current===d&&(a5.current=null)}),d},[]),bv=(0,e.useCallback)(()=>{a6.current||!bn.current||aI.current||(a6.current=!0,bu().then(()=>{a7.current&&(bn.current?.(),ax(!1))}).finally(()=>{a6.current=!1}))},[bu]),bw=(0,e.useCallback)((a,b,c,d,e)=>{bf.current=bf.current.catch(()=>void 0).then(async()=>{a0.current===a&&a3.current&&await T(a,b,c,d,e)}).catch(a=>{E.warn("MCP App tool delivery failed",a)})},[]),bx=(0,e.useCallback)(async()=>{if(a5.current&&await a5.current,a1.current||!aY.current)return;let b=a2.current+1;a2.current=b;let d=()=>a2.current===b&&a1.current;a1.current=!0,aQ([]),az(!0),aB(null);try{var e,f,g,h;let i,j,[k,l]=await Promise.all([x.S.readResourceFromApp(c,u),X(c,u,bb.current)]);if(!d())return;if(k?.httpStatus===403)throw Error(k?.error||ao("chat.app.accessDisabled"));if(!k||!1===k.success)throw Error(k?.error||ao("chat.app.readFailed"));let m=function(a,b){let c,d=a?.contents;if(!Array.isArray(d)||0===d.length)throw Error("Resource has no contents");let e=d.find(a=>a.uri===b&&"string"==typeof a.mimeType&&(0,y.q$)(a.mimeType)&&("string"==typeof a.text||"string"==typeof a.blob));if(!e)throw Error(`Resource ${b} did not return MCP App HTML`);try{if("string"==typeof e.text)c=e.text;else if("string"==typeof e.blob){var f;let a;f=e.blob,a=Uint8Array.from(atob(f),a=>a.charCodeAt(0)),c=new TextDecoder("utf-8",{fatal:!0}).decode(a)}else throw Error("Missing app resource body")}catch{throw Error(`Resource ${b} contains invalid base64 UTF-8 HTML`)}if(new TextEncoder().encode(c).length>y.Pt)throw Error(`Resource exceeds the ${Math.round(y.Pt/1024)} KiB size cap`);let g=K(e._meta??e.meta),h=K(g?.ui),i=t.c0.safeParse(h?.csp);if(h?.csp!==void 0&&!i.success)throw Error(`Resource ${b} declares an invalid CSP policy`);let j=t.Ml.safeParse(h?.permissions);if(h?.permissions!==void 0&&!j.success)throw Error(`Resource ${b} declares invalid sandbox permissions`);return{html:c,csp:i.success?R(i.data):void 0,rawCsp:i.success?i.data:void 0,permissions:j.success&&j.data.clipboardWrite?{clipboardWrite:{}}:void 0,prefersBorder:"boolean"==typeof h?.prefersBorder?h.prefersBorder:void 0}}(k.data,u);aS(!1===m.prefersBorder);let n=await O(c,u,a);if(!d()||!aY.current)return;n.allowAll&&m.rawCsp&&(m.csp=R(m.rawCsp,Q(),!0));let o=document.createElement("iframe");o.title=ao("chat.app.frameTitle",{uri:u}),o.setAttribute("sandbox","allow-scripts allow-same-origin"),o.referrerPolicy="origin";let p=(0,t.Sy)(m.permissions);p&&o.setAttribute("allow",p);let q=!1===m.prefersBorder?"transparent":"#fff";o.style.cssText=bt.current||"fullscreen"===a9.current?`width:100%;height:100%;border:none;background:${q};`:`width:100%;min-height:120px;height:200px;border:none;background:${q};`+(!1===m.prefersBorder?"":"border-radius:4px;"),aY.current.appendChild(o),a$.current=o;let r=new URL(n.href);m.csp&&r.searchParams.set("csp",JSON.stringify(m.csp));let s=r.origin,v=new Promise((a,b)=>{let c=setTimeout(()=>{window.removeEventListener("message",d),b(Error(ao("chat.app.proxyTimeout")))},1e4),d=b=>{b.source===o.contentWindow&&b.origin===s&&b.data?.jsonrpc==="2.0"&&b.data?.method==="ui/notifications/sandbox-proxy-ready"&&(clearTimeout(c),window.removeEventListener("message",d),a())};window.addEventListener("message",d)});if(o.src=r.href,await v,!d()||a$.current!==o)return;let w=a9.current,z="inline";a9.current=z;let A=new t.T1((e=bd.current,f=a=>{a2.current===b&&a0.current===A&&(aB(a),az(!1),bu().finally(()=>{bt.current&&bs.current?.()}))},{getServerCapabilities:()=>({tools:{},resources:{}}),setNotificationHandler:()=>{},request:async(a,b,d)=>{let{method:g,params:h}=a;if("tools/call"===g){let a=K(h),b="string"==typeof a?.name?a.name:void 0;if(!b)throw Error("MCP App tool call is missing a tool name");E.info(`MCP App tools/call: ${c}/${b}`);let g=await x.S.callToolFromApp(c,b,K(a?.arguments)??{},void 0,d?.signal,e);if(g?.httpStatus===403){let a=g?.error||"MCP Apps access was disabled for this server";throw f(a),Error(a)}if(!g||!1===g.success)throw Error(g?.error||`Tool call failed: ${b}`);return g.data}if("resources/read"===g){let a=K(h),b="string"==typeof a?.uri?a.uri:void 0;if(!b)throw Error("MCP App resource read is missing a URI");let d=await x.S.readResourceFromApp(c,b);if(d?.httpStatus===403){let a=d?.error||"MCP Apps access was disabled for this server";throw f(a),Error(a)}if(!d||!1===d.success)throw Error(d?.error||`Resource read failed: ${b}`);return d.data}if("resources/list"===g)return{resources:[]};if("resources/templates/list"===g)return{resourceTemplates:[]};throw Error(`MCP App requested unsupported method: ${g}`)}}),F,{openLinks:{},serverTools:{},serverResources:{},logging:{},...bl.current?{message:{text:{}}}:{},...bm.current?{updateModelContext:{text:{},structuredContent:{}}}:{},sandbox:{csp:m.csp,permissions:m.permissions}},{hostContext:{...l?{toolInfo:l}:{},theme:"dark"===at.palette.mode?"dark":"light",platform:"web",displayMode:z,availableDisplayModes:ba.current,containerDimensions:W(aY.current,bt.current),locale:navigator.language,timeZone:Intl.DateTimeFormat().resolvedOptions().timeZone,userAgent:navigator.userAgent,deviceCapabilities:{touch:navigator.maxTouchPoints>0,hover:window.matchMedia?.("(hover: hover)").matches??!1}}});a0.current=A;let B=()=>d()&&a0.current===A;if(A.onopenlink=async({url:a})=>{if(!B())return{isError:!0};let b=function(a){try{let b=new URL(a);if(!G.has(b.protocol)||b.username||b.password)return null;return b.href}catch{return null}}(a);if(!b)return E.warn("MCP App open-link rejected by URL policy",{serverName:c,uri:u}),{isError:!0};let d=window.open(b,"_blank","noopener,noreferrer");return d?(d.opener=null,{}):{isError:!0}},A.ondownloadfile=async({contents:a})=>{if(!B())return{isError:!0};try{for(let b of a??[]){let a,c=K(K(b)?.resource);if(!c)continue;let d=("string"==typeof c.uri?c.uri.split("/").pop():"")||"download",e="string"==typeof c.mimeType?c.mimeType:"application/octet-stream";if("string"==typeof c.blob){let b=Uint8Array.from(atob(c.blob),a=>a.charCodeAt(0));a=new Blob([b],{type:e})}else a=new Blob([String(c.text??"")],{type:e});let f=URL.createObjectURL(a),g=document.createElement("a");g.href=f,g.download=d,document.body.appendChild(g),g.click(),g.remove(),setTimeout(()=>URL.revokeObjectURL(f),4e3)}return{}}catch(a){return E.warn("MCP App download failed",a),{isError:!0}}},A.onloggingmessage=a=>{B()&&E.debug("MCP App log",a?.data)},A.onmessage=async a=>{if(!B())return{};if(!bl.current)throw Error("This host cannot deliver ui/message in this surface");let b=function(a){let b=K(a);if(b?.role!=="user")throw Error('This host accepts ui/message only with role "user"');let c=b.content,d=Array.isArray(c)?c:c&&"object"==typeof c?[c]:[];if(0===d.length||!d.every(L))throw Error("This host accepts text-only ui/message content");let e=d.map(a=>a.text).join("\n").trim();if(!e)throw Error("ui/message text must not be empty");return e}(a);if(!await bl.current(b))throw Error("ui/message was not delivered");return{}},A.onupdatemodelcontext=async a=>{if(!B())return{};let b=function(a){if(!a||"object"!=typeof a||Array.isArray(a))return"ui/update-model-context params must be an object";if(void 0!==a.content){if(!Array.isArray(a.content))return"Model context content must be an array";for(let b of a.content)if(!b||"object"!=typeof b||Array.isArray(b)||!I.has(b.type))return"Model context contains a modality this host did not advertise"}return void 0!==a.structuredContent&&(!a.structuredContent||"object"!=typeof a.structuredContent||Array.isArray(a.structuredContent))?"Model structuredContent must be an object":M(a)>J?`Model context exceeds ${J} bytes`:null}(a);if(b)throw Error(b);let d=`${c}::${u}`;if(!bm.current)throw Error("This host cannot preserve model context in this surface");if(!await bm.current(d,a))throw Error("MCP App model context was not stored");return{}},A.onsizechange=async({width:a,height:b})=>{if(!B()||bt.current)return;let c=aY.current?.getBoundingClientRect().width||aY.current?.clientWidth||0,d=function(a,b){let c={};if(Number.isFinite(a.width)&&a.width>0){let d=Number.isFinite(b)&&b>0?b:6e3;c.width=Math.min(a.width,d,6e3)}return Number.isFinite(a.height)&&a.height>0&&(c.height=Math.min(a.height,6e3)),c}({width:a,height:b},c);void 0!==d.height&&(a_.current=d.height,"fullscreen"!==a9.current&&(o.style.height=`${d.height}px`)),void 0!==d.width&&(o.style.width=`${d.width}px`,o.style.maxWidth="100%")},A.onrequestdisplaymode=async({mode:a})=>{if(!B())return{mode:a9.current};let b=a9.current,c=a8.current;if(!U(a,ba.current,c))return{mode:b};if("pip"===a&&!bt.current&&bn.current)return setTimeout(bv,0),{mode:b};let d=b;return(d=br.current?await br.current(a,[...c]):a)===b||U(d,ba.current,c)||(d=b),d!==b&&(a9.current=d,aM(d),await A.sendHostContextChange({displayMode:d})),{mode:d}},A.onrequestteardown=()=>{B()&&bu().finally(()=>{bs.current?bs.current():(a9.current="inline",aM("inline"),ax(!1))})},A.oninitialized=()=>{var a,b,c,d;if(!B())return;let e=A.getAppCapabilities()?.availableDisplayModes,f=Array.isArray(e)?[...new Set(e.filter(a=>H.includes(a)))]:[];a8.current=f,aQ(f),bp.current?.(f.includes("pip")),bq.current?.([...f]),a3.current=!0;let g=(a=w,b=bt.current,c=ba.current,d=f,b?U("pip",c,d)?"fullscreen"===a&&U("fullscreen",c,d)?"fullscreen":"pip":null:"fullscreen"===a&&U("fullscreen",c,d)?"fullscreen":"inline");if(null===g){aB(ao("chat.app.canvasUnsupported")),az(!1),bu();return}bo.current&&f.includes("pip")&&!bt.current&&bn.current&&setTimeout(bv,0),a9.current=g,aM(g),g!==z&&A.sendHostContextChange({displayMode:g});let h=aY.current;if(h&&"u">typeof ResizeObserver){let a=()=>{if(!B()||!a3.current)return;let a=h.getBoundingClientRect();a.width<=0||bt.current&&a.height<=0||A.sendHostContextChange({containerDimensions:W(h,bt.current)})};a4.current?.disconnect(),a4.current=new ResizeObserver(a),a4.current.observe(h),a()}let i=bh.current;bg.current=V(i.toolName,i.updateId,i.args,i.resultContent,i.cancelledReason,i.isError),(void 0!==i.args||void 0!==i.resultContent||void 0!==i.cancelledReason||!0===i.isError)&&bw(A,i.args,i.resultContent,i.cancelledReason,i.isError),az(!1)},await A.connect((g=o.contentWindow,h=o.contentWindow,i=new t.hJ(g,h),j={start:async()=>{i.onmessage=(a,b)=>{j.onmessage?.("ui/message"!==a.method||!a.params||Array.isArray(a.params.content)||!a.params.content||"object"!=typeof a.params.content?a:{...a,params:{...a.params,content:[a.params.content]}},b)},i.onerror=a=>j.onerror?.(a),i.onclose=()=>j.onclose?.(),await i.start()},send:(a,b)=>i.send(a,b),close:()=>i.close(),setProtocolVersion:a=>i.setProtocolVersion?.(a)})),!B())return;await A.sendSandboxResourceReady({html:m.html,csp:m.csp,permissions:m.permissions})}catch(a){if(!d())return;E.warn(`Failed to mount MCP App ${u} from ${c}`,a),aB(a instanceof Error?a.message:ao("chat.app.loadFailed")),az(!1),bu()}},[bv,av,bw,c,bu,at.palette.mode,u,ao]),by=(0,e.useCallback)(()=>{let a=!aw;a||"fullscreen"!==a9.current||(a9.current="inline",aM("inline"),a0.current?.sendHostContextChange({displayMode:"inline"})),a&&an?.(),ax(a),a&&("internal"===aC||"granted"===aC)&&setTimeout(()=>{bx()},0)},[aC,aw,bx,an]);if((0,e.useEffect)(()=>{let a=aT.current;aT.current=ak,ai||!ak||a||aw||ax(!0)},[ak,ai,aw]),(0,e.useEffect)(()=>{ai&&("internal"===aC||"granted"===aC)&&!a1.current&&bx()},[aC,ai,bx]),(0,e.useEffect)(()=>{if(!ai&&("internal"===aC||"granted"===aC)&&aw&&!a1.current){let a=window.setTimeout(()=>{bx()},0);return()=>window.clearTimeout(a)}},[aC,ak,ai,aw,bx]),(0,e.useEffect)(()=>{let a=a$.current;if(a){if(ai||"fullscreen"===aW){a.style.width="100%",a.style.height="100%",a.style.minHeight="0",a.style.borderRadius="0";return}a.style.width="100%",a.style.height=`${a_.current}px`,a.style.minHeight="120px",a.style.borderRadius=aR?"0":"4px"}},[aR,ai,aW]),(0,e.useEffect)(()=>{bc.current===B&&be.current===av||(bc.current=B,be.current=av,(a1.current||a5.current)&&bu().then(()=>{a7.current&&(bt.current||aw)&&bx()}))},[aw,bx,av,bu,B]),(0,e.useEffect)(()=>{let a=V(B,S,C,N,Y,Z);a3.current&&a0.current&&a!==bg.current&&(bg.current=a,bu().then(()=>{a7.current&&(bt.current||aw)&&bx()}))},[aw,bx,bu,C,Y,Z,B,N,S]),(0,e.useEffect)(()=>{ad&&a3.current&&a0.current&&a9.current!==ad&&U(ad,ba.current,a8.current)&&(a9.current=ad,aM(ad),a0.current.sendHostContextChange({displayMode:ad}))},[ad]),(0,e.useEffect)(()=>{a3.current&&a0.current&&a0.current?.sendHostContextChange({theme:"dark"===at.palette.mode?"dark":"light"})},[at.palette.mode]),(0,e.useEffect)(()=>{let a=ah??`${c}::${u}`;return ag?.(a,bu),()=>ag?.(a,null)},[ag,c,bu,ah,u]),(0,e.useEffect)(()=>{let a=a=>{let b=a.detail;b?.serverName===c&&(b.config?.enableMcpApps===!1||b.config?.disabled===!0)&&(aB(ao("chat.app.accessDisabled")),az(!1),bu().finally(()=>{bt.current&&bs.current?.()}))};return window.addEventListener("flujo:mcp-server-config-changed",a),()=>{window.removeEventListener("flujo:mcp-server-config-changed",a)}},[c,bu,ao]),(0,e.useEffect)(()=>(a7.current=!0,()=>{a7.current=!1,bu()}),[bu]),ai)return(0,d.jsxs)(g.default,{sx:{height:"100%",width:"100%",minHeight:0,display:"flex",visibility:aj?"visible":"hidden",pointerEvents:aj?"auto":"none",flexDirection:"column"},children:[ar&&as&&"loading"===aC&&(0,d.jsx)(h.A,{variant:"body2",sx:{p:2},children:ao("chat.app.consentChecking")}),"prompt"===aC&&(0,d.jsxs)(g.default,{sx:{p:2},children:[(0,d.jsx)(h.A,{variant:"body2",sx:{mb:1},children:ao("chat.app.consentPrompt")}),(0,d.jsxs)(h.A,{variant:"caption",color:"text.secondary",display:"block",sx:{mb:1},children:[c," — ",u]}),(0,d.jsx)(i.A,{size:"small",disabled:aE,onClick:()=>{aJ("allow-once")},children:ao("chat.app.consentAllowOnce")}),(0,d.jsx)(i.A,{size:"small",disabled:aE,onClick:()=>{aJ("allow-always")},children:ao("chat.app.consentAllowAlways")}),(0,d.jsx)(i.A,{size:"small",disabled:aE,color:"inherit",onClick:()=>{aJ("deny-always")},children:ao("chat.app.consentNeverAllow")})]}),"denied"===aC&&(0,d.jsxs)(g.default,{sx:{p:2},children:[(0,d.jsx)(h.A,{variant:"body2",color:"text.secondary",sx:{mb:1},children:ao("chat.app.consentBlocked")}),(0,d.jsx)(i.A,{size:"small",disabled:aE,onClick:()=>{aJ("allow-always")},children:ao("chat.app.consentAllowAlways")}),(0,d.jsx)(i.A,{size:"small",disabled:aE,color:"inherit",onClick:()=>{aK()},children:ao("chat.app.consentAskAgain")})]}),aG&&(0,d.jsx)(j.A,{severity:"error",sx:{m:1},children:aG}),("internal"===aC||"granted"===aC)&&ay&&(0,d.jsxs)(g.default,{sx:{display:"flex",alignItems:"center",gap:1,py:2,justifyContent:"center"},children:[(0,d.jsx)(k.default,{size:16,thickness:6}),(0,d.jsx)(h.A,{variant:"body2",color:"text.secondary",children:ao("chat.app.loading")})]}),aA&&(0,d.jsx)(j.A,{severity:"error",sx:{m:1},children:aA}),(0,d.jsx)(g.default,{ref:aY,sx:{flex:1,minHeight:0,width:"100%",display:aA?"none":"block"}})]});let bz=aP.includes("inline")&&aP.includes("fullscreen")&&aX.includes("fullscreen"),bA=aP.includes("inline")&&aP.includes("pip")&&aX.includes("pip")&&!!aa;return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(g.default,{ref:aZ,sx:{mt:1,...aR?{border:0,borderRadius:0}:{border:"1px solid",borderColor:"divider",borderRadius:1},overflow:"hidden",..."fullscreen"===aL?{position:"fixed",left:(aN?.x??16)-bk.x,top:(aN?.y??16)-bk.y,width:aN?.width??"calc(100vw - 32px)",height:aN?.height??"calc(100vh - 32px)",minWidth:"min(480px, 100vw)",minHeight:"min(320px, 100vh)",maxWidth:"100vw",maxHeight:"100vh",zIndex:1300,bgcolor:"background.paper",boxShadow:6,display:"flex",flexDirection:"column"}:{}},children:["fullscreen"===aL&&(0,d.jsx)(D.y1,{label:ao("chat.canvas.resize"),onResizeStart:bj}),(0,d.jsxs)(g.default,{onPointerDown:bi,sx:{display:"flex",alignItems:"center",gap:1,px:1,py:.5,bgcolor:"action.hover",cursor:"fullscreen"===aL?"move":"default",userSelect:"none",flexShrink:0},children:[(0,d.jsx)(n.A,{fontSize:"small",color:"primary"}),(0,d.jsx)(h.A,{variant:"body2",sx:{fontWeight:500},children:ao("chat.app.fromServer",{server:c})}),am>1&&(0,d.jsxs)(h.A,{variant:"caption",color:"text.secondary",children:["\xd7",am]}),(0,d.jsx)(l.A,{title:ao("chat.app.sandboxHelp"),children:(0,d.jsx)(o.A,{fontSize:"small",color:"action"})}),(0,d.jsx)(g.default,{sx:{flex:1}}),aw&&bA&&(0,d.jsx)(i.A,{size:"small",onClick:bv,children:ao("chat.app.canvas")}),aw&&(0,d.jsx)(l.A,{title:bz?"fullscreen"===aL?ao("chat.app.exitFullscreen"):ao("chat.app.fullscreen"):ao("chat.app.fullscreenUnsupported"),children:(0,d.jsx)("span",{children:(0,d.jsx)(i.A,{size:"small",disabled:!bz,onClick:()=>{let a="fullscreen"===aL?"inline":"fullscreen";U(a,aX,aP)&&(a9.current=a,aM(a),a0.current?.sendHostContextChange({displayMode:a}))},sx:{minWidth:0},children:"fullscreen"===aL?(0,d.jsx)(s.A,{fontSize:"small"}):(0,d.jsx)(r.A,{fontSize:"small"})})})}),(0,d.jsx)(i.A,{size:"small",onClick:by,startIcon:aw?(0,d.jsx)(q.A,{}):(0,d.jsx)(p.A,{}),children:aw?ao("chat.app.hide"):ao("chat.app.open")})]}),aw&&"prompt"===aC&&(0,d.jsxs)(g.default,{sx:{p:1},children:[(0,d.jsx)(h.A,{variant:"body2",sx:{mb:1},children:ao("chat.app.consentPrompt")}),(0,d.jsx)(h.A,{variant:"caption",color:"text.secondary",display:"block",sx:{mb:1},children:u}),(0,d.jsx)(i.A,{size:"small",disabled:aE,onClick:()=>{aJ("allow-once")},children:ao("chat.app.consentAllowOnce")}),(0,d.jsx)(i.A,{size:"small",disabled:aE,onClick:()=>{aJ("allow-always")},children:ao("chat.app.consentAllowAlways")}),(0,d.jsx)(i.A,{size:"small",disabled:aE,color:"inherit",onClick:()=>{aJ("deny-always")},children:ao("chat.app.consentNeverAllow")})]}),aw&&"denied"===aC&&(0,d.jsxs)(g.default,{sx:{p:1},children:[(0,d.jsx)(h.A,{variant:"body2",color:"text.secondary",sx:{mb:1},children:ao("chat.app.consentBlocked")}),(0,d.jsx)(i.A,{size:"small",disabled:aE,onClick:()=>{aJ("allow-always")},children:ao("chat.app.consentAllowAlways")}),(0,d.jsx)(i.A,{size:"small",disabled:aE,color:"inherit",onClick:()=>{aK()},children:ao("chat.app.consentAskAgain")})]}),aw&&aG&&(0,d.jsx)(j.A,{severity:"error",sx:{m:1},children:aG}),(0,d.jsx)(m.A,{in:aw&&("internal"===aC||"granted"===aC),onExited:()=>{bu()},sx:"fullscreen"===aL?{flex:1,minHeight:0,display:"flex",flexDirection:"column","& .MuiCollapse-wrapper, & .MuiCollapse-wrapperInner":{height:"100%",minHeight:0,display:"flex",flexDirection:"column"}}:void 0,children:(0,d.jsxs)(g.default,{sx:{p:1,height:"fullscreen"===aL?"100%":"auto",minHeight:0,display:"flex",flexDirection:"column"},children:[ay&&(0,d.jsxs)(g.default,{sx:{display:"flex",alignItems:"center",gap:1,py:2,justifyContent:"center"},children:[(0,d.jsx)(k.default,{size:16,thickness:6}),(0,d.jsx)(h.A,{variant:"body2",color:"text.secondary",children:ao("chat.app.loading")})]}),aA&&(0,d.jsx)(j.A,{severity:"error",sx:{my:1},children:aA}),(0,d.jsx)(g.default,{ref:aY,sx:{width:"100%",flex:"fullscreen"===aL?1:void 0,minHeight:0,height:"fullscreen"===aL?"100%":"auto",display:aA?"none":"block"}})]})})]}),(0,d.jsx)(D.Fy,{cursor:aU})]})}},15380:(a,b,c)=>{c.d(b,{Fy:()=>n,LI:()=>m,RA:()=>i,eH:()=>k,hU:()=>j,ri:()=>l,y1:()=>q});var d=c(48249),e=c(67484),f=c(29184);let g=(a,b,c)=>Math.min(Math.max(a,b),Math.max(b,c)),h={x:0,y:0};function i(a,b,c){return{x:g(a.x,0,Math.max(0,c.width-b.width)),y:g(a.y,0,Math.max(0,c.height-b.height))}}function j(a,b,c,d,e,f){let h=b.includes("left"),i=b.includes("right"),j=b.includes("top"),k=b.includes("bottom"),l=a.x+a.width,m=a.y+a.height,n=a.x,o=a.y,p=a.width,q=a.height;return h?(n=g(a.x+c,0,l-f.width),p=l-n):i&&(p=g(a.width+c,f.width,e.width-a.x)),j?(o=g(a.y+d,0,m-f.height),q=m-o):k&&(q=g(a.height+d,f.height,e.height-a.y)),{x:n,y:o,width:p,height:q}}function k(a,b,c){let d=g(a.width,c.width,b.width),e=g(a.height,c.height,b.height);return{x:g(a.x,0,b.width-d),y:g(a.y,0,b.height-e),width:d,height:e}}function l(a,b){let[c,d]=(0,e.useState)(h);return c}function m(){let[a,b]=(0,e.useState)(null),c=(0,e.useRef)(null),d=(0,e.useRef)(!0);return{activeCursor:a,startPointerDrag:(0,e.useCallback)((a,e,f)=>{c.current?.(),a.preventDefault(),a.stopPropagation();let g=a.currentTarget,h=a.pointerId,i=g.ownerDocument,j=i.defaultView??window,k=i.body.style.userSelect,l=i.body.style.cursor;try{g.setPointerCapture?.(h)}catch{}i.body.style.userSelect="none",i.body.style.cursor=e??"",b(e);let m=a=>{a.pointerId===h&&(a.preventDefault(),f(a))},n=(a=!0)=>{j.removeEventListener("pointermove",m,!0),j.removeEventListener("pointerup",o,!0),j.removeEventListener("pointercancel",o,!0);try{g.hasPointerCapture?.(h)&&g.releasePointerCapture(h)}catch{}i.body.style.userSelect=k,i.body.style.cursor=l,a&&d.current&&b(null),c.current===n&&(c.current=null)},o=a=>{a.pointerId===h&&n()};c.current=n,j.addEventListener("pointermove",m,!0),j.addEventListener("pointerup",o,!0),j.addEventListener("pointercancel",o,!0)},[])}}let n=({cursor:a})=>a?(0,d.jsx)(f.default,{"aria-hidden":!0,"data-testid":"pointer-drag-shield",sx:{position:"fixed",inset:0,zIndex:0x7ffffffe,cursor:a,touchAction:"none"}}):null,o={top:{top:-3,left:10,right:10,height:8},right:{right:-3,top:10,bottom:10,width:8},bottom:{bottom:-3,left:10,right:10,height:8},left:{left:-3,top:10,bottom:10,width:8},"top-left":{top:-3,left:-3,width:14,height:14},"top-right":{top:-3,right:-3,width:14,height:14},"bottom-left":{bottom:-3,left:-3,width:14,height:14},"bottom-right":{bottom:-3,right:-3,width:14,height:14}},p=Object.keys(o),q=({label:a,onResizeStart:b})=>(0,d.jsx)(d.Fragment,{children:p.map(c=>{let e="top"===c||"bottom"===c?"ns-resize":"left"===c||"right"===c?"ew-resize":"top-left"===c||"bottom-right"===c?"nwse-resize":"nesw-resize";return(0,d.jsx)(f.default,{component:"span",role:"separator","aria-label":`${a} (${c})`,onPointerDown:a=>b(a,c,e),sx:{position:"absolute",zIndex:8,cursor:e,touchAction:"none",...o[c],..."bottom-right"===c?{"&::after":{content:'""',position:"absolute",right:3,bottom:3,width:7,height:7,borderRight:2,borderBottom:2,borderColor:"text.secondary",opacity:.7}}:{}}},c)})})},97701:(a,b,c)=>{c.d(b,{aI:()=>d,$Z:()=>g,Th:()=>e,BC:()=>r});let d=300,e=-1;var f=c(98469);let g=8,h=/^[a-z0-9]+(?:-[a-z0-9]+)*$/,i=/^sha256:[0-9a-f]{64}$/;class j extends Error{constructor(a){super(a),this.name="McpSkillsValidationError"}}function k(a){throw new j(a)}function l(a,b){return(null===a||"object"!=typeof a||Array.isArray(a))&&k(`${b} must be an object`),a}function m(a){let b;"string"==typeof a&&a||k("resource URI must be a non-empty string"),a.includes("\\")&&k("resource URI must use forward slashes");try{b=new URL(a)}catch{k("resource URI must be an absolute URI")}(!b.protocol||b.username||b.password||b.port||b.search||b.hash)&&k("resource URI must have no credentials, port, query, or fragment");var c="resource URI";let d=b.pathname.split("/");for(let a=0;a<d.length;a+=1){let b,e=d[a];if(0!==a||""!==e){e||k(`${c} contains an empty path segment`);try{b=decodeURIComponent(e)}catch{k(`${c} contains invalid percent encoding`)}("."===b||".."===b||b.includes("/")||b.includes("\\"))&&k(`${c} contains an unsafe path segment`)}}return b.href}function n(a){let b,c=m(a),d=new URL(c),e=d.pathname.split("/").filter(Boolean);"SKILL.md"!==e[e.length-1]&&k("skill URI must identify a top-level SKILL.md");let f=e.slice(0,-1),g=f.length>0?f[f.length-1]:d.hostname;try{b=decodeURIComponent(g)}catch{k("skill URI contains an invalid name")}o(b);let h=c.slice(0,-9);return{normalizedUri:c,rootUri:h,name:b,scheme:d.protocol.slice(0,-1)}}function o(a){return("string"!=typeof a||a.length<1||a.length>64||!h.test(a))&&k("skill name must be 1-64 lowercase alphanumeric or hyphen characters without leading, trailing, or consecutive hyphens"),a}function p(a){let b={};return void 0!==a.ttlMs&&(("number"!=typeof a.ttlMs||!Number.isInteger(a.ttlMs)||a.ttlMs<0)&&k("ttlMs must be a non-negative integer"),b.ttlMs=a.ttlMs),void 0!==a.cacheScope&&("public"!==a.cacheScope&&"private"!==a.cacheScope&&k('cacheScope must be "public" or "private"'),b.cacheScope=a.cacheScope),b}function q(a){var b,c;let d,e,f=l(a,"skill entry"),g=n(f.uri),h=(b=f.frontmatter,c=g.name,(e=o((d=l(b,"skill frontmatter")).name))!==c&&k("skill frontmatter name must match the final skill path segment"),("string"!=typeof d.description||d.description.length<1||d.description.length>1024)&&k("skill description must be a non-empty string of at most 1024 characters"),{...d,name:e,description:d.description});if("dynamic"===f.resources)return{uri:g.normalizedUri,frontmatter:h,resources:"dynamic"};Array.isArray(f.resources)||k('skill resources must be a complete array or "dynamic"'),(f.resources.length<1||f.resources.length>512)&&k("skill resources must contain 1-512 entries");let j=new Set,p=0,q=!1,r=f.resources.map((a,b)=>{var c;let d=l(a,`skill resource ${b}`),e=m(d.uri);e===g.normalizedUri||e.startsWith(`${g.rootUri}/`)||k("skill resource URI must be contained within the skill root"),j.has(e)&&k("skill resource URIs must be unique"),j.add(e),("number"!=typeof d.size||!Number.isSafeInteger(d.size)||d.size<0)&&k("skill resource size must be a non-negative safe integer");let f=("string"==typeof(c=d.digest)&&i.test(c)||k("skill resource digest must be sha256 followed by 64 lowercase hex characters"),c);return(p+=d.size)>0x1000000&&k("skill resources exceed the 16777216-byte limit"),e===g.normalizedUri&&(q=!0),{uri:e,digest:f,size:d.size}});return q||k("skill resources must include the top-level SKILL.md"),{uri:g.normalizedUri,frontmatter:h,resources:r}}function r(a,b,c){return JSON.stringify([a,n(b).normalizedUri,c])}f.object({method:f.literal("skills/list"),params:f.object({cursor:f.string().optional()}).optional()}),f.object({method:f.literal("skills/get"),params:f.object({uri:f.string().min(1)})}),f.object({method:f.literal("resources/directory/read"),params:f.object({uri:f.string().min(1),cursor:f.string().optional()})}),f.unknown().transform(a=>(function(a){let b=l(a,"skills/list result");"complete"!==b.resultType&&k('skills/list resultType must be "complete"'),Array.isArray(b.skills)||k("skills/list skills must be an array"),void 0!==b.nextCursor&&"string"!=typeof b.nextCursor&&k("skills/list nextCursor must be a string");let c=b.skills.map(q),d=new Set;for(let a of c)d.has(a.uri)&&k("skills/list skill URIs must be unique"),d.add(a.uri);return{resultType:"complete",skills:c,...void 0===b.nextCursor?{}:{nextCursor:b.nextCursor},...p(b)}})(a)),f.unknown().transform(a=>{let b;return"complete"!==(b=l(a,"skills/get result")).resultType&&k('skills/get resultType must be "complete"'),{resultType:"complete",skill:q(b.skill),...p(b)}}),f.unknown().transform(a=>{let b;return"complete"!==(b=l(a,"resources/directory/read result")).resultType&&k('resources/directory/read resultType must be "complete"'),Array.isArray(b.resources)||k("resources/directory/read resources must be an array"),void 0!==b.nextCursor&&"string"!=typeof b.nextCursor&&k("resources/directory/read nextCursor must be a string"),{resultType:"complete",resources:b.resources.map((a,b)=>{let c=l(a,`directory resource ${b}`),d=m(c.uri);return"string"==typeof c.name&&c.name||k("directory resource name must be a non-empty string"),void 0!==c.description&&"string"!=typeof c.description&&k("directory resource description must be a string"),void 0!==c.mimeType&&"string"!=typeof c.mimeType&&k("directory resource mimeType must be a string"),{...c,uri:d,name:c.name,...void 0===c.description?{}:{description:c.description},...void 0===c.mimeType?{}:{mimeType:c.mimeType}}}),...void 0===b.nextCursor?{}:{nextCursor:b.nextCursor},...p(b)}})}};