@joai/warps-mcp 6.0.0 → 8.0.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.
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var M=Object.defineProperty;var V=Object.getOwnPropertyDescriptor;var H=Object.getOwnPropertyNames;var Q=Object.prototype.hasOwnProperty;var Y=(t,e)=>{for(var r in e)M(t,r,{get:e[r],enumerable:!0})},B=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of H(e))!Q.call(t,i)&&i!==r&&M(t,i,{get:()=>e[i],enumerable:!(n=V(e,i))||n.enumerable});return t};var G=t=>B(M({},"__esModule",{value:!0}),t);var ft={};Y(ft,{WarpMcp:()=>k,buildWarpDirectIdentifierFromMcpToolCall:()=>E,buildZodInputSchema:()=>b,convertActionToTool:()=>C,convertMcpActionToTool:()=>P,convertMcpArgsToWarpInputs:()=>h,convertMcpToolToWarp:()=>R,convertPromptActionToPrompt:()=>I,convertWarpToMcpCapabilities:()=>j,convertWarpsToMcpCapabilities:()=>pt,createAppResource:()=>w,createMcpServerFromWarps:()=>dt,extractTextOrUndefined:()=>f,hasMcpAppUi:()=>q,interpolatePromptWithArgs:()=>S,isMcpToolCallAllowedForWarp:()=>v,normalizeMcpToolNameToWarpIdentifier:()=>T,resolveMcpAppInputsPayload:()=>z,resolveMcpAppOutputPayload:()=>O,resolveMcpAppWarpEmbedModel:()=>X,resolveMcpToolCallToWarpDirect:()=>tt});module.exports=G(ft);var y=t=>!t||typeof t!="object"||Array.isArray(t)?null:t,K=t=>t==null?null:typeof t=="string"?t:JSON.stringify(t),z=t=>{let e=y(t.query);if(e)return e;let r=y(t.contentInputs);if(r)return r;let n=t.metaInputs||[];return n.length>0?{inputs:n}:null},O=t=>y(t.metaOutput)||y(t.contentOutput),X=t=>({isMcpApp:q(t.ui),inputsPayload:z({query:t.query,contentInputs:t.contentInputs,metaInputs:t.metaInputs}),outputPayload:O({metaOutput:t.metaOutput,contentOutput:t.contentOutput})}),q=t=>typeof t=="string"&&t!=="table",T=t=>!t||t.startsWith("@")?t:t.includes(":")?`@${t.replace(/^@/,"")}`:t,v=t=>t.activeWarpIdentifier?T(t.requestedToolName)===T(t.activeWarpIdentifier):!0,E=(t,e={})=>{let r=T(t),n=new URLSearchParams;return Object.entries(e).forEach(([i,o])=>{let c=K(o);c!=null&&n.set(i,c)}),n.size>0?`${r}?${n.toString()}`:r},tt=t=>{let e=v({requestedToolName:t.requestedToolName,activeWarpIdentifier:t.activeWarpIdentifier}),r=E(t.requestedToolName,t.args||{});return{allowed:e,warpIdentifier:r}};var _=require("@joai/warps"),h=(t,e)=>{let{action:r}=(0,_.getWarpPrimaryAction)(t);return r.inputs?r.inputs.map(n=>{let i=n.as||n.name,o=e[i]??n.default??null;return o===null&&n.type==="bool"?"false":o==null?"":String(o)}):[]};var g=require("@joai/warps");var Z=require("@joai/warps"),l=require("zod");var et=t=>{if(t){if(Array.isArray(t))return t;if(typeof t=="object")return Object.keys(t)}},rt=(t,e)=>{let r,n=t.type.toLowerCase();n==="string"||n==="address"||n==="hex"?r=l.z.string():n==="number"||n==="uint8"||n==="uint16"||n==="uint32"||n==="uint64"||n==="uint128"||n==="uint256"?r=l.z.number():n==="bool"||n==="boolean"?r=l.z.boolean():n==="biguint"?r=l.z.string():r=l.z.string(),typeof t.min=="number"&&r instanceof l.z.ZodNumber&&(r=r.min(t.min)),typeof t.max=="number"&&r instanceof l.z.ZodNumber&&(r=r.max(t.max)),t.pattern&&r instanceof l.z.ZodString&&(r=r.regex(new RegExp(t.pattern)));let i=et(t.options);if(i&&i.length>0){if(r instanceof l.z.ZodString)r=l.z.enum(i);else if(r instanceof l.z.ZodNumber){let u=i.map(s=>Number(s)).filter(s=>!isNaN(s));u.length>0&&(r=r.refine(s=>u.includes(s),{message:`Value must be one of: ${u.join(", ")}`}))}}let o=[],c=f(t.description,e);c&&o.push(c),t.bot&&o.push(t.bot),o.push(`Type: ${t.type}`),o.push(t.required?"Required":"Optional"),i&&i.length>0&&o.push(`Options: ${i.join(", ")}`);let p=f(t.patternDescription,e);p&&o.push(p);let a=o.join(". ");return a&&(r=r.describe(a)),t.required!==!0&&(r=r.optional()),r},b=(t,e)=>{let r={};for(let n of t){if(n.source==="hidden"||n.source!=="field")continue;let i=n.as||n.name;r[i]=rt(n,e)}return Object.keys(r).length>0?r:void 0},C=(t,e,r,n,i,o)=>{let c=nt(t),p=n||e.inputs||[],a=b(p,o);return{name:c,description:r,inputSchema:a,meta:$(t,i,o)}},P=(t,e,r,n,i,o)=>{let c=n||e.inputs||[],p=b(c,o),a=e.destination?.tool;if(!a)throw new Error(`Tool name is required for MCP action ${e.type}`);return{name:a,description:r,inputSchema:p,meta:$(t,i,o)}},$=(t,e,r)=>{let n={visibility:["model","app"]};return e&&(n.resourceUri=e.uri),{ui:n}},nt=t=>{let e=t.meta?.identifier;if(!e)throw new Error(`Warp identifier for warp ${t.name} is required`);return(0,Z.removeWarpChainPrefix)(e)};var x=require("@joai/warps"),ot="text/html;profile=mcp-app",it=async t=>{if(t.startsWith("http://")||t.startsWith("https://")){let e=await fetch(t);if(!e.ok)throw new Error(`Failed to download component from ${t}: HTTP ${e.status} ${e.statusText}`);return e.text()}throw new Error(`Unsupported component path: ${t}`)},w=async(t,e,r)=>{if(!t.meta?.identifier)return null;try{let n=await it(e);return{name:t.name,uri:`ui://widget/${t.meta.identifier}`,description:`MCP app for ${t.name}`,mimeType:ot,content:n}}catch(n){let i=n instanceof Error?n.message:String(n),o=n instanceof Error?n.stack:void 0;return x.WarpLogger.error(`[MCP] Failed to create app resource for warp "${t.name}" (path: ${e}):`,i),o&&x.WarpLogger.error("[MCP] Error stack:",o),null}};var j=async(t,e)=>{let r=null,n=null,i=null;if(t.ui&&t.ui!=="table"&&(n=await w(t,t.ui,e)),t.actions.length===0)return{tool:null,resource:n,prompt:null};try{let{action:o}=(0,g.getWarpPrimaryAction)(t),c=f(t.description,e)||f(o.description,e);if(o.type==="prompt")i=I(t,o,c,e);else if(o.type==="mcp"){let p=o;p.destination&&(r=P(t,p,c,o.inputs,n,e))}else r=C(t,o,c,o.inputs,n,e)}catch{return{tool:null,resource:n,prompt:null}}return{tool:r,resource:n,prompt:i}},pt=async(t,e)=>Promise.all(t.map(r=>j(r,e))),st=(t,e)=>e==="date-time"||e==="date"||t==="string"?"string":t==="number"||t==="integer"?"uint256":t==="boolean"?"bool":"string",R=async(t,e,r,n)=>{let i=[];if(e.inputSchema?.properties){let p=e.inputSchema.properties,a=e.inputSchema.required||[];Object.entries(p).forEach(([u,s])=>{let m=a.includes(u),d=st(s.type||"string",s.format),A={name:u,label:typeof s.title=="string"?{en:s.title}:s.title||{en:u},description:s.description?{en:s.description.trim()}:null,type:d,position:`payload:${u}`,source:"field",required:m,...s.default!==void 0&&typeof s.default=="string"||typeof s.default=="number"||typeof s.default=="boolean"?{default:s.default}:{}};i.push(A)})}let o={};e.outputSchema?.properties&&Object.keys(e.outputSchema.properties).forEach(p=>{o[p]=`out.${p}`});let c={type:"mcp",label:{en:e.name},description:e.description?{en:e.description.trim()}:null,destination:{url:r,tool:e.name,headers:n},inputs:i};return await new g.WarpBuilder(t).setName(e.name||"unnamed_tool").setTitle({en:e.name||"Unnamed Tool"}).setDescription(e.description?{en:e.description.trim()}:null).addAction(c).setOutput(Object.keys(o).length>0?o:null).build(!1)},f=(t,e)=>t&&(0,g.resolveWarpText)(t,e)||void 0;var S=(t,e)=>{let r=t;for(let[n,i]of Object.entries(e)){let o=new RegExp(`\\{\\{\\s*${n}\\s*\\}\\}`,"g");r=r.replace(o,i??"")}return r},ct=t=>(t.includes(":")?t.split(":").slice(1).join(":"):t).trim().toLowerCase().replace(/\s+/g,"_").replace(/:/g,"_").replace(/[^a-z0-9_.-]/g,"_").replace(/^[^a-z0-9]+|[^a-z0-9]+$/g,"").replace(/[_-]+/g,e=>e.includes("_")?"_":e).replace(/_+/g,"_"),at=(t,e)=>{let r=[];for(let n of t){if(n.source==="hidden"||n.source!=="field")continue;let i=n.as||n.name,o=f(n.description,e);r.push({name:i,description:o,required:n.required===!0})}return r},I=(t,e,r,n)=>{let i=ct(t.name),o=e.inputs||[],c=at(o,n);return{name:i,description:r,arguments:c.length>0?c:void 0,prompt:e.prompt}};var U=require("@modelcontextprotocol/sdk/server/mcp.js"),N=require("@modelcontextprotocol/sdk/server/zod-compat.js"),W=require("@modelcontextprotocol/ext-apps/server"),D=require("zod");var ut=t=>{if(t)return typeof t=="object"&&"_zod"in t?t._zod:typeof t=="object"&&!Array.isArray(t)&&(0,N.normalizeObjectSchema)(t)||t},lt=t=>{if(!t.arguments||t.arguments.length===0)return;let e={};for(let r of t.arguments){let n=D.z.string();r.description&&(n=n.describe(r.description)),r.required||(n=n.optional()),e[r.name]=n}return e},mt=(t,e)=>t.startsWith("ui://")?!0:e?.includes("profile=mcp-app")??!1,dt=(t,e,r,n)=>{let i=new U.McpServer({name:t.name,version:t.version||"1.0.0"});for(let o=0;o<r.length;o++){let{tool:c,resource:p,prompt:a}=r[o],u=e[o];if(c){let s=ut(c.inputSchema),m={description:c.description||"",inputSchema:s,...c.meta&&{_meta:c.meta}},d=async A=>{let L=h(u,A||{});return await n(u,L)};c.meta?.ui?.resourceUri?(0,W.registerAppTool)(i,c.name,m,d):i.registerTool(c.name,m,d)}if(p)if(mt(p.uri,p.mimeType)){let s=p.meta,m=p.mimeType||W.RESOURCE_MIME_TYPE;(0,W.registerAppResource)(i,p.name||p.uri,p.uri,{description:p.description,mimeType:m,...s&&{_meta:s}},async()=>{let d={uri:p.uri,text:p.content||"",mimeType:m};return s&&(d._meta=s),{contents:[d]}})}else i.registerResource(p.name||p.uri,p.uri,{description:p.description,mimeType:p.mimeType},async()=>{let s={uri:p.uri,text:p.content||"",mimeType:p.mimeType};return p.meta&&(s._meta=p.meta),{contents:[s]}});if(a){let s=lt(a);i.registerPrompt(a.name,{description:a.description||"",argsSchema:s},m=>({messages:[{role:"user",content:{type:"text",text:S(a.prompt,m)}}]}))}}return i};var F=require("@modelcontextprotocol/sdk/client/index.js"),J=require("@modelcontextprotocol/sdk/client/streamableHttp.js");var k=class{constructor(e){this.config=e}async getWarpsFromTools(e,r){let n=new J.StreamableHTTPClientTransport(new URL(e),{requestInit:{headers:r||{}}}),i=new F.Client({name:"warps-mcp-client",version:"1.0.0"},{capabilities:{}});try{await i.connect(n);let o=await i.listTools();return await i.close(),await Promise.all(o.tools.map(c=>R(this.config,c,e,r)))}catch(o){throw await i.close().catch(()=>{}),o}}};0&&(module.exports={WarpMcp,buildWarpDirectIdentifierFromMcpToolCall,buildZodInputSchema,convertActionToTool,convertMcpActionToTool,convertMcpArgsToWarpInputs,convertMcpToolToWarp,convertPromptActionToPrompt,convertWarpToMcpCapabilities,convertWarpsToMcpCapabilities,createAppResource,createMcpServerFromWarps,extractTextOrUndefined,hasMcpAppUi,interpolatePromptWithArgs,isMcpToolCallAllowedForWarp,normalizeMcpToolNameToWarpIdentifier,resolveMcpAppInputsPayload,resolveMcpAppOutputPayload,resolveMcpAppWarpEmbedModel,resolveMcpToolCallToWarpDirect});
1
+ "use strict";var M=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var Q=Object.getOwnPropertyNames;var Y=Object.prototype.hasOwnProperty;var B=(t,e)=>{for(var n in e)M(t,n,{get:e[n],enumerable:!0})},G=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Q(e))!Y.call(t,i)&&i!==n&&M(t,i,{get:()=>e[i],enumerable:!(r=H(e,i))||r.enumerable});return t};var K=t=>G(M({},"__esModule",{value:!0}),t);var gt={};B(gt,{WarpMcp:()=>k,buildWarpDirectIdentifierFromMcpToolCall:()=>E,buildZodInputSchema:()=>b,convertActionToTool:()=>C,convertMcpActionToTool:()=>P,convertMcpArgsToWarpInputs:()=>h,convertMcpToolToWarp:()=>R,convertPromptActionToPrompt:()=>I,convertWarpToMcpCapabilities:()=>j,convertWarpsToMcpCapabilities:()=>st,createAppResource:()=>w,createMcpServerFromWarps:()=>ft,extractTextOrUndefined:()=>f,hasMcpAppUi:()=>q,interpolatePromptWithArgs:()=>S,isMcpToolCallAllowedForWarp:()=>v,normalizeMcpToolNameToWarpIdentifier:()=>T,resolveMcpAppInputsPayload:()=>z,resolveMcpAppOutputPayload:()=>O,resolveMcpAppWarpEmbedModel:()=>tt,resolveMcpToolCallToWarpDirect:()=>et});module.exports=K(gt);var y=t=>!t||typeof t!="object"||Array.isArray(t)?null:t,X=t=>t==null?null:typeof t=="string"?t:JSON.stringify(t),z=t=>{let e=y(t.query);if(e)return e;let n=y(t.contentInputs);if(n)return n;let r=t.metaInputs||[];return r.length>0?{inputs:r}:null},O=t=>y(t.metaOutput)||y(t.contentOutput),tt=t=>({isMcpApp:q(t.ui),inputsPayload:z({query:t.query,contentInputs:t.contentInputs,metaInputs:t.metaInputs}),outputPayload:O({metaOutput:t.metaOutput,contentOutput:t.contentOutput})}),q=t=>typeof t=="string"&&t!=="table",T=t=>!t||t.startsWith("@")?t:t.includes(":")?`@${t.replace(/^@/,"")}`:t,v=t=>t.activeWarpIdentifier?T(t.requestedToolName)===T(t.activeWarpIdentifier):!0,E=(t,e={})=>{let n=T(t),r=new URLSearchParams;return Object.entries(e).forEach(([i,o])=>{let c=X(o);c!=null&&r.set(i,c)}),r.size>0?`${n}?${r.toString()}`:n},et=t=>{let e=v({requestedToolName:t.requestedToolName,activeWarpIdentifier:t.activeWarpIdentifier}),n=E(t.requestedToolName,t.args||{});return{allowed:e,warpIdentifier:n}};var _=require("@joai/warps"),h=(t,e)=>{let{action:n}=(0,_.getWarpPrimaryAction)(t);return n.inputs?n.inputs.map(r=>{let i=r.as||r.name,o=e[i]??r.default??null;return o===null&&r.type==="bool"?"false":o==null?"":String(o)}):[]};var U=require("@joai/warps");var g=require("@joai/warps");var Z=require("@joai/warps"),l=require("zod");var rt=t=>{if(t){if(Array.isArray(t))return t;if(typeof t=="object")return Object.keys(t)}},nt=(t,e)=>{let n,r=t.type.toLowerCase();r==="string"||r==="address"||r==="hex"?n=l.z.string():r==="number"||r==="uint8"||r==="uint16"||r==="uint32"||r==="uint64"||r==="uint128"||r==="uint256"?n=l.z.number():r==="bool"||r==="boolean"?n=l.z.boolean():r==="biguint"?n=l.z.string():n=l.z.string(),typeof t.min=="number"&&n instanceof l.z.ZodNumber&&(n=n.min(t.min)),typeof t.max=="number"&&n instanceof l.z.ZodNumber&&(n=n.max(t.max)),t.pattern&&n instanceof l.z.ZodString&&(n=n.regex(new RegExp(t.pattern)));let i=rt(t.options);if(i&&i.length>0){if(n instanceof l.z.ZodString)n=l.z.enum(i);else if(n instanceof l.z.ZodNumber){let u=i.map(s=>Number(s)).filter(s=>!isNaN(s));u.length>0&&(n=n.refine(s=>u.includes(s),{message:`Value must be one of: ${u.join(", ")}`}))}}let o=[],c=f(t.description,e);c&&o.push(c),t.bot&&o.push(t.bot),o.push(`Type: ${t.type}`),o.push(t.required?"Required":"Optional"),i&&i.length>0&&o.push(`Options: ${i.join(", ")}`);let p=f(t.patternDescription,e);p&&o.push(p);let a=o.join(". ");return a&&(n=n.describe(a)),t.required!==!0&&(n=n.optional()),n},b=(t,e)=>{let n={};for(let r of t){if(r.source==="hidden"||r.source!=="field")continue;let i=r.as||r.name;n[i]=nt(r,e)}return Object.keys(n).length>0?n:void 0},C=(t,e,n,r,i,o)=>{let c=ot(t),p=r||e.inputs||[],a=b(p,o);return{name:c,description:n,inputSchema:a,meta:$(t,i,o)}},P=(t,e,n,r,i,o)=>{let c=r||e.inputs||[],p=b(c,o),a=e.destination?.tool;if(!a)throw new Error(`Tool name is required for MCP action ${e.type}`);return{name:a,description:n,inputSchema:p,meta:$(t,i,o)}},$=(t,e,n)=>{let r={visibility:["model","app"]};return e&&(r.resourceUri=e.uri),{ui:r}},ot=t=>{let e=t.meta?.identifier;if(!e)throw new Error(`Warp identifier for warp ${t.name} is required`);return(0,Z.removeWarpChainPrefix)(e)};var x=require("@joai/warps"),it="text/html;profile=mcp-app",pt=async t=>{if(t.startsWith("http://")||t.startsWith("https://")){let e=await fetch(t);if(!e.ok)throw new Error(`Failed to download component from ${t}: HTTP ${e.status} ${e.statusText}`);return e.text()}throw new Error(`Unsupported component path: ${t}`)},w=async(t,e,n)=>{if(!t.meta?.identifier)return null;try{let r=await pt(e);return{name:t.name,uri:`ui://widget/${t.meta.identifier}`,description:`MCP app for ${t.name}`,mimeType:it,content:r}}catch(r){let i=r instanceof Error?r.message:String(r),o=r instanceof Error?r.stack:void 0;return x.WarpLogger.error(`[MCP] Failed to create app resource for warp "${t.name}" (path: ${e}):`,i),o&&x.WarpLogger.error("[MCP] Error stack:",o),null}};var j=async(t,e)=>{let n=null,r=null,i=null;if(t.ui&&t.ui!=="table"&&(r=await w(t,t.ui,e)),t.actions.length===0)return{tool:null,resource:r,prompt:null};try{let{action:o}=(0,g.getWarpPrimaryAction)(t),c=f(t.description,e)||f(o.description,e);if(o.type==="prompt")i=I(t,o,c,e);else if(o.type==="mcp"){let p=o;p.destination&&(n=P(t,p,c,o.inputs,r,e))}else n=C(t,o,c,o.inputs,r,e)}catch{return{tool:null,resource:r,prompt:null}}return{tool:n,resource:r,prompt:i}},st=async(t,e)=>Promise.all(t.map(n=>j(n,e))),ct=(t,e)=>e==="date-time"||e==="date"||t==="string"?"string":t==="number"||t==="integer"?"uint256":t==="boolean"?"bool":"string",R=async(t,e,n,r)=>{let i=[];if(e.inputSchema?.properties){let p=e.inputSchema.properties,a=e.inputSchema.required||[];Object.entries(p).forEach(([u,s])=>{let m=a.includes(u),d=ct(s.type||"string",s.format),A={name:u,label:typeof s.title=="string"?{en:s.title}:s.title||{en:u},description:s.description?{en:s.description.trim()}:null,type:d,position:`payload:${u}`,source:"field",required:m,...s.default!==void 0&&typeof s.default=="string"||typeof s.default=="number"||typeof s.default=="boolean"?{default:s.default}:{}};i.push(A)})}let o={};e.outputSchema?.properties&&Object.keys(e.outputSchema.properties).forEach(p=>{o[p]=`out.${p}`});let c={type:"mcp",label:{en:e.name},description:e.description?{en:e.description.trim()}:null,destination:{url:n,tool:e.name,headers:r},inputs:i};return await new g.WarpBuilder(t).setName(e.name||"unnamed_tool").setTitle({en:e.name||"Unnamed Tool"}).setDescription(e.description?{en:e.description.trim()}:null).addAction(c).setOutput(Object.keys(o).length>0?o:null).build(!1)},f=(t,e)=>t&&(0,g.resolveWarpText)(t,e)||void 0;var S=(t,e)=>{let n=t;for(let[r,i]of Object.entries(e)){let o=new RegExp(`\\{\\{\\s*${r}\\s*\\}\\}`,"g");n=n.replace(o,i??"")}return n},at=t=>(t.includes(":")?t.split(":").slice(1).join(":"):t).trim().toLowerCase().replace(/\s+/g,"_").replace(/:/g,"_").replace(/[^a-z0-9_.-]/g,"_").replace(/^[^a-z0-9]+|[^a-z0-9]+$/g,"").replace(/[_-]+/g,e=>e.includes("_")?"_":e).replace(/_+/g,"_"),ut=(t,e)=>{let n=[];for(let r of t){if(r.source==="hidden"||r.source!=="field")continue;let i=r.as||r.name,o=f(r.description,e);n.push({name:i,description:o,required:r.required===!0})}return n},I=(t,e,n,r)=>{let i=at(t.name),o=e.inputs||[],c=ut(o,r);return{name:i,description:n,arguments:c.length>0?c:void 0,prompt:(0,U.resolvePlatformValue)(e.prompt,r.platform)}};var N=require("@modelcontextprotocol/sdk/server/mcp.js"),D=require("@modelcontextprotocol/sdk/server/zod-compat.js"),W=require("@modelcontextprotocol/ext-apps/server"),F=require("zod");var lt=t=>{if(t)return typeof t=="object"&&"_zod"in t?t._zod:typeof t=="object"&&!Array.isArray(t)&&(0,D.normalizeObjectSchema)(t)||t},mt=t=>{if(!t.arguments||t.arguments.length===0)return;let e={};for(let n of t.arguments){let r=F.z.string();n.description&&(r=r.describe(n.description)),n.required||(r=r.optional()),e[n.name]=r}return e},dt=(t,e)=>t.startsWith("ui://")?!0:e?.includes("profile=mcp-app")??!1,ft=(t,e,n,r)=>{let i=new N.McpServer({name:t.name,version:t.version||"1.0.0"});for(let o=0;o<n.length;o++){let{tool:c,resource:p,prompt:a}=n[o],u=e[o];if(c){let s=lt(c.inputSchema),m={description:c.description||"",inputSchema:s,...c.meta&&{_meta:c.meta}},d=async A=>{let L=h(u,A||{});return await r(u,L)};c.meta?.ui?.resourceUri?(0,W.registerAppTool)(i,c.name,m,d):i.registerTool(c.name,m,d)}if(p)if(dt(p.uri,p.mimeType)){let s=p.meta,m=p.mimeType||W.RESOURCE_MIME_TYPE;(0,W.registerAppResource)(i,p.name||p.uri,p.uri,{description:p.description,mimeType:m,...s&&{_meta:s}},async()=>{let d={uri:p.uri,text:p.content||"",mimeType:m};return s&&(d._meta=s),{contents:[d]}})}else i.registerResource(p.name||p.uri,p.uri,{description:p.description,mimeType:p.mimeType},async()=>{let s={uri:p.uri,text:p.content||"",mimeType:p.mimeType};return p.meta&&(s._meta=p.meta),{contents:[s]}});if(a){let s=mt(a);i.registerPrompt(a.name,{description:a.description||"",argsSchema:s},m=>({messages:[{role:"user",content:{type:"text",text:S(a.prompt,m)}}]}))}}return i};var J=require("@modelcontextprotocol/sdk/client/index.js"),V=require("@modelcontextprotocol/sdk/client/streamableHttp.js");var k=class{constructor(e){this.config=e}async getWarpsFromTools(e,n){let r=new V.StreamableHTTPClientTransport(new URL(e),{requestInit:{headers:n||{}}}),i=new J.Client({name:"warps-mcp-client",version:"1.0.0"},{capabilities:{}});try{await i.connect(r);let o=await i.listTools();return await i.close(),await Promise.all(o.tools.map(c=>R(this.config,c,e,n)))}catch(o){throw await i.close().catch(()=>{}),o}}};0&&(module.exports={WarpMcp,buildWarpDirectIdentifierFromMcpToolCall,buildZodInputSchema,convertActionToTool,convertMcpActionToTool,convertMcpArgsToWarpInputs,convertMcpToolToWarp,convertPromptActionToPrompt,convertWarpToMcpCapabilities,convertWarpsToMcpCapabilities,createAppResource,createMcpServerFromWarps,extractTextOrUndefined,hasMcpAppUi,interpolatePromptWithArgs,isMcpToolCallAllowedForWarp,normalizeMcpToolNameToWarpIdentifier,resolveMcpAppInputsPayload,resolveMcpAppOutputPayload,resolveMcpAppWarpEmbedModel,resolveMcpToolCallToWarpDirect});
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- var g=t=>!t||typeof t!="object"||Array.isArray(t)?null:t,k=t=>t==null?null:typeof t=="string"?t:JSON.stringify(t),z=t=>{let e=g(t.query);if(e)return e;let n=g(t.contentInputs);if(n)return n;let r=t.metaInputs||[];return r.length>0?{inputs:r}:null},O=t=>g(t.metaOutput)||g(t.contentOutput),ct=t=>({isMcpApp:q(t.ui),inputsPayload:z({query:t.query,contentInputs:t.contentInputs,metaInputs:t.metaInputs}),outputPayload:O({metaOutput:t.metaOutput,contentOutput:t.contentOutput})}),q=t=>typeof t=="string"&&t!=="table",y=t=>!t||t.startsWith("@")?t:t.includes(":")?`@${t.replace(/^@/,"")}`:t,v=t=>t.activeWarpIdentifier?y(t.requestedToolName)===y(t.activeWarpIdentifier):!0,E=(t,e={})=>{let n=y(t),r=new URLSearchParams;return Object.entries(e).forEach(([i,o])=>{let c=k(o);c!=null&&r.set(i,c)}),r.size>0?`${n}?${r.toString()}`:n},at=t=>{let e=v({requestedToolName:t.requestedToolName,activeWarpIdentifier:t.activeWarpIdentifier}),n=E(t.requestedToolName,t.args||{});return{allowed:e,warpIdentifier:n}};import{getWarpPrimaryAction as _}from"@joai/warps";var T=(t,e)=>{let{action:n}=_(t);return n.inputs?n.inputs.map(r=>{let i=r.as||r.name,o=e[i]??r.default??null;return o===null&&r.type==="bool"?"false":o==null?"":String(o)}):[]};import{WarpBuilder as F,getWarpPrimaryAction as J,resolveWarpText as L}from"@joai/warps";import{removeWarpChainPrefix as Z}from"@joai/warps";import{z as l}from"zod";var $=t=>{if(t){if(Array.isArray(t))return t;if(typeof t=="object")return Object.keys(t)}},j=(t,e)=>{let n,r=t.type.toLowerCase();r==="string"||r==="address"||r==="hex"?n=l.string():r==="number"||r==="uint8"||r==="uint16"||r==="uint32"||r==="uint64"||r==="uint128"||r==="uint256"?n=l.number():r==="bool"||r==="boolean"?n=l.boolean():r==="biguint"?n=l.string():n=l.string(),typeof t.min=="number"&&n instanceof l.ZodNumber&&(n=n.min(t.min)),typeof t.max=="number"&&n instanceof l.ZodNumber&&(n=n.max(t.max)),t.pattern&&n instanceof l.ZodString&&(n=n.regex(new RegExp(t.pattern)));let i=$(t.options);if(i&&i.length>0){if(n instanceof l.ZodString)n=l.enum(i);else if(n instanceof l.ZodNumber){let u=i.map(s=>Number(s)).filter(s=>!isNaN(s));u.length>0&&(n=n.refine(s=>u.includes(s),{message:`Value must be one of: ${u.join(", ")}`}))}}let o=[],c=f(t.description,e);c&&o.push(c),t.bot&&o.push(t.bot),o.push(`Type: ${t.type}`),o.push(t.required?"Required":"Optional"),i&&i.length>0&&o.push(`Options: ${i.join(", ")}`);let p=f(t.patternDescription,e);p&&o.push(p);let a=o.join(". ");return a&&(n=n.describe(a)),t.required!==!0&&(n=n.optional()),n},A=(t,e)=>{let n={};for(let r of t){if(r.source==="hidden"||r.source!=="field")continue;let i=r.as||r.name;n[i]=j(r,e)}return Object.keys(n).length>0?n:void 0},M=(t,e,n,r,i,o)=>{let c=U(t),p=r||e.inputs||[],a=A(p,o);return{name:c,description:n,inputSchema:a,meta:b(t,i,o)}},h=(t,e,n,r,i,o)=>{let c=r||e.inputs||[],p=A(c,o),a=e.destination?.tool;if(!a)throw new Error(`Tool name is required for MCP action ${e.type}`);return{name:a,description:n,inputSchema:p,meta:b(t,i,o)}},b=(t,e,n)=>{let r={visibility:["model","app"]};return e&&(r.resourceUri=e.uri),{ui:r}},U=t=>{let e=t.meta?.identifier;if(!e)throw new Error(`Warp identifier for warp ${t.name} is required`);return Z(e)};import{WarpLogger as C}from"@joai/warps";var N="text/html;profile=mcp-app",D=async t=>{if(t.startsWith("http://")||t.startsWith("https://")){let e=await fetch(t);if(!e.ok)throw new Error(`Failed to download component from ${t}: HTTP ${e.status} ${e.statusText}`);return e.text()}throw new Error(`Unsupported component path: ${t}`)},P=async(t,e,n)=>{if(!t.meta?.identifier)return null;try{let r=await D(e);return{name:t.name,uri:`ui://widget/${t.meta.identifier}`,description:`MCP app for ${t.name}`,mimeType:N,content:r}}catch(r){let i=r instanceof Error?r.message:String(r),o=r instanceof Error?r.stack:void 0;return C.error(`[MCP] Failed to create app resource for warp "${t.name}" (path: ${e}):`,i),o&&C.error("[MCP] Error stack:",o),null}};var V=async(t,e)=>{let n=null,r=null,i=null;if(t.ui&&t.ui!=="table"&&(r=await P(t,t.ui,e)),t.actions.length===0)return{tool:null,resource:r,prompt:null};try{let{action:o}=J(t),c=f(t.description,e)||f(o.description,e);if(o.type==="prompt")i=w(t,o,c,e);else if(o.type==="mcp"){let p=o;p.destination&&(n=h(t,p,c,o.inputs,r,e))}else n=M(t,o,c,o.inputs,r,e)}catch{return{tool:null,resource:r,prompt:null}}return{tool:n,resource:r,prompt:i}},Ft=async(t,e)=>Promise.all(t.map(n=>V(n,e))),H=(t,e)=>e==="date-time"||e==="date"||t==="string"?"string":t==="number"||t==="integer"?"uint256":t==="boolean"?"bool":"string",x=async(t,e,n,r)=>{let i=[];if(e.inputSchema?.properties){let p=e.inputSchema.properties,a=e.inputSchema.required||[];Object.entries(p).forEach(([u,s])=>{let m=a.includes(u),d=H(s.type||"string",s.format),W={name:u,label:typeof s.title=="string"?{en:s.title}:s.title||{en:u},description:s.description?{en:s.description.trim()}:null,type:d,position:`payload:${u}`,source:"field",required:m,...s.default!==void 0&&typeof s.default=="string"||typeof s.default=="number"||typeof s.default=="boolean"?{default:s.default}:{}};i.push(W)})}let o={};e.outputSchema?.properties&&Object.keys(e.outputSchema.properties).forEach(p=>{o[p]=`out.${p}`});let c={type:"mcp",label:{en:e.name},description:e.description?{en:e.description.trim()}:null,destination:{url:n,tool:e.name,headers:r},inputs:i};return await new F(t).setName(e.name||"unnamed_tool").setTitle({en:e.name||"Unnamed Tool"}).setDescription(e.description?{en:e.description.trim()}:null).addAction(c).setOutput(Object.keys(o).length>0?o:null).build(!1)},f=(t,e)=>t&&L(t,e)||void 0;var R=(t,e)=>{let n=t;for(let[r,i]of Object.entries(e)){let o=new RegExp(`\\{\\{\\s*${r}\\s*\\}\\}`,"g");n=n.replace(o,i??"")}return n},Q=t=>(t.includes(":")?t.split(":").slice(1).join(":"):t).trim().toLowerCase().replace(/\s+/g,"_").replace(/:/g,"_").replace(/[^a-z0-9_.-]/g,"_").replace(/^[^a-z0-9]+|[^a-z0-9]+$/g,"").replace(/[_-]+/g,e=>e.includes("_")?"_":e).replace(/_+/g,"_"),Y=(t,e)=>{let n=[];for(let r of t){if(r.source==="hidden"||r.source!=="field")continue;let i=r.as||r.name,o=f(r.description,e);n.push({name:i,description:o,required:r.required===!0})}return n},w=(t,e,n,r)=>{let i=Q(t.name),o=e.inputs||[],c=Y(o,r);return{name:i,description:n,arguments:c.length>0?c:void 0,prompt:e.prompt}};import{McpServer as B}from"@modelcontextprotocol/sdk/server/mcp.js";import{normalizeObjectSchema as G}from"@modelcontextprotocol/sdk/server/zod-compat.js";import{RESOURCE_MIME_TYPE as K,registerAppTool as X,registerAppResource as tt}from"@modelcontextprotocol/ext-apps/server";import{z as et}from"zod";var rt=t=>{if(t)return typeof t=="object"&&"_zod"in t?t._zod:typeof t=="object"&&!Array.isArray(t)&&G(t)||t},nt=t=>{if(!t.arguments||t.arguments.length===0)return;let e={};for(let n of t.arguments){let r=et.string();n.description&&(r=r.describe(n.description)),n.required||(r=r.optional()),e[n.name]=r}return e},ot=(t,e)=>t.startsWith("ui://")?!0:e?.includes("profile=mcp-app")??!1,Xt=(t,e,n,r)=>{let i=new B({name:t.name,version:t.version||"1.0.0"});for(let o=0;o<n.length;o++){let{tool:c,resource:p,prompt:a}=n[o],u=e[o];if(c){let s=rt(c.inputSchema),m={description:c.description||"",inputSchema:s,...c.meta&&{_meta:c.meta}},d=async W=>{let S=T(u,W||{});return await r(u,S)};c.meta?.ui?.resourceUri?X(i,c.name,m,d):i.registerTool(c.name,m,d)}if(p)if(ot(p.uri,p.mimeType)){let s=p.meta,m=p.mimeType||K;tt(i,p.name||p.uri,p.uri,{description:p.description,mimeType:m,...s&&{_meta:s}},async()=>{let d={uri:p.uri,text:p.content||"",mimeType:m};return s&&(d._meta=s),{contents:[d]}})}else i.registerResource(p.name||p.uri,p.uri,{description:p.description,mimeType:p.mimeType},async()=>{let s={uri:p.uri,text:p.content||"",mimeType:p.mimeType};return p.meta&&(s._meta=p.meta),{contents:[s]}});if(a){let s=nt(a);i.registerPrompt(a.name,{description:a.description||"",argsSchema:s},m=>({messages:[{role:"user",content:{type:"text",text:R(a.prompt,m)}}]}))}}return i};import{Client as it}from"@modelcontextprotocol/sdk/client/index.js";import{StreamableHTTPClientTransport as pt}from"@modelcontextprotocol/sdk/client/streamableHttp.js";var I=class{constructor(e){this.config=e}async getWarpsFromTools(e,n){let r=new pt(new URL(e),{requestInit:{headers:n||{}}}),i=new it({name:"warps-mcp-client",version:"1.0.0"},{capabilities:{}});try{await i.connect(r);let o=await i.listTools();return await i.close(),await Promise.all(o.tools.map(c=>x(this.config,c,e,n)))}catch(o){throw await i.close().catch(()=>{}),o}}};export{I as WarpMcp,E as buildWarpDirectIdentifierFromMcpToolCall,A as buildZodInputSchema,M as convertActionToTool,h as convertMcpActionToTool,T as convertMcpArgsToWarpInputs,x as convertMcpToolToWarp,w as convertPromptActionToPrompt,V as convertWarpToMcpCapabilities,Ft as convertWarpsToMcpCapabilities,P as createAppResource,Xt as createMcpServerFromWarps,f as extractTextOrUndefined,q as hasMcpAppUi,R as interpolatePromptWithArgs,v as isMcpToolCallAllowedForWarp,y as normalizeMcpToolNameToWarpIdentifier,z as resolveMcpAppInputsPayload,O as resolveMcpAppOutputPayload,ct as resolveMcpAppWarpEmbedModel,at as resolveMcpToolCallToWarpDirect};
1
+ var g=t=>!t||typeof t!="object"||Array.isArray(t)?null:t,k=t=>t==null?null:typeof t=="string"?t:JSON.stringify(t),z=t=>{let e=g(t.query);if(e)return e;let n=g(t.contentInputs);if(n)return n;let r=t.metaInputs||[];return r.length>0?{inputs:r}:null},O=t=>g(t.metaOutput)||g(t.contentOutput),at=t=>({isMcpApp:q(t.ui),inputsPayload:z({query:t.query,contentInputs:t.contentInputs,metaInputs:t.metaInputs}),outputPayload:O({metaOutput:t.metaOutput,contentOutput:t.contentOutput})}),q=t=>typeof t=="string"&&t!=="table",y=t=>!t||t.startsWith("@")?t:t.includes(":")?`@${t.replace(/^@/,"")}`:t,v=t=>t.activeWarpIdentifier?y(t.requestedToolName)===y(t.activeWarpIdentifier):!0,E=(t,e={})=>{let n=y(t),r=new URLSearchParams;return Object.entries(e).forEach(([i,o])=>{let c=k(o);c!=null&&r.set(i,c)}),r.size>0?`${n}?${r.toString()}`:n},ut=t=>{let e=v({requestedToolName:t.requestedToolName,activeWarpIdentifier:t.activeWarpIdentifier}),n=E(t.requestedToolName,t.args||{});return{allowed:e,warpIdentifier:n}};import{getWarpPrimaryAction as _}from"@joai/warps";var T=(t,e)=>{let{action:n}=_(t);return n.inputs?n.inputs.map(r=>{let i=r.as||r.name,o=e[i]??r.default??null;return o===null&&r.type==="bool"?"false":o==null?"":String(o)}):[]};import{resolvePlatformValue as Q}from"@joai/warps";import{WarpBuilder as F,getWarpPrimaryAction as J,resolveWarpText as V}from"@joai/warps";import{removeWarpChainPrefix as Z}from"@joai/warps";import{z as l}from"zod";var $=t=>{if(t){if(Array.isArray(t))return t;if(typeof t=="object")return Object.keys(t)}},j=(t,e)=>{let n,r=t.type.toLowerCase();r==="string"||r==="address"||r==="hex"?n=l.string():r==="number"||r==="uint8"||r==="uint16"||r==="uint32"||r==="uint64"||r==="uint128"||r==="uint256"?n=l.number():r==="bool"||r==="boolean"?n=l.boolean():r==="biguint"?n=l.string():n=l.string(),typeof t.min=="number"&&n instanceof l.ZodNumber&&(n=n.min(t.min)),typeof t.max=="number"&&n instanceof l.ZodNumber&&(n=n.max(t.max)),t.pattern&&n instanceof l.ZodString&&(n=n.regex(new RegExp(t.pattern)));let i=$(t.options);if(i&&i.length>0){if(n instanceof l.ZodString)n=l.enum(i);else if(n instanceof l.ZodNumber){let u=i.map(s=>Number(s)).filter(s=>!isNaN(s));u.length>0&&(n=n.refine(s=>u.includes(s),{message:`Value must be one of: ${u.join(", ")}`}))}}let o=[],c=f(t.description,e);c&&o.push(c),t.bot&&o.push(t.bot),o.push(`Type: ${t.type}`),o.push(t.required?"Required":"Optional"),i&&i.length>0&&o.push(`Options: ${i.join(", ")}`);let p=f(t.patternDescription,e);p&&o.push(p);let a=o.join(". ");return a&&(n=n.describe(a)),t.required!==!0&&(n=n.optional()),n},A=(t,e)=>{let n={};for(let r of t){if(r.source==="hidden"||r.source!=="field")continue;let i=r.as||r.name;n[i]=j(r,e)}return Object.keys(n).length>0?n:void 0},M=(t,e,n,r,i,o)=>{let c=U(t),p=r||e.inputs||[],a=A(p,o);return{name:c,description:n,inputSchema:a,meta:b(t,i,o)}},h=(t,e,n,r,i,o)=>{let c=r||e.inputs||[],p=A(c,o),a=e.destination?.tool;if(!a)throw new Error(`Tool name is required for MCP action ${e.type}`);return{name:a,description:n,inputSchema:p,meta:b(t,i,o)}},b=(t,e,n)=>{let r={visibility:["model","app"]};return e&&(r.resourceUri=e.uri),{ui:r}},U=t=>{let e=t.meta?.identifier;if(!e)throw new Error(`Warp identifier for warp ${t.name} is required`);return Z(e)};import{WarpLogger as C}from"@joai/warps";var N="text/html;profile=mcp-app",D=async t=>{if(t.startsWith("http://")||t.startsWith("https://")){let e=await fetch(t);if(!e.ok)throw new Error(`Failed to download component from ${t}: HTTP ${e.status} ${e.statusText}`);return e.text()}throw new Error(`Unsupported component path: ${t}`)},P=async(t,e,n)=>{if(!t.meta?.identifier)return null;try{let r=await D(e);return{name:t.name,uri:`ui://widget/${t.meta.identifier}`,description:`MCP app for ${t.name}`,mimeType:N,content:r}}catch(r){let i=r instanceof Error?r.message:String(r),o=r instanceof Error?r.stack:void 0;return C.error(`[MCP] Failed to create app resource for warp "${t.name}" (path: ${e}):`,i),o&&C.error("[MCP] Error stack:",o),null}};var L=async(t,e)=>{let n=null,r=null,i=null;if(t.ui&&t.ui!=="table"&&(r=await P(t,t.ui,e)),t.actions.length===0)return{tool:null,resource:r,prompt:null};try{let{action:o}=J(t),c=f(t.description,e)||f(o.description,e);if(o.type==="prompt")i=w(t,o,c,e);else if(o.type==="mcp"){let p=o;p.destination&&(n=h(t,p,c,o.inputs,r,e))}else n=M(t,o,c,o.inputs,r,e)}catch{return{tool:null,resource:r,prompt:null}}return{tool:n,resource:r,prompt:i}},Jt=async(t,e)=>Promise.all(t.map(n=>L(n,e))),H=(t,e)=>e==="date-time"||e==="date"||t==="string"?"string":t==="number"||t==="integer"?"uint256":t==="boolean"?"bool":"string",x=async(t,e,n,r)=>{let i=[];if(e.inputSchema?.properties){let p=e.inputSchema.properties,a=e.inputSchema.required||[];Object.entries(p).forEach(([u,s])=>{let m=a.includes(u),d=H(s.type||"string",s.format),W={name:u,label:typeof s.title=="string"?{en:s.title}:s.title||{en:u},description:s.description?{en:s.description.trim()}:null,type:d,position:`payload:${u}`,source:"field",required:m,...s.default!==void 0&&typeof s.default=="string"||typeof s.default=="number"||typeof s.default=="boolean"?{default:s.default}:{}};i.push(W)})}let o={};e.outputSchema?.properties&&Object.keys(e.outputSchema.properties).forEach(p=>{o[p]=`out.${p}`});let c={type:"mcp",label:{en:e.name},description:e.description?{en:e.description.trim()}:null,destination:{url:n,tool:e.name,headers:r},inputs:i};return await new F(t).setName(e.name||"unnamed_tool").setTitle({en:e.name||"Unnamed Tool"}).setDescription(e.description?{en:e.description.trim()}:null).addAction(c).setOutput(Object.keys(o).length>0?o:null).build(!1)},f=(t,e)=>t&&V(t,e)||void 0;var R=(t,e)=>{let n=t;for(let[r,i]of Object.entries(e)){let o=new RegExp(`\\{\\{\\s*${r}\\s*\\}\\}`,"g");n=n.replace(o,i??"")}return n},Y=t=>(t.includes(":")?t.split(":").slice(1).join(":"):t).trim().toLowerCase().replace(/\s+/g,"_").replace(/:/g,"_").replace(/[^a-z0-9_.-]/g,"_").replace(/^[^a-z0-9]+|[^a-z0-9]+$/g,"").replace(/[_-]+/g,e=>e.includes("_")?"_":e).replace(/_+/g,"_"),B=(t,e)=>{let n=[];for(let r of t){if(r.source==="hidden"||r.source!=="field")continue;let i=r.as||r.name,o=f(r.description,e);n.push({name:i,description:o,required:r.required===!0})}return n},w=(t,e,n,r)=>{let i=Y(t.name),o=e.inputs||[],c=B(o,r);return{name:i,description:n,arguments:c.length>0?c:void 0,prompt:Q(e.prompt,r.platform)}};import{McpServer as G}from"@modelcontextprotocol/sdk/server/mcp.js";import{normalizeObjectSchema as K}from"@modelcontextprotocol/sdk/server/zod-compat.js";import{RESOURCE_MIME_TYPE as X,registerAppTool as tt,registerAppResource as et}from"@modelcontextprotocol/ext-apps/server";import{z as rt}from"zod";var nt=t=>{if(t)return typeof t=="object"&&"_zod"in t?t._zod:typeof t=="object"&&!Array.isArray(t)&&K(t)||t},ot=t=>{if(!t.arguments||t.arguments.length===0)return;let e={};for(let n of t.arguments){let r=rt.string();n.description&&(r=r.describe(n.description)),n.required||(r=r.optional()),e[n.name]=r}return e},it=(t,e)=>t.startsWith("ui://")?!0:e?.includes("profile=mcp-app")??!1,ie=(t,e,n,r)=>{let i=new G({name:t.name,version:t.version||"1.0.0"});for(let o=0;o<n.length;o++){let{tool:c,resource:p,prompt:a}=n[o],u=e[o];if(c){let s=nt(c.inputSchema),m={description:c.description||"",inputSchema:s,...c.meta&&{_meta:c.meta}},d=async W=>{let S=T(u,W||{});return await r(u,S)};c.meta?.ui?.resourceUri?tt(i,c.name,m,d):i.registerTool(c.name,m,d)}if(p)if(it(p.uri,p.mimeType)){let s=p.meta,m=p.mimeType||X;et(i,p.name||p.uri,p.uri,{description:p.description,mimeType:m,...s&&{_meta:s}},async()=>{let d={uri:p.uri,text:p.content||"",mimeType:m};return s&&(d._meta=s),{contents:[d]}})}else i.registerResource(p.name||p.uri,p.uri,{description:p.description,mimeType:p.mimeType},async()=>{let s={uri:p.uri,text:p.content||"",mimeType:p.mimeType};return p.meta&&(s._meta=p.meta),{contents:[s]}});if(a){let s=ot(a);i.registerPrompt(a.name,{description:a.description||"",argsSchema:s},m=>({messages:[{role:"user",content:{type:"text",text:R(a.prompt,m)}}]}))}}return i};import{Client as pt}from"@modelcontextprotocol/sdk/client/index.js";import{StreamableHTTPClientTransport as st}from"@modelcontextprotocol/sdk/client/streamableHttp.js";var I=class{constructor(e){this.config=e}async getWarpsFromTools(e,n){let r=new st(new URL(e),{requestInit:{headers:n||{}}}),i=new pt({name:"warps-mcp-client",version:"1.0.0"},{capabilities:{}});try{await i.connect(r);let o=await i.listTools();return await i.close(),await Promise.all(o.tools.map(c=>x(this.config,c,e,n)))}catch(o){throw await i.close().catch(()=>{}),o}}};export{I as WarpMcp,E as buildWarpDirectIdentifierFromMcpToolCall,A as buildZodInputSchema,M as convertActionToTool,h as convertMcpActionToTool,T as convertMcpArgsToWarpInputs,x as convertMcpToolToWarp,w as convertPromptActionToPrompt,L as convertWarpToMcpCapabilities,Jt as convertWarpsToMcpCapabilities,P as createAppResource,ie as createMcpServerFromWarps,f as extractTextOrUndefined,q as hasMcpAppUi,R as interpolatePromptWithArgs,v as isMcpToolCallAllowedForWarp,y as normalizeMcpToolNameToWarpIdentifier,z as resolveMcpAppInputsPayload,O as resolveMcpAppOutputPayload,at as resolveMcpAppWarpEmbedModel,ut as resolveMcpToolCallToWarpDirect};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@joai/warps-mcp",
3
- "version": "6.0.0",
3
+ "version": "8.0.0",
4
4
  "description": "MCP adapter for Warps SDK",
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.ts",
@@ -26,9 +26,9 @@
26
26
  ],
27
27
  "devDependencies": {
28
28
  "@types/jest": "^30.0.0",
29
- "@types/node": "^20.0.0",
30
- "jest": "^30.2.0",
31
- "jest-environment-jsdom": "^30.2.0",
29
+ "@types/node": "^25.4.0",
30
+ "jest": "^30.3.0",
31
+ "jest-environment-jsdom": "^30.3.0",
32
32
  "jest-fetch-mock": "^3.0.3",
33
33
  "ts-jest": "^29.4.6",
34
34
  "tsup": "^8.5.1",
@@ -38,11 +38,11 @@
38
38
  "access": "public"
39
39
  },
40
40
  "dependencies": {
41
- "@modelcontextprotocol/ext-apps": "^1.1.2",
42
- "@modelcontextprotocol/sdk": "^1.25.2",
43
- "zod": "^4.3.5"
41
+ "@modelcontextprotocol/ext-apps": "^1.2.0",
42
+ "@modelcontextprotocol/sdk": "^1.27.1",
43
+ "zod": "^4.3.6"
44
44
  },
45
45
  "peerDependencies": {
46
- "@joai/warps": "^3.5.0"
46
+ "@joai/warps": "^4.1.0"
47
47
  }
48
48
  }