@github/copilot 0.0.351-15 → 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.
Files changed (3) hide show
  1. package/index.js +10 -7
  2. package/package.json +2 -2
  3. package/sdk/index.js +3 -2
package/index.js CHANGED
@@ -1673,6 +1673,7 @@ You *must* avoid doing any of these things you cannot or must not do, and also *
1673
1673
  * Clean up temporary files at end of task
1674
1674
  * Use view/edit for existing files (not create - avoid data loss)
1675
1675
  * Ask for guidance if uncertain
1676
+ * Do not create markdown files for planning, notes, or tracking\u2014work in memory instead. Only create a markdown file when the user explicitly asks for that specific file by name or path.
1676
1677
  </tips_and_tricks>
1677
1678
 
1678
1679
  ${Mon(n,r,a,I,d,s,c)}
@@ -2031,17 +2032,17 @@ ${a}`;await r.createOrUpdateMCPStartupToolCall({serverName:e,content:o,toolNames
2031
2032
  }
2032
2033
  }
2033
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(`
2034
- `).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,ctime:V.ctime}}catch{return{file:W,mtime:new Date,ctime: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(`
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(`
2035
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(`
2036
2037
  `)+`
2037
- `;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,ctime:Z.ctime}}catch{return{file:p,mtime:new Date,ctime: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(`
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(`
2038
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(`
2039
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(`
2040
2041
  `)}return I&&(s=s.trim()),a&&(s=s.replace(/\\n/g,`
2041
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(`
2042
2043
  `).map(d=>d.startsWith(I)?d.slice(I.length):d).join(`
2043
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(`
2044
- `),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+=`
2045
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+=`
2046
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)=>`
2047
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
@@ -2067,7 +2068,9 @@ You can restore your previous key bindings from ${I}`:"";return{state:"failed",m
2067
2068
  Path: ${a}${o}
2068
2069
  Error: ${s}`}}}var W4n=N4n(Z4n),V7e={vscode:{appName:"Code",terminalName:"VS Code"},"vscode-insiders":{appName:"Code - Insiders",terminalName:"VS Code (Insiders)"},cursor:{appName:"Cursor",terminalName:"Cursor"},windsurf:{appName:"Windsurf",terminalName:"Windsurf"}};async function Hjt(t){if(Y7e.platform()==="linux"&&process.env.WSL_DISTRO_NAME)return"wsl";let e=(process.env.VSCODE_GIT_ASKPASS_MAIN||"").toLowerCase();if(process.env.CURSOR_TRACE_ID||e.includes("cursor"))return"cursor";if(e.includes("windsurf"))return"windsurf";if(e.includes("code"))return e.includes("insiders")?"vscode-insiders":"vscode";if(process.env.TERM_PROGRAM==="vscode"||process.env.VSCODE_GIT_IPC_HANDLE)return"vscode";try{let n=Y7e.platform()==="win32"?'(Get-Process -Id (Get-CimInstance Win32_Process -Filter "ProcessId=$PID").ParentProcessId).Path':"ps -o comm= -p $PPID",{stdout:r}=await W4n(n),a=r.trim().toLowerCase();if(a.includes("windsurf"))return"windsurf";if(a.includes("cursor"))return"cursor";if(a.includes("code"))return a.includes("insiders")?"vscode-insiders":"vscode"}catch(n){t.debug(`Failed to detect parent process: ${n}`)}return null}async function Xjt(t){if(aQe())return{state:"not-needed",message:"Your terminal already has multiline support with Shift+Enter and Ctrl+Enter."};let e=await Hjt(t);if(!e)return{state:"failed",message:"No supported terminal detected. `/terminal-setup` is supported only in VS Code, Cursor and Windsurf."};switch(e){case"vscode":case"vscode-insiders":case"cursor":case"windsurf":{let l=V7e[e];return vjt(t,l.terminalName,l.appName)}case"wsl":return{state:"failed",message:"WSL terminal detected.\n\nIf you're running WSL from VS Code, Windsurf or Cursor, please switch to a supported terminal within the IDE (e.g. PowerShell or Command Prompt) and run `/terminal-setup` again."};default:return{state:"failed",message:`Terminal "${e}" not supported. \`/terminal-setup\` is supported only in VS Code, Cursor and Windsurf.`}}}async function kjt(){let t=new xd,e=await Hjt(t);if(!e||!Object.keys(V7e).includes(e))return null;try{if((await Sr.load())?.asked_setup_terminals?.includes(e))return null}catch{}switch(e){case"vscode":case"vscode-insiders":case"cursor":case"windsurf":{let l=V7e[e];return(await Cjt(t,l.terminalName,l.appName)).state==="succeeded"?{terminal:e,terminalName:l.terminalName}:null}default:return null}}async function Ljt(t,e){let l=await _c(async()=>{try{return await Sr.load()??{}}catch{return{}}}),n=l.asked_setup_terminals??[];if(!n.includes(e)){n.push(e),l.asked_setup_terminals=n;try{await Sr.writeKey("asked_setup_terminals",n)}catch(r){t.warning(`Failed to mark terminal ${e} as "already asked to set up": ${r}`)}}}function yme(t,e){let l=e.trim();if(!l.startsWith("/"))return[];let n=l.split(" ")[0];return t.filter(r=>r.name.startsWith(n)?!0:r.aliases?r.aliases.some(a=>a.startsWith(n)):!1)}function Tjt(t,e){let l=" ".repeat(e),n=t.reduce((r,a)=>{let I=a.aliases&&a.aliases.length>0?`, ${a.aliases.join(", ")}`:"";return Math.max(r,a.name.length+I.length+(a.args?a.args.length+1:0))},0);return t.map(r=>{let a=r.aliases&&r.aliases.length>0?`, ${r.aliases.join(", ")}`:"",I=(r.args?`${r.name}${a} ${r.args}`:`${r.name}${a}`).padEnd(n);return`${l}${I} ${r.help}`}).join(`
2069
2070
  `)}var Ojt={kind:"noop"};function Ujt(t){return t==="~"?Jjt():t.startsWith("~/")?y4n.join(Jjt(),t.slice(2)):t}var R4n={name:"/add-dir",args:"<directory>",help:"Add a directory to the allowed list for file access",execute:async(t,e)=>{if(e.length<1)return{kind:"add-timeline-entry",entry:{type:"error",text:`Usage: /add-dir <directory>
2070
- Example: /add-dir /home/user/projects`}};let l=e.join(" "),n=Ujt(l);try{return await t.permissions.addAllowedDirectory(n),{kind:"add-timeline-entry",entry:{type:"info",text:`Added directory to allowed list: ${n}`}}}catch(r){return{kind:"add-timeline-entry",entry:{type:"error",text:`Failed to add directory: ${r instanceof Error?r.message:String(r)}`}}}}},Y4n={name:"/agent",help:"Browse and select from available agents (if any)",execute:async(t,e)=>t.hasAvailableCustomAgents?{kind:"show-dialog",dialog:{kind:"custom-agent-picker"}}:{kind:"add-timeline-entry",entry:{type:"info",text:"No available custom agents."}}},V4n={name:"/clear",help:"Clear the conversation history",execute:async(t,e)=>(await t.session.clearHistory(),t.ui.clear(),Ojt)},w4n={name:"/cwd",args:"[directory]",help:"Change working directory or show current directory",execute:async(t,e)=>{if(e.length===0)return{kind:"add-timeline-entry",entry:{type:"info",text:`Current working directory: ${t.process.cwd}`}};let l=e.join(" "),n=Ujt(l),r=E4n(n);try{return await t.process.chdir(r),{kind:"add-timeline-entry",entry:{type:"info",text:`Changed working directory to: ${r}`}}}catch(a){return{kind:"add-timeline-entry",entry:{type:"error",text:`Failed to change directory: ${a instanceof Error?a.message:String(a)}`}}}}},Q4n={name:"/exit",aliases:["/quit"],help:"Exit the CLI",execute:async(t,e)=>({kind:"exit"})},F4n={name:"/feedback",help:"Provide feedback about the CLI",execute:async(t,e)=>({kind:"show-dialog",dialog:{kind:"feedback"}})},C4n={name:"/help",help:"Show help for interactive commands",execute:async(t,e)=>({kind:"add-timeline-entry",entry:{type:"info",text:[mPt(`
2071
+ Example: /add-dir /home/user/projects`}};let l=e.join(" "),n=Ujt(l);try{return await t.permissions.addAllowedDirectory(n),{kind:"add-timeline-entry",entry:{type:"info",text:`Added directory to allowed list: ${n}`}}}catch(r){return{kind:"add-timeline-entry",entry:{type:"error",text:`Failed to add directory: ${r instanceof Error?r.message:String(r)}`}}}}},Y4n={name:"/agent",help:"Browse and select from available agents (if any)",execute:async(t,e)=>t.customAgents.available.length===0?t.customAgents.warnings.length>0?{kind:"add-timeline-entry",entry:{type:"error",text:`No available custom agents:
2072
+ ${t.customAgents.warnings.map(n=>`\u2022 ${n}`).join(`
2073
+ `)}`}}:{kind:"add-timeline-entry",entry:{type:"info",text:"No available custom agents."}}:{kind:"show-dialog",dialog:{kind:"custom-agent-picker"}}},V4n={name:"/clear",help:"Clear the conversation history",execute:async(t,e)=>(await t.session.clearHistory(),t.ui.clear(),Ojt)},w4n={name:"/cwd",args:"[directory]",help:"Change working directory or show current directory",execute:async(t,e)=>{if(e.length===0)return{kind:"add-timeline-entry",entry:{type:"info",text:`Current working directory: ${t.process.cwd}`}};let l=e.join(" "),n=Ujt(l),r=E4n(n);try{return await t.process.chdir(r),{kind:"add-timeline-entry",entry:{type:"info",text:`Changed working directory to: ${r}`}}}catch(a){return{kind:"add-timeline-entry",entry:{type:"error",text:`Failed to change directory: ${a instanceof Error?a.message:String(a)}`}}}}},Q4n={name:"/exit",aliases:["/quit"],help:"Exit the CLI",execute:async(t,e)=>({kind:"exit"})},F4n={name:"/feedback",help:"Provide feedback about the CLI",execute:async(t,e)=>({kind:"show-dialog",dialog:{kind:"feedback"}})},C4n={name:"/help",help:"Show help for interactive commands",execute:async(t,e)=>({kind:"add-timeline-entry",entry:{type:"info",text:[mPt(`
2071
2074
  Global shortcuts:
2072
2075
  @ - mention files, include contents in the current context
2073
2076
  Esc - cancel the current operation
@@ -2426,7 +2429,7 @@ Please report this to https://github.com/markedjs/marked.`,t){let n="<p>An error
2426
2429
 
2427
2430
  ${n}`:""),isTruncated:!0}}return{problemStatement:t+(e?`
2428
2431
 
2429
- ${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(`
2430
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(`
2431
2434
  `):t}var lPn=/[\u2500-\u257F\u2580-\u259F]/g;function y7(t){return BR(t).replace(/\r/g,`
2432
2435
  `).replace(/\t/g," ").replace(lPn,"")}function ICe(t){try{return Ao.parse(t,{async:!1}).replace(/\n{3,}/g,`
@@ -2467,7 +2470,7 @@ Run `+Sl.cyan("{updateCommand}")+" to update",a=e.message||r;e.boxenOptions??={p
2467
2470
  `||V[O-1]===" "){X=O;break}}else if(T===" "||T===`
2468
2471
  `||T===" ")break}if(X===-1)return{isAtMention:!1,atPosition:-1,query:""};let S=V.slice(X+1,v);return S.includes(" ")||S.includes(`
2469
2472
  `)||S.includes(" ")?{isAtMention:!1,atPosition:-1,query:""}:{isAtMention:!0,atPosition:X,query:S}},[t.text,t.cursorPosition]);(0,cJ.useEffect)(()=>{if(!d.isAtMention){r([]),I(0);return}let V=!1,v=async()=>{try{let S=await c.search(d.query),O=[...S];d.query===""&&l&&(O=[...l.getDirectories().map(x=>({path:x,relativePath:`[DIR] ${x}`,score:1})),...S]),V||(r(O),I(0))}catch{V||(r([]),I(0))}},X=setTimeout(()=>{v()},200);return()=>{V=!0,clearTimeout(X)}},[d.query,d.isAtMention,c]);let m=()=>{n.length!==0&&I(V=>V>0?V-1:n.length-1)},G=()=>{n.length!==0&&I(V=>V<n.length-1?V+1:0)},p=()=>{if(!d.isAtMention||n.length===0)return null;let V=n[a];if(!V)return null;let v=`@${V.relativePath}`,X=`${v} `,{text:S,cursorPosition:O}=t,T=S.slice(0,d.atPosition),P=S.slice(O),x=T+X+P,D={displayText:v,fullPath:V.path,type:V.relativePath.startsWith("[DIR]")?"directory":"file",startIndex:d.atPosition};return o(ae=>{let Ge=new Map(ae);return Ge.set(D.startIndex,D),Ge}),t.setText(x),t.setCursorPosition(d.atPosition+X.length),V.relativePath},A=()=>{r([]),I(0)},Z=()=>{o(new Map)};return[{isActive:d.isAtMention&&n.length>0,query:d.query,suggestions:n,selectedIndex:a,atPosition:d.atPosition,storedMentions:s},{navigateUp:m,navigateDown:G,complete:p,reset:A,clearStoredMentions:Z}]}var Gve=$e($t(),1),IGl=$e(nBe(),1);import{readdir as n7n,readFile as r7n}from"node:fs/promises";import a7n,{join as aGl}from"node:path";function lU(t,e){if(e instanceof Error)return`${t}: ${e.message}`;if(typeof e=="object"&&e!==null)try{return`${t}: ${JSON.stringify(e)}`}catch{return`${t}: [object with circular reference]`}else return`${t}: ${String(e)}`}var bve=$e($t(),1);var eGl=$e($bl(),1);function Rnt(t){try{let e=(0,eGl.default)(t.FetchURL);return e.source!=="github.com"||!e.owner||!e.name?null:{owner:e.owner,name:e.name,host:"github.com"}}catch{return null}}async function mve(t){let e=await YPt(t);if(e.length===0)return null;if(e.length===1)return Rnt(e[0]);let l=e.find(n=>n.Name==="origin");return Rnt(l||e[0])}function tGl(t){let[e,l]=(0,bve.useState)(null);return(0,bve.useEffect)(()=>{(async()=>{let n=await Ynt(t);l(r=>!r||r.kind!==n.kind||r.path!==n.path||n.kind==="git"&&r.kind==="git"&&(r.repo?.owner!==n.repo?.owner||r.repo?.name!==n.repo?.name)?n:r)})()},[t]),e}async function Ynt(t){let e=await uY(t);if(!e.found)return{kind:"plain",path:t};try{let l=await mve(e.gitRoot);return{kind:"git",path:e.gitRoot,repo:l}}catch{return{kind:"git",path:e.gitRoot,repo:null}}}function sGl(t,e,l,n,r,a){let[I,s]=(0,Gve.useState)({selected:null,available:[],warnings:[]}),o=tGl(a);return(0,Gve.useEffect)(()=>{if(!t)return;(async()=>{let{agents:d,warnings:m}=await Vnt(e,l,n,a7n.join(r,"agents"),o);s({selected:null,available:d,warnings:m})})()},[t,e,l,n,r,o]),{customAgents:I,selectCustomAgent:async c=>{if(!t)throw new Error("attempted to use disabled feature flagged feature");let d=I.available.find(G=>G.id===c);if(!d)throw new Error(`attempted to select unknown custom agent: ${c} from ${I.available.map(G=>G.id).join(", ")}`);let m=await d.prompt().then(G=>({kind:"success",prompt:G}),G=>({kind:"error",message:lU("loading custom agent prompt",G)}));return m.kind==="error"?{kind:"error",message:m.message}:(s(G=>({...G,selected:{id:d.id,displayName:d.displayName,prompt:m.prompt,mcpServers:d.mcpServers}})),{kind:"success"})}}}function lGl(t){let e=new Set,l=[];for(let n of t)e.has(n.id)||(e.add(n.id),l.push(n));return l}async function Vnt(t,e,l,n,r){let a=await nGl(n);if(r===null)return{agents:a.agents,warnings:a.warnings};let I=await nGl(aGl(r.path,".github","agents")),s=lGl([...a.agents,...I.agents]),o=[...a.warnings,...I.warnings];if(r.kind!=="git")return{agents:s,warnings:o};if(!r.repo)return{agents:s,warnings:[...o,"could not load remote agents, no github.com remote found"]};if(!l)return{agents:s,warnings:[...o,O7(r.repo,"no authentication available")]};let c=await I7n(t,e,l,r.repo);return{agents:lGl([...s,...c.agents]),warnings:[...o,...c.warnings]}}function O7(t,e){return`could not load remote agents for ${t.owner}/${t.name}: ${e}`}async function I7n(t,e,l,n){let r=iY(l,{onHMACAuthInfo:()=>Mte,onEnvAuthInfo:A=>A.host,onGhCliAuthInfo:A=>A.host,onUserAuthInfo:A=>A.host,onApiKeyAuthInfo:A=>A.host}),{host:a}=new URL(r);if(a!=="github.com")return{agents:[],warnings:[O7(n,"auth info does not target github.com")]};let I=await Iy(l);if(!I)return{agents:[],warnings:[O7(n,"no usable token for accessing repo contents found")]};let s=await oGl(()=>E0(r,I,t),A=>lU("fetching copilot URL",A));if(s.kind==="error")return{agents:[],warnings:[O7(n,s.message)]};let o=`${s.value}/agents/swe/custom-agents/${n.owner}/${n.name}?exclude_invalid_config=true`,c={Authorization:`Bearer ${I}`},d=await ZC(o,{method:"GET",headers:c},t);if(!d.ok)return t.warning(`Failed to load custom agents for ${n.owner}/${n.name}: ${await d.text()}`),{agents:[],warnings:[O7(n,`server returned ${d.status}: ${d.statusText}`)]};let m=await d.json(),p=UI.object({agents:UI.array(cGl)}).safeParse(m);return p.success?{agents:p.data.agents.map(A=>({id:A.name,displayName:A.display_name,description:A.description,tools:A.tools,prompt:async()=>{let Z=await u7n({logger:t,integrationId:e,sweAgentsEndpoint:`${s.value}/agents/swe`,token:I,repoOwner:A.repo_owner,repoName:A.repo_name,customAgentName:A.name});if(!Z)throw new Error(`Failed to load prompt for agent ${A.name}`);return Z.prompt},mcpServers:{}})),warnings:[]}:{agents:[],warnings:[O7(n,lU("parsing http response into schema",p.error))]}}async function nGl(t){let e=await n7n(t,{withFileTypes:!0}).then(r=>({kind:"success",dirEntries:r})).catch(r=>r.code==="ENOENT"?{kind:"success",dirEntries:[]}:{kind:"error",message:lU(t,r)});if(e.kind==="error")return{agents:[],warnings:[]};let l=[],n=[];for(let r of e.dirEntries)if(r.isFile()&&r.name.endsWith(".md")){let a=aGl(t,r.name),I=r.name.slice(0,-3),s=await rGl(a);if(s.kind==="error"){n.push(s.message);continue}l.push({id:I,displayName:s.agent.name,description:s.agent.description,tools:s.agent.tools||["*"],prompt:async()=>{let o=await rGl(a);if(o.kind==="error")throw new Error(o.message);return await o.agent.prompt()},mcpServers:s.agent.mcpServers||{}})}return{agents:l,warnings:n}}async function rGl(t){let e=await oGl(()=>r7n(t,"utf-8"),n=>lU(t,n));if(e.kind==="error")return{kind:"error",message:e.message};let l=s7n(e.value);return l.kind==="error"?{kind:"error",message:`${t}: ${l.message}`}:{kind:"success",agent:l.agent}}var s7n=t=>{let e=UI.object({name:UI.string(),description:UI.string(),tools:UI.array(UI.string()).optional(),"mcp-servers":iGl}),l=/^---\s*\n([\s\S]*?)\n---\s*\n?/,n=t.match(l);if(!n)return{kind:"error",message:"custom agent markdown frontmatter is malformed"};let r=n[1];try{let a=(0,IGl.parse)(r),I=e.safeParse(a);if(!I.success)return{kind:"error",message:o7n(I.error)};let s=t.slice(n[0].length);return{kind:"success",agent:{name:I.data.name,description:I.data.description,tools:I.data.tools||["*"],prompt:()=>Promise.resolve(s),mcpServers:I.data["mcp-servers"]||void 0}}}catch(a){return{kind:"error",message:lU("failed to parse front matter",a)}}};function o7n(t){let e=(l,n="")=>{let r=l.path.join(".")||"(root)",a=[];return l.code==="invalid_union"&&"unionErrors"in l?(a.push(`${n}${r}: ${l.message}`),l.unionErrors.forEach((s,o)=>{a.push(`${n} Option ${o+1}:`),s.issues.forEach(c=>{a.push(...e(c,n+" "))})})):a.push(`${n}${r}: ${l.message}`),a};return t.issues.flatMap(l=>e(l)).join(`
2470
- `)}async function oGl(t,e){try{return{kind:"success",value:await t()}}catch(l){return{kind:"error",message:e(l)}}}var i7n=UI.object({command:UI.string(),args:UI.array(UI.string()),env:UI.record(UI.string(),UI.string()).optional(),tools:UI.array(UI.string()),type:UI.enum(["local","stdio"]).optional()}),c7n=UI.object({url:UI.string(),headers:UI.record(UI.string(),UI.string()).optional(),tools:UI.array(UI.string()),type:UI.enum(["http","sse"])}),iGl=UI.record(UI.string(),UI.union([i7n,c7n])).optional().nullable(),cGl=UI.object({name:UI.string(),repo_owner:UI.string(),repo_name:UI.string(),display_name:UI.string(),description:UI.string(),tools:UI.array(UI.string()),version:UI.string(),mcp_servers:iGl}),d7n=cGl.extend({prompt:UI.string()});async function u7n(t){t.logger.info(`Reading custom agent "${t.customAgentName}" from ${t.repoOwner}/${t.repoName}`);try{let e={"Copilot-Integration-Id":t.integrationId,Authorization:`Bearer ${t.token}`,"X-GitHub-Job-Nonce":t.jobNonce??""},l=await ZC(`${t.sweAgentsEndpoint}/custom-agents/${t.repoOwner}/${t.repoName}/${t.customAgentName}`,{method:"GET",headers:e},t.logger,"get custom agent config");if(!l.ok){if(l.status===404)return null;throw new Error(`Failed to get custom agent config: ${l.status} ${l.statusText}`)}let n=await l.json();return d7n.parse(n)}catch(e){let l=e,n=l?.requestId||"unknown";throw t.logger.error(`Failed to get custom agent config (request ID: ${n}): ${l}`),l}}var uy=$e($t(),1);function dGl(t){let{cliModel:e,session:l,currentWorkingDirectory:n,customAgentName:r,stdoutColumns:a,models:I}=t,[s,o]=(0,uy.useState)({gitRoot:"",found:!1}),[c,d]=(0,uy.useState)(null);(0,uy.useEffect)(()=>{(async()=>{d(null);let V=await uY(n);o(V)})()},[n]);let m=(0,uy.useCallback)(async()=>{if(!s.found){d(null);return}let R=await wPt(s.gitRoot);if(!R){d(null);return}let V=await VPt(s.gitRoot);d(v=>v?.branch===R&&v?.hasChanges===V?v:{branch:R,hasChanges:V})},[s]),G=(0,uy.useMemo)(()=>CEe(n),[n]),[p,A]=(0,uy.useState)("");(0,uy.useEffect)(()=>{(async()=>{if(!I||I.type!=="success")return;let V=await iO(e,l,I.list);V&&A(v=>v===V?v:V)})()},[e,l,I]);let Z=(0,uy.useMemo)(()=>{if(!c||!c.branch)return null;let R=a||80,V=p.length,v=r?.length||0,X=G.length,S=c.hasChanges?6:5,T=V+X+S+4+v,x=Math.max(8,R-T)-3;return`[\u2387 ${c.branch.length>x?c.branch.substring(0,x)+"...":c.branch}${c.hasChanges?"*":""}]`},[c,a,G,p]),W=(0,uy.useMemo)(()=>{if(!p)return p;let R=I&&I.type==="success"?I.list:void 0,V=Qq(p,R);return`${p} (${V}x)`},[p,I]);return{displayCwd:G,gitBranchInfo:Z,selectedModel:p,selectedModelDisplay:W,setSelectedModel:A,updateGitStatus:m}}var fg=$e($t(),1),m7n=3*1e3;function uGl(){let[t,e]=(0,fg.useState)("idle"),[l,n]=(0,fg.useState)(0),[r,a]=(0,fg.useState)(0),[I,s]=(0,fg.useState)(!1),o=(0,fg.useRef)(null);(0,fg.useEffect)(()=>()=>{o.current&&clearTimeout(o.current)},[]);let c=(0,fg.useCallback)(()=>{o.current&&(clearTimeout(o.current),o.current=null),e("indexing"),n(0),a(0),s(!0)},[]),d=(0,fg.useCallback)((A,Z)=>{e("completed"),n(A),a(Z),s(!0),o.current=setTimeout(()=>{s(!1),o.current=null},m7n)},[]),m=(0,fg.useCallback)(()=>{o.current&&(clearTimeout(o.current),o.current=null),e("idle"),n(0),a(0),s(!1)},[]),G={state:t,fileCount:l,durationMs:r,isVisible:I},p=(0,fg.useMemo)(()=>({startIndexing:c,completeIndexing:d,reset:m}),[c,d,m]);return[G,p]}var mGl=$e($t(),1);function bGl(t,e){(0,mGl.useEffect)(()=>{if(t)return t.on("assistant.message",l=>{if(l.data.toolRequests){for(let n of l.data.toolRequests)if(n.name===WE.name){let r=n.arguments.intent;r&&e(r)}}})},[t,e])}var pve=$e($t(),1);var nGe=class{hosts=new Map;logger;constructor(e){this.logger=e}async getOrCreateHost(e,l){if(!l||Object.keys(l).length===0)return;let n=this.hosts.get(e);if(n)return n;try{let r={mcpServers:l},a=new HL(this.logger,r);return await a.startServers(),this.hosts.set(e,a),this.logger.info(`Started ${Object.keys(l).length} MCP server(s) for ${e}`),a}catch(r){this.logger.error(`Failed to start MCP servers for ${e}: ${r}`);return}}getHost(e){return this.hosts.get(e)}async cleanup(){let e=[];for(let[l,n]of this.hosts.entries())e.push(n.stopServers().catch(r=>{this.logger.error(`Error stopping MCP host for ${l}: ${r}`)}));await Promise.all(e),this.hosts.clear()}size(){return this.hosts.size}};function GGl(t){let e=(0,pve.useRef)(null);return e.current||(e.current=new nGe(t)),(0,pve.useEffect)(()=>()=>{e.current&&e.current.cleanup().catch(l=>{t.error(`Error cleaning up MCP host cache: ${l}`)})},[t]),e.current}var hve=$e($t(),1);function pGl(t,e,l,n){let[r,a]=(0,hve.useState)();return(0,hve.useEffect)(()=>{async function I(){if(!l)return;let s=await wnt(t,e,l,n);a(s)}I()},[l,e,n]),{models:r}}async function wnt(t,e,l,n){if(xL())return{type:"success",list:[]};try{if(l.type==="hmac")return{type:"success",list:await yT.createWithHmac(t,Mte,n,l.hmac,e).listModels()};let r=await Iy(l);if(!r)return{type:"noauth"};let a=await E0(l.host,r,t);return{type:"success",list:await yT.createWithOAuthToken(t,a,n,r,e).listModels()}}catch(r){return{type:"error",error:r}}}var dQ=$e($t(),1);function hGl(t=3){let[e,l]=(0,dQ.useState)(!1),n=(0,dQ.useRef)(null),r=(0,dQ.useRef)(t*1e3);(0,dQ.useEffect)(()=>{r.current=t*1e3},[t]),(0,dQ.useEffect)(()=>()=>{n.current&&clearTimeout(n.current)},[]);let a=(0,dQ.useCallback)(I=>{n.current&&(clearTimeout(n.current),n.current=null),l(!0);let s=I!==void 0?I*1e3:r.current;n.current=setTimeout(()=>{l(!1),n.current=null},s)},[]);return[e,a]}var rGe=$e($t(),1);function AGl({builtInSlashCommands:t,logger:e,currentWorkingDirectory:l,setCurrentWorkingDirectory:n,fileSearch:r,authManager:a,mcpHost:I,loginStatus:s,setLoginStatus:o,addEntryToSession:c,clearSessionHistory:d,getSessionUsageOutput:m,pathManager:G,resetSessionToolApprovals:p,clearTimeline:A,clearHeader:Z,clearContextWindowMetrics:W,setThemePreference:R,refreshStatic:V,hasAvailableCustomAgents:v,slashCommandResultActions:X}){let S=(0,rGe.useMemo)(()=>({logger:e,slashCommands:t,hasAvailableCustomAgents:v,mcp:{host:I,config:async()=>await dY.load()||{mcpServers:{}},hasServer:async P=>(await S.mcp.config())?.mcpServers[P]!==void 0,deleteServer:async P=>{let x=await S.mcp.config();delete x.mcpServers[P],await dY.write(x)}},auth:{availableAuthMethods:()=>tPt(a,s.authInfo),loginStatus:s,logout:async()=>{let P=await a.logout();return o({status:"NotLoggedIn"}),P}},session:{addTimelineEntry:c,clearHistory:d,usageOutput:m},permissions:{allowedDirs:G.getDirectories.bind(G),addAllowedDirectory:G.addDirectory.bind(G),resetSessionToolApprovals:p},process:{cwd:l,chdir:async P=>{process.chdir(P),await G.updatePrimaryDirectory(P),n(P),await r.setRootPath(P)}},ui:{getThemePreference:Dwe,setThemePreference:R,clear:()=>{A(),Z(),W(),V()}}}),[t,e,l,n,r,a,I,s,o,c,d,m,G,p,Z,W,R,V,v]),O=(0,rGe.useCallback)(async P=>{let x=_c(()=>{let K=P.trim();return K==="?"?"/help":K});if(!x.startsWith("/"))return{handled:!1};let D=x.split(" ")[0],ae=t.find(K=>K.name===D||K.aliases?.includes(D));if(!ae)return{handled:!1};let Ge=x.substring(ae.name.length).trim().split(" ").filter(K=>K),he=await ae.execute(S,Ge);if(!he)return{handled:!0};switch(he.kind){case"exit":return X.exit(),{handled:!0};case"add-timeline-entry":return c(he.entry),{handled:!0};case"show-dialog":switch(he.dialog.kind){case"custom-agent-picker":X.showCustomAgentPickerDialog();break;case"feedback":X.showFeedbackDialog();break;case"login":X.showLoginDialog();break;case"mcp":X.showMCPDialog(he.dialog.mode,he.dialog.serverName);break;case"model-picker":X.showModelPickerDialog();break;case"session":X.showSessionDialog();break;case"user-switcher":X.showUserSwitcherDialog();break;default:wo(he.dialog,`Unknown dialog kind: ${he.dialog}`)}return{handled:!0};case"set-model":return await X.setModel(he.model),{handled:!0};case"noop":return{handled:!0};case"start-remote-delegate":return X.startRemoteDelegation(he.prompt),{handled:!0};default:wo(he,`Unknown slash command result kind: ${he}`)}},[t,c,X,S]),T=(0,rGe.useCallback)(P=>yme(t,P),[t]);return{slashCommands:t,handleSlashCommand:O,matchingSlashCommands:T}}var Ave=$e($t(),1);function gGl(t,e,l){let n=(0,Ave.useMemo)(()=>new Map,[]);(0,Ave.useEffect)(()=>{(async()=>{if(Object.keys(t).length===0||t.staff!==void 0||!e)return;let a=await Iy(e),I=e.type==="hmac"?void 0:e.host;if(!a||I!==kL)return;let s=n.get(a)??ozt(I,a).catch(()=>!1);n.set(a,s),await s&&(await Sr.writeKey("staff",!0),await Sr.writeKey("log_level","all"),l({type:"info",text:"Staff mode activated! Restart the app to enable staff features \u2728"}))})()},[t,e,l])}var dJ=$e($t(),1);function ZGl(t,e,l){let[n,r]=(0,dJ.useState)(null),a=(0,dJ.useRef)("");return(0,dJ.useEffect)(()=>{e.text!==a.current&&(n?.availableOptions.some(o=>e.text===o.name)||r(null),a.current=e.text)},[e.text,n]),{handleTabCompletion:(0,dJ.useCallback)(()=>{let s=o=>{let c=o.indexOf(" ");return c===-1?!1:o.slice(c+1).trim().length>0};if(n){if(s(e.text)){r(null);return}let o=(n.currentIndex+1)%n.availableOptions.length,c=n.availableOptions[o];e.setText(c.name),r({...n,currentIndex:o}),l.setSlashCommandPickerIndex(o)}else{if(s(e.text))return;let o=yme(t,e.text);if(o.length===1){let c=o[0],d=c.name;for(let m=d.length-1;m>=2;m--){let G=d.slice(0,m),p=yme(t,G);if(p.length>1){let A=p.findIndex(R=>R.name===c.name);r({originalInput:G,availableOptions:p,currentIndex:A>=0?A:0});let Z=(A+1)%p.length,W=p[Z];e.setText(W.name),r({originalInput:G,availableOptions:p,currentIndex:Z}),l.setSlashCommandPickerIndex(Z);return}}}o.length>1?(r({originalInput:e.text,availableOptions:o,currentIndex:0}),e.setText(o[0].name),l.setSlashCommandPickerIndex(0)):o.length===1&&e.setText(o[0].name)}},[n,e,l]),tabCyclingState:n}}var tH=$e($t(),1);function NGl(){let[t,e]=(0,tH.useState)({columns:process.stdout.columns,rows:process.stdout.rows}),l=(0,tH.useRef)(()=>{}),n=(0,tH.useCallback)(a=>{l.current=a||(()=>{})},[]),r=(0,tH.useCallback)(()=>{let{columns:a,rows:I}=process.stdout;e({columns:a,rows:I}),l.current(a,I)},[]);return(0,tH.useEffect)(()=>(process.stdout.on("resize",r),()=>{process.stdout.off("resize",r)}),[]),{...t,setOnResize:n}}var M7=$e($t(),1);var uJ=t=>/\s/.test(t);function b7n(t,e){if(e>=t.length)return t.length;let l=e;for(;l<t.length&&uJ(t[l]);)l+=t[l].length;for(;l<t.length&&!uJ(t[l]);)l+=t[l].length;return l}function WGl(t,e){if(e===0)return 0;let l=e-1;for(;l>=0&&uJ(t[l]);)l-=t[l].length;if(l<0)return 0;for(;l>=0&&!uJ(t[l]);)l-=t[l].length;return l+1}function G7n(t,e){if(e>=t.length)return t.length;let l=e;for(;l<t.length&&!uJ(t[l]);)l+=t[l].length;for(;l<t.length&&uJ(t[l]);)l+=t[l].length;return l}function nU(t,e){if(e<=0)return[t];let l=t.split(`
2473
+ `)}async function oGl(t,e){try{return{kind:"success",value:await t()}}catch(l){return{kind:"error",message:e(l)}}}var i7n=UI.object({command:UI.string(),args:UI.array(UI.string()),env:UI.record(UI.string(),UI.string()).optional(),tools:UI.array(UI.string()),type:UI.enum(["local","stdio"]).optional()}),c7n=UI.object({url:UI.string(),headers:UI.record(UI.string(),UI.string()).optional(),tools:UI.array(UI.string()),type:UI.enum(["http","sse"])}),iGl=UI.record(UI.string(),UI.union([i7n,c7n])).optional().nullable(),cGl=UI.object({name:UI.string(),repo_owner:UI.string(),repo_name:UI.string(),display_name:UI.string(),description:UI.string(),tools:UI.array(UI.string()),version:UI.string(),mcp_servers:iGl}),d7n=cGl.extend({prompt:UI.string()});async function u7n(t){t.logger.info(`Reading custom agent "${t.customAgentName}" from ${t.repoOwner}/${t.repoName}`);try{let e={"Copilot-Integration-Id":t.integrationId,Authorization:`Bearer ${t.token}`,"X-GitHub-Job-Nonce":t.jobNonce??""},l=await ZC(`${t.sweAgentsEndpoint}/custom-agents/${t.repoOwner}/${t.repoName}/${t.customAgentName}`,{method:"GET",headers:e},t.logger,"get custom agent config");if(!l.ok){if(l.status===404)return null;throw new Error(`Failed to get custom agent config: ${l.status} ${l.statusText}`)}let n=await l.json();return d7n.parse(n)}catch(e){let l=e,n=l?.requestId||"unknown";throw t.logger.error(`Failed to get custom agent config (request ID: ${n}): ${l}`),l}}var uy=$e($t(),1);function dGl(t){let{cliModel:e,session:l,currentWorkingDirectory:n,customAgentName:r,stdoutColumns:a,models:I}=t,[s,o]=(0,uy.useState)({gitRoot:"",found:!1}),[c,d]=(0,uy.useState)(null);(0,uy.useEffect)(()=>{(async()=>{d(null);let V=await uY(n);o(V)})()},[n]);let m=(0,uy.useCallback)(async()=>{if(!s.found){d(null);return}let R=await wPt(s.gitRoot);if(!R){d(null);return}let V=await VPt(s.gitRoot);d(v=>v?.branch===R&&v?.hasChanges===V?v:{branch:R,hasChanges:V})},[s]),G=(0,uy.useMemo)(()=>CEe(n),[n]),[p,A]=(0,uy.useState)("");(0,uy.useEffect)(()=>{(async()=>{if(!I||I.type!=="success")return;let V=await iO(e,l,I.list);V&&A(v=>v===V?v:V)})()},[e,l,I]);let Z=(0,uy.useMemo)(()=>{if(!c||!c.branch)return null;let R=a||80,V=p.length,v=r?.length||0,X=G.length,S=c.hasChanges?6:5,T=V+X+S+4+v,x=Math.max(8,R-T)-3;return`[\u2387 ${c.branch.length>x?c.branch.substring(0,x)+"...":c.branch}${c.hasChanges?"*":""}]`},[c,a,G,p]),W=(0,uy.useMemo)(()=>{if(!p)return p;let R=I&&I.type==="success"?I.list:void 0,V=Qq(p,R);return`${p} (${V}x)`},[p,I]);return{displayCwd:G,gitBranchInfo:Z,selectedModel:p,selectedModelDisplay:W,setSelectedModel:A,updateGitStatus:m}}var fg=$e($t(),1),m7n=3*1e3;function uGl(){let[t,e]=(0,fg.useState)("idle"),[l,n]=(0,fg.useState)(0),[r,a]=(0,fg.useState)(0),[I,s]=(0,fg.useState)(!1),o=(0,fg.useRef)(null);(0,fg.useEffect)(()=>()=>{o.current&&clearTimeout(o.current)},[]);let c=(0,fg.useCallback)(()=>{o.current&&(clearTimeout(o.current),o.current=null),e("indexing"),n(0),a(0),s(!0)},[]),d=(0,fg.useCallback)((A,Z)=>{e("completed"),n(A),a(Z),s(!0),o.current=setTimeout(()=>{s(!1),o.current=null},m7n)},[]),m=(0,fg.useCallback)(()=>{o.current&&(clearTimeout(o.current),o.current=null),e("idle"),n(0),a(0),s(!1)},[]),G={state:t,fileCount:l,durationMs:r,isVisible:I},p=(0,fg.useMemo)(()=>({startIndexing:c,completeIndexing:d,reset:m}),[c,d,m]);return[G,p]}var mGl=$e($t(),1);function bGl(t,e){(0,mGl.useEffect)(()=>{if(t)return t.on("assistant.message",l=>{if(l.data.toolRequests){for(let n of l.data.toolRequests)if(n.name===WE.name){let r=n.arguments.intent;r&&e(r)}}})},[t,e])}var pve=$e($t(),1);var nGe=class{hosts=new Map;logger;constructor(e){this.logger=e}async getOrCreateHost(e,l){if(!l||Object.keys(l).length===0)return;let n=this.hosts.get(e);if(n)return n;try{let r={mcpServers:l},a=new HL(this.logger,r);return await a.startServers(),this.hosts.set(e,a),this.logger.info(`Started ${Object.keys(l).length} MCP server(s) for ${e}`),a}catch(r){this.logger.error(`Failed to start MCP servers for ${e}: ${r}`);return}}getHost(e){return this.hosts.get(e)}async cleanup(){let e=[];for(let[l,n]of this.hosts.entries())e.push(n.stopServers().catch(r=>{this.logger.error(`Error stopping MCP host for ${l}: ${r}`)}));await Promise.all(e),this.hosts.clear()}size(){return this.hosts.size}};function GGl(t){let e=(0,pve.useRef)(null);return e.current||(e.current=new nGe(t)),(0,pve.useEffect)(()=>()=>{e.current&&e.current.cleanup().catch(l=>{t.error(`Error cleaning up MCP host cache: ${l}`)})},[t]),e.current}var hve=$e($t(),1);function pGl(t,e,l,n){let[r,a]=(0,hve.useState)();return(0,hve.useEffect)(()=>{async function I(){if(!l)return;let s=await wnt(t,e,l,n);a(s)}I()},[l,e,n]),{models:r}}async function wnt(t,e,l,n){if(xL())return{type:"success",list:[]};try{if(l.type==="hmac")return{type:"success",list:await yT.createWithHmac(t,Mte,n,l.hmac,e).listModels()};let r=await Iy(l);if(!r)return{type:"noauth"};let a=await E0(l.host,r,t);return{type:"success",list:await yT.createWithOAuthToken(t,a,n,r,e).listModels()}}catch(r){return{type:"error",error:r}}}var dQ=$e($t(),1);function hGl(t=3){let[e,l]=(0,dQ.useState)(!1),n=(0,dQ.useRef)(null),r=(0,dQ.useRef)(t*1e3);(0,dQ.useEffect)(()=>{r.current=t*1e3},[t]),(0,dQ.useEffect)(()=>()=>{n.current&&clearTimeout(n.current)},[]);let a=(0,dQ.useCallback)(I=>{n.current&&(clearTimeout(n.current),n.current=null),l(!0);let s=I!==void 0?I*1e3:r.current;n.current=setTimeout(()=>{l(!1),n.current=null},s)},[]);return[e,a]}var rGe=$e($t(),1);function AGl({builtInSlashCommands:t,logger:e,currentWorkingDirectory:l,setCurrentWorkingDirectory:n,fileSearch:r,authManager:a,mcpHost:I,loginStatus:s,setLoginStatus:o,addEntryToSession:c,clearSessionHistory:d,getSessionUsageOutput:m,pathManager:G,resetSessionToolApprovals:p,clearTimeline:A,clearHeader:Z,clearContextWindowMetrics:W,setThemePreference:R,refreshStatic:V,customAgents:v,slashCommandResultActions:X}){let S=(0,rGe.useMemo)(()=>({logger:e,slashCommands:t,customAgents:v,mcp:{host:I,config:async()=>await dY.load()||{mcpServers:{}},hasServer:async P=>(await S.mcp.config())?.mcpServers[P]!==void 0,deleteServer:async P=>{let x=await S.mcp.config();delete x.mcpServers[P],await dY.write(x)}},auth:{availableAuthMethods:()=>tPt(a,s.authInfo),loginStatus:s,logout:async()=>{let P=await a.logout();return o({status:"NotLoggedIn"}),P}},session:{addTimelineEntry:c,clearHistory:d,usageOutput:m},permissions:{allowedDirs:G.getDirectories.bind(G),addAllowedDirectory:G.addDirectory.bind(G),resetSessionToolApprovals:p},process:{cwd:l,chdir:async P=>{process.chdir(P),await G.updatePrimaryDirectory(P),n(P),await r.setRootPath(P)}},ui:{getThemePreference:Dwe,setThemePreference:R,clear:()=>{A(),Z(),W(),V()}}}),[t,e,l,n,r,a,I,s,o,c,d,m,G,p,Z,W,R,V,v]),O=(0,rGe.useCallback)(async P=>{let x=_c(()=>{let K=P.trim();return K==="?"?"/help":K});if(!x.startsWith("/"))return{handled:!1};let D=x.split(" ")[0],ae=t.find(K=>K.name===D||K.aliases?.includes(D));if(!ae)return{handled:!1};let Ge=x.substring(ae.name.length).trim().split(" ").filter(K=>K),he=await ae.execute(S,Ge);if(!he)return{handled:!0};switch(he.kind){case"exit":return X.exit(),{handled:!0};case"add-timeline-entry":return c(he.entry),{handled:!0};case"show-dialog":switch(he.dialog.kind){case"custom-agent-picker":X.showCustomAgentPickerDialog();break;case"feedback":X.showFeedbackDialog();break;case"login":X.showLoginDialog();break;case"mcp":X.showMCPDialog(he.dialog.mode,he.dialog.serverName);break;case"model-picker":X.showModelPickerDialog();break;case"session":X.showSessionDialog();break;case"user-switcher":X.showUserSwitcherDialog();break;default:wo(he.dialog,`Unknown dialog kind: ${he.dialog}`)}return{handled:!0};case"set-model":return await X.setModel(he.model),{handled:!0};case"noop":return{handled:!0};case"start-remote-delegate":return X.startRemoteDelegation(he.prompt),{handled:!0};default:wo(he,`Unknown slash command result kind: ${he}`)}},[t,c,X,S]),T=(0,rGe.useCallback)(P=>yme(t,P),[t]);return{slashCommands:t,handleSlashCommand:O,matchingSlashCommands:T}}var Ave=$e($t(),1);function gGl(t,e,l){let n=(0,Ave.useMemo)(()=>new Map,[]);(0,Ave.useEffect)(()=>{(async()=>{if(Object.keys(t).length===0||t.staff!==void 0||!e)return;let a=await Iy(e),I=e.type==="hmac"?void 0:e.host;if(!a||I!==kL)return;let s=n.get(a)??ozt(I,a).catch(()=>!1);n.set(a,s),await s&&(await Sr.writeKey("staff",!0),await Sr.writeKey("log_level","all"),l({type:"info",text:"Staff mode activated! Restart the app to enable staff features \u2728"}))})()},[t,e,l])}var dJ=$e($t(),1);function ZGl(t,e,l){let[n,r]=(0,dJ.useState)(null),a=(0,dJ.useRef)("");return(0,dJ.useEffect)(()=>{e.text!==a.current&&(n?.availableOptions.some(o=>e.text===o.name)||r(null),a.current=e.text)},[e.text,n]),{handleTabCompletion:(0,dJ.useCallback)(()=>{let s=o=>{let c=o.indexOf(" ");return c===-1?!1:o.slice(c+1).trim().length>0};if(n){if(s(e.text)){r(null);return}let o=(n.currentIndex+1)%n.availableOptions.length,c=n.availableOptions[o];e.setText(c.name),r({...n,currentIndex:o}),l.setSlashCommandPickerIndex(o)}else{if(s(e.text))return;let o=yme(t,e.text);if(o.length===1){let c=o[0],d=c.name;for(let m=d.length-1;m>=2;m--){let G=d.slice(0,m),p=yme(t,G);if(p.length>1){let A=p.findIndex(R=>R.name===c.name);r({originalInput:G,availableOptions:p,currentIndex:A>=0?A:0});let Z=(A+1)%p.length,W=p[Z];e.setText(W.name),r({originalInput:G,availableOptions:p,currentIndex:Z}),l.setSlashCommandPickerIndex(Z);return}}}o.length>1?(r({originalInput:e.text,availableOptions:o,currentIndex:0}),e.setText(o[0].name),l.setSlashCommandPickerIndex(0)):o.length===1&&e.setText(o[0].name)}},[n,e,l]),tabCyclingState:n}}var tH=$e($t(),1);function NGl(){let[t,e]=(0,tH.useState)({columns:process.stdout.columns,rows:process.stdout.rows}),l=(0,tH.useRef)(()=>{}),n=(0,tH.useCallback)(a=>{l.current=a||(()=>{})},[]),r=(0,tH.useCallback)(()=>{let{columns:a,rows:I}=process.stdout;e({columns:a,rows:I}),l.current(a,I)},[]);return(0,tH.useEffect)(()=>(process.stdout.on("resize",r),()=>{process.stdout.off("resize",r)}),[]),{...t,setOnResize:n}}var M7=$e($t(),1);var uJ=t=>/\s/.test(t);function b7n(t,e){if(e>=t.length)return t.length;let l=e;for(;l<t.length&&uJ(t[l]);)l+=t[l].length;for(;l<t.length&&!uJ(t[l]);)l+=t[l].length;return l}function WGl(t,e){if(e===0)return 0;let l=e-1;for(;l>=0&&uJ(t[l]);)l-=t[l].length;if(l<0)return 0;for(;l>=0&&!uJ(t[l]);)l-=t[l].length;return l+1}function G7n(t,e){if(e>=t.length)return t.length;let l=e;for(;l<t.length&&!uJ(t[l]);)l+=t[l].length;for(;l<t.length&&uJ(t[l]);)l+=t[l].length;return l}function nU(t,e){if(e<=0)return[t];let l=t.split(`
2471
2474
  `).map(r=>r+" "),n=[];for(let r of l){if(r.length<=e){n.push(r);continue}let a=r;for(;a.length>e;){let I=e;if(uJ(a.slice(0,e)))for(let o=e-1;o>=Math.max(0,e-20)&&!uJ(a[o]);o--)I=o;let s=a.slice(0,I);n.push(s),a=a.slice(I)}a.length>0&&n.push(a)}return n}function _7(t,e){if(e.length===0)return{line:0,column:0};let l=0;for(let r=0;r<e.length;r++){let a=e[r],I=l+a.length;if(t<I)return{line:r,column:t-l};l=I}let n=e.length-1;return{line:n,column:e[n].length}}function U7(t,e,l,n){if(t.length===0)return 0;let r=0;for(let a=0;a<Math.min(e,t.length);a++)r+=t[a].length;return e<t.length?r+=Math.min(l,t[e].length):r=n.length,Math.min(r,n.length)}function p7n(t,e){switch(e.type){case"set_text":return{text:e.payload,cursorPosition:e.payload.length,width:t.width};case"set_cursor_position":return{...t,cursorPosition:Math.max(0,Math.min(e.payload,t.text.length))};case"set_cursor_line_position":{let{line:l,column:n}=e.payload,r=nU(t.text,t.width),a=U7(r,l,n,t.text);return{...t,cursorPosition:a}}case"set_width":return t.width===e.payload?t:{...t,width:e.payload};case"insert_input":{let{text:l,cursorPosition:n}=t,{input:r,callback:a}=e.payload,I=r.replace(/\r\n/g,`
2472
2475
  `).replace(/\r/g,`
2473
2476
  `),s=l.slice(0,n),o=l.slice(n),c=s+I+o,d=n+I.length;return a?.(c),{text:c,cursorPosition:d,width:t.width}}case"backspace":return t.cursorPosition===0?t:{text:t.text.slice(0,t.cursorPosition-1)+t.text.slice(t.cursorPosition),cursorPosition:t.cursorPosition-1,width:t.width};case"forward_delete":{if(t.cursorPosition>=t.text.length)return t;let l=t.text.slice(0,t.cursorPosition)+t.text.slice(t.cursorPosition+1);return{...t,text:l}}case"backspace_word":{let{text:l,cursorPosition:n}=t;if(n===0)return t;let r=WGl(l,n);return{text:l.slice(0,r)+l.slice(n),cursorPosition:r,width:t.width}}case"forward_delete_word":{let{text:l,cursorPosition:n}=t;if(n>=l.length)return t;let r=b7n(l,n),a=l.slice(0,n)+l.slice(r);return{...t,text:a}}case"move_word_left":{let{text:l,cursorPosition:n}=t;if(n===0)return t;let r=WGl(l,n);return{...t,cursorPosition:r}}case"move_word_right":{let{text:l,cursorPosition:n}=t;if(n>=l.length)return t;let r=G7n(l,n);return{...t,cursorPosition:r}}case"move_right":return t.cursorPosition===t.text.length?t:{...t,cursorPosition:t.cursorPosition+1};case"move_left":return t.cursorPosition===0?t:{...t,cursorPosition:t.cursorPosition-1};case"move_up":{let{text:l,cursorPosition:n,width:r}=t,a=nU(l,r),I=_7(n,a);if(I.line>0){let s=I.line-1,o=Math.min(I.column,a[s].length-1),c=U7(a,s,o,l);return{...t,cursorPosition:c}}return t}case"move_down":{let{text:l,cursorPosition:n,width:r}=t,a=nU(l,r),I=_7(n,a);if(I.line<a.length-1){let s=I.line+1,o=Math.min(I.column,a[s].length-1),c=U7(a,s,o,l);return{...t,cursorPosition:c}}return t}case"clear":return{text:"",cursorPosition:0,width:t.width};case"clear_before_cursor":{let{text:l,cursorPosition:n,width:r}=t,a=nU(l,r),I=_7(n,a),s=U7(a,I.line,0,l);return{text:l.slice(0,s)+l.slice(n),cursorPosition:s,width:r}}case"clear_after_cursor":{let{text:l,cursorPosition:n}=t,r=l.indexOf(`
@@ -2495,7 +2498,7 @@ ${Re.paths.map(yl=>` - ${yl}`).join(`
2495
2498
  Allow access to these paths? (y/n): `;Ie.question(_t,yl=>{Ie.close();let Vt=yl.trim().toLowerCase();Qe(Vt==="y"||Vt==="yes"?{kind:"approve"}:{kind:"reject"})})})}}),me=()=>{};I.emit("user.message",{content:e,attachments:[]}),await epl(t,e,We,a,Re=>{I.emit("tool.execution_complete",{parentToolCallId:Re.parentToolCallId,toolCallId:Re.callId,success:Re.resultType==="success",result:Re.resultType==="success"?{content:Re.log}:void 0,error:Re.resultType!=="success"?{message:Re.log,code:Re.resultType}:void 0})},()=>{},me,()=>{},()=>{},I,o,P,QI.cwd(),re,c,d,m,x,T,W,O,R,Re=>{D=Re},S,U.list,V);let ve=Wve(Ge);QI.stderr.write(`
2496
2499
  `+ve+`
2497
2500
  `),await s.saveSession(I),QI.exit(0)}catch(U){let re=`Error executing prompt: ${U}`;QI.stderr.write(re+`
2498
- `),o.error(re),await s.saveSession(I),QI.exit(1)}finally{K();try{await T.cleanup()}catch(U){o.error(`Error cleaning up MCP host cache: ${U}`)}if(x)try{await x.stopServers()}catch(U){o.error(`Error stopping MCP servers: ${U}`)}}}var D7n=({featureFlags:t=Rbe,integrationId:e,authManager:l,sessionManager:n,initialSession:r,needsSessionPicker:a,allowAllTools:I,allowAllPaths:s,rules:o,showBanner:c,showHeader:d,trajectoryOutputFile:m,logger:G,additionalDirs:p,disabledMcpServers:A,additionalMcpConfig:Z,errorService:W,cliModel:R,showLlmTiming:V,cliStreaming:v,disableParallelToolsExecution:X,disallowTempDir:S,enableAllGithubMcpTools:O})=>{let T=(0,Yt.useMemo)(()=>G??new xd,[G]),{theme:P,setThemePreference:x,themeInitialized:D}=Tn(),{stdout:ae}=OR(),Ge=rx(),he=d0(),[K,U]=(0,Yt.useState)(0),[re,se]=(0,Yt.useState)(a??!1),[We,me]=(0,Yt.useState)(null),ve=(0,Yt.useCallback)(()=>{QI.stdout.write(ap.cursorTo(0,0)+ap.eraseScreen),U(wt=>wt+1)},[U,ae]),Re=NGl(),ye=V?new j7:void 0,Ie=GGl(T);(0,Yt.useEffect)(()=>{let wt=null,vl=Re.columns,na=Re.rows,Xi=(sI,jc)=>{let qd=sI,hr=jc;if(qd===vl&&hr!==na){na=hr;return}qd!==vl&&(vl=qd,na=hr,wt&&clearTimeout(wt),wt=setTimeout(()=>{ve()},50))};return Re.setOnResize(Xi),()=>{Re.setOnResize(null),wt&&clearTimeout(wt)}},[ve,ae]);let[Qe,Se]=(0,Yt.useState)(r);(0,Yt.useEffect)(()=>{W?.addErrorHandler(wt=>{Qe.emit("session.error",{errorType:"internal",message:String(wt)})})},[W,Qe]);let{timeline:_t,setAvailableTools:yl,addEphemeralEntry:Vt,clearTimeline:qt}=VGl(Qe),ct=FGl(Qe),[Ct,dt]=(0,Yt.useState)({}),[on,ll]=(0,Yt.useState)(0),[Ce,Ft]=(0,Yt.useState)(null),[El,Pt]=(0,Yt.useState)(!1);bGl(Qe,Ft);let[hn,Cn]=(0,Yt.useState)({totalTokens:0,postTruncationTokens:0,tokenLimit:0,truncationStrategy:"truncation",messagesRemoved:0,tokensRemoved:0}),[tn,Kl]=(0,Yt.useState)(null),ba=()=>{if(El){Pt(!1),Kl(null),ve();return}Pt(!0),ve()},II=()=>{if(El||tn!==null){Pt(!1),Kl(null),ve();return}let Xi=_t.filter(sI=>sI.type==="tool_call_completed"||sI.type==="tool_call_requested"||sI.type==="group_tool_call_requested"||sI.type==="group_tool_call_completed").slice(-10).at(0)?.timestamp||new Date;Kl(Xi),ve()},Ga=(0,Yt.useCallback)(wt=>wt.type!=="tool_call_completed"&&wt.type!=="tool_call_requested"&&wt.type!=="group_tool_call_requested"&&wt.type!=="group_tool_call_completed"?!1:El?!0:tn!==null&&wt.timestamp&&wt.timestamp.getTime()>=tn.getTime(),[El,tn]),[mI,Xo]=(0,Yt.useState)(!1),[la,co]=(0,Yt.useState)({status:"Unknown"}),[Ol,Rn]=(0,Yt.useState)({});e=Ol.copilot_integration_id||QI.env.GITHUB_COPILOT_INTEGRATION_ID||"copilot-developer-cli";let An=(0,Yt.useMemo)(()=>new Rve(la.status==="LoggedIn"?la.authInfo:null,T,e),[la.authInfo,T,e]);(0,Yt.useEffect)(()=>{switch(la.status){case"LoggedIn":T.info(lme(la.authInfo));break;case"NotLoggedIn":T.info("Logged out");break;default:T.info("Login status unknown");break}},[la]),(0,Yt.useEffect)(()=>(An.setOnStateChangeCallback(me),()=>{An.setOnStateChangeCallback(null)}),[An]);let[Yr,Br]=(0,Yt.useState)(0),[ie,tt]=(0,Yt.useState)(!1),[Gl,Xl]=(0,Yt.useState)(!1),[Gn,or]=(0,Yt.useState)(!1),[On,mr]=(0,Yt.useState)(!1),[br,gd]=(0,Yt.useState)(!1),[bI,Nc]=(0,Yt.useState)(!1),[xb,pm]=(0,Yt.useState)(!1),[Wc,ti]=(0,Yt.useState)(!1),[tb,tA]=(0,Yt.useState)(null),[eo,Zd]=(0,Yt.useState)("list"),[Nd,Pd]=(0,Yt.useState)(void 0),[un,lb]=(0,Yt.useState)(!1),[Es,Cu]=(0,Yt.useState)(0),[ko,Jg]=(0,Yt.useState)(QI.cwd()),[UG]=(0,Yt.useState)(()=>s?new iGe(QI.cwd()):new oGe(QI.cwd(),p||[],{includeTempDirectory:!S})),[vu,kn]=(0,Yt.useState)([]),[Je,Al]=(0,Yt.useState)(null),[cn,DI]=(0,Yt.useState)([]),[xs,Ss]=(0,Yt.useState)(null),[ps,go]=(0,Yt.useState)(d===!1),[jd,Zo]=(0,Yt.useState)(d??!0),[Nr,MG]=(0,Yt.useState)(null),[Kd,hs]=(0,Yt.useState)(null),[Sb,hi]=hGl(1),[_G,Bb]=(0,Yt.useState)(!1),[ce,de]=(0,Yt.useState)(!1),{models:ke}=pGl(T,Qe.sessionId,la.authInfo,e),{customAgents:_e,selectCustomAgent:ut}=sGl(t.CUSTOM_AGENTS,T,e,la.authInfo||null,T4(),ko);(0,Yt.useEffect)(()=>{kjt().then(tA).catch(()=>{})},[]);let Bt=(0,Yt.useCallback)(wt=>{let vl=Wve(ct);MG(wt?{type:"error",reason:wt,usage:vl}:{type:"routine",usage:vl}),setTimeout(()=>{QI.exit(0)},300)},[ct]);(0,Yt.useEffect)(()=>{(async()=>{let vl={};try{vl=await Sr.load()||{}}catch(na){T.error(`Failed to load configuration: ${na}`)}vl.banner=vl?.banner??"once",vl.render_markdown=vl?.render_markdown??!0,Rn(vl),Ge&&vl.screen_reader===void 0&&Xl(!0)})()},[Ge]),(0,Yt.useEffect)(()=>{if(Je===null&&vu.length>0){Ol.beep!==!1&&QI.stdout.write(ap.beep);let wt=vu[0];Al(wt),kn(vl=>vl.slice(1))}},[Je,vu]),(0,Yt.useEffect)(()=>{if(xs===null&&cn.length>0){Ol.beep!==!1&&QI.stdout.write(ap.beep);let wt=cn[0];Ss(wt),DI(vl=>vl.slice(1))}},[xs,cn]);let ul=(0,Yt.useRef)(!0),al=(0,Yt.useRef)(FJe({requestToolPermissionFromUser:wt=>new Promise(vl=>{kn(na=>[{request:wt,resolve:sI=>{if(sI.kind==="approve-for-session"&&sI.approval.kind!==wt.kind)throw new Error(`Mismatched approval kind: expected ${wt.kind}, got ${sI.approval.kind}`);vl(sI)}},...na])}),requestPathPermissionFromUser:wt=>new Promise(vl=>{DI(na=>[...na,{paths:wt.paths,resolve:vl}])}),approveAllToolPermissionRequests:I,rules:o,pathManager:UG})),{displayCwd:Ql,gitBranchInfo:wl,selectedModel:kl,selectedModelDisplay:Dn,setSelectedModel:pa,updateGitStatus:CI}=dGl({cliModel:R,session:Qe,currentWorkingDirectory:ko,customAgentName:_e.selected?.displayName,stdoutColumns:ae.columns,models:ke});(0,Yt.useEffect)(()=>{(async()=>{if(!ke||ke.type!=="success"||!kl)return;let vl=ke.list.find(na=>na.id===kl);if(vl?.capabilities?.limits){let na=vl.capabilities.limits.max_prompt_tokens||vl.capabilities.limits.max_context_window_tokens||2e5;Cn(Xi=>({...Xi,tokenLimit:na}))}})()},[kl,ke]),(0,Yt.useEffect)(()=>{(async()=>{if(!kl||!ke)return;let vl=await Qe.getChatContextMessages(),na=await Qe.getSystemContextMessages();if(vl.length>0||na.length>0){let Xi=Pte(vl,kl),sI=Pte(na,kl),jc=Xi+sI;Cn(qd=>({...qd,totalTokens:jc,postTruncationTokens:jc}))}})()},[kl,ke,Qe]);let[Hr,Hi]=(0,Yt.useState)(void 0),ji=async()=>{try{let wt=await dY.load()||{mcpServers:{}},vl=Z?IGe(wt,Z):wt,na=new XA(T),Xi=new Rf(T,JSON.stringify(vl),na,A||[],O);await Xi.startServers(),Hi(Xi)}catch(wt){Qe.emit("session.error",{errorType:"mcp",message:`Failed to start MCP Servers: ${wt instanceof Error?wt.message:String(wt)}`}),Hi(void 0)}};(0,Yt.useEffect)(()=>{let wt=Hr?Object.keys(Hr.getConfig().mcpServers):[];if(wt.length>0){let vl=`Configured MCP servers: ${wt.join(", ")}`;Qe.emit("session.info",{infoType:"mcp",message:vl})}return()=>{Hr&&Hr.stopServers().catch(vl=>{T.error(`Error shutting down MCP host on cleanup: ${vl instanceof Error?vl.message:String(vl)}`)})}},[Hr]),(0,Yt.useEffect)(()=>{ji()},[]),(0,Yt.useEffect)(()=>{if(!Hr||!(Hr instanceof Rf))return;let wt=async(na,Xi)=>{try{na?await Hr.configureGitHubAuth(na)&&Qe.emit("session.info",{infoType:"mcp",message:"Connected to GitHub MCP Server"}):await Hr.removeGitHubAuth()&&Qe.emit("session.info",{infoType:"mcp",message:"Disconnected from GitHub MCP Server"})}catch(sI){T.error(`Error configuring GitHub MCP Server: ${sI}`)}};return l.onAuthChange(wt),(async()=>{try{let na=await l.getCurrentAuthInfo();na&&await wt(na)}catch(na){T.error(`Error applying existing auth to MCP host: ${na}`)}})(),()=>{l.removeAuthCallback(wt)}},[Hr]);let Rs=yGl(wt=>{cY.updateCurrentCommand(wt)}),[YN,lA]=uGl(),Bp=(0,Yt.useMemo)(()=>new lGe({cacheTimeout:5*6e4,includeDirsInIndex:!1,indexFileStats:!1,maxStatConcurrency:64,onIndexingStart:()=>lA.startIndexing(),onIndexingComplete:(wt,vl)=>lA.completeIndexing(wt,vl),logger:T}),[lA]),[yc,nb]=kbl(Rs,Bp,UG);(0,Yt.useEffect)(()=>{let wt=!1,vl=null,na=async()=>{await CI(),wt||(vl=setTimeout(()=>void na(),15e3))};return na(),()=>{wt=!0,vl&&clearTimeout(vl)}},[CI]);let Tb=(0,Yt.useCallback)(wt=>{Qe.emit("tool.execution_complete",{parentToolCallId:wt.parentToolCallId,toolCallId:wt.callId,success:wt.resultType==="success",result:wt.resultType==="success"?{content:wt.log}:void 0,error:wt.resultType!=="success"?{message:wt.log,code:wt.resultType}:void 0});let vl=setTimeout(()=>{CI()},500);return()=>clearTimeout(vl)},[Qe,CI]);(0,Yt.useEffect)(()=>{cY.initialize()},[]),(0,Yt.useEffect)(()=>{(async()=>{try{let vl=await l.getCurrentAuthInfo();vl?(co({status:"LoggedIn",authInfo:vl}),Qe.emit("session.info",{infoType:"authentication",message:lme(vl)})):co({status:"NotLoggedIn"})}catch{co({status:"NotLoggedIn"})}})()},[]),gGl(Ol,la.authInfo,Vt),(0,Yt.useEffect)(()=>{(async()=>{try{QI.env.COPILOT_ALLOW_ALL==="true"||await Ybe.isFolderTrusted(ko)?Br(1):(Br(2),tt(!0))}catch{QI.env.COPILOT_ALLOW_ALL==="true"?Br(1):(Br(2),tt(!0))}})()},[ko]),(0,Yt.useEffect)(()=>{gml().then(wt=>{hs(wt)}).catch(wt=>{T.error(`Error checking for updates: ${wt}`)})},[]),(0,Yt.useEffect)(()=>()=>{ul.current=!1},[]);let nA=(0,Yt.useMemo)(()=>iQe({customAgentsEnabled:t.CUSTOM_AGENTS,ccaDelegateEnabled:t.CCA_DELEGATE}),[t.CUSTOM_AGENTS,t.CCA_DELEGATE]),{slashCommands:VN,handleSlashCommand:K0,matchingSlashCommands:Tp}=AGl({builtInSlashCommands:nA,logger:T,currentWorkingDirectory:ko,setCurrentWorkingDirectory:Jg,fileSearch:Bp,authManager:l,mcpHost:Hr,loginStatus:la,setLoginStatus:co,addEntryToSession:Vt,clearSessionHistory:async()=>{let wt=await n.createSession({selectedModel:R});Se(wt)},getSessionUsageOutput:()=>Wve(ct),pathManager:UG,resetSessionToolApprovals:al.current.resetSessionToolApprovals,clearTimeline:qt,clearHeader:()=>Zo(!1),clearContextWindowMetrics:()=>Cn(wt=>({totalTokens:0,postTruncationTokens:0,tokenLimit:wt.tokenLimit,truncationStrategy:wt.truncationStrategy,messagesRemoved:0,tokensRemoved:0})),setThemePreference:x,refreshStatic:ve,hasAvailableCustomAgents:_e.available.length>0,slashCommandResultActions:{exit:Bt,showCustomAgentPickerDialog:()=>or(!0),showFeedbackDialog:()=>lb(!0),showLoginDialog:()=>mr(!0),showMCPDialog:(wt,vl)=>{gd(!0),wt&&Zd(wt),vl&&Pd(vl)},showModelPickerDialog:()=>Nc(!0),showSessionDialog:()=>pm(!0),showUserSwitcherDialog:()=>ti(!0),startRemoteDelegation:wt=>{An.startDelegation(wt,Qe.sessionId)},setModel:async wt=>{if(!wq(wt)){Qe.emit("session.error",{errorType:"user.model_selection",message:`Model "${wt}" is not supported. Please select a valid model.`});return}Yx(),await Qe.setSelectedModel(wt),pa(wt)}}}),{handleTabCompletion:wN,tabCyclingState:rA}=ZGl(VN,Rs,{setSlashCommandPickerIndex:Cu}),rb=(0,Yt.useMemo)(()=>{let wt=Tp(Rs.text);return rA||Cu(0),wt},[Tp,Rs.text,rA]),Op=(0,Yt.useMemo)(()=>{let wt=Rs.text,vl=rb[Es];if(!vl)return{suggestion:void 0,isHint:!1};let na=wt.trimEnd();return na===vl.name&&vl.args?{suggestion:wt!==na?vl.args:` ${vl.args}`,isHint:!0}:{suggestion:(vl.name+(vl.args?" ":"")).substring(wt.length),isHint:!1}},[Rs.text,Es,rb]),yy=(0,Yt.useCallback)(wt=>{mI||uQ||(async()=>{if(await cY.addCommand(wt),wt.startsWith("!")){let hr=wt.substring(1),ml=cu();Qe.emit("tool.user_requested",{toolCallId:ml,toolName:W7,arguments:{command:hr,description:`Execute shell command: ${hr}`}}),Kh=new AbortController;let Kn="";try{uQ=!0,de(!0);let fa=T7n(hr,{shell:!0,cwd:ko,env:QI.env,stdio:"pipe",signal:Kh.signal}),Na=[],Hu=!1,CN=sA=>{Hu||(Hu=sA.includes(13)),Na.push(sA);let oA=Buffer.concat(Na).toString("utf-8");Kn=Hu?bcl(oA):oA,Qe.emitEphemeral("tool.execution_partial_result",{toolCallId:ml,partialOutput:Kn})};fa.stderr.on("data",CN),fa.stdout.on("data",CN),fa.stdin.end();let VY=await new Promise((sA,oA)=>{fa.on("error",oA),fa.on("exit",(Up,xg)=>{xg?oA(new Error(`Process was killed with signal: ${xg}`)):sA(Up)})});Qe.emit("tool.execution_complete",{parentToolCallId:void 0,toolCallId:ml,isUserRequested:!0,success:VY===0,result:{content:Kn}})}catch(fa){Qe.emit("tool.execution_complete",{parentToolCallId:void 0,toolCallId:ml,isUserRequested:!0,success:!1,error:{message:`${Kn?`${Kn}
2501
+ `),o.error(re),await s.saveSession(I),QI.exit(1)}finally{K();try{await T.cleanup()}catch(U){o.error(`Error cleaning up MCP host cache: ${U}`)}if(x)try{await x.stopServers()}catch(U){o.error(`Error stopping MCP servers: ${U}`)}}}var D7n=({featureFlags:t=Rbe,integrationId:e,authManager:l,sessionManager:n,initialSession:r,needsSessionPicker:a,allowAllTools:I,allowAllPaths:s,rules:o,showBanner:c,showHeader:d,trajectoryOutputFile:m,logger:G,additionalDirs:p,disabledMcpServers:A,additionalMcpConfig:Z,errorService:W,cliModel:R,showLlmTiming:V,cliStreaming:v,disableParallelToolsExecution:X,disallowTempDir:S,enableAllGithubMcpTools:O})=>{let T=(0,Yt.useMemo)(()=>G??new xd,[G]),{theme:P,setThemePreference:x,themeInitialized:D}=Tn(),{stdout:ae}=OR(),Ge=rx(),he=d0(),[K,U]=(0,Yt.useState)(0),[re,se]=(0,Yt.useState)(a??!1),[We,me]=(0,Yt.useState)(null),ve=(0,Yt.useCallback)(()=>{QI.stdout.write(ap.cursorTo(0,0)+ap.eraseScreen),U(wt=>wt+1)},[U,ae]),Re=NGl(),ye=V?new j7:void 0,Ie=GGl(T);(0,Yt.useEffect)(()=>{let wt=null,vl=Re.columns,na=Re.rows,Xi=(sI,jc)=>{let qd=sI,hr=jc;if(qd===vl&&hr!==na){na=hr;return}qd!==vl&&(vl=qd,na=hr,wt&&clearTimeout(wt),wt=setTimeout(()=>{ve()},50))};return Re.setOnResize(Xi),()=>{Re.setOnResize(null),wt&&clearTimeout(wt)}},[ve,ae]);let[Qe,Se]=(0,Yt.useState)(r);(0,Yt.useEffect)(()=>{W?.addErrorHandler(wt=>{Qe.emit("session.error",{errorType:"internal",message:String(wt)})})},[W,Qe]);let{timeline:_t,setAvailableTools:yl,addEphemeralEntry:Vt,clearTimeline:qt}=VGl(Qe),ct=FGl(Qe),[Ct,dt]=(0,Yt.useState)({}),[on,ll]=(0,Yt.useState)(0),[Ce,Ft]=(0,Yt.useState)(null),[El,Pt]=(0,Yt.useState)(!1);bGl(Qe,Ft);let[hn,Cn]=(0,Yt.useState)({totalTokens:0,postTruncationTokens:0,tokenLimit:0,truncationStrategy:"truncation",messagesRemoved:0,tokensRemoved:0}),[tn,Kl]=(0,Yt.useState)(null),ba=()=>{if(El){Pt(!1),Kl(null),ve();return}Pt(!0),ve()},II=()=>{if(El||tn!==null){Pt(!1),Kl(null),ve();return}let Xi=_t.filter(sI=>sI.type==="tool_call_completed"||sI.type==="tool_call_requested"||sI.type==="group_tool_call_requested"||sI.type==="group_tool_call_completed").slice(-10).at(0)?.timestamp||new Date;Kl(Xi),ve()},Ga=(0,Yt.useCallback)(wt=>wt.type!=="tool_call_completed"&&wt.type!=="tool_call_requested"&&wt.type!=="group_tool_call_requested"&&wt.type!=="group_tool_call_completed"?!1:El?!0:tn!==null&&wt.timestamp&&wt.timestamp.getTime()>=tn.getTime(),[El,tn]),[mI,Xo]=(0,Yt.useState)(!1),[la,co]=(0,Yt.useState)({status:"Unknown"}),[Ol,Rn]=(0,Yt.useState)({});e=Ol.copilot_integration_id||QI.env.GITHUB_COPILOT_INTEGRATION_ID||"copilot-developer-cli";let An=(0,Yt.useMemo)(()=>new Rve(la.status==="LoggedIn"?la.authInfo:null,T,e),[la.authInfo,T,e]);(0,Yt.useEffect)(()=>{switch(la.status){case"LoggedIn":T.info(lme(la.authInfo));break;case"NotLoggedIn":T.info("Logged out");break;default:T.info("Login status unknown");break}},[la]),(0,Yt.useEffect)(()=>(An.setOnStateChangeCallback(me),()=>{An.setOnStateChangeCallback(null)}),[An]);let[Yr,Br]=(0,Yt.useState)(0),[ie,tt]=(0,Yt.useState)(!1),[Gl,Xl]=(0,Yt.useState)(!1),[Gn,or]=(0,Yt.useState)(!1),[On,mr]=(0,Yt.useState)(!1),[br,gd]=(0,Yt.useState)(!1),[bI,Nc]=(0,Yt.useState)(!1),[xb,pm]=(0,Yt.useState)(!1),[Wc,ti]=(0,Yt.useState)(!1),[tb,tA]=(0,Yt.useState)(null),[eo,Zd]=(0,Yt.useState)("list"),[Nd,Pd]=(0,Yt.useState)(void 0),[un,lb]=(0,Yt.useState)(!1),[Es,Cu]=(0,Yt.useState)(0),[ko,Jg]=(0,Yt.useState)(QI.cwd()),[UG]=(0,Yt.useState)(()=>s?new iGe(QI.cwd()):new oGe(QI.cwd(),p||[],{includeTempDirectory:!S})),[vu,kn]=(0,Yt.useState)([]),[Je,Al]=(0,Yt.useState)(null),[cn,DI]=(0,Yt.useState)([]),[xs,Ss]=(0,Yt.useState)(null),[ps,go]=(0,Yt.useState)(d===!1),[jd,Zo]=(0,Yt.useState)(d??!0),[Nr,MG]=(0,Yt.useState)(null),[Kd,hs]=(0,Yt.useState)(null),[Sb,hi]=hGl(1),[_G,Bb]=(0,Yt.useState)(!1),[ce,de]=(0,Yt.useState)(!1),{models:ke}=pGl(T,Qe.sessionId,la.authInfo,e),{customAgents:_e,selectCustomAgent:ut}=sGl(t.CUSTOM_AGENTS,T,e,la.authInfo||null,T4(),ko);(0,Yt.useEffect)(()=>{kjt().then(tA).catch(()=>{})},[]);let Bt=(0,Yt.useCallback)(wt=>{let vl=Wve(ct);MG(wt?{type:"error",reason:wt,usage:vl}:{type:"routine",usage:vl}),setTimeout(()=>{QI.exit(0)},300)},[ct]);(0,Yt.useEffect)(()=>{(async()=>{let vl={};try{vl=await Sr.load()||{}}catch(na){T.error(`Failed to load configuration: ${na}`)}vl.banner=vl?.banner??"once",vl.render_markdown=vl?.render_markdown??!0,Rn(vl),Ge&&vl.screen_reader===void 0&&Xl(!0)})()},[Ge]),(0,Yt.useEffect)(()=>{if(Je===null&&vu.length>0){Ol.beep!==!1&&QI.stdout.write(ap.beep);let wt=vu[0];Al(wt),kn(vl=>vl.slice(1))}},[Je,vu]),(0,Yt.useEffect)(()=>{if(xs===null&&cn.length>0){Ol.beep!==!1&&QI.stdout.write(ap.beep);let wt=cn[0];Ss(wt),DI(vl=>vl.slice(1))}},[xs,cn]);let ul=(0,Yt.useRef)(!0),al=(0,Yt.useRef)(FJe({requestToolPermissionFromUser:wt=>new Promise(vl=>{kn(na=>[{request:wt,resolve:sI=>{if(sI.kind==="approve-for-session"&&sI.approval.kind!==wt.kind)throw new Error(`Mismatched approval kind: expected ${wt.kind}, got ${sI.approval.kind}`);vl(sI)}},...na])}),requestPathPermissionFromUser:wt=>new Promise(vl=>{DI(na=>[...na,{paths:wt.paths,resolve:vl}])}),approveAllToolPermissionRequests:I,rules:o,pathManager:UG})),{displayCwd:Ql,gitBranchInfo:wl,selectedModel:kl,selectedModelDisplay:Dn,setSelectedModel:pa,updateGitStatus:CI}=dGl({cliModel:R,session:Qe,currentWorkingDirectory:ko,customAgentName:_e.selected?.displayName,stdoutColumns:ae.columns,models:ke});(0,Yt.useEffect)(()=>{(async()=>{if(!ke||ke.type!=="success"||!kl)return;let vl=ke.list.find(na=>na.id===kl);if(vl?.capabilities?.limits){let na=vl.capabilities.limits.max_prompt_tokens||vl.capabilities.limits.max_context_window_tokens||2e5;Cn(Xi=>({...Xi,tokenLimit:na}))}})()},[kl,ke]),(0,Yt.useEffect)(()=>{(async()=>{if(!kl||!ke)return;let vl=await Qe.getChatContextMessages(),na=await Qe.getSystemContextMessages();if(vl.length>0||na.length>0){let Xi=Pte(vl,kl),sI=Pte(na,kl),jc=Xi+sI;Cn(qd=>({...qd,totalTokens:jc,postTruncationTokens:jc}))}})()},[kl,ke,Qe]);let[Hr,Hi]=(0,Yt.useState)(void 0),ji=async()=>{try{let wt=await dY.load()||{mcpServers:{}},vl=Z?IGe(wt,Z):wt,na=new XA(T),Xi=new Rf(T,JSON.stringify(vl),na,A||[],O);await Xi.startServers(),Hi(Xi)}catch(wt){Qe.emit("session.error",{errorType:"mcp",message:`Failed to start MCP Servers: ${wt instanceof Error?wt.message:String(wt)}`}),Hi(void 0)}};(0,Yt.useEffect)(()=>{let wt=Hr?Object.keys(Hr.getConfig().mcpServers):[];if(wt.length>0){let vl=`Configured MCP servers: ${wt.join(", ")}`;Qe.emit("session.info",{infoType:"mcp",message:vl})}return()=>{Hr&&Hr.stopServers().catch(vl=>{T.error(`Error shutting down MCP host on cleanup: ${vl instanceof Error?vl.message:String(vl)}`)})}},[Hr]),(0,Yt.useEffect)(()=>{ji()},[]),(0,Yt.useEffect)(()=>{if(!Hr||!(Hr instanceof Rf))return;let wt=async(na,Xi)=>{try{na?await Hr.configureGitHubAuth(na)&&Qe.emit("session.info",{infoType:"mcp",message:"Connected to GitHub MCP Server"}):await Hr.removeGitHubAuth()&&Qe.emit("session.info",{infoType:"mcp",message:"Disconnected from GitHub MCP Server"})}catch(sI){T.error(`Error configuring GitHub MCP Server: ${sI}`)}};return l.onAuthChange(wt),(async()=>{try{let na=await l.getCurrentAuthInfo();na&&await wt(na)}catch(na){T.error(`Error applying existing auth to MCP host: ${na}`)}})(),()=>{l.removeAuthCallback(wt)}},[Hr]);let Rs=yGl(wt=>{cY.updateCurrentCommand(wt)}),[YN,lA]=uGl(),Bp=(0,Yt.useMemo)(()=>new lGe({cacheTimeout:5*6e4,includeDirsInIndex:!1,indexFileStats:!1,maxStatConcurrency:64,onIndexingStart:()=>lA.startIndexing(),onIndexingComplete:(wt,vl)=>lA.completeIndexing(wt,vl),logger:T}),[lA]),[yc,nb]=kbl(Rs,Bp,UG);(0,Yt.useEffect)(()=>{let wt=!1,vl=null,na=async()=>{await CI(),wt||(vl=setTimeout(()=>void na(),15e3))};return na(),()=>{wt=!0,vl&&clearTimeout(vl)}},[CI]);let Tb=(0,Yt.useCallback)(wt=>{Qe.emit("tool.execution_complete",{parentToolCallId:wt.parentToolCallId,toolCallId:wt.callId,success:wt.resultType==="success",result:wt.resultType==="success"?{content:wt.log}:void 0,error:wt.resultType!=="success"?{message:wt.log,code:wt.resultType}:void 0});let vl=setTimeout(()=>{CI()},500);return()=>clearTimeout(vl)},[Qe,CI]);(0,Yt.useEffect)(()=>{cY.initialize()},[]),(0,Yt.useEffect)(()=>{(async()=>{try{let vl=await l.getCurrentAuthInfo();vl?(co({status:"LoggedIn",authInfo:vl}),Qe.emit("session.info",{infoType:"authentication",message:lme(vl)})):co({status:"NotLoggedIn"})}catch{co({status:"NotLoggedIn"})}})()},[]),gGl(Ol,la.authInfo,Vt),(0,Yt.useEffect)(()=>{(async()=>{try{QI.env.COPILOT_ALLOW_ALL==="true"||await Ybe.isFolderTrusted(ko)?Br(1):(Br(2),tt(!0))}catch{QI.env.COPILOT_ALLOW_ALL==="true"?Br(1):(Br(2),tt(!0))}})()},[ko]),(0,Yt.useEffect)(()=>{gml().then(wt=>{hs(wt)}).catch(wt=>{T.error(`Error checking for updates: ${wt}`)})},[]),(0,Yt.useEffect)(()=>()=>{ul.current=!1},[]);let nA=(0,Yt.useMemo)(()=>iQe({customAgentsEnabled:t.CUSTOM_AGENTS,ccaDelegateEnabled:t.CCA_DELEGATE}),[t.CUSTOM_AGENTS,t.CCA_DELEGATE]),{slashCommands:VN,handleSlashCommand:K0,matchingSlashCommands:Tp}=AGl({builtInSlashCommands:nA,logger:T,currentWorkingDirectory:ko,setCurrentWorkingDirectory:Jg,fileSearch:Bp,authManager:l,mcpHost:Hr,loginStatus:la,setLoginStatus:co,addEntryToSession:Vt,clearSessionHistory:async()=>{let wt=await n.createSession({selectedModel:R});Se(wt)},getSessionUsageOutput:()=>Wve(ct),pathManager:UG,resetSessionToolApprovals:al.current.resetSessionToolApprovals,clearTimeline:qt,clearHeader:()=>Zo(!1),clearContextWindowMetrics:()=>Cn(wt=>({totalTokens:0,postTruncationTokens:0,tokenLimit:wt.tokenLimit,truncationStrategy:wt.truncationStrategy,messagesRemoved:0,tokensRemoved:0})),setThemePreference:x,refreshStatic:ve,customAgents:_e,slashCommandResultActions:{exit:Bt,showCustomAgentPickerDialog:()=>or(!0),showFeedbackDialog:()=>lb(!0),showLoginDialog:()=>mr(!0),showMCPDialog:(wt,vl)=>{gd(!0),wt&&Zd(wt),vl&&Pd(vl)},showModelPickerDialog:()=>Nc(!0),showSessionDialog:()=>pm(!0),showUserSwitcherDialog:()=>ti(!0),startRemoteDelegation:wt=>{An.startDelegation(wt,Qe.sessionId)},setModel:async wt=>{if(!wq(wt)){Qe.emit("session.error",{errorType:"user.model_selection",message:`Model "${wt}" is not supported. Please select a valid model.`});return}Yx(),await Qe.setSelectedModel(wt),pa(wt)}}}),{handleTabCompletion:wN,tabCyclingState:rA}=ZGl(VN,Rs,{setSlashCommandPickerIndex:Cu}),rb=(0,Yt.useMemo)(()=>{let wt=Tp(Rs.text);return rA||Cu(0),wt},[Tp,Rs.text,rA]),Op=(0,Yt.useMemo)(()=>{let wt=Rs.text,vl=rb[Es];if(!vl)return{suggestion:void 0,isHint:!1};let na=wt.trimEnd();return na===vl.name&&vl.args?{suggestion:wt!==na?vl.args:` ${vl.args}`,isHint:!0}:{suggestion:(vl.name+(vl.args?" ":"")).substring(wt.length),isHint:!1}},[Rs.text,Es,rb]),yy=(0,Yt.useCallback)(wt=>{mI||uQ||(async()=>{if(await cY.addCommand(wt),wt.startsWith("!")){let hr=wt.substring(1),ml=cu();Qe.emit("tool.user_requested",{toolCallId:ml,toolName:W7,arguments:{command:hr,description:`Execute shell command: ${hr}`}}),Kh=new AbortController;let Kn="";try{uQ=!0,de(!0);let fa=T7n(hr,{shell:!0,cwd:ko,env:QI.env,stdio:"pipe",signal:Kh.signal}),Na=[],Hu=!1,CN=sA=>{Hu||(Hu=sA.includes(13)),Na.push(sA);let oA=Buffer.concat(Na).toString("utf-8");Kn=Hu?bcl(oA):oA,Qe.emitEphemeral("tool.execution_partial_result",{toolCallId:ml,partialOutput:Kn})};fa.stderr.on("data",CN),fa.stdout.on("data",CN),fa.stdin.end();let VY=await new Promise((sA,oA)=>{fa.on("error",oA),fa.on("exit",(Up,xg)=>{xg?oA(new Error(`Process was killed with signal: ${xg}`)):sA(Up)})});Qe.emit("tool.execution_complete",{parentToolCallId:void 0,toolCallId:ml,isUserRequested:!0,success:VY===0,result:{content:Kn}})}catch(fa){Qe.emit("tool.execution_complete",{parentToolCallId:void 0,toolCallId:ml,isUserRequested:!0,success:!1,error:{message:`${Kn?`${Kn}
2499
2502
 
2500
2503
  `:""}Error executing shell command: ${fa instanceof Error?fa.message:String(fa)}`}})}finally{uQ=!1,aU=!1,Kh=null,de(!1)}return}if((await K0(wt)).handled)return;let na=null,Xi="You must be logged in to send messages. Please run /login";if(la.status==="Unknown")try{if(na=await l.getCurrentAuthInfo(),!na){Qe.emit("session.error",{errorType:"authentication",message:Xi});return}}catch{Qe.emit("session.error",{errorType:"authentication",message:Xi});return}else if(la.status!=="LoggedIn"){Qe.emit("session.error",{errorType:"authentication",message:Xi});return}else na=la.authInfo;if(Yr!==1){Qe.emit("session.error",{errorType:"folder_trust",message:"This folder is not trusted. Please confirm folder trust to continue."});return}let sI=ke?.type==="success"?ke.list:void 0,jc=await iO(R,Qe,sI,T);if(!jc){Qe.emit("session.error",{errorType:"model_selection",message:"No model available. Check policy enablement under GitHub Settings > Copilot"});return}let qd=await PGl(wt,yc.storedMentions,ko,T);Qe.emit("user.message",{content:wt,attachments:qd}),Xo(!0);try{await epl(e,wt,al.current,na,Tb,dt,Cn,ll,Ft,Qe,T,UG,ko,jc,_e.available,v??Ol.stream??!0,m,Hr,Ie,V,ye,!1,yl,_e.selected?{name:_e.selected.id,prompt:_e.selected.prompt,mcpServers:_e.selected.mcpServers||{}}:void 0,ke?.type==="success"?ke.list:void 0,X)}catch(hr){let ml=hr instanceof Error?hr.message:String(hr);Qe.emit("session.error",{errorType:"execution",message:`Execution failed: ${ml}`})}finally{ul.current&&(Xo(!1),Ol.beep!==!1&&QI.stdout.write(ap.beep),setTimeout(()=>void CI(),1e3))}})()},[e,mI,Tb,Hr,la,Yr,yc.storedMentions,_e.selected?.prompt,K0]),fu=(0,Yt.useCallback)(()=>{Wc||tb||(yc.isActive?nb.navigateUp():!cY.isNavigating()&&rb.length?Cu(wt=>wt>0?wt-1:rb.length-1):cY.navigateUp(Rs))},[Wc,tb,yc.isActive,nb,rb.length,Es,Rs]),q0=(0,Yt.useCallback)(()=>{Wc||tb||(yc.isActive?nb.navigateDown():!cY.isNavigating()&&rb.length?Cu(wt=>wt<rb.length-1?wt+1:0):cY.navigateDown(Rs))},[Wc,tb,yc.isActive,nb,rb.length,Es,Rs]);Zc((wt,vl)=>{if(vl.ctrl&&wt==="d"){Bt();return}if(vl.ctrl&&wt==="c"){if((mI||uQ)&&Kh&&!Kh.signal.aborted){aU=!0,Kh.abort(),Qe.emit("abort",{reason:"user initiated"}),hi();return}if(Rs.text.length>0){Rs.clear(),cY.resetNavigation(),hi();return}if(!Sb){hi();return}Bt()}if(vl.escape){(mI||uQ)&&Kh&&!Kh.signal.aborted&&(aU=!0,Kh.abort(),Qe.emit("abort",{reason:"user initiated"}));return}if(vl.ctrl&&wt==="r"){II();return}if(vl.ctrl&&wt==="o"){ba();return}if(!(mI||uQ||Wc||tb)){if(vl.tab||vl.return){if(yc.isActive){nb.complete();return}return}!vl.leftArrow&&!vl.rightArrow&&!vl.upArrow&&!vl.downArrow&&cY.setNavigating(!1)}}),(0,Yt.useEffect)(()=>{Bb(Rs.text.startsWith("!"))},[Rs.text]);let Pc=(0,Yt.useCallback)(()=>{An.advanceStage()},[An]),VQ=(0,Yt.useCallback)(()=>{An.cancelDelegation()},[An]),QN=(0,Yt.useCallback)(()=>{An.cancelDelegation(),n.createSession({selectedModel:R}).then(wt=>{Se(wt)}).catch(wt=>{T.error(`Error creating new session: ${wt instanceof Error?wt.message:String(wt)}`)}),Zo(!1),Cn(wt=>({totalTokens:0,postTruncationTokens:0,tokenLimit:wt.tokenLimit,truncationStrategy:wt.truncationStrategy,messagesRemoved:0,tokensRemoved:0})),setTimeout(()=>{ve()},200)},[An,n,ve]);(0,Yt.useEffect)(()=>{An.onSessionComplete(QN)},[An,QN]);let $0=_c(()=>{if(Gl)return ps?Yt.default.createElement(Nil,{onConfirm:Kn=>{(async()=>{try{Kn==="yes"?(await Sr.writeKey("screen_reader",!0),Qe.emit("session.info",{infoType:"configuration",message:"Enabled screen reader mode for future sessions."})):Kn==="never"&&(await Sr.writeKey("screen_reader",!1),Qe.emit("session.info",{infoType:"configuration",message:"Disabled screen reader mode for future sessions."})),Xl(!1)}catch(fa){Qe.emit("session.error",{errorType:"configuration",message:`Failed to update screen reader configuration: ${fa instanceof Error?fa.message:String(fa)}`})}})()}}):Yt.default.createElement(Yt.default.Fragment,null);if(ie)return ps?Yt.default.createElement(ssl,{folderPath:ko,onConfirm:Kn=>{let fa=()=>{Br(1),tt(!1)};Kn==="yes"?fa():Kn==="remember"?Ybe.addTrustedFolder(ko).then(()=>{fa(),Qe.emit("session.info",{infoType:"folder_trust",message:`Folder ${ko} has been added to trusted folders.`})}).catch(Na=>{Qe.emit("session.error",{errorType:"folder_trust",message:`Failed to add folder to trusted list: ${Na instanceof Error?Na.message:String(Na)}`})}):QI.exit(0)}}):Yt.default.createElement(Yt.default.Fragment,null);if(Gn)return Yt.default.createElement(asl,{customAgents:_e,onSubmission:Kn=>{(async()=>{if(Kn.kind!=="cancelled"){let fa=await ut(Kn.id);if(fa.kind==="error"){Vt({type:"error",text:`Failed to select custom agent: ${fa.message}`});return}Vt({type:"info",text:`Selected custom agent: ${Kn.displayName}`})}or(!1)})()}});if(xb)return Yt.default.createElement(Wil,{sessionId:Qe.sessionId,onClose:()=>{pm(!1)}});if(On)return Yt.default.createElement(Dol,{onLoginSuccess:(Kn,fa)=>{_c(async()=>{await l.loginUser(Kn,fa),mr(!1),Qe.emit("session.info",{infoType:"authentication",message:`Signed in successfully as ${tme({host:Kn,login:fa})}! You can now use Copilot.`}),co({status:"LoggedIn",authInfo:{type:"user",host:Kn,login:fa}})})},onLoginClose:()=>{mr(!1)}});if(br)return Yt.default.createElement(Kol,{initialMode:eo,initialServerName:Nd,onClose:()=>{gd(!1),Zd("list"),Pd(void 0)},onConfigSaved:()=>{ji().then(()=>{Qe.emit("session.info",{infoType:"mcp",message:"MCP configuration saved successfully! Changes will take effect immediately."})}).catch(Kn=>{Qe.emit("session.error",{errorType:"mcp",message:`Failed to reload MCP config. Error: ${Kn instanceof Error?Kn.message:String(Kn)}`})})}});if(bI)return Yt.default.createElement($ol,{models:ke,cliModel:R,session:Qe,onClose:()=>{Nc(!1)},onModelSelected:async Kn=>{Yx(),await Qe.setSelectedModel(Kn),(async()=>{try{let Na={...await Sr.load()||{},model:Kn};await Sr.write(Na)}catch{}})(),Qe.emit("session.info",{infoType:"model",message:`Model changed to: ${Kn}. The new model will be used for the next conversation.`}),pa(Kn)}});if(Wc)return Yt.default.createElement(fil,{authManager:l,initialAuth:la.status==="LoggedIn"?la.authInfo:null,onSelect:Kn=>{co({status:"LoggedIn",authInfo:Kn.authInfo}),ti(!1),Qe.emit("session.info",{infoType:"authentication",message:`Switched to ${nme(Kn.authInfo)}`}),l.switchToAuth(Kn)},onCancel:()=>ti(!1),onError:Kn=>{Qe.emit("session.error",{errorType:"authentication",message:`Failed to switch user. Error: ${Kn}`})}});if(tb){let{terminal:Kn,terminalName:fa}=tb;return Yt.default.createElement(tsl,{logger:T,terminal:Kn,terminalName:fa,onConfirm:Na=>{tA(null),Na?K0("/terminal-setup"):Vt({type:"info",text:`Skipped terminal setup for ${fa}. You can run /terminal-setup later to set it up manually.`})}})}if(Je){let Kn=vu.length;return Yt.default.createElement(Be,{flexDirection:"column"},Kn>0&&Yt.default.createElement(Be,{marginBottom:1},Yt.default.createElement(oe,{color:P.FG},"Permission request (",Kn," remaining)")),Yt.default.createElement(Gil,{request:Je.request,onConfirm:fa=>{Je.resolve(fa),fa.kind==="reject"&&vu.length>0&&!X&&kn(Na=>(Na.forEach(Hu=>{Hu.resolve({kind:"reject"})}),[])),Al(null)}}))}if(xs){let Kn=cn.length;return Yt.default.createElement(Be,{flexDirection:"column"},Kn>0&&Yt.default.createElement(Be,{marginBottom:1},Yt.default.createElement(oe,{color:P.FG},"Path confirmation (",Kn," remaining)")),Yt.default.createElement(eil,{paths:xs.paths,onConfirm:fa=>{xs.resolve(fa),Ss(null)}}))}let wt=mI||uQ,vl="Enter @ to mention files or / for commands",na=Op.suggestion,Xi=Op.isHint,sI=wt||aU,jc=!cY.isNavigating()&&rb.length>0,qd=yc.isActive,hr=!qd&&!jc,ml=_c(()=>aU?"cancelling":ce?"executing":"thinking");return Yt.default.createElement(Yt.default.Fragment,null,la.status==="NotLoggedIn"&&Yt.default.createElement(oe,{bold:!0,color:P.COPILOT},"Please use /login to sign in to use Copilot"),sI&&Yt.default.createElement(Be,{paddingBottom:1},Yt.default.createElement(Yil,{mode:ml,streamingResponseSize:on,currentIntent:Ce})),Yt.default.createElement(Be,{flexDirection:"row",columnGap:1},Yt.default.createElement(Be,{flexGrow:1},Yt.default.createElement(oe,null,Ql),wl&&Yt.default.createElement(oe,{color:P.MUTED},wl)),Yt.default.createElement(oe,{color:P.MUTED},Dn),_e.selected&&Yt.default.createElement(oe,{color:P.SELECTED,bold:!0},_e.selected?.displayName),Yt.default.createElement(rsl,{metrics:hn})),We?.stage?Yt.default.createElement(Zil,{state:We,onAdvance:Pc,onCancel:VQ,onStartNewSession:QN}):Yt.default.createElement(msl,{terminalWidth:Re.columns-qGl*2,onSubmit:yy,textCursorLocation:Rs,placeholder:vl,inlineSuggestion:na,inlineSuggestionIsHint:Xi,onTabCompletion:wN,disableEnterSubmit:wt||aU||yc.isActive,onUpArrow:fu,onDownArrow:q0}),jc&&Yt.default.createElement(Be,{paddingBottom:1},Yt.default.createElement(Ril,{options:rb,selectedIndex:Es,maxRows:10,showScrollHints:!0})),qd&&Yt.default.createElement(Be,{paddingBottom:1},Yt.default.createElement(DIl,{files:yc.suggestions.map(Kn=>Kn.relativePath),selectedIndex:yc.selectedIndex,maxRows:10,showScrollHints:!0,query:yc.query})),Yt.default.createElement(isl,{indexingIndicator:YN}),hr&&!We?.stage&&Yt.default.createElement(hsl,{quotaSnapshots:Ct,isRecentTimelineExpanded:tn!==null,isAllTimelineExpanded:El,showControlCMessage:Sb,inShellExecMode:_G}))}),FN=Yt.default.createElement(Be,{key:"header",flexDirection:"column"},Yt.default.createElement(Be,{flexDirection:"column"},Yt.default.createElement(lsl,{animationComplete:()=>go(!0),completed:ps,bannerConfig:c?"always":Ol.banner,loggerOverride:T,version:he.version}),Yt.default.createElement(Be,{flexDirection:"row",paddingX:1},Yt.default.createElement(oe,{color:P.MUTED},"Version ",he.version),he.buildMetadata&&Yt.default.createElement(Yt.default.Fragment,null,Yt.default.createElement(oe,{color:P.MUTED}," \xB7 "),Yt.default.createElement(oe,{color:P.MUTED},"Commit ",he.buildMetadata.gitCommit)))),Yt.default.createElement(Be,{flexDirection:"column",padding:1,gap:1},Yt.default.createElement(oe,{color:P.MUTED,wrap:"wrap"},"Copilot can write, test and debug code right from your terminal. Describe a task to get started or enter ? for help. Copilot uses AI, check for mistakes."))),aA=_t.filter(wt=>!("isHidden"in wt&&wt.isHidden)),IA=Gcl(aA),Ey=IA.staticEntries.map(wt=>Yt.default.createElement(Zbe,{key:wt.id,entry:wt,expand:Ga(wt),renderAsMarkdown:Ol.render_markdown})),eR=IA.dynamicEntries.map(wt=>Yt.default.createElement(Zbe,{key:wt.id,entry:wt,expand:Ga(wt),renderAsMarkdown:Ol.render_markdown})),zG=ps&&D;return Yt.default.createElement(CFe,{mode:"interactive"},re?Yt.default.createElement(Be,{flexDirection:"column",paddingX:1},Yt.default.createElement(Eil,{logger:T,sessionManager:n,onSessionSelected:wt=>{(async()=>{try{let vl=await n.getSession(wt);if(!vl)throw new Error("Failed to get session after resuming");Se(vl),se(!1),go(!0),Zo(!1)}catch(vl){Qe.emit("session.error",{errorType:"session",message:`Failed to resume session: ${vl instanceof Error?vl.message:String(vl)}`})}})()},onCancel:()=>{(async()=>{try{QI.exit(0)}catch(wt){Qe.emit("session.error",{errorType:"session",message:`Failed to restart with new session: ${wt instanceof Error?wt.message:String(wt)}`})}})()}})):Yt.default.createElement(Be,{flexDirection:"column"},zG&&Yt.default.createElement(Yt.default.Fragment,null,Yt.default.createElement(zhe,{key:K,items:[...jd?[FN]:[],...Ey]},wt=>wt),eR),!zG&&jd&&FN,!Nr&&Yt.default.createElement(Be,{flexDirection:"column",paddingX:qGl,paddingTop:jd?0:1},un?Yt.default.createElement(Isl,{onCancel:()=>lb(!1)}):$0),Nr&&Yt.default.createElement(Be,{flexDirection:"column",paddingX:1,rowGap:1},Nr.usage&&Yt.default.createElement(oe,{dimColor:!0},Nr.usage),Yt.default.createElement(vil,{packageName:he.name,checkUpdateResponse:Kd}),Nr.type==="routine"?Yt.default.createElement(oe,{color:P.ACCENT,bold:!0},"Shutting down..."):Yt.default.createElement(oe,{color:P.ERROR,bold:!0},`Shutting down: ${Nr.reason}`)),Yt.default.createElement(oe,null,K%2?"\u200C":"\u200D")))},lpl=D7n;var MEl=$e(tK(),1);var x$=$e(TEl(),1);function OEl(){(0,x$.install)(),(0,x$.setGlobalDispatcher)(new x$.EnvHttpProxyAgent({allowH2:!0}))}var VHe=class{constructor(e){this.logger=e;this.listenToErrors()}errorHandlers=[];formatError(e,l){if(l instanceof Error)return`${e}: ${l.message}
2501
2504
  ${l.stack}`;if(typeof l=="object"&&l!==null)try{return`${e}: ${JSON.stringify(l)}`}catch{return`${e}: [object with circular reference]`}else return`${e}: ${String(l)}`}addErrorHandler(e){this.errorHandlers.push(e)}listenToErrors(){process.on("uncaughtException",e=>{this.handleError("Uncaught Exception",e)}),process.on("unhandledRejection",e=>{this.handleError("Unhandled Rejection",e)})}handleError(e,l){this.logger.error(this.formatError(e,l)),this.errorHandlers.length===0&&(process.stderr.write(this.formatError(e,l)+`
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-15",
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": "ef9b0b1"
40
+ "gitCommit": "90770bc"
41
41
  }
42
42
  }
package/sdk/index.js CHANGED
@@ -1288,6 +1288,7 @@ You *must* avoid doing any of these things you cannot or must not do, and also *
1288
1288
  * Clean up temporary files at end of task
1289
1289
  * Use view/edit for existing files (not create - avoid data loss)
1290
1290
  * Ask for guidance if uncertain
1291
+ * Do not create markdown files for planning, notes, or tracking\u2014work in memory instead. Only create a markdown file when the user explicitly asks for that specific file by name or path.
1291
1292
  </tips_and_tricks>
1292
1293
 
1293
1294
  ${M7I(l,n,c,r,G,s,o)}
@@ -1459,10 +1460,10 @@ Pay attention to the following when using it:
1459
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
1460
1461
 
1461
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(`
1462
- `).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,ctime:N.ctime}}catch{return{file:u,mtime:new Date,ctime: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(`
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(`
1463
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(`
1464
1465
  `)+`
1465
- `;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}
1466
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};
1467
1468
  /*! Bundled license information:
1468
1469