@netlify/agent-runner-cli 1.48.0-alpha → 1.48.1-alpha
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin-local.js +1 -1
- package/dist/bin.js +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/dist/bin-local.js
CHANGED
|
@@ -22,7 +22,7 @@ web_search = true
|
|
|
22
22
|
${n.trim()}
|
|
23
23
|
\`\`\``)}catch(i){G.error("Could not decode outputMsg",i,t.output)}return{title:o,message:n}};import kr from"fs/promises";import Lr from"os";import Dt from"path";import Q from"process";import Ur from"readline";var ae=_("runner_gemini"),$t="Gemini CLI",Mr=({catchError:e,runCmd:t,error:r,result:o,runnerName:n})=>(ae.log(`${n} command completed with catch handler triggered`,{hadExistingError:!!r,hadExistingResult:!!o,resultLength:o?o.length:0,catchError:e?.message||"No error object",processExitCode:t.exitCode,processKilled:t.killed}),o?(ae.log("Preserving existing result despite catch handler being triggered"),r?{error:r,result:o}:{error:"Process completed with errors but result was captured",result:o}):(ae.log("Setting result to undefined because no valid result was captured"),{error:r||`${n} failed`,result:void 0})),Gr={list_directory:"List",read_file:"Read",write_file:"Write",glob:"Find",search_file_content:"Find",replace:"Edit",run_shell_command:"Run",web_fetch:"Web Fetch",web_search:"Web Search",read_many_files:"Read Many",save_memory:"Memorize"};async function Ke({config:e,netlify:t,persistSteps:r,sendSteps:o,aiGateway:n}){let{accountType:i,prompt:a,modelVersionOverrides:l}=e,{model:s}=e;if(n){let{token:w,url:f}=n;if(!w||!f)throw new Error("No token or url provided from AI Gateway");if(l?.gemini){let u=l?.gemini?.[i];if(u){if(!await n.isModelAvailableForProvider("gemini",u))throw new Error(`Model override '${u}' is not available for gemini provider`);s=u}}else if(s&&!await n.isModelAvailableForProvider("gemini",s))throw new Error(`Model '${s}' is not available for gemini provider`);Q.env.GEMINI_API_KEY=w,Q.env.GOOGLE_GEMINI_BASE_URL=f}else if(!Q.env.GEMINI_API_KEY)throw new Error("GEMINI_API_KEY is not provided");let h=[],d=[],c=[],m={},y=0,x=0,I,g,v=[J(Q.cwd(),"gemini"),...s?["--model",s]:[],"--yolo","-p",a],R=`${Q.env.NVM_BIN}/node`;ae.log(`Running ${R} ${v.join(" ")}`);let N=t.utils.run(R,v,{all:!0,env:Q.env});N.stdin?.end();let O=Ie(()=>{r?.({steps:h,duration:x}),o?.({steps:d,duration:x}),d=[]},250),b=(w,f)=>{w.id=y,y+=1,c.push(w),h.push(w),d.push(w),f||O.flush(),O(),f&&O.flush()},S=Ur.createInterface({input:N.all});return S.on("error",w=>{ae.error("Readline interface error",{error:w.message,stack:w.stack})}),S.on("line",w=>{let f=null;try{if(w.startsWith("[API Error")){let u=w.match(/\[api error: (.+?)]$/i)?.[1];f={type:"error",value:Et(u,!1)?.error?.message||u||"Gemini encountered error"}}else f=JSON.parse(w)}catch{return}if(f)switch(f.type){case"thought":{let u=f.value;b({title:u?.subject??"Thinking...",message:u?.description},!0);break}case"content":{f.value&&b({message:f.value});break}case"tool_call_request":{let u=f.value,E=Gr[u.name]??u.name,p=u.args?.path||u.args?.absolute_path,T=p&&Dt.relative(Q.cwd(),p),le=u.args?.command,V={title:[E,T&&`\`${T}\``,le&&`\`${le}\``].filter(Boolean).join(" ")};m[u.callId]=V,O.flush();break}case"tool_result":{let u=f.value,E=m[u.callId];if(E){let p=[u.resultDisplay,u.responseParts?.functionResponse?.response?.output].find(T=>typeof T=="string"&&T);p&&(E.message=`\`\`\`
|
|
24
24
|
${p.trim()}
|
|
25
|
-
\`\`\``),b(E,!0)}break}case"result":{x=f.duration_ms,I=f.value,[c,h,d].forEach(u=>{u[u.length-1]?.message===I&&u.pop()});break}case"error":{g=f.value;break}case"finished":break;default:{ae.warn("Unhandled message type:",f.type);break}}}),await N.catch(w=>{({error:g,result:I}=Mr({catchError:w,runCmd:N,error:g,result:I,runnerName:"Gemini"}))}),S.close(),O.flush(),{steps:c,duration:x,result:await oe({initialResult:I,agentName:$t,hasError:!!g}),error:ie({error:g,agentName:$t}),isRetryableError:se(g)}}var kt=async()=>{let e=Dt.join(Lr.homedir(),".gemini");await kr.rm(e,{recursive:!0,force:!0})};var jr={codex:{runner:qe,clean:Ft},claude:{runner:Be,clean:Ct},gemini:{runner:Ke,clean:kt}},Lt=jr;var Ut=async({config:e,apiThrottle:t,apiToken:r,runnerVersion:o})=>await A(Yr(),"init-stage",async n=>{let i=performance.now();n?.setAttributes({"init.runner":e.runner,"init.id":e.id,"init.sessionId":e.sessionId,"init.hasRepo":e.hasRepo,"init.useGateway":e.useGateway,"init.validateAgent":e.validateAgent,"init.runnerVersion":o||"unknown"});let a=Lt[e.runner];if(!a)throw n?.setAttributes({"init.error":"unsupported_runner"}),new Error(`${e.runner} is not supported`);let l=Br({apiToken:r});it(l);let s=e.useGateway?await dt({netlify:l,config:e}):void 0;n?.setAttributes({"init.aiGateway.created":!!s}),e.validateAgent&&e.errorLogsPath&&n?.setAttributes({"init.errorLogsPath":e.errorLogsPath});let h=yt(({steps:y=[],duration:x})=>{let I=y.map(g=>({...g,title:g.title?q(g.title):void 0,message:g.message?q(g.message):void 0}));return y.length=0,H(e.id,e.sessionId,{steps:I,duration:x})},t),d=await Ge(
|
|
25
|
+
\`\`\``),b(E,!0)}break}case"result":{x=f.duration_ms,I=f.value,[c,h,d].forEach(u=>{u[u.length-1]?.message===I&&u.pop()});break}case"error":{g=f.value;break}case"finished":break;default:{ae.warn("Unhandled message type:",f.type);break}}}),await N.catch(w=>{({error:g,result:I}=Mr({catchError:w,runCmd:N,error:g,result:I,runnerName:"Gemini"}))}),S.close(),O.flush(),{steps:c,duration:x,result:await oe({initialResult:I,agentName:$t,hasError:!!g}),error:ie({error:g,agentName:$t}),isRetryableError:se(g)}}var kt=async()=>{let e=Dt.join(Lr.homedir(),".gemini");await kr.rm(e,{recursive:!0,force:!0})};var jr={codex:{runner:qe,clean:Ft},claude:{runner:Be,clean:Ct},gemini:{runner:Ke,clean:kt}},Lt=jr;var Ut=async({config:e,apiThrottle:t,apiToken:r,runnerVersion:o})=>await A(Yr(),"init-stage",async n=>{let i=performance.now();n?.setAttributes({"init.runner":e.runner,"init.id":e.id,"init.sessionId":e.sessionId,"init.hasRepo":e.hasRepo,"init.useGateway":e.useGateway,"init.validateAgent":e.validateAgent,"init.runnerVersion":o||"unknown"});let a=Lt[e.runner];if(!a)throw n?.setAttributes({"init.error":"unsupported_runner"}),new Error(`${e.runner} is not supported`);let l=Br({apiToken:r});it(l);let s=e.useGateway?await dt({netlify:l,config:e}):void 0;n?.setAttributes({"init.aiGateway.created":!!s}),e.validateAgent&&e.errorLogsPath&&n?.setAttributes({"init.errorLogsPath":e.errorLogsPath});let h=yt(({steps:y=[],duration:x})=>{let I=y.map(g=>({...g,title:g.title?q(g.title):void 0,message:g.message?q(g.message):void 0}));return y.length=0,H(e.id,e.sessionId,{steps:I,duration:x})},t),d=await Ge();await Me(d);let c;e.hasRepo?e.sha?(c=e.sha,n?.setAttributes({"init.sha.source":"provided"})):(c=await vt(),await de(e.id,{sha:c}),n?.setAttributes({"init.sha.source":"current_commit"})):(c=await Rt(),n?.setAttributes({"init.sha.source":"first_commit","init.source":"zip"}));let m=performance.now()-i;return n?.setAttributes({"init.sha":c||"unknown","init.duration.ms":m,"init.status":"success"}),{aiGateway:s,context:l,persistSteps:h,runner:a,sha:c}}),Br=({apiToken:e})=>({constants:{NETLIFY_API_HOST:ve.env.NETLIFY_API_HOST||"api.netlify.com",NETLIFY_API_TOKEN:e||ve.env.NETLIFY_API_TOKEN,SITE_ID:ve.env.SITE_ID,FUNCTIONS_DIST:ve.env.FUNCTIONS_DIST||"netlify/functions"},utils:{run:C}});import{getTracer as We}from"@netlify/otel";import Hr from"crypto";import X from"fs/promises";import k from"path";import j from"process";var D=_("context"),qr=e=>{let t=e?.constants||{};return{siteId:t.SITE_ID,accountId:j.env.NETLIFY_TEAM_ID,userId:j.env.NETLIFY_AGENT_RUNNER_USER_ID,siteSlug:j.env.SITE_NAME,apiHost:t.NETLIFY_API_HOST,functionsDir:t.FUNCTIONS_DIST}},Kr=10,Wr=async e=>{let{name:t,ext:r}=k.parse(e),o=e,n=k.join(j.cwd(),U,o),i=0;for(;await Vr(n);){if(i>=Kr)throw new Error("Failed to generate context file");o=`${t}-${Hr.randomUUID().slice(0,5)}${r}`,n=k.join(j.cwd(),U,o),i+=1}return o},Vr=async e=>{try{return await X.access(e),!0}catch{return!1}},Jr=async()=>{try{D.log("Fetching Netlify features context...");let e=await fetch("https://docs.netlify.com/ai-context/context-consumers",{signal:AbortSignal.timeout(1e4)});if(!e.ok)throw new Error(`Failed to fetch context consumers: ${e.status} ${e.statusText}`);let t=await e.json();if(!t||typeof t!="object"||!Array.isArray(t.consumers))return D.warn("Invalid response structure: missing or invalid consumers array"),null;let r=t.consumers.find(o=>o&&typeof o=="object"&&o.key==="catchall-consumer");return r?!r.contextScopes||typeof r.contextScopes!="object"?(D.warn("Catchall consumer missing or invalid contextScopes"),null):r:(D.warn("Catchall consumer not found in context consumers"),null)}catch(e){return e.name==="AbortError"?D.warn("Netlify features context request timed out"):D.warn("Failed to fetch Netlify features context:",e.message),null}},Xr=async(e,t)=>{try{let r=await fetch(e,{signal:AbortSignal.timeout(1e4)});if(!r.ok)throw new Error(`Failed to fetch ${e}: ${r.status} ${r.statusText}`);let o=await r.text();return await X.writeFile(t,o,"utf-8"),!0}catch(r){return r.name==="AbortError"?D.warn(`Download timeout for ${e}`):D.warn(`Failed to download context file ${e}:`,r.message),!1}},Re=null,zr=async()=>{if(Re)return Re;let e=await Jr();if(!e)return[];let t=k.join(j.cwd(),U,Le);await X.mkdir(t,{recursive:!0});let r=Object.entries(e.contextScopes).map(async([n,i])=>{if(!i||typeof i!="object"||!i.endpoint||!i.scope)return D.warn(`Invalid scope data for ${n}, skipping...`),null;let a=`${n}.md`,l=k.join(t,a),s=k.join(U,Le,a);return D.log(`Downloading ${i.scope} context...`),await Xr(i.endpoint,l)?(D.log(`Downloaded: ${s}`),{scope:i.scope,path:s,key:n}):null});return Re=(await Promise.all(r)).filter(n=>n!==null),Re},Mt=async({cliPath:e,netlify:t,config:r,buildErrorContext:o})=>{let n=qr(t),i=await Wr(ht),a=k.join(j.cwd(),U);await X.mkdir(a,{recursive:!0});let l=k.join(U,i),s=k.join(j.cwd(),l),h=k.join(j.cwd(),U,ne);try{await X.unlink(h),D.log(`Deleted old results file: ${h}`)}catch{}let d=o?`You've already made changes to complete the above request. However, the build is currently failing after your changes.
|
|
26
26
|
Your task is to analyze and fix the build errors.
|
|
27
27
|
Don't apply techniques of reverting changes. Apply fixes related to errors.
|
|
28
28
|
Don't try to run build by yourself. Just fix the errors.
|
package/dist/bin.js
CHANGED
|
@@ -22,7 +22,7 @@ web_search = true
|
|
|
22
22
|
${n.trim()}
|
|
23
23
|
\`\`\``)}catch(s){G.error("Could not decode outputMsg",s,t.output)}return{title:o,message:n}};import Mr from"fs/promises";import jr from"os";import Gt from"path";import z from"process";import Yr from"readline";var ie=_("runner_gemini"),Ut="Gemini CLI",Br=({catchError:e,runCmd:t,error:r,result:o,runnerName:n})=>(ie.log(`${n} command completed with catch handler triggered`,{hadExistingError:!!r,hadExistingResult:!!o,resultLength:o?o.length:0,catchError:e?.message||"No error object",processExitCode:t.exitCode,processKilled:t.killed}),o?(ie.log("Preserving existing result despite catch handler being triggered"),r?{error:r,result:o}:{error:"Process completed with errors but result was captured",result:o}):(ie.log("Setting result to undefined because no valid result was captured"),{error:r||`${n} failed`,result:void 0})),Hr={list_directory:"List",read_file:"Read",write_file:"Write",glob:"Find",search_file_content:"Find",replace:"Edit",run_shell_command:"Run",web_fetch:"Web Fetch",web_search:"Web Search",read_many_files:"Read Many",save_memory:"Memorize"};async function Je({config:e,netlify:t,persistSteps:r,sendSteps:o,aiGateway:n}){let{accountType:s,prompt:a,modelVersionOverrides:l}=e,{model:i}=e;if(n){let{token:T,url:f}=n;if(!T||!f)throw new Error("No token or url provided from AI Gateway");if(l?.gemini){let c=l?.gemini?.[s];if(c){if(!await n.isModelAvailableForProvider("gemini",c))throw new Error(`Model override '${c}' is not available for gemini provider`);i=c}}else if(i&&!await n.isModelAvailableForProvider("gemini",i))throw new Error(`Model '${i}' is not available for gemini provider`);z.env.GEMINI_API_KEY=T,z.env.GOOGLE_GEMINI_BASE_URL=f}else if(!z.env.GEMINI_API_KEY)throw new Error("GEMINI_API_KEY is not provided");let h=[],d=[],u=[],m={},E=0,I=0,w,g,R=[J(z.cwd(),"gemini"),...i?["--model",i]:[],"--yolo","-p",a],N=`${z.env.NVM_BIN}/node`;ie.log(`Running ${N} ${R.join(" ")}`);let S=t.utils.run(N,R,{all:!0,env:z.env});S.stdin?.end();let b=_e(()=>{r?.({steps:h,duration:I}),o?.({steps:d,duration:I}),d=[]},250),C=(T,f)=>{T.id=E,E+=1,u.push(T),h.push(T),d.push(T),f||b.flush(),b(),f&&b.flush()},v=Yr.createInterface({input:S.all});return v.on("error",T=>{ie.error("Readline interface error",{error:T.message,stack:T.stack})}),v.on("line",T=>{let f=null;try{if(T.startsWith("[API Error")){let c=T.match(/\[api error: (.+?)]$/i)?.[1];f={type:"error",value:Te(c,!1)?.error?.message||c||"Gemini encountered error"}}else f=JSON.parse(T)}catch{return}if(f)switch(f.type){case"thought":{let c=f.value;C({title:c?.subject??"Thinking...",message:c?.description},!0);break}case"content":{f.value&&C({message:f.value});break}case"tool_call_request":{let c=f.value,y=Hr[c.name]??c.name,p=c.args?.path||c.args?.absolute_path,x=p&&Gt.relative(z.cwd(),p),ae=c.args?.command,q={title:[y,x&&`\`${x}\``,ae&&`\`${ae}\``].filter(Boolean).join(" ")};m[c.callId]=q,b.flush();break}case"tool_result":{let c=f.value,y=m[c.callId];if(y){let p=[c.resultDisplay,c.responseParts?.functionResponse?.response?.output].find(x=>typeof x=="string"&&x);p&&(y.message=`\`\`\`
|
|
24
24
|
${p.trim()}
|
|
25
|
-
\`\`\``),C(y,!0)}break}case"result":{I=f.duration_ms,w=f.value,[u,h,d].forEach(c=>{c[c.length-1]?.message===w&&c.pop()});break}case"error":{g=f.value;break}case"finished":break;default:{ie.warn("Unhandled message type:",f.type);break}}}),await S.catch(T=>{({error:g,result:w}=Br({catchError:T,runCmd:S,error:g,result:w,runnerName:"Gemini"}))}),v.close(),b.flush(),{steps:u,duration:I,result:await ne({initialResult:w,agentName:Ut,hasError:!!g}),error:oe({error:g,agentName:Ut}),isRetryableError:se(g)}}var Mt=async()=>{let e=Gt.join(jr.homedir(),".gemini");await Mr.rm(e,{recursive:!0,force:!0})};var Kr={codex:{runner:Ve,clean:kt},claude:{runner:qe,clean:Lt},gemini:{runner:Je,clean:Mt}},jt=Kr;var Yt=async({config:e,apiThrottle:t,apiToken:r,runnerVersion:o})=>await A(qr(),"init-stage",async n=>{let s=performance.now();n?.setAttributes({"init.runner":e.runner,"init.id":e.id,"init.sessionId":e.sessionId,"init.hasRepo":e.hasRepo,"init.useGateway":e.useGateway,"init.validateAgent":e.validateAgent,"init.runnerVersion":o||"unknown"});let a=jt[e.runner];if(!a)throw n?.setAttributes({"init.error":"unsupported_runner"}),new Error(`${e.runner} is not supported`);let l=Wr({apiToken:r});at(l);let i=e.useGateway?await ft({netlify:l,config:e}):void 0;n?.setAttributes({"init.aiGateway.created":!!i}),e.validateAgent&&e.errorLogsPath&&n?.setAttributes({"init.errorLogsPath":e.errorLogsPath});let h=wt(({steps:E=[],duration:I})=>{let w=E.map(g=>({...g,title:g.title?B(g.title):void 0,message:g.message?B(g.message):void 0}));return E.length=0,Y(e.id,e.sessionId,{steps:w,duration:I})},t),d=await Be(
|
|
25
|
+
\`\`\``),C(y,!0)}break}case"result":{I=f.duration_ms,w=f.value,[u,h,d].forEach(c=>{c[c.length-1]?.message===w&&c.pop()});break}case"error":{g=f.value;break}case"finished":break;default:{ie.warn("Unhandled message type:",f.type);break}}}),await S.catch(T=>{({error:g,result:w}=Br({catchError:T,runCmd:S,error:g,result:w,runnerName:"Gemini"}))}),v.close(),b.flush(),{steps:u,duration:I,result:await ne({initialResult:w,agentName:Ut,hasError:!!g}),error:oe({error:g,agentName:Ut}),isRetryableError:se(g)}}var Mt=async()=>{let e=Gt.join(jr.homedir(),".gemini");await Mr.rm(e,{recursive:!0,force:!0})};var Kr={codex:{runner:Ve,clean:kt},claude:{runner:qe,clean:Lt},gemini:{runner:Je,clean:Mt}},jt=Kr;var Yt=async({config:e,apiThrottle:t,apiToken:r,runnerVersion:o})=>await A(qr(),"init-stage",async n=>{let s=performance.now();n?.setAttributes({"init.runner":e.runner,"init.id":e.id,"init.sessionId":e.sessionId,"init.hasRepo":e.hasRepo,"init.useGateway":e.useGateway,"init.validateAgent":e.validateAgent,"init.runnerVersion":o||"unknown"});let a=jt[e.runner];if(!a)throw n?.setAttributes({"init.error":"unsupported_runner"}),new Error(`${e.runner} is not supported`);let l=Wr({apiToken:r});at(l);let i=e.useGateway?await ft({netlify:l,config:e}):void 0;n?.setAttributes({"init.aiGateway.created":!!i}),e.validateAgent&&e.errorLogsPath&&n?.setAttributes({"init.errorLogsPath":e.errorLogsPath});let h=wt(({steps:E=[],duration:I})=>{let w=E.map(g=>({...g,title:g.title?B(g.title):void 0,message:g.message?B(g.message):void 0}));return E.length=0,Y(e.id,e.sessionId,{steps:w,duration:I})},t),d=await Be();await Ye(d);let u;e.hasRepo?e.sha?(u=e.sha,n?.setAttributes({"init.sha.source":"provided"})):(u=await St(),await ce(e.id,{sha:u}),n?.setAttributes({"init.sha.source":"current_commit"})):(u=await Ct(),n?.setAttributes({"init.sha.source":"first_commit","init.source":"zip"}));let m=performance.now()-s;return n?.setAttributes({"init.sha":u||"unknown","init.duration.ms":m,"init.status":"success"}),{aiGateway:i,context:l,persistSteps:h,runner:a,sha:u}}),Wr=({apiToken:e})=>({constants:{NETLIFY_API_HOST:Re.env.NETLIFY_API_HOST||"api.netlify.com",NETLIFY_API_TOKEN:e||Re.env.NETLIFY_API_TOKEN,SITE_ID:Re.env.SITE_ID,FUNCTIONS_DIST:Re.env.FUNCTIONS_DIST||"netlify/functions"},utils:{run:O}});import{getTracer as Xe}from"@netlify/otel";import Vr from"crypto";import W from"fs/promises";import D from"path";import M from"process";var F=_("context"),Jr=e=>{let t=e?.constants||{};return{siteId:t.SITE_ID,accountId:M.env.NETLIFY_TEAM_ID,userId:M.env.NETLIFY_AGENT_RUNNER_USER_ID,siteSlug:M.env.SITE_NAME,apiHost:t.NETLIFY_API_HOST,functionsDir:t.FUNCTIONS_DIST}},Xr=10,zr=async e=>{let{name:t,ext:r}=D.parse(e),o=e,n=D.join(M.cwd(),k,o),s=0;for(;await Zr(n);){if(s>=Xr)throw new Error("Failed to generate context file");o=`${t}-${Vr.randomUUID().slice(0,5)}${r}`,n=D.join(M.cwd(),k,o),s+=1}return o},Zr=async e=>{try{return await W.access(e),!0}catch{return!1}},Qr=async()=>{try{F.log("Fetching Netlify features context...");let e=await fetch("https://docs.netlify.com/ai-context/context-consumers",{signal:AbortSignal.timeout(1e4)});if(!e.ok)throw new Error(`Failed to fetch context consumers: ${e.status} ${e.statusText}`);let t=await e.json();if(!t||typeof t!="object"||!Array.isArray(t.consumers))return F.warn("Invalid response structure: missing or invalid consumers array"),null;let r=t.consumers.find(o=>o&&typeof o=="object"&&o.key==="catchall-consumer");return r?!r.contextScopes||typeof r.contextScopes!="object"?(F.warn("Catchall consumer missing or invalid contextScopes"),null):r:(F.warn("Catchall consumer not found in context consumers"),null)}catch(e){return e.name==="AbortError"?F.warn("Netlify features context request timed out"):F.warn("Failed to fetch Netlify features context:",e.message),null}},en=async(e,t)=>{try{let r=await fetch(e,{signal:AbortSignal.timeout(1e4)});if(!r.ok)throw new Error(`Failed to fetch ${e}: ${r.status} ${r.statusText}`);let o=await r.text();return await W.writeFile(t,o,"utf-8"),!0}catch(r){return r.name==="AbortError"?F.warn(`Download timeout for ${e}`):F.warn(`Failed to download context file ${e}:`,r.message),!1}},xe=null,tn=async()=>{if(xe)return xe;let e=await Qr();if(!e)return[];let t=D.join(M.cwd(),k,$e);await W.mkdir(t,{recursive:!0});let r=Object.entries(e.contextScopes).map(async([n,s])=>{if(!s||typeof s!="object"||!s.endpoint||!s.scope)return F.warn(`Invalid scope data for ${n}, skipping...`),null;let a=`${n}.md`,l=D.join(t,a),i=D.join(k,$e,a);return F.log(`Downloading ${s.scope} context...`),await en(s.endpoint,l)?(F.log(`Downloaded: ${i}`),{scope:s.scope,path:i,key:n}):null});return xe=(await Promise.all(r)).filter(n=>n!==null),xe},Bt=async({cliPath:e,netlify:t,config:r,buildErrorContext:o})=>{let n=Jr(t),s=await zr(yt),a=D.join(M.cwd(),k);await W.mkdir(a,{recursive:!0});let l=D.join(k,s),i=D.join(M.cwd(),l),h=D.join(M.cwd(),k,re);try{await W.unlink(h),F.log(`Deleted old results file: ${h}`)}catch{}let d=o?`You've already made changes to complete the above request. However, the build is currently failing after your changes.
|
|
26
26
|
Your task is to analyze and fix the build errors.
|
|
27
27
|
Don't apply techniques of reverting changes. Apply fixes related to errors.
|
|
28
28
|
Don't try to run build by yourself. Just fix the errors.
|
package/dist/index.js
CHANGED
|
@@ -21,7 +21,7 @@ web_search = true
|
|
|
21
21
|
${n.trim()}
|
|
22
22
|
\`\`\``)}catch(s){U.error("Could not decode outputMsg",s,t.output)}return{title:o,message:n}};import Sr from"fs/promises";import Ar from"os";import bt from"path";import X from"process";import Nr from"readline";var oe=w("runner_gemini"),Nt="Gemini CLI",br=({catchError:e,runCmd:t,error:r,result:o,runnerName:n})=>(oe.log(`${n} command completed with catch handler triggered`,{hadExistingError:!!r,hadExistingResult:!!o,resultLength:o?o.length:0,catchError:e?.message||"No error object",processExitCode:t.exitCode,processKilled:t.killed}),o?(oe.log("Preserving existing result despite catch handler being triggered"),r?{error:r,result:o}:{error:"Process completed with errors but result was captured",result:o}):(oe.log("Setting result to undefined because no valid result was captured"),{error:r||`${n} failed`,result:void 0})),Cr={list_directory:"List",read_file:"Read",write_file:"Write",glob:"Find",search_file_content:"Find",replace:"Edit",run_shell_command:"Run",web_fetch:"Web Fetch",web_search:"Web Search",read_many_files:"Read Many",save_memory:"Memorize"};async function Ye({config:e,netlify:t,persistSteps:r,sendSteps:o,aiGateway:n}){let{accountType:s,prompt:a,modelVersionOverrides:l}=e,{model:i}=e;if(n){let{token:_,url:f}=n;if(!_||!f)throw new Error("No token or url provided from AI Gateway");if(l?.gemini){let u=l?.gemini?.[s];if(u){if(!await n.isModelAvailableForProvider("gemini",u))throw new Error(`Model override '${u}' is not available for gemini provider`);i=u}}else if(i&&!await n.isModelAvailableForProvider("gemini",i))throw new Error(`Model '${i}' is not available for gemini provider`);X.env.GEMINI_API_KEY=_,X.env.GOOGLE_GEMINI_BASE_URL=f}else if(!X.env.GEMINI_API_KEY)throw new Error("GEMINI_API_KEY is not provided");let h=[],d=[],c=[],m={},y=0,x=0,T,g,R=[V(X.cwd(),"gemini"),...i?["--model",i]:[],"--yolo","-p",a],v=`${X.env.NVM_BIN}/node`;oe.log(`Running ${v} ${R.join(" ")}`);let N=t.utils.run(v,R,{all:!0,env:X.env});N.stdin?.end();let C=ye(()=>{r?.({steps:h,duration:x}),o?.({steps:d,duration:x}),d=[]},250),b=(_,f)=>{_.id=y,y+=1,c.push(_),h.push(_),d.push(_),f||C.flush(),C(),f&&C.flush()},S=Nr.createInterface({input:N.all});return S.on("error",_=>{oe.error("Readline interface error",{error:_.message,stack:_.stack})}),S.on("line",_=>{let f=null;try{if(_.startsWith("[API Error")){let u=_.match(/\[api error: (.+?)]$/i)?.[1];f={type:"error",value:pt(u,!1)?.error?.message||u||"Gemini encountered error"}}else f=JSON.parse(_)}catch{return}if(f)switch(f.type){case"thought":{let u=f.value;b({title:u?.subject??"Thinking...",message:u?.description},!0);break}case"content":{f.value&&b({message:f.value});break}case"tool_call_request":{let u=f.value,E=Cr[u.name]??u.name,p=u.args?.path||u.args?.absolute_path,I=p&&bt.relative(X.cwd(),p),se=u.args?.command,K={title:[E,I&&`\`${I}\``,se&&`\`${se}\``].filter(Boolean).join(" ")};m[u.callId]=K,C.flush();break}case"tool_result":{let u=f.value,E=m[u.callId];if(E){let p=[u.resultDisplay,u.responseParts?.functionResponse?.response?.output].find(I=>typeof I=="string"&&I);p&&(E.message=`\`\`\`
|
|
23
23
|
${p.trim()}
|
|
24
|
-
\`\`\``),b(E,!0)}break}case"result":{x=f.duration_ms,T=f.value,[c,h,d].forEach(u=>{u[u.length-1]?.message===T&&u.pop()});break}case"error":{g=f.value;break}case"finished":break;default:{oe.warn("Unhandled message type:",f.type);break}}}),await N.catch(_=>{({error:g,result:T}=br({catchError:_,runCmd:N,error:g,result:T,runnerName:"Gemini"}))}),S.close(),C.flush(),{steps:c,duration:x,result:await te({initialResult:T,agentName:Nt,hasError:!!g}),error:re({error:g,agentName:Nt}),isRetryableError:ne(g)}}var Ct=async()=>{let e=bt.join(Ar.homedir(),".gemini");await Sr.rm(e,{recursive:!0,force:!0})};var Pr={codex:{runner:je,clean:At},claude:{runner:Me,clean:Rt},gemini:{runner:Ye,clean:Ct}},Pt=Pr;var Ot=async({config:e,apiThrottle:t,apiToken:r,runnerVersion:o})=>await A(Or(),"init-stage",async n=>{let s=performance.now();n?.setAttributes({"init.runner":e.runner,"init.id":e.id,"init.sessionId":e.sessionId,"init.hasRepo":e.hasRepo,"init.useGateway":e.useGateway,"init.validateAgent":e.validateAgent,"init.runnerVersion":o||"unknown"});let a=Pt[e.runner];if(!a)throw n?.setAttributes({"init.error":"unsupported_runner"}),new Error(`${e.runner} is not supported`);let l=Fr({apiToken:r});Qe(l);let i=e.useGateway?await st({netlify:l,config:e}):void 0;n?.setAttributes({"init.aiGateway.created":!!i}),e.validateAgent&&e.errorLogsPath&&n?.setAttributes({"init.errorLogsPath":e.errorLogsPath});let h=dt(({steps:y=[],duration:x})=>{let T=y.map(g=>({...g,title:g.title?Y(g.title):void 0,message:g.message?Y(g.message):void 0}));return y.length=0,j(e.id,e.sessionId,{steps:T,duration:x})},t),d=await Le(
|
|
24
|
+
\`\`\``),b(E,!0)}break}case"result":{x=f.duration_ms,T=f.value,[c,h,d].forEach(u=>{u[u.length-1]?.message===T&&u.pop()});break}case"error":{g=f.value;break}case"finished":break;default:{oe.warn("Unhandled message type:",f.type);break}}}),await N.catch(_=>{({error:g,result:T}=br({catchError:_,runCmd:N,error:g,result:T,runnerName:"Gemini"}))}),S.close(),C.flush(),{steps:c,duration:x,result:await te({initialResult:T,agentName:Nt,hasError:!!g}),error:re({error:g,agentName:Nt}),isRetryableError:ne(g)}}var Ct=async()=>{let e=bt.join(Ar.homedir(),".gemini");await Sr.rm(e,{recursive:!0,force:!0})};var Pr={codex:{runner:je,clean:At},claude:{runner:Me,clean:Rt},gemini:{runner:Ye,clean:Ct}},Pt=Pr;var Ot=async({config:e,apiThrottle:t,apiToken:r,runnerVersion:o})=>await A(Or(),"init-stage",async n=>{let s=performance.now();n?.setAttributes({"init.runner":e.runner,"init.id":e.id,"init.sessionId":e.sessionId,"init.hasRepo":e.hasRepo,"init.useGateway":e.useGateway,"init.validateAgent":e.validateAgent,"init.runnerVersion":o||"unknown"});let a=Pt[e.runner];if(!a)throw n?.setAttributes({"init.error":"unsupported_runner"}),new Error(`${e.runner} is not supported`);let l=Fr({apiToken:r});Qe(l);let i=e.useGateway?await st({netlify:l,config:e}):void 0;n?.setAttributes({"init.aiGateway.created":!!i}),e.validateAgent&&e.errorLogsPath&&n?.setAttributes({"init.errorLogsPath":e.errorLogsPath});let h=dt(({steps:y=[],duration:x})=>{let T=y.map(g=>({...g,title:g.title?Y(g.title):void 0,message:g.message?Y(g.message):void 0}));return y.length=0,j(e.id,e.sessionId,{steps:T,duration:x})},t),d=await Le();await De(d);let c;e.hasRepo?e.sha?(c=e.sha,n?.setAttributes({"init.sha.source":"provided"})):(c=await Et(),await le(e.id,{sha:c}),n?.setAttributes({"init.sha.source":"current_commit"})):(c=await _t(),n?.setAttributes({"init.sha.source":"first_commit","init.source":"zip"}));let m=performance.now()-s;return n?.setAttributes({"init.sha":c||"unknown","init.duration.ms":m,"init.status":"success"}),{aiGateway:i,context:l,persistSteps:h,runner:a,sha:c}}),Fr=({apiToken:e})=>({constants:{NETLIFY_API_HOST:we.env.NETLIFY_API_HOST||"api.netlify.com",NETLIFY_API_TOKEN:e||we.env.NETLIFY_API_TOKEN,SITE_ID:we.env.SITE_ID,FUNCTIONS_DIST:we.env.FUNCTIONS_DIST||"netlify/functions"},utils:{run:O}});import{getTracer as Be}from"@netlify/otel";import $r from"crypto";import q from"fs/promises";import $ from"path";import M from"process";var F=w("context"),Dr=e=>{let t=e?.constants||{};return{siteId:t.SITE_ID,accountId:M.env.NETLIFY_TEAM_ID,userId:M.env.NETLIFY_AGENT_RUNNER_USER_ID,siteSlug:M.env.SITE_NAME,apiHost:t.NETLIFY_API_HOST,functionsDir:t.FUNCTIONS_DIST}},Lr=10,kr=async e=>{let{name:t,ext:r}=$.parse(e),o=e,n=$.join(M.cwd(),L,o),s=0;for(;await Ur(n);){if(s>=Lr)throw new Error("Failed to generate context file");o=`${t}-${$r.randomUUID().slice(0,5)}${r}`,n=$.join(M.cwd(),L,o),s+=1}return o},Ur=async e=>{try{return await q.access(e),!0}catch{return!1}},Mr=async()=>{try{F.log("Fetching Netlify features context...");let e=await fetch("https://docs.netlify.com/ai-context/context-consumers",{signal:AbortSignal.timeout(1e4)});if(!e.ok)throw new Error(`Failed to fetch context consumers: ${e.status} ${e.statusText}`);let t=await e.json();if(!t||typeof t!="object"||!Array.isArray(t.consumers))return F.warn("Invalid response structure: missing or invalid consumers array"),null;let r=t.consumers.find(o=>o&&typeof o=="object"&&o.key==="catchall-consumer");return r?!r.contextScopes||typeof r.contextScopes!="object"?(F.warn("Catchall consumer missing or invalid contextScopes"),null):r:(F.warn("Catchall consumer not found in context consumers"),null)}catch(e){return e.name==="AbortError"?F.warn("Netlify features context request timed out"):F.warn("Failed to fetch Netlify features context:",e.message),null}},Gr=async(e,t)=>{try{let r=await fetch(e,{signal:AbortSignal.timeout(1e4)});if(!r.ok)throw new Error(`Failed to fetch ${e}: ${r.status} ${r.statusText}`);let o=await r.text();return await q.writeFile(t,o,"utf-8"),!0}catch(r){return r.name==="AbortError"?F.warn(`Download timeout for ${e}`):F.warn(`Failed to download context file ${e}:`,r.message),!1}},Te=null,jr=async()=>{if(Te)return Te;let e=await Mr();if(!e)return[];let t=$.join(M.cwd(),L,Fe);await q.mkdir(t,{recursive:!0});let r=Object.entries(e.contextScopes).map(async([n,s])=>{if(!s||typeof s!="object"||!s.endpoint||!s.scope)return F.warn(`Invalid scope data for ${n}, skipping...`),null;let a=`${n}.md`,l=$.join(t,a),i=$.join(L,Fe,a);return F.log(`Downloading ${s.scope} context...`),await Gr(s.endpoint,l)?(F.log(`Downloaded: ${i}`),{scope:s.scope,path:i,key:n}):null});return Te=(await Promise.all(r)).filter(n=>n!==null),Te},Ft=async({cliPath:e,netlify:t,config:r,buildErrorContext:o})=>{let n=Dr(t),s=await kr(ct),a=$.join(M.cwd(),L);await q.mkdir(a,{recursive:!0});let l=$.join(L,s),i=$.join(M.cwd(),l),h=$.join(M.cwd(),L,ee);try{await q.unlink(h),F.log(`Deleted old results file: ${h}`)}catch{}let d=o?`You've already made changes to complete the above request. However, the build is currently failing after your changes.
|
|
25
25
|
Your task is to analyze and fix the build errors.
|
|
26
26
|
Don't apply techniques of reverting changes. Apply fixes related to errors.
|
|
27
27
|
Don't try to run build by yourself. Just fix the errors.
|