@github/copilot 0.0.354-20 → 0.0.354-21
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/index.js +1 -1
- package/package.json +2 -2
package/index.js
CHANGED
|
@@ -2487,7 +2487,7 @@ Run `+Sl.cyan("{updateCommand}")+" to update",a=e.message||r;e.boxenOptions??={p
|
|
|
2487
2487
|
`).map(l=>l.trim()).filter(l=>l&&!l.startsWith("#")).map(l=>l.endsWith("/")?l.slice(0,-1)+"/**":l)}shouldIgnore(e){try{let l=Uqn(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 xbl=2e4,vnt=class extends Error{constructor(e="Search aborted"){super(e),this.name="AbortError"}};async function Sbl(t,e,l,n){let r=(0,Tbl.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 vnt;if(r(s)&&a.push(s),a.length>=n)break}return a.sort((I,s)=>{let o=I.endsWith(rU),c=s.endsWith(rU);return o&&!c?-1:!o&&c?1:I<s?-1:I>s?1:0}),a}var rGe=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 nGe(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 xd}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 Sbl(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 Efe(this.visiblePaths,{fuzzy:this.visiblePaths.length>xbl?"v1":"v2"}));let l=[];try{l=await this.fzf.find(e)}catch{l=(await Sbl(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(rU),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(rU),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:_qn(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>xbl?"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 Mqn(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 Bbl.fdir().withRelativePaths().withPathSeparator(rU).exclude((n,r)=>{let a=Dqn(this.rootPath,r);if(a==="."||a==="")return!1;let I=a.endsWith(rU)?a:`${a}${rU}`;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 nGe(e),this.invalidateCache()}},fnt=null;function Obl(){return fnt||(fnt=new rGe),fnt}function Ubl(t,e,l){let[n,r]=(0,mJ.useState)([]),[a,I]=(0,mJ.useState)(0),[s,o]=(0,mJ.useState)(new Map),c=e||Obl(),d=(0,mJ.useMemo)(()=>{let{text:V,cursorPosition:f}=t,X=-1;for(let O=f-1;O>=0;O--){let T=V[O];if(T==="@"){if(O===0||V[O-1]===" "||V[O-1]===`
|
|
2488
2488
|
`||V[O-1]===" "){X=O;break}}else if(T===" "||T===`
|
|
2489
2489
|
`||T===" ")break}if(X===-1)return{isAtMention:!1,atPosition:-1,query:""};let S=V.slice(X+1,f);return S.includes(" ")||S.includes(`
|
|
2490
|
-
`)||S.includes(" ")?{isAtMention:!1,atPosition:-1,query:""}:{isAtMention:!0,atPosition:X,query:S}},[t.text,t.cursorPosition]);(0,mJ.useEffect)(()=>{if(!d.isAtMention){r([]),I(0);return}let V=!1,f=async()=>{try{let S=await c.search(d.query),O=[...S];d.query===""&&l&&(O=[...l.getDirectories().map(x=>({path:x,relativePath:`[DIR] ${x}`,score:1})),...S]),V||(r(O),I(0))}catch{V||(r([]),I(0))}},X=setTimeout(()=>{f()},200);return()=>{V=!0,clearTimeout(X)}},[d.query,d.isAtMention,c]);let m=()=>{n.length!==0&&I(V=>V>0?V-1:n.length-1)},b=()=>{n.length!==0&&I(V=>V<n.length-1?V+1:0)},p=()=>{if(!d.isAtMention||n.length===0)return null;let V=n[a];if(!V)return null;let f=`@${V.relativePath}`,X=`${f} `,{text:S,cursorPosition:O}=t,T=S.slice(0,d.atPosition),P=S.slice(O),x=T+X+P,z={displayText:f,fullPath:V.path,type:V.relativePath.startsWith("[DIR]")?"directory":"file",startIndex:d.atPosition};return o(ae=>{let he=new Map(ae);return he.set(z.startIndex,z),he}),t.setText(x),t.setCursorPosition(d.atPosition+X.length),V.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 Vfe=$e($t(),1),bGl=$e(bBe(),1);import{readdir as g7n,readFile as Z7n}from"node:fs/promises";import N7n,{join as mGl}from"node:path";function aU(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 Yfe=$e($t(),1);var oGl=$e(sGl(),1);function knt(t){try{let e=(0,oGl.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 Rfe(t){let e=await XPt(t);if(e.length===0)return null;if(e.length===1)return knt(e[0]);let l=e.find(n=>n.Name==="origin");return knt(l||e[0])}function iGl(t){let[e,l]=(0,Yfe.useState)(null);return(0,Yfe.useEffect)(()=>{(async()=>{let n=await Lnt(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 Lnt(t){let e=await mY(t);if(!e.found)return{kind:"plain",path:t};try{let l=await Rfe(e.gitRoot);return{kind:"git",path:e.gitRoot,repo:l}}catch{return{kind:"git",path:e.gitRoot,repo:null}}}function GGl(t,e,l,n,r,a){let[I,s]=(0,Vfe.useState)({selected:null,available:[],warnings:[]}),o=iGl(a);return(0,Vfe.useEffect)(()=>{if(!t)return;(async()=>{let{agents:d,warnings:m}=await Jnt(e,l,n,N7n.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:aU("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 cGl(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 Jnt(t,e,l,n,r){let a=await dGl(n);if(r===null)return{agents:a.agents,warnings:a.warnings};let I=await dGl(mGl(r.path,".github","agents")),s=cGl([...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,M7(r.repo,"no authentication available")]};let c=await W7n(t,e,l,r.repo);return{agents:cGl([...s,...c.agents]),warnings:[...o,...c.warnings]}}function M7(t,e){return`could not load remote agents for ${t.owner}/${t.name}: ${e}`}async function W7n(t,e,l,n){let r=cY(l,{onHMACAuthInfo:()=>Dte,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:[M7(n,"auth info does not target github.com")]};let I=await Qg(l);if(!I)return{agents:[],warnings:[M7(n,"no usable token for accessing repo contents found")]};let s=await pGl(()=>dN(r,I,t),A=>aU("fetching copilot URL",A));if(s.kind==="error")return{agents:[],warnings:[M7(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 WC(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:[M7(n,`server returned ${d.status}: ${d.statusText}`)]};let m=await d.json(),p=OI.object({agents:OI.array(AGl)}).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 w7n({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:[M7(n,aU("parsing http response into schema",p.error))]}}async function dGl(t){let e=await g7n(t,{withFileTypes:!0}).then(r=>({kind:"success",dirEntries:r})).catch(r=>r.code==="ENOENT"?{kind:"success",dirEntries:[]}:{kind:"error",message:aU(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=mGl(t,r.name),I=r.name.slice(0,-3),s=await uGl(a);if(s.kind==="error"){n.push(s.message);continue}l.push({id:I,displayName:s.agent.name,description:s.agent.description,tools:s.agent.tools||["*"],prompt:async()=>{let o=await uGl(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 uGl(t){let e=await pGl(()=>Z7n(t,"utf-8"),n=>aU(t,n));if(e.kind==="error")return{kind:"error",message:e.message};let l=y7n(e.value);return l.kind==="error"?{kind:"error",message:`${t}: ${l.message}`}:{kind:"success",agent:l.agent}}var y7n=t=>{let e=OI.object({name:OI.string(),description:OI.string(),tools:OI.array(OI.string()).optional(),"mcp-servers":hGl}),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,bGl.parse)(r),I=e.safeParse(a);if(!I.success)return{kind:"error",message:E7n(I.error)};let s=t.slice(n[0].length);return{kind:"success",agent:{name: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:aU("failed to parse front matter",a)}}};function E7n(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(`
|
|
2490
|
+
`)||S.includes(" ")?{isAtMention:!1,atPosition:-1,query:""}:{isAtMention:!0,atPosition:X,query:S}},[t.text,t.cursorPosition]);(0,mJ.useEffect)(()=>{if(!d.isAtMention){r([]),I(0);return}let V=!1,f=async()=>{try{let S=await c.search(d.query),O=[...S];d.query===""&&l&&(O=[...l.getDirectories().map(x=>({path:x,relativePath:`[DIR] ${x}`,score:1})),...S]),V||(r(O),I(0))}catch{V||(r([]),I(0))}},X=setTimeout(()=>{f()},200);return()=>{V=!0,clearTimeout(X)}},[d.query,d.isAtMention,c]);let m=()=>{n.length!==0&&I(V=>V>0?V-1:n.length-1)},b=()=>{n.length!==0&&I(V=>V<n.length-1?V+1:0)},p=()=>{if(!d.isAtMention||n.length===0)return null;let V=n[a];if(!V)return null;let f=`@${V.relativePath}`,X=`${f} `,{text:S,cursorPosition:O}=t,T=S.slice(0,d.atPosition),P=S.slice(O),x=T+X+P,z={displayText:f,fullPath:V.path,type:V.relativePath.startsWith("[DIR]")?"directory":"file",startIndex:d.atPosition};return o(ae=>{let he=new Map(ae);return he.set(z.startIndex,z),he}),t.setText(x),t.setCursorPosition(d.atPosition+X.length),V.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 Vfe=$e($t(),1),bGl=$e(bBe(),1);import{readdir as g7n,readFile as Z7n}from"node:fs/promises";import N7n,{join as mGl}from"node:path";function aU(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 Yfe=$e($t(),1);var oGl=$e(sGl(),1);function knt(t){try{let e=(0,oGl.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 Rfe(t){let e=await XPt(t);if(e.length===0)return null;if(e.length===1)return knt(e[0]);let l=e.find(n=>n.Name==="origin");return knt(l||e[0])}function iGl(t){let[e,l]=(0,Yfe.useState)(null);return(0,Yfe.useEffect)(()=>{(async()=>{let n=await Lnt(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 Lnt(t){let e=await mY(t);if(!e.found)return{kind:"plain",path:t};try{let l=await Rfe(e.gitRoot);return{kind:"git",path:e.gitRoot,repo:l}}catch{return{kind:"git",path:e.gitRoot,repo:null}}}function GGl(t,e,l,n,r,a){let[I,s]=(0,Vfe.useState)({selected:null,available:[],warnings:[]}),o=iGl(a);return(0,Vfe.useEffect)(()=>{if(!t)return;(async()=>{let{agents:d,warnings:m}=await Jnt(e,l,n,N7n.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:aU("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 cGl(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 Jnt(t,e,l,n,r){let a=await dGl(n);if(r===null)return{agents:a.agents,warnings:a.warnings};let I=await dGl(mGl(r.path,".github","agents")),s=cGl([...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,M7(r.repo,"no authentication available")]};let c=await W7n(t,e,l,r.repo);return{agents:cGl([...s,...c.agents]),warnings:[...o,...c.warnings]}}function M7(t,e){return`could not load remote agents for ${t.owner}/${t.name}: ${e}`}async function W7n(t,e,l,n){let r=cY(l,{onHMACAuthInfo:()=>Dte,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:[M7(n,"auth info does not target github.com")]};let I=await Qg(l);if(!I)return{agents:[],warnings:[M7(n,"no usable token for accessing repo contents found")]};let s=await pGl(()=>dN(r,I,t),A=>aU("fetching copilot URL",A));if(s.kind==="error")return{agents:[],warnings:[M7(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 WC(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:[M7(n,`server returned ${d.status}: ${d.statusText}`)]};let m=await d.json(),p=OI.object({agents:OI.array(AGl)}).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 w7n({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:[M7(n,aU("parsing http response into schema",p.error))]}}async function dGl(t){let e=await g7n(t,{withFileTypes:!0}).then(r=>({kind:"success",dirEntries:r})).catch(r=>r.code==="ENOENT"?{kind:"success",dirEntries:[]}:{kind:"error",message:aU(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=mGl(t,r.name),I=r.name.slice(0,-3),s=await uGl(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 uGl(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 uGl(t){let e=await pGl(()=>Z7n(t,"utf-8"),n=>aU(t,n));if(e.kind==="error")return{kind:"error",message:e.message};let l=y7n(e.value);return l.kind==="error"?{kind:"error",message:`${t}: ${l.message}`}:{kind:"success",agent:l.agent}}var y7n=t=>{let e=OI.object({name:OI.string().optional(),description:OI.string(),tools:OI.array(OI.string()).optional(),"mcp-servers":hGl}),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,bGl.parse)(r),I=e.safeParse(a);if(!I.success)return{kind:"error",message:E7n(I.error)};let s=t.slice(n[0].length);return{kind:"success",agent:{name: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:aU("failed to parse front matter",a)}}};function E7n(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(`
|
|
2491
2491
|
`)}async function pGl(t,e){try{return{kind:"success",value:await t()}}catch(l){return{kind:"error",message:e(l)}}}var R7n=OI.object({command:OI.string(),args:OI.array(OI.string()),env:OI.record(OI.string(),OI.string()).optional(),tools:OI.array(OI.string()),type:OI.enum(["local","stdio"]).optional()}),Y7n=OI.object({url:OI.string(),headers:OI.record(OI.string(),OI.string()).optional(),tools:OI.array(OI.string()),type:OI.enum(["http","sse"])}),hGl=OI.record(OI.string(),OI.union([R7n,Y7n])).optional().nullable(),AGl=OI.object({name:OI.string(),repo_owner:OI.string(),repo_name:OI.string(),display_name:OI.string(),description:OI.string(),tools:OI.array(OI.string()),version:OI.string(),mcp_servers:hGl}),V7n=AGl.extend({prompt:OI.string()});async function w7n(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 WC(`${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 V7n.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 by=$e($t(),1);function gGl(t){let{cliModel:e,session:l,currentWorkingDirectory:n,customAgentName:r,stdoutColumns:a,models:I}=t,[s,o]=(0,by.useState)({gitRoot:"",found:!1}),[c,d]=(0,by.useState)(null);(0,by.useEffect)(()=>{(async()=>{d(null);let V=await mY(n);o(V)})()},[n]);let m=(0,by.useCallback)(async()=>{if(!s.found){d(null);return}let R=await LPt(s.gitRoot);if(!R){d(null);return}let V=await kPt(s.gitRoot);d(f=>f?.branch===R&&f?.hasChanges===V?f:{branch:R,hasChanges:V})},[s]),b=(0,by.useMemo)(()=>LEe(n),[n]),[p,A]=(0,by.useState)("");(0,by.useEffect)(()=>{(async()=>{if(!I||I.type!=="success")return;let V=await Vv(e,l,I.list);V&&A(f=>f===V?f:V)})()},[e,l,I]);let Z=(0,by.useMemo)(()=>{if(!c||!c.branch)return null;let R=a||80,V=p.length,f=r?.length||0,X=b.length,S=c.hasChanges?6:5,T=V+X+S+4+f,x=Math.max(8,R-T)-3;return`[\u2387 ${c.branch.length>x?c.branch.substring(0,x)+"...":c.branch}${c.hasChanges?"*":""}]`},[c,a,b,p]),W=(0,by.useMemo)(()=>{if(!p)return p;let R=I&&I.type==="success"?I.list:void 0,V=Cq(p,R);return`${p} (${V}x)`},[p,I]);return{displayCwd:b,gitBranchInfo:Z,selectedModel:p,selectedModelDisplay:W,setSelectedModel:A,updateGitStatus:m}}var Hg=$e($t(),1),Q7n=3*1e3;function ZGl(){let[t,e]=(0,Hg.useState)("idle"),[l,n]=(0,Hg.useState)(0),[r,a]=(0,Hg.useState)(0),[I,s]=(0,Hg.useState)(!1),o=(0,Hg.useRef)(null);(0,Hg.useEffect)(()=>()=>{o.current&&clearTimeout(o.current)},[]);let c=(0,Hg.useCallback)(()=>{o.current&&(clearTimeout(o.current),o.current=null),e("indexing"),n(0),a(0),s(!0)},[]),d=(0,Hg.useCallback)((A,Z)=>{e("completed"),n(A),a(Z),s(!0),o.current=setTimeout(()=>{s(!1),o.current=null},Q7n)},[]),m=(0,Hg.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,Hg.useMemo)(()=>({startIndexing:c,completeIndexing:d,reset:m}),[c,d,m]);return[b,p]}var NGl=$e($t(),1);function WGl(t,e){(0,NGl.useEffect)(()=>{if(t)return t.on("assistant.message",l=>{if(l.data.toolRequests){for(let n of l.data.toolRequests)if(n.name===RE.name){let r=n.arguments.intent;r&&e(r)}}})},[t,e])}var wfe=$e($t(),1);var aGe=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 LL(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 yGl(t){let e=(0,wfe.useRef)(null);return e.current||(e.current=new aGe(t)),(0,wfe.useEffect)(()=>()=>{e.current&&e.current.cleanup().catch(l=>{t.error(`Error cleaning up MCP host cache: ${l}`)})},[t]),e.current}var uQ=$e($t(),1);function EGl(t=3){let[e,l]=(0,uQ.useState)(!1),n=(0,uQ.useRef)(null),r=(0,uQ.useRef)(t*1e3);(0,uQ.useEffect)(()=>{r.current=t*1e3},[t]),(0,uQ.useEffect)(()=>()=>{n.current&&clearTimeout(n.current)},[]);let a=(0,uQ.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 IGe=$e($t(),1);function RGl({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:V,customAgents:f,slashCommandResultActions:X,models:S}){let O=(0,IGe.useMemo)(()=>({logger:e,slashCommands:t,customAgents:f,models:S,mcp:{host:I,config:async()=>await uY.load()||{mcpServers:{}},hasServer:async x=>(await O.mcp.config())?.mcpServers[x]!==void 0,deleteServer:async x=>{let z=await O.mcp.config();delete z.mcpServers[x],await uY.write(z)}},auth:{availableAuthMethods:()=>cPt(a,s.authInfo),loginStatus:s,logout:async()=>{let x=await a.logout();return o({status:"NotLoggedIn"}),x}},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 x=>{process.chdir(x),await b.updatePrimaryDirectory(x),n(x),await r.setRootPath(x)}},ui:{getThemePreference:nQe,setThemePreference:R,clear:()=>{A(),Z(),W(),V()}}}),[t,e,l,n,r,a,I,s,o,c,d,m,b,p,Z,W,R,V,f,S]),T=(0,IGe.useCallback)(async x=>{let z=_c(()=>{let U=x.trim();return U==="?"?"/help":U});if(!z.startsWith("/"))return{handled:!1};let ae=z.split(" ")[0],he=t.find(U=>U.name===ae||U.aliases?.includes(ae));if(!he)return{handled:!1};let We=z.substring(he.name.length).trim().split(" ").filter(U=>U),K=await he.execute(O,We);if(!K)return{handled:!0};switch(K.kind){case"exit":return X.exit(),{handled:!0};case"add-timeline-entry":return c(K.entry),{handled:!0};case"show-dialog":switch(K.dialog.kind){case"custom-agent-picker":X.showCustomAgentPickerDialog();break;case"feedback":X.showFeedbackDialog();break;case"login":X.showLoginDialog();break;case"mcp":X.showMCPDialog(K.dialog.mode,K.dialog.serverName);break;case"model-picker":X.showModelPickerDialog();break;case"session":X.showSessionDialog();break;case"user-switcher":X.showUserSwitcherDialog();break;default:wo(K.dialog,`Unknown dialog kind: ${K.dialog}`)}return{handled:!0};case"set-model":return await X.setModel(K.model),{handled:!0};case"noop":return{handled:!0};case"start-remote-delegate":return X.startRemoteDelegation(K.prompt),{handled:!0};default:wo(K,`Unknown slash command result kind: ${K}`)}},[t,c,X,O]),P=(0,IGe.useCallback)(x=>Rme(t,x),[t]);return{slashCommands:t,handleSlashCommand:T,matchingSlashCommands:P}}var Qfe=$e($t(),1);function YGl(t,e,l){let n=(0,Qfe.useMemo)(()=>new Map,[]);(0,Qfe.useEffect)(()=>{(async()=>{if(Object.keys(t).length===0||t.staff!==void 0||!e)return;let a=await Qg(e),I=e.type==="hmac"?void 0:e.host;if(!a||I!==xL)return;let s=n.get(a)??Azt(I,a).catch(()=>!1);n.set(a,s),await s&&(await Sr.writeKey("staff",!0),await Sr.writeKey("log_level","all"),l({type:"info",text:"Staff mode activated! Restart the app to enable staff features \u2728"}))})()},[t,e,l])}var bJ=$e($t(),1);function VGl(t,e,l){let[n,r]=(0,bJ.useState)(null),a=(0,bJ.useRef)("");return(0,bJ.useEffect)(()=>{e.text!==a.current&&(n?.availableOptions.some(o=>e.text===o.name)||r(null),a.current=e.text)},[e.text,n]),{handleTabCompletion:(0,bJ.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=Rme(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=Rme(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 IH=$e($t(),1);function wGl(){let[t,e]=(0,IH.useState)({columns:process.stdout.columns,rows:process.stdout.rows}),l=(0,IH.useRef)(()=>{}),n=(0,IH.useCallback)(a=>{l.current=a||(()=>{})},[]),r=(0,IH.useCallback)(()=>{let{columns:a,rows:I}=process.stdout;e({columns:a,rows:I}),l.current(a,I)},[]);return(0,IH.useEffect)(()=>(process.stdout.on("resize",r),()=>{process.stdout.off("resize",r)}),[]),{...t,setOnResize:n}}var D7=$e($t(),1);var GJ=t=>/\s/.test(t);function F7n(t,e){if(e>=t.length)return t.length;let l=e;for(;l<t.length&&GJ(t[l]);)l+=t[l].length;for(;l<t.length&&!GJ(t[l]);)l+=t[l].length;return l}function QGl(t,e){if(e===0)return 0;let l=e-1;for(;l>=0&&GJ(t[l]);)l-=t[l].length;if(l<0)return 0;for(;l>=0&&!GJ(t[l]);)l-=t[l].length;return l+1}function C7n(t,e){if(e>=t.length)return t.length;let l=e;for(;l<t.length&&!GJ(t[l]);)l+=t[l].length;for(;l<t.length&&GJ(t[l]);)l+=t[l].length;return l}function IU(t,e){if(e<=0)return[t];let l=t.split(`
|
|
2492
2492
|
`).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(GJ(a.slice(0,e)))for(let o=e-1;o>=Math.max(0,e-20)&&!GJ(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 z7(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 _7(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 f7n(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=IU(t.text,t.width),a=_7(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,`
|
|
2493
2493
|
`).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.354-
|
|
4
|
+
"version": "0.0.354-21",
|
|
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": "
|
|
40
|
+
"gitCommit": "93ddef8"
|
|
41
41
|
}
|
|
42
42
|
}
|