@github/copilot 0.0.349-2 → 0.0.349-3

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 CHANGED
@@ -1979,7 +1979,7 @@ ${I}`;await r.createOrUpdateMCPStartupToolCall({serverName:e,content:s}),this.lo
1979
1979
  `)),s}}import{homedir as NDt}from"node:os";import jFn,{resolve as KFn}from"node:path";c();function WVn(t){return t.length>0&&/^[0-9a-zA-Z_-]+$/.test(t)}function $Mt(t){return!t||t.length===0?{valid:!1,error:"MCP server name cannot be empty"}:/^[0-9a-zA-Z_-]+$/.test(t)?{valid:!0}:{valid:!1,error:"MCP server name must only contain alphanumeric characters, underscores, and hyphens"}}var qMt=zg(["none","markdown","hidden_characters"]),e_t=_l({tools:xd(Et()),type:Et().optional(),isDefaultServer:bo().optional(),filterMapping:B2(Et(),qMt).or(qMt).optional()}),yVn=e_t.extend({type:gr("local").optional(),command:Et(),args:xd(Et()),env:B2(Et(),Et()).optional()}),EVn=e_t.extend({type:gr("http").or(gr("sse")),url:Et(),headers:B2(Et(),Et()).optional()}),R8e=_l({mcpServers:B2(Et().min(1,"MCP server name cannot be empty").refine(WVn,{message:"MCP server name must only contain alphanumeric characters, underscores, and hyphens"}),yVn.or(EVn))}),P2=CVe(R8e.parse,"mcp");c();c();function t_t(t){let e=t.r/255,l=t.g/255,n=t.b/255,r=Math.max(e,l,n),I=Math.min(e,l,n),a=r-I,s=0,o=0,d=(r+I)/2;if(a!==0){switch(o=d>.5?a/(2-r-I):a/(r+I),r){case e:s=(l-n)/a+(l<n?6:0);break;case l:s=(n-e)/a+2;break;case n:s=(e-l)/a+4;break}s/=6}return{h:s*360,s:o,l:d}}function RVn(t){if(t.length<12||t.length>18)return null;let e=t.match(/rgb:([0-9a-f]+)\/([0-9a-f]+)\/([0-9a-f]+)/i);if(!e)return null;let[,l,n,r]=e,I=d=>d.length>=2?parseInt(d.substring(0,2),16):d.length===1?parseInt(d+d,16):0,a=I(l),s=I(n),o=I(r);return{r:a,g:s,b:o}}var l_t=["#000000","#800000","#008000","#808000","#000080","#800080","#008080","#c0c0c0","#808080","#ff0000","#00ff00","#ffff00","#0000ff","#ff00ff","#00ffff","#ffffff","#000000","#00005f","#000087","#0000af","#0000d7","#0000ff","#005f00","#005f5f","#005f87","#005faf","#005fd7","#005fff","#008700","#00875f","#008787","#0087af","#0087d7","#0087ff","#00af00","#00af5f","#00af87","#00afaf","#00afd7","#00afff","#00d700","#00d75f","#00d787","#00d7af","#00d7d7","#00d7ff","#00ff00","#00ff5f","#00ff87","#00ffaf","#00ffd7","#00ffff","#5f0000","#5f005f","#5f0087","#5f00af","#5f00d7","#5f00ff","#5f5f00","#5f5f5f","#5f5f87","#5f5faf","#5f5fd7","#5f5fff","#5f8700","#5f875f","#5f8787","#5f87af","#5f87d7","#5f87ff","#5faf00","#5faf5f","#5faf87","#5fafaf","#5fafd7","#5fafff","#5fd700","#5fd75f","#5fd787","#5fd7af","#5fd7d7","#5fd7ff","#5fff00","#5fff5f","#5fff87","#5fffaf","#5fffd7","#5fffff","#870000","#87005f","#870087","#8700af","#8700d7","#8700ff","#875f00","#875f5f","#875f87","#875faf","#875fd7","#875fff","#878700","#87875f","#878787","#8787af","#8787d7","#8787ff","#87af00","#87af5f","#87af87","#87afaf","#87afd7","#87afff","#87d700","#87d75f","#87d787","#87d7af","#87d7d7","#87d7ff","#87ff00","#87ff5f","#87ff87","#87ffaf","#87ffd7","#87ffff","#af0000","#af005f","#af0087","#af00af","#af00d7","#af00ff","#af5f00","#af5f5f","#af5f87","#af5faf","#af5fd7","#af5fff","#af8700","#af875f","#af8787","#af87af","#af87d7","#af87ff","#afaf00","#afaf5f","#afaf87","#afafaf","#afafd7","#afafff","#afd700","#afd75f","#afd787","#afd7af","#afd7d7","#afd7ff","#afff00","#afff5f","#afff87","#afffaf","#afffd7","#afffff","#d70000","#d7005f","#d70087","#d700af","#d700d7","#d700ff","#d75f00","#d75f5f","#d75f87","#d75faf","#d75fd7","#d75fff","#d78700","#d7875f","#d78787","#d787af","#d787d7","#d787ff","#d7af00","#d7af5f","#d7af87","#d7afaf","#d7afd7","#d7afff","#d7d700","#d7d75f","#d7d787","#d7d7af","#d7d7d7","#d7d7ff","#d7ff00","#d7ff5f","#d7ff87","#d7ffaf","#d7ffd7","#d7ffff","#ff0000","#ff005f","#ff0087","#ff00af","#ff00d7","#ff00ff","#ff5f00","#ff5f5f","#ff5f87","#ff5faf","#ff5fd7","#ff5fff","#ff8700","#ff875f","#ff8787","#ff87af","#ff87d7","#ff87ff","#ffaf00","#ffaf5f","#ffaf87","#ffafaf","#ffafd7","#ffafff","#ffd700","#ffd75f","#ffd787","#ffd7af","#ffd7d7","#ffd7ff","#ffff00","#ffff5f","#ffff87","#ffffaf","#ffffd7","#ffffff","#080808","#121212","#1c1c1c","#262626","#303030","#3a3a3a","#444444","#4e4e4e","#585858","#626262","#6c6c6c","#767676","#808080","#8a8a8a","#949494","#9e9e9e","#a8a8a8","#b2b2b2","#bcbcbc","#c6c6c6","#d0d0d0","#dadada","#e4e4e4","#eeeeee"];function YVn(t){let e=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return e?{r:parseInt(e[1],16),g:parseInt(e[2],16),b:parseInt(e[3],16)}:{r:0,g:0,b:0}}function VVn(t){return t<0||t>=l_t.length?{r:0,g:0,b:0}:YVn(l_t[t])}function n_t(t){if(t.length<15||t.length>30)return null;let e=t;e.endsWith("\x07")?e=e.slice(0,-1):e.endsWith("\x1B\\")?e=e.slice(0,-2):e.endsWith("\x9C")&&(e=e.slice(0,-1));let l=e;return l.startsWith("11;")&&(l=l.substring(3)),l.startsWith("rgb:")?RVn(l):null}async function wVn(t=100){return new Promise(e=>{if(!process.stdout.isTTY||!process.stdin.isTTY){e(null);return}let l="",n=null,r=()=>{process.stdin.removeListener("data",I),process.stdin.setRawMode(!1),n&&clearTimeout(n)},I=a=>{l+=a.toString();let s=l.match(/\x1b\]11;([^\x07\x1b\x9c]*?)(?:\x07|\x1b\\|\x9c)/);if(s){r();let d=`11;${s[1]}`;e(n_t(d));return}let o=l.match(/11;rgb:([0-9a-f/]+)(?:\x07|\x1b\\|\x9c)/i);if(o){r(),e(n_t(`11;rgb:${o[1]}`));return}};n=setTimeout(()=>{r(),e(null)},t);try{process.stdin.setRawMode(!0),process.stdin.on("data",I),process.stdout.write("\x1B]11;?\x1B\\")}catch{r(),e(null)}})}function QVn(){let t=process.env.COLORFGBG;if(!t||!t.includes(";"))return null;let e=t.split(";"),l=e[e.length-1],n=parseInt(l,10);return isNaN(n)?null:VVn(n)}async function r_t(){try{let t=await wVn();if(t)return t_t(t).l<.5;let e=QVn();return e?t_t(e).l<.5:!0}catch{return!0}}var I_t={FG:"whiteBright",ACCENT:"blue",SUCCESS:"green",DIFF_ADDED_HIGHLIGHT_FG:"black",DIFF_REMOVED_HIGHLIGHT_FG:"whiteBright",ERROR:"red",WARNING:"yellow",COPILOT:"magenta",COPILOT_BRIGHT:"magentaBright",MUTED:"white",SELECTED:"cyan",BORDER:"blackBright"},FVn={FG:"black",ACCENT:"blue",SUCCESS:"green",DIFF_ADDED_HIGHLIGHT_FG:"black",DIFF_REMOVED_HIGHLIGHT_FG:"whiteBright",ERROR:"red",WARNING:"yellow",COPILOT:"magenta",COPILOT_BRIGHT:"magentaBright",MUTED:"blackBright",SELECTED:"cyan",BORDER:"blackBright"};function Y8e(t){return t==="auto"||t==="dark"||t==="light"}function JVe(t){switch(t){case"dark":return I_t;case"light":return FVn;default:return I_t}}var xVe=await r_t();async function SVe(){let e=(await Lr.load())?.theme||"";return Y8e(e)?e:"auto"}async function a_t(t){await Lr.writeKey("theme",t)}var s_t=t=>{let e=t?Jl.whiteBright:Jl.black,l=t?Jl.cyanBright:Jl.blueBright,n=t?Jl.magentaBright:Jl.magenta;return{text:e,paragraph:e,html:e,table:e,blockquote:e,heading:Jl.bold,firstHeading:Jl.whiteBright.bold,strong:Jl.bold,em:Jl.italic,del:Jl.strikethrough,hr:Jl.white,link:l,href:l,image:(r,I,a)=>n(a?`Image: ${a} \u2192 ${r}`:`Image: ${r}`),codespan:Jl.cyan,code:Jl.cyan,list:(r,I,a)=>{let s=r.replace(/^(\s*)\* /gm,"$1- ");return a&&(s=s.split(`
1980
1980
  `).map(u=>u.startsWith(a)?u.slice(a.length):u).join(`
1981
1981
  `)),s.trimEnd()},listitem:r=>e(r.trimEnd()),reflowText:!0,showSectionPrefix:!1,unescape:!0,emoji:!0,tab:2,tableOptions:{style:{compact:!1}}}},CVn=s_t(!0),vVn=s_t(!1);function o_t(t){return t==="light"?vVn:CVn}c();import{exec as DFn}from"node:child_process";import*as q8e from"node:os";import{promisify as zFn}from"node:util";c();c();c();import{execFile as fVn}from"node:child_process";import{normalize as HVn}from"node:path";import{promisify as XVn}from"node:util";var due=XVn(fVn);async function If(t=process.cwd()){try{let l=(await due("git",["rev-parse","--show-toplevel"],{cwd:t,encoding:"utf8",timeout:5e3,maxBuffer:1048576})).stdout.trim();if(l)return{gitRoot:HVn(l),found:!0}}catch{}return{gitRoot:t,found:!1}}async function i_t(t){let{stdout:e}=await due("git",["-C",t,"remote","-v"],{encoding:"utf8",timeout:5e3,maxBuffer:1048576}),l=e.trim().split(`
1982
- `),n={};for(let r of l){let I=r.split(/\s+/);if(I.length>=3){let a=I[0],s=I[1],o=I[2].replace(/[()]/g,"");n[a]||(n[a]={Name:a,FetchURL:"",PushURL:""}),o==="fetch"?n[a].FetchURL=s:o==="push"&&(n[a].PushURL=s)}}return Object.values(n)}async function c_t(t){try{let{stdout:e}=await due("git",["status","--porcelain"],{cwd:t,encoding:"utf8",timeout:5e3,maxBuffer:1048576});return e.trim().length>0}catch{return!1}}async function d_t(t){try{let{stdout:e}=await due("git",["rev-parse","--abbrev-ref","HEAD"],{cwd:t,encoding:"utf8",timeout:5e3,maxBuffer:1048576}),l=e.trim();if(l==="HEAD"){let{stdout:n}=await due("git",["rev-parse","--short","HEAD"],{cwd:t,encoding:"utf8",timeout:5e3,maxBuffer:1048576}),r=n.trim();return r?`detached@${r}`:null}return l||null}catch{return null}}c();var B_t=nt(S_t(),1);async function wQn(t={}){let e=await bAt();return hAt((0,B_t.default)({},e,t))}async function PVe(t={}){if(F_())throw new Error("Settings have already been initialized");return wQn(t)}c();c();c();import{promises as QQn}from"fs";import O_t from"path";var FQn=3*1024*1024;function T_t(t){let e=O_t.extname(t).toLowerCase();return[".png",".jpg",".jpeg",".gif",".webp"].includes(e)}function CQn(t){switch(O_t.extname(t).toLowerCase()){case".png":return"image/png";case".jpg":case".jpeg":return"image/jpeg";case".gif":return"image/gif";case".webp":return"image/webp";default:return null}}async function vQn(t,e){e.debug(`Processing local image file: ${t}`);let l=await QQn.readFile(t),n=CQn(t);if(!n)throw new Error(`Unsupported image format: ${t}`);let r=new ese,I=await zye(e,r,FQn,Kae,n,l);if(!I)throw new Error(`Image too large or couldn't be processed: ${t}`);let a=I.toString("base64");return`data:${n};base64,${a}`}async function fQn(t,e){let l=Bu();try{let n=await oSe({command:"view",path:t,view_range:void 0},{properties:{command:"view",resolvedPathAgainstCwd:"false",options:"{}",inputs:"[]"},metrics:{responseTokenLimit:void 0,resultLength:0,resultForLlmLength:0},restrictedProperties:{}},e);return{id:l,name:"view",arguments:{path:t},result:n.textResultForLlm||""}}catch(n){return{id:l,name:"view",arguments:{path:t},result:`Error reading ${t}: ${n}`}}}async function U_t(t,e){let l=[],n=t.filter(I=>!T_t(I.path));if(n.length===0)return l;let r=[];for(let I of n)try{let a=await fQn(I.path,e);r.push(a)}catch{}if(r.length>0){let I=r.map(a=>({id:a.id,type:"function",function:{name:a.name,arguments:JSON.stringify(a.arguments)}}));l.push({role:"assistant",content:"I need to read the content of those paths to answer this request.",tool_calls:I}),l.push(...r.map(a=>({role:"tool",tool_call_id:a.id,content:a.result})))}return l}async function M_t(t,e){let l=t.filter(r=>T_t(r.path));return(await Promise.all(l.map(async r=>{try{return{type:"image_url",image_url:{url:await vQn(r.path,e)}}}catch(I){e.error(`Failed to process image ${r.path}: ${I instanceof Error?I.message:String(I)}`);return}}))).filter(r=>r!==void 0)}var of=class{sessionId;startTime;modifiedTime;events=[];_chatMessages=[];_selectedModel;logger;eventCallbacks=[];eventProcessingQueue=Promise.resolve();constructor({sessionId:e,startTime:l,modifiedTime:n,logger:r}={}){this.sessionId=e||Bu(),this.startTime=l||new Date,this.modifiedTime=n||this.startTime,this.logger=r||new Hc}get messageCount(){let e=this.events.find(n=>n.type==="session.import_legacy"),l=0;return e&&(l=(e.data.legacySession?.chatMessages||[]).filter(I=>I.role==="user"||I.role==="assistant").length),this.logger.debug(`Imported message count: ${l}`),this.events.filter(n=>n.type==="user.message"||n.type==="assistant.message").length+l}get summary(){let e=this.events.find(I=>I.type==="session.import_legacy"||I.type==="user.message"),l;if(e?.type==="session.import_legacy"){let I=e.data.legacySession.chatMessages.find(a=>a.role==="user");I?.content&&(typeof I.content=="string"?l=I.content:l=I.content.find(a=>a.type==="text")?.text)}else e?.type==="user.message"&&(l=e.data.content);if(!l)return;let n=l.lastIndexOf("<reminder>");n!==-1&&(l=l.substring(0,n).trim());let r=l.replace(/\s+/g," ").trim();return r.length>75&&(r=r.substring(0,55).trim()+"..."),r=r.split("").filter(I=>{let a=I.charCodeAt(0);return a>=32&&a!==127}).join(""),r}static async fromEvents({events:e,logger:l}){if(e.length===0)throw new Error("Cannot create session from empty events array");let n=e[0];if(n.type!=="session.start")throw new Error("First event must be session.start");let r=new this({sessionId:n.data.sessionId,startTime:new Date(n.data.startTime),logger:l||new Hc});r._selectedModel=n.data.selectedModel,r.events.push(n);for(let I=1;I<e.length;I++){let a=e[I];r.events.push(a),await r.processEventForState(a)}return r}addEvent(e){let l=e.id||Bu(),n=e.timestamp||new Date().toISOString(),r=e.parentId!==void 0?e.parentId:this.getLastEventId(),I={...e,id:l,timestamp:n,parentId:r};return this.events.push(I),this.enqueueEventProcessing(()=>this.processEventForState(I).catch(a=>{this.logger.error(`Error processing event ${I.type} (${I.id}): ${a instanceof Error?a.message:String(a)}`)})).catch(a=>{this.logger.error(`Error processing event queue ${a instanceof Error?a.message:String(a)}`)}),this.notifyEventCallbacks(I),I}getEvents(){return this.events}onEvent(e){return this.eventCallbacks.push(e),()=>{let l=this.eventCallbacks.indexOf(e);l>-1&&this.eventCallbacks.splice(l,1)}}async getChatMessages(){return this.enqueueEventProcessing(()=>this._chatMessages)}async getChatContextMessages(){return(await this.getChatMessages()).filter(l=>l.role!=="system")}async getSystemContextMessages(){return(await this.getChatMessages()).filter(l=>l.role==="system")}async getSelectedModel(){return this.enqueueEventProcessing(()=>this._selectedModel)}setSelectedModel(e){let l=this._selectedModel;this._selectedModel=e,this.addEvent({type:"session.model_change",data:{previousModel:l,newModel:e}})}getLastEventId(){return this.events.length===0?null:this.events[this.events.length-1].id}enqueueEventProcessing(e){let l=this.eventProcessingQueue.then(()=>e());return this.eventProcessingQueue=l,l}async processEventForState(e){switch(e.type){case"session.start":e.data.selectedModel&&(this._selectedModel=e.data.selectedModel);break;case"session.model_change":this._selectedModel=e.data.newModel;break;case"user.message":{let l=[],n=[];if(e.data.attachments&&e.data.attachments.length>0){let r=await M_t(e.data.attachments,this.logger);l.push(...r);let I=await U_t(e.data.attachments,this.logger);n.push(...I)}l.length>0?this._chatMessages.push({role:"user",content:[{type:"text",text:e.data.content},...l]}):this._chatMessages.push({role:"user",content:e.data.content}),n.length>0&&this._chatMessages.push(...n);break}case"assistant.message":{let l={role:"assistant",content:e.data.content||null};e.data.toolRequests&&e.data.toolRequests.length>0&&(l.tool_calls=e.data.toolRequests.map(n=>({id:n.toolCallId,type:"function",function:{name:n.name,arguments:typeof n.arguments=="string"?n.arguments:JSON.stringify(n.arguments)}}))),this._chatMessages.push(l);break}case"tool.execution_complete":{e.data.isUserRequested||this._chatMessages.push({role:"tool",tool_call_id:e.data.toolCallId,content:e.data.success?e.data.result?.content||"":e.data.error?.message||"Tool execution failed"});break}case"system.message":this._chatMessages.push({role:e.data.role,content:e.data.content,...e.data.name&&{name:e.data.name}});break;case"session.import_legacy":this._chatMessages=[...e.data.legacySession.chatMessages],e.data.legacySession.selectedModel&&(this._selectedModel=e.data.legacySession.selectedModel);break;case"abort":case"session.resume":this._chatMessages=HQn(this._chatMessages,this.logger);break;case"session.error":case"session.info":case"assistant.turn_start":case"assistant.turn_end":case"assistant.usage":case"tool.user_requested":case"tool.execution_start":case"tool.execution_partial_result":case"hook.start":case"hook.end":break;default:{let l=e;this.logger.error(`Unknown event type: ${l.type}`);break}}}notifyEventCallbacks(e){for(let l of this.eventCallbacks)try{l(e)}catch(n){this.logger.error(`Error in event callback: ${n instanceof Error?n.message:String(n)}`)}}};function HQn(t,e){if(t.length===0)return t;let l=[],n=new Set,r=!1;for(let s=t.length-1;s>=0;s--){let o=t[s];if(o.role==="assistant"&&(r=!0),o.role==="assistant"&&"tool_calls"in o&&o.tool_calls&&o.tool_calls.length>0)for(let d of o.tool_calls)n.has(d.id)||l.push(d.id);else{if(r)break;o.role==="tool"&&o.tool_call_id&&n.add(o.tool_call_id)}}if(l.length===0)return t;let I="The execution of this tool, or a previous tool was interrupted.";e.info(`Completing ${l.length} orphaned tool calls.`);let a=l.map(s=>({role:"tool",tool_call_id:s,content:I}));return[...t,...a]}c();c();import{unlink as K_t}from"fs/promises";import{join as CFn}from"path";c();var jVe=class{sessions;logger;lastAccessedSessionId;constructor({logger:e}={}){this.sessions=new Map,this.logger=e||new Hc}async createSession(){let e=new of({logger:this.logger});return this.sessions.set(e.sessionId,e),this.lastAccessedSessionId=e.sessionId,e}async getSession(e){let l=this.sessions.get(e);return l&&(this.lastAccessedSessionId=e),l}async getLastSession(){if(this.lastAccessedSessionId){let n=this.sessions.get(this.lastAccessedSessionId);if(n)return n}let e=Array.from(this.sessions.values());if(e.length===0)return;e.sort((n,r)=>r.startTime.getTime()-n.startTime.getTime());let l=e[0];return this.lastAccessedSessionId=l.sessionId,l}async listSessions(){return Array.from(this.sessions.values()).map(e=>({sessionId:e.sessionId,startTime:e.startTime,modifiedTime:e.modifiedTime}))}async saveSession(e){}async deleteSession(e){this.sessions.delete(e.sessionId),this.lastAccessedSessionId===e.sessionId&&(this.lastAccessedSessionId=void 0)}};c();c();var XQn=_l({type:gr("copilot"),text:Et(),isStreaming:bo().optional()}),kQn=_l({type:gr("error"),text:Et()}),LQn=_l({type:gr("info"),text:Et()}),L0a=_l({displayText:Et(),fullPath:Et(),type:zg(["file","directory","unresolved","image"]),startIndex:FG()}),JQn=_l({type:gr("user"),text:Et()}),S8=_l({command:Et(),description:Et(),timeout:FG().optional(),sessionId:Et().optional(),async:bo().optional()}),L8e=_l({sessionId:Et(),input:Et(),delay:FG().optional()}),J8e=_l({sessionId:Et(),delay:FG()}),x8e=_l({sessionId:Et()}),__t=Hh([S8,L8e,J8e,x8e]),xQn=_l({command:gr("view"),path:Et(),view_range:KYe([FG(),FG()]).optional()}),SQn=_l({command:gr("create"),path:Et(),file_text:Et()}),BQn=_l({command:gr("str_replace"),path:Et(),new_str:Et().optional(),old_str:Et()}),OQn=_l({command:gr("insert"),path:Et(),insert_line:FG(),new_str:Et()}),S8e=ede("command",[xQn,SQn,BQn,OQn]),B8e=_l({path:Et(),view_range:KYe([FG(),FG()]).optional()}),O8e=_l({path:Et(),file_text:Et()}),T8e=_l({path:Et(),old_str:Et(),new_str:Et().optional()}),D_t=Hh([__t,S8e,Ww()]),TQn=_l({type:gr("tool_call_requested"),callId:Et(),name:Et(),toolTitle:Et().optional(),intentionSummary:Et().nullable(),arguments:D_t,partialOutput:Et().optional(),isHidden:bo().optional(),isAlwaysExpanded:bo().optional(),showNoContent:bo().optional()}),UQn=_l({type:gr("tool_call_completed"),callId:Et(),name:Et(),toolTitle:Et().optional(),intentionSummary:Et().nullable(),result:Hh([_l({type:gr("success"),log:Et(),markdown:bo().optional()}),_l({type:gr("failure"),log:Et(),markdown:bo().optional()}),_l({type:gr("rejected"),markdown:bo().optional()}),_l({type:gr("denied"),log:Et(),markdown:bo().optional()})]),arguments:D_t,isHidden:bo().optional(),isAlwaysExpanded:bo().optional(),showNoContent:bo().optional()}),MQn=Hh([XQn,kQn,LQn,JQn,TQn,UQn]),z_t=MQn.and(_l({id:Et(),timestamp:tde.date()}));function P_t(t,e){switch(t.type){case"copilot":return e.onCopilot(t);case"error":return e.onError(t);case"info":return e.onInfo(t);case"tool_call_requested":return e.onToolCallRequested(t);case"tool_call_completed":return e.onToolCallCompleted(t);case"user":return e.onUser(t);default:{let l=t;throw new Error(`Unexpected message type: ${JSON.stringify(t)}`)}}}var CO=class t extends Error{prUrl;timeoutContext;constructor(e,l,n){super(e),this.name="JobStatusTimeoutError",this.timeoutContext=l,this.prUrl=n,Error.captureStackTrace&&Error.captureStackTrace(this,t)}};var hue=_l({type:gr("text"),text:Et()}),_Qn=_l({type:gr("refusal"),refusal:Et()}),DQn=_l({type:gr("image_url"),image_url:_l({url:Et(),detail:zg(["auto","low","high"]).optional()})}),zQn=_l({type:gr("input_audio"),input_audio:_l({data:Et(),format:gr("wav").or(gr("mp3"))})}),PQn=_l({type:gr("file"),file:_l({file_date:Et().optional(),file_id:Et().optional(),filename:Et().optional()})}),jQn=Hh([hue,DQn,zQn,PQn]),KQn=_l({name:Et(),arguments:Et()}),qQn=_l({name:Et(),input:Et()}),$Qn=_l({id:Et(),type:gr("function"),function:KQn}),eFn=_l({id:Et(),type:gr("custom"),custom:qQn}),tFn=Hh([$Qn,eFn]),lFn=_l({name:Et(),arguments:Et()}),nFn=_l({id:Et()}),rFn=_l({content:Hh([Et(),xd(hue)]),role:gr("developer"),name:Et().optional()}),IFn=_l({content:Hh([Et(),xd(hue)]),role:gr("system"),name:Et().optional()}),aFn=_l({content:Hh([Et(),xd(jQn)]),role:gr("user"),name:Et().optional()}),sFn=_l({content:Hh([Et(),xd(Hh([hue,_Qn]))]).nullable().optional(),role:gr("assistant"),name:Et().optional(),refusal:Et().nullable().optional(),audio:nFn.nullable().optional(),function_call:lFn.nullable().optional(),tool_calls:xd(tFn).optional()}),oFn=_l({content:Hh([Et(),xd(hue)]),role:gr("tool"),tool_call_id:Et()}),iFn=_l({content:Et().nullable(),role:gr("function"),name:Et()}),cFn=Hh([rFn,IFn,aFn,sFn,oFn,iFn]),U8e=_l({sessionId:Et(),startTime:tde.date(),chatMessages:xd(cFn),timeline:xd(z_t),selectedModel:zg(RO).optional()}),Aue=vVe(U8e.parse,"history-session");c();c();var Vb=_l({id:Et().uuid(),timestamp:Et().datetime(),parentId:Et().uuid().nullable(),ephemeral:bo().optional()}),dFn=Vb.extend({type:gr("session.start"),data:_l({sessionId:Et(),version:FG(),producer:Et(),copilotVersion:Et(),startTime:Et().datetime(),selectedModel:Et().optional()})}),uFn=Vb.extend({type:gr("session.resume"),data:_l({resumeTime:Et().datetime(),eventCount:FG()})}),mFn=Vb.extend({type:gr("session.error"),data:_l({errorType:Et(),message:Et(),stack:Et().optional()})}),bFn=Vb.extend({type:gr("session.info"),data:_l({infoType:Et(),message:Et()})}),GFn=Vb.extend({type:gr("session.model_change"),data:_l({previousModel:Et().optional(),newModel:Et()})}),pFn=Vb.extend({type:gr("session.import_legacy"),data:_l({legacySession:U8e,importTime:Et().datetime(),sourceFile:Et()})}),hFn=_l({type:zg(["file","directory"]),path:Et(),displayName:Et()}),AFn=Vb.extend({type:gr("user.message"),data:_l({content:Et(),attachments:xd(hFn).optional()})}),ZFn=Vb.extend({type:gr("assistant.turn_start"),data:_l({turnId:Et()})}),gFn=Vb.extend({type:gr("assistant.message"),data:_l({messageId:Et(),content:Et(),toolRequests:xd(_l({toolCallId:Et(),name:Et(),arguments:Ww()})).optional()})}),NFn=Vb.extend({type:gr("assistant.turn_end"),data:_l({turnId:Et()})}),WFn=Vb.extend({type:gr("assistant.usage"),ephemeral:gr(!0),data:_l({model:Et().optional(),tokensUsed:FG().optional(),cost:FG().optional(),duration:FG().optional(),initiator:Et().optional()})}),yFn=Vb.extend({type:gr("abort"),data:_l({reason:Et()})}),EFn=Vb.extend({type:gr("tool.user_requested"),data:_l({toolCallId:Et(),toolName:Et(),arguments:Ww()})}),RFn=Vb.extend({type:gr("tool.execution_start"),data:_l({toolCallId:Et(),toolName:Et(),arguments:Ww()})}),YFn=Vb.extend({type:gr("tool.execution_partial_result"),ephemeral:gr(!0),data:_l({toolCallId:Et(),partialOutput:Et()})}),VFn=Vb.extend({type:gr("tool.execution_complete"),data:_l({toolCallId:Et(),success:bo(),isUserRequested:bo().optional(),result:_l({content:Et()}).optional(),error:_l({message:Et(),code:Et().optional()}).optional()})}),wFn=Vb.extend({type:gr("hook.start"),data:_l({hookInvocationId:Et(),hookType:Et(),input:Ww()})}),QFn=Vb.extend({type:gr("hook.end"),data:_l({hookInvocationId:Et(),hookType:Et(),output:Ww(),success:bo(),error:_l({message:Et(),stack:Et().optional()}).optional()})}),FFn=Vb.extend({type:gr("system.message"),data:_l({content:Et(),role:zg(["system","developer"]),name:Et().optional(),metadata:_l({promptVersion:Et().optional(),variables:B2(Ww()).optional()}).optional()})}),j_t=ede("type",[dFn,uFn,mFn,bFn,GFn,pFn,AFn,ZFn,gFn,NFn,WFn,yFn,EFn,RFn,YFn,VFn,wFn,QFn,FFn]);var vO=HMt(j_t.parse,"session");var KVe=class{constructor(e,l,n,r=!1,I){this.session=e;this.logger=l;this.flushDebounceMs=n;this.shouldSaveSession=r;this.legacySourceFile=I;this.unsubscribe=this.session.onEvent(a=>{a.ephemeral||(this.unflushedEvents.push(a),!this.shouldSaveSession&&a.type==="user.message"&&(this.shouldSaveSession=!0),this.shouldSaveSession&&(this.flushTimer&&clearTimeout(this.flushTimer),this.flushTimer=setTimeout(()=>{this.flush().catch(s=>{this.logger.error(`Error flushing session ${this.session.sessionId}: ${s instanceof Error?s.message:String(s)}`)})},this.flushDebounceMs)))})}flushTimer=null;unflushedEvents=[];migratedLegacy=!1;isFlushing=!1;needsFlushAfterCurrent=!1;unsubscribe;dispose(){this.flushTimer&&(clearTimeout(this.flushTimer),this.flushTimer=null),this.unsubscribe()}async flush(){if(!this.shouldSaveSession||this.unflushedEvents.length===0)return;if(this.isFlushing){this.needsFlushAfterCurrent=!0;return}this.isFlushing=!0,this.flushTimer&&(clearTimeout(this.flushTimer),this.flushTimer=null);let e=this.unflushedEvents;this.unflushedEvents=[];try{if(await vO.append(e,this.session.sessionId),this.logger.debug(`Flushed ${e.length} events to session ${this.session.sessionId}`),this.legacySourceFile&&!this.migratedLegacy){this.logger.debug(`Migrated legacy session ${this.session.sessionId} from ${this.legacySourceFile}`);try{await K_t(this.legacySourceFile)}catch(l){this.logger.error(`Failed to delete legacy session file ${this.legacySourceFile}: ${l}`)}this.migratedLegacy=!0}}catch(l){this.logger.error(`Failed to flush events for ${this.session.sessionId}: ${l instanceof Error?l.message:String(l)}`),this.unflushedEvents.unshift(...e)}finally{this.isFlushing=!1,this.needsFlushAfterCurrent&&(this.needsFlushAfterCurrent=!1,await this.flush())}}},qVe=class extends jVe{sessionWriters={};copilotVersion;flushDebounceMs;constructor({logger:e,version:l,flushDebounceMs:n}){super({logger:e}),this.copilotVersion=l||"unknown",this.flushDebounceMs=n||100}async createSession(e){let l=e?.sessionId??Bu(),n=new Date,r=new of({sessionId:l,startTime:n,logger:this.logger});return this.sessionWriters[l]=new KVe(r,this.logger,this.flushDebounceMs),r.addEvent({type:"session.start",data:{sessionId:l,version:1,producer:"copilot-agent",copilotVersion:this.copilotVersion,startTime:n.toISOString(),selectedModel:e?.selectedModel}}),r}async getSession(e){let l,n;try{l=await this.loadSession(e)}catch{try{let r=await this.loadLegacySession(e);l=r.session,n=r.legacySourceFile}catch{return}}return this.sessionWriters[e]||(this.sessionWriters[e]=new KVe(l,this.logger,this.flushDebounceMs,!0,n)),l.addEvent({type:"session.resume",data:{resumeTime:new Date().toISOString(),eventCount:l.getEvents().length}}),l}async saveSession(e){await this.sessionWriters[e.sessionId]?.flush()}async loadSession(e){let l=await vO.load(e);if(l.length===0)throw new Error(`Session ${e} has no events`);if(l[0].type!=="session.start")throw new Error("First event must be a session.start event");return await of.fromEvents({events:l,logger:this.logger})}async loadLegacySession(e){let n=(await Aue.directoryFiles()).filter(o=>{let d=o.match(/^session_(.+)_(\d+)\.json$/);return d&&d[1]===e});if(n.length===0)throw new Error(`Legacy session ${e} not found`);let r=n[0];n.length>1&&this.logger.info(`Multiple legacy sessions found for ${e}, using newest`);let I=await Aue.load(r);if(!I)throw new Error(`Failed to load legacy session from ${r}`);let a=new Date(I.startTime),s=new of({sessionId:I.sessionId,startTime:a,logger:this.logger});return s.addEvent({type:"session.start",data:{sessionId:I.sessionId,version:1,producer:"copilot-agent",copilotVersion:this.copilotVersion,startTime:a.toISOString(),selectedModel:I.selectedModel}}),s.addEvent({type:"session.import_legacy",data:{legacySession:{sessionId:I.sessionId,startTime:a,chatMessages:I.chatMessages,timeline:I.timeline,selectedModel:I.selectedModel},importTime:new Date().toISOString(),sourceFile:r}}),this.logger.info(`Loaded legacy session ${e} from ${r}`),{session:s,legacySourceFile:Aue.path(r.replace(/\.json$/,""))}}async listSessions(){let e=await vO.directoryFilesWithMetadata(),l=await Aue.directoryFilesWithMetadata(),n=await Promise.all(e.map(async a=>({sessionId:a.file.replace(".jsonl",""),startTime:a.ctime,modifiedTime:a.mtime}))),r=(await Promise.all(l.map(async a=>{let s=a.file.match(/^session_(.+)_(\d+)\.json$/);return s?{sessionId:s[1],startTime:a.ctime,modifiedTime:a.mtime}:null}))).filter(a=>a!==null);this.logger.debug(`Found ${n.length} JSONL sessions and ${r.length} legacy sessions`);let I=new Map;for(let a of r)I.set(a.sessionId,a);for(let a of n)I.set(a.sessionId,a);return Array.from(I.values()).sort((a,s)=>s.modifiedTime.getTime()-a.modifiedTime.getTime())}async getLastSession(){let e=await this.listSessions();if(e.length===0)return;e.sort((n,r)=>r.modifiedTime.getTime()-n.modifiedTime.getTime());let l=e[0].sessionId;return await this.getSession(l)}async deleteSession(e){this.sessionWriters[e.sessionId]?.dispose(),delete this.sessionWriters[e.sessionId];let l=vO.path(e.sessionId);this.logger.info(`Deleting session file ${l}`),await K_t(l)}getSessionsDirectory(){return CFn(vO.home(),vO.directory())}setLogger(e){this.logger=e}};c();c();c();c();function Sd(t){return t()}c();var Zue;function fFn(t,e){return t.includes("\x1B[?")&&t.includes(e)}async function HFn(t){let e=process.stdin.isRaw;e||process.stdin.setRawMode(!0);try{return await t()}finally{e||process.stdin.setRawMode(!1)}}function q_t(t,e,l){return new Promise(n=>{let r="",I,a=()=>{I=void 0,process.stdin.removeListener("data",s),n(!1)},s=o=>{I!==void 0&&(r+=o.toString(),fFn(r,e)&&(process.stdin.removeListener("data",s),clearTimeout(I),I=void 0,n(!0)))};process.stdin.on("data",s),process.stdout.write("\x1B["+t),I=setTimeout(a,l)})}async function XFn(){return!(!(process.stdin.isTTY&&process.stdout.isTTY)||!await q_t("?u","u",200)||!await q_t("c","c",1e3))}async function eDt(){Zue===void 0&&(Zue=await HFn(XFn),Zue===!0&&(kFn(),process.on("exit",$_t),process.on("SIGTERM",$_t)))}function kFn(){process.stdout.write("\x1B[>1u")}function $_t(){process.stdout.write("\x1B[<u"),Zue=void 0}function $Ve(){return Zue===!0}c();c();c();c();function Nue(t,e=!1){let l=t.length,n=0,r="",I=0,a=16,s=0,o=0,d=0,u=0,b=0;function p(H,J){let S=0,T=0;for(;S<H||!J;){let U=t.charCodeAt(n);if(U>=48&&U<=57)T=T*16+U-48;else if(U>=65&&U<=70)T=T*16+U-65+10;else if(U>=97&&U<=102)T=T*16+U-97+10;else break;n++,S++}return S<H&&(T=-1),T}function h(H){n=H,r="",I=0,a=16,b=0}function Z(){let H=n;if(t.charCodeAt(n)===48)n++;else for(n++;n<t.length&&B8(t.charCodeAt(n));)n++;if(n<t.length&&t.charCodeAt(n)===46)if(n++,n<t.length&&B8(t.charCodeAt(n)))for(n++;n<t.length&&B8(t.charCodeAt(n));)n++;else return b=3,t.substring(H,n);let J=n;if(n<t.length&&(t.charCodeAt(n)===69||t.charCodeAt(n)===101))if(n++,(n<t.length&&t.charCodeAt(n)===43||t.charCodeAt(n)===45)&&n++,n<t.length&&B8(t.charCodeAt(n))){for(n++;n<t.length&&B8(t.charCodeAt(n));)n++;J=n}else b=3;return t.substring(H,J)}function N(){let H="",J=n;for(;;){if(n>=l){H+=t.substring(J,n),b=2;break}let S=t.charCodeAt(n);if(S===34){H+=t.substring(J,n),n++;break}if(S===92){if(H+=t.substring(J,n),n++,n>=l){b=2;break}switch(t.charCodeAt(n++)){case 34:H+='"';break;case 92:H+="\\";break;case 47:H+="/";break;case 98:H+="\b";break;case 102:H+="\f";break;case 110:H+=`
1982
+ `),n={};for(let r of l){let I=r.split(/\s+/);if(I.length>=3){let a=I[0],s=I[1],o=I[2].replace(/[()]/g,"");n[a]||(n[a]={Name:a,FetchURL:"",PushURL:""}),o==="fetch"?n[a].FetchURL=s:o==="push"&&(n[a].PushURL=s)}}return Object.values(n)}async function c_t(t){try{let{stdout:e}=await due("git",["status","--porcelain"],{cwd:t,encoding:"utf8",timeout:5e3,maxBuffer:1048576});return e.trim().length>0}catch{return!1}}async function d_t(t){try{let{stdout:e}=await due("git",["rev-parse","--abbrev-ref","HEAD"],{cwd:t,encoding:"utf8",timeout:5e3,maxBuffer:1048576}),l=e.trim();if(l==="HEAD"){let{stdout:n}=await due("git",["rev-parse","--short","HEAD"],{cwd:t,encoding:"utf8",timeout:5e3,maxBuffer:1048576}),r=n.trim();return r?`detached@${r}`:null}return l||null}catch{return null}}c();var B_t=nt(S_t(),1);async function wQn(t={}){let e=await bAt();return hAt((0,B_t.default)({},e,t))}async function PVe(t={}){if(F_())throw new Error("Settings have already been initialized");return wQn(t)}c();c();c();import{promises as QQn}from"fs";import O_t from"path";var FQn=3*1024*1024;function T_t(t){let e=O_t.extname(t).toLowerCase();return[".png",".jpg",".jpeg",".gif",".webp"].includes(e)}function CQn(t){switch(O_t.extname(t).toLowerCase()){case".png":return"image/png";case".jpg":case".jpeg":return"image/jpeg";case".gif":return"image/gif";case".webp":return"image/webp";default:return null}}async function vQn(t,e){e.debug(`Processing local image file: ${t}`);let l=await QQn.readFile(t),n=CQn(t);if(!n)throw new Error(`Unsupported image format: ${t}`);let r=new ese,I=await zye(e,r,FQn,Kae,n,l);if(!I)throw new Error(`Image too large or couldn't be processed: ${t}`);let a=I.toString("base64");return`data:${n};base64,${a}`}async function fQn(t,e){let l=Bu();try{let n=await oSe({command:"view",path:t,view_range:void 0},{properties:{command:"view",resolvedPathAgainstCwd:"false",options:"{}",inputs:"[]"},metrics:{responseTokenLimit:void 0,resultLength:0,resultForLlmLength:0},restrictedProperties:{}},e);return{id:l,name:"view",arguments:{path:t},result:n.textResultForLlm||""}}catch(n){return{id:l,name:"view",arguments:{path:t},result:`Error reading ${t}: ${n}`}}}async function U_t(t,e){let l=[],n=t.filter(I=>!T_t(I.path));if(n.length===0)return l;let r=[];for(let I of n)try{let a=await fQn(I.path,e);r.push(a)}catch{}if(r.length>0){let I=r.map(a=>({id:a.id,type:"function",function:{name:a.name,arguments:JSON.stringify(a.arguments)}}));l.push({role:"assistant",content:"I need to read the content of those paths to answer this request.",tool_calls:I}),l.push(...r.map(a=>({role:"tool",tool_call_id:a.id,content:a.result})))}return l}async function M_t(t,e){let l=t.filter(r=>T_t(r.path));return(await Promise.all(l.map(async r=>{try{return{type:"image_url",image_url:{url:await vQn(r.path,e)}}}catch(I){e.error(`Failed to process image ${r.path}: ${I instanceof Error?I.message:String(I)}`);return}}))).filter(r=>r!==void 0)}var of=class{sessionId;startTime;modifiedTime;events=[];_chatMessages=[];_selectedModel;logger;eventCallbacks=[];eventProcessingQueue=Promise.resolve();constructor({sessionId:e,startTime:l,modifiedTime:n,logger:r}={}){this.sessionId=e||Bu(),this.startTime=l||new Date,this.modifiedTime=n||this.startTime,this.logger=r||new Hc}get messageCount(){let e=this.events.find(n=>n.type==="session.import_legacy"),l=0;return e&&(l=(e.data.legacySession?.chatMessages||[]).filter(I=>I.role==="user"||I.role==="assistant").length),this.logger.debug(`Imported message count: ${l}`),this.events.filter(n=>n.type==="user.message"||n.type==="assistant.message").length+l}get summary(){let e=this.events.find(I=>I.type==="session.import_legacy"||I.type==="user.message"),l;if(e?.type==="session.import_legacy"){let I=e.data.legacySession.chatMessages.find(a=>a.role==="user");I?.content&&(typeof I.content=="string"?l=I.content:l=I.content.find(a=>a.type==="text")?.text)}else e?.type==="user.message"&&(l=e.data.content);if(!l)return;let n=l.lastIndexOf("<reminder>");n!==-1&&(l=l.substring(0,n).trim());let r=l.replace(/\s+/g," ").trim();return r.length>75&&(r=r.substring(0,55).trim()+"..."),r=r.split("").filter(I=>{let a=I.charCodeAt(0);return a>=32&&a!==127}).join(""),r}static async fromEvents({events:e,logger:l}){if(e.length===0)throw new Error("Cannot create session from empty events array");let n=e[0];if(n.type!=="session.start")throw new Error("First event must be session.start");let r=new this({sessionId:n.data.sessionId,startTime:new Date(n.data.startTime),logger:l||new Hc});r._selectedModel=n.data.selectedModel,r.events.push(n);for(let I=1;I<e.length;I++){let a=e[I];r.events.push(a),await r.processEventForState(a)}return r}addEvent(e){let l=e.id||Bu(),n=e.timestamp||new Date().toISOString(),r=e.parentId!==void 0?e.parentId:this.getLastEventId(),I={...e,id:l,timestamp:n,parentId:r};return this.events.push(I),this.enqueueEventProcessing(()=>this.processEventForState(I).catch(a=>{this.logger.error(`Error processing event ${I.type} (${I.id}): ${a instanceof Error?a.message:String(a)}`)})).catch(a=>{this.logger.error(`Error processing event queue ${a instanceof Error?a.message:String(a)}`)}),this.notifyEventCallbacks(I),I}getEvents(){return this.events}onEvent(e){return this.eventCallbacks.push(e),()=>{let l=this.eventCallbacks.indexOf(e);l>-1&&this.eventCallbacks.splice(l,1)}}async getChatMessages(){return this.enqueueEventProcessing(()=>this._chatMessages)}async getChatContextMessages(){return(await this.getChatMessages()).filter(l=>l.role!=="system")}async getSystemContextMessages(){return(await this.getChatMessages()).filter(l=>l.role==="system")}async getSelectedModel(){return this.enqueueEventProcessing(()=>this._selectedModel)}setSelectedModel(e){let l=this._selectedModel;this._selectedModel=e,this.addEvent({type:"session.model_change",data:{previousModel:l,newModel:e}})}getLastEventId(){return this.events.length===0?null:this.events[this.events.length-1].id}enqueueEventProcessing(e){let l=this.eventProcessingQueue.then(()=>e());return this.eventProcessingQueue=l,l}async processEventForState(e){switch(e.type){case"session.start":e.data.selectedModel&&(this._selectedModel=e.data.selectedModel);break;case"session.model_change":this._selectedModel=e.data.newModel;break;case"user.message":{let l=[],n=[];if(e.data.attachments&&e.data.attachments.length>0){let r=await M_t(e.data.attachments,this.logger);l.push(...r);let I=await U_t(e.data.attachments,this.logger);n.push(...I)}l.length>0?this._chatMessages.push({role:"user",content:[{type:"text",text:e.data.content},...l]}):this._chatMessages.push({role:"user",content:e.data.content}),n.length>0&&this._chatMessages.push(...n);break}case"assistant.message":{if(e.ephemeral)break;let l={role:"assistant",content:e.data.content||null};e.data.toolRequests&&e.data.toolRequests.length>0&&(l.tool_calls=e.data.toolRequests.map(n=>({id:n.toolCallId,type:"function",function:{name:n.name,arguments:typeof n.arguments=="string"?n.arguments:JSON.stringify(n.arguments)}}))),this._chatMessages.push(l);break}case"tool.execution_complete":{e.data.isUserRequested||this._chatMessages.push({role:"tool",tool_call_id:e.data.toolCallId,content:e.data.success?e.data.result?.content||"":e.data.error?.message||"Tool execution failed"});break}case"system.message":this._chatMessages.push({role:e.data.role,content:e.data.content,...e.data.name&&{name:e.data.name}});break;case"session.import_legacy":this._chatMessages=[...e.data.legacySession.chatMessages],e.data.legacySession.selectedModel&&(this._selectedModel=e.data.legacySession.selectedModel);break;case"abort":case"session.resume":this._chatMessages=HQn(this._chatMessages,this.logger);break;case"session.error":case"session.info":case"assistant.turn_start":case"assistant.turn_end":case"assistant.usage":case"tool.user_requested":case"tool.execution_start":case"tool.execution_partial_result":case"hook.start":case"hook.end":break;default:{let l=e;this.logger.error(`Unknown event type: ${l.type}`);break}}}notifyEventCallbacks(e){for(let l of this.eventCallbacks)try{l(e)}catch(n){this.logger.error(`Error in event callback: ${n instanceof Error?n.message:String(n)}`)}}};function HQn(t,e){if(t.length===0)return t;let l=[],n=new Set,r=!1;for(let s=t.length-1;s>=0;s--){let o=t[s];if(o.role==="assistant"&&(r=!0),o.role==="assistant"&&"tool_calls"in o&&o.tool_calls&&o.tool_calls.length>0)for(let d of o.tool_calls)n.has(d.id)||l.push(d.id);else{if(r)break;o.role==="tool"&&o.tool_call_id&&n.add(o.tool_call_id)}}if(l.length===0)return t;let I="The execution of this tool, or a previous tool was interrupted.";e.info(`Completing ${l.length} orphaned tool calls.`);let a=l.map(s=>({role:"tool",tool_call_id:s,content:I}));return[...t,...a]}c();c();import{unlink as K_t}from"fs/promises";import{join as CFn}from"path";c();var jVe=class{sessions;logger;lastAccessedSessionId;constructor({logger:e}={}){this.sessions=new Map,this.logger=e||new Hc}async createSession(){let e=new of({logger:this.logger});return this.sessions.set(e.sessionId,e),this.lastAccessedSessionId=e.sessionId,e}async getSession(e){let l=this.sessions.get(e);return l&&(this.lastAccessedSessionId=e),l}async getLastSession(){if(this.lastAccessedSessionId){let n=this.sessions.get(this.lastAccessedSessionId);if(n)return n}let e=Array.from(this.sessions.values());if(e.length===0)return;e.sort((n,r)=>r.startTime.getTime()-n.startTime.getTime());let l=e[0];return this.lastAccessedSessionId=l.sessionId,l}async listSessions(){return Array.from(this.sessions.values()).map(e=>({sessionId:e.sessionId,startTime:e.startTime,modifiedTime:e.modifiedTime}))}async saveSession(e){}async deleteSession(e){this.sessions.delete(e.sessionId),this.lastAccessedSessionId===e.sessionId&&(this.lastAccessedSessionId=void 0)}};c();c();var XQn=_l({type:gr("copilot"),text:Et(),isStreaming:bo().optional()}),kQn=_l({type:gr("error"),text:Et()}),LQn=_l({type:gr("info"),text:Et()}),L0a=_l({displayText:Et(),fullPath:Et(),type:zg(["file","directory","unresolved","image"]),startIndex:FG()}),JQn=_l({type:gr("user"),text:Et()}),S8=_l({command:Et(),description:Et(),timeout:FG().optional(),sessionId:Et().optional(),async:bo().optional()}),L8e=_l({sessionId:Et(),input:Et(),delay:FG().optional()}),J8e=_l({sessionId:Et(),delay:FG()}),x8e=_l({sessionId:Et()}),__t=Hh([S8,L8e,J8e,x8e]),xQn=_l({command:gr("view"),path:Et(),view_range:KYe([FG(),FG()]).optional()}),SQn=_l({command:gr("create"),path:Et(),file_text:Et()}),BQn=_l({command:gr("str_replace"),path:Et(),new_str:Et().optional(),old_str:Et()}),OQn=_l({command:gr("insert"),path:Et(),insert_line:FG(),new_str:Et()}),S8e=ede("command",[xQn,SQn,BQn,OQn]),B8e=_l({path:Et(),view_range:KYe([FG(),FG()]).optional()}),O8e=_l({path:Et(),file_text:Et()}),T8e=_l({path:Et(),old_str:Et(),new_str:Et().optional()}),D_t=Hh([__t,S8e,Ww()]),TQn=_l({type:gr("tool_call_requested"),callId:Et(),name:Et(),toolTitle:Et().optional(),intentionSummary:Et().nullable(),arguments:D_t,partialOutput:Et().optional(),isHidden:bo().optional(),isAlwaysExpanded:bo().optional(),showNoContent:bo().optional()}),UQn=_l({type:gr("tool_call_completed"),callId:Et(),name:Et(),toolTitle:Et().optional(),intentionSummary:Et().nullable(),result:Hh([_l({type:gr("success"),log:Et(),markdown:bo().optional()}),_l({type:gr("failure"),log:Et(),markdown:bo().optional()}),_l({type:gr("rejected"),markdown:bo().optional()}),_l({type:gr("denied"),log:Et(),markdown:bo().optional()})]),arguments:D_t,isHidden:bo().optional(),isAlwaysExpanded:bo().optional(),showNoContent:bo().optional()}),MQn=Hh([XQn,kQn,LQn,JQn,TQn,UQn]),z_t=MQn.and(_l({id:Et(),timestamp:tde.date()}));function P_t(t,e){switch(t.type){case"copilot":return e.onCopilot(t);case"error":return e.onError(t);case"info":return e.onInfo(t);case"tool_call_requested":return e.onToolCallRequested(t);case"tool_call_completed":return e.onToolCallCompleted(t);case"user":return e.onUser(t);default:{let l=t;throw new Error(`Unexpected message type: ${JSON.stringify(t)}`)}}}var CO=class t extends Error{prUrl;timeoutContext;constructor(e,l,n){super(e),this.name="JobStatusTimeoutError",this.timeoutContext=l,this.prUrl=n,Error.captureStackTrace&&Error.captureStackTrace(this,t)}};var hue=_l({type:gr("text"),text:Et()}),_Qn=_l({type:gr("refusal"),refusal:Et()}),DQn=_l({type:gr("image_url"),image_url:_l({url:Et(),detail:zg(["auto","low","high"]).optional()})}),zQn=_l({type:gr("input_audio"),input_audio:_l({data:Et(),format:gr("wav").or(gr("mp3"))})}),PQn=_l({type:gr("file"),file:_l({file_date:Et().optional(),file_id:Et().optional(),filename:Et().optional()})}),jQn=Hh([hue,DQn,zQn,PQn]),KQn=_l({name:Et(),arguments:Et()}),qQn=_l({name:Et(),input:Et()}),$Qn=_l({id:Et(),type:gr("function"),function:KQn}),eFn=_l({id:Et(),type:gr("custom"),custom:qQn}),tFn=Hh([$Qn,eFn]),lFn=_l({name:Et(),arguments:Et()}),nFn=_l({id:Et()}),rFn=_l({content:Hh([Et(),xd(hue)]),role:gr("developer"),name:Et().optional()}),IFn=_l({content:Hh([Et(),xd(hue)]),role:gr("system"),name:Et().optional()}),aFn=_l({content:Hh([Et(),xd(jQn)]),role:gr("user"),name:Et().optional()}),sFn=_l({content:Hh([Et(),xd(Hh([hue,_Qn]))]).nullable().optional(),role:gr("assistant"),name:Et().optional(),refusal:Et().nullable().optional(),audio:nFn.nullable().optional(),function_call:lFn.nullable().optional(),tool_calls:xd(tFn).optional()}),oFn=_l({content:Hh([Et(),xd(hue)]),role:gr("tool"),tool_call_id:Et()}),iFn=_l({content:Et().nullable(),role:gr("function"),name:Et()}),cFn=Hh([rFn,IFn,aFn,sFn,oFn,iFn]),U8e=_l({sessionId:Et(),startTime:tde.date(),chatMessages:xd(cFn),timeline:xd(z_t),selectedModel:zg(RO).optional()}),Aue=vVe(U8e.parse,"history-session");c();c();var Vb=_l({id:Et().uuid(),timestamp:Et().datetime(),parentId:Et().uuid().nullable(),ephemeral:bo().optional()}),dFn=Vb.extend({type:gr("session.start"),data:_l({sessionId:Et(),version:FG(),producer:Et(),copilotVersion:Et(),startTime:Et().datetime(),selectedModel:Et().optional()})}),uFn=Vb.extend({type:gr("session.resume"),data:_l({resumeTime:Et().datetime(),eventCount:FG()})}),mFn=Vb.extend({type:gr("session.error"),data:_l({errorType:Et(),message:Et(),stack:Et().optional()})}),bFn=Vb.extend({type:gr("session.info"),data:_l({infoType:Et(),message:Et()})}),GFn=Vb.extend({type:gr("session.model_change"),data:_l({previousModel:Et().optional(),newModel:Et()})}),pFn=Vb.extend({type:gr("session.import_legacy"),data:_l({legacySession:U8e,importTime:Et().datetime(),sourceFile:Et()})}),hFn=_l({type:zg(["file","directory"]),path:Et(),displayName:Et()}),AFn=Vb.extend({type:gr("user.message"),data:_l({content:Et(),attachments:xd(hFn).optional()})}),ZFn=Vb.extend({type:gr("assistant.turn_start"),data:_l({turnId:Et()})}),gFn=Vb.extend({type:gr("assistant.message"),data:_l({messageId:Et(),content:Et(),toolRequests:xd(_l({toolCallId:Et(),name:Et(),arguments:Ww()})).optional()})}),NFn=Vb.extend({type:gr("assistant.turn_end"),data:_l({turnId:Et()})}),WFn=Vb.extend({type:gr("assistant.usage"),ephemeral:gr(!0),data:_l({model:Et().optional(),tokensUsed:FG().optional(),cost:FG().optional(),duration:FG().optional(),initiator:Et().optional()})}),yFn=Vb.extend({type:gr("abort"),data:_l({reason:Et()})}),EFn=Vb.extend({type:gr("tool.user_requested"),data:_l({toolCallId:Et(),toolName:Et(),arguments:Ww()})}),RFn=Vb.extend({type:gr("tool.execution_start"),data:_l({toolCallId:Et(),toolName:Et(),arguments:Ww()})}),YFn=Vb.extend({type:gr("tool.execution_partial_result"),ephemeral:gr(!0),data:_l({toolCallId:Et(),partialOutput:Et()})}),VFn=Vb.extend({type:gr("tool.execution_complete"),data:_l({toolCallId:Et(),success:bo(),isUserRequested:bo().optional(),result:_l({content:Et()}).optional(),error:_l({message:Et(),code:Et().optional()}).optional()})}),wFn=Vb.extend({type:gr("hook.start"),data:_l({hookInvocationId:Et(),hookType:Et(),input:Ww()})}),QFn=Vb.extend({type:gr("hook.end"),data:_l({hookInvocationId:Et(),hookType:Et(),output:Ww(),success:bo(),error:_l({message:Et(),stack:Et().optional()}).optional()})}),FFn=Vb.extend({type:gr("system.message"),data:_l({content:Et(),role:zg(["system","developer"]),name:Et().optional(),metadata:_l({promptVersion:Et().optional(),variables:B2(Ww()).optional()}).optional()})}),j_t=ede("type",[dFn,uFn,mFn,bFn,GFn,pFn,AFn,ZFn,gFn,NFn,WFn,yFn,EFn,RFn,YFn,VFn,wFn,QFn,FFn]);var vO=HMt(j_t.parse,"session");var KVe=class{constructor(e,l,n,r=!1,I){this.session=e;this.logger=l;this.flushDebounceMs=n;this.shouldSaveSession=r;this.legacySourceFile=I;this.unsubscribe=this.session.onEvent(a=>{a.ephemeral||(this.unflushedEvents.push(a),!this.shouldSaveSession&&a.type==="user.message"&&(this.shouldSaveSession=!0),this.shouldSaveSession&&(this.flushTimer&&clearTimeout(this.flushTimer),this.flushTimer=setTimeout(()=>{this.flush().catch(s=>{this.logger.error(`Error flushing session ${this.session.sessionId}: ${s instanceof Error?s.message:String(s)}`)})},this.flushDebounceMs)))})}flushTimer=null;unflushedEvents=[];migratedLegacy=!1;isFlushing=!1;needsFlushAfterCurrent=!1;unsubscribe;dispose(){this.flushTimer&&(clearTimeout(this.flushTimer),this.flushTimer=null),this.unsubscribe()}async flush(){if(!this.shouldSaveSession||this.unflushedEvents.length===0)return;if(this.isFlushing){this.needsFlushAfterCurrent=!0;return}this.isFlushing=!0,this.flushTimer&&(clearTimeout(this.flushTimer),this.flushTimer=null);let e=this.unflushedEvents;this.unflushedEvents=[];try{if(await vO.append(e,this.session.sessionId),this.logger.debug(`Flushed ${e.length} events to session ${this.session.sessionId}`),this.legacySourceFile&&!this.migratedLegacy){this.logger.debug(`Migrated legacy session ${this.session.sessionId} from ${this.legacySourceFile}`);try{await K_t(this.legacySourceFile)}catch(l){this.logger.error(`Failed to delete legacy session file ${this.legacySourceFile}: ${l}`)}this.migratedLegacy=!0}}catch(l){this.logger.error(`Failed to flush events for ${this.session.sessionId}: ${l instanceof Error?l.message:String(l)}`),this.unflushedEvents.unshift(...e)}finally{this.isFlushing=!1,this.needsFlushAfterCurrent&&(this.needsFlushAfterCurrent=!1,await this.flush())}}},qVe=class extends jVe{sessionWriters={};copilotVersion;flushDebounceMs;constructor({logger:e,version:l,flushDebounceMs:n}){super({logger:e}),this.copilotVersion=l||"unknown",this.flushDebounceMs=n||100}async createSession(e){let l=e?.sessionId??Bu(),n=new Date,r=new of({sessionId:l,startTime:n,logger:this.logger});return this.sessionWriters[l]=new KVe(r,this.logger,this.flushDebounceMs),r.addEvent({type:"session.start",data:{sessionId:l,version:1,producer:"copilot-agent",copilotVersion:this.copilotVersion,startTime:n.toISOString(),selectedModel:e?.selectedModel}}),r}async getSession(e){let l,n;try{l=await this.loadSession(e)}catch{try{let r=await this.loadLegacySession(e);l=r.session,n=r.legacySourceFile}catch{return}}return this.sessionWriters[e]||(this.sessionWriters[e]=new KVe(l,this.logger,this.flushDebounceMs,!0,n)),l.addEvent({type:"session.resume",data:{resumeTime:new Date().toISOString(),eventCount:l.getEvents().length}}),l}async saveSession(e){await this.sessionWriters[e.sessionId]?.flush()}async loadSession(e){let l=await vO.load(e);if(l.length===0)throw new Error(`Session ${e} has no events`);if(l[0].type!=="session.start")throw new Error("First event must be a session.start event");return await of.fromEvents({events:l,logger:this.logger})}async loadLegacySession(e){let n=(await Aue.directoryFiles()).filter(o=>{let d=o.match(/^session_(.+)_(\d+)\.json$/);return d&&d[1]===e});if(n.length===0)throw new Error(`Legacy session ${e} not found`);let r=n[0];n.length>1&&this.logger.info(`Multiple legacy sessions found for ${e}, using newest`);let I=await Aue.load(r);if(!I)throw new Error(`Failed to load legacy session from ${r}`);let a=new Date(I.startTime),s=new of({sessionId:I.sessionId,startTime:a,logger:this.logger});return s.addEvent({type:"session.start",data:{sessionId:I.sessionId,version:1,producer:"copilot-agent",copilotVersion:this.copilotVersion,startTime:a.toISOString(),selectedModel:I.selectedModel}}),s.addEvent({type:"session.import_legacy",data:{legacySession:{sessionId:I.sessionId,startTime:a,chatMessages:I.chatMessages,timeline:I.timeline,selectedModel:I.selectedModel},importTime:new Date().toISOString(),sourceFile:r}}),this.logger.info(`Loaded legacy session ${e} from ${r}`),{session:s,legacySourceFile:Aue.path(r.replace(/\.json$/,""))}}async listSessions(){let e=await vO.directoryFilesWithMetadata(),l=await Aue.directoryFilesWithMetadata(),n=await Promise.all(e.map(async a=>({sessionId:a.file.replace(".jsonl",""),startTime:a.ctime,modifiedTime:a.mtime}))),r=(await Promise.all(l.map(async a=>{let s=a.file.match(/^session_(.+)_(\d+)\.json$/);return s?{sessionId:s[1],startTime:a.ctime,modifiedTime:a.mtime}:null}))).filter(a=>a!==null);this.logger.debug(`Found ${n.length} JSONL sessions and ${r.length} legacy sessions`);let I=new Map;for(let a of r)I.set(a.sessionId,a);for(let a of n)I.set(a.sessionId,a);return Array.from(I.values()).sort((a,s)=>s.modifiedTime.getTime()-a.modifiedTime.getTime())}async getLastSession(){let e=await this.listSessions();if(e.length===0)return;e.sort((n,r)=>r.modifiedTime.getTime()-n.modifiedTime.getTime());let l=e[0].sessionId;return await this.getSession(l)}async deleteSession(e){this.sessionWriters[e.sessionId]?.dispose(),delete this.sessionWriters[e.sessionId];let l=vO.path(e.sessionId);this.logger.info(`Deleting session file ${l}`),await K_t(l)}getSessionsDirectory(){return CFn(vO.home(),vO.directory())}setLogger(e){this.logger=e}};c();c();c();c();function Sd(t){return t()}c();var Zue;function fFn(t,e){return t.includes("\x1B[?")&&t.includes(e)}async function HFn(t){let e=process.stdin.isRaw;e||process.stdin.setRawMode(!0);try{return await t()}finally{e||process.stdin.setRawMode(!1)}}function q_t(t,e,l){return new Promise(n=>{let r="",I,a=()=>{I=void 0,process.stdin.removeListener("data",s),n(!1)},s=o=>{I!==void 0&&(r+=o.toString(),fFn(r,e)&&(process.stdin.removeListener("data",s),clearTimeout(I),I=void 0,n(!0)))};process.stdin.on("data",s),process.stdout.write("\x1B["+t),I=setTimeout(a,l)})}async function XFn(){return!(!(process.stdin.isTTY&&process.stdout.isTTY)||!await q_t("?u","u",200)||!await q_t("c","c",1e3))}async function eDt(){Zue===void 0&&(Zue=await HFn(XFn),Zue===!0&&(kFn(),process.on("exit",$_t),process.on("SIGTERM",$_t)))}function kFn(){process.stdout.write("\x1B[>1u")}function $_t(){process.stdout.write("\x1B[<u"),Zue=void 0}function $Ve(){return Zue===!0}c();c();c();c();function Nue(t,e=!1){let l=t.length,n=0,r="",I=0,a=16,s=0,o=0,d=0,u=0,b=0;function p(H,J){let S=0,T=0;for(;S<H||!J;){let U=t.charCodeAt(n);if(U>=48&&U<=57)T=T*16+U-48;else if(U>=65&&U<=70)T=T*16+U-65+10;else if(U>=97&&U<=102)T=T*16+U-97+10;else break;n++,S++}return S<H&&(T=-1),T}function h(H){n=H,r="",I=0,a=16,b=0}function Z(){let H=n;if(t.charCodeAt(n)===48)n++;else for(n++;n<t.length&&B8(t.charCodeAt(n));)n++;if(n<t.length&&t.charCodeAt(n)===46)if(n++,n<t.length&&B8(t.charCodeAt(n)))for(n++;n<t.length&&B8(t.charCodeAt(n));)n++;else return b=3,t.substring(H,n);let J=n;if(n<t.length&&(t.charCodeAt(n)===69||t.charCodeAt(n)===101))if(n++,(n<t.length&&t.charCodeAt(n)===43||t.charCodeAt(n)===45)&&n++,n<t.length&&B8(t.charCodeAt(n))){for(n++;n<t.length&&B8(t.charCodeAt(n));)n++;J=n}else b=3;return t.substring(H,J)}function N(){let H="",J=n;for(;;){if(n>=l){H+=t.substring(J,n),b=2;break}let S=t.charCodeAt(n);if(S===34){H+=t.substring(J,n),n++;break}if(S===92){if(H+=t.substring(J,n),n++,n>=l){b=2;break}switch(t.charCodeAt(n++)){case 34:H+='"';break;case 92:H+="\\";break;case 47:H+="/";break;case 98:H+="\b";break;case 102:H+="\f";break;case 110:H+=`
1983
1983
  `;break;case 114:H+="\r";break;case 116:H+=" ";break;case 117:let U=p(4,!0);U>=0?H+=String.fromCharCode(U):b=4;break;default:b=5}J=n;continue}if(S>=0&&S<=31)if(gue(S)){H+=t.substring(J,n),b=2;break}else b=6;n++}return H}function y(){if(r="",b=0,I=n,o=s,u=d,n>=l)return I=l,a=17;let H=t.charCodeAt(n);if(M8e(H)){do n++,r+=String.fromCharCode(H),H=t.charCodeAt(n);while(M8e(H));return a=15}if(gue(H))return n++,r+=String.fromCharCode(H),H===13&&t.charCodeAt(n)===10&&(n++,r+=`
1984
1984
  `),s++,d=n,a=14;switch(H){case 123:return n++,a=1;case 125:return n++,a=2;case 91:return n++,a=3;case 93:return n++,a=4;case 58:return n++,a=6;case 44:return n++,a=5;case 34:return n++,r=N(),a=10;case 47:let J=n-1;if(t.charCodeAt(n+1)===47){for(n+=2;n<l&&!gue(t.charCodeAt(n));)n++;return r=t.substring(J,n),a=12}if(t.charCodeAt(n+1)===42){n+=2;let S=l-1,T=!1;for(;n<S;){let U=t.charCodeAt(n);if(U===42&&t.charCodeAt(n+1)===47){n+=2,T=!0;break}n++,gue(U)&&(U===13&&t.charCodeAt(n)===10&&n++,s++,d=n)}return T||(n++,b=1),r=t.substring(J,n),a=13}return r+=String.fromCharCode(H),n++,a=16;case 45:if(r+=String.fromCharCode(H),n++,n===l||!B8(t.charCodeAt(n)))return a=16;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return r+=Z(),a=11;default:for(;n<l&&Y(H);)n++,H=t.charCodeAt(n);if(I!==n){switch(r=t.substring(I,n),r){case"true":return a=8;case"false":return a=9;case"null":return a=7}return a=16}return r+=String.fromCharCode(H),n++,a=16}}function Y(H){if(M8e(H)||gue(H))return!1;switch(H){case 125:case 93:case 123:case 91:case 34:case 58:case 44:case 47:return!1}return!0}function w(){let H;do H=y();while(H>=12&&H<=15);return H}return{setPosition:h,getPosition:()=>n,scan:e?w:y,getToken:()=>a,getTokenValue:()=>r,getTokenOffset:()=>I,getTokenLength:()=>n-I,getTokenStartLine:()=>o,getTokenStartCharacter:()=>I-u,getTokenError:()=>b}}function M8e(t){return t===32||t===9}function gue(t){return t===10||t===13}function B8(t){return t>=48&&t<=57}var tDt;(function(t){t[t.lineFeed=10]="lineFeed",t[t.carriageReturn=13]="carriageReturn",t[t.space=32]="space",t[t._0=48]="_0",t[t._1=49]="_1",t[t._2=50]="_2",t[t._3=51]="_3",t[t._4=52]="_4",t[t._5=53]="_5",t[t._6=54]="_6",t[t._7=55]="_7",t[t._8=56]="_8",t[t._9=57]="_9",t[t.a=97]="a",t[t.b=98]="b",t[t.c=99]="c",t[t.d=100]="d",t[t.e=101]="e",t[t.f=102]="f",t[t.g=103]="g",t[t.h=104]="h",t[t.i=105]="i",t[t.j=106]="j",t[t.k=107]="k",t[t.l=108]="l",t[t.m=109]="m",t[t.n=110]="n",t[t.o=111]="o",t[t.p=112]="p",t[t.q=113]="q",t[t.r=114]="r",t[t.s=115]="s",t[t.t=116]="t",t[t.u=117]="u",t[t.v=118]="v",t[t.w=119]="w",t[t.x=120]="x",t[t.y=121]="y",t[t.z=122]="z",t[t.A=65]="A",t[t.B=66]="B",t[t.C=67]="C",t[t.D=68]="D",t[t.E=69]="E",t[t.F=70]="F",t[t.G=71]="G",t[t.H=72]="H",t[t.I=73]="I",t[t.J=74]="J",t[t.K=75]="K",t[t.L=76]="L",t[t.M=77]="M",t[t.N=78]="N",t[t.O=79]="O",t[t.P=80]="P",t[t.Q=81]="Q",t[t.R=82]="R",t[t.S=83]="S",t[t.T=84]="T",t[t.U=85]="U",t[t.V=86]="V",t[t.W=87]="W",t[t.X=88]="X",t[t.Y=89]="Y",t[t.Z=90]="Z",t[t.asterisk=42]="asterisk",t[t.backslash=92]="backslash",t[t.closeBrace=125]="closeBrace",t[t.closeBracket=93]="closeBracket",t[t.colon=58]="colon",t[t.comma=44]="comma",t[t.dot=46]="dot",t[t.doubleQuote=34]="doubleQuote",t[t.minus=45]="minus",t[t.openBrace=123]="openBrace",t[t.openBracket=91]="openBracket",t[t.plus=43]="plus",t[t.slash=47]="slash",t[t.formFeed=12]="formFeed",t[t.tab=9]="tab"})(tDt||(tDt={}));c();var KW=new Array(20).fill(0).map((t,e)=>" ".repeat(e)),O8=200,_8e={" ":{"\n":new Array(O8).fill(0).map((t,e)=>`
1985
1985
  `+" ".repeat(e)),"\r":new Array(O8).fill(0).map((t,e)=>"\r"+" ".repeat(e)),"\r\n":new Array(O8).fill(0).map((t,e)=>`\r
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.349-2",
4
+ "version": "0.0.349-3",
5
5
  "type": "module",
6
6
  "repository": {
7
7
  "type": "git",
@@ -35,7 +35,7 @@
35
35
  "worker/**/*"
36
36
  ],
37
37
  "buildMetadata": {
38
- "gitCommit": "fe152ea"
38
+ "gitCommit": "0d91e89"
39
39
  },
40
40
  "dependencies": {
41
41
  "sharp": "^0.34.3"
package/sdk/index.js CHANGED
@@ -1410,7 +1410,7 @@ Pay attention to the following when using it:
1410
1410
  `}var lIt=b7.platform==="win32"?["APPDATA","HOMEDRIVE","HOMEPATH","LOCALAPPDATA","PATH","PROCESSOR_ARCHITECTURE","SYSTEMDRIVE","SYSTEMROOT","TEMP","USERNAME","USERPROFILE","PROGRAMFILES"]:["HOME","LOGNAME","PATH","SHELL","TERM","USER"];function nIt(){let t={};for(let e of lIt){let I=b7.env[e];I!==void 0&&(I.startsWith("()")||(t[e]=I))}return t}var i7=class{constructor(e){this._abortController=new AbortController,this._readBuffer=new d7,this._stderrStream=null,this._serverParams=e,(e.stderr==="pipe"||e.stderr==="overlapped")&&(this._stderrStream=new tIt)}async start(){if(this._process)throw new Error("StdioClientTransport already started! If using Client class, note that connect() calls start() automatically.");return new Promise((e,I)=>{var l,n,c,r,s;this._process=(0,U7e.default)(this._serverParams.command,(l=this._serverParams.args)!==null&&l!==void 0?l:[],{env:{...nIt(),...this._serverParams.env},stdio:["pipe","pipe",(n=this._serverParams.stderr)!==null&&n!==void 0?n:"inherit"],shell:!1,signal:this._abortController.signal,windowsHide:b7.platform==="win32"&&cIt(),cwd:this._serverParams.cwd}),this._process.on("error",a=>{var G,d;if(a.name==="AbortError"){(G=this.onclose)===null||G===void 0||G.call(this);return}I(a),(d=this.onerror)===null||d===void 0||d.call(this,a)}),this._process.on("spawn",()=>{e()}),this._process.on("close",a=>{var G;this._process=void 0,(G=this.onclose)===null||G===void 0||G.call(this)}),(c=this._process.stdin)===null||c===void 0||c.on("error",a=>{var G;(G=this.onerror)===null||G===void 0||G.call(this,a)}),(r=this._process.stdout)===null||r===void 0||r.on("data",a=>{this._readBuffer.append(a),this.processReadBuffer()}),(s=this._process.stdout)===null||s===void 0||s.on("error",a=>{var G;(G=this.onerror)===null||G===void 0||G.call(this,a)}),this._stderrStream&&this._process.stderr&&this._process.stderr.pipe(this._stderrStream)})}get stderr(){var e,I;return this._stderrStream?this._stderrStream:(I=(e=this._process)===null||e===void 0?void 0:e.stderr)!==null&&I!==void 0?I:null}get pid(){var e,I;return(I=(e=this._process)===null||e===void 0?void 0:e.pid)!==null&&I!==void 0?I:null}processReadBuffer(){for(var e,I;;)try{let l=this._readBuffer.readMessage();if(l===null)break;(e=this.onmessage)===null||e===void 0||e.call(this,l)}catch(l){(I=this.onerror)===null||I===void 0||I.call(this,l)}}async close(){this._abortController.abort(),this._process=void 0,this._readBuffer.clear()}send(e){return new Promise(I=>{var l;if(!(!((l=this._process)===null||l===void 0)&&l.stdin))throw new Error("Not connected");let n=z7e(e);this._process.stdin.write(n)?I():this._process.stdin.once("drain",I)})}};function cIt(){return"type"in b7}o();o();var m7=class extends TransformStream{constructor({onError:e,onRetry:I,onComment:l}={}){let n;super({start(c){n=c7({onEvent:r=>{c.enqueue(r)},onError(r){e==="terminate"?c.error(r):typeof e=="function"&&e(r)},onRetry:I,onComment:l})},transform(c){n.feed(c)}})}};var rIt={initialReconnectionDelay:1e3,maxReconnectionDelay:3e4,reconnectionDelayGrowFactor:1.5,maxRetries:2},PB=class extends Error{constructor(e,I){super(`Streamable HTTP error: ${I}`),this.code=e}},h7=class{constructor(e,I){var l;this._url=e,this._resourceMetadataUrl=void 0,this._requestInit=I?.requestInit,this._authProvider=I?.authProvider,this._fetch=I?.fetch,this._sessionId=I?.sessionId,this._reconnectionOptions=(l=I?.reconnectionOptions)!==null&&l!==void 0?l:rIt}async _authThenStart(){var e;if(!this._authProvider)throw new pG("No auth provider");let I;try{I=await qV(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,fetchFn:this._fetch})}catch(l){throw(e=this.onerror)===null||e===void 0||e.call(this,l),l}if(I!=="AUTHORIZED")throw new pG;return await this._startOrAuthSse({resumptionToken:void 0})}async _commonHeaders(){var e;let I={};if(this._authProvider){let n=await this._authProvider.tokens();n&&(I.Authorization=`Bearer ${n.access_token}`)}this._sessionId&&(I["mcp-session-id"]=this._sessionId),this._protocolVersion&&(I["mcp-protocol-version"]=this._protocolVersion);let l=this._normalizeHeaders((e=this._requestInit)===null||e===void 0?void 0:e.headers);return new Headers({...I,...l})}async _startOrAuthSse(e){var I,l,n;let{resumptionToken:c}=e;try{let r=await this._commonHeaders();r.set("Accept","text/event-stream"),c&&r.set("last-event-id",c);let s=await((I=this._fetch)!==null&&I!==void 0?I:fetch)(this._url,{method:"GET",headers:r,signal:(l=this._abortController)===null||l===void 0?void 0:l.signal});if(!s.ok){if(s.status===401&&this._authProvider)return await this._authThenStart();if(s.status===405)return;throw new PB(s.status,`Failed to open SSE stream: ${s.statusText}`)}this._handleSseStream(s.body,e,!0)}catch(r){throw(n=this.onerror)===null||n===void 0||n.call(this,r),r}}_getNextReconnectionDelay(e){let I=this._reconnectionOptions.initialReconnectionDelay,l=this._reconnectionOptions.reconnectionDelayGrowFactor,n=this._reconnectionOptions.maxReconnectionDelay;return Math.min(I*Math.pow(l,e),n)}_normalizeHeaders(e){return e?e instanceof Headers?Object.fromEntries(e.entries()):Array.isArray(e)?Object.fromEntries(e):{...e}:{}}_scheduleReconnection(e,I=0){var l;let n=this._reconnectionOptions.maxRetries;if(n>0&&I>=n){(l=this.onerror)===null||l===void 0||l.call(this,new Error(`Maximum reconnection attempts (${n}) exceeded.`));return}let c=this._getNextReconnectionDelay(I);setTimeout(()=>{this._startOrAuthSse(e).catch(r=>{var s;(s=this.onerror)===null||s===void 0||s.call(this,new Error(`Failed to reconnect SSE stream: ${r instanceof Error?r.message:String(r)}`)),this._scheduleReconnection(e,I+1)})},c)}_handleSseStream(e,I,l){if(!e)return;let{onresumptiontoken:n,replayMessageId:c}=I,r;(async()=>{var a,G,d,i;try{let b=e.pipeThrough(new TextDecoderStream).pipeThrough(new m7).getReader();for(;;){let{value:m,done:h}=await b.read();if(h)break;if(m.id&&(r=m.id,n?.(m.id)),!m.event||m.event==="message")try{let p=UV.parse(JSON.parse(m.data));c!==void 0&&lB(p)&&(p.id=c),(a=this.onmessage)===null||a===void 0||a.call(this,p)}catch(p){(G=this.onerror)===null||G===void 0||G.call(this,p)}}}catch(b){if((d=this.onerror)===null||d===void 0||d.call(this,new Error(`SSE stream disconnected: ${b}`)),l&&this._abortController&&!this._abortController.signal.aborted)try{this._scheduleReconnection({resumptionToken:r,onresumptiontoken:n,replayMessageId:c},0)}catch(m){(i=this.onerror)===null||i===void 0||i.call(this,new Error(`Failed to reconnect: ${m instanceof Error?m.message:String(m)}`))}}})()}async start(){if(this._abortController)throw new Error("StreamableHTTPClientTransport already started! If using Client class, note that connect() calls start() automatically.");this._abortController=new AbortController}async finishAuth(e){if(!this._authProvider)throw new pG("No auth provider");if(await qV(this._authProvider,{serverUrl:this._url,authorizationCode:e,resourceMetadataUrl:this._resourceMetadataUrl,fetchFn:this._fetch})!=="AUTHORIZED")throw new pG("Failed to authorize")}async close(){var e,I;(e=this._abortController)===null||e===void 0||e.abort(),(I=this.onclose)===null||I===void 0||I.call(this)}async send(e,I){var l,n,c,r;try{let{resumptionToken:s,onresumptiontoken:a}=I||{};if(s){this._startOrAuthSse({resumptionToken:s,replayMessageId:b8(e)?e.id:void 0}).catch(Z=>{var W;return(W=this.onerror)===null||W===void 0?void 0:W.call(this,Z)});return}let G=await this._commonHeaders();G.set("content-type","application/json"),G.set("accept","application/json, text/event-stream");let d={...this._requestInit,method:"POST",headers:G,body:JSON.stringify(e),signal:(l=this._abortController)===null||l===void 0?void 0:l.signal},i=await((n=this._fetch)!==null&&n!==void 0?n:fetch)(this._url,d),b=i.headers.get("mcp-session-id");if(b&&(this._sessionId=b),!i.ok){if(i.status===401&&this._authProvider){if(this._resourceMetadataUrl=KB(i),await qV(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,fetchFn:this._fetch})!=="AUTHORIZED")throw new pG;return this.send(e)}let Z=await i.text().catch(()=>null);throw new Error(`Error POSTing to endpoint (HTTP ${i.status}): ${Z}`)}if(i.status===202){_Pe(e)&&this._startOrAuthSse({resumptionToken:void 0}).catch(Z=>{var W;return(W=this.onerror)===null||W===void 0?void 0:W.call(this,Z)});return}let h=(Array.isArray(e)?e:[e]).filter(Z=>"method"in Z&&"id"in Z&&Z.id!==void 0).length>0,p=i.headers.get("content-type");if(h)if(p?.includes("text/event-stream"))this._handleSseStream(i.body,{onresumptiontoken:a},!1);else if(p?.includes("application/json")){let Z=await i.json(),W=Array.isArray(Z)?Z.map(Y=>UV.parse(Y)):[UV.parse(Z)];for(let Y of W)(c=this.onmessage)===null||c===void 0||c.call(this,Y)}else throw new PB(-1,`Unexpected content type: ${p}`)}catch(s){throw(r=this.onerror)===null||r===void 0||r.call(this,s),s}}get sessionId(){return this._sessionId}async terminateSession(){var e,I,l;if(this._sessionId)try{let n=await this._commonHeaders(),c={...this._requestInit,method:"DELETE",headers:n,signal:(e=this._abortController)===null||e===void 0?void 0:e.signal},r=await((I=this._fetch)!==null&&I!==void 0?I:fetch)(this._url,c);if(!r.ok&&r.status!==405)throw new PB(r.status,`Failed to terminate session: ${r.statusText}`);this._sessionId=void 0}catch(n){throw(l=this.onerror)===null||l===void 0||l.call(this,n),n}}setProtocolVersion(e){this._protocolVersion=e}get protocolVersion(){return this._protocolVersion}};o();var p7=class{constructor(e){this.server=e}onmessage;onerror;onclose;serverTransport;closed=!1;async start(){if(this.closed)throw new Error("Transport is closed");this.serverTransport=new FWe(this),await this.server.connect(this.serverTransport)}async send(e){if(this.closed)throw new Error("Transport is closed");setImmediate(()=>{try{this.serverTransport?.onmessage?.(e)}catch(I){this.onerror?.(I instanceof Error?I:new Error(String(I)))}})}receive(e){this.closed||this.onmessage?.(e)}async close(){this.closed||(this.closed=!0,await this.serverTransport?.close(),this.onclose?.())}},FWe=class{constructor(e){this.clientTransport=e}onmessage;onerror;onclose;closed=!1;async start(){}async send(e){if(this.closed)throw new Error("Transport is closed");setImmediate(()=>{try{this.clientTransport.receive(e)}catch(I){this.onerror?.(I instanceof Error?I:new Error(String(I)))}})}async close(){this.closed||(this.closed=!0,this.onclose?.())}};var u7=class{createTransport(e){switch(e.type){case"stdio":{let I=new i7({command:e.command,args:e.args,env:e.env,stderr:e.stderr?"pipe":void 0,cwd:e.cwd});return I.stderr?.pipe(e.stderr),I}case"http":return new h7(new URL(e.url),{requestInit:{headers:e.headers||{}}});case"sse":return new o7(new URL(e.url),{requestInit:{headers:e.headers||{}}});case"memory":return new p7(e.server);default:throw new Error(`Unsupported transport type: ${e.type}`)}}};o();var qB="blackbird-mcp-server",tv="github-mcp-server",AWe="playwright",_B=[qB];function lv(t){return t.type===void 0||t.type.toLowerCase()==="local"||t.type.toLowerCase()==="stdio"}function Z7(t){return t.type?.toLowerCase()==="http"}function W7(t){return t.type?.toLowerCase()==="sse"}function $B(t){return t.type?.toLowerCase()==="memory"}var QWe=class extends sIt{constructor(I,l){super({decodeStrings:!1});this.serverName=I;this.logger=l}_write(I,l,n){try{let c=I.toString();this.logger.log(`[mcp server ${this.serverName} stderr] ${c}`),n()}catch(c){n(c instanceof Error?c:new Error(String(c)))}}},N7=class{constructor(e,I=new l7,l=new u7,n="indirect"){this.logger=e;this.clientFactory=I;this.transportFactory=l;this.envValueMode=n}clients={};transports={};async startLocalMcpClient(e,I,l,n,c){this.logger.log(`Starting MCP client for ${e} with command: ${l} and args: ${n}`);let r=new QWe(e,this.logger),s={type:"stdio",command:l,args:n,env:{...I,PATH:process.env.PATH},stderr:r,cwd:c},a=this.transportFactory.createTransport(s);await this.setupAndConnectClient(e,a)}async startHttpMcpClient(e,I){this.logger.log(`Starting remote MCP client for ${e} with url: ${I.url}`);let l={type:"http",url:I.url,headers:I.headers},n=this.transportFactory.createTransport(l);await this.setupAndConnectClient(e,n)}async startSseMcpClient(e,I){this.logger.log(`Starting remote MCP client for ${e} with url: ${I.url}`);let l={type:"sse",url:I.url,headers:I.headers},n=this.transportFactory.createTransport(l);await this.setupAndConnectClient(e,n)}async startInMemoryMcpClient(e,I){this.logger.log(`Starting in-memory MCP client for ${e}`);let l={type:"memory",server:I},n=this.transportFactory.createTransport(l);await this.setupAndConnectClient(e,n)}async setupAndConnectClient(e,I){this.transports[e]=I,I.onclose=()=>{this.logger.log(`MCP transport for ${e} closed`),delete this.transports[e]},this.logger.log(`Creating MCP client for ${e}...`);let l=this.clientFactory.createClient({name:"github-copilot-developer",version:"1.0.0"},{capabilities:{experimental:void 0,roots:void 0,sampling:void 0}}),n=Date.now();this.logger.log(`Connecting MCP client for ${e}...`),await l.connect(I),l.onclose=()=>{this.logger.log(`MCP client for ${e} closed`),delete this.clients[e]},l.onerror=c=>{this.logger.error(`MCP client for ${e} errored ${c}`)},this.logger.log(`MCP client for ${e} connected, took ${Date.now()-n}ms`),this.clients[e]=l}async getTools(e,I){let l={};for(let[n,c]of Object.entries(this.clients)){let r=[];try{this.logger.log(`Fetching tools from client: ${n}`);let s=await c.listTools(),a=e?.mcpServers[n].tools,G=e?.mcpServers[n].filterMapping;for(let i of s.tools){if(i.name==="get_copilot_space")continue;if(!(a?.includes("*")||a?.includes(i.name))){this.logger.log(`Tool ${i.name} is not in the allowed list for client: ${n}`);continue}let m=qq(n,i.name),h=`${n}-${i.name}`,p;typeof G=="string"?p=Jhe(G):p=Jhe(G?.[i.name]??"hidden_characters"),l[`${n}/${i.name}`]={name:h,namespacedName:`${n}/${i.name}`,title:i.title??i.annotations?.title??i.name,description:i.description??h,input_schema:i.inputSchema,readOnly:i.annotations?.readOnlyHint,safeForTelemetry:{name:!!(e?.mcpServers[n].isDefaultServer||m),inputsNames:!!e?.mcpServers[n].isDefaultServer},filterMode:p},r.push(i.name),this.logger.log(`Tool ${i.name} added to tools list for client: ${n}`)}this.logger.log(`Successfully retrieved ${r.length} tools from client: ${n}`);let d=c.getServerVersion();await this.logServerSuccessWithTools(n,r,d,I)}catch(s){this.logger.error(`Failed to get tools from client: ${n} ${s}`)}}return this.logger.log(`All tools retrieved: ${JSON.stringify(l,null,2)}`),l}async logServerSuccessWithTools(e,I,l,n){if(!_B.includes(e)&&n)try{let c=I.map(a=>`- ${a}`).join(`
1411
1411
  `),s=`MCP server started successfully${l?` (version ${l.version})`:""} with ${I.length} ${I.length===1?"tool":"tools"} - for the full output, see the verbose logs
1412
1412
 
1413
- ${c}`;await n.createOrUpdateMCPStartupToolCall({serverName:e,content:s}),this.logger.log(`Updated session log for ${e} with ${I.length} tools`)}catch(c){this.logger.error(`Failed to update session log for ${e}: ${c}`)}}};o();var wWe={mcpServers:{}},Y7=class{constructor(e,I,l){this.logger=e;this.registry=I;this.remoteEnabled=l?.remoteEnabled??!1,this.mcp3pEnabled=l?.mcp3pEnabled??!1,this.blackbirdMetisIndexEnabled=l?.blackbirdMetisIndexEnabled??!1,this.sessionClient=l?.sessionClient,this.mcpEnvConfig=void 0,this.envValueMode=l?.envValueMode??this.registry.envValueMode}remoteEnabled;mcp3pEnabled;blackbirdMetisIndexEnabled;mcpEnvConfig;sessionClient;envValueMode;ReadMcpConfigFromEnv(e){this.mcpEnvConfig=process.env.GITHUB_COPILOT_MCP_JSON,this.mcp3pEnabled=process.env.GITHUB_COPILOT_3P_MCP_ENABLED==="true",this.remoteEnabled=process.env.GITHUB_COPILOT_REMOTE_MCP_ENABLED==="true",this.blackbirdMetisIndexEnabled=process.env.BLACKBIRD_METIS_INDEX_ENABLED==="true";let I=this.validateEnvConfig();return process.env.GITHUB_COPILOT_CLI_MODE==="true"?this.logger.log("CLI mode detected - skipping default MCP servers"):(this.logger.log("Adding default MCP servers to configuration"),this.configureBlackbirdMcp(I,e),this.configureGitHubMcp(I,e),this.configurePlaywrightMcp(I)),I}validateEnvConfig(){if(!this.mcp3pEnabled)return this.logger.log("User-provided MCPs are disabled"),wWe;if(this.logger.log("User-provided MCPs are enabled, checking for environment variable"),!this.mcpEnvConfig)return this.logger.log("No user-provided MCP servers found"),wWe;try{let e=JSON.parse(this.mcpEnvConfig);if(!e.mcpServers)throw new Error("User-provided config had incorrect format. Missing 'mcpServers' property.");for(let I in e.mcpServers)e.mcpServers[I].isDefaultServer=!1;return e}catch(e){return this.logger.error(`Warning: User-provided MCP servers were defined but invalid: ${e}`),wWe}}configureGitHubMcp(e,I){this.remoteEnabled?this.configureRemoteGitHubMcp(e,I):this.configureLocalGitHubMcp(e)}configureRemoteGitHubMcp(e,I){this.logger.log("Using default remote GitHub MCP server configuration");let l="repos,issues,users,pull_requests,code_security,secret_protection,actions,web_search";process.env.COPILOT_MCP_COPILOT_SPACES_ENABLED==="true"&&(this.logger.log("Enabling Copilot Spaces in GitHub MCP server configuration"),l=l+",copilot_spaces");let n={Authorization:"Bearer "+process.env.GITHUB_PERSONAL_ACCESS_TOKEN,"X-MCP-Toolsets":l,"X-MCP-Host":"github-coding-agent","X-Initiator":"agent"};I&&I.api?.copilot?.integrationId&&(n["Copilot-Integration-Id"]=I.api.copilot.integrationId),process.env.GITHUB_COPILOT_INTERACTION_ID&&(n["X-Interaction-Id"]=process.env.GITHUB_COPILOT_INTERACTION_ID);let c={type:"http",url:this.getCapiMcpUrl(),headers:n,tools:["*"],isDefaultServer:!0,filterMapping:{get_issue:"markdown",get_issue_comments:"markdown",get_pull_request:"markdown",get_pull_request_comments:"markdown",get_pull_request_reviews:"markdown"}};e.mcpServers[tv]=c}configureLocalGitHubMcp(e){if(e.mcpServers[tv]){this.logger.log("Using user-provided GitHub MCP server configuration");let I=e.mcpServers[tv]??{};lv(I)&&!I.command&&(e.mcpServers[tv]={...I,command:"./copilot-developer-action-main/github-mcp-server/github-mcp-server",isDefaultServer:!0},this.logger.log("Added default command to user-provided GitHub MCP server configuration"))}else{this.logger.log("Using default local GitHub MCP server configuration");let I={command:"./copilot-developer-action-main/github-mcp-server/github-mcp-server",args:["stdio","--read-only"],env:{GITHUB_PERSONAL_ACCESS_TOKEN:"GITHUB_PERSONAL_ACCESS_TOKEN",GITHUB_HOST:"GITHUB_SERVER_URL"},tools:["*"],isDefaultServer:!0};e.mcpServers[tv]=I}}configurePlaywrightMcp(e){if(!e.mcpServers[AWe]){if((process.env.COPILOT_FEATURE_FLAGS??"").split(",").map(l=>l.trim()).includes("copilot_swe_agent_playwright_use_firewall")){this.logger.log("Playwright MCP server is configured to use the firewall, skipping launch.");return}this.logger.log("Enabling Playwright MCP server");let I={command:"npx",args:[...zpe,"--allowed-origins","localhost;localhost:*;127.0.0.1;127.0.0.1:*"],tools:["*"],isDefaultServer:!0};e.mcpServers[AWe]=I}}configureBlackbirdMcp(e,I){this.remoteEnabled?this.configureRemoteBlackbirdMcp(e):this.blackbirdMetisIndexEnabled?this.configureLocalMetisBlackbirdMCP(e,I):this.configureLocalBlackbirdMcp(e)}configureLocalMetisBlackbirdMCP(e,I){this.logger.log("Using local Metis Blackbird MCP server configuration"),this.logger.log(`Using blackbird mode: ${I.blackbird?.mode}`);let l=process.env.AGENT_DIR||"/agent";this.logger.log(`Using agent directory: ${l}`);let n=[];I.blackbird?.mode==="tool"&&(n=["*"]),this.logger.log(`Using blackbird Metis server: ${I.blackbird?.mode}`);let c={command:`${l}/blackbird/mcp`,args:["serve","--index",`${l}/blackbird/metis`],env:{GITHUB_PERSONAL_ACCESS_TOKEN:"GITHUB_PERSONAL_ACCESS_TOKEN",COPILOT_API_HMAC_KEY:"CAPI_HMAC_KEY",MODEL_BASED_RETRIEVAL_TOKEN:"BLACKBIRD_AUTH_MODEL_BASED_RETRIEVAL_TOKEN",METIS_API_KEY:"BLACKBIRD_AUTH_METIS_API_KEY"},tools:n,isDefaultServer:!0};e.mcpServers[qB]=c}configureLocalBlackbirdMcp(e){this.logger.log("Using local Blackbird MCP server configuration"),this.logger.log(`Using blackbird mode: ${process.env.BLACKBIRD_MODE}`);let I=[];process.env.BLACKBIRD_MODE==="tool"&&(I=["*"]);let l={command:"./copilot-developer-action-main/blackbird-mcp-server/blackbird-mcp-server",args:["stdio"],env:{GITHUB_PERSONAL_ACCESS_TOKEN:"GITHUB_PERSONAL_ACCESS_TOKEN",CAPI_HOST:"COPILOT_API_URL"},tools:I,isDefaultServer:!0};e.mcpServers[qB]=l}configureRemoteBlackbirdMcp(e){this.logger.log("Using remote Blackbird MCP server configuration"),this.logger.log(`Using blackbird mode: ${process.env.BLACKBIRD_MODE}`);let I=[];process.env.BLACKBIRD_MODE==="tool"&&(I=["*"]);let l={Authorization:"Bearer "+process.env.GITHUB_PERSONAL_ACCESS_TOKEN,"X-MCP-Toolsets":"search_agent","X-MCP-Host":"github-coding-agent"};process.env.GITHUB_COPILOT_INTERACTION_ID&&(l["X-Interaction-Id"]=process.env.GITHUB_COPILOT_INTERACTION_ID);let n={type:"http",url:this.getCapiMcpUrl(),headers:l,tools:I,isDefaultServer:!0};e.mcpServers[qB]=n}getCapiMcpUrl(){return process.env.COPILOT_API_URL?new URL("/mcp/readonly",process.env.COPILOT_API_URL).toString():"https://api.githubcopilot.com/mcp/readonly"}isValidServerType(e){return lv(e)||Z7(e)||W7(e)||$B(e)}isValidLocalServerConfig(e){return e.command!==void 0&&e.command.trim()!==""&&Array.isArray(e.args)}isValidRemoteServerConfig(e){return e.url!==void 0&&e.url.trim()!==""}isValidInMemoryServerConfig(e){return e.serverInstance!==void 0&&typeof e.serverInstance=="object"}validateServerConfig(e,I){return this.remoteEnabled&&!this.isValidServerType(I)?(this.logger.error(`Unsupported server type "${I.type}" for server "${e}". Only "Local", "STDIO", "HTTP", "SSE", or "Memory" are supported.`),!1):!this.remoteEnabled&&!lv(I)&&!$B(I)?(this.logger.error(`Unsupported server type "${I.type}" for server "${e}". Only "Local", "STDIO", or "Memory" are supported.`),!1):I.tools?lv(I)&&!this.isValidLocalServerConfig(I)?(this.logger.error(`Invalid local server configuration for "${e}". Please ensure 'command' and 'args' are provided.`),!1):(Z7(I)||W7(I))&&!this.isValidRemoteServerConfig(I)?(this.logger.error(`Invalid remote server configuration for "${e}". Please ensure 'url' is provided.`),!1):$B(I)&&!this.isValidInMemoryServerConfig(I)?(this.logger.error(`Invalid in-memory server configuration for "${e}". Please ensure 'serverInstance' is provided and is an instance of MCPServer.`),!1):!0:(this.logger.error(`No tools specified for server "${e}". Please provide a list of tools or "*" to include all tools.`),!1)}async processHttpServer(e,I){try{let l=this.resolveHeaders(I.headers,process.env),n={...I,headers:l};await this.registry.startHttpMcpClient(e,n),this.logger.log(`Started MCP client for remote server ${e}`)}catch(l){throw this.logger.error(`Failed to start MCP client for remote server ${e}: ${l}`),l}}async processSseServer(e,I){try{let l=this.resolveRemoteServerConfig(I);await this.registry.startSseMcpClient(e,l),this.logger.log(`Started MCP client for remote server ${e}`)}catch(l){throw this.logger.error(`Failed to start MCP client for remote server ${e}: ${l}`),l}}resolveRemoteServerConfig(e){return e.url=this.resolveString(e.url,process.env),e.headers=this.resolveHeaders(e.headers,process.env),{...e,url:e.url,headers:e.headers}}async processInMemoryServer(e,I){try{await this.registry.startInMemoryMcpClient(e,I.serverInstance),this.logger.log(`Started in-memory MCP client for ${e}`)}catch(l){throw this.logger.error(`Failed to start in-memory MCP client for ${e}: ${l}`),l}}async processLocalServer(e,I){let l={...I};if(I.command==="python")try{l=await this.convertPythonToPipx(l)}catch(r){this.logger.error(`Failed to handle Python module for ${e}: ${r}`)}let n=this.buildEnvironment(l),c=this.resolveLocalServerConfig(l,n);this.logger.log(`Starting MCP client for ${e} with command: ${c.command} and args: ${c.args}`),c.cwd&&this.logger.log(`cwd: ${c.cwd}`);try{await this.registry.startLocalMcpClient(e,n,c.command,c.args,c.cwd),this.logger.log(`Started MCP client for ${e}`)}catch(r){throw this.logger.error(`Failed to start MCP client for ${e}: ${r}`),r}}convertPythonToPipx(e){if(!e||!e.args||e.args.length===0)return e;let I=e.args,l=I.indexOf("-m");if(l===-1||l===I.length-1)throw new Error("Python command with -m flag must specify a module");let n=I[l+1];this.logger.log(`Converting Python module: ${n} to pipx command`);let c=["run",n];for(let r=l+2;r<I.length;r++)c.push(I[r]);for(let r=0;r<l;r++)c.push(I[r]);return{...e,command:"pipx",args:c}}buildEnvironment(e){let I={};if(e.env)if(this.envValueMode==="direct")for(let[l,n]of Object.entries(e.env))I[l]=this.resolveString(n,process.env);else for(let[l,n]of Object.entries(e.env)){let c=n.trim(),r=c;if(c.includes("$")&&(r=this.resolveString(c,process.env)),r!==c){I[l]=r;continue}process.env[c]!==void 0&&(I[l]=process.env[c])}return I}resolveLocalServerConfig(e,I){let l=this.resolveString(e.command,I),n=this.resolveArray(e.args,I),c;return e.cwd&&(c=this.resolveString(e.cwd,I)),{...e,command:l,args:n,cwd:c}}resolveString(e,I){return I?e.replace(/\$(?:\{([A-Z0-9_]+)(?::-(.*?))?\}|([A-Z0-9_]+))/g,(l,n,c,r)=>{let a=I[n||r];return a!==void 0?a:c!==void 0?c:l}):e}resolveArray(e,I){return e?I?e.map(l=>this.resolveString(l,I)):e:[]}resolveHeaders(e,I){if(!e)return{};if(!I)return e;let l={};for(let[n,c]of Object.entries(e)){let r=this.resolveArray([c],I);l[n]=r[0]}return l}async processServers(e){if(!e)throw new Error("No servers to process");let I=Object.entries(e.mcpServers).map(([l,n])=>this.processServer(l,n));await Promise.all(I)}async processServer(e,I){if(!this.validateServerConfig(e,I)){this.logger.error(`Skipping server "${e}" due to invalid configuration.`);return}_B.includes(e)||await this.sessionClient?.createOrUpdateMCPStartupToolCall({serverName:e});try{lv(I)?await this.processLocalServer(e,I):Z7(I)&&this.remoteEnabled?await this.processHttpServer(e,I):W7(I)&&this.remoteEnabled?await this.processSseServer(e,I):$B(I)&&await this.processInMemoryServer(e,I)}catch(l){_B.includes(e)||await this.logServerFailure(e,l)}}async logServerFailure(e,I){if(this.sessionClient)try{await this.sessionClient.createOrUpdateMCPStartupToolCall({serverName:e,content:`<error>MCP server failed to start: ${I.message} - for the full output, see the verbose logs</error>`})}catch(l){this.logger.error(`Failed to log failure for MCP Server '${e}': '${l}'`)}}};var V7=class{constructor(e,I,l,n="indirect"){this.logger=e;let c;if(typeof I=="string"){if(c=JSON.parse(I),typeof c!="object")throw new Error("Invalid MCP configuration: must be an object");if(c===null||!("mcpServers"in c)||typeof c.mcpServers!="object")throw new Error("Invalid MCP configuration: missing or invalid mcpServers property");this.config=c}else this.config=I;this.disabledServers=new Set(l||[]),this.registry=new N7(this.logger,void 0,void 0,n),this.processor=new Y7(this.logger,this.registry,{mcp3pEnabled:!0,remoteEnabled:!0})}registry;processor;config;startServersPromise=null;transport=null;disabledServers;async startServers(){return this.startServersPromise||(this.startServersPromise=this.processServersWithExtensions()),this.startServersPromise}async injectDefaultServers(e){}async processServersWithExtensions(){await this.injectDefaultServers(this.config);let e;if(this.disabledServers.size>0){let I={};for(let[l,n]of Object.entries(this.config.mcpServers))this.disabledServers.has(l)?this.logger.log(`Skipping disabled MCP server: ${l}`):I[l]=n;e={...this.config,mcpServers:I}}else e=this.config;return this.processor.processServers(e)}async stopServers(){for(let[e,I]of Object.entries(this.registry.transports))try{await I.close()}catch(l){this.logger.error(`Error closing transport for ${e}: ${l}`)}this.startServersPromise=null,this.transport=null}async getTools(e,I,l){await this.startServers(),this.transport=this.transport??new Dx(e,I,!0);let n=[];for(let c of Object.keys(this.registry.clients)){let r=await this.transport.loadTools({mcpClient:this.registry.clients[c],clientName:c,tools:this.config.mcpServers[c]?.tools||["*"],filterMapping:this.config.mcpServers[c]?.filterMapping||"hidden_characters"},l);n.push(...r)}return n}getConfig(){return this.config}getClients(){return this.registry.clients}async startServer(e,I){await this.startServers(),this.config.mcpServers[e]=I,await this.processor.processServer(e,I),this.transport=null}async stopServer(e){let I=this.registry.transports[e];if(I)try{await I.close(),delete this.registry.transports[e]}catch(l){this.logger.error(`Error closing transport for ${e}: ${l}`)}this.registry.clients[e]&&delete this.registry.clients[e],this.transport=null}async restartServer(e,I){this.isServerRunning(e)&&await this.stopServer(e),delete this.config.mcpServers[e],await this.startServer(e,I)}isServerRunning(e){return e in this.registry.transports&&e in this.registry.clients}isServerDisabled(e){return this.disabledServers.has(e)}async disableServer(e){if(this.disabledServers.has(e)){this.logger.log(`Server ${e} is already disabled`);return}this.disabledServers.add(e),this.logger.log(`Disabled server ${e} for this session`),this.isServerRunning(e)&&await this.stopServer(e),this.transport=null}async enableServer(e){if(!this.disabledServers.has(e)){this.logger.log(`Server ${e} is not disabled`);return}this.disabledServers.delete(e),this.logger.log(`Enabled server ${e} for this session`);let I=this.getServerConfig(e);I?await this.startServer(e,I):await this.startBuiltInServer(e),this.transport=null}async startBuiltInServer(e){}getServerConfig(e){return this.config.mcpServers[e]}};o();var Z_e=Ll(u_e(),1);async function elt(t={}){let e=await CNe();return ENe((0,Z_e.default)({},e,t))}async function W_e(t={}){if(Nz())throw new Error("Settings have already been initialized");return elt(t)}o();async function _V(t,e,I){if(!t||t.length===0)return;let l=!1,n={};for(let c of t)try{let r=await c(e);r&&(l=!0,n={...n,...r})}catch(r){I.error(`Hook execution failed: ${r}`)}return l?n:void 0}o();o();import{promises as Ilt}from"fs";import N_e from"path";var tlt=3*1024*1024;function Y_e(t){let e=N_e.extname(t).toLowerCase();return[".png",".jpg",".jpeg",".gif",".webp"].includes(e)}function llt(t){switch(N_e.extname(t).toLowerCase()){case".png":return"image/png";case".jpg":case".jpeg":return"image/jpeg";case".gif":return"image/gif";case".webp":return"image/webp";default:return null}}async function nlt(t,e){e.debug(`Processing local image file: ${t}`);let I=await Ilt.readFile(t),l=llt(t);if(!l)throw new Error(`Unsupported image format: ${t}`);let n=new jx,c=await Kq(e,n,tlt,Ox,l,I);if(!c)throw new Error(`Image too large or couldn't be processed: ${t}`);let r=c.toString("base64");return`data:${l};base64,${r}`}async function clt(t,e){let I=es();try{let l=await vce({command:"view",path:t,view_range:void 0},{properties:{command:"view",resolvedPathAgainstCwd:"false",options:"{}",inputs:"[]"},metrics:{responseTokenLimit:void 0,resultLength:0,resultForLlmLength:0},restrictedProperties:{}},e);return{id:I,name:"view",arguments:{path:t},result:l.textResultForLlm||""}}catch(l){return{id:I,name:"view",arguments:{path:t},result:`Error reading ${t}: ${l}`}}}async function V_e(t,e){let I=[],l=t.filter(c=>!Y_e(c.path));if(l.length===0)return I;let n=[];for(let c of l)try{let r=await clt(c.path,e);n.push(r)}catch{}if(n.length>0){let c=n.map(r=>({id:r.id,type:"function",function:{name:r.name,arguments:JSON.stringify(r.arguments)}}));I.push({role:"assistant",content:"I need to read the content of those paths to answer this request.",tool_calls:c}),I.push(...n.map(r=>({role:"tool",tool_call_id:r.id,content:r.result})))}return I}async function R_e(t,e){let I=t.filter(n=>Y_e(n.path));return(await Promise.all(I.map(async n=>{try{return{type:"image_url",image_url:{url:await nlt(n.path,e)}}}catch(c){e.error(`Failed to process image ${n.path}: ${c instanceof Error?c.message:String(c)}`);return}}))).filter(n=>n!==void 0)}var gp=class{sessionId;startTime;modifiedTime;events=[];_chatMessages=[];_selectedModel;logger;eventCallbacks=[];eventProcessingQueue=Promise.resolve();constructor({sessionId:e,startTime:I,modifiedTime:l,logger:n}={}){this.sessionId=e||es(),this.startTime=I||new Date,this.modifiedTime=l||this.startTime,this.logger=n||new Ri}get messageCount(){let e=this.events.find(l=>l.type==="session.import_legacy"),I=0;return e&&(I=(e.data.legacySession?.chatMessages||[]).filter(c=>c.role==="user"||c.role==="assistant").length),this.logger.debug(`Imported message count: ${I}`),this.events.filter(l=>l.type==="user.message"||l.type==="assistant.message").length+I}get summary(){let e=this.events.find(c=>c.type==="session.import_legacy"||c.type==="user.message"),I;if(e?.type==="session.import_legacy"){let c=e.data.legacySession.chatMessages.find(r=>r.role==="user");c?.content&&(typeof c.content=="string"?I=c.content:I=c.content.find(r=>r.type==="text")?.text)}else e?.type==="user.message"&&(I=e.data.content);if(!I)return;let l=I.lastIndexOf("<reminder>");l!==-1&&(I=I.substring(0,l).trim());let n=I.replace(/\s+/g," ").trim();return n.length>75&&(n=n.substring(0,55).trim()+"..."),n=n.split("").filter(c=>{let r=c.charCodeAt(0);return r>=32&&r!==127}).join(""),n}static async fromEvents({events:e,logger:I}){if(e.length===0)throw new Error("Cannot create session from empty events array");let l=e[0];if(l.type!=="session.start")throw new Error("First event must be session.start");let n=new this({sessionId:l.data.sessionId,startTime:new Date(l.data.startTime),logger:I||new Ri});n._selectedModel=l.data.selectedModel,n.events.push(l);for(let c=1;c<e.length;c++){let r=e[c];n.events.push(r),await n.processEventForState(r)}return n}addEvent(e){let I=e.id||es(),l=e.timestamp||new Date().toISOString(),n=e.parentId!==void 0?e.parentId:this.getLastEventId(),c={...e,id:I,timestamp:l,parentId:n};return this.events.push(c),this.enqueueEventProcessing(()=>this.processEventForState(c).catch(r=>{this.logger.error(`Error processing event ${c.type} (${c.id}): ${r instanceof Error?r.message:String(r)}`)})).catch(r=>{this.logger.error(`Error processing event queue ${r instanceof Error?r.message:String(r)}`)}),this.notifyEventCallbacks(c),c}getEvents(){return this.events}onEvent(e){return this.eventCallbacks.push(e),()=>{let I=this.eventCallbacks.indexOf(e);I>-1&&this.eventCallbacks.splice(I,1)}}async getChatMessages(){return this.enqueueEventProcessing(()=>this._chatMessages)}async getChatContextMessages(){return(await this.getChatMessages()).filter(I=>I.role!=="system")}async getSystemContextMessages(){return(await this.getChatMessages()).filter(I=>I.role==="system")}async getSelectedModel(){return this.enqueueEventProcessing(()=>this._selectedModel)}setSelectedModel(e){let I=this._selectedModel;this._selectedModel=e,this.addEvent({type:"session.model_change",data:{previousModel:I,newModel:e}})}getLastEventId(){return this.events.length===0?null:this.events[this.events.length-1].id}enqueueEventProcessing(e){let I=this.eventProcessingQueue.then(()=>e());return this.eventProcessingQueue=I,I}async processEventForState(e){switch(e.type){case"session.start":e.data.selectedModel&&(this._selectedModel=e.data.selectedModel);break;case"session.model_change":this._selectedModel=e.data.newModel;break;case"user.message":{let I=[],l=[];if(e.data.attachments&&e.data.attachments.length>0){let n=await R_e(e.data.attachments,this.logger);I.push(...n);let c=await V_e(e.data.attachments,this.logger);l.push(...c)}I.length>0?this._chatMessages.push({role:"user",content:[{type:"text",text:e.data.content},...I]}):this._chatMessages.push({role:"user",content:e.data.content}),l.length>0&&this._chatMessages.push(...l);break}case"assistant.message":{let I={role:"assistant",content:e.data.content||null};e.data.toolRequests&&e.data.toolRequests.length>0&&(I.tool_calls=e.data.toolRequests.map(l=>({id:l.toolCallId,type:"function",function:{name:l.name,arguments:typeof l.arguments=="string"?l.arguments:JSON.stringify(l.arguments)}}))),this._chatMessages.push(I);break}case"tool.execution_complete":{e.data.isUserRequested||this._chatMessages.push({role:"tool",tool_call_id:e.data.toolCallId,content:e.data.success?e.data.result?.content||"":e.data.error?.message||"Tool execution failed"});break}case"system.message":this._chatMessages.push({role:e.data.role,content:e.data.content,...e.data.name&&{name:e.data.name}});break;case"session.import_legacy":this._chatMessages=[...e.data.legacySession.chatMessages],e.data.legacySession.selectedModel&&(this._selectedModel=e.data.legacySession.selectedModel);break;case"abort":case"session.resume":this._chatMessages=rlt(this._chatMessages,this.logger);break;case"session.error":case"session.info":case"assistant.turn_start":case"assistant.turn_end":case"assistant.usage":case"tool.user_requested":case"tool.execution_start":case"tool.execution_partial_result":case"hook.start":case"hook.end":break;default:{let I=e;this.logger.error(`Unknown event type: ${I.type}`);break}}}notifyEventCallbacks(e){for(let I of this.eventCallbacks)try{I(e)}catch(l){this.logger.error(`Error in event callback: ${l instanceof Error?l.message:String(l)}`)}}};function rlt(t,e){if(t.length===0)return t;let I=[],l=new Set,n=!1;for(let s=t.length-1;s>=0;s--){let a=t[s];if(a.role==="assistant"&&(n=!0),a.role==="assistant"&&"tool_calls"in a&&a.tool_calls&&a.tool_calls.length>0)for(let G of a.tool_calls)l.has(G.id)||I.push(G.id);else{if(n)break;a.role==="tool"&&a.tool_call_id&&l.add(a.tool_call_id)}}if(I.length===0)return t;let c="The execution of this tool, or a previous tool was interrupted.";e.info(`Completing ${I.length} orphaned tool calls.`);let r=I.map(s=>({role:"tool",tool_call_id:s,content:c}));return[...t,...r]}var E7=class{static name="Copilot";static description="Base Copilot Agent";options;logger;workingDir;session;constructor(e){this.options=e,this.logger=e.logger||new Ri,this.workingDir=e.workingDirectory||process.cwd(),this.session=e.session||new gp,$pe(this.workingDir).then(I=>{if(I.found)return TDe(I.gitRoot,!0,this.workingDir)}).catch(I=>{this.logger.debug(`Failed to initialize custom instructions cache: ${I}`)})}async*query(e,I=[]){let l=new Map,n=new Map,c;try{if(this.options.mcpServers&&Object.keys(this.options.mcpServers).length>0)try{c=new V7(this.logger,{mcpServers:this.options.mcpServers},this.options.disabledTools),await c.startServers()}catch(He){this.logger.error(`Failed to initialize MCP host: ${He}`)}let s=(await _V(this.options.hooks?.userPromptSubmitted,{timestamp:Date.now(),cwd:this.workingDir,prompt:e},this.logger))?.modifiedPrompt??e;this.session.addEvent({type:"user.message",data:{content:xpe({problemStatement:s,capabilities:{}}),attachments:I}});let G=new iF().setProblemStatement(s).setAgentModel(this.buildAgentModelString()).setGithubRepoName("copilot-sdk-session").setGithubRepoCommit("copilot-sdk-commit").setGithubRepoReadWrite(!1).setCopilotIntegrationId(this.options.integrationId||"copilot-developer-cli").setCopilotHmacKey(this.options.hmacKey).setCopilotToken(this.options.copilotToken).build();HNe();let d=await W_e(G),i=d.service?.agent?.model,b=$q(i),m=b.agent,h=b.model?{model:b.model}:void 0,p=vie(d,this.logger,m,h),Z={location:this.workingDir,timeout:3e4,requireReasoning:!0,toolPartialResultCallback:(He,Re)=>{this.session.addEvent({type:"tool.execution_partial_result",ephemeral:!0,data:{toolCallId:He,partialOutput:Re}})},permissions:this.options.requestPermission?{requestRequired:!0,request:this.options.requestPermission}:{requestRequired:!1},shellConfig:(process.platform==="win32"?_i.powerShell:_i.bash).withScriptSafetyAssessor(async function(He){return{result:"completed",commands:[{identifier:He,readOnly:!1}],possiblePaths:[],hasWriteFileRedirection:!1,canOfferSessionApproval:!1}})},W=await wPe(Z,this.logger),Y=[];if(c)try{Y=await c.getTools(d,this.logger,Z.permissions)}catch(He){this.logger.error(`Failed to get MCP tools: ${He}`)}let F=[...W,...Y].filter(He=>this.options.allowedTools?this.options.allowedTools.includes(He.name):this.options.disabledTools?!this.options.disabledTools.includes(He.name):!0),g=await $pe(this.workingDir),w={...(EPe()["sweagent-capi"]?.["claude-sonnet-4"]??XPe()).supports,reasoning:!0},H=await mPe(g.found?g.gitRoot:"",WBe(),this.workingDir,{},w,Z,F,void 0);this.session.addEvent({type:"system.message",data:{content:H,role:"system"}});let $=(await this.session.getChatMessages()).slice(0,-1),ge={role:"user",content:xpe({customAgentPrompt:void 0,problemStatement:s,capabilities:w})},ye=[...$,ge];await _V(this.options.hooks?.sessionStart,{timestamp:Date.now(),cwd:this.workingDir,source:"new",initialPrompt:e},this.logger);let ve=new Wg(ge,this.logger),Qe=p.getCompletionWithTools(H,ye,F,{failIfInitialInputsTooLong:!1,processors:{preRequest:[ve,new Wg(void 0,this.logger)],onRequestError:[ve]},executeToolsInParallel:!1,abortSignal:this.options.abortController?.signal}),Ne=es();yield this.session.addEvent({type:"assistant.turn_start",data:{turnId:Ne}});for await(let He of Qe){if(this.options.abortController?.signal.aborted){yield this.session.addEvent({type:"abort",data:{reason:"user initiated"}});break}switch(He.kind){case"message":{if(e8(He)){let Re=RPe(He)?await Promise.all(He.message.tool_calls.map(async Fe=>{let At=fw(Fe.function.arguments);l.set(Fe.id,Fe.function.name),n.set(Fe.id,At);let wI=await _V(this.options.hooks?.preToolUse,{timestamp:Date.now(),cwd:this.workingDir,toolName:Fe.function.name,toolArgs:At},this.logger);return{toolCallId:Fe.id,name:Fe.function.name,arguments:wI?.modifiedArgs??At}})):[];yield this.session.addEvent({type:"assistant.message",data:{messageId:es(),content:typeof He.message.content=="string"?He.message.content:"",toolRequests:Re}});for(let Fe of Re)yield this.session.addEvent({type:"tool.execution_start",data:{toolCallId:Fe.toolCallId,toolName:Fe.name,arguments:Fe.arguments}})}else(He.message.role==="system"||He.message.role==="developer")&&(yield this.session.addEvent({type:"system.message",data:{role:He.message.role,content:typeof He.message.content=="string"?He.message.content:JSON.stringify(He.message.content),name:"name"in He.message?He.message.name:void 0}}));break}case"model_call_failure":{let Re=new Error(He.modelCall?.error||"Model call failed");await _V(this.options.hooks?.errorOccurred,{timestamp:Date.now(),cwd:this.workingDir,error:Re,errorContext:"model_call",recoverable:!0},this.logger),yield this.session.addEvent({type:"session.error",data:{errorType:"model_call",message:Re.message,stack:Re.stack}});break}case"tool_execution":{let Fe=(await _V(this.options.hooks?.postToolUse,{timestamp:Date.now(),cwd:this.workingDir,toolName:l.get(He.toolCallId)||"unknown",toolArgs:n.get(He.toolCallId)||{},toolResult:He.toolResult},this.logger))?.modifiedResult??He.toolResult,At=(Fe.resultType==="failure"?Fe.error:void 0)||Fe.sessionLog||Fe.textResultForLlm;yield this.session.addEvent({type:"tool.execution_complete",data:{toolCallId:He.toolCallId,success:Fe.resultType==="success",result:Fe.resultType==="success"?{content:At}:void 0,error:Fe.resultType!=="success"?{message:At,code:Fe.resultType}:void 0}});break}case"response":case"images_removed":case"image_processing":case"history_truncated":case"turn_started":case"turn_ended":case"turn_failed":case"turn_retry":case"model_call_success":this.logger.debug(`Ignoring event of kind: ${He.kind}`);break;default:Xp(He,"Unhandled event type")}}yield this.session.addEvent({type:"assistant.turn_end",data:{turnId:Ne}})}catch(r){await _V(this.options.hooks?.sessionEnd,{timestamp:Date.now(),cwd:this.workingDir,reason:"error",error:r instanceof Error?r:new Error(String(r))},this.logger),yield this.session.addEvent({type:"session.error",data:{errorType:"query",message:r instanceof Error?r.message:String(r),stack:r instanceof Error?r.stack:void 0}})}finally{if(await _V(this.options.hooks?.sessionEnd,{timestamp:Date.now(),cwd:this.workingDir,reason:"complete"},this.logger),c)try{await c.stopServers(),this.logger.log("MCP host stopped successfully")}catch(r){this.logger.error(`Error stopping MCP host: ${r}`)}}}buildAgentModelString(){switch(this.options.modelProvider.type){case"openai":return`openai:${this.options.modelProvider.model}`;case"anthropic":return`anthropic:${this.options.modelProvider.model}`;case"copilot":return`capi:${this.options.modelProvider.model}`;default:throw new Error(`Unsupported provider: ${this.options.modelProvider.type}`)}}applyToolFiltering(e,I,l){let n=e;return I&&I.length>0&&(n=n.filter(c=>I.includes(c.name))),l&&l.length>0&&(n=n.filter(c=>!l.includes(c.name))),n}};var V$e={};Jc(V$e,{CLISessionManager:()=>lNe});o();o();import{unlink as Y$e}from"fs/promises";import{join as brt}from"path";o();var H7=class{sessions;logger;lastAccessedSessionId;constructor({logger:e}={}){this.sessions=new Map,this.logger=e||new Ri}async createSession(){let e=new gp({logger:this.logger});return this.sessions.set(e.sessionId,e),this.lastAccessedSessionId=e.sessionId,e}async getSession(e){let I=this.sessions.get(e);return I&&(this.lastAccessedSessionId=e),I}async getLastSession(){if(this.lastAccessedSessionId){let l=this.sessions.get(this.lastAccessedSessionId);if(l)return l}let e=Array.from(this.sessions.values());if(e.length===0)return;e.sort((l,n)=>n.startTime.getTime()-l.startTime.getTime());let I=e[0];return this.lastAccessedSessionId=I.sessionId,I}async listSessions(){return Array.from(this.sessions.values()).map(e=>({sessionId:e.sessionId,startTime:e.startTime,modifiedTime:e.modifiedTime}))}async saveSession(e){}async deleteSession(e){this.sessions.delete(e.sessionId),this.lastAccessedSessionId===e.sessionId&&(this.lastAccessedSessionId=void 0)}};o();o();o();var p$e=Ll(l$e(),1);o();import{existsSync as q7}from"fs";import{appendFile as $nt,mkdir as ect,readdir as _7,readFile as a$e,stat as $7,writeFile as Ict}from"fs/promises";import{homedir as o$e}from"os";import{dirname as tct,join as uG}from"path";o();o();var Dnt=new Error("timeout while waiting for mutex to become available"),Rmn=new Error("mutex already locked"),Knt=new Error("request for lock canceled"),Pnt=function(t,e,I,l){function n(c){return c instanceof I?c:new I(function(r){r(c)})}return new(I||(I=Promise))(function(c,r){function s(d){try{G(l.next(d))}catch(i){r(i)}}function a(d){try{G(l.throw(d))}catch(i){r(i)}}function G(d){d.done?c(d.value):n(d.value).then(s,a)}G((l=l.apply(t,e||[])).next())})},eNe=class{constructor(e,I=Knt){this._value=e,this._cancelError=I,this._queue=[],this._weightedWaiters=[]}acquire(e=1,I=0){if(e<=0)throw new Error(`invalid weight ${e}: must be positive`);return new Promise((l,n)=>{let c={resolve:l,reject:n,weight:e,priority:I},r=c$e(this._queue,s=>I<=s.priority);r===-1&&e<=this._value?this._dispatchItem(c):this._queue.splice(r+1,0,c)})}runExclusive(e){return Pnt(this,arguments,void 0,function*(I,l=1,n=0){let[c,r]=yield this.acquire(l,n);try{return yield I(c)}finally{r()}})}waitForUnlock(e=1,I=0){if(e<=0)throw new Error(`invalid weight ${e}: must be positive`);return this._couldLockImmediately(e,I)?Promise.resolve():new Promise(l=>{this._weightedWaiters[e-1]||(this._weightedWaiters[e-1]=[]),qnt(this._weightedWaiters[e-1],{resolve:l,priority:I})})}isLocked(){return this._value<=0}getValue(){return this._value}setValue(e){this._value=e,this._dispatchQueue()}release(e=1){if(e<=0)throw new Error(`invalid weight ${e}: must be positive`);this._value+=e,this._dispatchQueue()}cancel(){this._queue.forEach(e=>e.reject(this._cancelError)),this._queue=[]}_dispatchQueue(){for(this._drainUnlockWaiters();this._queue.length>0&&this._queue[0].weight<=this._value;)this._dispatchItem(this._queue.shift()),this._drainUnlockWaiters()}_dispatchItem(e){let I=this._value;this._value-=e.weight,e.resolve([I,this._newReleaser(e.weight)])}_newReleaser(e){let I=!1;return()=>{I||(I=!0,this.release(e))}}_drainUnlockWaiters(){if(this._queue.length===0)for(let e=this._value;e>0;e--){let I=this._weightedWaiters[e-1];I&&(I.forEach(l=>l.resolve()),this._weightedWaiters[e-1]=[])}else{let e=this._queue[0].priority;for(let I=this._value;I>0;I--){let l=this._weightedWaiters[I-1];if(!l)continue;let n=l.findIndex(c=>c.priority<=e);(n===-1?l:l.splice(0,n)).forEach(c=>c.resolve())}}}_couldLockImmediately(e,I){return(this._queue.length===0||this._queue[0].priority<I)&&e<=this._value}};function qnt(t,e){let I=c$e(t,l=>e.priority<=l.priority);t.splice(I+1,0,e)}function c$e(t,e){for(let I=t.length-1;I>=0;I--)if(e(t[I]))return I;return-1}var _nt=function(t,e,I,l){function n(c){return c instanceof I?c:new I(function(r){r(c)})}return new(I||(I=Promise))(function(c,r){function s(d){try{G(l.next(d))}catch(i){r(i)}}function a(d){try{G(l.throw(d))}catch(i){r(i)}}function G(d){d.done?c(d.value):n(d.value).then(s,a)}G((l=l.apply(t,e||[])).next())})},K7=class{constructor(e){this._semaphore=new eNe(1,e)}acquire(){return _nt(this,arguments,void 0,function*(e=0){let[,I]=yield this._semaphore.acquire(1,e);return I})}runExclusive(e,I=0){return this._semaphore.runExclusive(()=>e(),1,I)}isLocked(){return this._semaphore.isLocked()}waitForUnlock(e=0){return this._semaphore.waitForUnlock(1,e)}release(){this._semaphore.isLocked()&&this._semaphore.release()}cancel(){return this._semaphore.cancel()}},n$e=function(t,e,I,l){function n(c){return c instanceof I?c:new I(function(r){r(c)})}return new(I||(I=Promise))(function(c,r){function s(d){try{G(l.next(d))}catch(i){r(i)}}function a(d){try{G(l.throw(d))}catch(i){r(i)}}function G(d){d.done?c(d.value):n(d.value).then(s,a)}G((l=l.apply(t,e||[])).next())})};function r$e(t,e,I=Dnt){return{acquire:(l,n)=>{let c;if(D7(t)?c=l:(c=void 0,n=l),c!==void 0&&c<=0)throw new Error(`invalid weight ${c}: must be positive`);return new Promise((r,s)=>n$e(this,void 0,void 0,function*(){let a=!1,G=setTimeout(()=>{a=!0,s(I)},e);try{let d=yield D7(t)?t.acquire(c,n):t.acquire(n);a?(Array.isArray(d)?d[1]:d)():(clearTimeout(G),r(d))}catch(d){a||(clearTimeout(G),s(d))}}))},runExclusive(l,n,c){return n$e(this,void 0,void 0,function*(){let r=()=>{};try{let s=yield this.acquire(n,c);return Array.isArray(s)?(r=s[1],yield l(s[0])):(r=s,yield l())}finally{r()}})},release(l){t.release(l)},cancel(){return t.cancel()},waitForUnlock:(l,n)=>{let c;if(D7(t)?c=l:(c=void 0,n=l),c!==void 0&&c<=0)throw new Error(`invalid weight ${c}: must be positive`);return new Promise((r,s)=>{let a=setTimeout(()=>s(I),e);(D7(t)?t.waitForUnlock(c,n):t.waitForUnlock(n)).then(()=>{clearTimeout(a),r()})})},isLocked:()=>t.isLocked(),getValue:()=>t.getValue(),setValue:l=>t.setValue(l)}}function D7(t){return t.getValue!==void 0}var P7=class{mutexes=new Map;async runExclusive(e,I,l=5e3){let n=this.mutexes.get(e);n||(n=new K7,n.refCount=0,this.mutexes.set(e,n));let c=n;try{return c.refCount++,await r$e(n,l).runExclusive(I)}finally{--c.refCount===0&&this.mutexes.delete(e)}}};var INe=(I=>(I.DEFAULT="config",I.MCP="mcp",I))(INe||{});function s$e(t){return Object.values(INe).includes(t)}var e_=".copilot",I_=new P7;async function G$e(t){let e=tct(t);try{await ect(e,{recursive:!0,mode:448})}catch{}}async function lct(t,e){if(q7(t))try{let I={},l=await I_.runExclusive(t,()=>a$e(t,"utf8"));return l.trim().startsWith("{")?I=JSON.parse(l):l.split(`
1413
+ ${c}`;await n.createOrUpdateMCPStartupToolCall({serverName:e,content:s}),this.logger.log(`Updated session log for ${e} with ${I.length} tools`)}catch(c){this.logger.error(`Failed to update session log for ${e}: ${c}`)}}};o();var wWe={mcpServers:{}},Y7=class{constructor(e,I,l){this.logger=e;this.registry=I;this.remoteEnabled=l?.remoteEnabled??!1,this.mcp3pEnabled=l?.mcp3pEnabled??!1,this.blackbirdMetisIndexEnabled=l?.blackbirdMetisIndexEnabled??!1,this.sessionClient=l?.sessionClient,this.mcpEnvConfig=void 0,this.envValueMode=l?.envValueMode??this.registry.envValueMode}remoteEnabled;mcp3pEnabled;blackbirdMetisIndexEnabled;mcpEnvConfig;sessionClient;envValueMode;ReadMcpConfigFromEnv(e){this.mcpEnvConfig=process.env.GITHUB_COPILOT_MCP_JSON,this.mcp3pEnabled=process.env.GITHUB_COPILOT_3P_MCP_ENABLED==="true",this.remoteEnabled=process.env.GITHUB_COPILOT_REMOTE_MCP_ENABLED==="true",this.blackbirdMetisIndexEnabled=process.env.BLACKBIRD_METIS_INDEX_ENABLED==="true";let I=this.validateEnvConfig();return process.env.GITHUB_COPILOT_CLI_MODE==="true"?this.logger.log("CLI mode detected - skipping default MCP servers"):(this.logger.log("Adding default MCP servers to configuration"),this.configureBlackbirdMcp(I,e),this.configureGitHubMcp(I,e),this.configurePlaywrightMcp(I)),I}validateEnvConfig(){if(!this.mcp3pEnabled)return this.logger.log("User-provided MCPs are disabled"),wWe;if(this.logger.log("User-provided MCPs are enabled, checking for environment variable"),!this.mcpEnvConfig)return this.logger.log("No user-provided MCP servers found"),wWe;try{let e=JSON.parse(this.mcpEnvConfig);if(!e.mcpServers)throw new Error("User-provided config had incorrect format. Missing 'mcpServers' property.");for(let I in e.mcpServers)e.mcpServers[I].isDefaultServer=!1;return e}catch(e){return this.logger.error(`Warning: User-provided MCP servers were defined but invalid: ${e}`),wWe}}configureGitHubMcp(e,I){this.remoteEnabled?this.configureRemoteGitHubMcp(e,I):this.configureLocalGitHubMcp(e)}configureRemoteGitHubMcp(e,I){this.logger.log("Using default remote GitHub MCP server configuration");let l="repos,issues,users,pull_requests,code_security,secret_protection,actions,web_search";process.env.COPILOT_MCP_COPILOT_SPACES_ENABLED==="true"&&(this.logger.log("Enabling Copilot Spaces in GitHub MCP server configuration"),l=l+",copilot_spaces");let n={Authorization:"Bearer "+process.env.GITHUB_PERSONAL_ACCESS_TOKEN,"X-MCP-Toolsets":l,"X-MCP-Host":"github-coding-agent","X-Initiator":"agent"};I&&I.api?.copilot?.integrationId&&(n["Copilot-Integration-Id"]=I.api.copilot.integrationId),process.env.GITHUB_COPILOT_INTERACTION_ID&&(n["X-Interaction-Id"]=process.env.GITHUB_COPILOT_INTERACTION_ID);let c={type:"http",url:this.getCapiMcpUrl(),headers:n,tools:["*"],isDefaultServer:!0,filterMapping:{get_issue:"markdown",get_issue_comments:"markdown",get_pull_request:"markdown",get_pull_request_comments:"markdown",get_pull_request_reviews:"markdown"}};e.mcpServers[tv]=c}configureLocalGitHubMcp(e){if(e.mcpServers[tv]){this.logger.log("Using user-provided GitHub MCP server configuration");let I=e.mcpServers[tv]??{};lv(I)&&!I.command&&(e.mcpServers[tv]={...I,command:"./copilot-developer-action-main/github-mcp-server/github-mcp-server",isDefaultServer:!0},this.logger.log("Added default command to user-provided GitHub MCP server configuration"))}else{this.logger.log("Using default local GitHub MCP server configuration");let I={command:"./copilot-developer-action-main/github-mcp-server/github-mcp-server",args:["stdio","--read-only"],env:{GITHUB_PERSONAL_ACCESS_TOKEN:"GITHUB_PERSONAL_ACCESS_TOKEN",GITHUB_HOST:"GITHUB_SERVER_URL"},tools:["*"],isDefaultServer:!0};e.mcpServers[tv]=I}}configurePlaywrightMcp(e){if(!e.mcpServers[AWe]){if((process.env.COPILOT_FEATURE_FLAGS??"").split(",").map(l=>l.trim()).includes("copilot_swe_agent_playwright_use_firewall")){this.logger.log("Playwright MCP server is configured to use the firewall, skipping launch.");return}this.logger.log("Enabling Playwright MCP server");let I={command:"npx",args:[...zpe,"--allowed-origins","localhost;localhost:*;127.0.0.1;127.0.0.1:*"],tools:["*"],isDefaultServer:!0};e.mcpServers[AWe]=I}}configureBlackbirdMcp(e,I){this.remoteEnabled?this.configureRemoteBlackbirdMcp(e):this.blackbirdMetisIndexEnabled?this.configureLocalMetisBlackbirdMCP(e,I):this.configureLocalBlackbirdMcp(e)}configureLocalMetisBlackbirdMCP(e,I){this.logger.log("Using local Metis Blackbird MCP server configuration"),this.logger.log(`Using blackbird mode: ${I.blackbird?.mode}`);let l=process.env.AGENT_DIR||"/agent";this.logger.log(`Using agent directory: ${l}`);let n=[];I.blackbird?.mode==="tool"&&(n=["*"]),this.logger.log(`Using blackbird Metis server: ${I.blackbird?.mode}`);let c={command:`${l}/blackbird/mcp`,args:["serve","--index",`${l}/blackbird/metis`],env:{GITHUB_PERSONAL_ACCESS_TOKEN:"GITHUB_PERSONAL_ACCESS_TOKEN",COPILOT_API_HMAC_KEY:"CAPI_HMAC_KEY",MODEL_BASED_RETRIEVAL_TOKEN:"BLACKBIRD_AUTH_MODEL_BASED_RETRIEVAL_TOKEN",METIS_API_KEY:"BLACKBIRD_AUTH_METIS_API_KEY"},tools:n,isDefaultServer:!0};e.mcpServers[qB]=c}configureLocalBlackbirdMcp(e){this.logger.log("Using local Blackbird MCP server configuration"),this.logger.log(`Using blackbird mode: ${process.env.BLACKBIRD_MODE}`);let I=[];process.env.BLACKBIRD_MODE==="tool"&&(I=["*"]);let l={command:"./copilot-developer-action-main/blackbird-mcp-server/blackbird-mcp-server",args:["stdio"],env:{GITHUB_PERSONAL_ACCESS_TOKEN:"GITHUB_PERSONAL_ACCESS_TOKEN",CAPI_HOST:"COPILOT_API_URL"},tools:I,isDefaultServer:!0};e.mcpServers[qB]=l}configureRemoteBlackbirdMcp(e){this.logger.log("Using remote Blackbird MCP server configuration"),this.logger.log(`Using blackbird mode: ${process.env.BLACKBIRD_MODE}`);let I=[];process.env.BLACKBIRD_MODE==="tool"&&(I=["*"]);let l={Authorization:"Bearer "+process.env.GITHUB_PERSONAL_ACCESS_TOKEN,"X-MCP-Toolsets":"search_agent","X-MCP-Host":"github-coding-agent"};process.env.GITHUB_COPILOT_INTERACTION_ID&&(l["X-Interaction-Id"]=process.env.GITHUB_COPILOT_INTERACTION_ID);let n={type:"http",url:this.getCapiMcpUrl(),headers:l,tools:I,isDefaultServer:!0};e.mcpServers[qB]=n}getCapiMcpUrl(){return process.env.COPILOT_API_URL?new URL("/mcp/readonly",process.env.COPILOT_API_URL).toString():"https://api.githubcopilot.com/mcp/readonly"}isValidServerType(e){return lv(e)||Z7(e)||W7(e)||$B(e)}isValidLocalServerConfig(e){return e.command!==void 0&&e.command.trim()!==""&&Array.isArray(e.args)}isValidRemoteServerConfig(e){return e.url!==void 0&&e.url.trim()!==""}isValidInMemoryServerConfig(e){return e.serverInstance!==void 0&&typeof e.serverInstance=="object"}validateServerConfig(e,I){return this.remoteEnabled&&!this.isValidServerType(I)?(this.logger.error(`Unsupported server type "${I.type}" for server "${e}". Only "Local", "STDIO", "HTTP", "SSE", or "Memory" are supported.`),!1):!this.remoteEnabled&&!lv(I)&&!$B(I)?(this.logger.error(`Unsupported server type "${I.type}" for server "${e}". Only "Local", "STDIO", or "Memory" are supported.`),!1):I.tools?lv(I)&&!this.isValidLocalServerConfig(I)?(this.logger.error(`Invalid local server configuration for "${e}". Please ensure 'command' and 'args' are provided.`),!1):(Z7(I)||W7(I))&&!this.isValidRemoteServerConfig(I)?(this.logger.error(`Invalid remote server configuration for "${e}". Please ensure 'url' is provided.`),!1):$B(I)&&!this.isValidInMemoryServerConfig(I)?(this.logger.error(`Invalid in-memory server configuration for "${e}". Please ensure 'serverInstance' is provided and is an instance of MCPServer.`),!1):!0:(this.logger.error(`No tools specified for server "${e}". Please provide a list of tools or "*" to include all tools.`),!1)}async processHttpServer(e,I){try{let l=this.resolveHeaders(I.headers,process.env),n={...I,headers:l};await this.registry.startHttpMcpClient(e,n),this.logger.log(`Started MCP client for remote server ${e}`)}catch(l){throw this.logger.error(`Failed to start MCP client for remote server ${e}: ${l}`),l}}async processSseServer(e,I){try{let l=this.resolveRemoteServerConfig(I);await this.registry.startSseMcpClient(e,l),this.logger.log(`Started MCP client for remote server ${e}`)}catch(l){throw this.logger.error(`Failed to start MCP client for remote server ${e}: ${l}`),l}}resolveRemoteServerConfig(e){return e.url=this.resolveString(e.url,process.env),e.headers=this.resolveHeaders(e.headers,process.env),{...e,url:e.url,headers:e.headers}}async processInMemoryServer(e,I){try{await this.registry.startInMemoryMcpClient(e,I.serverInstance),this.logger.log(`Started in-memory MCP client for ${e}`)}catch(l){throw this.logger.error(`Failed to start in-memory MCP client for ${e}: ${l}`),l}}async processLocalServer(e,I){let l={...I};if(I.command==="python")try{l=await this.convertPythonToPipx(l)}catch(r){this.logger.error(`Failed to handle Python module for ${e}: ${r}`)}let n=this.buildEnvironment(l),c=this.resolveLocalServerConfig(l,n);this.logger.log(`Starting MCP client for ${e} with command: ${c.command} and args: ${c.args}`),c.cwd&&this.logger.log(`cwd: ${c.cwd}`);try{await this.registry.startLocalMcpClient(e,n,c.command,c.args,c.cwd),this.logger.log(`Started MCP client for ${e}`)}catch(r){throw this.logger.error(`Failed to start MCP client for ${e}: ${r}`),r}}convertPythonToPipx(e){if(!e||!e.args||e.args.length===0)return e;let I=e.args,l=I.indexOf("-m");if(l===-1||l===I.length-1)throw new Error("Python command with -m flag must specify a module");let n=I[l+1];this.logger.log(`Converting Python module: ${n} to pipx command`);let c=["run",n];for(let r=l+2;r<I.length;r++)c.push(I[r]);for(let r=0;r<l;r++)c.push(I[r]);return{...e,command:"pipx",args:c}}buildEnvironment(e){let I={};if(e.env)if(this.envValueMode==="direct")for(let[l,n]of Object.entries(e.env))I[l]=this.resolveString(n,process.env);else for(let[l,n]of Object.entries(e.env)){let c=n.trim(),r=c;if(c.includes("$")&&(r=this.resolveString(c,process.env)),r!==c){I[l]=r;continue}process.env[c]!==void 0&&(I[l]=process.env[c])}return I}resolveLocalServerConfig(e,I){let l=this.resolveString(e.command,I),n=this.resolveArray(e.args,I),c;return e.cwd&&(c=this.resolveString(e.cwd,I)),{...e,command:l,args:n,cwd:c}}resolveString(e,I){return I?e.replace(/\$(?:\{([A-Z0-9_]+)(?::-(.*?))?\}|([A-Z0-9_]+))/g,(l,n,c,r)=>{let a=I[n||r];return a!==void 0?a:c!==void 0?c:l}):e}resolveArray(e,I){return e?I?e.map(l=>this.resolveString(l,I)):e:[]}resolveHeaders(e,I){if(!e)return{};if(!I)return e;let l={};for(let[n,c]of Object.entries(e)){let r=this.resolveArray([c],I);l[n]=r[0]}return l}async processServers(e){if(!e)throw new Error("No servers to process");let I=Object.entries(e.mcpServers).map(([l,n])=>this.processServer(l,n));await Promise.all(I)}async processServer(e,I){if(!this.validateServerConfig(e,I)){this.logger.error(`Skipping server "${e}" due to invalid configuration.`);return}_B.includes(e)||await this.sessionClient?.createOrUpdateMCPStartupToolCall({serverName:e});try{lv(I)?await this.processLocalServer(e,I):Z7(I)&&this.remoteEnabled?await this.processHttpServer(e,I):W7(I)&&this.remoteEnabled?await this.processSseServer(e,I):$B(I)&&await this.processInMemoryServer(e,I)}catch(l){_B.includes(e)||await this.logServerFailure(e,l)}}async logServerFailure(e,I){if(this.sessionClient)try{await this.sessionClient.createOrUpdateMCPStartupToolCall({serverName:e,content:`<error>MCP server failed to start: ${I.message} - for the full output, see the verbose logs</error>`})}catch(l){this.logger.error(`Failed to log failure for MCP Server '${e}': '${l}'`)}}};var V7=class{constructor(e,I,l,n="indirect"){this.logger=e;let c;if(typeof I=="string"){if(c=JSON.parse(I),typeof c!="object")throw new Error("Invalid MCP configuration: must be an object");if(c===null||!("mcpServers"in c)||typeof c.mcpServers!="object")throw new Error("Invalid MCP configuration: missing or invalid mcpServers property");this.config=c}else this.config=I;this.disabledServers=new Set(l||[]),this.registry=new N7(this.logger,void 0,void 0,n),this.processor=new Y7(this.logger,this.registry,{mcp3pEnabled:!0,remoteEnabled:!0})}registry;processor;config;startServersPromise=null;transport=null;disabledServers;async startServers(){return this.startServersPromise||(this.startServersPromise=this.processServersWithExtensions()),this.startServersPromise}async injectDefaultServers(e){}async processServersWithExtensions(){await this.injectDefaultServers(this.config);let e;if(this.disabledServers.size>0){let I={};for(let[l,n]of Object.entries(this.config.mcpServers))this.disabledServers.has(l)?this.logger.log(`Skipping disabled MCP server: ${l}`):I[l]=n;e={...this.config,mcpServers:I}}else e=this.config;return this.processor.processServers(e)}async stopServers(){for(let[e,I]of Object.entries(this.registry.transports))try{await I.close()}catch(l){this.logger.error(`Error closing transport for ${e}: ${l}`)}this.startServersPromise=null,this.transport=null}async getTools(e,I,l){await this.startServers(),this.transport=this.transport??new Dx(e,I,!0);let n=[];for(let c of Object.keys(this.registry.clients)){let r=await this.transport.loadTools({mcpClient:this.registry.clients[c],clientName:c,tools:this.config.mcpServers[c]?.tools||["*"],filterMapping:this.config.mcpServers[c]?.filterMapping||"hidden_characters"},l);n.push(...r)}return n}getConfig(){return this.config}getClients(){return this.registry.clients}async startServer(e,I){await this.startServers(),this.config.mcpServers[e]=I,await this.processor.processServer(e,I),this.transport=null}async stopServer(e){let I=this.registry.transports[e];if(I)try{await I.close(),delete this.registry.transports[e]}catch(l){this.logger.error(`Error closing transport for ${e}: ${l}`)}this.registry.clients[e]&&delete this.registry.clients[e],this.transport=null}async restartServer(e,I){this.isServerRunning(e)&&await this.stopServer(e),delete this.config.mcpServers[e],await this.startServer(e,I)}isServerRunning(e){return e in this.registry.transports&&e in this.registry.clients}isServerDisabled(e){return this.disabledServers.has(e)}async disableServer(e){if(this.disabledServers.has(e)){this.logger.log(`Server ${e} is already disabled`);return}this.disabledServers.add(e),this.logger.log(`Disabled server ${e} for this session`),this.isServerRunning(e)&&await this.stopServer(e),this.transport=null}async enableServer(e){if(!this.disabledServers.has(e)){this.logger.log(`Server ${e} is not disabled`);return}this.disabledServers.delete(e),this.logger.log(`Enabled server ${e} for this session`);let I=this.getServerConfig(e);I?await this.startServer(e,I):await this.startBuiltInServer(e),this.transport=null}async startBuiltInServer(e){}getServerConfig(e){return this.config.mcpServers[e]}};o();var Z_e=Ll(u_e(),1);async function elt(t={}){let e=await CNe();return ENe((0,Z_e.default)({},e,t))}async function W_e(t={}){if(Nz())throw new Error("Settings have already been initialized");return elt(t)}o();async function _V(t,e,I){if(!t||t.length===0)return;let l=!1,n={};for(let c of t)try{let r=await c(e);r&&(l=!0,n={...n,...r})}catch(r){I.error(`Hook execution failed: ${r}`)}return l?n:void 0}o();o();import{promises as Ilt}from"fs";import N_e from"path";var tlt=3*1024*1024;function Y_e(t){let e=N_e.extname(t).toLowerCase();return[".png",".jpg",".jpeg",".gif",".webp"].includes(e)}function llt(t){switch(N_e.extname(t).toLowerCase()){case".png":return"image/png";case".jpg":case".jpeg":return"image/jpeg";case".gif":return"image/gif";case".webp":return"image/webp";default:return null}}async function nlt(t,e){e.debug(`Processing local image file: ${t}`);let I=await Ilt.readFile(t),l=llt(t);if(!l)throw new Error(`Unsupported image format: ${t}`);let n=new jx,c=await Kq(e,n,tlt,Ox,l,I);if(!c)throw new Error(`Image too large or couldn't be processed: ${t}`);let r=c.toString("base64");return`data:${l};base64,${r}`}async function clt(t,e){let I=es();try{let l=await vce({command:"view",path:t,view_range:void 0},{properties:{command:"view",resolvedPathAgainstCwd:"false",options:"{}",inputs:"[]"},metrics:{responseTokenLimit:void 0,resultLength:0,resultForLlmLength:0},restrictedProperties:{}},e);return{id:I,name:"view",arguments:{path:t},result:l.textResultForLlm||""}}catch(l){return{id:I,name:"view",arguments:{path:t},result:`Error reading ${t}: ${l}`}}}async function V_e(t,e){let I=[],l=t.filter(c=>!Y_e(c.path));if(l.length===0)return I;let n=[];for(let c of l)try{let r=await clt(c.path,e);n.push(r)}catch{}if(n.length>0){let c=n.map(r=>({id:r.id,type:"function",function:{name:r.name,arguments:JSON.stringify(r.arguments)}}));I.push({role:"assistant",content:"I need to read the content of those paths to answer this request.",tool_calls:c}),I.push(...n.map(r=>({role:"tool",tool_call_id:r.id,content:r.result})))}return I}async function R_e(t,e){let I=t.filter(n=>Y_e(n.path));return(await Promise.all(I.map(async n=>{try{return{type:"image_url",image_url:{url:await nlt(n.path,e)}}}catch(c){e.error(`Failed to process image ${n.path}: ${c instanceof Error?c.message:String(c)}`);return}}))).filter(n=>n!==void 0)}var gp=class{sessionId;startTime;modifiedTime;events=[];_chatMessages=[];_selectedModel;logger;eventCallbacks=[];eventProcessingQueue=Promise.resolve();constructor({sessionId:e,startTime:I,modifiedTime:l,logger:n}={}){this.sessionId=e||es(),this.startTime=I||new Date,this.modifiedTime=l||this.startTime,this.logger=n||new Ri}get messageCount(){let e=this.events.find(l=>l.type==="session.import_legacy"),I=0;return e&&(I=(e.data.legacySession?.chatMessages||[]).filter(c=>c.role==="user"||c.role==="assistant").length),this.logger.debug(`Imported message count: ${I}`),this.events.filter(l=>l.type==="user.message"||l.type==="assistant.message").length+I}get summary(){let e=this.events.find(c=>c.type==="session.import_legacy"||c.type==="user.message"),I;if(e?.type==="session.import_legacy"){let c=e.data.legacySession.chatMessages.find(r=>r.role==="user");c?.content&&(typeof c.content=="string"?I=c.content:I=c.content.find(r=>r.type==="text")?.text)}else e?.type==="user.message"&&(I=e.data.content);if(!I)return;let l=I.lastIndexOf("<reminder>");l!==-1&&(I=I.substring(0,l).trim());let n=I.replace(/\s+/g," ").trim();return n.length>75&&(n=n.substring(0,55).trim()+"..."),n=n.split("").filter(c=>{let r=c.charCodeAt(0);return r>=32&&r!==127}).join(""),n}static async fromEvents({events:e,logger:I}){if(e.length===0)throw new Error("Cannot create session from empty events array");let l=e[0];if(l.type!=="session.start")throw new Error("First event must be session.start");let n=new this({sessionId:l.data.sessionId,startTime:new Date(l.data.startTime),logger:I||new Ri});n._selectedModel=l.data.selectedModel,n.events.push(l);for(let c=1;c<e.length;c++){let r=e[c];n.events.push(r),await n.processEventForState(r)}return n}addEvent(e){let I=e.id||es(),l=e.timestamp||new Date().toISOString(),n=e.parentId!==void 0?e.parentId:this.getLastEventId(),c={...e,id:I,timestamp:l,parentId:n};return this.events.push(c),this.enqueueEventProcessing(()=>this.processEventForState(c).catch(r=>{this.logger.error(`Error processing event ${c.type} (${c.id}): ${r instanceof Error?r.message:String(r)}`)})).catch(r=>{this.logger.error(`Error processing event queue ${r instanceof Error?r.message:String(r)}`)}),this.notifyEventCallbacks(c),c}getEvents(){return this.events}onEvent(e){return this.eventCallbacks.push(e),()=>{let I=this.eventCallbacks.indexOf(e);I>-1&&this.eventCallbacks.splice(I,1)}}async getChatMessages(){return this.enqueueEventProcessing(()=>this._chatMessages)}async getChatContextMessages(){return(await this.getChatMessages()).filter(I=>I.role!=="system")}async getSystemContextMessages(){return(await this.getChatMessages()).filter(I=>I.role==="system")}async getSelectedModel(){return this.enqueueEventProcessing(()=>this._selectedModel)}setSelectedModel(e){let I=this._selectedModel;this._selectedModel=e,this.addEvent({type:"session.model_change",data:{previousModel:I,newModel:e}})}getLastEventId(){return this.events.length===0?null:this.events[this.events.length-1].id}enqueueEventProcessing(e){let I=this.eventProcessingQueue.then(()=>e());return this.eventProcessingQueue=I,I}async processEventForState(e){switch(e.type){case"session.start":e.data.selectedModel&&(this._selectedModel=e.data.selectedModel);break;case"session.model_change":this._selectedModel=e.data.newModel;break;case"user.message":{let I=[],l=[];if(e.data.attachments&&e.data.attachments.length>0){let n=await R_e(e.data.attachments,this.logger);I.push(...n);let c=await V_e(e.data.attachments,this.logger);l.push(...c)}I.length>0?this._chatMessages.push({role:"user",content:[{type:"text",text:e.data.content},...I]}):this._chatMessages.push({role:"user",content:e.data.content}),l.length>0&&this._chatMessages.push(...l);break}case"assistant.message":{if(e.ephemeral)break;let I={role:"assistant",content:e.data.content||null};e.data.toolRequests&&e.data.toolRequests.length>0&&(I.tool_calls=e.data.toolRequests.map(l=>({id:l.toolCallId,type:"function",function:{name:l.name,arguments:typeof l.arguments=="string"?l.arguments:JSON.stringify(l.arguments)}}))),this._chatMessages.push(I);break}case"tool.execution_complete":{e.data.isUserRequested||this._chatMessages.push({role:"tool",tool_call_id:e.data.toolCallId,content:e.data.success?e.data.result?.content||"":e.data.error?.message||"Tool execution failed"});break}case"system.message":this._chatMessages.push({role:e.data.role,content:e.data.content,...e.data.name&&{name:e.data.name}});break;case"session.import_legacy":this._chatMessages=[...e.data.legacySession.chatMessages],e.data.legacySession.selectedModel&&(this._selectedModel=e.data.legacySession.selectedModel);break;case"abort":case"session.resume":this._chatMessages=rlt(this._chatMessages,this.logger);break;case"session.error":case"session.info":case"assistant.turn_start":case"assistant.turn_end":case"assistant.usage":case"tool.user_requested":case"tool.execution_start":case"tool.execution_partial_result":case"hook.start":case"hook.end":break;default:{let I=e;this.logger.error(`Unknown event type: ${I.type}`);break}}}notifyEventCallbacks(e){for(let I of this.eventCallbacks)try{I(e)}catch(l){this.logger.error(`Error in event callback: ${l instanceof Error?l.message:String(l)}`)}}};function rlt(t,e){if(t.length===0)return t;let I=[],l=new Set,n=!1;for(let s=t.length-1;s>=0;s--){let a=t[s];if(a.role==="assistant"&&(n=!0),a.role==="assistant"&&"tool_calls"in a&&a.tool_calls&&a.tool_calls.length>0)for(let G of a.tool_calls)l.has(G.id)||I.push(G.id);else{if(n)break;a.role==="tool"&&a.tool_call_id&&l.add(a.tool_call_id)}}if(I.length===0)return t;let c="The execution of this tool, or a previous tool was interrupted.";e.info(`Completing ${I.length} orphaned tool calls.`);let r=I.map(s=>({role:"tool",tool_call_id:s,content:c}));return[...t,...r]}var E7=class{static name="Copilot";static description="Base Copilot Agent";options;logger;workingDir;session;constructor(e){this.options=e,this.logger=e.logger||new Ri,this.workingDir=e.workingDirectory||process.cwd(),this.session=e.session||new gp,$pe(this.workingDir).then(I=>{if(I.found)return TDe(I.gitRoot,!0,this.workingDir)}).catch(I=>{this.logger.debug(`Failed to initialize custom instructions cache: ${I}`)})}async*query(e,I=[]){let l=new Map,n=new Map,c;try{if(this.options.mcpServers&&Object.keys(this.options.mcpServers).length>0)try{c=new V7(this.logger,{mcpServers:this.options.mcpServers},this.options.disabledTools),await c.startServers()}catch(He){this.logger.error(`Failed to initialize MCP host: ${He}`)}let s=(await _V(this.options.hooks?.userPromptSubmitted,{timestamp:Date.now(),cwd:this.workingDir,prompt:e},this.logger))?.modifiedPrompt??e;this.session.addEvent({type:"user.message",data:{content:xpe({problemStatement:s,capabilities:{}}),attachments:I}});let G=new iF().setProblemStatement(s).setAgentModel(this.buildAgentModelString()).setGithubRepoName("copilot-sdk-session").setGithubRepoCommit("copilot-sdk-commit").setGithubRepoReadWrite(!1).setCopilotIntegrationId(this.options.integrationId||"copilot-developer-cli").setCopilotHmacKey(this.options.hmacKey).setCopilotToken(this.options.copilotToken).build();HNe();let d=await W_e(G),i=d.service?.agent?.model,b=$q(i),m=b.agent,h=b.model?{model:b.model}:void 0,p=vie(d,this.logger,m,h),Z={location:this.workingDir,timeout:3e4,requireReasoning:!0,toolPartialResultCallback:(He,Re)=>{this.session.addEvent({type:"tool.execution_partial_result",ephemeral:!0,data:{toolCallId:He,partialOutput:Re}})},permissions:this.options.requestPermission?{requestRequired:!0,request:this.options.requestPermission}:{requestRequired:!1},shellConfig:(process.platform==="win32"?_i.powerShell:_i.bash).withScriptSafetyAssessor(async function(He){return{result:"completed",commands:[{identifier:He,readOnly:!1}],possiblePaths:[],hasWriteFileRedirection:!1,canOfferSessionApproval:!1}})},W=await wPe(Z,this.logger),Y=[];if(c)try{Y=await c.getTools(d,this.logger,Z.permissions)}catch(He){this.logger.error(`Failed to get MCP tools: ${He}`)}let F=[...W,...Y].filter(He=>this.options.allowedTools?this.options.allowedTools.includes(He.name):this.options.disabledTools?!this.options.disabledTools.includes(He.name):!0),g=await $pe(this.workingDir),w={...(EPe()["sweagent-capi"]?.["claude-sonnet-4"]??XPe()).supports,reasoning:!0},H=await mPe(g.found?g.gitRoot:"",WBe(),this.workingDir,{},w,Z,F,void 0);this.session.addEvent({type:"system.message",data:{content:H,role:"system"}});let $=(await this.session.getChatMessages()).slice(0,-1),ge={role:"user",content:xpe({customAgentPrompt:void 0,problemStatement:s,capabilities:w})},ye=[...$,ge];await _V(this.options.hooks?.sessionStart,{timestamp:Date.now(),cwd:this.workingDir,source:"new",initialPrompt:e},this.logger);let ve=new Wg(ge,this.logger),Qe=p.getCompletionWithTools(H,ye,F,{failIfInitialInputsTooLong:!1,processors:{preRequest:[ve,new Wg(void 0,this.logger)],onRequestError:[ve]},executeToolsInParallel:!1,abortSignal:this.options.abortController?.signal}),Ne=es();yield this.session.addEvent({type:"assistant.turn_start",data:{turnId:Ne}});for await(let He of Qe){if(this.options.abortController?.signal.aborted){yield this.session.addEvent({type:"abort",data:{reason:"user initiated"}});break}switch(He.kind){case"message":{if(e8(He)){let Re=RPe(He)?await Promise.all(He.message.tool_calls.map(async Fe=>{let At=fw(Fe.function.arguments);l.set(Fe.id,Fe.function.name),n.set(Fe.id,At);let wI=await _V(this.options.hooks?.preToolUse,{timestamp:Date.now(),cwd:this.workingDir,toolName:Fe.function.name,toolArgs:At},this.logger);return{toolCallId:Fe.id,name:Fe.function.name,arguments:wI?.modifiedArgs??At}})):[];yield this.session.addEvent({type:"assistant.message",data:{messageId:es(),content:typeof He.message.content=="string"?He.message.content:"",toolRequests:Re}});for(let Fe of Re)yield this.session.addEvent({type:"tool.execution_start",data:{toolCallId:Fe.toolCallId,toolName:Fe.name,arguments:Fe.arguments}})}else(He.message.role==="system"||He.message.role==="developer")&&(yield this.session.addEvent({type:"system.message",data:{role:He.message.role,content:typeof He.message.content=="string"?He.message.content:JSON.stringify(He.message.content),name:"name"in He.message?He.message.name:void 0}}));break}case"model_call_failure":{let Re=new Error(He.modelCall?.error||"Model call failed");await _V(this.options.hooks?.errorOccurred,{timestamp:Date.now(),cwd:this.workingDir,error:Re,errorContext:"model_call",recoverable:!0},this.logger),yield this.session.addEvent({type:"session.error",data:{errorType:"model_call",message:Re.message,stack:Re.stack}});break}case"tool_execution":{let Fe=(await _V(this.options.hooks?.postToolUse,{timestamp:Date.now(),cwd:this.workingDir,toolName:l.get(He.toolCallId)||"unknown",toolArgs:n.get(He.toolCallId)||{},toolResult:He.toolResult},this.logger))?.modifiedResult??He.toolResult,At=(Fe.resultType==="failure"?Fe.error:void 0)||Fe.sessionLog||Fe.textResultForLlm;yield this.session.addEvent({type:"tool.execution_complete",data:{toolCallId:He.toolCallId,success:Fe.resultType==="success",result:Fe.resultType==="success"?{content:At}:void 0,error:Fe.resultType!=="success"?{message:At,code:Fe.resultType}:void 0}});break}case"response":case"images_removed":case"image_processing":case"history_truncated":case"turn_started":case"turn_ended":case"turn_failed":case"turn_retry":case"model_call_success":this.logger.debug(`Ignoring event of kind: ${He.kind}`);break;default:Xp(He,"Unhandled event type")}}yield this.session.addEvent({type:"assistant.turn_end",data:{turnId:Ne}})}catch(r){await _V(this.options.hooks?.sessionEnd,{timestamp:Date.now(),cwd:this.workingDir,reason:"error",error:r instanceof Error?r:new Error(String(r))},this.logger),yield this.session.addEvent({type:"session.error",data:{errorType:"query",message:r instanceof Error?r.message:String(r),stack:r instanceof Error?r.stack:void 0}})}finally{if(await _V(this.options.hooks?.sessionEnd,{timestamp:Date.now(),cwd:this.workingDir,reason:"complete"},this.logger),c)try{await c.stopServers(),this.logger.log("MCP host stopped successfully")}catch(r){this.logger.error(`Error stopping MCP host: ${r}`)}}}buildAgentModelString(){switch(this.options.modelProvider.type){case"openai":return`openai:${this.options.modelProvider.model}`;case"anthropic":return`anthropic:${this.options.modelProvider.model}`;case"copilot":return`capi:${this.options.modelProvider.model}`;default:throw new Error(`Unsupported provider: ${this.options.modelProvider.type}`)}}applyToolFiltering(e,I,l){let n=e;return I&&I.length>0&&(n=n.filter(c=>I.includes(c.name))),l&&l.length>0&&(n=n.filter(c=>!l.includes(c.name))),n}};var V$e={};Jc(V$e,{CLISessionManager:()=>lNe});o();o();import{unlink as Y$e}from"fs/promises";import{join as brt}from"path";o();var H7=class{sessions;logger;lastAccessedSessionId;constructor({logger:e}={}){this.sessions=new Map,this.logger=e||new Ri}async createSession(){let e=new gp({logger:this.logger});return this.sessions.set(e.sessionId,e),this.lastAccessedSessionId=e.sessionId,e}async getSession(e){let I=this.sessions.get(e);return I&&(this.lastAccessedSessionId=e),I}async getLastSession(){if(this.lastAccessedSessionId){let l=this.sessions.get(this.lastAccessedSessionId);if(l)return l}let e=Array.from(this.sessions.values());if(e.length===0)return;e.sort((l,n)=>n.startTime.getTime()-l.startTime.getTime());let I=e[0];return this.lastAccessedSessionId=I.sessionId,I}async listSessions(){return Array.from(this.sessions.values()).map(e=>({sessionId:e.sessionId,startTime:e.startTime,modifiedTime:e.modifiedTime}))}async saveSession(e){}async deleteSession(e){this.sessions.delete(e.sessionId),this.lastAccessedSessionId===e.sessionId&&(this.lastAccessedSessionId=void 0)}};o();o();o();var p$e=Ll(l$e(),1);o();import{existsSync as q7}from"fs";import{appendFile as $nt,mkdir as ect,readdir as _7,readFile as a$e,stat as $7,writeFile as Ict}from"fs/promises";import{homedir as o$e}from"os";import{dirname as tct,join as uG}from"path";o();o();var Dnt=new Error("timeout while waiting for mutex to become available"),Rmn=new Error("mutex already locked"),Knt=new Error("request for lock canceled"),Pnt=function(t,e,I,l){function n(c){return c instanceof I?c:new I(function(r){r(c)})}return new(I||(I=Promise))(function(c,r){function s(d){try{G(l.next(d))}catch(i){r(i)}}function a(d){try{G(l.throw(d))}catch(i){r(i)}}function G(d){d.done?c(d.value):n(d.value).then(s,a)}G((l=l.apply(t,e||[])).next())})},eNe=class{constructor(e,I=Knt){this._value=e,this._cancelError=I,this._queue=[],this._weightedWaiters=[]}acquire(e=1,I=0){if(e<=0)throw new Error(`invalid weight ${e}: must be positive`);return new Promise((l,n)=>{let c={resolve:l,reject:n,weight:e,priority:I},r=c$e(this._queue,s=>I<=s.priority);r===-1&&e<=this._value?this._dispatchItem(c):this._queue.splice(r+1,0,c)})}runExclusive(e){return Pnt(this,arguments,void 0,function*(I,l=1,n=0){let[c,r]=yield this.acquire(l,n);try{return yield I(c)}finally{r()}})}waitForUnlock(e=1,I=0){if(e<=0)throw new Error(`invalid weight ${e}: must be positive`);return this._couldLockImmediately(e,I)?Promise.resolve():new Promise(l=>{this._weightedWaiters[e-1]||(this._weightedWaiters[e-1]=[]),qnt(this._weightedWaiters[e-1],{resolve:l,priority:I})})}isLocked(){return this._value<=0}getValue(){return this._value}setValue(e){this._value=e,this._dispatchQueue()}release(e=1){if(e<=0)throw new Error(`invalid weight ${e}: must be positive`);this._value+=e,this._dispatchQueue()}cancel(){this._queue.forEach(e=>e.reject(this._cancelError)),this._queue=[]}_dispatchQueue(){for(this._drainUnlockWaiters();this._queue.length>0&&this._queue[0].weight<=this._value;)this._dispatchItem(this._queue.shift()),this._drainUnlockWaiters()}_dispatchItem(e){let I=this._value;this._value-=e.weight,e.resolve([I,this._newReleaser(e.weight)])}_newReleaser(e){let I=!1;return()=>{I||(I=!0,this.release(e))}}_drainUnlockWaiters(){if(this._queue.length===0)for(let e=this._value;e>0;e--){let I=this._weightedWaiters[e-1];I&&(I.forEach(l=>l.resolve()),this._weightedWaiters[e-1]=[])}else{let e=this._queue[0].priority;for(let I=this._value;I>0;I--){let l=this._weightedWaiters[I-1];if(!l)continue;let n=l.findIndex(c=>c.priority<=e);(n===-1?l:l.splice(0,n)).forEach(c=>c.resolve())}}}_couldLockImmediately(e,I){return(this._queue.length===0||this._queue[0].priority<I)&&e<=this._value}};function qnt(t,e){let I=c$e(t,l=>e.priority<=l.priority);t.splice(I+1,0,e)}function c$e(t,e){for(let I=t.length-1;I>=0;I--)if(e(t[I]))return I;return-1}var _nt=function(t,e,I,l){function n(c){return c instanceof I?c:new I(function(r){r(c)})}return new(I||(I=Promise))(function(c,r){function s(d){try{G(l.next(d))}catch(i){r(i)}}function a(d){try{G(l.throw(d))}catch(i){r(i)}}function G(d){d.done?c(d.value):n(d.value).then(s,a)}G((l=l.apply(t,e||[])).next())})},K7=class{constructor(e){this._semaphore=new eNe(1,e)}acquire(){return _nt(this,arguments,void 0,function*(e=0){let[,I]=yield this._semaphore.acquire(1,e);return I})}runExclusive(e,I=0){return this._semaphore.runExclusive(()=>e(),1,I)}isLocked(){return this._semaphore.isLocked()}waitForUnlock(e=0){return this._semaphore.waitForUnlock(1,e)}release(){this._semaphore.isLocked()&&this._semaphore.release()}cancel(){return this._semaphore.cancel()}},n$e=function(t,e,I,l){function n(c){return c instanceof I?c:new I(function(r){r(c)})}return new(I||(I=Promise))(function(c,r){function s(d){try{G(l.next(d))}catch(i){r(i)}}function a(d){try{G(l.throw(d))}catch(i){r(i)}}function G(d){d.done?c(d.value):n(d.value).then(s,a)}G((l=l.apply(t,e||[])).next())})};function r$e(t,e,I=Dnt){return{acquire:(l,n)=>{let c;if(D7(t)?c=l:(c=void 0,n=l),c!==void 0&&c<=0)throw new Error(`invalid weight ${c}: must be positive`);return new Promise((r,s)=>n$e(this,void 0,void 0,function*(){let a=!1,G=setTimeout(()=>{a=!0,s(I)},e);try{let d=yield D7(t)?t.acquire(c,n):t.acquire(n);a?(Array.isArray(d)?d[1]:d)():(clearTimeout(G),r(d))}catch(d){a||(clearTimeout(G),s(d))}}))},runExclusive(l,n,c){return n$e(this,void 0,void 0,function*(){let r=()=>{};try{let s=yield this.acquire(n,c);return Array.isArray(s)?(r=s[1],yield l(s[0])):(r=s,yield l())}finally{r()}})},release(l){t.release(l)},cancel(){return t.cancel()},waitForUnlock:(l,n)=>{let c;if(D7(t)?c=l:(c=void 0,n=l),c!==void 0&&c<=0)throw new Error(`invalid weight ${c}: must be positive`);return new Promise((r,s)=>{let a=setTimeout(()=>s(I),e);(D7(t)?t.waitForUnlock(c,n):t.waitForUnlock(n)).then(()=>{clearTimeout(a),r()})})},isLocked:()=>t.isLocked(),getValue:()=>t.getValue(),setValue:l=>t.setValue(l)}}function D7(t){return t.getValue!==void 0}var P7=class{mutexes=new Map;async runExclusive(e,I,l=5e3){let n=this.mutexes.get(e);n||(n=new K7,n.refCount=0,this.mutexes.set(e,n));let c=n;try{return c.refCount++,await r$e(n,l).runExclusive(I)}finally{--c.refCount===0&&this.mutexes.delete(e)}}};var INe=(I=>(I.DEFAULT="config",I.MCP="mcp",I))(INe||{});function s$e(t){return Object.values(INe).includes(t)}var e_=".copilot",I_=new P7;async function G$e(t){let e=tct(t);try{await ect(e,{recursive:!0,mode:448})}catch{}}async function lct(t,e){if(q7(t))try{let I={},l=await I_.runExclusive(t,()=>a$e(t,"utf8"));return l.trim().startsWith("{")?I=JSON.parse(l):l.split(`
1414
1414
  `).forEach(n=>{let[c,r]=n.split("=").map(s=>s.trim());c&&r&&(I[c]=r)}),e(I)}catch(I){throw new Error(`Failed to read configuration from ${t}: ${I}`)}}async function nct(t,e){try{await G$e(t);let I=JSON.stringify(e,null,2);await I_.runExclusive(t,()=>Ict(t,I,{mode:384}))}catch(I){throw new Error(`Failed to write configuration to ${t}: ${I}`)}}var d$e=(t,e,{shouldCache:I})=>{let l=new Map,n=()=>{let b=s$e(e)?process.env.XDG_CONFIG_HOME:process.env.XDG_STATE_HOME;return b?uG(b,e_):uG(o$e(),e_)},c=()=>{let b=s$e(e)?"-config":"-state";return`${e}${e=="config"?"":b}`},r=b=>{let m=".json",h=c()+(b?"":m),p=uG(n(),h,b?`${b}${m}`:"");return!q7(p)&&q7(p.replace(/\.json$/,""))&&(p=p.replace(/\.json$/,"")),p},s=async()=>{let b=uG(n(),c());try{let h=(await _7(b,{withFileTypes:!0})).filter(Z=>Z.isFile()&&Z.name.endsWith(".json")).map(Z=>Z.name),p=await Promise.all(h.map(async Z=>{let W=uG(b,Z);try{let Y=await $7(W);return{file:Z,mtime:Y.mtime}}catch{return{file:Z,mtime:new Date}}}));return p.sort((Z,W)=>W.mtime.getTime()-Z.mtime.getTime()),p.map(Z=>Z.file)}catch{}return[]},a=async()=>{let b=uG(n(),c());try{let h=(await _7(b,{withFileTypes:!0})).filter(Z=>Z.isFile()&&Z.name.endsWith(".json")).map(Z=>Z.name),p=await Promise.all(h.map(async Z=>{let W=uG(b,Z);try{let Y=await $7(W);return{file:Z,mtime:Y.mtime,ctime:Y.ctime}}catch{return{file:Z,mtime:new Date,ctime:new Date}}}));return p.sort((Z,W)=>W.mtime.getTime()-Z.mtime.getTime()),p}catch{}return[]},G=async(b="")=>{if(I&&l.has(b))return l.get(b);let m=await lct(r(b),t);return I&&m&&l.set(b,m),m},d=async(b,m="")=>{I&&l.set(m,b),await nct(r(m),b)};return{load:G,write:d,writeKey:async(b,m,h)=>{let p=await G(h);if(m===void 0){p&&(delete p[b],await d(p,h));return}let Z={[b]:m},W;p?W={...p,...Z}:W=Z,await d(W,h)},path:r,directoryFiles:s,directoryFilesWithMetadata:a}},i$e=(t,e)=>d$e(t,e,{shouldCache:!0}),b$e=(t,e)=>d$e(t,e,{shouldCache:!1}),m$e=(t,e)=>{let I=()=>{let G=process.env.XDG_STATE_HOME;return G?uG(G,e_):uG(o$e(),e_)},l=()=>`${e}-state`,n=G=>{let d=".jsonl",i=l()+(G?"":d);return uG(I(),i,G?`${G}${d}`:"")};return{load:async G=>{let d=n(G);if(!q7(d))return[];try{let b=(await I_.runExclusive(d,()=>a$e(d,"utf8"))).trim().split(`
1415
1415
  `).filter(h=>h.trim()),m=[];for(let h=0;h<b.length;h++)try{let p=JSON.parse(b[h]),Z=t(p);m.push(Z)}catch(p){throw new Error(`Invalid event at line ${h+1} in ${d}: ${p}`)}return m}catch(i){throw new Error(`Failed to read JSONL from ${d}: ${i}`)}},append:async(G,d)=>{let i=n(d),b=Array.isArray(G)?G:[G];try{await G$e(i);let m=b.map(h=>JSON.stringify(h)).join(`
1416
1416
  `)+`