@github/copilot 0.0.355-22 → 0.0.355-23

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.
Files changed (2) hide show
  1. package/index.js +1 -1
  2. package/package.json +2 -2
package/index.js CHANGED
@@ -2522,7 +2522,7 @@ Run `+Ol.cyan("{updateCommand}")+" to update",a=e.message||r;e.boxenOptions??={p
2522
2522
  `).map(l=>l.trim()).filter(l=>l&&!l.startsWith("#")).map(l=>l.endsWith("/")?l.slice(0,-1)+"/**":l)}shouldIgnore(e){try{let l=SNr(this.rootPath,e);return l==="."||l.startsWith("..")?!1:this.ig.ignores(l)}catch{return!1}}getDirectoryFilter(){return e=>{if(!e||e===".")return!1;let l=e.startsWith("./")?e.slice(2):e;return!l||l==="."?!1:this.ig.ignores(l)}}getFileFilter(){return e=>{if(!e||e===".")return!1;let l=e.startsWith("./")?e.slice(2):e;return!l||l==="."?!1:this.ig.ignores(l)}}updateFingerprint(){this.fingerprint=JSON.stringify(this.patterns)}getFingerprint(){return this.fingerprint}getPatterns(){return[...this.patterns]}};var OXl=2e4,uAt=class extends Error{constructor(e="Search aborted"){super(e),this.name="AbortError"}};async function UXl(t,e,l,n){let r=(0,_Xl.default)(e,{dot:!0,contains:!0,nocase:!0}),a=[];for(let[I,s]of t.entries()){if(I%1e3===0&&(await new Promise(o=>setImmediate(o)),l?.aborted))throw new uAt;if(r(s)&&a.push(s),a.length>=n)break}return a.sort((I,s)=>{let o=I.endsWith(Z_),c=s.endsWith(Z_);return o&&!c?-1:!o&&c?1:I<s?-1:I>s?1:0}),a}var gge=class{rootPath;ignorePatterns;maxResults;cacheTimeout;indexFileStats;maxStatConcurrency;includeDirsInIndex;allFiles=[];visiblePaths=[];fileCache=[];fileByRelative=new Map;lastCacheUpdate=0;isIndexing=!1;indexingPromise=null;isIndexed=!1;strategy="v2";fzf;onIndexingStart;onIndexingComplete;logger;constructor(e={}){this.rootPath=e.rootPath||process.cwd(),this.ignorePatterns=new Age(this.rootPath),this.maxResults=e.maxResults||50,this.cacheTimeout=e.cacheTimeout??5*6e4,this.indexFileStats=e.indexFileStats??!1,this.maxStatConcurrency=e.maxStatConcurrency??64,this.includeDirsInIndex=e.includeDirsInIndex??!1,this.onIndexingStart=e.onIndexingStart,this.onIndexingComplete=e.onIndexingComplete,this.logger=e.logger||new lu}async search(e){if(await this.ensureFileIndex(),this.fileCache.length===0)return[];if(!e.trim()){let l=this.fileCache;return l.slice(0,this.maxResults).map((n,r)=>({path:n.path,score:1-r/Math.max(l.length,1),relativePath:n.relativePath}))}if(e.includes("*")){let l=await UXl(this.visiblePaths,e,void 0,this.maxResults),n=[],r=this.fileByRelative;for(let[a,I]of l.entries()){if(a%1e3===0&&await new Promise(o=>setImmediate(o)),n.length>=this.maxResults)break;if(I===".")continue;let s=r.get(I);if(s){let o=this.calculateScore(s.relativePath,e);n.push({path:s.path,score:o,relativePath:s.relativePath})}}return n.sort((a,I)=>I.score-a.score),n}else{this.fzf||(this.fzf=new BLe(this.visiblePaths,{fuzzy:this.visiblePaths.length>OXl?"v1":"v2"}));let l=[];try{l=await this.fzf.find(e)}catch{l=(await UXl(this.visiblePaths,e,void 0,this.maxResults)).map(I=>({item:I,score:1,start:0,end:0,positions:new Set}))}let n=l.slice(0,this.maxResults).map((a,I)=>({rel:a.item,idx:I})),r=[];for(let{rel:a,idx:I}of n){if(a===".")continue;let s=this.fileByRelative.get(a);s&&r.push({file:s,idx:I,bucket:this.exactBucket(s.relativePath,e),score:this.calculateScore(s.relativePath,e)})}return r.sort((a,I)=>I.bucket-a.bucket||a.idx-I.idx),r.map(a=>({path:a.file.path,relativePath:a.file.relativePath,score:a.score}))}}exactBucket(e,l){let n=e.toLowerCase(),r=l.toLowerCase();if(n===r)return 3;let a=n.lastIndexOf(Z_),I=a===-1?n:n.slice(a+1);return I===r?2:I.startsWith(r)?1:0}calculateScore(e,l){let n=e.toLowerCase(),r=l.toLowerCase();if(n===r)return 1;let a=e.lastIndexOf(Z_),s=(a===-1?e:e.slice(a+1)).toLowerCase();if(s===r)return .95;if(s.startsWith(r))return .85;if(n.startsWith(r))return .75;let o=n.indexOf(r);return o===-1?.5:Math.max(.1,.7-o/n.length)}async refresh(){this.invalidateCache(),await this.ensureFileIndex()}invalidateCache(){this.lastCacheUpdate=0,this.isIndexed=!1,this.indexingPromise=null,this.fileCache=[],this.allFiles=[],this.fzf=void 0,this.visiblePaths=[],this.fileByRelative.clear()}getCacheInfo(){return{fileCount:this.fileCache.length,lastUpdated:this.lastCacheUpdate,isIndexing:this.isIndexing,strategy:this.strategy,isIndexed:this.isIndexed}}async ensureFileIndex(){let e=Date.now();if(!(this.isIndexed&&this.fileCache.length>0&&e-this.lastCacheUpdate<this.cacheTimeout))return this.indexingPromise?this.indexingPromise:(this.isIndexing=!0,this.indexingPromise=this.buildFileIndex().finally(()=>{this.isIndexing=!1,this.indexingPromise=null}),this.indexingPromise)}async buildFileIndex(){let e=Date.now();this.onIndexingStart?.();try{await this.ignorePatterns.loadPatterns(),this.allFiles=await this.performCrawl();let l=await this.filterFilesConcurrently(this.allFiles),n=l.map(a=>({path:TNr(this.rootPath,a),relativePath:a,lastModified:0}));this.indexFileStats&&n.length&&await this.fillStatsConcurrently(n,this.maxStatConcurrency),n.sort((a,I)=>a.relativePath.localeCompare(I.relativePath)),this.fileCache=n,this.visiblePaths=l,this.fileByRelative=new Map(n.map(a=>[a.relativePath,a])),this.lastCacheUpdate=Date.now(),this.isIndexed=!0,this.strategy=this.visiblePaths.length>OXl?"v1":"v2";let r=Date.now()-e;this.onIndexingComplete?.(this.fileCache.length,r)}catch(l){this.logger.error(`Error building file index: ${l}`),this.fileCache=[],this.allFiles=[],this.visiblePaths=[],this.fileByRelative.clear(),this.isIndexed=!1;let n=Date.now()-e;this.onIndexingComplete?.(0,n)}}async fillStatsConcurrently(e,l){let n=0,r=new Array(Math.min(l,e.length)).fill(0).map(async()=>{for(;;){let a=n++;if(a>=e.length)break;let I=e[a];try{let s=await BNr(I.path);I.lastModified=s.mtime.getTime()}catch{}a%2e3===0&&await new Promise(s=>setImmediate(s))}});await Promise.all(r)}async filterFilesConcurrently(e,l=50){let n=this.ignorePatterns.getFileFilter(),r=[];for(let a=0;a<e.length;a+=l){let I=e.slice(a,a+l),s=I.map(o=>!n(o));I.forEach((o,c)=>{s[c]&&r.push(o)}),await new Promise(o=>setImmediate(o))}return r}async performCrawl(){let e=this.ignorePatterns.getDirectoryFilter(),l=new MXl.fdir().withRelativePaths().withPathSeparator(Z_).exclude((n,r)=>{let a=ONr(this.rootPath,r);if(a==="."||a==="")return!1;let I=a.endsWith(Z_)?a:`${a}${Z_}`;return e(I)});return this.includeDirsInIndex&&l.withDirs(),l.crawl(this.rootPath).withPromise()}getRootPath(){return this.rootPath}async setRootPath(e){this.rootPath=e,this.ignorePatterns=new Age(e),this.invalidateCache()}},dAt=null;function DXl(){return dAt||(dAt=new gge),dAt}function zXl(t,e,l){let[n,r]=(0,ox.useState)([]),[a,I]=(0,ox.useState)(0),[s,o]=(0,ox.useState)(new Map),c=e||DXl(),d=(0,ox.useMemo)(()=>{let{text:w,cursorPosition:v}=t,k=-1;for(let U=v-1;U>=0;U--){let O=w[U];if(O==="@"){if(U===0||w[U-1]===" "||w[U-1]===`
2523
2523
  `||w[U-1]===" "){k=U;break}}else if(O===" "||O===`
2524
2524
  `||O===" ")break}if(k===-1)return{isAtMention:!1,atPosition:-1,query:""};let B=w.slice(k+1,v);return B.includes(" ")||B.includes(`
2525
- `)||B.includes(" ")?{isAtMention:!1,atPosition:-1,query:""}:{isAtMention:!0,atPosition:k,query:B}},[t.text,t.cursorPosition]);(0,ox.useEffect)(()=>{if(!d.isAtMention){r([]),I(0);return}let w=!1,v=async()=>{try{let B=await c.search(d.query),U=[...B];d.query===""&&l&&(U=[...l.getDirectories().map(S=>({path:S,relativePath:`[DIR] ${S}`,score:1})),...B]),w||(r(U),I(0))}catch{w||(r([]),I(0))}},k=setTimeout(()=>{v()},200);return()=>{w=!0,clearTimeout(k)}},[d.query,d.isAtMention,c]);let m=()=>{n.length!==0&&I(w=>w>0?w-1:n.length-1)},b=()=>{n.length!==0&&I(w=>w<n.length-1?w+1:0)},p=()=>{if(!d.isAtMention||n.length===0)return null;let w=n[a];if(!w)return null;let v=`@${w.relativePath}`,k=`${v} `,{text:B,cursorPosition:U}=t,O=B.slice(0,d.atPosition),K=B.slice(U),S=O+k+K,P={displayText:v,fullPath:w.path,type:w.relativePath.startsWith("[DIR]")?"directory":"file",startIndex:d.atPosition};return o(Ie=>{let Ae=new Map(Ie);return Ae.set(P.startIndex,P),Ae}),t.setText(S),t.setCursorPosition(d.atPosition+k.length),w.relativePath},A=()=>{r([]),I(0)},Z=()=>{o(new Map)};return[{isActive:d.isAtMention&&n.length>0,query:d.query,suggestions:n,selectedIndex:a,atPosition:d.atPosition,storedMentions:s},{navigateUp:m,navigateDown:b,complete:p,reset:A,clearStoredMentions:Z}]}var ULe=tt(tl(),1),A5l=tt(lze(),1);dy();Wwe();Uh();Vy();rF();import{readdir as GWr,readFile as pWr}from"node:fs/promises";import hWr,{join as h5l}from"node:path";function N_(t,e){if(e instanceof Error)return`${t}: ${e.message}`;if(typeof e=="object"&&e!==null)try{return`${t}: ${JSON.stringify(e)}`}catch{return`${t}: [object with circular reference]`}else return`${t}: ${String(e)}`}var OLe=tt(tl(),1);cM();var u5l=tt(d5l(),1);cM();function GAt(t){try{let e=(0,u5l.default)(t.FetchURL);return e.source!=="github.com"||!e.owner||!e.name?null:{owner:e.owner,name:e.name,host:"github.com"}}catch{return null}}async function TLe(t){let e=await ndl(t);if(e.length===0)return null;if(e.length===1)return GAt(e[0]);let l=e.find(n=>n.Name==="origin");return GAt(l||e[0])}function m5l(t){let[e,l]=(0,OLe.useState)(null);return(0,OLe.useEffect)(()=>{(async()=>{let n=await pAt(t);l(r=>!r||r.kind!==n.kind||r.path!==n.path||n.kind==="git"&&r.kind==="git"&&(r.repo?.owner!==n.repo?.owner||r.repo?.name!==n.repo?.name)?n:r)})()},[t]),e}async function pAt(t){let e=await G1(t);if(!e.found)return{kind:"plain",path:t};try{let l=await TLe(e.gitRoot);return{kind:"git",path:e.gitRoot,repo:l}}catch{return{kind:"git",path:e.gitRoot,repo:null}}}function g5l(t,e,l,n,r,a){let[I,s]=(0,ULe.useState)({selected:null,available:[],warnings:[]}),o=m5l(a);return(0,ULe.useEffect)(()=>{if(!t)return;(async()=>{let{agents:d,warnings:m}=await hAt(e,l,n,hWr.join(r,"agents"),o);s({selected:null,available:d,warnings:m})})()},[t,e,l,n,r,o]),{customAgents:I,selectCustomAgent:async c=>{if(!t)throw new Error("attempted to use disabled feature flagged feature");let d=I.available.find(b=>b.id===c);if(!d)throw new Error(`attempted to select unknown custom agent: ${c} from ${I.available.map(b=>b.id).join(", ")}`);let m=await d.prompt().then(b=>({kind:"success",prompt:b}),b=>({kind:"error",message:N_("loading custom agent prompt",b)}));return m.kind==="error"?{kind:"error",message:m.message}:(s(b=>({...b,selected:{id:d.id,displayName:d.displayName,prompt:m.prompt,mcpServers:d.mcpServers}})),{kind:"success"})}}}function b5l(t){let e=new Set,l=[];for(let n of t)e.has(n.id)||(e.add(n.id),l.push(n));return l}async function hAt(t,e,l,n,r){let a=await G5l(n);if(r===null)return{agents:a.agents,warnings:a.warnings};let I=await G5l(h5l(r.path,".github","agents")),s=b5l([...a.agents,...I.agents]),o=[...a.warnings,...I.warnings];if(r.kind!=="git")return{agents:s,warnings:o};if(!r.repo)return{agents:s,warnings:[...o,"could not load remote agents, no github.com remote found"]};if(!l)return{agents:s,warnings:[...o,_te(r.repo,"no authentication available")]};let c=await AWr(t,e,l,r.repo);return{agents:b5l([...s,...c.agents]),warnings:[...o,...c.warnings]}}function _te(t,e){return`could not load remote agents for ${t.owner}/${t.name}: ${e}`}async function AWr(t,e,l,n){let r=b1(l,{onHMACAuthInfo:()=>jre,onEnvAuthInfo:A=>A.host,onGhCliAuthInfo:A=>A.host,onUserAuthInfo:A=>A.host,onApiKeyAuthInfo:A=>A.host,onTokenAuthInfo:A=>A.host}),{host:a}=new URL(r);if(a!=="github.com")return{agents:[],warnings:[_te(n,"auth info does not target github.com")]};let I=await cZ(l);if(!I)return{agents:[],warnings:[_te(n,"no usable token for accessing repo contents found")]};let s=await Z5l(()=>EN(r,I,t),A=>N_("fetching copilot URL",A));if(s.kind==="error")return{agents:[],warnings:[_te(n,s.message)]};let o=`${s.value}/agents/swe/custom-agents/${n.owner}/${n.name}?exclude_invalid_config=true`,c={Authorization:`Bearer ${I}`},d=await _v(o,{method:"GET",headers:c},t);if(!d.ok)return t.warning(`Failed to load custom agents for ${n.owner}/${n.name}: ${await d.text()}`),{agents:[],warnings:[_te(n,`server returned ${d.status}: ${d.statusText}`)]};let m=await d.json(),p=xI.object({agents:xI.array(W5l)}).safeParse(m);return p.success?{agents:p.data.agents.map(A=>({id:A.name,displayName:A.display_name,description:A.description,tools:A.tools,prompt:async()=>{let Z=await EWr({logger:t,integrationId:e,sweAgentsEndpoint:`${s.value}/agents/swe`,token:I,repoOwner:A.repo_owner,repoName:A.repo_name,customAgentName:A.name});if(!Z)throw new Error(`Failed to load prompt for agent ${A.name}`);return Z.prompt},mcpServers:{}})),warnings:[]}:{agents:[],warnings:[_te(n,N_("parsing http response into schema",p.error))]}}async function G5l(t){let e=await GWr(t,{withFileTypes:!0}).then(r=>({kind:"success",dirEntries:r})).catch(r=>r.code==="ENOENT"?{kind:"success",dirEntries:[]}:{kind:"error",message:N_(t,r)});if(e.kind==="error")return{agents:[],warnings:[]};let l=[],n=[];for(let r of e.dirEntries)if(r.isFile()&&r.name.endsWith(".md")){let a=h5l(t,r.name),I=r.name.slice(0,-3),s=await p5l(a);if(s.kind==="error"){n.push(s.message);continue}l.push({id:I,displayName:s.agent.name||I,description:s.agent.description,tools:s.agent.tools||["*"],prompt:async()=>{let o=await p5l(a);if(o.kind==="error")throw new Error(o.message);return await o.agent.prompt()},mcpServers:s.agent.mcpServers||{}})}return{agents:l,warnings:n}}async function p5l(t){let e=await Z5l(()=>pWr(t,"utf-8"),n=>N_(t,n));if(e.kind==="error")return{kind:"error",message:e.message};let l=gWr(e.value);return l.kind==="error"?{kind:"error",message:`${t}: ${l.message}`}:{kind:"success",agent:l.agent}}var gWr=t=>{let e=xI.object({name:xI.string().optional(),description:xI.string(),tools:xI.array(xI.string()).optional(),"mcp-servers":N5l}),l=/^---\s*\n([\s\S]*?)\n---\s*\n?/,n=t.match(l);if(!n)return{kind:"error",message:"custom agent markdown frontmatter is malformed"};let r=n[1];try{let a=(0,A5l.parse)(r),I=e.safeParse(a);if(!I.success)return{kind:"error",message:ZWr(I.error)};let s=t.slice(n[0].length);return{kind:"success",agent:{name:I.data.name??"",displayName:I.data.name??"",description:I.data.description,tools:I.data.tools||["*"],prompt:()=>Promise.resolve(s),mcpServers:I.data["mcp-servers"]||void 0}}}catch(a){return{kind:"error",message:N_("failed to parse front matter",a)}}};function ZWr(t){let e=(l,n="")=>{let r=l.path.join(".")||"(root)",a=[];return l.code==="invalid_union"&&"unionErrors"in l?(a.push(`${n}${r}: ${l.message}`),l.unionErrors.forEach((s,o)=>{a.push(`${n} Option ${o+1}:`),s.issues.forEach(c=>{a.push(...e(c,n+" "))})})):a.push(`${n}${r}: ${l.message}`),a};return t.issues.flatMap(l=>e(l)).join(`
2525
+ `)||B.includes(" ")?{isAtMention:!1,atPosition:-1,query:""}:{isAtMention:!0,atPosition:k,query:B}},[t.text,t.cursorPosition]);(0,ox.useEffect)(()=>{if(!d.isAtMention){r([]),I(0);return}let w=!1,v=async()=>{try{let B=await c.search(d.query),U=[...B];d.query===""&&l&&(U=[...l.getDirectories().map(S=>({path:S,relativePath:`[DIR] ${S}`,score:1})),...B]),w||(r(U),I(0))}catch{w||(r([]),I(0))}},k=setTimeout(()=>{v()},200);return()=>{w=!0,clearTimeout(k)}},[d.query,d.isAtMention,c]);let m=()=>{n.length!==0&&I(w=>w>0?w-1:n.length-1)},b=()=>{n.length!==0&&I(w=>w<n.length-1?w+1:0)},p=()=>{if(!d.isAtMention||n.length===0)return null;let w=n[a];if(!w)return null;let v=`@${w.relativePath}`,k=`${v} `,{text:B,cursorPosition:U}=t,O=B.slice(0,d.atPosition),K=B.slice(U),S=O+k+K,P={displayText:v,fullPath:w.path,type:w.relativePath.startsWith("[DIR]")?"directory":"file",startIndex:d.atPosition};return o(Ie=>{let Ae=new Map(Ie);return Ae.set(P.startIndex,P),Ae}),t.setText(S),t.setCursorPosition(d.atPosition+k.length),w.relativePath},A=()=>{r([]),I(0)},Z=()=>{o(new Map)};return[{isActive:d.isAtMention&&n.length>0,query:d.query,suggestions:n,selectedIndex:a,atPosition:d.atPosition,storedMentions:s},{navigateUp:m,navigateDown:b,complete:p,reset:A,clearStoredMentions:Z}]}var ULe=tt(tl(),1),A5l=tt(lze(),1);dy();Wwe();Uh();Vy();rF();import{readdir as GWr,readFile as pWr}from"node:fs/promises";import hWr,{join as h5l}from"node:path";function N_(t,e){if(e instanceof Error)return`${t}: ${e.message}`;if(typeof e=="object"&&e!==null)try{return`${t}: ${JSON.stringify(e)}`}catch{return`${t}: [object with circular reference]`}else return`${t}: ${String(e)}`}var OLe=tt(tl(),1);cM();var u5l=tt(d5l(),1);cM();function GAt(t){try{let e=(0,u5l.default)(t.FetchURL);return e.source!=="github.com"||!e.owner||!e.name?null:{owner:e.owner,name:e.name,host:"github.com"}}catch{return null}}async function TLe(t){let e=await ndl(t);if(e.length===0)return null;if(e.length===1)return GAt(e[0]);let l=e.find(n=>n.Name==="origin");return GAt(l||e[0])}function m5l(t){let[e,l]=(0,OLe.useState)(null);return(0,OLe.useEffect)(()=>{(async()=>{let n=await pAt(t);l(r=>!r||r.kind!==n.kind||r.path!==n.path||n.kind==="git"&&r.kind==="git"&&(r.repo?.owner!==n.repo?.owner||r.repo?.name!==n.repo?.name)?n:r)})()},[t]),e}async function pAt(t){let e=await G1(t);if(!e.found)return{kind:"plain",path:t};try{let l=await TLe(e.gitRoot);return{kind:"git",path:e.gitRoot,repo:l}}catch{return{kind:"git",path:e.gitRoot,repo:null}}}function g5l(t,e,l,n,r,a){let[I,s]=(0,ULe.useState)({selected:null,available:[],warnings:[]}),o=m5l(a);return(0,ULe.useEffect)(()=>{if(!t)return;(async()=>{let{agents:d,warnings:m}=await hAt(e,l,n,hWr.join(r,"agents"),o);s({selected:null,available:d,warnings:m})})()},[t,e,l,n,r,o]),{customAgents:I,selectCustomAgent:async c=>{if(!t)throw new Error("attempted to use disabled feature flagged feature");let d=I.available.find(b=>b.id===c);if(!d)throw new Error(`attempted to select unknown custom agent: ${c} from ${I.available.map(b=>b.id).join(", ")}`);let m=await d.prompt().then(b=>({kind:"success",prompt:b}),b=>({kind:"error",message:N_("loading custom agent prompt",b)}));return m.kind==="error"?{kind:"error",message:m.message}:(s(b=>({...b,selected:{id:d.id,displayName:d.displayName,prompt:m.prompt,mcpServers:d.mcpServers}})),{kind:"success"})}}}function b5l(t){let e=new Set,l=[];for(let n of t)e.has(n.id)||(e.add(n.id),l.push(n));return l}async function hAt(t,e,l,n,r){let a=await G5l(n);if(r===null)return{agents:a.agents,warnings:a.warnings};let I=await G5l(h5l(r.path,".github","agents")),s=b5l([...a.agents,...I.agents]),o=[...a.warnings,...I.warnings];if(r.kind!=="git")return{agents:s,warnings:o};if(!r.repo)return{agents:s,warnings:[...o,"could not load remote agents, no github.com remote found"]};if(!l)return{agents:s,warnings:[...o,_te(r.repo,"no authentication available")]};let c=await AWr(t,e,l,r.repo);return{agents:b5l([...s,...c.agents]),warnings:[...o,...c.warnings]}}function _te(t,e){return`could not load remote agents for ${t.owner}/${t.name}: ${e}`}async function AWr(t,e,l,n){let r=b1(l,{onHMACAuthInfo:()=>jre,onEnvAuthInfo:A=>A.host,onGhCliAuthInfo:A=>A.host,onUserAuthInfo:A=>A.host,onApiKeyAuthInfo:A=>A.host,onTokenAuthInfo:A=>A.host}),{host:a}=new URL(r);if(a!=="github.com")return{agents:[],warnings:[_te(n,"auth info does not target github.com")]};let I=await cZ(l);if(!I)return{agents:[],warnings:[_te(n,"no usable token for accessing repo contents found")]};let s=await Z5l(()=>EN(r,I,t),A=>N_("fetching copilot URL",A));if(s.kind==="error")return{agents:[],warnings:[_te(n,s.message)]};let o=`${s.value}/agents/swe/custom-agents/${n.owner}/${n.name}?exclude_invalid_config=true`,c={Authorization:`Bearer ${I}`},d=await _v(o,{method:"GET",headers:c},t);if(!d.ok)return t.warning(`Failed to load custom agents for ${n.owner}/${n.name}: ${await d.text()}`),{agents:[],warnings:[_te(n,`server returned ${d.status}: ${d.statusText}`)]};let m=await d.json(),p=xI.object({agents:xI.array(W5l)}).safeParse(m);return p.success?{agents:p.data.agents.map(A=>({id:A.name,displayName:A.display_name,description:A.description,tools:A.tools,prompt:async()=>{let Z=await EWr({logger:t,integrationId:e,sweAgentsEndpoint:`${s.value}/agents/swe`,token:I,repoOwner:A.repo_owner,repoName:A.repo_name,customAgentName:A.name});if(!Z)throw new Error(`Failed to load prompt for agent ${A.name}`);return Z.prompt},mcpServers:{}})),warnings:[]}:{agents:[],warnings:[_te(n,N_("parsing http response into schema",p.error))]}}async function G5l(t){let e=await GWr(t,{withFileTypes:!0}).then(a=>({kind:"success",dirEntries:a})).catch(a=>a.code==="ENOENT"?{kind:"success",dirEntries:[]}:{kind:"error",message:N_(t,a)});if(e.kind==="error")return{agents:[],warnings:[]};let l=new Map;for(let a of e.dirEntries)if(a.isFile()&&a.name.endsWith(".md")){let I=a.name.endsWith(".agent.md"),s=a.name.replace(/(\.agent)?\.md$/,""),o=l.get(s);(!o||I&&!o.isAgentMd)&&l.set(s,{fileName:a.name,isAgentMd:I})}let n=[],r=[];for(let[a,{fileName:I}]of l.entries()){let s=h5l(t,I),o=await p5l(s);if(o.kind==="error"){r.push(o.message);continue}n.push({id:a,displayName:o.agent.name||a,description:o.agent.description,tools:o.agent.tools||["*"],prompt:async()=>{let c=await p5l(s);if(c.kind==="error")throw new Error(c.message);return await c.agent.prompt()},mcpServers:o.agent.mcpServers||{}})}return{agents:n,warnings:r}}async function p5l(t){let e=await Z5l(()=>pWr(t,"utf-8"),n=>N_(t,n));if(e.kind==="error")return{kind:"error",message:e.message};let l=gWr(e.value);return l.kind==="error"?{kind:"error",message:`${t}: ${l.message}`}:{kind:"success",agent:l.agent}}var gWr=t=>{let e=xI.object({name:xI.string().optional(),description:xI.string(),tools:xI.array(xI.string()).optional(),"mcp-servers":N5l}),l=/^---\s*\n([\s\S]*?)\n---\s*\n?/,n=t.match(l);if(!n)return{kind:"error",message:"custom agent markdown frontmatter is malformed"};let r=n[1];try{let a=(0,A5l.parse)(r),I=e.safeParse(a);if(!I.success)return{kind:"error",message:ZWr(I.error)};let s=t.slice(n[0].length);return{kind:"success",agent:{name:I.data.name??"",displayName:I.data.name??"",description:I.data.description,tools:I.data.tools||["*"],prompt:()=>Promise.resolve(s),mcpServers:I.data["mcp-servers"]||void 0}}}catch(a){return{kind:"error",message:N_("failed to parse front matter",a)}}};function ZWr(t){let e=(l,n="")=>{let r=l.path.join(".")||"(root)",a=[];return l.code==="invalid_union"&&"unionErrors"in l?(a.push(`${n}${r}: ${l.message}`),l.unionErrors.forEach((s,o)=>{a.push(`${n} Option ${o+1}:`),s.issues.forEach(c=>{a.push(...e(c,n+" "))})})):a.push(`${n}${r}: ${l.message}`),a};return t.issues.flatMap(l=>e(l)).join(`
2526
2526
  `)}async function Z5l(t,e){try{return{kind:"success",value:await t()}}catch(l){return{kind:"error",message:e(l)}}}var NWr=xI.object({command:xI.string(),args:xI.array(xI.string()),env:xI.record(xI.string(),xI.string()).optional(),tools:xI.array(xI.string()),type:xI.enum(["local","stdio"]).optional()}),WWr=xI.object({url:xI.string(),headers:xI.record(xI.string(),xI.string()).optional(),tools:xI.array(xI.string()),type:xI.enum(["http","sse"])}),N5l=xI.record(xI.string(),xI.union([NWr,WWr])).optional().nullable(),W5l=xI.object({name:xI.string(),repo_owner:xI.string(),repo_name:xI.string(),display_name:xI.string(),description:xI.string(),tools:xI.array(xI.string()),version:xI.string(),mcp_servers:N5l}),yWr=W5l.extend({prompt:xI.string()});async function EWr(t){t.logger.info(`Reading custom agent "${t.customAgentName}" from ${t.repoOwner}/${t.repoName}`);try{let e={"Copilot-Integration-Id":t.integrationId,Authorization:`Bearer ${t.token}`,"X-GitHub-Job-Nonce":t.jobNonce??""},l=await _v(`${t.sweAgentsEndpoint}/custom-agents/${t.repoOwner}/${t.repoName}/${t.customAgentName}`,{method:"GET",headers:e},t.logger,"get custom agent config");if(!l.ok){if(l.status===404)return null;throw new Error(`Failed to get custom agent config: ${l.status} ${l.statusText}`)}let n=await l.json();return yWr.parse(n)}catch(e){let l=e,n=l?.requestId||"unknown";throw t.logger.error(`Failed to get custom agent config (request ID: ${n}): ${l}`),l}}var IE=tt(tl(),1);UT();cM();m1();function y5l(t){let{cliModel:e,session:l,currentWorkingDirectory:n,customAgentName:r,stdoutColumns:a,models:I}=t,[s,o]=(0,IE.useState)({gitRoot:"",found:!1}),[c,d]=(0,IE.useState)(null);(0,IE.useEffect)(()=>{(async()=>{d(null);let w=await G1(n);o(w)})()},[n]);let m=(0,IE.useCallback)(async()=>{if(!s.found){d(null);return}let R=await adl(s.gitRoot);if(!R){d(null);return}let w=await rdl(s.gitRoot);d(v=>v?.branch===R&&v?.hasChanges===w?v:{branch:R,hasChanges:w})},[s]),b=(0,IE.useMemo)(()=>RVe(n),[n]),[p,A]=(0,IE.useState)("");(0,IE.useEffect)(()=>{(async()=>{if(!I||I.type!=="success")return;let w=await jH(e,l,I.list);w&&A(v=>v===w?v:w)})()},[e,l,I]);let Z=(0,IE.useMemo)(()=>{if(!c||!c.branch)return null;let R=a||80,w=p.length,v=r?.length||0,k=b.length,B=c.hasChanges?6:5,O=w+k+B+4+v,S=Math.max(8,R-O)-3;return`[\u2387 ${c.branch.length>S?c.branch.substring(0,S)+"...":c.branch}${c.hasChanges?"*":""}]`},[c,a,b,p]),W=(0,IE.useMemo)(()=>{if(!p)return p;let R=I&&I.type==="success"?I.list:void 0,w=Z3(p,R);return`${p} (${w}x)`},[p,I]);return{displayCwd:b,gitBranchInfo:Z,selectedModel:p,selectedModelDisplay:W,setSelectedModel:A,updateGitStatus:m}}var hZ=tt(tl(),1),RWr=3*1e3;function E5l(){let[t,e]=(0,hZ.useState)("idle"),[l,n]=(0,hZ.useState)(0),[r,a]=(0,hZ.useState)(0),[I,s]=(0,hZ.useState)(!1),o=(0,hZ.useRef)(null);(0,hZ.useEffect)(()=>()=>{o.current&&clearTimeout(o.current)},[]);let c=(0,hZ.useCallback)(()=>{o.current&&(clearTimeout(o.current),o.current=null),e("indexing"),n(0),a(0),s(!0)},[]),d=(0,hZ.useCallback)((A,Z)=>{e("completed"),n(A),a(Z),s(!0),o.current=setTimeout(()=>{s(!1),o.current=null},RWr)},[]),m=(0,hZ.useCallback)(()=>{o.current&&(clearTimeout(o.current),o.current=null),e("idle"),n(0),a(0),s(!1)},[]),b={state:t,fileCount:l,durationMs:r,isVisible:I},p=(0,hZ.useMemo)(()=>({startIndexing:c,completeIndexing:d,reset:m}),[c,d,m]);return[b,p]}var R5l=tt(tl(),1);tmt();function Y5l(t,e){(0,R5l.useEffect)(()=>{if(t)return t.on("assistant.message",l=>{if(l.data.toolRequests){for(let n of l.data.toolRequests)if(n.name===D0.name){let r=n.arguments.intent;r&&e(r)}}})},[t,e])}var MLe=tt(tl(),1);c5e();var Zge=class{hosts=new Map;logger;constructor(e){this.logger=e}async getOrCreateHost(e,l){if(!l||Object.keys(l).length===0)return;let n=this.hosts.get(e);if(n)return n;try{let r={mcpServers:l},a=new v3(this.logger,r);return await a.startServers(),this.hosts.set(e,a),this.logger.info(`Started ${Object.keys(l).length} MCP server(s) for ${e}`),a}catch(r){this.logger.error(`Failed to start MCP servers for ${e}: ${r}`);return}}getHost(e){return this.hosts.get(e)}async cleanup(){let e=[];for(let[l,n]of this.hosts.entries())e.push(n.stopServers().catch(r=>{this.logger.error(`Error stopping MCP host for ${l}: ${r}`)}));await Promise.all(e),this.hosts.clear()}size(){return this.hosts.size}};function V5l(t){let e=(0,MLe.useRef)(null);return e.current||(e.current=new Zge(t)),(0,MLe.useEffect)(()=>()=>{e.current&&e.current.cleanup().catch(l=>{t.error(`Error cleaning up MCP host cache: ${l}`)})},[t]),e.current}fit();var QF=tt(tl(),1);function w5l(t=3){let[e,l]=(0,QF.useState)(!1),n=(0,QF.useRef)(null),r=(0,QF.useRef)(t*1e3);(0,QF.useEffect)(()=>{r.current=t*1e3},[t]),(0,QF.useEffect)(()=>()=>{n.current&&clearTimeout(n.current)},[]);let a=(0,QF.useCallback)(I=>{n.current&&(clearTimeout(n.current),n.current=null),l(!0);let s=I!==void 0?I*1e3:r.current;n.current=setTimeout(()=>{l(!1),n.current=null},s)},[]);return[e,a]}var Nge=tt(tl(),1);await Hee();g8();$H();k3();await Zpe();tN();function Q5l({builtInSlashCommands:t,logger:e,currentWorkingDirectory:l,setCurrentWorkingDirectory:n,fileSearch:r,authManager:a,mcpHost:I,loginStatus:s,setLoginStatus:o,addEntryToSession:c,clearSessionHistory:d,getSessionUsageOutput:m,pathManager:b,resetSessionToolApprovals:p,clearTimeline:A,clearHeader:Z,clearContextWindowMetrics:W,setThemePreference:R,refreshStatic:w,customAgents:v,slashCommandResultActions:k,models:B}){let U=(0,Nge.useMemo)(()=>({logger:e,slashCommands:t,customAgents:v,models:B,mcp:{host:I,config:async()=>await LY.load()||{mcpServers:{}},hasServer:async S=>(await U.mcp.config())?.mcpServers[S]!==void 0,deleteServer:async S=>{let P=await U.mcp.config();delete P.mcpServers[S],await LY.write(P)}},auth:{availableAuthMethods:()=>_cl(a,s.authInfo),loginStatus:s,logout:async()=>{let S=await a.logout();return o({status:"NotLoggedIn"}),S}},session:{addTimelineEntry:c,clearHistory:d,usageOutput:m},permissions:{allowedDirs:b.getDirectories.bind(b),addAllowedDirectory:b.addDirectory.bind(b),resetSessionToolApprovals:p},process:{cwd:l,chdir:async S=>{process.chdir(S),await b.updatePrimaryDirectory(S),n(S),await r.setRootPath(S)}},ui:{getThemePreference:$He,setThemePreference:R,clear:()=>{A(),Z(),W(),w()}}}),[t,e,l,n,r,a,I,s,o,c,d,m,b,p,Z,W,R,w,v,B]),O=(0,Nge.useCallback)(async S=>{let P=id(()=>{let M=S.trim();return M==="?"?"/help":M});if(!P.startsWith("/"))return{handled:!1};let Ie=P.split(" ")[0],Ae=t.find(M=>M.name===Ie||M.aliases?.includes(Ie));if(!Ae)return{handled:!1};let ge=P.substring(Ae.name.length).trim().split(" ").filter(M=>M),q=await Ae.execute(U,ge);if(!q)return{handled:!0};switch(q.kind){case"exit":return k.exit(),{handled:!0};case"add-timeline-entry":return c(q.entry),{handled:!0};case"show-dialog":switch(q.dialog.kind){case"custom-agent-picker":k.showCustomAgentPickerDialog();break;case"feedback":k.showFeedbackDialog();break;case"login":k.showLoginDialog();break;case"mcp":k.showMCPDialog(q.dialog.mode,q.dialog.serverName);break;case"model-picker":k.showModelPickerDialog();break;case"session":k.showSessionDialog();break;case"user-switcher":k.showUserSwitcherDialog();break;default:ko(q.dialog,`Unknown dialog kind: ${q.dialog}`)}return{handled:!0};case"set-model":return await k.setModel(q.model),{handled:!0};case"noop":return{handled:!0};case"start-remote-delegate":return k.startRemoteDelegation(q.prompt),{handled:!0};default:ko(q,`Unknown slash command result kind: ${q}`)}},[t,c,k,U]),K=(0,Nge.useCallback)(S=>vee(t,S),[t]);return{slashCommands:t,handleSlashCommand:O,matchingSlashCommands:K}}var _Le=tt(tl(),1);sN();Vy();rF();function F5l(t,e,l){let n=(0,_Le.useMemo)(()=>new Map,[]);(0,_Le.useEffect)(()=>{(async()=>{if(Object.keys(t).length===0||t.staff!==void 0||!e)return;let a=await cZ(e),I=e.type==="hmac"?void 0:e.host;if(!a||I!==CL)return;let s=n.get(a)??aBt(I,a).catch(()=>!1);n.set(a,s),await s&&(await Or.writeKey("staff",!0),await Or.writeKey("log_level","all"),l({type:"info",text:"Staff mode activated! Restart the app to enable staff features \u2728"}))})()},[t,e,l])}var ix=tt(tl(),1);await Hee();function C5l(t,e,l){let[n,r]=(0,ix.useState)(null),a=(0,ix.useRef)("");return(0,ix.useEffect)(()=>{e.text!==a.current&&(n?.availableOptions.some(o=>e.text===o.name)||r(null),a.current=e.text)},[e.text,n]),{handleTabCompletion:(0,ix.useCallback)(()=>{let s=o=>{let c=o.indexOf(" ");return c===-1?!1:o.slice(c+1).trim().length>0};if(n){if(s(e.text)){r(null);return}let o=(n.currentIndex+1)%n.availableOptions.length,c=n.availableOptions[o];e.setText(c.name),r({...n,currentIndex:o}),l.setSlashCommandPickerIndex(o)}else{if(s(e.text))return;let o=vee(t,e.text);if(o.length===1){let c=o[0],d=c.name;for(let m=d.length-1;m>=2;m--){let b=d.slice(0,m),p=vee(t,b);if(p.length>1){let A=p.findIndex(R=>R.name===c.name);r({originalInput:b,availableOptions:p,currentIndex:A>=0?A:0});let Z=(A+1)%p.length,W=p[Z];e.setText(W.name),r({originalInput:b,availableOptions:p,currentIndex:Z}),l.setSlashCommandPickerIndex(Z);return}}}o.length>1?(r({originalInput:e.text,availableOptions:o,currentIndex:0}),e.setText(o[0].name),l.setSlashCommandPickerIndex(0)):o.length===1&&e.setText(o[0].name)}},[n,e,l]),tabCyclingState:n}}var LX=tt(tl(),1);function f5l(){let[t,e]=(0,LX.useState)({columns:process.stdout.columns,rows:process.stdout.rows}),l=(0,LX.useRef)(()=>{}),n=(0,LX.useCallback)(a=>{l.current=a||(()=>{})},[]),r=(0,LX.useCallback)(()=>{let{columns:a,rows:I}=process.stdout;e({columns:a,rows:I}),l.current(a,I)},[]);return(0,LX.useEffect)(()=>(process.stdout.on("resize",r),()=>{process.stdout.off("resize",r)}),[]),{...t,setOnResize:n}}var zte=tt(tl(),1);var cx=t=>/\s/.test(t);function YWr(t,e){if(e>=t.length)return t.length;let l=e;for(;l<t.length&&cx(t[l]);)l+=t[l].length;for(;l<t.length&&!cx(t[l]);)l+=t[l].length;return l}function v5l(t,e){if(e===0)return 0;let l=e-1;for(;l>=0&&cx(t[l]);)l-=t[l].length;if(l<0)return 0;for(;l>=0&&!cx(t[l]);)l-=t[l].length;return l+1}function VWr(t,e){if(e>=t.length)return t.length;let l=e;for(;l<t.length&&!cx(t[l]);)l+=t[l].length;for(;l<t.length&&cx(t[l]);)l+=t[l].length;return l}function W_(t,e){if(e<=0)return[t];let l=t.split(`
2527
2527
  `).map(r=>r+" "),n=[];for(let r of l){if(r.length<=e){n.push(r);continue}let a=r;for(;a.length>e;){let I=e;if(cx(a.slice(0,e)))for(let o=e-1;o>=Math.max(0,e-20)&&!cx(a[o]);o--)I=o;let s=a.slice(0,I);n.push(s),a=a.slice(I)}a.length>0&&n.push(a)}return n}function Pte(t,e){if(e.length===0)return{line:0,column:0};let l=0;for(let r=0;r<e.length;r++){let a=e[r],I=l+a.length;if(t<I)return{line:r,column:t-l};l=I}let n=e.length-1;return{line:n,column:e[n].length}}function Dte(t,e,l,n){if(t.length===0)return 0;let r=0;for(let a=0;a<Math.min(e,t.length);a++)r+=t[a].length;return e<t.length?r+=Math.min(l,t[e].length):r=n.length,Math.min(r,n.length)}function wWr(t,e){switch(e.type){case"set_text":return{text:e.payload,cursorPosition:e.payload.length,width:t.width};case"set_cursor_position":return{...t,cursorPosition:Math.max(0,Math.min(e.payload,t.text.length))};case"set_cursor_line_position":{let{line:l,column:n}=e.payload,r=W_(t.text,t.width),a=Dte(r,l,n,t.text);return{...t,cursorPosition:a}}case"set_width":return t.width===e.payload?t:{...t,width:e.payload};case"insert_input":{let{text:l,cursorPosition:n}=t,{input:r,callback:a}=e.payload,I=r.replace(/\r\n/g,`
2528
2528
  `).replace(/\r/g,`
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@github/copilot",
3
3
  "description": "GitHub Copilot CLI brings the power of Copilot coding agent directly to your terminal.",
4
- "version": "0.0.355-22",
4
+ "version": "0.0.355-23",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "type": "module",
7
7
  "repository": {
@@ -37,6 +37,6 @@
37
37
  "worker/**/*"
38
38
  ],
39
39
  "buildMetadata": {
40
- "gitCommit": "355c43b"
40
+ "gitCommit": "67de072"
41
41
  }
42
42
  }