@github/copilot
Version:
GitHub Copilot CLI brings the power of Copilot coding agent directly to your terminal.
35 lines (30 loc) • 16 kB
JavaScript
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
*--------------------------------------------------------------------------------------------*/
import __module from "module";
const require = __module.createRequire(import.meta.url);
var Ze=Object.create;var K=Object.defineProperty;var et=Object.getOwnPropertyDescriptor;var tt=Object.getOwnPropertyNames;var rt=Object.getPrototypeOf,nt=Object.prototype.hasOwnProperty;var z=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var R=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var ot=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of tt(t))!nt.call(e,o)&&o!==r&&K(e,o,{get:()=>t[o],enumerable:!(s=et(t,o))||s.enumerable});return e};var st=(e,t,r)=>(r=e!=null?Ze(rt(e)):{},ot(t||!e||!e.__esModule?K(r,"default",{value:e,enumerable:!0}):r,e));var de=R((Er,le)=>{"use strict";var ue=()=>process.platform==="linux",N=null,St=()=>{if(!N)if(ue()&&process.report){let e=process.report.excludeNetwork;process.report.excludeNetwork=!0,N=process.report.getReport(),process.report.excludeNetwork=e}else N={};return N};le.exports={isLinux:ue,getReport:St}});var pe=R((Or,fe)=>{"use strict";var I=z("fs"),Pt="/usr/bin/ldd",Et="/proc/self/exe",A=2048,Ot=e=>{let t=I.openSync(e,"r"),r=Buffer.alloc(A),s=I.readSync(t,r,0,A,0);return I.close(t,()=>{}),r.subarray(0,s)},wt=e=>new Promise((t,r)=>{I.open(e,"r",(s,o)=>{if(s)r(s);else{let n=Buffer.alloc(A);I.read(o,n,0,A,0,(c,d)=>{t(n.subarray(0,d)),I.close(o,()=>{})})}})});fe.exports={LDD_PATH:Pt,SELF_PATH:Et,readFileSync:Ot,readFile:wt}});var ge=R((wr,me)=>{"use strict";var xt=e=>{if(e.length<64||e.readUInt32BE(0)!==2135247942||e.readUInt8(4)!==2||e.readUInt8(5)!==1)return null;let t=e.readUInt32LE(32),r=e.readUInt16LE(54),s=e.readUInt16LE(56);for(let o=0;o<s;o++){let n=t+o*r;if(e.readUInt32LE(n)===3){let d=e.readUInt32LE(n+8),E=e.readUInt32LE(n+32);return e.subarray(d,d+E).toString().replace(/\0.*$/g,"")}}return null};me.exports={interpreterPath:xt}});var Ae=R((xr,Ne)=>{"use strict";var ye=z("child_process"),{isLinux:L,getReport:ve}=de(),{LDD_PATH:k,SELF_PATH:be,readFile:W,readFileSync:V}=pe(),{interpreterPath:Se}=ge(),h,y,v,Pe="getconf GNU_LIBC_VERSION 2>&1 || true; ldd --version 2>&1 || true",x="",Ee=()=>x||new Promise(e=>{ye.exec(Pe,(t,r)=>{x=t?" ":r,e(x)})}),Oe=()=>{if(!x)try{x=ye.execSync(Pe,{encoding:"utf8"})}catch{x=" "}return x},P="glibc",we=/LIBC[a-z0-9 \-).]*?(\d+\.\d+)/i,T="musl",Tt=e=>e.includes("libc.musl-")||e.includes("ld-musl-"),xe=()=>{let e=ve();return e.header&&e.header.glibcVersionRuntime?P:Array.isArray(e.sharedObjects)&&e.sharedObjects.some(Tt)?T:null},Te=e=>{let[t,r]=e.split(/[\r\n]+/);return t&&t.includes(P)?P:r&&r.includes(T)?T:null},Ie=e=>{if(e){if(e.includes("/ld-musl-"))return T;if(e.includes("/ld-linux-"))return P}return null},Le=e=>(e=e.toString(),e.includes("musl")?T:e.includes("GNU C Library")?P:null),It=async()=>{if(y!==void 0)return y;y=null;try{let e=await W(k);y=Le(e)}catch{}return y},Lt=()=>{if(y!==void 0)return y;y=null;try{let e=V(k);y=Le(e)}catch{}return y},_t=async()=>{if(h!==void 0)return h;h=null;try{let e=await W(be),t=Se(e);h=Ie(t)}catch{}return h},Ft=()=>{if(h!==void 0)return h;h=null;try{let e=V(be),t=Se(e);h=Ie(t)}catch{}return h},_e=async()=>{let e=null;if(L()&&(e=await _t(),!e&&(e=await It(),e||(e=xe()),!e))){let t=await Ee();e=Te(t)}return e},Fe=()=>{let e=null;if(L()&&(e=Ft(),!e&&(e=Lt(),e||(e=xe()),!e))){let t=Oe();e=Te(t)}return e},Rt=async()=>L()&&await _e()!==P,Ct=()=>L()&&Fe()!==P,Nt=async()=>{if(v!==void 0)return v;v=null;try{let t=(await W(k)).match(we);t&&(v=t[1])}catch{}return v},At=()=>{if(v!==void 0)return v;v=null;try{let t=V(k).match(we);t&&(v=t[1])}catch{}return v},Re=()=>{let e=ve();return e.header&&e.header.glibcVersionRuntime?e.header.glibcVersionRuntime:null},he=e=>e.trim().split(/\s+/)[1],Ce=e=>{let[t,r,s]=e.split(/[\r\n]+/);return t&&t.includes(P)?he(t):r&&s&&r.includes(T)?he(s):null},kt=async()=>{let e=null;if(L()&&(e=await Nt(),e||(e=Re()),!e)){let t=await Ee();e=Ce(t)}return e},$t=()=>{let e=null;if(L()&&(e=At(),e||(e=Re()),!e)){let t=Oe();e=Ce(t)}return e};Ne.exports={GLIBC:P,MUSL:T,family:_e,familySync:Fe,isNonGlibcLinux:Rt,isNonGlibcLinuxSync:Ct,version:kt,versionSync:$t}});import Jt from"node:module";import{spawn as Yt}from"node:child_process";import{chmodSync as Ge,copyFileSync as Be,mkdirSync as Kt,readFileSync as We,realpathSync as zt,rmSync as q,statSync as Qt,writeFileSync as Ve,writeSync as Xt}from"node:fs";import{basename as ze,dirname as Zt,join as u,sep as qe}from"node:path";import{createInterface as er}from"node:readline";import*as Qe from"node:sea";import{fileURLToPath as Xe,pathToFileURL as M}from"node:url";var it=new Set;function Q(e,t){let r=Object.create(null);if(e)for(let[o,n]of Object.entries(e))r[o]=n;let s=t??it;return new Proxy(process.env,{get(o,n){if(typeof n=="string"){if(Object.hasOwn(r,n))return r[n];if(!s.has(n))return process.env[n]}},set(o,n,c){return r[n]=c,!0},has(o,n){return typeof n!="string"?!1:Object.hasOwn(r,n)?r[n]!==void 0:s.has(n)?!1:n in process.env},ownKeys(o){let n=new Set(Object.keys(process.env));for(let c of s)n.delete(c);for(let c of Object.keys(r))r[c]!==void 0?n.add(c):n.delete(c);return[...n]},getOwnPropertyDescriptor(o,n){if(typeof n!="string")return;let c;if(Object.hasOwn(r,n))c=r[n];else{if(s.has(n))return;c=process.env[n]}if(c!==void 0)return{value:c,writable:!0,enumerable:!0,configurable:!0}},deleteProperty(o,n){return r[n]=void 0,!0}})}import{existsSync as ct}from"node:fs";import{basename as at,resolve as ut}from"node:path";var X="extension_bootstrap.mjs";function Z(e,t,r=ct){let s=e.find(c=>at(c)===X);if(!s)return;process.stderr.write(`[extension-fork] resolveBootstrapPath: __dir=${t}, argv-bootstrap=${s}
`);let o=ut(t,"preloads",X),n=r(o);if(process.stderr.write(`[extension-fork] resolveBootstrapPath: localBootstrap=${o}, localExists=${n}
`),n)return o}var lt=new Set(["--server","--headless","--acp"]),dt=new Set(["completion","help","init","login","mcp","plugin","update","version"]);function ft(e){return e==="--prompt"||e.startsWith("--prompt=")||e==="-p"||e.startsWith("-p")&&e.length>2}function pt(e){if(e.some(r=>lt.has(r)||ft(r)))return!0;let t=e.find(r=>!r.startsWith("-"));return t!==void 0&&dt.has(t)}function ee(e){return pt(e)}import{readdir as mt,access as gt,constants as ht}from"node:fs/promises";import{join as f,basename as te}from"node:path";import{homedir as C}from"node:os";function ne(){return process.env.XDG_CACHE_HOME||f(C(),".cache")}function oe(){if(process.argv.includes("--no-auto-update")||process.argv.includes("--prefer-version"))return!1;let e=process.env.COPILOT_AUTO_UPDATE;return!(e&&e.toLowerCase()==="false")}function se(){let e=process.argv.indexOf("--prefer-version");if(!(e===-1||e+1>=process.argv.length))return process.argv[e+1]}function yt(){if(process.platform==="darwin")return f(C(),"Library","Caches","copilot");if(process.platform==="win32"){let e=process.env.LOCALAPPDATA||f(C(),".cache");return f(e,"copilot")}return f(ne(),"copilot")}function ie(){let e=[];return process.env.COPILOT_CACHE_HOME&&e.push(f(process.env.COPILOT_CACHE_HOME,"pkg")),e.push(f(yt(),"pkg")),e.push(f(ne(),"copilot","pkg")),process.env.COPILOT_HOME&&e.push(f(process.env.COPILOT_HOME,"pkg")),e.push(f(C(),".copilot","pkg")),[...new Set(e)]}function re(e){let t=e.match(/^(\d+)\.(\d+)\.(\d+)/);if(t)return[Number(t[1]),Number(t[2]),Number(t[3])]}function vt(e,t){let r=re(e),s=re(t);if(!r&&!s)return 0;if(!r)return-1;if(!s)return 1;for(let c=0;c<3;c++)if(r[c]!==s[c])return r[c]-s[c];let o=e.includes("-"),n=t.includes("-");return o!==n?o?-1:1:e.localeCompare(t)}async function ce(e,...t){let r=[];for(let s of t){let o;try{o=await mt(s)}catch{continue}for(let n of o){let c=f(s,n);try{await gt(f(c,e),ht.R_OK),r.push(c)}catch{continue}}}return r.sort((s,o)=>{let n=vt(te(o),te(s));return n!==0?n:s.localeCompare(o)}),r}import je from"node:path";import{fileURLToPath as Vt}from"node:url";function bt(e){if(e.includes("<!DOCTYPE")||e.includes("<html")){let t=Math.min(e.indexOf("<!DOCTYPE")!==-1?e.indexOf("<!DOCTYPE"):1/0,e.indexOf("<html")!==-1?e.indexOf("<html"):1/0),r=e.substring(0,t).trim();return r?`${r} [HTML error page omitted]`:"[HTML error page omitted]"}return e}function ae(e){let t;if(e instanceof Error)t=String(e);else if(typeof e=="object"&&e!==null)try{t=JSON.stringify(e)??"[object]"}catch{return"[object with circular reference]"}else t=String(e);return bt(t)}import{createRequire as Ht}from"node:module";import{platform as Ut}from"node:os";import{join as $e,resolve as Mt}from"node:path";import{fileURLToPath as jt}from"node:url";var $=st(Ae(),1);function H(e={}){return(e.platform??process.platform)!=="linux"?"gnu":(e.detectLibcFamily??$.familySync)()===$.MUSL?"musl":"gnu"}function ke(e=process.platform,t){let r=t??(e==="linux"?H():"gnu");return e==="linux"&&r==="musl"?"linuxmusl":e}function Dt(){let e=Ue(),t=e==="linux"?H({platform:e}):"gnu";return`${ke(e,t)}-${process.arch}`}function Gt(){let e=Ue(),{arch:t}=process;switch(e){case"win32":return`win32-${t}-msvc`;case"darwin":return`darwin-${t}`;case"linux":return`linux-${t}-${H({platform:e})}`;default:throw new Error(`Unsupported platform: ${e}/${t}`)}}var U;function Ue(){return U!==void 0||(U=process.report?.getReport()?.header?.platform??Ut()),U}function Me(e,t){let r=Dt(),s=`${e}.node`,o=`${e}.${Gt()}.node`,n=[];for(let d of t){let E=Mt(d),F=$e(E,"prebuilds",r,s),O=He(F);if(O.ok)return O.value;n.push({path:F,err:O.err});let i=$e(E,o),a=He(i);if(a.ok)return a.value;n.push({path:i,err:a.err})}let c=n.map(d=>` ${d.path}: ${Bt(d.err)}`).join(`
`);throw new Error(`Native addon "${e}" not found for ${r}. Tried:
${c}`)}function Bt(e){if(e instanceof Error)return e.message;if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return Object.prototype.toString.call(e)}}function He(e){try{return{ok:!0,value:Wt(e)}}catch(t){return{ok:!1,err:t}}}function Wt(e){return Ht(jt(import.meta.url))(e)}var _;function De(){if(process.platform==="win32"){if(_){if(_.kind==="ok")return _.addon;throw _.error}try{let e=qt();return _={kind:"ok",addon:e},e}catch(e){let t=e instanceof Error?e:new Error(`Failed to load Win32 native addon: ${ae(e)}`);throw _={kind:"error",error:t},t}}}function qt(){let e=je.dirname(Vt(import.meta.url));return Me("cli-native",[e,je.resolve(e,"..","native","cli")])}try{Jt.enableCompileCache?.()}catch{}var tr=75;function Je(){if(process.stdin.isTTY&&typeof process.stdin.setRawMode=="function")try{process.stdin.setRawMode(!1)}catch{}if(process.stdout.isTTY)try{Xt(1,"\x1B[<u\x1B[?1049h\x1B[?1049l\x1B[?1006l\x1B[?1003l\x1B[?1002l\x1B[?2004l\x1B[?1004l\x1B[?25h\x1B[?2026l"+(process.env.TERM!=="dumb"?"\x1B[23;2t":""))}catch{}}var J=Zt(Xe(import.meta.url)),Ye=Qe.isSea();process.report.reportOnFatalError=!0;process.report.excludeEnv=!0;if(process.platform==="win32")try{let e=De();if(!e)throw new Error("loadWin32NativeAddon returned undefined on win32");e.enableCrashReporting(),e.installExceptionFilter()}catch{}var j=process.argv.find(e=>ze(e).startsWith("conpty_console_list_agent")),Ke=Z(process.argv,J);if(j){let e=j.endsWith(".js")?j:j+".js";await import(M(e).href)}else if(Ke)await import(M(Ke).href);else if(process.env.COPILOT_VOICE_SERVER_MODE==="1"){let e=u(J,"voice-server.js");try{let{runVoiceServer:t}=await import(M(e).href);await t()}catch(t){process.stderr.write(`voice server: fatal at ${e}: ${t.stack??String(t)}
`),process.exit(1)}}else if(process.env.COPILOT_SHUTDOWN_FLUSH){try{let{url:e,headers:t,body:r}=JSON.parse(process.env.COPILOT_SHUTDOWN_FLUSH);await fetch(e,{method:"POST",headers:t,body:r,signal:AbortSignal.timeout(3e4)})}catch{}process.exit(0)}else if(process.env.COPILOT_RUN_APP==="1"||ee(process.argv.slice(2))){let e=u(J,"app.js"),t=se();if(Ye&&(oe()||t)){let r=ie().flatMap(o=>[u(o,"universal"),u(o,`${process.platform}-${process.arch}`)]),s=await ce("app.js",...r);if(t){let o=s.find(n=>ze(n)===t);o?e=u(o,"app.js"):process.stderr.write(`Warning: preferred version ${t} not found in package cache, using built-in version
`)}else s.length>0&&(e=u(s[0],"app.js"))}await import(M(e).href)}else{let t=function(){let i=process.env.COPILOT_HOME||u(process.env.HOME||process.env.USERPROFILE||"",".copilot");return u(i,"restart",`${e}.json`)},r=function(){let i=t();try{let a=We(i,"utf-8");return q(i,{force:!0}),JSON.parse(a)}catch{return}},s=function(){try{q(t(),{force:!0})}catch{}},o=function(){let i=process.env.COPILOT_HOME||u(process.env.HOME||process.env.USERPROFILE||"",".copilot");return u(i,"crash-context",`${e}.json`)},n=function(){try{let i=We(o(),"utf-8");return JSON.parse(i)}catch{return}},c=function(){try{q(o(),{force:!0})}catch{}},d=function(i,a){return new Promise(g=>{let p=er({input:process.stdin,output:process.stdout}),l=i.toString(16).toUpperCase();if(process.stdout.write(`
*** Copilot exited unexpectedly (exit code ${i} = 0x${l}) ***
`),a){let b=a.length>200?a.slice(0,200)+"\u2026":a;process.stdout.write(`Error: ${b}
`)}process.stdout.write(`
A crash report can be saved locally.
It will include session events, process logs, and error details.
The report may contain file paths and conversation context.
`),p.question("Save crash report? [y/N] ",b=>{p.close(),g(b.trim().toLowerCase()==="y")})})},E=function(i,a){try{let g=zt(i);return g.startsWith(a+qe)?Qt(g).isFile():!1}catch{return!1}},O=function(i,a){let g=Ye?i:[...process.execArgv,Xe(import.meta.url),...i],p=Yt(process.execPath,g,{stdio:"inherit",cwd:a,env:Q({COPILOT_RUN_APP:"1",COPILOT_LOADER_PID:e})});process.env.COPILOT_LOADER_DEBUG&&process.stderr.write(`[loader] spawned app child: pid=${p.pid} (loader pid=${e})
`);let l=m=>{try{p.kill(m)}catch{}},b=()=>l("SIGINT"),S=()=>l("SIGTERM"),D=()=>l("SIGHUP"),G=()=>l("SIGQUIT");process.on("SIGINT",b),process.on("SIGTERM",S),process.on("SIGHUP",D),process.on("SIGQUIT",G),p.on("error",m=>{process.off("SIGINT",b),process.off("SIGTERM",S),process.off("SIGHUP",D),process.off("SIGQUIT",G),s(),process.stderr.write(`Failed to start: ${m.message}
`),process.exit(1)}),p.on("exit",(m,Y)=>{if(process.off("SIGINT",b),process.off("SIGTERM",S),process.off("SIGHUP",D),process.off("SIGQUIT",G),m===tr){let w=r();if(w){let B=[...w.argv,"--session-id",w.sessionId];O(B,w.cwd||a)}else O(i,a);return}if(s(),Y)c(),Je(),process.kill(process.pid,Y);else if(m!==0){Je();let w=n();w&&process.stdin.isTTY?d(m??1,w.lastError).then(async B=>{B&&await F(w,m??1),c(),process.exit(m??1)}).catch(()=>{c(),process.exit(m??1)}):(c(),process.exit(m??1))}else c(),process.exit(0)})};rr=t,nr=r,or=s,sr=o,ir=n,cr=c,ar=d,ur=E,lr=O;let e=String(process.pid);async function F(i,a){try{let g=new Date().toISOString().replace(/[:.]/g,"-"),p=process.env.COPILOT_HOME||u(process.env.HOME||process.env.USERPROFILE||"",".copilot"),l=u(p,"crash-reports",`crash-${i.sessionId}-${g}`);Kt(l,{recursive:!0,mode:448}),Ve(u(l,"crash-context.json"),JSON.stringify(i,null,2),{mode:384});let b=["# Crash Report","",`**Exit code**: ${a}`,i.errorType?`**Error type**: ${i.errorType}`:"",i.lastError?`**Error**: ${i.lastError}`:"",`**Timestamp**: ${new Date().toISOString()}`,`**Session ID**: ${i.sessionId}`,`**Working directory**: ${i.cwd}`,i.stackTrace?`
## Stack Trace
\`\`\`
${i.stackTrace}
\`\`\``:"",""].filter(Boolean).join(`
`);if(Ve(u(l,"feedback.md"),b,{mode:384}),i.sessionFilePath&&E(i.sessionFilePath,p))try{let S=u(l,"events.jsonl");Be(i.sessionFilePath,S),Ge(S,384)}catch{}if(i.logFilePath&&E(i.logFilePath,p))try{let S=u(l,"process.log");Be(i.logFilePath,S),Ge(S,384)}catch{}process.stdout.write(`
Crash report saved to: ${l}${qe}
`)}catch(g){process.stderr.write(`Failed to create crash report: ${String(g)}
`)}}O(process.argv.slice(2),process.cwd())}var rr,nr,or,sr,ir,cr,ar,ur,lr;