@netlify/agent-runner-cli 1.154.0-xhigh.0 → 1.154.0-xhigh.1

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
@@ -53,7 +53,7 @@ Keep your response short. Write the docs and stop.
53
53
  ${s}
54
54
  </extracted_error_chunk>`).join(`
55
55
 
56
- `);return o.length>t.length*.8?t:o}import{promises as ZX}from"fs";import El from"path";var gOe=/@anthropic-ai\/sdk|['"`]openai['"`]|@google\/genai|new\s+Anthropic\b|new\s+OpenAI\b|GoogleGenAI|ANTHROPIC_API_KEY|OPENAI_API_KEY|GEMINI_API_KEY/,_Oe=/satisfies\s+NetlifyFunction\b|export\s+default\s*\{/,yOe=/export\s+default\b/,SOe=/\bexports\.handler\b|\bmodule\.exports\.handler\b|\bmodule\.exports\s*=|export\s+(async\s+)?(const\s+handler\b|function\s+handler\b)/,EOe=new Set([".js",".ts",".mjs",".mts",".cjs",".cts"]);function vOe(t){return _Oe.test(t)?"v3":yOe.test(t)?"v2":SOe.test(t)?"v1":"unknown"}async function DD(t,e=process.env.FUNCTIONS_DIST||"netlify/functions"){let r={aiTotal:0,v1:0,v2:0,v3:0,unknown:0,v1Files:[]},n=El.isAbsolute(e)?e:El.join(t,e),i;try{i=await ZX.readdir(n,{withFileTypes:!0})}catch{return r}for(let o of i){if(!o.isFile()||!EOe.has(El.extname(o.name))||o.name.endsWith(".d.ts"))continue;let s;try{s=await ZX.readFile(El.join(n,o.name),"utf8")}catch{continue}if(!gOe.test(s))continue;r.aiTotal++;let a=vOe(s);r[a]++,a==="v1"&&r.v1Files.push(El.relative(t,El.join(n,o.name)).split(El.sep).join("/"))}return r}var JX=(t,e)=>{let r=t.usage,n=r?.output_tokens??0,i=r?.reasoning_output_tokens??0,o=t.costUsd!=null&&t.costUsd>0?t.costUsd:void 0,s=o==null&&e!=null?e/180:void 0,a=o??s;return{...t.resolvedModel?{"netlify.ai.run.model":t.resolvedModel}:{},"netlify.ai.run.outcome":t.error?"error":"completed","netlify.ai.run.step_count":t.steps?.length??0,...t.toolCallCount!=null?{"netlify.ai.run.tool_call_count":t.toolCallCount}:{},...t.toolErrorCount!=null?{"netlify.ai.run.tool_error_count":t.toolErrorCount}:{},...r?.input_tokens!=null?{"netlify.ai.run.tokens.input.total":r.input_tokens}:{},...r?.output_tokens!=null?{"netlify.ai.run.tokens.output.total":r.output_tokens}:{},...r?.reasoning_output_tokens!=null?{"netlify.ai.run.tokens.reasoning.total":r.reasoning_output_tokens}:{},...a!=null?{"netlify.ai.run.cost_usd.total":a,"netlify.ai.run.cost.source":o!=null?"provider":"credits-derived"}:{},...e!=null?{"netlify.ai.run.credits_cost":e}:{},...n>0?{"netlify.ai.run.reasoning_ratio":i/n}:{}}};import{createReadStream as OOe}from"fs";import{request as NOe}from"http";import{request as kOe}from"https";import{pipeline as MOe}from"stream/promises";import f_ from"process";import{AsyncLocalStorage as TOe}from"async_hooks";import bOe from"dgram";import Qd from"process";var AOe="buildbot.agent_runner.",xOe=8125,wOe=t=>{let e=Object.keys(t);return e.length===0?"":"|#"+e.map(r=>`${r}:${t[r]}`).join(",")},l_=(t,e,r,n={})=>`${AOe}${t}:${e}|${r}${wOe(n)}`,ROe={service:"buildbot"},QX={},LD=new TOe,$D=t=>{QX={...t}},mA=(t,e)=>{let r=LD.getStore()??{};return LD.run({...r,...t},e)},u_=t=>({...QX,...LD.getStore()??{},...t,...ROe}),IOe=(t,e)=>{let r=!1,n=bOe.createSocket("udp4");return n.unref(),n.once("error",i=>{if(!r){let o=i.code??i.message;Qd.stderr.write(`[metrics] UDP error: ${o}
56
+ `);return o.length>t.length*.8?t:o}import{promises as ZX}from"fs";import El from"path";var gOe=/@anthropic-ai\/sdk|['"`]openai['"`]|@google\/genai|new\s+Anthropic\b|new\s+OpenAI\b|GoogleGenAI|ANTHROPIC_API_KEY|OPENAI_API_KEY|GEMINI_API_KEY/,_Oe=/satisfies\s+NetlifyFunction\b|export\s+default\s*\{/,yOe=/export\s+default\b/,SOe=/\bexports\.handler\b|\bmodule\.exports\.handler\b|\bmodule\.exports\s*=|export\s+(async\s+)?(const\s+handler\b|function\s+handler\b)/,EOe=new Set([".js",".ts",".mjs",".mts",".cjs",".cts"]);function vOe(t){return _Oe.test(t)?"v3":yOe.test(t)?"v2":SOe.test(t)?"v1":"unknown"}async function DD(t,e=process.env.FUNCTIONS_DIST||"netlify/functions"){let r={aiTotal:0,v1:0,v2:0,v3:0,unknown:0,v1Files:[]},n=El.isAbsolute(e)?e:El.join(t,e),i;try{i=await ZX.readdir(n,{withFileTypes:!0})}catch{return r}for(let o of i){if(!o.isFile()||!EOe.has(El.extname(o.name))||o.name.endsWith(".d.ts"))continue;let s;try{s=await ZX.readFile(El.join(n,o.name),"utf8")}catch{continue}if(!gOe.test(s))continue;r.aiTotal++;let a=vOe(s);r[a]++,a==="v1"&&r.v1Files.push(El.relative(t,El.join(n,o.name)).split(El.sep).join("/"))}return r}var JX=(t,e)=>{let r=t.usage,n=r?.output_tokens??0,i=r?.reasoning_output_tokens??0,o=t.costUsd!=null&&t.costUsd>0?t.costUsd:void 0,s=o==null&&e!=null?e/180:void 0,a=o??s;return{...t.resolvedModel?{"netlify.ai.run.model":t.resolvedModel}:{},"netlify.ai.run.effort":t.effort??"auto",...t.providerEffort&&t.providerEffort!==t.effort?{"netlify.ai.run.effort.sent":t.providerEffort}:{},"netlify.ai.run.outcome":t.error?"error":"completed","netlify.ai.run.step_count":t.steps?.length??0,...t.toolCallCount!=null?{"netlify.ai.run.tool_call_count":t.toolCallCount}:{},...t.toolErrorCount!=null?{"netlify.ai.run.tool_error_count":t.toolErrorCount}:{},...r?.input_tokens!=null?{"netlify.ai.run.tokens.input.total":r.input_tokens}:{},...r?.output_tokens!=null?{"netlify.ai.run.tokens.output.total":r.output_tokens}:{},...r?.reasoning_output_tokens!=null?{"netlify.ai.run.tokens.reasoning.total":r.reasoning_output_tokens}:{},...a!=null?{"netlify.ai.run.cost_usd.total":a,"netlify.ai.run.cost.source":o!=null?"provider":"credits-derived"}:{},...e!=null?{"netlify.ai.run.credits_cost":e}:{},...n>0?{"netlify.ai.run.reasoning_ratio":i/n}:{}}};import{createReadStream as OOe}from"fs";import{request as NOe}from"http";import{request as kOe}from"https";import{pipeline as MOe}from"stream/promises";import f_ from"process";import{AsyncLocalStorage as TOe}from"async_hooks";import bOe from"dgram";import Qd from"process";var AOe="buildbot.agent_runner.",xOe=8125,wOe=t=>{let e=Object.keys(t);return e.length===0?"":"|#"+e.map(r=>`${r}:${t[r]}`).join(",")},l_=(t,e,r,n={})=>`${AOe}${t}:${e}|${r}${wOe(n)}`,ROe={service:"buildbot"},QX={},LD=new TOe,$D=t=>{QX={...t}},mA=(t,e)=>{let r=LD.getStore()??{};return LD.run({...r,...t},e)},u_=t=>({...QX,...LD.getStore()??{},...t,...ROe}),IOe=(t,e)=>{let r=!1,n=bOe.createSocket("udp4");return n.unref(),n.once("error",i=>{if(!r){let o=i.code??i.message;Qd.stderr.write(`[metrics] UDP error: ${o}
57
57
  `),r=!0}}),i=>{r||n.send(i,e,t,o=>{if(o&&!r){let s=o.code??o.message;Qd.stderr.write(`[metrics] UDP send to ${t}:${e} failed: ${s}
58
58
  `),r=!0}})}},XX=()=>{},eQ=()=>({enabled:!!Qd.env.HOST_NODE_IP}),COe=()=>{let t=Qd.env.HOST_NODE_IP;if(!t)return XX;let e=Qd.env.DD_AGENT_PORT,r=e===void 0?xOe:Number(e);return!Number.isInteger(r)||r<=0||r>65535?(Qd.stderr.write(`[metrics] DD_AGENT_PORT="${e}" is not a valid port; metrics disabled
59
59
  `),XX):IOe(t,r)},POe=(t=COe())=>({inc(e,r=1,n={}){t(l_(e,r,"c",u_(n)))},gauge(e,r,n={}){t(l_(e,r,"g",u_(n)))},histogram(e,r,n={}){t(l_(e,r,"h",u_(n)))},timing(e,r,n={}){t(l_(e,r,"ms",u_(n)))},distribution(e,r,n={}){t(l_(e,r,"d",u_(n)))}}),ue=POe(),UD=({previewDeployed:t,hadFailedAttempts:e})=>{ue.inc("deploy.final_outcome",1,{outcome:t?e?"recovered":"success":"no_preview"})},Ra=(t,e={})=>{let r=t.input_tokens??0,n=t.output_tokens??0,i=t.reasoning_output_tokens??0,o=t.cache_creation_input_tokens??0,s=t.cache_read_input_tokens??0;ue.distribution("inference.tokens",r,{...e,kind:"input"}),ue.distribution("inference.tokens",n,{...e,kind:"output"}),ue.distribution("inference.tokens",i,{...e,kind:"reasoning"});let a=t.total_tokens??r+n+i+o+s;ue.distribution("inference.tokens.total",a,e)};var Ti=class extends Error{constructor(r,n,i,o=!1){super(r);this.statusCode=n;this.userMessage=i;this.isCreditLimitExceeded=o;this.name="GracefulShutdownError"}},cs=t=>t instanceof Ti;var ef=class extends Error{constructor(e){super(e),this.name="ProviderError"}};var so=class extends Error{constructor(r,n,i){super(r);this.kind=n;this.status=i;this.name="AssetDownloadError"}},Ia=t=>t instanceof so;var d_=t=>4*Math.ceil(t/3);var gA=f_.env.NETLIFY_API_URL,_A=f_.env.NETLIFY_API_TOKEN,Nt=pe("api"),ls=()=>f_.env.NETLIFY_LOCAL_MODE==="true",kr=async(t,e={})=>{if(!gA||!_A)throw new Error("No API URL or token");let r=new URL(t,gA),n={...e,headers:{...e.headers,Authorization:`Bearer ${_A}`}};f_.env.AGENT_RUNNERS_DEBUG==="true"&&(n.headers["x-nf-debug-logging"]="true"),e.json&&(n.headers||={},n.headers["Content-Type"]="application/json",n.body=JSON.stringify(e.json));let i=await fetch(r,n),o=i.ok&&i.status<=299,s=e.expectStatuses?.includes(i.status)??!1;if(f_.env.AGENT_RUNNERS_DEBUG==="true")Nt.log(`Response headers for ${r}:`),i.headers.forEach((c,l)=>{Nt.log(` ${l}: ${c}`)});else{let c=i.headers.get("x-request-id")||i.headers.get("x-nf-request-id");Nt.log(`Request ID for ${r}: ${c||"N/A"}`)}if(!o&&!s&&(Nt.error(`Got status ${i.status} for request ${r}`),ue.inc("api.request_failed",1,{status:i.status})),e.raw){if(!o)throw new Error(`API request failed: ${i.status} ${i.statusText}`);return i}let a=await(i.headers.get("content-type")?.includes("application/json")?i.json():i.text());if(!o){let c=typeof a=="string"?a:JSON.stringify(a);throw i.status===404?new Ti(`API request failed: 404 - ${c}`,404,"The site associated with this agent run no longer exists."):i.status===503&&e.gracefulOn503&&c.toLowerCase().includes("usage exceeded")?new Ti(`API request failed: 503 - ${c}`,503,"Credit limit reached. Please add more credits to continue using Agent Runners.",!0):new Error(`API request failed: ${i.status} - ${c}`)}return a},tQ=t=>{Nt.log("Setting details for api",{apiUrl:t?.constants?.NETLIFY_API_HOST,token:!!t?.constants?.NETLIFY_API_TOKEN}),t?.constants?.NETLIFY_API_HOST&&(gA=`https://${t.constants.NETLIFY_API_HOST}`),t?.constants?.NETLIFY_API_TOKEN&&(_A=t.constants.NETLIFY_API_TOKEN)},rQ=()=>({apiUrl:gA,token:_A}),yA=async(t,e)=>ls()?(Nt.log("Mock API: updateRunner called",{runnerId:t,data:e}),{id:t,...e}):kr(`/api/v1/agent_runners/${t}`,{method:"PUT",json:e}),yr=async(t,e,r)=>ls()?(Nt.log("Mock API: updateRunnerSession called",JSON.stringify({runnerId:t,sessionId:e,data:r},null,2)),{id:t,sessionId:e,...r}):kr(`/api/v1/agent_runners/${t}/sessions/${e}`,{method:"PUT",json:r});var nQ=async t=>ls()?(Nt.log("Mock API: getSite called",{siteId:t}),{id:t,published_deploy:{id:"id"}}):kr(`/api/v1/sites/${t}`),SA=async(t,e)=>ls()?(Nt.log("Mock API: getRunnerSession called",{runnerId:t,sessionId:e}),{id:e,runnerId:t,state:"running"}):kr(`/api/v1/agent_runners/${t}/sessions/${e}`),iQ=(t,e,r)=>kr(`/api/v1/accounts/${t}/ai-gateway/token`,{headers:{"X-Nf-Agent-Runner-Id":e,"X-Nf-Agent-Runner-Session-Id":r},gracefulOn503:!0}),oQ=(t,e,r)=>kr(`/api/v1/sites/${t}/ai-gateway/token`,{headers:{"X-Nf-Agent-Runner-Id":e,"X-Nf-Agent-Runner-Session-Id":r},gracefulOn503:!0}),sQ=async(t,e)=>ls()?(Nt.log("Mock API: getDiffUploadUrls called",{runnerId:t,sessionId:e}),{result:{upload_url:"https://s3.mock.com/mock-upload-url-result",s3_key:"mock-s3-key-result"},cumulative:{upload_url:"https://s3.mock.com/mock-upload-url-cumulative",s3_key:"mock-s3-key-cumulative"}}):kr(`/api/v1/agent_runners/${t}/sessions/${e}/diff/upload_urls`,{method:"POST"}),aQ=async(t,e)=>ls()?(Nt.log("Mock API: getNativeSessionUploadUrl called",{runnerId:t,sessionId:e}),{upload_url:"https://s3.mock.com/mock-upload-url-native-session",s3_key:"mock-s3-key-native-session"}):kr(`/api/v1/agent_runners/${t}/sessions/${e}/native_session/upload`,{method:"POST"}),cQ=async(t,e)=>{if(ls())return Nt.log("Mock API: getNativeSessionDownloadUrl called",{runnerId:t,sessionId:e}),{download_url:"https://s3.mock.com/mock-download-url-native-session"};try{return await kr(`/api/v1/agent_runners/${t}/sessions/${e}/native_session`)}catch(r){if(r instanceof Ti&&r.statusCode===404)return Nt.log("No native session available to download (404), falling back"),null;throw r}},lQ=async(t,e)=>ls()?(Nt.log("Mock API: updateSessionUsage called",{runnerId:t,sessionId:e}),{id:e,runnerId:t,usage:0}):kr(`/api/v1/agent_runners/${t}/sessions/${e}/update_usage`,{method:"POST"}),FD="netlifydb_readonly",uQ=async t=>(await kr(`/api/v1/sites/${t}/database?role=${FD}`,{raw:!0})).json(),dQ=async t=>{if(ls())return Nt.log("Mock API: siteHasDatabase called",{siteId:t}),!1;try{return await kr(`/api/v1/sites/${t}/database?role=${FD}`,{raw:!0,expectStatuses:[404]}),!0}catch(e){if(e?.message?.includes("404"))return!1;Nt.warn("siteHasDatabase check inconclusive",{siteId:t,error:e?.message});return}},fQ=async(t,e)=>(await kr(`/api/v1/sites/${t}/database/branch/${encodeURIComponent(e)}?role=${FD}`,{raw:!0})).json(),pQ=async t=>kr(`/api/v1/sites/${t}/database`,{method:"POST",json:{}}),hQ=async(t,e)=>kr(`/api/v1/sites/${t}/database/branch`,{method:"POST",json:{branch_id:e}}),DOe=1e4,mQ=async t=>{Nt.log(`Downloading from S3: ${new URL(t).host}`);let e=await fetch(t,{method:"GET",signal:AbortSignal.timeout(DOe)});if(!e.ok)throw new Error(`S3 download failed with status ${e.status}`);return Buffer.from(await e.arrayBuffer())},gQ=async(t,e,{maxRetries:r=3,baseDelayMs:n=500,contentType:i="text/plain"}={})=>{Nt.log(`Uploading to S3: ${new URL(t).host}`);for(let o=1;o<=r;o++)try{let s=await fetch(t,{method:"PUT",body:e,headers:{"Content-Type":i}});if(!s.ok)throw new Error(`S3 upload failed with status ${s.status}`);return s}catch(s){if(o===r)throw s;let a=n*2**(o-1);Nt.warn(`S3 upload attempt ${o}/${r} failed: ${s.message}. Retrying in ${a}ms...`),await new Promise(c=>setTimeout(c,a))}},LOe=6e4,$Oe=(t,e,{contentLength:r,contentType:n,base64:i,timeoutMs:o})=>new Promise((s,a)=>{let c=new URL(t),u=(c.protocol==="http:"?NOe:kOe)(c,{method:"PUT",headers:{"Content-Type":n,"Content-Length":r}});u.setTimeout(o,()=>{u.destroy(new Error(`S3 upload timed out after ${o}ms with no socket activity`))}),u.on("error",a),u.on("response",f=>{f.resume(),f.statusCode>=200&&f.statusCode<=299?s(f.statusCode):a(new Error(`S3 upload failed with status ${f.statusCode}`))});let d=OOe(e,i?{encoding:"base64"}:void 0);MOe(d,u).catch(a)}),BD=async(t,e,{size:r,base64:n=!1,maxRetries:i=3,baseDelayMs:o=500,contentType:s="text/plain",timeoutMs:a=LOe})=>{Nt.log(`Uploading file to S3: ${new URL(t).host}`);let c=n?d_(r):r;for(let l=1;l<=i;l++)try{return await $Oe(t,e,{contentLength:c,contentType:s,base64:n,timeoutMs:a})}catch(u){if(l===i)throw u;let d=o*2**(l-1);Nt.warn(`S3 upload attempt ${l}/${i} failed: ${u.message}. Retrying in ${d}ms...`),await new Promise(f=>setTimeout(f,d))}};var UOe=pe("storage_outcome"),_Q=async({config:t,hasDb:e,pipelineSpan:r,resolvedModel:n,cliVersion:i})=>{let o=r?.spanContext();await yr(t.id,t.sessionId,{metadata:{storage_outcome:{...typeof e=="boolean"?{has_db:e}:{},...o?{trace_id:o.traceId,span_id:o.spanId}:{},provider:t.runner,model:n??t.model??"unknown",cli_version:i}}}).catch(s=>UOe.warn("Failed to persist storage_outcome",{error:s?.message}))};import I4e from"fs/promises";import C4e from"path";import mS from"process";var vl=pe("ai_gateway"),jD=null;var p_=async()=>{if(jD)return jD;vl.log("Fetching available AI gateway providers");let t=await fetch(`${rQ().apiUrl}/api/v1/ai-gateway/providers`);if(!t.ok)throw new Error(`Failed to fetch AI gateway providers: ${t.statusText}`);let e=await t.json();return jD=e,vl.log("Cached AI gateway providers",{providerCount:Object.keys(e.providers).length}),e},FOe=async(t,e)=>{let n=(await p_()).providers[t];if(!n)return vl.log(`Provider '${t}' not found`),!1;let i=n.models.includes(e);return vl.log(`Model validation for ${t}/${e}`,{isAvailable:i}),i},BOe=async t=>{let e=await p_(),r=Object.values(e.providers).some(n=>n.models.includes(t));return vl.log(`Model validation across all providers for ${t}`,{isAvailable:r}),r},yQ=async({config:t})=>{let e,r,n,i,o=!t.site?.published_deploy;if(!(o?t.accountId:t.siteId))throw new Error(`No entity id for ${o?"account":"site"}`);let a=async()=>{clearTimeout(n),vl.log("Requesting AI gateway information");let l=await(o?iQ(t.accountId,t.id,t.sessionId):oQ(t.siteId,t.id,t.sessionId));if({token:e,url:i}=l,r=l.expires_at?l.expires_at*1e3:void 0,process.env.NETLIFY_AI_GATEWAY_KEY=e,process.env.NETLIFY_AI_GATEWAY_BASE_URL=i,vl.log("Got AI gateway information",{token:!!e,expiresAt:r,url:i}),r){let u=r-Date.now()-6e4;u>0&&(n=setTimeout(()=>{a()},u))}};return await Promise.all([a(),p_()]),{get url(){return i},get token(){return e},isModelAvailableForProvider:FOe,isModelAvailable:BOe}};import jOe from"crypto";import{createWriteStream as zOe}from"fs";import m_ from"fs/promises";import g_ from"path";import GOe from"process";import{Readable as VOe,Transform as qOe}from"stream";import{pipeline as HOe}from"stream/promises";async function EA(t,e){let{maxRetries:r,baseDelay:n,onRetry:i,shouldRetry:o}=e,s;for(let a=1;a<=r;a++)try{return await t()}catch(c){if(s=c,a===r||o&&!o(s))throw s;i&&i(a,s),await new Promise(l=>setTimeout(l,n*a))}throw s}var h_=pe("asset_fetch"),vA=100*1024*1024,WOe=6e4,SQ=6,YOe=3,KOe=300,ZOe=t=>{if(!Ia(t))return!1;switch(t.kind){case"network":case"timeout":case"http_5xx":return!0;case"http_4xx":return t.status===404;default:return!1}},JOe=t=>jOe.createHash("sha1").update(t).digest("hex").slice(0,8),XOe=t=>typeof t=="string"&&t.length>0&&t!=="."&&t!==".."&&t===g_.basename(t),QOe=async t=>{try{return await m_.stat(t),!0}catch{return!1}},eNe=t=>decodeURIComponent(new URL(t).pathname),zD=t=>g_.basename(t)||"attachment",tNe=(t,e)=>{let r=g_.extname(t);return`${t.slice(0,t.length-r.length)}-${JOe(e)}${r}`},rNe=t=>{let e=new Map;for(let r of t)e.set(zD(r),(e.get(zD(r))??0)+1);return t.map(r=>{let n=zD(r);return(e.get(n)??0)>1?tNe(n,r):n})},EQ=t=>{let e=t?.name;return e==="TimeoutError"||e==="AbortError"?"timeout":"network"},nNe=async(t,e)=>{let r;try{r=await fetch(t,{signal:AbortSignal.timeout(WOe)})}catch(a){throw new so(`Asset fetch failed: ${a?.message||a}`,EQ(a))}if(!r.ok)throw await r.body?.cancel(),new so(`Asset download failed: ${r.status} ${r.statusText}`,r.status>=500?"http_5xx":"http_4xx",r.status);let n=r.headers.get("content-length");if(n&&Number(n)>vA)throw new so(`Asset too large: ${n} bytes (max ${vA})`,"too_large");if(!r.body)throw new so("Asset download failed: missing response body","network");let i=`${e}.part`,o=0,s=new qOe({transform(a,c,l){if(o+=a.length,o>vA){l(new so(`Asset too large: exceeded ${vA} bytes`,"too_large"));return}l(null,a)}});try{await HOe(VOe.fromWeb(r.body),s,zOe(i))}catch(a){throw await m_.rm(i,{force:!0}),Ia(a)?a:new so(`Asset body read failed: ${a?.message||a}`,EQ(a))}try{await m_.rename(i,e)}catch(a){throw await m_.rm(i,{force:!0}),a}},iNe=async(t,e,r)=>{if(!XOe(t))return h_.warn(`Skipping attachments for unsafe session id: ${t}`),[];if(!Array.isArray(e)||e.length===0)return[];let n=g_.join(r,ur,vi,t);await m_.mkdir(n,{recursive:!0});let i=e.filter(s=>typeof s=="string"&&s.length>0),o=rNe(i.map(eNe));return i.map((s,a)=>({sessionId:t,url:s,dest:g_.join(n,o[a])}))},vQ=async({assetMap:t,cwd:e=GOe.cwd()})=>{let r=Object.entries(t??{});if(r.length===0)return;let n=(await Promise.all(r.map(([a,c])=>iNe(a,c,e)))).flat();if(n.length===0)return;let i={};for(let a of n)i[a.sessionId]=(i[a.sessionId]??0)+1;h_.info(`Reconciling ${n.length} attachment(s) across ${Object.keys(i).length} session(s)`);let o={},s=async a=>{if(await QOe(a.dest))return;let c=performance.now(),l=new URL(a.url).pathname;try{await EA(()=>nNe(a.url,a.dest),{maxRetries:YOe,baseDelay:KOe,shouldRetry:ZOe,onRetry:(u,d)=>{let f=Ia(d)?d.kind:"unknown";ue.inc("assets.fetch_retry",1,{kind:f}),h_.info(`Retrying asset download session=${a.sessionId} key=${l} kind=${f} attempt=${u}`)}})}catch(u){let d=Ia(u)?u.kind:"unknown",f=Ia(u)?u.status:void 0;throw h_.error(`Asset download failed session=${a.sessionId} key=${new URL(a.url).pathname} kind=${d} status=${f??"-"} elapsedMs=${Math.round(performance.now()-c)} message=${u?.message||u}`),u}o[a.sessionId]=(o[a.sessionId]??0)+1};for(let a=0;a<n.length;a+=SQ){let c=n.slice(a,a+SQ);await Promise.all(c.map(s))}for(let[a,c]of Object.entries(i)){let l=o[a]??0;h_.info(`Session ${a}: fetched ${l} attachment(s), ${c-l} already present`)}};import gs from"process";import ms from"path";import Cx from"fs";import{fileURLToPath as OUe}from"url";import{createRequire as NUe}from"module";function kt(t){if(typeof t!="object"||t===null)return!1;let e=Object.getPrototypeOf(t);return(e===null||e===Object.prototype||Object.getPrototypeOf(e)===null)&&!(Symbol.toStringTag in t)&&!(Symbol.iterator in t)}import{fileURLToPath as oNe}from"url";var tf=(t,e)=>{let r=VD(sNe(t));if(typeof r!="string")throw new TypeError(`${e} must be a string or a file URL: ${r}.`);return r},sNe=t=>GD(t)?t.toString():t,GD=t=>typeof t!="string"&&t&&Object.getPrototypeOf(t)===String.prototype,VD=t=>t instanceof URL?oNe(t):t;var TA=(t,e=[],r={})=>{let n=tf(t,"First argument"),[i,o]=kt(e)?[[],e]:[e,r];if(!Array.isArray(i))throw new TypeError(`Second argument must be either an array of arguments or an options object: ${i}`);if(i.some(c=>typeof c=="object"&&c!==null))throw new TypeError(`Second argument must be an array of strings: ${i}`);let s=i.map(String),a=s.find(c=>c.includes("\0"));if(a!==void 0)throw new TypeError(`Arguments cannot contain null bytes ("\\0"): ${a}`);if(!kt(o))throw new TypeError(`Last argument must be an options object: ${o}`);return[n,s,o]};import{ChildProcess as pNe}from"child_process";import{StringDecoder as aNe}from"string_decoder";var{toString:TQ}=Object.prototype,bQ=t=>TQ.call(t)==="[object ArrayBuffer]",zt=t=>TQ.call(t)==="[object Uint8Array]",us=t=>new Uint8Array(t.buffer,t.byteOffset,t.byteLength),cNe=new TextEncoder,AQ=t=>cNe.encode(t),lNe=new TextDecoder,bA=t=>lNe.decode(t),xQ=(t,e)=>uNe(t,e).join(""),uNe=(t,e)=>{if(e==="utf8"&&t.every(o=>typeof o=="string"))return t;let r=new aNe(e),n=t.map(o=>typeof o=="string"?AQ(o):o).map(o=>r.write(o)),i=r.end();return i===""?n:[...n,i]},__=t=>t.length===1&&zt(t[0])?t[0]:qD(dNe(t)),dNe=t=>t.map(e=>typeof e=="string"?AQ(e):e),qD=t=>{let e=new Uint8Array(fNe(t)),r=0;for(let n of t)e.set(n,r),r+=n.length;return e},fNe=t=>{let e=0;for(let r of t)e+=r.length;return e};var CQ=t=>Array.isArray(t)&&Array.isArray(t.raw),PQ=(t,e)=>{let r=[];for(let[o,s]of t.entries())r=hNe({templates:t,expressions:e,tokens:r,index:o,template:s});if(r.length===0)throw new TypeError("Template script must not be empty");let[n,...i]=r;return[n,i,{}]},hNe=({templates:t,expressions:e,tokens:r,index:n,template:i})=>{if(i===void 0)throw new TypeError(`Invalid backslash sequence: ${t.raw[n]}`);let{nextTokens:o,leadingWhitespaces:s,trailingWhitespaces:a}=mNe(i,t.raw[n]),c=RQ(r,o,s);if(n===e.length)return c;let l=e[n],u=Array.isArray(l)?l.map(d=>IQ(d)):[IQ(l)];return RQ(c,u,a)},mNe=(t,e)=>{if(e.length===0)return{nextTokens:[],leadingWhitespaces:!1,trailingWhitespaces:!1};let r=[],n=0,i=wQ.has(e[0]);for(let s=0,a=0;s<t.length;s+=1,a+=1){let c=e[a];if(wQ.has(c))n!==s&&r.push(t.slice(n,s)),n=s+1;else if(c==="\\"){let l=e[a+1];l===`
@@ -98,7 +98,7 @@ For example, you can use the \`pathToFileURL()\` method of the \`url\` core modu
98
98
  `,LF:`
99
99
  `,concatBytes:DL},zLe=(t,e)=>{let r=new Uint8Array(t.length+e.length);return r.set(t,0),r.set(e,t.length),r},GLe={windowsNewline:new Uint8Array([13,10]),unixNewline:new Uint8Array([10]),LF:10,concatBytes:zLe};import{Buffer as VLe}from"buffer";var Jte=(t,e)=>t?void 0:qLe.bind(void 0,e),qLe=function*(t,e){if(typeof e!="string"&&!zt(e)&&!VLe.isBuffer(e))throw new TypeError(`The \`${t}\` option's transform must use "objectMode: true" to receive as input: ${typeof e}.`);yield e},Xte=(t,e)=>t?HLe.bind(void 0,e):WLe.bind(void 0,e),HLe=function*(t,e){Qte(t,e),yield e},WLe=function*(t,e){if(Qte(t,e),typeof e!="string"&&!zt(e))throw new TypeError(`The \`${t}\` option's function must yield a string or an Uint8Array, not ${typeof e}.`);yield e},Qte=(t,e)=>{if(e==null)throw new TypeError(`The \`${t}\` option's function must not call \`yield ${e}\`.
100
100
  Instead, \`yield\` should either be called with a value, or not be called at all. For example:
101
- if (condition) { yield value; }`)};import{Buffer as YLe}from"buffer";import{StringDecoder as KLe}from"string_decoder";var hx=(t,e,r)=>{if(r)return;if(t)return{transform:ZLe.bind(void 0,new TextEncoder)};let n=new KLe(e);return{transform:JLe.bind(void 0,n),final:XLe.bind(void 0,n)}},ZLe=function*(t,e){YLe.isBuffer(e)?yield us(e):typeof e=="string"?yield t.encode(e):yield e},JLe=function*(t,e){yield zt(e)?t.write(e):e},XLe=function*(t){let e=t.end();e!==""&&(yield e)};import{callbackify as ere}from"util";var $L=ere(async(t,e,r,n)=>{e.currentIterable=t(...r);try{for await(let i of e.currentIterable)n.push(i)}finally{delete e.currentIterable}}),mx=async function*(t,e,r){if(r===e.length){yield t;return}let{transform:n=e$e}=e[r];for await(let i of n(t))yield*mx(i,e,r+1)},tre=async function*(t){for(let[e,{final:r}]of Object.entries(t))yield*QLe(r,Number(e),t)},QLe=async function*(t,e,r){if(t!==void 0)for await(let n of t())yield*mx(n,r,e+1)},rre=ere(async({currentIterable:t},e)=>{if(t!==void 0){await(e?t.throw(e):t.return());return}if(e)throw e}),e$e=function*(t){yield t};var UL=(t,e,r,n)=>{try{for(let i of t(...e))r.push(i);n()}catch(i){n(i)}},nre=(t,e)=>[...e.flatMap(r=>[...wl(r,t,0)]),...R_(t)],wl=function*(t,e,r){if(r===e.length){yield t;return}let{transform:n=r$e}=e[r];for(let i of n(t))yield*wl(i,e,r+1)},R_=function*(t){for(let[e,{final:r}]of Object.entries(t))yield*t$e(r,Number(e),t)},t$e=function*(t,e,r){if(t!==void 0)for(let n of t())yield*wl(n,r,e+1)},r$e=function*(t){yield t};var FL=({value:t,value:{transform:e,final:r,writableObjectMode:n,readableObjectMode:i},optionName:o},{encoding:s})=>{let a={},c=ore(t,s,o),l=xl(e),u=xl(r),d=l?$L.bind(void 0,mx,a):UL.bind(void 0,wl),f=l||u?$L.bind(void 0,tre,a):UL.bind(void 0,R_),p=l||u?rre.bind(void 0,a):void 0;return{stream:new n$e({writableObjectMode:n,writableHighWaterMark:ire(n),readableObjectMode:i,readableHighWaterMark:ire(i),transform(m,y,T){d([m,c,0],this,T)},flush(m){f([c],this,m)},destroy:p})}},gx=(t,e,r,n)=>{let i=e.filter(({type:s})=>s==="generator"),o=n?i.reverse():i;for(let{value:s,optionName:a}of o){let c=ore(s,r,a);t=nre(c,t)}return t},ore=({transform:t,final:e,binary:r,writableObjectMode:n,readableObjectMode:i,preserveNewlines:o},s,a)=>{let c={};return[{transform:Jte(n,a)},hx(r,s,n),px(r,o,n,c),{transform:t,final:e},{transform:Xte(i,a)},Zte({binary:r,preserveNewlines:o,readableObjectMode:i,state:c})].filter(Boolean)};var sre=(t,e)=>{for(let r of i$e(t))o$e(t,r,e)},i$e=t=>new Set(Object.entries(t).filter(([,{direction:e}])=>e==="input").map(([e])=>Number(e))),o$e=(t,e,r)=>{let{stdioItems:n}=t[e],i=n.filter(({contents:a})=>a!==void 0);if(i.length===0)return;if(e!==0){let[{type:a,optionName:c}]=i;throw new TypeError(`Only the \`stdin\` option, not \`${c}\`, can be ${Oa[a]} with synchronous methods.`)}let s=i.map(({contents:a})=>a).map(a=>s$e(a,n));r.input=__(s)},s$e=(t,e)=>{let r=gx(t,e,"utf8",!0);return a$e(r),__(r)},a$e=t=>{let e=t.find(r=>typeof r!="string"&&!zt(r));if(e!==void 0)throw new TypeError(`The \`stdin\` option is invalid: when passing objects as input, a transform must be used to serialize them to strings or Uint8Arrays: ${e}.`)};import{writeFileSync as d$e,appendFileSync as f$e}from"fs";var _x=({stdioItems:t,encoding:e,verboseInfo:r,fdNumber:n})=>n!=="all"&&nf(r,n)&&!gn.has(e)&&c$e(n)&&(t.some(({type:i,value:o})=>i==="native"&&l$e.has(o))||t.every(({type:i})=>qn.has(i))),c$e=t=>t===1||t===2,l$e=new Set(["pipe","overlapped"]),are=async(t,e,r,n)=>{for await(let i of t)u$e(e)||lre(i,r,n)},cre=(t,e,r)=>{for(let n of t)lre(n,e,r)},u$e=t=>t._readableState.pipes.length>0,lre=(t,e,r)=>{let n=OA(t);ao({type:"output",verboseMessage:n,fdNumber:e,verboseInfo:r})};var ure=({fileDescriptors:t,syncResult:{output:e},options:r,isMaxBuffer:n,verboseInfo:i})=>{if(e===null)return{output:Array.from({length:3})};let o={},s=new Set([]);return{output:e.map((c,l)=>p$e({result:c,fileDescriptors:t,fdNumber:l,state:o,outputFiles:s,isMaxBuffer:n,verboseInfo:i},r)),...o}},p$e=({result:t,fileDescriptors:e,fdNumber:r,state:n,outputFiles:i,isMaxBuffer:o,verboseInfo:s},{buffer:a,encoding:c,lines:l,stripFinalNewline:u,maxBuffer:d})=>{if(t===null)return;let f=dte(t,o,d),p=us(f),{stdioItems:h,objectMode:m}=e[r],y=h$e([p],h,c,n),{serializedResult:T,finalResult:b=T}=m$e({chunks:y,objectMode:m,encoding:c,lines:l,stripFinalNewline:u,fdNumber:r});g$e({serializedResult:T,fdNumber:r,state:n,verboseInfo:s,encoding:c,stdioItems:h,objectMode:m});let A=a[r]?b:void 0;try{return n.error===void 0&&_$e(T,h,i),A}catch(S){return n.error=S,A}},h$e=(t,e,r,n)=>{try{return gx(t,e,r,!1)}catch(i){return n.error=i,t}},m$e=({chunks:t,objectMode:e,encoding:r,lines:n,stripFinalNewline:i,fdNumber:o})=>{if(e)return{serializedResult:t};if(r==="buffer")return{serializedResult:__(t)};let s=xQ(t,r);return n[o]?{serializedResult:s,finalResult:LL(s,!i[o],e)}:{serializedResult:s}},g$e=({serializedResult:t,fdNumber:e,state:r,verboseInfo:n,encoding:i,stdioItems:o,objectMode:s})=>{if(!_x({stdioItems:o,encoding:i,verboseInfo:n,fdNumber:e}))return;let a=LL(t,!1,s);try{cre(a,e,n)}catch(c){r.error??=c}},_$e=(t,e,r)=>{for(let{path:n,append:i}of e.filter(({type:o})=>dx.has(o))){let o=typeof n=="string"?n:n.toString();i||r.has(o)?f$e(n,t):(r.add(o),d$e(n,t))}};var dre=([,t,e],r)=>{if(r.all)return t===void 0?e:e===void 0?t:Array.isArray(t)?Array.isArray(e)?[...t,...e]:[...t,ps(e,r,"all")]:Array.isArray(e)?[ps(t,r,"all"),...e]:zt(t)&&zt(e)?qD([t,e]):`${t}${e}`};import{once as BL}from"events";var fre=async(t,e)=>{let[r,n]=await y$e(t);return e.isForcefullyTerminated??=!1,[r,n]},y$e=async t=>{let[e,r]=await Promise.allSettled([BL(t,"spawn"),BL(t,"exit")]);return e.status==="rejected"?[]:r.status==="rejected"?pre(t):r.value},pre=async t=>{try{return await BL(t,"exit")}catch{return pre(t)}},hre=async t=>{let[e,r]=await t;if(!S$e(e,r)&&jL(e,r))throw new Ai;return[e,r]},S$e=(t,e)=>t===void 0&&e===void 0,jL=(t,e)=>t!==0||e!==null;var mre=({error:t,status:e,signal:r,output:n},{maxBuffer:i})=>{let o=E$e(t,e,r),s=o?.code==="ETIMEDOUT",a=ute(o,n,i);return{resultError:o,exitCode:e,signal:r,timedOut:s,isMaxBuffer:a}},E$e=(t,e,r)=>t!==void 0?t:jL(e,r)?new Ai:void 0;var gre=(t,e,r)=>{let{file:n,commandArguments:i,command:o,escapedCommand:s,startTime:a,verboseInfo:c,options:l,fileDescriptors:u}=T$e(t,e,r),d=x$e({file:n,commandArguments:i,options:l,command:o,escapedCommand:s,verboseInfo:c,fileDescriptors:u,startTime:a});return hf(d,c,l)},T$e=(t,e,r)=>{let{command:n,escapedCommand:i,startTime:o,verboseInfo:s}=kA(t,e,r),a=b$e(r),{file:c,commandArguments:l,options:u}=QA(t,e,a);A$e(u);let d=Hte(u,s);return{file:c,commandArguments:l,command:n,escapedCommand:i,startTime:o,verboseInfo:s,options:u,fileDescriptors:d}},b$e=t=>t.node&&!t.ipc?{...t,ipc:!1}:t,A$e=({ipc:t,ipcInput:e,detached:r,cancelSignal:n})=>{e&&yx("ipcInput"),t&&yx("ipc: true"),r&&yx("detached: true"),n&&yx("cancelSignal")},yx=t=>{throw new TypeError(`The "${t}" option cannot be used with synchronous methods.`)},x$e=({file:t,commandArguments:e,options:r,command:n,escapedCommand:i,verboseInfo:o,fileDescriptors:s,startTime:a})=>{let c=w$e({file:t,commandArguments:e,options:r,command:n,escapedCommand:i,fileDescriptors:s,startTime:a});if(c.failed)return c;let{resultError:l,exitCode:u,signal:d,timedOut:f,isMaxBuffer:p}=mre(c,r),{output:h,error:m=l}=ure({fileDescriptors:s,syncResult:c,options:r,isMaxBuffer:p,verboseInfo:o}),y=h.map((b,A)=>ps(b,r,A)),T=ps(dre(h,r),r,"all");return I$e({error:m,exitCode:u,signal:d,timedOut:f,isMaxBuffer:p,stdio:y,all:T,options:r,command:n,escapedCommand:i,startTime:a})},w$e=({file:t,commandArguments:e,options:r,command:n,escapedCommand:i,fileDescriptors:o,startTime:s})=>{try{sre(o,r);let a=R$e(r);return v$e(...ex(t,e,a))}catch(a){return pf({error:a,command:n,escapedCommand:i,fileDescriptors:o,options:r,startTime:s,isSync:!0})}},R$e=({encoding:t,maxBuffer:e,...r})=>({...r,encoding:"buffer",maxBuffer:ax(e)}),I$e=({error:t,exitCode:e,signal:r,timedOut:n,isMaxBuffer:i,stdio:o,all:s,options:a,command:c,escapedCommand:l,startTime:u})=>t===void 0?cx({command:c,escapedCommand:l,stdio:o,all:s,ipcOutput:[],options:a,startTime:u}):w_({error:t,command:c,escapedCommand:l,timedOut:n,isCanceled:!1,isGracefullyCanceled:!1,isMaxBuffer:i,isForcefullyTerminated:!1,exitCode:e,signal:r,stdio:o,all:s,ipcOutput:[],options:a,startTime:u,isSync:!0});import{setMaxListeners as mUe}from"events";import{spawn as gUe}from"child_process";import vre from"process";import{once as zL,on as C$e}from"events";var _re=({anyProcess:t,channel:e,isSubprocess:r,ipc:n},{reference:i=!0,filter:o}={})=>(af({methodName:"getOneMessage",isSubprocess:r,ipc:n,isConnected:WA(t)}),P$e({anyProcess:t,channel:e,isSubprocess:r,filter:o,reference:i})),P$e=async({anyProcess:t,channel:e,isSubprocess:r,filter:n,reference:i})=>{GA(e,i);let o=Pa(t,e,r),s=new AbortController;try{return await Promise.race([O$e(o,n,s),N$e(o,r,s),k$e(o,r,s)])}catch(a){throw cf(t),a}finally{s.abort(),VA(e,i)}},O$e=async(t,e,{signal:r})=>{if(e===void 0){let[n]=await zL(t,"message",{signal:r});return n}for await(let[n]of C$e(t,"message",{signal:r}))if(e(n))return n},N$e=async(t,e,{signal:r})=>{await zL(t,"disconnect",{signal:r}),nee(e)},k$e=async(t,e,{signal:r})=>{let[n]=await zL(t,"strict:error",{signal:r});throw BA(n,e)};import{once as Sre,on as M$e}from"events";var Ere=({anyProcess:t,channel:e,isSubprocess:r,ipc:n},{reference:i=!0}={})=>GL({anyProcess:t,channel:e,isSubprocess:r,ipc:n,shouldAwait:!r,reference:i}),GL=({anyProcess:t,channel:e,isSubprocess:r,ipc:n,shouldAwait:i,reference:o})=>{af({methodName:"getEachMessage",isSubprocess:r,ipc:n,isConnected:WA(t)}),GA(e,o);let s=Pa(t,e,r),a=new AbortController,c={};return D$e(t,s,a),L$e({ipcEmitter:s,isSubprocess:r,controller:a,state:c}),$$e({anyProcess:t,channel:e,ipcEmitter:s,isSubprocess:r,shouldAwait:i,controller:a,state:c,reference:o})},D$e=async(t,e,r)=>{try{await Sre(e,"disconnect",{signal:r.signal}),r.abort()}catch{}},L$e=async({ipcEmitter:t,isSubprocess:e,controller:r,state:n})=>{try{let[i]=await Sre(t,"strict:error",{signal:r.signal});n.error=BA(i,e),r.abort()}catch{}},$$e=async function*({anyProcess:t,channel:e,ipcEmitter:r,isSubprocess:n,shouldAwait:i,controller:o,state:s,reference:a}){try{for await(let[c]of M$e(r,"message",{signal:o.signal}))yre(s),yield c}catch{yre(s)}finally{o.abort(),VA(e,a),n||cf(t),i&&await t}},yre=({error:t})=>{if(t)throw t};var Tre=(t,{ipc:e})=>{Object.assign(t,Are(t,!1,e))},bre=()=>{let t=vre,e=!0,r=vre.channel!==void 0;return{...Are(t,e,r),getCancelSignal:Pee.bind(void 0,{anyProcess:t,channel:t.channel,isSubprocess:e,ipc:r})}},Are=(t,e,r)=>({sendMessage:JA.bind(void 0,{anyProcess:t,channel:t.channel,isSubprocess:e,ipc:r}),getOneMessage:_re.bind(void 0,{anyProcess:t,channel:t.channel,isSubprocess:e,ipc:r}),getEachMessage:Ere.bind(void 0,{anyProcess:t,channel:t.channel,isSubprocess:e,ipc:r})});import{ChildProcess as U$e}from"child_process";import{PassThrough as F$e,Readable as B$e,Writable as j$e,Duplex as z$e}from"stream";var xre=({error:t,command:e,escapedCommand:r,fileDescriptors:n,options:i,startTime:o,verboseInfo:s})=>{kL(n);let a=new U$e;G$e(a,n),Object.assign(a,{readable:V$e,writable:q$e,duplex:H$e});let c=pf({error:t,command:e,escapedCommand:r,fileDescriptors:n,options:i,startTime:o,isSync:!1}),l=W$e(c,s,i);return{subprocess:a,promise:l}},G$e=(t,e)=>{let r=I_(),n=I_(),i=I_(),o=Array.from({length:e.length-3},I_),s=I_(),a=[r,n,i,...o];Object.assign(t,{stdin:r,stdout:n,stderr:i,all:s,stdio:a})},I_=()=>{let t=new F$e;return t.end(),t},V$e=()=>new B$e({read(){}}),q$e=()=>new j$e({write(){}}),H$e=()=>new z$e({read(){},write(){}}),W$e=async(t,e,r)=>hf(t,e,r);import{createReadStream as wre,createWriteStream as Rre}from"fs";import{Buffer as Y$e}from"buffer";import{Readable as C_,Writable as K$e,Duplex as Z$e}from"stream";var Cre=(t,e)=>fx(J$e,t,e,!1),P_=({type:t,optionName:e})=>{throw new TypeError(`The \`${e}\` option cannot be ${Oa[t]}.`)},Ire={fileNumber:P_,generator:FL,asyncGenerator:FL,nodeStream:({value:t})=>({stream:t}),webTransform({value:{transform:t,writableObjectMode:e,readableObjectMode:r}}){let n=e||r;return{stream:Z$e.fromWeb(t,{objectMode:n})}},duplex:({value:{transform:t}})=>({stream:t}),native(){}},J$e={input:{...Ire,fileUrl:({value:t})=>({stream:wre(t)}),filePath:({value:{file:t}})=>({stream:wre(t)}),webStream:({value:t})=>({stream:C_.fromWeb(t)}),iterable:({value:t})=>({stream:C_.from(t)}),asyncIterable:({value:t})=>({stream:C_.from(t)}),string:({value:t})=>({stream:C_.from(t)}),uint8Array:({value:t})=>({stream:C_.from(Y$e.from(t))})},output:{...Ire,fileUrl:({value:t})=>({stream:Rre(t)}),filePath:({value:{file:t,append:e}})=>({stream:Rre(t,e?{flags:"a"}:{})}),webStream:({value:t})=>({stream:K$e.fromWeb(t)}),iterable:P_,asyncIterable:P_,string:P_,uint8Array:P_}};import{on as X$e,once as Pre}from"events";import{PassThrough as Q$e,getDefaultHighWaterMark as e1e}from"stream";import{finished as kre}from"stream/promises";function Rl(t){if(!Array.isArray(t))throw new TypeError(`Expected an array, got \`${typeof t}\`.`);for(let i of t)qL(i);let e=t.some(({readableObjectMode:i})=>i),r=t1e(t,e),n=new VL({objectMode:e,writableHighWaterMark:r,readableHighWaterMark:r});for(let i of t)n.add(i);return n}var t1e=(t,e)=>{if(t.length===0)return e1e(e);let r=t.filter(({readableObjectMode:n})=>n===e).map(({readableHighWaterMark:n})=>n);return Math.max(...r)},VL=class extends Q$e{#e=new Set([]);#r=new Set([]);#t=new Set([]);#n;#o=Symbol("unpipe");#i=new WeakMap;add(e){if(qL(e),this.#e.has(e))return;this.#e.add(e),this.#n??=r1e(this,this.#e,this.#o);let r=o1e({passThroughStream:this,stream:e,streams:this.#e,ended:this.#r,aborted:this.#t,onFinished:this.#n,unpipeEvent:this.#o});this.#i.set(e,r),e.pipe(this,{end:!1})}async remove(e){if(qL(e),!this.#e.has(e))return!1;let r=this.#i.get(e);return r===void 0?!1:(this.#i.delete(e),e.unpipe(this),await r,!0)}},r1e=async(t,e,r)=>{Sx(t,Ore);let n=new AbortController;try{await Promise.race([n1e(t,n),i1e(t,e,r,n)])}finally{n.abort(),Sx(t,-Ore)}},n1e=async(t,{signal:e})=>{try{await kre(t,{signal:e,cleanup:!0})}catch(r){throw Mre(t,r),r}},i1e=async(t,e,r,{signal:n})=>{for await(let[i]of X$e(t,"unpipe",{signal:n}))e.has(i)&&i.emit(r)},qL=t=>{if(typeof t?.pipe!="function")throw new TypeError(`Expected a readable stream, got: \`${typeof t}\`.`)},o1e=async({passThroughStream:t,stream:e,streams:r,ended:n,aborted:i,onFinished:o,unpipeEvent:s})=>{Sx(t,Nre);let a=new AbortController;try{await Promise.race([s1e(o,e,a),a1e({passThroughStream:t,stream:e,streams:r,ended:n,aborted:i,controller:a}),c1e({stream:e,streams:r,ended:n,aborted:i,unpipeEvent:s,controller:a})])}finally{a.abort(),Sx(t,-Nre)}r.size>0&&r.size===n.size+i.size&&(n.size===0&&i.size>0?HL(t):l1e(t))},s1e=async(t,e,{signal:r})=>{try{await t,r.aborted||HL(e)}catch(n){r.aborted||Mre(e,n)}},a1e=async({passThroughStream:t,stream:e,streams:r,ended:n,aborted:i,controller:{signal:o}})=>{try{await kre(e,{signal:o,cleanup:!0,readable:!0,writable:!1}),r.has(e)&&n.add(e)}catch(s){if(o.aborted||!r.has(e))return;Dre(s)?i.add(e):Lre(t,s)}},c1e=async({stream:t,streams:e,ended:r,aborted:n,unpipeEvent:i,controller:{signal:o}})=>{if(await Pre(t,i,{signal:o}),!t.readable)return Pre(o,"abort",{signal:o});e.delete(t),r.delete(t),n.delete(t)},l1e=t=>{t.writable&&t.end()},Mre=(t,e)=>{Dre(e)?HL(t):Lre(t,e)},Dre=t=>t?.code==="ERR_STREAM_PREMATURE_CLOSE",HL=t=>{(t.readable||t.writable)&&t.destroy()},Lre=(t,e)=>{t.destroyed||(t.once("error",u1e),t.destroy(e))},u1e=()=>{},Sx=(t,e)=>{let r=t.getMaxListeners();r!==0&&r!==Number.POSITIVE_INFINITY&&t.setMaxListeners(r+e)},Ore=2,Nre=1;import{finished as $re}from"stream/promises";var gf=(t,e)=>{t.pipe(e),d1e(t,e),f1e(t,e)},d1e=async(t,e)=>{if(!(bi(t)||bi(e))){try{await $re(t,{cleanup:!0,readable:!0,writable:!1})}catch{}WL(e)}},WL=t=>{t.writable&&t.end()},f1e=async(t,e)=>{if(!(bi(t)||bi(e))){try{await $re(e,{cleanup:!0,readable:!1,writable:!0})}catch{}YL(t)}},YL=t=>{t.readable&&t.destroy()};var Ure=(t,e,r)=>{let n=new Map;for(let[i,{stdioItems:o,direction:s}]of Object.entries(e)){for(let{stream:a}of o.filter(({type:c})=>qn.has(c)))p1e(t,a,s,i);for(let{stream:a}of o.filter(({type:c})=>!qn.has(c)))m1e({subprocess:t,stream:a,direction:s,fdNumber:i,pipeGroups:n,controller:r})}for(let[i,o]of n.entries()){let s=o.length===1?o[0]:Rl(o);gf(s,i)}},p1e=(t,e,r,n)=>{r==="output"?gf(t.stdio[n],e):gf(e,t.stdio[n]);let i=h1e[n];i!==void 0&&(t[i]=e),t.stdio[n]=e},h1e=["stdin","stdout","stderr"],m1e=({subprocess:t,stream:e,direction:r,fdNumber:n,pipeGroups:i,controller:o})=>{if(e===void 0)return;g1e(e,o);let[s,a]=r==="output"?[e,t.stdio[n]]:[t.stdio[n],e],c=i.get(s)??[];i.set(s,[...c,a])},g1e=(t,{signal:e})=>{bi(t)&&bl(t,_1e,e)},_1e=2;import{addAbortListener as E1e}from"events";var Il=[];Il.push("SIGHUP","SIGINT","SIGTERM");process.platform!=="win32"&&Il.push("SIGALRM","SIGABRT","SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");process.platform==="linux"&&Il.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT");var Ex=t=>!!t&&typeof t=="object"&&typeof t.removeListener=="function"&&typeof t.emit=="function"&&typeof t.reallyExit=="function"&&typeof t.listeners=="function"&&typeof t.kill=="function"&&typeof t.pid=="number"&&typeof t.on=="function",KL=Symbol.for("signal-exit emitter"),ZL=globalThis,y1e=Object.defineProperty.bind(Object),JL=class{emitted={afterExit:!1,exit:!1};listeners={afterExit:[],exit:[]};count=0;id=Math.random();constructor(){if(ZL[KL])return ZL[KL];y1e(ZL,KL,{value:this,writable:!1,enumerable:!1,configurable:!1})}on(e,r){this.listeners[e].push(r)}removeListener(e,r){let n=this.listeners[e],i=n.indexOf(r);i!==-1&&(i===0&&n.length===1?n.length=0:n.splice(i,1))}emit(e,r,n){if(this.emitted[e])return!1;this.emitted[e]=!0;let i=!1;for(let o of this.listeners[e])i=o(r,n)===!0||i;return e==="exit"&&(i=this.emit("afterExit",r,n)||i),i}},vx=class{},S1e=t=>({onExit(e,r){return t.onExit(e,r)},load(){return t.load()},unload(){return t.unload()}}),XL=class extends vx{onExit(){return()=>{}}load(){}unload(){}},QL=class extends vx{#e=e$.platform==="win32"?"SIGINT":"SIGHUP";#r=new JL;#t;#n;#o;#i={};#s=!1;constructor(e){super(),this.#t=e,this.#i={};for(let r of Il)this.#i[r]=()=>{let n=this.#t.listeners(r),{count:i}=this.#r,o=e;if(typeof o.__signal_exit_emitter__=="object"&&typeof o.__signal_exit_emitter__.count=="number"&&(i+=o.__signal_exit_emitter__.count),n.length===i){this.unload();let s=this.#r.emit("exit",null,r),a=r==="SIGHUP"?this.#e:r;s||e.kill(e.pid,a)}};this.#o=e.reallyExit,this.#n=e.emit}onExit(e,r){if(!Ex(this.#t))return()=>{};this.#s===!1&&this.load();let n=r?.alwaysLast?"afterExit":"exit";return this.#r.on(n,e),()=>{this.#r.removeListener(n,e),this.#r.listeners.exit.length===0&&this.#r.listeners.afterExit.length===0&&this.unload()}}load(){if(!this.#s){this.#s=!0,this.#r.count+=1;for(let e of Il)try{let r=this.#i[e];r&&this.#t.on(e,r)}catch{}this.#t.emit=(e,...r)=>this.#c(e,...r),this.#t.reallyExit=e=>this.#a(e)}}unload(){this.#s&&(this.#s=!1,Il.forEach(e=>{let r=this.#i[e];if(!r)throw new Error("Listener not defined for signal: "+e);try{this.#t.removeListener(e,r)}catch{}}),this.#t.emit=this.#n,this.#t.reallyExit=this.#o,this.#r.count-=1)}#a(e){return Ex(this.#t)?(this.#t.exitCode=e||0,this.#r.emit("exit",this.#t.exitCode,null),this.#o.call(this.#t,this.#t.exitCode)):0}#c(e,...r){let n=this.#n;if(e==="exit"&&Ex(this.#t)){typeof r[0]=="number"&&(this.#t.exitCode=r[0]);let i=n.call(this.#t,e,...r);return this.#r.emit("exit",this.#t.exitCode,null),i}else return n.call(this.#t,e,...r)}},e$=globalThis.process,{onExit:Fre,load:yEt,unload:SEt}=S1e(Ex(e$)?new QL(e$):new XL);var Bre=(t,{cleanup:e,detached:r},{signal:n})=>{if(!e||r)return;let i=Fre(()=>{t.kill()});E1e(n,()=>{i()})};var zre=({source:t,sourcePromise:e,boundOptions:r,createNested:n},...i)=>{let o=NA(),{destination:s,destinationStream:a,destinationError:c,from:l,unpipeSignal:u}=v1e(r,n,i),{sourceStream:d,sourceError:f}=b1e(t,l),{options:p,fileDescriptors:h}=lo.get(t);return{sourcePromise:e,sourceStream:d,sourceOptions:p,sourceError:f,destination:s,destinationStream:a,destinationError:c,unpipeSignal:u,fileDescriptors:h,startTime:o}},v1e=(t,e,r)=>{try{let{destination:n,pipeOptions:{from:i,to:o,unpipeSignal:s}={}}=T1e(t,e,...r),a=zA(n,o);return{destination:n,destinationStream:a,from:i,unpipeSignal:s}}catch(n){return{destinationError:n}}},T1e=(t,e,r,...n)=>{if(Array.isArray(r))return{destination:e(jre,t)(r,...n),pipeOptions:t};if(typeof r=="string"||r instanceof URL||GD(r)){if(Object.keys(t).length>0)throw new TypeError('Please use .pipe("file", ..., options) or .pipe(execa("file", ..., options)) instead of .pipe(options)("file", ...).');let[i,o,s]=TA(r,...n);return{destination:e(jre)(i,o,s),pipeOptions:s}}if(lo.has(r)){if(Object.keys(t).length>0)throw new TypeError("Please use .pipe(options)`command` or .pipe($(options)`command`) instead of .pipe(options)($`command`).");return{destination:r,pipeOptions:n[0]}}throw new TypeError(`The first argument must be a template string, an options object, or an Execa subprocess: ${r}`)},jre=({options:t})=>({options:{...t,stdin:"pipe",piped:!0}}),b1e=(t,e)=>{try{return{sourceStream:lf(t,e)}}catch(r){return{sourceError:r}}};var Vre=({sourceStream:t,sourceError:e,destinationStream:r,destinationError:n,fileDescriptors:i,sourceOptions:o,startTime:s})=>{let a=A1e({sourceStream:t,sourceError:e,destinationStream:r,destinationError:n});if(a!==void 0)throw t$({error:a,fileDescriptors:i,sourceOptions:o,startTime:s})},A1e=({sourceStream:t,sourceError:e,destinationStream:r,destinationError:n})=>{if(e!==void 0&&n!==void 0)return n;if(n!==void 0)return YL(t),n;if(e!==void 0)return WL(r),e},t$=({error:t,fileDescriptors:e,sourceOptions:r,startTime:n})=>pf({error:t,command:Gre,escapedCommand:Gre,fileDescriptors:e,options:r,startTime:n,isSync:!1}),Gre="source.pipe(destination)";var qre=async t=>{let[{status:e,reason:r,value:n=r},{status:i,reason:o,value:s=o}]=await t;if(s.pipedFrom.includes(n)||s.pipedFrom.push(n),i==="rejected")throw s;if(e==="rejected")throw n;return s};import{finished as x1e}from"stream/promises";var Hre=(t,e,r)=>{let n=Tx.has(e)?R1e(t,e):w1e(t,e);return bl(t,C1e,r.signal),bl(e,P1e,r.signal),I1e(e),n},w1e=(t,e)=>{let r=Rl([t]);return gf(r,e),Tx.set(e,r),r},R1e=(t,e)=>{let r=Tx.get(e);return r.add(t),r},I1e=async t=>{try{await x1e(t,{cleanup:!0,readable:!1,writable:!0})}catch{}Tx.delete(t)},Tx=new WeakMap,C1e=2,P1e=1;import{aborted as O1e}from"util";var Wre=(t,e)=>t===void 0?[]:[N1e(t,e)],N1e=async(t,{sourceStream:e,mergedStream:r,fileDescriptors:n,sourceOptions:i,startTime:o})=>{await O1e(t,e),await r.remove(e);let s=new Error("Pipe canceled by `unpipeSignal` option.");throw t$({error:s,fileDescriptors:n,sourceOptions:i,startTime:o})};var bx=(t,...e)=>{if(kt(e[0]))return bx.bind(void 0,{...t,boundOptions:{...t.boundOptions,...e[0]}});let{destination:r,...n}=zre(t,...e),i=k1e({...n,destination:r});return i.pipe=bx.bind(void 0,{...t,source:r,sourcePromise:i,boundOptions:{}}),i},k1e=async({sourcePromise:t,sourceStream:e,sourceOptions:r,sourceError:n,destination:i,destinationStream:o,destinationError:s,unpipeSignal:a,fileDescriptors:c,startTime:l})=>{let u=M1e(t,i);Vre({sourceStream:e,sourceError:n,destinationStream:o,destinationError:s,fileDescriptors:c,sourceOptions:r,startTime:l});let d=new AbortController;try{let f=Hre(e,o,d);return await Promise.race([qre(u),...Wre(a,{sourceStream:e,mergedStream:f,sourceOptions:r,fileDescriptors:c,startTime:l})])}finally{d.abort()}},M1e=(t,e)=>Promise.allSettled([t,e]);import{setImmediate as j1e}from"timers/promises";import{on as D1e}from"events";import{getDefaultHighWaterMark as L1e}from"stream";var Ax=({subprocessStdout:t,subprocess:e,binary:r,shouldEncode:n,encoding:i,preserveNewlines:o})=>{let s=new AbortController;return $1e(e,s),Kre({stream:t,controller:s,binary:r,shouldEncode:!t.readableObjectMode&&n,encoding:i,shouldSplit:!t.readableObjectMode,preserveNewlines:o})},$1e=async(t,e)=>{try{await t}catch{}finally{e.abort()}},r$=({stream:t,onStreamEnd:e,lines:r,encoding:n,stripFinalNewline:i,allMixed:o})=>{let s=new AbortController;U1e(e,s,t);let a=t.readableObjectMode&&!o;return Kre({stream:t,controller:s,binary:n==="buffer",shouldEncode:!a,encoding:n,shouldSplit:!a&&r,preserveNewlines:!i})},U1e=async(t,e,r)=>{try{await t}catch{r.destroy()}finally{e.abort()}},Kre=({stream:t,controller:e,binary:r,shouldEncode:n,encoding:i,shouldSplit:o,preserveNewlines:s})=>{let a=D1e(t,"data",{signal:e.signal,highWaterMark:Yre,highWatermark:Yre});return F1e({onStdoutChunk:a,controller:e,binary:r,shouldEncode:n,encoding:i,shouldSplit:o,preserveNewlines:s})},n$=L1e(!0),Yre=n$,F1e=async function*({onStdoutChunk:t,controller:e,binary:r,shouldEncode:n,encoding:i,shouldSplit:o,preserveNewlines:s}){let a=B1e({binary:r,shouldEncode:n,encoding:i,shouldSplit:o,preserveNewlines:s});try{for await(let[c]of t)yield*wl(c,a,0)}catch(c){if(!e.signal.aborted)throw c}finally{yield*R_(a)}},B1e=({binary:t,shouldEncode:e,encoding:r,shouldSplit:n,preserveNewlines:i})=>[hx(t,r,!e),px(t,i,!n,{})].filter(Boolean);var Zre=async({stream:t,onStreamEnd:e,fdNumber:r,encoding:n,buffer:i,maxBuffer:o,lines:s,allMixed:a,stripFinalNewline:c,verboseInfo:l,streamInfo:u})=>{let d=z1e({stream:t,onStreamEnd:e,fdNumber:r,encoding:n,allMixed:a,verboseInfo:l,streamInfo:u});if(!i){await Promise.all([G1e(t),d]);return}let f=ML(c,r),p=r$({stream:t,onStreamEnd:e,lines:s,encoding:n,stripFinalNewline:f,allMixed:a}),[h]=await Promise.all([V1e({stream:t,iterable:p,fdNumber:r,encoding:n,maxBuffer:o,lines:s}),d]);return h},z1e=async({stream:t,onStreamEnd:e,fdNumber:r,encoding:n,allMixed:i,verboseInfo:o,streamInfo:{fileDescriptors:s}})=>{if(!_x({stdioItems:s[r]?.stdioItems,encoding:n,verboseInfo:o,fdNumber:r}))return;let a=r$({stream:t,onStreamEnd:e,lines:!0,encoding:n,stripFinalNewline:!0,allMixed:i});await are(a,t,r,o)},G1e=async t=>{await j1e(),t.readableFlowing===null&&t.resume()},V1e=async({stream:t,stream:{readableObjectMode:e},iterable:r,fdNumber:n,encoding:i,maxBuffer:o,lines:s})=>{try{return e||s?await ix(r,{maxBuffer:o}):i==="buffer"?new Uint8Array(await ox(r,{maxBuffer:o})):await ff(r,{maxBuffer:o})}catch(a){return Jre(ate({error:a,stream:t,readableObjectMode:e,lines:s,encoding:i,fdNumber:n}))}},i$=async t=>{try{return await t}catch(e){return Jre(e)}},Jre=({bufferedData:t})=>bQ(t)?new Uint8Array(t):t;import{finished as q1e}from"stream/promises";var O_=async(t,e,r,{isSameDirection:n,stopOnExit:i=!1}={})=>{let o=H1e(t,r),s=new AbortController;try{await Promise.race([...i?[r.exitPromise]:[],q1e(t,{cleanup:!0,signal:s.signal})])}catch(a){o.stdinCleanedUp||K1e(a,e,r,n)}finally{s.abort()}},H1e=(t,{originalStreams:[e],subprocess:r})=>{let n={stdinCleanedUp:!1};return t===e&&W1e(t,r,n),n},W1e=(t,e,r)=>{let{_destroy:n}=t;t._destroy=(...i)=>{Y1e(e,r),n.call(t,...i)}},Y1e=({exitCode:t,signalCode:e},r)=>{(t!==null||e!==null)&&(r.stdinCleanedUp=!0)},K1e=(t,e,r,n)=>{if(!Z1e(t,e,r,n))throw t},Z1e=(t,e,r,n=!0)=>r.propagating?Xre(t)||xx(t):(r.propagating=!0,o$(r,e)===n?Xre(t):xx(t)),o$=({fileDescriptors:t},e)=>e!=="all"&&t[e].direction==="input",xx=t=>t?.code==="ERR_STREAM_PREMATURE_CLOSE",Xre=t=>t?.code==="EPIPE";var Qre=({subprocess:t,encoding:e,buffer:r,maxBuffer:n,lines:i,stripFinalNewline:o,verboseInfo:s,streamInfo:a})=>t.stdio.map((c,l)=>s$({stream:c,fdNumber:l,encoding:e,buffer:r[l],maxBuffer:n[l],lines:i[l],allMixed:!1,stripFinalNewline:o,verboseInfo:s,streamInfo:a})),s$=async({stream:t,fdNumber:e,encoding:r,buffer:n,maxBuffer:i,lines:o,allMixed:s,stripFinalNewline:a,verboseInfo:c,streamInfo:l})=>{if(!t)return;let u=O_(t,e,l);if(o$(l,e)){await u;return}let[d]=await Promise.all([Zre({stream:t,onStreamEnd:u,fdNumber:e,encoding:r,buffer:n,maxBuffer:i,lines:o,allMixed:s,stripFinalNewline:a,verboseInfo:c,streamInfo:l}),u]);return d};var ene=({stdout:t,stderr:e},{all:r})=>r&&(t||e)?Rl([t,e].filter(Boolean)):void 0,tne=({subprocess:t,encoding:e,buffer:r,maxBuffer:n,lines:i,stripFinalNewline:o,verboseInfo:s,streamInfo:a})=>s$({...J1e(t,r),fdNumber:"all",encoding:e,maxBuffer:n[1]+n[2],lines:i[1]||i[2],allMixed:X1e(t),stripFinalNewline:o,verboseInfo:s,streamInfo:a}),J1e=({stdout:t,stderr:e,all:r},[,n,i])=>{let o=n||i;return o?n?i?{stream:r,buffer:o}:{stream:t,buffer:o}:{stream:e,buffer:o}:{stream:r,buffer:o}},X1e=({all:t,stdout:e,stderr:r})=>t&&e&&r&&e.readableObjectMode!==r.readableObjectMode;import{once as Q1e}from"events";var rne=t=>nf(t,"ipc"),nne=(t,e)=>{let r=OA(t);ao({type:"ipc",verboseMessage:r,fdNumber:"ipc",verboseInfo:e})};var ine=async({subprocess:t,buffer:e,maxBuffer:r,ipc:n,ipcOutput:i,verboseInfo:o})=>{if(!n)return i;let s=rne(o),a=ds(e,"ipc"),c=ds(r,"ipc");for await(let l of GL({anyProcess:t,channel:t.channel,isSubprocess:!1,ipc:n,shouldAwait:!1,reference:!0}))a&&(cte(t,i,c),i.push(l)),s&&nne(l,o);return i},one=async(t,e)=>(await Promise.allSettled([t]),e);var sne=async({subprocess:t,options:{encoding:e,buffer:r,maxBuffer:n,lines:i,timeoutDuration:o,cancelSignal:s,gracefulCancel:a,forceKillAfterDelay:c,stripFinalNewline:l,ipc:u,ipcInput:d},context:f,verboseInfo:p,fileDescriptors:h,originalStreams:m,onInternalError:y,controller:T})=>{let b=fre(t,f),A={originalStreams:m,fileDescriptors:h,subprocess:t,exitPromise:b,propagating:!1},S=Qre({subprocess:t,encoding:e,buffer:r,maxBuffer:n,lines:i,stripFinalNewline:l,verboseInfo:p,streamInfo:A}),I=tne({subprocess:t,encoding:e,buffer:r,maxBuffer:n,lines:i,stripFinalNewline:l,verboseInfo:p,streamInfo:A}),C=[],$=ine({subprocess:t,buffer:r,maxBuffer:n,ipc:u,ipcOutput:C,verboseInfo:p}),k=eUe(m,t,A),O=tUe(h,A);try{return await Promise.race([Promise.all([{},hre(b),Promise.all(S),I,$,Bee(t,d),...k,...O]),y,rUe(t,T),...Dee(t,o,f,T),...ree({subprocess:t,cancelSignal:s,gracefulCancel:a,context:f,controller:T}),...kee({subprocess:t,cancelSignal:s,gracefulCancel:a,forceKillAfterDelay:c,context:f,controller:T})])}catch(U){return f.terminationReason??="other",Promise.all([{error:U},b,Promise.all(S.map(_=>i$(_))),i$(I),one($,C),Promise.allSettled(k),Promise.allSettled(O)])}},eUe=(t,e,r)=>t.map((n,i)=>n===e.stdio[i]?void 0:O_(n,i,r)),tUe=(t,e)=>t.flatMap(({stdioItems:r},n)=>r.filter(({value:i,stream:o=i})=>wi(o,{checkOpen:!1})&&!bi(o)).map(({type:i,value:o,stream:s=o})=>O_(s,n,e,{isSameDirection:qn.has(i),stopOnExit:i==="native"}))),rUe=async(t,{signal:e})=>{let[r]=await Q1e(t,"error",{signal:e});throw r};var ane=()=>({readableDestroy:new WeakMap,writableFinal:new WeakMap,writableDestroy:new WeakMap}),N_=(t,e,r)=>{let n=t[r];n.has(e)||n.set(e,[]);let i=n.get(e),o=co();return i.push(o),{resolve:o.resolve.bind(o),promises:i}},_f=async({resolve:t,promises:e},r)=>{t();let[n]=await Promise.race([Promise.allSettled([!0,r]),Promise.all([!1,...e])]);return!n};import{Readable as nUe}from"stream";import{callbackify as iUe}from"util";import{finished as cne}from"stream/promises";var a$=async t=>{if(t!==void 0)try{await c$(t)}catch{}},lne=async t=>{if(t!==void 0)try{await l$(t)}catch{}},c$=async t=>{await cne(t,{cleanup:!0,readable:!1,writable:!0})},l$=async t=>{await cne(t,{cleanup:!0,readable:!0,writable:!1})},wx=async(t,e)=>{if(await t,e)throw e},Rx=(t,e,r)=>{r&&!xx(r)?t.destroy(r):e&&t.destroy()};var une=({subprocess:t,concurrentStreams:e,encoding:r},{from:n,binary:i=!0,preserveNewlines:o=!0}={})=>{let s=i||gn.has(r),{subprocessStdout:a,waitReadableDestroy:c}=u$(t,n,e),{readableEncoding:l,readableObjectMode:u,readableHighWaterMark:d}=d$(a,s),{read:f,onStdoutDataDone:p}=f$({subprocessStdout:a,subprocess:t,binary:s,encoding:r,preserveNewlines:o}),h=new nUe({read:f,destroy:iUe(h$.bind(void 0,{subprocessStdout:a,subprocess:t,waitReadableDestroy:c})),highWaterMark:d,objectMode:u,encoding:l});return p$({subprocessStdout:a,onStdoutDataDone:p,readable:h,subprocess:t}),h},u$=(t,e,r)=>{let n=lf(t,e),i=N_(r,n,"readableDestroy");return{subprocessStdout:n,waitReadableDestroy:i}},d$=({readableEncoding:t,readableObjectMode:e,readableHighWaterMark:r},n)=>n?{readableEncoding:t,readableObjectMode:e,readableHighWaterMark:r}:{readableEncoding:t,readableObjectMode:!0,readableHighWaterMark:n$},f$=({subprocessStdout:t,subprocess:e,binary:r,encoding:n,preserveNewlines:i})=>{let o=co(),s=Ax({subprocessStdout:t,subprocess:e,binary:r,shouldEncode:!r,encoding:n,preserveNewlines:i});return{read(){oUe(this,s,o)},onStdoutDataDone:o}},oUe=async(t,e,r)=>{try{let{value:n,done:i}=await e.next();i?r.resolve():t.push(n)}catch{}},p$=async({subprocessStdout:t,onStdoutDataDone:e,readable:r,subprocess:n,subprocessStdin:i})=>{try{await l$(t),await n,await a$(i),await e,r.readable&&r.push(null)}catch(o){await a$(i),dne(r,o)}},h$=async({subprocessStdout:t,subprocess:e,waitReadableDestroy:r},n)=>{await _f(r,e)&&(dne(t,n),await wx(e,n))},dne=(t,e)=>{Rx(t,t.readable,e)};import{Writable as sUe}from"stream";import{callbackify as fne}from"util";var pne=({subprocess:t,concurrentStreams:e},{to:r}={})=>{let{subprocessStdin:n,waitWritableFinal:i,waitWritableDestroy:o}=m$(t,r,e),s=new sUe({...g$(n,t,i),destroy:fne(y$.bind(void 0,{subprocessStdin:n,subprocess:t,waitWritableFinal:i,waitWritableDestroy:o})),highWaterMark:n.writableHighWaterMark,objectMode:n.writableObjectMode});return _$(n,s),s},m$=(t,e,r)=>{let n=zA(t,e),i=N_(r,n,"writableFinal"),o=N_(r,n,"writableDestroy");return{subprocessStdin:n,waitWritableFinal:i,waitWritableDestroy:o}},g$=(t,e,r)=>({write:aUe.bind(void 0,t),final:fne(cUe.bind(void 0,t,e,r))}),aUe=(t,e,r,n)=>{t.write(e,r)?n():t.once("drain",n)},cUe=async(t,e,r)=>{await _f(r,e)&&(t.writable&&t.end(),await e)},_$=async(t,e,r)=>{try{await c$(t),e.writable&&e.end()}catch(n){await lne(r),hne(e,n)}},y$=async({subprocessStdin:t,subprocess:e,waitWritableFinal:r,waitWritableDestroy:n},i)=>{await _f(r,e),await _f(n,e)&&(hne(t,i),await wx(e,i))},hne=(t,e)=>{Rx(t,t.writable,e)};import{Duplex as lUe}from"stream";import{callbackify as uUe}from"util";var mne=({subprocess:t,concurrentStreams:e,encoding:r},{from:n,to:i,binary:o=!0,preserveNewlines:s=!0}={})=>{let a=o||gn.has(r),{subprocessStdout:c,waitReadableDestroy:l}=u$(t,n,e),{subprocessStdin:u,waitWritableFinal:d,waitWritableDestroy:f}=m$(t,i,e),{readableEncoding:p,readableObjectMode:h,readableHighWaterMark:m}=d$(c,a),{read:y,onStdoutDataDone:T}=f$({subprocessStdout:c,subprocess:t,binary:a,encoding:r,preserveNewlines:s}),b=new lUe({read:y,...g$(u,t,d),destroy:uUe(dUe.bind(void 0,{subprocessStdout:c,subprocessStdin:u,subprocess:t,waitReadableDestroy:l,waitWritableFinal:d,waitWritableDestroy:f})),readableHighWaterMark:m,writableHighWaterMark:u.writableHighWaterMark,readableObjectMode:h,writableObjectMode:u.writableObjectMode,encoding:p});return p$({subprocessStdout:c,onStdoutDataDone:T,readable:b,subprocess:t,subprocessStdin:u}),_$(u,b,c),b},dUe=async({subprocessStdout:t,subprocessStdin:e,subprocess:r,waitReadableDestroy:n,waitWritableFinal:i,waitWritableDestroy:o},s)=>{await Promise.all([h$({subprocessStdout:t,subprocess:r,waitReadableDestroy:n},s),y$({subprocessStdin:e,subprocess:r,waitWritableFinal:i,waitWritableDestroy:o},s)])};var S$=(t,e,{from:r,binary:n=!1,preserveNewlines:i=!1}={})=>{let o=n||gn.has(e),s=lf(t,r),a=Ax({subprocessStdout:s,subprocess:t,binary:o,shouldEncode:!0,encoding:e,preserveNewlines:i});return fUe(a,s,t)},fUe=async function*(t,e,r){try{yield*t}finally{e.readable&&e.destroy(),await r}};var gne=(t,{encoding:e})=>{let r=ane();t.readable=une.bind(void 0,{subprocess:t,concurrentStreams:r,encoding:e}),t.writable=pne.bind(void 0,{subprocess:t,concurrentStreams:r}),t.duplex=mne.bind(void 0,{subprocess:t,concurrentStreams:r,encoding:e}),t.iterable=S$.bind(void 0,t,e),t[Symbol.asyncIterator]=S$.bind(void 0,t,e,{})};var _ne=(t,e)=>{for(let[r,n]of hUe){let i=n.value.bind(e);Reflect.defineProperty(t,r,{...n,value:i})}},pUe=(async()=>{})().constructor.prototype,hUe=["then","catch","finally"].map(t=>[t,Reflect.getOwnPropertyDescriptor(pUe,t)]);var yne=(t,e,r,n)=>{let{file:i,commandArguments:o,command:s,escapedCommand:a,startTime:c,verboseInfo:l,options:u,fileDescriptors:d}=_Ue(t,e,r),{subprocess:f,promise:p}=SUe({file:i,commandArguments:o,options:u,startTime:c,verboseInfo:l,command:s,escapedCommand:a,fileDescriptors:d});return f.pipe=bx.bind(void 0,{source:f,sourcePromise:p,boundOptions:{},createNested:n}),_ne(f,p),lo.set(f,{options:u,fileDescriptors:d}),f},_Ue=(t,e,r)=>{let{command:n,escapedCommand:i,startTime:o,verboseInfo:s}=kA(t,e,r),{file:a,commandArguments:c,options:l}=QA(t,e,r),u=yUe(l),d=Cre(u,s);return{file:a,commandArguments:c,command:n,escapedCommand:i,startTime:o,verboseInfo:s,options:u,fileDescriptors:d}},yUe=({timeout:t,signal:e,...r})=>{if(e!==void 0)throw new TypeError('The "signal" option has been renamed to "cancelSignal" instead.');return{...r,timeoutDuration:t}},SUe=({file:t,commandArguments:e,options:r,startTime:n,verboseInfo:i,command:o,escapedCommand:s,fileDescriptors:a})=>{let c;try{c=gUe(...ex(t,e,r))}catch(h){return xre({error:h,command:o,escapedCommand:s,fileDescriptors:a,options:r,startTime:n,verboseInfo:i})}let l=new AbortController;mUe(Number.POSITIVE_INFINITY,l.signal);let u=[...c.stdio];Ure(c,a,l),Bre(c,r,l);let d={},f=co();c.kill=eee.bind(void 0,{kill:c.kill.bind(c),options:r,onInternalError:f,context:d,controller:l}),c.all=ene(c,r),gne(c,r),Tre(c,r);let p=EUe({subprocess:c,options:r,startTime:n,verboseInfo:i,fileDescriptors:a,originalStreams:u,command:o,escapedCommand:s,context:d,onInternalError:f,controller:l});return{subprocess:c,promise:p}},EUe=async({subprocess:t,options:e,startTime:r,verboseInfo:n,fileDescriptors:i,originalStreams:o,command:s,escapedCommand:a,context:c,onInternalError:l,controller:u})=>{let[d,[f,p],h,m,y]=await sne({subprocess:t,options:e,context:c,verboseInfo:n,fileDescriptors:i,originalStreams:o,onInternalError:l,controller:u});u.abort(),l.resolve();let T=h.map((S,I)=>ps(S,e,I)),b=ps(m,e,"all"),A=vUe({errorInfo:d,exitCode:f,signal:p,stdio:T,all:b,ipcOutput:y,context:c,options:e,command:s,escapedCommand:a,startTime:r});return hf(A,n,e)},vUe=({errorInfo:t,exitCode:e,signal:r,stdio:n,all:i,ipcOutput:o,context:s,options:a,command:c,escapedCommand:l,startTime:u})=>"error"in t?w_({error:t.error,command:c,escapedCommand:l,timedOut:s.terminationReason==="timeout",isCanceled:s.terminationReason==="cancel"||s.terminationReason==="gracefulCancel",isGracefullyCanceled:s.terminationReason==="gracefulCancel",isMaxBuffer:t.error instanceof uo,isForcefullyTerminated:s.isForcefullyTerminated,exitCode:e,signal:r,stdio:n,all:i,ipcOutput:o,options:a,startTime:u,isSync:!1}):cx({command:c,escapedCommand:l,stdio:n,all:i,ipcOutput:o,options:a,startTime:u});var Ix=(t,e)=>{let r=Object.fromEntries(Object.entries(e).map(([n,i])=>[n,TUe(n,t[n],i)]));return{...t,...r}},TUe=(t,e,r)=>bUe.has(t)&&kt(e)&&kt(r)?{...e,...r}:r,bUe=new Set(["env",...KD]);var Na=(t,e,r,n)=>{let i=(s,a,c)=>Na(s,a,r,c),o=(...s)=>AUe({mapArguments:t,deepOptions:r,boundOptions:e,setBoundExeca:n,createNested:i},...s);return n!==void 0&&n(o,i,e),o},AUe=({mapArguments:t,deepOptions:e={},boundOptions:r={},setBoundExeca:n,createNested:i},o,...s)=>{if(kt(o))return i(t,Ix(r,o),n);let{file:a,commandArguments:c,options:l,isSync:u}=xUe({mapArguments:t,firstArgument:o,nextArguments:s,deepOptions:e,boundOptions:r});return u?gre(a,c,l):yne(a,c,l,i)},xUe=({mapArguments:t,firstArgument:e,nextArguments:r,deepOptions:n,boundOptions:i})=>{let o=CQ(e)?PQ(e,r):[e,...r],[s,a,c]=TA(...o),l=Ix(Ix(n,i),c),{file:u=s,commandArguments:d=a,options:f=l,isSync:p=!1}=t({file:s,commandArguments:a,options:l});return{file:u,commandArguments:d,options:f,isSync:p}};var Sne=({file:t,commandArguments:e})=>vne(t,e),Ene=({file:t,commandArguments:e})=>({...vne(t,e),isSync:!0}),vne=(t,e)=>{if(e.length>0)throw new TypeError(`The command and its arguments must be passed as a single string: ${t} ${e}.`);let[r,...n]=wUe(t);return{file:r,commandArguments:n}},wUe=t=>{if(typeof t!="string")throw new TypeError(`The command must be a string: ${String(t)}.`);let e=t.trim();if(e==="")return[];let r=[];for(let n of e.split(RUe)){let i=r.at(-1);i&&i.endsWith("\\")?r[r.length-1]=`${i.slice(0,-1)} ${n}`:r.push(n)}return r},RUe=/ +/g;var Tne=(t,e,r)=>{t.sync=e(IUe,r),t.s=t.sync},bne=({options:t})=>Ane(t),IUe=({options:t})=>({...Ane(t),isSync:!0}),Ane=t=>({options:{...CUe(t),...t}}),CUe=({input:t,inputFile:e,stdio:r})=>t===void 0&&e===void 0&&r===void 0?{stdin:"inherit"}:{},xne={preferLocal:!0};var wne=Na(()=>({})),cbt=Na(()=>({isSync:!0})),Rne=Na(Sne),lbt=Na(Ene),ubt=Na($ee),dbt=Na(bne,{},xne,Tne),{sendMessage:fbt,getOneMessage:pbt,getEachMessage:hbt,getCancelSignal:mbt}=bre();var Ine=!1,Cne=()=>{Ine=!0},po=()=>Ine;var k_=null,Pne=t=>(k_&&k_.destroy(),k_=new hs({totalAllowedTime:t}),k_),One=()=>k_;var hs=class{constructor({totalAllowedTime:e}){this.withStageTimer=async(e,r,n,{interruptible:i=!0}={})=>{if(this.isTimeExpired())throw new Error(`${e} stage did not complete in the allowed time. Time has already expired.`);if(i&&po())throw new Error(`Aborting ${e} stage \u2014 shutting down`);let o=this.onTimesUp(()=>{throw new Error(`${e} stage did not complete in the allowed time.`)}),s=null,a=null;n!==void 0&&(a=new Promise((u,d)=>{s=setTimeout(()=>{d(new Error(`${e} stage exceeded its maximum duration of ${n}ms`))},n)}));let c=Date.now(),l="success";try{return await mA({stage:e},async()=>a?await Promise.race([r(),a]):await r())}catch(u){throw l="failure",u}finally{ue.timing("stage.duration",Date.now()-c,{stage:e,outcome:l}),o(),s&&clearTimeout(s)}};this.startTime=Date.now(),this.totalAllowedTime=e,this.globalTimeoutId=null,this.subscribers=[],this.hasTimedOut=!1,this.setupGlobalTimeout()}getElapsedTime(){return Date.now()-this.startTime}getRemainingTime(){let e=this.getElapsedTime(),r=this.totalAllowedTime-e;return Math.max(0,r)}isTimeExpired(){return this.getRemainingTime()===0||this.hasTimedOut}setupGlobalTimeout(){this.globalTimeoutId&&clearTimeout(this.globalTimeoutId),this.globalTimeoutId=setTimeout(()=>{this.notifyTimeUp()},this.totalAllowedTime)}notifyTimeUp(){this.hasTimedOut=!0;for(let e=this.subscribers.length-1;e>=0;e--)try{this.subscribers[e]()}catch(r){console.error("TimeKeeper: Error in time up callback:",r)}}onTimesUp(e){if(this.subscribers.push(e),this.hasTimedOut)try{e()}catch(r){console.error("TimeKeeper: Error in time up callback:",r)}return()=>{let r=this.subscribers.indexOf(e);r>-1&&this.subscribers.splice(r,1)}}off(e){let r=this.subscribers.indexOf(e);r>-1&&this.subscribers.splice(r,1)}clearSubscribers(){this.subscribers.length=0}getSubscriberCount(){return this.subscribers.length}destroy(){this.globalTimeoutId&&(clearTimeout(this.globalTimeoutId),this.globalTimeoutId=null),this.clearSubscribers()}static{this.timeUnits={seconds:e=>e*1e3,minutes:e=>e*60*1e3,hours:e=>e*60*60*1e3}}};var Nne={name:"@netlify/agent-runner-cli",type:"module",version:"1.154.0-xhigh.0",description:"CLI tool for running Netlify agents",main:"./dist/index.js",types:"./dist/index.d.ts",exports:"./dist/index.js",bin:{"agent-runner-cli":"./dist/bin.js","agent-runner-cli-local":"./dist/bin-local.js"},files:["dist/**/*.js","dist/**/*.d.ts","dist/skills/**","patches","scripts"],scripts:{build:"tsup",dev:"tsup --watch",prepare:"husky install node_modules/@netlify/eslint-config-node/.husky/",prepublishOnly:"npm ci && npm test",prepack:"npm run build",test:"run-s build format test:dev",format:"run-s build format:check-fix:*","format:ci":"run-s build format:check:*","format:check-fix:lint":"run-e format:check:lint format:fix:lint","format:check:lint":'eslint --cache --format=codeframe --max-warnings=0 "{src,scripts,test,.github}/**/*.{js,ts,md,html}"',"format:fix:lint":'eslint --fix --cache --format=codeframe --max-warnings=0 "{src,scripts,test,.github}/**/*.{js,ts,md,html}"',"format:check-fix:prettier":"run-e format:check:prettier format:fix:prettier","format:check:prettier":'prettier --check --ignore-path .gitignore --loglevel=warn "{src,scripts,test,.github}/**/*.{js,ts,md,yml,json,html}" "*.{js,ts,yml,json,html}" ".*.{js,ts,yml,json,html}" "!**/package-lock.json" "!package-lock.json" "!src/skills/**/*.md"',"format:fix:prettier":'prettier --write --ignore-path .gitignore --loglevel=warn "{src,scripts,test,.github}/**/*.{js,ts,md,yml,json,html}" "*.{js,ts,yml,json,html}" ".*.{js,ts,yml,json,html}" "!**/package-lock.json" "!package-lock.json" "!src/skills/**/*.md"',"test:dev":"run-s build test:dev:*","test:ci":"run-s build test:ci:*","test:dev:vitest":"LOG=0 vitest --exclude '**/integration/**'","test:ci:vitest":"LOG=0 vitest run --coverage --exclude '**/integration/**'","test:smoke":"node scripts/smoke-dist.js","test:integration":"vitest run test/integration/","test:integration:codex":"vitest run test/integration/codex.test.ts","test:integration:claude":"vitest run test/integration/claude.test.ts","test:integration:gemini":"vitest run test/integration/gemini.test.ts","test:integration:skill-invocation":"vitest run test/integration/skill-invocation.test.ts","check:types":"tsc --noEmit",postinstall:"node scripts/postinstall.js"},keywords:[],license:"MIT",repository:"netlify/agent-runner-cli",bugs:{url:"https://github.com/netlify/agent-runner-cli/issues"},author:"Netlify Inc.",directories:{test:"test"},devDependencies:{"@commitlint/cli":"^20.0.0","@commitlint/config-conventional":"^20.0.0","@eslint/compat":"^2.0.0","@eslint/js":"^10.0.1","@netlify/axis":"^1.17.2","@netlify/eslint-config-node":"^7.0.1","@types/node":"^24.5.0","@typescript-eslint/eslint-plugin":"^8.0.0","@typescript-eslint/parser":"^8.0.0","@vitest/coverage-v8":"^4.1.5","@vitest/eslint-plugin":"^1.6.6",eslint:"^10.5.0","eslint-config-prettier":"^10.1.8","eslint-plugin-n":"^17.0.0",husky:"^9.0.0",jiti:"^2.7.0","patch-package":"^8.0.0",tsup:"^8.5.0",typescript:"^5.0.0","typescript-eslint":"^8.44.0",vitest:"^4.0.16"},dependencies:{"@anthropic-ai/claude-code":"^2.1.219","@anthropic-ai/sdk":"0.91.1","@google/gemini-cli":"0.42.0","@modelcontextprotocol/sdk":"^1.29.0","@netlify/cache-utils":"^6.0.5","@netlify/database-proxy":"^0.1.5","@netlify/otel":"^6.0.5","@netlify/ts-cli":"^1.2.0","@openai/codex":"0.128.0","@opentelemetry/api":"^1.9.0","@opentelemetry/exporter-trace-otlp-grpc":"0.218.0",execa:"^9.6.1",fastify:"5.8.5",minimist:"^1.2.8",openai:"6.34.0",zod:"^4.4.3"}};var kUe=OUe(import.meta.url),MUe=ms.dirname(kUe),DUe=NUe(import.meta.url),yf=pe("shell"),E$=new Set,kne={preferLocal:!0},Mr=(t,e,r)=>{let[n,i]=LUe(e,r),o={...kne,...i},s=wne(t,n,o);Dne(s,o),Une(s);let a=r?.idleTimeout;return a&&a>0&&$ne(s,a),s},Mne=(t,e)=>{let r={...kne,...e},n=Rne(t,r);return Dne(n,r),Une(n),e?.idleTimeout&&e.idleTimeout>0&&$ne(n,e.idleTimeout),n},LUe=function(t,e){return Array.isArray(t)?[t,e]:typeof t=="object"&&t!==null?[[],t]:[[],void 0]},Dne=(t,e)=>{if(e.stdio!==void 0||e.stdout!==void 0||e.stderr!==void 0)return;if(gs.env.NETLIFY_MASK_LOGS!=="false"){t.stdout?.pipe(new a_).pipe(gs.stdout),t.stderr?.pipe(new a_).pipe(gs.stderr);return}t.stdout?.pipe(gs.stdout),t.stderr?.pipe(gs.stderr)},v$=(t,e="SIGTERM")=>{try{return t.pid&&!t.killed?(gs.kill(-t.pid,e),yf.log(`Killed process ${t.pid} with signal ${e}`),!0):!1}catch(r){return yf.error("Error killing process:",r),!1}},Lne=t=>v$(t,"SIGKILL"),$ne=(t,e)=>{let r=null,n=()=>{yf.log(`Process ${t.pid} killed due to idle timeout (no output for ${e}ms)`),v$(t,"SIGTERM"),setTimeout(()=>{t.pid&&!t.killed&&(yf.log(`Force killing idle process ${t.pid}`),Lne(t))},5e3)},i=()=>{r&&clearTimeout(r),r=setTimeout(n,e)};i(),t.stdout?.on("data",i),t.stderr?.on("data",i);let o=()=>{r&&(clearTimeout(r),r=null)};t.on("exit",o),t.on("error",o)},Une=t=>{E$.add(t);let e=One();if(e){let r=e.onTimesUp(()=>{yf.log(`Global timer expired, killing process ${t.pid}`),v$(t,"SIGTERM"),setTimeout(()=>{t.pid&&!t.killed&&(yf.log(`Force killing process ${t.pid} after timeout`),Lne(t))},5e3)});t.on("exit",()=>{E$.delete(t),r()}),t.on("error",()=>{E$.delete(t),r()})}};function ho(t,e){if(!gs.env.NETLIFY_LOCAL_MODE)try{let i=DUe.resolve(Nne.name),o=ms.dirname(i);for(;o!==ms.dirname(o);){let s=ms.dirname(o);if(ms.basename(s)==="node_modules"){let a=ms.join(s,".bin",e);if(Cx.existsSync(a))return a;break}o=s}}catch(i){console.error("Could not resolve package.json",i)}if(gs.env.NODE_PATH){let i=ms.join(gs.env.NODE_PATH,".bin",e);if(Cx.existsSync(i))return i}let r=ms.join(t,"node_modules",".bin",e);if(Cx.existsSync(r))return r;let n=ms.join(MUe,"..","node_modules",".bin",e);if(Cx.existsSync(n))return n}var $Ue=pe("utils"),UUe=t=>new Promise(e=>{setTimeout(e,t)});var T$=t=>{try{return new URL(t).hostname||null}catch{return null}},Px=(t,e=3e3)=>{let r=!1,n=null,i=[],o=null,s=(...a)=>{if(r)return n=a,new Promise(u=>{i.push(u)});r=!0;let c,l=new Promise(u=>{c=u});return o=(async()=>{await Promise.resolve();let u=await t(...a);for(c(u);;){if(await UUe(e),!n)return r=!1,o=null,u;let d=n,f=i;n=null,i=[],u=await t(...d),f.forEach(p=>{p(u)})}})(),l};return s.flush=async()=>{if((r||n)&&o)return await o,s.flush()},s.cancel=()=>{n=null,i.forEach(a=>a(void 0)),i=[]},s},ka=(t,e,r=!1)=>{let n=null,i=null,o=null,s=function(...a){i=a,o=this;let c=r&&!n;clearTimeout(n),n=setTimeout(()=>{n=null,r||(t.apply(o,i),i=null,o=null)},e),c&&(t.apply(o,i),i=null,o=null)};return s.cancel=()=>{clearTimeout(n),n=null,i=null,o=null},s.flush=()=>{if(n){clearTimeout(n);let a=i,c=o;n=null,i=null,o=null,t.apply(c,a)}},s},Fne=(t,e=!0,r)=>{if(t)try{return JSON.parse(t)}catch(n){e&&(r?.error?r.error("Could not parse JSON",n):$Ue.error("Could not parse JSON",n))}},FUe=t=>t.charAt(0).toUpperCase()+t.slice(1),mo=t=>t.split("-").map(e=>e.length===2?e.toUpperCase():FUe(e)).join(" ");function _s(t,e){e&&t.log(`Skill invoked: ${e}`)}var Ox=t=>Object.fromEntries(Object.entries(t).filter(([,e])=>e!==void 0)),Bne=(t,e,r=!1)=>{if(r)return;let n=60,i=55,o=".netlify.app",s="agent-",a=6;if(!e)return`${s}${t.slice(0,a)}`;let c=`--${e}${o}`;if(c.length>i)return"";let l=n-c.length;if(l<=0)return"";if(l>=s.length+a){let u=Math.min(l-s.length,t.length);return`${s}${t.slice(0,u)}`}return t.slice(0,l)};var b$=t=>{let e=t.match(/<<-?\s*['"]?(\w+)['"]?/);if(!e)return{command:t};let r=t.indexOf(e[0]),n=t.slice(r+e[0].length).trim();return{command:t.slice(0,r).trim(),heredocContent:n||void 0}},BUe=1e4,A$=(t,e=BUe)=>{if(!t||typeof t!="string"||t.length<=e)return t;let n=t.startsWith("```")?"\n... [truncated]\n```":"... [truncated]";return t.slice(0,e)+n};import{createHash as jUe}from"crypto";import{createReadStream as zUe}from"fs";import Nx from"fs/promises";import qne from"os";import kx from"path";var jne=pe("repo"),Hne="runner-diffs-",Wne=t=>`${Hne}${t}-`,Yne=async t=>{let e=qne.tmpdir(),r;try{r=await Nx.readdir(e)}catch{return}await Promise.all(r.filter(n=>n.startsWith(Hne)&&!n.startsWith(Wne(t))).map(n=>Nx.rm(kx.join(e,n),{recursive:!0,force:!0}).catch(()=>{})))},Zr=(t,e={})=>Mr("git",t,{...e,env:{...e.env,NETLIFY_INTERNAL_GIT:"1"}}),Mx=async({config:t,isRetry:e,cwd:r=process.cwd()})=>{jne.info("Getting runner diffs");let n=await VUe(r),{hasChanges:i}=n,{status:o}=n;if(!i)return{hasChanges:!1};if(!e){let h=HUe(o);await WUe(h,r)}jne.info("Changes after processing"),await w$(r);let s=await I$(o,r);if(await x$(s,r),i=await qUe(r),!i)return{hasChanges:!1,ignored:s};await Zr(["commit","-m","Agent runner [skip ci]"],{cwd:r});let a=await Nx.mkdtemp(kx.join(qne.tmpdir(),Wne(t.sessionId))),c=async({from:h,to:m,fileName:y,binary:T})=>{let b=kx.join(a,y);await Zr([...T?["diff",h,m,"--binary"]:["diff",h,m],`--output=${b}`],{stdio:["ignore","ignore","pipe"],cwd:r});let{size:S}=await Nx.stat(b);return{path:b,size:S}},l=await c({from:t.runSha,to:"HEAD",fileName:"session.patch"});if(i=l.size>0,!i)return await Vne(r),{hasChanges:!1,ignored:s};let u=await c({from:t.runSha,to:"HEAD",fileName:"session-binary.patch",binary:!0}),d,f;if(t.sha){d=await c({from:t.sha,to:"HEAD",fileName:"cumulative.patch"});let h=await c({from:t.sha,to:"HEAD",fileName:"cumulative-binary.patch",binary:!0});await Gne(d,h)||(f=h)}await Vne(r),ue.distribution("diff.size",u.size);let p={hasChanges:!0,diff:l,resultDiff:d,ignored:s};return await Gne(l,u)||(p.diffBinary=u),f&&(p.resultDiffBinary=f),p},zne=async t=>{let e=jUe("sha256");for await(let r of zUe(t))e.update(r);return e.digest("hex")},Gne=async(t,e)=>t.size===e.size&&await zne(t.path)===await zne(e.path),Vne=async(t=process.cwd())=>{process.env.NETLIFY_LOCAL_MODE&&await Zr(["reset","--soft","HEAD~1"],{cwd:t})},x$=async(t=[],e=process.cwd())=>{await Zr(["add",".",...t],{cwd:e})},w$=async(t=process.cwd())=>{let e=await Zr(["status","-s"],{cwd:t});return String(e.stdout??"")},Kne=/.. (.+)?\.log$/,GUe=[Kne],VUe=async(t=process.cwd())=>{let e=await w$(t);return{hasChanges:(e.trim().length===0?[]:e.split(`
101
+ if (condition) { yield value; }`)};import{Buffer as YLe}from"buffer";import{StringDecoder as KLe}from"string_decoder";var hx=(t,e,r)=>{if(r)return;if(t)return{transform:ZLe.bind(void 0,new TextEncoder)};let n=new KLe(e);return{transform:JLe.bind(void 0,n),final:XLe.bind(void 0,n)}},ZLe=function*(t,e){YLe.isBuffer(e)?yield us(e):typeof e=="string"?yield t.encode(e):yield e},JLe=function*(t,e){yield zt(e)?t.write(e):e},XLe=function*(t){let e=t.end();e!==""&&(yield e)};import{callbackify as ere}from"util";var $L=ere(async(t,e,r,n)=>{e.currentIterable=t(...r);try{for await(let i of e.currentIterable)n.push(i)}finally{delete e.currentIterable}}),mx=async function*(t,e,r){if(r===e.length){yield t;return}let{transform:n=e$e}=e[r];for await(let i of n(t))yield*mx(i,e,r+1)},tre=async function*(t){for(let[e,{final:r}]of Object.entries(t))yield*QLe(r,Number(e),t)},QLe=async function*(t,e,r){if(t!==void 0)for await(let n of t())yield*mx(n,r,e+1)},rre=ere(async({currentIterable:t},e)=>{if(t!==void 0){await(e?t.throw(e):t.return());return}if(e)throw e}),e$e=function*(t){yield t};var UL=(t,e,r,n)=>{try{for(let i of t(...e))r.push(i);n()}catch(i){n(i)}},nre=(t,e)=>[...e.flatMap(r=>[...wl(r,t,0)]),...R_(t)],wl=function*(t,e,r){if(r===e.length){yield t;return}let{transform:n=r$e}=e[r];for(let i of n(t))yield*wl(i,e,r+1)},R_=function*(t){for(let[e,{final:r}]of Object.entries(t))yield*t$e(r,Number(e),t)},t$e=function*(t,e,r){if(t!==void 0)for(let n of t())yield*wl(n,r,e+1)},r$e=function*(t){yield t};var FL=({value:t,value:{transform:e,final:r,writableObjectMode:n,readableObjectMode:i},optionName:o},{encoding:s})=>{let a={},c=ore(t,s,o),l=xl(e),u=xl(r),d=l?$L.bind(void 0,mx,a):UL.bind(void 0,wl),f=l||u?$L.bind(void 0,tre,a):UL.bind(void 0,R_),p=l||u?rre.bind(void 0,a):void 0;return{stream:new n$e({writableObjectMode:n,writableHighWaterMark:ire(n),readableObjectMode:i,readableHighWaterMark:ire(i),transform(m,y,T){d([m,c,0],this,T)},flush(m){f([c],this,m)},destroy:p})}},gx=(t,e,r,n)=>{let i=e.filter(({type:s})=>s==="generator"),o=n?i.reverse():i;for(let{value:s,optionName:a}of o){let c=ore(s,r,a);t=nre(c,t)}return t},ore=({transform:t,final:e,binary:r,writableObjectMode:n,readableObjectMode:i,preserveNewlines:o},s,a)=>{let c={};return[{transform:Jte(n,a)},hx(r,s,n),px(r,o,n,c),{transform:t,final:e},{transform:Xte(i,a)},Zte({binary:r,preserveNewlines:o,readableObjectMode:i,state:c})].filter(Boolean)};var sre=(t,e)=>{for(let r of i$e(t))o$e(t,r,e)},i$e=t=>new Set(Object.entries(t).filter(([,{direction:e}])=>e==="input").map(([e])=>Number(e))),o$e=(t,e,r)=>{let{stdioItems:n}=t[e],i=n.filter(({contents:a})=>a!==void 0);if(i.length===0)return;if(e!==0){let[{type:a,optionName:c}]=i;throw new TypeError(`Only the \`stdin\` option, not \`${c}\`, can be ${Oa[a]} with synchronous methods.`)}let s=i.map(({contents:a})=>a).map(a=>s$e(a,n));r.input=__(s)},s$e=(t,e)=>{let r=gx(t,e,"utf8",!0);return a$e(r),__(r)},a$e=t=>{let e=t.find(r=>typeof r!="string"&&!zt(r));if(e!==void 0)throw new TypeError(`The \`stdin\` option is invalid: when passing objects as input, a transform must be used to serialize them to strings or Uint8Arrays: ${e}.`)};import{writeFileSync as d$e,appendFileSync as f$e}from"fs";var _x=({stdioItems:t,encoding:e,verboseInfo:r,fdNumber:n})=>n!=="all"&&nf(r,n)&&!gn.has(e)&&c$e(n)&&(t.some(({type:i,value:o})=>i==="native"&&l$e.has(o))||t.every(({type:i})=>qn.has(i))),c$e=t=>t===1||t===2,l$e=new Set(["pipe","overlapped"]),are=async(t,e,r,n)=>{for await(let i of t)u$e(e)||lre(i,r,n)},cre=(t,e,r)=>{for(let n of t)lre(n,e,r)},u$e=t=>t._readableState.pipes.length>0,lre=(t,e,r)=>{let n=OA(t);ao({type:"output",verboseMessage:n,fdNumber:e,verboseInfo:r})};var ure=({fileDescriptors:t,syncResult:{output:e},options:r,isMaxBuffer:n,verboseInfo:i})=>{if(e===null)return{output:Array.from({length:3})};let o={},s=new Set([]);return{output:e.map((c,l)=>p$e({result:c,fileDescriptors:t,fdNumber:l,state:o,outputFiles:s,isMaxBuffer:n,verboseInfo:i},r)),...o}},p$e=({result:t,fileDescriptors:e,fdNumber:r,state:n,outputFiles:i,isMaxBuffer:o,verboseInfo:s},{buffer:a,encoding:c,lines:l,stripFinalNewline:u,maxBuffer:d})=>{if(t===null)return;let f=dte(t,o,d),p=us(f),{stdioItems:h,objectMode:m}=e[r],y=h$e([p],h,c,n),{serializedResult:T,finalResult:b=T}=m$e({chunks:y,objectMode:m,encoding:c,lines:l,stripFinalNewline:u,fdNumber:r});g$e({serializedResult:T,fdNumber:r,state:n,verboseInfo:s,encoding:c,stdioItems:h,objectMode:m});let A=a[r]?b:void 0;try{return n.error===void 0&&_$e(T,h,i),A}catch(S){return n.error=S,A}},h$e=(t,e,r,n)=>{try{return gx(t,e,r,!1)}catch(i){return n.error=i,t}},m$e=({chunks:t,objectMode:e,encoding:r,lines:n,stripFinalNewline:i,fdNumber:o})=>{if(e)return{serializedResult:t};if(r==="buffer")return{serializedResult:__(t)};let s=xQ(t,r);return n[o]?{serializedResult:s,finalResult:LL(s,!i[o],e)}:{serializedResult:s}},g$e=({serializedResult:t,fdNumber:e,state:r,verboseInfo:n,encoding:i,stdioItems:o,objectMode:s})=>{if(!_x({stdioItems:o,encoding:i,verboseInfo:n,fdNumber:e}))return;let a=LL(t,!1,s);try{cre(a,e,n)}catch(c){r.error??=c}},_$e=(t,e,r)=>{for(let{path:n,append:i}of e.filter(({type:o})=>dx.has(o))){let o=typeof n=="string"?n:n.toString();i||r.has(o)?f$e(n,t):(r.add(o),d$e(n,t))}};var dre=([,t,e],r)=>{if(r.all)return t===void 0?e:e===void 0?t:Array.isArray(t)?Array.isArray(e)?[...t,...e]:[...t,ps(e,r,"all")]:Array.isArray(e)?[ps(t,r,"all"),...e]:zt(t)&&zt(e)?qD([t,e]):`${t}${e}`};import{once as BL}from"events";var fre=async(t,e)=>{let[r,n]=await y$e(t);return e.isForcefullyTerminated??=!1,[r,n]},y$e=async t=>{let[e,r]=await Promise.allSettled([BL(t,"spawn"),BL(t,"exit")]);return e.status==="rejected"?[]:r.status==="rejected"?pre(t):r.value},pre=async t=>{try{return await BL(t,"exit")}catch{return pre(t)}},hre=async t=>{let[e,r]=await t;if(!S$e(e,r)&&jL(e,r))throw new Ai;return[e,r]},S$e=(t,e)=>t===void 0&&e===void 0,jL=(t,e)=>t!==0||e!==null;var mre=({error:t,status:e,signal:r,output:n},{maxBuffer:i})=>{let o=E$e(t,e,r),s=o?.code==="ETIMEDOUT",a=ute(o,n,i);return{resultError:o,exitCode:e,signal:r,timedOut:s,isMaxBuffer:a}},E$e=(t,e,r)=>t!==void 0?t:jL(e,r)?new Ai:void 0;var gre=(t,e,r)=>{let{file:n,commandArguments:i,command:o,escapedCommand:s,startTime:a,verboseInfo:c,options:l,fileDescriptors:u}=T$e(t,e,r),d=x$e({file:n,commandArguments:i,options:l,command:o,escapedCommand:s,verboseInfo:c,fileDescriptors:u,startTime:a});return hf(d,c,l)},T$e=(t,e,r)=>{let{command:n,escapedCommand:i,startTime:o,verboseInfo:s}=kA(t,e,r),a=b$e(r),{file:c,commandArguments:l,options:u}=QA(t,e,a);A$e(u);let d=Hte(u,s);return{file:c,commandArguments:l,command:n,escapedCommand:i,startTime:o,verboseInfo:s,options:u,fileDescriptors:d}},b$e=t=>t.node&&!t.ipc?{...t,ipc:!1}:t,A$e=({ipc:t,ipcInput:e,detached:r,cancelSignal:n})=>{e&&yx("ipcInput"),t&&yx("ipc: true"),r&&yx("detached: true"),n&&yx("cancelSignal")},yx=t=>{throw new TypeError(`The "${t}" option cannot be used with synchronous methods.`)},x$e=({file:t,commandArguments:e,options:r,command:n,escapedCommand:i,verboseInfo:o,fileDescriptors:s,startTime:a})=>{let c=w$e({file:t,commandArguments:e,options:r,command:n,escapedCommand:i,fileDescriptors:s,startTime:a});if(c.failed)return c;let{resultError:l,exitCode:u,signal:d,timedOut:f,isMaxBuffer:p}=mre(c,r),{output:h,error:m=l}=ure({fileDescriptors:s,syncResult:c,options:r,isMaxBuffer:p,verboseInfo:o}),y=h.map((b,A)=>ps(b,r,A)),T=ps(dre(h,r),r,"all");return I$e({error:m,exitCode:u,signal:d,timedOut:f,isMaxBuffer:p,stdio:y,all:T,options:r,command:n,escapedCommand:i,startTime:a})},w$e=({file:t,commandArguments:e,options:r,command:n,escapedCommand:i,fileDescriptors:o,startTime:s})=>{try{sre(o,r);let a=R$e(r);return v$e(...ex(t,e,a))}catch(a){return pf({error:a,command:n,escapedCommand:i,fileDescriptors:o,options:r,startTime:s,isSync:!0})}},R$e=({encoding:t,maxBuffer:e,...r})=>({...r,encoding:"buffer",maxBuffer:ax(e)}),I$e=({error:t,exitCode:e,signal:r,timedOut:n,isMaxBuffer:i,stdio:o,all:s,options:a,command:c,escapedCommand:l,startTime:u})=>t===void 0?cx({command:c,escapedCommand:l,stdio:o,all:s,ipcOutput:[],options:a,startTime:u}):w_({error:t,command:c,escapedCommand:l,timedOut:n,isCanceled:!1,isGracefullyCanceled:!1,isMaxBuffer:i,isForcefullyTerminated:!1,exitCode:e,signal:r,stdio:o,all:s,ipcOutput:[],options:a,startTime:u,isSync:!0});import{setMaxListeners as mUe}from"events";import{spawn as gUe}from"child_process";import vre from"process";import{once as zL,on as C$e}from"events";var _re=({anyProcess:t,channel:e,isSubprocess:r,ipc:n},{reference:i=!0,filter:o}={})=>(af({methodName:"getOneMessage",isSubprocess:r,ipc:n,isConnected:WA(t)}),P$e({anyProcess:t,channel:e,isSubprocess:r,filter:o,reference:i})),P$e=async({anyProcess:t,channel:e,isSubprocess:r,filter:n,reference:i})=>{GA(e,i);let o=Pa(t,e,r),s=new AbortController;try{return await Promise.race([O$e(o,n,s),N$e(o,r,s),k$e(o,r,s)])}catch(a){throw cf(t),a}finally{s.abort(),VA(e,i)}},O$e=async(t,e,{signal:r})=>{if(e===void 0){let[n]=await zL(t,"message",{signal:r});return n}for await(let[n]of C$e(t,"message",{signal:r}))if(e(n))return n},N$e=async(t,e,{signal:r})=>{await zL(t,"disconnect",{signal:r}),nee(e)},k$e=async(t,e,{signal:r})=>{let[n]=await zL(t,"strict:error",{signal:r});throw BA(n,e)};import{once as Sre,on as M$e}from"events";var Ere=({anyProcess:t,channel:e,isSubprocess:r,ipc:n},{reference:i=!0}={})=>GL({anyProcess:t,channel:e,isSubprocess:r,ipc:n,shouldAwait:!r,reference:i}),GL=({anyProcess:t,channel:e,isSubprocess:r,ipc:n,shouldAwait:i,reference:o})=>{af({methodName:"getEachMessage",isSubprocess:r,ipc:n,isConnected:WA(t)}),GA(e,o);let s=Pa(t,e,r),a=new AbortController,c={};return D$e(t,s,a),L$e({ipcEmitter:s,isSubprocess:r,controller:a,state:c}),$$e({anyProcess:t,channel:e,ipcEmitter:s,isSubprocess:r,shouldAwait:i,controller:a,state:c,reference:o})},D$e=async(t,e,r)=>{try{await Sre(e,"disconnect",{signal:r.signal}),r.abort()}catch{}},L$e=async({ipcEmitter:t,isSubprocess:e,controller:r,state:n})=>{try{let[i]=await Sre(t,"strict:error",{signal:r.signal});n.error=BA(i,e),r.abort()}catch{}},$$e=async function*({anyProcess:t,channel:e,ipcEmitter:r,isSubprocess:n,shouldAwait:i,controller:o,state:s,reference:a}){try{for await(let[c]of M$e(r,"message",{signal:o.signal}))yre(s),yield c}catch{yre(s)}finally{o.abort(),VA(e,a),n||cf(t),i&&await t}},yre=({error:t})=>{if(t)throw t};var Tre=(t,{ipc:e})=>{Object.assign(t,Are(t,!1,e))},bre=()=>{let t=vre,e=!0,r=vre.channel!==void 0;return{...Are(t,e,r),getCancelSignal:Pee.bind(void 0,{anyProcess:t,channel:t.channel,isSubprocess:e,ipc:r})}},Are=(t,e,r)=>({sendMessage:JA.bind(void 0,{anyProcess:t,channel:t.channel,isSubprocess:e,ipc:r}),getOneMessage:_re.bind(void 0,{anyProcess:t,channel:t.channel,isSubprocess:e,ipc:r}),getEachMessage:Ere.bind(void 0,{anyProcess:t,channel:t.channel,isSubprocess:e,ipc:r})});import{ChildProcess as U$e}from"child_process";import{PassThrough as F$e,Readable as B$e,Writable as j$e,Duplex as z$e}from"stream";var xre=({error:t,command:e,escapedCommand:r,fileDescriptors:n,options:i,startTime:o,verboseInfo:s})=>{kL(n);let a=new U$e;G$e(a,n),Object.assign(a,{readable:V$e,writable:q$e,duplex:H$e});let c=pf({error:t,command:e,escapedCommand:r,fileDescriptors:n,options:i,startTime:o,isSync:!1}),l=W$e(c,s,i);return{subprocess:a,promise:l}},G$e=(t,e)=>{let r=I_(),n=I_(),i=I_(),o=Array.from({length:e.length-3},I_),s=I_(),a=[r,n,i,...o];Object.assign(t,{stdin:r,stdout:n,stderr:i,all:s,stdio:a})},I_=()=>{let t=new F$e;return t.end(),t},V$e=()=>new B$e({read(){}}),q$e=()=>new j$e({write(){}}),H$e=()=>new z$e({read(){},write(){}}),W$e=async(t,e,r)=>hf(t,e,r);import{createReadStream as wre,createWriteStream as Rre}from"fs";import{Buffer as Y$e}from"buffer";import{Readable as C_,Writable as K$e,Duplex as Z$e}from"stream";var Cre=(t,e)=>fx(J$e,t,e,!1),P_=({type:t,optionName:e})=>{throw new TypeError(`The \`${e}\` option cannot be ${Oa[t]}.`)},Ire={fileNumber:P_,generator:FL,asyncGenerator:FL,nodeStream:({value:t})=>({stream:t}),webTransform({value:{transform:t,writableObjectMode:e,readableObjectMode:r}}){let n=e||r;return{stream:Z$e.fromWeb(t,{objectMode:n})}},duplex:({value:{transform:t}})=>({stream:t}),native(){}},J$e={input:{...Ire,fileUrl:({value:t})=>({stream:wre(t)}),filePath:({value:{file:t}})=>({stream:wre(t)}),webStream:({value:t})=>({stream:C_.fromWeb(t)}),iterable:({value:t})=>({stream:C_.from(t)}),asyncIterable:({value:t})=>({stream:C_.from(t)}),string:({value:t})=>({stream:C_.from(t)}),uint8Array:({value:t})=>({stream:C_.from(Y$e.from(t))})},output:{...Ire,fileUrl:({value:t})=>({stream:Rre(t)}),filePath:({value:{file:t,append:e}})=>({stream:Rre(t,e?{flags:"a"}:{})}),webStream:({value:t})=>({stream:K$e.fromWeb(t)}),iterable:P_,asyncIterable:P_,string:P_,uint8Array:P_}};import{on as X$e,once as Pre}from"events";import{PassThrough as Q$e,getDefaultHighWaterMark as e1e}from"stream";import{finished as kre}from"stream/promises";function Rl(t){if(!Array.isArray(t))throw new TypeError(`Expected an array, got \`${typeof t}\`.`);for(let i of t)qL(i);let e=t.some(({readableObjectMode:i})=>i),r=t1e(t,e),n=new VL({objectMode:e,writableHighWaterMark:r,readableHighWaterMark:r});for(let i of t)n.add(i);return n}var t1e=(t,e)=>{if(t.length===0)return e1e(e);let r=t.filter(({readableObjectMode:n})=>n===e).map(({readableHighWaterMark:n})=>n);return Math.max(...r)},VL=class extends Q$e{#e=new Set([]);#r=new Set([]);#t=new Set([]);#n;#o=Symbol("unpipe");#i=new WeakMap;add(e){if(qL(e),this.#e.has(e))return;this.#e.add(e),this.#n??=r1e(this,this.#e,this.#o);let r=o1e({passThroughStream:this,stream:e,streams:this.#e,ended:this.#r,aborted:this.#t,onFinished:this.#n,unpipeEvent:this.#o});this.#i.set(e,r),e.pipe(this,{end:!1})}async remove(e){if(qL(e),!this.#e.has(e))return!1;let r=this.#i.get(e);return r===void 0?!1:(this.#i.delete(e),e.unpipe(this),await r,!0)}},r1e=async(t,e,r)=>{Sx(t,Ore);let n=new AbortController;try{await Promise.race([n1e(t,n),i1e(t,e,r,n)])}finally{n.abort(),Sx(t,-Ore)}},n1e=async(t,{signal:e})=>{try{await kre(t,{signal:e,cleanup:!0})}catch(r){throw Mre(t,r),r}},i1e=async(t,e,r,{signal:n})=>{for await(let[i]of X$e(t,"unpipe",{signal:n}))e.has(i)&&i.emit(r)},qL=t=>{if(typeof t?.pipe!="function")throw new TypeError(`Expected a readable stream, got: \`${typeof t}\`.`)},o1e=async({passThroughStream:t,stream:e,streams:r,ended:n,aborted:i,onFinished:o,unpipeEvent:s})=>{Sx(t,Nre);let a=new AbortController;try{await Promise.race([s1e(o,e,a),a1e({passThroughStream:t,stream:e,streams:r,ended:n,aborted:i,controller:a}),c1e({stream:e,streams:r,ended:n,aborted:i,unpipeEvent:s,controller:a})])}finally{a.abort(),Sx(t,-Nre)}r.size>0&&r.size===n.size+i.size&&(n.size===0&&i.size>0?HL(t):l1e(t))},s1e=async(t,e,{signal:r})=>{try{await t,r.aborted||HL(e)}catch(n){r.aborted||Mre(e,n)}},a1e=async({passThroughStream:t,stream:e,streams:r,ended:n,aborted:i,controller:{signal:o}})=>{try{await kre(e,{signal:o,cleanup:!0,readable:!0,writable:!1}),r.has(e)&&n.add(e)}catch(s){if(o.aborted||!r.has(e))return;Dre(s)?i.add(e):Lre(t,s)}},c1e=async({stream:t,streams:e,ended:r,aborted:n,unpipeEvent:i,controller:{signal:o}})=>{if(await Pre(t,i,{signal:o}),!t.readable)return Pre(o,"abort",{signal:o});e.delete(t),r.delete(t),n.delete(t)},l1e=t=>{t.writable&&t.end()},Mre=(t,e)=>{Dre(e)?HL(t):Lre(t,e)},Dre=t=>t?.code==="ERR_STREAM_PREMATURE_CLOSE",HL=t=>{(t.readable||t.writable)&&t.destroy()},Lre=(t,e)=>{t.destroyed||(t.once("error",u1e),t.destroy(e))},u1e=()=>{},Sx=(t,e)=>{let r=t.getMaxListeners();r!==0&&r!==Number.POSITIVE_INFINITY&&t.setMaxListeners(r+e)},Ore=2,Nre=1;import{finished as $re}from"stream/promises";var gf=(t,e)=>{t.pipe(e),d1e(t,e),f1e(t,e)},d1e=async(t,e)=>{if(!(bi(t)||bi(e))){try{await $re(t,{cleanup:!0,readable:!0,writable:!1})}catch{}WL(e)}},WL=t=>{t.writable&&t.end()},f1e=async(t,e)=>{if(!(bi(t)||bi(e))){try{await $re(e,{cleanup:!0,readable:!1,writable:!0})}catch{}YL(t)}},YL=t=>{t.readable&&t.destroy()};var Ure=(t,e,r)=>{let n=new Map;for(let[i,{stdioItems:o,direction:s}]of Object.entries(e)){for(let{stream:a}of o.filter(({type:c})=>qn.has(c)))p1e(t,a,s,i);for(let{stream:a}of o.filter(({type:c})=>!qn.has(c)))m1e({subprocess:t,stream:a,direction:s,fdNumber:i,pipeGroups:n,controller:r})}for(let[i,o]of n.entries()){let s=o.length===1?o[0]:Rl(o);gf(s,i)}},p1e=(t,e,r,n)=>{r==="output"?gf(t.stdio[n],e):gf(e,t.stdio[n]);let i=h1e[n];i!==void 0&&(t[i]=e),t.stdio[n]=e},h1e=["stdin","stdout","stderr"],m1e=({subprocess:t,stream:e,direction:r,fdNumber:n,pipeGroups:i,controller:o})=>{if(e===void 0)return;g1e(e,o);let[s,a]=r==="output"?[e,t.stdio[n]]:[t.stdio[n],e],c=i.get(s)??[];i.set(s,[...c,a])},g1e=(t,{signal:e})=>{bi(t)&&bl(t,_1e,e)},_1e=2;import{addAbortListener as E1e}from"events";var Il=[];Il.push("SIGHUP","SIGINT","SIGTERM");process.platform!=="win32"&&Il.push("SIGALRM","SIGABRT","SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");process.platform==="linux"&&Il.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT");var Ex=t=>!!t&&typeof t=="object"&&typeof t.removeListener=="function"&&typeof t.emit=="function"&&typeof t.reallyExit=="function"&&typeof t.listeners=="function"&&typeof t.kill=="function"&&typeof t.pid=="number"&&typeof t.on=="function",KL=Symbol.for("signal-exit emitter"),ZL=globalThis,y1e=Object.defineProperty.bind(Object),JL=class{emitted={afterExit:!1,exit:!1};listeners={afterExit:[],exit:[]};count=0;id=Math.random();constructor(){if(ZL[KL])return ZL[KL];y1e(ZL,KL,{value:this,writable:!1,enumerable:!1,configurable:!1})}on(e,r){this.listeners[e].push(r)}removeListener(e,r){let n=this.listeners[e],i=n.indexOf(r);i!==-1&&(i===0&&n.length===1?n.length=0:n.splice(i,1))}emit(e,r,n){if(this.emitted[e])return!1;this.emitted[e]=!0;let i=!1;for(let o of this.listeners[e])i=o(r,n)===!0||i;return e==="exit"&&(i=this.emit("afterExit",r,n)||i),i}},vx=class{},S1e=t=>({onExit(e,r){return t.onExit(e,r)},load(){return t.load()},unload(){return t.unload()}}),XL=class extends vx{onExit(){return()=>{}}load(){}unload(){}},QL=class extends vx{#e=e$.platform==="win32"?"SIGINT":"SIGHUP";#r=new JL;#t;#n;#o;#i={};#s=!1;constructor(e){super(),this.#t=e,this.#i={};for(let r of Il)this.#i[r]=()=>{let n=this.#t.listeners(r),{count:i}=this.#r,o=e;if(typeof o.__signal_exit_emitter__=="object"&&typeof o.__signal_exit_emitter__.count=="number"&&(i+=o.__signal_exit_emitter__.count),n.length===i){this.unload();let s=this.#r.emit("exit",null,r),a=r==="SIGHUP"?this.#e:r;s||e.kill(e.pid,a)}};this.#o=e.reallyExit,this.#n=e.emit}onExit(e,r){if(!Ex(this.#t))return()=>{};this.#s===!1&&this.load();let n=r?.alwaysLast?"afterExit":"exit";return this.#r.on(n,e),()=>{this.#r.removeListener(n,e),this.#r.listeners.exit.length===0&&this.#r.listeners.afterExit.length===0&&this.unload()}}load(){if(!this.#s){this.#s=!0,this.#r.count+=1;for(let e of Il)try{let r=this.#i[e];r&&this.#t.on(e,r)}catch{}this.#t.emit=(e,...r)=>this.#c(e,...r),this.#t.reallyExit=e=>this.#a(e)}}unload(){this.#s&&(this.#s=!1,Il.forEach(e=>{let r=this.#i[e];if(!r)throw new Error("Listener not defined for signal: "+e);try{this.#t.removeListener(e,r)}catch{}}),this.#t.emit=this.#n,this.#t.reallyExit=this.#o,this.#r.count-=1)}#a(e){return Ex(this.#t)?(this.#t.exitCode=e||0,this.#r.emit("exit",this.#t.exitCode,null),this.#o.call(this.#t,this.#t.exitCode)):0}#c(e,...r){let n=this.#n;if(e==="exit"&&Ex(this.#t)){typeof r[0]=="number"&&(this.#t.exitCode=r[0]);let i=n.call(this.#t,e,...r);return this.#r.emit("exit",this.#t.exitCode,null),i}else return n.call(this.#t,e,...r)}},e$=globalThis.process,{onExit:Fre,load:yEt,unload:SEt}=S1e(Ex(e$)?new QL(e$):new XL);var Bre=(t,{cleanup:e,detached:r},{signal:n})=>{if(!e||r)return;let i=Fre(()=>{t.kill()});E1e(n,()=>{i()})};var zre=({source:t,sourcePromise:e,boundOptions:r,createNested:n},...i)=>{let o=NA(),{destination:s,destinationStream:a,destinationError:c,from:l,unpipeSignal:u}=v1e(r,n,i),{sourceStream:d,sourceError:f}=b1e(t,l),{options:p,fileDescriptors:h}=lo.get(t);return{sourcePromise:e,sourceStream:d,sourceOptions:p,sourceError:f,destination:s,destinationStream:a,destinationError:c,unpipeSignal:u,fileDescriptors:h,startTime:o}},v1e=(t,e,r)=>{try{let{destination:n,pipeOptions:{from:i,to:o,unpipeSignal:s}={}}=T1e(t,e,...r),a=zA(n,o);return{destination:n,destinationStream:a,from:i,unpipeSignal:s}}catch(n){return{destinationError:n}}},T1e=(t,e,r,...n)=>{if(Array.isArray(r))return{destination:e(jre,t)(r,...n),pipeOptions:t};if(typeof r=="string"||r instanceof URL||GD(r)){if(Object.keys(t).length>0)throw new TypeError('Please use .pipe("file", ..., options) or .pipe(execa("file", ..., options)) instead of .pipe(options)("file", ...).');let[i,o,s]=TA(r,...n);return{destination:e(jre)(i,o,s),pipeOptions:s}}if(lo.has(r)){if(Object.keys(t).length>0)throw new TypeError("Please use .pipe(options)`command` or .pipe($(options)`command`) instead of .pipe(options)($`command`).");return{destination:r,pipeOptions:n[0]}}throw new TypeError(`The first argument must be a template string, an options object, or an Execa subprocess: ${r}`)},jre=({options:t})=>({options:{...t,stdin:"pipe",piped:!0}}),b1e=(t,e)=>{try{return{sourceStream:lf(t,e)}}catch(r){return{sourceError:r}}};var Vre=({sourceStream:t,sourceError:e,destinationStream:r,destinationError:n,fileDescriptors:i,sourceOptions:o,startTime:s})=>{let a=A1e({sourceStream:t,sourceError:e,destinationStream:r,destinationError:n});if(a!==void 0)throw t$({error:a,fileDescriptors:i,sourceOptions:o,startTime:s})},A1e=({sourceStream:t,sourceError:e,destinationStream:r,destinationError:n})=>{if(e!==void 0&&n!==void 0)return n;if(n!==void 0)return YL(t),n;if(e!==void 0)return WL(r),e},t$=({error:t,fileDescriptors:e,sourceOptions:r,startTime:n})=>pf({error:t,command:Gre,escapedCommand:Gre,fileDescriptors:e,options:r,startTime:n,isSync:!1}),Gre="source.pipe(destination)";var qre=async t=>{let[{status:e,reason:r,value:n=r},{status:i,reason:o,value:s=o}]=await t;if(s.pipedFrom.includes(n)||s.pipedFrom.push(n),i==="rejected")throw s;if(e==="rejected")throw n;return s};import{finished as x1e}from"stream/promises";var Hre=(t,e,r)=>{let n=Tx.has(e)?R1e(t,e):w1e(t,e);return bl(t,C1e,r.signal),bl(e,P1e,r.signal),I1e(e),n},w1e=(t,e)=>{let r=Rl([t]);return gf(r,e),Tx.set(e,r),r},R1e=(t,e)=>{let r=Tx.get(e);return r.add(t),r},I1e=async t=>{try{await x1e(t,{cleanup:!0,readable:!1,writable:!0})}catch{}Tx.delete(t)},Tx=new WeakMap,C1e=2,P1e=1;import{aborted as O1e}from"util";var Wre=(t,e)=>t===void 0?[]:[N1e(t,e)],N1e=async(t,{sourceStream:e,mergedStream:r,fileDescriptors:n,sourceOptions:i,startTime:o})=>{await O1e(t,e),await r.remove(e);let s=new Error("Pipe canceled by `unpipeSignal` option.");throw t$({error:s,fileDescriptors:n,sourceOptions:i,startTime:o})};var bx=(t,...e)=>{if(kt(e[0]))return bx.bind(void 0,{...t,boundOptions:{...t.boundOptions,...e[0]}});let{destination:r,...n}=zre(t,...e),i=k1e({...n,destination:r});return i.pipe=bx.bind(void 0,{...t,source:r,sourcePromise:i,boundOptions:{}}),i},k1e=async({sourcePromise:t,sourceStream:e,sourceOptions:r,sourceError:n,destination:i,destinationStream:o,destinationError:s,unpipeSignal:a,fileDescriptors:c,startTime:l})=>{let u=M1e(t,i);Vre({sourceStream:e,sourceError:n,destinationStream:o,destinationError:s,fileDescriptors:c,sourceOptions:r,startTime:l});let d=new AbortController;try{let f=Hre(e,o,d);return await Promise.race([qre(u),...Wre(a,{sourceStream:e,mergedStream:f,sourceOptions:r,fileDescriptors:c,startTime:l})])}finally{d.abort()}},M1e=(t,e)=>Promise.allSettled([t,e]);import{setImmediate as j1e}from"timers/promises";import{on as D1e}from"events";import{getDefaultHighWaterMark as L1e}from"stream";var Ax=({subprocessStdout:t,subprocess:e,binary:r,shouldEncode:n,encoding:i,preserveNewlines:o})=>{let s=new AbortController;return $1e(e,s),Kre({stream:t,controller:s,binary:r,shouldEncode:!t.readableObjectMode&&n,encoding:i,shouldSplit:!t.readableObjectMode,preserveNewlines:o})},$1e=async(t,e)=>{try{await t}catch{}finally{e.abort()}},r$=({stream:t,onStreamEnd:e,lines:r,encoding:n,stripFinalNewline:i,allMixed:o})=>{let s=new AbortController;U1e(e,s,t);let a=t.readableObjectMode&&!o;return Kre({stream:t,controller:s,binary:n==="buffer",shouldEncode:!a,encoding:n,shouldSplit:!a&&r,preserveNewlines:!i})},U1e=async(t,e,r)=>{try{await t}catch{r.destroy()}finally{e.abort()}},Kre=({stream:t,controller:e,binary:r,shouldEncode:n,encoding:i,shouldSplit:o,preserveNewlines:s})=>{let a=D1e(t,"data",{signal:e.signal,highWaterMark:Yre,highWatermark:Yre});return F1e({onStdoutChunk:a,controller:e,binary:r,shouldEncode:n,encoding:i,shouldSplit:o,preserveNewlines:s})},n$=L1e(!0),Yre=n$,F1e=async function*({onStdoutChunk:t,controller:e,binary:r,shouldEncode:n,encoding:i,shouldSplit:o,preserveNewlines:s}){let a=B1e({binary:r,shouldEncode:n,encoding:i,shouldSplit:o,preserveNewlines:s});try{for await(let[c]of t)yield*wl(c,a,0)}catch(c){if(!e.signal.aborted)throw c}finally{yield*R_(a)}},B1e=({binary:t,shouldEncode:e,encoding:r,shouldSplit:n,preserveNewlines:i})=>[hx(t,r,!e),px(t,i,!n,{})].filter(Boolean);var Zre=async({stream:t,onStreamEnd:e,fdNumber:r,encoding:n,buffer:i,maxBuffer:o,lines:s,allMixed:a,stripFinalNewline:c,verboseInfo:l,streamInfo:u})=>{let d=z1e({stream:t,onStreamEnd:e,fdNumber:r,encoding:n,allMixed:a,verboseInfo:l,streamInfo:u});if(!i){await Promise.all([G1e(t),d]);return}let f=ML(c,r),p=r$({stream:t,onStreamEnd:e,lines:s,encoding:n,stripFinalNewline:f,allMixed:a}),[h]=await Promise.all([V1e({stream:t,iterable:p,fdNumber:r,encoding:n,maxBuffer:o,lines:s}),d]);return h},z1e=async({stream:t,onStreamEnd:e,fdNumber:r,encoding:n,allMixed:i,verboseInfo:o,streamInfo:{fileDescriptors:s}})=>{if(!_x({stdioItems:s[r]?.stdioItems,encoding:n,verboseInfo:o,fdNumber:r}))return;let a=r$({stream:t,onStreamEnd:e,lines:!0,encoding:n,stripFinalNewline:!0,allMixed:i});await are(a,t,r,o)},G1e=async t=>{await j1e(),t.readableFlowing===null&&t.resume()},V1e=async({stream:t,stream:{readableObjectMode:e},iterable:r,fdNumber:n,encoding:i,maxBuffer:o,lines:s})=>{try{return e||s?await ix(r,{maxBuffer:o}):i==="buffer"?new Uint8Array(await ox(r,{maxBuffer:o})):await ff(r,{maxBuffer:o})}catch(a){return Jre(ate({error:a,stream:t,readableObjectMode:e,lines:s,encoding:i,fdNumber:n}))}},i$=async t=>{try{return await t}catch(e){return Jre(e)}},Jre=({bufferedData:t})=>bQ(t)?new Uint8Array(t):t;import{finished as q1e}from"stream/promises";var O_=async(t,e,r,{isSameDirection:n,stopOnExit:i=!1}={})=>{let o=H1e(t,r),s=new AbortController;try{await Promise.race([...i?[r.exitPromise]:[],q1e(t,{cleanup:!0,signal:s.signal})])}catch(a){o.stdinCleanedUp||K1e(a,e,r,n)}finally{s.abort()}},H1e=(t,{originalStreams:[e],subprocess:r})=>{let n={stdinCleanedUp:!1};return t===e&&W1e(t,r,n),n},W1e=(t,e,r)=>{let{_destroy:n}=t;t._destroy=(...i)=>{Y1e(e,r),n.call(t,...i)}},Y1e=({exitCode:t,signalCode:e},r)=>{(t!==null||e!==null)&&(r.stdinCleanedUp=!0)},K1e=(t,e,r,n)=>{if(!Z1e(t,e,r,n))throw t},Z1e=(t,e,r,n=!0)=>r.propagating?Xre(t)||xx(t):(r.propagating=!0,o$(r,e)===n?Xre(t):xx(t)),o$=({fileDescriptors:t},e)=>e!=="all"&&t[e].direction==="input",xx=t=>t?.code==="ERR_STREAM_PREMATURE_CLOSE",Xre=t=>t?.code==="EPIPE";var Qre=({subprocess:t,encoding:e,buffer:r,maxBuffer:n,lines:i,stripFinalNewline:o,verboseInfo:s,streamInfo:a})=>t.stdio.map((c,l)=>s$({stream:c,fdNumber:l,encoding:e,buffer:r[l],maxBuffer:n[l],lines:i[l],allMixed:!1,stripFinalNewline:o,verboseInfo:s,streamInfo:a})),s$=async({stream:t,fdNumber:e,encoding:r,buffer:n,maxBuffer:i,lines:o,allMixed:s,stripFinalNewline:a,verboseInfo:c,streamInfo:l})=>{if(!t)return;let u=O_(t,e,l);if(o$(l,e)){await u;return}let[d]=await Promise.all([Zre({stream:t,onStreamEnd:u,fdNumber:e,encoding:r,buffer:n,maxBuffer:i,lines:o,allMixed:s,stripFinalNewline:a,verboseInfo:c,streamInfo:l}),u]);return d};var ene=({stdout:t,stderr:e},{all:r})=>r&&(t||e)?Rl([t,e].filter(Boolean)):void 0,tne=({subprocess:t,encoding:e,buffer:r,maxBuffer:n,lines:i,stripFinalNewline:o,verboseInfo:s,streamInfo:a})=>s$({...J1e(t,r),fdNumber:"all",encoding:e,maxBuffer:n[1]+n[2],lines:i[1]||i[2],allMixed:X1e(t),stripFinalNewline:o,verboseInfo:s,streamInfo:a}),J1e=({stdout:t,stderr:e,all:r},[,n,i])=>{let o=n||i;return o?n?i?{stream:r,buffer:o}:{stream:t,buffer:o}:{stream:e,buffer:o}:{stream:r,buffer:o}},X1e=({all:t,stdout:e,stderr:r})=>t&&e&&r&&e.readableObjectMode!==r.readableObjectMode;import{once as Q1e}from"events";var rne=t=>nf(t,"ipc"),nne=(t,e)=>{let r=OA(t);ao({type:"ipc",verboseMessage:r,fdNumber:"ipc",verboseInfo:e})};var ine=async({subprocess:t,buffer:e,maxBuffer:r,ipc:n,ipcOutput:i,verboseInfo:o})=>{if(!n)return i;let s=rne(o),a=ds(e,"ipc"),c=ds(r,"ipc");for await(let l of GL({anyProcess:t,channel:t.channel,isSubprocess:!1,ipc:n,shouldAwait:!1,reference:!0}))a&&(cte(t,i,c),i.push(l)),s&&nne(l,o);return i},one=async(t,e)=>(await Promise.allSettled([t]),e);var sne=async({subprocess:t,options:{encoding:e,buffer:r,maxBuffer:n,lines:i,timeoutDuration:o,cancelSignal:s,gracefulCancel:a,forceKillAfterDelay:c,stripFinalNewline:l,ipc:u,ipcInput:d},context:f,verboseInfo:p,fileDescriptors:h,originalStreams:m,onInternalError:y,controller:T})=>{let b=fre(t,f),A={originalStreams:m,fileDescriptors:h,subprocess:t,exitPromise:b,propagating:!1},S=Qre({subprocess:t,encoding:e,buffer:r,maxBuffer:n,lines:i,stripFinalNewline:l,verboseInfo:p,streamInfo:A}),I=tne({subprocess:t,encoding:e,buffer:r,maxBuffer:n,lines:i,stripFinalNewline:l,verboseInfo:p,streamInfo:A}),C=[],$=ine({subprocess:t,buffer:r,maxBuffer:n,ipc:u,ipcOutput:C,verboseInfo:p}),k=eUe(m,t,A),O=tUe(h,A);try{return await Promise.race([Promise.all([{},hre(b),Promise.all(S),I,$,Bee(t,d),...k,...O]),y,rUe(t,T),...Dee(t,o,f,T),...ree({subprocess:t,cancelSignal:s,gracefulCancel:a,context:f,controller:T}),...kee({subprocess:t,cancelSignal:s,gracefulCancel:a,forceKillAfterDelay:c,context:f,controller:T})])}catch(U){return f.terminationReason??="other",Promise.all([{error:U},b,Promise.all(S.map(_=>i$(_))),i$(I),one($,C),Promise.allSettled(k),Promise.allSettled(O)])}},eUe=(t,e,r)=>t.map((n,i)=>n===e.stdio[i]?void 0:O_(n,i,r)),tUe=(t,e)=>t.flatMap(({stdioItems:r},n)=>r.filter(({value:i,stream:o=i})=>wi(o,{checkOpen:!1})&&!bi(o)).map(({type:i,value:o,stream:s=o})=>O_(s,n,e,{isSameDirection:qn.has(i),stopOnExit:i==="native"}))),rUe=async(t,{signal:e})=>{let[r]=await Q1e(t,"error",{signal:e});throw r};var ane=()=>({readableDestroy:new WeakMap,writableFinal:new WeakMap,writableDestroy:new WeakMap}),N_=(t,e,r)=>{let n=t[r];n.has(e)||n.set(e,[]);let i=n.get(e),o=co();return i.push(o),{resolve:o.resolve.bind(o),promises:i}},_f=async({resolve:t,promises:e},r)=>{t();let[n]=await Promise.race([Promise.allSettled([!0,r]),Promise.all([!1,...e])]);return!n};import{Readable as nUe}from"stream";import{callbackify as iUe}from"util";import{finished as cne}from"stream/promises";var a$=async t=>{if(t!==void 0)try{await c$(t)}catch{}},lne=async t=>{if(t!==void 0)try{await l$(t)}catch{}},c$=async t=>{await cne(t,{cleanup:!0,readable:!1,writable:!0})},l$=async t=>{await cne(t,{cleanup:!0,readable:!0,writable:!1})},wx=async(t,e)=>{if(await t,e)throw e},Rx=(t,e,r)=>{r&&!xx(r)?t.destroy(r):e&&t.destroy()};var une=({subprocess:t,concurrentStreams:e,encoding:r},{from:n,binary:i=!0,preserveNewlines:o=!0}={})=>{let s=i||gn.has(r),{subprocessStdout:a,waitReadableDestroy:c}=u$(t,n,e),{readableEncoding:l,readableObjectMode:u,readableHighWaterMark:d}=d$(a,s),{read:f,onStdoutDataDone:p}=f$({subprocessStdout:a,subprocess:t,binary:s,encoding:r,preserveNewlines:o}),h=new nUe({read:f,destroy:iUe(h$.bind(void 0,{subprocessStdout:a,subprocess:t,waitReadableDestroy:c})),highWaterMark:d,objectMode:u,encoding:l});return p$({subprocessStdout:a,onStdoutDataDone:p,readable:h,subprocess:t}),h},u$=(t,e,r)=>{let n=lf(t,e),i=N_(r,n,"readableDestroy");return{subprocessStdout:n,waitReadableDestroy:i}},d$=({readableEncoding:t,readableObjectMode:e,readableHighWaterMark:r},n)=>n?{readableEncoding:t,readableObjectMode:e,readableHighWaterMark:r}:{readableEncoding:t,readableObjectMode:!0,readableHighWaterMark:n$},f$=({subprocessStdout:t,subprocess:e,binary:r,encoding:n,preserveNewlines:i})=>{let o=co(),s=Ax({subprocessStdout:t,subprocess:e,binary:r,shouldEncode:!r,encoding:n,preserveNewlines:i});return{read(){oUe(this,s,o)},onStdoutDataDone:o}},oUe=async(t,e,r)=>{try{let{value:n,done:i}=await e.next();i?r.resolve():t.push(n)}catch{}},p$=async({subprocessStdout:t,onStdoutDataDone:e,readable:r,subprocess:n,subprocessStdin:i})=>{try{await l$(t),await n,await a$(i),await e,r.readable&&r.push(null)}catch(o){await a$(i),dne(r,o)}},h$=async({subprocessStdout:t,subprocess:e,waitReadableDestroy:r},n)=>{await _f(r,e)&&(dne(t,n),await wx(e,n))},dne=(t,e)=>{Rx(t,t.readable,e)};import{Writable as sUe}from"stream";import{callbackify as fne}from"util";var pne=({subprocess:t,concurrentStreams:e},{to:r}={})=>{let{subprocessStdin:n,waitWritableFinal:i,waitWritableDestroy:o}=m$(t,r,e),s=new sUe({...g$(n,t,i),destroy:fne(y$.bind(void 0,{subprocessStdin:n,subprocess:t,waitWritableFinal:i,waitWritableDestroy:o})),highWaterMark:n.writableHighWaterMark,objectMode:n.writableObjectMode});return _$(n,s),s},m$=(t,e,r)=>{let n=zA(t,e),i=N_(r,n,"writableFinal"),o=N_(r,n,"writableDestroy");return{subprocessStdin:n,waitWritableFinal:i,waitWritableDestroy:o}},g$=(t,e,r)=>({write:aUe.bind(void 0,t),final:fne(cUe.bind(void 0,t,e,r))}),aUe=(t,e,r,n)=>{t.write(e,r)?n():t.once("drain",n)},cUe=async(t,e,r)=>{await _f(r,e)&&(t.writable&&t.end(),await e)},_$=async(t,e,r)=>{try{await c$(t),e.writable&&e.end()}catch(n){await lne(r),hne(e,n)}},y$=async({subprocessStdin:t,subprocess:e,waitWritableFinal:r,waitWritableDestroy:n},i)=>{await _f(r,e),await _f(n,e)&&(hne(t,i),await wx(e,i))},hne=(t,e)=>{Rx(t,t.writable,e)};import{Duplex as lUe}from"stream";import{callbackify as uUe}from"util";var mne=({subprocess:t,concurrentStreams:e,encoding:r},{from:n,to:i,binary:o=!0,preserveNewlines:s=!0}={})=>{let a=o||gn.has(r),{subprocessStdout:c,waitReadableDestroy:l}=u$(t,n,e),{subprocessStdin:u,waitWritableFinal:d,waitWritableDestroy:f}=m$(t,i,e),{readableEncoding:p,readableObjectMode:h,readableHighWaterMark:m}=d$(c,a),{read:y,onStdoutDataDone:T}=f$({subprocessStdout:c,subprocess:t,binary:a,encoding:r,preserveNewlines:s}),b=new lUe({read:y,...g$(u,t,d),destroy:uUe(dUe.bind(void 0,{subprocessStdout:c,subprocessStdin:u,subprocess:t,waitReadableDestroy:l,waitWritableFinal:d,waitWritableDestroy:f})),readableHighWaterMark:m,writableHighWaterMark:u.writableHighWaterMark,readableObjectMode:h,writableObjectMode:u.writableObjectMode,encoding:p});return p$({subprocessStdout:c,onStdoutDataDone:T,readable:b,subprocess:t,subprocessStdin:u}),_$(u,b,c),b},dUe=async({subprocessStdout:t,subprocessStdin:e,subprocess:r,waitReadableDestroy:n,waitWritableFinal:i,waitWritableDestroy:o},s)=>{await Promise.all([h$({subprocessStdout:t,subprocess:r,waitReadableDestroy:n},s),y$({subprocessStdin:e,subprocess:r,waitWritableFinal:i,waitWritableDestroy:o},s)])};var S$=(t,e,{from:r,binary:n=!1,preserveNewlines:i=!1}={})=>{let o=n||gn.has(e),s=lf(t,r),a=Ax({subprocessStdout:s,subprocess:t,binary:o,shouldEncode:!0,encoding:e,preserveNewlines:i});return fUe(a,s,t)},fUe=async function*(t,e,r){try{yield*t}finally{e.readable&&e.destroy(),await r}};var gne=(t,{encoding:e})=>{let r=ane();t.readable=une.bind(void 0,{subprocess:t,concurrentStreams:r,encoding:e}),t.writable=pne.bind(void 0,{subprocess:t,concurrentStreams:r}),t.duplex=mne.bind(void 0,{subprocess:t,concurrentStreams:r,encoding:e}),t.iterable=S$.bind(void 0,t,e),t[Symbol.asyncIterator]=S$.bind(void 0,t,e,{})};var _ne=(t,e)=>{for(let[r,n]of hUe){let i=n.value.bind(e);Reflect.defineProperty(t,r,{...n,value:i})}},pUe=(async()=>{})().constructor.prototype,hUe=["then","catch","finally"].map(t=>[t,Reflect.getOwnPropertyDescriptor(pUe,t)]);var yne=(t,e,r,n)=>{let{file:i,commandArguments:o,command:s,escapedCommand:a,startTime:c,verboseInfo:l,options:u,fileDescriptors:d}=_Ue(t,e,r),{subprocess:f,promise:p}=SUe({file:i,commandArguments:o,options:u,startTime:c,verboseInfo:l,command:s,escapedCommand:a,fileDescriptors:d});return f.pipe=bx.bind(void 0,{source:f,sourcePromise:p,boundOptions:{},createNested:n}),_ne(f,p),lo.set(f,{options:u,fileDescriptors:d}),f},_Ue=(t,e,r)=>{let{command:n,escapedCommand:i,startTime:o,verboseInfo:s}=kA(t,e,r),{file:a,commandArguments:c,options:l}=QA(t,e,r),u=yUe(l),d=Cre(u,s);return{file:a,commandArguments:c,command:n,escapedCommand:i,startTime:o,verboseInfo:s,options:u,fileDescriptors:d}},yUe=({timeout:t,signal:e,...r})=>{if(e!==void 0)throw new TypeError('The "signal" option has been renamed to "cancelSignal" instead.');return{...r,timeoutDuration:t}},SUe=({file:t,commandArguments:e,options:r,startTime:n,verboseInfo:i,command:o,escapedCommand:s,fileDescriptors:a})=>{let c;try{c=gUe(...ex(t,e,r))}catch(h){return xre({error:h,command:o,escapedCommand:s,fileDescriptors:a,options:r,startTime:n,verboseInfo:i})}let l=new AbortController;mUe(Number.POSITIVE_INFINITY,l.signal);let u=[...c.stdio];Ure(c,a,l),Bre(c,r,l);let d={},f=co();c.kill=eee.bind(void 0,{kill:c.kill.bind(c),options:r,onInternalError:f,context:d,controller:l}),c.all=ene(c,r),gne(c,r),Tre(c,r);let p=EUe({subprocess:c,options:r,startTime:n,verboseInfo:i,fileDescriptors:a,originalStreams:u,command:o,escapedCommand:s,context:d,onInternalError:f,controller:l});return{subprocess:c,promise:p}},EUe=async({subprocess:t,options:e,startTime:r,verboseInfo:n,fileDescriptors:i,originalStreams:o,command:s,escapedCommand:a,context:c,onInternalError:l,controller:u})=>{let[d,[f,p],h,m,y]=await sne({subprocess:t,options:e,context:c,verboseInfo:n,fileDescriptors:i,originalStreams:o,onInternalError:l,controller:u});u.abort(),l.resolve();let T=h.map((S,I)=>ps(S,e,I)),b=ps(m,e,"all"),A=vUe({errorInfo:d,exitCode:f,signal:p,stdio:T,all:b,ipcOutput:y,context:c,options:e,command:s,escapedCommand:a,startTime:r});return hf(A,n,e)},vUe=({errorInfo:t,exitCode:e,signal:r,stdio:n,all:i,ipcOutput:o,context:s,options:a,command:c,escapedCommand:l,startTime:u})=>"error"in t?w_({error:t.error,command:c,escapedCommand:l,timedOut:s.terminationReason==="timeout",isCanceled:s.terminationReason==="cancel"||s.terminationReason==="gracefulCancel",isGracefullyCanceled:s.terminationReason==="gracefulCancel",isMaxBuffer:t.error instanceof uo,isForcefullyTerminated:s.isForcefullyTerminated,exitCode:e,signal:r,stdio:n,all:i,ipcOutput:o,options:a,startTime:u,isSync:!1}):cx({command:c,escapedCommand:l,stdio:n,all:i,ipcOutput:o,options:a,startTime:u});var Ix=(t,e)=>{let r=Object.fromEntries(Object.entries(e).map(([n,i])=>[n,TUe(n,t[n],i)]));return{...t,...r}},TUe=(t,e,r)=>bUe.has(t)&&kt(e)&&kt(r)?{...e,...r}:r,bUe=new Set(["env",...KD]);var Na=(t,e,r,n)=>{let i=(s,a,c)=>Na(s,a,r,c),o=(...s)=>AUe({mapArguments:t,deepOptions:r,boundOptions:e,setBoundExeca:n,createNested:i},...s);return n!==void 0&&n(o,i,e),o},AUe=({mapArguments:t,deepOptions:e={},boundOptions:r={},setBoundExeca:n,createNested:i},o,...s)=>{if(kt(o))return i(t,Ix(r,o),n);let{file:a,commandArguments:c,options:l,isSync:u}=xUe({mapArguments:t,firstArgument:o,nextArguments:s,deepOptions:e,boundOptions:r});return u?gre(a,c,l):yne(a,c,l,i)},xUe=({mapArguments:t,firstArgument:e,nextArguments:r,deepOptions:n,boundOptions:i})=>{let o=CQ(e)?PQ(e,r):[e,...r],[s,a,c]=TA(...o),l=Ix(Ix(n,i),c),{file:u=s,commandArguments:d=a,options:f=l,isSync:p=!1}=t({file:s,commandArguments:a,options:l});return{file:u,commandArguments:d,options:f,isSync:p}};var Sne=({file:t,commandArguments:e})=>vne(t,e),Ene=({file:t,commandArguments:e})=>({...vne(t,e),isSync:!0}),vne=(t,e)=>{if(e.length>0)throw new TypeError(`The command and its arguments must be passed as a single string: ${t} ${e}.`);let[r,...n]=wUe(t);return{file:r,commandArguments:n}},wUe=t=>{if(typeof t!="string")throw new TypeError(`The command must be a string: ${String(t)}.`);let e=t.trim();if(e==="")return[];let r=[];for(let n of e.split(RUe)){let i=r.at(-1);i&&i.endsWith("\\")?r[r.length-1]=`${i.slice(0,-1)} ${n}`:r.push(n)}return r},RUe=/ +/g;var Tne=(t,e,r)=>{t.sync=e(IUe,r),t.s=t.sync},bne=({options:t})=>Ane(t),IUe=({options:t})=>({...Ane(t),isSync:!0}),Ane=t=>({options:{...CUe(t),...t}}),CUe=({input:t,inputFile:e,stdio:r})=>t===void 0&&e===void 0&&r===void 0?{stdin:"inherit"}:{},xne={preferLocal:!0};var wne=Na(()=>({})),cbt=Na(()=>({isSync:!0})),Rne=Na(Sne),lbt=Na(Ene),ubt=Na($ee),dbt=Na(bne,{},xne,Tne),{sendMessage:fbt,getOneMessage:pbt,getEachMessage:hbt,getCancelSignal:mbt}=bre();var Ine=!1,Cne=()=>{Ine=!0},po=()=>Ine;var k_=null,Pne=t=>(k_&&k_.destroy(),k_=new hs({totalAllowedTime:t}),k_),One=()=>k_;var hs=class{constructor({totalAllowedTime:e}){this.withStageTimer=async(e,r,n,{interruptible:i=!0}={})=>{if(this.isTimeExpired())throw new Error(`${e} stage did not complete in the allowed time. Time has already expired.`);if(i&&po())throw new Error(`Aborting ${e} stage \u2014 shutting down`);let o=this.onTimesUp(()=>{throw new Error(`${e} stage did not complete in the allowed time.`)}),s=null,a=null;n!==void 0&&(a=new Promise((u,d)=>{s=setTimeout(()=>{d(new Error(`${e} stage exceeded its maximum duration of ${n}ms`))},n)}));let c=Date.now(),l="success";try{return await mA({stage:e},async()=>a?await Promise.race([r(),a]):await r())}catch(u){throw l="failure",u}finally{ue.timing("stage.duration",Date.now()-c,{stage:e,outcome:l}),o(),s&&clearTimeout(s)}};this.startTime=Date.now(),this.totalAllowedTime=e,this.globalTimeoutId=null,this.subscribers=[],this.hasTimedOut=!1,this.setupGlobalTimeout()}getElapsedTime(){return Date.now()-this.startTime}getRemainingTime(){let e=this.getElapsedTime(),r=this.totalAllowedTime-e;return Math.max(0,r)}isTimeExpired(){return this.getRemainingTime()===0||this.hasTimedOut}setupGlobalTimeout(){this.globalTimeoutId&&clearTimeout(this.globalTimeoutId),this.globalTimeoutId=setTimeout(()=>{this.notifyTimeUp()},this.totalAllowedTime)}notifyTimeUp(){this.hasTimedOut=!0;for(let e=this.subscribers.length-1;e>=0;e--)try{this.subscribers[e]()}catch(r){console.error("TimeKeeper: Error in time up callback:",r)}}onTimesUp(e){if(this.subscribers.push(e),this.hasTimedOut)try{e()}catch(r){console.error("TimeKeeper: Error in time up callback:",r)}return()=>{let r=this.subscribers.indexOf(e);r>-1&&this.subscribers.splice(r,1)}}off(e){let r=this.subscribers.indexOf(e);r>-1&&this.subscribers.splice(r,1)}clearSubscribers(){this.subscribers.length=0}getSubscriberCount(){return this.subscribers.length}destroy(){this.globalTimeoutId&&(clearTimeout(this.globalTimeoutId),this.globalTimeoutId=null),this.clearSubscribers()}static{this.timeUnits={seconds:e=>e*1e3,minutes:e=>e*60*1e3,hours:e=>e*60*60*1e3}}};var Nne={name:"@netlify/agent-runner-cli",type:"module",version:"1.154.0-xhigh.1",description:"CLI tool for running Netlify agents",main:"./dist/index.js",types:"./dist/index.d.ts",exports:"./dist/index.js",bin:{"agent-runner-cli":"./dist/bin.js","agent-runner-cli-local":"./dist/bin-local.js"},files:["dist/**/*.js","dist/**/*.d.ts","dist/skills/**","patches","scripts"],scripts:{build:"tsup",dev:"tsup --watch",prepare:"husky install node_modules/@netlify/eslint-config-node/.husky/",prepublishOnly:"npm ci && npm test",prepack:"npm run build",test:"run-s build format test:dev",format:"run-s build format:check-fix:*","format:ci":"run-s build format:check:*","format:check-fix:lint":"run-e format:check:lint format:fix:lint","format:check:lint":'eslint --cache --format=codeframe --max-warnings=0 "{src,scripts,test,.github}/**/*.{js,ts,md,html}"',"format:fix:lint":'eslint --fix --cache --format=codeframe --max-warnings=0 "{src,scripts,test,.github}/**/*.{js,ts,md,html}"',"format:check-fix:prettier":"run-e format:check:prettier format:fix:prettier","format:check:prettier":'prettier --check --ignore-path .gitignore --loglevel=warn "{src,scripts,test,.github}/**/*.{js,ts,md,yml,json,html}" "*.{js,ts,yml,json,html}" ".*.{js,ts,yml,json,html}" "!**/package-lock.json" "!package-lock.json" "!src/skills/**/*.md"',"format:fix:prettier":'prettier --write --ignore-path .gitignore --loglevel=warn "{src,scripts,test,.github}/**/*.{js,ts,md,yml,json,html}" "*.{js,ts,yml,json,html}" ".*.{js,ts,yml,json,html}" "!**/package-lock.json" "!package-lock.json" "!src/skills/**/*.md"',"test:dev":"run-s build test:dev:*","test:ci":"run-s build test:ci:*","test:dev:vitest":"LOG=0 vitest --exclude '**/integration/**'","test:ci:vitest":"LOG=0 vitest run --coverage --exclude '**/integration/**'","test:smoke":"node scripts/smoke-dist.js","test:integration":"vitest run test/integration/","test:integration:codex":"vitest run test/integration/codex.test.ts","test:integration:claude":"vitest run test/integration/claude.test.ts","test:integration:gemini":"vitest run test/integration/gemini.test.ts","test:integration:skill-invocation":"vitest run test/integration/skill-invocation.test.ts","check:types":"tsc --noEmit",postinstall:"node scripts/postinstall.js"},keywords:[],license:"MIT",repository:"netlify/agent-runner-cli",bugs:{url:"https://github.com/netlify/agent-runner-cli/issues"},author:"Netlify Inc.",directories:{test:"test"},devDependencies:{"@commitlint/cli":"^20.0.0","@commitlint/config-conventional":"^20.0.0","@eslint/compat":"^2.0.0","@eslint/js":"^10.0.1","@netlify/axis":"^1.17.2","@netlify/eslint-config-node":"^7.0.1","@types/node":"^24.5.0","@typescript-eslint/eslint-plugin":"^8.0.0","@typescript-eslint/parser":"^8.0.0","@vitest/coverage-v8":"^4.1.5","@vitest/eslint-plugin":"^1.6.6",eslint:"^10.5.0","eslint-config-prettier":"^10.1.8","eslint-plugin-n":"^17.0.0",husky:"^9.0.0",jiti:"^2.7.0","patch-package":"^8.0.0",tsup:"^8.5.0",typescript:"^5.0.0","typescript-eslint":"^8.44.0",vitest:"^4.0.16"},dependencies:{"@anthropic-ai/claude-code":"^2.1.219","@anthropic-ai/sdk":"0.91.1","@google/gemini-cli":"0.42.0","@modelcontextprotocol/sdk":"^1.29.0","@netlify/cache-utils":"^6.0.5","@netlify/database-proxy":"^0.1.5","@netlify/otel":"^6.0.5","@netlify/ts-cli":"^1.2.0","@openai/codex":"0.128.0","@opentelemetry/api":"^1.9.0","@opentelemetry/exporter-trace-otlp-grpc":"0.218.0",execa:"^9.6.1",fastify:"5.8.5",minimist:"^1.2.8",openai:"6.34.0",zod:"^4.4.3"}};var kUe=OUe(import.meta.url),MUe=ms.dirname(kUe),DUe=NUe(import.meta.url),yf=pe("shell"),E$=new Set,kne={preferLocal:!0},Mr=(t,e,r)=>{let[n,i]=LUe(e,r),o={...kne,...i},s=wne(t,n,o);Dne(s,o),Une(s);let a=r?.idleTimeout;return a&&a>0&&$ne(s,a),s},Mne=(t,e)=>{let r={...kne,...e},n=Rne(t,r);return Dne(n,r),Une(n),e?.idleTimeout&&e.idleTimeout>0&&$ne(n,e.idleTimeout),n},LUe=function(t,e){return Array.isArray(t)?[t,e]:typeof t=="object"&&t!==null?[[],t]:[[],void 0]},Dne=(t,e)=>{if(e.stdio!==void 0||e.stdout!==void 0||e.stderr!==void 0)return;if(gs.env.NETLIFY_MASK_LOGS!=="false"){t.stdout?.pipe(new a_).pipe(gs.stdout),t.stderr?.pipe(new a_).pipe(gs.stderr);return}t.stdout?.pipe(gs.stdout),t.stderr?.pipe(gs.stderr)},v$=(t,e="SIGTERM")=>{try{return t.pid&&!t.killed?(gs.kill(-t.pid,e),yf.log(`Killed process ${t.pid} with signal ${e}`),!0):!1}catch(r){return yf.error("Error killing process:",r),!1}},Lne=t=>v$(t,"SIGKILL"),$ne=(t,e)=>{let r=null,n=()=>{yf.log(`Process ${t.pid} killed due to idle timeout (no output for ${e}ms)`),v$(t,"SIGTERM"),setTimeout(()=>{t.pid&&!t.killed&&(yf.log(`Force killing idle process ${t.pid}`),Lne(t))},5e3)},i=()=>{r&&clearTimeout(r),r=setTimeout(n,e)};i(),t.stdout?.on("data",i),t.stderr?.on("data",i);let o=()=>{r&&(clearTimeout(r),r=null)};t.on("exit",o),t.on("error",o)},Une=t=>{E$.add(t);let e=One();if(e){let r=e.onTimesUp(()=>{yf.log(`Global timer expired, killing process ${t.pid}`),v$(t,"SIGTERM"),setTimeout(()=>{t.pid&&!t.killed&&(yf.log(`Force killing process ${t.pid} after timeout`),Lne(t))},5e3)});t.on("exit",()=>{E$.delete(t),r()}),t.on("error",()=>{E$.delete(t),r()})}};function ho(t,e){if(!gs.env.NETLIFY_LOCAL_MODE)try{let i=DUe.resolve(Nne.name),o=ms.dirname(i);for(;o!==ms.dirname(o);){let s=ms.dirname(o);if(ms.basename(s)==="node_modules"){let a=ms.join(s,".bin",e);if(Cx.existsSync(a))return a;break}o=s}}catch(i){console.error("Could not resolve package.json",i)}if(gs.env.NODE_PATH){let i=ms.join(gs.env.NODE_PATH,".bin",e);if(Cx.existsSync(i))return i}let r=ms.join(t,"node_modules",".bin",e);if(Cx.existsSync(r))return r;let n=ms.join(MUe,"..","node_modules",".bin",e);if(Cx.existsSync(n))return n}var $Ue=pe("utils"),UUe=t=>new Promise(e=>{setTimeout(e,t)});var T$=t=>{try{return new URL(t).hostname||null}catch{return null}},Px=(t,e=3e3)=>{let r=!1,n=null,i=[],o=null,s=(...a)=>{if(r)return n=a,new Promise(u=>{i.push(u)});r=!0;let c,l=new Promise(u=>{c=u});return o=(async()=>{await Promise.resolve();let u=await t(...a);for(c(u);;){if(await UUe(e),!n)return r=!1,o=null,u;let d=n,f=i;n=null,i=[],u=await t(...d),f.forEach(p=>{p(u)})}})(),l};return s.flush=async()=>{if((r||n)&&o)return await o,s.flush()},s.cancel=()=>{n=null,i.forEach(a=>a(void 0)),i=[]},s},ka=(t,e,r=!1)=>{let n=null,i=null,o=null,s=function(...a){i=a,o=this;let c=r&&!n;clearTimeout(n),n=setTimeout(()=>{n=null,r||(t.apply(o,i),i=null,o=null)},e),c&&(t.apply(o,i),i=null,o=null)};return s.cancel=()=>{clearTimeout(n),n=null,i=null,o=null},s.flush=()=>{if(n){clearTimeout(n);let a=i,c=o;n=null,i=null,o=null,t.apply(c,a)}},s},Fne=(t,e=!0,r)=>{if(t)try{return JSON.parse(t)}catch(n){e&&(r?.error?r.error("Could not parse JSON",n):$Ue.error("Could not parse JSON",n))}},FUe=t=>t.charAt(0).toUpperCase()+t.slice(1),mo=t=>t.split("-").map(e=>e.length===2?e.toUpperCase():FUe(e)).join(" ");function _s(t,e){e&&t.log(`Skill invoked: ${e}`)}var Ox=t=>Object.fromEntries(Object.entries(t).filter(([,e])=>e!==void 0)),Bne=(t,e,r=!1)=>{if(r)return;let n=60,i=55,o=".netlify.app",s="agent-",a=6;if(!e)return`${s}${t.slice(0,a)}`;let c=`--${e}${o}`;if(c.length>i)return"";let l=n-c.length;if(l<=0)return"";if(l>=s.length+a){let u=Math.min(l-s.length,t.length);return`${s}${t.slice(0,u)}`}return t.slice(0,l)};var b$=t=>{let e=t.match(/<<-?\s*['"]?(\w+)['"]?/);if(!e)return{command:t};let r=t.indexOf(e[0]),n=t.slice(r+e[0].length).trim();return{command:t.slice(0,r).trim(),heredocContent:n||void 0}},BUe=1e4,A$=(t,e=BUe)=>{if(!t||typeof t!="string"||t.length<=e)return t;let n=t.startsWith("```")?"\n... [truncated]\n```":"... [truncated]";return t.slice(0,e)+n};import{createHash as jUe}from"crypto";import{createReadStream as zUe}from"fs";import Nx from"fs/promises";import qne from"os";import kx from"path";var jne=pe("repo"),Hne="runner-diffs-",Wne=t=>`${Hne}${t}-`,Yne=async t=>{let e=qne.tmpdir(),r;try{r=await Nx.readdir(e)}catch{return}await Promise.all(r.filter(n=>n.startsWith(Hne)&&!n.startsWith(Wne(t))).map(n=>Nx.rm(kx.join(e,n),{recursive:!0,force:!0}).catch(()=>{})))},Zr=(t,e={})=>Mr("git",t,{...e,env:{...e.env,NETLIFY_INTERNAL_GIT:"1"}}),Mx=async({config:t,isRetry:e,cwd:r=process.cwd()})=>{jne.info("Getting runner diffs");let n=await VUe(r),{hasChanges:i}=n,{status:o}=n;if(!i)return{hasChanges:!1};if(!e){let h=HUe(o);await WUe(h,r)}jne.info("Changes after processing"),await w$(r);let s=await I$(o,r);if(await x$(s,r),i=await qUe(r),!i)return{hasChanges:!1,ignored:s};await Zr(["commit","-m","Agent runner [skip ci]"],{cwd:r});let a=await Nx.mkdtemp(kx.join(qne.tmpdir(),Wne(t.sessionId))),c=async({from:h,to:m,fileName:y,binary:T})=>{let b=kx.join(a,y);await Zr([...T?["diff",h,m,"--binary"]:["diff",h,m],`--output=${b}`],{stdio:["ignore","ignore","pipe"],cwd:r});let{size:S}=await Nx.stat(b);return{path:b,size:S}},l=await c({from:t.runSha,to:"HEAD",fileName:"session.patch"});if(i=l.size>0,!i)return await Vne(r),{hasChanges:!1,ignored:s};let u=await c({from:t.runSha,to:"HEAD",fileName:"session-binary.patch",binary:!0}),d,f;if(t.sha){d=await c({from:t.sha,to:"HEAD",fileName:"cumulative.patch"});let h=await c({from:t.sha,to:"HEAD",fileName:"cumulative-binary.patch",binary:!0});await Gne(d,h)||(f=h)}await Vne(r),ue.distribution("diff.size",u.size);let p={hasChanges:!0,diff:l,resultDiff:d,ignored:s};return await Gne(l,u)||(p.diffBinary=u),f&&(p.resultDiffBinary=f),p},zne=async t=>{let e=jUe("sha256");for await(let r of zUe(t))e.update(r);return e.digest("hex")},Gne=async(t,e)=>t.size===e.size&&await zne(t.path)===await zne(e.path),Vne=async(t=process.cwd())=>{process.env.NETLIFY_LOCAL_MODE&&await Zr(["reset","--soft","HEAD~1"],{cwd:t})},x$=async(t=[],e=process.cwd())=>{await Zr(["add",".",...t],{cwd:e})},w$=async(t=process.cwd())=>{let e=await Zr(["status","-s"],{cwd:t});return String(e.stdout??"")},Kne=/.. (.+)?\.log$/,GUe=[Kne],VUe=async(t=process.cwd())=>{let e=await w$(t);return{hasChanges:(e.trim().length===0?[]:e.split(`
102
102
  `).filter(i=>GUe.some(s=>s instanceof RegExp?s.test(i):i===s)?!1:i[1]?.trim()!=="")).length!==0,status:e}},qUe=async(t=process.cwd())=>{try{return await Zr(["diff","--staged","--quiet"],{cwd:t}),!1}catch{return!0}},R$=async(t=process.cwd())=>{let{stdout:e}=await Zr(["rev-parse","HEAD"],{cwd:t});return String(e??"").trim()},Zne=async(t=process.cwd())=>{let{stdout:e}=await Zr(["rev-list","--max-parents=0","HEAD"],{cwd:t});return String(e??"").trim()},I$=async(t,e=process.cwd())=>{t||=await w$(e);let r=[".netlify","node_modules","dist",".next","out",".nuxt",".output",".cache",".turbo",".parcel-cache","coverage",".nyc_output","storybook-static","public/build","CLAUDE.local.md"],n=[];return t.split(`
103
103
  `).forEach(i=>{r.forEach(s=>{let a=i===`?? ${s}`,c=i.startsWith(`?? ${s}/`)||i.startsWith(`?? ${s}${kx.sep}`);(a||c)&&n.push(`:!${s}`)});let o=i.match(Kne)?.[1];o&&n.push(`:!${o}.log`)}),n},Jne=async(t=process.cwd())=>{await Zr(["reset","--hard","HEAD"],{cwd:t})},Xne=async(t=process.cwd())=>{let e=await Zr(["clean","-fd","-e",".netlify"],{stdio:["ignore","pipe","pipe"],cwd:t});return String(e.stdout??"").split(`
104
104
  `).filter(r=>r.startsWith("Removing ")).map(r=>r.slice(9))},HUe=t=>{let e=t.split(`
@@ -350,7 +350,7 @@ ${Ee.trim()}
350
350
  \`\`\``:Ee.trim()),Ne==="error"&&ae&&(R=R?`${R}
351
351
 
352
352
  *Command failed*`:`*Command failed: ${ae.trim()}*`),ne({title:we,message:R,category:M},!0);break}case"step_finish":{q();let Te=le.part?.tokens;Te&&(h={input_tokens:(h?.input_tokens??0)+(Te.input??0),output_tokens:(h?.output_tokens??0)+(Te.output??0),reasoning_output_tokens:(h?.reasoning_output_tokens??0)+(Te.reasoning??0),cache_creation_input_tokens:(h?.cache_creation_input_tokens??0)+(Te.cache?.write??0),cache_read_input_tokens:(h?.cache_read_input_tokens??0)+(Te.cache?.read??0)}),le.part?.cost!=null&&(m=(m??0)+le.part.cost);break}case"error":{q();let ye=le.error?.data?.message??le.error?.message??le.part?.state?.error??(le.error?JSON.stringify(le.error).slice(0,500):"unknown error");p=p?`${p}
353
- ${ye}`:ye;break}default:le.type&&!Y.has(le.type)&&(Y.add(le.type),Tu.log(`Unhandled opencode event type: ${le.type}`))}}),await U.catch(Ie=>{q();let le=Zf({catchError:Ie,runCmd:U,error:p,result:f??w,runnerName:NI});p=le.error,f=le.result});let me=Date.now()-$;return q(),g.close(),_.flush(),!p&&!f&&w&&(f=w),h&&Ra(h,b?{model:b}:{}),{steps:S,duration:me,result:await Xa({initialResult:f,agentName:NI,hasError:!!p}),error:Qa({error:p,agentName:NI}),isRetryableError:ec(p),isProviderUnavailableError:tc(p),agentSessionId:d,resolvedModel:b,effort:u,usage:h,costUsd:m,toolErrorCount:y,toolCallCount:T}}var xle=async()=>{let t=lz.join(Tle.homedir(),".config","opencode");await g4e.rm(t,{recursive:!0,force:!0})},wle={baseDir:lz.join(Tle.homedir(),".config","opencode"),include:["opencode.db","opencode.db-shm","opencode.db-wal"]};var dz={codex:{runner:iz,clean:dle,nativeSessionArchive:fle},claude:{runner:g2,clean:sce,nativeSessionArchive:ace},gemini:{runner:az,clean:gle,nativeSessionArchive:_le},opencode:{runner:uz,clean:xle,nativeSessionArchive:wle}},sBt=Object.keys(dz),zs=t=>dz[t]?.nativeSessionArchive,Ch=dz;import{execSync as A4e}from"child_process";import Rle from"fs/promises";import x4e from"path";import Ph from"process";var Ile=pe("git-wrapper"),w4e=["status","diff","log","show","rev-parse","rev-list","ls-files","show-ref","cat-file","merge-base","blame","grep","describe"],R4e=t=>`#!/bin/bash
353
+ ${ye}`:ye;break}default:le.type&&!Y.has(le.type)&&(Y.add(le.type),Tu.log(`Unhandled opencode event type: ${le.type}`))}}),await U.catch(Ie=>{q();let le=Zf({catchError:Ie,runCmd:U,error:p,result:f??w,runnerName:NI});p=le.error,f=le.result});let me=Date.now()-$;return q(),g.close(),_.flush(),!p&&!f&&w&&(f=w),h&&Ra(h,b?{model:b}:{}),{steps:S,duration:me,result:await Xa({initialResult:f,agentName:NI,hasError:!!p}),error:Qa({error:p,agentName:NI}),isRetryableError:ec(p),isProviderUnavailableError:tc(p),agentSessionId:d,resolvedModel:b,effort:u,providerEffort:A,usage:h,costUsd:m,toolErrorCount:y,toolCallCount:T}}var xle=async()=>{let t=lz.join(Tle.homedir(),".config","opencode");await g4e.rm(t,{recursive:!0,force:!0})},wle={baseDir:lz.join(Tle.homedir(),".config","opencode"),include:["opencode.db","opencode.db-shm","opencode.db-wal"]};var dz={codex:{runner:iz,clean:dle,nativeSessionArchive:fle},claude:{runner:g2,clean:sce,nativeSessionArchive:ace},gemini:{runner:az,clean:gle,nativeSessionArchive:_le},opencode:{runner:uz,clean:xle,nativeSessionArchive:wle}},sBt=Object.keys(dz),zs=t=>dz[t]?.nativeSessionArchive,Ch=dz;import{execSync as A4e}from"child_process";import Rle from"fs/promises";import x4e from"path";import Ph from"process";var Ile=pe("git-wrapper"),w4e=["status","diff","log","show","rev-parse","rev-list","ls-files","show-ref","cat-file","merge-base","blame","grep","describe"],R4e=t=>`#!/bin/bash
354
354
  # Git wrapper that only allows read-only commands.
355
355
  # The deployment system handles staging, moves, and commits automatically.
356
356
 
@@ -526,7 +526,7 @@ Use the following file for the complete context of the ask, the environment, and
526
526
  `,l=await XYe({hash:s,manifestPath:i,manifestString:c});return{manifestInfo:{manifestPath:i,manifestString:c},identical:l}},XYe=async function({hash:t,manifestPath:e,manifestString:r}){return t===void 0||!Xhe(e)?!1:await Jhe(e,"utf8")===r},eme=async function({manifestPath:t,manifestString:e}){await YYe(JYe(t),{recursive:!0}),await ZYe(t,e)},tme=async function(t){let e=IC(t);await KYe(e,{force:!0,recursive:!0,maxRetries:3})},IC=function(t){return`${t}${nme}`},rme=function(t){return t.endsWith(nme)},nme=".netlify.cache.json",W4=async function(t){let e=IC(t);if(!Xhe(e))return!1;let{expires:r}=await QYe(t);return Hhe(r)},QYe=async function(t){let e=IC(t),r=await Jhe(e,"utf-8");return JSON.parse(r)};import{homedir as iKe}from"os";import{resolve as ime,isAbsolute as oKe,join as sKe,sep as K4}from"path";import{normalize as eKe}from"path";import{existsSync as tKe}from"fs";import rKe from"process";var Y4=function(t){try{let e=nKe(t);return tKe(e)?Promise.resolve(e):Promise.resolve("")}catch{return Promise.resolve("")}},nKe=function(t=rKe.cwd()){return eKe(t)};var kS=async function({path:t,cacheDir:e,cwdOpt:r}){let n=await aKe(t,r),i=await dKe({srcPath:n,cacheDir:e,cwdOpt:r});return{srcPath:n,cachePath:i}},aKe=async function(t,e){let r=await Y4(e),n=cKe(t,r);return lKe(n,r),n},cKe=function(t,e){if(oKe(t))return ime(t);if(e!=="")return ime(e,t);throw new Error(`Current directory does not exist: ${e}`)},lKe=function(t,e){if(e!==""&&uKe(t,e))throw new Error(`Cannot cache ${t} because it is the current directory (${e}) or a parent directory`)},uKe=function(t,e){return`${e}${K4}`.startsWith(`${t}${K4}`)},dKe=async function({srcPath:t,cacheDir:e,cwdOpt:r}){let n=bu({cacheDir:e,cwd:r}),{name:i,relPath:o}=await fKe(t,r);return sKe(n,i,o)},fKe=async function(t,e){let r=await Z4(e),n=pKe(t);return r.map(({name:i,base:o})=>mKe(i,o,n)).find(Boolean)},pKe=function(t){return t.replace(hKe,"\\")},hKe=/^[a-zA-Z]:\\/,mKe=function(t,e,r){if(r===e||!r.startsWith(e))return;let n=r.replace(e,"");return{name:t,relPath:n}},Z4=async function(t){return[...await gKe(t),{name:"home",base:iKe()},{name:"root",base:K4}]},gKe=async function(t){let e=await Y4(t);return e===""?[]:[{name:"cwd",base:e}]};var yKe=1,J4=async function({cacheDir:t,cwd:e,depth:r=yKe}={}){let n=await Z4(e),i=bu({cacheDir:t,cwd:e});return(await Promise.all(n.map(({name:a,base:c})=>SKe({name:a,base:c,cacheDir:i,depth:r})))).flat()},SKe=async function({name:t,base:e,cacheDir:r,depth:n}){return(await Vhe(`${r}/${t}`,{fileFilter:EKe,depth:n,type:"files_directories"})).map(({path:s})=>_Ke(e,s))},EKe=function({basename:t}){return!rme(t)};var vKe=async function(t,{move:e=ome,ttl:r=xKe,digests:n=[],cacheDir:i,cwd:o}={}){let{srcPath:s,cachePath:a}=await kS({path:t,cacheDir:i,cwdOpt:o});if(!await OS(s))return!1;let{manifestInfo:c,identical:l}=await Qhe({cachePath:a,move:e,ttl:r,digests:n});return l||(await X4(a,{force:!0,recursive:!0,maxRetries:3}),await z4(s,a,e),await eme(c)),!0},TKe=async function(t,{move:e=ome,cacheDir:r,cwd:n}={}){let{srcPath:i,cachePath:o}=await kS({path:t,cacheDir:r,cwdOpt:n});return!await OS(o)||await W4(o)?!1:(await X4(i,{force:!0,recursive:!0,maxRetries:3}),await z4(o,i,e),!0)},bKe=async function(t,{cacheDir:e,cwd:r}={}){let{cachePath:n}=await kS({path:t,cacheDir:e,cwdOpt:r});return await OS(n)?(await X4(n,{force:!0,recursive:!0,maxRetries:3}),await tme(n),!0):!1},AKe=async function(t,{cacheDir:e,cwd:r}={}){let{cachePath:n}=await kS({path:t,cacheDir:e,cwdOpt:r});return await OS(n)&&!await W4(n)},ome=!1,xKe=void 0,CC=async function(t,e,...r){return Array.isArray(e)?(await Promise.all(e.map(i=>t(i,...r)))).some(Boolean):t(e,...r)},wKe=CC.bind(null,vKe),RKe=CC.bind(null,TKe),IKe=CC.bind(null,bKe),CKe=CC.bind(null,AKe),sme=function(t){return{save:(e,r)=>wKe(e,{...t,...r}),restore:(e,r)=>RKe(e,{...t,...r}),remove:(e,r)=>IKe(e,{...t,...r}),has:(e,r)=>CKe(e,{...t,...r}),list:e=>J4({...t,...e}),getCacheDir:e=>bu({...t,...e})}};var nr=pe("native_session"),Q4=async(t,e)=>(await Promise.all(e.map(async n=>{try{return await Hs.stat(Ws.join(t,n)),n}catch{return null}}))).filter(n=>n!==null),Pu=async({runnerId:t,sessionId:e,archive:r,nativeSessionId:n})=>{if(!r)return nr.log("No native session archive descriptor for this runner, skipping"),null;let{baseDir:i,include:o}=r,s=!1;try{s=(await Hs.stat(i)).isDirectory()}catch{}if(!s)return nr.log(`Native session base dir ${i} not found, skipping`),null;let a=await Q4(i,o);if(a.length===0)return nr.log(`No native session history found under ${i}, skipping`),null;let c=Ws.join(ame.tmpdir(),`native-session-${e}.zip`);try{await Mr("zip",["-r","-q","-X",c,...a],{cwd:i});let l=await Hs.readFile(c);nr.log(`Zipped native session (${l.length} bytes) from ${a.join(", ")}`,{nativeSessionId:n});let{upload_url:u,s3_key:d}=await aQ(t,e);return await gQ(u,l,{contentType:"application/zip"}),nr.log("Successfully uploaded native session to S3"),d}catch(l){return nr.error("Failed to archive/upload native session, continuing without it:",l),null}finally{await Hs.rm(c,{force:!0}).catch(()=>{})}},cme=async t=>{if(!t)return!1;let{baseDir:e,include:r}=t,n=await Q4(e,r);for(let i of n)if((await Hs.readdir(Ws.join(e,i)).catch(()=>[])).length>0)return!0;return!1},PKe=t=>t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),lme=async(t,e)=>{let r=await Hs.readdir(t,{withFileTypes:!0}).catch(()=>[]);for(let n of r)if(n.isDirectory()){if(await lme(Ws.join(t,n.name),e))return!0}else if(e.test(n.name))return!0;return!1},ume=async(t,e)=>{if(!t||!e)return!1;let r=new RegExp(`(^|[^a-zA-Z0-9])${PKe(e)}([^a-zA-Z0-9]|$)`),{baseDir:n,include:i}=t,o=await Q4(n,i);for(let s of o)if(await lme(Ws.join(n,s),r))return!0;return!1},dme=async({runnerId:t,sessionId:e,archive:r})=>{if(!r)return nr.log("No native session archive descriptor for this runner, skipping restore"),!1;let{baseDir:n}=r,i=Ws.join(ame.tmpdir(),`native-session-restore-${e}.zip`);try{let o=await cQ(t,e);if(!o?.download_url)return nr.log("No native session available to restore, skipping"),!1;let s=await mQ(o.download_url);return await Hs.writeFile(i,s),nr.log(`Downloaded native session (${s.length} bytes) to ${i}`),await Hs.mkdir(n,{recursive:!0}),await Mr("unzip",["-o","-q",i,"-d",n]),nr.log(`Restored native session into ${n}`),!0}catch(o){return nr.error("Failed to fetch/restore native session, continuing without it:",o),!1}finally{await Hs.rm(i,{force:!0}).catch(()=>{})}},OKe="native-sessions",fme=(t,e)=>sme({cacheDir:Ws.join(e.dir,OKe),cwd:t}),pme=async({archive:t,cache:e})=>{if(!e?.dir||!t)return!1;let{baseDir:r,include:n}=t;try{return await fme(r,e).restore(n.map(o=>Ws.join(r,o)),{})?(nr.log(`Restored native session from buildbot cache into ${r}`),!0):(nr.log("No native session in buildbot cache, skipping restore"),!1)}catch(i){return nr.error("Failed to restore native session from buildbot cache, continuing without it:",i),!1}},Zh=async({archive:t,cache:e,nativeSessionId:r})=>{if(!e?.dir||!t)return nr.log("No buildbot cache configured for the native session, skipping cache seed",{nativeSessionId:r}),!1;let{baseDir:n,include:i}=t;try{return await fme(n,e).save(i.map(s=>Ws.join(n,s)),{})?(nr.log(`Saved native session to buildbot cache under ${e.dir}`,{nativeSessionId:r}),!0):(nr.log("No native session history to save to buildbot cache, skipping"),!1)}catch(o){return nr.error("Failed to save native session to buildbot cache, continuing:",o),!1}};var Jh=pe("inference_stage"),hme=5,Pc=async t=>{let{additionalContext:e,cliPath:r,config:n,context:i,buildErrors:o,runner:s,persistSteps:a,aiGateway:c,attempt:l,contextPrefix:u,priorAgentSessionId:d,cwd:f,abortSignal:p,onSessionId:h,resumeSession:m,effortOverride:y,answerFold:T}=t;if(po())throw new Error("Shutdown in progress, aborting inference stage");Jh.log(`Running inference stage, attempt ${l} of ${hme}`);let b=!1,A=await pt(Ve(),"inference-stage",async S=>{S?.setAttributes({"inference.attempt":l||1}),$X();let I=!!(l&&l>1),C=await NKe(n,I),$=!!m&&!!d;$&&n.runner==="gemini"&&!await fS(d)&&($=!1);let k=C.viable||$;b=k,C.outcome!=="not_eligible"&&ue.inc("inference.native_resume",1,{outcome:C.outcome,...C.source?{source:C.source}:{}});let O=n;if("prompt"in n&&n.answeredInteraction&&We().questionsEnabled){let E=n.answeredInteraction,w=k||I&&!!d,Y=[E];if(!w){T.allAnswered??=rue(n);let q=await T.allAnswered;q===null&&(T.allAnswered=void 0),q&&q.length>0&&(Y=q.some(me=>me.refId===E.refId)?q:[...q,E])}O={...n,prompt:iue(n.prompt,Y)},!I&&!T.counted&&(T.counted=!0,Jh.log("Resuming session with answered questions",{sessionId:n.sessionId,interactionCount:Y.length}),ue.inc("inference.answer_resume",1,{fold:w?"latest":"all"}))}let{prompt:U}=await pt(Ve(),"compose-prompt",async()=>await Hle({cliPath:r,config:O,buildErrorContext:kKe(o),netlify:i,additionalContext:e,resumePrompt:k})),_=`
527
527
  ${u||""}
528
528
  ${U}
529
- `.trim(),ne={...n,prompt:_},N=d??(k?C.sessionId:void 0),g=await pt(Ve(),`run-${n.runner}`,async E=>{let w=MD();E?.setAttributes({"gen_ai.operation.name":"chat","gen_ai.capability.name":n.mode,"gen_ai.provider.name":WX(n.runner),"gen_ai.system":n.runner,...w?{"gen_ai.input.messages":hA("user",_)}:{}});let Y=Date.now(),q=await s({aiGateway:c,config:ne,netlify:i,persistSteps:a,continueSession:I||k,priorAgentSessionId:N,cwd:f,cliPath:r,abortSignal:p,onSessionId:h,...y?{effortOverride:y}:{}}),me=Date.now(),Ie=q.resolvedModel||n.model||"unknown",le=q.error?"error":"stop";return E?.setAttributes({...w?{"gen_ai.output.messages":hA("assistant",q.result??q.error??"",le)}:{},"gen_ai.response.finish_reasons":[le],"gen_ai.request.model":Ie,"gen_ai.response.model":Ie,...q.effort?{"gen_ai.request.effort":q.effort}:{},...q.usage?.input_tokens!=null?{"gen_ai.usage.input_tokens":q.usage.input_tokens}:{},...q.usage?.output_tokens!=null?{"gen_ai.usage.output_tokens":q.usage.output_tokens}:{},...q.usage?.cache_creation_input_tokens!=null?{"gen_ai.usage.cache_creation.input_tokens":q.usage.cache_creation_input_tokens}:{},...q.usage?.cache_read_input_tokens!=null?{"gen_ai.usage.cache_read.input_tokens":q.usage.cache_read_input_tokens}:{},...q.usage?.reasoning_output_tokens!=null?{"gen_ai.usage.reasoning.output_tokens":q.usage.reasoning_output_tokens}:{}}),YX(q.steps??[],n.mode,Y,me),q});return g.result&&(g.result=Gn(g.result)),g.error&&(g.error=Gn(g.error)),await a.flush(),g});if(A.aborted)return Jh.log("Inference turn was interrupted (credit wrap-up); skipping retry/error handling",{agentSessionId:A.agentSessionId}),{runnerResult:A,nativeResume:b};if(A.error){if(po()){let S=new Error("Shutdown in progress, aborting inference stage");throw Object.assign(S,{agentSessionId:A.agentSessionId}),S}if(Jh.error("Runner failed",{stepsCount:A.steps.length,duration:A.duration,error:A.error,isRetryableError:A.isRetryableError,attempt:l||1,agentSessionId:A.agentSessionId}),ue.inc("inference.failed",1,{attempt:l||1,is_retryable:!!A.isRetryableError,is_provider_unavailable:!!A.isProviderUnavailableError}),A.isRetryableError&&(!l||l<hme))return Jh.log("Retrying inference stage"),await new Promise(I=>setTimeout(I,5e3)),{runnerResult:(await Pc({...t,attempt:(l||1)+1,priorAgentSessionId:A.agentSessionId,contextPrefix:A.agentSessionId?"":"<important> The agent has already started on this work but ran into networking errors trying to complete it. Please continue from where it left off (you can use git commands to see what's currently changed thus far) and do not start over. Here is the full prompt for context: </important>"})).runnerResult,nativeResume:b};{if(Jh.log("Do not retry inference stage"),A.error.toLowerCase().includes("usage exceeded")){let I=new Ti(A.error,503,"Credit limit reached. Please add more credits to continue using Agent Runners.",!0);throw Object.assign(I,{agentSessionId:A.agentSessionId}),I}let S=A.isRetryableError||A.isProviderUnavailableError?new ef(A.error):new Error(A.error);throw Object.assign(S,{agentSessionId:A.agentSessionId}),S}}return{runnerResult:A,nativeResume:b}},NKe=async(t,e)=>{if(e)return{viable:!1,outcome:"not_eligible"};let r=t.previousSession,{viable:n,outcome:i}=eue(t);if(!n)return{viable:n,outcome:i};let o=r?.nativeSessionId,s=zs(t.runner),a=async()=>o?t.runner==="gemini"?!!await oz(o):ume(s,o):!1,c;if(Xle(t)&&await cme(s))c="local";else if(t.fastInit&&We().warmNativeResumeEnabled&&await pme({archive:s,cache:t.cache})&&await a())c="cache_restore";else{if(c="fetch",!We().coldResumeFromS3Enabled)return{viable:!1,outcome:"cold_resume_disabled",source:c};if(!await dme({runnerId:t.id,sessionId:t.sessionId,archive:s}))return{viable:!1,outcome:"fetch_failed",source:c}}return t.runner==="gemini"&&o&&!await fS(o)?{viable:!1,outcome:"sanitize_failed",source:c}:{viable:!0,sessionId:o,outcome:"resumed",source:c}},kKe=t=>!t||t.length===0?"":`
529
+ `.trim(),ne={...n,prompt:_},N=d??(k?C.sessionId:void 0),g=await pt(Ve(),`run-${n.runner}`,async E=>{let w=MD();E?.setAttributes({"gen_ai.operation.name":"chat","gen_ai.capability.name":n.mode,"gen_ai.provider.name":WX(n.runner),"gen_ai.system":n.runner,...w?{"gen_ai.input.messages":hA("user",_)}:{}});let Y=Date.now(),q=await s({aiGateway:c,config:ne,netlify:i,persistSteps:a,continueSession:I||k,priorAgentSessionId:N,cwd:f,cliPath:r,abortSignal:p,onSessionId:h,...y?{effortOverride:y}:{}}),me=Date.now(),Ie=q.resolvedModel||n.model||"unknown",le=q.error?"error":"stop";return E?.setAttributes({...w?{"gen_ai.output.messages":hA("assistant",q.result??q.error??"",le)}:{},"gen_ai.response.finish_reasons":[le],"gen_ai.request.model":Ie,"gen_ai.response.model":Ie,"gen_ai.request.effort":q.effort??"auto",...q.usage?.input_tokens!=null?{"gen_ai.usage.input_tokens":q.usage.input_tokens}:{},...q.usage?.output_tokens!=null?{"gen_ai.usage.output_tokens":q.usage.output_tokens}:{},...q.usage?.cache_creation_input_tokens!=null?{"gen_ai.usage.cache_creation.input_tokens":q.usage.cache_creation_input_tokens}:{},...q.usage?.cache_read_input_tokens!=null?{"gen_ai.usage.cache_read.input_tokens":q.usage.cache_read_input_tokens}:{},...q.usage?.reasoning_output_tokens!=null?{"gen_ai.usage.reasoning.output_tokens":q.usage.reasoning_output_tokens}:{}}),YX(q.steps??[],n.mode,Y,me),q});return g.result&&(g.result=Gn(g.result)),g.error&&(g.error=Gn(g.error)),await a.flush(),g});if(A.aborted)return Jh.log("Inference turn was interrupted (credit wrap-up); skipping retry/error handling",{agentSessionId:A.agentSessionId}),{runnerResult:A,nativeResume:b};if(A.error){if(po()){let S=new Error("Shutdown in progress, aborting inference stage");throw Object.assign(S,{agentSessionId:A.agentSessionId}),S}if(Jh.error("Runner failed",{stepsCount:A.steps.length,duration:A.duration,error:A.error,isRetryableError:A.isRetryableError,attempt:l||1,agentSessionId:A.agentSessionId}),ue.inc("inference.failed",1,{attempt:l||1,is_retryable:!!A.isRetryableError,is_provider_unavailable:!!A.isProviderUnavailableError}),A.isRetryableError&&(!l||l<hme))return Jh.log("Retrying inference stage"),await new Promise(I=>setTimeout(I,5e3)),{runnerResult:(await Pc({...t,attempt:(l||1)+1,priorAgentSessionId:A.agentSessionId,contextPrefix:A.agentSessionId?"":"<important> The agent has already started on this work but ran into networking errors trying to complete it. Please continue from where it left off (you can use git commands to see what's currently changed thus far) and do not start over. Here is the full prompt for context: </important>"})).runnerResult,nativeResume:b};{if(Jh.log("Do not retry inference stage"),A.error.toLowerCase().includes("usage exceeded")){let I=new Ti(A.error,503,"Credit limit reached. Please add more credits to continue using Agent Runners.",!0);throw Object.assign(I,{agentSessionId:A.agentSessionId}),I}let S=A.isRetryableError||A.isProviderUnavailableError?new ef(A.error):new Error(A.error);throw Object.assign(S,{agentSessionId:A.agentSessionId}),S}}return{runnerResult:A,nativeResume:b}},NKe=async(t,e)=>{if(e)return{viable:!1,outcome:"not_eligible"};let r=t.previousSession,{viable:n,outcome:i}=eue(t);if(!n)return{viable:n,outcome:i};let o=r?.nativeSessionId,s=zs(t.runner),a=async()=>o?t.runner==="gemini"?!!await oz(o):ume(s,o):!1,c;if(Xle(t)&&await cme(s))c="local";else if(t.fastInit&&We().warmNativeResumeEnabled&&await pme({archive:s,cache:t.cache})&&await a())c="cache_restore";else{if(c="fetch",!We().coldResumeFromS3Enabled)return{viable:!1,outcome:"cold_resume_disabled",source:c};if(!await dme({runnerId:t.id,sessionId:t.sessionId,archive:s}))return{viable:!1,outcome:"fetch_failed",source:c}}return t.runner==="gemini"&&o&&!await fS(o)?{viable:!1,outcome:"sanitize_failed",source:c}:{viable:!0,sessionId:o,outcome:"resumed",source:c}},kKe=t=>!t||t.length===0?"":`
530
530
  Deploy failed. Here are the errors to review on the latest build:
531
531
 
532
532
  Below are all of the logs with potential issues that we extracted. Some of them may be false positives, discern them carefully and ensure fixes are relevant.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@netlify/agent-runner-cli",
3
3
  "type": "module",
4
- "version": "1.154.0-xhigh.0",
4
+ "version": "1.154.0-xhigh.1",
5
5
  "description": "CLI tool for running Netlify agents",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",