@netlify/agent-runner-cli 2.13.1-setup-satisfy-fix.0 → 2.14.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/bin-local.js +73 -73
- package/dist/bin.js +101 -101
- package/dist/index.js +72 -72
- package/dist/interactions-mcp-server.js +1 -1
- package/package.json +1 -1
|
@@ -79,6 +79,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
79
79
|
`))};function pf(e){return{log:(...t)=>{Ts()&&console.log(`[AR]-[${e}]${Ps()}`,...t)},error:(...t)=>{Ts()&&hz(console.error,`[AR]-[ERROR]-[${e}]${Ps()}`,t,"error")},warn:(...t)=>{Ts()&&hz(console.warn,`[AR]-[WARN]-[${e}]${Ps()}`,t,"warn")},info:(...t)=>{Ts()&&console.info(`[AR]-[${e}]${Ps()}`,...t)},debug:(...t)=>{Ts()&&console.debug(`[AR]-[DEBUG]-[${e}]${Ps()}`,...t)}}}import{AsyncLocalStorage as MC}from"async_hooks";import LC from"dgram";import uo from"process";var VC="buildbot.agent_runner.",qC=8125,FC=e=>{let t=Object.keys(e);return t.length===0?"":"|#"+t.map(n=>`${n}:${e[n]}`).join(",")},Os=(e,t,n,i={})=>`${VC}${e}:${t}|${n}${FC(i)}`,BC={service:"buildbot"},JC={},KC=new MC;var Es=e=>({...JC,...KC.getStore()??{},...e,...BC}),GC=(e,t)=>{let n=!1,i=LC.createSocket("udp4");return i.unref(),i.once("error",r=>{if(!n){let o=r.code??r.message;uo.stderr.write(`[metrics] UDP error: ${o}
|
|
80
80
|
`),n=!0}}),r=>{n||(Uy++,i.send(r,t,e,o=>{if(Uy--,Uy===0)for(let a of HC)a();if(o&&!n){let a=o.code??o.message;uo.stderr.write(`[metrics] UDP send to ${e}:${t} failed: ${a}
|
|
81
81
|
`),n=!0}}))}},Uy=0,HC=new Set;var Zy=()=>{},WC=()=>!!uo.env.VITEST;var XC=()=>{if(WC())return Zy;let e=uo.env.HOST_NODE_IP;if(!e)return Zy;let t=uo.env.DD_AGENT_PORT,n=t===void 0?qC:Number(t);return!Number.isInteger(n)||n<=0||n>65535?(uo.stderr.write(`[metrics] DD_AGENT_PORT="${t}" is not a valid port; metrics disabled
|
|
82
|
-
`),Zy):GC(e,n)},YC=(e=XC())=>({inc(t,n=1,i={}){e(Os(t,n,"c",Es(i)))},gauge(t,n,i={}){e(Os(t,n,"g",Es(i)))},histogram(t,n,i={}){e(Os(t,n,"h",Es(i)))},timing(t,n,i={}){e(Os(t,n,"ms",Es(i)))},distribution(t,n,i={}){e(Os(t,n,"d",Es(i)))}}),Ns=YC();import{spawn as UB}from"child_process";import{existsSync as MB,mkdirSync as LB,writeFileSync as VB}from"fs";import{connect as FB}from"net";import QC from"path";import KB from"process";var HB=pf("step-preview"),WB=QC.join("apps","netlify-react-ui","public","agent-run-preview.json"),eU=9001,tU="components-agentrunners-rendersteps--live",XB=`http://localhost:${eU}/?path=/story/${tU}`;var mf=class extends Error{constructor(n,i,r){super(n);this.statusCode=i;this.userMessage=r;this.name="CreditLimitExceededError"}},hf=class extends Error{constructor(n,i,r){super(n);this.statusCode=i;this.userMessage=r;this.name="ApiResourceNotFoundError"}},js=class extends Error{constructor(n,i){super(n);this.statusCode=i;this.name="ApiRequestError"}};var gf=wn.env.NETLIFY_API_URL,My=wn.env.NETLIFY_API_TOKEN,lo=pf("api"),rU=()=>wn.env.NETLIFY_LOCAL_MODE==="true",nU=new Set(["agent_runners","sessions","sites","accounts","branch","dev_servers"]),iU=new Set(["api","v1","agent_runners","sessions","sites","accounts","classify","diff","result","upload_urls","native_session","upload","update_usage","connections","tokens","ai-gateway","providers","agent-runners","token","database","branch","dev_servers","config","setup_requests"]),oU=e=>e.split("/").map((t,n,i)=>t===""?t:nU.has(i[n-1])?":id":iU.has(t)?t:":id").join("/"),aU=async(e,t={})=>{if(!gf||!My)throw new Error("No API URL or token");let n=new URL(e,gf),i={...t,headers:{...t.headers,Authorization:`Bearer ${My}`}};wn.env.AGENT_RUNNERS_DEBUG==="true"&&(i.headers["x-nf-debug-logging"]="true"),t.json&&(i.headers||={},i.headers["Content-Type"]="application/json",i.body=JSON.stringify(t.json));let r=t.method??"GET",o=oU(n.pathname),a=Date.now(),s;try{s=await fetch(n,i)}catch(d){throw lo.error(zs({event:"api.request",method:r,path:n.pathname,resource:o,outcome:"network_error",error:d.message,duration_ms:Date.now()-a})),Ns.inc("api.request",1,{method:r,resource:o}),Ns.inc("api.request_failed",1,{status:"network_error",method:r,resource:o}),d}let c=s.ok&&s.status<=299;wn.env.AGENT_RUNNERS_DEBUG==="true"&&(lo.log(`Response headers for ${n}:`),s.headers.forEach((d,f)=>{lo.log(` ${f}: ${d}`)}));let u=zs({event:"api.request",method:r,path:n.pathname,resource:o,status:s.status,request_id:s.headers.get("x-request-id")||s.headers.get("x-nf-request-id"),duration_ms:Date.now()-a});if(Ns.inc("api.request",1,{method:r,resource:o}),c?lo.log(u):(lo.error(u),Ns.inc("api.request_failed",1,{status:s.status,method:r,resource:o})),t.raw){if(!c)throw new js(`API request failed: ${s.status} ${s.statusText}`,s.status);return s}let l=await(s.headers.get("content-type")?.includes("application/json")?s.json():s.text());if(!c){let d=typeof l=="string"?l:JSON.stringify(l);throw s.status===404?new hf(`API request failed: 404 - ${d}`,404,"The site associated with this agent run no longer exists."):s.status===503&&t.gracefulOn503&&d.toLowerCase().includes("usage exceeded")?new mf(`API request failed: 503 - ${d}`,503,"Credit limit reached. Please add more credits to continue using Agent Runners."):new js(`API request failed: ${s.status} - ${d}`,s.status)}return l},gz=e=>{lo.log("Setting details for api",{apiUrl:e?.constants?.NETLIFY_API_HOST,token:!!e?.constants?.NETLIFY_API_TOKEN}),wn.env.NETLIFY_AGENT_RUNNER_API_URL_OVERRIDE?gf=wn.env.NETLIFY_AGENT_RUNNER_API_URL_OVERRIDE:e?.constants?.NETLIFY_API_HOST&&(gf=`https://${e.constants.NETLIFY_API_HOST}`),e?.constants?.NETLIFY_API_TOKEN&&(My=e.constants.NETLIFY_API_TOKEN)};var sU=(e,t)=>rU()?{}:{"X-Nf-Agent-Runner-Id":e,"X-Nf-Agent-Runner-Session-Id":t};var vz=(e,t,n,i)=>aU(`/api/v1/sites/${e}/setup_requests`,{method:"POST",json:t,headers:sU(n,i)});var _z='Ask the user clarifying questions, preferably one to three, and pause until they answer. Use this instead of guessing when a decision materially changes the work. A question either offers two or three predefined options (one answer, or several with multiSelect) or omits options entirely so the user answers in their own words. The UI adds an "Other" choice and a free-text field for extra context to every question that has options, so an answer can name a choice you never offered or carry context beyond the label the user picked. The process pauses as soon as you call it; do not call it more than once or continue working after calling it.',cU=e=>{if(e!==null){if(!Array.isArray(e))return e;if(!(e.length<2))return e.map(t=>typeof t=="string"?{label:t}:t)}},yz=e=>e.meta({maxItems:3}),uU=e=>{if(typeof e!="string")return e;try{return JSON.parse(e)}catch{return e}},lU=e=>e.nonoptional(),Ly={questions:lU($e.preprocess(uU,yz($e.array($e.object({question:$e.string().describe("The question as the user reads it"),multiSelect:$e.boolean().optional().describe("True when several options can apply at once. Leave off for mutually exclusive choices."),options:$e.preprocess(cU,yz($e.array($e.object({label:$e.string(),description:$e.string().optional()})).min(2).optional())).describe('Two or three predefined answers. Omit entirely to ask an open question the user answers in their own words. The UI adds its own "Other" choice and a free-text field for extra context, so never add an option like "Other" or "None of these" yourself.')})).min(1)))).describe("One to three questions preferred, all asked in a single call")},$J=$e.object(Ly);import{renameSync as dU,writeFileSync as fU}from"fs";import vf from"process";var Vy=(e,t)=>{let n=`${e}.partial`;fU(n,JSON.stringify(t)),dU(n,e)},qy=()=>new Promise(()=>{}),$z=()=>{let e=()=>vf.exit(0);vf.stdin.on("close",e),vf.stdin.on("end",e)},bz=()=>{console.log=console.error,console.info=console.error,console.debug=console.error},As=(e,t=vf.argv)=>{let n=t.indexOf(e);return n===-1?void 0:t[n+1]};var qr="netlify_interactions";var Ds="request_project_setup",xz="--questions-file",Fy="netlify_connections",By="request_service_authorization";var kz="--runner-id",wz="--session-id";var Sz="--setup-file",Jy=(e,t)=>`mcp__${e}__${t}`,Ky=(e,t)=>`mcp_${e}_${t}`,Gy=(e,t)=>`${e}_${t}`,SJ=Jy(qr,"ask"),IJ=Ky(qr,"ask"),zJ=Gy(qr,"ask"),PJ=Jy(Fy,By),TJ=Ky(Fy,By),OJ=Gy(Fy,By),EJ=Jy(qr,Ds),NJ=Ky(qr,Ds),jJ=Gy(qr,Ds);var pU=["production","deploy-preview","branch-deploy","dev"],mU=["exist","change"],hU=(e,t)=>$e.array($e.object({name:e,required:$e.boolean().default(!0).describe("Set false only if the task is genuinely complete without it.")})).min(1).describe(t),gU=$e.string().min(1).describe("One sentence, shown to the user next to the field: what you are building and why it needs this."),vU=$e.object({kind:$e.literal("env_var"),reason:gU,key:$e.string().min(1).regex(/^[A-Za-z_][A-Za-z0-9_]*$/).describe("The variable name exactly as the code reads it, e.g. STRIPE_SECRET_KEY."),secret:$e.boolean().default(!0).describe("True for anything that must not be shown again once set: API keys, tokens, passwords."),mode:$e.enum(mU).default("exist").describe('"exist" when the key just needs a value: the user is asked only when nothing is set. "change" when a value is set but must be replaced, because it is revoked, expired, rotated, or wrong for this task. Only "change" asks the user to replace a value that is already there.'),targets:hU($e.enum(pU),"The deploy contexts the task actually needs this in. Do not list contexts the task does not touch.")}),yU=$e.discriminatedUnion("kind",[vU]),Hy={items:$e.array(yU).min(1).max(10).describe("Everything this project is missing for the task. Send them in one call, not one call per item")},RJ=$e.object(Hy);var Iz='Ask the user to configure something this project needs. Environment variables only, for now. Check what is already configured first with the `netlify` CLI, then raise only what is genuinely missing or wrong: `mode: "exist"` when any configured value will do, `mode: "change"` when a value is set but is wrong for this task. If nothing needs setting, nothing is asked of the user and nothing is configured: this returns straight away and you continue on the values already there. If something does, your run pauses while the user supplies it and then resumes automatically, so do not design around the gap or leave the work unfinished. Never end a run by telling the user to go and set something up themselves: raise it here instead, while the run can still act on it. Do NOT use this for values you can derive, generate, or read from the repo, or for a variable the code does not read. For a service that is not connected, use `request_service_authorization`.',zz=e=>`Nothing was asked of the user and nothing changed: ${e.items.map(({key:n})=>`\`${n}\``).join(", ")} already had a value in every context you asked about, and this run is continuing on those existing values. Do not tell the user you requested anything, or that any of it is now set or configured. If an existing value is the one that
|
|
82
|
+
`),Zy):GC(e,n)},YC=(e=XC())=>({inc(t,n=1,i={}){e(Os(t,n,"c",Es(i)))},gauge(t,n,i={}){e(Os(t,n,"g",Es(i)))},histogram(t,n,i={}){e(Os(t,n,"h",Es(i)))},timing(t,n,i={}){e(Os(t,n,"ms",Es(i)))},distribution(t,n,i={}){e(Os(t,n,"d",Es(i)))}}),Ns=YC();import{spawn as UB}from"child_process";import{existsSync as MB,mkdirSync as LB,writeFileSync as VB}from"fs";import{connect as FB}from"net";import QC from"path";import KB from"process";var HB=pf("step-preview"),WB=QC.join("apps","netlify-react-ui","public","agent-run-preview.json"),eU=9001,tU="components-agentrunners-rendersteps--live",XB=`http://localhost:${eU}/?path=/story/${tU}`;var mf=class extends Error{constructor(n,i,r){super(n);this.statusCode=i;this.userMessage=r;this.name="CreditLimitExceededError"}},hf=class extends Error{constructor(n,i,r){super(n);this.statusCode=i;this.userMessage=r;this.name="ApiResourceNotFoundError"}},js=class extends Error{constructor(n,i){super(n);this.statusCode=i;this.name="ApiRequestError"}};var gf=wn.env.NETLIFY_API_URL,My=wn.env.NETLIFY_API_TOKEN,lo=pf("api"),rU=()=>wn.env.NETLIFY_LOCAL_MODE==="true",nU=new Set(["agent_runners","sessions","sites","accounts","branch","dev_servers"]),iU=new Set(["api","v1","agent_runners","sessions","sites","accounts","classify","diff","result","upload_urls","native_session","upload","update_usage","connections","tokens","ai-gateway","providers","agent-runners","token","database","branch","dev_servers","config","setup_requests"]),oU=e=>e.split("/").map((t,n,i)=>t===""?t:nU.has(i[n-1])?":id":iU.has(t)?t:":id").join("/"),aU=async(e,t={})=>{if(!gf||!My)throw new Error("No API URL or token");let n=new URL(e,gf),i={...t,headers:{...t.headers,Authorization:`Bearer ${My}`}};wn.env.AGENT_RUNNERS_DEBUG==="true"&&(i.headers["x-nf-debug-logging"]="true"),t.json&&(i.headers||={},i.headers["Content-Type"]="application/json",i.body=JSON.stringify(t.json));let r=t.method??"GET",o=oU(n.pathname),a=Date.now(),s;try{s=await fetch(n,i)}catch(d){throw lo.error(zs({event:"api.request",method:r,path:n.pathname,resource:o,outcome:"network_error",error:d.message,duration_ms:Date.now()-a})),Ns.inc("api.request",1,{method:r,resource:o}),Ns.inc("api.request_failed",1,{status:"network_error",method:r,resource:o}),d}let c=s.ok&&s.status<=299;wn.env.AGENT_RUNNERS_DEBUG==="true"&&(lo.log(`Response headers for ${n}:`),s.headers.forEach((d,f)=>{lo.log(` ${f}: ${d}`)}));let u=zs({event:"api.request",method:r,path:n.pathname,resource:o,status:s.status,request_id:s.headers.get("x-request-id")||s.headers.get("x-nf-request-id"),duration_ms:Date.now()-a});if(Ns.inc("api.request",1,{method:r,resource:o}),c?lo.log(u):(lo.error(u),Ns.inc("api.request_failed",1,{status:s.status,method:r,resource:o})),t.raw){if(!c)throw new js(`API request failed: ${s.status} ${s.statusText}`,s.status);return s}let l=await(s.headers.get("content-type")?.includes("application/json")?s.json():s.text());if(!c){let d=typeof l=="string"?l:JSON.stringify(l);throw s.status===404?new hf(`API request failed: 404 - ${d}`,404,"The site associated with this agent run no longer exists."):s.status===503&&t.gracefulOn503&&d.toLowerCase().includes("usage exceeded")?new mf(`API request failed: 503 - ${d}`,503,"Credit limit reached. Please add more credits to continue using Agent Runners."):new js(`API request failed: ${s.status} - ${d}`,s.status)}return l},gz=e=>{lo.log("Setting details for api",{apiUrl:e?.constants?.NETLIFY_API_HOST,token:!!e?.constants?.NETLIFY_API_TOKEN}),wn.env.NETLIFY_AGENT_RUNNER_API_URL_OVERRIDE?gf=wn.env.NETLIFY_AGENT_RUNNER_API_URL_OVERRIDE:e?.constants?.NETLIFY_API_HOST&&(gf=`https://${e.constants.NETLIFY_API_HOST}`),e?.constants?.NETLIFY_API_TOKEN&&(My=e.constants.NETLIFY_API_TOKEN)};var sU=(e,t)=>rU()?{}:{"X-Nf-Agent-Runner-Id":e,"X-Nf-Agent-Runner-Session-Id":t};var vz=(e,t,n,i)=>aU(`/api/v1/sites/${e}/setup_requests`,{method:"POST",json:t,headers:sU(n,i)});var _z='Ask the user clarifying questions, preferably one to three, and pause until they answer. Use this instead of guessing when a decision materially changes the work. A question either offers two or three predefined options (one answer, or several with multiSelect) or omits options entirely so the user answers in their own words. The UI adds an "Other" choice and a free-text field for extra context to every question that has options, so an answer can name a choice you never offered or carry context beyond the label the user picked. The process pauses as soon as you call it; do not call it more than once or continue working after calling it.',cU=e=>{if(e!==null){if(!Array.isArray(e))return e;if(!(e.length<2))return e.map(t=>typeof t=="string"?{label:t}:t)}},yz=e=>e.meta({maxItems:3}),uU=e=>{if(typeof e!="string")return e;try{return JSON.parse(e)}catch{return e}},lU=e=>e.nonoptional(),Ly={questions:lU($e.preprocess(uU,yz($e.array($e.object({question:$e.string().describe("The question as the user reads it"),multiSelect:$e.boolean().optional().describe("True when several options can apply at once. Leave off for mutually exclusive choices."),options:$e.preprocess(cU,yz($e.array($e.object({label:$e.string(),description:$e.string().optional()})).min(2).optional())).describe('Two or three predefined answers. Omit entirely to ask an open question the user answers in their own words. The UI adds its own "Other" choice and a free-text field for extra context, so never add an option like "Other" or "None of these" yourself.')})).min(1)))).describe("One to three questions preferred, all asked in a single call")},$J=$e.object(Ly);import{renameSync as dU,writeFileSync as fU}from"fs";import vf from"process";var Vy=(e,t)=>{let n=`${e}.partial`;fU(n,JSON.stringify(t)),dU(n,e)},qy=()=>new Promise(()=>{}),$z=()=>{let e=()=>vf.exit(0);vf.stdin.on("close",e),vf.stdin.on("end",e)},bz=()=>{console.log=console.error,console.info=console.error,console.debug=console.error},As=(e,t=vf.argv)=>{let n=t.indexOf(e);return n===-1?void 0:t[n+1]};var qr="netlify_interactions";var Ds="request_project_setup",xz="--questions-file",Fy="netlify_connections",By="request_service_authorization";var kz="--runner-id",wz="--session-id";var Sz="--setup-file",Jy=(e,t)=>`mcp__${e}__${t}`,Ky=(e,t)=>`mcp_${e}_${t}`,Gy=(e,t)=>`${e}_${t}`,SJ=Jy(qr,"ask"),IJ=Ky(qr,"ask"),zJ=Gy(qr,"ask"),PJ=Jy(Fy,By),TJ=Ky(Fy,By),OJ=Gy(Fy,By),EJ=Jy(qr,Ds),NJ=Ky(qr,Ds),jJ=Gy(qr,Ds);var pU=["production","deploy-preview","branch-deploy","dev"],mU=["exist","change"],hU=(e,t)=>$e.array($e.object({name:e,required:$e.boolean().default(!0).describe("Set false only if the task is genuinely complete without it.")})).min(1).describe(t),gU=$e.string().min(1).describe("One sentence, shown to the user next to the field: what you are building and why it needs this."),vU=$e.object({kind:$e.literal("env_var"),reason:gU,key:$e.string().min(1).regex(/^[A-Za-z_][A-Za-z0-9_]*$/).describe("The variable name exactly as the code reads it, e.g. STRIPE_SECRET_KEY."),secret:$e.boolean().default(!0).describe("True for anything that must not be shown again once set: API keys, tokens, passwords."),mode:$e.enum(mU).default("exist").describe('"exist" when the key just needs a value: the user is asked only when nothing is set. "change" when a value is set but must be replaced, because it is revoked, expired, rotated, or wrong for this task. Only "change" asks the user to replace a value that is already there.'),targets:hU($e.enum(pU),"The deploy contexts the task actually needs this in. Do not list contexts the task does not touch.")}),yU=$e.discriminatedUnion("kind",[vU]),Hy={items:$e.array(yU).min(1).max(10).describe("Everything this project is missing for the task. Send them in one call, not one call per item")},RJ=$e.object(Hy);var Iz='Ask the user to configure something this project needs. Environment variables only, for now. Check what is already configured first with the `netlify` CLI, then raise only what is genuinely missing or wrong: `mode: "exist"` when any configured value will do, `mode: "change"` when a value is set but is wrong for this task. If nothing needs setting, nothing is asked of the user and nothing is configured: this returns straight away and you continue on the values already there. If something does, your run pauses while the user supplies it and then resumes automatically, so do not design around the gap or leave the work unfinished. Never end a run by telling the user to go and set something up themselves: raise it here instead, while the run can still act on it. Do NOT use this for values you can derive, generate, or read from the repo, or for a variable the code does not read. For a service that is not connected, use `request_service_authorization`.',zz=e=>`Nothing was asked of the user and nothing changed: ${e.items.map(({key:n})=>`\`${n}\``).join(", ")} already had a value in every context you asked about, and this run is continuing on those existing values. Do not tell the user you requested anything, or that any of it is now set or configured. If they told you a value was missing, say plainly that it is still set, because they are working from something that is not true of this project. If an existing value is the one that needs replacing, raise it again with mode: "change", which is satisfied only once they replace it.`,_U=e=>{if(!e.some(n=>n.name==="production"&&n.required))return e;let t=e.find(n=>n.name==="deploy-preview");return t?e.map(n=>n===t?{...n,required:!0}:n):[...e,{name:"deploy-preview",required:!0}]},Pz=(e,{interactionRefId:t,runnerId:n,sessionId:i})=>({requester_kind:"agent_run",agent_runner_id:n,agent_runner_session_id:i,interaction_ref_id:t,items:e.items.map(({kind:r,reason:o,key:a,secret:s,mode:c,targets:u})=>({kind:r,reason:o,config:{key:a,secret:s,mode:c},targets:_U(u.map(({name:l,required:d})=>({name:l,required:d})))}))});var Wy=new lf({name:qr,version:"1.0.0"}),Tz=As(xz),Oz=As(Sz),Ez=As(kz),Nz=As(wz),jz=fo.env.NETLIFY_SITE_ID||fo.env.SITE_ID,xU=(e,t)=>{fo.stderr.write(`[interactions-mcp] ${e}${t?` ${JSON.stringify(t)}`:""}
|
|
83
83
|
`)};bz();gz({constants:{NETLIFY_API_HOST:fo.env.NETLIFY_API_HOST||"api.netlify.com",NETLIFY_API_TOKEN:fo.env.NETLIFY_AUTH_TOKEN||fo.env.NETLIFY_API_TOKEN}});Wy.registerTool("ask",{description:_z,inputSchema:Ly},e=>(Tz&&Vy(Tz,e),qy()));var yf=(e,t=!1)=>({content:[{type:"text",text:e}],...t?{isError:!0}:{}});Oz&&Wy.registerTool(Ds,{description:Iz,inputSchema:Hy},async e=>{if(!jz)return yf("No project id available, so this project cannot be checked.",!0);let t=bU(),n;try{n=await vz(jz,Pz(e,{interactionRefId:t,runnerId:Ez,sessionId:Nz}),Ez,Nz)}catch(r){return yf(`Could not raise the setup request: ${r?.message}`,!0)}if(xU("setup request created",{id:n?.id,satisfied:n?.satisfied,items:e.items.length}),n?.satisfied)return yf(zz(e));let i=String(n?.id??"");return i?(Vy(Oz,{refId:t,setupRequestId:i}),qy()):yf("Could not raise the setup request: the API returned no request id.",!0)});$z();await Wy.connect(new ff);
|
|
84
84
|
//# sourceMappingURL=interactions-mcp-server.js.map
|
package/package.json
CHANGED