@github/copilot 0.0.351-16 → 0.0.351-17
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 +4 -4
- package/package.json +2 -2
- package/sdk/index.js +2 -2
package/index.js
CHANGED
|
@@ -2032,17 +2032,17 @@ ${a}`;await r.createOrUpdateMCPStartupToolCall({serverName:e,content:o,toolNames
|
|
|
2032
2032
|
}
|
|
2033
2033
|
}
|
|
2034
2034
|
`,n=new URL("/graphql",nO(t)),r=await fetch(n.href,{method:"POST",headers:{Authorization:`Bearer ${e}`,Accept:"application/json"},body:JSON.stringify({query:l})});if(!r.ok)throw new Error(`Failed to fetch employee info: ${r.statusText}`);return fCn.parse(await r.json()).data.viewer.isEmployee}var $zt=$e(Tzt(),1);import{existsSync as vwe}from"fs";import{appendFile as Yfn,mkdir as Vfn,readdir as fwe,readFile as Dzt,stat as Hwe,writeFile as wfn}from"fs/promises";import{homedir as zzt}from"os";import{dirname as Qfn,join as cN}from"path";var Nfn=new Error("timeout while waiting for mutex to become available"),PKa=new Error("mutex already locked"),Wfn=new Error("request for lock canceled"),yfn=function(t,e,l,n){function r(a){return a instanceof l?a:new l(function(I){I(a)})}return new(l||(l=Promise))(function(a,I){function s(d){try{c(n.next(d))}catch(m){I(m)}}function o(d){try{c(n.throw(d))}catch(m){I(m)}}function c(d){d.done?a(d.value):r(d.value).then(s,o)}c((n=n.apply(t,e||[])).next())})},Oqe=class{constructor(e,l=Wfn){this._value=e,this._cancelError=l,this._queue=[],this._weightedWaiters=[]}acquire(e=1,l=0){if(e<=0)throw new Error(`invalid weight ${e}: must be positive`);return new Promise((n,r)=>{let a={resolve:n,reject:r,weight:e,priority:l},I=Uzt(this._queue,s=>l<=s.priority);I===-1&&e<=this._value?this._dispatchItem(a):this._queue.splice(I+1,0,a)})}runExclusive(e){return yfn(this,arguments,void 0,function*(l,n=1,r=0){let[a,I]=yield this.acquire(n,r);try{return yield l(a)}finally{I()}})}waitForUnlock(e=1,l=0){if(e<=0)throw new Error(`invalid weight ${e}: must be positive`);return this._couldLockImmediately(e,l)?Promise.resolve():new Promise(n=>{this._weightedWaiters[e-1]||(this._weightedWaiters[e-1]=[]),Efn(this._weightedWaiters[e-1],{resolve:n,priority:l})})}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 l=this._value;this._value-=e.weight,e.resolve([l,this._newReleaser(e.weight)])}_newReleaser(e){let l=!1;return()=>{l||(l=!0,this.release(e))}}_drainUnlockWaiters(){if(this._queue.length===0)for(let e=this._value;e>0;e--){let l=this._weightedWaiters[e-1];l&&(l.forEach(n=>n.resolve()),this._weightedWaiters[e-1]=[])}else{let e=this._queue[0].priority;for(let l=this._value;l>0;l--){let n=this._weightedWaiters[l-1];if(!n)continue;let r=n.findIndex(a=>a.priority<=e);(r===-1?n:n.splice(0,r)).forEach(a=>a.resolve())}}}_couldLockImmediately(e,l){return(this._queue.length===0||this._queue[0].priority<l)&&e<=this._value}};function Efn(t,e){let l=Uzt(t,n=>e.priority<=n.priority);t.splice(l+1,0,e)}function Uzt(t,e){for(let l=t.length-1;l>=0;l--)if(e(t[l]))return l;return-1}var Rfn=function(t,e,l,n){function r(a){return a instanceof l?a:new l(function(I){I(a)})}return new(l||(l=Promise))(function(a,I){function s(d){try{c(n.next(d))}catch(m){I(m)}}function o(d){try{c(n.throw(d))}catch(m){I(m)}}function c(d){d.done?a(d.value):r(d.value).then(s,o)}c((n=n.apply(t,e||[])).next())})},Fwe=class{constructor(e){this._semaphore=new Oqe(1,e)}acquire(){return Rfn(this,arguments,void 0,function*(e=0){let[,l]=yield this._semaphore.acquire(1,e);return l})}runExclusive(e,l=0){return this._semaphore.runExclusive(()=>e(),1,l)}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()}},Ozt=function(t,e,l,n){function r(a){return a instanceof l?a:new l(function(I){I(a)})}return new(l||(l=Promise))(function(a,I){function s(d){try{c(n.next(d))}catch(m){I(m)}}function o(d){try{c(n.throw(d))}catch(m){I(m)}}function c(d){d.done?a(d.value):r(d.value).then(s,o)}c((n=n.apply(t,e||[])).next())})};function Mzt(t,e,l=Nfn){return{acquire:(n,r)=>{let a;if(Qwe(t)?a=n:(a=void 0,r=n),a!==void 0&&a<=0)throw new Error(`invalid weight ${a}: must be positive`);return new Promise((I,s)=>Ozt(this,void 0,void 0,function*(){let o=!1,c=setTimeout(()=>{o=!0,s(l)},e);try{let d=yield Qwe(t)?t.acquire(a,r):t.acquire(r);o?(Array.isArray(d)?d[1]:d)():(clearTimeout(c),I(d))}catch(d){o||(clearTimeout(c),s(d))}}))},runExclusive(n,r,a){return Ozt(this,void 0,void 0,function*(){let I=()=>{};try{let s=yield this.acquire(r,a);return Array.isArray(s)?(I=s[1],yield n(s[0])):(I=s,yield n())}finally{I()}})},release(n){t.release(n)},cancel(){return t.cancel()},waitForUnlock:(n,r)=>{let a;if(Qwe(t)?a=n:(a=void 0,r=n),a!==void 0&&a<=0)throw new Error(`invalid weight ${a}: must be positive`);return new Promise((I,s)=>{let o=setTimeout(()=>s(l),e);(Qwe(t)?t.waitForUnlock(a,r):t.waitForUnlock(r)).then(()=>{clearTimeout(o),I()})})},isLocked:()=>t.isLocked(),getValue:()=>t.getValue(),setValue:n=>t.setValue(n)}}function Qwe(t){return t.getValue!==void 0}var Cwe=class{mutexes=new Map;async runExclusive(e,l,n=5e3){let r=this.mutexes.get(e);r||(r=new Fwe,r.refCount=0,this.mutexes.set(e,r));let a=r;try{return a.refCount++,await Mzt(r,n).runExclusive(l)}finally{--a.refCount===0&&this.mutexes.delete(e)}}};var Lwe=(l=>(l.DEFAULT="config",l.MCP="mcp",l))(Lwe||{});function _zt(t){return Object.values(Lwe).includes(t)}var Xwe=".copilot",kwe=new Cwe;async function Pzt(t){let e=Qfn(t);try{await Vfn(e,{recursive:!0,mode:448})}catch{}}async function Ffn(t,e){if(vwe(t))try{let l={},n=await kwe.runExclusive(t,()=>Dzt(t,"utf8"));return n.trim().startsWith("{")?l=JSON.parse(n):n.split(`
|
|
2035
|
-
`).forEach(r=>{let[a,I]=r.split("=").map(s=>s.trim());a&&I&&(l[a]=I)}),e(l)}catch(l){throw new Error(`Failed to read configuration from ${t}: ${l}`)}}async function Cfn(t,e){try{await Pzt(t);let l=JSON.stringify(e,null,2);await kwe.runExclusive(t,()=>wfn(t,l,{mode:384}))}catch(l){throw new Error(`Failed to write configuration to ${t}: ${l}`)}}var jzt=(t,e,{shouldCache:l})=>{let n=new Map,r=()=>{let G=_zt(e)?process.env.XDG_CONFIG_HOME:process.env.XDG_STATE_HOME;return G?cN(G,Xwe):cN(zzt(),Xwe)},a=()=>{let G=_zt(e)?"-config":"-state";return`${e}${e=="config"?"":G}`},I=G=>{let p=".json",A=a()+(G?"":p),Z=cN(r(),A,G?`${G}${p}`:"");return!vwe(Z)&&vwe(Z.replace(/\.json$/,""))&&(Z=Z.replace(/\.json$/,"")),Z},s=async()=>{let G=cN(r(),a());try{let A=(await fwe(G,{withFileTypes:!0})).filter(W=>W.isFile()&&W.name.endsWith(".json")).map(W=>W.name),Z=await Promise.all(A.map(async W=>{let R=cN(G,W);try{let V=await Hwe(R);return{file:W,mtime:V.mtime}}catch{return{file:W,mtime:new Date}}}));return Z.sort((W,R)=>R.mtime.getTime()-W.mtime.getTime()),Z.map(W=>W.file)}catch{}return[]},o=async()=>{let G=cN(r(),a());try{let A=(await fwe(G,{withFileTypes:!0})).filter(W=>W.isFile()&&W.name.endsWith(".json")).map(W=>W.name),Z=await Promise.all(A.map(async W=>{let R=cN(G,W);try{let V=await Hwe(R);return{file:W,mtime:V.mtime,
|
|
2035
|
+
`).forEach(r=>{let[a,I]=r.split("=").map(s=>s.trim());a&&I&&(l[a]=I)}),e(l)}catch(l){throw new Error(`Failed to read configuration from ${t}: ${l}`)}}async function Cfn(t,e){try{await Pzt(t);let l=JSON.stringify(e,null,2);await kwe.runExclusive(t,()=>wfn(t,l,{mode:384}))}catch(l){throw new Error(`Failed to write configuration to ${t}: ${l}`)}}var jzt=(t,e,{shouldCache:l})=>{let n=new Map,r=()=>{let G=_zt(e)?process.env.XDG_CONFIG_HOME:process.env.XDG_STATE_HOME;return G?cN(G,Xwe):cN(zzt(),Xwe)},a=()=>{let G=_zt(e)?"-config":"-state";return`${e}${e=="config"?"":G}`},I=G=>{let p=".json",A=a()+(G?"":p),Z=cN(r(),A,G?`${G}${p}`:"");return!vwe(Z)&&vwe(Z.replace(/\.json$/,""))&&(Z=Z.replace(/\.json$/,"")),Z},s=async()=>{let G=cN(r(),a());try{let A=(await fwe(G,{withFileTypes:!0})).filter(W=>W.isFile()&&W.name.endsWith(".json")).map(W=>W.name),Z=await Promise.all(A.map(async W=>{let R=cN(G,W);try{let V=await Hwe(R);return{file:W,mtime:V.mtime}}catch{return{file:W,mtime:new Date}}}));return Z.sort((W,R)=>R.mtime.getTime()-W.mtime.getTime()),Z.map(W=>W.file)}catch{}return[]},o=async()=>{let G=cN(r(),a());try{let A=(await fwe(G,{withFileTypes:!0})).filter(W=>W.isFile()&&W.name.endsWith(".json")).map(W=>W.name),Z=await Promise.all(A.map(async W=>{let R=cN(G,W);try{let V=await Hwe(R);return{file:W,mtime:V.mtime,birthtime:V.birthtime}}catch{return{file:W,mtime:new Date,birthtime:new Date}}}));return Z.sort((W,R)=>R.mtime.getTime()-W.mtime.getTime()),Z}catch{}return[]},c=async(G="")=>{if(l&&n.has(G))return n.get(G);let p=await Ffn(I(G),t);return l&&p&&n.set(G,p),p},d=async(G,p="")=>{l&&n.set(p,G),await Cfn(I(p),G)};return{load:c,write:d,writeKey:async(G,p,A)=>{let Z=await c(A);if(p===void 0){Z&&(delete Z[G],await d(Z,A));return}let W={[G]:p},R;Z?R={...Z,...W}:R=W,await d(R,A)},path:I,directoryFiles:s,directoryFilesWithMetadata:o}},Jwe=(t,e)=>jzt(t,e,{shouldCache:!0}),xwe=(t,e)=>jzt(t,e,{shouldCache:!1}),Kzt=(t,e)=>{let l=()=>{let c=process.env.XDG_STATE_HOME;return c?cN(c,Xwe):cN(zzt(),Xwe)},n=()=>`${e}-state`,r=c=>{let d=".jsonl",m=n()+(c?"":d);return cN(l(),m,c?`${c}${d}`:"")};return{load:async c=>{let d=r(c);if(!vwe(d))return[];try{let G=(await kwe.runExclusive(d,()=>Dzt(d,"utf8"))).trim().split(`
|
|
2036
2036
|
`).filter(A=>A.trim()),p=[];for(let A=0;A<G.length;A++)try{let Z=JSON.parse(G[A]),W=t(Z);p.push(W)}catch(Z){throw new Error(`Invalid event at line ${A+1} in ${d}: ${Z}`)}return p}catch(m){throw new Error(`Failed to read JSONL from ${d}: ${m}`)}},append:async(c,d)=>{let m=r(d),G=Array.isArray(c)?c:[c];try{await Pzt(m);let p=G.map(A=>JSON.stringify(A)).join(`
|
|
2037
2037
|
`)+`
|
|
2038
|
-
`;await kwe.runExclusive(m,()=>Yfn(m,p,{mode:384}))}catch(p){throw new Error(`Failed to append to JSONL file ${m}: ${p}`)}},path:r,directoryFiles:async()=>{let c=cN(l(),n());try{let m=(await fwe(c,{withFileTypes:!0})).filter(p=>p.isFile()&&p.name.endsWith(".jsonl")).map(p=>p.name),G=await Promise.all(m.map(async p=>{let A=cN(c,p);try{let Z=await Hwe(A);return{file:p,mtime:Z.mtime}}catch{return{file:p,mtime:new Date}}}));return G.sort((p,A)=>A.mtime.getTime()-p.mtime.getTime()),G.map(p=>p.file)}catch{return[]}},directoryFilesWithMetadata:async()=>{let c=cN(l(),n());try{let m=(await fwe(c,{withFileTypes:!0})).filter(p=>p.isFile()&&p.name.endsWith(".jsonl")).map(p=>p.name),G=await Promise.all(m.map(async p=>{let A=cN(c,p);try{let Z=await Hwe(A);return{file:p,mtime:Z.mtime,
|
|
2038
|
+
`;await kwe.runExclusive(m,()=>Yfn(m,p,{mode:384}))}catch(p){throw new Error(`Failed to append to JSONL file ${m}: ${p}`)}},path:r,directoryFiles:async()=>{let c=cN(l(),n());try{let m=(await fwe(c,{withFileTypes:!0})).filter(p=>p.isFile()&&p.name.endsWith(".jsonl")).map(p=>p.name),G=await Promise.all(m.map(async p=>{let A=cN(c,p);try{let Z=await Hwe(A);return{file:p,mtime:Z.mtime}}catch{return{file:p,mtime:new Date}}}));return G.sort((p,A)=>A.mtime.getTime()-p.mtime.getTime()),G.map(p=>p.file)}catch{return[]}},directoryFilesWithMetadata:async()=>{let c=cN(l(),n());try{let m=(await fwe(c,{withFileTypes:!0})).filter(p=>p.isFile()&&p.name.endsWith(".jsonl")).map(p=>p.name),G=await Promise.all(m.map(async p=>{let A=cN(c,p);try{let Z=await Hwe(A);return{file:p,mtime:Z.mtime,birthtime:Z.birthtime}}catch{return{file:p,mtime:new Date,birthtime:new Date}}}));return G.sort((p,A)=>A.mtime.getTime()-p.mtime.getTime()),G}catch{return[]}},home:l,directory:n}};var qzt=zl({host:Qt(),login:Qt()}),vfn=zl({banner:G0(["always","once","never"]).optional(),beep:ro().optional(),last_logged_in_user:qzt.optional(),logged_in_users:Od(qzt).optional(),model:Qt().optional(),render_markdown:ro().optional(),screen_reader:ro().optional(),theme:Qt().optional(),trusted_folders:Od(Qt()).optional(),store_token_plaintext:ro().optional(),stream:ro().optional(),parallel_tool_execution:ro().optional(),feature_flags:zl({enabled:Od(Qt()).optional()}).optional(),asked_setup_terminals:Od(Qt()).optional(),capi_hmac_key:Qt().optional(),copilot_hmac_key:Qt().optional(),copilot_integration_id:Qt().optional(),copilot_tokens:nY(Qt(),Qt()).optional(),copilot_url:Qt().optional(),staff:ro().optional(),log_level:G0(["none","error","warning","info","debug","all","default"]).optional()}),ffn=nY(Qt(),lKe()),Hfn=ffn.transform(t=>(0,$zt.default)(t,(e,l)=>{let n=l.toLowerCase();return n==="github_copilot_integration_id"?"copilot_integration_id":n})),Xfn=Hfn.pipe(vfn),Sr=Jwe(Xfn.parse,"config");function xL(){return process.env.COPILOT_ENABLE_ALT_PROVIDERS==="true"}var oO=["claude-sonnet-4.5","claude-sonnet-4","claude-haiku-4.5","gpt-5"];function ePt(t,e){let l=" ".repeat(e);return t.map(n=>`${l}- "${n}"`).join(`
|
|
2039
2039
|
`)}function wq(t){return oO.includes(t)||xL()}function sO(t,e){if(!e)return!0;let l=e.find(n=>n.id===t);return l?l.policy?l.policy.state!=="disabled":!0:!1}function Uqe(t){return oO.find(e=>sO(e,t))}function Qq(t,e){if(e&&e.length>0){let n=e.find(r=>r.id===t);if(n?.billing?.multiplier!==void 0)return n.billing.multiplier}return{"claude-sonnet-4":1,"gpt-5":1,"claude-sonnet-4.5":1,"claude-haiku-4.5":.33}[t]??1}async function iO(t,e,l,n){if(xL()&&process.env.COPILOT_AGENT_MODEL){let{model:I}=HB(process.env.COPILOT_AGENT_MODEL);if(I)return I}if(t){if(sO(t,l))return t;n?.warning(`Model '${t}' from CLI argument is not available. Falling back to next option.`)}if(e){let I=await e?.getSelectedModel?.();if(I){if(sO(I,l))return I;n?.warning(`Model '${I}' from session is not available. Falling back to next option.`)}}let r=process.env.COPILOT_MODEL;if(r&&wq(r)){if(sO(r,l))return r;n?.warning(`Model '${r}' from COPILOT_MODEL environment variable is not available. Falling back to next option.`)}try{let s=(await Sr.load()||{}).model;if(typeof s=="string"&&s&&wq(s)){if(sO(s,l))return s;n?.warning(`Model '${s}' from config file is not available. Falling back to default.`)}}catch{}let a=Uqe(l);return a&&n?.info(`Using default model: ${a}`),a}function _w(t){return"host"in t?t.host:"https://github.com"}function lme(t){return iY(t,{onHMACAuthInfo:()=>"Logged in with HMAC",onEnvAuthInfo:e=>`Logged in with ${e.envVar} as user: ${e.login}`,onUserAuthInfo:e=>`Logged in as user: ${tme(e)}`,onGhCliAuthInfo:e=>`Logged in with gh as user: ${tme(e)}`,onApiKeyAuthInfo:e=>`Logged in with API key to ${e.host}`})}function nme(t){return iY(t,{onHMACAuthInfo:()=>"Unknown (via HMAC)",onEnvAuthInfo:e=>`${e.login} (via ${e.envVar})`,onUserAuthInfo:e=>tme(e),onGhCliAuthInfo:e=>`${e.login} (via gh)`,onApiKeyAuthInfo:e=>`${e.host} (via API key)`})}function Mqe(t,e){return iY(t,{onHMACAuthInfo:l=>e.type==="hmac"&&l.hmac===e.hmac,onEnvAuthInfo:l=>e.type==="env"&&l.envVar===e.envVar&&l.login===e.login,onUserAuthInfo:l=>e.type==="user"&&cO(l,e),onGhCliAuthInfo:l=>e.type==="gh-cli"&&cO(l,e),onApiKeyAuthInfo:l=>e.type==="api-key"&&l.host===e.host&&l.apiKey===e.apiKey})}async function tPt(t,e){let l=await t.getAllAuthAvailable(),n=">",r="-";return l.map(a=>`${e&&Mqe(a.authInfo,e)?n:r} ${nme(a.authInfo)}`)}function tme(t){return t.host!==kL?`${t.login} (${t.host})`:t.login}async function lPt(){let t=await Sr.load()||{};return t?.last_logged_in_user??t.logged_in_users?.[0]??void 0}async function _qe(t){await Sr.writeKey("last_logged_in_user",t)}async function Swe(){return(await Sr.load()||{}).logged_in_users||[]}async function nPt(t,e){await Sr.writeKey("last_logged_in_user",t),await Sr.writeKey("logged_in_users",e)}async function rPt(t){let e=await Swe();return e.some(n=>cO(n,t))?(e=e.filter(n=>!cO(n,t)),await nPt(void 0,e),e.length>0):!1}async function aPt(t){let e=await Swe();e.some(n=>cO(n,t))||(e.push(t),await nPt(t,e))}function cO(t,e){return t.login===e.login&&t.host===e.host}async function IPt(t,e){try{let l=kfn(),n=await e.execReturn("gh",["auth","token","--hostname",l],{silent:!0,ignoreReturnCode:!0});if(n.exitCode!==0||!n.stdout.trim()){let a=`Failed to retrieve GitHub token from CLI (exit code: ${n.exitCode})`,I=n.stderr?.trim();return I?t.debug(`${a}: ${I}`):t.debug(a),null}let r=n.stdout.trim();return r.startsWith("ghp_")?(t.debug("GitHub token is a classic PAT"),null):(t.debug("GitHub CLI authenticated with valid token"),{token:r,host:l})}catch(l){let n=`Error checking GitHub CLI: ${l}`;return l&&typeof l=="object"&&"stderr"in l&&typeof l.stderr=="string"&&(n+=` (stderr: ${l.stderr.trim()})`),t.debug(n),null}}function kfn(){return process.env.GH_HOST||"github.com"}function Dqe(){let t=process.env.GH_HOST;return t?t.startsWith("https://")?t:`https://${t}`:kL}import{existsSync as iPt}from"fs";var Bwe="copilot-cli",Twe;async function Owe(){if(Twe)return Twe;let t=await Promise.resolve().then(()=>$e(oPt(),1));return Twe=t.default||t,Twe}var ame=(t,e)=>{if(!(!t||!e))return`${t}:${e}`},xfn=()=>{let t=new Map,e=async(o,c)=>{let d=ame(o,c);if(d)if(iPt(Sr.path()))try{let p=(await Sr.load())?.copilot_tokens?.[d];t.set(d,p&&p.trim()!==""?p:void 0)}catch{t.set(d,void 0)}else t.set(d,void 0)},l=async()=>{if(iPt(Sr.path()))try{let c=(await Sr.load())?.copilot_tokens;if(c){let d=Object.values(c).filter(m=>m&&m.trim()!=="");if(d.length>0)return d[0]}}catch{return}},n=async(o,c)=>{let d=ame(o,c);if(!d)return;if(t.has(d))return t.get(d);if((await Sr.load())?.store_token_plaintext)return await e(o,c),t.get(d);try{let p=await(await Owe()).getPassword(Bwe,d);p?t.set(d,p):await e(o,c)}catch{await e(o,c)}return t.get(d)},r=async()=>{if(t.size>0)return t.values().next().value;if((await Sr.load())?.store_token_plaintext)return await l();let c;try{c=await(await Owe()).findPassword(Bwe)}catch{}return c||(c=await l()),c},a=async(o,c)=>{let d=ame(o,c);if(d){t.delete(d);try{return(await Owe()).deletePassword(Bwe,d)}catch{let p=(await Sr.load())?.copilot_tokens??{};return delete p[d],await Sr.writeKey("copilot_tokens",p),Promise.resolve(!0)}}},I=async(o,c,d)=>{if(!o)throw new Error("No token provided to store");let m=ame(c,d);if(!m)return;if(t.set(m,o),(await Sr.load())?.store_token_plaintext)return await s(c,d),!0;try{return await(await Owe()).setPassword(Bwe,m,o),!0}catch{return!1}},s=async(o,c)=>{let d=ame(o,c);if(!d)return;let m=t.get(d);if(!m)return;let p=(await Sr.load())?.copilot_tokens??{};p[d]=m,await Sr.writeKey("copilot_tokens",p)};return{getToken:n,getAnyToken:r,removeToken:a,storeToken:I,storeCurrentTokenInConfig:s}},Ef=xfn();function iY(t,e){switch(t.type){case"hmac":return e.onHMACAuthInfo(t);case"env":return e.onEnvAuthInfo(t);case"user":return e.onUserAuthInfo(t);case"gh-cli":return e.onGhCliAuthInfo(t);case"api-key":return e.onApiKeyAuthInfo(t);default:{let l=t;throw new Error(`unexpected auth info type: ${JSON.stringify(t)}`)}}}async function Iy(t){return await iY(t,{onHMACAuthInfo:async()=>process.env.GITHUB_MCP_SERVER_TOKEN,onEnvAuthInfo:async e=>e.token,onUserAuthInfo:async e=>await Ef.getToken(e.host,e.login)||void 0,onGhCliAuthInfo:async e=>e.token,onApiKeyAuthInfo:async()=>{}})}var zqe=class{currentAuthInfo=null;logger=new xd;authCallbacks=[];setLogger(e){this.logger=e}onAuthChange(e){this.authCallbacks.push(e)}removeAuthCallback(e){let l=this.authCallbacks.indexOf(e);l>-1&&this.authCallbacks.splice(l,1)}async notifyAuthChange(e,l){this.currentAuthInfo=e;for(let n of this.authCallbacks)try{await n(e,l)}catch(r){this.logger.error(`Error in auth change callback: ${r}`)}}async tryHMACLogin(){let e=await Sr.load()||{},l=e.copilot_hmac_key||e.capi_hmac_key||process.env.CAPI_HMAC_KEY||process.env.COPILOT_HMAC_KEY;return l?[{authInfo:{type:"hmac",hmac:l}}]:[]}async tryGitHubTokenLogin(){let e=process.env.GH_TOKEN||process.env.GITHUB_TOKEN;if(!e)return[];if(e.startsWith("ghp_"))return this.logger.error("Classic PATs are not supported. Please use fine-grained PATs or other supported token types."),[];if(!e.startsWith("gho_")&&!e.startsWith("ghu_")&&!e.startsWith("github_pat_"))return this.logger.error("Unsupported token type, ignoring."),[];let l=Dqe();try{let n=await Wq(l,e);return[{authInfo:{type:"env",host:l,login:n,token:e,envVar:process.env.GH_TOKEN?"GH_TOKEN":"GITHUB_TOKEN"},token:e}]}catch(n){n instanceof XL?this.logger.error(`Failed to fetch PAT user login (${n.status}): ${n.message}`):this.logger.error("Failed to fetch PAT user login")}return[]}async tryGhCliTokenLogin(){let e=new XA(this.logger),l=await IPt(this.logger,e);if(!l)return[];let{token:n,host:r}=l;try{let a=r.startsWith("https://")?r:`https://${r}`,I=await Wq(a,n);return[{authInfo:{type:"gh-cli",host:a,login:I,token:n},token:n}]}catch(a){a instanceof XL?this.logger.error(`Failed to fetch GitHub CLI user login (${a.status}): ${a.message}`):this.logger.error("Failed to fetch GitHub CLI user login")}return[]}async tryApiKeyLogin(){if(!xL())return[];let e=process.env.ANTHROPIC_API_KEY||process.env.AZURE_OPENAI_API_KEY,l=process.env.ANTHROPIC_API_KEY?"https://api.anthropic.com":process.env.AZURE_OPENAI_API_KEY?process.env.AZURE_OPENAI_API_ENDPOINT||process.env.OPENAI_BASE_URL||"https://api.openai.com":void 0;return!e||!l?[]:[{authInfo:{type:"api-key",apiKey:e,host:l}}]}async tryLoginToken(){let e=await lPt(),l;if(e){if(l=await Ef.getToken(e.host,e.login),!l||l.trim()==="")return[]}else{if(l=await Ef.getAnyToken(),!l||l.trim()==="")return[];let n=Dqe();e={host:n,login:await Wq(n,l)}}return[{authInfo:{type:"user",host:e.host,login:e.login},token:l}]}async getAllGitHubLoginTokens(){let l=(await this.tryGitHubTokenLogin()).at(0),n=await Swe(),r=[];for(let a of n){if(l?.authInfo.type==="user"&&cO(a,l.authInfo))continue;let I=await Ef.getToken(a.host,a.login);I&&r.push({authInfo:{type:"user",host:a.host,login:a.login},token:I})}return r}async getAllAuthAvailable(){let e=[],l=this.getPrioritizedAuthMethods(!0);for(let n of l){let r=await n();e.push(...r)}return e}getPrioritizedAuthMethods(e){return[this.tryHMACLogin.bind(this),this.tryApiKeyLogin.bind(this),this.tryGitHubTokenLogin.bind(this),e?this.getAllGitHubLoginTokens.bind(this):this.tryLoginToken.bind(this),this.tryGhCliTokenLogin.bind(this)]}async loadAuthInfo(){let e=this.currentAuthInfo!==null;this.currentAuthInfo=null;let l=this.getPrioritizedAuthMethods(!1);for(let n of l){let r=await n();if(r.length>0){let{authInfo:a,token:I}=r[0];a.type==="user"&&_qe({host:a.host,login:a.login}),this.currentAuthInfo=a,e||await this.notifyAuthChange(a,I);return}}}async getCurrentAuthInfo(){return this.currentAuthInfo||await this.loadAuthInfo(),this.currentAuthInfo}async loginUser(e,l){let n={host:e,login:l},r={type:"user",...n};await aPt(n);let a=await Iy(r);await this.notifyAuthChange(r,a)}async switchToAuth(e){this.currentAuthInfo=e.authInfo,e.authInfo.type==="user"&&await _qe({host:e.authInfo.host,login:e.authInfo.login}),await this.notifyAuthChange(e.authInfo,e.token)}async logout(){if(!this.currentAuthInfo)return!1;let e=await iY(this.currentAuthInfo,{onHMACAuthInfo:async()=>!1,onEnvAuthInfo:async()=>!1,onUserAuthInfo:async l=>(await Ef.removeToken(l.host,l.login),await rPt(l)),onGhCliAuthInfo:async()=>!1,onApiKeyAuthInfo:async()=>!1});return await this.notifyAuthChange(null),e}},Sfn=new zqe,Uwe=Sfn;var Rf=class t extends HL{constructor(l,n,r,a,I){super(l,n,a,"direct");this.exec=r;this.enableAllGithubMcpTools=I??!1}static GITHUB_SERVER_NAME="github-mcp-server";static CLI_DEFAULT_GITHUB_MCP_TOOLS=["get_file_contents","search_code","search_repositories","list_branches","list_commits","get_commit","get_issue","list_issues","get_issue_comments","search_issues","pull_request_read","list_pull_requests","search_pull_requests","list_workflow_runs","get_job_logs","get_workflow_run","list_workflows","get_workflow_run_logs","web_search","search_users"];static BUILTIN_SERVERS=[t.GITHUB_SERVER_NAME];static getBuiltInServerNames(){return[...t.BUILTIN_SERVERS]}hasUserConfiguredGitHubServer=!1;lastGitHubAuthInfo=null;githubMcpToken;enableAllGithubMcpTools;async configureGitHubAuth(l){if(this.isServerDisabled(t.GITHUB_SERVER_NAME))return this.logger.debug("GitHub MCP server is disabled, skipping auto-configuration"),!1;if(this.hasUserConfiguredGitHubServer)return this.logger.debug("User has explicitly configured github-mcp-server, ignoring auth changes"),!1;if(await this.shouldHandleGitHubAuth(l)){let r=await Iy(l);if(!r)return this.logger.debug("No token available for GitHub authentication"),!1;if(this.lastGitHubAuthInfo=l,r===this.githubMcpToken)return!1;this.githubMcpToken=r;let a=await this.createGitHubServerConfig(r,l);try{return await this.restartServer(t.GITHUB_SERVER_NAME,a),this.logger.log("GitHub MCP server configured after authentication"),!0}catch(I){return this.logger.error(`Failed to configure GitHub MCP server after auth: ${I}`),!1}}return!1}async removeGitHubAuth(){if(this.hasUserConfiguredGitHubServer)return this.logger.debug("User has explicitly configured github-mcp-server, ignoring auth changes"),!1;this.githubMcpToken=void 0;try{return this.isServerRunning(t.GITHUB_SERVER_NAME)?(await this.stopServer(t.GITHUB_SERVER_NAME),this.logger.debug("Removed GitHub MCP server"),!0):!1}catch(l){return this.logger.error(`Failed to remove GitHub server: ${l}`),!1}}async shouldHandleGitHubAuth(l){return await iY(l,{onHMACAuthInfo:async()=>!!process.env.GITHUB_MCP_SERVER_TOKEN,onEnvAuthInfo:async()=>!0,onUserAuthInfo:async()=>!0,onGhCliAuthInfo:async()=>!0,onApiKeyAuthInfo:async()=>!1})}async createGitHubServerConfig(l,n){let r="https://api.githubcopilot.com/mcp/readonly";try{let a=await iY(n,{onHMACAuthInfo:async()=>"https://github.com",onEnvAuthInfo:async s=>s.host,onUserAuthInfo:async s=>s.host,onGhCliAuthInfo:async s=>s.host,onApiKeyAuthInfo:async s=>s.host}),I=await E0(a,l,this.logger);r=new URL("/mcp/readonly",I).toString()}catch(a){this.logger.error(`Failed to fetch Copilot URL, using default: ${a}`)}return{type:"http",url:r,headers:{Authorization:"Bearer "+l,"X-MCP-Toolsets":"repos,issues,users,pull_requests,code_security,secret_protection,actions,web_search","X-MCP-Host":"copilot-cli"},tools:this.enableAllGithubMcpTools?["*"]:t.CLI_DEFAULT_GITHUB_MCP_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"}}}async injectDefaultServers(l){if(l.mcpServers[t.GITHUB_SERVER_NAME]){this.hasUserConfiguredGitHubServer=!0,this.logger.debug("User has already configured github-mcp-server, skipping auto-configuration");return}}async startBuiltInServer(l){l===t.GITHUB_SERVER_NAME&&!this.hasUserConfiguredGitHubServer?this.lastGitHubAuthInfo?(this.logger.log("Attempting to configure GitHub MCP server using stored authentication"),await this.configureGitHubAuth(this.lastGitHubAuthInfo)?this.logger.log("GitHub MCP server configured successfully after enabling"):this.logger.log("GitHub MCP server enabled but could not be configured - authentication may be invalid or insufficient")):this.logger.log("GitHub MCP server enabled - will be configured automatically when authentication becomes available"):await super.startBuiltInServer(l)}};var Bfn=zl({commandHistory:Od(Qt())}),Pqe=xwe(Bfn.parse,"command-history");var Tfn=50,jqe=class{commandHistory=[];historyIndex=-1;isNavigatingHistory=!1;unSubmittedCommand=null;async initialize(){try{let e=await Pqe.load();this.commandHistory=e?.commandHistory||[],this.resetNavigation()}catch{this.commandHistory=[]}}async addCommand(e){this.commandHistory=this.commandHistory.filter(l=>l!==e),this.commandHistory.unshift(e),this.commandHistory=this.commandHistory.slice(0,Tfn),this.resetNavigation(),this.unSubmittedCommand=null,await this.saveHistory()}async updateCurrentCommand(e){this.historyIndex!==-1?(this.commandHistory[this.historyIndex]=e,await this.saveHistory()):this.unSubmittedCommand=e}navigateUp(e){if(this.commandHistory.length===0)return;let l=this.historyIndex+1;if(l<this.commandHistory.length){this.historyIndex=l,this.isNavigatingHistory=!0;let n=this.getCurrentHistoryItem();n&&e.setText(n)}}navigateDown(e){if(this.historyIndex===-1)return;if(this.historyIndex===0)this.resetNavigation();else{let n=this.historyIndex-1;this.historyIndex=n,this.isNavigatingHistory=!0}let l=this.getCurrentHistoryItem();l?(e.setText(l),e.setCursorPosition(0)):e.clear()}resetNavigation(){this.historyIndex=-1,this.isNavigatingHistory=!1}getHistoryIndex(){return this.historyIndex}getHistory(){return this.commandHistory}getCurrentHistoryItem(){return this.historyIndex===-1?this.unSubmittedCommand?this.unSubmittedCommand:void 0:this.commandHistory[this.historyIndex]}isNavigating(){return this.isNavigatingHistory}setNavigating(e){this.isNavigatingHistory=e}async saveHistory(){try{await Pqe.write({commandHistory:this.commandHistory})}catch{}}},cY=new jqe;function dPt(t,e){var l=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(r){return Object.getOwnPropertyDescriptor(t,r).enumerable})),l.push.apply(l,n)}return l}function uPt(t){for(var e=1;e<arguments.length;e++){var l=arguments[e]!=null?arguments[e]:{};e%2?dPt(Object(l),!0).forEach(function(n){Ofn(t,n,l[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(l)):dPt(Object(l)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(l,n))})}return t}function Ofn(t,e,l){return e=Ufn(e),e in t?Object.defineProperty(t,e,{value:l,enumerable:!0,configurable:!0,writable:!0}):t[e]=l,t}function Ufn(t){var e=Mfn(t,"string");return typeof e=="symbol"?e:String(e)}function Mfn(t,e){if(typeof t!="object"||t===null)return t;var l=t[Symbol.toPrimitive];if(l!==void 0){var n=l.call(t,e||"default");if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(t)}var _fn=bPt({}),mPt=_fn;function bPt(t){return e.withOptions=l=>bPt(uPt(uPt({},t),l)),e;function e(l,...n){let r=typeof l=="string"?[l]:l.raw,{escapeSpecialCharacters:a=Array.isArray(l),trimWhitespace:I=!0}=t,s="";for(let d=0;d<r.length;d++){let m=r[d];a&&(m=m.replace(/\\\n[ \t]*/g,"").replace(/\\`/g,"`").replace(/\\\$/g,"$").replace(/\\\{/g,"{")),s+=m,d<n.length&&(s+=n[d])}let o=s.split(`
|
|
2040
2040
|
`),c=null;for(let d of o){let m=d.match(/^(\s+)\S+/);if(m){let G=m[1].length;c?c=Math.min(c,G):c=G}}if(c!==null){let d=c;s=o.map(m=>m[0]===" "||m[0]===" "?m.slice(d):m).join(`
|
|
2041
2041
|
`)}return I&&(s=s.trim()),a&&(s=s.replace(/\\n/g,`
|
|
2042
2042
|
`)),s}}import{homedir as Jjt}from"node:os";import y4n,{resolve as E4n}from"node:path";function Dfn(t){return t.length>0&&/^[0-9a-zA-Z_-]+$/.test(t)}function pPt(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 GPt=G0(["none","markdown","hidden_characters"]),hPt=zl({tools:Od(Qt()),type:Qt().optional(),isDefaultServer:ro().optional(),filterMapping:nY(Qt(),GPt).or(GPt).optional()}),zfn=hPt.extend({type:pr("local").optional(),command:Qt(),args:Od(Qt()),env:nY(Qt(),Qt()).optional()}),Pfn=hPt.extend({type:pr("http").or(pr("sse")),url:Qt(),headers:nY(Qt(),Qt()).optional()}),Kqe=zl({mcpServers:nY(Qt().min(1,"MCP server name cannot be empty").refine(Dfn,{message:"MCP server name must only contain alphanumeric characters, underscores, and hyphens"}),zfn.or(Pfn))}),dY=Jwe(Kqe.parse,"mcp");function APt(t){let e=t.r/255,l=t.g/255,n=t.b/255,r=Math.max(e,l,n),a=Math.min(e,l,n),I=r-a,s=0,o=0,c=(r+a)/2;if(I!==0){switch(o=c>.5?I/(2-r-a):I/(r+a),r){case e:s=(l-n)/I+(l<n?6:0);break;case l:s=(n-e)/I+2;break;case n:s=(e-l)/I+4;break}s/=6}return{h:s*360,s:o,l:c}}function jfn(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,a=c=>c.length>=2?parseInt(c.substring(0,2),16):c.length===1?parseInt(c+c,16):0,I=a(l),s=a(n),o=a(r);return{r:I,g:s,b:o}}var gPt=["#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 Kfn(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 qfn(t){return t<0||t>=gPt.length?{r:0,g:0,b:0}:Kfn(gPt[t])}function ZPt(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:")?jfn(l):null}async function $fn(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",a),process.stdin.setRawMode(!1),n&&clearTimeout(n)},a=I=>{l+=I.toString();let s=l.match(/\x1b\]11;([^\x07\x1b\x9c]*?)(?:\x07|\x1b\\|\x9c)/);if(s){r();let c=`11;${s[1]}`;e(ZPt(c));return}let o=l.match(/11;rgb:([0-9a-f/]+)(?:\x07|\x1b\\|\x9c)/i);if(o){r(),e(ZPt(`11;rgb:${o[1]}`));return}};n=setTimeout(()=>{r(),e(null)},t);try{process.stdin.setRawMode(!0),process.stdin.on("data",a),process.stdout.write("\x1B]11;?\x1B\\")}catch{r(),e(null)}})}function eHn(){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:qfn(n)}async function NPt(){try{let t=await $fn();if(t)return APt(t).l<.5;let e=eHn();return e?APt(e).l<.5:!0}catch{return!0}}var WPt={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"},tHn={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 qqe(t){return t==="auto"||t==="dark"||t==="light"}function Mwe(t){switch(t){case"dark":return WPt;case"light":return tHn;default:return WPt}}var _we=await NPt();async function Dwe(){let e=(await Sr.load())?.theme||"";return qqe(e)?e:"auto"}async function yPt(t){await Sr.writeKey("theme",t)}var EPt=t=>{let e=t?Sl.whiteBright:Sl.black,l=t?Sl.cyanBright:Sl.blueBright,n=t?Sl.magentaBright:Sl.magenta;return{text:e,paragraph:e,html:e,table:e,blockquote:e,heading:Sl.bold,firstHeading:Sl.whiteBright.bold,strong:Sl.bold,em:Sl.italic,del:Sl.strikethrough,hr:Sl.white,link:l,href:l,image:(r,a,I)=>n(I?`Image: ${I} \u2192 ${r}`:`Image: ${r}`),codespan:Sl.cyan,code:Sl.cyan,list:(r,a,I)=>{let s=r.replace(/^(\s*)\* /gm,"$1- ");return I&&(s=s.split(`
|
|
2043
2043
|
`).map(d=>d.startsWith(I)?d.slice(I.length):d).join(`
|
|
2044
2044
|
`)),s.trimEnd()},listitem:r=>e(r.trimEnd()),reflowText:!0,showSectionPrefix:!1,unescape:!0,emoji:!0,tab:2,tableOptions:{style:{compact:!1}}}},lHn=EPt(!0),nHn=EPt(!1);function RPt(t){return t==="light"?nHn:lHn}import{exec as Z4n}from"node:child_process";import*as Y7e from"node:os";import{promisify as N4n}from"node:util";async function SL(t,e,l){if(!t||t.length===0)return;let n=!1,r={};for(let a of t)try{let I=await a(e);I&&(n=!0,r={...r,...I})}catch(I){l.error(`Hook execution failed: ${I}`)}return n?r:void 0}import{unlink as bjt}from"fs/promises";import{join as r4n}from"path";import{execFile as rHn}from"node:child_process";import{normalize as aHn}from"node:path";import{promisify as IHn}from"node:util";var Ime=IHn(rHn);async function uY(t=process.cwd()){try{let l=(await Ime("git",["rev-parse","--show-toplevel"],{cwd:t,encoding:"utf8",timeout:5e3,maxBuffer:1048576})).stdout.trim();if(l)return{gitRoot:aHn(l),found:!0}}catch{}return{gitRoot:t,found:!1}}async function YPt(t){let{stdout:e}=await Ime("git",["-C",t,"remote","-v"],{encoding:"utf8",timeout:5e3,maxBuffer:1048576}),l=e.trim().split(`
|
|
2045
|
-
`),n={};for(let r of l){let a=r.split(/\s+/);if(a.length>=3){let I=a[0],s=a[1],o=a[2].replace(/[()]/g,"");n[I]||(n[I]={Name:I,FetchURL:"",PushURL:""}),o==="fetch"?n[I].FetchURL=s:o==="push"&&(n[I].PushURL=s)}}return Object.values(n)}async function VPt(t){try{let{stdout:e}=await Ime("git",["status","--porcelain"],{cwd:t,encoding:"utf8",timeout:5e3,maxBuffer:1048576});return e.trim().length>0}catch{return!1}}async function wPt(t){try{let{stdout:e}=await Ime("git",["rev-parse","--abbrev-ref","HEAD"],{cwd:t,encoding:"utf8",timeout:5e3,maxBuffer:1048576}),l=e.trim();if(l==="HEAD"){let{stdout:n}=await Ime("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}}var rjt=$e(njt(),1);async function $Xn(t={}){let e=await Mgt();return zgt((0,rjt.default)({},e,t))}async function ume(t={}){if(uD())throw new Error("Settings have already been initialized");return $Xn(t)}import{promises as e5n}from"fs";import ajt from"path";var t5n=3*1024*1024;function Ijt(t){let e=ajt.extname(t).toLowerCase();return[".png",".jpg",".jpeg",".gif",".webp"].includes(e)}function l5n(t){switch(ajt.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 n5n(t,e){e.debug(`Processing local image file: ${t}`);let l=await e5n.readFile(t),n=l5n(t);if(!n)throw new Error(`Unsupported image format: ${t}`);let r=new roe,a=await c0e(e,r,t5n,toe,n,l);if(!a)throw new Error(`Image too large or couldn't be processed: ${t}`);let I=a.toString("base64");return`data:${n};base64,${I}`}async function r5n(t,e,l){let n=cu();try{let r=await pBe({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,l);return{id:n,name:"view",arguments:{path:t},result:r.textResultForLlm||""}}catch(r){return{id:n,name:"view",arguments:{path:t},result:`Error reading ${t}: ${r}`}}}async function sjt(t,e,l){let n=[],r=t.filter(I=>!Ijt(I.path));if(r.length===0)return n;let a=[];for(let I of r)try{let s=await r5n(I.path,e,l);a.push(s)}catch{}if(a.length>0){let I=a.map(s=>({id:s.id,type:"function",function:{name:s.name,arguments:JSON.stringify(s.arguments)}}));n.push({role:"assistant",content:"I need to read the content of those paths to answer this request.",tool_calls:I}),n.push(...a.map(s=>({role:"tool",tool_call_id:s.id,content:s.result})))}return n}async function ojt(t,e){let l=t.filter(r=>Ijt(r.path));return(await Promise.all(l.map(async r=>{try{return{type:"image_url",image_url:{url:await n5n(r.path,e)}}}catch(a){e.error(`Failed to process image ${r.path}: ${a instanceof Error?a.message:String(a)}`);return}}))).filter(r=>r!==void 0)}var i7e=class{constructor(e,l){this.logger=e;this.session=l}messageQueue=[];async*preRequest(e){this.logger.debug("ImmediatePromptProcessor: Injecting immediate prompts");let n=(await this.session.getChatMessages()).length;for(;this.messageQueue.length>0;){let I=this.messageQueue.shift();this.session.emit("user.message",{content:I.prompt,attachments:I.attachments})}let a=(await this.session.getChatMessages()).slice(n);for(let I of a)e.messages.push(I),yield{kind:"message",message:I,turn:e.turn,source:"immediate-prompt"}}addMessage(e){this.messageQueue.push(e)}toJSON(){return"ImmediatePromptProcessor"}},wf=class t{sessionId;startTime;modifiedTime;logger;events=[];_chatMessages=[];_selectedModel;eventProcessingQueue=Promise.resolve();eventHandlers={};wildcardEventHandlers=[];isProcessing=!1;messageQueue=[];immediatePromptProcessor;mcpHost;workingDir;abortController;modelProvider;allowedTools;disabledTools;requestPermission;mcpServers;hooks;hmacKey;copilotToken;constructor(e={},l={}){this.sessionId=l.sessionId||cu(),this.startTime=l.startTime||new Date,this.modifiedTime=l.modifiedTime||this.startTime,this.logger=e.logger||new xd,this.modelProvider=e.modelProvider,this.allowedTools=e.allowedTools,this.disabledTools=e.disabledTools,this.requestPermission=e.requestPermission,this.mcpServers=e.mcpServers,this.hooks=e.hooks,this.hmacKey=e.hmacKey,this.copilotToken=e.copilotToken,this.workingDir=e.workingDirectory||process.cwd(),this.immediatePromptProcessor=new i7e(this.logger,this),this.abortController=e.abortController||new AbortController,uY(this.workingDir).then(n=>{if(n.found)return vEe(n.gitRoot,!0,this.workingDir)}).catch(n=>{this.logger.debug(`Failed to initialize custom instructions cache: ${n}`)})}get messageCount(){let e=this.events.find(n=>n.type==="session.import_legacy"),l=0;return e&&(l=(e.data.legacySession?.chatMessages||[]).filter(a=>a.role==="user"||a.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(a=>a.type==="session.import_legacy"||a.type==="user.message"),l;if(e?.type==="session.import_legacy"){let a=e.data.legacySession.chatMessages.find(I=>I.role==="user");a?.content&&(typeof a.content=="string"?l=a.content:l=a.content.find(I=>I.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(a=>{let I=a.charCodeAt(0);return I>=32&&I!==127}).join(""),r}static async fromEvents(e,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 t(l,{sessionId:n.data.sessionId,startTime:new Date(n.data.startTime)});r._selectedModel=n.data.selectedModel,r.events.push(n);for(let a=1;a<e.length;a++){let I=e[a];r.events.push(I),await r.processEventForState(I)}return r}on(e,l){return e==="*"?(this.wildcardEventHandlers.push(l),()=>{let n=this.wildcardEventHandlers.indexOf(l);n!==-1&&this.wildcardEventHandlers.splice(n,1)}):(this.eventHandlers[e]||(this.eventHandlers[e]=[]),this.eventHandlers[e].push(l),()=>{let n=this.eventHandlers[e];if(n){let r=n.indexOf(l);r!==-1&&n.splice(r,1)}})}emit(e,l,n=!1){let r=cu(),a=new Date().toISOString(),I=this.getLastEventId(),s={type:e,data:l,id:r,timestamp:a,parentId:I,...n&&{ephemeral:n}};this.events.push(s),this.enqueueEventProcessing(()=>this.processEventForState(s)).catch(o=>{this.logger.error(`Error emitting event: ${o instanceof Error?o.message:String(o)}`)}).catch(o=>{this.logger.error(`Error emitting event ${o instanceof Error?o.message:String(o)}`)}),[...this.eventHandlers[s.type]||[],...this.wildcardEventHandlers].forEach(o=>{try{o(s)}catch(c){this.logger.error(`Error in event handler for event type ${s.type}: ${c instanceof Error?c.message:String(c)}`)}})}emitEphemeral(e,l){this.emit(e,l,!0)}getEvents(){return this.events}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)}async setSelectedModel(e){let l=await this.getSelectedModel();this.emit("session.model_change",{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 ojt(e.data.attachments,this.logger);l.push(...r);let a=await sjt(e.data.attachments,{requestRequired:!1},this.logger);n.push(...a)}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||e.data.parentToolCallId)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":{if(e.data.parentToolCallId)break;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=a5n(this._chatMessages,this.logger);break;case"session.idle":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}}}async send(e,l={}){if((l.mode||"enqueue")==="immediate"&&this.isProcessing)this.immediatePromptProcessor.addMessage(e);else{if(this.messageQueue.push(e),this.isProcessing)return;for(this.isProcessing=!0,await this.initializeMcpHost();this.messageQueue.length>0;){let r=this.messageQueue.shift();await this.runAgenticLoop(r.prompt,r.attachments)}this.isProcessing=!1,this.emit("session.idle",{})}}async abort(){this.abortController.abort()}async initializeMcpHost(){if(!this.mcpHost&&this.mcpServers&&Object.keys(this.mcpServers).length>0)try{this.mcpHost=new HL(this.logger,{mcpServers:this.mcpServers},this.disabledTools),await this.mcpHost.startServers()}catch(e){this.logger.error(`Failed to initialize MCP host: ${e}`)}}async runAgenticLoop(e,l=[]){if(!this.modelProvider)throw new Error("Session must be created with modelProvider to use send/query methods");let n=new Map,r=new Map;try{let I=(await SL(this.hooks?.userPromptSubmitted,{timestamp:Date.now(),cwd:this.workingDir,prompt:e},this.logger))?.modifiedPrompt??e;this.emit("user.message",{content:Q6({problemStatement:I,capabilities:{}}),attachments:l});let o=new _X().setProblemStatement(I).setAgentModel(this.buildAgentModelString()).setGithubRepoName("copilot-sdk-session").setGithubRepoCommit("copilot-sdk-commit").setGithubRepoReadWrite(!1).setCopilotIntegrationId("copilot-developer-cli").setCopilotHmacKey(this.hmacKey).setCopilotToken(this.copilotToken).build();Yx();let c=await ume(o),d=c.service?.agent?.model,m=HB(d),G=m.agent,p=G??"sweagent-capi",A=m.model?{model:m.model}:void 0,Z=Mde(c,this.logger,G,A),W={location:this.workingDir,timeout:3e4,requireReasoning:!0,toolPartialResultCallback:(re,se)=>{this.emitEphemeral("tool.execution_partial_result",{toolCallId:re,partialOutput:se})},permissions:this.requestPermission?{requestRequired:!0,request:this.requestPermission}:{requestRequired:!1},shellConfig:(process.platform==="win32"?bp.powerShell:bp.bash).withScriptSafetyAssessor(async function(re){return{result:"completed",commands:[{identifier:re,readOnly:!1}],possiblePaths:[],hasWriteFileRedirection:!1,canOfferSessionApproval:!1}})},R=await K1e(W,this.logger),V=[];if(this.mcpHost)try{V=await this.mcpHost.getTools(c,this.logger,W.permissions)}catch(re){this.logger.error(`Failed to get MCP tools: ${re}`)}let v=[...R,...V].filter(re=>this.allowedTools?this.allowedTools.includes(re.name):this.disabledTools?!this.disabledTools.includes(re.name):!0),X=await uY(this.workingDir),O={...(U8()[p]?.[Z.model]??O8()).supports,reasoning:!0},T=await w6({location:X.found?X.gitRoot:"",version:uL(),currentWorkingDirectory:this.workingDir,parts:{},capabilities:O,toolConfigOverrides:W,tools:v,organizationCustomInstructions:void 0}),D=(await this.getChatMessages()).slice(0,-1),Ge={role:"user",content:Q6({customAgentPrompt:void 0,problemStatement:I,capabilities:O})},he=[...D,Ge];await SL(this.hooks?.sessionStart,{timestamp:Date.now(),cwd:this.workingDir,source:"new",initialPrompt:e},this.logger);let K=new j4(Ge,this.logger),U=Z.getCompletionWithTools(T,he,v,{failIfInitialInputsTooLong:!1,processors:{preRequest:[K,this.immediatePromptProcessor,new ET(this.logger)],onRequestError:[K]},executeToolsInParallel:!1,abortSignal:this.abortController.signal});for await(let re of U){if(this.abortController.signal.aborted){this.emit("abort",{reason:"user initiated"});break}switch(re.kind){case"message":{if(GL(re)){let se=T8(re)?await Promise.all(re.message.tool_calls.map(async We=>{let me=eL(We.function.arguments);n.set(We.id,We.function.name),r.set(We.id,me);let ve=await SL(this.hooks?.preToolUse,{timestamp:Date.now(),cwd:this.workingDir,toolName:We.function.name,toolArgs:me},this.logger);return{toolCallId:We.id,name:We.function.name,arguments:ve?.modifiedArgs??me}})):[];this.emit("assistant.message",{parentToolCallId:void 0,messageId:cu(),content:typeof re.message.content=="string"?re.message.content:"",toolRequests:se});for(let We of se)this.emit("tool.execution_start",{toolCallId:We.toolCallId,toolName:We.name,arguments:We.arguments})}else(re.message.role==="system"||re.message.role==="developer")&&this.emit("system.message",{role:re.message.role,content:typeof re.message.content=="string"?re.message.content:JSON.stringify(re.message.content),name:"name"in re.message?re.message.name:void 0});break}case"model_call_failure":{let se=new Error(re.modelCall?.error||"Model call failed");await SL(this.hooks?.errorOccurred,{timestamp:Date.now(),cwd:this.workingDir,error:se,errorContext:"model_call",recoverable:!0},this.logger),this.emit("session.error",{errorType:"model_call",message:se.message,stack:se.stack});break}case"tool_execution":{let We=(await SL(this.hooks?.postToolUse,{timestamp:Date.now(),cwd:this.workingDir,toolName:n.get(re.toolCallId)||"unknown",toolArgs:r.get(re.toolCallId)||{},toolResult:re.toolResult},this.logger))?.modifiedResult??re.toolResult,me=(We.resultType==="failure"?We.error:void 0)||We.sessionLog||We.textResultForLlm;this.emit("tool.execution_complete",{parentToolCallId:void 0,toolCallId:re.toolCallId,success:We.resultType==="success",result:We.resultType==="success"?{content:me}:void 0,error:We.resultType!=="success"?{message:me,code:We.resultType}:void 0});break}case"turn_started":{this.emit("assistant.turn_start",{turnId:`${re.turn}`});break}case"turn_ended":{this.emit("assistant.turn_end",{turnId:`${re.turn}`});break}case"response":case"images_removed":case"image_processing":case"history_truncated":case"turn_failed":case"turn_retry":case"model_call_success":this.logger.debug(`Ignoring event of kind: ${re.kind}`);break;default:wo(re,"Unhandled event type")}}}catch(a){await SL(this.hooks?.sessionEnd,{timestamp:Date.now(),cwd:this.workingDir,reason:"error",error:a instanceof Error?a:new Error(String(a))},this.logger),this.emit("session.error",{errorType:"query",message:a instanceof Error?a.message:String(a),stack:a instanceof Error?a.stack:void 0})}finally{await SL(this.hooks?.sessionEnd,{timestamp:Date.now(),cwd:this.workingDir,reason:"complete"},this.logger)}}buildAgentModelString(){if(!this.modelProvider)throw new Error("Session must be created with modelProvider");switch(this.modelProvider.type){case"openai":return`openai:${this.modelProvider.model}`;case"anthropic":return`anthropic:${this.modelProvider.model}`;case"copilot":return`capi:${this.modelProvider.model}`;default:throw new Error(`Unsupported provider: ${this.modelProvider.type}`)}}};function a5n(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 c of o.tool_calls)n.has(c.id)||l.push(c.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 a="The execution of this tool, or a previous tool was interrupted.";e.info(`Completing ${l.length} orphaned tool calls.`);let I=l.map(s=>({role:"tool",tool_call_id:s,content:a}));return[...t,...I]}var lQe=class{sessions;logger;options;lastAccessedSessionId;constructor(e){this.options=e,this.sessions=new Map,this.logger=e.logger||new xd}async createSession(){let e=new wf(this.options);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)}async closeSession(e){}};var fq=zl({command:Qt(),description:Qt(),timeout:LG().optional(),sessionId:Qt().optional(),async:ro().optional()}),c7e=zl({sessionId:Qt(),input:Qt(),delay:LG().optional()}),d7e=zl({sessionId:Qt(),delay:LG()}),u7e=zl({sessionId:Qt()}),ijt=Oh([fq,c7e,d7e,u7e]),I5n=zl({command:pr("view"),path:Qt(),view_range:nVe([LG(),LG()]).optional()}),s5n=zl({command:pr("create"),path:Qt(),file_text:Qt()}),o5n=zl({command:pr("str_replace"),path:Qt(),new_str:Qt().optional(),old_str:Qt()}),i5n=zl({command:pr("insert"),path:Qt(),insert_line:LG(),new_str:Qt()}),m7e=Kde("command",[I5n,s5n,o5n,i5n]),b7e=zl({path:Qt(),view_range:nVe([LG(),LG()]).optional()}),G7e=zl({path:Qt(),file_text:Qt()}),p7e=zl({path:Qt(),old_str:Qt(),new_str:Qt().optional()}),h7e=Oh([ijt,m7e,Sw()]),cjt=(t,e)=>{switch(t.type){case"copilot":return e.onCopilot(t);case"tool_call_requested":return e.onToolCallRequested(t);case"tool_call_completed":return e.onToolCallCompleted(t);default:wo(t,"Unknown groupable timeline entry type")}};function djt(t,e){switch(t.type){case"copilot":return e.onCopilot(t);case"error":return e.onError(t);case"group_tool_call_requested":return e.onGroupToolCallRequested(t);case"group_tool_call_completed":return e.onGroupToolCallCompleted(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:wo(t,"Unknown timeline entry type")}}var bO=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 mme=zl({type:pr("text"),text:Qt()}),c5n=zl({type:pr("refusal"),refusal:Qt()}),d5n=zl({type:pr("image_url"),image_url:zl({url:Qt(),detail:G0(["auto","low","high"]).optional()})}),u5n=zl({type:pr("input_audio"),input_audio:zl({data:Qt(),format:pr("wav").or(pr("mp3"))})}),m5n=zl({type:pr("file"),file:zl({file_date:Qt().optional(),file_id:Qt().optional(),filename:Qt().optional()})}),b5n=Oh([mme,d5n,u5n,m5n]),G5n=zl({name:Qt(),arguments:Qt()}),p5n=zl({name:Qt(),input:Qt()}),h5n=zl({id:Qt(),type:pr("function"),function:G5n}),A5n=zl({id:Qt(),type:pr("custom"),custom:p5n}),g5n=Oh([h5n,A5n]),Z5n=zl({name:Qt(),arguments:Qt()}),N5n=zl({id:Qt()}),W5n=zl({content:Oh([Qt(),Od(mme)]),role:pr("developer"),name:Qt().optional()}),y5n=zl({content:Oh([Qt(),Od(mme)]),role:pr("system"),name:Qt().optional()}),E5n=zl({content:Oh([Qt(),Od(b5n)]),role:pr("user"),name:Qt().optional()}),R5n=zl({content:Oh([Qt(),Od(Oh([mme,c5n]))]).nullable().optional(),role:pr("assistant"),name:Qt().optional(),refusal:Qt().nullable().optional(),audio:N5n.nullable().optional(),function_call:Z5n.nullable().optional(),tool_calls:Od(g5n).optional()}),Y5n=zl({content:Oh([Qt(),Od(mme)]),role:pr("tool"),tool_call_id:Qt()}),V5n=zl({content:Qt().nullable(),role:pr("function"),name:Qt()}),w5n=Oh([W5n,y5n,E5n,R5n,Y5n,V5n]),Q5n=zl({type:pr("copilot"),text:Qt(),isStreaming:ro().optional()}),F5n=zl({type:pr("error"),text:Qt()}),C5n=zl({type:pr("info"),text:Qt()}),v5n=zl({type:pr("user"),text:Qt()}),f5n=zl({type:pr("tool_call_requested"),callId:Qt(),name:Qt(),toolTitle:Qt().optional(),intentionSummary:Qt().nullable(),arguments:h7e,partialOutput:Qt().optional(),isHidden:ro().optional(),isAlwaysExpanded:ro().optional(),showNoContent:ro().optional()}),H5n=zl({type:pr("tool_call_completed"),callId:Qt(),name:Qt(),toolTitle:Qt().optional(),intentionSummary:Qt().nullable(),result:Oh([zl({type:pr("success"),log:Qt(),markdown:ro().optional()}),zl({type:pr("failure"),log:Qt(),markdown:ro().optional()}),zl({type:pr("rejected"),markdown:ro().optional()}),zl({type:pr("denied"),log:Qt(),markdown:ro().optional()})]),arguments:h7e,isHidden:ro().optional(),isAlwaysExpanded:ro().optional(),showNoContent:ro().optional()}),X5n=Oh([Q5n,F5n,C5n,v5n,f5n,H5n]),k5n=X5n.and(zl({id:Qt(),timestamp:rVe.date()})),A7e=zl({sessionId:Qt(),startTime:rVe.date(),chatMessages:Od(w5n),timeline:Od(k5n),selectedModel:G0(oO).optional()}),bme=xwe(A7e.parse,"history-session");var jm=zl({id:Qt().uuid(),timestamp:Qt().datetime(),parentId:Qt().uuid().nullable(),ephemeral:ro().optional()}),ujt=zl({parentToolCallId:Qt().optional()}),L5n=jm.extend({type:pr("session.start"),data:zl({sessionId:Qt(),version:LG(),producer:Qt(),copilotVersion:Qt(),startTime:Qt().datetime(),selectedModel:Qt().optional()})}),J5n=jm.extend({type:pr("session.resume"),data:zl({resumeTime:Qt().datetime(),eventCount:LG()})}),x5n=jm.extend({type:pr("session.error"),data:zl({errorType:Qt(),message:Qt(),stack:Qt().optional()})}),S5n=jm.extend({type:pr("session.info"),data:zl({infoType:Qt(),message:Qt()})}),B5n=jm.extend({type:pr("session.model_change"),data:zl({previousModel:Qt().optional(),newModel:Qt()})}),T5n=jm.extend({type:pr("session.import_legacy"),data:zl({legacySession:A7e,importTime:Qt().datetime(),sourceFile:Qt()})}),O5n=jm.extend({type:pr("session.idle"),ephemeral:pr(!0),data:zl({})}),U5n=zl({type:G0(["file","directory"]),path:Qt(),displayName:Qt()}),M5n=jm.extend({type:pr("user.message"),data:zl({content:Qt(),attachments:Od(U5n).optional()})}),_5n=jm.extend({type:pr("assistant.turn_start"),data:zl({turnId:Qt()})}),D5n=jm.extend({type:pr("assistant.message"),data:zl({messageId:Qt(),content:Qt(),toolRequests:Od(zl({toolCallId:Qt(),name:Qt(),arguments:Sw()})).optional()}).merge(ujt)}),z5n=jm.extend({type:pr("assistant.turn_end"),data:zl({turnId:Qt()})}),P5n=jm.extend({type:pr("assistant.usage"),ephemeral:pr(!0),data:zl({model:Qt().optional(),inputTokens:LG().optional(),outputTokens:LG().optional(),cost:LG().optional(),duration:LG().optional(),initiator:Qt().optional()})}),j5n=jm.extend({type:pr("abort"),data:zl({reason:Qt()})}),K5n=jm.extend({type:pr("tool.user_requested"),data:zl({toolCallId:Qt(),toolName:Qt(),arguments:Sw()})}),q5n=jm.extend({type:pr("tool.execution_start"),data:zl({toolCallId:Qt(),toolName:Qt(),arguments:Sw()})}),$5n=jm.extend({type:pr("tool.execution_partial_result"),ephemeral:pr(!0),data:zl({toolCallId:Qt(),partialOutput:Qt()})}),e4n=jm.extend({type:pr("tool.execution_complete"),data:zl({toolCallId:Qt(),success:ro(),isUserRequested:ro().optional(),result:zl({content:Qt()}).optional(),error:zl({message:Qt(),code:Qt().optional()}).optional()}).merge(ujt)}),t4n=jm.extend({type:pr("hook.start"),data:zl({hookInvocationId:Qt(),hookType:Qt(),input:Sw()})}),l4n=jm.extend({type:pr("hook.end"),data:zl({hookInvocationId:Qt(),hookType:Qt(),output:Sw(),success:ro(),error:zl({message:Qt(),stack:Qt().optional()}).optional()})}),n4n=jm.extend({type:pr("system.message"),data:zl({content:Qt(),role:G0(["system","developer"]),name:Qt().optional(),metadata:zl({promptVersion:Qt().optional(),variables:nY(Sw()).optional()}).optional()})}),mjt=Kde("type",[L5n,J5n,x5n,O5n,S5n,B5n,T5n,M5n,_5n,D5n,z5n,P5n,j5n,K5n,q5n,$5n,e4n,t4n,l4n,n4n]);var GO=Kzt(mjt.parse,"session");var nQe=class{constructor(e,l,n,r=!1,a){this.session=e;this.logger=l;this.flushDebounceMs=n;this.shouldSaveSession=r;this.legacySourceFile=a;this.unsubscribe=this.session.on("*",I=>{I.ephemeral||(this.unflushedEvents.push(I),!this.shouldSaveSession&&I.type==="user.message"&&(this.shouldSaveSession=!0),I.type!=="session.resume"&&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 GO.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 bjt(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())}}},rQe=class extends lQe{sessionWriters={};copilotVersion;flushDebounceMs;constructor({version:e,flushDebounceMs:l,...n}){super({...n}),this.copilotVersion=e||"unknown",this.flushDebounceMs=l||100}async createSession(e){let l=e?.sessionId??cu(),n=new Date,r=new wf(this.options,{sessionId:l,startTime:n});return this.sessionWriters[l]=new nQe(r,this.logger,this.flushDebounceMs),r.emit("session.start",{sessionId:l,version:1,producer:"copilot-agent",copilotVersion:this.copilotVersion,startTime:n.toISOString(),selectedModel:e?.selectedModel}),r}async getSession(e,l=!0){let n,r;try{n=await this.loadSession(e)}catch{try{let a=await this.loadLegacySession(e);n=a.session,r=a.legacySourceFile}catch{return}}return this.sessionWriters[e]||(this.sessionWriters[e]=new nQe(n,this.logger,this.flushDebounceMs,!0,r)),l&&n.emit("session.resume",{resumeTime:new Date().toISOString(),eventCount:n.getEvents().length}),n}async saveSession(e){await this.sessionWriters[e.sessionId]?.flush()}async loadSession(e){let l=await GO.load(e);return await wf.fromEvents(l,this.options)}async loadLegacySession(e){let n=(await bme.directoryFiles()).filter(o=>{let c=o.match(/^session_(.+)_(\d+)\.json$/);return c&&c[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 a=await bme.load(r);if(!a)throw new Error(`Failed to load legacy session from ${r}`);let I=new Date(a.startTime),s=new wf(this.options,{sessionId:a.sessionId,startTime:I});return s.emit("session.start",{sessionId:a.sessionId,version:1,producer:"copilot-agent",copilotVersion:this.copilotVersion,startTime:I.toISOString(),selectedModel:a.selectedModel}),s.emit("session.import_legacy",{legacySession:{sessionId:a.sessionId,startTime:I,chatMessages:a.chatMessages,timeline:a.timeline,selectedModel:a.selectedModel},importTime:new Date().toISOString(),sourceFile:r}),this.logger.info(`Loaded legacy session ${e} from ${r}`),{session:s,legacySourceFile:bme.path(r.replace(/\.json$/,""))}}async listSessions(){let e=await GO.directoryFilesWithMetadata(),l=await bme.directoryFilesWithMetadata(),n=await Promise.all(e.map(async I=>({sessionId:I.file.replace(".jsonl",""),startTime:I.ctime,modifiedTime:I.mtime}))),r=(await Promise.all(l.map(async I=>{let s=I.file.match(/^session_(.+)_(\d+)\.json$/);return s?{sessionId:s[1],startTime:I.ctime,modifiedTime:I.mtime}:null}))).filter(I=>I!==null);this.logger.debug(`Found ${n.length} JSONL sessions and ${r.length} legacy sessions`);let a=new Map;for(let I of r)a.set(I.sessionId,I);for(let I of n)a.set(I.sessionId,I);return Array.from(a.values()).sort((I,s)=>s.modifiedTime.getTime()-I.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){await this.closeSession(e);let l=GO.path(e.sessionId);this.logger.info(`Deleting session file ${l}`),await bjt(l)}async closeSession(e){this.logger.info(`Closing session ${e.sessionId}`);let l=this.sessionWriters[e.sessionId];l&&(await l.flush(),l.dispose(),delete this.sessionWriters[e.sessionId])}getSessionsDirectory(){return r4n(GO.home(),GO.directory())}setLogger(e){this.logger=e}};function _c(t){return t()}var Gme;function I4n(t,e){return t.includes("\x1B[?")&&t.includes(e)}async function s4n(t){let e=process.stdin.isRaw;e||process.stdin.setRawMode(!0);try{return await t()}finally{e||process.stdin.setRawMode(!1)}}function Gjt(t,e,l){return new Promise(n=>{let r="",a,I=()=>{a=void 0,process.stdin.removeListener("data",s),n(!1)},s=o=>{a!==void 0&&(r+=o.toString(),I4n(r,e)&&(process.stdin.removeListener("data",s),clearTimeout(a),a=void 0,n(!0)))};process.stdin.on("data",s),process.stdout.write("\x1B["+t),a=setTimeout(I,l)})}async function o4n(){return!(!(process.stdin.isTTY&&process.stdout.isTTY)||!await Gjt("?u","u",200)||!await Gjt("c","c",1e3))}async function hjt(){Gme===void 0&&(Gme=await s4n(o4n),Gme===!0&&(i4n(),process.on("exit",pjt),process.on("SIGTERM",pjt)))}function i4n(){process.stdout.write("\x1B[>1u")}function pjt(){process.stdout.write("\x1B[<u"),Gme=void 0}function aQe(){return Gme===!0}function hme(t,e=!1){let l=t.length,n=0,r="",a=0,I=16,s=0,o=0,c=0,d=0,m=0;function G(v,X){let S=0,O=0;for(;S<v||!X;){let T=t.charCodeAt(n);if(T>=48&&T<=57)O=O*16+T-48;else if(T>=65&&T<=70)O=O*16+T-65+10;else if(T>=97&&T<=102)O=O*16+T-97+10;else break;n++,S++}return S<v&&(O=-1),O}function p(v){n=v,r="",a=0,I=16,m=0}function A(){let v=n;if(t.charCodeAt(n)===48)n++;else for(n++;n<t.length&&Hq(t.charCodeAt(n));)n++;if(n<t.length&&t.charCodeAt(n)===46)if(n++,n<t.length&&Hq(t.charCodeAt(n)))for(n++;n<t.length&&Hq(t.charCodeAt(n));)n++;else return m=3,t.substring(v,n);let X=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&&Hq(t.charCodeAt(n))){for(n++;n<t.length&&Hq(t.charCodeAt(n));)n++;X=n}else m=3;return t.substring(v,X)}function Z(){let v="",X=n;for(;;){if(n>=l){v+=t.substring(X,n),m=2;break}let S=t.charCodeAt(n);if(S===34){v+=t.substring(X,n),n++;break}if(S===92){if(v+=t.substring(X,n),n++,n>=l){m=2;break}switch(t.charCodeAt(n++)){case 34:v+='"';break;case 92:v+="\\";break;case 47:v+="/";break;case 98:v+="\b";break;case 102:v+="\f";break;case 110:v+=`
|
|
2045
|
+
`),n={};for(let r of l){let a=r.split(/\s+/);if(a.length>=3){let I=a[0],s=a[1],o=a[2].replace(/[()]/g,"");n[I]||(n[I]={Name:I,FetchURL:"",PushURL:""}),o==="fetch"?n[I].FetchURL=s:o==="push"&&(n[I].PushURL=s)}}return Object.values(n)}async function VPt(t){try{let{stdout:e}=await Ime("git",["status","--porcelain"],{cwd:t,encoding:"utf8",timeout:5e3,maxBuffer:1048576});return e.trim().length>0}catch{return!1}}async function wPt(t){try{let{stdout:e}=await Ime("git",["rev-parse","--abbrev-ref","HEAD"],{cwd:t,encoding:"utf8",timeout:5e3,maxBuffer:1048576}),l=e.trim();if(l==="HEAD"){let{stdout:n}=await Ime("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}}var rjt=$e(njt(),1);async function $Xn(t={}){let e=await Mgt();return zgt((0,rjt.default)({},e,t))}async function ume(t={}){if(uD())throw new Error("Settings have already been initialized");return $Xn(t)}import{promises as e5n}from"fs";import ajt from"path";var t5n=3*1024*1024;function Ijt(t){let e=ajt.extname(t).toLowerCase();return[".png",".jpg",".jpeg",".gif",".webp"].includes(e)}function l5n(t){switch(ajt.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 n5n(t,e){e.debug(`Processing local image file: ${t}`);let l=await e5n.readFile(t),n=l5n(t);if(!n)throw new Error(`Unsupported image format: ${t}`);let r=new roe,a=await c0e(e,r,t5n,toe,n,l);if(!a)throw new Error(`Image too large or couldn't be processed: ${t}`);let I=a.toString("base64");return`data:${n};base64,${I}`}async function r5n(t,e,l){let n=cu();try{let r=await pBe({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,l);return{id:n,name:"view",arguments:{path:t},result:r.textResultForLlm||""}}catch(r){return{id:n,name:"view",arguments:{path:t},result:`Error reading ${t}: ${r}`}}}async function sjt(t,e,l){let n=[],r=t.filter(I=>!Ijt(I.path));if(r.length===0)return n;let a=[];for(let I of r)try{let s=await r5n(I.path,e,l);a.push(s)}catch{}if(a.length>0){let I=a.map(s=>({id:s.id,type:"function",function:{name:s.name,arguments:JSON.stringify(s.arguments)}}));n.push({role:"assistant",content:"I need to read the content of those paths to answer this request.",tool_calls:I}),n.push(...a.map(s=>({role:"tool",tool_call_id:s.id,content:s.result})))}return n}async function ojt(t,e){let l=t.filter(r=>Ijt(r.path));return(await Promise.all(l.map(async r=>{try{return{type:"image_url",image_url:{url:await n5n(r.path,e)}}}catch(a){e.error(`Failed to process image ${r.path}: ${a instanceof Error?a.message:String(a)}`);return}}))).filter(r=>r!==void 0)}var i7e=class{constructor(e,l){this.logger=e;this.session=l}messageQueue=[];async*preRequest(e){this.logger.debug("ImmediatePromptProcessor: Injecting immediate prompts");let n=(await this.session.getChatMessages()).length;for(;this.messageQueue.length>0;){let I=this.messageQueue.shift();this.session.emit("user.message",{content:I.prompt,attachments:I.attachments})}let a=(await this.session.getChatMessages()).slice(n);for(let I of a)e.messages.push(I),yield{kind:"message",message:I,turn:e.turn,source:"immediate-prompt"}}addMessage(e){this.messageQueue.push(e)}toJSON(){return"ImmediatePromptProcessor"}},wf=class t{sessionId;startTime;modifiedTime;logger;events=[];_chatMessages=[];_selectedModel;eventProcessingQueue=Promise.resolve();eventHandlers={};wildcardEventHandlers=[];isProcessing=!1;messageQueue=[];immediatePromptProcessor;mcpHost;workingDir;abortController;modelProvider;allowedTools;disabledTools;requestPermission;mcpServers;hooks;hmacKey;copilotToken;constructor(e={},l={}){this.sessionId=l.sessionId||cu(),this.startTime=l.startTime||new Date,this.modifiedTime=l.modifiedTime||this.startTime,this.logger=e.logger||new xd,this.modelProvider=e.modelProvider,this.allowedTools=e.allowedTools,this.disabledTools=e.disabledTools,this.requestPermission=e.requestPermission,this.mcpServers=e.mcpServers,this.hooks=e.hooks,this.hmacKey=e.hmacKey,this.copilotToken=e.copilotToken,this.workingDir=e.workingDirectory||process.cwd(),this.immediatePromptProcessor=new i7e(this.logger,this),this.abortController=e.abortController||new AbortController,uY(this.workingDir).then(n=>{if(n.found)return vEe(n.gitRoot,!0,this.workingDir)}).catch(n=>{this.logger.debug(`Failed to initialize custom instructions cache: ${n}`)})}get messageCount(){let e=this.events.find(n=>n.type==="session.import_legacy"),l=0;return e&&(l=(e.data.legacySession?.chatMessages||[]).filter(a=>a.role==="user"||a.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(a=>a.type==="session.import_legacy"||a.type==="user.message"),l;if(e?.type==="session.import_legacy"){let a=e.data.legacySession.chatMessages.find(I=>I.role==="user");a?.content&&(typeof a.content=="string"?l=a.content:l=a.content.find(I=>I.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(a=>{let I=a.charCodeAt(0);return I>=32&&I!==127}).join(""),r}static async fromEvents(e,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 t(l,{sessionId:n.data.sessionId,startTime:new Date(n.data.startTime)});r._selectedModel=n.data.selectedModel,r.events.push(n);for(let a=1;a<e.length;a++){let I=e[a];r.events.push(I),await r.processEventForState(I)}return r}on(e,l){return e==="*"?(this.wildcardEventHandlers.push(l),()=>{let n=this.wildcardEventHandlers.indexOf(l);n!==-1&&this.wildcardEventHandlers.splice(n,1)}):(this.eventHandlers[e]||(this.eventHandlers[e]=[]),this.eventHandlers[e].push(l),()=>{let n=this.eventHandlers[e];if(n){let r=n.indexOf(l);r!==-1&&n.splice(r,1)}})}emit(e,l,n=!1){let r=cu(),a=new Date().toISOString(),I=this.getLastEventId(),s={type:e,data:l,id:r,timestamp:a,parentId:I,...n&&{ephemeral:n}};this.events.push(s),this.enqueueEventProcessing(()=>this.processEventForState(s)).catch(o=>{this.logger.error(`Error emitting event: ${o instanceof Error?o.message:String(o)}`)}).catch(o=>{this.logger.error(`Error emitting event ${o instanceof Error?o.message:String(o)}`)}),[...this.eventHandlers[s.type]||[],...this.wildcardEventHandlers].forEach(o=>{try{o(s)}catch(c){this.logger.error(`Error in event handler for event type ${s.type}: ${c instanceof Error?c.message:String(c)}`)}})}emitEphemeral(e,l){this.emit(e,l,!0)}getEvents(){return this.events}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)}async setSelectedModel(e){let l=await this.getSelectedModel();this.emit("session.model_change",{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 ojt(e.data.attachments,this.logger);l.push(...r);let a=await sjt(e.data.attachments,{requestRequired:!1},this.logger);n.push(...a)}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||e.data.parentToolCallId)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":{if(e.data.parentToolCallId)break;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=a5n(this._chatMessages,this.logger);break;case"session.idle":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}}}async send(e,l={}){if((l.mode||"enqueue")==="immediate"&&this.isProcessing)this.immediatePromptProcessor.addMessage(e);else{if(this.messageQueue.push(e),this.isProcessing)return;for(this.isProcessing=!0,await this.initializeMcpHost();this.messageQueue.length>0;){let r=this.messageQueue.shift();await this.runAgenticLoop(r.prompt,r.attachments)}this.isProcessing=!1,this.emit("session.idle",{})}}async abort(){this.abortController.abort()}async initializeMcpHost(){if(!this.mcpHost&&this.mcpServers&&Object.keys(this.mcpServers).length>0)try{this.mcpHost=new HL(this.logger,{mcpServers:this.mcpServers},this.disabledTools),await this.mcpHost.startServers()}catch(e){this.logger.error(`Failed to initialize MCP host: ${e}`)}}async runAgenticLoop(e,l=[]){if(!this.modelProvider)throw new Error("Session must be created with modelProvider to use send/query methods");let n=new Map,r=new Map;try{let I=(await SL(this.hooks?.userPromptSubmitted,{timestamp:Date.now(),cwd:this.workingDir,prompt:e},this.logger))?.modifiedPrompt??e;this.emit("user.message",{content:Q6({problemStatement:I,capabilities:{}}),attachments:l});let o=new _X().setProblemStatement(I).setAgentModel(this.buildAgentModelString()).setGithubRepoName("copilot-sdk-session").setGithubRepoCommit("copilot-sdk-commit").setGithubRepoReadWrite(!1).setCopilotIntegrationId("copilot-developer-cli").setCopilotHmacKey(this.hmacKey).setCopilotToken(this.copilotToken).build();Yx();let c=await ume(o),d=c.service?.agent?.model,m=HB(d),G=m.agent,p=G??"sweagent-capi",A=m.model?{model:m.model}:void 0,Z=Mde(c,this.logger,G,A),W={location:this.workingDir,timeout:3e4,requireReasoning:!0,toolPartialResultCallback:(re,se)=>{this.emitEphemeral("tool.execution_partial_result",{toolCallId:re,partialOutput:se})},permissions:this.requestPermission?{requestRequired:!0,request:this.requestPermission}:{requestRequired:!1},shellConfig:(process.platform==="win32"?bp.powerShell:bp.bash).withScriptSafetyAssessor(async function(re){return{result:"completed",commands:[{identifier:re,readOnly:!1}],possiblePaths:[],hasWriteFileRedirection:!1,canOfferSessionApproval:!1}})},R=await K1e(W,this.logger),V=[];if(this.mcpHost)try{V=await this.mcpHost.getTools(c,this.logger,W.permissions)}catch(re){this.logger.error(`Failed to get MCP tools: ${re}`)}let v=[...R,...V].filter(re=>this.allowedTools?this.allowedTools.includes(re.name):this.disabledTools?!this.disabledTools.includes(re.name):!0),X=await uY(this.workingDir),O={...(U8()[p]?.[Z.model]??O8()).supports,reasoning:!0},T=await w6({location:X.found?X.gitRoot:"",version:uL(),currentWorkingDirectory:this.workingDir,parts:{},capabilities:O,toolConfigOverrides:W,tools:v,organizationCustomInstructions:void 0}),D=(await this.getChatMessages()).slice(0,-1),Ge={role:"user",content:Q6({customAgentPrompt:void 0,problemStatement:I,capabilities:O})},he=[...D,Ge];await SL(this.hooks?.sessionStart,{timestamp:Date.now(),cwd:this.workingDir,source:"new",initialPrompt:e},this.logger);let K=new j4(Ge,this.logger),U=Z.getCompletionWithTools(T,he,v,{failIfInitialInputsTooLong:!1,processors:{preRequest:[K,this.immediatePromptProcessor,new ET(this.logger)],onRequestError:[K]},executeToolsInParallel:!1,abortSignal:this.abortController.signal});for await(let re of U){if(this.abortController.signal.aborted){this.emit("abort",{reason:"user initiated"});break}switch(re.kind){case"message":{if(GL(re)){let se=T8(re)?await Promise.all(re.message.tool_calls.map(async We=>{let me=eL(We.function.arguments);n.set(We.id,We.function.name),r.set(We.id,me);let ve=await SL(this.hooks?.preToolUse,{timestamp:Date.now(),cwd:this.workingDir,toolName:We.function.name,toolArgs:me},this.logger);return{toolCallId:We.id,name:We.function.name,arguments:ve?.modifiedArgs??me}})):[];this.emit("assistant.message",{parentToolCallId:void 0,messageId:cu(),content:typeof re.message.content=="string"?re.message.content:"",toolRequests:se});for(let We of se)this.emit("tool.execution_start",{toolCallId:We.toolCallId,toolName:We.name,arguments:We.arguments})}else(re.message.role==="system"||re.message.role==="developer")&&this.emit("system.message",{role:re.message.role,content:typeof re.message.content=="string"?re.message.content:JSON.stringify(re.message.content),name:"name"in re.message?re.message.name:void 0});break}case"model_call_failure":{let se=new Error(re.modelCall?.error||"Model call failed");await SL(this.hooks?.errorOccurred,{timestamp:Date.now(),cwd:this.workingDir,error:se,errorContext:"model_call",recoverable:!0},this.logger),this.emit("session.error",{errorType:"model_call",message:se.message,stack:se.stack});break}case"tool_execution":{let We=(await SL(this.hooks?.postToolUse,{timestamp:Date.now(),cwd:this.workingDir,toolName:n.get(re.toolCallId)||"unknown",toolArgs:r.get(re.toolCallId)||{},toolResult:re.toolResult},this.logger))?.modifiedResult??re.toolResult,me=(We.resultType==="failure"?We.error:void 0)||We.sessionLog||We.textResultForLlm;this.emit("tool.execution_complete",{parentToolCallId:void 0,toolCallId:re.toolCallId,success:We.resultType==="success",result:We.resultType==="success"?{content:me}:void 0,error:We.resultType!=="success"?{message:me,code:We.resultType}:void 0});break}case"turn_started":{this.emit("assistant.turn_start",{turnId:`${re.turn}`});break}case"turn_ended":{this.emit("assistant.turn_end",{turnId:`${re.turn}`});break}case"response":case"images_removed":case"image_processing":case"history_truncated":case"turn_failed":case"turn_retry":case"model_call_success":this.logger.debug(`Ignoring event of kind: ${re.kind}`);break;default:wo(re,"Unhandled event type")}}}catch(a){await SL(this.hooks?.sessionEnd,{timestamp:Date.now(),cwd:this.workingDir,reason:"error",error:a instanceof Error?a:new Error(String(a))},this.logger),this.emit("session.error",{errorType:"query",message:a instanceof Error?a.message:String(a),stack:a instanceof Error?a.stack:void 0})}finally{await SL(this.hooks?.sessionEnd,{timestamp:Date.now(),cwd:this.workingDir,reason:"complete"},this.logger)}}buildAgentModelString(){if(!this.modelProvider)throw new Error("Session must be created with modelProvider");switch(this.modelProvider.type){case"openai":return`openai:${this.modelProvider.model}`;case"anthropic":return`anthropic:${this.modelProvider.model}`;case"copilot":return`capi:${this.modelProvider.model}`;default:throw new Error(`Unsupported provider: ${this.modelProvider.type}`)}}};function a5n(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 c of o.tool_calls)n.has(c.id)||l.push(c.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 a="The execution of this tool, or a previous tool was interrupted.";e.info(`Completing ${l.length} orphaned tool calls.`);let I=l.map(s=>({role:"tool",tool_call_id:s,content:a}));return[...t,...I]}var lQe=class{sessions;logger;options;lastAccessedSessionId;constructor(e){this.options=e,this.sessions=new Map,this.logger=e.logger||new xd}async createSession(){let e=new wf(this.options);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)}async closeSession(e){}};var fq=zl({command:Qt(),description:Qt(),timeout:LG().optional(),sessionId:Qt().optional(),async:ro().optional()}),c7e=zl({sessionId:Qt(),input:Qt(),delay:LG().optional()}),d7e=zl({sessionId:Qt(),delay:LG()}),u7e=zl({sessionId:Qt()}),ijt=Oh([fq,c7e,d7e,u7e]),I5n=zl({command:pr("view"),path:Qt(),view_range:nVe([LG(),LG()]).optional()}),s5n=zl({command:pr("create"),path:Qt(),file_text:Qt()}),o5n=zl({command:pr("str_replace"),path:Qt(),new_str:Qt().optional(),old_str:Qt()}),i5n=zl({command:pr("insert"),path:Qt(),insert_line:LG(),new_str:Qt()}),m7e=Kde("command",[I5n,s5n,o5n,i5n]),b7e=zl({path:Qt(),view_range:nVe([LG(),LG()]).optional()}),G7e=zl({path:Qt(),file_text:Qt()}),p7e=zl({path:Qt(),old_str:Qt(),new_str:Qt().optional()}),h7e=Oh([ijt,m7e,Sw()]),cjt=(t,e)=>{switch(t.type){case"copilot":return e.onCopilot(t);case"tool_call_requested":return e.onToolCallRequested(t);case"tool_call_completed":return e.onToolCallCompleted(t);default:wo(t,"Unknown groupable timeline entry type")}};function djt(t,e){switch(t.type){case"copilot":return e.onCopilot(t);case"error":return e.onError(t);case"group_tool_call_requested":return e.onGroupToolCallRequested(t);case"group_tool_call_completed":return e.onGroupToolCallCompleted(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:wo(t,"Unknown timeline entry type")}}var bO=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 mme=zl({type:pr("text"),text:Qt()}),c5n=zl({type:pr("refusal"),refusal:Qt()}),d5n=zl({type:pr("image_url"),image_url:zl({url:Qt(),detail:G0(["auto","low","high"]).optional()})}),u5n=zl({type:pr("input_audio"),input_audio:zl({data:Qt(),format:pr("wav").or(pr("mp3"))})}),m5n=zl({type:pr("file"),file:zl({file_date:Qt().optional(),file_id:Qt().optional(),filename:Qt().optional()})}),b5n=Oh([mme,d5n,u5n,m5n]),G5n=zl({name:Qt(),arguments:Qt()}),p5n=zl({name:Qt(),input:Qt()}),h5n=zl({id:Qt(),type:pr("function"),function:G5n}),A5n=zl({id:Qt(),type:pr("custom"),custom:p5n}),g5n=Oh([h5n,A5n]),Z5n=zl({name:Qt(),arguments:Qt()}),N5n=zl({id:Qt()}),W5n=zl({content:Oh([Qt(),Od(mme)]),role:pr("developer"),name:Qt().optional()}),y5n=zl({content:Oh([Qt(),Od(mme)]),role:pr("system"),name:Qt().optional()}),E5n=zl({content:Oh([Qt(),Od(b5n)]),role:pr("user"),name:Qt().optional()}),R5n=zl({content:Oh([Qt(),Od(Oh([mme,c5n]))]).nullable().optional(),role:pr("assistant"),name:Qt().optional(),refusal:Qt().nullable().optional(),audio:N5n.nullable().optional(),function_call:Z5n.nullable().optional(),tool_calls:Od(g5n).optional()}),Y5n=zl({content:Oh([Qt(),Od(mme)]),role:pr("tool"),tool_call_id:Qt()}),V5n=zl({content:Qt().nullable(),role:pr("function"),name:Qt()}),w5n=Oh([W5n,y5n,E5n,R5n,Y5n,V5n]),Q5n=zl({type:pr("copilot"),text:Qt(),isStreaming:ro().optional()}),F5n=zl({type:pr("error"),text:Qt()}),C5n=zl({type:pr("info"),text:Qt()}),v5n=zl({type:pr("user"),text:Qt()}),f5n=zl({type:pr("tool_call_requested"),callId:Qt(),name:Qt(),toolTitle:Qt().optional(),intentionSummary:Qt().nullable(),arguments:h7e,partialOutput:Qt().optional(),isHidden:ro().optional(),isAlwaysExpanded:ro().optional(),showNoContent:ro().optional()}),H5n=zl({type:pr("tool_call_completed"),callId:Qt(),name:Qt(),toolTitle:Qt().optional(),intentionSummary:Qt().nullable(),result:Oh([zl({type:pr("success"),log:Qt(),markdown:ro().optional()}),zl({type:pr("failure"),log:Qt(),markdown:ro().optional()}),zl({type:pr("rejected"),markdown:ro().optional()}),zl({type:pr("denied"),log:Qt(),markdown:ro().optional()})]),arguments:h7e,isHidden:ro().optional(),isAlwaysExpanded:ro().optional(),showNoContent:ro().optional()}),X5n=Oh([Q5n,F5n,C5n,v5n,f5n,H5n]),k5n=X5n.and(zl({id:Qt(),timestamp:rVe.date()})),A7e=zl({sessionId:Qt(),startTime:rVe.date(),chatMessages:Od(w5n),timeline:Od(k5n),selectedModel:G0(oO).optional()}),bme=xwe(A7e.parse,"history-session");var jm=zl({id:Qt().uuid(),timestamp:Qt().datetime(),parentId:Qt().uuid().nullable(),ephemeral:ro().optional()}),ujt=zl({parentToolCallId:Qt().optional()}),L5n=jm.extend({type:pr("session.start"),data:zl({sessionId:Qt(),version:LG(),producer:Qt(),copilotVersion:Qt(),startTime:Qt().datetime(),selectedModel:Qt().optional()})}),J5n=jm.extend({type:pr("session.resume"),data:zl({resumeTime:Qt().datetime(),eventCount:LG()})}),x5n=jm.extend({type:pr("session.error"),data:zl({errorType:Qt(),message:Qt(),stack:Qt().optional()})}),S5n=jm.extend({type:pr("session.info"),data:zl({infoType:Qt(),message:Qt()})}),B5n=jm.extend({type:pr("session.model_change"),data:zl({previousModel:Qt().optional(),newModel:Qt()})}),T5n=jm.extend({type:pr("session.import_legacy"),data:zl({legacySession:A7e,importTime:Qt().datetime(),sourceFile:Qt()})}),O5n=jm.extend({type:pr("session.idle"),ephemeral:pr(!0),data:zl({})}),U5n=zl({type:G0(["file","directory"]),path:Qt(),displayName:Qt()}),M5n=jm.extend({type:pr("user.message"),data:zl({content:Qt(),attachments:Od(U5n).optional()})}),_5n=jm.extend({type:pr("assistant.turn_start"),data:zl({turnId:Qt()})}),D5n=jm.extend({type:pr("assistant.message"),data:zl({messageId:Qt(),content:Qt(),toolRequests:Od(zl({toolCallId:Qt(),name:Qt(),arguments:Sw()})).optional()}).merge(ujt)}),z5n=jm.extend({type:pr("assistant.turn_end"),data:zl({turnId:Qt()})}),P5n=jm.extend({type:pr("assistant.usage"),ephemeral:pr(!0),data:zl({model:Qt().optional(),inputTokens:LG().optional(),outputTokens:LG().optional(),cost:LG().optional(),duration:LG().optional(),initiator:Qt().optional()})}),j5n=jm.extend({type:pr("abort"),data:zl({reason:Qt()})}),K5n=jm.extend({type:pr("tool.user_requested"),data:zl({toolCallId:Qt(),toolName:Qt(),arguments:Sw()})}),q5n=jm.extend({type:pr("tool.execution_start"),data:zl({toolCallId:Qt(),toolName:Qt(),arguments:Sw()})}),$5n=jm.extend({type:pr("tool.execution_partial_result"),ephemeral:pr(!0),data:zl({toolCallId:Qt(),partialOutput:Qt()})}),e4n=jm.extend({type:pr("tool.execution_complete"),data:zl({toolCallId:Qt(),success:ro(),isUserRequested:ro().optional(),result:zl({content:Qt()}).optional(),error:zl({message:Qt(),code:Qt().optional()}).optional()}).merge(ujt)}),t4n=jm.extend({type:pr("hook.start"),data:zl({hookInvocationId:Qt(),hookType:Qt(),input:Sw()})}),l4n=jm.extend({type:pr("hook.end"),data:zl({hookInvocationId:Qt(),hookType:Qt(),output:Sw(),success:ro(),error:zl({message:Qt(),stack:Qt().optional()}).optional()})}),n4n=jm.extend({type:pr("system.message"),data:zl({content:Qt(),role:G0(["system","developer"]),name:Qt().optional(),metadata:zl({promptVersion:Qt().optional(),variables:nY(Sw()).optional()}).optional()})}),mjt=Kde("type",[L5n,J5n,x5n,O5n,S5n,B5n,T5n,M5n,_5n,D5n,z5n,P5n,j5n,K5n,q5n,$5n,e4n,t4n,l4n,n4n]);var GO=Kzt(mjt.parse,"session");var nQe=class{constructor(e,l,n,r=!1,a){this.session=e;this.logger=l;this.flushDebounceMs=n;this.shouldSaveSession=r;this.legacySourceFile=a;this.unsubscribe=this.session.on("*",I=>{I.ephemeral||(this.unflushedEvents.push(I),!this.shouldSaveSession&&I.type==="user.message"&&(this.shouldSaveSession=!0),I.type!=="session.resume"&&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 GO.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 bjt(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())}}},rQe=class extends lQe{sessionWriters={};copilotVersion;flushDebounceMs;constructor({version:e,flushDebounceMs:l,...n}){super({...n}),this.copilotVersion=e||"unknown",this.flushDebounceMs=l||100}async createSession(e){let l=e?.sessionId??cu(),n=new Date,r=new wf(this.options,{sessionId:l,startTime:n});return this.sessionWriters[l]=new nQe(r,this.logger,this.flushDebounceMs),r.emit("session.start",{sessionId:l,version:1,producer:"copilot-agent",copilotVersion:this.copilotVersion,startTime:n.toISOString(),selectedModel:e?.selectedModel}),r}async getSession(e,l=!0){let n,r;try{n=await this.loadSession(e)}catch{try{let a=await this.loadLegacySession(e);n=a.session,r=a.legacySourceFile}catch{return}}return this.sessionWriters[e]||(this.sessionWriters[e]=new nQe(n,this.logger,this.flushDebounceMs,!0,r)),l&&n.emit("session.resume",{resumeTime:new Date().toISOString(),eventCount:n.getEvents().length}),n}async saveSession(e){await this.sessionWriters[e.sessionId]?.flush()}async loadSession(e){let l=await GO.load(e);return await wf.fromEvents(l,this.options)}async loadLegacySession(e){let n=(await bme.directoryFiles()).filter(o=>{let c=o.match(/^session_(.+)_(\d+)\.json$/);return c&&c[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 a=await bme.load(r);if(!a)throw new Error(`Failed to load legacy session from ${r}`);let I=new Date(a.startTime),s=new wf(this.options,{sessionId:a.sessionId,startTime:I});return s.emit("session.start",{sessionId:a.sessionId,version:1,producer:"copilot-agent",copilotVersion:this.copilotVersion,startTime:I.toISOString(),selectedModel:a.selectedModel}),s.emit("session.import_legacy",{legacySession:{sessionId:a.sessionId,startTime:I,chatMessages:a.chatMessages,timeline:a.timeline,selectedModel:a.selectedModel},importTime:new Date().toISOString(),sourceFile:r}),this.logger.info(`Loaded legacy session ${e} from ${r}`),{session:s,legacySourceFile:bme.path(r.replace(/\.json$/,""))}}async listSessions(){let e=await GO.directoryFilesWithMetadata(),l=await bme.directoryFilesWithMetadata(),n=await Promise.all(e.map(async I=>({sessionId:I.file.replace(".jsonl",""),startTime:I.birthtime,modifiedTime:I.mtime}))),r=(await Promise.all(l.map(async I=>{let s=I.file.match(/^session_(.+)_(\d+)\.json$/);return s?{sessionId:s[1],startTime:I.birthtime,modifiedTime:I.mtime}:null}))).filter(I=>I!==null);this.logger.debug(`Found ${n.length} JSONL sessions and ${r.length} legacy sessions`);let a=new Map;for(let I of r)a.set(I.sessionId,I);for(let I of n)a.set(I.sessionId,I);return Array.from(a.values()).sort((I,s)=>s.modifiedTime.getTime()-I.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){await this.closeSession(e);let l=GO.path(e.sessionId);this.logger.info(`Deleting session file ${l}`),await bjt(l)}async closeSession(e){this.logger.info(`Closing session ${e.sessionId}`);let l=this.sessionWriters[e.sessionId];l&&(await l.flush(),l.dispose(),delete this.sessionWriters[e.sessionId])}getSessionsDirectory(){return r4n(GO.home(),GO.directory())}setLogger(e){this.logger=e}};function _c(t){return t()}var Gme;function I4n(t,e){return t.includes("\x1B[?")&&t.includes(e)}async function s4n(t){let e=process.stdin.isRaw;e||process.stdin.setRawMode(!0);try{return await t()}finally{e||process.stdin.setRawMode(!1)}}function Gjt(t,e,l){return new Promise(n=>{let r="",a,I=()=>{a=void 0,process.stdin.removeListener("data",s),n(!1)},s=o=>{a!==void 0&&(r+=o.toString(),I4n(r,e)&&(process.stdin.removeListener("data",s),clearTimeout(a),a=void 0,n(!0)))};process.stdin.on("data",s),process.stdout.write("\x1B["+t),a=setTimeout(I,l)})}async function o4n(){return!(!(process.stdin.isTTY&&process.stdout.isTTY)||!await Gjt("?u","u",200)||!await Gjt("c","c",1e3))}async function hjt(){Gme===void 0&&(Gme=await s4n(o4n),Gme===!0&&(i4n(),process.on("exit",pjt),process.on("SIGTERM",pjt)))}function i4n(){process.stdout.write("\x1B[>1u")}function pjt(){process.stdout.write("\x1B[<u"),Gme=void 0}function aQe(){return Gme===!0}function hme(t,e=!1){let l=t.length,n=0,r="",a=0,I=16,s=0,o=0,c=0,d=0,m=0;function G(v,X){let S=0,O=0;for(;S<v||!X;){let T=t.charCodeAt(n);if(T>=48&&T<=57)O=O*16+T-48;else if(T>=65&&T<=70)O=O*16+T-65+10;else if(T>=97&&T<=102)O=O*16+T-97+10;else break;n++,S++}return S<v&&(O=-1),O}function p(v){n=v,r="",a=0,I=16,m=0}function A(){let v=n;if(t.charCodeAt(n)===48)n++;else for(n++;n<t.length&&Hq(t.charCodeAt(n));)n++;if(n<t.length&&t.charCodeAt(n)===46)if(n++,n<t.length&&Hq(t.charCodeAt(n)))for(n++;n<t.length&&Hq(t.charCodeAt(n));)n++;else return m=3,t.substring(v,n);let X=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&&Hq(t.charCodeAt(n))){for(n++;n<t.length&&Hq(t.charCodeAt(n));)n++;X=n}else m=3;return t.substring(v,X)}function Z(){let v="",X=n;for(;;){if(n>=l){v+=t.substring(X,n),m=2;break}let S=t.charCodeAt(n);if(S===34){v+=t.substring(X,n),n++;break}if(S===92){if(v+=t.substring(X,n),n++,n>=l){m=2;break}switch(t.charCodeAt(n++)){case 34:v+='"';break;case 92:v+="\\";break;case 47:v+="/";break;case 98:v+="\b";break;case 102:v+="\f";break;case 110:v+=`
|
|
2046
2046
|
`;break;case 114:v+="\r";break;case 116:v+=" ";break;case 117:let T=G(4,!0);T>=0?v+=String.fromCharCode(T):m=4;break;default:m=5}X=n;continue}if(S>=0&&S<=31)if(pme(S)){v+=t.substring(X,n),m=2;break}else m=6;n++}return v}function W(){if(r="",m=0,a=n,o=s,d=c,n>=l)return a=l,I=17;let v=t.charCodeAt(n);if(g7e(v)){do n++,r+=String.fromCharCode(v),v=t.charCodeAt(n);while(g7e(v));return I=15}if(pme(v))return n++,r+=String.fromCharCode(v),v===13&&t.charCodeAt(n)===10&&(n++,r+=`
|
|
2047
2047
|
`),s++,c=n,I=14;switch(v){case 123:return n++,I=1;case 125:return n++,I=2;case 91:return n++,I=3;case 93:return n++,I=4;case 58:return n++,I=6;case 44:return n++,I=5;case 34:return n++,r=Z(),I=10;case 47:let X=n-1;if(t.charCodeAt(n+1)===47){for(n+=2;n<l&&!pme(t.charCodeAt(n));)n++;return r=t.substring(X,n),I=12}if(t.charCodeAt(n+1)===42){n+=2;let S=l-1,O=!1;for(;n<S;){let T=t.charCodeAt(n);if(T===42&&t.charCodeAt(n+1)===47){n+=2,O=!0;break}n++,pme(T)&&(T===13&&t.charCodeAt(n)===10&&n++,s++,c=n)}return O||(n++,m=1),r=t.substring(X,n),I=13}return r+=String.fromCharCode(v),n++,I=16;case 45:if(r+=String.fromCharCode(v),n++,n===l||!Hq(t.charCodeAt(n)))return I=16;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return r+=A(),I=11;default:for(;n<l&&R(v);)n++,v=t.charCodeAt(n);if(a!==n){switch(r=t.substring(a,n),r){case"true":return I=8;case"false":return I=9;case"null":return I=7}return I=16}return r+=String.fromCharCode(v),n++,I=16}}function R(v){if(g7e(v)||pme(v))return!1;switch(v){case 125:case 93:case 123:case 91:case 34:case 58:case 44:case 47:return!1}return!0}function V(){let v;do v=W();while(v>=12&&v<=15);return v}return{setPosition:p,getPosition:()=>n,scan:e?V:W,getToken:()=>I,getTokenValue:()=>r,getTokenOffset:()=>a,getTokenLength:()=>n-a,getTokenStartLine:()=>o,getTokenStartCharacter:()=>a-d,getTokenError:()=>m}}function g7e(t){return t===32||t===9}function pme(t){return t===10||t===13}function Hq(t){return t>=48&&t<=57}var Ajt;(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"})(Ajt||(Ajt={}));var sy=new Array(20).fill(0).map((t,e)=>" ".repeat(e)),Xq=200,Z7e={" ":{"\n":new Array(Xq).fill(0).map((t,e)=>`
|
|
2048
2048
|
`+" ".repeat(e)),"\r":new Array(Xq).fill(0).map((t,e)=>"\r"+" ".repeat(e)),"\r\n":new Array(Xq).fill(0).map((t,e)=>`\r
|
|
@@ -2429,7 +2429,7 @@ Please report this to https://github.com/markedjs/marked.`,t){let n="<p>An error
|
|
|
2429
2429
|
|
|
2430
2430
|
${n}`:""),isTruncated:!0}}return{problemStatement:t+(e?`
|
|
2431
2431
|
|
|
2432
|
-
${e}`:""),isTruncated:!1}}function Ail(t){let e=Math.floor((Date.now()-t.getTime())/1e3);if(e<60)return`${e}s`;let l=Math.floor(e/60);return l<60?`${l}m`:`${Math.floor(l/60)}h`}var ytt=({date:t,prefix:e="",suffix:l=""})=>{let[,n]=(0,Z7.useState)(0);return(0,Z7.useEffect)(()=>{let r,a=()=>{Math.floor((Date.now()-t.getTime())/1e3)<60?r=setInterval(()=>{n(o=>o+1)},1e3):r=setInterval(()=>{n(o=>o+1)},6e4)};a();let I=setInterval(()=>{Math.floor((Date.now()-t.getTime())/1e3)>=60&&(clearInterval(r),a(),clearInterval(I))},1e3);return()=>{clearInterval(r),clearInterval(I)}},[t]),Z7.default.createElement(oe,null,e,Ail(t),l)};var gil=({state:t,onAdvance:e,onCancel:l,onStartNewSession:n})=>{let{theme:r}=Tn();Zc((c,d)=>{if(t.error&&d.escape){l();return}t.stage==="tracking"&&d.ctrl&&c==="n"&&(n?n():l())});let a=c=>{c.value?e():l()},I={label:"Yes",value:!0},s={label:"No, cancel",value:!1},o=()=>{switch(t.stage){case"uncommitted_changes_check":return t.isLoading?sn.default.createElement(Be,{flexDirection:"column",borderStyle:"round",paddingX:1,gap:1},sn.default.createElement(oe,{bold:!0},"Delegate the current session to Copilot Coding Agent?"),sn.default.createElement(tQ,{color:r.MUTED},"Checking for uncommitted changes")):t.hasUncommittedChanges&&t.fileCount?sn.default.createElement(Be,{flexDirection:"column",borderStyle:"round",paddingX:1,gap:1},sn.default.createElement(oe,{bold:!0},"Delegate the current session to Copilot Coding Agent?"),sn.default.createElement(Be,{flexDirection:"column"},sn.default.createElement(oe,null,"Uncommitted changes detected:"),t.fileCount.staged>0&&sn.default.createElement(oe,null,"- Staged files: ",sn.default.createElement(oe,{color:r.ACCENT},t.fileCount.staged)),t.fileCount.unstaged>0&&sn.default.createElement(oe,null,"- Modified files: ",sn.default.createElement(oe,{color:r.ACCENT},t.fileCount.unstaged)),t.fileCount.untracked>0&&sn.default.createElement(oe,null,"- Untracked files: ",sn.default.createElement(oe,{color:r.ACCENT},t.fileCount.untracked))),sn.default.createElement(oe,null,"Would you like to commit all changes before delegating? This will create a checkpoint commit: ",sn.default.createElement(oe,{color:r.ACCENT},t.commitMessage)),sn.default.createElement(F0,{items:[I],onSelect:a,escapeItem:s,onEscape:l})):null;case"confirm":return t.isLoading?sn.default.createElement(Be,{flexDirection:"column",borderStyle:"round",paddingX:1},sn.default.createElement(oe,{bold:!0},"Delegate the current session to Copilot Coding Agent?"),sn.default.createElement(oe,null," "),sn.default.createElement(tQ,{color:r.MUTED},"Loading repository information")):sn.default.createElement(Be,{flexDirection:"column",borderStyle:"round",paddingX:1,gap:1},sn.default.createElement(oe,{bold:!0},"Delegate the current session to Copilot Coding Agent?"),sn.default.createElement(Be,{flexDirection:"column"},sn.default.createElement(oe,null,"Prompt:"),sn.default.createElement(Be,{borderStyle:"round",paddingX:1},sn.default.createElement(oe,null,t.prompt.length>1e3?`${t.prompt.slice(0,1e3)}...`:t.prompt))),sn.default.createElement(oe,null,"Copilot will delegate your local changes to the"," ",sn.default.createElement(oe,{color:r.ACCENT},t.repository)," repository on"," ",sn.default.createElement(oe,{color:r.ACCENT},t.asyncBranch)," (based on"," ",sn.default.createElement(oe,{color:r.ACCENT},t.headBranch),") and draft a pull request based on your prompt."),sn.default.createElement(F0,{items:[I],onSelect:a,escapeItem:s,onEscape:l}));case"processing":return sn.default.createElement(Be,{flexDirection:"column",borderStyle:"round",paddingX:1},sn.default.createElement(oe,{bold:!0},"Delegating session to Copilot Coding Agent",t.processingStartTime&&sn.default.createElement(sn.default.Fragment,null," (",sn.default.createElement(ytt,{date:t.processingStartTime}),")"),":"),t.operations&&sn.default.createElement(Be,{marginBottom:1},sn.default.createElement(pil,{operations:t.operations,state:t,theme:r})),sn.default.createElement(oe,null,"Logs will begin streaming here once Copilot Coding Agent starts work."));case"tracking":{let c=()=>{let G=t.sessionState,p=G==="queued"||G==="in_progress";return sn.default.createElement(Be,null,sn.default.createElement(oe,{bold:!0},t.prTitle||"Untitled"," #",t.prNumber||"..."," - "),(()=>{if(p)return sn.default.createElement(sn.default.Fragment,null,sn.default.createElement(tQ,{color:r.COPILOT}),sn.default.createElement(oe,null,G==="queued"?"Queued":"Processing"));let A,Z,W;switch(G){case"waiting_for_user":A=r.WARNING,Z="Waiting for user action",W="\u25CF";break;case"idle":A=r.MUTED,Z="Session paused",W="\u25CF";break;case"completed":A=r.SUCCESS,Z="Completed",W="\u25CF";break;case"failed":A=r.ERROR,Z="Failed",W="\u2717";break;case"timed_out":A=r.ERROR,Z="Timed out",W="\u2717";break;default:A=r.MUTED,Z="Initializing...",W="\u25CF"}return sn.default.createElement(sn.default.Fragment,null,sn.default.createElement(oe,{color:A},W," "),sn.default.createElement(oe,null,Z))})())},d=()=>sn.default.createElement(oe,null,sn.default.createElement(oe,{color:r.ACCENT},t.repository),t.prDraft&&" \u25CF Draft"," \xB7 Created by ",t.jobCreatedBy||"Copilot",t.jobCreatedAt&&sn.default.createElement(sn.default.Fragment,null," (",sn.default.createElement(ytt,{date:t.jobCreatedAt}),")")),m=()=>{let G=t.prChangedFiles||0;if(G===0)return null;let p=t.prFiles?t.prFiles.length:0,A=G-p;return sn.default.createElement(Be,{flexDirection:"column"},sn.default.createElement(oe,null,"Files changed (",G,"):"),t.prFiles&&t.prFiles.map((Z,W)=>sn.default.createElement(oe,{key:W},"\u2514 ",Z.filename," ",sn.default.createElement(oe,{color:r.SUCCESS},"+",Z.additions)," ",sn.default.createElement(oe,{color:r.ERROR},"-",Z.deletions))),A>0&&sn.default.createElement(oe,{dimColor:!0},"\u2514 ",A," more file",A===1?"":"s"," ","modified/added/deleted"))};return sn.default.createElement(Be,{flexDirection:"column"},sn.default.createElement(Be,{flexDirection:"column",borderStyle:"round",paddingX:1,gap:1},sn.default.createElement(Be,{flexDirection:"column"},c(),d()),t.jobUrl&&sn.default.createElement(oe,null,t.jobUrl),m()),sn.default.createElement(Be,null,sn.default.createElement(c7,{shortcut:"Ctrl+N",description:"Start a new session"})))}default:return sn.default.createElement(Be,{flexDirection:"column",borderStyle:"round",paddingX:1},sn.default.createElement(oe,{color:r.ERROR},"Unknown stage: ",t.stage))}};if(t.error){let c=t.error instanceof bO,d=c?t.error:null,m=c?"Job Status Pending":"Error Details:",G=c?r.WARNING:r.ERROR,p=c&&d?sn.default.createElement(sn.default.Fragment,null,sn.default.createElement(oe,null,"We are taking longer than usual to start the task. To save you waiting, we have stopped checking the status. You can track the latest status by visiting"," ",d.prUrl?`your pull request ${d.prUrl}`:"https://github.com/copilot and checking your Tasks","."),sn.default.createElement(oe,null,"If this issue persists, please contact support.")):sn.default.createElement(oe,null,t.error.message);return sn.default.createElement(Be,{flexDirection:"column"},sn.default.createElement(Be,{flexDirection:"column",borderStyle:"round",paddingX:1},sn.default.createElement(oe,{bold:!0,color:G},m),sn.default.createElement(Be,{marginTop:1,flexDirection:"column",gap:1},p)),sn.default.createElement(Be,null,sn.default.createElement(c7,{shortcut:"Esc",description:"Cancel"})))}return o()};gil.displayName="RemoteJobDelegationControlArea";var Zil=gil;var gbe=$e($t(),1);var Nil=({onConfirm:t})=>gbe.default.createElement(C0,{title:"Remember screen reader mode",body:gbe.default.createElement(Be,{flexDirection:"column",gap:1},gbe.default.createElement(oe,null,"Copilot can enable screen reader optimizations in future sessions using the `screen_reader` configuration setting."),gbe.default.createElement(oe,null,"Do you want to remember screen reader mode for future sessions?")),items:[{label:"Yes, remember screen reader mode",value:"yes"},{label:"No, never ask me again",value:"never"}],escapeItem:{label:"No, ask me next time",value:"no"},onConfirm:t});var JO=$e($t(),1);function Wil({sessionId:t,onClose:e}){let{theme:l}=Tn();return Zc((n,r)=>{(r.return||r.escape)&&e()}),JO.default.createElement(Be,{flexDirection:"column",borderColor:l.BORDER},JO.default.createElement(Be,{flexDirection:"row",gap:1},JO.default.createElement(oe,{color:l.ACCENT,bold:!0},"Session ID:"),JO.default.createElement(oe,{color:l.FG},t)),JO.default.createElement(Be,{flexDirection:"column",marginTop:1},JO.default.createElement(oe,{color:l.MUTED},"Hit Enter or Esc to continue")))}var ys=$e($t(),1);function yil(t){let l=new Date().getTime()-t.getTime(),n=Math.floor(l/1e3),r=Math.floor(n/60),a=Math.floor(r/60),I=Math.floor(a/24),s=Math.floor(I/7),o=Math.floor(I/30),c=Math.floor(I/365);return n<60?"just now":r<60?`${r}m ago`:a<24?`${a}h ago`:I<7?`${I}d ago`:s<4?`${s}w ago`:o<12?`${o}mo ago`:`${c}y ago`}function jzn(t){return t.sort((e,l)=>{let n=e.isModified?e.modifiedTime.getTime():e.startTime.getTime();return(l.isModified?l.modifiedTime.getTime():l.startTime.getTime())-n})}function Eil({sessionManager:t,onSessionSelected:e,onCancel:l,logger:n}){let{theme:r}=Tn(),[a,I]=(0,ys.useState)([]),[s,o]=(0,ys.useState)(0),[c,d]=(0,ys.useState)(!0),[m,G]=(0,ys.useState)(null);(0,ys.useEffect)(()=>{async function Z(){try{let W=await t.listSessions();if(n.info(`Found ${W.length} sessions`),W.length===0){G("No previous sessions found"),d(!1);return}let R=W.map(X=>async()=>{let S={sessionId:X.sessionId,startTime:X.startTime,modifiedTime:X.modifiedTime,isModified:Math.abs(X.modifiedTime.getTime()-X.startTime.getTime())>6e4,summary:"(no message content)",messageCount:0};try{let O=await t.getSession(X.sessionId,!1);return O?{...S,summary:O.summary||S.summary,messageCount:O.messageCount}:S}catch{return S}}),V=10,v=[];for(let X=0;X<R.length;X+=V){let S=R.slice(X,X+V),O=await Promise.all(S.map(P=>P()));v.push(...O);let T=jzn(v);I(T),d(!1)}}catch(W){G(`Failed to load sessions: ${W instanceof Error?W.message:String(W)}`),d(!1)}}Z()},[t]),Zc((Z,W)=>{if(c||m){W.escape&&l();return}W.upArrow&&s>0?o(s-1):W.downArrow&&s<a.length-1?o(s+1):W.return&&a.length>0?e(a[s].sessionId):W.escape&&l()});let p=()=>ys.default.createElement(Be,{paddingBottom:1,paddingLeft:3,flexDirection:"row"},ys.default.createElement(oe,{color:r.MUTED,bold:!0},"#".padEnd(5)),ys.default.createElement(oe,{color:r.MUTED,bold:!0},"Modified".padEnd(12)),ys.default.createElement(oe,{color:r.MUTED,bold:!0},"Created".padEnd(12)),ys.default.createElement(oe,{color:r.MUTED,bold:!0},"Msg".padEnd(5)),ys.default.createElement(oe,{color:r.MUTED,bold:!0},"Summary")),A=(Z,W,R)=>{let V=R?r.SELECTED:r.FG,v=R?r.SELECTED:r.MUTED,X=`${W+1}.`.padEnd(5),S=Z.isModified?Z.modifiedTime:Z.startTime,T=yil(S).padEnd(12),x=yil(Z.startTime).padEnd(12),D=Z.messageCount.toString().padEnd(5),ae=Z.summary||"";return ys.default.createElement(Be,{flexDirection:"row",key:Z.sessionId},ys.default.createElement(oe,{dimColor:!R,color:R?v:void 0},X),ys.default.createElement(oe,{color:v},T),ys.default.createElement(oe,{color:v},x),ys.default.createElement(oe,{color:v},D),ys.default.createElement(oe,{color:V},ae))};return c?ys.default.createElement(Be,{flexDirection:"column"},ys.default.createElement(oe,{color:r.ACCENT,bold:!0},"Loading sessions..."),ys.default.createElement(oe,{color:r.MUTED},"Press Esc to cancel")):m?ys.default.createElement(Be,{flexDirection:"column"},ys.default.createElement(oe,{color:r.ERROR,bold:!0},m),ys.default.createElement(oe,{color:r.MUTED},"Press Esc to continue")):a.length===0?ys.default.createElement(Be,{flexDirection:"column"},ys.default.createElement(oe,{color:r.ACCENT,bold:!0},"No previous sessions found"),ys.default.createElement(oe,{color:r.MUTED},"Press Esc to continue")):ys.default.createElement(Be,{flexDirection:"column"},ys.default.createElement(oe,{color:r.FG,bold:!0},"Select a session to resume:"),ys.default.createElement(Be,{marginTop:1,flexDirection:"column"},p(),ys.default.createElement(Be,null,ys.default.createElement(s7,{items:a,selectedIndex:s,maxRows:10,renderItem:A,showScrollHints:!0}))),ys.default.createElement(Be,{marginTop:1},ys.default.createElement(oe,{color:r.MUTED},"Use \u2191\u2193 to navigate, Enter to select, Esc to cancel")))}var N7=$e($t(),1);var Kzn=45,qzn=t=>{let{theme:e}=Tn(),l=(n,r,a)=>{let I=a?e.SELECTED:e.MUTED,s=n.aliases&&n.aliases.length>0?`, ${n.aliases.join(", ")}`:"",o=`${n.name}${s}${n.args?` ${n.args}`:""}`;return N7.default.createElement(Be,{flexDirection:"row",key:n.name},N7.default.createElement(Be,{width:Kzn},N7.default.createElement(oe,{color:I,wrap:"truncate"},o)),N7.default.createElement(oe,{color:I,wrap:"truncate"},n.help))};return N7.default.createElement(s7,{items:t.options,selectedIndex:t.selectedIndex,maxRows:t.maxRows,renderItem:l,showScrollHints:t.showScrollHints??!1})},Ril=qzn;var L0=$e($t(),1);var $zn=100,ePn=1e3,tPn=({text:t,color:e,shimmerColor:l})=>{let[n,r]=(0,L0.useState)(0);return(0,L0.useEffect)(()=>{let a=setTimeout(()=>{r(I=>I===t.length?0:I===t.length-1?t.length:I+1)},n===t.length?ePn:$zn);return()=>clearTimeout(a)},[n,t.length]),L0.default.createElement(oe,null,t.split("").map((a,I)=>L0.default.createElement(oe,{key:I,color:I===n?l:e},a)))},Yil=t=>{let{hideToggleHelp:e}=vFe(),{theme:l}=Tn(),n="\xB7",r=t.mode==="executing"?"Executing":t.mode==="cancelling"?"Cancelling":t.currentIntent??"Thinking",a=t.mode!=="cancelling"&&!e,I=t.streamingResponseSize&&t.streamingResponseSize>0?`(Esc to cancel ${n} ${EE(t.streamingResponseSize,1)})`:"(Esc to cancel)";return L0.default.createElement(Be,{flexDirection:"row",gap:1},L0.default.createElement(Be,{flexDirection:"row"},L0.default.createElement(tQ,{color:l.COPILOT}),L0.default.createElement(tPn,{text:r,color:l.COPILOT,shimmerColor:l.COPILOT_BRIGHT})),a&&L0.default.createElement(oe,{color:l.MUTED},I))};var wI=$e($t(),1);var eJ=(t,e)=>{if(!t)return{color:e.MUTED,icon:"\u25CB",label:"In Progress"};switch(t){case"in_progress":return{color:e.MUTED,icon:"\u25CB",label:"In Progress"};case"success":return{color:e.SUCCESS,icon:"\u2713",label:"Success"};case"rejected":return{color:e.ERROR,icon:"\u2717",label:"Rejected"};case"denied":return{color:e.ERROR,icon:"\u2717",label:"Denied"};case"failure":return{color:e.ERROR,icon:"\u2717",label:"Failed"};default:wo(t,`Unhandled result type: ${t}`)}};var _f=$e($t(),1);var J0=$e($t(),1);var W7="local_shell";function wil(t,e=8){return t.includes(" ")?t.split(`
|
|
2432
|
+
${e}`:""),isTruncated:!1}}function Ail(t){let e=Math.floor((Date.now()-t.getTime())/1e3);if(e<60)return`${e}s`;let l=Math.floor(e/60);return l<60?`${l}m`:`${Math.floor(l/60)}h`}var ytt=({date:t,prefix:e="",suffix:l=""})=>{let[,n]=(0,Z7.useState)(0);return(0,Z7.useEffect)(()=>{let r,a=()=>{Math.floor((Date.now()-t.getTime())/1e3)<60?r=setInterval(()=>{n(o=>o+1)},1e3):r=setInterval(()=>{n(o=>o+1)},6e4)};a();let I=setInterval(()=>{Math.floor((Date.now()-t.getTime())/1e3)>=60&&(clearInterval(r),a(),clearInterval(I))},1e3);return()=>{clearInterval(r),clearInterval(I)}},[t]),Z7.default.createElement(oe,null,e,Ail(t),l)};var gil=({state:t,onAdvance:e,onCancel:l,onStartNewSession:n})=>{let{theme:r}=Tn();Zc((c,d)=>{if(t.error&&d.escape){l();return}t.stage==="tracking"&&d.ctrl&&c==="n"&&(n?n():l())});let a=c=>{c.value?e():l()},I={label:"Yes",value:!0},s={label:"No, cancel",value:!1},o=()=>{switch(t.stage){case"uncommitted_changes_check":return t.isLoading?sn.default.createElement(Be,{flexDirection:"column",borderStyle:"round",paddingX:1,gap:1},sn.default.createElement(oe,{bold:!0},"Delegate the current session to Copilot Coding Agent?"),sn.default.createElement(tQ,{color:r.MUTED},"Checking for uncommitted changes")):t.hasUncommittedChanges&&t.fileCount?sn.default.createElement(Be,{flexDirection:"column",borderStyle:"round",paddingX:1,gap:1},sn.default.createElement(oe,{bold:!0},"Delegate the current session to Copilot Coding Agent?"),sn.default.createElement(Be,{flexDirection:"column"},sn.default.createElement(oe,null,"Uncommitted changes detected:"),t.fileCount.staged>0&&sn.default.createElement(oe,null,"- Staged files: ",sn.default.createElement(oe,{color:r.ACCENT},t.fileCount.staged)),t.fileCount.unstaged>0&&sn.default.createElement(oe,null,"- Modified files: ",sn.default.createElement(oe,{color:r.ACCENT},t.fileCount.unstaged)),t.fileCount.untracked>0&&sn.default.createElement(oe,null,"- Untracked files: ",sn.default.createElement(oe,{color:r.ACCENT},t.fileCount.untracked))),sn.default.createElement(oe,null,"Would you like to commit all changes before delegating? This will create a checkpoint commit: ",sn.default.createElement(oe,{color:r.ACCENT},t.commitMessage)),sn.default.createElement(F0,{items:[I],onSelect:a,escapeItem:s,onEscape:l})):null;case"confirm":return t.isLoading?sn.default.createElement(Be,{flexDirection:"column",borderStyle:"round",paddingX:1},sn.default.createElement(oe,{bold:!0},"Delegate the current session to Copilot Coding Agent?"),sn.default.createElement(oe,null," "),sn.default.createElement(tQ,{color:r.MUTED},"Loading repository information")):sn.default.createElement(Be,{flexDirection:"column",borderStyle:"round",paddingX:1,gap:1},sn.default.createElement(oe,{bold:!0},"Delegate the current session to Copilot Coding Agent?"),sn.default.createElement(Be,{flexDirection:"column"},sn.default.createElement(oe,null,"Prompt:"),sn.default.createElement(Be,{borderStyle:"round",paddingX:1},sn.default.createElement(oe,null,t.prompt.length>1e3?`${t.prompt.slice(0,1e3)}...`:t.prompt))),sn.default.createElement(oe,null,"Copilot will delegate your local changes to the"," ",sn.default.createElement(oe,{color:r.ACCENT},t.repository)," repository on"," ",sn.default.createElement(oe,{color:r.ACCENT},t.asyncBranch)," (based on"," ",sn.default.createElement(oe,{color:r.ACCENT},t.headBranch),") and draft a pull request based on your prompt."),sn.default.createElement(F0,{items:[I],onSelect:a,escapeItem:s,onEscape:l}));case"processing":return sn.default.createElement(Be,{flexDirection:"column",borderStyle:"round",paddingX:1},sn.default.createElement(oe,{bold:!0},"Delegating session to Copilot Coding Agent",t.processingStartTime&&sn.default.createElement(sn.default.Fragment,null," (",sn.default.createElement(ytt,{date:t.processingStartTime}),")"),":"),t.operations&&sn.default.createElement(Be,{marginBottom:1},sn.default.createElement(pil,{operations:t.operations,state:t,theme:r})),sn.default.createElement(oe,null,"Logs will begin streaming here once Copilot Coding Agent starts work."));case"tracking":{let c=()=>{let G=t.sessionState,p=G==="queued"||G==="in_progress";return sn.default.createElement(Be,null,sn.default.createElement(oe,{bold:!0},t.prTitle||"Untitled"," #",t.prNumber||"..."," - "),(()=>{if(p)return sn.default.createElement(sn.default.Fragment,null,sn.default.createElement(tQ,{color:r.COPILOT}),sn.default.createElement(oe,null,G==="queued"?"Queued":"Processing"));let A,Z,W;switch(G){case"waiting_for_user":A=r.WARNING,Z="Waiting for user action",W="\u25CF";break;case"idle":A=r.MUTED,Z="Session paused",W="\u25CF";break;case"completed":A=r.SUCCESS,Z="Completed",W="\u25CF";break;case"failed":A=r.ERROR,Z="Failed",W="\u2717";break;case"timed_out":A=r.ERROR,Z="Timed out",W="\u2717";break;default:A=r.MUTED,Z="Initializing...",W="\u25CF"}return sn.default.createElement(sn.default.Fragment,null,sn.default.createElement(oe,{color:A},W," "),sn.default.createElement(oe,null,Z))})())},d=()=>sn.default.createElement(oe,null,sn.default.createElement(oe,{color:r.ACCENT},t.repository),t.prDraft&&" \u25CF Draft"," \xB7 Created by ",t.jobCreatedBy||"Copilot",t.jobCreatedAt&&sn.default.createElement(sn.default.Fragment,null," (",sn.default.createElement(ytt,{date:t.jobCreatedAt}),")")),m=()=>{let G=t.prChangedFiles||0;if(G===0)return null;let p=t.prFiles?t.prFiles.length:0,A=G-p;return sn.default.createElement(Be,{flexDirection:"column"},sn.default.createElement(oe,null,"Files changed (",G,"):"),t.prFiles&&t.prFiles.map((Z,W)=>sn.default.createElement(oe,{key:W},"\u2514 ",Z.filename," ",sn.default.createElement(oe,{color:r.SUCCESS},"+",Z.additions)," ",sn.default.createElement(oe,{color:r.ERROR},"-",Z.deletions))),A>0&&sn.default.createElement(oe,{dimColor:!0},"\u2514 ",A," more file",A===1?"":"s"," ","modified/added/deleted"))};return sn.default.createElement(Be,{flexDirection:"column"},sn.default.createElement(Be,{flexDirection:"column",borderStyle:"round",paddingX:1,gap:1},sn.default.createElement(Be,{flexDirection:"column"},c(),d()),t.jobUrl&&sn.default.createElement(oe,null,t.jobUrl),m()),sn.default.createElement(Be,null,sn.default.createElement(c7,{shortcut:"Ctrl+N",description:"Start a new session"})))}default:return sn.default.createElement(Be,{flexDirection:"column",borderStyle:"round",paddingX:1},sn.default.createElement(oe,{color:r.ERROR},"Unknown stage: ",t.stage))}};if(t.error){let c=t.error instanceof bO,d=c?t.error:null,m=c?"Job Status Pending":"Error Details:",G=c?r.WARNING:r.ERROR,p=c&&d?sn.default.createElement(sn.default.Fragment,null,sn.default.createElement(oe,null,"We are taking longer than usual to start the task. To save you waiting, we have stopped checking the status. You can track the latest status by visiting"," ",d.prUrl?`your pull request ${d.prUrl}`:"https://github.com/copilot and checking your Tasks","."),sn.default.createElement(oe,null,"If this issue persists, please contact support.")):sn.default.createElement(oe,null,t.error.message);return sn.default.createElement(Be,{flexDirection:"column"},sn.default.createElement(Be,{flexDirection:"column",borderStyle:"round",paddingX:1},sn.default.createElement(oe,{bold:!0,color:G},m),sn.default.createElement(Be,{marginTop:1,flexDirection:"column",gap:1},p)),sn.default.createElement(Be,null,sn.default.createElement(c7,{shortcut:"Esc",description:"Cancel"})))}return o()};gil.displayName="RemoteJobDelegationControlArea";var Zil=gil;var gbe=$e($t(),1);var Nil=({onConfirm:t})=>gbe.default.createElement(C0,{title:"Remember screen reader mode",body:gbe.default.createElement(Be,{flexDirection:"column",gap:1},gbe.default.createElement(oe,null,"Copilot can enable screen reader optimizations in future sessions using the `screen_reader` configuration setting."),gbe.default.createElement(oe,null,"Do you want to remember screen reader mode for future sessions?")),items:[{label:"Yes, remember screen reader mode",value:"yes"},{label:"No, never ask me again",value:"never"}],escapeItem:{label:"No, ask me next time",value:"no"},onConfirm:t});var JO=$e($t(),1);function Wil({sessionId:t,onClose:e}){let{theme:l}=Tn();return Zc((n,r)=>{(r.return||r.escape)&&e()}),JO.default.createElement(Be,{flexDirection:"column",borderColor:l.BORDER},JO.default.createElement(Be,{flexDirection:"row",gap:1},JO.default.createElement(oe,{color:l.ACCENT,bold:!0},"Session ID:"),JO.default.createElement(oe,{color:l.FG},t)),JO.default.createElement(Be,{flexDirection:"column",marginTop:1},JO.default.createElement(oe,{color:l.MUTED},"Hit Enter or Esc to continue")))}var ys=$e($t(),1);function yil(t){let l=new Date().getTime()-t.getTime(),n=Math.floor(l/1e3),r=Math.floor(n/60),a=Math.floor(r/60),I=Math.floor(a/24),s=Math.floor(I/7),o=Math.floor(I/30),c=Math.floor(I/365);return n<60?"just now":r<60?`${r}m ago`:a<24?`${a}h ago`:I<7?`${I}d ago`:s<4?`${s}w ago`:o<12?`${o}mo ago`:`${c}y ago`}function jzn(t){return t.sort((e,l)=>{let n=e.isModified?e.modifiedTime.getTime():e.startTime.getTime();return(l.isModified?l.modifiedTime.getTime():l.startTime.getTime())-n})}function Eil({sessionManager:t,onSessionSelected:e,onCancel:l,logger:n}){let{theme:r}=Tn(),[a,I]=(0,ys.useState)([]),[s,o]=(0,ys.useState)(0),[c,d]=(0,ys.useState)(!0),[m,G]=(0,ys.useState)(null);(0,ys.useEffect)(()=>{async function Z(){try{let W=await t.listSessions();if(n.info(`Found ${W.length} sessions`),W.length===0){G("No previous sessions found"),d(!1);return}let R=W.map(X=>async()=>{let S={sessionId:X.sessionId,startTime:X.startTime,modifiedTime:X.modifiedTime,isModified:Math.abs(X.modifiedTime.getTime()-X.startTime.getTime())>6e4,summary:"(no message content)",messageCount:0};try{let O=await t.getSession(X.sessionId,!1);return O?(await t.closeSession(O),{...S,summary:O.summary||S.summary,messageCount:O.messageCount}):S}catch{return S}}),V=10,v=[];for(let X=0;X<R.length;X+=V){let S=R.slice(X,X+V),O=await Promise.all(S.map(P=>P()));v.push(...O);let T=jzn(v);I(T),d(!1)}}catch(W){G(`Failed to load sessions: ${W instanceof Error?W.message:String(W)}`),d(!1)}}Z()},[t]),Zc((Z,W)=>{if(c||m){W.escape&&l();return}W.upArrow&&s>0?o(s-1):W.downArrow&&s<a.length-1?o(s+1):W.return&&a.length>0?e(a[s].sessionId):W.escape&&l()});let p=()=>ys.default.createElement(Be,{paddingBottom:1,paddingLeft:3,flexDirection:"row"},ys.default.createElement(oe,{color:r.MUTED,bold:!0},"#".padEnd(5)),ys.default.createElement(oe,{color:r.MUTED,bold:!0},"Modified".padEnd(12)),ys.default.createElement(oe,{color:r.MUTED,bold:!0},"Created".padEnd(12)),ys.default.createElement(oe,{color:r.MUTED,bold:!0},"Msg".padEnd(5)),ys.default.createElement(oe,{color:r.MUTED,bold:!0},"Summary")),A=(Z,W,R)=>{let V=R?r.SELECTED:r.FG,v=R?r.SELECTED:r.MUTED,X=`${W+1}.`.padEnd(5),O=yil(Z.modifiedTime).padEnd(12),P=yil(Z.startTime).padEnd(12),x=Z.messageCount.toString().padEnd(5),D=Z.summary||"";return ys.default.createElement(Be,{flexDirection:"row",key:Z.sessionId},ys.default.createElement(oe,{dimColor:!R,color:R?v:void 0},X),ys.default.createElement(oe,{color:v},O),ys.default.createElement(oe,{color:v},P),ys.default.createElement(oe,{color:v},x),ys.default.createElement(oe,{color:V},D))};return c?ys.default.createElement(Be,{flexDirection:"column"},ys.default.createElement(oe,{color:r.ACCENT,bold:!0},"Loading sessions..."),ys.default.createElement(oe,{color:r.MUTED},"Press Esc to cancel")):m?ys.default.createElement(Be,{flexDirection:"column"},ys.default.createElement(oe,{color:r.ERROR,bold:!0},m),ys.default.createElement(oe,{color:r.MUTED},"Press Esc to continue")):a.length===0?ys.default.createElement(Be,{flexDirection:"column"},ys.default.createElement(oe,{color:r.ACCENT,bold:!0},"No previous sessions found"),ys.default.createElement(oe,{color:r.MUTED},"Press Esc to continue")):ys.default.createElement(Be,{flexDirection:"column"},ys.default.createElement(oe,{color:r.FG,bold:!0},"Select a session to resume:"),ys.default.createElement(Be,{marginTop:1,flexDirection:"column"},p(),ys.default.createElement(Be,null,ys.default.createElement(s7,{items:a,selectedIndex:s,maxRows:10,renderItem:A,showScrollHints:!0}))),ys.default.createElement(Be,{marginTop:1},ys.default.createElement(oe,{color:r.MUTED},"Use \u2191\u2193 to navigate, Enter to select, Esc to cancel")))}var N7=$e($t(),1);var Kzn=45,qzn=t=>{let{theme:e}=Tn(),l=(n,r,a)=>{let I=a?e.SELECTED:e.MUTED,s=n.aliases&&n.aliases.length>0?`, ${n.aliases.join(", ")}`:"",o=`${n.name}${s}${n.args?` ${n.args}`:""}`;return N7.default.createElement(Be,{flexDirection:"row",key:n.name},N7.default.createElement(Be,{width:Kzn},N7.default.createElement(oe,{color:I,wrap:"truncate"},o)),N7.default.createElement(oe,{color:I,wrap:"truncate"},n.help))};return N7.default.createElement(s7,{items:t.options,selectedIndex:t.selectedIndex,maxRows:t.maxRows,renderItem:l,showScrollHints:t.showScrollHints??!1})},Ril=qzn;var L0=$e($t(),1);var $zn=100,ePn=1e3,tPn=({text:t,color:e,shimmerColor:l})=>{let[n,r]=(0,L0.useState)(0);return(0,L0.useEffect)(()=>{let a=setTimeout(()=>{r(I=>I===t.length?0:I===t.length-1?t.length:I+1)},n===t.length?ePn:$zn);return()=>clearTimeout(a)},[n,t.length]),L0.default.createElement(oe,null,t.split("").map((a,I)=>L0.default.createElement(oe,{key:I,color:I===n?l:e},a)))},Yil=t=>{let{hideToggleHelp:e}=vFe(),{theme:l}=Tn(),n="\xB7",r=t.mode==="executing"?"Executing":t.mode==="cancelling"?"Cancelling":t.currentIntent??"Thinking",a=t.mode!=="cancelling"&&!e,I=t.streamingResponseSize&&t.streamingResponseSize>0?`(Esc to cancel ${n} ${EE(t.streamingResponseSize,1)})`:"(Esc to cancel)";return L0.default.createElement(Be,{flexDirection:"row",gap:1},L0.default.createElement(Be,{flexDirection:"row"},L0.default.createElement(tQ,{color:l.COPILOT}),L0.default.createElement(tPn,{text:r,color:l.COPILOT,shimmerColor:l.COPILOT_BRIGHT})),a&&L0.default.createElement(oe,{color:l.MUTED},I))};var wI=$e($t(),1);var eJ=(t,e)=>{if(!t)return{color:e.MUTED,icon:"\u25CB",label:"In Progress"};switch(t){case"in_progress":return{color:e.MUTED,icon:"\u25CB",label:"In Progress"};case"success":return{color:e.SUCCESS,icon:"\u2713",label:"Success"};case"rejected":return{color:e.ERROR,icon:"\u2717",label:"Rejected"};case"denied":return{color:e.ERROR,icon:"\u2717",label:"Denied"};case"failure":return{color:e.ERROR,icon:"\u2717",label:"Failed"};default:wo(t,`Unhandled result type: ${t}`)}};var _f=$e($t(),1);var J0=$e($t(),1);var W7="local_shell";function wil(t,e=8){return t.includes(" ")?t.split(`
|
|
2433
2433
|
`).map(l=>{let n="",r=0;for(let a of l)if(a===" "){let I=e-r%e;n+=" ".repeat(I),r+=I}else n+=a,r+=1;return n}).join(`
|
|
2434
2434
|
`):t}var lPn=/[\u2500-\u257F\u2580-\u259F]/g;function y7(t){return BR(t).replace(/\r/g,`
|
|
2435
2435
|
`).replace(/\t/g," ").replace(lPn,"")}function ICe(t){try{return Ao.parse(t,{async:!1}).replace(/\n{3,}/g,`
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@github/copilot",
|
|
3
3
|
"description": "GitHub Copilot CLI brings the power of Copilot coding agent directly to your terminal.",
|
|
4
|
-
"version": "0.0.351-
|
|
4
|
+
"version": "0.0.351-17",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"repository": {
|
|
@@ -37,6 +37,6 @@
|
|
|
37
37
|
"worker/**/*"
|
|
38
38
|
],
|
|
39
39
|
"buildMetadata": {
|
|
40
|
-
"gitCommit": "
|
|
40
|
+
"gitCommit": "90770bc"
|
|
41
41
|
}
|
|
42
42
|
}
|
package/sdk/index.js
CHANGED
|
@@ -1460,10 +1460,10 @@ Pay attention to the following when using it:
|
|
|
1460
1460
|
`),r=I.reduce((o,G)=>(o[G.name]=G.title||G.namespacedName,o),{}),a=`MCP server started successfully${l?` (version ${l.version})`:""} with ${I.length} ${I.length===1?"tool":"tools"} - for the full output, see the verbose logs
|
|
1461
1461
|
|
|
1462
1462
|
${c}`;await n.createOrUpdateMCPStartupToolCall({serverName:e,content:a,toolNamesToDisplayNames:r}),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}`)}}};var RV=class t{static resolveString(e,I){return!I||e.length>1e3?e:e.replace(/\$\{([A-Z0-9_]+)(?::-([^}]*))?\}|\$([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})}static resolveArray(e,I){return e?I?e.map(l=>t.resolveString(l,I)):e:[]}static resolveHeaders(e,I){if(!e)return{};if(!I)return e;let l={};for(let[n,c]of Object.entries(e)){let r=t.resolveArray([c],I);l[n]=r[0]}return l}static resolveLocalServerConfig(e,I){let l=t.resolveString(e.command,I),n=t.resolveArray(e.args,I),c;return e.cwd&&(c=t.resolveString(e.cwd,I)),{...e,command:l,args:n,cwd:c}}static resolveRemoteServerConfig(e,I=process.env){let l=t.resolveString(e.url,I),n=t.resolveHeaders(e.headers,I);return{...e,url:l,headers:n}}};var MNe={mcpServers:{}},N_=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"),MNe;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"),MNe;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}`),MNe}}configureGitHubMcp(e,I){this.remoteEnabled?this.configureRemoteGitHubMcp(e,I):this.configureLocalGitHubMcp(e)}configureRemoteGitHubMcp(e,I){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};this.setDefaultGitHubFilterMapping(c);let r=e.mcpServers[VV]??void 0;if(r&&SeI(r)){let s=structuredClone(r);this.logger.log("GitHub MCP server configuration already provided by user, skipping default remote configuration"),r.headers===void 0&&(r.headers={}),s.headers={...n,...r.headers},s.isDefaultServer=!0,this.setDefaultGitHubFilterMapping(s),e.mcpServers[VV]=s}else this.logger.log("Using default remote GitHub MCP server configuration"),e.mcpServers[VV]=c}configureLocalGitHubMcp(e){if(e.mcpServers[VV]){this.logger.log("Using user-provided GitHub MCP server configuration");let I=e.mcpServers[VV]??{};Bv(I)&&!I.command&&(e.mcpServers[VV]={...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[VV]=I}}setDefaultGitHubFilterMapping(e){e.filterMapping??={get_issue:"markdown",get_issue_comments:"markdown",get_pull_request:"markdown",get_pull_request_comments:"markdown",get_pull_request_reviews:"markdown"}}configurePlaywrightMcp(e){if(!e.mcpServers[SNe]){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:[...tZe,"--allowed-origins","localhost;localhost:*;127.0.0.1;127.0.0.1:*"],tools:["*"],isDefaultServer:!0};e.mcpServers[SNe]=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[xz]=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[xz]=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[xz]=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 Bv(e)||zz(e)||Uz(e)||Sz(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&&!Bv(I)&&!Sz(I)?(this.logger.error(`Unsupported server type "${I.type}" for server "${e}". Only "Local", "STDIO", or "Memory" are supported.`),!1):I.tools?Bv(I)&&!this.isValidLocalServerConfig(I)?(this.logger.error(`Invalid local server configuration for "${e}". Please ensure 'command' and 'args' are provided.`),!1):(zz(I)||Uz(I))&&!this.isValidRemoteServerConfig(I)?(this.logger.error(`Invalid remote server configuration for "${e}". Please ensure 'url' is provided.`),!1):Sz(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=RV.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=RV.resolveRemoteServerConfig(I,process.env);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}}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=RV.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;if(I.length>1e3)throw new Error("Too many arguments provided to Python command");let 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]=RV.resolveString(n,process.env);else for(let[l,n]of Object.entries(e.env)){let c=n.trim(),r=c;if(c.includes("$")&&(r=RV.resolveString(c,process.env)),r!==c){I[l]=r;continue}process.env[c]!==void 0&&(I[l]=process.env[c])}return I}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}Bz.includes(e)||await this.sessionClient?.createOrUpdateMCPStartupToolCall({serverName:e});try{Bv(I)?await this.processLocalServer(e,I):zz(I)&&this.remoteEnabled?await this.processHttpServer(e,I):Uz(I)&&this.remoteEnabled?await this.processSseServer(e,I):Sz(I)&&await this.processInMemoryServer(e,I)}catch(l){Bz.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 Y_=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 W_(this.logger,void 0,void 0,n),this.processor=new N_(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 LB(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]}};var WII=Ll(ZII(),1);async function Pat(t={}){let e=await _Ye();return KYe((0,WII.default)({},e,t))}async function NII(t={}){if(GU())throw new Error("Settings have already been initialized");return Pat(t)}import{promises as qat}from"fs";import YII from"path";var _at=3*1024*1024;function VII(t){let e=YII.extname(t).toLowerCase();return[".png",".jpg",".jpeg",".gif",".webp"].includes(e)}function $at(t){switch(YII.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 eot(t,e){e.debug(`Processing local image file: ${t}`);let I=await qat.readFile(t),l=$at(t);if(!l)throw new Error(`Unsupported image format: ${t}`);let n=new JB,c=await K8(e,n,_at,HB,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 Iot(t,e,I){let l=Za();try{let n=await Ere({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,I);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 RII(t,e,I){let l=[],n=t.filter(r=>!VII(r.path));if(n.length===0)return l;let c=[];for(let r of n)try{let s=await Iot(r.path,e,I);c.push(s)}catch{}if(c.length>0){let r=c.map(s=>({id:s.id,type:"function",function:{name:s.name,arguments:JSON.stringify(s.arguments)}}));l.push({role:"assistant",content:"I need to read the content of those paths to answer this request.",tool_calls:r}),l.push(...c.map(s=>({role:"tool",tool_call_id:s.id,content:s.result})))}return l}async function yII(t,e){let I=t.filter(n=>VII(n.path));return(await Promise.all(I.map(async n=>{try{return{type:"image_url",image_url:{url:await eot(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 tYe=class{constructor(e,I){this.logger=e;this.session=I}messageQueue=[];async*preRequest(e){this.logger.debug("ImmediatePromptProcessor: Injecting immediate prompts");let l=(await this.session.getChatMessages()).length;for(;this.messageQueue.length>0;){let r=this.messageQueue.shift();this.session.emit("user.message",{content:r.prompt,attachments:r.attachments})}let c=(await this.session.getChatMessages()).slice(l);for(let r of c)e.messages.push(r),yield{kind:"message",message:r,turn:e.turn,source:"immediate-prompt"}}addMessage(e){this.messageQueue.push(e)}toJSON(){return"ImmediatePromptProcessor"}},zp=class t{sessionId;startTime;modifiedTime;logger;events=[];_chatMessages=[];_selectedModel;eventProcessingQueue=Promise.resolve();eventHandlers={};wildcardEventHandlers=[];isProcessing=!1;messageQueue=[];immediatePromptProcessor;mcpHost;workingDir;abortController;modelProvider;allowedTools;disabledTools;requestPermission;mcpServers;hooks;hmacKey;copilotToken;constructor(e={},I={}){this.sessionId=I.sessionId||Za(),this.startTime=I.startTime||new Date,this.modifiedTime=I.modifiedTime||this.startTime,this.logger=e.logger||new dW,this.modelProvider=e.modelProvider,this.allowedTools=e.allowedTools,this.disabledTools=e.disabledTools,this.requestPermission=e.requestPermission,this.mcpServers=e.mcpServers,this.hooks=e.hooks,this.hmacKey=e.hmacKey,this.copilotToken=e.copilotToken,this.workingDir=e.workingDirectory||process.cwd(),this.immediatePromptProcessor=new tYe(this.logger,this),this.abortController=e.abortController||new AbortController,hZe(this.workingDir).then(l=>{if(l.found)return GPe(l.gitRoot,!0,this.workingDir)}).catch(l=>{this.logger.debug(`Failed to initialize custom instructions cache: ${l}`)})}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(e,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 t(I,{sessionId:l.data.sessionId,startTime:new Date(l.data.startTime)});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}on(e,I){return e==="*"?(this.wildcardEventHandlers.push(I),()=>{let l=this.wildcardEventHandlers.indexOf(I);l!==-1&&this.wildcardEventHandlers.splice(l,1)}):(this.eventHandlers[e]||(this.eventHandlers[e]=[]),this.eventHandlers[e].push(I),()=>{let l=this.eventHandlers[e];if(l){let n=l.indexOf(I);n!==-1&&l.splice(n,1)}})}emit(e,I,l=!1){let n=Za(),c=new Date().toISOString(),r=this.getLastEventId(),s={type:e,data:I,id:n,timestamp:c,parentId:r,...l&&{ephemeral:l}};this.events.push(s),this.enqueueEventProcessing(()=>this.processEventForState(s)).catch(a=>{this.logger.error(`Error emitting event: ${a instanceof Error?a.message:String(a)}`)}).catch(a=>{this.logger.error(`Error emitting event ${a instanceof Error?a.message:String(a)}`)}),[...this.eventHandlers[s.type]||[],...this.wildcardEventHandlers].forEach(a=>{try{a(s)}catch(o){this.logger.error(`Error in event handler for event type ${s.type}: ${o instanceof Error?o.message:String(o)}`)}})}emitEphemeral(e,I){this.emit(e,I,!0)}getEvents(){return this.events}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)}async setSelectedModel(e){let I=await this.getSelectedModel();this.emit("session.model_change",{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 yII(e.data.attachments,this.logger);I.push(...n);let c=await RII(e.data.attachments,{requestRequired:!1},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||e.data.parentToolCallId)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":{if(e.data.parentToolCallId)break;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=tot(this._chatMessages,this.logger);break;case"session.idle":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}}}async send(e,I={}){if((I.mode||"enqueue")==="immediate"&&this.isProcessing)this.immediatePromptProcessor.addMessage(e);else{if(this.messageQueue.push(e),this.isProcessing)return;for(this.isProcessing=!0,await this.initializeMcpHost();this.messageQueue.length>0;){let n=this.messageQueue.shift();await this.runAgenticLoop(n.prompt,n.attachments)}this.isProcessing=!1,this.emit("session.idle",{})}}async abort(){this.abortController.abort()}async initializeMcpHost(){if(!this.mcpHost&&this.mcpServers&&Object.keys(this.mcpServers).length>0)try{this.mcpHost=new Y_(this.logger,{mcpServers:this.mcpServers},this.disabledTools),await this.mcpHost.startServers()}catch(e){this.logger.error(`Failed to initialize MCP host: ${e}`)}}async runAgenticLoop(e,I=[]){if(!this.modelProvider)throw new Error("Session must be created with modelProvider to use send/query methods");let l=new Map,n=new Map;try{let r=(await XW(this.hooks?.userPromptSubmitted,{timestamp:Date.now(),cwd:this.workingDir,prompt:e},this.logger))?.modifiedPrompt??e;this.emit("user.message",{content:eZe({problemStatement:r,capabilities:{}}),attachments:I});let a=new kF().setProblemStatement(r).setAgentModel(this.buildAgentModelString()).setGithubRepoName("copilot-sdk-session").setGithubRepoCommit("copilot-sdk-commit").setGithubRepoReadWrite(!1).setCopilotIntegrationId("copilot-developer-cli").setCopilotHmacKey(this.hmacKey).setCopilotToken(this.copilotToken).build();PYe();let o=await NII(a),G=o.service?.agent?.model,i=$8(G),d=i.agent,b=d??"sweagent-capi",m=i.model?{model:i.model}:void 0,h=Hbe(o,this.logger,d,m),u={location:this.workingDir,timeout:3e4,requireReasoning:!0,toolPartialResultCallback:(pe,Fe)=>{this.emitEphemeral("tool.execution_partial_result",{toolCallId:pe,partialOutput:Fe})},permissions:this.requestPermission?{requestRequired:!0,request:this.requestPermission}:{requestRequired:!1},shellConfig:(process.platform==="win32"?ab.powerShell:ab.bash).withScriptSafetyAssessor(async function(pe){return{result:"completed",commands:[{identifier:pe,readOnly:!1}],possiblePaths:[],hasWriteFileRedirection:!1,canOfferSessionApproval:!1}})},Z=await w8e(u,this.logger),N=[];if(this.mcpHost)try{N=await this.mcpHost.getTools(o,this.logger,u.permissions)}catch(pe){this.logger.error(`Failed to get MCP tools: ${pe}`)}let g=[...Z,...N].filter(pe=>this.allowedTools?this.allowedTools.includes(pe.name):this.disabledTools?!this.disabledTools.includes(pe.name):!0),y=await hZe(this.workingDir),f={...(E8e()[b]?.[h.model]??X8e()).supports,reasoning:!0},v=await h8e({location:y.found?y.gitRoot:"",version:fze(),currentWorkingDirectory:this.workingDir,parts:{},capabilities:f,toolConfigOverrides:u,tools:g,organizationCustomInstructions:void 0}),L=(await this.getChatMessages()).slice(0,-1),Ie={role:"user",content:eZe({customAgentPrompt:void 0,problemStatement:r,capabilities:f})},Ge=[...L,Ie];await XW(this.hooks?.sessionStart,{timestamp:Date.now(),cwd:this.workingDir,source:"new",initialPrompt:e},this.logger);let Qe=new av(Ie,this.logger),Ae=h.getCompletionWithTools(v,Ge,g,{failIfInitialInputsTooLong:!1,processors:{preRequest:[Qe,this.immediatePromptProcessor,new fB(this.logger)],onRequestError:[Qe]},executeToolsInParallel:!1,abortSignal:this.abortController.signal});for await(let pe of Ae){if(this.abortController.signal.aborted){this.emit("abort",{reason:"user initiated"});break}switch(pe.kind){case"message":{if(e7(pe)){let Fe=R8e(pe)?await Promise.all(pe.message.tool_calls.map(async me=>{let uI=bX(me.function.arguments);l.set(me.id,me.function.name),n.set(me.id,uI);let ve=await XW(this.hooks?.preToolUse,{timestamp:Date.now(),cwd:this.workingDir,toolName:me.function.name,toolArgs:uI},this.logger);return{toolCallId:me.id,name:me.function.name,arguments:ve?.modifiedArgs??uI}})):[];this.emit("assistant.message",{parentToolCallId:void 0,messageId:Za(),content:typeof pe.message.content=="string"?pe.message.content:"",toolRequests:Fe});for(let me of Fe)this.emit("tool.execution_start",{toolCallId:me.toolCallId,toolName:me.name,arguments:me.arguments})}else(pe.message.role==="system"||pe.message.role==="developer")&&this.emit("system.message",{role:pe.message.role,content:typeof pe.message.content=="string"?pe.message.content:JSON.stringify(pe.message.content),name:"name"in pe.message?pe.message.name:void 0});break}case"model_call_failure":{let Fe=new Error(pe.modelCall?.error||"Model call failed");await XW(this.hooks?.errorOccurred,{timestamp:Date.now(),cwd:this.workingDir,error:Fe,errorContext:"model_call",recoverable:!0},this.logger),this.emit("session.error",{errorType:"model_call",message:Fe.message,stack:Fe.stack});break}case"tool_execution":{let me=(await XW(this.hooks?.postToolUse,{timestamp:Date.now(),cwd:this.workingDir,toolName:l.get(pe.toolCallId)||"unknown",toolArgs:n.get(pe.toolCallId)||{},toolResult:pe.toolResult},this.logger))?.modifiedResult??pe.toolResult,uI=(me.resultType==="failure"?me.error:void 0)||me.sessionLog||me.textResultForLlm;this.emit("tool.execution_complete",{parentToolCallId:void 0,toolCallId:pe.toolCallId,success:me.resultType==="success",result:me.resultType==="success"?{content:uI}:void 0,error:me.resultType!=="success"?{message:uI,code:me.resultType}:void 0});break}case"turn_started":{this.emit("assistant.turn_start",{turnId:`${pe.turn}`});break}case"turn_ended":{this.emit("assistant.turn_end",{turnId:`${pe.turn}`});break}case"response":case"images_removed":case"image_processing":case"history_truncated":case"turn_failed":case"turn_retry":case"model_call_success":this.logger.debug(`Ignoring event of kind: ${pe.kind}`);break;default:dm(pe,"Unhandled event type")}}}catch(c){await XW(this.hooks?.sessionEnd,{timestamp:Date.now(),cwd:this.workingDir,reason:"error",error:c instanceof Error?c:new Error(String(c))},this.logger),this.emit("session.error",{errorType:"query",message:c instanceof Error?c.message:String(c),stack:c instanceof Error?c.stack:void 0})}finally{await XW(this.hooks?.sessionEnd,{timestamp:Date.now(),cwd:this.workingDir,reason:"complete"},this.logger)}}buildAgentModelString(){if(!this.modelProvider)throw new Error("Session must be created with modelProvider");switch(this.modelProvider.type){case"openai":return`openai:${this.modelProvider.model}`;case"anthropic":return`anthropic:${this.modelProvider.model}`;case"copilot":return`capi:${this.modelProvider.model}`;default:throw new Error(`Unsupported provider: ${this.modelProvider.type}`)}}};function tot(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 o of a.tool_calls)l.has(o.id)||I.push(o.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 X_=class{sessions;logger;options;lastAccessedSessionId;constructor(e){this.options=e,this.sessions=new Map,this.logger=e.logger||new dW}async createSession(){let e=new zp(this.options);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)}async closeSession(e){}};var utI=Ll(ntI(),1);import{existsSync as K_}from"fs";import{appendFile as KGt,mkdir as PGt,readdir as P_,readFile as otI,stat as q_,writeFile as qGt}from"fs/promises";import{homedir as GtI}from"os";import{dirname as _Gt,join as FG}from"path";var OGt=new Error("timeout while waiting for mutex to become available"),eTl=new Error("mutex already locked"),MGt=new Error("request for lock canceled"),TGt=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(G){try{o(l.next(G))}catch(i){r(i)}}function a(G){try{o(l.throw(G))}catch(i){r(i)}}function o(G){G.done?c(G.value):n(G.value).then(s,a)}o((l=l.apply(t,e||[])).next())})},uYe=class{constructor(e,I=MGt){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=rtI(this._queue,s=>I<=s.priority);r===-1&&e<=this._value?this._dispatchItem(c):this._queue.splice(r+1,0,c)})}runExclusive(e){return TGt(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]=[]),jGt(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 jGt(t,e){let I=rtI(t,l=>e.priority<=l.priority);t.splice(I+1,0,e)}function rtI(t,e){for(let I=t.length-1;I>=0;I--)if(e(t[I]))return I;return-1}var DGt=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(G){try{o(l.next(G))}catch(i){r(i)}}function a(G){try{o(l.throw(G))}catch(i){r(i)}}function o(G){G.done?c(G.value):n(G.value).then(s,a)}o((l=l.apply(t,e||[])).next())})},j_=class{constructor(e){this._semaphore=new uYe(1,e)}acquire(){return DGt(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()}},ctI=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(G){try{o(l.next(G))}catch(i){r(i)}}function a(G){try{o(l.throw(G))}catch(i){r(i)}}function o(G){G.done?c(G.value):n(G.value).then(s,a)}o((l=l.apply(t,e||[])).next())})};function stI(t,e,I=OGt){return{acquire:(l,n)=>{let c;if(T_(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)=>ctI(this,void 0,void 0,function*(){let a=!1,o=setTimeout(()=>{a=!0,s(I)},e);try{let G=yield T_(t)?t.acquire(c,n):t.acquire(n);a?(Array.isArray(G)?G[1]:G)():(clearTimeout(o),r(G))}catch(G){a||(clearTimeout(o),s(G))}}))},runExclusive(l,n,c){return ctI(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(T_(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);(T_(t)?t.waitForUnlock(c,n):t.waitForUnlock(n)).then(()=>{clearTimeout(a),r()})})},isLocked:()=>t.isLocked(),getValue:()=>t.getValue(),setValue:l=>t.setValue(l)}}function T_(t){return t.getValue!==void 0}var D_=class{mutexes=new Map;async runExclusive(e,I,l=5e3){let n=this.mutexes.get(e);n||(n=new j_,n.refCount=0,this.mutexes.set(e,n));let c=n;try{return c.refCount++,await stI(n,l).runExclusive(I)}finally{--c.refCount===0&&this.mutexes.delete(e)}}};var ZYe=(I=>(I.DEFAULT="config",I.MCP="mcp",I))(ZYe||{});function atI(t){return Object.values(ZYe).includes(t)}var __=".copilot",$_=new D_;async function itI(t){let e=_Gt(t);try{await PGt(e,{recursive:!0,mode:448})}catch{}}async function $Gt(t,e){if(K_(t))try{let I={},l=await $_.runExclusive(t,()=>otI(t,"utf8"));return l.trim().startsWith("{")?I=JSON.parse(l):l.split(`
|
|
1463
|
-
`).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 eit(t,e){try{await itI(t);let I=JSON.stringify(e,null,2);await $_.runExclusive(t,()=>qGt(t,I,{mode:384}))}catch(I){throw new Error(`Failed to write configuration to ${t}: ${I}`)}}var dtI=(t,e,{shouldCache:I})=>{let l=new Map,n=()=>{let d=atI(e)?process.env.XDG_CONFIG_HOME:process.env.XDG_STATE_HOME;return d?FG(d,__):FG(GtI(),__)},c=()=>{let d=atI(e)?"-config":"-state";return`${e}${e=="config"?"":d}`},r=d=>{let b=".json",m=c()+(d?"":b),h=FG(n(),m,d?`${d}${b}`:"");return!K_(h)&&K_(h.replace(/\.json$/,""))&&(h=h.replace(/\.json$/,"")),h},s=async()=>{let d=FG(n(),c());try{let m=(await P_(d,{withFileTypes:!0})).filter(u=>u.isFile()&&u.name.endsWith(".json")).map(u=>u.name),h=await Promise.all(m.map(async u=>{let Z=FG(d,u);try{let N=await q_(Z);return{file:u,mtime:N.mtime}}catch{return{file:u,mtime:new Date}}}));return h.sort((u,Z)=>Z.mtime.getTime()-u.mtime.getTime()),h.map(u=>u.file)}catch{}return[]},a=async()=>{let d=FG(n(),c());try{let m=(await P_(d,{withFileTypes:!0})).filter(u=>u.isFile()&&u.name.endsWith(".json")).map(u=>u.name),h=await Promise.all(m.map(async u=>{let Z=FG(d,u);try{let N=await q_(Z);return{file:u,mtime:N.mtime,
|
|
1463
|
+
`).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 eit(t,e){try{await itI(t);let I=JSON.stringify(e,null,2);await $_.runExclusive(t,()=>qGt(t,I,{mode:384}))}catch(I){throw new Error(`Failed to write configuration to ${t}: ${I}`)}}var dtI=(t,e,{shouldCache:I})=>{let l=new Map,n=()=>{let d=atI(e)?process.env.XDG_CONFIG_HOME:process.env.XDG_STATE_HOME;return d?FG(d,__):FG(GtI(),__)},c=()=>{let d=atI(e)?"-config":"-state";return`${e}${e=="config"?"":d}`},r=d=>{let b=".json",m=c()+(d?"":b),h=FG(n(),m,d?`${d}${b}`:"");return!K_(h)&&K_(h.replace(/\.json$/,""))&&(h=h.replace(/\.json$/,"")),h},s=async()=>{let d=FG(n(),c());try{let m=(await P_(d,{withFileTypes:!0})).filter(u=>u.isFile()&&u.name.endsWith(".json")).map(u=>u.name),h=await Promise.all(m.map(async u=>{let Z=FG(d,u);try{let N=await q_(Z);return{file:u,mtime:N.mtime}}catch{return{file:u,mtime:new Date}}}));return h.sort((u,Z)=>Z.mtime.getTime()-u.mtime.getTime()),h.map(u=>u.file)}catch{}return[]},a=async()=>{let d=FG(n(),c());try{let m=(await P_(d,{withFileTypes:!0})).filter(u=>u.isFile()&&u.name.endsWith(".json")).map(u=>u.name),h=await Promise.all(m.map(async u=>{let Z=FG(d,u);try{let N=await q_(Z);return{file:u,mtime:N.mtime,birthtime:N.birthtime}}catch{return{file:u,mtime:new Date,birthtime:new Date}}}));return h.sort((u,Z)=>Z.mtime.getTime()-u.mtime.getTime()),h}catch{}return[]},o=async(d="")=>{if(I&&l.has(d))return l.get(d);let b=await $Gt(r(d),t);return I&&b&&l.set(d,b),b},G=async(d,b="")=>{I&&l.set(b,d),await eit(r(b),d)};return{load:o,write:G,writeKey:async(d,b,m)=>{let h=await o(m);if(b===void 0){h&&(delete h[d],await G(h,m));return}let u={[d]:b},Z;h?Z={...h,...u}:Z=u,await G(Z,m)},path:r,directoryFiles:s,directoryFilesWithMetadata:a}},btI=(t,e)=>dtI(t,e,{shouldCache:!0}),mtI=(t,e)=>dtI(t,e,{shouldCache:!1}),htI=(t,e)=>{let I=()=>{let o=process.env.XDG_STATE_HOME;return o?FG(o,__):FG(GtI(),__)},l=()=>`${e}-state`,n=o=>{let G=".jsonl",i=l()+(o?"":G);return FG(I(),i,o?`${o}${G}`:"")};return{load:async o=>{let G=n(o);if(!K_(G))return[];try{let d=(await $_.runExclusive(G,()=>otI(G,"utf8"))).trim().split(`
|
|
1464
1464
|
`).filter(m=>m.trim()),b=[];for(let m=0;m<d.length;m++)try{let h=JSON.parse(d[m]),u=t(h);b.push(u)}catch(h){throw new Error(`Invalid event at line ${m+1} in ${G}: ${h}`)}return b}catch(i){throw new Error(`Failed to read JSONL from ${G}: ${i}`)}},append:async(o,G)=>{let i=n(G),d=Array.isArray(o)?o:[o];try{await itI(i);let b=d.map(m=>JSON.stringify(m)).join(`
|
|
1465
1465
|
`)+`
|
|
1466
|
-
`;await $_.runExclusive(i,()=>KGt(i,b,{mode:384}))}catch(b){throw new Error(`Failed to append to JSONL file ${i}: ${b}`)}},path:n,directoryFiles:async()=>{let o=FG(I(),l());try{let i=(await P_(o,{withFileTypes:!0})).filter(b=>b.isFile()&&b.name.endsWith(".jsonl")).map(b=>b.name),d=await Promise.all(i.map(async b=>{let m=FG(o,b);try{let h=await q_(m);return{file:b,mtime:h.mtime}}catch{return{file:b,mtime:new Date}}}));return d.sort((b,m)=>m.mtime.getTime()-b.mtime.getTime()),d.map(b=>b.file)}catch{return[]}},directoryFilesWithMetadata:async()=>{let o=FG(I(),l());try{let i=(await P_(o,{withFileTypes:!0})).filter(b=>b.isFile()&&b.name.endsWith(".jsonl")).map(b=>b.name),d=await Promise.all(i.map(async b=>{let m=FG(o,b);try{let h=await q_(m);return{file:b,mtime:h.mtime,ctime:h.ctime}}catch{return{file:b,mtime:new Date,ctime:new Date}}}));return d.sort((b,m)=>m.mtime.getTime()-b.mtime.getTime()),d}catch{return[]}},home:I,directory:l}};var ptI=fe({host:re(),login:re()}),Iit=fe({banner:Jp(["always","once","never"]).optional(),beep:zl().optional(),last_logged_in_user:ptI.optional(),logged_in_users:ns(ptI).optional(),model:re().optional(),render_markdown:zl().optional(),screen_reader:zl().optional(),theme:re().optional(),trusted_folders:ns(re()).optional(),store_token_plaintext:zl().optional(),stream:zl().optional(),parallel_tool_execution:zl().optional(),feature_flags:fe({enabled:ns(re()).optional()}).optional(),asked_setup_terminals:ns(re()).optional(),capi_hmac_key:re().optional(),copilot_hmac_key:re().optional(),copilot_integration_id:re().optional(),copilot_tokens:uv(re(),re()).optional(),copilot_url:re().optional(),staff:zl().optional(),log_level:Jp(["none","error","warning","info","debug","all","default"]).optional()}),tit=uv(re(),WZe()),lit=tit.transform(t=>(0,utI.default)(t,(e,I)=>{let l=I.toLowerCase();return l==="github_copilot_integration_id"?"copilot_integration_id":l})),nit=lit.pipe(Iit),cit=btI(nit.parse,"config");var ZtI=["claude-sonnet-4.5","claude-sonnet-4","claude-haiku-4.5","gpt-5"];var rit=fe({command:re(),description:re(),timeout:ls().optional(),sessionId:re().optional(),async:zl().optional()}),sit=fe({sessionId:re(),input:re(),delay:ls().optional()}),ait=fe({sessionId:re(),delay:ls()}),oit=fe({sessionId:re()}),Git=ma([rit,sit,ait,oit]),iit=fe({command:NI("view"),path:re(),view_range:o7([ls(),ls()]).optional()}),dit=fe({command:NI("create"),path:re(),file_text:re()}),bit=fe({command:NI("str_replace"),path:re(),new_str:re().optional(),old_str:re()}),mit=fe({command:NI("insert"),path:re(),insert_line:ls(),new_str:re()}),hit=SB("command",[iit,dit,bit,mit]),uTl=fe({path:re(),view_range:o7([ls(),ls()]).optional()}),ZTl=fe({path:re(),file_text:re()}),WTl=fe({path:re(),old_str:re(),new_str:re().optional()}),WYe=ma([Git,hit,Cp()]);var _z=fe({type:NI("text"),text:re()}),uit=fe({type:NI("refusal"),refusal:re()}),Zit=fe({type:NI("image_url"),image_url:fe({url:re(),detail:Jp(["auto","low","high"]).optional()})}),Wit=fe({type:NI("input_audio"),input_audio:fe({data:re(),format:NI("wav").or(NI("mp3"))})}),Nit=fe({type:NI("file"),file:fe({file_date:re().optional(),file_id:re().optional(),filename:re().optional()})}),Yit=ma([_z,Zit,Wit,Nit]),Vit=fe({name:re(),arguments:re()}),Rit=fe({name:re(),input:re()}),yit=fe({id:re(),type:NI("function"),function:Vit}),git=fe({id:re(),type:NI("custom"),custom:Rit}),Fit=ma([yit,git]),Ait=fe({name:re(),arguments:re()}),Qit=fe({id:re()}),wit=fe({content:ma([re(),ns(_z)]),role:NI("developer"),name:re().optional()}),Xit=fe({content:ma([re(),ns(_z)]),role:NI("system"),name:re().optional()}),Eit=fe({content:ma([re(),ns(Yit)]),role:NI("user"),name:re().optional()}),Hit=fe({content:ma([re(),ns(ma([_z,uit]))]).nullable().optional(),role:NI("assistant"),name:re().optional(),refusal:re().nullable().optional(),audio:Qit.nullable().optional(),function_call:Ait.nullable().optional(),tool_calls:ns(Fit).optional()}),vit=fe({content:ma([re(),ns(_z)]),role:NI("tool"),tool_call_id:re()}),Cit=fe({content:re().nullable(),role:NI("function"),name:re()}),Jit=ma([wit,Xit,Eit,Hit,vit,Cit]),Lit=fe({type:NI("copilot"),text:re(),isStreaming:zl().optional()}),fit=fe({type:NI("error"),text:re()}),kit=fe({type:NI("info"),text:re()}),xit=fe({type:NI("user"),text:re()}),Bit=fe({type:NI("tool_call_requested"),callId:re(),name:re(),toolTitle:re().optional(),intentionSummary:re().nullable(),arguments:WYe,partialOutput:re().optional(),isHidden:zl().optional(),isAlwaysExpanded:zl().optional(),showNoContent:zl().optional()}),zit=fe({type:NI("tool_call_completed"),callId:re(),name:re(),toolTitle:re().optional(),intentionSummary:re().nullable(),result:ma([fe({type:NI("success"),log:re(),markdown:zl().optional()}),fe({type:NI("failure"),log:re(),markdown:zl().optional()}),fe({type:NI("rejected"),markdown:zl().optional()}),fe({type:NI("denied"),log:re(),markdown:zl().optional()})]),arguments:WYe,isHidden:zl().optional(),isAlwaysExpanded:zl().optional(),showNoContent:zl().optional()}),Uit=ma([Lit,fit,kit,xit,Bit,zit]),Sit=Uit.and(fe({id:re(),timestamp:G7.date()})),NYe=fe({sessionId:re(),startTime:G7.date(),chatMessages:ns(Jit),timeline:ns(Sit),selectedModel:Jp(ZtI).optional()}),$z=mtI(NYe.parse,"history-session");var lr=fe({id:re().uuid(),timestamp:re().datetime(),parentId:re().uuid().nullable(),ephemeral:zl().optional()}),WtI=fe({parentToolCallId:re().optional()}),Oit=lr.extend({type:NI("session.start"),data:fe({sessionId:re(),version:ls(),producer:re(),copilotVersion:re(),startTime:re().datetime(),selectedModel:re().optional()})}),Mit=lr.extend({type:NI("session.resume"),data:fe({resumeTime:re().datetime(),eventCount:ls()})}),Tit=lr.extend({type:NI("session.error"),data:fe({errorType:re(),message:re(),stack:re().optional()})}),jit=lr.extend({type:NI("session.info"),data:fe({infoType:re(),message:re()})}),Dit=lr.extend({type:NI("session.model_change"),data:fe({previousModel:re().optional(),newModel:re()})}),Kit=lr.extend({type:NI("session.import_legacy"),data:fe({legacySession:NYe,importTime:re().datetime(),sourceFile:re()})}),Pit=lr.extend({type:NI("session.idle"),ephemeral:NI(!0),data:fe({})}),qit=fe({type:Jp(["file","directory"]),path:re(),displayName:re()}),_it=lr.extend({type:NI("user.message"),data:fe({content:re(),attachments:ns(qit).optional()})}),$it=lr.extend({type:NI("assistant.turn_start"),data:fe({turnId:re()})}),edt=lr.extend({type:NI("assistant.message"),data:fe({messageId:re(),content:re(),toolRequests:ns(fe({toolCallId:re(),name:re(),arguments:Cp()})).optional()}).merge(WtI)}),Idt=lr.extend({type:NI("assistant.turn_end"),data:fe({turnId:re()})}),tdt=lr.extend({type:NI("assistant.usage"),ephemeral:NI(!0),data:fe({model:re().optional(),inputTokens:ls().optional(),outputTokens:ls().optional(),cost:ls().optional(),duration:ls().optional(),initiator:re().optional()})}),ldt=lr.extend({type:NI("abort"),data:fe({reason:re()})}),ndt=lr.extend({type:NI("tool.user_requested"),data:fe({toolCallId:re(),toolName:re(),arguments:Cp()})}),cdt=lr.extend({type:NI("tool.execution_start"),data:fe({toolCallId:re(),toolName:re(),arguments:Cp()})}),rdt=lr.extend({type:NI("tool.execution_partial_result"),ephemeral:NI(!0),data:fe({toolCallId:re(),partialOutput:re()})}),sdt=lr.extend({type:NI("tool.execution_complete"),data:fe({toolCallId:re(),success:zl(),isUserRequested:zl().optional(),result:fe({content:re()}).optional(),error:fe({message:re(),code:re().optional()}).optional()}).merge(WtI)}),adt=lr.extend({type:NI("hook.start"),data:fe({hookInvocationId:re(),hookType:re(),input:Cp()})}),odt=lr.extend({type:NI("hook.end"),data:fe({hookInvocationId:re(),hookType:re(),output:Cp(),success:zl(),error:fe({message:re(),stack:re().optional()}).optional()})}),Gdt=lr.extend({type:NI("system.message"),data:fe({content:re(),role:Jp(["system","developer"]),name:re().optional(),metadata:fe({promptVersion:re().optional(),variables:uv(Cp()).optional()}).optional()})}),NtI=SB("type",[Oit,Mit,Tit,Pit,jit,Dit,Kit,_it,$it,edt,Idt,tdt,ldt,ndt,cdt,rdt,sdt,adt,odt,Gdt]);var XF=htI(NtI.parse,"session");var e$=class{constructor(e,I,l,n=!1,c){this.session=e;this.logger=I;this.flushDebounceMs=l;this.shouldSaveSession=n;this.legacySourceFile=c;this.unsubscribe=this.session.on("*",r=>{r.ephemeral||(this.unflushedEvents.push(r),!this.shouldSaveSession&&r.type==="user.message"&&(this.shouldSaveSession=!0),r.type!=="session.resume"&&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 XF.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 YtI(this.legacySourceFile)}catch(I){this.logger.error(`Failed to delete legacy session file ${this.legacySourceFile}: ${I}`)}this.migratedLegacy=!0}}catch(I){this.logger.error(`Failed to flush events for ${this.session.sessionId}: ${I instanceof Error?I.message:String(I)}`),this.unflushedEvents.unshift(...e)}finally{this.isFlushing=!1,this.needsFlushAfterCurrent&&(this.needsFlushAfterCurrent=!1,await this.flush())}}},YYe=class extends X_{sessionWriters={};copilotVersion;flushDebounceMs;constructor({version:e,flushDebounceMs:I,...l}){super({...l}),this.copilotVersion=e||"unknown",this.flushDebounceMs=I||100}async createSession(e){let I=e?.sessionId??Za(),l=new Date,n=new zp(this.options,{sessionId:I,startTime:l});return this.sessionWriters[I]=new e$(n,this.logger,this.flushDebounceMs),n.emit("session.start",{sessionId:I,version:1,producer:"copilot-agent",copilotVersion:this.copilotVersion,startTime:l.toISOString(),selectedModel:e?.selectedModel}),n}async getSession(e,I=!0){let l,n;try{l=await this.loadSession(e)}catch{try{let c=await this.loadLegacySession(e);l=c.session,n=c.legacySourceFile}catch{return}}return this.sessionWriters[e]||(this.sessionWriters[e]=new e$(l,this.logger,this.flushDebounceMs,!0,n)),I&&l.emit("session.resume",{resumeTime:new Date().toISOString(),eventCount:l.getEvents().length}),l}async saveSession(e){await this.sessionWriters[e.sessionId]?.flush()}async loadSession(e){let I=await XF.load(e);return await zp.fromEvents(I,this.options)}async loadLegacySession(e){let l=(await $z.directoryFiles()).filter(a=>{let o=a.match(/^session_(.+)_(\d+)\.json$/);return o&&o[1]===e});if(l.length===0)throw new Error(`Legacy session ${e} not found`);let n=l[0];l.length>1&&this.logger.info(`Multiple legacy sessions found for ${e}, using newest`);let c=await $z.load(n);if(!c)throw new Error(`Failed to load legacy session from ${n}`);let r=new Date(c.startTime),s=new zp(this.options,{sessionId:c.sessionId,startTime:r});return s.emit("session.start",{sessionId:c.sessionId,version:1,producer:"copilot-agent",copilotVersion:this.copilotVersion,startTime:r.toISOString(),selectedModel:c.selectedModel}),s.emit("session.import_legacy",{legacySession:{sessionId:c.sessionId,startTime:r,chatMessages:c.chatMessages,timeline:c.timeline,selectedModel:c.selectedModel},importTime:new Date().toISOString(),sourceFile:n}),this.logger.info(`Loaded legacy session ${e} from ${n}`),{session:s,legacySourceFile:$z.path(n.replace(/\.json$/,""))}}async listSessions(){let e=await XF.directoryFilesWithMetadata(),I=await $z.directoryFilesWithMetadata(),l=await Promise.all(e.map(async r=>({sessionId:r.file.replace(".jsonl",""),startTime:r.ctime,modifiedTime:r.mtime}))),n=(await Promise.all(I.map(async r=>{let s=r.file.match(/^session_(.+)_(\d+)\.json$/);return s?{sessionId:s[1],startTime:r.ctime,modifiedTime:r.mtime}:null}))).filter(r=>r!==null);this.logger.debug(`Found ${l.length} JSONL sessions and ${n.length} legacy sessions`);let c=new Map;for(let r of n)c.set(r.sessionId,r);for(let r of l)c.set(r.sessionId,r);return Array.from(c.values()).sort((r,s)=>s.modifiedTime.getTime()-r.modifiedTime.getTime())}async getLastSession(){let e=await this.listSessions();if(e.length===0)return;e.sort((l,n)=>n.modifiedTime.getTime()-l.modifiedTime.getTime());let I=e[0].sessionId;return await this.getSession(I)}async deleteSession(e){await this.closeSession(e);let I=XF.path(e.sessionId);this.logger.info(`Deleting session file ${I}`),await YtI(I)}async closeSession(e){this.logger.info(`Closing session ${e.sessionId}`);let I=this.sessionWriters[e.sessionId];I&&(await I.flush(),I.dispose(),delete this.sessionWriters[e.sessionId])}getSessionsDirectory(){return idt(XF.home(),XF.directory())}setLogger(e){this.logger=e}};var VYe=class{loggers;constructor(e){this.loggers=e}isDebug(){return this.loggers.some(e=>e.isDebug())}debug(e){this.loggers.forEach(I=>I.debug(e))}log(e){this.loggers.forEach(I=>I.log(e))}info(e){this.loggers.forEach(I=>I.info(e))}notice(e){this.loggers.forEach(I=>I.notice(e))}warning(e){this.loggers.forEach(I=>I.warning(e))}error(e){this.loggers.forEach(I=>I.error(e))}startGroup(e,I){this.loggers.forEach(l=>l.startGroup(e,I))}endGroup(e){this.loggers.forEach(I=>I.endGroup(e))}};import{appendFile as ddt,access as bdt,mkdir as mdt}from"fs/promises";import{constants as hdt}from"fs";import{dirname as pdt}from"path";var RYe=class extends Mp{constructor(I,l,n){super(l,n);this.filePath=I;this.writeQueue=udt(pdt(this.filePath)).catch(()=>{})}writeQueue=Promise.resolve();log(I){this.write("LOG",I)}debug(I){super.shouldLog(8)&&this.write("DEBUG",this.filterSecrets(I).toString())}info(I){super.shouldLog(4)&&this.write("INFO",this.filterSecrets(I).toString())}notice(I){super.shouldLog(2)&&this.write("NOTICE",this.filterSecrets(I).toString())}warning(I){super.shouldLog(2)&&this.write("WARNING",this.filterSecrets(I).toString())}error(I){super.shouldLog(1)&&this.write("ERROR",this.filterSecrets(I).toString())}startGroup(I,l){super.shouldLog(l||4)&&this.write("START-GROUP",I)}endGroup(I){super.shouldLog(I||4)&&this.write("END-GROUP","")}write(I,l){let c=`${new Date().toISOString()} [${I}] ${l}
|
|
1466
|
+
`;await $_.runExclusive(i,()=>KGt(i,b,{mode:384}))}catch(b){throw new Error(`Failed to append to JSONL file ${i}: ${b}`)}},path:n,directoryFiles:async()=>{let o=FG(I(),l());try{let i=(await P_(o,{withFileTypes:!0})).filter(b=>b.isFile()&&b.name.endsWith(".jsonl")).map(b=>b.name),d=await Promise.all(i.map(async b=>{let m=FG(o,b);try{let h=await q_(m);return{file:b,mtime:h.mtime}}catch{return{file:b,mtime:new Date}}}));return d.sort((b,m)=>m.mtime.getTime()-b.mtime.getTime()),d.map(b=>b.file)}catch{return[]}},directoryFilesWithMetadata:async()=>{let o=FG(I(),l());try{let i=(await P_(o,{withFileTypes:!0})).filter(b=>b.isFile()&&b.name.endsWith(".jsonl")).map(b=>b.name),d=await Promise.all(i.map(async b=>{let m=FG(o,b);try{let h=await q_(m);return{file:b,mtime:h.mtime,birthtime:h.birthtime}}catch{return{file:b,mtime:new Date,birthtime:new Date}}}));return d.sort((b,m)=>m.mtime.getTime()-b.mtime.getTime()),d}catch{return[]}},home:I,directory:l}};var ptI=fe({host:re(),login:re()}),Iit=fe({banner:Jp(["always","once","never"]).optional(),beep:zl().optional(),last_logged_in_user:ptI.optional(),logged_in_users:ns(ptI).optional(),model:re().optional(),render_markdown:zl().optional(),screen_reader:zl().optional(),theme:re().optional(),trusted_folders:ns(re()).optional(),store_token_plaintext:zl().optional(),stream:zl().optional(),parallel_tool_execution:zl().optional(),feature_flags:fe({enabled:ns(re()).optional()}).optional(),asked_setup_terminals:ns(re()).optional(),capi_hmac_key:re().optional(),copilot_hmac_key:re().optional(),copilot_integration_id:re().optional(),copilot_tokens:uv(re(),re()).optional(),copilot_url:re().optional(),staff:zl().optional(),log_level:Jp(["none","error","warning","info","debug","all","default"]).optional()}),tit=uv(re(),WZe()),lit=tit.transform(t=>(0,utI.default)(t,(e,I)=>{let l=I.toLowerCase();return l==="github_copilot_integration_id"?"copilot_integration_id":l})),nit=lit.pipe(Iit),cit=btI(nit.parse,"config");var ZtI=["claude-sonnet-4.5","claude-sonnet-4","claude-haiku-4.5","gpt-5"];var rit=fe({command:re(),description:re(),timeout:ls().optional(),sessionId:re().optional(),async:zl().optional()}),sit=fe({sessionId:re(),input:re(),delay:ls().optional()}),ait=fe({sessionId:re(),delay:ls()}),oit=fe({sessionId:re()}),Git=ma([rit,sit,ait,oit]),iit=fe({command:NI("view"),path:re(),view_range:o7([ls(),ls()]).optional()}),dit=fe({command:NI("create"),path:re(),file_text:re()}),bit=fe({command:NI("str_replace"),path:re(),new_str:re().optional(),old_str:re()}),mit=fe({command:NI("insert"),path:re(),insert_line:ls(),new_str:re()}),hit=SB("command",[iit,dit,bit,mit]),uTl=fe({path:re(),view_range:o7([ls(),ls()]).optional()}),ZTl=fe({path:re(),file_text:re()}),WTl=fe({path:re(),old_str:re(),new_str:re().optional()}),WYe=ma([Git,hit,Cp()]);var _z=fe({type:NI("text"),text:re()}),uit=fe({type:NI("refusal"),refusal:re()}),Zit=fe({type:NI("image_url"),image_url:fe({url:re(),detail:Jp(["auto","low","high"]).optional()})}),Wit=fe({type:NI("input_audio"),input_audio:fe({data:re(),format:NI("wav").or(NI("mp3"))})}),Nit=fe({type:NI("file"),file:fe({file_date:re().optional(),file_id:re().optional(),filename:re().optional()})}),Yit=ma([_z,Zit,Wit,Nit]),Vit=fe({name:re(),arguments:re()}),Rit=fe({name:re(),input:re()}),yit=fe({id:re(),type:NI("function"),function:Vit}),git=fe({id:re(),type:NI("custom"),custom:Rit}),Fit=ma([yit,git]),Ait=fe({name:re(),arguments:re()}),Qit=fe({id:re()}),wit=fe({content:ma([re(),ns(_z)]),role:NI("developer"),name:re().optional()}),Xit=fe({content:ma([re(),ns(_z)]),role:NI("system"),name:re().optional()}),Eit=fe({content:ma([re(),ns(Yit)]),role:NI("user"),name:re().optional()}),Hit=fe({content:ma([re(),ns(ma([_z,uit]))]).nullable().optional(),role:NI("assistant"),name:re().optional(),refusal:re().nullable().optional(),audio:Qit.nullable().optional(),function_call:Ait.nullable().optional(),tool_calls:ns(Fit).optional()}),vit=fe({content:ma([re(),ns(_z)]),role:NI("tool"),tool_call_id:re()}),Cit=fe({content:re().nullable(),role:NI("function"),name:re()}),Jit=ma([wit,Xit,Eit,Hit,vit,Cit]),Lit=fe({type:NI("copilot"),text:re(),isStreaming:zl().optional()}),fit=fe({type:NI("error"),text:re()}),kit=fe({type:NI("info"),text:re()}),xit=fe({type:NI("user"),text:re()}),Bit=fe({type:NI("tool_call_requested"),callId:re(),name:re(),toolTitle:re().optional(),intentionSummary:re().nullable(),arguments:WYe,partialOutput:re().optional(),isHidden:zl().optional(),isAlwaysExpanded:zl().optional(),showNoContent:zl().optional()}),zit=fe({type:NI("tool_call_completed"),callId:re(),name:re(),toolTitle:re().optional(),intentionSummary:re().nullable(),result:ma([fe({type:NI("success"),log:re(),markdown:zl().optional()}),fe({type:NI("failure"),log:re(),markdown:zl().optional()}),fe({type:NI("rejected"),markdown:zl().optional()}),fe({type:NI("denied"),log:re(),markdown:zl().optional()})]),arguments:WYe,isHidden:zl().optional(),isAlwaysExpanded:zl().optional(),showNoContent:zl().optional()}),Uit=ma([Lit,fit,kit,xit,Bit,zit]),Sit=Uit.and(fe({id:re(),timestamp:G7.date()})),NYe=fe({sessionId:re(),startTime:G7.date(),chatMessages:ns(Jit),timeline:ns(Sit),selectedModel:Jp(ZtI).optional()}),$z=mtI(NYe.parse,"history-session");var lr=fe({id:re().uuid(),timestamp:re().datetime(),parentId:re().uuid().nullable(),ephemeral:zl().optional()}),WtI=fe({parentToolCallId:re().optional()}),Oit=lr.extend({type:NI("session.start"),data:fe({sessionId:re(),version:ls(),producer:re(),copilotVersion:re(),startTime:re().datetime(),selectedModel:re().optional()})}),Mit=lr.extend({type:NI("session.resume"),data:fe({resumeTime:re().datetime(),eventCount:ls()})}),Tit=lr.extend({type:NI("session.error"),data:fe({errorType:re(),message:re(),stack:re().optional()})}),jit=lr.extend({type:NI("session.info"),data:fe({infoType:re(),message:re()})}),Dit=lr.extend({type:NI("session.model_change"),data:fe({previousModel:re().optional(),newModel:re()})}),Kit=lr.extend({type:NI("session.import_legacy"),data:fe({legacySession:NYe,importTime:re().datetime(),sourceFile:re()})}),Pit=lr.extend({type:NI("session.idle"),ephemeral:NI(!0),data:fe({})}),qit=fe({type:Jp(["file","directory"]),path:re(),displayName:re()}),_it=lr.extend({type:NI("user.message"),data:fe({content:re(),attachments:ns(qit).optional()})}),$it=lr.extend({type:NI("assistant.turn_start"),data:fe({turnId:re()})}),edt=lr.extend({type:NI("assistant.message"),data:fe({messageId:re(),content:re(),toolRequests:ns(fe({toolCallId:re(),name:re(),arguments:Cp()})).optional()}).merge(WtI)}),Idt=lr.extend({type:NI("assistant.turn_end"),data:fe({turnId:re()})}),tdt=lr.extend({type:NI("assistant.usage"),ephemeral:NI(!0),data:fe({model:re().optional(),inputTokens:ls().optional(),outputTokens:ls().optional(),cost:ls().optional(),duration:ls().optional(),initiator:re().optional()})}),ldt=lr.extend({type:NI("abort"),data:fe({reason:re()})}),ndt=lr.extend({type:NI("tool.user_requested"),data:fe({toolCallId:re(),toolName:re(),arguments:Cp()})}),cdt=lr.extend({type:NI("tool.execution_start"),data:fe({toolCallId:re(),toolName:re(),arguments:Cp()})}),rdt=lr.extend({type:NI("tool.execution_partial_result"),ephemeral:NI(!0),data:fe({toolCallId:re(),partialOutput:re()})}),sdt=lr.extend({type:NI("tool.execution_complete"),data:fe({toolCallId:re(),success:zl(),isUserRequested:zl().optional(),result:fe({content:re()}).optional(),error:fe({message:re(),code:re().optional()}).optional()}).merge(WtI)}),adt=lr.extend({type:NI("hook.start"),data:fe({hookInvocationId:re(),hookType:re(),input:Cp()})}),odt=lr.extend({type:NI("hook.end"),data:fe({hookInvocationId:re(),hookType:re(),output:Cp(),success:zl(),error:fe({message:re(),stack:re().optional()}).optional()})}),Gdt=lr.extend({type:NI("system.message"),data:fe({content:re(),role:Jp(["system","developer"]),name:re().optional(),metadata:fe({promptVersion:re().optional(),variables:uv(Cp()).optional()}).optional()})}),NtI=SB("type",[Oit,Mit,Tit,Pit,jit,Dit,Kit,_it,$it,edt,Idt,tdt,ldt,ndt,cdt,rdt,sdt,adt,odt,Gdt]);var XF=htI(NtI.parse,"session");var e$=class{constructor(e,I,l,n=!1,c){this.session=e;this.logger=I;this.flushDebounceMs=l;this.shouldSaveSession=n;this.legacySourceFile=c;this.unsubscribe=this.session.on("*",r=>{r.ephemeral||(this.unflushedEvents.push(r),!this.shouldSaveSession&&r.type==="user.message"&&(this.shouldSaveSession=!0),r.type!=="session.resume"&&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 XF.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 YtI(this.legacySourceFile)}catch(I){this.logger.error(`Failed to delete legacy session file ${this.legacySourceFile}: ${I}`)}this.migratedLegacy=!0}}catch(I){this.logger.error(`Failed to flush events for ${this.session.sessionId}: ${I instanceof Error?I.message:String(I)}`),this.unflushedEvents.unshift(...e)}finally{this.isFlushing=!1,this.needsFlushAfterCurrent&&(this.needsFlushAfterCurrent=!1,await this.flush())}}},YYe=class extends X_{sessionWriters={};copilotVersion;flushDebounceMs;constructor({version:e,flushDebounceMs:I,...l}){super({...l}),this.copilotVersion=e||"unknown",this.flushDebounceMs=I||100}async createSession(e){let I=e?.sessionId??Za(),l=new Date,n=new zp(this.options,{sessionId:I,startTime:l});return this.sessionWriters[I]=new e$(n,this.logger,this.flushDebounceMs),n.emit("session.start",{sessionId:I,version:1,producer:"copilot-agent",copilotVersion:this.copilotVersion,startTime:l.toISOString(),selectedModel:e?.selectedModel}),n}async getSession(e,I=!0){let l,n;try{l=await this.loadSession(e)}catch{try{let c=await this.loadLegacySession(e);l=c.session,n=c.legacySourceFile}catch{return}}return this.sessionWriters[e]||(this.sessionWriters[e]=new e$(l,this.logger,this.flushDebounceMs,!0,n)),I&&l.emit("session.resume",{resumeTime:new Date().toISOString(),eventCount:l.getEvents().length}),l}async saveSession(e){await this.sessionWriters[e.sessionId]?.flush()}async loadSession(e){let I=await XF.load(e);return await zp.fromEvents(I,this.options)}async loadLegacySession(e){let l=(await $z.directoryFiles()).filter(a=>{let o=a.match(/^session_(.+)_(\d+)\.json$/);return o&&o[1]===e});if(l.length===0)throw new Error(`Legacy session ${e} not found`);let n=l[0];l.length>1&&this.logger.info(`Multiple legacy sessions found for ${e}, using newest`);let c=await $z.load(n);if(!c)throw new Error(`Failed to load legacy session from ${n}`);let r=new Date(c.startTime),s=new zp(this.options,{sessionId:c.sessionId,startTime:r});return s.emit("session.start",{sessionId:c.sessionId,version:1,producer:"copilot-agent",copilotVersion:this.copilotVersion,startTime:r.toISOString(),selectedModel:c.selectedModel}),s.emit("session.import_legacy",{legacySession:{sessionId:c.sessionId,startTime:r,chatMessages:c.chatMessages,timeline:c.timeline,selectedModel:c.selectedModel},importTime:new Date().toISOString(),sourceFile:n}),this.logger.info(`Loaded legacy session ${e} from ${n}`),{session:s,legacySourceFile:$z.path(n.replace(/\.json$/,""))}}async listSessions(){let e=await XF.directoryFilesWithMetadata(),I=await $z.directoryFilesWithMetadata(),l=await Promise.all(e.map(async r=>({sessionId:r.file.replace(".jsonl",""),startTime:r.birthtime,modifiedTime:r.mtime}))),n=(await Promise.all(I.map(async r=>{let s=r.file.match(/^session_(.+)_(\d+)\.json$/);return s?{sessionId:s[1],startTime:r.birthtime,modifiedTime:r.mtime}:null}))).filter(r=>r!==null);this.logger.debug(`Found ${l.length} JSONL sessions and ${n.length} legacy sessions`);let c=new Map;for(let r of n)c.set(r.sessionId,r);for(let r of l)c.set(r.sessionId,r);return Array.from(c.values()).sort((r,s)=>s.modifiedTime.getTime()-r.modifiedTime.getTime())}async getLastSession(){let e=await this.listSessions();if(e.length===0)return;e.sort((l,n)=>n.modifiedTime.getTime()-l.modifiedTime.getTime());let I=e[0].sessionId;return await this.getSession(I)}async deleteSession(e){await this.closeSession(e);let I=XF.path(e.sessionId);this.logger.info(`Deleting session file ${I}`),await YtI(I)}async closeSession(e){this.logger.info(`Closing session ${e.sessionId}`);let I=this.sessionWriters[e.sessionId];I&&(await I.flush(),I.dispose(),delete this.sessionWriters[e.sessionId])}getSessionsDirectory(){return idt(XF.home(),XF.directory())}setLogger(e){this.logger=e}};var VYe=class{loggers;constructor(e){this.loggers=e}isDebug(){return this.loggers.some(e=>e.isDebug())}debug(e){this.loggers.forEach(I=>I.debug(e))}log(e){this.loggers.forEach(I=>I.log(e))}info(e){this.loggers.forEach(I=>I.info(e))}notice(e){this.loggers.forEach(I=>I.notice(e))}warning(e){this.loggers.forEach(I=>I.warning(e))}error(e){this.loggers.forEach(I=>I.error(e))}startGroup(e,I){this.loggers.forEach(l=>l.startGroup(e,I))}endGroup(e){this.loggers.forEach(I=>I.endGroup(e))}};import{appendFile as ddt,access as bdt,mkdir as mdt}from"fs/promises";import{constants as hdt}from"fs";import{dirname as pdt}from"path";var RYe=class extends Mp{constructor(I,l,n){super(l,n);this.filePath=I;this.writeQueue=udt(pdt(this.filePath)).catch(()=>{})}writeQueue=Promise.resolve();log(I){this.write("LOG",I)}debug(I){super.shouldLog(8)&&this.write("DEBUG",this.filterSecrets(I).toString())}info(I){super.shouldLog(4)&&this.write("INFO",this.filterSecrets(I).toString())}notice(I){super.shouldLog(2)&&this.write("NOTICE",this.filterSecrets(I).toString())}warning(I){super.shouldLog(2)&&this.write("WARNING",this.filterSecrets(I).toString())}error(I){super.shouldLog(1)&&this.write("ERROR",this.filterSecrets(I).toString())}startGroup(I,l){super.shouldLog(l||4)&&this.write("START-GROUP",I)}endGroup(I){super.shouldLog(I||4)&&this.write("END-GROUP","")}write(I,l){let c=`${new Date().toISOString()} [${I}] ${l}
|
|
1467
1467
|
`;this.writeQueue=this.writeQueue.then(()=>this.performWrite(c)).catch(()=>{})}async performWrite(I){await ddt(this.filePath,I)}};async function udt(t){try{await bdt(t,hdt.F_OK)}catch{await mdt(t,{recursive:!0})}}async function*Ijl(t){let{prompt:e,...I}=t,l=new zp(I),n=[],c=!1,r=l.on("*",s=>{n.push(s),s.type==="session.idle"&&(c=!0)});for(l.send({prompt:e});!c||n.length>0;){let s=n.shift();s?yield s:await new Promise(a=>setTimeout(a,10))}r()}export{Mp as BaseLogger,VYe as CompoundLogger,IR as ConsoleLogger,RYe as FileLogger,dW as NoopLogger,zp as Session,NtI as SessionEventSchema,X_ as SessionManager,tot as completeOrphanedToolCalls,XW as executeHooks,VtI as internal,_v as isDebugEnvironment,Ijl as query};
|
|
1468
1468
|
/*! Bundled license information:
|
|
1469
1469
|
|