@rajbos/ai-engineering-fluency 0.6.0 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +132 -97
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -1,91 +1,91 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var Ng=Object.create;var Uc=Object.defineProperty;var Lg=Object.getOwnPropertyDescriptor;var jg=Object.getOwnPropertyNames;var Gg=Object.getPrototypeOf,Bg=Object.prototype.hasOwnProperty;var we=(n,e)=>()=>{try{return e||n((e={exports:{}}).exports,e),e.exports}catch(t){throw e=0,t}};var qg=(n,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of jg(e))!Bg.call(n,o)&&o!==t&&Uc(n,o,{get:()=>e[o],enumerable:!(s=Lg(e,o))||s.enumerable});return n};var S=(n,e,t)=>(t=n!=null?Ng(Gg(n)):{},qg(e||!n||!n.__esModule?Uc(t,"default",{value:n,enumerable:!0}):t,n));var Pt=we((ui,_s)=>{var li=void 0,ci=function(n){return li||(li=new Promise(function(e,t){var s=typeof n<"u"?n:{},o=s.onAbort;s.onAbort=function(l){t(new Error(l)),o&&o(l)},s.postRun=s.postRun||[],s.postRun.push(function(){e(s)}),_s=void 0;var i;i||=typeof s<"u"?s:{};var r=!!globalThis.window,a=!!globalThis.WorkerGlobalScope,c=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer";i.onRuntimeInitialized=function(){function l(C,v){switch(typeof v){case"boolean":Og(C,v?1:0);break;case"number":Rg(C,v);break;case"string":Ig(C,v,-1,-1);break;case"object":if(v===null)Dc(C);else if(v.length!=null){var R=Ko(v.length);D.set(v,R),Ug(C,R,v.length,-1),_n(R)}else Yo(C,"Wrong API use : tried to return a value of an unknown type ("+v+").",-1);break;default:Dc(C)}}function u(C,v){for(var R=[],L=0;L<C;L+=1){var z=it(v+4*L,"i32"),oe=Pg(z);if(oe===1||oe===2)z=Eg(z);else if(oe===3)z=xg(z);else if(oe===4){oe=z,z=Ag(oe),oe=Dg(oe);for(var Ve=new Uint8Array(z),Ge=0;Ge<z;Ge+=1)Ve[Ge]=D[oe+Ge];z=Ve}else z=null;R.push(z)}return R}function m(C,v){this.Qa=C,this.db=v,this.Oa=1,this.mb=[]}function f(C,v){if(this.db=v,this.fb=Jo(C),this.fb===null)throw Error("Unable to allocate memory for the SQL string");this.lb=this.fb,this.$a=this.sb=null}function _(C){if(this.filename="dbfile_"+(4294967295*Math.random()>>>0),C!=null){var v=this.filename,R="/",L=v;if(R&&(R=typeof R=="string"?R:Jr(R),L=v?cs(R+"/"+v):R),v=tc(!0,!0),L=sg(L,v),C){if(typeof C=="string"){R=Array(C.length);for(var z=0,oe=C.length;z<oe;++z)R[z]=C.charCodeAt(z);C=R}zo(L,v|146),R=Ns(L,577),_c(R,C,0,C.length,0),Zr(R),zo(L,v)}}this.handleError(j(this.filename,k)),this.db=it(k,"i32"),Rc(this.db),this.gb={},this.Sa={}}var k=gs(4),M=i.cwrap,j=M("sqlite3_open","number",["string","number"]),ne=M("sqlite3_close_v2","number",["number"]),H=M("sqlite3_exec","number",["number","string","number","number","number"]),ge=M("sqlite3_changes","number",["number"]),ve=M("sqlite3_prepare_v2","number",["number","string","number","number","number"]),Mc=M("sqlite3_sql","string",["number"]),ug=M("sqlite3_normalized_sql","string",["number"]),vc=M("sqlite3_prepare_v2","number",["number","number","number","number","number"]),dg=M("sqlite3_bind_text","number",["number","number","number","number","number"]),Pc=M("sqlite3_bind_blob","number",["number","number","number","number","number"]),mg=M("sqlite3_bind_double","number",["number","number","number"]),pg=M("sqlite3_bind_int","number",["number","number","number"]),gg=M("sqlite3_bind_parameter_index","number",["number","string"]),fg=M("sqlite3_step","number",["number"]),hg=M("sqlite3_errmsg","string",["number"]),yg=M("sqlite3_column_count","number",["number"]),_g=M("sqlite3_data_count","number",["number"]),bg=M("sqlite3_column_double","number",["number","number"]),Ac=M("sqlite3_column_text","string",["number","number"]),Cg=M("sqlite3_column_blob","number",["number","number"]),kg=M("sqlite3_column_bytes","number",["number","number"]),Sg=M("sqlite3_column_type","number",["number","number"]),Tg=M("sqlite3_column_name","string",["number","number"]),wg=M("sqlite3_reset","number",["number"]),Mg=M("sqlite3_clear_bindings","number",["number"]),vg=M("sqlite3_finalize","number",["number"]),xc=M("sqlite3_create_function_v2","number","number string number number number number number number number".split(" ")),Pg=M("sqlite3_value_type","number",["number"]),Ag=M("sqlite3_value_bytes","number",["number"]),xg=M("sqlite3_value_text","string",["number"]),Dg=M("sqlite3_value_blob","number",["number"]),Eg=M("sqlite3_value_double","number",["number"]),Rg=M("sqlite3_result_double","",["number","number"]),Dc=M("sqlite3_result_null","",["number"]),Ig=M("sqlite3_result_text","",["number","string","number","number"]),Ug=M("sqlite3_result_blob","",["number","number","number","number"]),Og=M("sqlite3_result_int","",["number","number"]),Yo=M("sqlite3_result_error","",["number","string","number"]),Ec=M("sqlite3_aggregate_context","number",["number","number"]),Rc=M("RegisterExtensionFunctions","number",["number"]),Ic=M("sqlite3_update_hook","number",["number","number","number"]);m.prototype.bind=function(C){if(!this.Qa)throw"Statement closed";return this.reset(),Array.isArray(C)?this.Gb(C):C!=null&&typeof C=="object"?this.Hb(C):!0},m.prototype.step=function(){if(!this.Qa)throw"Statement closed";this.Oa=1;var C=fg(this.Qa);switch(C){case 100:return!0;case 101:return!1;default:throw this.db.handleError(C)}},m.prototype.Ab=function(C){return C==null&&(C=this.Oa,this.Oa+=1),bg(this.Qa,C)},m.prototype.Ob=function(C){if(C==null&&(C=this.Oa,this.Oa+=1),C=Ac(this.Qa,C),typeof BigInt!="function")throw Error("BigInt is not supported");return BigInt(C)},m.prototype.Tb=function(C){return C==null&&(C=this.Oa,this.Oa+=1),Ac(this.Qa,C)},m.prototype.getBlob=function(C){C==null&&(C=this.Oa,this.Oa+=1);var v=kg(this.Qa,C);C=Cg(this.Qa,C);for(var R=new Uint8Array(v),L=0;L<v;L+=1)R[L]=D[C+L];return R},m.prototype.get=function(C,v){v=v||{},C!=null&&this.bind(C)&&this.step(),C=[];for(var R=_g(this.Qa),L=0;L<R;L+=1)switch(Sg(this.Qa,L)){case 1:var z=v.useBigInt?this.Ob(L):this.Ab(L);C.push(z);break;case 2:C.push(this.Ab(L));break;case 3:C.push(this.Tb(L));break;case 4:C.push(this.getBlob(L));break;default:C.push(null)}return C},m.prototype.qb=function(){for(var C=[],v=yg(this.Qa),R=0;R<v;R+=1)C.push(Tg(this.Qa,R));return C},m.prototype.zb=function(C,v){C=this.get(C,v),v=this.qb();for(var R={},L=0;L<v.length;L+=1)R[v[L]]=C[L];return R},m.prototype.Sb=function(){return Mc(this.Qa)},m.prototype.Pb=function(){return ug(this.Qa)},m.prototype.run=function(C){return C!=null&&this.bind(C),this.step(),this.reset()},m.prototype.wb=function(C,v){v==null&&(v=this.Oa,this.Oa+=1),C=Jo(C),this.mb.push(C),this.db.handleError(dg(this.Qa,v,C,-1,0))},m.prototype.Fb=function(C,v){v==null&&(v=this.Oa,this.Oa+=1);var R=Ko(C.length);D.set(C,R),this.mb.push(R),this.db.handleError(Pc(this.Qa,v,R,C.length,0))},m.prototype.vb=function(C,v){v==null&&(v=this.Oa,this.Oa+=1),this.db.handleError((C===(C|0)?pg:mg)(this.Qa,v,C))},m.prototype.Ib=function(C){C==null&&(C=this.Oa,this.Oa+=1),Pc(this.Qa,C,0,0,0)},m.prototype.xb=function(C,v){switch(v==null&&(v=this.Oa,this.Oa+=1),typeof C){case"string":this.wb(C,v);return;case"number":this.vb(C,v);return;case"bigint":this.wb(C.toString(),v);return;case"boolean":this.vb(C+0,v);return;case"object":if(C===null){this.Ib(v);return}if(C.length!=null){this.Fb(C,v);return}}throw"Wrong API use : tried to bind a value of an unknown type ("+C+")."},m.prototype.Hb=function(C){var v=this;return Object.keys(C).forEach(function(R){var L=gg(v.Qa,R);L!==0&&v.xb(C[R],L)}),!0},m.prototype.Gb=function(C){for(var v=0;v<C.length;v+=1)this.xb(C[v],v+1);return!0},m.prototype.reset=function(){return this.freemem(),Mg(this.Qa)===0&&wg(this.Qa)===0},m.prototype.freemem=function(){for(var C;(C=this.mb.pop())!==void 0;)_n(C)},m.prototype.Ya=function(){this.freemem();var C=vg(this.Qa)===0;return delete this.db.gb[this.Qa],this.Qa=0,C},f.prototype.next=function(){if(this.fb===null)return{done:!0};if(this.$a!==null&&(this.$a.Ya(),this.$a=null),!this.db.db)throw this.ob(),Error("Database closed");var C=Cn(),v=gs(4);Q(k),Q(v);try{this.db.handleError(vc(this.db.db,this.lb,-1,k,v)),this.lb=it(v,"i32");var R=it(k,"i32");return R===0?(this.ob(),{done:!0}):(this.$a=new m(R,this.db),this.db.gb[R]=this.$a,{value:this.$a,done:!1})}catch(L){throw this.sb=le(this.lb),this.ob(),L}finally{bn(C)}},f.prototype.ob=function(){_n(this.fb),this.fb=null},f.prototype.Qb=function(){return this.sb!==null?this.sb:le(this.lb)},typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"&&(f.prototype[Symbol.iterator]=function(){return this}),_.prototype.run=function(C,v){if(!this.db)throw"Database closed";if(v){C=this.tb(C,v);try{C.step()}finally{C.Ya()}}else this.handleError(H(this.db,C,0,0,k));return this},_.prototype.exec=function(C,v,R){if(!this.db)throw"Database closed";var L=Cn(),z=null,oe=null,Ve=null;try{Ve=oe=Jo(C);var Ge=gs(4);for(C=[];it(Ve,"i8")!==0;){Q(k),Q(Ge),this.handleError(vc(this.db,Ve,-1,k,Ge));var rt=it(k,"i32");if(Ve=it(Ge,"i32"),rt!==0){var Fe=null;for(z=new m(rt,this),v!=null&&z.bind(v);z.step();)Fe===null&&(Fe={columns:z.qb(),values:[]},C.push(Fe)),Fe.values.push(z.get(null,R));z.Ya()}}return C}catch(kn){throw z&&z.Ya(),kn}finally{oe&&_n(oe),bn(L)}},_.prototype.Mb=function(C,v,R,L,z){typeof v=="function"&&(L=R,R=v,v=void 0),C=this.tb(C,v);try{for(;C.step();)R(C.zb(null,z))}finally{C.Ya()}if(typeof L=="function")return L()},_.prototype.tb=function(C,v){if(Q(k),this.handleError(ve(this.db,C,-1,k,0)),C=it(k,"i32"),C===0)throw"Nothing to prepare";var R=new m(C,this);return v!=null&&R.bind(v),this.gb[C]=R},_.prototype.Ub=function(C){return new f(C,this)},_.prototype.Nb=function(){Object.values(this.gb).forEach(function(v){v.Ya()}),Object.values(this.Sa).forEach(Jt),this.Sa={},this.handleError(ne(this.db));var C=ng(this.filename);return this.handleError(j(this.filename,k)),this.db=it(k,"i32"),Rc(this.db),C},_.prototype.close=function(){this.db!==null&&(Object.values(this.gb).forEach(function(C){C.Ya()}),Object.values(this.Sa).forEach(Jt),this.Sa={},this.Za&&(Jt(this.Za),this.Za=void 0),this.handleError(ne(this.db)),pc("/"+this.filename),this.db=null)},_.prototype.handleError=function(C){if(C===0)return null;throw C=hg(this.db),Error(C)},_.prototype.Rb=function(){return ge(this.db)},_.prototype.Kb=function(C,v){Object.prototype.hasOwnProperty.call(this.Sa,C)&&(Jt(this.Sa[C]),delete this.Sa[C]);var R=yn(function(L,z,oe){z=u(z,oe);try{var Ve=v.apply(null,z)}catch(Ge){Yo(L,Ge,-1);return}l(L,Ve)},"viii");return this.Sa[C]=R,this.handleError(xc(this.db,C,v.length,1,0,R,0,0,0)),this},_.prototype.Jb=function(C,v){var R=v.init||function(){return null},L=v.finalize||function(rt){return rt},z=v.step;if(!z)throw"An aggregate function must have a step function in "+C;var oe={};Object.hasOwnProperty.call(this.Sa,C)&&(Jt(this.Sa[C]),delete this.Sa[C]),v=C+"__finalize",Object.hasOwnProperty.call(this.Sa,v)&&(Jt(this.Sa[v]),delete this.Sa[v]);var Ve=yn(function(rt,Fe,kn){var fs=Ec(rt,1);Object.hasOwnProperty.call(oe,fs)||(oe[fs]=R()),Fe=u(Fe,kn),Fe=[oe[fs]].concat(Fe);try{oe[fs]=z.apply(null,Fe)}catch(Fg){delete oe[fs],Yo(rt,Fg,-1)}},"viii"),Ge=yn(function(rt){var Fe=Ec(rt,1);try{var kn=L(oe[Fe])}catch(fs){delete oe[Fe],Yo(rt,fs,-1);return}l(rt,kn),delete oe[Fe]},"vi");return this.Sa[C]=Ve,this.Sa[v]=Ge,this.handleError(xc(this.db,C,z.length-1,1,0,0,Ve,Ge,0)),this},_.prototype.Zb=function(C){return this.Za&&(Ic(this.db,0,0),Jt(this.Za),this.Za=void 0),C?(this.Za=yn(function(v,R,L,z,oe){switch(R){case 18:v="insert";break;case 23:v="update";break;case 9:v="delete";break;default:throw"unknown operationCode in updateHook callback: "+R}if(L=le(L),z=le(z),oe>Number.MAX_SAFE_INTEGER)throw"rowId too big to fit inside a Number";C(v,L,z,Number(oe))},"viiiij"),Ic(this.db,this.Za,0),this):this},m.prototype.bind=m.prototype.bind,m.prototype.step=m.prototype.step,m.prototype.get=m.prototype.get,m.prototype.getColumnNames=m.prototype.qb,m.prototype.getAsObject=m.prototype.zb,m.prototype.getSQL=m.prototype.Sb,m.prototype.getNormalizedSQL=m.prototype.Pb,m.prototype.run=m.prototype.run,m.prototype.reset=m.prototype.reset,m.prototype.freemem=m.prototype.freemem,m.prototype.free=m.prototype.Ya,f.prototype.next=f.prototype.next,f.prototype.getRemainingSQL=f.prototype.Qb,_.prototype.run=_.prototype.run,_.prototype.exec=_.prototype.exec,_.prototype.each=_.prototype.Mb,_.prototype.prepare=_.prototype.tb,_.prototype.iterateStatements=_.prototype.Ub,_.prototype.export=_.prototype.Nb,_.prototype.close=_.prototype.close,_.prototype.handleError=_.prototype.handleError,_.prototype.getRowsModified=_.prototype.Rb,_.prototype.create_function=_.prototype.Kb,_.prototype.create_aggregate=_.prototype.Jb,_.prototype.updateHook=_.prototype.Zb,i.Database=_};var d="./this.program",p=(l,u)=>{throw u},g=globalThis.document?.currentScript?.src;typeof __filename<"u"?g=__filename:a&&(g=self.location.href);var h="",y,b;if(c){var T=require("node:fs");h=__dirname+"/",b=l=>(l=A(l)?new URL(l):l,T.readFileSync(l)),y=async l=>(l=A(l)?new URL(l):l,T.readFileSync(l,void 0)),1<process.argv.length&&(d=process.argv[1].replace(/\\/g,"/")),process.argv.slice(2),typeof _s<"u"&&(_s.exports=i),p=(l,u)=>{throw process.exitCode=l,u}}else if(r||a){try{h=new URL(".",g).href}catch{}a&&(b=l=>{var u=new XMLHttpRequest;return u.open("GET",l,!1),u.responseType="arraybuffer",u.send(null),new Uint8Array(u.response)}),y=async l=>{if(A(l))return new Promise((m,f)=>{var _=new XMLHttpRequest;_.open("GET",l,!0),_.responseType="arraybuffer",_.onload=()=>{_.status==200||_.status==0&&_.response?m(_.response):f(_.status)},_.onerror=f,_.send(null)});var u=await fetch(l,{credentials:"same-origin"});if(u.ok)return u.arrayBuffer();throw Error(u.status+" : "+u.url)}}var E=console.log.bind(console),P=console.error.bind(console),I,F=!1,Z,A=l=>l.startsWith("file://"),D,B,_e,me,ae,dn,Es,je;function mn(){var l=Vo.buffer;D=new Int8Array(l),_e=new Int16Array(l),B=new Uint8Array(l),new Uint16Array(l),me=new Int32Array(l),ae=new Uint32Array(l),dn=new Float32Array(l),Es=new Float64Array(l),je=new BigInt64Array(l),new BigUint64Array(l)}function Wt(l){throw i.onAbort?.(l),l="Aborted("+l+")",P(l),F=!0,new WebAssembly.RuntimeError(l+". Build with -sASSERTIONS for more info.")}var Mt;async function No(l){if(!I)try{var u=await y(l);return new Uint8Array(u)}catch{}if(l==Mt&&I)l=new Uint8Array(I);else if(b)l=b(l);else throw"both async and sync fetching of the wasm failed";return l}async function Lo(l,u){try{var m=await No(l);return await WebAssembly.instantiate(m,u)}catch(f){P(`failed to asynchronously prepare wasm: ${f}`),Wt(f)}}async function qr(l){var u=Mt;if(!I&&!A(u)&&!c)try{var m=fetch(u,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(m,l)}catch(f){P(`wasm streaming compile failed: ${f}`),P("falling back to ArrayBuffer instantiation")}return Lo(u,l)}class as{name="ExitStatus";constructor(u){this.message=`Program terminated with exit(${u})`,this.status=u}}var Rs=l=>{for(;0<l.length;)l.shift()(i)},zr=[],jo=[],pn=()=>{var l=i.preRun.shift();jo.push(l)},ot=0,Is=null;function it(l,u="i8"){switch(u.endsWith("*")&&(u="*"),u){case"i1":return D[l];case"i8":return D[l];case"i16":return _e[l>>1];case"i32":return me[l>>2];case"i64":return je[l>>3];case"float":return dn[l>>2];case"double":return Es[l>>3];case"*":return ae[l>>2];default:Wt(`invalid type for getValue: ${u}`)}}var U=!0;function Q(l){var u="i32";switch(u.endsWith("*")&&(u="*"),u){case"i1":D[l]=0;break;case"i8":D[l]=0;break;case"i16":_e[l>>1]=0;break;case"i32":me[l>>2]=0;break;case"i64":je[l>>3]=BigInt(0);break;case"float":dn[l>>2]=0;break;case"double":Es[l>>3]=0;break;case"*":ae[l>>2]=0;break;default:Wt(`invalid type for setValue: ${u}`)}}var be=new TextDecoder,Me=(l,u,m,f)=>{if(m=u+m,f)return m;for(;l[u]&&!(u>=m);)++u;return u},le=(l,u,m)=>l?be.decode(B.subarray(l,Me(B,l,u,m))):"",ls=(l,u)=>{for(var m=0,f=l.length-1;0<=f;f--){var _=l[f];_==="."?l.splice(f,1):_===".."?(l.splice(f,1),m++):m&&(l.splice(f,1),m--)}if(u)for(;m;m--)l.unshift("..");return l},cs=l=>{var u=l.charAt(0)==="/",m=l.slice(-1)==="/";return(l=ls(l.split("/").filter(f=>!!f),!u).join("/"))||u||(l="."),l&&m&&(l+="/"),(u?"/":"")+l},us=l=>{var u=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(l).slice(1);return l=u[0],u=u[1],!l&&!u?".":(u&&=u.slice(0,-1),l+u)},vt=l=>l&&l.match(/([^\/]+|\/)\/*$/)[1],Wr=()=>{if(c){var l=require("node:crypto");return u=>l.randomFillSync(u)}return u=>crypto.getRandomValues(u)},Xl=l=>{(Xl=Wr())(l)},Jp=(...l)=>{for(var u="",m=!1,f=l.length-1;-1<=f&&!m;f--){if(m=0<=f?l[f]:"/",typeof m!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!m)return"";u=m+"/"+u,m=m.charAt(0)==="/"}return u=ls(u.split("/").filter(_=>!!_),!m).join("/"),(m?"/":"")+u||"."},gn=l=>{var u=Me(l,0);return be.decode(l.buffer?l.subarray(0,u):new Uint8Array(l.slice(0,u)))},$r=[],Us=l=>{for(var u=0,m=0;m<l.length;++m){var f=l.charCodeAt(m);127>=f?u++:2047>=f?u+=2:55296<=f&&57343>=f?(u+=4,++m):u+=3}return u},gt=(l,u,m,f)=>{if(!(0<f))return 0;var _=m;f=m+f-1;for(var k=0;k<l.length;++k){var M=l.codePointAt(k);if(127>=M){if(m>=f)break;u[m++]=M}else if(2047>=M){if(m+1>=f)break;u[m++]=192|M>>6,u[m++]=128|M&63}else if(65535>=M){if(m+2>=f)break;u[m++]=224|M>>12,u[m++]=128|M>>6&63,u[m++]=128|M&63}else{if(m+3>=f)break;u[m++]=240|M>>18,u[m++]=128|M>>12&63,u[m++]=128|M>>6&63,u[m++]=128|M&63,k++}}return u[m]=0,m-_},Zl=[];function ec(l,u){Zl[l]={input:[],output:[],eb:u},Qr(l,Kp)}var Kp={open(l){var u=Zl[l.node.rdev];if(!u)throw new x(43);l.tty=u,l.seekable=!1},close(l){l.tty.eb.fsync(l.tty)},fsync(l){l.tty.eb.fsync(l.tty)},read(l,u,m,f){if(!l.tty||!l.tty.eb.Bb)throw new x(60);for(var _=0,k=0;k<f;k++){try{var M=l.tty.eb.Bb(l.tty)}catch{throw new x(29)}if(M===void 0&&_===0)throw new x(6);if(M==null)break;_++,u[m+k]=M}return _&&(l.node.atime=Date.now()),_},write(l,u,m,f){if(!l.tty||!l.tty.eb.ub)throw new x(60);try{for(var _=0;_<f;_++)l.tty.eb.ub(l.tty,u[m+_])}catch{throw new x(29)}return f&&(l.node.mtime=l.node.ctime=Date.now()),_}},Vp={Bb(){e:{if(!$r.length){var l=null;if(c){var u=Buffer.alloc(256),m=0,f=process.stdin.fd;try{m=T.readSync(f,u,0,256)}catch(_){if(_.toString().includes("EOF"))m=0;else throw _}0<m&&(l=u.slice(0,m).toString("utf-8"))}else globalThis.window?.prompt&&(l=window.prompt("Input: "),l!==null&&(l+=`
|
|
3
|
-
`));if(!l){l=null;break e}u=Array(Us(l)+1),l=gt(l,u,0,u.length),u.length=l,$r=u}l=$r.shift()}return l},ub(l,u){u===null||u===10?(E(gn(l.output)),l.output=[]):u!=0&&l.output.push(u)},fsync(l){0<l.output?.length&&(E(gn(l.output)),l.output=[])},hc(){return{bc:25856,dc:5,ac:191,cc:35387,$b:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ic(){return 0},jc(){return[24,80]}},Yp={ub(l,u){u===null||u===10?(P(gn(l.output)),l.output=[]):u!=0&&l.output.push(u)},fsync(l){0<l.output?.length&&(P(gn(l.output)),l.output=[])}},q={Wa:null,Xa(){return q.createNode(null,"/",16895,0)},createNode(l,u,m,f){if((m&61440)===24576||(m&61440)===4096)throw new x(63);return q.Wa||(q.Wa={dir:{node:{Ta:q.La.Ta,Ua:q.La.Ua,lookup:q.La.lookup,ib:q.La.ib,rename:q.La.rename,unlink:q.La.unlink,rmdir:q.La.rmdir,readdir:q.La.readdir,symlink:q.La.symlink},stream:{Va:q.Ma.Va}},file:{node:{Ta:q.La.Ta,Ua:q.La.Ua},stream:{Va:q.Ma.Va,read:q.Ma.read,write:q.Ma.write,jb:q.Ma.jb,kb:q.Ma.kb}},link:{node:{Ta:q.La.Ta,Ua:q.La.Ua,readlink:q.La.readlink},stream:{}},yb:{node:{Ta:q.La.Ta,Ua:q.La.Ua},stream:tg}}),m=rc(l,u,m,f),Oe(m.mode)?(m.La=q.Wa.dir.node,m.Ma=q.Wa.dir.stream,m.Na={}):(m.mode&61440)===32768?(m.La=q.Wa.file.node,m.Ma=q.Wa.file.stream,m.Ra=0,m.Na=null):(m.mode&61440)===40960?(m.La=q.Wa.link.node,m.Ma=q.Wa.link.stream):(m.mode&61440)===8192&&(m.La=q.Wa.yb.node,m.Ma=q.Wa.yb.stream),m.atime=m.mtime=m.ctime=Date.now(),l&&(l.Na[u]=m,l.atime=l.mtime=l.ctime=m.atime),m},fc(l){return l.Na?l.Na.subarray?l.Na.subarray(0,l.Ra):new Uint8Array(l.Na):new Uint8Array(0)},La:{Ta(l){var u={};return u.dev=(l.mode&61440)===8192?l.id:1,u.ino=l.id,u.mode=l.mode,u.nlink=1,u.uid=0,u.gid=0,u.rdev=l.rdev,Oe(l.mode)?u.size=4096:(l.mode&61440)===32768?u.size=l.Ra:(l.mode&61440)===40960?u.size=l.link.length:u.size=0,u.atime=new Date(l.atime),u.mtime=new Date(l.mtime),u.ctime=new Date(l.ctime),u.blksize=4096,u.blocks=Math.ceil(u.size/u.blksize),u},Ua(l,u){for(var m of["mode","atime","mtime","ctime"])u[m]!=null&&(l[m]=u[m]);u.size!==void 0&&(u=u.size,l.Ra!=u&&(u==0?(l.Na=null,l.Ra=0):(m=l.Na,l.Na=new Uint8Array(u),m&&l.Na.set(m.subarray(0,Math.min(u,l.Ra))),l.Ra=u)))},lookup(){throw q.nb||(q.nb=new x(44),q.nb.stack="<generic error, no stack>"),q.nb},ib(l,u,m,f){return q.createNode(l,u,m,f)},rename(l,u,m){try{var f=ds(u,m)}catch{}if(f){if(Oe(l.mode))for(var _ in f.Na)throw new x(55);Vr(f)}delete l.parent.Na[l.name],u.Na[m]=l,l.name=m,u.ctime=u.mtime=l.parent.ctime=l.parent.mtime=Date.now()},unlink(l,u){delete l.Na[u],l.ctime=l.mtime=Date.now()},rmdir(l,u){var m=ds(l,u),f;for(f in m.Na)throw new x(55);delete l.Na[u],l.ctime=l.mtime=Date.now()},readdir(l){return[".","..",...Object.keys(l.Na)]},symlink(l,u,m){return l=q.createNode(l,u,41471,0),l.link=m,l},readlink(l){if((l.mode&61440)!==40960)throw new x(28);return l.link}},Ma:{read(l,u,m,f,_){var k=l.node.Na;if(_>=l.node.Ra)return 0;if(l=Math.min(l.node.Ra-_,f),8<l&&k.subarray)u.set(k.subarray(_,_+l),m);else for(f=0;f<l;f++)u[m+f]=k[_+f];return l},write(l,u,m,f,_,k){if(u.buffer===D.buffer&&(k=!1),!f)return 0;if(l=l.node,l.mtime=l.ctime=Date.now(),u.subarray&&(!l.Na||l.Na.subarray)){if(k)return l.Na=u.subarray(m,m+f),l.Ra=f;if(l.Ra===0&&_===0)return l.Na=u.slice(m,m+f),l.Ra=f;if(_+f<=l.Ra)return l.Na.set(u.subarray(m,m+f),_),f}k=_+f;var M=l.Na?l.Na.length:0;if(M>=k||(k=Math.max(k,M*(1048576>M?2:1.125)>>>0),M!=0&&(k=Math.max(k,256)),M=l.Na,l.Na=new Uint8Array(k),0<l.Ra&&l.Na.set(M.subarray(0,l.Ra),0)),l.Na.subarray&&u.subarray)l.Na.set(u.subarray(m,m+f),_);else for(k=0;k<f;k++)l.Na[_+k]=u[m+k];return l.Ra=Math.max(l.Ra,_+f),f},Va(l,u,m){if(m===1?u+=l.position:m===2&&(l.node.mode&61440)===32768&&(u+=l.node.Ra),0>u)throw new x(28);return u},jb(l,u,m,f,_){if((l.node.mode&61440)!==32768)throw new x(43);if(l=l.node.Na,_&2||!l||l.buffer!==D.buffer){_=!0,f=65536*Math.ceil(u/65536);var k=Tc(65536,f);if(k&&B.fill(0,k,k+f),f=k,!f)throw new x(48);l&&((0<m||m+u<l.length)&&(l.subarray?l=l.subarray(m,m+u):l=Array.prototype.slice.call(l,m,m+u)),D.set(l,f))}else _=!1,f=l.byteOffset;return{Xb:f,Eb:_}},kb(l,u,m,f){return q.Ma.write(l,u,0,f,m,!1),0}}},tc=(l,u)=>{var m=0;return l&&(m|=365),u&&(m|=146),m},Hr=null,sc={},Os=[],Qp=1,$t=null,nc=!1,oc=!0,ic={},x=class{name="ErrnoError";constructor(l){this.Pa=l}},Xp=class{hb={};node=null;get flags(){return this.hb.flags}set flags(l){this.hb.flags=l}get position(){return this.hb.position}set position(l){this.hb.position=l}},Zp=class{La={};Ma={};bb=null;constructor(l,u,m,f){l||=this,this.parent=l,this.Xa=l.Xa,this.id=Qp++,this.name=u,this.mode=m,this.rdev=f,this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&365)===365}set read(l){l?this.mode|=365:this.mode&=-366}get write(){return(this.mode&146)===146}set write(l){l?this.mode|=146:this.mode&=-147}};function Ke(l,u={}){if(!l)throw new x(44);u.pb??(u.pb=!0),l.charAt(0)==="/"||(l="//"+l);var m=0;e:for(;40>m;m++){l=l.split("/").filter(j=>!!j);for(var f=Hr,_="/",k=0;k<l.length;k++){var M=k===l.length-1;if(M&&u.parent)break;if(l[k]!==".")if(l[k]==="..")if(_=us(_),f===f.parent){l=_+"/"+l.slice(k+1).join("/"),m--;continue e}else f=f.parent;else{_=cs(_+"/"+l[k]);try{f=ds(f,l[k])}catch(j){if(j?.Pa===44&&M&&u.Wb)return{path:_};throw j}if(!f.bb||M&&!u.pb||(f=f.bb.root),(f.mode&61440)===40960&&(!M||u.ab)){if(!f.La.readlink)throw new x(52);f=f.La.readlink(f),f.charAt(0)==="/"||(f=us(_)+"/"+f),l=f+"/"+l.slice(k+1).join("/");continue e}}}return{path:_,node:f}}throw new x(32)}function Jr(l){for(var u;;){if(l===l.parent)return l=l.Xa.Db,u?l[l.length-1]!=="/"?`${l}/${u}`:l+u:l;u=u?`${l.name}/${u}`:l.name,l=l.parent}}function Kr(l,u){for(var m=0,f=0;f<u.length;f++)m=(m<<5)-m+u.charCodeAt(f)|0;return(l+m>>>0)%$t.length}function Vr(l){var u=Kr(l.parent.id,l.name);if($t[u]===l)$t[u]=l.cb;else for(u=$t[u];u;){if(u.cb===l){u.cb=l.cb;break}u=u.cb}}function ds(l,u){var m=Oe(l.mode)?(m=Fs(l,"x"))?m:l.La.lookup?0:2:54;if(m)throw new x(m);for(m=$t[Kr(l.id,u)];m;m=m.cb){var f=m.name;if(m.parent.id===l.id&&f===u)return m}return l.La.lookup(l,u)}function rc(l,u,m,f){return l=new Zp(l,u,m,f),u=Kr(l.parent.id,l.name),l.cb=$t[u],$t[u]=l}function Oe(l){return(l&61440)===16384}function ac(l){var u=["r","w","rw"][l&3];return l&512&&(u+="w"),u}function Fs(l,u){if(oc)return 0;if(!u.includes("r")||l.mode&292){if(u.includes("w")&&!(l.mode&146)||u.includes("x")&&!(l.mode&73))return 2}else return 2;return 0}function lc(l,u){if(!Oe(l.mode))return 54;try{return ds(l,u),20}catch{}return Fs(l,"wx")}function cc(l,u,m){try{var f=ds(l,u)}catch(_){return _.Pa}if(l=Fs(l,"wx"))return l;if(m){if(!Oe(f.mode))return 54;if(f===f.parent||Jr(f)==="/")return 10}else if(Oe(f.mode))return 31;return 0}function Go(l){if(!l)throw new x(63);return l}function Ee(l){if(l=Os[l],!l)throw new x(8);return l}function uc(l,u=-1){if(l=Object.assign(new Xp,l),u==-1)e:{for(u=0;4096>=u;u++)if(!Os[u])break e;throw new x(33)}return l.fd=u,Os[u]=l}function eg(l,u=-1){return l=uc(l,u),l.Ma?.ec?.(l),l}function Yr(l,u,m){var f=l?.Ma.Ua;l=f?l:u,f??=u.La.Ua,Go(f),f(l,m)}var tg={open(l){l.Ma=sc[l.node.rdev].Ma,l.Ma.open?.(l)},Va(){throw new x(70)}};function Qr(l,u){sc[l]={Ma:u}}function dc(l,u){var m=u==="/";if(m&&Hr)throw new x(10);if(!m&&u){var f=Ke(u,{pb:!1});if(u=f.path,f=f.node,f.bb)throw new x(10);if(!Oe(f.mode))throw new x(54)}u={type:l,kc:{},Db:u,Vb:[]},l=l.Xa(u),l.Xa=u,u.root=l,m?Hr=l:f&&(f.bb=u,f.Xa&&f.Xa.Vb.push(u))}function Bo(l,u,m){var f=Ke(l,{parent:!0}).node;if(l=vt(l),!l)throw new x(28);if(l==="."||l==="..")throw new x(20);var _=lc(f,l);if(_)throw new x(_);if(!f.La.ib)throw new x(63);return f.La.ib(f,l,u,m)}function sg(l,u=438){return Bo(l,u&4095|32768,0)}function ft(l,u=511){return Bo(l,u&1023|16384,0)}function qo(l,u,m){typeof m>"u"&&(m=u,u=438),Bo(l,u|8192,m)}function Xr(l,u){if(!Jp(l))throw new x(44);var m=Ke(u,{parent:!0}).node;if(!m)throw new x(44);u=vt(u);var f=lc(m,u);if(f)throw new x(f);if(!m.La.symlink)throw new x(63);m.La.symlink(m,u,l)}function mc(l){var u=Ke(l,{parent:!0}).node;l=vt(l);var m=ds(u,l),f=cc(u,l,!0);if(f)throw new x(f);if(!u.La.rmdir)throw new x(63);if(m.bb)throw new x(10);u.La.rmdir(u,l),Vr(m)}function pc(l){var u=Ke(l,{parent:!0}).node;if(!u)throw new x(44);l=vt(l);var m=ds(u,l),f=cc(u,l,!1);if(f)throw new x(f);if(!u.La.unlink)throw new x(63);if(m.bb)throw new x(10);u.La.unlink(u,l),Vr(m)}function fn(l,u){return l=Ke(l,{ab:!u}).node,Go(l.La.Ta)(l)}function gc(l,u,m,f){Yr(l,u,{mode:m&4095|u.mode&-4096,ctime:Date.now(),Lb:f})}function zo(l,u){l=typeof l=="string"?Ke(l,{ab:!0}).node:l,gc(null,l,u)}function fc(l,u,m){if(Oe(u.mode))throw new x(31);if((u.mode&61440)!==32768)throw new x(28);var f=Fs(u,"w");if(f)throw new x(f);Yr(l,u,{size:m,timestamp:Date.now()})}function Ns(l,u,m=438){if(l==="")throw new x(44);if(typeof u=="string"){var f={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090}[u];if(typeof f>"u")throw Error(`Unknown file open mode: ${u}`);u=f}if(m=u&64?m&4095|32768:0,typeof l=="object")f=l;else{var _=l.endsWith("/");l=Ke(l,{ab:!(u&131072),Wb:!0}),f=l.node,l=l.path}var k=!1;if(u&64)if(f){if(u&128)throw new x(20)}else{if(_)throw new x(31);f=Bo(l,m|511,0),k=!0}if(!f)throw new x(44);if((f.mode&61440)===8192&&(u&=-513),u&65536&&!Oe(f.mode))throw new x(54);if(!k&&(_=f?(f.mode&61440)===40960?32:Oe(f.mode)&&(ac(u)!=="r"||u&576)?31:Fs(f,ac(u)):44))throw new x(_);return u&512&&!k&&(_=f,_=typeof _=="string"?Ke(_,{ab:!0}).node:_,fc(null,_,0)),u&=-131713,_=uc({node:f,path:Jr(f),flags:u,seekable:!0,position:0,Ma:f.Ma,Yb:[],error:!1}),_.Ma.open&&_.Ma.open(_),k&&zo(f,m&511),!i.logReadFiles||u&1||l in ic||(ic[l]=1),_}function Zr(l){if(l.fd===null)throw new x(8);l.rb&&(l.rb=null);try{l.Ma.close&&l.Ma.close(l)}catch(u){throw u}finally{Os[l.fd]=null}l.fd=null}function hc(l,u,m){if(l.fd===null)throw new x(8);if(!l.seekable||!l.Ma.Va)throw new x(70);if(m!=0&&m!=1&&m!=2)throw new x(28);l.position=l.Ma.Va(l,u,m),l.Yb=[]}function yc(l,u,m,f,_){if(0>f||0>_)throw new x(28);if(l.fd===null)throw new x(8);if((l.flags&2097155)===1)throw new x(8);if(Oe(l.node.mode))throw new x(31);if(!l.Ma.read)throw new x(28);var k=typeof _<"u";if(!k)_=l.position;else if(!l.seekable)throw new x(70);return u=l.Ma.read(l,u,m,f,_),k||(l.position+=u),u}function _c(l,u,m,f,_){if(0>f||0>_)throw new x(28);if(l.fd===null)throw new x(8);if((l.flags&2097155)===0)throw new x(8);if(Oe(l.node.mode))throw new x(31);if(!l.Ma.write)throw new x(28);l.seekable&&l.flags&1024&&hc(l,0,2);var k=typeof _<"u";if(!k)_=l.position;else if(!l.seekable)throw new x(70);return u=l.Ma.write(l,u,m,f,_,void 0),k||(l.position+=u),u}function ng(l){var u=u||0,m="binary";m!=="utf8"&&m!=="binary"&&Wt(`Invalid encoding type "${m}"`),u=Ns(l,u),l=fn(l).size;var f=new Uint8Array(l);return yc(u,f,0,l,0),m==="utf8"&&(f=gn(f)),Zr(u),f}function Ht(l,u,m){l=cs("/dev/"+l);var f=tc(!!u,!!m);Ht.Cb??(Ht.Cb=64);var _=Ht.Cb++<<8|0;Qr(_,{open(k){k.seekable=!1},close(){m?.buffer?.length&&m(10)},read(k,M,j,ne){for(var H=0,ge=0;ge<ne;ge++){try{var ve=u()}catch{throw new x(29)}if(ve===void 0&&H===0)throw new x(6);if(ve==null)break;H++,M[j+ge]=ve}return H&&(k.node.atime=Date.now()),H},write(k,M,j,ne){for(var H=0;H<ne;H++)try{m(M[j+H])}catch{throw new x(29)}return ne&&(k.node.mtime=k.node.ctime=Date.now()),H}}),qo(l,f,_)}var pe={};function ms(l,u,m){if(u.charAt(0)==="/")return u;if(l=l===-100?"/":Ee(l).path,u.length==0){if(!m)throw new x(44);return l}return l+"/"+u}function Wo(l,u){ae[l>>2]=u.dev,ae[l+4>>2]=u.mode,ae[l+8>>2]=u.nlink,ae[l+12>>2]=u.uid,ae[l+16>>2]=u.gid,ae[l+20>>2]=u.rdev,je[l+24>>3]=BigInt(u.size),me[l+32>>2]=4096,me[l+36>>2]=u.blocks;var m=u.atime.getTime(),f=u.mtime.getTime(),_=u.ctime.getTime();return je[l+40>>3]=BigInt(Math.floor(m/1e3)),ae[l+48>>2]=m%1e3*1e6,je[l+56>>3]=BigInt(Math.floor(f/1e3)),ae[l+64>>2]=f%1e3*1e6,je[l+72>>3]=BigInt(Math.floor(_/1e3)),ae[l+80>>2]=_%1e3*1e6,je[l+88>>3]=BigInt(u.ino),0}var $o=void 0,Ho=()=>{var l=me[+$o>>2];return $o+=4,l},ea=0,og=[0,31,60,91,121,152,182,213,244,274,305,335],ig=[0,31,59,90,120,151,181,212,243,273,304,334],hn={},bc=l=>{Z=l,U||0<ea||(i.onExit?.(l),F=!0),p(l,new as(l))},rg=l=>{if(!F)try{l()}catch(u){u instanceof as||u=="unwind"||p(1,u)}finally{if(!(U||0<ea))try{Z=l=Z,bc(l)}catch(u){u instanceof as||u=="unwind"||p(1,u)}}},ta={},Cc=()=>{if(!sa){var l={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:(globalThis.navigator?.language??"C").replace("-","_")+".UTF-8",_:d||"./this.program"},u;for(u in ta)ta[u]===void 0?delete l[u]:l[u]=ta[u];var m=[];for(u in l)m.push(`${u}=${l[u]}`);sa=m}return sa},sa,ag=(l,u,m,f)=>{var _={string:H=>{var ge=0;if(H!=null&&H!==0){ge=Us(H)+1;var ve=gs(ge);gt(H,B,ve,ge),ge=ve}return ge},array:H=>{var ge=gs(H.length);return D.set(H,ge),ge}};l=i["_"+l];var k=[],M=0;if(f)for(var j=0;j<f.length;j++){var ne=_[m[j]];ne?(M===0&&(M=Cn()),k[j]=ne(f[j])):k[j]=f[j]}return m=l(...k),m=(function(H){return M!==0&&bn(M),u==="string"?le(H):u==="boolean"?!!H:H})(m)},Jo=l=>{var u=Us(l)+1,m=Ko(u);return m&>(l,B,m,u),m},ps,na=[],Jt=l=>{ps.delete(Kt.get(l)),Kt.set(l,null),na.push(l)},kc=l=>{let u=l.length;return[u%128|128,u>>7,...l]},lg={i:127,p:127,j:126,f:125,d:124,e:111},Sc=l=>kc(Array.from(l,u=>lg[u])),yn=(l,u)=>{if(!ps){ps=new WeakMap;var m=Kt.length;if(ps)for(var f=0;f<0+m;f++){var _=Kt.get(f);_&&ps.set(_,f)}}if(m=ps.get(l)||0)return m;m=na.length?na.pop():Kt.grow(1);try{Kt.set(m,l)}catch(k){if(!(k instanceof TypeError))throw k;u=Uint8Array.of(0,97,115,109,1,0,0,0,1,...kc([1,96,...Sc(u.slice(1)),...Sc(u[0]==="v"?"":u[0])]),2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0),u=new WebAssembly.Module(u),u=new WebAssembly.Instance(u,{e:{f:l}}).exports.f,Kt.set(m,u)}return ps.set(l,m),m};if($t=Array(4096),dc(q,"/"),ft("/tmp"),ft("/home"),ft("/home/web_user"),(function(){ft("/dev"),Qr(259,{read:()=>0,write:(f,_,k,M)=>M,Va:()=>0}),qo("/dev/null",259),ec(1280,Vp),ec(1536,Yp),qo("/dev/tty",1280),qo("/dev/tty1",1536);var l=new Uint8Array(1024),u=0,m=()=>(u===0&&(Xl(l),u=l.byteLength),l[--u]);Ht("random",m),Ht("urandom",m),ft("/dev/shm"),ft("/dev/shm/tmp")})(),(function(){ft("/proc");var l=ft("/proc/self");ft("/proc/self/fd"),dc({Xa(){var u=rc(l,"fd",16895,73);return u.Ma={Va:q.Ma.Va},u.La={lookup(m,f){m=+f;var _=Ee(m);return m={parent:null,Xa:{Db:"fake"},La:{readlink:()=>_.path},id:m+1},m.parent=m},readdir(){return Array.from(Os.entries()).filter(([,m])=>m).map(([m])=>m.toString())}},u}},"/proc/self/fd")})(),i.noExitRuntime&&(U=i.noExitRuntime),i.print&&(E=i.print),i.printErr&&(P=i.printErr),i.wasmBinary&&(I=i.wasmBinary),i.thisProgram&&(d=i.thisProgram),i.preInit)for(typeof i.preInit=="function"&&(i.preInit=[i.preInit]);0<i.preInit.length;)i.preInit.shift()();i.stackSave=()=>Cn(),i.stackRestore=l=>bn(l),i.stackAlloc=l=>gs(l),i.cwrap=(l,u,m,f)=>{var _=!m||m.every(k=>k==="number"||k==="boolean");return u!=="string"&&_&&!f?i["_"+l]:(...k)=>ag(l,u,m,k)},i.addFunction=yn,i.removeFunction=Jt,i.UTF8ToString=le,i.stringToNewUTF8=Jo,i.writeArrayToMemory=(l,u)=>{D.set(l,u)};var Ko,_n,Tc,wc,bn,gs,Cn,Vo,Kt,cg={a:(l,u,m,f)=>Wt(`Assertion failed: ${le(l)}, at: `+[u?le(u):"unknown filename",m,f?le(f):"unknown function"]),i:function(l,u){try{return l=le(l),zo(l,u),0}catch(m){if(typeof pe>"u"||m.name!=="ErrnoError")throw m;return-m.Pa}},L:function(l,u,m){try{if(u=le(u),u=ms(l,u),m&-8)return-28;var f=Ke(u,{ab:!0}).node;return f?(l="",m&4&&(l+="r"),m&2&&(l+="w"),m&1&&(l+="x"),l&&Fs(f,l)?-2:0):-44}catch(_){if(typeof pe>"u"||_.name!=="ErrnoError")throw _;return-_.Pa}},j:function(l,u){try{var m=Ee(l);return gc(m,m.node,u,!1),0}catch(f){if(typeof pe>"u"||f.name!=="ErrnoError")throw f;return-f.Pa}},h:function(l){try{var u=Ee(l);return Yr(u,u.node,{timestamp:Date.now(),Lb:!1}),0}catch(m){if(typeof pe>"u"||m.name!=="ErrnoError")throw m;return-m.Pa}},b:function(l,u,m){$o=m;try{var f=Ee(l);switch(u){case 0:var _=Ho();if(0>_)break;for(;Os[_];)_++;return eg(f,_).fd;case 1:case 2:return 0;case 3:return f.flags;case 4:return _=Ho(),f.flags|=_,0;case 12:return _=Ho(),_e[_+0>>1]=2,0;case 13:case 14:return 0}return-28}catch(k){if(typeof pe>"u"||k.name!=="ErrnoError")throw k;return-k.Pa}},g:function(l,u){try{var m=Ee(l),f=m.node,_=m.Ma.Ta;l=_?m:f,_??=f.La.Ta,Go(_);var k=_(l);return Wo(u,k)}catch(M){if(typeof pe>"u"||M.name!=="ErrnoError")throw M;return-M.Pa}},H:function(l,u){u=-9007199254740992>u||9007199254740992<u?NaN:Number(u);try{if(isNaN(u))return-61;var m=Ee(l);if(0>u||(m.flags&2097155)===0)throw new x(28);return fc(m,m.node,u),0}catch(f){if(typeof pe>"u"||f.name!=="ErrnoError")throw f;return-f.Pa}},G:function(l,u){try{if(u===0)return-28;var m=Us("/")+1;return u<m?-68:(gt("/",B,l,u),m)}catch(f){if(typeof pe>"u"||f.name!=="ErrnoError")throw f;return-f.Pa}},K:function(l,u){try{return l=le(l),Wo(u,fn(l,!0))}catch(m){if(typeof pe>"u"||m.name!=="ErrnoError")throw m;return-m.Pa}},C:function(l,u,m){try{return u=le(u),u=ms(l,u),ft(u,m),0}catch(f){if(typeof pe>"u"||f.name!=="ErrnoError")throw f;return-f.Pa}},J:function(l,u,m,f){try{u=le(u);var _=f&256;return u=ms(l,u,f&4096),Wo(m,_?fn(u,!0):fn(u))}catch(k){if(typeof pe>"u"||k.name!=="ErrnoError")throw k;return-k.Pa}},x:function(l,u,m,f){$o=f;try{u=le(u),u=ms(l,u);var _=f?Ho():0;return Ns(u,m,_).fd}catch(k){if(typeof pe>"u"||k.name!=="ErrnoError")throw k;return-k.Pa}},v:function(l,u,m,f){try{if(u=le(u),u=ms(l,u),0>=f)return-28;var _=Ke(u).node;if(!_)throw new x(44);if(!_.La.readlink)throw new x(28);var k=_.La.readlink(_),M=Math.min(f,Us(k)),j=D[m+M];return gt(k,B,m,f+1),D[m+M]=j,M}catch(ne){if(typeof pe>"u"||ne.name!=="ErrnoError")throw ne;return-ne.Pa}},u:function(l){try{return l=le(l),mc(l),0}catch(u){if(typeof pe>"u"||u.name!=="ErrnoError")throw u;return-u.Pa}},f:function(l,u){try{return l=le(l),Wo(u,fn(l))}catch(m){if(typeof pe>"u"||m.name!=="ErrnoError")throw m;return-m.Pa}},r:function(l,u,m){try{if(u=le(u),u=ms(l,u),m)if(m===512)mc(u);else return-28;else pc(u);return 0}catch(f){if(typeof pe>"u"||f.name!=="ErrnoError")throw f;return-f.Pa}},q:function(l,u,m){try{u=le(u),u=ms(l,u,!0);var f=Date.now(),_,k;if(m){var M=ae[m>>2]+4294967296*me[m+4>>2],j=me[m+8>>2];j==1073741823?_=f:j==1073741822?_=null:_=1e3*M+j/1e6,m+=16,M=ae[m>>2]+4294967296*me[m+4>>2],j=me[m+8>>2],j==1073741823?k=f:j==1073741822?k=null:k=1e3*M+j/1e6}else k=_=f;if((k??_)!==null){l=_;var ne=Ke(u,{ab:!0}).node;Go(ne.La.Ua)(ne,{atime:l,mtime:k})}return 0}catch(H){if(typeof pe>"u"||H.name!=="ErrnoError")throw H;return-H.Pa}},m:()=>Wt(""),l:()=>{U=!1,ea=0},A:function(l,u){l=-9007199254740992>l||9007199254740992<l?NaN:Number(l),l=new Date(1e3*l),me[u>>2]=l.getSeconds(),me[u+4>>2]=l.getMinutes(),me[u+8>>2]=l.getHours(),me[u+12>>2]=l.getDate(),me[u+16>>2]=l.getMonth(),me[u+20>>2]=l.getFullYear()-1900,me[u+24>>2]=l.getDay();var m=l.getFullYear();me[u+28>>2]=(m%4!==0||m%100===0&&m%400!==0?ig:og)[l.getMonth()]+l.getDate()-1|0,me[u+36>>2]=-(60*l.getTimezoneOffset()),m=new Date(l.getFullYear(),6,1).getTimezoneOffset();var f=new Date(l.getFullYear(),0,1).getTimezoneOffset();me[u+32>>2]=(m!=f&&l.getTimezoneOffset()==Math.min(f,m))|0},y:function(l,u,m,f,_,k,M){_=-9007199254740992>_||9007199254740992<_?NaN:Number(_);try{var j=Ee(f);if((u&2)!==0&&(m&2)===0&&(j.flags&2097155)!==2)throw new x(2);if((j.flags&2097155)===1)throw new x(2);if(!j.Ma.jb)throw new x(43);if(!l)throw new x(28);var ne=j.Ma.jb(j,l,_,u,m),H=ne.Xb;return me[k>>2]=ne.Eb,ae[M>>2]=H,0}catch(ge){if(typeof pe>"u"||ge.name!=="ErrnoError")throw ge;return-ge.Pa}},z:function(l,u,m,f,_,k){k=-9007199254740992>k||9007199254740992<k?NaN:Number(k);try{var M=Ee(_);if(m&2){if(m=k,(M.node.mode&61440)!==32768)throw new x(43);if(!(f&2)){var j=B.slice(l,l+u);M.Ma.kb&&M.Ma.kb(M,j,m,u,f)}}}catch(ne){if(typeof pe>"u"||ne.name!=="ErrnoError")throw ne;return-ne.Pa}},n:(l,u)=>{if(hn[l]&&(clearTimeout(hn[l].id),delete hn[l]),!u)return 0;var m=setTimeout(()=>{delete hn[l],rg(()=>wc(l,performance.now()))},u);return hn[l]={id:m,lc:u},0},B:(l,u,m,f)=>{var _=new Date().getFullYear(),k=new Date(_,0,1).getTimezoneOffset();_=new Date(_,6,1).getTimezoneOffset(),ae[l>>2]=60*Math.max(k,_),me[u>>2]=+(k!=_),u=M=>{var j=Math.abs(M);return`UTC${0<=M?"-":"+"}${String(Math.floor(j/60)).padStart(2,"0")}${String(j%60).padStart(2,"0")}`},l=u(k),u=u(_),_<k?(gt(l,B,m,17),gt(u,B,f,17)):(gt(l,B,f,17),gt(u,B,m,17))},d:()=>Date.now(),s:()=>2147483648,c:()=>performance.now(),o:l=>{var u=B.length;if(l>>>=0,2147483648<l)return!1;for(var m=1;4>=m;m*=2){var f=u*(1+.2/m);f=Math.min(f,l+100663296);e:{f=(Math.min(2147483648,65536*Math.ceil(Math.max(l,f)/65536))-Vo.buffer.byteLength+65535)/65536|0;try{Vo.grow(f),mn();var _=1;break e}catch{}_=void 0}if(_)return!0}return!1},E:(l,u)=>{var m=0,f=0,_;for(_ of Cc()){var k=u+m;ae[l+f>>2]=k,m+=gt(_,B,k,1/0)+1,f+=4}return 0},F:(l,u)=>{var m=Cc();ae[l>>2]=m.length,l=0;for(var f of m)l+=Us(f)+1;return ae[u>>2]=l,0},e:function(l){try{var u=Ee(l);return Zr(u),0}catch(m){if(typeof pe>"u"||m.name!=="ErrnoError")throw m;return m.Pa}},p:function(l,u){try{var m=Ee(l);return D[u]=m.tty?2:Oe(m.mode)?3:(m.mode&61440)===40960?7:4,_e[u+2>>1]=0,je[u+8>>3]=BigInt(0),je[u+16>>3]=BigInt(0),0}catch(f){if(typeof pe>"u"||f.name!=="ErrnoError")throw f;return f.Pa}},w:function(l,u,m,f){try{e:{var _=Ee(l);l=u;for(var k,M=u=0;M<m;M++){var j=ae[l>>2],ne=ae[l+4>>2];l+=8;var H=yc(_,D,j,ne,k);if(0>H){var ge=-1;break e}if(u+=H,H<ne)break;typeof k<"u"&&(k+=H)}ge=u}return ae[f>>2]=ge,0}catch(ve){if(typeof pe>"u"||ve.name!=="ErrnoError")throw ve;return ve.Pa}},D:function(l,u,m,f){u=-9007199254740992>u||9007199254740992<u?NaN:Number(u);try{if(isNaN(u))return 61;var _=Ee(l);return hc(_,u,m),je[f>>3]=BigInt(_.position),_.rb&&u===0&&m===0&&(_.rb=null),0}catch(k){if(typeof pe>"u"||k.name!=="ErrnoError")throw k;return k.Pa}},I:function(l){try{var u=Ee(l);return u.Ma?.fsync?.(u)}catch(m){if(typeof pe>"u"||m.name!=="ErrnoError")throw m;return m.Pa}},t:function(l,u,m,f){try{e:{var _=Ee(l);l=u;for(var k,M=u=0;M<m;M++){var j=ae[l>>2],ne=ae[l+4>>2];l+=8;var H=_c(_,D,j,ne,k);if(0>H){var ge=-1;break e}if(u+=H,H<ne)break;typeof k<"u"&&(k+=H)}ge=u}return ae[f>>2]=ge,0}catch(ve){if(typeof pe>"u"||ve.name!=="ErrnoError")throw ve;return ve.Pa}},k:bc};function oa(){function l(){if(i.calledRun=!0,!F){if(!i.noFSInit&&!nc){var u,m;nc=!0,u??=i.stdin,m??=i.stdout,f??=i.stderr,u?Ht("stdin",u):Xr("/dev/tty","/dev/stdin"),m?Ht("stdout",null,m):Xr("/dev/tty","/dev/stdout"),f?Ht("stderr",null,f):Xr("/dev/tty1","/dev/stderr"),Ns("/dev/stdin",0),Ns("/dev/stdout",1),Ns("/dev/stderr",1)}if(ia.N(),oc=!1,i.onRuntimeInitialized?.(),i.postRun)for(typeof i.postRun=="function"&&(i.postRun=[i.postRun]);i.postRun.length;){var f=i.postRun.shift();zr.push(f)}Rs(zr)}}if(0<ot)Is=oa;else{if(i.preRun)for(typeof i.preRun=="function"&&(i.preRun=[i.preRun]);i.preRun.length;)pn();Rs(jo),0<ot?Is=oa:i.setStatus?(i.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>i.setStatus(""),1),l()},1)):l()}}var ia;return(async function(){function l(m){return m=ia=m.exports,i._sqlite3_free=m.P,i._sqlite3_value_text=m.Q,i._sqlite3_prepare_v2=m.R,i._sqlite3_step=m.S,i._sqlite3_reset=m.T,i._sqlite3_exec=m.U,i._sqlite3_finalize=m.V,i._sqlite3_column_name=m.W,i._sqlite3_column_text=m.X,i._sqlite3_column_type=m.Y,i._sqlite3_errmsg=m.Z,i._sqlite3_clear_bindings=m._,i._sqlite3_value_blob=m.$,i._sqlite3_value_bytes=m.aa,i._sqlite3_value_double=m.ba,i._sqlite3_value_int=m.ca,i._sqlite3_value_type=m.da,i._sqlite3_result_blob=m.ea,i._sqlite3_result_double=m.fa,i._sqlite3_result_error=m.ga,i._sqlite3_result_int=m.ha,i._sqlite3_result_int64=m.ia,i._sqlite3_result_null=m.ja,i._sqlite3_result_text=m.ka,i._sqlite3_aggregate_context=m.la,i._sqlite3_column_count=m.ma,i._sqlite3_data_count=m.na,i._sqlite3_column_blob=m.oa,i._sqlite3_column_bytes=m.pa,i._sqlite3_column_double=m.qa,i._sqlite3_bind_blob=m.ra,i._sqlite3_bind_double=m.sa,i._sqlite3_bind_int=m.ta,i._sqlite3_bind_text=m.ua,i._sqlite3_bind_parameter_index=m.va,i._sqlite3_sql=m.wa,i._sqlite3_normalized_sql=m.xa,i._sqlite3_changes=m.ya,i._sqlite3_close_v2=m.za,i._sqlite3_create_function_v2=m.Aa,i._sqlite3_update_hook=m.Ba,i._sqlite3_open=m.Ca,Ko=i._malloc=m.Da,_n=i._free=m.Ea,i._RegisterExtensionFunctions=m.Fa,Tc=m.Ga,wc=m.Ha,bn=m.Ia,gs=m.Ja,Cn=m.Ka,Vo=m.M,Kt=m.O,mn(),ot--,i.monitorRunDependencies?.(ot),ot==0&&Is&&(m=Is,Is=null,m()),ia}ot++,i.monitorRunDependencies?.(ot);var u={a:cg};return i.instantiateWasm?new Promise(m=>{i.instantiateWasm(u,(f,_)=>{m(l(f,_))})}):(Mt??=i.locateFile?i.locateFile("sql-wasm.wasm",h):h+"sql-wasm.wasm",l((await qr(u)).instance))})(),oa(),s}),li)};typeof ui=="object"&&typeof _s=="object"?(_s.exports=ci,_s.exports.default=ci):typeof define=="function"&&define.amd?define([],function(){return ci}):typeof ui=="object"&&(ui.Module=ci)});var wi=we(Rt=>{"use strict";Object.defineProperty(Rt,"__esModule",{value:!0});Rt.utf8Count=Ch;Rt.utf8EncodeJs=Mu;Rt.utf8EncodeTE=vu;Rt.utf8Encode=Th;Rt.utf8DecodeJs=Pu;Rt.utf8DecodeTD=Au;Rt.utf8Decode=Ph;function Ch(n){let e=n.length,t=0,s=0;for(;s<e;){let o=n.charCodeAt(s++);if((o&4294967168)===0){t++;continue}else if((o&4294965248)===0)t+=2;else{if(o>=55296&&o<=56319&&s<e){let i=n.charCodeAt(s);(i&64512)===56320&&(++s,o=((o&1023)<<10)+(i&1023)+65536)}(o&4294901760)===0?t+=3:t+=4}}return t}function Mu(n,e,t){let s=n.length,o=t,i=0;for(;i<s;){let r=n.charCodeAt(i++);if((r&4294967168)===0){e[o++]=r;continue}else if((r&4294965248)===0)e[o++]=r>>6&31|192;else{if(r>=55296&&r<=56319&&i<s){let a=n.charCodeAt(i);(a&64512)===56320&&(++i,r=((r&1023)<<10)+(a&1023)+65536)}(r&4294901760)===0?(e[o++]=r>>12&15|224,e[o++]=r>>6&63|128):(e[o++]=r>>18&7|240,e[o++]=r>>12&63|128,e[o++]=r>>6&63|128)}e[o++]=r&63|128}}var kh=new TextEncoder,Sh=50;function vu(n,e,t){kh.encodeInto(n,e.subarray(t))}function Th(n,e,t){n.length>Sh?vu(n,e,t):Mu(n,e,t)}var wh=4096;function Pu(n,e,t){let s=e,o=s+t,i=[],r="";for(;s<o;){let a=n[s++];if((a&128)===0)i.push(a);else if((a&224)===192){let c=n[s++]&63;i.push((a&31)<<6|c)}else if((a&240)===224){let c=n[s++]&63,d=n[s++]&63;i.push((a&31)<<12|c<<6|d)}else if((a&248)===240){let c=n[s++]&63,d=n[s++]&63,p=n[s++]&63,g=(a&7)<<18|c<<12|d<<6|p;g>65535&&(g-=65536,i.push(g>>>10&1023|55296),g=56320|g&1023),i.push(g)}else i.push(a);i.length>=wh&&(r+=String.fromCharCode(...i),i.length=0)}return i.length>0&&(r+=String.fromCharCode(...i)),r}var Mh=new TextDecoder,vh=200;function Au(n,e,t){let s=n.subarray(e,e+t);return Mh.decode(s)}function Ph(n,e,t){return t>vh?Au(n,e,t):Pu(n,e,t)}});var xa=we(Mi=>{"use strict";Object.defineProperty(Mi,"__esModule",{value:!0});Mi.ExtData=void 0;var Aa=class{type;data;constructor(e,t){this.type=e,this.data=t}};Mi.ExtData=Aa});var Pi=we(vi=>{"use strict";Object.defineProperty(vi,"__esModule",{value:!0});vi.DecodeError=void 0;var Da=class n extends Error{constructor(e){super(e);let t=Object.create(n.prototype);Object.setPrototypeOf(this,t),Object.defineProperty(this,"name",{configurable:!0,enumerable:!1,value:n.name})}};vi.DecodeError=Da});var Ai=we(Yt=>{"use strict";Object.defineProperty(Yt,"__esModule",{value:!0});Yt.UINT32_MAX=void 0;Yt.setUint64=Ah;Yt.setInt64=xh;Yt.getInt64=Dh;Yt.getUint64=Eh;Yt.UINT32_MAX=4294967295;function Ah(n,e,t){let s=t/4294967296,o=t;n.setUint32(e,s),n.setUint32(e+4,o)}function xh(n,e,t){let s=Math.floor(t/4294967296),o=t;n.setUint32(e,s),n.setUint32(e+4,o)}function Dh(n,e){let t=n.getInt32(e),s=n.getUint32(e+4);return t*4294967296+s}function Eh(n,e){let t=n.getUint32(e),s=n.getUint32(e+4);return t*4294967296+s}});var Ea=we(Ze=>{"use strict";Object.defineProperty(Ze,"__esModule",{value:!0});Ze.timestampExtension=Ze.EXT_TIMESTAMP=void 0;Ze.encodeTimeSpecToTimestamp=Du;Ze.encodeDateToTimeSpec=Eu;Ze.encodeTimestampExtension=Ru;Ze.decodeTimestampToTimeSpec=Iu;Ze.decodeTimestampExtension=Uu;var Rh=Pi(),xu=Ai();Ze.EXT_TIMESTAMP=-1;var Ih=4294967296-1,Uh=17179869184-1;function Du({sec:n,nsec:e}){if(n>=0&&e>=0&&n<=Uh)if(e===0&&n<=Ih){let t=new Uint8Array(4);return new DataView(t.buffer).setUint32(0,n),t}else{let t=n/4294967296,s=n&4294967295,o=new Uint8Array(8),i=new DataView(o.buffer);return i.setUint32(0,e<<2|t&3),i.setUint32(4,s),o}else{let t=new Uint8Array(12),s=new DataView(t.buffer);return s.setUint32(0,e),(0,xu.setInt64)(s,4,n),t}}function Eu(n){let e=n.getTime(),t=Math.floor(e/1e3),s=(e-t*1e3)*1e6,o=Math.floor(s/1e9);return{sec:t+o,nsec:s-o*1e9}}function Ru(n){if(n instanceof Date){let e=Eu(n);return Du(e)}else return null}function Iu(n){let e=new DataView(n.buffer,n.byteOffset,n.byteLength);switch(n.byteLength){case 4:return{sec:e.getUint32(0),nsec:0};case 8:{let t=e.getUint32(0),s=e.getUint32(4),o=(t&3)*4294967296+s,i=t>>>2;return{sec:o,nsec:i}}case 12:{let t=(0,xu.getInt64)(e,4),s=e.getUint32(0);return{sec:t,nsec:s}}default:throw new Rh.DecodeError(`Unrecognized data size for timestamp (expected 4, 8, or 12): ${n.length}`)}}function Uu(n){let e=Iu(n);return new Date(e.sec*1e3+e.nsec/1e6)}Ze.timestampExtension={type:Ze.EXT_TIMESTAMP,encode:Ru,decode:Uu}});var Ei=we(Di=>{"use strict";Object.defineProperty(Di,"__esModule",{value:!0});Di.ExtensionCodec=void 0;var xi=xa(),Oh=Ea(),Ra=class n{static defaultCodec=new n;__brand;builtInEncoders=[];builtInDecoders=[];encoders=[];decoders=[];constructor(){this.register(Oh.timestampExtension)}register({type:e,encode:t,decode:s}){if(e>=0)this.encoders[e]=t,this.decoders[e]=s;else{let o=-1-e;this.builtInEncoders[o]=t,this.builtInDecoders[o]=s}}tryToEncode(e,t){for(let s=0;s<this.builtInEncoders.length;s++){let o=this.builtInEncoders[s];if(o!=null){let i=o(e,t);if(i!=null){let r=-1-s;return new xi.ExtData(r,i)}}}for(let s=0;s<this.encoders.length;s++){let o=this.encoders[s];if(o!=null){let i=o(e,t);if(i!=null){let r=s;return new xi.ExtData(r,i)}}}return e instanceof xi.ExtData?e:null}decode(e,t,s){let o=t<0?this.builtInDecoders[-1-t]:this.decoders[t];return o?o(e,t,s):new xi.ExtData(t,e)}};Di.ExtensionCodec=Ra});var Ua=we(Ia=>{"use strict";Object.defineProperty(Ia,"__esModule",{value:!0});Ia.ensureUint8Array=Nh;function Fh(n){return n instanceof ArrayBuffer||typeof SharedArrayBuffer<"u"&&n instanceof SharedArrayBuffer}function Nh(n){return n instanceof Uint8Array?n:ArrayBuffer.isView(n)?new Uint8Array(n.buffer,n.byteOffset,n.byteLength):Fh(n)?new Uint8Array(n):Uint8Array.from(n)}});var Fa=we(bt=>{"use strict";Object.defineProperty(bt,"__esModule",{value:!0});bt.Encoder=bt.DEFAULT_INITIAL_BUFFER_SIZE=bt.DEFAULT_MAX_DEPTH=void 0;var Ou=wi(),Lh=Ei(),Fu=Ai(),jh=Ua();bt.DEFAULT_MAX_DEPTH=100;bt.DEFAULT_INITIAL_BUFFER_SIZE=2048;var Oa=class n{extensionCodec;context;useBigInt64;maxDepth;initialBufferSize;sortKeys;forceFloat32;ignoreUndefined;forceIntegerToFloat;pos;view;bytes;entered=!1;constructor(e){this.extensionCodec=e?.extensionCodec??Lh.ExtensionCodec.defaultCodec,this.context=e?.context,this.useBigInt64=e?.useBigInt64??!1,this.maxDepth=e?.maxDepth??bt.DEFAULT_MAX_DEPTH,this.initialBufferSize=e?.initialBufferSize??bt.DEFAULT_INITIAL_BUFFER_SIZE,this.sortKeys=e?.sortKeys??!1,this.forceFloat32=e?.forceFloat32??!1,this.ignoreUndefined=e?.ignoreUndefined??!1,this.forceIntegerToFloat=e?.forceIntegerToFloat??!1,this.pos=0,this.view=new DataView(new ArrayBuffer(this.initialBufferSize)),this.bytes=new Uint8Array(this.view.buffer)}clone(){return new n({extensionCodec:this.extensionCodec,context:this.context,useBigInt64:this.useBigInt64,maxDepth:this.maxDepth,initialBufferSize:this.initialBufferSize,sortKeys:this.sortKeys,forceFloat32:this.forceFloat32,ignoreUndefined:this.ignoreUndefined,forceIntegerToFloat:this.forceIntegerToFloat})}reinitializeState(){this.pos=0}encodeSharedRef(e){if(this.entered)return this.clone().encodeSharedRef(e);try{return this.entered=!0,this.reinitializeState(),this.doEncode(e,1),this.bytes.subarray(0,this.pos)}finally{this.entered=!1}}encode(e){if(this.entered)return this.clone().encode(e);try{return this.entered=!0,this.reinitializeState(),this.doEncode(e,1),this.bytes.slice(0,this.pos)}finally{this.entered=!1}}doEncode(e,t){if(t>this.maxDepth)throw new Error(`Too deep objects in depth ${t}`);e==null?this.encodeNil():typeof e=="boolean"?this.encodeBoolean(e):typeof e=="number"?this.forceIntegerToFloat?this.encodeNumberAsFloat(e):this.encodeNumber(e):typeof e=="string"?this.encodeString(e):this.useBigInt64&&typeof e=="bigint"?this.encodeBigInt64(e):this.encodeObject(e,t)}ensureBufferSizeToWrite(e){let t=this.pos+e;this.view.byteLength<t&&this.resizeBuffer(t*2)}resizeBuffer(e){let t=new ArrayBuffer(e),s=new Uint8Array(t),o=new DataView(t);s.set(this.bytes),this.view=o,this.bytes=s}encodeNil(){this.writeU8(192)}encodeBoolean(e){e===!1?this.writeU8(194):this.writeU8(195)}encodeNumber(e){!this.forceIntegerToFloat&&Number.isSafeInteger(e)?e>=0?e<128?this.writeU8(e):e<256?(this.writeU8(204),this.writeU8(e)):e<65536?(this.writeU8(205),this.writeU16(e)):e<4294967296?(this.writeU8(206),this.writeU32(e)):this.useBigInt64?this.encodeNumberAsFloat(e):(this.writeU8(207),this.writeU64(e)):e>=-32?this.writeU8(224|e+32):e>=-128?(this.writeU8(208),this.writeI8(e)):e>=-32768?(this.writeU8(209),this.writeI16(e)):e>=-2147483648?(this.writeU8(210),this.writeI32(e)):this.useBigInt64?this.encodeNumberAsFloat(e):(this.writeU8(211),this.writeI64(e)):this.encodeNumberAsFloat(e)}encodeNumberAsFloat(e){this.forceFloat32?(this.writeU8(202),this.writeF32(e)):(this.writeU8(203),this.writeF64(e))}encodeBigInt64(e){e>=BigInt(0)?(this.writeU8(207),this.writeBigUint64(e)):(this.writeU8(211),this.writeBigInt64(e))}writeStringHeader(e){if(e<32)this.writeU8(160+e);else if(e<256)this.writeU8(217),this.writeU8(e);else if(e<65536)this.writeU8(218),this.writeU16(e);else if(e<4294967296)this.writeU8(219),this.writeU32(e);else throw new Error(`Too long string: ${e} bytes in UTF-8`)}encodeString(e){let s=(0,Ou.utf8Count)(e);this.ensureBufferSizeToWrite(5+s),this.writeStringHeader(s),(0,Ou.utf8Encode)(e,this.bytes,this.pos),this.pos+=s}encodeObject(e,t){let s=this.extensionCodec.tryToEncode(e,this.context);if(s!=null)this.encodeExtension(s);else if(Array.isArray(e))this.encodeArray(e,t);else if(ArrayBuffer.isView(e))this.encodeBinary(e);else if(typeof e=="object")this.encodeMap(e,t);else throw new Error(`Unrecognized object: ${Object.prototype.toString.apply(e)}`)}encodeBinary(e){let t=e.byteLength;if(t<256)this.writeU8(196),this.writeU8(t);else if(t<65536)this.writeU8(197),this.writeU16(t);else if(t<4294967296)this.writeU8(198),this.writeU32(t);else throw new Error(`Too large binary: ${t}`);let s=(0,jh.ensureUint8Array)(e);this.writeU8a(s)}encodeArray(e,t){let s=e.length;if(s<16)this.writeU8(144+s);else if(s<65536)this.writeU8(220),this.writeU16(s);else if(s<4294967296)this.writeU8(221),this.writeU32(s);else throw new Error(`Too large array: ${s}`);for(let o of e)this.doEncode(o,t+1)}countWithoutUndefined(e,t){let s=0;for(let o of t)e[o]!==void 0&&s++;return s}encodeMap(e,t){let s=Object.keys(e);this.sortKeys&&s.sort();let o=this.ignoreUndefined?this.countWithoutUndefined(e,s):s.length;if(o<16)this.writeU8(128+o);else if(o<65536)this.writeU8(222),this.writeU16(o);else if(o<4294967296)this.writeU8(223),this.writeU32(o);else throw new Error(`Too large map object: ${o}`);for(let i of s){let r=e[i];this.ignoreUndefined&&r===void 0||(this.encodeString(i),this.doEncode(r,t+1))}}encodeExtension(e){if(typeof e.data=="function"){let s=e.data(this.pos+6),o=s.length;if(o>=4294967296)throw new Error(`Too large extension object: ${o}`);this.writeU8(201),this.writeU32(o),this.writeI8(e.type),this.writeU8a(s);return}let t=e.data.length;if(t===1)this.writeU8(212);else if(t===2)this.writeU8(213);else if(t===4)this.writeU8(214);else if(t===8)this.writeU8(215);else if(t===16)this.writeU8(216);else if(t<256)this.writeU8(199),this.writeU8(t);else if(t<65536)this.writeU8(200),this.writeU16(t);else if(t<4294967296)this.writeU8(201),this.writeU32(t);else throw new Error(`Too large extension object: ${t}`);this.writeI8(e.type),this.writeU8a(e.data)}writeU8(e){this.ensureBufferSizeToWrite(1),this.view.setUint8(this.pos,e),this.pos++}writeU8a(e){let t=e.length;this.ensureBufferSizeToWrite(t),this.bytes.set(e,this.pos),this.pos+=t}writeI8(e){this.ensureBufferSizeToWrite(1),this.view.setInt8(this.pos,e),this.pos++}writeU16(e){this.ensureBufferSizeToWrite(2),this.view.setUint16(this.pos,e),this.pos+=2}writeI16(e){this.ensureBufferSizeToWrite(2),this.view.setInt16(this.pos,e),this.pos+=2}writeU32(e){this.ensureBufferSizeToWrite(4),this.view.setUint32(this.pos,e),this.pos+=4}writeI32(e){this.ensureBufferSizeToWrite(4),this.view.setInt32(this.pos,e),this.pos+=4}writeF32(e){this.ensureBufferSizeToWrite(4),this.view.setFloat32(this.pos,e),this.pos+=4}writeF64(e){this.ensureBufferSizeToWrite(8),this.view.setFloat64(this.pos,e),this.pos+=8}writeU64(e){this.ensureBufferSizeToWrite(8),(0,Fu.setUint64)(this.view,this.pos,e),this.pos+=8}writeI64(e){this.ensureBufferSizeToWrite(8),(0,Fu.setInt64)(this.view,this.pos,e),this.pos+=8}writeBigUint64(e){this.ensureBufferSizeToWrite(8),this.view.setBigUint64(this.pos,e),this.pos+=8}writeBigInt64(e){this.ensureBufferSizeToWrite(8),this.view.setBigInt64(this.pos,e),this.pos+=8}};bt.Encoder=Oa});var Nu=we(Na=>{"use strict";Object.defineProperty(Na,"__esModule",{value:!0});Na.encode=Bh;var Gh=Fa();function Bh(n,e){return new Gh.Encoder(e).encodeSharedRef(n)}});var Lu=we(La=>{"use strict";Object.defineProperty(La,"__esModule",{value:!0});La.prettyByte=qh;function qh(n){return`${n<0?"-":""}0x${Math.abs(n).toString(16).padStart(2,"0")}`}});var ju=we(Ri=>{"use strict";Object.defineProperty(Ri,"__esModule",{value:!0});Ri.CachedKeyDecoder=void 0;var zh=wi(),Wh=16,$h=16,ja=class{hit=0;miss=0;caches;maxKeyLength;maxLengthPerKey;constructor(e=Wh,t=$h){this.maxKeyLength=e,this.maxLengthPerKey=t,this.caches=[];for(let s=0;s<this.maxKeyLength;s++)this.caches.push([])}canBeCached(e){return e>0&&e<=this.maxKeyLength}find(e,t,s){let o=this.caches[s-1];e:for(let i of o){let r=i.bytes;for(let a=0;a<s;a++)if(r[a]!==e[t+a])continue e;return i.str}return null}store(e,t){let s=this.caches[e.length-1],o={bytes:e,str:t};s.length>=this.maxLengthPerKey?s[Math.random()*s.length|0]=o:s.push(o)}decode(e,t,s){let o=this.find(e,t,s);if(o!=null)return this.hit++,o;this.miss++;let i=(0,zh.utf8DecodeJs)(e,t,s),r=Uint8Array.prototype.slice.call(e,t,t+s);return this.store(r,i),i}};Ri.CachedKeyDecoder=ja});var Ui=we(Ii=>{"use strict";Object.defineProperty(Ii,"__esModule",{value:!0});Ii.Decoder=void 0;var Ga=Lu(),Hh=Ei(),ws=Ai(),Jh=wi(),Gu=Ua(),Kh=ju(),It=Pi(),Ba="array",qn="map_key",qu="map_value",Vh=n=>{if(typeof n=="string"||typeof n=="number")return n;throw new It.DecodeError("The type of key must be string or number but "+typeof n)},qa=class{stack=[];stackHeadPosition=-1;get length(){return this.stackHeadPosition+1}top(){return this.stack[this.stackHeadPosition]}pushArrayState(e){let t=this.getUninitializedStateFromPool();t.type=Ba,t.position=0,t.size=e,t.array=new Array(e)}pushMapState(e){let t=this.getUninitializedStateFromPool();t.type=qn,t.readCount=0,t.size=e,t.map={}}getUninitializedStateFromPool(){if(this.stackHeadPosition++,this.stackHeadPosition===this.stack.length){let e={type:void 0,size:0,array:void 0,position:0,readCount:0,map:void 0,key:null};this.stack.push(e)}return this.stack[this.stackHeadPosition]}release(e){if(this.stack[this.stackHeadPosition]!==e)throw new Error("Invalid stack state. Released state is not on top of the stack.");if(e.type===Ba){let s=e;s.size=0,s.array=void 0,s.position=0,s.type=void 0}if(e.type===qn||e.type===qu){let s=e;s.size=0,s.map=void 0,s.readCount=0,s.type=void 0}this.stackHeadPosition--}reset(){this.stack.length=0,this.stackHeadPosition=-1}},Bn=-1,Wa=new DataView(new ArrayBuffer(0)),Yh=new Uint8Array(Wa.buffer);try{Wa.getInt8(0)}catch(n){if(!(n instanceof RangeError))throw new Error("This module is not supported in the current JavaScript engine because DataView does not throw RangeError on out-of-bounds access")}var Bu=new RangeError("Insufficient data"),Qh=new Kh.CachedKeyDecoder,za=class n{extensionCodec;context;useBigInt64;rawStrings;maxStrLength;maxBinLength;maxArrayLength;maxMapLength;maxExtLength;keyDecoder;mapKeyConverter;totalPos=0;pos=0;view=Wa;bytes=Yh;headByte=Bn;stack=new qa;entered=!1;constructor(e){this.extensionCodec=e?.extensionCodec??Hh.ExtensionCodec.defaultCodec,this.context=e?.context,this.useBigInt64=e?.useBigInt64??!1,this.rawStrings=e?.rawStrings??!1,this.maxStrLength=e?.maxStrLength??ws.UINT32_MAX,this.maxBinLength=e?.maxBinLength??ws.UINT32_MAX,this.maxArrayLength=e?.maxArrayLength??ws.UINT32_MAX,this.maxMapLength=e?.maxMapLength??ws.UINT32_MAX,this.maxExtLength=e?.maxExtLength??ws.UINT32_MAX,this.keyDecoder=e?.keyDecoder!==void 0?e.keyDecoder:Qh,this.mapKeyConverter=e?.mapKeyConverter??Vh}clone(){return new n({extensionCodec:this.extensionCodec,context:this.context,useBigInt64:this.useBigInt64,rawStrings:this.rawStrings,maxStrLength:this.maxStrLength,maxBinLength:this.maxBinLength,maxArrayLength:this.maxArrayLength,maxMapLength:this.maxMapLength,maxExtLength:this.maxExtLength,keyDecoder:this.keyDecoder})}reinitializeState(){this.totalPos=0,this.headByte=Bn,this.stack.reset()}setBuffer(e){let t=(0,Gu.ensureUint8Array)(e);this.bytes=t,this.view=new DataView(t.buffer,t.byteOffset,t.byteLength),this.pos=0}appendBuffer(e){if(this.headByte===Bn&&!this.hasRemaining(1))this.setBuffer(e);else{let t=this.bytes.subarray(this.pos),s=(0,Gu.ensureUint8Array)(e),o=new Uint8Array(t.length+s.length);o.set(t),o.set(s,t.length),this.setBuffer(o)}}hasRemaining(e){return this.view.byteLength-this.pos>=e}createExtraByteError(e){let{view:t,pos:s}=this;return new RangeError(`Extra ${t.byteLength-s} of ${t.byteLength} byte(s) found at buffer[${e}]`)}decode(e){if(this.entered)return this.clone().decode(e);try{this.entered=!0,this.reinitializeState(),this.setBuffer(e);let t=this.doDecodeSync();if(this.hasRemaining(1))throw this.createExtraByteError(this.pos);return t}finally{this.entered=!1}}*decodeMulti(e){if(this.entered){yield*this.clone().decodeMulti(e);return}try{for(this.entered=!0,this.reinitializeState(),this.setBuffer(e);this.hasRemaining(1);)yield this.doDecodeSync()}finally{this.entered=!1}}async decodeAsync(e){if(this.entered)return this.clone().decodeAsync(e);try{this.entered=!0;let t=!1,s;for await(let a of e){if(t)throw this.entered=!1,this.createExtraByteError(this.totalPos);this.appendBuffer(a);try{s=this.doDecodeSync(),t=!0}catch(c){if(!(c instanceof RangeError))throw c}this.totalPos+=this.pos}if(t){if(this.hasRemaining(1))throw this.createExtraByteError(this.totalPos);return s}let{headByte:o,pos:i,totalPos:r}=this;throw new RangeError(`Insufficient data in parsing ${(0,Ga.prettyByte)(o)} at ${r} (${i} in the current buffer)`)}finally{this.entered=!1}}decodeArrayStream(e){return this.decodeMultiAsync(e,!0)}decodeStream(e){return this.decodeMultiAsync(e,!1)}async*decodeMultiAsync(e,t){if(this.entered){yield*this.clone().decodeMultiAsync(e,t);return}try{this.entered=!0;let s=t,o=-1;for await(let i of e){if(t&&o===0)throw this.createExtraByteError(this.totalPos);this.appendBuffer(i),s&&(o=this.readArraySize(),s=!1,this.complete());try{for(;yield this.doDecodeSync(),--o!==0;);}catch(r){if(!(r instanceof RangeError))throw r}this.totalPos+=this.pos}}finally{this.entered=!1}}doDecodeSync(){e:for(;;){let e=this.readHeadByte(),t;if(e>=224)t=e-256;else if(e<192)if(e<128)t=e;else if(e<144){let o=e-128;if(o!==0){this.pushMapState(o),this.complete();continue e}else t={}}else if(e<160){let o=e-144;if(o!==0){this.pushArrayState(o),this.complete();continue e}else t=[]}else{let o=e-160;t=this.decodeString(o,0)}else if(e===192)t=null;else if(e===194)t=!1;else if(e===195)t=!0;else if(e===202)t=this.readF32();else if(e===203)t=this.readF64();else if(e===204)t=this.readU8();else if(e===205)t=this.readU16();else if(e===206)t=this.readU32();else if(e===207)this.useBigInt64?t=this.readU64AsBigInt():t=this.readU64();else if(e===208)t=this.readI8();else if(e===209)t=this.readI16();else if(e===210)t=this.readI32();else if(e===211)this.useBigInt64?t=this.readI64AsBigInt():t=this.readI64();else if(e===217){let o=this.lookU8();t=this.decodeString(o,1)}else if(e===218){let o=this.lookU16();t=this.decodeString(o,2)}else if(e===219){let o=this.lookU32();t=this.decodeString(o,4)}else if(e===220){let o=this.readU16();if(o!==0){this.pushArrayState(o),this.complete();continue e}else t=[]}else if(e===221){let o=this.readU32();if(o!==0){this.pushArrayState(o),this.complete();continue e}else t=[]}else if(e===222){let o=this.readU16();if(o!==0){this.pushMapState(o),this.complete();continue e}else t={}}else if(e===223){let o=this.readU32();if(o!==0){this.pushMapState(o),this.complete();continue e}else t={}}else if(e===196){let o=this.lookU8();t=this.decodeBinary(o,1)}else if(e===197){let o=this.lookU16();t=this.decodeBinary(o,2)}else if(e===198){let o=this.lookU32();t=this.decodeBinary(o,4)}else if(e===212)t=this.decodeExtension(1,0);else if(e===213)t=this.decodeExtension(2,0);else if(e===214)t=this.decodeExtension(4,0);else if(e===215)t=this.decodeExtension(8,0);else if(e===216)t=this.decodeExtension(16,0);else if(e===199){let o=this.lookU8();t=this.decodeExtension(o,1)}else if(e===200){let o=this.lookU16();t=this.decodeExtension(o,2)}else if(e===201){let o=this.lookU32();t=this.decodeExtension(o,4)}else throw new It.DecodeError(`Unrecognized type byte: ${(0,Ga.prettyByte)(e)}`);this.complete();let s=this.stack;for(;s.length>0;){let o=s.top();if(o.type===Ba)if(o.array[o.position]=t,o.position++,o.position===o.size)t=o.array,s.release(o);else continue e;else if(o.type===qn){if(t==="__proto__")throw new It.DecodeError("The key __proto__ is not allowed");o.key=this.mapKeyConverter(t),o.type=qu;continue e}else if(o.map[o.key]=t,o.readCount++,o.readCount===o.size)t=o.map,s.release(o);else{o.key=null,o.type=qn;continue e}}return t}}readHeadByte(){return this.headByte===Bn&&(this.headByte=this.readU8()),this.headByte}complete(){this.headByte=Bn}readArraySize(){let e=this.readHeadByte();switch(e){case 220:return this.readU16();case 221:return this.readU32();default:{if(e<160)return e-144;throw new It.DecodeError(`Unrecognized array type byte: ${(0,Ga.prettyByte)(e)}`)}}}pushMapState(e){if(e>this.maxMapLength)throw new It.DecodeError(`Max length exceeded: map length (${e}) > maxMapLengthLength (${this.maxMapLength})`);this.stack.pushMapState(e)}pushArrayState(e){if(e>this.maxArrayLength)throw new It.DecodeError(`Max length exceeded: array length (${e}) > maxArrayLength (${this.maxArrayLength})`);this.stack.pushArrayState(e)}decodeString(e,t){return!this.rawStrings||this.stateIsMapKey()?this.decodeUtf8String(e,t):this.decodeBinary(e,t)}decodeUtf8String(e,t){if(e>this.maxStrLength)throw new It.DecodeError(`Max length exceeded: UTF-8 byte length (${e}) > maxStrLength (${this.maxStrLength})`);if(this.bytes.byteLength<this.pos+t+e)throw Bu;let s=this.pos+t,o;return this.stateIsMapKey()&&this.keyDecoder?.canBeCached(e)?o=this.keyDecoder.decode(this.bytes,s,e):o=(0,Jh.utf8Decode)(this.bytes,s,e),this.pos+=t+e,o}stateIsMapKey(){return this.stack.length>0?this.stack.top().type===qn:!1}decodeBinary(e,t){if(e>this.maxBinLength)throw new It.DecodeError(`Max length exceeded: bin length (${e}) > maxBinLength (${this.maxBinLength})`);if(!this.hasRemaining(e+t))throw Bu;let s=this.pos+t,o=this.bytes.subarray(s,s+e);return this.pos+=t+e,o}decodeExtension(e,t){if(e>this.maxExtLength)throw new It.DecodeError(`Max length exceeded: ext length (${e}) > maxExtLength (${this.maxExtLength})`);let s=this.view.getInt8(this.pos+t),o=this.decodeBinary(e,t+1);return this.extensionCodec.decode(o,s,this.context)}lookU8(){return this.view.getUint8(this.pos)}lookU16(){return this.view.getUint16(this.pos)}lookU32(){return this.view.getUint32(this.pos)}readU8(){let e=this.view.getUint8(this.pos);return this.pos++,e}readI8(){let e=this.view.getInt8(this.pos);return this.pos++,e}readU16(){let e=this.view.getUint16(this.pos);return this.pos+=2,e}readI16(){let e=this.view.getInt16(this.pos);return this.pos+=2,e}readU32(){let e=this.view.getUint32(this.pos);return this.pos+=4,e}readI32(){let e=this.view.getInt32(this.pos);return this.pos+=4,e}readU64(){let e=(0,ws.getUint64)(this.view,this.pos);return this.pos+=8,e}readI64(){let e=(0,ws.getInt64)(this.view,this.pos);return this.pos+=8,e}readU64AsBigInt(){let e=this.view.getBigUint64(this.pos);return this.pos+=8,e}readI64AsBigInt(){let e=this.view.getBigInt64(this.pos);return this.pos+=8,e}readF32(){let e=this.view.getFloat32(this.pos);return this.pos+=4,e}readF64(){let e=this.view.getFloat64(this.pos);return this.pos+=8,e}};Ii.Decoder=za});var Wu=we(Oi=>{"use strict";Object.defineProperty(Oi,"__esModule",{value:!0});Oi.decode=Xh;Oi.decodeMulti=Zh;var zu=Ui();function Xh(n,e){return new zu.Decoder(e).decode(n)}function Zh(n,e){return new zu.Decoder(e).decodeMulti(n)}});var Ju=we(zn=>{"use strict";Object.defineProperty(zn,"__esModule",{value:!0});zn.isAsyncIterable=$u;zn.asyncIterableFromStream=Hu;zn.ensureAsyncIterable=ey;function $u(n){return n[Symbol.asyncIterator]!=null}async function*Hu(n){let e=n.getReader();try{for(;;){let{done:t,value:s}=await e.read();if(t)return;yield s}}finally{e.releaseLock()}}function ey(n){return $u(n)?n:Hu(n)}});var Ku=we(Wn=>{"use strict";Object.defineProperty(Wn,"__esModule",{value:!0});Wn.decodeAsync=ty;Wn.decodeArrayStream=sy;Wn.decodeMultiStream=ny;var $a=Ui(),Ha=Ju();async function ty(n,e){let t=(0,Ha.ensureAsyncIterable)(n);return new $a.Decoder(e).decodeAsync(t)}function sy(n,e){let t=(0,Ha.ensureAsyncIterable)(n);return new $a.Decoder(e).decodeArrayStream(t)}function ny(n,e){let t=(0,Ha.ensureAsyncIterable)(n);return new $a.Decoder(e).decodeStream(t)}});var Ka=we(X=>{"use strict";Object.defineProperty(X,"__esModule",{value:!0});X.decodeTimestampExtension=X.encodeTimestampExtension=X.decodeTimestampToTimeSpec=X.encodeTimeSpecToTimestamp=X.encodeDateToTimeSpec=X.EXT_TIMESTAMP=X.ExtData=X.ExtensionCodec=X.Encoder=X.DecodeError=X.Decoder=X.decodeMultiStream=X.decodeArrayStream=X.decodeAsync=X.decodeMulti=X.decode=X.encode=void 0;var oy=Nu();Object.defineProperty(X,"encode",{enumerable:!0,get:function(){return oy.encode}});var Vu=Wu();Object.defineProperty(X,"decode",{enumerable:!0,get:function(){return Vu.decode}});Object.defineProperty(X,"decodeMulti",{enumerable:!0,get:function(){return Vu.decodeMulti}});var Ja=Ku();Object.defineProperty(X,"decodeAsync",{enumerable:!0,get:function(){return Ja.decodeAsync}});Object.defineProperty(X,"decodeArrayStream",{enumerable:!0,get:function(){return Ja.decodeArrayStream}});Object.defineProperty(X,"decodeMultiStream",{enumerable:!0,get:function(){return Ja.decodeMultiStream}});var iy=Ui();Object.defineProperty(X,"Decoder",{enumerable:!0,get:function(){return iy.Decoder}});var ry=Pi();Object.defineProperty(X,"DecodeError",{enumerable:!0,get:function(){return ry.DecodeError}});var ay=Fa();Object.defineProperty(X,"Encoder",{enumerable:!0,get:function(){return ay.Encoder}});var ly=Ei();Object.defineProperty(X,"ExtensionCodec",{enumerable:!0,get:function(){return ly.ExtensionCodec}});var cy=xa();Object.defineProperty(X,"ExtData",{enumerable:!0,get:function(){return cy.ExtData}});var Ks=Ea();Object.defineProperty(X,"EXT_TIMESTAMP",{enumerable:!0,get:function(){return Ks.EXT_TIMESTAMP}});Object.defineProperty(X,"encodeDateToTimeSpec",{enumerable:!0,get:function(){return Ks.encodeDateToTimeSpec}});Object.defineProperty(X,"encodeTimeSpecToTimestamp",{enumerable:!0,get:function(){return Ks.encodeTimeSpecToTimestamp}});Object.defineProperty(X,"decodeTimestampToTimeSpec",{enumerable:!0,get:function(){return Ks.decodeTimestampToTimeSpec}});Object.defineProperty(X,"encodeTimestampExtension",{enumerable:!0,get:function(){return Ks.encodeTimestampExtension}});Object.defineProperty(X,"decodeTimestampExtension",{enumerable:!0,get:function(){return Ks.decodeTimestampExtension}})});var Hp=we((kR,HT)=>{HT.exports={name:"@rajbos/ai-engineering-fluency",version:"0.6.0",description:"AI Engineering Fluency - CLI tool to analyze GitHub Copilot token usage from local session files",license:"MIT",author:"RobBos",repository:{type:"git",url:"git+https://github.com/rajbos/ai-engineering-fluency.git",directory:"cli"},keywords:["github-copilot","token-usage","copilot","cli","token-tracker"],bin:{"ai-engineering-fluency":"dist/cli.js"},files:["dist/**/*"],scripts:{build:"node esbuild.js","build:production":"node esbuild.js --production","bundle-exe":"pwsh -NoProfile -File bundle-exe.ps1",lint:"eslint src","check-types":"tsc --noEmit",test:"node dist/cli.js --help && node dist/cli.js --version && npm run test:unit","test:unit":'node esbuild.tests.js && node --test "out/test/*.test.js"'},devDependencies:{"@msgpack/msgpack":"^3.1.3","@types/node":"^26.0.0",chalk:"^6.0.0",commander:"^15.0.0",esbuild:"^0.28.0","sql.js":"^1.12.0",typescript:"^7.0.2"},engines:{node:">=22.14.0"}}});var Vt=class extends Error{constructor(e,t,s){super(s),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=t,this.exitCode=e,this.nestedError=void 0}},hs=class extends Vt{constructor(e){super(1,"commander.invalidArgument",e),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};var Sn=class{constructor(e,t){switch(this.description=t||"",this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,e[0]){case"<":this.required=!0,this._name=e.slice(1,-1);break;case"[":this.required=!1,this._name=e.slice(1,-1);break;default:this.required=!0,this._name=e;break}this._name.endsWith("...")&&(this.variadic=!0,this._name=this._name.slice(0,-3))}name(){return this._name}_collectValue(e,t){return t===this.defaultValue||!Array.isArray(t)?[e]:(t.push(e),t)}default(e,t){return this.defaultValue=e,this.defaultValueDescription=t,this}argParser(e){return this.parseArg=e,this}choices(e){return this.argChoices=e.slice(),this.parseArg=(t,s)=>{if(!this.argChoices.includes(t))throw new hs(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._collectValue(t,s):t},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}};function Qo(n){let e=n.name()+(n.variadic===!0?"...":"");return n.required?"<"+e+">":"["+e+"]"}var jc=require("node:events"),Zo=S(require("node:child_process"),1),ht=S(require("node:path"),1),wn=S(require("node:fs"),1),se=S(require("node:process"),1),Gc=require("node:util");var Oc=require("node:util"),Tn=class{constructor(){this.helpWidth=void 0,this.minWidthToWrap=40,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}prepareContext(e){this.helpWidth=this.helpWidth??e.helpWidth??80}visibleCommands(e){let t=e.commands.filter(o=>!o._hidden),s=e._getHelpCommand();return s&&!s._hidden&&t.push(s),this.sortSubcommands&&t.sort((o,i)=>o.name().localeCompare(i.name())),t}compareOptions(e,t){let s=o=>o.short?o.short.replace(/^-/,""):o.long.replace(/^--/,"");return s(e).localeCompare(s(t))}visibleOptions(e){let t=e.options.filter(o=>!o.hidden),s=e._getHelpOption();if(s&&!s.hidden){let o=s.short&&e._findOption(s.short),i=s.long&&e._findOption(s.long);!o&&!i?t.push(s):s.long&&!i?t.push(e.createOption(s.long,s.description)):s.short&&!o&&t.push(e.createOption(s.short,s.description))}return this.sortOptions&&t.sort(this.compareOptions),t}visibleGlobalOptions(e){if(!this.showGlobalOptions)return[];let t=[];for(let s=e.parent;s;s=s.parent){let o=s.options.filter(i=>!i.hidden);t.push(...o)}return this.sortOptions&&t.sort(this.compareOptions),t}visibleArguments(e){return e._argsDescription&&e.registeredArguments.forEach(t=>{t.description=t.description||e._argsDescription[t.name()]||""}),e.registeredArguments.find(t=>t.description)?e.registeredArguments:[]}subcommandTerm(e){let t=e.registeredArguments.map(s=>Qo(s)).join(" ");return e._name+(e._aliases[0]?"|"+e._aliases[0]:"")+(e.options.length?" [options]":"")+(t?" "+t:"")}optionTerm(e){return e.flags}argumentTerm(e){return e.name()}longestSubcommandTermLength(e,t){return t.visibleCommands(e).reduce((s,o)=>Math.max(s,this.displayWidth(t.styleSubcommandTerm(t.subcommandTerm(o)))),0)}longestOptionTermLength(e,t){return t.visibleOptions(e).reduce((s,o)=>Math.max(s,this.displayWidth(t.styleOptionTerm(t.optionTerm(o)))),0)}longestGlobalOptionTermLength(e,t){return t.visibleGlobalOptions(e).reduce((s,o)=>Math.max(s,this.displayWidth(t.styleOptionTerm(t.optionTerm(o)))),0)}longestArgumentTermLength(e,t){return t.visibleArguments(e).reduce((s,o)=>Math.max(s,this.displayWidth(t.styleArgumentTerm(t.argumentTerm(o)))),0)}commandUsage(e){let t=e._name;e._aliases[0]&&(t=t+"|"+e._aliases[0]);let s="";for(let o=e.parent;o;o=o.parent)s=o.name()+" "+s;return s+t+" "+e.usage()}commandDescription(e){return e.description()}subcommandDescription(e){return e.summary()||e.description()}optionDescription(e){let t=[];if(e.argChoices&&t.push(`choices: ${e.argChoices.map(s=>JSON.stringify(s)).join(", ")}`),e.defaultValue!==void 0&&(e.required||e.optional||e.isBoolean()&&typeof e.defaultValue=="boolean")&&t.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),e.presetArg!==void 0&&e.optional&&t.push(`preset: ${JSON.stringify(e.presetArg)}`),e.envVar!==void 0&&t.push(`env: ${e.envVar}`),t.length>0){let s=`(${t.join(", ")})`;return e.description?`${e.description} ${s}`:s}return e.description}argumentDescription(e){let t=[];if(e.argChoices&&t.push(`choices: ${e.argChoices.map(s=>JSON.stringify(s)).join(", ")}`),e.defaultValue!==void 0&&t.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),t.length>0){let s=`(${t.join(", ")})`;return e.description?`${e.description} ${s}`:s}return e.description}formatItemList(e,t,s){return t.length===0?[]:[s.styleTitle(e),...t,""]}groupItems(e,t,s){let o=new Map;return e.forEach(i=>{let r=s(i);o.has(r)||o.set(r,[])}),t.forEach(i=>{let r=s(i);o.has(r)||o.set(r,[]),o.get(r).push(i)}),o}formatHelp(e,t){let s=t.padWidth(e,t),o=t.helpWidth??80;function i(g,h){return t.formatItem(g,s,h,t)}let r=[`${t.styleTitle("Usage:")} ${t.styleUsage(t.commandUsage(e))}`,""],a=t.commandDescription(e);a.length>0&&(r=r.concat([t.boxWrap(t.styleCommandDescription(a),o),""]));let c=t.visibleArguments(e).map(g=>i(t.styleArgumentTerm(t.argumentTerm(g)),t.styleArgumentDescription(t.argumentDescription(g))));if(r=r.concat(this.formatItemList("Arguments:",c,t)),this.groupItems(e.options,t.visibleOptions(e),g=>g.helpGroupHeading??"Options:").forEach((g,h)=>{let y=g.map(b=>i(t.styleOptionTerm(t.optionTerm(b)),t.styleOptionDescription(t.optionDescription(b))));r=r.concat(this.formatItemList(h,y,t))}),t.showGlobalOptions){let g=t.visibleGlobalOptions(e).map(h=>i(t.styleOptionTerm(t.optionTerm(h)),t.styleOptionDescription(t.optionDescription(h))));r=r.concat(this.formatItemList("Global Options:",g,t))}return this.groupItems(e.commands,t.visibleCommands(e),g=>g.helpGroup()||"Commands:").forEach((g,h)=>{let y=g.map(b=>i(t.styleSubcommandTerm(t.subcommandTerm(b)),t.styleSubcommandDescription(t.subcommandDescription(b))));r=r.concat(this.formatItemList(h,y,t))}),r.join(`
|
|
4
|
-
`)}displayWidth(e){return(0,
|
|
5
|
-
`+" ".repeat(t+
|
|
6
|
-
${r}`)}boxWrap(e,t){if(t<this.minWidthToWrap)return e;let s=e.split(/\r\n|\n/),o=/[\s]*[^\s]+/g,i=[];return s.forEach(r=>{let a=r.match(o);if(a===null){i.push("");return}let
|
|
7
|
-
`)}};var
|
|
2
|
+
"use strict";var mf=Object.create;var Vc=Object.defineProperty;var pf=Object.getOwnPropertyDescriptor;var gf=Object.getOwnPropertyNames;var ff=Object.getPrototypeOf,hf=Object.prototype.hasOwnProperty;var we=(n,e)=>()=>{try{return e||n((e={exports:{}}).exports,e),e.exports}catch(t){throw e=0,t}};var yf=(n,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of gf(e))!hf.call(n,o)&&o!==t&&Vc(n,o,{get:()=>e[o],enumerable:!(s=pf(e,o))||s.enumerable});return n};var S=(n,e,t)=>(t=n!=null?mf(ff(n)):{},yf(e||!n||!n.__esModule?Vc(t,"default",{value:n,enumerable:!0}):t,n));var Dt=we((gi,Ss)=>{var mi=void 0,pi=function(n){return mi||(mi=new Promise(function(e,t){var s=typeof n<"u"?n:{},o=s.onAbort;s.onAbort=function(c){t(new Error(c)),o&&o(c)},s.postRun=s.postRun||[],s.postRun.push(function(){e(s)}),Ss=void 0;var i;i||=typeof s<"u"?s:{};var r=!!globalThis.window,a=!!globalThis.WorkerGlobalScope,l=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer";i.onRuntimeInitialized=function(){function c(C,v){switch(typeof v){case"boolean":uf(C,v?1:0);break;case"number":af(C,v);break;case"string":lf(C,v,-1,-1);break;case"object":if(v===null)$c(C);else if(v.length!=null){var R=Xo(v.length);D.set(v,R),cf(C,R,v.length,-1),Sn(R)}else ei(C,"Wrong API use : tried to return a value of an unknown type ("+v+").",-1);break;default:$c(C)}}function u(C,v){for(var R=[],L=0;L<C;L+=1){var z=rt(v+4*L,"i32"),oe=tf(z);if(oe===1||oe===2)z=rf(z);else if(oe===3)z=nf(z);else if(oe===4){oe=z,z=sf(oe),oe=of(oe);for(var Ve=new Uint8Array(z),qe=0;qe<z;qe+=1)Ve[qe]=D[oe+qe];z=Ve}else z=null;R.push(z)}return R}function m(C,v){this.Qa=C,this.db=v,this.Oa=1,this.mb=[]}function f(C,v){if(this.db=v,this.fb=Qo(C),this.fb===null)throw Error("Unable to allocate memory for the SQL string");this.lb=this.fb,this.$a=this.sb=null}function _(C){if(this.filename="dbfile_"+(4294967295*Math.random()>>>0),C!=null){var v=this.filename,R="/",L=v;if(R&&(R=typeof R=="string"?R:ta(R),L=v?ps(R+"/"+v):R),v=hc(!0,!0),L=Dg(L,v),C){if(typeof C=="string"){R=Array(C.length);for(var z=0,oe=C.length;z<oe;++z)R[z]=C.charCodeAt(z);C=R}Jo(L,v|146),R=Gs(L,577),Ic(R,C,0,C.length,0),aa(R),Jo(L,v)}}this.handleError(j(this.filename,k)),this.db=rt(k,"i32"),Jc(this.db),this.gb={},this.Sa={}}var k=_s(4),M=i.cwrap,j=M("sqlite3_open","number",["string","number"]),ne=M("sqlite3_close_v2","number",["number"]),H=M("sqlite3_exec","number",["number","string","number","number","number"]),ge=M("sqlite3_changes","number",["number"]),ve=M("sqlite3_prepare_v2","number",["number","string","number","number","number"]),Gc=M("sqlite3_sql","string",["number"]),Lg=M("sqlite3_normalized_sql","string",["number"]),Bc=M("sqlite3_prepare_v2","number",["number","number","number","number","number"]),jg=M("sqlite3_bind_text","number",["number","number","number","number","number"]),qc=M("sqlite3_bind_blob","number",["number","number","number","number","number"]),Gg=M("sqlite3_bind_double","number",["number","number","number"]),Bg=M("sqlite3_bind_int","number",["number","number","number"]),qg=M("sqlite3_bind_parameter_index","number",["number","string"]),zg=M("sqlite3_step","number",["number"]),Wg=M("sqlite3_errmsg","string",["number"]),$g=M("sqlite3_column_count","number",["number"]),Hg=M("sqlite3_data_count","number",["number"]),Jg=M("sqlite3_column_double","number",["number","number"]),zc=M("sqlite3_column_text","string",["number","number"]),Kg=M("sqlite3_column_blob","number",["number","number"]),Vg=M("sqlite3_column_bytes","number",["number","number"]),Yg=M("sqlite3_column_type","number",["number","number"]),Qg=M("sqlite3_column_name","string",["number","number"]),Xg=M("sqlite3_reset","number",["number"]),Zg=M("sqlite3_clear_bindings","number",["number"]),ef=M("sqlite3_finalize","number",["number"]),Wc=M("sqlite3_create_function_v2","number","number string number number number number number number number".split(" ")),tf=M("sqlite3_value_type","number",["number"]),sf=M("sqlite3_value_bytes","number",["number"]),nf=M("sqlite3_value_text","string",["number"]),of=M("sqlite3_value_blob","number",["number"]),rf=M("sqlite3_value_double","number",["number"]),af=M("sqlite3_result_double","",["number","number"]),$c=M("sqlite3_result_null","",["number"]),lf=M("sqlite3_result_text","",["number","string","number","number"]),cf=M("sqlite3_result_blob","",["number","number","number","number"]),uf=M("sqlite3_result_int","",["number","number"]),ei=M("sqlite3_result_error","",["number","string","number"]),Hc=M("sqlite3_aggregate_context","number",["number","number"]),Jc=M("RegisterExtensionFunctions","number",["number"]),Kc=M("sqlite3_update_hook","number",["number","number","number"]);m.prototype.bind=function(C){if(!this.Qa)throw"Statement closed";return this.reset(),Array.isArray(C)?this.Gb(C):C!=null&&typeof C=="object"?this.Hb(C):!0},m.prototype.step=function(){if(!this.Qa)throw"Statement closed";this.Oa=1;var C=zg(this.Qa);switch(C){case 100:return!0;case 101:return!1;default:throw this.db.handleError(C)}},m.prototype.Ab=function(C){return C==null&&(C=this.Oa,this.Oa+=1),Jg(this.Qa,C)},m.prototype.Ob=function(C){if(C==null&&(C=this.Oa,this.Oa+=1),C=zc(this.Qa,C),typeof BigInt!="function")throw Error("BigInt is not supported");return BigInt(C)},m.prototype.Tb=function(C){return C==null&&(C=this.Oa,this.Oa+=1),zc(this.Qa,C)},m.prototype.getBlob=function(C){C==null&&(C=this.Oa,this.Oa+=1);var v=Vg(this.Qa,C);C=Kg(this.Qa,C);for(var R=new Uint8Array(v),L=0;L<v;L+=1)R[L]=D[C+L];return R},m.prototype.get=function(C,v){v=v||{},C!=null&&this.bind(C)&&this.step(),C=[];for(var R=Hg(this.Qa),L=0;L<R;L+=1)switch(Yg(this.Qa,L)){case 1:var z=v.useBigInt?this.Ob(L):this.Ab(L);C.push(z);break;case 2:C.push(this.Ab(L));break;case 3:C.push(this.Tb(L));break;case 4:C.push(this.getBlob(L));break;default:C.push(null)}return C},m.prototype.qb=function(){for(var C=[],v=$g(this.Qa),R=0;R<v;R+=1)C.push(Qg(this.Qa,R));return C},m.prototype.zb=function(C,v){C=this.get(C,v),v=this.qb();for(var R={},L=0;L<v.length;L+=1)R[v[L]]=C[L];return R},m.prototype.Sb=function(){return Gc(this.Qa)},m.prototype.Pb=function(){return Lg(this.Qa)},m.prototype.run=function(C){return C!=null&&this.bind(C),this.step(),this.reset()},m.prototype.wb=function(C,v){v==null&&(v=this.Oa,this.Oa+=1),C=Qo(C),this.mb.push(C),this.db.handleError(jg(this.Qa,v,C,-1,0))},m.prototype.Fb=function(C,v){v==null&&(v=this.Oa,this.Oa+=1);var R=Xo(C.length);D.set(C,R),this.mb.push(R),this.db.handleError(qc(this.Qa,v,R,C.length,0))},m.prototype.vb=function(C,v){v==null&&(v=this.Oa,this.Oa+=1),this.db.handleError((C===(C|0)?Bg:Gg)(this.Qa,v,C))},m.prototype.Ib=function(C){C==null&&(C=this.Oa,this.Oa+=1),qc(this.Qa,C,0,0,0)},m.prototype.xb=function(C,v){switch(v==null&&(v=this.Oa,this.Oa+=1),typeof C){case"string":this.wb(C,v);return;case"number":this.vb(C,v);return;case"bigint":this.wb(C.toString(),v);return;case"boolean":this.vb(C+0,v);return;case"object":if(C===null){this.Ib(v);return}if(C.length!=null){this.Fb(C,v);return}}throw"Wrong API use : tried to bind a value of an unknown type ("+C+")."},m.prototype.Hb=function(C){var v=this;return Object.keys(C).forEach(function(R){var L=qg(v.Qa,R);L!==0&&v.xb(C[R],L)}),!0},m.prototype.Gb=function(C){for(var v=0;v<C.length;v+=1)this.xb(C[v],v+1);return!0},m.prototype.reset=function(){return this.freemem(),Zg(this.Qa)===0&&Xg(this.Qa)===0},m.prototype.freemem=function(){for(var C;(C=this.mb.pop())!==void 0;)Sn(C)},m.prototype.Ya=function(){this.freemem();var C=ef(this.Qa)===0;return delete this.db.gb[this.Qa],this.Qa=0,C},f.prototype.next=function(){if(this.fb===null)return{done:!0};if(this.$a!==null&&(this.$a.Ya(),this.$a=null),!this.db.db)throw this.ob(),Error("Database closed");var C=wn(),v=_s(4);Q(k),Q(v);try{this.db.handleError(Bc(this.db.db,this.lb,-1,k,v)),this.lb=rt(v,"i32");var R=rt(k,"i32");return R===0?(this.ob(),{done:!0}):(this.$a=new m(R,this.db),this.db.gb[R]=this.$a,{value:this.$a,done:!1})}catch(L){throw this.sb=le(this.lb),this.ob(),L}finally{Tn(C)}},f.prototype.ob=function(){Sn(this.fb),this.fb=null},f.prototype.Qb=function(){return this.sb!==null?this.sb:le(this.lb)},typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"&&(f.prototype[Symbol.iterator]=function(){return this}),_.prototype.run=function(C,v){if(!this.db)throw"Database closed";if(v){C=this.tb(C,v);try{C.step()}finally{C.Ya()}}else this.handleError(H(this.db,C,0,0,k));return this},_.prototype.exec=function(C,v,R){if(!this.db)throw"Database closed";var L=wn(),z=null,oe=null,Ve=null;try{Ve=oe=Qo(C);var qe=_s(4);for(C=[];rt(Ve,"i8")!==0;){Q(k),Q(qe),this.handleError(Bc(this.db,Ve,-1,k,qe));var at=rt(k,"i32");if(Ve=rt(qe,"i32"),at!==0){var je=null;for(z=new m(at,this),v!=null&&z.bind(v);z.step();)je===null&&(je={columns:z.qb(),values:[]},C.push(je)),je.values.push(z.get(null,R));z.Ya()}}return C}catch(Mn){throw z&&z.Ya(),Mn}finally{oe&&Sn(oe),Tn(L)}},_.prototype.Mb=function(C,v,R,L,z){typeof v=="function"&&(L=R,R=v,v=void 0),C=this.tb(C,v);try{for(;C.step();)R(C.zb(null,z))}finally{C.Ya()}if(typeof L=="function")return L()},_.prototype.tb=function(C,v){if(Q(k),this.handleError(ve(this.db,C,-1,k,0)),C=rt(k,"i32"),C===0)throw"Nothing to prepare";var R=new m(C,this);return v!=null&&R.bind(v),this.gb[C]=R},_.prototype.Ub=function(C){return new f(C,this)},_.prototype.Nb=function(){Object.values(this.gb).forEach(function(v){v.Ya()}),Object.values(this.Sa).forEach(Qt),this.Sa={},this.handleError(ne(this.db));var C=Eg(this.filename);return this.handleError(j(this.filename,k)),this.db=rt(k,"i32"),Jc(this.db),C},_.prototype.close=function(){this.db!==null&&(Object.values(this.gb).forEach(function(C){C.Ya()}),Object.values(this.Sa).forEach(Qt),this.Sa={},this.Za&&(Qt(this.Za),this.Za=void 0),this.handleError(ne(this.db)),Ac("/"+this.filename),this.db=null)},_.prototype.handleError=function(C){if(C===0)return null;throw C=Wg(this.db),Error(C)},_.prototype.Rb=function(){return ge(this.db)},_.prototype.Kb=function(C,v){Object.prototype.hasOwnProperty.call(this.Sa,C)&&(Qt(this.Sa[C]),delete this.Sa[C]);var R=kn(function(L,z,oe){z=u(z,oe);try{var Ve=v.apply(null,z)}catch(qe){ei(L,qe,-1);return}c(L,Ve)},"viii");return this.Sa[C]=R,this.handleError(Wc(this.db,C,v.length,1,0,R,0,0,0)),this},_.prototype.Jb=function(C,v){var R=v.init||function(){return null},L=v.finalize||function(at){return at},z=v.step;if(!z)throw"An aggregate function must have a step function in "+C;var oe={};Object.hasOwnProperty.call(this.Sa,C)&&(Qt(this.Sa[C]),delete this.Sa[C]),v=C+"__finalize",Object.hasOwnProperty.call(this.Sa,v)&&(Qt(this.Sa[v]),delete this.Sa[v]);var Ve=kn(function(at,je,Mn){var bs=Hc(at,1);Object.hasOwnProperty.call(oe,bs)||(oe[bs]=R()),je=u(je,Mn),je=[oe[bs]].concat(je);try{oe[bs]=z.apply(null,je)}catch(df){delete oe[bs],ei(at,df,-1)}},"viii"),qe=kn(function(at){var je=Hc(at,1);try{var Mn=L(oe[je])}catch(bs){delete oe[je],ei(at,bs,-1);return}c(at,Mn),delete oe[je]},"vi");return this.Sa[C]=Ve,this.Sa[v]=qe,this.handleError(Wc(this.db,C,z.length-1,1,0,0,Ve,qe,0)),this},_.prototype.Zb=function(C){return this.Za&&(Kc(this.db,0,0),Qt(this.Za),this.Za=void 0),C?(this.Za=kn(function(v,R,L,z,oe){switch(R){case 18:v="insert";break;case 23:v="update";break;case 9:v="delete";break;default:throw"unknown operationCode in updateHook callback: "+R}if(L=le(L),z=le(z),oe>Number.MAX_SAFE_INTEGER)throw"rowId too big to fit inside a Number";C(v,L,z,Number(oe))},"viiiij"),Kc(this.db,this.Za,0),this):this},m.prototype.bind=m.prototype.bind,m.prototype.step=m.prototype.step,m.prototype.get=m.prototype.get,m.prototype.getColumnNames=m.prototype.qb,m.prototype.getAsObject=m.prototype.zb,m.prototype.getSQL=m.prototype.Sb,m.prototype.getNormalizedSQL=m.prototype.Pb,m.prototype.run=m.prototype.run,m.prototype.reset=m.prototype.reset,m.prototype.freemem=m.prototype.freemem,m.prototype.free=m.prototype.Ya,f.prototype.next=f.prototype.next,f.prototype.getRemainingSQL=f.prototype.Qb,_.prototype.run=_.prototype.run,_.prototype.exec=_.prototype.exec,_.prototype.each=_.prototype.Mb,_.prototype.prepare=_.prototype.tb,_.prototype.iterateStatements=_.prototype.Ub,_.prototype.export=_.prototype.Nb,_.prototype.close=_.prototype.close,_.prototype.handleError=_.prototype.handleError,_.prototype.getRowsModified=_.prototype.Rb,_.prototype.create_function=_.prototype.Kb,_.prototype.create_aggregate=_.prototype.Jb,_.prototype.updateHook=_.prototype.Zb,i.Database=_};var d="./this.program",p=(c,u)=>{throw u},g=globalThis.document?.currentScript?.src;typeof __filename<"u"?g=__filename:a&&(g=self.location.href);var h="",y,b;if(l){var T=require("node:fs");h=__dirname+"/",b=c=>(c=A(c)?new URL(c):c,T.readFileSync(c)),y=async c=>(c=A(c)?new URL(c):c,T.readFileSync(c,void 0)),1<process.argv.length&&(d=process.argv[1].replace(/\\/g,"/")),process.argv.slice(2),typeof Ss<"u"&&(Ss.exports=i),p=(c,u)=>{throw process.exitCode=c,u}}else if(r||a){try{h=new URL(".",g).href}catch{}a&&(b=c=>{var u=new XMLHttpRequest;return u.open("GET",c,!1),u.responseType="arraybuffer",u.send(null),new Uint8Array(u.response)}),y=async c=>{if(A(c))return new Promise((m,f)=>{var _=new XMLHttpRequest;_.open("GET",c,!0),_.responseType="arraybuffer",_.onload=()=>{_.status==200||_.status==0&&_.response?m(_.response):f(_.status)},_.onerror=f,_.send(null)});var u=await fetch(c,{credentials:"same-origin"});if(u.ok)return u.arrayBuffer();throw Error(u.status+" : "+u.url)}}var E=console.log.bind(console),P=console.error.bind(console),I,F=!1,Z,A=c=>c.startsWith("file://"),D,B,_e,me,ae,fn,Us,Be;function hn(){var c=Zo.buffer;D=new Int8Array(c),_e=new Int16Array(c),B=new Uint8Array(c),new Uint16Array(c),me=new Int32Array(c),ae=new Uint32Array(c),fn=new Float32Array(c),Us=new Float64Array(c),Be=new BigInt64Array(c),new BigUint64Array(c)}function Kt(c){throw i.onAbort?.(c),c="Aborted("+c+")",P(c),F=!0,new WebAssembly.RuntimeError(c+". Build with -sASSERTIONS for more info.")}var At;async function Bo(c){if(!I)try{var u=await y(c);return new Uint8Array(u)}catch{}if(c==At&&I)c=new Uint8Array(I);else if(b)c=b(c);else throw"both async and sync fetching of the wasm failed";return c}async function qo(c,u){try{var m=await Bo(c);return await WebAssembly.instantiate(m,u)}catch(f){P(`failed to asynchronously prepare wasm: ${f}`),Kt(f)}}async function Yr(c){var u=At;if(!I&&!A(u)&&!l)try{var m=fetch(u,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(m,c)}catch(f){P(`wasm streaming compile failed: ${f}`),P("falling back to ArrayBuffer instantiation")}return qo(u,c)}class ds{name="ExitStatus";constructor(u){this.message=`Program terminated with exit(${u})`,this.status=u}}var Os=c=>{for(;0<c.length;)c.shift()(i)},Qr=[],zo=[],yn=()=>{var c=i.preRun.shift();zo.push(c)},it=0,Fs=null;function rt(c,u="i8"){switch(u.endsWith("*")&&(u="*"),u){case"i1":return D[c];case"i8":return D[c];case"i16":return _e[c>>1];case"i32":return me[c>>2];case"i64":return Be[c>>3];case"float":return fn[c>>2];case"double":return Us[c>>3];case"*":return ae[c>>2];default:Kt(`invalid type for getValue: ${u}`)}}var U=!0;function Q(c){var u="i32";switch(u.endsWith("*")&&(u="*"),u){case"i1":D[c]=0;break;case"i8":D[c]=0;break;case"i16":_e[c>>1]=0;break;case"i32":me[c>>2]=0;break;case"i64":Be[c>>3]=BigInt(0);break;case"float":fn[c>>2]=0;break;case"double":Us[c>>3]=0;break;case"*":ae[c>>2]=0;break;default:Kt(`invalid type for setValue: ${u}`)}}var be=new TextDecoder,Me=(c,u,m,f)=>{if(m=u+m,f)return m;for(;c[u]&&!(u>=m);)++u;return u},le=(c,u,m)=>c?be.decode(B.subarray(c,Me(B,c,u,m))):"",ms=(c,u)=>{for(var m=0,f=c.length-1;0<=f;f--){var _=c[f];_==="."?c.splice(f,1):_===".."?(c.splice(f,1),m++):m&&(c.splice(f,1),m--)}if(u)for(;m;m--)c.unshift("..");return c},ps=c=>{var u=c.charAt(0)==="/",m=c.slice(-1)==="/";return(c=ms(c.split("/").filter(f=>!!f),!u).join("/"))||u||(c="."),c&&m&&(c+="/"),(u?"/":"")+c},gs=c=>{var u=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(c).slice(1);return c=u[0],u=u[1],!c&&!u?".":(u&&=u.slice(0,-1),c+u)},xt=c=>c&&c.match(/([^\/]+|\/)\/*$/)[1],Xr=()=>{if(l){var c=require("node:crypto");return u=>c.randomFillSync(u)}return u=>crypto.getRandomValues(u)},pc=c=>{(pc=Xr())(c)},kg=(...c)=>{for(var u="",m=!1,f=c.length-1;-1<=f&&!m;f--){if(m=0<=f?c[f]:"/",typeof m!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!m)return"";u=m+"/"+u,m=m.charAt(0)==="/"}return u=ms(u.split("/").filter(_=>!!_),!m).join("/"),(m?"/":"")+u||"."},_n=c=>{var u=Me(c,0);return be.decode(c.buffer?c.subarray(0,u):new Uint8Array(c.slice(0,u)))},Zr=[],Ns=c=>{for(var u=0,m=0;m<c.length;++m){var f=c.charCodeAt(m);127>=f?u++:2047>=f?u+=2:55296<=f&&57343>=f?(u+=4,++m):u+=3}return u},ht=(c,u,m,f)=>{if(!(0<f))return 0;var _=m;f=m+f-1;for(var k=0;k<c.length;++k){var M=c.codePointAt(k);if(127>=M){if(m>=f)break;u[m++]=M}else if(2047>=M){if(m+1>=f)break;u[m++]=192|M>>6,u[m++]=128|M&63}else if(65535>=M){if(m+2>=f)break;u[m++]=224|M>>12,u[m++]=128|M>>6&63,u[m++]=128|M&63}else{if(m+3>=f)break;u[m++]=240|M>>18,u[m++]=128|M>>12&63,u[m++]=128|M>>6&63,u[m++]=128|M&63,k++}}return u[m]=0,m-_},gc=[];function fc(c,u){gc[c]={input:[],output:[],eb:u},ia(c,Sg)}var Sg={open(c){var u=gc[c.node.rdev];if(!u)throw new x(43);c.tty=u,c.seekable=!1},close(c){c.tty.eb.fsync(c.tty)},fsync(c){c.tty.eb.fsync(c.tty)},read(c,u,m,f){if(!c.tty||!c.tty.eb.Bb)throw new x(60);for(var _=0,k=0;k<f;k++){try{var M=c.tty.eb.Bb(c.tty)}catch{throw new x(29)}if(M===void 0&&_===0)throw new x(6);if(M==null)break;_++,u[m+k]=M}return _&&(c.node.atime=Date.now()),_},write(c,u,m,f){if(!c.tty||!c.tty.eb.ub)throw new x(60);try{for(var _=0;_<f;_++)c.tty.eb.ub(c.tty,u[m+_])}catch{throw new x(29)}return f&&(c.node.mtime=c.node.ctime=Date.now()),_}},Tg={Bb(){e:{if(!Zr.length){var c=null;if(l){var u=Buffer.alloc(256),m=0,f=process.stdin.fd;try{m=T.readSync(f,u,0,256)}catch(_){if(_.toString().includes("EOF"))m=0;else throw _}0<m&&(c=u.slice(0,m).toString("utf-8"))}else globalThis.window?.prompt&&(c=window.prompt("Input: "),c!==null&&(c+=`
|
|
3
|
+
`));if(!c){c=null;break e}u=Array(Ns(c)+1),c=ht(c,u,0,u.length),u.length=c,Zr=u}c=Zr.shift()}return c},ub(c,u){u===null||u===10?(E(_n(c.output)),c.output=[]):u!=0&&c.output.push(u)},fsync(c){0<c.output?.length&&(E(_n(c.output)),c.output=[])},hc(){return{bc:25856,dc:5,ac:191,cc:35387,$b:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ic(){return 0},jc(){return[24,80]}},wg={ub(c,u){u===null||u===10?(P(_n(c.output)),c.output=[]):u!=0&&c.output.push(u)},fsync(c){0<c.output?.length&&(P(_n(c.output)),c.output=[])}},q={Wa:null,Xa(){return q.createNode(null,"/",16895,0)},createNode(c,u,m,f){if((m&61440)===24576||(m&61440)===4096)throw new x(63);return q.Wa||(q.Wa={dir:{node:{Ta:q.La.Ta,Ua:q.La.Ua,lookup:q.La.lookup,ib:q.La.ib,rename:q.La.rename,unlink:q.La.unlink,rmdir:q.La.rmdir,readdir:q.La.readdir,symlink:q.La.symlink},stream:{Va:q.Ma.Va}},file:{node:{Ta:q.La.Ta,Ua:q.La.Ua},stream:{Va:q.Ma.Va,read:q.Ma.read,write:q.Ma.write,jb:q.Ma.jb,kb:q.Ma.kb}},link:{node:{Ta:q.La.Ta,Ua:q.La.Ua,readlink:q.La.readlink},stream:{}},yb:{node:{Ta:q.La.Ta,Ua:q.La.Ua},stream:xg}}),m=kc(c,u,m,f),Le(m.mode)?(m.La=q.Wa.dir.node,m.Ma=q.Wa.dir.stream,m.Na={}):(m.mode&61440)===32768?(m.La=q.Wa.file.node,m.Ma=q.Wa.file.stream,m.Ra=0,m.Na=null):(m.mode&61440)===40960?(m.La=q.Wa.link.node,m.Ma=q.Wa.link.stream):(m.mode&61440)===8192&&(m.La=q.Wa.yb.node,m.Ma=q.Wa.yb.stream),m.atime=m.mtime=m.ctime=Date.now(),c&&(c.Na[u]=m,c.atime=c.mtime=c.ctime=m.atime),m},fc(c){return c.Na?c.Na.subarray?c.Na.subarray(0,c.Ra):new Uint8Array(c.Na):new Uint8Array(0)},La:{Ta(c){var u={};return u.dev=(c.mode&61440)===8192?c.id:1,u.ino=c.id,u.mode=c.mode,u.nlink=1,u.uid=0,u.gid=0,u.rdev=c.rdev,Le(c.mode)?u.size=4096:(c.mode&61440)===32768?u.size=c.Ra:(c.mode&61440)===40960?u.size=c.link.length:u.size=0,u.atime=new Date(c.atime),u.mtime=new Date(c.mtime),u.ctime=new Date(c.ctime),u.blksize=4096,u.blocks=Math.ceil(u.size/u.blksize),u},Ua(c,u){for(var m of["mode","atime","mtime","ctime"])u[m]!=null&&(c[m]=u[m]);u.size!==void 0&&(u=u.size,c.Ra!=u&&(u==0?(c.Na=null,c.Ra=0):(m=c.Na,c.Na=new Uint8Array(u),m&&c.Na.set(m.subarray(0,Math.min(u,c.Ra))),c.Ra=u)))},lookup(){throw q.nb||(q.nb=new x(44),q.nb.stack="<generic error, no stack>"),q.nb},ib(c,u,m,f){return q.createNode(c,u,m,f)},rename(c,u,m){try{var f=fs(u,m)}catch{}if(f){if(Le(c.mode))for(var _ in f.Na)throw new x(55);na(f)}delete c.parent.Na[c.name],u.Na[m]=c,c.name=m,u.ctime=u.mtime=c.parent.ctime=c.parent.mtime=Date.now()},unlink(c,u){delete c.Na[u],c.ctime=c.mtime=Date.now()},rmdir(c,u){var m=fs(c,u),f;for(f in m.Na)throw new x(55);delete c.Na[u],c.ctime=c.mtime=Date.now()},readdir(c){return[".","..",...Object.keys(c.Na)]},symlink(c,u,m){return c=q.createNode(c,u,41471,0),c.link=m,c},readlink(c){if((c.mode&61440)!==40960)throw new x(28);return c.link}},Ma:{read(c,u,m,f,_){var k=c.node.Na;if(_>=c.node.Ra)return 0;if(c=Math.min(c.node.Ra-_,f),8<c&&k.subarray)u.set(k.subarray(_,_+c),m);else for(f=0;f<c;f++)u[m+f]=k[_+f];return c},write(c,u,m,f,_,k){if(u.buffer===D.buffer&&(k=!1),!f)return 0;if(c=c.node,c.mtime=c.ctime=Date.now(),u.subarray&&(!c.Na||c.Na.subarray)){if(k)return c.Na=u.subarray(m,m+f),c.Ra=f;if(c.Ra===0&&_===0)return c.Na=u.slice(m,m+f),c.Ra=f;if(_+f<=c.Ra)return c.Na.set(u.subarray(m,m+f),_),f}k=_+f;var M=c.Na?c.Na.length:0;if(M>=k||(k=Math.max(k,M*(1048576>M?2:1.125)>>>0),M!=0&&(k=Math.max(k,256)),M=c.Na,c.Na=new Uint8Array(k),0<c.Ra&&c.Na.set(M.subarray(0,c.Ra),0)),c.Na.subarray&&u.subarray)c.Na.set(u.subarray(m,m+f),_);else for(k=0;k<f;k++)c.Na[_+k]=u[m+k];return c.Ra=Math.max(c.Ra,_+f),f},Va(c,u,m){if(m===1?u+=c.position:m===2&&(c.node.mode&61440)===32768&&(u+=c.node.Ra),0>u)throw new x(28);return u},jb(c,u,m,f,_){if((c.node.mode&61440)!==32768)throw new x(43);if(c=c.node.Na,_&2||!c||c.buffer!==D.buffer){_=!0,f=65536*Math.ceil(u/65536);var k=Lc(65536,f);if(k&&B.fill(0,k,k+f),f=k,!f)throw new x(48);c&&((0<m||m+u<c.length)&&(c.subarray?c=c.subarray(m,m+u):c=Array.prototype.slice.call(c,m,m+u)),D.set(c,f))}else _=!1,f=c.byteOffset;return{Xb:f,Eb:_}},kb(c,u,m,f){return q.Ma.write(c,u,0,f,m,!1),0}}},hc=(c,u)=>{var m=0;return c&&(m|=365),u&&(m|=146),m},ea=null,yc={},Ls=[],Mg=1,Vt=null,_c=!1,bc=!0,Cc={},x=class{name="ErrnoError";constructor(c){this.Pa=c}},vg=class{hb={};node=null;get flags(){return this.hb.flags}set flags(c){this.hb.flags=c}get position(){return this.hb.position}set position(c){this.hb.position=c}},Pg=class{La={};Ma={};bb=null;constructor(c,u,m,f){c||=this,this.parent=c,this.Xa=c.Xa,this.id=Mg++,this.name=u,this.mode=m,this.rdev=f,this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&365)===365}set read(c){c?this.mode|=365:this.mode&=-366}get write(){return(this.mode&146)===146}set write(c){c?this.mode|=146:this.mode&=-147}};function Ke(c,u={}){if(!c)throw new x(44);u.pb??(u.pb=!0),c.charAt(0)==="/"||(c="//"+c);var m=0;e:for(;40>m;m++){c=c.split("/").filter(j=>!!j);for(var f=ea,_="/",k=0;k<c.length;k++){var M=k===c.length-1;if(M&&u.parent)break;if(c[k]!==".")if(c[k]==="..")if(_=gs(_),f===f.parent){c=_+"/"+c.slice(k+1).join("/"),m--;continue e}else f=f.parent;else{_=ps(_+"/"+c[k]);try{f=fs(f,c[k])}catch(j){if(j?.Pa===44&&M&&u.Wb)return{path:_};throw j}if(!f.bb||M&&!u.pb||(f=f.bb.root),(f.mode&61440)===40960&&(!M||u.ab)){if(!f.La.readlink)throw new x(52);f=f.La.readlink(f),f.charAt(0)==="/"||(f=gs(_)+"/"+f),c=f+"/"+c.slice(k+1).join("/");continue e}}}return{path:_,node:f}}throw new x(32)}function ta(c){for(var u;;){if(c===c.parent)return c=c.Xa.Db,u?c[c.length-1]!=="/"?`${c}/${u}`:c+u:c;u=u?`${c.name}/${u}`:c.name,c=c.parent}}function sa(c,u){for(var m=0,f=0;f<u.length;f++)m=(m<<5)-m+u.charCodeAt(f)|0;return(c+m>>>0)%Vt.length}function na(c){var u=sa(c.parent.id,c.name);if(Vt[u]===c)Vt[u]=c.cb;else for(u=Vt[u];u;){if(u.cb===c){u.cb=c.cb;break}u=u.cb}}function fs(c,u){var m=Le(c.mode)?(m=js(c,"x"))?m:c.La.lookup?0:2:54;if(m)throw new x(m);for(m=Vt[sa(c.id,u)];m;m=m.cb){var f=m.name;if(m.parent.id===c.id&&f===u)return m}return c.La.lookup(c,u)}function kc(c,u,m,f){return c=new Pg(c,u,m,f),u=sa(c.parent.id,c.name),c.cb=Vt[u],Vt[u]=c}function Le(c){return(c&61440)===16384}function Sc(c){var u=["r","w","rw"][c&3];return c&512&&(u+="w"),u}function js(c,u){if(bc)return 0;if(!u.includes("r")||c.mode&292){if(u.includes("w")&&!(c.mode&146)||u.includes("x")&&!(c.mode&73))return 2}else return 2;return 0}function Tc(c,u){if(!Le(c.mode))return 54;try{return fs(c,u),20}catch{}return js(c,"wx")}function wc(c,u,m){try{var f=fs(c,u)}catch(_){return _.Pa}if(c=js(c,"wx"))return c;if(m){if(!Le(f.mode))return 54;if(f===f.parent||ta(f)==="/")return 10}else if(Le(f.mode))return 31;return 0}function Wo(c){if(!c)throw new x(63);return c}function Re(c){if(c=Ls[c],!c)throw new x(8);return c}function Mc(c,u=-1){if(c=Object.assign(new vg,c),u==-1)e:{for(u=0;4096>=u;u++)if(!Ls[u])break e;throw new x(33)}return c.fd=u,Ls[u]=c}function Ag(c,u=-1){return c=Mc(c,u),c.Ma?.ec?.(c),c}function oa(c,u,m){var f=c?.Ma.Ua;c=f?c:u,f??=u.La.Ua,Wo(f),f(c,m)}var xg={open(c){c.Ma=yc[c.node.rdev].Ma,c.Ma.open?.(c)},Va(){throw new x(70)}};function ia(c,u){yc[c]={Ma:u}}function vc(c,u){var m=u==="/";if(m&&ea)throw new x(10);if(!m&&u){var f=Ke(u,{pb:!1});if(u=f.path,f=f.node,f.bb)throw new x(10);if(!Le(f.mode))throw new x(54)}u={type:c,kc:{},Db:u,Vb:[]},c=c.Xa(u),c.Xa=u,u.root=c,m?ea=c:f&&(f.bb=u,f.Xa&&f.Xa.Vb.push(u))}function $o(c,u,m){var f=Ke(c,{parent:!0}).node;if(c=xt(c),!c)throw new x(28);if(c==="."||c==="..")throw new x(20);var _=Tc(f,c);if(_)throw new x(_);if(!f.La.ib)throw new x(63);return f.La.ib(f,c,u,m)}function Dg(c,u=438){return $o(c,u&4095|32768,0)}function yt(c,u=511){return $o(c,u&1023|16384,0)}function Ho(c,u,m){typeof m>"u"&&(m=u,u=438),$o(c,u|8192,m)}function ra(c,u){if(!kg(c))throw new x(44);var m=Ke(u,{parent:!0}).node;if(!m)throw new x(44);u=xt(u);var f=Tc(m,u);if(f)throw new x(f);if(!m.La.symlink)throw new x(63);m.La.symlink(m,u,c)}function Pc(c){var u=Ke(c,{parent:!0}).node;c=xt(c);var m=fs(u,c),f=wc(u,c,!0);if(f)throw new x(f);if(!u.La.rmdir)throw new x(63);if(m.bb)throw new x(10);u.La.rmdir(u,c),na(m)}function Ac(c){var u=Ke(c,{parent:!0}).node;if(!u)throw new x(44);c=xt(c);var m=fs(u,c),f=wc(u,c,!1);if(f)throw new x(f);if(!u.La.unlink)throw new x(63);if(m.bb)throw new x(10);u.La.unlink(u,c),na(m)}function bn(c,u){return c=Ke(c,{ab:!u}).node,Wo(c.La.Ta)(c)}function xc(c,u,m,f){oa(c,u,{mode:m&4095|u.mode&-4096,ctime:Date.now(),Lb:f})}function Jo(c,u){c=typeof c=="string"?Ke(c,{ab:!0}).node:c,xc(null,c,u)}function Dc(c,u,m){if(Le(u.mode))throw new x(31);if((u.mode&61440)!==32768)throw new x(28);var f=js(u,"w");if(f)throw new x(f);oa(c,u,{size:m,timestamp:Date.now()})}function Gs(c,u,m=438){if(c==="")throw new x(44);if(typeof u=="string"){var f={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090}[u];if(typeof f>"u")throw Error(`Unknown file open mode: ${u}`);u=f}if(m=u&64?m&4095|32768:0,typeof c=="object")f=c;else{var _=c.endsWith("/");c=Ke(c,{ab:!(u&131072),Wb:!0}),f=c.node,c=c.path}var k=!1;if(u&64)if(f){if(u&128)throw new x(20)}else{if(_)throw new x(31);f=$o(c,m|511,0),k=!0}if(!f)throw new x(44);if((f.mode&61440)===8192&&(u&=-513),u&65536&&!Le(f.mode))throw new x(54);if(!k&&(_=f?(f.mode&61440)===40960?32:Le(f.mode)&&(Sc(u)!=="r"||u&576)?31:js(f,Sc(u)):44))throw new x(_);return u&512&&!k&&(_=f,_=typeof _=="string"?Ke(_,{ab:!0}).node:_,Dc(null,_,0)),u&=-131713,_=Mc({node:f,path:ta(f),flags:u,seekable:!0,position:0,Ma:f.Ma,Yb:[],error:!1}),_.Ma.open&&_.Ma.open(_),k&&Jo(f,m&511),!i.logReadFiles||u&1||c in Cc||(Cc[c]=1),_}function aa(c){if(c.fd===null)throw new x(8);c.rb&&(c.rb=null);try{c.Ma.close&&c.Ma.close(c)}catch(u){throw u}finally{Ls[c.fd]=null}c.fd=null}function Ec(c,u,m){if(c.fd===null)throw new x(8);if(!c.seekable||!c.Ma.Va)throw new x(70);if(m!=0&&m!=1&&m!=2)throw new x(28);c.position=c.Ma.Va(c,u,m),c.Yb=[]}function Rc(c,u,m,f,_){if(0>f||0>_)throw new x(28);if(c.fd===null)throw new x(8);if((c.flags&2097155)===1)throw new x(8);if(Le(c.node.mode))throw new x(31);if(!c.Ma.read)throw new x(28);var k=typeof _<"u";if(!k)_=c.position;else if(!c.seekable)throw new x(70);return u=c.Ma.read(c,u,m,f,_),k||(c.position+=u),u}function Ic(c,u,m,f,_){if(0>f||0>_)throw new x(28);if(c.fd===null)throw new x(8);if((c.flags&2097155)===0)throw new x(8);if(Le(c.node.mode))throw new x(31);if(!c.Ma.write)throw new x(28);c.seekable&&c.flags&1024&&Ec(c,0,2);var k=typeof _<"u";if(!k)_=c.position;else if(!c.seekable)throw new x(70);return u=c.Ma.write(c,u,m,f,_,void 0),k||(c.position+=u),u}function Eg(c){var u=u||0,m="binary";m!=="utf8"&&m!=="binary"&&Kt(`Invalid encoding type "${m}"`),u=Gs(c,u),c=bn(c).size;var f=new Uint8Array(c);return Rc(u,f,0,c,0),m==="utf8"&&(f=_n(f)),aa(u),f}function Yt(c,u,m){c=ps("/dev/"+c);var f=hc(!!u,!!m);Yt.Cb??(Yt.Cb=64);var _=Yt.Cb++<<8|0;ia(_,{open(k){k.seekable=!1},close(){m?.buffer?.length&&m(10)},read(k,M,j,ne){for(var H=0,ge=0;ge<ne;ge++){try{var ve=u()}catch{throw new x(29)}if(ve===void 0&&H===0)throw new x(6);if(ve==null)break;H++,M[j+ge]=ve}return H&&(k.node.atime=Date.now()),H},write(k,M,j,ne){for(var H=0;H<ne;H++)try{m(M[j+H])}catch{throw new x(29)}return ne&&(k.node.mtime=k.node.ctime=Date.now()),H}}),Ho(c,f,_)}var pe={};function hs(c,u,m){if(u.charAt(0)==="/")return u;if(c=c===-100?"/":Re(c).path,u.length==0){if(!m)throw new x(44);return c}return c+"/"+u}function Ko(c,u){ae[c>>2]=u.dev,ae[c+4>>2]=u.mode,ae[c+8>>2]=u.nlink,ae[c+12>>2]=u.uid,ae[c+16>>2]=u.gid,ae[c+20>>2]=u.rdev,Be[c+24>>3]=BigInt(u.size),me[c+32>>2]=4096,me[c+36>>2]=u.blocks;var m=u.atime.getTime(),f=u.mtime.getTime(),_=u.ctime.getTime();return Be[c+40>>3]=BigInt(Math.floor(m/1e3)),ae[c+48>>2]=m%1e3*1e6,Be[c+56>>3]=BigInt(Math.floor(f/1e3)),ae[c+64>>2]=f%1e3*1e6,Be[c+72>>3]=BigInt(Math.floor(_/1e3)),ae[c+80>>2]=_%1e3*1e6,Be[c+88>>3]=BigInt(u.ino),0}var Vo=void 0,Yo=()=>{var c=me[+Vo>>2];return Vo+=4,c},la=0,Rg=[0,31,60,91,121,152,182,213,244,274,305,335],Ig=[0,31,59,90,120,151,181,212,243,273,304,334],Cn={},Uc=c=>{Z=c,U||0<la||(i.onExit?.(c),F=!0),p(c,new ds(c))},Ug=c=>{if(!F)try{c()}catch(u){u instanceof ds||u=="unwind"||p(1,u)}finally{if(!(U||0<la))try{Z=c=Z,Uc(c)}catch(u){u instanceof ds||u=="unwind"||p(1,u)}}},ca={},Oc=()=>{if(!ua){var c={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:(globalThis.navigator?.language??"C").replace("-","_")+".UTF-8",_:d||"./this.program"},u;for(u in ca)ca[u]===void 0?delete c[u]:c[u]=ca[u];var m=[];for(u in c)m.push(`${u}=${c[u]}`);ua=m}return ua},ua,Og=(c,u,m,f)=>{var _={string:H=>{var ge=0;if(H!=null&&H!==0){ge=Ns(H)+1;var ve=_s(ge);ht(H,B,ve,ge),ge=ve}return ge},array:H=>{var ge=_s(H.length);return D.set(H,ge),ge}};c=i["_"+c];var k=[],M=0;if(f)for(var j=0;j<f.length;j++){var ne=_[m[j]];ne?(M===0&&(M=wn()),k[j]=ne(f[j])):k[j]=f[j]}return m=c(...k),m=(function(H){return M!==0&&Tn(M),u==="string"?le(H):u==="boolean"?!!H:H})(m)},Qo=c=>{var u=Ns(c)+1,m=Xo(u);return m&&ht(c,B,m,u),m},ys,da=[],Qt=c=>{ys.delete(Xt.get(c)),Xt.set(c,null),da.push(c)},Fc=c=>{let u=c.length;return[u%128|128,u>>7,...c]},Fg={i:127,p:127,j:126,f:125,d:124,e:111},Nc=c=>Fc(Array.from(c,u=>Fg[u])),kn=(c,u)=>{if(!ys){ys=new WeakMap;var m=Xt.length;if(ys)for(var f=0;f<0+m;f++){var _=Xt.get(f);_&&ys.set(_,f)}}if(m=ys.get(c)||0)return m;m=da.length?da.pop():Xt.grow(1);try{Xt.set(m,c)}catch(k){if(!(k instanceof TypeError))throw k;u=Uint8Array.of(0,97,115,109,1,0,0,0,1,...Fc([1,96,...Nc(u.slice(1)),...Nc(u[0]==="v"?"":u[0])]),2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0),u=new WebAssembly.Module(u),u=new WebAssembly.Instance(u,{e:{f:c}}).exports.f,Xt.set(m,u)}return ys.set(c,m),m};if(Vt=Array(4096),vc(q,"/"),yt("/tmp"),yt("/home"),yt("/home/web_user"),(function(){yt("/dev"),ia(259,{read:()=>0,write:(f,_,k,M)=>M,Va:()=>0}),Ho("/dev/null",259),fc(1280,Tg),fc(1536,wg),Ho("/dev/tty",1280),Ho("/dev/tty1",1536);var c=new Uint8Array(1024),u=0,m=()=>(u===0&&(pc(c),u=c.byteLength),c[--u]);Yt("random",m),Yt("urandom",m),yt("/dev/shm"),yt("/dev/shm/tmp")})(),(function(){yt("/proc");var c=yt("/proc/self");yt("/proc/self/fd"),vc({Xa(){var u=kc(c,"fd",16895,73);return u.Ma={Va:q.Ma.Va},u.La={lookup(m,f){m=+f;var _=Re(m);return m={parent:null,Xa:{Db:"fake"},La:{readlink:()=>_.path},id:m+1},m.parent=m},readdir(){return Array.from(Ls.entries()).filter(([,m])=>m).map(([m])=>m.toString())}},u}},"/proc/self/fd")})(),i.noExitRuntime&&(U=i.noExitRuntime),i.print&&(E=i.print),i.printErr&&(P=i.printErr),i.wasmBinary&&(I=i.wasmBinary),i.thisProgram&&(d=i.thisProgram),i.preInit)for(typeof i.preInit=="function"&&(i.preInit=[i.preInit]);0<i.preInit.length;)i.preInit.shift()();i.stackSave=()=>wn(),i.stackRestore=c=>Tn(c),i.stackAlloc=c=>_s(c),i.cwrap=(c,u,m,f)=>{var _=!m||m.every(k=>k==="number"||k==="boolean");return u!=="string"&&_&&!f?i["_"+c]:(...k)=>Og(c,u,m,k)},i.addFunction=kn,i.removeFunction=Qt,i.UTF8ToString=le,i.stringToNewUTF8=Qo,i.writeArrayToMemory=(c,u)=>{D.set(c,u)};var Xo,Sn,Lc,jc,Tn,_s,wn,Zo,Xt,Ng={a:(c,u,m,f)=>Kt(`Assertion failed: ${le(c)}, at: `+[u?le(u):"unknown filename",m,f?le(f):"unknown function"]),i:function(c,u){try{return c=le(c),Jo(c,u),0}catch(m){if(typeof pe>"u"||m.name!=="ErrnoError")throw m;return-m.Pa}},L:function(c,u,m){try{if(u=le(u),u=hs(c,u),m&-8)return-28;var f=Ke(u,{ab:!0}).node;return f?(c="",m&4&&(c+="r"),m&2&&(c+="w"),m&1&&(c+="x"),c&&js(f,c)?-2:0):-44}catch(_){if(typeof pe>"u"||_.name!=="ErrnoError")throw _;return-_.Pa}},j:function(c,u){try{var m=Re(c);return xc(m,m.node,u,!1),0}catch(f){if(typeof pe>"u"||f.name!=="ErrnoError")throw f;return-f.Pa}},h:function(c){try{var u=Re(c);return oa(u,u.node,{timestamp:Date.now(),Lb:!1}),0}catch(m){if(typeof pe>"u"||m.name!=="ErrnoError")throw m;return-m.Pa}},b:function(c,u,m){Vo=m;try{var f=Re(c);switch(u){case 0:var _=Yo();if(0>_)break;for(;Ls[_];)_++;return Ag(f,_).fd;case 1:case 2:return 0;case 3:return f.flags;case 4:return _=Yo(),f.flags|=_,0;case 12:return _=Yo(),_e[_+0>>1]=2,0;case 13:case 14:return 0}return-28}catch(k){if(typeof pe>"u"||k.name!=="ErrnoError")throw k;return-k.Pa}},g:function(c,u){try{var m=Re(c),f=m.node,_=m.Ma.Ta;c=_?m:f,_??=f.La.Ta,Wo(_);var k=_(c);return Ko(u,k)}catch(M){if(typeof pe>"u"||M.name!=="ErrnoError")throw M;return-M.Pa}},H:function(c,u){u=-9007199254740992>u||9007199254740992<u?NaN:Number(u);try{if(isNaN(u))return-61;var m=Re(c);if(0>u||(m.flags&2097155)===0)throw new x(28);return Dc(m,m.node,u),0}catch(f){if(typeof pe>"u"||f.name!=="ErrnoError")throw f;return-f.Pa}},G:function(c,u){try{if(u===0)return-28;var m=Ns("/")+1;return u<m?-68:(ht("/",B,c,u),m)}catch(f){if(typeof pe>"u"||f.name!=="ErrnoError")throw f;return-f.Pa}},K:function(c,u){try{return c=le(c),Ko(u,bn(c,!0))}catch(m){if(typeof pe>"u"||m.name!=="ErrnoError")throw m;return-m.Pa}},C:function(c,u,m){try{return u=le(u),u=hs(c,u),yt(u,m),0}catch(f){if(typeof pe>"u"||f.name!=="ErrnoError")throw f;return-f.Pa}},J:function(c,u,m,f){try{u=le(u);var _=f&256;return u=hs(c,u,f&4096),Ko(m,_?bn(u,!0):bn(u))}catch(k){if(typeof pe>"u"||k.name!=="ErrnoError")throw k;return-k.Pa}},x:function(c,u,m,f){Vo=f;try{u=le(u),u=hs(c,u);var _=f?Yo():0;return Gs(u,m,_).fd}catch(k){if(typeof pe>"u"||k.name!=="ErrnoError")throw k;return-k.Pa}},v:function(c,u,m,f){try{if(u=le(u),u=hs(c,u),0>=f)return-28;var _=Ke(u).node;if(!_)throw new x(44);if(!_.La.readlink)throw new x(28);var k=_.La.readlink(_),M=Math.min(f,Ns(k)),j=D[m+M];return ht(k,B,m,f+1),D[m+M]=j,M}catch(ne){if(typeof pe>"u"||ne.name!=="ErrnoError")throw ne;return-ne.Pa}},u:function(c){try{return c=le(c),Pc(c),0}catch(u){if(typeof pe>"u"||u.name!=="ErrnoError")throw u;return-u.Pa}},f:function(c,u){try{return c=le(c),Ko(u,bn(c))}catch(m){if(typeof pe>"u"||m.name!=="ErrnoError")throw m;return-m.Pa}},r:function(c,u,m){try{if(u=le(u),u=hs(c,u),m)if(m===512)Pc(u);else return-28;else Ac(u);return 0}catch(f){if(typeof pe>"u"||f.name!=="ErrnoError")throw f;return-f.Pa}},q:function(c,u,m){try{u=le(u),u=hs(c,u,!0);var f=Date.now(),_,k;if(m){var M=ae[m>>2]+4294967296*me[m+4>>2],j=me[m+8>>2];j==1073741823?_=f:j==1073741822?_=null:_=1e3*M+j/1e6,m+=16,M=ae[m>>2]+4294967296*me[m+4>>2],j=me[m+8>>2],j==1073741823?k=f:j==1073741822?k=null:k=1e3*M+j/1e6}else k=_=f;if((k??_)!==null){c=_;var ne=Ke(u,{ab:!0}).node;Wo(ne.La.Ua)(ne,{atime:c,mtime:k})}return 0}catch(H){if(typeof pe>"u"||H.name!=="ErrnoError")throw H;return-H.Pa}},m:()=>Kt(""),l:()=>{U=!1,la=0},A:function(c,u){c=-9007199254740992>c||9007199254740992<c?NaN:Number(c),c=new Date(1e3*c),me[u>>2]=c.getSeconds(),me[u+4>>2]=c.getMinutes(),me[u+8>>2]=c.getHours(),me[u+12>>2]=c.getDate(),me[u+16>>2]=c.getMonth(),me[u+20>>2]=c.getFullYear()-1900,me[u+24>>2]=c.getDay();var m=c.getFullYear();me[u+28>>2]=(m%4!==0||m%100===0&&m%400!==0?Ig:Rg)[c.getMonth()]+c.getDate()-1|0,me[u+36>>2]=-(60*c.getTimezoneOffset()),m=new Date(c.getFullYear(),6,1).getTimezoneOffset();var f=new Date(c.getFullYear(),0,1).getTimezoneOffset();me[u+32>>2]=(m!=f&&c.getTimezoneOffset()==Math.min(f,m))|0},y:function(c,u,m,f,_,k,M){_=-9007199254740992>_||9007199254740992<_?NaN:Number(_);try{var j=Re(f);if((u&2)!==0&&(m&2)===0&&(j.flags&2097155)!==2)throw new x(2);if((j.flags&2097155)===1)throw new x(2);if(!j.Ma.jb)throw new x(43);if(!c)throw new x(28);var ne=j.Ma.jb(j,c,_,u,m),H=ne.Xb;return me[k>>2]=ne.Eb,ae[M>>2]=H,0}catch(ge){if(typeof pe>"u"||ge.name!=="ErrnoError")throw ge;return-ge.Pa}},z:function(c,u,m,f,_,k){k=-9007199254740992>k||9007199254740992<k?NaN:Number(k);try{var M=Re(_);if(m&2){if(m=k,(M.node.mode&61440)!==32768)throw new x(43);if(!(f&2)){var j=B.slice(c,c+u);M.Ma.kb&&M.Ma.kb(M,j,m,u,f)}}}catch(ne){if(typeof pe>"u"||ne.name!=="ErrnoError")throw ne;return-ne.Pa}},n:(c,u)=>{if(Cn[c]&&(clearTimeout(Cn[c].id),delete Cn[c]),!u)return 0;var m=setTimeout(()=>{delete Cn[c],Ug(()=>jc(c,performance.now()))},u);return Cn[c]={id:m,lc:u},0},B:(c,u,m,f)=>{var _=new Date().getFullYear(),k=new Date(_,0,1).getTimezoneOffset();_=new Date(_,6,1).getTimezoneOffset(),ae[c>>2]=60*Math.max(k,_),me[u>>2]=+(k!=_),u=M=>{var j=Math.abs(M);return`UTC${0<=M?"-":"+"}${String(Math.floor(j/60)).padStart(2,"0")}${String(j%60).padStart(2,"0")}`},c=u(k),u=u(_),_<k?(ht(c,B,m,17),ht(u,B,f,17)):(ht(c,B,f,17),ht(u,B,m,17))},d:()=>Date.now(),s:()=>2147483648,c:()=>performance.now(),o:c=>{var u=B.length;if(c>>>=0,2147483648<c)return!1;for(var m=1;4>=m;m*=2){var f=u*(1+.2/m);f=Math.min(f,c+100663296);e:{f=(Math.min(2147483648,65536*Math.ceil(Math.max(c,f)/65536))-Zo.buffer.byteLength+65535)/65536|0;try{Zo.grow(f),hn();var _=1;break e}catch{}_=void 0}if(_)return!0}return!1},E:(c,u)=>{var m=0,f=0,_;for(_ of Oc()){var k=u+m;ae[c+f>>2]=k,m+=ht(_,B,k,1/0)+1,f+=4}return 0},F:(c,u)=>{var m=Oc();ae[c>>2]=m.length,c=0;for(var f of m)c+=Ns(f)+1;return ae[u>>2]=c,0},e:function(c){try{var u=Re(c);return aa(u),0}catch(m){if(typeof pe>"u"||m.name!=="ErrnoError")throw m;return m.Pa}},p:function(c,u){try{var m=Re(c);return D[u]=m.tty?2:Le(m.mode)?3:(m.mode&61440)===40960?7:4,_e[u+2>>1]=0,Be[u+8>>3]=BigInt(0),Be[u+16>>3]=BigInt(0),0}catch(f){if(typeof pe>"u"||f.name!=="ErrnoError")throw f;return f.Pa}},w:function(c,u,m,f){try{e:{var _=Re(c);c=u;for(var k,M=u=0;M<m;M++){var j=ae[c>>2],ne=ae[c+4>>2];c+=8;var H=Rc(_,D,j,ne,k);if(0>H){var ge=-1;break e}if(u+=H,H<ne)break;typeof k<"u"&&(k+=H)}ge=u}return ae[f>>2]=ge,0}catch(ve){if(typeof pe>"u"||ve.name!=="ErrnoError")throw ve;return ve.Pa}},D:function(c,u,m,f){u=-9007199254740992>u||9007199254740992<u?NaN:Number(u);try{if(isNaN(u))return 61;var _=Re(c);return Ec(_,u,m),Be[f>>3]=BigInt(_.position),_.rb&&u===0&&m===0&&(_.rb=null),0}catch(k){if(typeof pe>"u"||k.name!=="ErrnoError")throw k;return k.Pa}},I:function(c){try{var u=Re(c);return u.Ma?.fsync?.(u)}catch(m){if(typeof pe>"u"||m.name!=="ErrnoError")throw m;return m.Pa}},t:function(c,u,m,f){try{e:{var _=Re(c);c=u;for(var k,M=u=0;M<m;M++){var j=ae[c>>2],ne=ae[c+4>>2];c+=8;var H=Ic(_,D,j,ne,k);if(0>H){var ge=-1;break e}if(u+=H,H<ne)break;typeof k<"u"&&(k+=H)}ge=u}return ae[f>>2]=ge,0}catch(ve){if(typeof pe>"u"||ve.name!=="ErrnoError")throw ve;return ve.Pa}},k:Uc};function ma(){function c(){if(i.calledRun=!0,!F){if(!i.noFSInit&&!_c){var u,m;_c=!0,u??=i.stdin,m??=i.stdout,f??=i.stderr,u?Yt("stdin",u):ra("/dev/tty","/dev/stdin"),m?Yt("stdout",null,m):ra("/dev/tty","/dev/stdout"),f?Yt("stderr",null,f):ra("/dev/tty1","/dev/stderr"),Gs("/dev/stdin",0),Gs("/dev/stdout",1),Gs("/dev/stderr",1)}if(pa.N(),bc=!1,i.onRuntimeInitialized?.(),i.postRun)for(typeof i.postRun=="function"&&(i.postRun=[i.postRun]);i.postRun.length;){var f=i.postRun.shift();Qr.push(f)}Os(Qr)}}if(0<it)Fs=ma;else{if(i.preRun)for(typeof i.preRun=="function"&&(i.preRun=[i.preRun]);i.preRun.length;)yn();Os(zo),0<it?Fs=ma:i.setStatus?(i.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>i.setStatus(""),1),c()},1)):c()}}var pa;return(async function(){function c(m){return m=pa=m.exports,i._sqlite3_free=m.P,i._sqlite3_value_text=m.Q,i._sqlite3_prepare_v2=m.R,i._sqlite3_step=m.S,i._sqlite3_reset=m.T,i._sqlite3_exec=m.U,i._sqlite3_finalize=m.V,i._sqlite3_column_name=m.W,i._sqlite3_column_text=m.X,i._sqlite3_column_type=m.Y,i._sqlite3_errmsg=m.Z,i._sqlite3_clear_bindings=m._,i._sqlite3_value_blob=m.$,i._sqlite3_value_bytes=m.aa,i._sqlite3_value_double=m.ba,i._sqlite3_value_int=m.ca,i._sqlite3_value_type=m.da,i._sqlite3_result_blob=m.ea,i._sqlite3_result_double=m.fa,i._sqlite3_result_error=m.ga,i._sqlite3_result_int=m.ha,i._sqlite3_result_int64=m.ia,i._sqlite3_result_null=m.ja,i._sqlite3_result_text=m.ka,i._sqlite3_aggregate_context=m.la,i._sqlite3_column_count=m.ma,i._sqlite3_data_count=m.na,i._sqlite3_column_blob=m.oa,i._sqlite3_column_bytes=m.pa,i._sqlite3_column_double=m.qa,i._sqlite3_bind_blob=m.ra,i._sqlite3_bind_double=m.sa,i._sqlite3_bind_int=m.ta,i._sqlite3_bind_text=m.ua,i._sqlite3_bind_parameter_index=m.va,i._sqlite3_sql=m.wa,i._sqlite3_normalized_sql=m.xa,i._sqlite3_changes=m.ya,i._sqlite3_close_v2=m.za,i._sqlite3_create_function_v2=m.Aa,i._sqlite3_update_hook=m.Ba,i._sqlite3_open=m.Ca,Xo=i._malloc=m.Da,Sn=i._free=m.Ea,i._RegisterExtensionFunctions=m.Fa,Lc=m.Ga,jc=m.Ha,Tn=m.Ia,_s=m.Ja,wn=m.Ka,Zo=m.M,Xt=m.O,hn(),it--,i.monitorRunDependencies?.(it),it==0&&Fs&&(m=Fs,Fs=null,m()),pa}it++,i.monitorRunDependencies?.(it);var u={a:Ng};return i.instantiateWasm?new Promise(m=>{i.instantiateWasm(u,(f,_)=>{m(c(f,_))})}):(At??=i.locateFile?i.locateFile("sql-wasm.wasm",h):h+"sql-wasm.wasm",c((await Yr(u)).instance))})(),ma(),s}),mi)};typeof gi=="object"&&typeof Ss=="object"?(Ss.exports=pi,Ss.exports.default=pi):typeof define=="function"&&define.amd?define([],function(){return pi}):typeof gi=="object"&&(gi.Module=pi)});var Ai=we(Ot=>{"use strict";Object.defineProperty(Ot,"__esModule",{value:!0});Ot.utf8Count=Kh;Ot.utf8EncodeJs=Gu;Ot.utf8EncodeTE=Bu;Ot.utf8Encode=Qh;Ot.utf8DecodeJs=qu;Ot.utf8DecodeTD=zu;Ot.utf8Decode=ty;function Kh(n){let e=n.length,t=0,s=0;for(;s<e;){let o=n.charCodeAt(s++);if((o&4294967168)===0){t++;continue}else if((o&4294965248)===0)t+=2;else{if(o>=55296&&o<=56319&&s<e){let i=n.charCodeAt(s);(i&64512)===56320&&(++s,o=((o&1023)<<10)+(i&1023)+65536)}(o&4294901760)===0?t+=3:t+=4}}return t}function Gu(n,e,t){let s=n.length,o=t,i=0;for(;i<s;){let r=n.charCodeAt(i++);if((r&4294967168)===0){e[o++]=r;continue}else if((r&4294965248)===0)e[o++]=r>>6&31|192;else{if(r>=55296&&r<=56319&&i<s){let a=n.charCodeAt(i);(a&64512)===56320&&(++i,r=((r&1023)<<10)+(a&1023)+65536)}(r&4294901760)===0?(e[o++]=r>>12&15|224,e[o++]=r>>6&63|128):(e[o++]=r>>18&7|240,e[o++]=r>>12&63|128,e[o++]=r>>6&63|128)}e[o++]=r&63|128}}var Vh=new TextEncoder,Yh=50;function Bu(n,e,t){Vh.encodeInto(n,e.subarray(t))}function Qh(n,e,t){n.length>Yh?Bu(n,e,t):Gu(n,e,t)}var Xh=4096;function qu(n,e,t){let s=e,o=s+t,i=[],r="";for(;s<o;){let a=n[s++];if((a&128)===0)i.push(a);else if((a&224)===192){let l=n[s++]&63;i.push((a&31)<<6|l)}else if((a&240)===224){let l=n[s++]&63,d=n[s++]&63;i.push((a&31)<<12|l<<6|d)}else if((a&248)===240){let l=n[s++]&63,d=n[s++]&63,p=n[s++]&63,g=(a&7)<<18|l<<12|d<<6|p;g>65535&&(g-=65536,i.push(g>>>10&1023|55296),g=56320|g&1023),i.push(g)}else i.push(a);i.length>=Xh&&(r+=String.fromCharCode(...i),i.length=0)}return i.length>0&&(r+=String.fromCharCode(...i)),r}var Zh=new TextDecoder,ey=200;function zu(n,e,t){let s=n.subarray(e,e+t);return Zh.decode(s)}function ty(n,e,t){return t>ey?zu(n,e,t):qu(n,e,t)}});var Na=we(xi=>{"use strict";Object.defineProperty(xi,"__esModule",{value:!0});xi.ExtData=void 0;var Fa=class{type;data;constructor(e,t){this.type=e,this.data=t}};xi.ExtData=Fa});var Ei=we(Di=>{"use strict";Object.defineProperty(Di,"__esModule",{value:!0});Di.DecodeError=void 0;var La=class n extends Error{constructor(e){super(e);let t=Object.create(n.prototype);Object.setPrototypeOf(this,t),Object.defineProperty(this,"name",{configurable:!0,enumerable:!1,value:n.name})}};Di.DecodeError=La});var Ri=we(es=>{"use strict";Object.defineProperty(es,"__esModule",{value:!0});es.UINT32_MAX=void 0;es.setUint64=sy;es.setInt64=ny;es.getInt64=oy;es.getUint64=iy;es.UINT32_MAX=4294967295;function sy(n,e,t){let s=t/4294967296,o=t;n.setUint32(e,s),n.setUint32(e+4,o)}function ny(n,e,t){let s=Math.floor(t/4294967296),o=t;n.setUint32(e,s),n.setUint32(e+4,o)}function oy(n,e){let t=n.getInt32(e),s=n.getUint32(e+4);return t*4294967296+s}function iy(n,e){let t=n.getUint32(e),s=n.getUint32(e+4);return t*4294967296+s}});var ja=we(Ze=>{"use strict";Object.defineProperty(Ze,"__esModule",{value:!0});Ze.timestampExtension=Ze.EXT_TIMESTAMP=void 0;Ze.encodeTimeSpecToTimestamp=$u;Ze.encodeDateToTimeSpec=Hu;Ze.encodeTimestampExtension=Ju;Ze.decodeTimestampToTimeSpec=Ku;Ze.decodeTimestampExtension=Vu;var ry=Ei(),Wu=Ri();Ze.EXT_TIMESTAMP=-1;var ay=4294967296-1,ly=17179869184-1;function $u({sec:n,nsec:e}){if(n>=0&&e>=0&&n<=ly)if(e===0&&n<=ay){let t=new Uint8Array(4);return new DataView(t.buffer).setUint32(0,n),t}else{let t=n/4294967296,s=n&4294967295,o=new Uint8Array(8),i=new DataView(o.buffer);return i.setUint32(0,e<<2|t&3),i.setUint32(4,s),o}else{let t=new Uint8Array(12),s=new DataView(t.buffer);return s.setUint32(0,e),(0,Wu.setInt64)(s,4,n),t}}function Hu(n){let e=n.getTime(),t=Math.floor(e/1e3),s=(e-t*1e3)*1e6,o=Math.floor(s/1e9);return{sec:t+o,nsec:s-o*1e9}}function Ju(n){if(n instanceof Date){let e=Hu(n);return $u(e)}else return null}function Ku(n){let e=new DataView(n.buffer,n.byteOffset,n.byteLength);switch(n.byteLength){case 4:return{sec:e.getUint32(0),nsec:0};case 8:{let t=e.getUint32(0),s=e.getUint32(4),o=(t&3)*4294967296+s,i=t>>>2;return{sec:o,nsec:i}}case 12:{let t=(0,Wu.getInt64)(e,4),s=e.getUint32(0);return{sec:t,nsec:s}}default:throw new ry.DecodeError(`Unrecognized data size for timestamp (expected 4, 8, or 12): ${n.length}`)}}function Vu(n){let e=Ku(n);return new Date(e.sec*1e3+e.nsec/1e6)}Ze.timestampExtension={type:Ze.EXT_TIMESTAMP,encode:Ju,decode:Vu}});var Oi=we(Ui=>{"use strict";Object.defineProperty(Ui,"__esModule",{value:!0});Ui.ExtensionCodec=void 0;var Ii=Na(),cy=ja(),Ga=class n{static defaultCodec=new n;__brand;builtInEncoders=[];builtInDecoders=[];encoders=[];decoders=[];constructor(){this.register(cy.timestampExtension)}register({type:e,encode:t,decode:s}){if(e>=0)this.encoders[e]=t,this.decoders[e]=s;else{let o=-1-e;this.builtInEncoders[o]=t,this.builtInDecoders[o]=s}}tryToEncode(e,t){for(let s=0;s<this.builtInEncoders.length;s++){let o=this.builtInEncoders[s];if(o!=null){let i=o(e,t);if(i!=null){let r=-1-s;return new Ii.ExtData(r,i)}}}for(let s=0;s<this.encoders.length;s++){let o=this.encoders[s];if(o!=null){let i=o(e,t);if(i!=null){let r=s;return new Ii.ExtData(r,i)}}}return e instanceof Ii.ExtData?e:null}decode(e,t,s){let o=t<0?this.builtInDecoders[-1-t]:this.decoders[t];return o?o(e,t,s):new Ii.ExtData(t,e)}};Ui.ExtensionCodec=Ga});var qa=we(Ba=>{"use strict";Object.defineProperty(Ba,"__esModule",{value:!0});Ba.ensureUint8Array=dy;function uy(n){return n instanceof ArrayBuffer||typeof SharedArrayBuffer<"u"&&n instanceof SharedArrayBuffer}function dy(n){return n instanceof Uint8Array?n:ArrayBuffer.isView(n)?new Uint8Array(n.buffer,n.byteOffset,n.byteLength):uy(n)?new Uint8Array(n):Uint8Array.from(n)}});var Wa=we(kt=>{"use strict";Object.defineProperty(kt,"__esModule",{value:!0});kt.Encoder=kt.DEFAULT_INITIAL_BUFFER_SIZE=kt.DEFAULT_MAX_DEPTH=void 0;var Yu=Ai(),my=Oi(),Qu=Ri(),py=qa();kt.DEFAULT_MAX_DEPTH=100;kt.DEFAULT_INITIAL_BUFFER_SIZE=2048;var za=class n{extensionCodec;context;useBigInt64;maxDepth;initialBufferSize;sortKeys;forceFloat32;ignoreUndefined;forceIntegerToFloat;pos;view;bytes;entered=!1;constructor(e){this.extensionCodec=e?.extensionCodec??my.ExtensionCodec.defaultCodec,this.context=e?.context,this.useBigInt64=e?.useBigInt64??!1,this.maxDepth=e?.maxDepth??kt.DEFAULT_MAX_DEPTH,this.initialBufferSize=e?.initialBufferSize??kt.DEFAULT_INITIAL_BUFFER_SIZE,this.sortKeys=e?.sortKeys??!1,this.forceFloat32=e?.forceFloat32??!1,this.ignoreUndefined=e?.ignoreUndefined??!1,this.forceIntegerToFloat=e?.forceIntegerToFloat??!1,this.pos=0,this.view=new DataView(new ArrayBuffer(this.initialBufferSize)),this.bytes=new Uint8Array(this.view.buffer)}clone(){return new n({extensionCodec:this.extensionCodec,context:this.context,useBigInt64:this.useBigInt64,maxDepth:this.maxDepth,initialBufferSize:this.initialBufferSize,sortKeys:this.sortKeys,forceFloat32:this.forceFloat32,ignoreUndefined:this.ignoreUndefined,forceIntegerToFloat:this.forceIntegerToFloat})}reinitializeState(){this.pos=0}encodeSharedRef(e){if(this.entered)return this.clone().encodeSharedRef(e);try{return this.entered=!0,this.reinitializeState(),this.doEncode(e,1),this.bytes.subarray(0,this.pos)}finally{this.entered=!1}}encode(e){if(this.entered)return this.clone().encode(e);try{return this.entered=!0,this.reinitializeState(),this.doEncode(e,1),this.bytes.slice(0,this.pos)}finally{this.entered=!1}}doEncode(e,t){if(t>this.maxDepth)throw new Error(`Too deep objects in depth ${t}`);e==null?this.encodeNil():typeof e=="boolean"?this.encodeBoolean(e):typeof e=="number"?this.forceIntegerToFloat?this.encodeNumberAsFloat(e):this.encodeNumber(e):typeof e=="string"?this.encodeString(e):this.useBigInt64&&typeof e=="bigint"?this.encodeBigInt64(e):this.encodeObject(e,t)}ensureBufferSizeToWrite(e){let t=this.pos+e;this.view.byteLength<t&&this.resizeBuffer(t*2)}resizeBuffer(e){let t=new ArrayBuffer(e),s=new Uint8Array(t),o=new DataView(t);s.set(this.bytes),this.view=o,this.bytes=s}encodeNil(){this.writeU8(192)}encodeBoolean(e){e===!1?this.writeU8(194):this.writeU8(195)}encodeNumber(e){!this.forceIntegerToFloat&&Number.isSafeInteger(e)?e>=0?e<128?this.writeU8(e):e<256?(this.writeU8(204),this.writeU8(e)):e<65536?(this.writeU8(205),this.writeU16(e)):e<4294967296?(this.writeU8(206),this.writeU32(e)):this.useBigInt64?this.encodeNumberAsFloat(e):(this.writeU8(207),this.writeU64(e)):e>=-32?this.writeU8(224|e+32):e>=-128?(this.writeU8(208),this.writeI8(e)):e>=-32768?(this.writeU8(209),this.writeI16(e)):e>=-2147483648?(this.writeU8(210),this.writeI32(e)):this.useBigInt64?this.encodeNumberAsFloat(e):(this.writeU8(211),this.writeI64(e)):this.encodeNumberAsFloat(e)}encodeNumberAsFloat(e){this.forceFloat32?(this.writeU8(202),this.writeF32(e)):(this.writeU8(203),this.writeF64(e))}encodeBigInt64(e){e>=BigInt(0)?(this.writeU8(207),this.writeBigUint64(e)):(this.writeU8(211),this.writeBigInt64(e))}writeStringHeader(e){if(e<32)this.writeU8(160+e);else if(e<256)this.writeU8(217),this.writeU8(e);else if(e<65536)this.writeU8(218),this.writeU16(e);else if(e<4294967296)this.writeU8(219),this.writeU32(e);else throw new Error(`Too long string: ${e} bytes in UTF-8`)}encodeString(e){let s=(0,Yu.utf8Count)(e);this.ensureBufferSizeToWrite(5+s),this.writeStringHeader(s),(0,Yu.utf8Encode)(e,this.bytes,this.pos),this.pos+=s}encodeObject(e,t){let s=this.extensionCodec.tryToEncode(e,this.context);if(s!=null)this.encodeExtension(s);else if(Array.isArray(e))this.encodeArray(e,t);else if(ArrayBuffer.isView(e))this.encodeBinary(e);else if(typeof e=="object")this.encodeMap(e,t);else throw new Error(`Unrecognized object: ${Object.prototype.toString.apply(e)}`)}encodeBinary(e){let t=e.byteLength;if(t<256)this.writeU8(196),this.writeU8(t);else if(t<65536)this.writeU8(197),this.writeU16(t);else if(t<4294967296)this.writeU8(198),this.writeU32(t);else throw new Error(`Too large binary: ${t}`);let s=(0,py.ensureUint8Array)(e);this.writeU8a(s)}encodeArray(e,t){let s=e.length;if(s<16)this.writeU8(144+s);else if(s<65536)this.writeU8(220),this.writeU16(s);else if(s<4294967296)this.writeU8(221),this.writeU32(s);else throw new Error(`Too large array: ${s}`);for(let o of e)this.doEncode(o,t+1)}countWithoutUndefined(e,t){let s=0;for(let o of t)e[o]!==void 0&&s++;return s}encodeMap(e,t){let s=Object.keys(e);this.sortKeys&&s.sort();let o=this.ignoreUndefined?this.countWithoutUndefined(e,s):s.length;if(o<16)this.writeU8(128+o);else if(o<65536)this.writeU8(222),this.writeU16(o);else if(o<4294967296)this.writeU8(223),this.writeU32(o);else throw new Error(`Too large map object: ${o}`);for(let i of s){let r=e[i];this.ignoreUndefined&&r===void 0||(this.encodeString(i),this.doEncode(r,t+1))}}encodeExtension(e){if(typeof e.data=="function"){let s=e.data(this.pos+6),o=s.length;if(o>=4294967296)throw new Error(`Too large extension object: ${o}`);this.writeU8(201),this.writeU32(o),this.writeI8(e.type),this.writeU8a(s);return}let t=e.data.length;if(t===1)this.writeU8(212);else if(t===2)this.writeU8(213);else if(t===4)this.writeU8(214);else if(t===8)this.writeU8(215);else if(t===16)this.writeU8(216);else if(t<256)this.writeU8(199),this.writeU8(t);else if(t<65536)this.writeU8(200),this.writeU16(t);else if(t<4294967296)this.writeU8(201),this.writeU32(t);else throw new Error(`Too large extension object: ${t}`);this.writeI8(e.type),this.writeU8a(e.data)}writeU8(e){this.ensureBufferSizeToWrite(1),this.view.setUint8(this.pos,e),this.pos++}writeU8a(e){let t=e.length;this.ensureBufferSizeToWrite(t),this.bytes.set(e,this.pos),this.pos+=t}writeI8(e){this.ensureBufferSizeToWrite(1),this.view.setInt8(this.pos,e),this.pos++}writeU16(e){this.ensureBufferSizeToWrite(2),this.view.setUint16(this.pos,e),this.pos+=2}writeI16(e){this.ensureBufferSizeToWrite(2),this.view.setInt16(this.pos,e),this.pos+=2}writeU32(e){this.ensureBufferSizeToWrite(4),this.view.setUint32(this.pos,e),this.pos+=4}writeI32(e){this.ensureBufferSizeToWrite(4),this.view.setInt32(this.pos,e),this.pos+=4}writeF32(e){this.ensureBufferSizeToWrite(4),this.view.setFloat32(this.pos,e),this.pos+=4}writeF64(e){this.ensureBufferSizeToWrite(8),this.view.setFloat64(this.pos,e),this.pos+=8}writeU64(e){this.ensureBufferSizeToWrite(8),(0,Qu.setUint64)(this.view,this.pos,e),this.pos+=8}writeI64(e){this.ensureBufferSizeToWrite(8),(0,Qu.setInt64)(this.view,this.pos,e),this.pos+=8}writeBigUint64(e){this.ensureBufferSizeToWrite(8),this.view.setBigUint64(this.pos,e),this.pos+=8}writeBigInt64(e){this.ensureBufferSizeToWrite(8),this.view.setBigInt64(this.pos,e),this.pos+=8}};kt.Encoder=za});var Xu=we($a=>{"use strict";Object.defineProperty($a,"__esModule",{value:!0});$a.encode=fy;var gy=Wa();function fy(n,e){return new gy.Encoder(e).encodeSharedRef(n)}});var Zu=we(Ha=>{"use strict";Object.defineProperty(Ha,"__esModule",{value:!0});Ha.prettyByte=hy;function hy(n){return`${n<0?"-":""}0x${Math.abs(n).toString(16).padStart(2,"0")}`}});var ed=we(Fi=>{"use strict";Object.defineProperty(Fi,"__esModule",{value:!0});Fi.CachedKeyDecoder=void 0;var yy=Ai(),_y=16,by=16,Ja=class{hit=0;miss=0;caches;maxKeyLength;maxLengthPerKey;constructor(e=_y,t=by){this.maxKeyLength=e,this.maxLengthPerKey=t,this.caches=[];for(let s=0;s<this.maxKeyLength;s++)this.caches.push([])}canBeCached(e){return e>0&&e<=this.maxKeyLength}find(e,t,s){let o=this.caches[s-1];e:for(let i of o){let r=i.bytes;for(let a=0;a<s;a++)if(r[a]!==e[t+a])continue e;return i.str}return null}store(e,t){let s=this.caches[e.length-1],o={bytes:e,str:t};s.length>=this.maxLengthPerKey?s[Math.random()*s.length|0]=o:s.push(o)}decode(e,t,s){let o=this.find(e,t,s);if(o!=null)return this.hit++,o;this.miss++;let i=(0,yy.utf8DecodeJs)(e,t,s),r=Uint8Array.prototype.slice.call(e,t,t+s);return this.store(r,i),i}};Fi.CachedKeyDecoder=Ja});var Li=we(Ni=>{"use strict";Object.defineProperty(Ni,"__esModule",{value:!0});Ni.Decoder=void 0;var Ka=Zu(),Cy=Oi(),As=Ri(),ky=Ai(),td=qa(),Sy=ed(),Ft=Ei(),Va="array",Hn="map_key",nd="map_value",Ty=n=>{if(typeof n=="string"||typeof n=="number")return n;throw new Ft.DecodeError("The type of key must be string or number but "+typeof n)},Ya=class{stack=[];stackHeadPosition=-1;get length(){return this.stackHeadPosition+1}top(){return this.stack[this.stackHeadPosition]}pushArrayState(e){let t=this.getUninitializedStateFromPool();t.type=Va,t.position=0,t.size=e,t.array=new Array(e)}pushMapState(e){let t=this.getUninitializedStateFromPool();t.type=Hn,t.readCount=0,t.size=e,t.map={}}getUninitializedStateFromPool(){if(this.stackHeadPosition++,this.stackHeadPosition===this.stack.length){let e={type:void 0,size:0,array:void 0,position:0,readCount:0,map:void 0,key:null};this.stack.push(e)}return this.stack[this.stackHeadPosition]}release(e){if(this.stack[this.stackHeadPosition]!==e)throw new Error("Invalid stack state. Released state is not on top of the stack.");if(e.type===Va){let s=e;s.size=0,s.array=void 0,s.position=0,s.type=void 0}if(e.type===Hn||e.type===nd){let s=e;s.size=0,s.map=void 0,s.readCount=0,s.type=void 0}this.stackHeadPosition--}reset(){this.stack.length=0,this.stackHeadPosition=-1}},$n=-1,Xa=new DataView(new ArrayBuffer(0)),wy=new Uint8Array(Xa.buffer);try{Xa.getInt8(0)}catch(n){if(!(n instanceof RangeError))throw new Error("This module is not supported in the current JavaScript engine because DataView does not throw RangeError on out-of-bounds access")}var sd=new RangeError("Insufficient data"),My=new Sy.CachedKeyDecoder,Qa=class n{extensionCodec;context;useBigInt64;rawStrings;maxStrLength;maxBinLength;maxArrayLength;maxMapLength;maxExtLength;keyDecoder;mapKeyConverter;totalPos=0;pos=0;view=Xa;bytes=wy;headByte=$n;stack=new Ya;entered=!1;constructor(e){this.extensionCodec=e?.extensionCodec??Cy.ExtensionCodec.defaultCodec,this.context=e?.context,this.useBigInt64=e?.useBigInt64??!1,this.rawStrings=e?.rawStrings??!1,this.maxStrLength=e?.maxStrLength??As.UINT32_MAX,this.maxBinLength=e?.maxBinLength??As.UINT32_MAX,this.maxArrayLength=e?.maxArrayLength??As.UINT32_MAX,this.maxMapLength=e?.maxMapLength??As.UINT32_MAX,this.maxExtLength=e?.maxExtLength??As.UINT32_MAX,this.keyDecoder=e?.keyDecoder!==void 0?e.keyDecoder:My,this.mapKeyConverter=e?.mapKeyConverter??Ty}clone(){return new n({extensionCodec:this.extensionCodec,context:this.context,useBigInt64:this.useBigInt64,rawStrings:this.rawStrings,maxStrLength:this.maxStrLength,maxBinLength:this.maxBinLength,maxArrayLength:this.maxArrayLength,maxMapLength:this.maxMapLength,maxExtLength:this.maxExtLength,keyDecoder:this.keyDecoder})}reinitializeState(){this.totalPos=0,this.headByte=$n,this.stack.reset()}setBuffer(e){let t=(0,td.ensureUint8Array)(e);this.bytes=t,this.view=new DataView(t.buffer,t.byteOffset,t.byteLength),this.pos=0}appendBuffer(e){if(this.headByte===$n&&!this.hasRemaining(1))this.setBuffer(e);else{let t=this.bytes.subarray(this.pos),s=(0,td.ensureUint8Array)(e),o=new Uint8Array(t.length+s.length);o.set(t),o.set(s,t.length),this.setBuffer(o)}}hasRemaining(e){return this.view.byteLength-this.pos>=e}createExtraByteError(e){let{view:t,pos:s}=this;return new RangeError(`Extra ${t.byteLength-s} of ${t.byteLength} byte(s) found at buffer[${e}]`)}decode(e){if(this.entered)return this.clone().decode(e);try{this.entered=!0,this.reinitializeState(),this.setBuffer(e);let t=this.doDecodeSync();if(this.hasRemaining(1))throw this.createExtraByteError(this.pos);return t}finally{this.entered=!1}}*decodeMulti(e){if(this.entered){yield*this.clone().decodeMulti(e);return}try{for(this.entered=!0,this.reinitializeState(),this.setBuffer(e);this.hasRemaining(1);)yield this.doDecodeSync()}finally{this.entered=!1}}async decodeAsync(e){if(this.entered)return this.clone().decodeAsync(e);try{this.entered=!0;let t=!1,s;for await(let a of e){if(t)throw this.entered=!1,this.createExtraByteError(this.totalPos);this.appendBuffer(a);try{s=this.doDecodeSync(),t=!0}catch(l){if(!(l instanceof RangeError))throw l}this.totalPos+=this.pos}if(t){if(this.hasRemaining(1))throw this.createExtraByteError(this.totalPos);return s}let{headByte:o,pos:i,totalPos:r}=this;throw new RangeError(`Insufficient data in parsing ${(0,Ka.prettyByte)(o)} at ${r} (${i} in the current buffer)`)}finally{this.entered=!1}}decodeArrayStream(e){return this.decodeMultiAsync(e,!0)}decodeStream(e){return this.decodeMultiAsync(e,!1)}async*decodeMultiAsync(e,t){if(this.entered){yield*this.clone().decodeMultiAsync(e,t);return}try{this.entered=!0;let s=t,o=-1;for await(let i of e){if(t&&o===0)throw this.createExtraByteError(this.totalPos);this.appendBuffer(i),s&&(o=this.readArraySize(),s=!1,this.complete());try{for(;yield this.doDecodeSync(),--o!==0;);}catch(r){if(!(r instanceof RangeError))throw r}this.totalPos+=this.pos}}finally{this.entered=!1}}doDecodeSync(){e:for(;;){let e=this.readHeadByte(),t;if(e>=224)t=e-256;else if(e<192)if(e<128)t=e;else if(e<144){let o=e-128;if(o!==0){this.pushMapState(o),this.complete();continue e}else t={}}else if(e<160){let o=e-144;if(o!==0){this.pushArrayState(o),this.complete();continue e}else t=[]}else{let o=e-160;t=this.decodeString(o,0)}else if(e===192)t=null;else if(e===194)t=!1;else if(e===195)t=!0;else if(e===202)t=this.readF32();else if(e===203)t=this.readF64();else if(e===204)t=this.readU8();else if(e===205)t=this.readU16();else if(e===206)t=this.readU32();else if(e===207)this.useBigInt64?t=this.readU64AsBigInt():t=this.readU64();else if(e===208)t=this.readI8();else if(e===209)t=this.readI16();else if(e===210)t=this.readI32();else if(e===211)this.useBigInt64?t=this.readI64AsBigInt():t=this.readI64();else if(e===217){let o=this.lookU8();t=this.decodeString(o,1)}else if(e===218){let o=this.lookU16();t=this.decodeString(o,2)}else if(e===219){let o=this.lookU32();t=this.decodeString(o,4)}else if(e===220){let o=this.readU16();if(o!==0){this.pushArrayState(o),this.complete();continue e}else t=[]}else if(e===221){let o=this.readU32();if(o!==0){this.pushArrayState(o),this.complete();continue e}else t=[]}else if(e===222){let o=this.readU16();if(o!==0){this.pushMapState(o),this.complete();continue e}else t={}}else if(e===223){let o=this.readU32();if(o!==0){this.pushMapState(o),this.complete();continue e}else t={}}else if(e===196){let o=this.lookU8();t=this.decodeBinary(o,1)}else if(e===197){let o=this.lookU16();t=this.decodeBinary(o,2)}else if(e===198){let o=this.lookU32();t=this.decodeBinary(o,4)}else if(e===212)t=this.decodeExtension(1,0);else if(e===213)t=this.decodeExtension(2,0);else if(e===214)t=this.decodeExtension(4,0);else if(e===215)t=this.decodeExtension(8,0);else if(e===216)t=this.decodeExtension(16,0);else if(e===199){let o=this.lookU8();t=this.decodeExtension(o,1)}else if(e===200){let o=this.lookU16();t=this.decodeExtension(o,2)}else if(e===201){let o=this.lookU32();t=this.decodeExtension(o,4)}else throw new Ft.DecodeError(`Unrecognized type byte: ${(0,Ka.prettyByte)(e)}`);this.complete();let s=this.stack;for(;s.length>0;){let o=s.top();if(o.type===Va)if(o.array[o.position]=t,o.position++,o.position===o.size)t=o.array,s.release(o);else continue e;else if(o.type===Hn){if(t==="__proto__")throw new Ft.DecodeError("The key __proto__ is not allowed");o.key=this.mapKeyConverter(t),o.type=nd;continue e}else if(o.map[o.key]=t,o.readCount++,o.readCount===o.size)t=o.map,s.release(o);else{o.key=null,o.type=Hn;continue e}}return t}}readHeadByte(){return this.headByte===$n&&(this.headByte=this.readU8()),this.headByte}complete(){this.headByte=$n}readArraySize(){let e=this.readHeadByte();switch(e){case 220:return this.readU16();case 221:return this.readU32();default:{if(e<160)return e-144;throw new Ft.DecodeError(`Unrecognized array type byte: ${(0,Ka.prettyByte)(e)}`)}}}pushMapState(e){if(e>this.maxMapLength)throw new Ft.DecodeError(`Max length exceeded: map length (${e}) > maxMapLengthLength (${this.maxMapLength})`);this.stack.pushMapState(e)}pushArrayState(e){if(e>this.maxArrayLength)throw new Ft.DecodeError(`Max length exceeded: array length (${e}) > maxArrayLength (${this.maxArrayLength})`);this.stack.pushArrayState(e)}decodeString(e,t){return!this.rawStrings||this.stateIsMapKey()?this.decodeUtf8String(e,t):this.decodeBinary(e,t)}decodeUtf8String(e,t){if(e>this.maxStrLength)throw new Ft.DecodeError(`Max length exceeded: UTF-8 byte length (${e}) > maxStrLength (${this.maxStrLength})`);if(this.bytes.byteLength<this.pos+t+e)throw sd;let s=this.pos+t,o;return this.stateIsMapKey()&&this.keyDecoder?.canBeCached(e)?o=this.keyDecoder.decode(this.bytes,s,e):o=(0,ky.utf8Decode)(this.bytes,s,e),this.pos+=t+e,o}stateIsMapKey(){return this.stack.length>0?this.stack.top().type===Hn:!1}decodeBinary(e,t){if(e>this.maxBinLength)throw new Ft.DecodeError(`Max length exceeded: bin length (${e}) > maxBinLength (${this.maxBinLength})`);if(!this.hasRemaining(e+t))throw sd;let s=this.pos+t,o=this.bytes.subarray(s,s+e);return this.pos+=t+e,o}decodeExtension(e,t){if(e>this.maxExtLength)throw new Ft.DecodeError(`Max length exceeded: ext length (${e}) > maxExtLength (${this.maxExtLength})`);let s=this.view.getInt8(this.pos+t),o=this.decodeBinary(e,t+1);return this.extensionCodec.decode(o,s,this.context)}lookU8(){return this.view.getUint8(this.pos)}lookU16(){return this.view.getUint16(this.pos)}lookU32(){return this.view.getUint32(this.pos)}readU8(){let e=this.view.getUint8(this.pos);return this.pos++,e}readI8(){let e=this.view.getInt8(this.pos);return this.pos++,e}readU16(){let e=this.view.getUint16(this.pos);return this.pos+=2,e}readI16(){let e=this.view.getInt16(this.pos);return this.pos+=2,e}readU32(){let e=this.view.getUint32(this.pos);return this.pos+=4,e}readI32(){let e=this.view.getInt32(this.pos);return this.pos+=4,e}readU64(){let e=(0,As.getUint64)(this.view,this.pos);return this.pos+=8,e}readI64(){let e=(0,As.getInt64)(this.view,this.pos);return this.pos+=8,e}readU64AsBigInt(){let e=this.view.getBigUint64(this.pos);return this.pos+=8,e}readI64AsBigInt(){let e=this.view.getBigInt64(this.pos);return this.pos+=8,e}readF32(){let e=this.view.getFloat32(this.pos);return this.pos+=4,e}readF64(){let e=this.view.getFloat64(this.pos);return this.pos+=8,e}};Ni.Decoder=Qa});var id=we(ji=>{"use strict";Object.defineProperty(ji,"__esModule",{value:!0});ji.decode=vy;ji.decodeMulti=Py;var od=Li();function vy(n,e){return new od.Decoder(e).decode(n)}function Py(n,e){return new od.Decoder(e).decodeMulti(n)}});var ld=we(Jn=>{"use strict";Object.defineProperty(Jn,"__esModule",{value:!0});Jn.isAsyncIterable=rd;Jn.asyncIterableFromStream=ad;Jn.ensureAsyncIterable=Ay;function rd(n){return n[Symbol.asyncIterator]!=null}async function*ad(n){let e=n.getReader();try{for(;;){let{done:t,value:s}=await e.read();if(t)return;yield s}}finally{e.releaseLock()}}function Ay(n){return rd(n)?n:ad(n)}});var cd=we(Kn=>{"use strict";Object.defineProperty(Kn,"__esModule",{value:!0});Kn.decodeAsync=xy;Kn.decodeArrayStream=Dy;Kn.decodeMultiStream=Ey;var Za=Li(),el=ld();async function xy(n,e){let t=(0,el.ensureAsyncIterable)(n);return new Za.Decoder(e).decodeAsync(t)}function Dy(n,e){let t=(0,el.ensureAsyncIterable)(n);return new Za.Decoder(e).decodeArrayStream(t)}function Ey(n,e){let t=(0,el.ensureAsyncIterable)(n);return new Za.Decoder(e).decodeStream(t)}});var sl=we(X=>{"use strict";Object.defineProperty(X,"__esModule",{value:!0});X.decodeTimestampExtension=X.encodeTimestampExtension=X.decodeTimestampToTimeSpec=X.encodeTimeSpecToTimestamp=X.encodeDateToTimeSpec=X.EXT_TIMESTAMP=X.ExtData=X.ExtensionCodec=X.Encoder=X.DecodeError=X.Decoder=X.decodeMultiStream=X.decodeArrayStream=X.decodeAsync=X.decodeMulti=X.decode=X.encode=void 0;var Ry=Xu();Object.defineProperty(X,"encode",{enumerable:!0,get:function(){return Ry.encode}});var ud=id();Object.defineProperty(X,"decode",{enumerable:!0,get:function(){return ud.decode}});Object.defineProperty(X,"decodeMulti",{enumerable:!0,get:function(){return ud.decodeMulti}});var tl=cd();Object.defineProperty(X,"decodeAsync",{enumerable:!0,get:function(){return tl.decodeAsync}});Object.defineProperty(X,"decodeArrayStream",{enumerable:!0,get:function(){return tl.decodeArrayStream}});Object.defineProperty(X,"decodeMultiStream",{enumerable:!0,get:function(){return tl.decodeMultiStream}});var Iy=Li();Object.defineProperty(X,"Decoder",{enumerable:!0,get:function(){return Iy.Decoder}});var Uy=Ei();Object.defineProperty(X,"DecodeError",{enumerable:!0,get:function(){return Uy.DecodeError}});var Oy=Wa();Object.defineProperty(X,"Encoder",{enumerable:!0,get:function(){return Oy.Encoder}});var Fy=Oi();Object.defineProperty(X,"ExtensionCodec",{enumerable:!0,get:function(){return Fy.ExtensionCodec}});var Ny=Na();Object.defineProperty(X,"ExtData",{enumerable:!0,get:function(){return Ny.ExtData}});var Qs=ja();Object.defineProperty(X,"EXT_TIMESTAMP",{enumerable:!0,get:function(){return Qs.EXT_TIMESTAMP}});Object.defineProperty(X,"encodeDateToTimeSpec",{enumerable:!0,get:function(){return Qs.encodeDateToTimeSpec}});Object.defineProperty(X,"encodeTimeSpecToTimestamp",{enumerable:!0,get:function(){return Qs.encodeTimeSpecToTimestamp}});Object.defineProperty(X,"decodeTimestampToTimeSpec",{enumerable:!0,get:function(){return Qs.decodeTimestampToTimeSpec}});Object.defineProperty(X,"encodeTimestampExtension",{enumerable:!0,get:function(){return Qs.encodeTimestampExtension}});Object.defineProperty(X,"decodeTimestampExtension",{enumerable:!0,get:function(){return Qs.decodeTimestampExtension}})});var Cg=we((TI,Gw)=>{Gw.exports={name:"@rajbos/ai-engineering-fluency",version:"0.6.1",description:"AI Engineering Fluency - CLI tool to analyze GitHub Copilot token usage from local session files",license:"MIT",author:"RobBos",repository:{type:"git",url:"git+https://github.com/rajbos/ai-engineering-fluency.git",directory:"cli"},keywords:["github-copilot","token-usage","copilot","cli","token-tracker"],bin:{"ai-engineering-fluency":"dist/cli.js"},files:["dist/**/*"],scripts:{build:"node esbuild.js","build:production":"node esbuild.js --production","bundle-exe":"pwsh -NoProfile -File bundle-exe.ps1",lint:"eslint src","check-types":"tsc --noEmit",test:"node dist/cli.js --help && node dist/cli.js --version && npm run test:unit","test:unit":'node esbuild.tests.js && node --test "out/test/*.test.js"'},devDependencies:{"@msgpack/msgpack":"^3.1.3","@types/node":"^26.0.0",chalk:"^6.0.0",commander:"^15.0.0",esbuild:"^0.28.0","sql.js":"^1.12.0",typescript:"^7.0.2"},engines:{node:">=22.14.0"}}});var Zt=class extends Error{constructor(e,t,s){super(s),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=t,this.exitCode=e,this.nestedError=void 0}},Cs=class extends Zt{constructor(e){super(1,"commander.invalidArgument",e),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};var vn=class{constructor(e,t){switch(this.description=t||"",this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,e[0]){case"<":this.required=!0,this._name=e.slice(1,-1);break;case"[":this.required=!1,this._name=e.slice(1,-1);break;default:this.required=!0,this._name=e;break}this._name.endsWith("...")&&(this.variadic=!0,this._name=this._name.slice(0,-3))}name(){return this._name}_collectValue(e,t){return t===this.defaultValue||!Array.isArray(t)?[e]:(t.push(e),t)}default(e,t){return this.defaultValue=e,this.defaultValueDescription=t,this}argParser(e){return this.parseArg=e,this}choices(e){return this.argChoices=e.slice(),this.parseArg=(t,s)=>{if(!this.argChoices.includes(t))throw new Cs(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._collectValue(t,s):t},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}};function ti(n){let e=n.name()+(n.variadic===!0?"...":"");return n.required?"<"+e+">":"["+e+"]"}var eu=require("node:events"),ni=S(require("node:child_process"),1),_t=S(require("node:path"),1),An=S(require("node:fs"),1),se=S(require("node:process"),1),tu=require("node:util");var Yc=require("node:util"),Pn=class{constructor(){this.helpWidth=void 0,this.minWidthToWrap=40,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}prepareContext(e){this.helpWidth=this.helpWidth??e.helpWidth??80}visibleCommands(e){let t=e.commands.filter(o=>!o._hidden),s=e._getHelpCommand();return s&&!s._hidden&&t.push(s),this.sortSubcommands&&t.sort((o,i)=>o.name().localeCompare(i.name())),t}compareOptions(e,t){let s=o=>o.short?o.short.replace(/^-/,""):o.long.replace(/^--/,"");return s(e).localeCompare(s(t))}visibleOptions(e){let t=e.options.filter(o=>!o.hidden),s=e._getHelpOption();if(s&&!s.hidden){let o=s.short&&e._findOption(s.short),i=s.long&&e._findOption(s.long);!o&&!i?t.push(s):s.long&&!i?t.push(e.createOption(s.long,s.description)):s.short&&!o&&t.push(e.createOption(s.short,s.description))}return this.sortOptions&&t.sort(this.compareOptions),t}visibleGlobalOptions(e){if(!this.showGlobalOptions)return[];let t=[];for(let s=e.parent;s;s=s.parent){let o=s.options.filter(i=>!i.hidden);t.push(...o)}return this.sortOptions&&t.sort(this.compareOptions),t}visibleArguments(e){return e._argsDescription&&e.registeredArguments.forEach(t=>{t.description=t.description||e._argsDescription[t.name()]||""}),e.registeredArguments.find(t=>t.description)?e.registeredArguments:[]}subcommandTerm(e){let t=e.registeredArguments.map(s=>ti(s)).join(" ");return e._name+(e._aliases[0]?"|"+e._aliases[0]:"")+(e.options.length?" [options]":"")+(t?" "+t:"")}optionTerm(e){return e.flags}argumentTerm(e){return e.name()}longestSubcommandTermLength(e,t){return t.visibleCommands(e).reduce((s,o)=>Math.max(s,this.displayWidth(t.styleSubcommandTerm(t.subcommandTerm(o)))),0)}longestOptionTermLength(e,t){return t.visibleOptions(e).reduce((s,o)=>Math.max(s,this.displayWidth(t.styleOptionTerm(t.optionTerm(o)))),0)}longestGlobalOptionTermLength(e,t){return t.visibleGlobalOptions(e).reduce((s,o)=>Math.max(s,this.displayWidth(t.styleOptionTerm(t.optionTerm(o)))),0)}longestArgumentTermLength(e,t){return t.visibleArguments(e).reduce((s,o)=>Math.max(s,this.displayWidth(t.styleArgumentTerm(t.argumentTerm(o)))),0)}commandUsage(e){let t=e._name;e._aliases[0]&&(t=t+"|"+e._aliases[0]);let s="";for(let o=e.parent;o;o=o.parent)s=o.name()+" "+s;return s+t+" "+e.usage()}commandDescription(e){return e.description()}subcommandDescription(e){return e.summary()||e.description()}optionDescription(e){let t=[];if(e.argChoices&&t.push(`choices: ${e.argChoices.map(s=>JSON.stringify(s)).join(", ")}`),e.defaultValue!==void 0&&(e.required||e.optional||e.isBoolean()&&typeof e.defaultValue=="boolean")&&t.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),e.presetArg!==void 0&&e.optional&&t.push(`preset: ${JSON.stringify(e.presetArg)}`),e.envVar!==void 0&&t.push(`env: ${e.envVar}`),t.length>0){let s=`(${t.join(", ")})`;return e.description?`${e.description} ${s}`:s}return e.description}argumentDescription(e){let t=[];if(e.argChoices&&t.push(`choices: ${e.argChoices.map(s=>JSON.stringify(s)).join(", ")}`),e.defaultValue!==void 0&&t.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),t.length>0){let s=`(${t.join(", ")})`;return e.description?`${e.description} ${s}`:s}return e.description}formatItemList(e,t,s){return t.length===0?[]:[s.styleTitle(e),...t,""]}groupItems(e,t,s){let o=new Map;return e.forEach(i=>{let r=s(i);o.has(r)||o.set(r,[])}),t.forEach(i=>{let r=s(i);o.has(r)||o.set(r,[]),o.get(r).push(i)}),o}formatHelp(e,t){let s=t.padWidth(e,t),o=t.helpWidth??80;function i(g,h){return t.formatItem(g,s,h,t)}let r=[`${t.styleTitle("Usage:")} ${t.styleUsage(t.commandUsage(e))}`,""],a=t.commandDescription(e);a.length>0&&(r=r.concat([t.boxWrap(t.styleCommandDescription(a),o),""]));let l=t.visibleArguments(e).map(g=>i(t.styleArgumentTerm(t.argumentTerm(g)),t.styleArgumentDescription(t.argumentDescription(g))));if(r=r.concat(this.formatItemList("Arguments:",l,t)),this.groupItems(e.options,t.visibleOptions(e),g=>g.helpGroupHeading??"Options:").forEach((g,h)=>{let y=g.map(b=>i(t.styleOptionTerm(t.optionTerm(b)),t.styleOptionDescription(t.optionDescription(b))));r=r.concat(this.formatItemList(h,y,t))}),t.showGlobalOptions){let g=t.visibleGlobalOptions(e).map(h=>i(t.styleOptionTerm(t.optionTerm(h)),t.styleOptionDescription(t.optionDescription(h))));r=r.concat(this.formatItemList("Global Options:",g,t))}return this.groupItems(e.commands,t.visibleCommands(e),g=>g.helpGroup()||"Commands:").forEach((g,h)=>{let y=g.map(b=>i(t.styleSubcommandTerm(t.subcommandTerm(b)),t.styleSubcommandDescription(t.subcommandDescription(b))));r=r.concat(this.formatItemList(h,y,t))}),r.join(`
|
|
4
|
+
`)}displayWidth(e){return(0,Yc.stripVTControlCharacters)(e).length}styleTitle(e){return e}styleUsage(e){return e.split(" ").map(t=>t==="[options]"?this.styleOptionText(t):t==="[command]"?this.styleSubcommandText(t):t[0]==="["||t[0]==="<"?this.styleArgumentText(t):this.styleCommandText(t)).join(" ")}styleCommandDescription(e){return this.styleDescriptionText(e)}styleOptionDescription(e){return this.styleDescriptionText(e)}styleSubcommandDescription(e){return this.styleDescriptionText(e)}styleArgumentDescription(e){return this.styleDescriptionText(e)}styleDescriptionText(e){return e}styleOptionTerm(e){return this.styleOptionText(e)}styleSubcommandTerm(e){return e.split(" ").map(t=>t==="[options]"?this.styleOptionText(t):t[0]==="["||t[0]==="<"?this.styleArgumentText(t):this.styleSubcommandText(t)).join(" ")}styleArgumentTerm(e){return this.styleArgumentText(e)}styleOptionText(e){return e}styleArgumentText(e){return e}styleSubcommandText(e){return e}styleCommandText(e){return e}padWidth(e,t){return Math.max(t.longestOptionTermLength(e,t),t.longestGlobalOptionTermLength(e,t),t.longestSubcommandTermLength(e,t),t.longestArgumentTermLength(e,t))}preformatted(e){return/\n[^\S\r\n]/.test(e)}formatItem(e,t,s,o){let r=" ".repeat(2);if(!s)return r+e;let a=e.padEnd(t+e.length-o.displayWidth(e)),l=2,p=(this.helpWidth??80)-t-l-2,g;return p<this.minWidthToWrap||o.preformatted(s)?g=s:g=o.boxWrap(s,p).replace(/\n/g,`
|
|
5
|
+
`+" ".repeat(t+l)),r+a+" ".repeat(l)+g.replace(/\n/g,`
|
|
6
|
+
${r}`)}boxWrap(e,t){if(t<this.minWidthToWrap)return e;let s=e.split(/\r\n|\n/),o=/[\s]*[^\s]+/g,i=[];return s.forEach(r=>{let a=r.match(o);if(a===null){i.push("");return}let l=[a.shift()],d=this.displayWidth(l[0]);a.forEach(p=>{let g=this.displayWidth(p);if(d+g<=t){l.push(p),d+=g;return}i.push(l.join(""));let h=p.trimStart();l=[h],d=this.displayWidth(h)}),i.push(l.join(""))}),i.join(`
|
|
7
|
+
`)}};var Bs=class{constructor(e,t){this.flags=e,this.description=t||"",this.required=e.includes("<"),this.optional=e.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(e),this.mandatory=!1;let s=_f(e);this.short=s.shortFlag,this.long=s.longFlag,this.negate=!1,this.long&&(this.negate=this.long.startsWith("--no-")),this.defaultValue=void 0,this.defaultValueDescription=void 0,this.presetArg=void 0,this.envVar=void 0,this.parseArg=void 0,this.hidden=!1,this.argChoices=void 0,this.conflictsWith=[],this.implied=void 0,this.helpGroupHeading=void 0}default(e,t){return this.defaultValue=e,this.defaultValueDescription=t,this}preset(e){return this.presetArg=e,this}conflicts(e){return this.conflictsWith=this.conflictsWith.concat(e),this}implies(e){let t=e;return typeof e=="string"&&(t={[e]:!0}),this.implied=Object.assign(this.implied||{},t),this}env(e){return this.envVar=e,this}argParser(e){return this.parseArg=e,this}makeOptionMandatory(e=!0){return this.mandatory=!!e,this}hideHelp(e=!0){return this.hidden=!!e,this}_collectValue(e,t){return t===this.defaultValue||!Array.isArray(t)?[e]:(t.push(e),t)}choices(e){return this.argChoices=e.slice(),this.parseArg=(t,s)=>{if(!this.argChoices.includes(t))throw new Cs(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._collectValue(t,s):t},this}name(){return this.long?this.long.replace(/^--/,""):this.short.replace(/^-/,"")}attributeName(){return this.negate?Qc(this.name().replace(/^no-/,"")):Qc(this.name())}helpGroup(e){return this.helpGroupHeading=e,this}is(e){return this.short===e||this.long===e}isBoolean(){return!this.required&&!this.optional&&!this.negate}},si=class{constructor(e){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,e.forEach(t=>{t.negate?this.negativeOptions.set(t.attributeName(),t):this.positiveOptions.set(t.attributeName(),t)}),this.negativeOptions.forEach((t,s)=>{this.positiveOptions.has(s)&&this.dualOptions.add(s)})}valueFromOption(e,t){let s=t.attributeName();if(!this.dualOptions.has(s))return!0;let o=this.negativeOptions.get(s).presetArg,i=o!==void 0?o:!1;return t.negate===(i===e)}};function Qc(n){return n.split("-").reduce((e,t)=>e+t[0].toUpperCase()+t.slice(1))}function _f(n){let e,t,s=/^-[^-]$/,o=/^--[^-]/,i=n.split(/[ |,]+/).concat("guard");if(s.test(i[0])&&(e=i.shift()),o.test(i[0])&&(t=i.shift()),!e&&s.test(i[0])&&(e=i.shift()),!e&&o.test(i[0])&&(e=t,t=i.shift()),i[0].startsWith("-")){let r=i[0],a=`option creation failed due to '${r}' in option flags '${n}'`;throw/^-[^-][^-]/.test(r)?new Error(`${a}
|
|
8
8
|
- a short flag is a single dash and a single character
|
|
9
9
|
- either use a single dash and a single character (for a short flag)
|
|
10
10
|
- or use a double dash for a long option (and can have two, like '--ws, --workspace')`):s.test(r)?new Error(`${a}
|
|
11
11
|
- too many short flags`):o.test(r)?new Error(`${a}
|
|
12
12
|
- too many long flags`):new Error(`${a}
|
|
13
|
-
- unrecognised flag format`)}if(e===void 0&&t===void 0)throw new Error(`option creation failed due to no flags found in '${n}'.`);return{shortFlag:e,longFlag:t}}function
|
|
13
|
+
- unrecognised flag format`)}if(e===void 0&&t===void 0)throw new Error(`option creation failed due to no flags found in '${n}'.`);return{shortFlag:e,longFlag:t}}function bf(n,e){if(Math.abs(n.length-e.length)>3)return Math.max(n.length,e.length);let t=[];for(let s=0;s<=n.length;s++)t[s]=[s];for(let s=0;s<=e.length;s++)t[0][s]=s;for(let s=1;s<=e.length;s++)for(let o=1;o<=n.length;o++){let i;n[o-1]===e[s-1]?i=0:i=1,t[o][s]=Math.min(t[o-1][s]+1,t[o][s-1]+1,t[o-1][s-1]+i),o>1&&s>1&&n[o-1]===e[s-2]&&n[o-2]===e[s-1]&&(t[o][s]=Math.min(t[o][s],t[o-2][s-2]+1))}return t[n.length][e.length]}function ga(n,e){if(!e||e.length===0)return"";e=Array.from(new Set(e));let t=n.startsWith("--");t&&(n=n.slice(2),e=e.map(r=>r.slice(2)));let s=[],o=3,i=.4;return e.forEach(r=>{if(r.length<=1)return;let a=bf(n,r),l=Math.max(n.length,r.length);(l-a)/l>i&&(a<o?(o=a,s=[r]):a===o&&s.push(r))}),s.sort((r,a)=>r.localeCompare(a)),t&&(s=s.map(r=>`--${r}`)),s.length>1?`
|
|
14
14
|
(Did you mean one of ${s.join(", ")}?)`:s.length===1?`
|
|
15
|
-
(Did you mean ${s[0]}?)`:""}var ce=class n extends
|
|
16
|
-
- specify the name in Command constructor or using .name()`);return t=t||{},t.isDefault&&(this._defaultCommandName=e._name),(t.noHelp||t.hidden)&&(e._hidden=!0),this._registerCommand(e),e.parent=this,e._checkForBrokenPassThrough(),this}createArgument(e,t){return new
|
|
17
|
-
Expecting one of '${s.join("', '")}'`);return this._lifeCycleHooks[e]?this._lifeCycleHooks[e].push(t):this._lifeCycleHooks[e]=[t],this}exitOverride(e){return e?this._exitCallback=e:this._exitCallback=t=>{if(t.code!=="commander.executeSubCommandAsync")throw t},this}_exit(e,t,s){this._exitCallback&&this._exitCallback(new
|
|
18
|
-
- already used by option '${t.flags}'`)}this._initOptionGroup(e),this.options.push(e)}_registerCommand(e){let t=o=>[o.name()].concat(o.aliases()),s=t(e).find(o=>this._findCommand(o));if(s){let o=t(this._findCommand(s)).join("|"),i=t(e).join("|");throw new Error(`cannot add command '${i}' as already have command '${o}'`)}this._initCommandGroup(e),this.commands.push(e)}addOption(e){this._registerOption(e);let t=e.name(),s=e.attributeName();e.defaultValue!==void 0&&this.setOptionValueWithSource(s,e.defaultValue,"default");let o=(i,r,a)=>{i==null&&e.presetArg!==void 0&&(i=e.presetArg);let
|
|
19
|
-
- either make a new Command for each call to parse, or stop storing options as properties`);this._name=this._savedState._name,this._scriptPath=null,this.rawArgs=[],this._optionValues={...this._savedState._optionValues},this._optionValueSources={...this._savedState._optionValueSources},this.args=[],this.processedArgs=[]}_checkForMissingExecutable(e,t,s){if(
|
|
15
|
+
(Did you mean ${s[0]}?)`:""}var ce=class n extends eu.EventEmitter{constructor(e){super(),this.commands=[],this.options=[],this.parent=null,this._allowUnknownOption=!1,this._allowExcessArguments=!1,this.registeredArguments=[],this._args=this.registeredArguments,this.args=[],this.rawArgs=[],this.processedArgs=[],this._scriptPath=null,this._name=e||"",this._optionValues={},this._optionValueSources={},this._storeOptionsAsProperties=!1,this._actionHandler=null,this._executableHandler=!1,this._executableFile=null,this._executableDir=null,this._defaultCommandName=null,this._exitCallback=null,this._aliases=[],this._combineFlagAndOptionalValue=!0,this._description="",this._summary="",this._argsDescription=void 0,this._enablePositionalOptions=!1,this._passThroughOptions=!1,this._lifeCycleHooks={},this._showHelpAfterError=!1,this._showSuggestionAfterError=!0,this._savedState=null,this._outputConfiguration={writeOut:t=>se.default.stdout.write(t),writeErr:t=>se.default.stderr.write(t),outputError:(t,s)=>s(t),getOutHelpWidth:()=>se.default.stdout.isTTY?se.default.stdout.columns:void 0,getErrHelpWidth:()=>se.default.stderr.isTTY?se.default.stderr.columns:void 0,getOutHasColors:()=>Zc()??(se.default.stdout.isTTY&&se.default.stdout.hasColors?.()),getErrHasColors:()=>Zc()??(se.default.stderr.isTTY&&se.default.stderr.hasColors?.()),stripColor:t=>(0,tu.stripVTControlCharacters)(t)},this._hidden=!1,this._helpOption=void 0,this._addImplicitHelpCommand=void 0,this._helpCommand=void 0,this._helpConfiguration={},this._helpGroupHeading=void 0,this._defaultCommandGroup=void 0,this._defaultOptionGroup=void 0}copyInheritedSettings(e){return this._outputConfiguration=e._outputConfiguration,this._helpOption=e._helpOption,this._helpCommand=e._helpCommand,this._helpConfiguration=e._helpConfiguration,this._exitCallback=e._exitCallback,this._storeOptionsAsProperties=e._storeOptionsAsProperties,this._combineFlagAndOptionalValue=e._combineFlagAndOptionalValue,this._allowExcessArguments=e._allowExcessArguments,this._enablePositionalOptions=e._enablePositionalOptions,this._showHelpAfterError=e._showHelpAfterError,this._showSuggestionAfterError=e._showSuggestionAfterError,this}_getCommandAndAncestors(){let e=[];for(let t=this;t;t=t.parent)e.push(t);return e}command(e,t,s){let o=t,i=s;typeof o=="object"&&o!==null&&(i=o,o=null),i=i||{};let[,r,a]=e.match(/([^ ]+) *(.*)/),l=this.createCommand(r);return o&&(l.description(o),l._executableHandler=!0),i.isDefault&&(this._defaultCommandName=l._name),l._hidden=!!(i.noHelp||i.hidden),l._executableFile=i.executableFile||null,a&&l.arguments(a),this._registerCommand(l),l.parent=this,l.copyInheritedSettings(this),o?this:l}createCommand(e){return new n(e)}createHelp(){return Object.assign(new Pn,this.configureHelp())}configureHelp(e){return e===void 0?this._helpConfiguration:(this._helpConfiguration=e,this)}configureOutput(e){return e===void 0?this._outputConfiguration:(this._outputConfiguration={...this._outputConfiguration,...e},this)}showHelpAfterError(e=!0){return typeof e!="string"&&(e=!!e),this._showHelpAfterError=e,this}showSuggestionAfterError(e=!0){return this._showSuggestionAfterError=!!e,this}addCommand(e,t){if(!e._name)throw new Error(`Command passed to .addCommand() must have a name
|
|
16
|
+
- specify the name in Command constructor or using .name()`);return t=t||{},t.isDefault&&(this._defaultCommandName=e._name),(t.noHelp||t.hidden)&&(e._hidden=!0),this._registerCommand(e),e.parent=this,e._checkForBrokenPassThrough(),this}createArgument(e,t){return new vn(e,t)}argument(e,t,s,o){let i=this.createArgument(e,t);return typeof s=="function"?i.default(o).argParser(s):i.default(s),this.addArgument(i),this}arguments(e){return e.trim().split(/ +/).forEach(t=>{this.argument(t)}),this}addArgument(e){let t=this.registeredArguments.slice(-1)[0];if(t?.variadic)throw new Error(`only the last argument can be variadic '${t.name()}'`);if(e.required&&e.defaultValue!==void 0&&e.parseArg===void 0)throw new Error(`a default value for a required argument is never used: '${e.name()}'`);return this.registeredArguments.push(e),this}helpCommand(e,t){if(typeof e=="boolean")return this._addImplicitHelpCommand=e,e&&this._defaultCommandGroup&&this._initCommandGroup(this._getHelpCommand()),this;let s=e??"help [command]",[,o,i]=s.match(/([^ ]+) *(.*)/),r=t??"display help for command",a=this.createCommand(o);return a.helpOption(!1),i&&a.arguments(i),r&&a.description(r),this._addImplicitHelpCommand=!0,this._helpCommand=a,(e||t)&&this._initCommandGroup(a),this}addHelpCommand(e,t){return typeof e!="object"?(this.helpCommand(e,t),this):(this._addImplicitHelpCommand=!0,this._helpCommand=e,this._initCommandGroup(e),this)}_getHelpCommand(){return this._addImplicitHelpCommand??(this.commands.length&&!this._actionHandler&&!this._findCommand("help"))?(this._helpCommand===void 0&&this.helpCommand(void 0,void 0),this._helpCommand):null}hook(e,t){let s=["preSubcommand","preAction","postAction"];if(!s.includes(e))throw new Error(`Unexpected value for event passed to hook : '${e}'.
|
|
17
|
+
Expecting one of '${s.join("', '")}'`);return this._lifeCycleHooks[e]?this._lifeCycleHooks[e].push(t):this._lifeCycleHooks[e]=[t],this}exitOverride(e){return e?this._exitCallback=e:this._exitCallback=t=>{if(t.code!=="commander.executeSubCommandAsync")throw t},this}_exit(e,t,s){this._exitCallback&&this._exitCallback(new Zt(e,t,s)),se.default.exit(e)}action(e){let t=s=>{let o=this.registeredArguments.length,i=s.slice(0,o);return this._storeOptionsAsProperties?i[o]=this:i[o]=this.opts(),i.push(this),e.apply(this,i)};return this._actionHandler=t,this}createOption(e,t){return new Bs(e,t)}_callParseArg(e,t,s,o){try{return e.parseArg(t,s)}catch(i){if(i.code==="commander.invalidArgument"){let r=`${o} ${i.message}`;this.error(r,{exitCode:i.exitCode,code:i.code})}throw i}}_registerOption(e){let t=e.short&&this._findOption(e.short)||e.long&&this._findOption(e.long);if(t){let s=e.long&&this._findOption(e.long)?e.long:e.short;throw new Error(`Cannot add option '${e.flags}'${this._name&&` to command '${this._name}'`} due to conflicting flag '${s}'
|
|
18
|
+
- already used by option '${t.flags}'`)}this._initOptionGroup(e),this.options.push(e)}_registerCommand(e){let t=o=>[o.name()].concat(o.aliases()),s=t(e).find(o=>this._findCommand(o));if(s){let o=t(this._findCommand(s)).join("|"),i=t(e).join("|");throw new Error(`cannot add command '${i}' as already have command '${o}'`)}this._initCommandGroup(e),this.commands.push(e)}addOption(e){this._registerOption(e);let t=e.name(),s=e.attributeName();e.defaultValue!==void 0&&this.setOptionValueWithSource(s,e.defaultValue,"default");let o=(i,r,a)=>{i==null&&e.presetArg!==void 0&&(i=e.presetArg);let l=this.getOptionValue(s);i!==null&&e.parseArg?i=this._callParseArg(e,i,l,r):i!==null&&e.variadic&&(i=e._collectValue(i,l)),i==null&&(e.negate?i=!1:e.isBoolean()||e.optional?i=!0:i=""),this.setOptionValueWithSource(s,i,a)};return this.on("option:"+t,i=>{let r=`error: option '${e.flags}' argument '${i}' is invalid.`;o(i,r,"cli")}),e.envVar&&this.on("optionEnv:"+t,i=>{let r=`error: option '${e.flags}' value '${i}' from env '${e.envVar}' is invalid.`;o(i,r,"env")}),this}_optionEx(e,t,s,o,i){if(typeof t=="object"&&t instanceof Bs)throw new Error("To add an Option object use addOption() instead of option() or requiredOption()");let r=this.createOption(t,s);if(r.makeOptionMandatory(!!e.mandatory),typeof o=="function")r.default(i).argParser(o);else if(o instanceof RegExp){let a=o;o=(l,d)=>{let p=a.exec(l);return p?p[0]:d},r.default(i).argParser(o)}else r.default(o);return this.addOption(r)}option(e,t,s,o){return this._optionEx({},e,t,s,o)}requiredOption(e,t,s,o){return this._optionEx({mandatory:!0},e,t,s,o)}combineFlagAndOptionalValue(e=!0){return this._combineFlagAndOptionalValue=!!e,this}allowUnknownOption(e=!0){return this._allowUnknownOption=!!e,this}allowExcessArguments(e=!0){return this._allowExcessArguments=!!e,this}enablePositionalOptions(e=!0){return this._enablePositionalOptions=!!e,this}passThroughOptions(e=!0){return this._passThroughOptions=!!e,this._checkForBrokenPassThrough(),this}_checkForBrokenPassThrough(){if(this.parent&&this._passThroughOptions&&!this.parent._enablePositionalOptions)throw new Error(`passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`)}storeOptionsAsProperties(e=!0){if(this.options.length)throw new Error("call .storeOptionsAsProperties() before adding options");if(Object.keys(this._optionValues).length)throw new Error("call .storeOptionsAsProperties() before setting option values");return this._storeOptionsAsProperties=!!e,this}getOptionValue(e){return this._storeOptionsAsProperties?this[e]:this._optionValues[e]}setOptionValue(e,t){return this.setOptionValueWithSource(e,t,void 0)}setOptionValueWithSource(e,t,s){return this._storeOptionsAsProperties?this[e]=t:this._optionValues[e]=t,this._optionValueSources[e]=s,this}getOptionValueSource(e){return this._optionValueSources[e]}getOptionValueSourceWithGlobals(e){let t;return this._getCommandAndAncestors().forEach(s=>{s.getOptionValueSource(e)!==void 0&&(t=s.getOptionValueSource(e))}),t}_prepareUserArgs(e,t){if(e!==void 0&&!Array.isArray(e))throw new Error("first parameter to parse must be array or undefined");if(t=t||{},e===void 0&&t.from===void 0){se.default.versions?.electron&&(t.from="electron");let o=se.default.execArgv??[];(o.includes("-e")||o.includes("--eval")||o.includes("-p")||o.includes("--print"))&&(t.from="eval")}e===void 0&&(e=se.default.argv),this.rawArgs=e.slice();let s;switch(t.from){case void 0:case"node":this._scriptPath=e[1],s=e.slice(2);break;case"electron":se.default.defaultApp?(this._scriptPath=e[1],s=e.slice(2)):s=e.slice(1);break;case"user":s=e.slice(0);break;case"eval":s=e.slice(1);break;default:throw new Error(`unexpected parse option { from: '${t.from}' }`)}return!this._name&&this._scriptPath&&this.nameFromFilename(this._scriptPath),this._name=this._name||"program",s}parse(e,t){this._prepareForParse();let s=this._prepareUserArgs(e,t);return this._parseCommand([],s),this}async parseAsync(e,t){this._prepareForParse();let s=this._prepareUserArgs(e,t);return await this._parseCommand([],s),this}_prepareForParse(){this._savedState===null?(this.options.filter(e=>e.negate&&e.defaultValue===void 0&&this.getOptionValue(e.attributeName())===void 0).forEach(e=>{let t=e.long.replace(/^--no-/,"--");this._findOption(t)||this.setOptionValueWithSource(e.attributeName(),!0,"default")}),this.saveStateBeforeParse()):this.restoreStateBeforeParse()}saveStateBeforeParse(){this._savedState={_name:this._name,_optionValues:{...this._optionValues},_optionValueSources:{...this._optionValueSources}}}restoreStateBeforeParse(){if(this._storeOptionsAsProperties)throw new Error(`Can not call parse again when storeOptionsAsProperties is true.
|
|
19
|
+
- either make a new Command for each call to parse, or stop storing options as properties`);this._name=this._savedState._name,this._scriptPath=null,this.rawArgs=[],this._optionValues={...this._savedState._optionValues},this._optionValueSources={...this._savedState._optionValueSources},this.args=[],this.processedArgs=[]}_checkForMissingExecutable(e,t,s){if(An.default.existsSync(e))return;let o=t?`searched for local subcommand relative to directory '${t}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory",i=`'${e}' does not exist
|
|
20
20
|
- if '${s}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead
|
|
21
21
|
- if the default executable name is not suitable, use the executableFile option to supply a custom name or path
|
|
22
|
-
- ${o}`;throw new Error(i)}_executeSubCommand(e,t){t=t.slice();let s=[".js",".ts",".tsx",".mjs",".cjs"];function o(p,g){let h=
|
|
22
|
+
- ${o}`;throw new Error(i)}_executeSubCommand(e,t){t=t.slice();let s=[".js",".ts",".tsx",".mjs",".cjs"];function o(p,g){let h=_t.default.resolve(p,g);if(An.default.existsSync(h))return h;if(s.includes(_t.default.extname(g)))return;let y=s.find(b=>An.default.existsSync(`${h}${b}`));if(y)return`${h}${y}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let i=e._executableFile||`${this._name}-${e._name}`,r=this._executableDir||"";if(this._scriptPath){let p;try{p=An.default.realpathSync(this._scriptPath)}catch{p=this._scriptPath}r=_t.default.resolve(_t.default.dirname(p),r)}if(r){let p=o(r,i);if(!p&&!e._executableFile&&this._scriptPath){let g=_t.default.basename(this._scriptPath,_t.default.extname(this._scriptPath));g!==this._name&&(p=o(r,`${g}-${e._name}`))}i=p||i}let a=s.includes(_t.default.extname(i)),l;se.default.platform!=="win32"?a?(t.unshift(i),t=Xc(se.default.execArgv).concat(t),l=ni.default.spawn(se.default.argv[0],t,{stdio:"inherit"})):l=ni.default.spawn(i,t,{stdio:"inherit"}):(this._checkForMissingExecutable(i,r,e._name),t.unshift(i),t=Xc(se.default.execArgv).concat(t),l=ni.default.spawn(se.default.execPath,t,{stdio:"inherit"})),l.killed||["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach(g=>{se.default.on(g,()=>{l.killed===!1&&l.exitCode===null&&l.kill(g)})});let d=this._exitCallback;l.on("close",p=>{p=p??1,d?d(new Zt(p,"commander.executeSubCommandAsync","(close)")):se.default.exit(p)}),l.on("error",p=>{if(p.code==="ENOENT")this._checkForMissingExecutable(i,r,e._name);else if(p.code==="EACCES")throw new Error(`'${i}' not executable`);if(!d)se.default.exit(1);else{let g=new Zt(1,"commander.executeSubCommandAsync","(error)");g.nestedError=p,d(g)}}),this.runningCommand=l}_dispatchSubcommand(e,t,s){let o=this._findCommand(e);o||this.help({error:!0}),o._prepareForParse();let i;return i=this._chainOrCallSubCommandHook(i,o,"preSubcommand"),i=this._chainOrCall(i,()=>{if(o._executableHandler)this._executeSubCommand(o,t.concat(s));else return o._parseCommand(t,s)}),i}_dispatchHelpCommand(e){e||this.help();let t=this._findCommand(e);return t&&!t._executableHandler&&t.help(),this._dispatchSubcommand(e,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){this.registeredArguments.forEach((e,t)=>{e.required&&this.args[t]==null&&this.missingArgument(e.name())}),!(this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)&&this.args.length>this.registeredArguments.length&&this._excessArguments(this.args)}_processArguments(){let e=(s,o,i)=>{let r=o;if(o!==null&&s.parseArg){let a=`error: command-argument value '${o}' is invalid for argument '${s.name()}'.`;r=this._callParseArg(s,o,i,a)}return r};this._checkNumberOfArguments();let t=[];this.registeredArguments.forEach((s,o)=>{let i=s.defaultValue;s.variadic?o<this.args.length?(i=this.args.slice(o),s.parseArg&&(i=i.reduce((r,a)=>e(s,a,r),s.defaultValue))):i===void 0&&(i=[]):o<this.args.length&&(i=this.args[o],s.parseArg&&(i=e(s,i,s.defaultValue))),t[o]=i}),this.processedArgs=t}_chainOrCall(e,t){return e?.then&&typeof e.then=="function"?e.then(()=>t()):t()}_chainOrCallHooks(e,t){let s=e,o=[];return this._getCommandAndAncestors().reverse().filter(i=>i._lifeCycleHooks[t]!==void 0).forEach(i=>{i._lifeCycleHooks[t].forEach(r=>{o.push({hookedCommand:i,callback:r})})}),t==="postAction"&&o.reverse(),o.forEach(i=>{s=this._chainOrCall(s,()=>i.callback(i.hookedCommand,this))}),s}_chainOrCallSubCommandHook(e,t,s){let o=e;return this._lifeCycleHooks[s]!==void 0&&this._lifeCycleHooks[s].forEach(i=>{o=this._chainOrCall(o,()=>i(this,t))}),o}_parseCommand(e,t){let s=this.parseOptions(t);if(this._parseOptionsEnv(),this._parseOptionsImplied(),e=e.concat(s.operands),t=s.unknown,this.args=e.concat(t),e&&this._findCommand(e[0]))return this._dispatchSubcommand(e[0],e.slice(1),t);if(this._getHelpCommand()&&e[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(e[1]);if(this._defaultCommandName)return this._outputHelpIfRequested(t),this._dispatchSubcommand(this._defaultCommandName,e,t);this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName&&this.help({error:!0}),this._outputHelpIfRequested(s.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let o=()=>{s.unknown.length>0&&this.unknownOption(s.unknown[0])},i=`command:${this.name()}`;if(this._actionHandler){o(),this._processArguments();let r;return r=this._chainOrCallHooks(r,"preAction"),r=this._chainOrCall(r,()=>this._actionHandler(this.processedArgs)),this.parent&&(r=this._chainOrCall(r,()=>{this.parent.emit(i,e,t)})),r=this._chainOrCallHooks(r,"postAction"),r}if(this.parent?.listenerCount(i))o(),this._processArguments(),this.parent.emit(i,e,t);else if(e.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",e,t);this.listenerCount("command:*")?this.emit("command:*",e,t):this.commands.length?this.unknownCommand():(o(),this._processArguments())}else this.commands.length?(o(),this.help({error:!0})):(o(),this._processArguments())}_findCommand(e){if(e)return this.commands.find(t=>t._name===e||t._aliases.includes(e))}_findOption(e){return this.options.find(t=>t.is(e))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach(e=>{e.options.forEach(t=>{t.mandatory&&e.getOptionValue(t.attributeName())===void 0&&e.missingMandatoryOptionValue(t)})})}_checkForConflictingLocalOptions(){let e=this.options.filter(s=>{let o=s.attributeName();return this.getOptionValue(o)===void 0?!1:this.getOptionValueSource(o)!=="default"});e.filter(s=>s.conflictsWith.length>0).forEach(s=>{let o=e.find(i=>s.conflictsWith.includes(i.attributeName()));o&&this._conflictingOption(s,o)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach(e=>{e._checkForConflictingLocalOptions()})}parseOptions(e){let t=[],s=[],o=t;function i(p){return p.length>1&&p[0]==="-"}let r=p=>/^-(\d+|\d*\.\d+)(e[+-]?\d+)?$/.test(p)?!this._getCommandAndAncestors().some(g=>g.options.map(h=>h.short).some(h=>/^-\d$/.test(h))):!1,a=null,l=null,d=0;for(;d<e.length||l;){let p=l??e[d++];if(l=null,p==="--"){o===s&&o.push(p),o.push(...e.slice(d));break}if(a&&(!i(p)||r(p))){this.emit(`option:${a.name()}`,p);continue}if(a=null,i(p)){let g=this._findOption(p);if(g){if(g.required){let h=e[d++];h===void 0&&this.optionMissingArgument(g),this.emit(`option:${g.name()}`,h)}else if(g.optional){let h=null;d<e.length&&(!i(e[d])||r(e[d]))&&(h=e[d++]),this.emit(`option:${g.name()}`,h)}else this.emit(`option:${g.name()}`);a=g.variadic?g:null;continue}}if(p.length>2&&p[0]==="-"&&p[1]!=="-"){let g=this._findOption(`-${p[1]}`);if(g){g.required||g.optional&&this._combineFlagAndOptionalValue?this.emit(`option:${g.name()}`,p.slice(2)):(this.emit(`option:${g.name()}`),l=`-${p.slice(2)}`);continue}}if(/^--[^=]+=/.test(p)){let g=p.indexOf("="),h=this._findOption(p.slice(0,g));if(h&&(h.required||h.optional)){this.emit(`option:${h.name()}`,p.slice(g+1));continue}}if(o===t&&i(p)&&!(this.commands.length===0&&r(p))&&(o=s),(this._enablePositionalOptions||this._passThroughOptions)&&t.length===0&&s.length===0){if(this._findCommand(p)){t.push(p),s.push(...e.slice(d));break}else if(this._getHelpCommand()&&p===this._getHelpCommand().name()){t.push(p,...e.slice(d));break}else if(this._defaultCommandName){s.push(p,...e.slice(d));break}}if(this._passThroughOptions){o.push(p,...e.slice(d));break}o.push(p)}return{operands:t,unknown:s}}opts(){if(this._storeOptionsAsProperties){let e={},t=this.options.length;for(let s=0;s<t;s++){let o=this.options[s].attributeName();e[o]=o===this._versionOptionName?this._version:this[o]}return e}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((e,t)=>Object.assign(e,t.opts()),{})}error(e,t){this._outputConfiguration.outputError(`${e}
|
|
23
23
|
`,this._outputConfiguration.writeErr),typeof this._showHelpAfterError=="string"?this._outputConfiguration.writeErr(`${this._showHelpAfterError}
|
|
24
24
|
`):this._showHelpAfterError&&(this._outputConfiguration.writeErr(`
|
|
25
|
-
`),this.outputHelp({error:!0}));let s=t||{},o=s.exitCode||1,i=s.code||"commander.error";this._exit(o,i,e)}_parseOptionsEnv(){this.options.forEach(e=>{if(e.envVar&&e.envVar in se.default.env){let t=e.attributeName();(this.getOptionValue(t)===void 0||["default","config","env"].includes(this.getOptionValueSource(t)))&&(e.required||e.optional?this.emit(`optionEnv:${e.name()}`,se.default.env[e.envVar]):this.emit(`optionEnv:${e.name()}`))}})}_parseOptionsImplied(){let e=new
|
|
26
|
-
`),this._exit(0,"commander.version",e)}),this}description(e,t){return e===void 0&&t===void 0?this._description:(this._description=e,t&&(this._argsDescription=t),this)}summary(e){return e===void 0?this._summary:(this._summary=e,this)}alias(e){if(e===void 0)return this._aliases[0];let t=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler&&(t=this.commands[this.commands.length-1]),e===t._name)throw new Error("Command alias can't be the same as its name");let s=this.parent?._findCommand(e);if(s){let o=[s.name()].concat(s.aliases()).join("|");throw new Error(`cannot add alias '${e}' to command '${this.name()}' as already have command '${o}'`)}return t._aliases.push(e),this}aliases(e){return e===void 0?this._aliases:(e.forEach(t=>this.alias(t)),this)}usage(e){if(e===void 0){if(this._usage)return this._usage;let t=this.registeredArguments.map(s=>
|
|
25
|
+
`),this.outputHelp({error:!0}));let s=t||{},o=s.exitCode||1,i=s.code||"commander.error";this._exit(o,i,e)}_parseOptionsEnv(){this.options.forEach(e=>{if(e.envVar&&e.envVar in se.default.env){let t=e.attributeName();(this.getOptionValue(t)===void 0||["default","config","env"].includes(this.getOptionValueSource(t)))&&(e.required||e.optional?this.emit(`optionEnv:${e.name()}`,se.default.env[e.envVar]):this.emit(`optionEnv:${e.name()}`))}})}_parseOptionsImplied(){let e=new si(this.options),t=s=>this.getOptionValue(s)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(s));this.options.filter(s=>s.implied!==void 0&&t(s.attributeName())&&e.valueFromOption(this.getOptionValue(s.attributeName()),s)).forEach(s=>{Object.keys(s.implied).filter(o=>!t(o)).forEach(o=>{this.setOptionValueWithSource(o,s.implied[o],"implied")})})}missingArgument(e){let t=`error: missing required argument '${e}'`;this.error(t,{code:"commander.missingArgument"})}optionMissingArgument(e){let t=`error: option '${e.flags}' argument missing`;this.error(t,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(e){let t=`error: required option '${e.flags}' not specified`;this.error(t,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(e,t){let s=r=>{let a=r.attributeName(),l=this.getOptionValue(a),d=this.options.find(g=>g.negate&&a===g.attributeName()),p=this.options.find(g=>!g.negate&&a===g.attributeName());return d&&(d.presetArg===void 0&&l===!1||d.presetArg!==void 0&&l===d.presetArg)?d:p||r},o=r=>{let a=s(r),l=a.attributeName();return this.getOptionValueSource(l)==="env"?`environment variable '${a.envVar}'`:`option '${a.flags}'`},i=`error: ${o(e)} cannot be used with ${o(t)}`;this.error(i,{code:"commander.conflictingOption"})}unknownOption(e){if(this._allowUnknownOption)return;let t="";if(e.startsWith("--")&&this._showSuggestionAfterError){let o=[],i=this;do{let r=i.createHelp().visibleOptions(i).filter(a=>a.long).map(a=>a.long);o=o.concat(r),i=i.parent}while(i&&!i._enablePositionalOptions);t=ga(e,o)}let s=`error: unknown option '${e}'${t}`;this.error(s,{code:"commander.unknownOption"})}_excessArguments(e){if(this._allowExcessArguments)return;let t=this.registeredArguments.length,s=t===1?"":"s",o=e.length,i=this.parent?` for '${this.name()}'`:"",r=e.join(", "),a=`error: too many arguments${i}. Expected ${t} argument${s} but got ${o}: ${r}.`;this.error(a,{code:"commander.excessArguments"})}unknownCommand(){let e=this.args[0],t="";if(this._showSuggestionAfterError){let o=[];this.createHelp().visibleCommands(this).forEach(i=>{o.push(i.name()),i.alias()&&o.push(i.alias())}),t=ga(e,o)}let s=`error: unknown command '${e}'${t}`;this.error(s,{code:"commander.unknownCommand"})}version(e,t,s){if(e===void 0)return this._version;this._version=e,t=t||"-V, --version",s=s||"output the version number";let o=this.createOption(t,s);return this._versionOptionName=o.attributeName(),this._registerOption(o),this.on("option:"+o.name(),()=>{this._outputConfiguration.writeOut(`${e}
|
|
26
|
+
`),this._exit(0,"commander.version",e)}),this}description(e,t){return e===void 0&&t===void 0?this._description:(this._description=e,t&&(this._argsDescription=t),this)}summary(e){return e===void 0?this._summary:(this._summary=e,this)}alias(e){if(e===void 0)return this._aliases[0];let t=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler&&(t=this.commands[this.commands.length-1]),e===t._name)throw new Error("Command alias can't be the same as its name");let s=this.parent?._findCommand(e);if(s){let o=[s.name()].concat(s.aliases()).join("|");throw new Error(`cannot add alias '${e}' to command '${this.name()}' as already have command '${o}'`)}return t._aliases.push(e),this}aliases(e){return e===void 0?this._aliases:(e.forEach(t=>this.alias(t)),this)}usage(e){if(e===void 0){if(this._usage)return this._usage;let t=this.registeredArguments.map(s=>ti(s));return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?t:[]).join(" ")}return this._usage=e,this}name(e){return e===void 0?this._name:(this._name=e,this)}helpGroup(e){return e===void 0?this._helpGroupHeading??"":(this._helpGroupHeading=e,this)}commandsGroup(e){return e===void 0?this._defaultCommandGroup??"":(this._defaultCommandGroup=e,this)}optionsGroup(e){return e===void 0?this._defaultOptionGroup??"":(this._defaultOptionGroup=e,this)}_initOptionGroup(e){this._defaultOptionGroup&&!e.helpGroupHeading&&e.helpGroup(this._defaultOptionGroup)}_initCommandGroup(e){this._defaultCommandGroup&&!e.helpGroup()&&e.helpGroup(this._defaultCommandGroup)}nameFromFilename(e){return this._name=_t.default.basename(e,_t.default.extname(e)),this}executableDir(e){return e===void 0?this._executableDir:(this._executableDir=e,this)}helpInformation(e){let t=this.createHelp(),s=this._getOutputContext(e);t.prepareContext({error:s.error,helpWidth:s.helpWidth,outputHasColors:s.hasColors});let o=t.formatHelp(this,t);return s.hasColors?o:this._outputConfiguration.stripColor(o)}_getOutputContext(e){e=e||{};let t=!!e.error,s,o,i;return t?(s=a=>this._outputConfiguration.writeErr(a),o=this._outputConfiguration.getErrHasColors(),i=this._outputConfiguration.getErrHelpWidth()):(s=a=>this._outputConfiguration.writeOut(a),o=this._outputConfiguration.getOutHasColors(),i=this._outputConfiguration.getOutHelpWidth()),{error:t,write:a=>(o||(a=this._outputConfiguration.stripColor(a)),s(a)),hasColors:o,helpWidth:i}}outputHelp(e){let t;typeof e=="function"&&(t=e,e=void 0);let s=this._getOutputContext(e),o={error:s.error,write:s.write,command:this};this._getCommandAndAncestors().reverse().forEach(r=>r.emit("beforeAllHelp",o)),this.emit("beforeHelp",o);let i=this.helpInformation({error:s.error});if(t&&(i=t(i),typeof i!="string"&&!Buffer.isBuffer(i)))throw new Error("outputHelp callback must return a string or a Buffer");s.write(i),this._getHelpOption()?.long&&this.emit(this._getHelpOption().long),this.emit("afterHelp",o),this._getCommandAndAncestors().forEach(r=>r.emit("afterAllHelp",o))}helpOption(e,t){return typeof e=="boolean"?(e?(this._helpOption===null&&(this._helpOption=void 0),this._defaultOptionGroup&&this._initOptionGroup(this._getHelpOption())):this._helpOption=null,this):(this._helpOption=this.createOption(e??"-h, --help",t??"display help for command"),(e||t)&&this._initOptionGroup(this._helpOption),this)}_getHelpOption(){return this._helpOption===void 0&&this.helpOption(void 0,void 0),this._helpOption}addHelpOption(e){return this._helpOption=e,this._initOptionGroup(e),this}help(e){this.outputHelp(e);let t=Number(se.default.exitCode??0);t===0&&e&&typeof e!="function"&&e.error&&(t=1),this._exit(t,"commander.help","(outputHelp)")}addHelpText(e,t){let s=["beforeAll","before","after","afterAll"];if(!s.includes(e))throw new Error(`Unexpected value for position to addHelpText.
|
|
27
27
|
Expecting one of '${s.join("', '")}'`);let o=`${e}Help`;return this.on(o,i=>{let r;typeof t=="function"?r=t({error:i.error,command:i.command}):r=t,r&&i.write(`${r}
|
|
28
|
-
`)}),this}_outputHelpIfRequested(e){let t=this._getHelpOption();t&&e.find(o=>t.is(o))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function
|
|
28
|
+
`)}),this}_outputHelpIfRequested(e){let t=this._getHelpOption();t&&e.find(o=>t.is(o))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function Xc(n){return n.map(e=>{if(!e.startsWith("--inspect"))return e;let t,s="127.0.0.1",o="9229",i;return(i=e.match(/^(--inspect(-brk)?)$/))!==null?t=i[1]:(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(t=i[1],/^\d+$/.test(i[3])?o=i[3]:s=i[3]):(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(t=i[1],s=i[3],o=i[4]),t&&o!=="0"?`${t}=${s}:${parseInt(o)+1}`:e})}function Zc(){if(se.default.env.NO_COLOR||se.default.env.FORCE_COLOR==="0"||se.default.env.FORCE_COLOR==="false")return!1;if(se.default.env.FORCE_COLOR||se.default.env.CLICOLOR_FORCE!==void 0)return!0}var l0=new ce;function su(n,e,t){let s=n.indexOf(e);if(s===-1)return n;let o=e.length,i=0,r="";do r+=n.slice(i,s)+e+t,i=s+o,s=n.indexOf(e,i);while(s!==-1);return r+=n.slice(i),r}function nu(n,e,t,s){let o=0,i="";do{let r=n[s-1]==="\r";i+=n.slice(o,r?s-1:s)+e+(r?`\r
|
|
29
29
|
`:`
|
|
30
30
|
`)+t,o=s+1,s=n.indexOf(`
|
|
31
|
-
`,o)}while(s!==-1);return i+=n.slice(o),i}var
|
|
32
|
-
`);return i!==-1&&(e=qc(e,o,s,i)),s+e+o};Object.defineProperties(An.prototype,{...Pn,level:ef});var af=An(),Mw=An({level:Vc?Vc.level:0});var w=af;var qt=S(require("fs")),Ae=S(require("path")),dp=S(require("os"));var Xc={getConfiguration:()=>({get:()=>{}})},ma={getExtension:()=>{}},oi=class n{fsPath;scheme;path;constructor(e){this.fsPath=e,this.scheme="file",this.path=e}static file(e){return new n(e)}static joinPath(e,...t){let s=[e.fsPath,...t].join("/");return new n(s)}toString(){return this.fsPath}};var Un=S(require("fs")),au=S(require("path"));function pa(n){return typeof n.discover=="function"}function eu(n){return typeof n.analyzeUsage=="function"}var Qe=S(require("fs"));var tu=S(require("fs"));function xn(n){if(!n||!n.startsWith("file://"))return;let e=n.slice(7),t;try{t=decodeURIComponent(e)}catch{return}if(!t.split(/[\\/]/).some(o=>o===".."))return t.startsWith("//")?process.platform==="win32"?t.replace(/\//g,"\\"):t:/^\/[A-Za-z]:/.test(t)?t.slice(1):t}function ii(n,e){if(!(typeof n!="string"||!n||!Array.isArray(e)))try{let t=tu.readFileSync(n,"utf8"),s=JSON.parse(t);if(typeof s!="object"||s===null||Array.isArray(s))return;for(let o of e){let i=s[o];if(typeof i=="string"){if(i.startsWith("file://")){let r=xn(i);if(r)return r;continue}return i}}}catch{}}function ue(n){return n.replace(/\\/g,"/")}var ri=ue;function J(n){return ue(n).toLowerCase()}function ai(n,e=process.platform){let t=ue(n);return e==="linux"?t:t.toLowerCase()}function ga(n,e,t){try{return n()}catch(s){return console.error(`[recovery] ${t??"unknown"}:`,s),e}}async function ys(n,e,t){try{return await n()}catch(s){return console.error(`[recovery] ${t??"unknown"}:`,s),e}}var lf=/^mcp__[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}__(.+)$/i;function nu(n){return lf.test(n)}function cf(n){return n.replace(/(?<=[a-z0-9])(?=[A-Z])/g,"_").replace(/(?<=[A-Z])(?=[A-Z][a-z])/g,"_")}function su(n){return cf(n).toLowerCase().replace(/[.-]/g,"_")}function ou(n,e){if(e[n])return e[n];let t=n.toLowerCase();if(e[t])return e[t];let s=su(n);for(let o of Object.keys(e))if(su(o)===s)return e[o]}var Dn=S(require("fs")),fa=S(require("path")),iu=S(require("os")),ru=S(Pt());function N(n){let e=n.getFullYear(),t=String(n.getMonth()+1).padStart(2,"0"),s=String(n.getDate()).padStart(2,"0");return`${e}-${t}-${s}`}var uf=new Set(["__proto__","constructor","prototype"]);function O(n){return uf.has(n)}function ha(n){return n?n.replace(/\\/g,"/").toLowerCase().includes("/microsoft scout"):!1}function En(n){return n==="github/autopilot"}function df(n){if(typeof n!="object"||n===null)return!1;let e=n;return typeof e.id=="string"&&(e.cwd===null||typeof e.cwd=="string")&&(e.repository===null||typeof e.repository=="string")&&(e.branch===null||typeof e.branch=="string")&&(e.summary===null||typeof e.summary=="string")&&(e.created_at===null||typeof e.created_at=="string")&&(e.updated_at===null||typeof e.updated_at=="string")}function mf(n){if(typeof n!="object"||n===null)return!1;let e=n;return typeof e.session_id=="string"&&typeof e.turn_index=="number"&&(e.user_message===null||typeof e.user_message=="string")&&(e.assistant_response===null||typeof e.assistant_response=="string")&&(e.timestamp===null||typeof e.timestamp=="string")}var js=class{_sqlJsModule=null;_sqlJsInitPromise=null;_initSqlJsFn;_dbCache=new Map;_dbCacheInflight=new Map;_sessionsCache=new Map;_sessionsCacheInflight=new Map;_turnCountsCache=new Map;_turnCountsCacheInflight=new Map;_usageCache=new Map;_usageCacheInflight=new Map;constructor(e){this._initSqlJsFn=e??ru.default}dispose(){for(let e of this._dbCache.values())try{e.db.close()}catch{}this._dbCache.clear(),this._dbCacheInflight.clear(),this._sessionsCache.clear(),this._sessionsCacheInflight.clear(),this._turnCountsCache.clear(),this._turnCountsCacheInflight.clear(),this._usageCache.clear(),this._usageCacheInflight.clear(),this._sqlJsInitPromise=null}closeDb(e){try{e.close()}catch{}}isMissingFileError(e){let t=e?.code;return t==="ENOENT"||t==="ENOTDIR"}async statDb(e){try{return await Dn.promises.stat(e)}catch(t){return this.isMissingFileError(t)&&this._dbCache.has(e)&&(this.closeDb(this._dbCache.get(e).db),this._dbCache.delete(e)),null}}isCachedDbCurrent(e,t){let s=this._dbCache.get(e);return!!s&&s.mtimeMs===t.mtimeMs&&s.size===t.size}getDbCacheKey(e,t){return`${e}:${t.mtimeMs}:${t.size}`}sameDbStats(e,t){return e.mtimeMs===t.mtimeMs&&e.size===t.size}async refreshDb(e,t){let s;try{let r=await this.initSqlJs(),a=await Dn.promises.readFile(e);s=new r.Database(a)}catch{return this._dbCache.get(e)?.db??null}let o=await this.statDb(e);if(!o||!this.sameDbStats(t,o))return this.closeDb(s),this._dbCache.get(e)?.db??null;let i=this._dbCache.get(e);return i&&this.closeDb(i.db),this._dbCache.set(e,{db:s,mtimeMs:t.mtimeMs,size:t.size}),s}async getDb(e){let t=await this.statDb(e);if(!t)return this._dbCache.get(e)?.db??null;if(this.isCachedDbCurrent(e,t))return this._dbCache.get(e).db;let s=this.getDbCacheKey(e,t),o=this._dbCacheInflight.get(s);if(o)return o;let i=this.refreshDb(e,t);this._dbCacheInflight.set(s,i);try{return await i}finally{this._dbCacheInflight.get(s)===i&&this._dbCacheInflight.delete(s)}}getDbPath(){return fa.join(iu.homedir(),".copilot","session-store.db")}virtualPath(e){return`${this.getDbPath()}#${e}`}isCliStoreSession(e){return e.includes("session-store.db#")}getDbPathFromVirtual(e){let t=e.indexOf("session-store.db#");return t===-1?e:e.substring(0,t+16)}getSessionId(e){let t=e.indexOf("session-store.db#");return t===-1?null:e.substring(t+17)||null}async getSessionsMap(e){let t=await this.statDb(e);if(!t)return this._sessionsCache.get(e)?.byId??new Map;let s=this._sessionsCache.get(e);if(s&&s.mtimeMs===t.mtimeMs&&s.size===t.size)return s.byId;let o=`${e}:${t.mtimeMs}:${t.size}`,i=this._sessionsCacheInflight.get(o);if(i)return i;let r=(async()=>{let a=await this.getDb(e),c=new Map;if(a)try{let d=a.exec("SELECT id, cwd, repository, branch, summary, created_at, updated_at FROM sessions");if(d.length>0){let p=d[0].columns;for(let g of d[0].values){let h={};p.forEach((y,b)=>{h[y]=g[b]}),df(h)&&c.set(h.id,h)}}}catch{}return this._sessionsCache.set(e,{mtimeMs:t.mtimeMs,size:t.size,byId:c}),c})();this._sessionsCacheInflight.set(o,r);try{return await r}finally{this._sessionsCacheInflight.get(o)===r&&this._sessionsCacheInflight.delete(o)}}async getTurnCountsMap(e){let t=await this.statDb(e);if(!t)return this._turnCountsCache.get(e)?.byId??new Map;let s=this._turnCountsCache.get(e);if(s&&s.mtimeMs===t.mtimeMs&&s.size===t.size)return s.byId;let o=`${e}:${t.mtimeMs}:${t.size}`,i=this._turnCountsCacheInflight.get(o);if(i)return i;let r=(async()=>{let a=await this.getDb(e),c=new Map;if(a)try{let d=a.exec("SELECT session_id, COUNT(*) FROM turns GROUP BY session_id");if(d.length>0)for(let p of d[0].values)c.set(p[0],p[1]||0)}catch{}return this._turnCountsCache.set(e,{mtimeMs:t.mtimeMs,size:t.size,byId:c}),c})();this._turnCountsCacheInflight.set(o,r);try{return await r}finally{this._turnCountsCacheInflight.get(o)===r&&this._turnCountsCacheInflight.delete(o)}}async getUsageMap(e){let t=await this.statDb(e);if(!t)return this._usageCache.get(e)?.bySessionId??new Map;let s=this._usageCache.get(e);if(s&&s.mtimeMs===t.mtimeMs&&s.size===t.size)return s.bySessionId;let o=`${e}:${t.mtimeMs}:${t.size}`,i=this._usageCacheInflight.get(o);if(i)return i;let r=(async()=>{let a=await this.getDb(e),c=new Map;if(a)try{let d=a.exec("SELECT session_id, model, input_tokens, output_tokens, cache_read_tokens, cache_write_tokens, total_nano_aiu FROM assistant_usage_events");if(d.length>0){let p=d[0].columns,g=p.indexOf("session_id");for(let h of d[0].values){let y=h[g];if(typeof y!="string")continue;let b=this.parseUsageEventRow(p,h);this.addUsageEventToSessionUsage(c,y,b)}this.removeEmptyUsage(c)}}catch{}return this._usageCache.set(e,{mtimeMs:t.mtimeMs,size:t.size,bySessionId:c}),c})();this._usageCacheInflight.set(o,r);try{return await r}finally{this._usageCacheInflight.get(o)===r&&this._usageCacheInflight.delete(o)}}addUsageEventToSessionUsage(e,t,s){let o=e.get(t);o||(o={modelUsage:{},actualTokens:0,cacheReadTokens:0,nanoAiu:0},e.set(t,o)),this.addUsageEventToModelUsage(o.modelUsage,s),o.actualTokens+=s.inputTokens+s.outputTokens,o.cacheReadTokens+=s.cacheReadTokens,o.nanoAiu+=s.nanoAiu}removeEmptyUsage(e){for(let[t,s]of e)s.actualTokens===0&&s.cacheReadTokens===0&&s.nanoAiu===0&&e.delete(t)}async stat(e){let t=this.getDbPathFromVirtual(e),s=this.getSessionId(e),o=await Dn.promises.stat(t),i=s?(await this.getSessionsMap(t)).get(s):void 0,r=i?.updated_at?new Date(i.updated_at):null;return!r||Number.isNaN(r.getTime())||Object.defineProperty(o,"mtime",{value:r,writable:!1}),o}async initSqlJs(){return this._sqlJsModule?this._sqlJsModule:(this._sqlJsInitPromise||(this._sqlJsInitPromise=(async()=>{let e=fa.join(__dirname,"sql-wasm.wasm"),t;try{t=await Dn.promises.readFile(e)}catch{}let s=await this._initSqlJsFn(t?{wasmBinary:t.buffer}:void 0);return this._sqlJsModule=s,s})().catch(e=>{throw this._sqlJsInitPromise=null,e})),this._sqlJsInitPromise)}async discoverNewSessions(e){let t=this.getDbPath(),s=await this.getDb(t);if(!s)return[];try{let o=s.exec("SELECT id FROM sessions ORDER BY updated_at DESC");return o.length===0?[]:o[0].values.map(i=>i[0]).filter(i=>!e.has(i))}catch{return[]}}async discoverNewSessionsWithCwd(e){let t=this.getDbPath(),s=await this.getDb(t);if(!s)return[];try{let o=s.exec("SELECT id, cwd FROM sessions ORDER BY updated_at DESC");return o.length===0?[]:o[0].values.filter(i=>!e.has(i[0])).map(i=>({id:i[0],cwd:i[1]??null}))}catch{return[]}}async readSession(e){let t=this.getDbPathFromVirtual(e),s=this.getSessionId(e);return s?(await this.getSessionsMap(t)).get(s)??null:null}async getTurns(e){let t=this.getDbPathFromVirtual(e),s=this.getSessionId(e);if(!s)return[];let o=await this.getDb(t);if(!o)return[];try{let i=o.exec("SELECT session_id, turn_index, user_message, assistant_response, timestamp FROM turns WHERE session_id = ? ORDER BY turn_index ASC",[s]);if(i.length===0)return[];let r=i[0].columns,a=[];for(let c of i[0].values){let d={};r.forEach((p,g)=>{d[p]=c[g]}),mf(d)&&a.push(d)}return a}catch{return[]}}async countTurns(e){let t=this.getDbPathFromVirtual(e),s=this.getSessionId(e);return s?(await this.getTurnCountsMap(t)).get(s)??0:0}async getSessionUsage(e){let t=this.getDbPath();return(await this.getUsageMap(t)).get(e)??null}parseUsageEventRow(e,t){let s={};return e.forEach((o,i)=>{s[o]=t[i]}),{model:typeof s.model=="string"?s.model:"unknown",inputTokens:typeof s.input_tokens=="number"?s.input_tokens:0,outputTokens:typeof s.output_tokens=="number"?s.output_tokens:0,cacheReadTokens:typeof s.cache_read_tokens=="number"?s.cache_read_tokens:0,cacheWriteTokens:typeof s.cache_write_tokens=="number"?s.cache_write_tokens:0,nanoAiu:typeof s.total_nano_aiu=="number"?s.total_nano_aiu:0}}addUsageEventToModelUsage(e,t){if(O(t.model))return;e[t.model]||(e[t.model]={inputTokens:0,outputTokens:0,sessions:0});let s=e[t.model];s.inputTokens+=t.inputTokens,s.outputTokens+=t.outputTokens,t.cacheReadTokens>0&&(s.cachedReadTokens=(s.cachedReadTokens??0)+t.cacheReadTokens),t.cacheWriteTokens>0&&(s.cacheCreationTokens=(s.cacheCreationTokens??0)+t.cacheWriteTokens)}async getDailyFractions(e){let t=await this.getTurns(e),s={},o=0;for(let r of t)if(r.timestamp)try{let a=N(new Date(r.timestamp));s[a]=(s[a]||0)+1,o++}catch{}if(o===0){let r=await this.readSession(e);return{[r?.updated_at?N(new Date(r.updated_at)):N(new Date)]:1}}let i={};for(let[r,a]of Object.entries(s))i[r]=a/o;return i}};function gf(n){return!n||n==="agent"?"agent":n.includes("plan-agent/Plan.agent.md")?"plan":n.includes(".agent.md")?"customAgent":"agent"}function di(n){return n?typeof n=="string"?n==="edit"?"edit":n==="agent"?"agent":"ask":n.kind?n.kind==="edit"?"edit":n.kind==="ask"?"ask":n.kind==="agent"?gf(n.id):"ask":"ask":"ask"}function at(n){return n.startsWith("mcp.")||n.startsWith("mcp_")||n.startsWith("mcp__")}var ff=[["mcp_github_github_","mcp_io_github_git_"],["github-mcp-server-","mcp_io_github_git_"],["mcp_github_mcp_s2_","mcp_io_github_git_"],["mcp_github_mcp_se_","mcp_io_github_git_"],["mcp.github.github.","mcp.io.github.git."],["mcp__plugin_context7_context7__","context7-"],["mcp__context7__","context7-"],["mcp_context7_","context7-"],["mcp_io_github_ups_","context7-"],["mcp__microsoft_playwright-mcp__","microsoft_playwright-mcp-"],["mcp__playwright__","microsoft_playwright-mcp-"],["mcp_playwright_","microsoft_playwright-mcp-"],["mcp_microsoft_pla_","microsoft_playwright-mcp-"],["mcp_tavily-mcp_","io_github_tavily-ai_tavily-mcp-"],["mcp_tavily_","io_github_tavily-ai_tavily-mcp-"],["mcp__claude-in-chrome__","mcp__claude_browser__"],["mcp__Claude_Browser__","mcp__claude_browser__"]];function Rn(n){for(let[e,t]of ff)if(n.startsWith(e))return t+n.substring(e.length);return n}function _t(n,e={}){let t=ou(n,e);if(t&&t.includes(":"))return t.split(":")[0].trim();if(n.startsWith("mcp_io_github_git_")||n.startsWith("mcp.io.github.git."))return"GitHub MCP (Local)";if(n.startsWith("mcp_github_github_")||n.startsWith("mcp.github.github."))return"GitHub MCP (Remote)";if(n.startsWith("mcp__")){if(nu(n))return"Claude MCP";let i=n.slice(5),r=i.indexOf("__");return(r>=0?i.slice(0,r):i)||"unknown"}return n.replace(/^mcp[._]/,"").split(/[._]/)[0]||"unknown"}function In(n){try{let e=Qe.openSync(n,"r");try{let t=Buffer.alloc(65536),s=Qe.readSync(e,t,0,t.length,0),o=t.toString("utf8",0,s);for(let i of o.split(`
|
|
33
|
-
`)){let r=i.trim();if(!r)continue;let a;try{a=JSON.parse(r)}catch{continue}if(a?.entrypoint==="claude-desktop")return"Claude Desktop";if(a?.entrypoint==="cli")return"Claude Code CLI";if(a?.entrypoint)return"Claude Code"}}finally{Qe.closeSync(e)}}catch{}return"Claude Code"}var mi=class n{deps;_sessionFilesCache=null;_sessionFilesCacheTime=0;static SESSION_FILES_CACHE_TTL=6e4;_lastDiscoveryHadError=!1;_lastDiscoveryFilesCount=0;constructor(e){this.deps=e}get lastDiscoveryHadError(){return this._lastDiscoveryHadError}get lastDiscoveryFilesCount(){return this._lastDiscoveryFilesCount}clearCache(){this._sessionFilesCache=null,this._sessionFilesCacheTime=0}async pathExists(e){try{return await Un.promises.access(e),!0}catch{return!1}}pathExistsWithLogging(e,t){try{let s=Un.existsSync(e);return s||this.deps.log(`\u{1F50D} Path not found [${t}]: ${e}`),s}catch{return!1}}getDiagnosticCandidatePaths(){let e=[];for(let t of this.deps.ecosystems)if(pa(t))try{let s=t.getCandidatePaths();for(let o of s){let i=this.pathExistsWithLogging(o.path,o.source);e.push({path:o.path,exists:i,source:o.source})}}catch{}if(this.deps.windsurf){let t=this.deps.windsurf.getCascadeDir(),s=this.deps.windsurf.isRunningInDevin()?"Devin Cascade (shared with Windsurf)":"Windsurf Cascade";e.push({path:t,exists:this.pathExistsWithLogging(t,s),source:s})}return e}checkCopilotExtension(){let e=ma.getExtension("GitHub.copilot"),t=ma.getExtension("GitHub.copilot-chat");if(!e&&!t)this.deps.log("\u26A0\uFE0F GitHub Copilot extensions not found");else{let o=e?e.isActive?"\u2705 Active":"\u23F3 Loading":"\u274C Not found",i=t?t.isActive?"\u2705 Active":"\u23F3 Loading":"\u274C Not found";this.deps.log(`GitHub Copilot: ${o}, Chat: ${i}`)}process.env.CODESPACES==="true"&&(!e?.isActive||!t?.isActive)&&this.deps.warn("\u26A0\uFE0F Running in Codespaces with inactive Copilot extensions")}async getCopilotSessionFiles(){return this.getCopilotSessionFilesStreaming()}async tryGetSampleDataFiles(e){let t=this.deps.sampleDataDirectoryOverride?.()??Xc.getConfiguration("aiEngineeringFluency").get("sampleDataDirectory");if(!t||t.trim().length===0)return;let s=t.trim();try{if(!await this.pathExists(s)){this.deps.warn(`Sample data directory not found: ${s}`);return}let o=(await Un.promises.readdir(s)).filter(i=>i.endsWith(".json")||i.endsWith(".jsonl")).map(i=>au.join(s,i));return this.deps.log(`\u{1F4F8} Sample data mode: using ${o.length} file(s) from ${s}`),this._sessionFilesCache=o,this._sessionFilesCacheTime=e,this._lastDiscoveryFilesCount=o.length,o}catch(o){this.deps.warn(`Error reading sample data directory: ${o}`);return}}addDedupedBatch(e,t,s,o){let i=[];for(let r of e){let a=ai(r);t.has(a)||(t.add(a),i.push(r))}i.length>0&&(s.push(...i),o&&o(i))}async collectWindsurfFiles(e,t,s){if(this.deps.windsurf)try{let i=(await this.deps.windsurf.getWindsurfSessions()).map(r=>r.file).filter(r=>{let a=ai(r);return e.has(a)?!1:(e.add(a),!0)});i.length>0&&(t.push(...i),s&&s(i))}catch(o){this.deps.warn(`Could not discover Windsurf sessions: ${o}`),this._lastDiscoveryHadError=!0}}async discoverFromAdapters(e){let t=new Set,s=[],o=Date.now(),i=this.deps.ecosystems.filter(pa);this.deps.log(`\u{1F50D} Searching for session files via ${i.length} discoverable ecosystem adapter(s) (parallel)`);let r=0,a=i.map(d=>d.discover(this.deps.log).then(p=>{r+=p.sessionFiles.length,this.addDedupedBatch(p.sessionFiles,t,s,e)},p=>{this.deps.warn(`Could not discover ${d.displayName} sessions: ${p}`),this._lastDiscoveryHadError=!0}));await Promise.all([...a,this.collectWindsurfFiles(t,s,e)]);let c=r-s.length;return c>0&&this.deps.log(`\u{1F9F9} Deduplicated ${c} duplicate session path(s)`),this.deps.log(`\u2728 Total: ${s.length} session file(s) discovered in ${((Date.now()-o)/1e3).toFixed(1)}s`),s.length===0&&this.deps.warn("\u26A0\uFE0F No session files found - Have you used GitHub Copilot Chat yet?"),s}async getCopilotSessionFilesStreaming(e){let t=Date.now();if(this._sessionFilesCache&&t-this._sessionFilesCacheTime<n.SESSION_FILES_CACHE_TTL)return this.deps.log(`\u{1F4A8} Using cached session files list (${this._sessionFilesCache.length} files, cached ${Math.round((t-this._sessionFilesCacheTime)/1e3)}s ago)`),e&&e(this._sessionFilesCache),this._sessionFilesCache;this._lastDiscoveryHadError=!1,this._lastDiscoveryFilesCount=0;let s=await this.tryGetSampleDataFiles(t);if(s)return e&&e(s),s;let o=[];try{let i=await this.discoverFromAdapters(e);return o.push(...i),this._sessionFilesCache=o,this._sessionFilesCacheTime=Date.now(),this._lastDiscoveryFilesCount=o.length,o}catch(i){return this.deps.error("Error getting session files:",i),this._lastDiscoveryHadError=!0,this._lastDiscoveryFilesCount=o.length,o}}};var Ne=S(require("fs")),qe=S(require("path")),hi=S(require("os")),du=S(Pt());var Be=S(require("fs")),At=S(require("path")),gi=100*1024*1024,pi;function hf(){if(pi)return pi;let n=[process.env.TMPDIR,process.env.TMP,process.env.TEMP,process.env.WINDIR?At.join(process.env.WINDIR,"Temp"):void 0].filter(s=>!!(s&&s.trim().length>0)),e=process.platform==="win32"?["C:\\Windows\\Temp","C:\\Temp"]:["/tmp","/var/tmp"],t=new Set;for(let s of[...n,...e])try{t.add(Be.realpathSync(s))}catch{t.add(At.resolve(s))}return pi=[...t],pi}function lu(n){let e=(()=>{try{return Be.realpathSync(n)}catch{return At.resolve(n)}})();for(let t of hf()){let s=At.relative(t,e);if(s===""||!s.startsWith("..")&&!At.isAbsolute(s))return!0}return!1}async function Pe(n,e,t=gi){if(lu(n)){console.error(`[${e}] Refusing to read file from OS temp directory: ${n}`);return}let s;try{s=await Be.promises.open(n,"r")}catch(o){console.error(`[${e}] Failed to open ${n}:`,o);return}try{let o=await s.stat();if(o.size>t){console.debug(`[${e}] Skipping oversized file (${o.size} bytes > ${t} byte cap): ${n}`);return}return await s.readFile({encoding:"utf8"})}catch(o){console.error(`[${e}] Failed to read ${n}:`,o);return}finally{await s.close()}}function ya(n,e,t=gi){if(lu(n)){console.error(`[${e}] Refusing to read file from OS temp directory: ${n}`);return}let s;try{s=Be.openSync(n,"r")}catch(o){console.error(`[${e}] Failed to open ${n}:`,o);return}try{let o=Be.fstatSync(s);if(o.size>t){console.debug(`[${e}] Skipping oversized file (${o.size} bytes > ${t} byte cap): ${n}`);return}return Be.readFileSync(s,"utf8")}catch(o){console.error(`[${e}] Failed to read ${n}:`,o);return}finally{Be.closeSync(s)}}var he=S(require("fs")),On=S(require("path")),ba=S(require("os")),cu=256*1024*1024,_a=new Set,yf=6e4,uu=5*6e4,_f=3e4,Gs=new Map,bf=uu;function Cf(n){for(let[e,t]of Gs)n-t.attemptedAt>=bf&&Gs.delete(e)}function kf(n,e=Date.now()){if(!he.existsSync(n+"-shm"))return!1;let t=Mf(n);return t===0?!1:e-t<=_f}function Sf(n){let e=n+"-wal",t;try{t=he.statSync(e)}catch{return null}if(t.size===0)return null;let s;try{s=he.statSync(n)}catch{return null}return s.size+t.size>cu?(_a.has(n)||(_a.add(n),console.debug(`[sqliteWal] Skipping WAL merge for ${n}: db (${s.size} bytes) + wal (${t.size} bytes) exceed the ${cu} byte cap \u2014 reads will be a plain, potentially stale snapshot of the main db file until the WAL shrinks below the cap or a checkpoint runs.`)),null):(_a.delete(n),{walPath:e,dbMtimeMs:s.mtimeMs,dbSize:s.size,walMtimeMs:t.mtimeMs,walSize:t.size})}function Tf(n,e){let t,s,o,i;try{let{DatabaseSync:r}=require("node:sqlite"),a=On.join(ba.homedir(),".copilot","tmp");he.mkdirSync(a,{recursive:!0,mode:448}),t=On.join(a,`sqlite-wal-${On.basename(n)}-${process.pid}-${Date.now()}-${Math.random().toString(16).slice(2)}.db`),s=t+"-wal",o=t+"-shm";let c=n+"-shm";return he.copyFileSync(n,t),he.copyFileSync(e,s),he.existsSync(c)&&he.copyFileSync(c,o),i=new r(t),i.exec("PRAGMA wal_checkpoint(TRUNCATE);"),i.close(),i=void 0,he.readFileSync(t)}finally{if(i)try{i.close()}catch{}for(let r of[t,s,o])if(r)try{he.unlinkSync(r)}catch{}}}async function wf(n){let e=Date.now();Cf(e);let t=Sf(n);if(!t)return Gs.delete(n),null;let s=Gs.get(n),o=kf(n,e)?uu:yf;if(s&&e-s.attemptedAt<o){let i=s.dbMtimeMs===t.dbMtimeMs&&s.dbSize===t.dbSize;if(s.buffer&&i)return{buffer:s.buffer,dbMtimeMs:s.dbMtimeMs,dbSize:s.dbSize,walMtimeMs:s.walMtimeMs,walSize:s.walSize,walIncluded:!0};if(!s.buffer)return null}try{let i=Tf(n,t.walPath);return Gs.set(n,{buffer:i,attemptedAt:e,dbMtimeMs:t.dbMtimeMs,dbSize:t.dbSize,walMtimeMs:t.walMtimeMs,walSize:t.walSize}),{buffer:i,dbMtimeMs:t.dbMtimeMs,dbSize:t.dbSize,walMtimeMs:t.walMtimeMs,walSize:t.walSize,walIncluded:!0}}catch{let i=!!s&&s.dbMtimeMs===t.dbMtimeMs&&s.dbSize===t.dbSize;return s?.buffer&&i?(s.attemptedAt=e,{buffer:s.buffer,dbMtimeMs:s.dbMtimeMs,dbSize:s.dbSize,walMtimeMs:s.walMtimeMs,walSize:s.walSize,walIncluded:!0}):(Gs.set(n,{buffer:void 0,attemptedAt:e,dbMtimeMs:t.dbMtimeMs,dbSize:t.dbSize,walMtimeMs:t.walMtimeMs,walSize:t.walSize}),null)}}function Ca(n){try{let e=he.statSync(n+"-wal");return{mtimeMs:e.mtimeMs,size:e.size}}catch{return{mtimeMs:0,size:0}}}function Mf(n){return Ca(n).mtimeMs}function Bs(n){return Ca(n)}async function qs(n){let e=await wf(n);if(e)return e;let t=he.openSync(n,"r"),s,o;try{o=he.fstatSync(t),s=he.readFileSync(t)}finally{try{he.closeSync(t)}catch{}}let i=Ca(n);return{buffer:s,dbMtimeMs:o.mtimeMs,dbSize:o.size,walMtimeMs:i.mtimeMs,walSize:i.size,walIncluded:i.size===0}}var fi=class{_sqlJsModule=null;_sqlJsInitPromise=null;_dbCache=null;_dbCacheInflight=new Map;_pendingTransientDb=null;extensionUri;constructor(e){this.extensionUri=e}getOpenCodeDataDir(){let e=hi.platform(),t=hi.homedir();if(e==="win32")return qe.join(t,".local","share","opencode");let s=process.env.XDG_DATA_HOME||qe.join(t,".local","share");return qe.join(s,"opencode")}isOpenCodeSessionFile(e){let t=J(e);return t.includes("/opencode/storage/session/")||t.includes("/opencode/opencode.db#ses_")}isOpenCodeDbSession(e){return e.includes("opencode.db#ses_")}async initSqlJs(){return this._sqlJsModule?this._sqlJsModule:(this._sqlJsInitPromise||(this._sqlJsInitPromise=(async()=>{let e=qe.join(__dirname,"sql-wasm.wasm"),t;Ne.existsSync(e)&&(t=Ne.readFileSync(e));let s=await(0,du.default)(t?{wasmBinary:t.buffer}:void 0);return this._sqlJsModule=s,s})().catch(e=>{throw this._sqlJsInitPromise=null,e})),this._sqlJsInitPromise)}dispose(){this.closeDbCache(),this.releasePendingTransientDb(),this._dbCacheInflight.clear(),this._sqlJsInitPromise=null}closeDb(e){try{e.close()}catch{}}closeDbCache(){this._dbCache&&(this.closeDb(this._dbCache.db),this._dbCache=null)}releasePendingTransientDb(){this._pendingTransientDb&&(this.closeDb(this._pendingTransientDb),this._pendingTransientDb=null)}getCachedDbForPath(e){return this._dbCache?.path===e?this._dbCache.db:null}isMissingFileError(e){let t=e?.code;return t==="ENOENT"||t==="ENOTDIR"}statOpenCodeDb(e){try{return Ne.statSync(e)}catch(t){return this.isMissingFileError(t)&&this._dbCache?.path===e&&this.closeDbCache(),null}}isCachedDbCurrent(e,t){let s=Bs(e);return this._dbCache?.path===e&&this._dbCache.mtimeMs===t.mtimeMs&&this._dbCache.size===t.size&&this._dbCache.walMtimeMs===s.mtimeMs&&this._dbCache.walSize===s.size}getDbCacheKey(e,t){let s=Bs(e);return`${e}:${t.mtimeMs}:${t.size}:wal${s.mtimeMs}:${s.size}`}sameDbStats(e,t){return e.mtimeMs===t.mtimeMs&&e.size===t.size}isCachedDbCurrentForFingerprint(e,t){return this._dbCache?.path===e&&this._dbCache.mtimeMs===t.dbMtimeMs&&this._dbCache.size===t.dbSize&&this._dbCache.walMtimeMs===t.walMtimeMs&&this._dbCache.walSize===t.walSize}async refreshOpenCodeDb(e,t){let s;try{s=await qs(e)}catch{return this.getCachedDbForPath(e)}if(this.isCachedDbCurrentForFingerprint(e,s))return this._dbCache?.db??null;let o;try{let r=await this.initSqlJs();o=new r.Database(s.buffer)}catch{return this.getCachedDbForPath(e)}let i=this.statOpenCodeDb(e);return!i||!this.sameDbStats(t,i)?(this.closeDb(o),this.isCachedDbCurrent(e,i??t)?this._dbCache?.db??null:this.getCachedDbForPath(e)):s.walIncluded?(this.closeDbCache(),this.releasePendingTransientDb(),this._dbCache={db:o,path:e,mtimeMs:s.dbMtimeMs,size:s.dbSize,walMtimeMs:s.walMtimeMs,walSize:s.walSize},o):(this.releasePendingTransientDb(),this._pendingTransientDb=o,o)}async getOpenCodeDb(){let e=qe.join(this.getOpenCodeDataDir(),"opencode.db"),t=this.statOpenCodeDb(e);if(!t)return this.getCachedDbForPath(e);if(this.isCachedDbCurrent(e,t))return this._dbCache?.db??null;let s=this.getDbCacheKey(e,t),o=this._dbCacheInflight.get(s);if(o)return o;let i=this.refreshOpenCodeDb(e,t);this._dbCacheInflight.set(s,i);try{return await i}finally{this._dbCacheInflight.get(s)===i&&this._dbCacheInflight.delete(s)}}async readOpenCodeDbSession(e){let t=await this.getOpenCodeDb();if(!t)return null;try{let s=t.exec("SELECT id, slug, title, time_created, time_updated, project_id, directory FROM session WHERE id = ?",[e]);if(s.length===0||s[0].values.length===0)return null;let o=s[0].values[0],i=s[0].columns,r={};for(let a=0;a<i.length;a++)r[i[a]]=o[a];return{id:r.id,slug:r.slug,title:r.title,projectID:r.project_id,directory:r.directory,time:{created:r.time_created,updated:r.time_updated}}}catch{return null}}async readOpenCodeDbMessages(e){let t=await this.getOpenCodeDb();if(!t)return[];try{let s=t.exec("SELECT id, data, time_created FROM message WHERE session_id = ? ORDER BY time_created ASC",[e]);return s.length===0?[]:s[0].values.map(o=>{let i=JSON.parse(o[1]);return i.id=o[0],i.time=i.time||{},i.time.created=i.time.created||o[2],i})}catch{return[]}}async readOpenCodeDbParts(e){let t=await this.getOpenCodeDb();if(!t)return[];try{let s=t.exec("SELECT id, data, time_created FROM part WHERE message_id = ? ORDER BY time_created ASC",[e]);return s.length===0?[]:s[0].values.map(o=>{let i=JSON.parse(o[1]);return i.id=o[0],i.time=i.time||{},i.time.created=i.time.created||o[2],i})}catch{return[]}}async discoverOpenCodeDbSessions(){let e=await this.getOpenCodeDb();if(!e)return[];try{let t=e.exec("SELECT id FROM session");return t.length===0?[]:t[0].values.map(s=>s[0])}catch{return[]}}async statSessionFile(e){if(this.isOpenCodeDbSession(e)){let t=qe.join(this.getOpenCodeDataDir(),"opencode.db");return Ne.promises.stat(t)}return Ne.promises.stat(e)}readOpenCodeMessages(e){let t=this.getOpenCodeDataDir(),s=qe.join(t,"storage","message",e),o=[];try{if(!Ne.existsSync(s))return o;let i=Ne.readdirSync(s,{withFileTypes:!0});for(let r of i)if(!(!r.isFile()||!r.name.endsWith(".json")))try{let a=ya(qe.join(s,r.name),"opencode");if(a===void 0)continue;let c=JSON.parse(a);o.push(c)}catch{}}catch{}return o.sort((i,r)=>(i.time?.created||0)-(r.time?.created||0)),o}readOpenCodeParts(e){let t=this.getOpenCodeDataDir(),s=qe.join(t,"storage","part",e),o=[];try{if(!Ne.existsSync(s))return o;let i=Ne.readdirSync(s,{withFileTypes:!0});for(let r of i)if(!(!r.isFile()||!r.name.endsWith(".json")))try{let a=ya(qe.join(s,r.name),"opencode");if(a===void 0)continue;let c=JSON.parse(a);o.push(c)}catch{}}catch{}return o.sort((i,r)=>(i.time?.start||0)-(r.time?.start||0)),o}getOpenCodeSessionId(e){let t=e.indexOf("opencode.db#");if(t!==-1)return e.substring(t+12);let s=qe.basename(e,".json");return s.startsWith("ses_")?s:null}async getOpenCodeMessagesForSession(e){let t=this.getOpenCodeSessionId(e);if(!t)return[];if(this.isOpenCodeDbSession(e))return this.readOpenCodeDbMessages(t);let s=await this.readOpenCodeDbMessages(t);return s.length>0?s:this.readOpenCodeMessages(t)}async getOpenCodePartsForMessage(e){let t=await this.readOpenCodeDbParts(e);return t.length>0?t:this.readOpenCodeParts(e)}async getTokensFromOpenCodeSession(e){let t=await this.getOpenCodeMessagesForSession(e);return this.getTokensFromOpenCodeMessages(t)}getTokensFromOpenCodeMessages(e){let t=0,s=0;for(let o of e)o.role==="assistant"&&o.tokens&&(typeof o.tokens.total=="number"&&(s=o.tokens.total),t+=o.tokens.reasoning||0);return{tokens:s,thinkingTokens:t}}async countOpenCodeInteractions(e){let t=await this.getOpenCodeMessagesForSession(e);return this.countOpenCodeInteractionsFromMessages(t)}countOpenCodeInteractionsFromMessages(e){return e.filter(t=>t.role==="user").length}getAssistantMessagesByParent(e){let t=new Map;for(let s of e){if(s.role!=="assistant"||!s.parentID)continue;let o=t.get(s.parentID)??[];o.push(s),t.set(s.parentID,o)}return t}async getOpenCodeModelUsage(e){let t=await this.getOpenCodeMessagesForSession(e);return this.getOpenCodeModelUsageFromMessages(t)}computeTurnCumTotal(e,t){let s=t;for(let o of e)typeof o.tokens?.total=="number"&&(s=Math.max(s,o.tokens.total));return s}getOpenCodeModelUsageFromMessages(e){let t={},s=this.getAssistantMessagesByParent(e),o=0;for(let i=0;i<e.length;i++){let r=e[i];if(r.role!=="user")continue;let a=s.get(r.id)??[];if(a.length===0)continue;let c=this.computeTurnCumTotal(a,o),d=c-o;if(d<=0){o=c;continue}let p=a[0].modelID||a[0].model?.modelID||"unknown";if(O(p)){o=c;continue}t[p]||(t[p]={inputTokens:0,outputTokens:0,sessions:0});let g=a.reduce((b,T)=>b+(T.tokens?.output||0)+(T.tokens?.reasoning||0),0);t[p].inputTokens+=Math.max(0,d-g),t[p].outputTokens+=g;let h=a.reduce((b,T)=>b+(T.tokens?.cache?.read||0),0),y=a.reduce((b,T)=>b+(T.tokens?.cache?.write||0),0);h>0&&(t[p].cachedReadTokens=(t[p].cachedReadTokens??0)+h),y>0&&(t[p].cacheCreationTokens=(t[p].cacheCreationTokens??0)+y),o=c}return t}async getOpenCodeSessionData(e){let t=await this.getOpenCodeMessagesForSession(e),s=Date.now();t.length>0&&t[0].time?.created&&(s=t[0].time.created);let{tokens:o}=this.getTokensFromOpenCodeMessages(t),i=this.countOpenCodeInteractionsFromMessages(t),r=this.getOpenCodeModelUsageFromMessages(t),a=this.getAssistantMessagesByParent(t),c={};for(let p=0;p<t.length;p++){let g=t[p];if(g.role!=="user")continue;let h=a.get(g.id)??[];if(h.length===0)continue;let y=h[0].modelID||h[0].model?.modelID||"unknown";O(y)||(c[y]=(c[y]||0)+1)}let d={};for(let[p,g]of Object.entries(r))d[p]={...g,interactions:c[p]||0};return{tokens:o,interactions:i,modelUsage:d,timestamp:s}}};var xt=S(require("fs")),zs=S(require("path")),_i=S(require("os")),mu=S(Pt());function bs(n){let e=typeof n=="number"?n:typeof n=="string"?Number(n):0;return Number.isFinite(e)?e:0}var yi=class{_sqlJsModule=null;_sqlJsInitPromise=null;_dbCache=null;_dbCacheInflight=new Map;_pendingTransientDb=null;extensionUri;constructor(e){this.extensionUri=e}getKiloDataDir(){let e=_i.platform(),t=_i.homedir();if(e==="win32")return zs.join(t,".local","share","kilo");let s=process.env.XDG_DATA_HOME||zs.join(t,".local","share");return zs.join(s,"kilo")}getKiloDbPath(){return zs.join(this.getKiloDataDir(),"kilo.db")}isKiloSessionFile(e){return J(e).includes("/kilo/kilo.db#ses_")}isKiloDbSession(e){return e.includes("kilo.db#ses_")}getKiloSessionId(e){let t=e.indexOf("kilo.db#");return t!==-1?e.substring(t+8):null}async initSqlJs(){return this._sqlJsModule?this._sqlJsModule:(this._sqlJsInitPromise||(this._sqlJsInitPromise=(async()=>{let e=zs.join(__dirname,"sql-wasm.wasm"),t;xt.existsSync(e)&&(t=xt.readFileSync(e));let s=await(0,mu.default)(t?{wasmBinary:t.buffer}:void 0);return this._sqlJsModule=s,s})().catch(e=>{throw this._sqlJsInitPromise=null,e})),this._sqlJsInitPromise)}dispose(){this.closeDbCache(),this.releasePendingTransientDb(),this._dbCacheInflight.clear(),this._sqlJsInitPromise=null}closeDb(e){try{e.close()}catch{}}closeDbCache(){this._dbCache&&(this.closeDb(this._dbCache.db),this._dbCache=null)}releasePendingTransientDb(){this._pendingTransientDb&&(this.closeDb(this._pendingTransientDb),this._pendingTransientDb=null)}getCachedDbForPath(e){return this._dbCache?.path===e?this._dbCache.db:null}isMissingFileError(e){let t=e?.code;return t==="ENOENT"||t==="ENOTDIR"}statKiloDb(e){try{return xt.statSync(e)}catch(t){return this.isMissingFileError(t)&&this._dbCache?.path===e&&this.closeDbCache(),null}}isCachedDbCurrent(e,t){let s=Bs(e);return this._dbCache?.path===e&&this._dbCache.mtimeMs===t.mtimeMs&&this._dbCache.size===t.size&&this._dbCache.walMtimeMs===s.mtimeMs&&this._dbCache.walSize===s.size}getDbCacheKey(e,t){let s=Bs(e);return`${e}:${t.mtimeMs}:${t.size}:wal${s.mtimeMs}:${s.size}`}sameDbStats(e,t){return e.mtimeMs===t.mtimeMs&&e.size===t.size}isCachedDbCurrentForFingerprint(e,t){return this._dbCache?.path===e&&this._dbCache.mtimeMs===t.dbMtimeMs&&this._dbCache.size===t.dbSize&&this._dbCache.walMtimeMs===t.walMtimeMs&&this._dbCache.walSize===t.walSize}async refreshKiloDb(e,t){let s;try{s=await qs(e)}catch{return this.getCachedDbForPath(e)}if(this.isCachedDbCurrentForFingerprint(e,s))return this._dbCache?.db??null;let o;try{let r=await this.initSqlJs();o=new r.Database(s.buffer)}catch{return this.getCachedDbForPath(e)}let i=this.statKiloDb(e);return!i||!this.sameDbStats(t,i)?(this.closeDb(o),this.isCachedDbCurrent(e,i??t)?this._dbCache?.db??null:this.getCachedDbForPath(e)):s.walIncluded?(this.closeDbCache(),this.releasePendingTransientDb(),this._dbCache={db:o,path:e,mtimeMs:s.dbMtimeMs,size:s.dbSize,walMtimeMs:s.walMtimeMs,walSize:s.walSize},o):(this.releasePendingTransientDb(),this._pendingTransientDb=o,o)}async getKiloDb(){let e=this.getKiloDbPath(),t=this.statKiloDb(e);if(!t)return this.getCachedDbForPath(e);if(this.isCachedDbCurrent(e,t))return this._dbCache?.db??null;let s=this.getDbCacheKey(e,t),o=this._dbCacheInflight.get(s);if(o)return o;let i=this.refreshKiloDb(e,t);this._dbCacheInflight.set(s,i);try{return await i}finally{this._dbCacheInflight.get(s)===i&&this._dbCacheInflight.delete(s)}}async readKiloDbSession(e){let t=await this.getKiloDb();if(!t)return null;try{let s=t.exec("SELECT id, slug, title, time_created, time_updated, project_id, directory FROM session WHERE id = ?",[e]);if(s.length===0||s[0].values.length===0)return null;let o=s[0].values[0],i=s[0].columns,r={};for(let a=0;a<i.length;a++)r[i[a]]=o[a];return{id:r.id,slug:r.slug,title:r.title,projectID:r.project_id,directory:r.directory,time:{created:r.time_created,updated:r.time_updated}}}catch{return null}}async readKiloDbMessages(e){let t=await this.getKiloDb();if(!t)return[];try{let s=t.exec("SELECT id, data, time_created FROM message WHERE session_id = ? ORDER BY time_created ASC",[e]);return s.length===0?[]:s[0].values.map(o=>{let i=JSON.parse(o[1]);return i.id=o[0],i.time=i.time||{},i.time.created=i.time.created||o[2],i})}catch{return[]}}async readKiloDbParts(e){let t=await this.getKiloDb();if(!t)return[];try{let s=t.exec("SELECT id, data, time_created FROM part WHERE message_id = ? ORDER BY time_created ASC",[e]);return s.length===0?[]:s[0].values.map(o=>{let i=JSON.parse(o[1]);return i.id=o[0],i.time=i.time||{},i.time.created=i.time.created||o[2],i})}catch{return[]}}async discoverKiloDbSessions(){let e=await this.getKiloDb();if(!e)return[];try{let t=e.exec("SELECT id FROM session");return t.length===0?[]:t[0].values.map(s=>s[0])}catch{return[]}}async statSessionFile(e){return this.isKiloDbSession(e)?xt.promises.stat(this.getKiloDbPath()):xt.promises.stat(e)}async getKiloMessagesForSession(e){let t=this.getKiloSessionId(e);return t?this.readKiloDbMessages(t):[]}async getKiloPartsForMessage(e){return this.readKiloDbParts(e)}async getTokensFromKiloSession(e){let t=await this.getKiloMessagesForSession(e);return this.getTokensFromKiloMessages(t)}getTokensFromKiloMessages(e){let t=0,s=0;for(let o of e)if(o.role==="assistant"&&o.tokens){let i=bs(o.tokens.total);i>0&&(s=i),t+=bs(o.tokens.reasoning)}return{tokens:s,thinkingTokens:t}}async countKiloInteractions(e){let t=await this.getKiloMessagesForSession(e);return this.countKiloInteractionsFromMessages(t)}countKiloInteractionsFromMessages(e){return e.filter(t=>t.role==="user").length}getAssistantMessagesByParent(e){let t=new Map;for(let s of e){if(s.role!=="assistant"||!s.parentID)continue;let o=t.get(s.parentID)??[];o.push(s),t.set(s.parentID,o)}return t}async getKiloModelUsage(e){let t=await this.getKiloMessagesForSession(e);return this.getKiloModelUsageFromMessages(t)}computeTurnCumTotal(e,t){let s=t;for(let o of e)s=Math.max(s,bs(o.tokens?.total));return s}getKiloModelUsageFromMessages(e){let t={},s=this.getAssistantMessagesByParent(e),o=0;for(let i=0;i<e.length;i++){let r=e[i];if(r.role!=="user")continue;let a=s.get(r.id)??[];if(a.length===0)continue;let c=this.computeTurnCumTotal(a,o),d=c-o;if(d<=0){o=c;continue}let p=a[0].modelID||a[0].model?.modelID||"unknown";if(O(p)){o=c;continue}t[p]||(t[p]={inputTokens:0,outputTokens:0,sessions:0});let g=a.reduce((b,T)=>b+bs(T.tokens?.output)+bs(T.tokens?.reasoning),0);t[p].inputTokens+=Math.max(0,d-g),t[p].outputTokens+=g;let h=a.reduce((b,T)=>b+bs(T.tokens?.cache?.read),0),y=a.reduce((b,T)=>b+bs(T.tokens?.cache?.write),0);h>0&&(t[p].cachedReadTokens=(t[p].cachedReadTokens??0)+h),y>0&&(t[p].cacheCreationTokens=(t[p].cacheCreationTokens??0)+y),o=c}return t}async getKiloSessionData(e){let t=await this.getKiloMessagesForSession(e),s=Date.now(),o=t[0]?.time?.created;if(typeof o=="number"&&Number.isFinite(o))s=o;else if(typeof o=="string"){let g=Date.parse(o);Number.isNaN(g)||(s=g)}let{tokens:i}=this.getTokensFromKiloMessages(t),r=this.countKiloInteractionsFromMessages(t),a=this.getKiloModelUsageFromMessages(t),c=this.getAssistantMessagesByParent(t),d={};for(let g=0;g<t.length;g++){let h=t[g];if(h.role!=="user")continue;let y=c.get(h.id)??[];if(y.length===0)continue;let b=y[0].modelID||y[0].model?.modelID||"unknown";O(b)||(d[b]=(d[b]||0)+1)}let p={};for(let[g,h]of Object.entries(a))p[g]={...h,interactions:d[g]||0};return{tokens:i,interactions:r,modelUsage:p,timestamp:s}}};var lt=S(require("fs")),Cs=S(require("path")),Fn=S(require("os")),pu=S(Pt());var bi=class{_sqlJsModule=null;_sqlJsInitPromise=null;_dbCache=new Map;_dbCacheInflight=new Map;extensionUri;constructor(e){this.extensionUri=e}dispose(){for(let e of this._dbCache.values())try{e.db.close()}catch{}this._dbCache.clear(),this._dbCacheInflight.clear(),this._sqlJsInitPromise=null}closeDb(e){try{e.close()}catch{}}isMissingFileError(e){let t=e?.code;return t==="ENOENT"||t==="ENOTDIR"}statCrushDb(e){try{return lt.statSync(e)}catch(t){return this.isMissingFileError(t)&&this._dbCache.has(e)&&(this.closeDb(this._dbCache.get(e).db),this._dbCache.delete(e)),null}}isCachedDbCurrent(e,t){let s=this._dbCache.get(e);return!!s&&s.mtimeMs===t.mtimeMs&&s.size===t.size}getDbCacheKey(e,t){return`${e}:${t.mtimeMs}:${t.size}`}sameDbStats(e,t){return e.mtimeMs===t.mtimeMs&&e.size===t.size}async refreshCrushDb(e,t){let s;try{let r=await this.initSqlJs(),a=lt.readFileSync(e);s=new r.Database(a)}catch{return this._dbCache.get(e)?.db??null}let o=this.statCrushDb(e);if(!o||!this.sameDbStats(t,o))return this.closeDb(s),this._dbCache.get(e)?.db??null;let i=this._dbCache.get(e);return i&&this.closeDb(i.db),this._dbCache.set(e,{db:s,mtimeMs:t.mtimeMs,size:t.size}),s}async getCrushDb(e){let t=this.statCrushDb(e);if(!t)return this._dbCache.get(e)?.db??null;if(this.isCachedDbCurrent(e,t))return this._dbCache.get(e).db;let s=this.getDbCacheKey(e,t),o=this._dbCacheInflight.get(s);if(o)return o;let i=this.refreshCrushDb(e,t);this._dbCacheInflight.set(s,i);try{return await i}finally{this._dbCacheInflight.get(s)===i&&this._dbCacheInflight.delete(s)}}getCrushConfigDir(){if(Fn.platform()==="win32"){let s=process.env.LOCALAPPDATA||Cs.join(Fn.homedir(),"AppData","Local");return Cs.join(s,"crush")}let t=process.env.XDG_CONFIG_HOME||Cs.join(Fn.homedir(),".config");return Cs.join(t,"crush")}readCrushProjects(){let e=Cs.join(this.getCrushConfigDir(),"projects.json");if(!lt.existsSync(e))return[];try{let t=lt.readFileSync(e,"utf8"),s=JSON.parse(t);return Array.isArray(s.projects)?s.projects:[]}catch{return[]}}isCrushSessionFile(e){return ue(e).includes("/.crush/crush.db#")}getCrushDbPath(e){let t=e.indexOf("crush.db#");return t===-1?e:e.substring(0,t+8)}getCrushSessionId(e){let t=e.indexOf("crush.db#");return t===-1?null:e.substring(t+9)}async initSqlJs(){return this._sqlJsModule?this._sqlJsModule:(this._sqlJsInitPromise||(this._sqlJsInitPromise=(async()=>{let e=Cs.join(__dirname,"sql-wasm.wasm"),t;lt.existsSync(e)&&(t=lt.readFileSync(e));let s=await(0,pu.default)(t?{wasmBinary:t.buffer}:void 0);return this._sqlJsModule=s,s})().catch(e=>{throw this._sqlJsInitPromise=null,e})),this._sqlJsInitPromise)}async statSessionFile(e){let t=this.getCrushDbPath(e);return lt.promises.stat(t)}async discoverSessionsInDb(e){let t=await this.getCrushDb(e);if(!t)return[];try{let s=t.exec("SELECT id FROM sessions");return s.length===0?[]:s[0].values.map(o=>o[0])}catch{return[]}}async readCrushSession(e){let t=this.getCrushDbPath(e),s=this.getCrushSessionId(e);if(!s)return null;let o=await this.getCrushDb(t);if(!o)return null;try{let i=o.exec("SELECT id, title, message_count, prompt_tokens, completion_tokens, created_at, updated_at FROM sessions WHERE id = ?",[s]);if(i.length===0||i[0].values.length===0)return null;let r=i[0].columns,a=i[0].values[0],c={};return r.forEach((d,p)=>{c[d]=a[p]}),c}catch{return null}}async getCrushMessages(e){let t=this.getCrushDbPath(e),s=this.getCrushSessionId(e);if(!s)return[];let o=await this.getCrushDb(t);if(!o)return[];try{let i=o.exec("SELECT id, session_id, role, parts, model, provider, created_at, updated_at, finished_at FROM messages WHERE session_id = ? AND is_summary_message = 0 ORDER BY created_at ASC",[s]);if(i.length===0)return[];let r=i[0].columns;return i[0].values.map(a=>{let c={};if(r.forEach((d,p)=>{c[d]=a[p]}),typeof c.parts=="string")try{c.parts=JSON.parse(c.parts)}catch{c.parts=[]}return c})}catch{return[]}}async getTokensFromCrushSession(e){let t=await this.readCrushSession(e);if(!t)return{tokens:0,thinkingTokens:0};let s=typeof t.prompt_tokens=="number"?t.prompt_tokens:0,o=typeof t.completion_tokens=="number"?t.completion_tokens:0;return{tokens:s+o,thinkingTokens:0}}async countCrushInteractions(e){return(await this.getCrushMessages(e)).filter(s=>s.role==="user").length}async getCrushModelUsage(e){let t={},s=await this.readCrushSession(e);if(!s)return t;let o=typeof s.prompt_tokens=="number"?s.prompt_tokens:0,i=typeof s.completion_tokens=="number"?s.completion_tokens:0;if(o+i===0)return t;let a=(await this.getCrushMessages(e)).filter(p=>p.role==="assistant"&&p.model);if(a.length===0)return t.unknown={inputTokens:o,outputTokens:i,sessions:0},t;let c={};for(let p of a){let g=p.model||"unknown";O(g)||(c[g]=(c[g]||0)+1)}let d=a.length;for(let[p,g]of Object.entries(c)){let h=g/d;t[p]={inputTokens:Math.round(o*h),outputTokens:Math.round(i*h),sessions:0}}return t}async getCrushSessionData(e){let t=await this.readCrushSession(e);if(!t)return{tokens:0,interactions:0,modelUsage:{},timestamp:0};let s=typeof t.prompt_tokens=="number"?t.prompt_tokens:0,o=typeof t.completion_tokens=="number"?t.completion_tokens:0,i=s+o,r=typeof t.created_at=="number"?t.created_at*1e3:Date.now(),a=await this.getCrushModelUsage(e),d=(await this.getCrushMessages(e)).filter(h=>h.role==="user").length,p=s+o,g={};for(let[h,y]of Object.entries(a)){let b=y.inputTokens+y.outputTokens,T=p>0?b/p:0;g[h]={inputTokens:y.inputTokens,outputTokens:y.outputTokens,sessions:y.sessions,interactions:Math.round(d*T)}}return{tokens:i,interactions:d,modelUsage:g,timestamp:r}}getToolCallsFromMessages(e){let t=[];for(let s of e)if(!(s.role!=="assistant"||!Array.isArray(s.parts)))for(let o of s.parts)o?.type==="tool_call"&&o?.data?.name&&t.push(o.data.name);return t}};var Nn=S(require("fs")),ks=S(require("path")),gu=S(require("os"));var Ci=class{getContinueDataDir(){return ks.join(gu.homedir(),".continue")}getContinueSessionsDir(){return ks.join(this.getContinueDataDir(),"sessions")}isContinueSessionFile(e){let t=J(e);return t.includes("/.continue/sessions/")&&t.endsWith(".json")}async getContinueSessionFiles(){let e=this.getContinueSessionsDir();try{await Nn.promises.access(e)}catch{return[]}try{return(await Nn.promises.readdir(e)).filter(s=>s.endsWith(".json")&&s!=="sessions.json").map(s=>ks.join(e,s))}catch{return[]}}async readSessionFile(e){try{let t=await Nn.promises.readFile(e,"utf8");return JSON.parse(t)}catch{return null}}estimateTokens(e){return e?Math.ceil(e.length/4):0}async getTokensFromContinueSession(e){let t=await this.readSessionFile(e);if(!t||!Array.isArray(t.history))return{tokens:0,thinkingTokens:0};let s=0,o=0;for(let i of t.history)if(Array.isArray(i.promptLogs))for(let r of i.promptLogs)s+=this.estimateTokens(r.prompt||""),o+=this.estimateTokens(r.completion||"");return{tokens:s+o,thinkingTokens:0}}async countContinueInteractions(e){let t=await this.readSessionFile(e);return!t||!Array.isArray(t.history)?0:t.history.filter(s=>s.message?.role==="user").length}async getContinueModelUsage(e){let t=await this.readSessionFile(e);if(!t||!Array.isArray(t.history))return{};let s={};for(let o of t.history)if(Array.isArray(o.promptLogs))for(let i of o.promptLogs){let r=i.modelTitle||t.chatModelTitle||"unknown";O(r)||(s[r]||(s[r]={inputTokens:0,outputTokens:0,sessions:0}),s[r].inputTokens+=this.estimateTokens(i.prompt||""),s[r].outputTokens+=this.estimateTokens(i.completion||""))}return s}async getContinueSessionMeta(e){let t=await this.readSessionFile(e);return t?{title:t.title,model:t.chatModelTitle,workspaceDirectory:t.workspaceDirectory,mode:t.mode}:null}async readSessionsIndex(){let e=ks.join(this.getContinueSessionsDir(),"sessions.json"),t=new Map;try{let s=await Nn.promises.readFile(e,"utf8"),o=JSON.parse(s);if(!Array.isArray(o))return t;for(let i of o)i.sessionId&&t.set(i.sessionId,{dateCreated:i.dateCreated?Number(i.dateCreated):void 0,title:i.title,workspaceDirectory:i.workspaceDirectory})}catch{}return t}getContinueSessionId(e){return ks.basename(e,".json")}extractUserText(e){return typeof e=="string"?e:Array.isArray(e)?e.filter(t=>t.type==="text"&&typeof t.text=="string").map(t=>t.text).join(`
|
|
34
|
-
`):""}async buildContinueTurns(e){let t=await this.readSessionFile(e);if(!t||!Array.isArray(t.history))return[];let s=t.history,o=[],i=0;for(;i<s.length;){if(s[i].message?.role!=="user"){i++;continue}let{turn:a,nextIndex:c}=this.buildTurnFromHistory(s,i,t.chatModelTitle||null);o.push(a),i=c}return o}buildTurnFromHistory(e,t,s){let o=this.extractUserText(e[t].message.content),i={assistantText:"",model:s,inputTokens:0,outputTokens:0,toolCalls:[],pendingToolCalls:new Map},r=t+1;for(;r<e.length&&e[r].message?.role!=="user";){let a=e[r],c=a.message?.role;c==="assistant"?this.processAssistantSubItem(a,i):c==="tool"&&this.processToolSubItem(a,i),r++}for(let[,a]of i.pendingToolCalls)i.toolCalls.push(a);return{turn:{userText:o,assistantText:i.assistantText,model:i.model,toolCalls:i.toolCalls,inputTokens:i.inputTokens,outputTokens:i.outputTokens},nextIndex:r}}processAssistantSubItem(e,t){if(typeof e.message.content=="string"&&e.message.content&&(t.assistantText+=e.message.content),Array.isArray(e.promptLogs)&&e.promptLogs.length>0){let s=e.promptLogs[0];s.modelTitle&&(t.model=s.modelTitle);for(let o of e.promptLogs)t.inputTokens+=this.estimateTokens(o.prompt||""),t.outputTokens+=this.estimateTokens(o.completion||"")}this.collectToolCallsFromAssistant(e,t)}collectToolCallsFromAssistant(e,t){if(Array.isArray(e.message.toolCalls))for(let s of e.message.toolCalls){let o=s.function?.name||s.name||"unknown",i=s.function?.arguments,r=s.id||o;t.pendingToolCalls.set(r,{toolName:o,arguments:i})}}processToolSubItem(e,t){let s=e.message.toolCallId||"",o=this.extractUserText(e.message.content),i=t.pendingToolCalls.get(s);i?(t.toolCalls.push({...i,result:o}),t.pendingToolCalls.delete(s)):t.toolCalls.push({toolName:"unknown",result:o})}};var Js=S(require("fs")),ct=S(require("path")),Pa=S(require("os"));function fu(n){let e=globalThis.window;return e?e[n]:void 0}var vf=fu("__MODEL_PRICING__"),Pf=Object.create(null);for(let[n,e]of Object.entries(vf?.pricing??{}))e.displayNames&&e.displayNames.length>0&&(Pf[n]=e.displayNames[0]);var Af=" (Custom)";function ka(n){try{return decodeURIComponent(n)}catch{return n}}function yu(n){let e=n.split("/");if(!(e.length!==3||e.some(t=>t.trim()==="")))return{source:ka(e[0]),providerName:ka(e[1]),modelId:ka(e[2])}}var hu=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\//i;function ki(n){let e=[],t=r=>{r&&!e.includes(r)&&e.push(r)},s=r=>{t(r),t(r.replace(/(\d+)-(\d+)(?=-|$)/,"$1.$2"))},o=n.replace(/^copilot\//,"");s(o);let i=yu(o);return i&&s(i.modelId),hu.test(o)&&s(o.replace(hu,"")),e}function Ws(n){let e=yu(n);return e?`${e.providerName}${Af}`:void 0}function xf(n){if(typeof n!="object"||n===null)return;let t=n.result;if(!(typeof t!="object"||t===null))return t}function Df(n){if(typeof n!="object"||n===null)return;let t=n.response;if(Array.isArray(t))return t}function Ef(n){return typeof n!="object"||n===null?!1:n.kind==="toolInvocationSerialized"}function Rf(n){return typeof n!="object"||n===null?!1:n.kind==="subagent"}var If=20,Uf=5,Of=130,Ff=50,Nf=10,Lf=.25,jf=10,_u=new WeakMap;function Gf(n){let e=_u.get(n);return e||(e=Object.entries(n).map(([t,s])=>[t,t.replace("-",""),s]),_u.set(n,e)),e}function te(n,e="gpt-4",t={}){let s=Lf;for(let[o,i,r]of Gf(t))if(e.includes(o)||e.includes(i)){s=r;break}return Math.ceil(n.length*s)}function Bf(n){return n.trim().toLowerCase().replace(/\s+/g,"-")}function $s(n){if(!Ef(n))return null;let e=n.toolSpecificData;if(!Rf(e))return null;let t=typeof e.prompt=="string"?e.prompt:"",s="";if(typeof e.result=="string")s=e.result;else if(e.result!==null&&typeof e.result=="object"){let r=Object.entries(e.result);r.sort(([a],[c])=>Number(a)-Number(c)),s=r.map(([,a])=>typeof a=="string"?a:"").join("")}let o=typeof e.modelName=="string"?e.modelName:"",i=o?Bf(o):"";return t||s?{prompt:t,result:s,modelName:i}:null}function Ss(n){if(typeof n!="object"||n===null)return{text:"",isThinking:!1};let e=n;if(e.kind==="thinking"){let o=e.value;return{text:typeof o=="string"?o:"",isThinking:!0}}let t=e.content;if(typeof t=="object"&&t!==null){let o=t.value;if(typeof o=="string"&&o)return{text:o,isThinking:!1}}let s=e.value;return typeof s=="string"&&s?{text:s,isThinking:!1}:{text:"",isThinking:!1}}var N0=1/1e11;function qf(n){return typeof n.promptTokens=="number"?n.promptTokens:n.metadata&&typeof n.metadata.promptTokens=="number"?n.metadata.promptTokens:n.usage&&typeof n.usage.promptTokens=="number"?n.usage.promptTokens:0}function zf(n){if(typeof n.promptTokens=="number"&&typeof n.outputTokens=="number")return n.promptTokens+n.outputTokens;if(n.metadata&&typeof n.metadata.promptTokens=="number"&&typeof n.metadata.outputTokens=="number")return n.metadata.promptTokens+n.metadata.outputTokens;if(n.usage){let e=typeof n.usage.promptTokens=="number"?n.usage.promptTokens:0,t=typeof n.usage.completionTokens=="number"?n.usage.completionTokens:0;return e+t}return 0}function Wf(n,e){let t=n.length;for(let i of e.keys())i+1>t&&(t=i+1);let s=0,o=0;for(let i=0;i<t;i++){let r=xf(n[i]),a=r?zf(r):0;if(a>0)s+=a,o=Math.max(o,qf(r));else{let c=e.get(i);c&&(s+=c.promptTokens+c.outputTokens,o=Math.max(o,c.promptTokens))}}return{total:s,maxPromptTokens:o}}function $f(n){let e=$s(n);if(!e)return 0;let t=0;return e.prompt&&(t+=te(e.prompt)),e.result&&(t+=te(e.result)),t}function Hf(n){let e=0;for(let t of n){let s=Df(t);if(s)for(let o of s)e+=$f(o)}return e}function Jf(n){let e=n.k;if(n.kind!==2||e?.[0]!=="requests"||!Array.isArray(n.v))return 0;let t=0;for(let s of n.v){let i=s.message;i?.text&&(t+=te(String(i.text)))}return t}function Kf(n,e){if($s(n))return;let{text:t,isThinking:s}=Ss(n);t&&(s?e.totalThinkingTokens+=te(t):e.totalTokens+=te(t))}function Vf(n,e){let t=n.k;if(!(n.kind!==2||!t?.includes("response")||!Array.isArray(n.v)))for(let s of n.v)Kf(s,e)}var Sa=class{estimate(e){let t={totalTokens:0,totalThinkingTokens:0,parseFailedLines:0},s={};for(let d of e)if(d.trim())try{let p=JSON.parse(d);s=jn(s,p),t.totalTokens+=Jf(p),Vf(p,t)}catch{t.parseFailedLines++}let o=t.parseFailedLines>0?wa(e):new Map,i=s.requests,r=Array.isArray(i)?i:[],{total:a,maxPromptTokens:c}=Wf(r,o);return t.totalTokens+=Hf(r),{tokens:t.totalTokens+t.totalThinkingTokens,thinkingTokens:t.totalThinkingTokens,actualTokens:a,cacheReadTokens:0,modelUsage:{},dailyActualTokens:{},copilotNanoAiu:0,...c>0?{maxRequestInputTokens:c}:{}}}};function Yf(n,e,t){let s=e?.usage;if(!s)return 0;let o=typeof s.inputTokens=="number"?s.inputTokens:0,i=typeof s.outputTokens=="number"?s.outputTokens:0,r=typeof s.cacheReadTokens=="number"?s.cacheReadTokens:0,a=typeof s.cacheWriteTokens=="number"?s.cacheWriteTokens:0;return t.cliActualTokens+=o+i,t.cliCacheReadTokens+=r,t.cliShutdownModelUsage[n]||(t.cliShutdownModelUsage[n]={inputTokens:0,outputTokens:0,sessions:0}),t.cliShutdownModelUsage[n].inputTokens+=o,t.cliShutdownModelUsage[n].outputTokens+=i,r>0&&(t.cliShutdownModelUsage[n].cachedReadTokens=(t.cliShutdownModelUsage[n].cachedReadTokens??0)+r),a>0&&(t.cliShutdownModelUsage[n].cacheCreationTokens=(t.cliShutdownModelUsage[n].cacheCreationTokens??0)+a),o+i}function Qf(n,e){let t=n.data;if(!t?.modelMetrics)return;e.cliShutdownModelUsage||(e.cliShutdownModelUsage={});let s=0;for(let[i,r]of Object.entries(t.modelMetrics))s+=Yf(i,r,e);let o=typeof t.totalNanoAiu=="number"?t.totalNanoAiu:0;if(o>0&&(e.cliTotalNanoAiu+=o),s>0&&n.timestamp){let i=N(new Date(String(n.timestamp)));i&&i!=="Inval"&&(e.dailyActualTokens[i]=(e.dailyActualTokens[i]||0)+s)}}function Xf(n,e){let s=n.data?.contextTier;typeof s=="string"&&s&&(e.contextTier=s)}function Zf(n,e){let t=n.data,s=typeof t?.messagesRemovedDuringTruncation=="number"?t.messagesRemovedDuringTruncation:0;s>0&&(e.truncationCount++,e.messagesRemovedByTruncation+=s)}function eh(n,e){let t=n?.reasoningText;typeof t=="string"&&t&&(e.totalThinkingTokens+=te(t));let s=n?.thinking?.text;typeof s=="string"&&s&&(e.totalThinkingTokens+=te(s))}function th(n,e,t){t.cliRealOutputByModel||(t.cliRealOutputByModel={});let s=String(n?.model??"unknown");t.cliRealOutputByModel[s]=(t.cliRealOutputByModel[s]??0)+e}function sh(n,e){let t=n.data,s=typeof t?.outputTokens=="number"?t.outputTokens:0;s>0?th(t,s,e):t?.content&&(e.totalTokens+=te(String(t.content))),eh(t,e)}function nh(n,e){if(!n?.result)return;let t=n.result,s=typeof t.detailedContent=="string"?t.detailedContent:typeof t.content=="string"?t.content:"";s&&(e.totalTokens+=te(s))}function oh(n,e){let t=n.data;n.type==="user.message"&&t?.content?e.totalTokens+=te(String(t.content)):n.type==="user.message_rendered"&&t?.renderedMessage?e.totalTokens+=te(String(t.renderedMessage)):n.type==="assistant.message"?sh(n,e):n.type==="tool.execution_start"?e.totalEstToolCalls++:n.type==="tool.execution_complete"?nh(t,e):n.content&&(e.totalTokens+=te(String(n.content)))}function ih(n){if(!n.cliRealOutputByModel)return;let e=n.totalEstToolCalls>If?Of:n.totalEstToolCalls>Uf?Ff:Nf;for(let t of Object.values(n.cliRealOutputByModel)){let s=Math.round(t*e);n.cliActualTokens+=s+t,n.cliCacheReadTokens+=s}}var Ta=class{estimate(e){let t={totalTokens:0,totalThinkingTokens:0,cliActualTokens:0,cliCacheReadTokens:0,cliShutdownModelUsage:null,cliRealOutputByModel:null,totalEstToolCalls:0,dailyActualTokens:{},cliTotalNanoAiu:0,truncationCount:0,messagesRemovedByTruncation:0,contextTier:null};for(let s of e)if(s.trim())try{let o=JSON.parse(s);o.type==="session.shutdown"?Qf(o,t):o.type==="session.truncation"?Zf(o,t):(o.type==="session.start"||o.type==="session.resume"||o.type==="session.model_change")&&Xf(o,t),oh(o,t)}catch{}return t.cliActualTokens||ih(t),{tokens:t.totalTokens+t.totalThinkingTokens,thinkingTokens:t.totalThinkingTokens,actualTokens:t.cliActualTokens,cacheReadTokens:t.cliCacheReadTokens,modelUsage:t.cliShutdownModelUsage??{},dailyActualTokens:t.dailyActualTokens,copilotNanoAiu:t.cliTotalNanoAiu,...t.truncationCount>0?{truncationCount:t.truncationCount,messagesRemovedByTruncation:t.messagesRemovedByTruncation}:{},...t.contextTier?{contextTier:t.contextTier}:{}}}};function rh(n){let e=0;for(let t of n)if(t.trim()){if(++e>jf)break;try{if(typeof JSON.parse(t).kind=="number")return new Sa}catch{}}return new Ta}function Si(n,e){let t=n.trim().split(`
|
|
35
|
-
`),o=
|
|
31
|
+
`,o)}while(s!==-1);return i+=n.slice(o),i}var ou=(n=0)=>e=>`\x1B[${e+n}m`,fa=(n=0)=>e=>`\x1B[${38+n};5;${e}m`,ha=(n=0)=>(e,t,s)=>`\x1B[${38+n};2;${e};${t};${s}m`,Cf=n=>`\x1B[58;5;${n<90?n-30:n-90+8}m`,ie={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],underlineDouble:["4:2",24],underlineCurly:["4:3",24],underlineDotted:["4:4",24],underlineDashed:["4:5",24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]},underlineColor:{underlineBlack:["58;5;0",59],underlineRed:["58;5;1",59],underlineGreen:["58;5;2",59],underlineYellow:["58;5;3",59],underlineBlue:["58;5;4",59],underlineMagenta:["58;5;5",59],underlineCyan:["58;5;6",59],underlineWhite:["58;5;7",59],underlineBlackBright:["58;5;8",59],underlineGray:["58;5;8",59],underlineGrey:["58;5;8",59],underlineRedBright:["58;5;9",59],underlineGreenBright:["58;5;10",59],underlineYellowBright:["58;5;11",59],underlineBlueBright:["58;5;12",59],underlineMagentaBright:["58;5;13",59],underlineCyanBright:["58;5;14",59],underlineWhiteBright:["58;5;15",59]}},d0=Object.keys(ie.modifier),kf=Object.keys(ie.color),Sf=Object.keys(ie.bgColor),m0=Object.keys(ie.underlineColor),p0=[...kf,...Sf];function Tf(){let n=new Map;for(let[e,t]of Object.entries(ie)){for(let[s,o]of Object.entries(t))ie[s]={open:`\x1B[${o[0]}m`,close:`\x1B[${o[1]}m`},t[s]=ie[s],n.set(Number.parseInt(o[0],10),o[1]);Object.defineProperty(ie,e,{value:t,enumerable:!1})}return Object.defineProperty(ie,"codes",{value:n,enumerable:!1}),ie.color.close="\x1B[39m",ie.bgColor.close="\x1B[49m",ie.underlineColor.close="\x1B[59m",ie.color.ansi=ou(),ie.color.ansi256=fa(),ie.color.ansi16m=ha(),ie.bgColor.ansi=ou(10),ie.bgColor.ansi256=fa(10),ie.bgColor.ansi16m=ha(10),ie.underlineColor.ansi=Cf,ie.underlineColor.ansi256=fa(20),ie.underlineColor.ansi16m=ha(20),Object.defineProperties(ie,{rgbToAnsi256:{value(e,t,s){return e===t&&t===s?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(t/255*5)+Math.round(s/255*5)},enumerable:!1},hexToRgb:{value(e){let t=/[\da-f]{6}|[\da-f]{3}/i.exec(e.toString(16));if(!t)return[0,0,0];let[s]=t;s.length===3&&(s=[...s].map(i=>i+i).join(""));let o=Number.parseInt(s,16);return[o>>16&255,o>>8&255,o&255]},enumerable:!1},hexToAnsi256:{value:e=>ie.rgbToAnsi256(...ie.hexToRgb(e)),enumerable:!1},ansi256ToAnsi:{value(e){if(e<8)return 30+e;if(e<16)return 90+(e-8);let t,s,o;if(e>=232)t=((e-232)*10+8)/255,s=t,o=t;else{e-=16;let a=e%36;t=Math.floor(e/36)/5,s=Math.floor(a/6)/5,o=a%6/5}let i=Math.max(t,s,o)*2;if(i===0)return 30;let r=30+(Math.round(o)<<2|Math.round(s)<<1|Math.round(t));return i===2&&(r+=60),r},enumerable:!1},rgbToAnsi:{value:(e,t,s)=>ie.ansi256ToAnsi(ie.rgbToAnsi256(e,t,s)),enumerable:!1},hexToAnsi:{value:e=>ie.ansi256ToAnsi(ie.hexToAnsi256(e)),enumerable:!1}}),ie}var wf=Tf(),bt=wf;var ii=S(require("node:process"),1),ru=S(require("node:os"),1),ya=S(require("node:tty"),1);function Ye(n,e=globalThis.Deno?globalThis.Deno.args:ii.default.argv){let t=n.startsWith("-")?"":n.length===1?"-":"--",s=e.indexOf(t+n),o=e.indexOf("--");return s!==-1&&(o===-1||s<o)}var{env:fe}=ii.default,oi;Ye("no-color")||Ye("no-colors")||Ye("color=false")||Ye("color=never")?oi=0:(Ye("color")||Ye("colors")||Ye("color=true")||Ye("color=always"))&&(oi=1);function au(){return/^\d+$/.test(fe.FORCE_COLOR)}function Mf(){if("FORCE_COLOR"in fe){if(fe.FORCE_COLOR==="false")return 0;if(fe.FORCE_COLOR==="true"||fe.FORCE_COLOR.length===0)return 1;if(au())return Math.min(Number.parseInt(fe.FORCE_COLOR,10),3)}}function vf(n){return n===0?!1:{level:n,hasBasic:!0,has256:n>=2,has16m:n>=3}}function Pf(n,{streamIsTTY:e,sniffFlags:t=!0}={}){let s=Mf();s!==void 0&&(oi=s);let o=t?oi:s;if(o===0)return 0;if(t){if(Ye("color=16m")||Ye("color=full")||Ye("color=truecolor"))return 3;if(Ye("color=256"))return 2}if(o!==void 0&&au())return o;if("TF_BUILD"in fe&&"AGENT_NAME"in fe)return 1;if(n&&!e&&o===void 0)return 0;let i=o||0;if(fe.TERM==="dumb")return i;if(ii.default.platform==="win32"){let r=ru.default.release().split(".");return Number(r[0])>=10&&Number(r[2])>=10586?Number(r[2])>=14931?3:2:1}if("CI"in fe)return["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some(r=>r in fe)?3:["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(r=>r in fe)||fe.CI_NAME==="codeship"?1:i;if("TEAMCITY_VERSION"in fe)return/^(?:9\.0*[1-9]\d*\.|\d{2,}\.)/.test(fe.TEAMCITY_VERSION)?1:0;if(fe.COLORTERM==="truecolor"||fe.TERM==="xterm-kitty"||fe.TERM==="xterm-ghostty"||fe.TERM==="wezterm")return 3;if("TERM_PROGRAM"in fe){let r=Number.parseInt((fe.TERM_PROGRAM_VERSION||"").split(".",1)[0],10);switch(fe.TERM_PROGRAM){case"iTerm.app":return r>=3?3:2;case"Apple_Terminal":return 2}}return/-256(?:color)?$/i.test(fe.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(fe.TERM)||"COLORTERM"in fe?1:i}function iu(n,e={}){let t=Pf(n,{streamIsTTY:n&&n.isTTY,...e});return vf(t)}var Af={stdout:iu({isTTY:ya.default.isatty(1)}),stderr:iu({isTTY:ya.default.isatty(2)})},lu=Af;var{stdout:cu,stderr:uu}=lu,xn=Symbol("GENERATOR"),Dn=Symbol("STYLER"),ai=Symbol("IS_EMPTY"),ri=Symbol("LEVEL"),En=Object.create(null),du=n=>{if(!Number.isSafeInteger(n)||n<0||n>3)throw new Error("The `level` should be an integer from 0 to 3")},xf={enumerable:!0,get(){return this[ri]},set(n){du(n),this[ri]=n}},Df=(n,e={})=>{e.level!==void 0&&du(e.level);let t=cu?cu.level:0;n[ri]=e.level===void 0?t:e.level};var Ef=n=>{let e=(...t)=>t.join(" ");return Df(e,n),Object.setPrototypeOf(e,Rn.prototype),e};function Rn(n){return Ef(n)}Object.setPrototypeOf(Rn.prototype,Function.prototype);for(let[n,e]of Object.entries(bt))En[n]={get(){let t=ba(this,mu(e.open,e.close,this[Dn]),this[ai]);return Object.defineProperty(this,n,{value:t}),t}};En.visible={get(){let n=ba(this,this[Dn],!0);return Object.defineProperty(this,"visible",{value:n}),n}};var Rf=(n,e)=>{let t=bt[e];if(n==="rgb"){let o=(r,a,l)=>t.ansi(bt.rgbToAnsi(r,a,l));return[o,o,(r,a,l)=>t.ansi256(bt.rgbToAnsi256(r,a,l)),t.ansi16m]}if(n==="hex"){let o=r=>t.ansi(bt.hexToAnsi(r));return[o,o,r=>t.ansi256(bt.hexToAnsi256(r)),r=>t.ansi16m(...bt.hexToRgb(r))]}let s=o=>t.ansi(bt.ansi256ToAnsi(o));return[s,s,t.ansi256,t.ansi256]},If=["rgb","hex","ansi256"];for(let n of If){let e=n[0].toUpperCase()+n.slice(1);for(let[t,s]of[[n,"color"],["bg"+e,"bgColor"],["underline"+e,"underlineColor"]]){let{close:o}=bt[s],i=Rf(n,s);En[t]={get(){let r=function(a,l,d){let p=i[this.level](a,l,d);return ba(this,mu(p,o,this[Dn]),this[ai])};return Object.defineProperty(this,t,{value:r}),r}}}}var Uf=Object.defineProperties(()=>{},{...En,level:{enumerable:!0,get(){return this[xn].level},set(n){this[xn].level=n}}}),mu=(n,e,t)=>{let s,o;return t===void 0?(s=n,o=e):(s=t.openAll+n,o=e+t.closeAll),{open:n,close:e,openAll:s,closeAll:o,parent:t}},ba=(n,e,t)=>{let s=(...o)=>o.length===1?_a(s,""+o[0]):o.length===2?_a(s,o[0]+" "+o[1]):_a(s,o.join(" "));return Object.setPrototypeOf(s,Uf),s[xn]=n[xn]??n,s[Dn]=e,s[ai]=t,s},_a=(n,e)=>{if(n[xn][ri]<=0||!e)return n[ai]?"":e;let t=n[Dn];if(t===void 0)return e;let{openAll:s,closeAll:o}=t;if(e.includes("\x1B"))for(;t!==void 0;)e=su(e,t.close,t.open),t=t.parent;let i=e.indexOf(`
|
|
32
|
+
`);return i!==-1&&(e=nu(e,o,s,i)),s+e+o};Object.defineProperties(Rn.prototype,{...En,level:xf});var Of=Rn(),b0=Rn({level:uu?uu.level:0});var w=Of;var Ht=S(require("fs")),Ae=S(require("path")),Ap=S(require("os"));var pu={getConfiguration:()=>({get:()=>{}})},Ca={getExtension:()=>{}},li=class n{fsPath;scheme;path;constructor(e){this.fsPath=e,this.scheme="file",this.path=e}static file(e){return new n(e)}static joinPath(e,...t){let s=[e.fsPath,...t].join("/");return new n(s)}toString(){return this.fsPath}};var Ln=S(require("fs")),Su=S(require("path"));function ka(n){return typeof n.discover=="function"}function fu(n){return typeof n.analyzeUsage=="function"}var Qe=S(require("fs"));var hu=S(require("fs"));function In(n){if(!n||!n.startsWith("file://"))return;let e=n.slice(7),t;try{t=decodeURIComponent(e)}catch{return}if(!t.split(/[\\/]/).some(o=>o===".."))return t.startsWith("//")?process.platform==="win32"?t.replace(/\//g,"\\"):t:/^\/[A-Za-z]:/.test(t)?t.slice(1):t}function ci(n,e){if(!(typeof n!="string"||!n||!Array.isArray(e)))try{let t=hu.readFileSync(n,"utf8"),s=JSON.parse(t);if(typeof s!="object"||s===null||Array.isArray(s))return;for(let o of e){let i=s[o];if(typeof i=="string"){if(i.startsWith("file://")){let r=In(i);if(r)return r;continue}return i}}}catch{}}function ue(n){return n.replace(/\\/g,"/")}var ui=ue;function J(n){return ue(n).toLowerCase()}function di(n,e=process.platform){let t=ue(n);return e==="linux"?t:t.toLowerCase()}function Sa(n,e,t){try{return n()}catch(s){return console.error(`[recovery] ${t??"unknown"}:`,s),e}}async function ks(n,e,t){try{return await n()}catch(s){return console.error(`[recovery] ${t??"unknown"}:`,s),e}}var Ff=/^mcp__[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}__(.+)$/i;function _u(n){return Ff.test(n)}function Nf(n){return n.replace(/(?<=[a-z0-9])(?=[A-Z])/g,"_").replace(/(?<=[A-Z])(?=[A-Z][a-z])/g,"_")}function yu(n){return Nf(n).toLowerCase().replace(/[.-]/g,"_")}function bu(n,e){if(e[n])return e[n];let t=n.toLowerCase();if(e[t])return e[t];let s=yu(n);for(let o of Object.keys(e))if(yu(o)===s)return e[o]}var Un=S(require("fs")),Ta=S(require("path")),Cu=S(require("os")),ku=S(Dt());function N(n){let e=n.getFullYear(),t=String(n.getMonth()+1).padStart(2,"0"),s=String(n.getDate()).padStart(2,"0");return`${e}-${t}-${s}`}var Lf=new Set(["__proto__","constructor","prototype"]);function O(n){return Lf.has(n)}function wa(n){return n?n.replace(/\\/g,"/").toLowerCase().includes("/microsoft scout"):!1}function On(n){return n==="github/autopilot"}function jf(n){if(typeof n!="object"||n===null)return!1;let e=n;return typeof e.id=="string"&&(e.cwd===null||typeof e.cwd=="string")&&(e.repository===null||typeof e.repository=="string")&&(e.branch===null||typeof e.branch=="string")&&(e.summary===null||typeof e.summary=="string")&&(e.created_at===null||typeof e.created_at=="string")&&(e.updated_at===null||typeof e.updated_at=="string")}function Gf(n){if(typeof n!="object"||n===null)return!1;let e=n;return typeof e.session_id=="string"&&typeof e.turn_index=="number"&&(e.user_message===null||typeof e.user_message=="string")&&(e.assistant_response===null||typeof e.assistant_response=="string")&&(e.timestamp===null||typeof e.timestamp=="string")}var qs=class{_sqlJsModule=null;_sqlJsInitPromise=null;_initSqlJsFn;_dbCache=new Map;_dbCacheInflight=new Map;_sessionsCache=new Map;_sessionsCacheInflight=new Map;_turnCountsCache=new Map;_turnCountsCacheInflight=new Map;_usageCache=new Map;_usageCacheInflight=new Map;constructor(e){this._initSqlJsFn=e??ku.default}dispose(){for(let e of this._dbCache.values())try{e.db.close()}catch{}this._dbCache.clear(),this._dbCacheInflight.clear(),this._sessionsCache.clear(),this._sessionsCacheInflight.clear(),this._turnCountsCache.clear(),this._turnCountsCacheInflight.clear(),this._usageCache.clear(),this._usageCacheInflight.clear(),this._sqlJsInitPromise=null}closeDb(e){try{e.close()}catch{}}isMissingFileError(e){let t=e?.code;return t==="ENOENT"||t==="ENOTDIR"}async statDb(e){try{return await Un.promises.stat(e)}catch(t){return this.isMissingFileError(t)&&this._dbCache.has(e)&&(this.closeDb(this._dbCache.get(e).db),this._dbCache.delete(e)),null}}isCachedDbCurrent(e,t){let s=this._dbCache.get(e);return!!s&&s.mtimeMs===t.mtimeMs&&s.size===t.size}getDbCacheKey(e,t){return`${e}:${t.mtimeMs}:${t.size}`}sameDbStats(e,t){return e.mtimeMs===t.mtimeMs&&e.size===t.size}async refreshDb(e,t){let s;try{let r=await this.initSqlJs(),a=await Un.promises.readFile(e);s=new r.Database(a)}catch{return this._dbCache.get(e)?.db??null}let o=await this.statDb(e);if(!o||!this.sameDbStats(t,o))return this.closeDb(s),this._dbCache.get(e)?.db??null;let i=this._dbCache.get(e);return i&&this.closeDb(i.db),this._dbCache.set(e,{db:s,mtimeMs:t.mtimeMs,size:t.size}),s}async getDb(e){let t=await this.statDb(e);if(!t)return this._dbCache.get(e)?.db??null;if(this.isCachedDbCurrent(e,t))return this._dbCache.get(e).db;let s=this.getDbCacheKey(e,t),o=this._dbCacheInflight.get(s);if(o)return o;let i=this.refreshDb(e,t);this._dbCacheInflight.set(s,i);try{return await i}finally{this._dbCacheInflight.get(s)===i&&this._dbCacheInflight.delete(s)}}getDbPath(){return Ta.join(Cu.homedir(),".copilot","session-store.db")}virtualPath(e){return`${this.getDbPath()}#${e}`}isCliStoreSession(e){return e.includes("session-store.db#")}getDbPathFromVirtual(e){let t=e.indexOf("session-store.db#");return t===-1?e:e.substring(0,t+16)}getSessionId(e){let t=e.indexOf("session-store.db#");return t===-1?null:e.substring(t+17)||null}async getSessionsMap(e){let t=await this.statDb(e);if(!t)return this._sessionsCache.get(e)?.byId??new Map;let s=this._sessionsCache.get(e);if(s&&s.mtimeMs===t.mtimeMs&&s.size===t.size)return s.byId;let o=`${e}:${t.mtimeMs}:${t.size}`,i=this._sessionsCacheInflight.get(o);if(i)return i;let r=(async()=>{let a=await this.getDb(e),l=new Map;if(a)try{let d=a.exec("SELECT id, cwd, repository, branch, summary, created_at, updated_at FROM sessions");if(d.length>0){let p=d[0].columns;for(let g of d[0].values){let h={};p.forEach((y,b)=>{h[y]=g[b]}),jf(h)&&l.set(h.id,h)}}}catch{}return this._sessionsCache.set(e,{mtimeMs:t.mtimeMs,size:t.size,byId:l}),l})();this._sessionsCacheInflight.set(o,r);try{return await r}finally{this._sessionsCacheInflight.get(o)===r&&this._sessionsCacheInflight.delete(o)}}async getTurnCountsMap(e){let t=await this.statDb(e);if(!t)return this._turnCountsCache.get(e)?.byId??new Map;let s=this._turnCountsCache.get(e);if(s&&s.mtimeMs===t.mtimeMs&&s.size===t.size)return s.byId;let o=`${e}:${t.mtimeMs}:${t.size}`,i=this._turnCountsCacheInflight.get(o);if(i)return i;let r=(async()=>{let a=await this.getDb(e),l=new Map;if(a)try{let d=a.exec("SELECT session_id, COUNT(*) FROM turns GROUP BY session_id");if(d.length>0)for(let p of d[0].values)l.set(p[0],p[1]||0)}catch{}return this._turnCountsCache.set(e,{mtimeMs:t.mtimeMs,size:t.size,byId:l}),l})();this._turnCountsCacheInflight.set(o,r);try{return await r}finally{this._turnCountsCacheInflight.get(o)===r&&this._turnCountsCacheInflight.delete(o)}}async getUsageMap(e){let t=await this.statDb(e);if(!t)return this._usageCache.get(e)?.bySessionId??new Map;let s=this._usageCache.get(e);if(s&&s.mtimeMs===t.mtimeMs&&s.size===t.size)return s.bySessionId;let o=`${e}:${t.mtimeMs}:${t.size}`,i=this._usageCacheInflight.get(o);if(i)return i;let r=(async()=>{let a=await this.getDb(e),l=new Map;if(a)try{let d=a.exec("SELECT session_id, model, input_tokens, output_tokens, cache_read_tokens, cache_write_tokens, total_nano_aiu FROM assistant_usage_events");if(d.length>0){let p=d[0].columns,g=p.indexOf("session_id");for(let h of d[0].values){let y=h[g];if(typeof y!="string")continue;let b=this.parseUsageEventRow(p,h);this.addUsageEventToSessionUsage(l,y,b)}this.removeEmptyUsage(l)}}catch{}return this._usageCache.set(e,{mtimeMs:t.mtimeMs,size:t.size,bySessionId:l}),l})();this._usageCacheInflight.set(o,r);try{return await r}finally{this._usageCacheInflight.get(o)===r&&this._usageCacheInflight.delete(o)}}addUsageEventToSessionUsage(e,t,s){let o=e.get(t);o||(o={modelUsage:{},actualTokens:0,cacheReadTokens:0,nanoAiu:0},e.set(t,o)),this.addUsageEventToModelUsage(o.modelUsage,s),o.actualTokens+=s.inputTokens+s.outputTokens,o.cacheReadTokens+=s.cacheReadTokens,o.nanoAiu+=s.nanoAiu}removeEmptyUsage(e){for(let[t,s]of e)s.actualTokens===0&&s.cacheReadTokens===0&&s.nanoAiu===0&&e.delete(t)}async stat(e){let t=this.getDbPathFromVirtual(e),s=this.getSessionId(e),o=await Un.promises.stat(t),i=s?(await this.getSessionsMap(t)).get(s):void 0,r=i?.updated_at?new Date(i.updated_at):null;return!r||Number.isNaN(r.getTime())||Object.defineProperty(o,"mtime",{value:r,writable:!1}),o}async initSqlJs(){return this._sqlJsModule?this._sqlJsModule:(this._sqlJsInitPromise||(this._sqlJsInitPromise=(async()=>{let e=Ta.join(__dirname,"sql-wasm.wasm"),t;try{t=await Un.promises.readFile(e)}catch{}let s=await this._initSqlJsFn(t?{wasmBinary:t.buffer}:void 0);return this._sqlJsModule=s,s})().catch(e=>{throw this._sqlJsInitPromise=null,e})),this._sqlJsInitPromise)}async discoverNewSessions(e){let t=this.getDbPath(),s=await this.getDb(t);if(!s)return[];try{let o=s.exec("SELECT id FROM sessions ORDER BY updated_at DESC");return o.length===0?[]:o[0].values.map(i=>i[0]).filter(i=>!e.has(i))}catch{return[]}}async discoverNewSessionsWithCwd(e){let t=this.getDbPath(),s=await this.getDb(t);if(!s)return[];try{let o=s.exec("SELECT id, cwd FROM sessions ORDER BY updated_at DESC");return o.length===0?[]:o[0].values.filter(i=>!e.has(i[0])).map(i=>({id:i[0],cwd:i[1]??null}))}catch{return[]}}async readSession(e){let t=this.getDbPathFromVirtual(e),s=this.getSessionId(e);return s?(await this.getSessionsMap(t)).get(s)??null:null}async getTurns(e){let t=this.getDbPathFromVirtual(e),s=this.getSessionId(e);if(!s)return[];let o=await this.getDb(t);if(!o)return[];try{let i=o.exec("SELECT session_id, turn_index, user_message, assistant_response, timestamp FROM turns WHERE session_id = ? ORDER BY turn_index ASC",[s]);if(i.length===0)return[];let r=i[0].columns,a=[];for(let l of i[0].values){let d={};r.forEach((p,g)=>{d[p]=l[g]}),Gf(d)&&a.push(d)}return a}catch{return[]}}async countTurns(e){let t=this.getDbPathFromVirtual(e),s=this.getSessionId(e);return s?(await this.getTurnCountsMap(t)).get(s)??0:0}async getSessionUsage(e){let t=this.getDbPath();return(await this.getUsageMap(t)).get(e)??null}parseUsageEventRow(e,t){let s={};return e.forEach((o,i)=>{s[o]=t[i]}),{model:typeof s.model=="string"?s.model:"unknown",inputTokens:typeof s.input_tokens=="number"?s.input_tokens:0,outputTokens:typeof s.output_tokens=="number"?s.output_tokens:0,cacheReadTokens:typeof s.cache_read_tokens=="number"?s.cache_read_tokens:0,cacheWriteTokens:typeof s.cache_write_tokens=="number"?s.cache_write_tokens:0,nanoAiu:typeof s.total_nano_aiu=="number"?s.total_nano_aiu:0}}addUsageEventToModelUsage(e,t){if(O(t.model))return;e[t.model]||(e[t.model]={inputTokens:0,outputTokens:0,sessions:0});let s=e[t.model];s.inputTokens+=t.inputTokens,s.outputTokens+=t.outputTokens,t.cacheReadTokens>0&&(s.cachedReadTokens=(s.cachedReadTokens??0)+t.cacheReadTokens),t.cacheWriteTokens>0&&(s.cacheCreationTokens=(s.cacheCreationTokens??0)+t.cacheWriteTokens)}async getDailyFractions(e){let t=await this.getTurns(e),s={},o=0;for(let r of t)if(r.timestamp)try{let a=N(new Date(r.timestamp));s[a]=(s[a]||0)+1,o++}catch{}if(o===0){let r=await this.readSession(e);return{[r?.updated_at?N(new Date(r.updated_at)):N(new Date)]:1}}let i={};for(let[r,a]of Object.entries(s))i[r]=a/o;return i}};function qf(n){return!n||n==="agent"?"agent":n.includes("plan-agent/Plan.agent.md")?"plan":n.includes(".agent.md")?"customAgent":"agent"}function fi(n){return n?typeof n=="string"?n==="edit"?"edit":n==="agent"?"agent":"ask":n.kind?n.kind==="edit"?"edit":n.kind==="ask"?"ask":n.kind==="agent"?qf(n.id):"ask":"ask":"ask"}function lt(n){return n.startsWith("mcp.")||n.startsWith("mcp_")||n.startsWith("mcp__")}var zf=[["mcp_github_github_","mcp_io_github_git_"],["github-mcp-server-","mcp_io_github_git_"],["mcp_github_mcp_s2_","mcp_io_github_git_"],["mcp_github_mcp_se_","mcp_io_github_git_"],["mcp.github.github.","mcp.io.github.git."],["mcp__plugin_context7_context7__","context7-"],["mcp__context7__","context7-"],["mcp_context7_","context7-"],["mcp_io_github_ups_","context7-"],["mcp__microsoft_playwright-mcp__","microsoft_playwright-mcp-"],["mcp__playwright__","microsoft_playwright-mcp-"],["mcp_playwright_","microsoft_playwright-mcp-"],["mcp_microsoft_pla_","microsoft_playwright-mcp-"],["mcp_tavily-mcp_","io_github_tavily-ai_tavily-mcp-"],["mcp_tavily_","io_github_tavily-ai_tavily-mcp-"],["mcp__claude-in-chrome__","mcp__claude_browser__"],["mcp__Claude_Browser__","mcp__claude_browser__"]];function Fn(n){for(let[e,t]of zf)if(n.startsWith(e))return t+n.substring(e.length);return n}function Ct(n,e={}){let t=bu(n,e);if(t&&t.includes(":"))return t.split(":")[0].trim();if(n.startsWith("mcp_io_github_git_")||n.startsWith("mcp.io.github.git."))return"GitHub MCP (Local)";if(n.startsWith("mcp_github_github_")||n.startsWith("mcp.github.github."))return"GitHub MCP (Remote)";if(n.startsWith("mcp__")){if(_u(n))return"Claude MCP";let i=n.slice(5),r=i.indexOf("__");return(r>=0?i.slice(0,r):i)||"unknown"}return n.replace(/^mcp[._]/,"").split(/[._]/)[0]||"unknown"}function Nn(n){try{let e=Qe.openSync(n,"r");try{let t=Buffer.alloc(65536),s=Qe.readSync(e,t,0,t.length,0),o=t.toString("utf8",0,s);for(let i of o.split(`
|
|
33
|
+
`)){let r=i.trim();if(!r)continue;let a;try{a=JSON.parse(r)}catch{continue}if(a?.entrypoint==="claude-desktop")return"Claude Desktop";if(a?.entrypoint==="cli")return"Claude Code CLI";if(a?.entrypoint)return"Claude Code"}}finally{Qe.closeSync(e)}}catch{}return"Claude Code"}var hi=class n{deps;_sessionFilesCache=null;_sessionFilesCacheTime=0;static SESSION_FILES_CACHE_TTL=6e4;_lastDiscoveryHadError=!1;_lastDiscoveryFilesCount=0;constructor(e){this.deps=e}get lastDiscoveryHadError(){return this._lastDiscoveryHadError}get lastDiscoveryFilesCount(){return this._lastDiscoveryFilesCount}clearCache(){this._sessionFilesCache=null,this._sessionFilesCacheTime=0}async pathExists(e){try{return await Ln.promises.access(e),!0}catch{return!1}}pathExistsWithLogging(e,t){try{let s=Ln.existsSync(e);return s||this.deps.log(`\u{1F50D} Path not found [${t}]: ${e}`),s}catch{return!1}}getDiagnosticCandidatePaths(){let e=[];for(let t of this.deps.ecosystems)if(ka(t))try{let s=t.getCandidatePaths();for(let o of s){let i=this.pathExistsWithLogging(o.path,o.source);e.push({path:o.path,exists:i,source:o.source})}}catch{}if(this.deps.windsurf){let t=this.deps.windsurf.getCascadeDir(),s=this.deps.windsurf.isRunningInDevin()?"Devin Cascade (shared with Windsurf)":"Windsurf Cascade";e.push({path:t,exists:this.pathExistsWithLogging(t,s),source:s})}return e}checkCopilotExtension(){let e=Ca.getExtension("GitHub.copilot"),t=Ca.getExtension("GitHub.copilot-chat");if(!e&&!t)this.deps.log("\u26A0\uFE0F GitHub Copilot extensions not found");else{let o=e?e.isActive?"\u2705 Active":"\u23F3 Loading":"\u274C Not found",i=t?t.isActive?"\u2705 Active":"\u23F3 Loading":"\u274C Not found";this.deps.log(`GitHub Copilot: ${o}, Chat: ${i}`)}process.env.CODESPACES==="true"&&(!e?.isActive||!t?.isActive)&&this.deps.warn("\u26A0\uFE0F Running in Codespaces with inactive Copilot extensions")}async getCopilotSessionFiles(){return this.getCopilotSessionFilesStreaming()}async tryGetSampleDataFiles(e){let t=this.deps.sampleDataDirectoryOverride?.()??pu.getConfiguration("aiEngineeringFluency").get("sampleDataDirectory");if(!t||t.trim().length===0)return;let s=t.trim();try{if(!await this.pathExists(s)){this.deps.warn(`Sample data directory not found: ${s}`);return}let o=(await Ln.promises.readdir(s)).filter(i=>i.endsWith(".json")||i.endsWith(".jsonl")).map(i=>Su.join(s,i));return this.deps.log(`\u{1F4F8} Sample data mode: using ${o.length} file(s) from ${s}`),this._sessionFilesCache=o,this._sessionFilesCacheTime=e,this._lastDiscoveryFilesCount=o.length,o}catch(o){this.deps.warn(`Error reading sample data directory: ${o}`);return}}addDedupedBatch(e,t,s,o){let i=[];for(let r of e){let a=di(r);t.has(a)||(t.add(a),i.push(r))}i.length>0&&(s.push(...i),o&&o(i))}async collectWindsurfFiles(e,t,s){if(this.deps.windsurf)try{let i=(await this.deps.windsurf.getWindsurfSessions()).map(r=>r.file).filter(r=>{let a=di(r);return e.has(a)?!1:(e.add(a),!0)});i.length>0&&(t.push(...i),s&&s(i))}catch(o){this.deps.warn(`Could not discover Windsurf sessions: ${o}`),this._lastDiscoveryHadError=!0}}async discoverFromAdapters(e){let t=new Set,s=[],o=Date.now(),i=this.deps.ecosystems.filter(ka);this.deps.log(`\u{1F50D} Searching for session files via ${i.length} discoverable ecosystem adapter(s) (parallel)`);let r=0,a=i.map(d=>d.discover(this.deps.log).then(p=>{r+=p.sessionFiles.length,this.addDedupedBatch(p.sessionFiles,t,s,e)},p=>{this.deps.warn(`Could not discover ${d.displayName} sessions: ${p}`),this._lastDiscoveryHadError=!0}));await Promise.all([...a,this.collectWindsurfFiles(t,s,e)]);let l=r-s.length;return l>0&&this.deps.log(`\u{1F9F9} Deduplicated ${l} duplicate session path(s)`),this.deps.log(`\u2728 Total: ${s.length} session file(s) discovered in ${((Date.now()-o)/1e3).toFixed(1)}s`),s.length===0&&this.deps.warn("\u26A0\uFE0F No session files found - Have you used GitHub Copilot Chat yet?"),s}async getCopilotSessionFilesStreaming(e){let t=Date.now();if(this._sessionFilesCache&&t-this._sessionFilesCacheTime<n.SESSION_FILES_CACHE_TTL)return this.deps.log(`\u{1F4A8} Using cached session files list (${this._sessionFilesCache.length} files, cached ${Math.round((t-this._sessionFilesCacheTime)/1e3)}s ago)`),e&&e(this._sessionFilesCache),this._sessionFilesCache;this._lastDiscoveryHadError=!1,this._lastDiscoveryFilesCount=0;let s=await this.tryGetSampleDataFiles(t);if(s)return e&&e(s),s;let o=[];try{let i=await this.discoverFromAdapters(e);return o.push(...i),this._sessionFilesCache=o,this._sessionFilesCacheTime=Date.now(),this._lastDiscoveryFilesCount=o.length,o}catch(i){return this.deps.error("Error getting session files:",i),this._lastDiscoveryHadError=!0,this._lastDiscoveryFilesCount=o.length,o}}};var Ge=S(require("fs")),We=S(require("path")),Ci=S(require("os")),vu=S(Dt());var ze=S(require("fs")),Et=S(require("path")),_i=100*1024*1024,yi;function Wf(){if(yi)return yi;let n=[process.env.TMPDIR,process.env.TMP,process.env.TEMP,process.env.WINDIR?Et.join(process.env.WINDIR,"Temp"):void 0].filter(s=>!!(s&&s.trim().length>0)),e=process.platform==="win32"?["C:\\Windows\\Temp","C:\\Temp"]:["/tmp","/var/tmp"],t=new Set;for(let s of[...n,...e])try{t.add(ze.realpathSync(s))}catch{t.add(Et.resolve(s))}return yi=[...t],yi}function Tu(n){let e=(()=>{try{return ze.realpathSync(n)}catch{return Et.resolve(n)}})();for(let t of Wf()){let s=Et.relative(t,e);if(s===""||!s.startsWith("..")&&!Et.isAbsolute(s))return!0}return!1}async function Pe(n,e,t=_i){if(Tu(n)){console.error(`[${e}] Refusing to read file from OS temp directory: ${n}`);return}let s;try{s=await ze.promises.open(n,"r")}catch(o){console.error(`[${e}] Failed to open ${n}:`,o);return}try{let o=await s.stat();if(o.size>t){console.debug(`[${e}] Skipping oversized file (${o.size} bytes > ${t} byte cap): ${n}`);return}return await s.readFile({encoding:"utf8"})}catch(o){console.error(`[${e}] Failed to read ${n}:`,o);return}finally{await s.close()}}function Ma(n,e,t=_i){if(Tu(n)){console.error(`[${e}] Refusing to read file from OS temp directory: ${n}`);return}let s;try{s=ze.openSync(n,"r")}catch(o){console.error(`[${e}] Failed to open ${n}:`,o);return}try{let o=ze.fstatSync(s);if(o.size>t){console.debug(`[${e}] Skipping oversized file (${o.size} bytes > ${t} byte cap): ${n}`);return}return ze.readFileSync(s,"utf8")}catch(o){console.error(`[${e}] Failed to read ${n}:`,o);return}finally{ze.closeSync(s)}}var he=S(require("fs")),jn=S(require("path")),Pa=S(require("os")),wu=256*1024*1024,va=new Set,$f=6e4,Mu=5*6e4,Hf=3e4,zs=new Map,Jf=Mu;function Kf(n){for(let[e,t]of zs)n-t.attemptedAt>=Jf&&zs.delete(e)}function Vf(n,e=Date.now()){if(!he.existsSync(n+"-shm"))return!1;let t=Zf(n);return t===0?!1:e-t<=Hf}function Yf(n){let e=n+"-wal",t;try{t=he.statSync(e)}catch{return null}if(t.size===0)return null;let s;try{s=he.statSync(n)}catch{return null}return s.size+t.size>wu?(va.has(n)||(va.add(n),console.debug(`[sqliteWal] Skipping WAL merge for ${n}: db (${s.size} bytes) + wal (${t.size} bytes) exceed the ${wu} byte cap \u2014 reads will be a plain, potentially stale snapshot of the main db file until the WAL shrinks below the cap or a checkpoint runs.`)),null):(va.delete(n),{walPath:e,dbMtimeMs:s.mtimeMs,dbSize:s.size,walMtimeMs:t.mtimeMs,walSize:t.size})}function Qf(n,e){let t,s,o,i;try{let{DatabaseSync:r}=require("node:sqlite"),a=jn.join(Pa.homedir(),".copilot","tmp");he.mkdirSync(a,{recursive:!0,mode:448}),t=jn.join(a,`sqlite-wal-${jn.basename(n)}-${process.pid}-${Date.now()}-${Math.random().toString(16).slice(2)}.db`),s=t+"-wal",o=t+"-shm";let l=n+"-shm";return he.copyFileSync(n,t),he.copyFileSync(e,s),he.existsSync(l)&&he.copyFileSync(l,o),i=new r(t),i.exec("PRAGMA wal_checkpoint(TRUNCATE);"),i.close(),i=void 0,he.readFileSync(t)}finally{if(i)try{i.close()}catch{}for(let r of[t,s,o])if(r)try{he.unlinkSync(r)}catch{}}}async function Xf(n){let e=Date.now();Kf(e);let t=Yf(n);if(!t)return zs.delete(n),null;let s=zs.get(n),o=Vf(n,e)?Mu:$f;if(s&&e-s.attemptedAt<o){let i=s.dbMtimeMs===t.dbMtimeMs&&s.dbSize===t.dbSize;if(s.buffer&&i)return{buffer:s.buffer,dbMtimeMs:s.dbMtimeMs,dbSize:s.dbSize,walMtimeMs:s.walMtimeMs,walSize:s.walSize,walIncluded:!0};if(!s.buffer)return null}try{let i=Qf(n,t.walPath);return zs.set(n,{buffer:i,attemptedAt:e,dbMtimeMs:t.dbMtimeMs,dbSize:t.dbSize,walMtimeMs:t.walMtimeMs,walSize:t.walSize}),{buffer:i,dbMtimeMs:t.dbMtimeMs,dbSize:t.dbSize,walMtimeMs:t.walMtimeMs,walSize:t.walSize,walIncluded:!0}}catch{let i=!!s&&s.dbMtimeMs===t.dbMtimeMs&&s.dbSize===t.dbSize;return s?.buffer&&i?(s.attemptedAt=e,{buffer:s.buffer,dbMtimeMs:s.dbMtimeMs,dbSize:s.dbSize,walMtimeMs:s.walMtimeMs,walSize:s.walSize,walIncluded:!0}):(zs.set(n,{buffer:void 0,attemptedAt:e,dbMtimeMs:t.dbMtimeMs,dbSize:t.dbSize,walMtimeMs:t.walMtimeMs,walSize:t.walSize}),null)}}function Aa(n){try{let e=he.statSync(n+"-wal");return{mtimeMs:e.mtimeMs,size:e.size}}catch{return{mtimeMs:0,size:0}}}function Zf(n){return Aa(n).mtimeMs}function Ws(n){return Aa(n)}async function $s(n){let e=await Xf(n);if(e)return e;let t=he.openSync(n,"r"),s,o;try{o=he.fstatSync(t),s=he.readFileSync(t)}finally{try{he.closeSync(t)}catch{}}let i=Aa(n);return{buffer:s,dbMtimeMs:o.mtimeMs,dbSize:o.size,walMtimeMs:i.mtimeMs,walSize:i.size,walIncluded:i.size===0}}var bi=class{_sqlJsModule=null;_sqlJsInitPromise=null;_dbCache=null;_dbCacheInflight=new Map;_pendingTransientDb=null;extensionUri;constructor(e){this.extensionUri=e}getOpenCodeDataDir(){let e=Ci.platform(),t=Ci.homedir();if(e==="win32")return We.join(t,".local","share","opencode");let s=process.env.XDG_DATA_HOME||We.join(t,".local","share");return We.join(s,"opencode")}isOpenCodeSessionFile(e){let t=J(e);return t.includes("/opencode/storage/session/")||t.includes("/opencode/opencode.db#ses_")}isOpenCodeDbSession(e){return e.includes("opencode.db#ses_")}async initSqlJs(){return this._sqlJsModule?this._sqlJsModule:(this._sqlJsInitPromise||(this._sqlJsInitPromise=(async()=>{let e=We.join(__dirname,"sql-wasm.wasm"),t;Ge.existsSync(e)&&(t=Ge.readFileSync(e));let s=await(0,vu.default)(t?{wasmBinary:t.buffer}:void 0);return this._sqlJsModule=s,s})().catch(e=>{throw this._sqlJsInitPromise=null,e})),this._sqlJsInitPromise)}dispose(){this.closeDbCache(),this.releasePendingTransientDb(),this._dbCacheInflight.clear(),this._sqlJsInitPromise=null}closeDb(e){try{e.close()}catch{}}closeDbCache(){this._dbCache&&(this.closeDb(this._dbCache.db),this._dbCache=null)}releasePendingTransientDb(){this._pendingTransientDb&&(this.closeDb(this._pendingTransientDb),this._pendingTransientDb=null)}getCachedDbForPath(e){return this._dbCache?.path===e?this._dbCache.db:null}isMissingFileError(e){let t=e?.code;return t==="ENOENT"||t==="ENOTDIR"}statOpenCodeDb(e){try{return Ge.statSync(e)}catch(t){return this.isMissingFileError(t)&&this._dbCache?.path===e&&this.closeDbCache(),null}}isCachedDbCurrent(e,t){let s=Ws(e);return this._dbCache?.path===e&&this._dbCache.mtimeMs===t.mtimeMs&&this._dbCache.size===t.size&&this._dbCache.walMtimeMs===s.mtimeMs&&this._dbCache.walSize===s.size}getDbCacheKey(e,t){let s=Ws(e);return`${e}:${t.mtimeMs}:${t.size}:wal${s.mtimeMs}:${s.size}`}sameDbStats(e,t){return e.mtimeMs===t.mtimeMs&&e.size===t.size}isCachedDbCurrentForFingerprint(e,t){return this._dbCache?.path===e&&this._dbCache.mtimeMs===t.dbMtimeMs&&this._dbCache.size===t.dbSize&&this._dbCache.walMtimeMs===t.walMtimeMs&&this._dbCache.walSize===t.walSize}async refreshOpenCodeDb(e,t){let s;try{s=await $s(e)}catch{return this.getCachedDbForPath(e)}if(this.isCachedDbCurrentForFingerprint(e,s))return this._dbCache?.db??null;let o;try{let r=await this.initSqlJs();o=new r.Database(s.buffer)}catch{return this.getCachedDbForPath(e)}let i=this.statOpenCodeDb(e);return!i||!this.sameDbStats(t,i)?(this.closeDb(o),this.isCachedDbCurrent(e,i??t)?this._dbCache?.db??null:this.getCachedDbForPath(e)):s.walIncluded?(this.closeDbCache(),this.releasePendingTransientDb(),this._dbCache={db:o,path:e,mtimeMs:s.dbMtimeMs,size:s.dbSize,walMtimeMs:s.walMtimeMs,walSize:s.walSize},o):(this.releasePendingTransientDb(),this._pendingTransientDb=o,o)}async getOpenCodeDb(){let e=We.join(this.getOpenCodeDataDir(),"opencode.db"),t=this.statOpenCodeDb(e);if(!t)return this.getCachedDbForPath(e);if(this.isCachedDbCurrent(e,t))return this._dbCache?.db??null;let s=this.getDbCacheKey(e,t),o=this._dbCacheInflight.get(s);if(o)return o;let i=this.refreshOpenCodeDb(e,t);this._dbCacheInflight.set(s,i);try{return await i}finally{this._dbCacheInflight.get(s)===i&&this._dbCacheInflight.delete(s)}}async readOpenCodeDbSession(e){let t=await this.getOpenCodeDb();if(!t)return null;try{let s=t.exec("SELECT id, slug, title, time_created, time_updated, project_id, directory FROM session WHERE id = ?",[e]);if(s.length===0||s[0].values.length===0)return null;let o=s[0].values[0],i=s[0].columns,r={};for(let a=0;a<i.length;a++)r[i[a]]=o[a];return{id:r.id,slug:r.slug,title:r.title,projectID:r.project_id,directory:r.directory,time:{created:r.time_created,updated:r.time_updated}}}catch{return null}}async readOpenCodeDbMessages(e){let t=await this.getOpenCodeDb();if(!t)return[];try{let s=t.exec("SELECT id, data, time_created FROM message WHERE session_id = ? ORDER BY time_created ASC",[e]);return s.length===0?[]:s[0].values.map(o=>{let i=JSON.parse(o[1]);return i.id=o[0],i.time=i.time||{},i.time.created=i.time.created||o[2],i})}catch{return[]}}async readOpenCodeDbParts(e){let t=await this.getOpenCodeDb();if(!t)return[];try{let s=t.exec("SELECT id, data, time_created FROM part WHERE message_id = ? ORDER BY time_created ASC",[e]);return s.length===0?[]:s[0].values.map(o=>{let i=JSON.parse(o[1]);return i.id=o[0],i.time=i.time||{},i.time.created=i.time.created||o[2],i})}catch{return[]}}async discoverOpenCodeDbSessions(){let e=await this.getOpenCodeDb();if(!e)return[];try{let t=e.exec("SELECT id FROM session");return t.length===0?[]:t[0].values.map(s=>s[0])}catch{return[]}}async statSessionFile(e){if(this.isOpenCodeDbSession(e)){let t=We.join(this.getOpenCodeDataDir(),"opencode.db");return Ge.promises.stat(t)}return Ge.promises.stat(e)}readOpenCodeMessages(e){let t=this.getOpenCodeDataDir(),s=We.join(t,"storage","message",e),o=[];try{if(!Ge.existsSync(s))return o;let i=Ge.readdirSync(s,{withFileTypes:!0});for(let r of i)if(!(!r.isFile()||!r.name.endsWith(".json")))try{let a=Ma(We.join(s,r.name),"opencode");if(a===void 0)continue;let l=JSON.parse(a);o.push(l)}catch{}}catch{}return o.sort((i,r)=>(i.time?.created||0)-(r.time?.created||0)),o}readOpenCodeParts(e){let t=this.getOpenCodeDataDir(),s=We.join(t,"storage","part",e),o=[];try{if(!Ge.existsSync(s))return o;let i=Ge.readdirSync(s,{withFileTypes:!0});for(let r of i)if(!(!r.isFile()||!r.name.endsWith(".json")))try{let a=Ma(We.join(s,r.name),"opencode");if(a===void 0)continue;let l=JSON.parse(a);o.push(l)}catch{}}catch{}return o.sort((i,r)=>(i.time?.start||0)-(r.time?.start||0)),o}getOpenCodeSessionId(e){let t=e.indexOf("opencode.db#");if(t!==-1)return e.substring(t+12);let s=We.basename(e,".json");return s.startsWith("ses_")?s:null}async getOpenCodeMessagesForSession(e){let t=this.getOpenCodeSessionId(e);if(!t)return[];if(this.isOpenCodeDbSession(e))return this.readOpenCodeDbMessages(t);let s=await this.readOpenCodeDbMessages(t);return s.length>0?s:this.readOpenCodeMessages(t)}async getOpenCodePartsForMessage(e){let t=await this.readOpenCodeDbParts(e);return t.length>0?t:this.readOpenCodeParts(e)}async getTokensFromOpenCodeSession(e){let t=await this.getOpenCodeMessagesForSession(e);return this.getTokensFromOpenCodeMessages(t)}getTokensFromOpenCodeMessages(e){let t=0,s=0;for(let o of e)o.role==="assistant"&&o.tokens&&(typeof o.tokens.total=="number"&&(s=o.tokens.total),t+=o.tokens.reasoning||0);return{tokens:s,thinkingTokens:t}}async countOpenCodeInteractions(e){let t=await this.getOpenCodeMessagesForSession(e);return this.countOpenCodeInteractionsFromMessages(t)}countOpenCodeInteractionsFromMessages(e){return e.filter(t=>t.role==="user").length}getAssistantMessagesByParent(e){let t=new Map;for(let s of e){if(s.role!=="assistant"||!s.parentID)continue;let o=t.get(s.parentID)??[];o.push(s),t.set(s.parentID,o)}return t}async getOpenCodeModelUsage(e){let t=await this.getOpenCodeMessagesForSession(e);return this.getOpenCodeModelUsageFromMessages(t)}computeTurnCumTotal(e,t){let s=t;for(let o of e)typeof o.tokens?.total=="number"&&(s=Math.max(s,o.tokens.total));return s}getOpenCodeModelUsageFromMessages(e){let t={},s=this.getAssistantMessagesByParent(e),o=0;for(let i=0;i<e.length;i++){let r=e[i];if(r.role!=="user")continue;let a=s.get(r.id)??[];if(a.length===0)continue;let l=this.computeTurnCumTotal(a,o),d=l-o;if(d<=0){o=l;continue}let p=a[0].modelID||a[0].model?.modelID||"unknown";if(O(p)){o=l;continue}t[p]||(t[p]={inputTokens:0,outputTokens:0,sessions:0});let g=a.reduce((b,T)=>b+(T.tokens?.output||0)+(T.tokens?.reasoning||0),0);t[p].inputTokens+=Math.max(0,d-g),t[p].outputTokens+=g;let h=a.reduce((b,T)=>b+(T.tokens?.cache?.read||0),0),y=a.reduce((b,T)=>b+(T.tokens?.cache?.write||0),0);h>0&&(t[p].cachedReadTokens=(t[p].cachedReadTokens??0)+h),y>0&&(t[p].cacheCreationTokens=(t[p].cacheCreationTokens??0)+y),o=l}return t}async getOpenCodeSessionData(e){let t=await this.getOpenCodeMessagesForSession(e),s=Date.now();t.length>0&&t[0].time?.created&&(s=t[0].time.created);let{tokens:o}=this.getTokensFromOpenCodeMessages(t),i=this.countOpenCodeInteractionsFromMessages(t),r=this.getOpenCodeModelUsageFromMessages(t),a=this.getAssistantMessagesByParent(t),l={};for(let p=0;p<t.length;p++){let g=t[p];if(g.role!=="user")continue;let h=a.get(g.id)??[];if(h.length===0)continue;let y=h[0].modelID||h[0].model?.modelID||"unknown";O(y)||(l[y]=(l[y]||0)+1)}let d={};for(let[p,g]of Object.entries(r))d[p]={...g,interactions:l[p]||0};return{tokens:o,interactions:i,modelUsage:d,timestamp:s}}};var Rt=S(require("fs")),Hs=S(require("path")),Si=S(require("os")),Pu=S(Dt());function Ts(n){let e=typeof n=="number"?n:typeof n=="string"?Number(n):0;return Number.isFinite(e)?e:0}var ki=class{_sqlJsModule=null;_sqlJsInitPromise=null;_dbCache=null;_dbCacheInflight=new Map;_pendingTransientDb=null;extensionUri;constructor(e){this.extensionUri=e}getKiloDataDir(){let e=Si.platform(),t=Si.homedir();if(e==="win32")return Hs.join(t,".local","share","kilo");let s=process.env.XDG_DATA_HOME||Hs.join(t,".local","share");return Hs.join(s,"kilo")}getKiloDbPath(){return Hs.join(this.getKiloDataDir(),"kilo.db")}isKiloSessionFile(e){return J(e).includes("/kilo/kilo.db#ses_")}isKiloDbSession(e){return e.includes("kilo.db#ses_")}getKiloSessionId(e){let t=e.indexOf("kilo.db#");return t!==-1?e.substring(t+8):null}async initSqlJs(){return this._sqlJsModule?this._sqlJsModule:(this._sqlJsInitPromise||(this._sqlJsInitPromise=(async()=>{let e=Hs.join(__dirname,"sql-wasm.wasm"),t;Rt.existsSync(e)&&(t=Rt.readFileSync(e));let s=await(0,Pu.default)(t?{wasmBinary:t.buffer}:void 0);return this._sqlJsModule=s,s})().catch(e=>{throw this._sqlJsInitPromise=null,e})),this._sqlJsInitPromise)}dispose(){this.closeDbCache(),this.releasePendingTransientDb(),this._dbCacheInflight.clear(),this._sqlJsInitPromise=null}closeDb(e){try{e.close()}catch{}}closeDbCache(){this._dbCache&&(this.closeDb(this._dbCache.db),this._dbCache=null)}releasePendingTransientDb(){this._pendingTransientDb&&(this.closeDb(this._pendingTransientDb),this._pendingTransientDb=null)}getCachedDbForPath(e){return this._dbCache?.path===e?this._dbCache.db:null}isMissingFileError(e){let t=e?.code;return t==="ENOENT"||t==="ENOTDIR"}statKiloDb(e){try{return Rt.statSync(e)}catch(t){return this.isMissingFileError(t)&&this._dbCache?.path===e&&this.closeDbCache(),null}}isCachedDbCurrent(e,t){let s=Ws(e);return this._dbCache?.path===e&&this._dbCache.mtimeMs===t.mtimeMs&&this._dbCache.size===t.size&&this._dbCache.walMtimeMs===s.mtimeMs&&this._dbCache.walSize===s.size}getDbCacheKey(e,t){let s=Ws(e);return`${e}:${t.mtimeMs}:${t.size}:wal${s.mtimeMs}:${s.size}`}sameDbStats(e,t){return e.mtimeMs===t.mtimeMs&&e.size===t.size}isCachedDbCurrentForFingerprint(e,t){return this._dbCache?.path===e&&this._dbCache.mtimeMs===t.dbMtimeMs&&this._dbCache.size===t.dbSize&&this._dbCache.walMtimeMs===t.walMtimeMs&&this._dbCache.walSize===t.walSize}async refreshKiloDb(e,t){let s;try{s=await $s(e)}catch{return this.getCachedDbForPath(e)}if(this.isCachedDbCurrentForFingerprint(e,s))return this._dbCache?.db??null;let o;try{let r=await this.initSqlJs();o=new r.Database(s.buffer)}catch{return this.getCachedDbForPath(e)}let i=this.statKiloDb(e);return!i||!this.sameDbStats(t,i)?(this.closeDb(o),this.isCachedDbCurrent(e,i??t)?this._dbCache?.db??null:this.getCachedDbForPath(e)):s.walIncluded?(this.closeDbCache(),this.releasePendingTransientDb(),this._dbCache={db:o,path:e,mtimeMs:s.dbMtimeMs,size:s.dbSize,walMtimeMs:s.walMtimeMs,walSize:s.walSize},o):(this.releasePendingTransientDb(),this._pendingTransientDb=o,o)}async getKiloDb(){let e=this.getKiloDbPath(),t=this.statKiloDb(e);if(!t)return this.getCachedDbForPath(e);if(this.isCachedDbCurrent(e,t))return this._dbCache?.db??null;let s=this.getDbCacheKey(e,t),o=this._dbCacheInflight.get(s);if(o)return o;let i=this.refreshKiloDb(e,t);this._dbCacheInflight.set(s,i);try{return await i}finally{this._dbCacheInflight.get(s)===i&&this._dbCacheInflight.delete(s)}}async readKiloDbSession(e){let t=await this.getKiloDb();if(!t)return null;try{let s=t.exec("SELECT id, slug, title, time_created, time_updated, project_id, directory FROM session WHERE id = ?",[e]);if(s.length===0||s[0].values.length===0)return null;let o=s[0].values[0],i=s[0].columns,r={};for(let a=0;a<i.length;a++)r[i[a]]=o[a];return{id:r.id,slug:r.slug,title:r.title,projectID:r.project_id,directory:r.directory,time:{created:r.time_created,updated:r.time_updated}}}catch{return null}}async readKiloDbMessages(e){let t=await this.getKiloDb();if(!t)return[];try{let s=t.exec("SELECT id, data, time_created FROM message WHERE session_id = ? ORDER BY time_created ASC",[e]);return s.length===0?[]:s[0].values.map(o=>{let i=JSON.parse(o[1]);return i.id=o[0],i.time=i.time||{},i.time.created=i.time.created||o[2],i})}catch{return[]}}async readKiloDbParts(e){let t=await this.getKiloDb();if(!t)return[];try{let s=t.exec("SELECT id, data, time_created FROM part WHERE message_id = ? ORDER BY time_created ASC",[e]);return s.length===0?[]:s[0].values.map(o=>{let i=JSON.parse(o[1]);return i.id=o[0],i.time=i.time||{},i.time.created=i.time.created||o[2],i})}catch{return[]}}async discoverKiloDbSessions(){let e=await this.getKiloDb();if(!e)return[];try{let t=e.exec("SELECT id FROM session");return t.length===0?[]:t[0].values.map(s=>s[0])}catch{return[]}}async statSessionFile(e){return this.isKiloDbSession(e)?Rt.promises.stat(this.getKiloDbPath()):Rt.promises.stat(e)}async getKiloMessagesForSession(e){let t=this.getKiloSessionId(e);return t?this.readKiloDbMessages(t):[]}async getKiloPartsForMessage(e){return this.readKiloDbParts(e)}async getTokensFromKiloSession(e){let t=await this.getKiloMessagesForSession(e);return this.getTokensFromKiloMessages(t)}getTokensFromKiloMessages(e){let t=0,s=0;for(let o of e)if(o.role==="assistant"&&o.tokens){let i=Ts(o.tokens.total);i>0&&(s=i),t+=Ts(o.tokens.reasoning)}return{tokens:s,thinkingTokens:t}}async countKiloInteractions(e){let t=await this.getKiloMessagesForSession(e);return this.countKiloInteractionsFromMessages(t)}countKiloInteractionsFromMessages(e){return e.filter(t=>t.role==="user").length}getAssistantMessagesByParent(e){let t=new Map;for(let s of e){if(s.role!=="assistant"||!s.parentID)continue;let o=t.get(s.parentID)??[];o.push(s),t.set(s.parentID,o)}return t}async getKiloModelUsage(e){let t=await this.getKiloMessagesForSession(e);return this.getKiloModelUsageFromMessages(t)}computeTurnCumTotal(e,t){let s=t;for(let o of e)s=Math.max(s,Ts(o.tokens?.total));return s}getKiloModelUsageFromMessages(e){let t={},s=this.getAssistantMessagesByParent(e),o=0;for(let i=0;i<e.length;i++){let r=e[i];if(r.role!=="user")continue;let a=s.get(r.id)??[];if(a.length===0)continue;let l=this.computeTurnCumTotal(a,o),d=l-o;if(d<=0){o=l;continue}let p=a[0].modelID||a[0].model?.modelID||"unknown";if(O(p)){o=l;continue}t[p]||(t[p]={inputTokens:0,outputTokens:0,sessions:0});let g=a.reduce((b,T)=>b+Ts(T.tokens?.output)+Ts(T.tokens?.reasoning),0);t[p].inputTokens+=Math.max(0,d-g),t[p].outputTokens+=g;let h=a.reduce((b,T)=>b+Ts(T.tokens?.cache?.read),0),y=a.reduce((b,T)=>b+Ts(T.tokens?.cache?.write),0);h>0&&(t[p].cachedReadTokens=(t[p].cachedReadTokens??0)+h),y>0&&(t[p].cacheCreationTokens=(t[p].cacheCreationTokens??0)+y),o=l}return t}async getKiloSessionData(e){let t=await this.getKiloMessagesForSession(e),s=Date.now(),o=t[0]?.time?.created;if(typeof o=="number"&&Number.isFinite(o))s=o;else if(typeof o=="string"){let g=Date.parse(o);Number.isNaN(g)||(s=g)}let{tokens:i}=this.getTokensFromKiloMessages(t),r=this.countKiloInteractionsFromMessages(t),a=this.getKiloModelUsageFromMessages(t),l=this.getAssistantMessagesByParent(t),d={};for(let g=0;g<t.length;g++){let h=t[g];if(h.role!=="user")continue;let y=l.get(h.id)??[];if(y.length===0)continue;let b=y[0].modelID||y[0].model?.modelID||"unknown";O(b)||(d[b]=(d[b]||0)+1)}let p={};for(let[g,h]of Object.entries(a))p[g]={...h,interactions:d[g]||0};return{tokens:i,interactions:r,modelUsage:p,timestamp:s}}};var ct=S(require("fs")),ws=S(require("path")),Gn=S(require("os")),Au=S(Dt());var Ti=class{_sqlJsModule=null;_sqlJsInitPromise=null;_dbCache=new Map;_dbCacheInflight=new Map;extensionUri;constructor(e){this.extensionUri=e}dispose(){for(let e of this._dbCache.values())try{e.db.close()}catch{}this._dbCache.clear(),this._dbCacheInflight.clear(),this._sqlJsInitPromise=null}closeDb(e){try{e.close()}catch{}}isMissingFileError(e){let t=e?.code;return t==="ENOENT"||t==="ENOTDIR"}statCrushDb(e){try{return ct.statSync(e)}catch(t){return this.isMissingFileError(t)&&this._dbCache.has(e)&&(this.closeDb(this._dbCache.get(e).db),this._dbCache.delete(e)),null}}isCachedDbCurrent(e,t){let s=this._dbCache.get(e);return!!s&&s.mtimeMs===t.mtimeMs&&s.size===t.size}getDbCacheKey(e,t){return`${e}:${t.mtimeMs}:${t.size}`}sameDbStats(e,t){return e.mtimeMs===t.mtimeMs&&e.size===t.size}async refreshCrushDb(e,t){let s;try{let r=await this.initSqlJs(),a=ct.readFileSync(e);s=new r.Database(a)}catch{return this._dbCache.get(e)?.db??null}let o=this.statCrushDb(e);if(!o||!this.sameDbStats(t,o))return this.closeDb(s),this._dbCache.get(e)?.db??null;let i=this._dbCache.get(e);return i&&this.closeDb(i.db),this._dbCache.set(e,{db:s,mtimeMs:t.mtimeMs,size:t.size}),s}async getCrushDb(e){let t=this.statCrushDb(e);if(!t)return this._dbCache.get(e)?.db??null;if(this.isCachedDbCurrent(e,t))return this._dbCache.get(e).db;let s=this.getDbCacheKey(e,t),o=this._dbCacheInflight.get(s);if(o)return o;let i=this.refreshCrushDb(e,t);this._dbCacheInflight.set(s,i);try{return await i}finally{this._dbCacheInflight.get(s)===i&&this._dbCacheInflight.delete(s)}}getCrushConfigDir(){if(Gn.platform()==="win32"){let s=process.env.LOCALAPPDATA||ws.join(Gn.homedir(),"AppData","Local");return ws.join(s,"crush")}let t=process.env.XDG_CONFIG_HOME||ws.join(Gn.homedir(),".config");return ws.join(t,"crush")}readCrushProjects(){let e=ws.join(this.getCrushConfigDir(),"projects.json");if(!ct.existsSync(e))return[];try{let t=ct.readFileSync(e,"utf8"),s=JSON.parse(t);return Array.isArray(s.projects)?s.projects:[]}catch{return[]}}isCrushSessionFile(e){return ue(e).includes("/.crush/crush.db#")}getCrushDbPath(e){let t=e.indexOf("crush.db#");return t===-1?e:e.substring(0,t+8)}getCrushSessionId(e){let t=e.indexOf("crush.db#");return t===-1?null:e.substring(t+9)}async initSqlJs(){return this._sqlJsModule?this._sqlJsModule:(this._sqlJsInitPromise||(this._sqlJsInitPromise=(async()=>{let e=ws.join(__dirname,"sql-wasm.wasm"),t;ct.existsSync(e)&&(t=ct.readFileSync(e));let s=await(0,Au.default)(t?{wasmBinary:t.buffer}:void 0);return this._sqlJsModule=s,s})().catch(e=>{throw this._sqlJsInitPromise=null,e})),this._sqlJsInitPromise)}async statSessionFile(e){let t=this.getCrushDbPath(e);return ct.promises.stat(t)}async discoverSessionsInDb(e){let t=await this.getCrushDb(e);if(!t)return[];try{let s=t.exec("SELECT id FROM sessions");return s.length===0?[]:s[0].values.map(o=>o[0])}catch{return[]}}async readCrushSession(e){let t=this.getCrushDbPath(e),s=this.getCrushSessionId(e);if(!s)return null;let o=await this.getCrushDb(t);if(!o)return null;try{let i=o.exec("SELECT id, title, message_count, prompt_tokens, completion_tokens, created_at, updated_at FROM sessions WHERE id = ?",[s]);if(i.length===0||i[0].values.length===0)return null;let r=i[0].columns,a=i[0].values[0],l={};return r.forEach((d,p)=>{l[d]=a[p]}),l}catch{return null}}async getCrushMessages(e){let t=this.getCrushDbPath(e),s=this.getCrushSessionId(e);if(!s)return[];let o=await this.getCrushDb(t);if(!o)return[];try{let i=o.exec("SELECT id, session_id, role, parts, model, provider, created_at, updated_at, finished_at FROM messages WHERE session_id = ? AND is_summary_message = 0 ORDER BY created_at ASC",[s]);if(i.length===0)return[];let r=i[0].columns;return i[0].values.map(a=>{let l={};if(r.forEach((d,p)=>{l[d]=a[p]}),typeof l.parts=="string")try{l.parts=JSON.parse(l.parts)}catch{l.parts=[]}return l})}catch{return[]}}async getTokensFromCrushSession(e){let t=await this.readCrushSession(e);if(!t)return{tokens:0,thinkingTokens:0};let s=typeof t.prompt_tokens=="number"?t.prompt_tokens:0,o=typeof t.completion_tokens=="number"?t.completion_tokens:0;return{tokens:s+o,thinkingTokens:0}}async countCrushInteractions(e){return(await this.getCrushMessages(e)).filter(s=>s.role==="user").length}async getCrushModelUsage(e){let t={},s=await this.readCrushSession(e);if(!s)return t;let o=typeof s.prompt_tokens=="number"?s.prompt_tokens:0,i=typeof s.completion_tokens=="number"?s.completion_tokens:0;if(o+i===0)return t;let a=(await this.getCrushMessages(e)).filter(p=>p.role==="assistant"&&p.model);if(a.length===0)return t.unknown={inputTokens:o,outputTokens:i,sessions:0},t;let l={};for(let p of a){let g=p.model||"unknown";O(g)||(l[g]=(l[g]||0)+1)}let d=a.length;for(let[p,g]of Object.entries(l)){let h=g/d;t[p]={inputTokens:Math.round(o*h),outputTokens:Math.round(i*h),sessions:0}}return t}async getCrushSessionData(e){let t=await this.readCrushSession(e);if(!t)return{tokens:0,interactions:0,modelUsage:{},timestamp:0};let s=typeof t.prompt_tokens=="number"?t.prompt_tokens:0,o=typeof t.completion_tokens=="number"?t.completion_tokens:0,i=s+o,r=typeof t.created_at=="number"?t.created_at*1e3:Date.now(),a=await this.getCrushModelUsage(e),d=(await this.getCrushMessages(e)).filter(h=>h.role==="user").length,p=s+o,g={};for(let[h,y]of Object.entries(a)){let b=y.inputTokens+y.outputTokens,T=p>0?b/p:0;g[h]={inputTokens:y.inputTokens,outputTokens:y.outputTokens,sessions:y.sessions,interactions:Math.round(d*T)}}return{tokens:i,interactions:d,modelUsage:g,timestamp:r}}getToolCallsFromMessages(e){let t=[];for(let s of e)if(!(s.role!=="assistant"||!Array.isArray(s.parts)))for(let o of s.parts)o?.type==="tool_call"&&o?.data?.name&&t.push(o.data.name);return t}};var Bn=S(require("fs")),Ms=S(require("path")),xu=S(require("os"));var wi=class{getContinueDataDir(){return Ms.join(xu.homedir(),".continue")}getContinueSessionsDir(){return Ms.join(this.getContinueDataDir(),"sessions")}isContinueSessionFile(e){let t=J(e);return t.includes("/.continue/sessions/")&&t.endsWith(".json")}async getContinueSessionFiles(){let e=this.getContinueSessionsDir();try{await Bn.promises.access(e)}catch{return[]}try{return(await Bn.promises.readdir(e)).filter(s=>s.endsWith(".json")&&s!=="sessions.json").map(s=>Ms.join(e,s))}catch{return[]}}async readSessionFile(e){try{let t=await Bn.promises.readFile(e,"utf8");return JSON.parse(t)}catch{return null}}estimateTokens(e){return e?Math.ceil(e.length/4):0}async getTokensFromContinueSession(e){let t=await this.readSessionFile(e);if(!t||!Array.isArray(t.history))return{tokens:0,thinkingTokens:0};let s=0,o=0;for(let i of t.history)if(Array.isArray(i.promptLogs))for(let r of i.promptLogs)s+=this.estimateTokens(r.prompt||""),o+=this.estimateTokens(r.completion||"");return{tokens:s+o,thinkingTokens:0}}async countContinueInteractions(e){let t=await this.readSessionFile(e);return!t||!Array.isArray(t.history)?0:t.history.filter(s=>s.message?.role==="user").length}async getContinueModelUsage(e){let t=await this.readSessionFile(e);if(!t||!Array.isArray(t.history))return{};let s={};for(let o of t.history)if(Array.isArray(o.promptLogs))for(let i of o.promptLogs){let r=i.modelTitle||t.chatModelTitle||"unknown";O(r)||(s[r]||(s[r]={inputTokens:0,outputTokens:0,sessions:0}),s[r].inputTokens+=this.estimateTokens(i.prompt||""),s[r].outputTokens+=this.estimateTokens(i.completion||""))}return s}async getContinueSessionMeta(e){let t=await this.readSessionFile(e);return t?{title:t.title,model:t.chatModelTitle,workspaceDirectory:t.workspaceDirectory,mode:t.mode}:null}async readSessionsIndex(){let e=Ms.join(this.getContinueSessionsDir(),"sessions.json"),t=new Map;try{let s=await Bn.promises.readFile(e,"utf8"),o=JSON.parse(s);if(!Array.isArray(o))return t;for(let i of o)i.sessionId&&t.set(i.sessionId,{dateCreated:i.dateCreated?Number(i.dateCreated):void 0,title:i.title,workspaceDirectory:i.workspaceDirectory})}catch{}return t}getContinueSessionId(e){return Ms.basename(e,".json")}extractUserText(e){return typeof e=="string"?e:Array.isArray(e)?e.filter(t=>t.type==="text"&&typeof t.text=="string").map(t=>t.text).join(`
|
|
34
|
+
`):""}async buildContinueTurns(e){let t=await this.readSessionFile(e);if(!t||!Array.isArray(t.history))return[];let s=t.history,o=[],i=0;for(;i<s.length;){if(s[i].message?.role!=="user"){i++;continue}let{turn:a,nextIndex:l}=this.buildTurnFromHistory(s,i,t.chatModelTitle||null);o.push(a),i=l}return o}buildTurnFromHistory(e,t,s){let o=this.extractUserText(e[t].message.content),i={assistantText:"",model:s,inputTokens:0,outputTokens:0,toolCalls:[],pendingToolCalls:new Map},r=t+1;for(;r<e.length&&e[r].message?.role!=="user";){let a=e[r],l=a.message?.role;l==="assistant"?this.processAssistantSubItem(a,i):l==="tool"&&this.processToolSubItem(a,i),r++}for(let[,a]of i.pendingToolCalls)i.toolCalls.push(a);return{turn:{userText:o,assistantText:i.assistantText,model:i.model,toolCalls:i.toolCalls,inputTokens:i.inputTokens,outputTokens:i.outputTokens},nextIndex:r}}processAssistantSubItem(e,t){if(typeof e.message.content=="string"&&e.message.content&&(t.assistantText+=e.message.content),Array.isArray(e.promptLogs)&&e.promptLogs.length>0){let s=e.promptLogs[0];s.modelTitle&&(t.model=s.modelTitle);for(let o of e.promptLogs)t.inputTokens+=this.estimateTokens(o.prompt||""),t.outputTokens+=this.estimateTokens(o.completion||"")}this.collectToolCallsFromAssistant(e,t)}collectToolCallsFromAssistant(e,t){if(Array.isArray(e.message.toolCalls))for(let s of e.message.toolCalls){let o=s.function?.name||s.name||"unknown",i=s.function?.arguments,r=s.id||o;t.pendingToolCalls.set(r,{toolName:o,arguments:i})}}processToolSubItem(e,t){let s=e.message.toolCallId||"",o=this.extractUserText(e.message.content),i=t.pendingToolCalls.get(s);i?(t.toolCalls.push({...i,result:o}),t.pendingToolCalls.delete(s)):t.toolCalls.push({toolName:"unknown",result:o})}};var Ys=S(require("fs")),ut=S(require("path")),Oa=S(require("os"));function Du(n){let e=globalThis.window;return e?e[n]:void 0}var eh=Du("__MODEL_PRICING__"),th=Object.create(null);for(let[n,e]of Object.entries(eh?.pricing??{}))e.displayNames&&e.displayNames.length>0&&(th[n]=e.displayNames[0]);var sh=" (Custom)";function xa(n){try{return decodeURIComponent(n)}catch{return n}}function Ru(n){let e=n.split("/");if(!(e.length!==3||e.some(t=>t.trim()==="")))return{source:xa(e[0]),providerName:xa(e[1]),modelId:xa(e[2])}}var Eu=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\//i;function Js(n){let e=[],t=r=>{r&&!e.includes(r)&&e.push(r)},s=r=>{t(r),t(r.replace(/(\d+)-(\d+)(?=-|$)/,"$1.$2"))},o=n.replace(/^copilot\//,"");s(o);let i=Ru(o);return i&&s(i.modelId),Eu.test(o)&&s(o.replace(Eu,"")),e}function Mi(n){let e=Ru(n);return e?`${e.providerName}${sh}`:void 0}function nh(n){if(typeof n!="object"||n===null)return;let t=n.result;if(!(typeof t!="object"||t===null))return t}function oh(n){if(typeof n!="object"||n===null)return;let t=n.response;if(Array.isArray(t))return t}function ih(n){return typeof n!="object"||n===null?!1:n.kind==="toolInvocationSerialized"}function rh(n){return typeof n!="object"||n===null?!1:n.kind==="subagent"}var ah=20,lh=5,ch=130,uh=50,dh=10,mh=.25,ph=10,Iu=new WeakMap;function gh(n){let e=Iu.get(n);return e||(e=Object.entries(n).map(([t,s])=>[t,t.replace("-",""),s]),Iu.set(n,e)),e}function te(n,e="gpt-4",t={}){let s=mh;for(let[o,i,r]of gh(t))if(e.includes(o)||e.includes(i)){s=r;break}return Math.ceil(n.length*s)}function fh(n){return n.trim().toLowerCase().replace(/\s+/g,"-")}function Ks(n){if(!ih(n))return null;let e=n.toolSpecificData;if(!rh(e))return null;let t=typeof e.prompt=="string"?e.prompt:"",s="";if(typeof e.result=="string")s=e.result;else if(e.result!==null&&typeof e.result=="object"){let r=Object.entries(e.result);r.sort(([a],[l])=>Number(a)-Number(l)),s=r.map(([,a])=>typeof a=="string"?a:"").join("")}let o=typeof e.modelName=="string"?e.modelName:"",i=o?fh(o):"";return t||s?{prompt:t,result:s,modelName:i}:null}function vs(n){if(typeof n!="object"||n===null)return{text:"",isThinking:!1};let e=n;if(e.kind==="thinking"){let o=e.value;return{text:typeof o=="string"?o:"",isThinking:!0}}let t=e.content;if(typeof t=="object"&&t!==null){let o=t.value;if(typeof o=="string"&&o)return{text:o,isThinking:!1}}let s=e.value;return typeof s=="string"&&s?{text:s,isThinking:!1}:{text:"",isThinking:!1}}var EM=1/1e11;function hh(n){return typeof n.promptTokens=="number"?n.promptTokens:n.metadata&&typeof n.metadata.promptTokens=="number"?n.metadata.promptTokens:n.usage&&typeof n.usage.promptTokens=="number"?n.usage.promptTokens:0}function yh(n){if(typeof n.promptTokens=="number"&&typeof n.outputTokens=="number")return n.promptTokens+n.outputTokens;if(n.metadata&&typeof n.metadata.promptTokens=="number"&&typeof n.metadata.outputTokens=="number")return n.metadata.promptTokens+n.metadata.outputTokens;if(n.usage){let e=typeof n.usage.promptTokens=="number"?n.usage.promptTokens:0,t=typeof n.usage.completionTokens=="number"?n.usage.completionTokens:0;return e+t}return 0}function _h(n,e){let t=n.length;for(let i of e.keys())i+1>t&&(t=i+1);let s=0,o=0;for(let i=0;i<t;i++){let r=nh(n[i]),a=r?yh(r):0;if(a>0)s+=a,o=Math.max(o,hh(r));else{let l=e.get(i);l&&(s+=l.promptTokens+l.outputTokens,o=Math.max(o,l.promptTokens))}}return{total:s,maxPromptTokens:o}}function bh(n){let e=Ks(n);if(!e)return 0;let t=0;return e.prompt&&(t+=te(e.prompt)),e.result&&(t+=te(e.result)),t}function Ch(n){let e=0;for(let t of n){let s=oh(t);if(s)for(let o of s)e+=bh(o)}return e}function kh(n){let e=n.k;if(n.kind!==2||e?.[0]!=="requests"||!Array.isArray(n.v))return 0;let t=0;for(let s of n.v){let i=s.message;i?.text&&(t+=te(String(i.text)))}return t}function Sh(n,e){if(Ks(n))return;let{text:t,isThinking:s}=vs(n);t&&(s?e.totalThinkingTokens+=te(t):e.totalTokens+=te(t))}function Th(n,e){let t=n.k;if(!(n.kind!==2||!t?.includes("response")||!Array.isArray(n.v)))for(let s of n.v)Sh(s,e)}var Da=class{estimate(e){let t={totalTokens:0,totalThinkingTokens:0,parseFailedLines:0},s={};for(let d of e)if(d.trim())try{let p=JSON.parse(d);s=zn(s,p),t.totalTokens+=kh(p),Th(p,t)}catch{t.parseFailedLines++}let o=t.parseFailedLines>0?Ra(e):new Map,i=s.requests,r=Array.isArray(i)?i:[],{total:a,maxPromptTokens:l}=_h(r,o);return t.totalTokens+=Ch(r),{tokens:t.totalTokens+t.totalThinkingTokens,thinkingTokens:t.totalThinkingTokens,actualTokens:a,cacheReadTokens:0,modelUsage:{},dailyActualTokens:{},copilotNanoAiu:0,...l>0?{maxRequestInputTokens:l}:{}}}};function wh(n,e,t){let s=e?.usage;if(!s)return 0;let o=typeof s.inputTokens=="number"?s.inputTokens:0,i=typeof s.outputTokens=="number"?s.outputTokens:0,r=typeof s.cacheReadTokens=="number"?s.cacheReadTokens:0,a=typeof s.cacheWriteTokens=="number"?s.cacheWriteTokens:0;return t.cliActualTokens+=o+i,t.cliCacheReadTokens+=r,t.cliShutdownModelUsage[n]||(t.cliShutdownModelUsage[n]={inputTokens:0,outputTokens:0,sessions:0}),t.cliShutdownModelUsage[n].inputTokens+=o,t.cliShutdownModelUsage[n].outputTokens+=i,r>0&&(t.cliShutdownModelUsage[n].cachedReadTokens=(t.cliShutdownModelUsage[n].cachedReadTokens??0)+r),a>0&&(t.cliShutdownModelUsage[n].cacheCreationTokens=(t.cliShutdownModelUsage[n].cacheCreationTokens??0)+a),o+i}function Mh(n,e){let t=n.data;if(!t?.modelMetrics)return;e.cliShutdownModelUsage||(e.cliShutdownModelUsage={});let s=0;for(let[i,r]of Object.entries(t.modelMetrics))s+=wh(i,r,e);let o=typeof t.totalNanoAiu=="number"?t.totalNanoAiu:0;if(o>0&&(e.cliTotalNanoAiu+=o),s>0&&n.timestamp){let i=N(new Date(String(n.timestamp)));i&&i!=="Inval"&&(e.dailyActualTokens[i]=(e.dailyActualTokens[i]||0)+s)}}function vh(n,e){let s=n.data?.contextTier;typeof s=="string"&&s&&(e.contextTier=s)}function Ph(n,e){let t=n.data,s=typeof t?.messagesRemovedDuringTruncation=="number"?t.messagesRemovedDuringTruncation:0;s>0&&(e.truncationCount++,e.messagesRemovedByTruncation+=s)}function Ah(n,e){let t=n?.reasoningText;typeof t=="string"&&t&&(e.totalThinkingTokens+=te(t));let s=n?.thinking?.text;typeof s=="string"&&s&&(e.totalThinkingTokens+=te(s))}function xh(n,e,t){t.cliRealOutputByModel||(t.cliRealOutputByModel={});let s=String(n?.model??"unknown");t.cliRealOutputByModel[s]=(t.cliRealOutputByModel[s]??0)+e}function Dh(n,e){let t=n.data,s=typeof t?.outputTokens=="number"?t.outputTokens:0;s>0?xh(t,s,e):t?.content&&(e.totalTokens+=te(String(t.content))),Ah(t,e)}function Eh(n,e){if(!n?.result)return;let t=n.result,s=typeof t.detailedContent=="string"?t.detailedContent:typeof t.content=="string"?t.content:"";s&&(e.totalTokens+=te(s))}function Rh(n,e){let t=n.data;n.type==="user.message"&&t?.content?e.totalTokens+=te(String(t.content)):n.type==="user.message_rendered"&&t?.renderedMessage?e.totalTokens+=te(String(t.renderedMessage)):n.type==="assistant.message"?Dh(n,e):n.type==="tool.execution_start"?e.totalEstToolCalls++:n.type==="tool.execution_complete"?Eh(t,e):n.content&&(e.totalTokens+=te(String(n.content)))}function Ih(n){if(!n.cliRealOutputByModel)return;let e=n.totalEstToolCalls>ah?ch:n.totalEstToolCalls>lh?uh:dh;for(let t of Object.values(n.cliRealOutputByModel)){let s=Math.round(t*e);n.cliActualTokens+=s+t,n.cliCacheReadTokens+=s}}var Ea=class{estimate(e){let t={totalTokens:0,totalThinkingTokens:0,cliActualTokens:0,cliCacheReadTokens:0,cliShutdownModelUsage:null,cliRealOutputByModel:null,totalEstToolCalls:0,dailyActualTokens:{},cliTotalNanoAiu:0,truncationCount:0,messagesRemovedByTruncation:0,contextTier:null};for(let s of e)if(s.trim())try{let o=JSON.parse(s);o.type==="session.shutdown"?Mh(o,t):o.type==="session.truncation"?Ph(o,t):(o.type==="session.start"||o.type==="session.resume"||o.type==="session.model_change")&&vh(o,t),Rh(o,t)}catch{}return t.cliActualTokens||Ih(t),{tokens:t.totalTokens+t.totalThinkingTokens,thinkingTokens:t.totalThinkingTokens,actualTokens:t.cliActualTokens,cacheReadTokens:t.cliCacheReadTokens,modelUsage:t.cliShutdownModelUsage??{},dailyActualTokens:t.dailyActualTokens,copilotNanoAiu:t.cliTotalNanoAiu,...t.truncationCount>0?{truncationCount:t.truncationCount,messagesRemovedByTruncation:t.messagesRemovedByTruncation}:{},...t.contextTier?{contextTier:t.contextTier}:{}}}};function Uh(n){let e=0;for(let t of n)if(t.trim()){if(++e>ph)break;try{if(typeof JSON.parse(t).kind=="number")return new Da}catch{}}return new Ea}function vi(n,e){let t=n.trim().split(`
|
|
35
|
+
`),o=Uh(t).estimate(t);return e?{...o,actualTokens:e.actualTokens,cacheReadTokens:e.cacheReadTokens,copilotNanoAiu:e.nanoAiu||o.copilotNanoAiu}:o}function Oh(n,e){e.modelTurns++;let t=n.attrs,s=typeof t?.inputTokens=="number"?t.inputTokens:0,o=typeof t?.outputTokens=="number"?t.outputTokens:0,i=typeof t?.cachedTokens=="number"?t.cachedTokens:0,r=typeof t?.copilotUsageNanoAiu=="number"?t.copilotUsageNanoAiu:0;e.inputTokens+=s,e.outputTokens+=o,e.cachedTokens+=i,e.copilotNanoAiu+=r,e.maxRequestInputTokens=Math.max(e.maxRequestInputTokens,s);let a=typeof t?.model=="string"&&t.model?t.model:"";if(!a)return;let l=e.modelBreakdown[a]??{inputTokens:0,outputTokens:0,cachedTokens:0};l.inputTokens+=s,l.outputTokens+=o,l.cachedTokens+=i,e.modelBreakdown[a]=l}function Fu(n){let e={inputTokens:0,outputTokens:0,cachedTokens:0,modelTurns:0,modelBreakdown:{},copilotNanoAiu:0,maxRequestInputTokens:0};for(let t of n.split(/\r?\n/))if(t.trim())try{let s=JSON.parse(t);s.type==="llm_request"&&Oh(s,e)}catch{}return e.modelTurns>0?e:null}function Nu(n){if(!n||typeof n!="object")return null;let t=n.metadata;if(!t||typeof t!="object")return null;let o=t.configurationSchema;if(!o||typeof o!="object")return null;let r=o.properties;if(!r||typeof r!="object")return null;let l=r.reasoningEffort;if(!l||typeof l!="object")return null;let d=l;return typeof d.default=="string"?d.default:null}function Fh(n,e){let s=n.v?.inputState,o=Nu(s?.selectedModel);o!==null&&(e.currentEffort=o,e.defaultEffort=o)}function Nh(n,e){let t=n.k;if(!Array.isArray(t)||t[0]!=="inputState"||t[1]!=="selectedModel")return;let s=Nu(n.v);s!==null&&s!==e.currentEffort&&(e.currentEffort!==null&&e.switchCount++,e.currentEffort=s)}function Lh(n,e){let t=n.k;if(!Array.isArray(t)||t[0]!=="requests"||typeof t[1]!="number"||e.currentEffort===null)return;let s=n.v;if(!s||typeof s!="object")return;let o=typeof s.requestId=="string"?s.requestId:null;o&&e.effortByRequestId.set(o,e.currentEffort)}function Lu(n){let e={effortByRequestId:new Map,currentEffort:null,defaultEffort:null,switchCount:0};for(let t of n){if(!t.trim())continue;let s;try{s=JSON.parse(t)}catch{continue}typeof s.kind=="number"&&(s.kind===0?Fh(s,e):s.kind===1?Nh(s,e):s.kind===2&&Lh(s,e))}return{effortByRequestId:e.effortByRequestId,defaultEffort:e.defaultEffort,switchCount:e.switchCount}}function Ra(n){let e=new Map;for(let t of n){if(!t.includes('"result"'))continue;let s=t.match(/"k":\s*\["requests",\s*(\d+),\s*"result"\]/);if(!s)continue;let o=parseInt(s[1],10),i=t.match(/"promptTokens":(\d+)/),r=t.match(/"outputTokens":(\d+)/),a=t.match(/"completionTokens":(\d+)/);i&&(r||a)&&e.set(o,{promptTokens:parseInt(i[1],10),outputTokens:parseInt(r?.[1]||a[1],10)})}return e}var Uu=new WeakMap;function jh(n){let e=Uu.get(n);if(!e){let t={};for(let[o,i]of Object.entries(n))if(i.displayNames)for(let r of i.displayNames)t[r]=o;let s=Object.keys(t).sort((o,i)=>i.length-o.length);e={map:t,sortedNames:s},Uu.set(n,e)}return e}function Gh(n,e){let{map:t,sortedNames:s}=jh(e);for(let o of s)if(n.includes(o))return t[o];return null}function qn(n){return n==="auto"||n==="copilot/auto"}function Bh(n){if(Array.isArray(n.response)){for(let e of n.response)if(!(!e||typeof e!="object"||!("kind"in e)||e.kind!=="autoModeResolution")&&!(!("resolved"in e)||!e.resolved||typeof e.resolved!="object")&&"id"in e.resolved&&typeof e.resolved.id=="string"&&e.resolved.id&&!qn(e.resolved.id))return e.resolved.id.replace(/^copilot\//,"")}}function Ia(n){return qn(n.modelId)||qn(n.result?.metadata?.modelId)||Array.isArray(n.response)&&n.response.some(e=>!!e&&typeof e=="object"&&"kind"in e&&e.kind==="autoModeResolution")}function It(n,e={},t="gpt-4"){if(n.modelId&&!qn(n.modelId))return n.modelId.replace(/^copilot\//,"");let s=Bh(n);if(s)return s;let i=[n.modelId,n.result?.metadata?.modelId].find(r=>r&&!qn(r));if(i)return i.replace(/^copilot\//,"");if(n.result?.details){let r=Gh(n.result.details,e);if(r)return r}return Ia(n)?"auto":t}function Ut(n){let e=n.trim();if(!e.includes(`
|
|
36
36
|
`))return!1;let t=e.split(`
|
|
37
|
-
`).filter(i=>i.trim());if(t.length<2)return!1;let s=t[0].trim(),o=t[1].trim();return s.startsWith("{")&&s.endsWith("}")&&o.startsWith("{")&&o.endsWith("}")}function
|
|
37
|
+
`).filter(i=>i.trim());if(t.length<2)return!1;let s=t[0].trim(),o=t[1].trim();return s.startsWith("{")&&s.endsWith("}")&&o.startsWith("{")&&o.endsWith("}")}function Vs(n){let e=n.trim();return/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i.test(e)}function qh(n,e,t){if(Array.isArray(n)){let s=Number(e);return(!n[s]||typeof n[s]!="object")&&(n[s]=t?[]:{}),n[s]}else return(!n[e]||typeof n[e]!="object")&&(n[e]=t?[]:{}),n[e]}function zh(n,e,t){Array.isArray(n)?n[Number(e)]=t:n[e]=t}function Wh(n,e){Array.isArray(e)?n.push(...e):n.push(e)}function $h(n,e,t){let s;if(Array.isArray(n)){let o=Number(e);Array.isArray(n[o])||(n[o]=[]),s=n[o]}else Array.isArray(n[e])||(n[e]=[]),s=n[e];Wh(s,t)}function zn(n,e){if(typeof e!="object"||e===null)return n;let t=e,{kind:s,k:o,v:i}=t;if(s===0)return i;if(!Array.isArray(o)||o.length===0)return n;let r=o.map(String),a=typeof n=="object"&&n!==null?n:{},l=a;for(let p=0;p<r.length-1;p++)l=qh(l,r[p],/^\d+$/.test(r[p+1]));let d=r[r.length-1];return s===1?(zh(l,d,i),a):(s===2&&$h(l,d,i),a)}function Ps(n,e={}){let t=Ua(n,e);if(t?.tier)return t.tier;for(let[s,o]of Object.entries(e))if((n.includes(s)||s.includes(n))&&o.tier)return o.tier;return"unknown"}function Ou(n){let e=n.copilotPricing?.inputCostPerMillion??n.inputCostPerMillion??null;return e!==null?e<2?"low":e<5?"medium":"high":"unknown"}function Wn(n,e={}){let t=Ua(n,e);if(t)return Ou(t);for(let[s,o]of Object.entries(e))if(n.includes(s)||s.includes(n))return Ou(o);return"unknown"}function Ua(n,e){for(let t of Js(n)){let s=e[t];if(s)return s}}function Xe(n,e={},t="provider"){let s=0;for(let[o,i]of Object.entries(n)){let r=Ua(o,e);if(!r)continue;let a=t==="copilot"&&r.copilotPricing?r.copilotPricing:r,l=i.cachedReadTokens??0,d=i.cacheCreationTokens??0,p=Math.min(i.cacheCreation1hTokens??0,d),g=d-p,y=Math.max(0,i.inputTokens-l-d)/1e6*a.inputCostPerMillion,b=l/1e6*(a.cachedInputCostPerMillion??a.inputCostPerMillion),T=g/1e6*(a.cacheCreationCostPerMillion??a.inputCostPerMillion),E=p/1e6*(a.cacheCreation1hCostPerMillion??a.cacheCreationCostPerMillion??a.inputCostPerMillion),P=i.outputTokens/1e6*a.outputCostPerMillion;s+=y+b+T+E+P,s-=Hh(o,i,r,t)}return s}function Hh(n,e,t,s){return s!=="copilot"||!t.copilotPricing||!e.autoRouting?0:.1*Xe({[n]:{...e.autoRouting,sessions:0}},{[n]:t.copilotPricing},"provider")}function G(){return{file:0,selection:0,implicitSelection:0,symbol:0,codebase:0,workspace:0,terminal:0,vscode:0,terminalLastCommand:0,terminalSelection:0,clipboard:0,changes:0,outputPanel:0,problemsPanel:0,pullRequest:0,codeContextLines:0,byKind:{},copilotInstructions:0,agentsMd:0,byPath:{}}}var Jh="com.microsoft.copilot.eclipse",ju=ut.join(".metadata",".plugins","com.microsoft.copilot.eclipse.core","conversations"),Pi=class{getDefaultWorkspaceRoot(){return ut.join(Oa.homedir(),"eclipse-workspace")}getEclipseInstallsRoot(){return ut.join(Oa.homedir(),"eclipse")}isEclipseSessionFile(e){let t=J(e);return t.includes(Jh)&&t.endsWith(".json")}async getWorkspaceRoots(){let e=new Set;e.add(this.getDefaultWorkspaceRoot());for(let t of await this.readRecentWorkspaces())e.add(t);return[...e]}async readRecentWorkspaces(){let e=this.getEclipseInstallsRoot(),t;try{t=await Ys.promises.readdir(e)}catch{return[]}let s=[];for(let o of t){let i=ut.join(e,o,"eclipse","configuration",".settings","org.eclipse.ui.ide.prefs");s.push(...await this.parseRecentWorkspacesFromPrefs(i))}return s}async parseRecentWorkspacesFromPrefs(e){let t;try{t=await Ys.promises.readFile(e,"utf8")}catch{return[]}let s=/^RECENT_WORKSPACES=(.*)$/m.exec(t);return s?s[1].split("\\n").map(o=>this.unescapeJavaPropertyValue(o)).filter(Boolean):[]}unescapeJavaPropertyValue(e){return e.replace(/\\:/g,":").replace(/\\=/g,"=").replace(/\\\\/g,"\\").trim()}async discoverEclipseSessions(){let e=[];for(let t of await this.getWorkspaceRoots()){let s=ut.join(t,ju);e.push(...await this.discoverSessionsInDir(s))}return e}async discoverSessionsInDir(e){let t;try{t=await Ys.promises.readdir(e,{withFileTypes:!0})}catch{return[]}let s=[];for(let o of t){if(!o.isDirectory())continue;let i=ut.join(e,o.name),r;try{r=await Ys.promises.readdir(i)}catch{continue}for(let a of r)a.endsWith(".json")&&s.push(ut.join(i,a))}return s}async getDiagnosticCandidatePaths(){return(await this.getWorkspaceRoots()).map(t=>ut.join(t,ju))}async readSession(e){try{let t=await Ys.promises.readFile(e,"utf8");return JSON.parse(t)}catch{return null}}getEclipseSessionId(e){return ut.basename(e,".json")}estimate(e){return e?te(e):0}userText(e){let t=e?.message?.text;return typeof t=="string"?t:""}assistantText(e){let t=e?.reply?.editAgentRounds;return Array.isArray(t)?t.map(s=>typeof s?.reply=="string"?s.reply:"").filter(Boolean).join(`
|
|
38
38
|
`):""}thinkingText(e){let t=e?.reply?.editAgentRounds;return Array.isArray(t)?t.map(s=>typeof s?.thinkingBlock?.content=="string"?s.thinkingBlock.content:"").filter(Boolean).join(`
|
|
39
39
|
`):""}toolCallsFromTurn(e){let t=e?.reply?.editAgentRounds;if(!Array.isArray(t))return[];let s=[];for(let o of t)if(Array.isArray(o?.toolCalls))for(let i of o.toolCalls)s.push(this.normalizeToolCall(i));return s}normalizeToolCall(e){let t=e?.function??{};return{toolName:e?.name||e?.toolName||t.name||"unknown",arguments:this.stringifyArgs(e?.arguments??t.arguments)??this.strOrNull(e?.progressMessage)??void 0,result:this.resultToString(e?.result)}}stringifyArgs(e){if(typeof e=="string")return e;if(e)return JSON.stringify(e)}strOrNull(e){return typeof e=="string"?e:null}resultToString(e){if(typeof e=="string")return e||void 0;if(!Array.isArray(e)||e.length===0)return;let t=e.map(s=>typeof s=="string"?s:typeof s?.value=="string"?s.value:"").filter(Boolean);return t.length>0?t.join(`
|
|
40
|
-
`):void 0}async getTokensFromEclipseSession(e){let t=await this.readSession(e);if(!t||!Array.isArray(t.turns))return{tokens:0,thinkingTokens:0};let s=0,o=0;for(let i of t.turns)i?.role==="user"?s+=this.estimate(this.userText(i)):i?.role==="copilot"&&(s+=this.estimate(this.assistantText(i)),o+=this.estimate(this.thinkingText(i)));return{tokens:s+o,thinkingTokens:o}}async countEclipseInteractions(e){let t=await this.readSession(e);return!t||!Array.isArray(t.turns)?0:t.turns.filter(s=>s?.role==="user").length}async getEclipseModelUsage(e){let t=await this.readSession(e);if(!t||!Array.isArray(t.turns))return{};let s={},o=t.turns;for(let i=0;i<o.length;i++){let r=o[i];if(r?.role!=="user")continue;let a=this.findCopilotReply(o,i,r?.turnId),
|
|
41
|
-
`)){let r=t.exec(i);if(!r)continue;let a=r[1];if(!s.has(a)){s.add(a);try{await
|
|
42
|
-
`)}_decodeVcRaw(e,t){let s=Object.keys(e);if(s.length!==0)if(isNaN(Number(s[0])))e.Content&&typeof e.Content=="string"&&t.push(e.Content);else try{let o=s.map(Number).sort((
|
|
43
|
-
`)}getModelId(e,t){if(!e)return null;if(t)return e.Model?.ModelId||null;let s=e.Model;return Array.isArray(s)&&s.length>=2&&s[1]?.Id?s[1].Id:null}async getTokenEstimates(e,t){let s=await this.decodeSessionFile(e),o=0;for(let i=1;i<s.length;i++){let r=s[i]?.[1];if(!r?.Content)continue;let a=this.extractTextFromContent(r.Content),
|
|
44
|
-
`));return t||null}function
|
|
45
|
-
`),o=[];for(let i of s)if(i.trim())try{o.push(JSON.parse(i))}catch{}return o},[],`claudecode readSessionEvents(${e})`)}deduplicateAssistantEvents(e){let t=new Map,s=[];for(let o of e){if(o.type!=="assistant"||!o.message?.usage)continue;let i=o.message?.id;i?t.set(i,o):s.push(o)}return[...t.values(),...s]}resolveSessionFamilyRoot(e){let t=e.split(Te.sep),s=t.lastIndexOf("subagents");return s>0?{sessionId:t[s-1],projectDir:t.slice(0,s-1).join(Te.sep)}:{sessionId:Te.basename(e,".jsonl"),projectDir:Te.dirname(e)}}async getSessionFamilyFiles(e){let{projectDir:t,sessionId:s}=this.resolveSessionFamilyRoot(e),o=Te.join(t,`${s}.jsonl`),i=Te.join(t,s,"subagents"),r=[];try{await
|
|
46
|
-
`),o=[];for(let i of s)if(i.trim())try{o.push(JSON.parse(i))}catch{}return o}catch{return[]}}async getTokensFromDesktopSession(e){let t=await this.readDesktopSessionEvents(e),s=0,o=0,i=new Set;for(let r of t){let a=this.extractDesktopEventTokens(r,i);a&&(s+=a.inputTokens,o+=a.outputTokens)}return{tokens:s+o,thinkingTokens:0}}computeDesktopTokenCounts(e){let t=typeof e.cache_creation_input_tokens=="number"?e.cache_creation_input_tokens:0,s=typeof e.cache_creation?.ephemeral_1h_input_tokens=="number"?e.cache_creation.ephemeral_1h_input_tokens:0,o=typeof e.cache_read_input_tokens=="number"?e.cache_read_input_tokens:0,i=(typeof e.input_tokens=="number"?e.input_tokens:0)+t+o,r=typeof e.output_tokens=="number"?e.output_tokens:0;return{inputTokens:i,outputTokens:r,cacheCreation:t,cachedRead:o,cacheCreation1h:s}}extractDesktopEventTokens(e,t){if(e.type!=="assistant")return null;let s=e.message?.usage;if(!s)return null;let o=e.requestId;if(o){if(!e.message?.stop_reason||t.has(o))return null;t.add(o)}let{inputTokens:i,outputTokens:r}=this.computeDesktopTokenCounts(s);return{inputTokens:i,outputTokens:r}}async countDesktopSessionInteractions(e){let t=await this.readDesktopSessionEvents(e),s=0;for(let o of t)o.type==="user"&&!o.isSidechain&&o.message?.role==="user"&&
|
|
47
|
-
`),i=[];for(let r of o)if(r.trim())try{i.push(JSON.parse(r))}catch{}return i}catch{return[]}}async getTokensFromSession(e){let t=await this.readSessionMeta(e);if(!t?.stats)return{tokens:0,thinkingTokens:0};let s=typeof t.stats.session_prompt_tokens=="number"?t.stats.session_prompt_tokens:0,o=typeof t.stats.session_completion_tokens=="number"?t.stats.session_completion_tokens:0;return{tokens:s+o,thinkingTokens:0}}async countInteractions(e){return(await this.readSessionMessages(e)).filter(s=>s.role==="user"&&s.injected!==!0).length}async getModelUsage(e){let t=await this.readSessionMeta(e);if(!t)return{};let s=typeof t.stats?.session_prompt_tokens=="number"?t.stats.session_prompt_tokens:0,o=typeof t.stats?.session_completion_tokens=="number"?t.stats.session_completion_tokens:0;if(s+o===0)return{};let i=t.config?.active_model;return{[
|
|
40
|
+
`):void 0}async getTokensFromEclipseSession(e){let t=await this.readSession(e);if(!t||!Array.isArray(t.turns))return{tokens:0,thinkingTokens:0};let s=0,o=0;for(let i of t.turns)i?.role==="user"?s+=this.estimate(this.userText(i)):i?.role==="copilot"&&(s+=this.estimate(this.assistantText(i)),o+=this.estimate(this.thinkingText(i)));return{tokens:s+o,thinkingTokens:o}}async countEclipseInteractions(e){let t=await this.readSession(e);return!t||!Array.isArray(t.turns)?0:t.turns.filter(s=>s?.role==="user").length}async getEclipseModelUsage(e){let t=await this.readSession(e);if(!t||!Array.isArray(t.turns))return{};let s={},o=t.turns;for(let i=0;i<o.length;i++){let r=o[i];if(r?.role!=="user")continue;let a=this.findCopilotReply(o,i,r?.turnId),l=r?.model||a?.reply?.modelName||"unknown";O(l)||(s[l]||(s[l]={inputTokens:0,outputTokens:0,sessions:0}),s[l].inputTokens+=this.estimate(this.userText(r)),s[l].outputTokens+=this.estimate(this.assistantText(a)))}return s}findCopilotReply(e,t,s){for(let o=t+1;o<e.length;o++){let i=e[o];if(i?.role==="user")break;if(i?.role==="copilot"&&(!s||i?.turnId===s||!i?.turnId))return i}return null}async getEclipseSessionMeta(e){let t=await this.readSession(e);if(!t)return null;let s=Array.isArray(t.turns)?t.turns.find(o=>o?.role==="user"):void 0;return{title:t.title,conversationId:t.conversationId,requester:t.requesterUsername,creationDate:t.creationDate,lastMessageDate:t.lastMessageDate,model:s?.model,mode:s?.chatMode}}async buildEclipseTurns(e){let t=await this.readSession(e);if(!t||!Array.isArray(t.turns))return[];let s=t.turns,o=[];for(let i=0;i<s.length;i++){if(s[i]?.role!=="user")continue;let r=this.findCopilotReply(s,i,s[i]?.turnId);o.push(this.buildTurn(s[i],r))}return o}buildTurn(e,t){let s=this.userText(e),o=this.assistantText(t),i=this.thinkingText(t);return{userText:s,assistantText:o,model:e?.model||t?.reply?.modelName||null,mode:this.strOrNull(e?.chatMode),reasoningEffort:this.strOrNull(t?.reply?.reasoningEffort),timestamp:this.strOrNull(e?.timestamp),currentDocumentUri:this.strOrNull(e?.currentDocument?.uri),toolCalls:this.toolCallsFromTurn(t),inputTokens:this.estimate(s),outputTokens:this.estimate(o),thinkingTokens:this.estimate(i)}}};var Ie=S(require("fs")),xe=S(require("path")),Nt=S(require("os")),Bi=S(sl());var Ly=new Set(["node_modules",".git",".github","bin","obj","out","dist","build","target","packages","vendor","__pycache__",".tox",".venv","venv","env","Windows","Program Files","Program Files (x86)","ProgramData","$Recycle.Bin","System Volume Information","Recovery"]),Gi=class{isVSSessionFile(e){let t=J(e);return!t.includes("/copilot-chat/")||!t.includes("/sessions/")?!1:t.includes("/.vs/")||t.includes("/vsgithubcopilot/copilot-chat/")||t.includes("/ssmsgithubcopilot/copilot-chat/")}async statSessionFile(e){return Ie.promises.stat(e)}getLogDir(){let e=process.env.LOCALAPPDATA||xe.join(Nt.homedir(),"AppData","Local");return xe.join(e,"Temp","VSGitHubCopilotLogs")}getSsmsSessionsDir(){let e=process.env.LOCALAPPDATA||xe.join(Nt.homedir(),"AppData","Local");return xe.join(e,"Microsoft","SSMS")}getVsAppDataSessionsDir(){let e=process.env.LOCALAPPDATA||xe.join(Nt.homedir(),"AppData","Local");return xe.join(e,"Microsoft","VisualStudio")}async discoverSessions(){let e=new Set,t=[];return await this._discoverFromLogs(e,t),await this._discoverFromFilesystem(e,t),await this._discoverFromVsAppData(e,t),await this._discoverFromSsmsAppData(e,t),t}async _discoverFromLogs(e,t){let s=this.getLogDir(),o;try{o=(await Ie.promises.readdir(s)).filter(a=>a.endsWith(".chat.log")).map(a=>xe.join(s,a))}catch{return}let i=/Updating session file '([^']+)'/;for(let r of o)try{let a=await Ie.promises.readFile(r,"utf8");await this._processLogFileLines(a,i,e,t)}catch{}}async _processLogFileLines(e,t,s,o){for(let i of e.split(`
|
|
41
|
+
`)){let r=t.exec(i);if(!r)continue;let a=r[1];if(!s.has(a)){s.add(a);try{await Ie.promises.access(a),o.push(a)}catch{}}}}async _discoverFromFilesystem(e,t){if(Nt.platform()!=="win32")return;let s=Nt.homedir(),o=["C","D"],i=[],r=["code","repos","src","projects","dev","workspace","work","source"];for(let a of r){let l=xe.join(s,a);try{await Ie.promises.access(l),i.push(l)}catch{}}for(let a of r){let l=xe.join(s,"Documents",a);try{await Ie.promises.access(l),i.push(l)}catch{}}for(let a of o)for(let l of r){let d=a+":\\"+l;try{await Ie.promises.access(d),i.push(d)}catch{}}for(let a of i)await this._scanForVsDirs(a,0,5,e,t)}async _scanForVsDirs(e,t,s,o,i){if(t>s)return;let r;try{r=await Ie.promises.readdir(e,{withFileTypes:!0})}catch{return}let a=r.filter(d=>{if(!d.isDirectory())return!1;let p=d.name;return!(Ly.has(p)||p.startsWith(".")&&p!==".vs")}),l=8;for(let d=0;d<a.length;d+=l)await Promise.all(a.slice(d,d+l).map(async p=>{let g=xe.join(e,p.name);p.name===".vs"?await this._findSessionsInVsDir(g,o,i):await this._scanForVsDirs(g,t+1,s,o,i)}))}async _collectFromSessionsDir(e,t,s){let o;try{o=await Ie.promises.readdir(e,{withFileTypes:!0})}catch{return}for(let i of o){if(!i.isFile())continue;let r=xe.join(e,i.name);t.has(r)||(t.add(r),s.push(r))}}async _collectFromHashDirs(e,t,s){let o;try{o=await Ie.promises.readdir(e,{withFileTypes:!0})}catch{return}for(let i of o)i.isDirectory()&&await this._collectFromSessionsDir(xe.join(e,i.name,"sessions"),t,s)}async _findSessionsInVsDir(e,t,s){let o;try{o=await Ie.promises.readdir(e,{withFileTypes:!0})}catch{return}for(let i of o)i.isDirectory()&&await this._collectFromHashDirs(xe.join(e,i.name,"copilot-chat"),t,s)}async _discoverFromVsAppData(e,t){if(Nt.platform()!=="win32")return;let s=this.getVsAppDataSessionsDir(),o;try{o=await Ie.promises.readdir(s,{withFileTypes:!0})}catch{return}for(let i of o)i.isDirectory()&&await this._collectFromHashDirs(xe.join(s,i.name,"VSGitHubCopilot","copilot-chat"),e,t)}async _discoverFromSsmsAppData(e,t){if(Nt.platform()!=="win32")return;let s=this.getSsmsSessionsDir(),o;try{o=await Ie.promises.readdir(s,{withFileTypes:!0})}catch{return}for(let i of o)i.isDirectory()&&await this._collectFromHashDirs(xe.join(s,i.name,"SSMSGitHubCopilot","copilot-chat"),e,t)}async decodeSessionFile(e){try{let t=await Ie.promises.readFile(e);return t.length<2?[]:Array.from((0,Bi.decodeMulti)(t.slice(1)))}catch{return[]}}getSessionTitle(e){let s=e.find((i,r)=>r>0&&r%2===1)?.[1];if(!s?.Content)return;let o=this.extractTextFromContent(s.Content).trim();if(o)return o.length>80?o.substring(0,80)+"\u2026":o}getSessionTimestamps(e){let t=e[0];return t?{timeCreated:t.TimeCreated?new Date(t.TimeCreated).toISOString():null,timeUpdated:t.TimeUpdated?new Date(t.TimeUpdated).toISOString():null}:{timeCreated:null,timeUpdated:null}}countInteractions(e){return e.filter((t,s)=>s>0&&s%2===1).length}extractTextFromContent(e){if(!Array.isArray(e))return"";let t=[];for(let s of e){let o=s?.[1];o&&typeof o.Content=="string"&&o.Content&&t.push(o.Content)}return t.join(`
|
|
42
|
+
`)}_decodeVcRaw(e,t){let s=Object.keys(e);if(s.length!==0)if(isNaN(Number(s[0])))e.Content&&typeof e.Content=="string"&&t.push(e.Content);else try{let o=s.map(Number).sort((l,d)=>l-d),i=Buffer.from(o.map(l=>e[l])),r=(0,Bi.decode)(i),a=Array.isArray(r)?r[1]:r;a?.Content&&typeof a.Content=="string"&&t.push(a.Content)}catch{}}extractContextText(e){if(!Array.isArray(e))return"";let t=[];for(let s of e){let o=s?.ValueContainer;if(!Array.isArray(o)||o.length<2)continue;let i=o[1];!i||typeof i!="object"||this._decodeVcRaw(i,t)}return t.join(`
|
|
43
|
+
`)}getModelId(e,t){if(!e)return null;if(t)return e.Model?.ModelId||null;let s=e.Model;return Array.isArray(s)&&s.length>=2&&s[1]?.Id?s[1].Id:null}async getTokenEstimates(e,t){let s=await this.decodeSessionFile(e),o=0;for(let i=1;i<s.length;i++){let r=s[i]?.[1];if(!r?.Content)continue;let a=this.extractTextFromContent(r.Content),l=i%2===1,d=l?this.extractContextText(r.Context):"";if(!a&&!d)continue;let p=this.getModelId(r,l)||void 0;o+=t(a+d,p)}return{tokens:o,thinkingTokens:0}}async getModelUsage(e,t){let s={},o=await this.decodeSessionFile(e),i={};for(let r=1;r<o.length;r++){let a=o[r]?.[1];if(!a?.Content)continue;let l=this.extractTextFromContent(a.Content),d=r%2===1,p=d?this.extractContextText(a.Context):"",g=this.getModelId(a,d)||"unknown";!l&&!p||O(g)||(i[g]||(i[g]={input:"",output:""}),d?i[g].input+=l+p:i[g].output+=l)}for(let[r,a]of Object.entries(i))s[r]={inputTokens:t(a.input,r),outputTokens:t(a.output,r),sessions:0};return s}};var Xs=S(require("fs")),Te=S(require("path")),zi=S(require("os"));var jy=/<(system-reminder|task-notification|local-command-stdout|local-command-stderr|command-message|command-name|command-args|command-contents)>[\s\S]*?<\/\1>/g;function dd(n){return n?n.replace(jy,"").trim():""}function Gy(n){let e=n?.message?.content;if(typeof e=="string"){let s=dd(e);return s||null}if(!Array.isArray(e)||e.some(s=>s?.type==="tool_result"))return null;let t=dd(e.filter(s=>s?.type==="text").map(s=>s?.text||"").join(`
|
|
44
|
+
`));return t||null}function ts(n){return Gy(n)!==null}function Lt(n){if(!n||/claude-.+-\d+\.\d+/.test(n))return n;let e=n.match(/^(claude-.+)-(\d)-(\d)(-\d{8})?$/);return e?`${e[1]}-${e[2]}.${e[3]}`:n}var qi=class{getClaudeCodeDataDir(){return Te.join(zi.homedir(),".claude")}getClaudeCodeProjectsDir(){return Te.join(this.getClaudeCodeDataDir(),"projects")}isClaudeCodeSessionFile(e){let t=J(e),s=J(this.getClaudeCodeProjectsDir());return t.startsWith(s)&&t.endsWith(".jsonl")}async getClaudeCodeSessionFiles(){let e=this.getClaudeCodeProjectsDir();try{await Xs.promises.access(e)}catch{return[]}try{let t=await Xs.promises.readdir(e,{withFileTypes:!0});return(await Promise.all(t.filter(o=>o.isDirectory()).map(o=>this.collectJsonlFilesFromProject(Te.join(e,o.name))))).flat()}catch(t){return console.error("[claudecode] Failed to read projects dir:",t),[]}}async collectJsonlFilesFromProject(e,t=0,s=6){if(t>s)return[];try{let o=await Xs.promises.readdir(e,{withFileTypes:!0});return(await Promise.all(o.map(async r=>{let a=Te.join(e,r.name);if(r.isDirectory())return this.collectJsonlFilesFromProject(a,t+1,s);if(!r.name.endsWith(".jsonl"))return[];try{return(await Xs.promises.stat(a)).size>0?[a]:[]}catch(l){return console.error(`[claudecode] Failed to stat ${a}:`,l),[]}}))).flat()}catch(o){return console.error(`[claudecode] Failed to read project dir ${e}:`,o),[]}}async readSessionEvents(e){return ks(async()=>{let t=await Pe(e,"claudecode");if(t===void 0)return[];let s=t.trim().split(`
|
|
45
|
+
`),o=[];for(let i of s)if(i.trim())try{o.push(JSON.parse(i))}catch{}return o},[],`claudecode readSessionEvents(${e})`)}deduplicateAssistantEvents(e){let t=new Map,s=[];for(let o of e){if(o.type!=="assistant"||!o.message?.usage)continue;let i=o.message?.id;i?t.set(i,o):s.push(o)}return[...t.values(),...s]}resolveSessionFamilyRoot(e){let t=e.split(Te.sep),s=t.lastIndexOf("subagents");return s>0?{sessionId:t[s-1],projectDir:t.slice(0,s-1).join(Te.sep)}:{sessionId:Te.basename(e,".jsonl"),projectDir:Te.dirname(e)}}async getSessionFamilyFiles(e){let{projectDir:t,sessionId:s}=this.resolveSessionFamilyRoot(e),o=Te.join(t,`${s}.jsonl`),i=Te.join(t,s,"subagents"),r=[];try{await Xs.promises.access(i),r=(await this.collectJsonlFilesFromProject(i)).sort()}catch{}return[o,...r]}async getPriorFamilyMessageIds(e){if(e.split(Te.sep).lastIndexOf("subagents")<=0)return new Set;let s=await this.getSessionFamilyFiles(e),o=Te.normalize(e),i=new Set;for(let r of s){if(Te.normalize(r)===o)break;let a=await this.readSessionEvents(r);for(let l of this.deduplicateAssistantEvents(a)){let d=l.message?.id;d&&i.add(d)}}return i}getEventTotalTokens(e){let t=(typeof e.input_tokens=="number"?e.input_tokens:0)+(typeof e.cache_creation_input_tokens=="number"?e.cache_creation_input_tokens:0)+(typeof e.cache_read_input_tokens=="number"?e.cache_read_input_tokens:0),s=typeof e.output_tokens=="number"?e.output_tokens:0;return t+s}async getTokensFromClaudeCodeSession(e){let t=await this.readSessionEvents(e),s=await this.getPriorFamilyMessageIds(e),o=0;for(let i of this.deduplicateAssistantEvents(t)){let r=i.message?.id;r&&s.has(r)||(o+=this.getEventTotalTokens(i.message.usage))}return{tokens:o,thinkingTokens:0}}bucketEventIntoDay(e,t,s){let o=e.message?.id;if(o&&t.has(o))return 0;let i=this.getEventTotalTokens(e.message.usage);if(i<=0)return 0;let r=e.timestamp?new Date(e.timestamp).getTime():NaN;if(isNaN(r))return 0;let a=N(new Date(r));return s.set(a,(s.get(a)??0)+i),i}async getClaudeCodeDailyFractions(e){let t=await this.readSessionEvents(e),s=await this.getPriorFamilyMessageIds(e),o=new Map,i=0;for(let a of this.deduplicateAssistantEvents(t))i+=this.bucketEventIntoDay(a,s,o);if(i===0){let a=await this.getClaudeCodeSessionMeta(e),l=a?.firstInteraction?Date.parse(a.firstInteraction):NaN;return{[isNaN(l)?N(new Date):N(new Date(l))]:1}}let r={};for(let[a,l]of o.entries())r[a]=l/i;return r}async countClaudeCodeInteractions(e){let t=await this.readSessionEvents(e),s=0;for(let o of t)o.type==="user"&&!o.isSidechain&&o.message?.role==="user"&&ts(o)&&s++;return s}extractCacheTokenBreakdown(e){let t=typeof e.cache_creation_input_tokens=="number"?e.cache_creation_input_tokens:0,s=typeof e.cache_creation?.ephemeral_1h_input_tokens=="number"?e.cache_creation.ephemeral_1h_input_tokens:0,o=typeof e.cache_read_input_tokens=="number"?e.cache_read_input_tokens:0;return{cacheCreation:t,cacheCreation1h:s,cachedRead:o}}addModelUsageEntry(e,t,s){if(O(t))return;e[t]||(e[t]={inputTokens:0,outputTokens:0,sessions:0});let{cacheCreation:o,cacheCreation1h:i,cachedRead:r}=this.extractCacheTokenBreakdown(s),a=(typeof s.input_tokens=="number"?s.input_tokens:0)+o+r,l=typeof s.output_tokens=="number"?s.output_tokens:0;e[t].inputTokens+=a,e[t].outputTokens+=l,o>0&&(e[t].cacheCreationTokens=(e[t].cacheCreationTokens??0)+o),i>0&&(e[t].cacheCreation1hTokens=(e[t].cacheCreation1hTokens??0)+i),r>0&&(e[t].cachedReadTokens=(e[t].cachedReadTokens??0)+r)}async getClaudeCodeModelUsage(e){let t=await this.readSessionEvents(e),s=await this.getPriorFamilyMessageIds(e),o={};for(let i of this.deduplicateAssistantEvents(t)){let r=i.message?.id;if(r&&s.has(r))continue;let a=i.message.usage,l=Lt(i.message?.model||"unknown");this.addModelUsageEntry(o,l,a)}return o}async getClaudeCodeSessionMeta(e){let t=await this.readSessionEvents(e);if(t.length===0)return null;let{title:s,entrypoint:o,cwd:i,timestamps:r}=this.extractMetaFieldsFromEvents(t),a,l;return r.length>0&&(r.sort((d,p)=>d-p),a=new Date(r[0]).toISOString(),l=new Date(r[r.length-1]).toISOString()),{title:s,entrypoint:o,firstInteraction:a,lastInteraction:l,cwd:i}}extractMetaFieldsFromEvents(e){let t,s,o,i,r=[];for(let a of e)if(a.type==="ai-title"&&a.aiTitle&&(t=a.aiTitle),a.type==="custom-title"&&a.customTitle&&(s=a.customTitle),!o&&a.entrypoint&&(o=a.entrypoint),!i&&a.cwd&&(i=a.cwd),a.timestamp){let l=new Date(a.timestamp).getTime();isNaN(l)||r.push(l)}return{title:s??t,entrypoint:o,cwd:i,timestamps:r}}getClaudeCodeSessionId(e){return Te.basename(e,".jsonl")}getProjectPathFromHash(e){if(zi.platform()==="win32"){let s=e.split("-");if(s.length>=2&&s[0].length===1&&s[1]===""){let o=s[0].toUpperCase(),i=s.slice(2).join("\\");return`${o}:\\${i}`}}return"/"+e.replace(/-/g,"/")}};var dt=S(require("fs")),St=S(require("path")),Vn=S(require("os"));var By="Claude_pzs8sxrjxfjjc",md=["claude-code-sessions","local-agent-mode-sessions"],Wi=class{getDesktopConfigDir(){let e=Vn.platform();if(e==="win32"){let t=process.env.LOCALAPPDATA||St.join(Vn.homedir(),"AppData","Local");return St.join(t,"Packages",By,"LocalCache","Roaming","Claude")}return e==="darwin"?St.join(Vn.homedir(),"Library","Application Support","Claude"):""}getDesktopSessionDirs(){let e=this.getDesktopConfigDir();return e?md.map(t=>St.join(e,t)):[]}getSessionDirForFile(e){let t=J(e);for(let s of this.getDesktopSessionDirs())if(t.startsWith(J(s)))return s;return this.getDesktopSessionDirs()[0]??""}isDesktopSessionFile(e){let t=J(e);return md.some(s=>t.includes(`/${s}/`))&&t.endsWith(".jsonl")}async getDesktopSessionFiles(){let e=[];for(let t of this.getDesktopSessionDirs()){try{await dt.promises.access(t)}catch{continue}try{await this.walkForJsonlFiles(t,e,0,8)}catch{}}return e}async walkForJsonlFiles(e,t,s,o){if(s>o)return;let i;try{i=await dt.promises.readdir(e,{withFileTypes:!0})}catch{return}for(let r of i)await this.processWalkEntry(r,e,t,s,o)}async processWalkEntry(e,t,s,o,i){let r=St.join(t,e.name);if(e.isDirectory()){if(e.name==="agent")return;await this.walkForJsonlFiles(r,s,o+1,i)}else if(e.name.endsWith(".jsonl")&&e.name!=="audit.jsonl")try{(await dt.promises.stat(r)).size>0&&s.push(r)}catch{}}async getDesktopLocalCoverage(e){let t=0,s=0,o=[];try{o=(await dt.promises.readdir(e,{withFileTypes:!0})).filter(i=>i.isDirectory()).map(i=>i.name)}catch{}for(let i of await this.getDesktopMetadataDirs()){let r;try{r=await dt.promises.readdir(i)}catch{continue}for(let a of r)!a.startsWith("local_")||!a.endsWith(".json")||(t++,await this.hasLocalTranscript(i,a,e,o)&&s++)}return{knownSessions:t,withTranscript:s,missingTranscript:t-s}}async getDesktopMetadataDirs(){let e=[];for(let t of this.getDesktopSessionDirs())for(let s of await this.readSubdirectories(t))e.push(...await this.readSubdirectories(s));return e}async readSubdirectories(e){try{return(await dt.promises.readdir(e,{withFileTypes:!0})).filter(t=>t.isDirectory()).map(t=>St.join(e,t.name))}catch{return[]}}async hasLocalTranscript(e,t,s,o){let i;try{let l=await dt.promises.readFile(St.join(e,t),"utf8"),d=JSON.parse(l);i=typeof d?.cliSessionId=="string"?d.cliSessionId:void 0}catch{}if(i&&!/[\\/]/.test(i))for(let l of o)try{return await dt.promises.access(St.join(s,l,`${i}.jsonl`)),!0}catch{}let r=St.join(e,t.replace(/\.json$/,"")),a=[];try{await this.walkForJsonlFiles(r,a,0,8)}catch{}return a.length>0}async readDesktopSessionEvents(e){try{let s=(await dt.promises.readFile(e,"utf8")).trim().split(`
|
|
46
|
+
`),o=[];for(let i of s)if(i.trim())try{o.push(JSON.parse(i))}catch{}return o}catch{return[]}}async getTokensFromDesktopSession(e){let t=await this.readDesktopSessionEvents(e),s=0,o=0,i=new Set;for(let r of t){let a=this.extractDesktopEventTokens(r,i);a&&(s+=a.inputTokens,o+=a.outputTokens)}return{tokens:s+o,thinkingTokens:0}}computeDesktopTokenCounts(e){let t=typeof e.cache_creation_input_tokens=="number"?e.cache_creation_input_tokens:0,s=typeof e.cache_creation?.ephemeral_1h_input_tokens=="number"?e.cache_creation.ephemeral_1h_input_tokens:0,o=typeof e.cache_read_input_tokens=="number"?e.cache_read_input_tokens:0,i=(typeof e.input_tokens=="number"?e.input_tokens:0)+t+o,r=typeof e.output_tokens=="number"?e.output_tokens:0;return{inputTokens:i,outputTokens:r,cacheCreation:t,cachedRead:o,cacheCreation1h:s}}extractDesktopEventTokens(e,t){if(e.type!=="assistant")return null;let s=e.message?.usage;if(!s)return null;let o=e.requestId;if(o){if(!e.message?.stop_reason||t.has(o))return null;t.add(o)}let{inputTokens:i,outputTokens:r}=this.computeDesktopTokenCounts(s);return{inputTokens:i,outputTokens:r}}async countDesktopSessionInteractions(e){let t=await this.readDesktopSessionEvents(e),s=0;for(let o of t)o.type==="user"&&!o.isSidechain&&o.message?.role==="user"&&ts(o)&&s++;return s}async getDesktopSessionModelUsage(e){let t=await this.readDesktopSessionEvents(e),s={},o=new Set;for(let i of t)this.processDesktopEventModelUsage(i,o,s);return s}processDesktopEventModelUsage(e,t,s){if(e.type!=="assistant")return;let o=e.message?.usage;if(!o||!this.shouldCountDesktopRequest(e,t))return;let i=Lt(e.message?.model||"unknown");O(i)||(s[i]||(s[i]={inputTokens:0,outputTokens:0,sessions:0}),this.applyDesktopTokenCounts(s[i],o))}shouldCountDesktopRequest(e,t){let s=e.requestId;return s?!e.message?.stop_reason||t.has(s)?!1:(t.add(s),!0):!0}applyDesktopTokenCounts(e,t){let{inputTokens:s,outputTokens:o,cacheCreation:i,cachedRead:r,cacheCreation1h:a}=this.computeDesktopTokenCounts(t);e.inputTokens+=s,e.outputTokens+=o,i>0&&(e.cacheCreationTokens=(e.cacheCreationTokens??0)+i),a>0&&(e.cacheCreation1hTokens=(e.cacheCreation1hTokens??0)+a),r>0&&(e.cachedReadTokens=(e.cachedReadTokens??0)+r)}getMetadataPathFromJsonl(e){let s=ue(e).split("/"),o=s.lastIndexOf(".claude");if(o<1)return null;let i=s[o-1];return i.startsWith("local_")?`${s.slice(0,o-1).join("/")}/${i}.json`:null}async getDesktopSessionMeta(e){let t=this.getMetadataPathFromJsonl(e);if(!t)return null;try{let s=await dt.promises.readFile(t,"utf8"),o=JSON.parse(s),i=o.createdAt?new Date(o.createdAt).toISOString():void 0,r=o.lastActivityAt?new Date(o.lastActivityAt).toISOString():void 0,a=Array.isArray(o.userSelectedFolders)&&o.userSelectedFolders.length>0?o.userSelectedFolders[0]:o.cwd;return{title:o.title||void 0,firstInteraction:i,lastInteraction:r,cwd:typeof a=="string"?a:void 0}}catch{return null}}};var Yn=S(require("fs")),jt=S(require("path")),nl=S(require("os"));var $i=class{getVibeHomeDir(){let e=process.env.VIBE_HOME;return e?jt.resolve(e.replace(/^~/,nl.homedir())):jt.join(nl.homedir(),".vibe")}getSessionLogDir(){return jt.join(this.getVibeHomeDir(),"logs","session")}isVibeSessionFile(e){let t=ue(e);return t.includes("/.vibe/logs/session/")&&t.endsWith("/meta.json")}getSessionDir(e){return jt.dirname(e)}async discoverSessions(){let e=this.getSessionLogDir();try{let t=await Yn.promises.readdir(e,{withFileTypes:!0}),s=[];for(let o of t){if(!o.isDirectory())continue;let i=jt.join(e,o.name,"meta.json");try{await Yn.promises.access(i),s.push(i)}catch{}}return s}catch{return[]}}async readSessionMeta(e){try{let t=await Yn.promises.readFile(e,"utf8");return JSON.parse(t)}catch{return null}}async readSessionMessages(e){let t=jt.join(this.getSessionDir(e),"messages.jsonl");try{let o=(await Yn.promises.readFile(t,"utf8")).trim().split(`
|
|
47
|
+
`),i=[];for(let r of o)if(r.trim())try{i.push(JSON.parse(r))}catch{}return i}catch{return[]}}async getTokensFromSession(e){let t=await this.readSessionMeta(e);if(!t?.stats)return{tokens:0,thinkingTokens:0};let s=typeof t.stats.session_prompt_tokens=="number"?t.stats.session_prompt_tokens:0,o=typeof t.stats.session_completion_tokens=="number"?t.stats.session_completion_tokens:0;return{tokens:s+o,thinkingTokens:0}}async countInteractions(e){return(await this.readSessionMessages(e)).filter(s=>s.role==="user"&&s.injected!==!0).length}async getModelUsage(e){let t=await this.readSessionMeta(e);if(!t)return{};let s=typeof t.stats?.session_prompt_tokens=="number"?t.stats.session_prompt_tokens:0,o=typeof t.stats?.session_completion_tokens=="number"?t.stats.session_completion_tokens:0;if(s+o===0)return{};let i=typeof t.stats?.session_cached_tokens=="number"?t.stats.session_cached_tokens:0,r=t.config?.active_model;return{[r&&!O(r)?r:"devstral"]:{inputTokens:s,outputTokens:o,...i>0?{cachedReadTokens:Math.max(0,Math.min(i,s))}:{},sessions:0}}}async getSessionMeta(e){let t=await this.readSessionMeta(e);return t?{title:t.title||void 0,firstInteraction:t.start_time||null,lastInteraction:t.end_time||null,model:t.config?.active_model||void 0}:{title:void 0,firstInteraction:null,lastInteraction:null,model:void 0}}async getSessionData(e){let t=await this.readSessionMeta(e);if(!t)return{tokens:0,interactions:0,modelUsage:{},timestamp:0};let{tokens:s}=await this.getTokensFromSession(e),o=await this.countInteractions(e),i=await this.getModelUsage(e),r={};for(let[l,d]of Object.entries(i))r[l]={...d,interactions:o};let a=t.start_time?new Date(t.start_time).getTime():0;return{tokens:s,interactions:o,modelUsage:r,timestamp:a}}};var mt=S(require("fs")),il=S(require("os")),Tt=S(require("path"));function K(n){return typeof n=="string"&&n.trim().length>0}function Zs(n){return typeof n=="number"&&Number.isFinite(n)?n:0}function en(n){if(!K(n))return null;let e=Date.parse(n);return Number.isFinite(e)?e:null}function ol(n,e){let t=en(n.timestamp),s=en(e.timestamp);return t!==null&&s!==null&&t!==s?t-s:t!==null&&s===null?-1:t===null&&s!==null?1:n.lineNumber-e.lineNumber}function Qn(n){if(!n)return n;let e=n.trim();return e==="gemini-3-flash-preview"?"gemini-3-flash":e}async function qy(n){let e=[];try{let t=await mt.promises.readdir(n,{withFileTypes:!0});for(let s of t){if(s.isDirectory()||!s.name.startsWith("session-")||!s.name.endsWith(".jsonl"))continue;let o=Tt.join(n,s.name);try{(await mt.promises.stat(o)).size>0&&e.push(o)}catch{}}}catch{}return e}async function zy(n,e){if(!e.isDirectory())return[];let t=Tt.join(n,e.name,"chats");try{await mt.promises.access(t)}catch{return[]}return qy(t)}function Wy(n){return{sessionId:n.sessionId,projectHash:K(n.projectHash)?n.projectHash:void 0,startTime:K(n.startTime)?n.startTime:void 0,lastUpdated:K(n.lastUpdated)?n.lastUpdated:void 0,kind:K(n.kind)?n.kind:void 0}}var Hi=class{_projectsIndexCache=null;_projectsIndexInflight=new Map;getGeminiDataDir(){return Tt.join(il.homedir(),".gemini")}getGeminiTmpDir(){return Tt.join(this.getGeminiDataDir(),"tmp")}getGeminiProjectsPath(){return Tt.join(this.getGeminiDataDir(),"projects.json")}getGeminiLogsPath(){return Tt.join(this.getGeminiDataDir(),"logs.json")}isGeminiCliSessionFile(e){let t=J(e),s=J(this.getGeminiTmpDir());return t.startsWith(s)&&t.includes("/chats/session-")&&t.endsWith(".jsonl")}async collectSessionFilesFromChatDir(e){let t=[];try{let s=await mt.promises.readdir(e,{withFileTypes:!0});for(let o of s){if(o.isDirectory()||!o.name.startsWith("session-")||!o.name.endsWith(".jsonl"))continue;let i=Tt.join(e,o.name);try{(await mt.promises.stat(i)).size>0&&t.push(i)}catch{}}}catch{}return t}async getGeminiCliSessionFiles(){let e=this.getGeminiTmpDir();try{await mt.promises.access(e)}catch{return[]}try{let t=await mt.promises.readdir(e,{withFileTypes:!0});return(await Promise.all(t.map(o=>zy(e,o)))).flat()}catch{return[]}}parseGeminiSessionHeader(e){return{sessionId:e.sessionId,projectHash:K(e.projectHash)?e.projectHash:void 0,startTime:K(e.startTime)?e.startTime:void 0,lastUpdated:K(e.lastUpdated)?e.lastUpdated:void 0,kind:K(e.kind)?e.kind:void 0}}parseGeminiUserRecord(e,t,s){let o=K(e.id)?e.id:`__user_${t}`;return s.has(o)?null:(s.add(o),{id:K(e.id)?e.id:void 0,timestamp:K(e.timestamp)?e.timestamp:void 0,type:"user",content:e.content,lineNumber:t})}parseGeminiAssistantRecord(e,t,s){return{id:K(e.id)?e.id:`__assistant_${s.value++}_${t}`,record:{id:K(e.id)?e.id:void 0,timestamp:K(e.timestamp)?e.timestamp:void 0,type:"gemini",content:e.content,thoughts:Array.isArray(e.thoughts)?e.thoughts:[],tokens:e.tokens,model:K(e.model)?e.model:void 0,toolCalls:Array.isArray(e.toolCalls)?e.toolCalls:[],lineNumber:t}}}processOneParsedLine(e,t,s){let o;try{o=JSON.parse(e)}catch{return}if(!s.header&&K(o?.sessionId)){s.header=this.parseGeminiSessionHeader(o);return}if(K(o?.$set?.lastUpdated)){s.latestHeaderUpdate=o.$set.lastUpdated;return}if(o?.type==="user"){let i=this.parseGeminiUserRecord(o,t,s.seenUserIds);i&&s.userRecords.push(i);return}if(o?.type==="gemini"){let{id:i,record:r}=this.parseGeminiAssistantRecord(o,t,s.counter);s.assistantRecords.set(i,r)}}async readGeminiCliSession(e){let t={header:null,latestHeaderUpdate:void 0,anonymousAssistantCounter:0,seenUserIds:new Set,userRecords:[],assistantRecords:new Map};for(let[r,a]of(await this.readJsonlLines(e)).entries()){let l;try{l=JSON.parse(a)}catch{continue}this._rgsDispatchLine(l,r,t)}t.header&&t.latestHeaderUpdate&&(t.header.lastUpdated=t.latestHeaderUpdate),t.userRecords.sort(ol);let s=Array.from(t.assistantRecords.values()).sort(ol),o=this.getProjectBucketFromPath(e)||t.header?.projectHash,i=await this.resolveWorkspacePath(o,t.header?.projectHash);return{header:t.header,projectBucket:o,workspacePath:i??o,userRecords:t.userRecords,assistantRecords:s}}_rgsDispatchLine(e,t,s){if(!s.header&&K(e?.sessionId)){s.header=Wy(e);return}if(K(e?.$set?.lastUpdated)){s.latestHeaderUpdate=e.$set.lastUpdated;return}if(e?.type==="user"){this._rgsHandleUserRecord(e,t,s.seenUserIds,s.userRecords);return}e?.type==="gemini"&&(s.anonymousAssistantCounter=this._rgsHandleGeminiRecord(e,t,s.anonymousAssistantCounter,s.assistantRecords))}_rgsHandleUserRecord(e,t,s,o){let i=K(e.id)?e.id:`__user_${t}`;s.has(i)||(s.add(i),o.push({id:K(e.id)?e.id:void 0,timestamp:K(e.timestamp)?e.timestamp:void 0,type:"user",content:e.content,lineNumber:t}))}_rgsHandleGeminiRecord(e,t,s,o){let i=K(e.id)?e.id:`__assistant_${s}_${t}`;return o.set(i,{id:K(e.id)?e.id:void 0,timestamp:K(e.timestamp)?e.timestamp:void 0,type:"gemini",content:e.content,thoughts:Array.isArray(e.thoughts)?e.thoughts:[],tokens:e.tokens,model:K(e.model)?e.model:void 0,toolCalls:Array.isArray(e.toolCalls)?e.toolCalls:[],lineNumber:t}),K(e.id)?s:s+1}async getTokensFromGeminiCliSession(e){let t=await this.readGeminiCliSession(e),s=0,o=0;for(let i of t.assistantRecords){let r=this.getTokenBreakdown(i.tokens);s+=r.total,o+=r.thinking}return{tokens:s,thinkingTokens:o}}async countGeminiCliInteractions(e){return(await this.readGeminiCliSession(e)).userRecords.length}async getGeminiCliModelUsage(e){let t=await this.readGeminiCliSession(e),s={};for(let o of t.assistantRecords){let i=Qn(o.model||"unknown");if(O(i))continue;let r=this.getTokenBreakdown(o.tokens);s[i]||(s[i]={inputTokens:0,outputTokens:0,sessions:0}),s[i].inputTokens+=r.input,s[i].outputTokens+=r.output+r.thinking+r.tool,r.cached>0&&(s[i].cachedReadTokens=(s[i].cachedReadTokens??0)+r.cached),r.thinking>0&&(s[i].thinkingTokens=(s[i].thinkingTokens??0)+r.thinking)}return s}async getGeminiCliSessionMeta(e){let t=await this.readGeminiCliSession(e),s=[],o=i=>{let r=en(i);r!==null&&s.push(r)};o(t.header?.startTime),o(t.header?.lastUpdated);for(let i of t.userRecords)o(i.timestamp);for(let i of t.assistantRecords)o(i.timestamp);return s.sort((i,r)=>i-r),{title:this.deriveSessionTitle(t),firstInteraction:s.length>0?new Date(s[0]).toISOString():null,lastInteraction:s.length>0?new Date(s[s.length-1]).toISOString():null,workspacePath:t.workspacePath}}processAssistantGroup(e){let t=[],s=[],o=null,i=0,r=0,a=0,l=0,d=0,p=0;for(let g of e.assistants){let h=this.getTokenBreakdown(g.tokens);p+=h.total,i+=h.input,r+=h.output,a+=h.thinking,l+=h.tool,d+=h.cached;let y=K(g.content)?g.content.trim():"";y.length>0&&t.push(y);for(let b of this.toDisplayToolCalls(g.toolCalls))s.push(b);K(g.model)&&(o=Qn(g.model))}return{assistantContents:t,toolCalls:s,model:o,inputTokens:i,outputTokens:r,thinkingTokens:a,toolTokens:l,cachedTokens:d,totalTokens:p}}async buildGeminiCliTurns(e){let t=await this.readGeminiCliSession(e),s=this.groupConversationTurns(t),o=[],i=0;for(let r of s){let a={assistantContents:[],toolCalls:[],model:null,inputTokens:0,outputTokens:0,thinkingTokens:0,toolTokens:0,cachedTokens:0};for(let P of r.assistants)i+=this._bgtAggregateAssistant(P,a);let{assistantContents:l,toolCalls:d,model:p,inputTokens:g,outputTokens:h,thinkingTokens:y,toolTokens:b,cachedTokens:T}=a,E=g>0||h>0||y>0||b>0?{promptTokens:g,completionTokens:h+y+b,promptTokenDetails:this.buildPromptTokenDetails(g,T)}:void 0;o.push({turnNumber:o.length+1,timestamp:this.pickTurnTimestamp(r.user?.timestamp,r.assistants),mode:"cli",userMessage:this.extractUserText(r.user?.content),assistantResponse:l.join(`
|
|
48
48
|
|
|
49
|
-
`),model:p,toolCalls:d,contextReferences:G(),mcpTools:[],inputTokensEstimate:g,outputTokensEstimate:h+b,thinkingTokensEstimate:y,actualUsage:E})}return{turns:o,actualTokens:i}}_bgtAggregateAssistant(e,t){let s=this.getTokenBreakdown(e.tokens);t.inputTokens+=s.input,t.outputTokens+=s.output,t.thinkingTokens+=s.thinking,t.toolTokens+=s.tool,t.cachedTokens+=s.cached;let o=K(e.content)?e.content.trim():"";o.length>0&&t.assistantContents.push(o);for(let i of this.toDisplayToolCalls(e.toolCalls))t.toolCalls.push(i);return K(e.model)&&(t.model=
|
|
49
|
+
`),model:p,toolCalls:d,contextReferences:G(),mcpTools:[],inputTokensEstimate:g,outputTokensEstimate:h+b,thinkingTokensEstimate:y,actualUsage:E})}return{turns:o,actualTokens:i}}_bgtAggregateAssistant(e,t){let s=this.getTokenBreakdown(e.tokens);t.inputTokens+=s.input,t.outputTokens+=s.output,t.thinkingTokens+=s.thinking,t.toolTokens+=s.tool,t.cachedTokens+=s.cached;let o=K(e.content)?e.content.trim():"";o.length>0&&t.assistantContents.push(o);for(let i of this.toDisplayToolCalls(e.toolCalls))t.toolCalls.push(i);return K(e.model)&&(t.model=Qn(e.model)),s.total}async getGeminiCliDailyFractions(e){let t=await this.readGeminiCliSession(e),s=t.userRecords.map(a=>this.toLocalDayKey(a.timestamp)).filter(a=>!!a);if(s.length===0)for(let a of t.assistantRecords){let l=this.toLocalDayKey(a.timestamp);l&&s.push(l)}if(s.length===0)return{[this.toLocalDayKey(t.header?.startTime)??this.toLocalDayKey(t.header?.lastUpdated)??N(new Date)]:1};let o=new Map;for(let a of s)o.set(a,(o.get(a)??0)+1);let i=s.length,r={};for(let[a,l]of o.entries())r[a]=l/i;return r}async readJsonlLines(e){let t=await Pe(e,"geminicli");return t===void 0?[]:t.split(/\r?\n/).map(s=>s.trim()).filter(s=>s.length>0)}getProjectBucketFromPath(e){let s=ue(e).split("/").filter(r=>r.length>0),o=s.lastIndexOf("chats");if(o>0)return s[o-1];let i=s.lastIndexOf("tmp");if(i>=0&&i+1<s.length)return s[i+1]}async resolveWorkspacePath(e,t){let s=await this.readGeminiProjectsIndex();if(e&&s.has(e))return s.get(e);if(t&&s.has(t))return s.get(t)}async readGeminiProjectsIndex(){let e=this.getGeminiProjectsPath(),t;try{t=await mt.promises.stat(e)}catch{return new Map}let s=this._projectsIndexCache;if(s&&s.mtimeMs===t.mtimeMs&&s.size===t.size)return s.map;let o=`${t.mtimeMs}:${t.size}`,i=this._projectsIndexInflight.get(o);if(i)return i;let r=(async()=>{let a=new Map;try{if(t.size>_i)return console.debug(`[geminicli] Skipping oversized projects index (${t.size} bytes): ${e}`),a;let d=JSON.parse(await mt.promises.readFile(e,"utf8"));if(Array.isArray(d))for(let p of d)this.addProjectMapping(a,void 0,p);else if(d&&typeof d=="object")for(let[p,g]of Object.entries(d))this.addProjectMapping(a,p,g)}catch{}let l=await mt.promises.stat(e).catch(()=>null);return l&&l.mtimeMs===t.mtimeMs&&l.size===t.size&&(this._projectsIndexCache={map:a,mtimeMs:t.mtimeMs,size:t.size}),a})();this._projectsIndexInflight.set(o,r);try{return await r}finally{this._projectsIndexInflight.get(o)===r&&this._projectsIndexInflight.delete(o)}}applyStringValueMapping(e,t,s){t&&this.looksLikePath(t)&&!this.looksLikePath(s)?e.set(s,this.normalizeWorkspacePath(t)):t&&!this.looksLikePath(t)&&this.looksLikePath(s)&&e.set(t,this.normalizeWorkspacePath(s))}applyObjectValueMapping(e,t,s){let o=this.pickString(s,["projectHash","projectBucket","bucket","slug","name","id"]),i=this.pickString(s,["workspacePath","path","directory","cwd","rootPath","repoPath","workspace","root"]);o&&i&&this.looksLikePath(i)&&e.set(o,this.normalizeWorkspacePath(i)),t&&this.looksLikePath(t)&&o&&e.set(o,this.normalizeWorkspacePath(t)),t&&!this.looksLikePath(t)&&i&&this.looksLikePath(i)&&e.set(t,this.normalizeWorkspacePath(i))}addProjectMapping(e,t,s){if(typeof s=="string"){this.applyStringValueMapping(e,t,s);return}!s||typeof s!="object"||Array.isArray(s)||this.applyObjectValueMapping(e,t,s)}pickString(e,t){for(let s of t)if(K(e[s]))return e[s].trim()}looksLikePath(e){let t=ue(e);return/^[a-zA-Z]:/.test(e)||t.startsWith("/")||t.startsWith("~")||t.startsWith("file://")}normalizeWorkspacePath(e){let t=e.trim().replace(/^~(?=[/\\]|$)/,il.homedir());if(/^file:\/\//i.test(t))try{t=decodeURIComponent(t.replace(/^file:\/\/\/?/,"")),process.platform==="win32"&&/^\/[a-zA-Z]:/.test(t)&&(t=t.slice(1))}catch{}return Tt.normalize(t)}getTokenBreakdown(e){let t=Zs(e?.input),s=Zs(e?.output),o=Zs(e?.cached),i=Zs(e?.thoughts),r=Zs(e?.tool),a=Zs(e?.total)||t+s+i+r;return{input:t,output:s,cached:o,thinking:i,tool:r,total:a}}deriveSessionTitle(e){for(let t of e.userRecords){let s=this.extractUserText(t.content).split(/\r?\n/).map(o=>o.trim()).find(o=>o.length>0);if(s)return s.length>80?`${s.slice(0,77)}...`:s}return e.projectBucket}extractUserText(e){if(K(e))return e.trim();if(!Array.isArray(e))return"";let t=[];for(let s of e)s&&typeof s=="object"&&K(s.text)&&t.push(s.text.trim());return t.join(`
|
|
50
50
|
|
|
51
|
-
`).trim()}toDisplayToolCalls(e){if(!Array.isArray(e))return[];let t=[];for(let s of e){let o=K(s?.name)?s.name.trim():"",r=(K(s?.displayName)?s.displayName.trim():"")||o;r&&t.push({toolName:r,arguments:s.args!==void 0?this.safeStringify(s.args):void 0,result:K(s.resultDisplay)?s.resultDisplay:s.result!==void 0?this.safeStringify(s.result):void 0})}return t}safeStringify(e){if(typeof e=="string")return e;try{return JSON.stringify(e,null,2)}catch{return String(e)}}buildPromptTokenDetails(e,t){if(e<=0)return;let s=[],o=Math.min(t,e);o>0&&s.push({category:"cached",label:"Cache reads",percentageOfPrompt:o/e*100});let i=e-o;return i>0&&s.push({category:"prompt",label:"Prompt tokens",percentageOfPrompt:i/e*100}),s.length>0?s:void 0}groupConversationTurns(e){let t=[...e.userRecords.map(r=>({kind:"user",record:r})),...e.assistantRecords.map(r=>({kind:"assistant",record:r}))].sort((r,a)=>
|
|
51
|
+
`).trim()}toDisplayToolCalls(e){if(!Array.isArray(e))return[];let t=[];for(let s of e){let o=K(s?.name)?s.name.trim():"",r=(K(s?.displayName)?s.displayName.trim():"")||o;r&&t.push({toolName:r,arguments:s.args!==void 0?this.safeStringify(s.args):void 0,result:K(s.resultDisplay)?s.resultDisplay:s.result!==void 0?this.safeStringify(s.result):void 0})}return t}safeStringify(e){if(typeof e=="string")return e;try{return JSON.stringify(e,null,2)}catch{return String(e)}}buildPromptTokenDetails(e,t){if(e<=0)return;let s=[],o=Math.min(t,e);o>0&&s.push({category:"cached",label:"Cache reads",percentageOfPrompt:o/e*100});let i=e-o;return i>0&&s.push({category:"prompt",label:"Prompt tokens",percentageOfPrompt:i/e*100}),s.length>0?s:void 0}groupConversationTurns(e){let t=[...e.userRecords.map(r=>({kind:"user",record:r})),...e.assistantRecords.map(r=>({kind:"assistant",record:r}))].sort((r,a)=>ol(r.record,a.record)),s=[],o=null,i=[];for(let r of t)r.kind==="user"?((o||i.length>0)&&(s.push({user:o,assistants:i}),i=[]),o=r.record):i.push(r.record);return(o||i.length>0)&&s.push({user:o,assistants:i}),s}pickTurnTimestamp(e,t){let s=en(e);if(s!==null)return new Date(s).toISOString();for(let o of t){let i=en(o.timestamp);if(i!==null)return new Date(i).toISOString()}return null}toLocalDayKey(e){let t=en(e);return t!==null?N(new Date(t)):null}};var al=S(require("fs")),pd=S(require("os")),wt=S(require("path"));function rl(n){let e=n.match(/<USER_REQUEST>([\s\S]*?)<\/USER_REQUEST>/);if(e)return e[1].trim();let t=n.indexOf("<ADDITIONAL_METADATA>");return t!==-1?n.substring(0,t).trim():n.trim()}function $y(n,e){n.content&&n.content.trim()&&(e.assistantResponse+=(e.assistantResponse?`
|
|
52
52
|
|
|
53
53
|
`:"")+n.content.trim()),n.thinking&&n.thinking.trim()&&(e.thinkingContent+=(e.thinkingContent?`
|
|
54
54
|
|
|
55
|
-
`:"")+n.thinking.trim());for(let t of n.tool_calls??[])t.name&&e.toolCalls.push({toolName:t.name,arguments:t.args?JSON.stringify(t.args):void 0})}function
|
|
56
|
-
`).filter(d=>d.trim().length>0);for(let d of a){let p;try{p=JSON.parse(d)}catch{continue}!p||typeof p.type!="string"||(i.push(p),p.type==="USER_INPUT"&&p.source==="USER_EXPLICIT"?s.push(p):p.source==="MODEL"&&o.push(p))}let
|
|
57
|
-
`)){let o=s.trim();if(o)try{t.push(JSON.parse(o))}catch{}}return t}async readSession(e){return(await this.readLines(e)).find(s=>s.type==="session")??null}async getParentSessionPath(e){let s=(await this.readSession(e))?.parentSession;return typeof s=="string"&&s.length>0?s:null}getParentSessionPathFromFilePath(e){if(et.basename(e)!=="session.jsonl")return null;let t=et.dirname(et.dirname(et.dirname(e)))+".jsonl";return this.isPiSessionFile(t)?t:null}async getMessages(e){return(await this.readLines(e)).filter(s=>s.type==="message")}async getTokens(e){let t=await this.getMessages(e),s=0;for(let o of t){if(o.message?.role!=="assistant")continue;let i=o.message?.usage;i&&typeof i.totalTokens=="number"&&(s+=i.totalTokens)}return{tokens:s,thinkingTokens:0}}async countInteractions(e){return(await this.getMessages(e)).filter(s=>s.message?.role==="user").length}async getModelUsage(e){let t=await this.getMessages(e),s={};for(let o of t)this.accumulateModelUsage(o,s);return s}accumulateModelUsage(e,t){let s=e.message;if(!s||s.role!=="assistant")return;let o=s.usage;if(!o)return;let i=typeof o.input=="number"?o.input:0,r=typeof o.output=="number"?o.output:0;if(i+r===0)return;let a=s.model||"unknown";O(a)||(t[a]||(t[a]={inputTokens:0,outputTokens:0,sessions:0}),t[a].inputTokens+=i,t[a].outputTokens+=r,this.accumulateCacheTokens(o,t[a]))}accumulateCacheTokens(e,t){let s=typeof e.cacheRead=="number"?e.cacheRead:0,o=typeof e.cacheWrite=="number"?e.cacheWrite:0;s>0&&(t.cachedReadTokens=(t.cachedReadTokens??0)+s),o>0&&(t.cacheCreationTokens=(t.cacheCreationTokens??0)+o)}async getSessionMeta(e){let t=await this.readLines(e);if(t.length===0)return{title:void 0,firstInteraction:null,lastInteraction:null};let s=t.find(c=>c.type==="session"),o=s?.cwd,i=o?et.basename(o):void 0,r=s?.timestamp??null,a=this.findLastTimestamp(t);return{title:i,firstInteraction:r,lastInteraction:a,workspacePath:o}}findLastTimestamp(e){for(let t=e.length-1;t>=0;t--)if(e[t].timestamp)return e[t].timestamp;return null}async getSessionData(e){let[{tokens:t},s,o,i]=await Promise.all([this.getTokens(e),this.countInteractions(e),this.getModelUsage(e),this.getSessionMeta(e)]),r=i.firstInteraction?new Date(i.firstInteraction).getTime():0,a=this.buildModelUsageWithInteractions(o,s);return{tokens:t,interactions:s,modelUsage:a,timestamp:r}}buildModelUsageWithInteractions(e,t){let s=Object.values(e).reduce((i,r)=>i+r.inputTokens+r.outputTokens,0),o={};for(let[i,r]of Object.entries(e)){let a=r.inputTokens+r.outputTokens,c=s>0?a/s:0;o[i]={inputTokens:r.inputTokens,outputTokens:r.outputTokens,sessions:r.sessions,interactions:Math.round(t*c)}}return o}};var Ft=S(require("fs")),Tt=S(require("path")),Xs=S(require("os")),ed=S(Pt());var el={columns:[],values:[]},Hi=class n{static COMPOSER_CACHE_MAX_ENTRIES=2e3;static READ_ONLY_RETRY_COOLDOWN_MS=5*6e4;_sqlJsModule=null;_sqlJsInitPromise=null;_nodeSqliteModule;_readOnlyUnsupportedDbs=new Map;_composerCache=new Map;_composerInflight=new Map;_sqlJsDbCache=new Map;_sqlJsDbInflight=new Map;_pendingTransientSqlJsDb=new Map;extensionUri;constructor(e){this.extensionUri=e}dispose(){this._composerCache.clear(),this._composerInflight.clear(),this._readOnlyUnsupportedDbs.clear(),this._sqlJsInitPromise=null;for(let e of this._sqlJsDbCache.values())try{e.db.close()}catch{}this._sqlJsDbCache.clear(),this._sqlJsDbInflight.clear();for(let e of this._pendingTransientSqlJsDb.values())try{e.db.close()}catch{}this._pendingTransientSqlJsDb.clear()}getCursorGlobalStorageDir(){let e=Xs.platform();if(e==="win32"){let s=process.env.APPDATA||Tt.join(Xs.homedir(),"AppData","Roaming");return Tt.join(s,"Cursor","User","globalStorage")}if(e==="darwin")return Tt.join(Xs.homedir(),"Library","Application Support","Cursor","User","globalStorage");let t=process.env.XDG_CONFIG_HOME||Tt.join(Xs.homedir(),".config");return Tt.join(t,"Cursor","User","globalStorage")}getCursorDbPath(){return Tt.join(this.getCursorGlobalStorageDir(),"state.vscdb")}isCursorSessionFile(e){return J(e).includes("/cursor/user/globalstorage/state.vscdb#")}getDbPathFromVirtual(e){let t=e.indexOf("state.vscdb#");return t===-1?e:e.substring(0,t+11)}getComposerIdFromVirtual(e){let t=e.indexOf("state.vscdb#");return t===-1?null:e.substring(t+12)}async initSqlJs(){return this._sqlJsModule?this._sqlJsModule:(this._sqlJsInitPromise||(this._sqlJsInitPromise=(async()=>{let e=Tt.join(__dirname,"sql-wasm.wasm"),t;Ft.existsSync(e)&&(t=Ft.readFileSync(e));let s=await(0,ed.default)(t?{wasmBinary:t.buffer}:void 0);return this._sqlJsModule=s,s})().catch(e=>{throw this._sqlJsInitPromise=null,e})),this._sqlJsInitPromise)}statWal(e){try{let t=Ft.statSync(e+"-wal");return{mtimeMs:t.mtimeMs,size:t.size}}catch{return{mtimeMs:0,size:0}}}statDb(e){try{return Ft.statSync(e)}catch{return null}}getNodeSqliteModule(){if(this._nodeSqliteModule===void 0)try{this._nodeSqliteModule=require("node:sqlite")}catch{this._nodeSqliteModule=null}return this._nodeSqliteModule}isReadOnlyDemoted(e){let t=this._readOnlyUnsupportedDbs.get(e);return t===void 0?!1:Date.now()-t<n.READ_ONLY_RETRY_COOLDOWN_MS?!0:(this._readOnlyUnsupportedDbs.delete(e),!1)}queryReadOnly(e,t,s){let o=this.getNodeSqliteModule();if(!o||this.isReadOnlyDemoted(e))return null;let i;try{i=new o.DatabaseSync(e,{readOnly:!0});let r=i.prepare(t).all(...s);if(r.length===0)return el;let a=Object.keys(r[0]),c=r.map(d=>a.map(p=>d[p]));return{columns:a,values:c}}catch{return this._readOnlyUnsupportedDbs.set(e,Date.now()),null}finally{if(i)try{i.close()}catch{}}}evictSqlJsDb(e){let t=this._sqlJsDbCache.get(e);if(t){try{t.db.close()}catch{}this._sqlJsDbCache.delete(e)}}releasePendingTransientSqlJsDb(e){let t=this._pendingTransientSqlJsDb.get(e);if(t){try{t.db.close()}catch{}this._pendingTransientSqlJsDb.delete(e)}}sqlJsEntryMatchesFingerprint(e,t){return!!e&&e.mtimeMs===t.mtimeMs&&e.size===t.size&&e.walMtimeMs===t.walMtimeMs&&e.walSize===t.walSize}async getSqlJsDb(e){let t=this.statDb(e);if(!t)return this.evictSqlJsDb(e),null;let s=this.statWal(e),o=this._sqlJsDbCache.get(e);if(this.sqlJsEntryMatchesFingerprint(o,{mtimeMs:t.mtimeMs,size:t.size,walMtimeMs:s.mtimeMs,walSize:s.size}))return o;let i=this._sqlJsDbInflight.get(e);if(i)return i;let r=(async()=>{try{let a=await this.initSqlJs(),c=await qs(e),d={mtimeMs:c.dbMtimeMs,size:c.dbSize,walMtimeMs:c.walMtimeMs,walSize:c.walSize},p=this._sqlJsDbCache.get(e);if(this.sqlJsEntryMatchesFingerprint(p,d))return p;if(!c.walIncluded){let y=this._pendingTransientSqlJsDb.get(e);if(this.sqlJsEntryMatchesFingerprint(y,d))return y}let h={db:new a.Database(c.buffer),...d};return c.walIncluded?(this.evictSqlJsDb(e),this.releasePendingTransientSqlJsDb(e),this._sqlJsDbCache.set(e,h),h):(this.releasePendingTransientSqlJsDb(e),this._pendingTransientSqlJsDb.set(e,h),h)}catch{return null}})();this._sqlJsDbInflight.set(e,r);try{return await r}finally{this._sqlJsDbInflight.get(e)===r&&this._sqlJsDbInflight.delete(e)}}async queryViaSqlJs(e,t,s){let o=await this.getSqlJsDb(e);if(!o)return null;try{let i=o.db.exec(t,s);return{result:i.length===0?el:i[0],fingerprint:{mtimeMs:o.mtimeMs,size:o.size,walMtimeMs:o.walMtimeMs,walSize:o.walSize}}}catch{return this.evictSqlJsDb(e),null}}async queryAll(e,t,s=[]){if(!this.statDb(e))return{result:el,fingerprint:null};let o=this.queryReadOnly(e,t,s);return o?{result:o,fingerprint:null}:this.queryViaSqlJs(e,t,s)}evictComposerCacheIfOverCapacity(){for(;this._composerCache.size>n.COMPOSER_CACHE_MAX_ENTRIES;){let e=this._composerCache.keys().next().value;if(e===void 0)break;this._composerCache.delete(e)}}async readComposerData(e){let t=this.getDbPathFromVirtual(e),s=this.getComposerIdFromVirtual(e);if(!s)return null;let o=this.statDb(t),i=this.statWal(t);if(o){let c=this._composerCache.get(e);if(c&&c.mtimeMs===o.mtimeMs&&c.size===o.size&&c.walMtimeMs===i.mtimeMs&&c.walSize===i.size)return c.data}let r=this._composerInflight.get(e);if(r)return r;let a=(async()=>{let c=await this.queryComposerData(t,s);if(c&&o){let d=c.fingerprint??{mtimeMs:o.mtimeMs,size:o.size,walMtimeMs:i.mtimeMs,walSize:i.size};this._composerCache.set(e,{data:c.data,mtimeMs:d.mtimeMs,size:d.size,walMtimeMs:d.walMtimeMs,walSize:d.walSize}),this.evictComposerCacheIfOverCapacity()}return c?c.data:null})();this._composerInflight.set(e,a);try{return await a}finally{this._composerInflight.get(e)===a&&this._composerInflight.delete(e)}}async queryComposerData(e,t){let s=await this.queryAll(e,"SELECT value FROM cursorDiskKV WHERE key = ?",[`composerData:${t}`]);if(!s)return null;if(s.result.values.length===0)return{data:null,fingerprint:s.fingerprint};try{let o=s.result.values[0][0];return{data:JSON.parse(o),fingerprint:s.fingerprint}}catch{return null}}async readBubbles(e,t){if(t.length===0)return new Map;let s=this.getDbPathFromVirtual(e),o=this.getComposerIdFromVirtual(e);if(!o)return new Map;let i=new Map;try{let r=t.map(()=>"?").join(","),a=t.map(d=>`bubbleId:${o}:${d}`),c=await this.queryAll(s,`SELECT key, value FROM cursorDiskKV WHERE key IN (${r})`,a);if(!c)return i;for(let d of c.result.values){let p=d[0],g=d[1],h=p.replace(`bubbleId:${o}:`,"");try{let y=JSON.parse(g);i.set(h,y)}catch{}}}catch{}return i}async discoverSessions(){let e=this.getCursorDbPath();try{let t=await this.queryAll(e,"SELECT key FROM cursorDiskKV WHERE key LIKE 'composerData:%' AND (length(key) - length(replace(key, ':', ''))) = 1");return t?t.result.values.map(s=>{let o=s[0].replace("composerData:","");return`${e}#${o}`}):[]}catch{return[]}}async statSessionFile(e){let t=this.getDbPathFromVirtual(e);return Ft.promises.stat(t)}async getTokens(e){let t=await this.readComposerData(e);return t?{tokens:typeof t.contextTokensUsed=="number"?t.contextTokensUsed:0,thinkingTokens:0}:{tokens:0,thinkingTokens:0}}async countInteractions(e){let t=await this.readComposerData(e);return t?.fullConversationHeadersOnly?t.fullConversationHeadersOnly.filter(s=>s.type===1).length:0}async getModelUsage(e){let t=await this.readComposerData(e);if(!t)return{};let s=typeof t.contextTokensUsed=="number"?t.contextTokensUsed:0;return s===0?{}:{[t.modelConfig?.modelName||"unknown"]:{inputTokens:s,outputTokens:0,sessions:0}}}async getSessionMeta(e){let t=await this.readComposerData(e);if(!t)return{title:void 0,firstInteraction:null,lastInteraction:null,workspacePath:void 0};let s=t.name&&t.name.trim()?t.name.trim():void 0,o=typeof t.createdAt=="number"?t.createdAt:null,i=typeof t.lastUpdatedAt=="number"?t.lastUpdatedAt:null,r=o?new Date(o).toISOString():null,a=i?new Date(i):o?new Date(o):null,c=this.extractWorkspacePath(t);return{title:s,firstInteraction:r,lastInteraction:a?a.toISOString():null,workspacePath:c}}extractWorkspacePath(e){return e.trackedGitRepos&&e.trackedGitRepos.length>0?e.trackedGitRepos[0].repoPath:this.extractWorkspaceFromFileStates(e.originalFileStates)}extractWorkspaceFromFileStates(e){if(!e)return;let t=Object.keys(e);if(t.length!==0)try{return decodeURIComponent(t[0].replace("file:///","").replace("file://","")).replace(/^\/([A-Za-z]):/,"$1:").split(/[/\\]/).slice(0,-1).join(Tt.sep)}catch{return}}async getSessionData(e){let[{tokens:t},s,o,i]=await Promise.all([this.getTokens(e),this.countInteractions(e),this.getModelUsage(e),this.getSessionMeta(e)]),r=i.firstInteraction?new Date(i.firstInteraction).getTime():Date.now();return{tokens:t,interactions:s,modelUsage:o,timestamp:r}}};var Xt=S(require("fs")),Ce=S(require("path")),Zs=S(require("os")),td=S(require("crypto"));var ky=new Set(["intentClassification","model","say"]),Ji=class{getKiroAppDataDir(){let e=Zs.platform();if(e==="win32"){let t=process.env.APPDATA||Ce.join(Zs.homedir(),"AppData","Roaming");return Ce.join(t,"Kiro")}return e==="darwin"?Ce.join(Zs.homedir(),"Library","Application Support","Kiro"):Ce.join(Zs.homedir(),".config","Kiro")}getKiroAgentDir(){return Ce.join(this.getKiroAppDataDir(),"User","globalStorage","kiro.kiroagent")}getKiroWorkspaceSessionsDir(){return Ce.join(this.getKiroAgentDir(),"workspace-sessions")}isKiroSessionFile(e){let t=J(e);return t.includes("/kiro.kiroagent/workspace-sessions/")&&t.endsWith(".json")&&!t.endsWith("/sessions.json")}async getKiroSessionFiles(){let e=this.getKiroWorkspaceSessionsDir(),t;try{t=await Xt.promises.readdir(e,{withFileTypes:!0})}catch{return[]}let s=[];for(let o of t){if(!o.isDirectory())continue;let i=Ce.join(e,o.name);try{let r=await Xt.promises.readdir(i);for(let a of r)a.endsWith(".json")&&a!=="sessions.json"&&s.push(Ce.join(i,a))}catch{}}return s}async readSessionFile(e){try{let t=await Xt.promises.readFile(e,"utf8");return JSON.parse(t)}catch{return null}}_executionRecordCache=new Map;getWorkspaceExecutionDir(e){let t=td.createHash("sha256").update(e).digest("hex").slice(0,32);return Ce.join(this.getKiroAgentDir(),t)}async readExecutionRecordsForSession(e){let t=Ce.basename(e,".json"),s=this.decodeWorkspaceDirName(Ce.basename(Ce.dirname(e)));if(!s)return[];let o=this.getWorkspaceExecutionDir(s),i=await this.collectExecutionFiles(o,0),r=[];for(let a of i){let c=await this.readExecutionFile(a);c?.executionId&&c?.chatSessionId===t&&r.push(this.toExecutionRecord(c))}return r.sort((a,c)=>(a.startTimeMs??0)-(c.startTimeMs??0)),r}async collectExecutionFiles(e,t){if(t>3)return[];let s;try{s=await Xt.promises.readdir(e,{withFileTypes:!0})}catch{return[]}let o=[];for(let i of s){if(!/^[0-9a-f]{32}$/.test(i.name))continue;let r=Ce.join(e,i.name);i.isDirectory()?o.push(...await this.collectExecutionFiles(r,t+1)):o.push(r)}return o}async readExecutionFile(e){let t;try{t=await Xt.promises.open(e,"r")}catch{return null}try{let s=await t.stat(),o=this._executionRecordCache.get(e);if(o&&o.mtimeMs===s.mtimeMs)return o.parsed;let i=null;try{i=JSON.parse(await t.readFile("utf8"))}catch{i=null}return this._executionRecordCache.set(e,{mtimeMs:s.mtimeMs,parsed:i}),i}finally{await t.close()}}toExecutionRecord(e){let t=Array.isArray(e?.context?.messages)?e.context.messages:[],s=t[t.length-1],o=s?.role==="bot",i=0;for(let c of o?t.slice(0,-1):t)i+=this.estimateTokens(this.extractContextMessageText(c));let r=o?this.extractContextMessageText(s,!0):"",a=this.estimateTokens(o?this.extractContextMessageText(s):"");return{executionId:String(e.executionId),startTimeMs:typeof e.startTime=="number"?e.startTime:null,responseText:r,toolCalls:this.extractActionToolCalls(e),inputTokens:i,outputTokens:a,credits:this.sumUsageCredits(e)}}extractContextMessageText(e,t=!1){let s=[];for(let o of Array.isArray(e?.entries)?e.entries:[]){if(typeof o?.text=="string"){s.push(o.text);continue}t||(o?.args!==void 0?s.push(this.safeStringify(o.args)):o?.document!==void 0&&s.push(this.safeStringify(o.document)))}return s.join(`
|
|
58
|
-
`)}extractActionToolCalls(e){let t=[];for(let s of Array.isArray(e?.actions)?e.actions:[]){let o=typeof s?.actionType=="string"?s.actionType:"";!o||
|
|
59
|
-
`):""}async buildKiroTurns(e){let t=await this.readSessionFile(e);if(!t||!Array.isArray(t.history))return[];let s=t.history,o=[],i=0;for(;i<s.length;){if(s[i].message?.role!=="user"){i++;continue}let{turn:a,nextIndex:
|
|
55
|
+
`:"")+n.thinking.trim());for(let t of n.tool_calls??[])t.name&&e.toolCalls.push({toolName:t.name,arguments:t.args?JSON.stringify(t.args):void 0})}function Hy(n,e){e.toolCalls.length>0&&!e.toolCalls[e.toolCalls.length-1].result&&n.content&&(e.toolCalls[e.toolCalls.length-1].result=n.content.trim())}function Jy(n,e){n.type==="PLANNER_RESPONSE"?$y(n,e):n.type==="SEARCH_WEB"&&n.content&&Hy(n,e)}function Ky(n,e){let t={assistantResponse:"",thinkingContent:"",toolCalls:[]};for(let s=e;s<n.length;s++){let o=n[s];if(o.type==="USER_INPUT"&&o.source==="USER_EXPLICIT")break;o.source==="MODEL"&&Jy(o,t)}return t}var Ji=class{getAntigravityDataDir(){return wt.join(pd.homedir(),".gemini","antigravity")}getAntigravityBrainDir(){return wt.join(this.getAntigravityDataDir(),"brain")}isAntigravitySessionFile(e){let t=J(e);return t.includes("/.gemini/antigravity/brain/")&&t.endsWith("/transcript.jsonl")}getSessionIdFromPath(e){let t=e.replace(/\\/g,"/"),s=t.toLowerCase().indexOf("/.gemini/antigravity/brain/");if(s===-1)return wt.basename(wt.dirname(wt.dirname(wt.dirname(e))));let o=t.substring(s+27),i=o.indexOf("/");return i!==-1?o.substring(0,i):o}async getAntigravitySessionFiles(){let e=this.getAntigravityBrainDir(),t=[],s;try{s=await al.promises.readdir(e,{withFileTypes:!0})}catch{return[]}for(let o of s){if(!o.isDirectory())continue;let i=wt.join(e,o.name,".system_generated","logs","transcript.jsonl");try{(await al.promises.stat(i)).size>0&&t.push(i)}catch{}}return t}async readAntigravitySession(e){let t=this.getSessionIdFromPath(e),s=[],o=[],i=[],r=await Pe(e,"antigravity");if(r===void 0)return{sessionId:t,userEntries:s,modelEntries:o,allEntries:i};let a=r.split(`
|
|
56
|
+
`).filter(d=>d.trim().length>0);for(let d of a){let p;try{p=JSON.parse(d)}catch{continue}!p||typeof p.type!="string"||(i.push(p),p.type==="USER_INPUT"&&p.source==="USER_EXPLICIT"?s.push(p):p.source==="MODEL"&&o.push(p))}let l=(d,p)=>d.step_index-p.step_index;return i.sort(l),s.sort(l),o.sort(l),{sessionId:t,userEntries:s,modelEntries:o,allEntries:i}}async estimateTokensFromAntigravitySession(e,t){let s=await this.readAntigravitySession(e),o=0,i=0,r=0;for(let a of s.userEntries)o+=t(rl(a.content??""));for(let a of s.modelEntries)a.type==="PLANNER_RESPONSE"&&(a.content&&(i+=t(a.content)),a.thinking&&(r+=t(a.thinking)));return{tokens:o+i+r,thinkingTokens:r}}async countAntigravityInteractions(e){return(await this.readAntigravitySession(e)).userEntries.length}getAntigravityModelUsage(e){return{}}async getAntigravitySessionMeta(e){let t=await this.readAntigravitySession(e),s=t.allEntries,o;if(t.userEntries.length>0){let l=t.userEntries[0].content??"",d=rl(l);o=d.length>120?d.substring(0,117)+"...":d||void 0}let i=s.length>0?s[0].created_at??null:null,r=s.length>0?s[s.length-1].created_at??null:null;return{title:o,firstInteraction:i,lastInteraction:r}}_batCreateChatTurn(e,t,s,o){return{turnNumber:e,timestamp:t.created_at??null,mode:"cli",userMessage:rl(t.content??""),assistantResponse:s,model:null,toolCalls:o,contextReferences:G(),mcpTools:[],inputTokensEstimate:0,outputTokensEstimate:0,thinkingTokensEstimate:0}}_batIsUserInputEntry(e){return e.type==="USER_INPUT"&&e.source==="USER_EXPLICIT"}async buildAntigravityTurns(e){let s=(await this.readAntigravitySession(e)).allEntries,o=[],i=0;for(let r=0;r<s.length;r++){let a=s[r];if(!this._batIsUserInputEntry(a))continue;i++;let{assistantResponse:l,toolCalls:d}=Ky(s,r+1);o.push(this._batCreateChatTurn(i,a,l,d))}return{turns:o}}async countToolCalls(e){let t=await this.readAntigravitySession(e),s=0;for(let o of t.allEntries)Array.isArray(o.tool_calls)&&(s+=o.tool_calls.length);return s}};var Ki=S(require("fs")),et=S(require("path")),gd=S(require("os"));var Vi=class{getConfigDir(){return et.join(gd.homedir(),".pi","agent","sessions")}isPiSessionFile(e){let t=ue(e);return t.includes("/.pi/agent/sessions/")&&t.endsWith(".jsonl")}async discoverSessions(){let e=this.getConfigDir(),t=[];try{let s=await Ki.promises.readdir(e,{withFileTypes:!0});for(let o of s)o.isDirectory()&&await this.collectSessionFilesInDir(et.join(e,o.name),t,4)}catch{}return t}async collectSessionFilesInDir(e,t,s){if(!(s<=0))try{let o=await Ki.promises.readdir(e,{withFileTypes:!0});for(let i of o)i.isFile()&&i.name.endsWith(".jsonl")?t.push(et.join(e,i.name)):i.isDirectory()&&await this.collectSessionFilesInDir(et.join(e,i.name),t,s-1)}catch{}}async readLines(e){try{let t=await Ki.promises.readFile(e,"utf8");return this.parseJsonlContent(t)}catch{return[]}}parseJsonlContent(e){let t=[];for(let s of e.split(`
|
|
57
|
+
`)){let o=s.trim();if(o)try{t.push(JSON.parse(o))}catch{}}return t}async readSession(e){return(await this.readLines(e)).find(s=>s.type==="session")??null}async getParentSessionPath(e){let s=(await this.readSession(e))?.parentSession;return typeof s=="string"&&s.length>0?s:null}getParentSessionPathFromFilePath(e){if(et.basename(e)!=="session.jsonl")return null;let t=et.dirname(et.dirname(et.dirname(e)))+".jsonl";return this.isPiSessionFile(t)?t:null}async getMessages(e){return(await this.readLines(e)).filter(s=>s.type==="message")}async getTokens(e){let t=await this.getMessages(e),s=0;for(let o of t){if(o.message?.role!=="assistant")continue;let i=o.message?.usage;i&&typeof i.totalTokens=="number"&&(s+=i.totalTokens)}return{tokens:s,thinkingTokens:0}}async countInteractions(e){return(await this.getMessages(e)).filter(s=>s.message?.role==="user").length}async getModelUsage(e){let t=await this.getMessages(e),s={};for(let o of t)this.accumulateModelUsage(o,s);return s}accumulateModelUsage(e,t){let s=e.message;if(!s||s.role!=="assistant")return;let o=s.usage;if(!o)return;let i=typeof o.input=="number"?o.input:0,r=typeof o.output=="number"?o.output:0;if(i+r===0)return;let a=s.model||"unknown";O(a)||(t[a]||(t[a]={inputTokens:0,outputTokens:0,sessions:0}),t[a].inputTokens+=i,t[a].outputTokens+=r,this.accumulateCacheTokens(o,t[a]))}accumulateCacheTokens(e,t){let s=typeof e.cacheRead=="number"?e.cacheRead:0,o=typeof e.cacheWrite=="number"?e.cacheWrite:0;s>0&&(t.cachedReadTokens=(t.cachedReadTokens??0)+s),o>0&&(t.cacheCreationTokens=(t.cacheCreationTokens??0)+o)}async getSessionMeta(e){let t=await this.readLines(e);if(t.length===0)return{title:void 0,firstInteraction:null,lastInteraction:null};let s=t.find(l=>l.type==="session"),o=s?.cwd,i=o?et.basename(o):void 0,r=s?.timestamp??null,a=this.findLastTimestamp(t);return{title:i,firstInteraction:r,lastInteraction:a,workspacePath:o}}findLastTimestamp(e){for(let t=e.length-1;t>=0;t--)if(e[t].timestamp)return e[t].timestamp;return null}async getSessionData(e){let[{tokens:t},s,o,i]=await Promise.all([this.getTokens(e),this.countInteractions(e),this.getModelUsage(e),this.getSessionMeta(e)]),r=i.firstInteraction?new Date(i.firstInteraction).getTime():0,a=this.buildModelUsageWithInteractions(o,s);return{tokens:t,interactions:s,modelUsage:a,timestamp:r}}buildModelUsageWithInteractions(e,t){let s=Object.values(e).reduce((i,r)=>i+r.inputTokens+r.outputTokens,0),o={};for(let[i,r]of Object.entries(e)){let a=r.inputTokens+r.outputTokens,l=s>0?a/s:0;o[i]={inputTokens:r.inputTokens,outputTokens:r.outputTokens,sessions:r.sessions,interactions:Math.round(t*l)}}return o}};var Gt=S(require("fs")),Mt=S(require("path")),tn=S(require("os")),fd=S(Dt());var ll={columns:[],values:[]},Yi=class n{static COMPOSER_CACHE_MAX_ENTRIES=2e3;static READ_ONLY_RETRY_COOLDOWN_MS=5*6e4;_sqlJsModule=null;_sqlJsInitPromise=null;_nodeSqliteModule;_readOnlyUnsupportedDbs=new Map;_composerCache=new Map;_composerInflight=new Map;_sqlJsDbCache=new Map;_sqlJsDbInflight=new Map;_pendingTransientSqlJsDb=new Map;extensionUri;constructor(e){this.extensionUri=e}dispose(){this._composerCache.clear(),this._composerInflight.clear(),this._readOnlyUnsupportedDbs.clear(),this._sqlJsInitPromise=null;for(let e of this._sqlJsDbCache.values())try{e.db.close()}catch{}this._sqlJsDbCache.clear(),this._sqlJsDbInflight.clear();for(let e of this._pendingTransientSqlJsDb.values())try{e.db.close()}catch{}this._pendingTransientSqlJsDb.clear()}getCursorGlobalStorageDir(){let e=tn.platform();if(e==="win32"){let s=process.env.APPDATA||Mt.join(tn.homedir(),"AppData","Roaming");return Mt.join(s,"Cursor","User","globalStorage")}if(e==="darwin")return Mt.join(tn.homedir(),"Library","Application Support","Cursor","User","globalStorage");let t=process.env.XDG_CONFIG_HOME||Mt.join(tn.homedir(),".config");return Mt.join(t,"Cursor","User","globalStorage")}getCursorDbPath(){return Mt.join(this.getCursorGlobalStorageDir(),"state.vscdb")}isCursorSessionFile(e){return J(e).includes("/cursor/user/globalstorage/state.vscdb#")}getDbPathFromVirtual(e){let t=e.indexOf("state.vscdb#");return t===-1?e:e.substring(0,t+11)}getComposerIdFromVirtual(e){let t=e.indexOf("state.vscdb#");return t===-1?null:e.substring(t+12)}async initSqlJs(){return this._sqlJsModule?this._sqlJsModule:(this._sqlJsInitPromise||(this._sqlJsInitPromise=(async()=>{let e=Mt.join(__dirname,"sql-wasm.wasm"),t;Gt.existsSync(e)&&(t=Gt.readFileSync(e));let s=await(0,fd.default)(t?{wasmBinary:t.buffer}:void 0);return this._sqlJsModule=s,s})().catch(e=>{throw this._sqlJsInitPromise=null,e})),this._sqlJsInitPromise)}statWal(e){try{let t=Gt.statSync(e+"-wal");return{mtimeMs:t.mtimeMs,size:t.size}}catch{return{mtimeMs:0,size:0}}}statDb(e){try{return Gt.statSync(e)}catch{return null}}getNodeSqliteModule(){if(this._nodeSqliteModule===void 0)try{this._nodeSqliteModule=require("node:sqlite")}catch{this._nodeSqliteModule=null}return this._nodeSqliteModule}isReadOnlyDemoted(e){let t=this._readOnlyUnsupportedDbs.get(e);return t===void 0?!1:Date.now()-t<n.READ_ONLY_RETRY_COOLDOWN_MS?!0:(this._readOnlyUnsupportedDbs.delete(e),!1)}queryReadOnly(e,t,s){let o=this.getNodeSqliteModule();if(!o||this.isReadOnlyDemoted(e))return null;let i;try{i=new o.DatabaseSync(e,{readOnly:!0});let r=i.prepare(t).all(...s);if(r.length===0)return ll;let a=Object.keys(r[0]),l=r.map(d=>a.map(p=>d[p]));return{columns:a,values:l}}catch{return this._readOnlyUnsupportedDbs.set(e,Date.now()),null}finally{if(i)try{i.close()}catch{}}}evictSqlJsDb(e){let t=this._sqlJsDbCache.get(e);if(t){try{t.db.close()}catch{}this._sqlJsDbCache.delete(e)}}releasePendingTransientSqlJsDb(e){let t=this._pendingTransientSqlJsDb.get(e);if(t){try{t.db.close()}catch{}this._pendingTransientSqlJsDb.delete(e)}}sqlJsEntryMatchesFingerprint(e,t){return!!e&&e.mtimeMs===t.mtimeMs&&e.size===t.size&&e.walMtimeMs===t.walMtimeMs&&e.walSize===t.walSize}async getSqlJsDb(e){let t=this.statDb(e);if(!t)return this.evictSqlJsDb(e),null;let s=this.statWal(e),o=this._sqlJsDbCache.get(e);if(this.sqlJsEntryMatchesFingerprint(o,{mtimeMs:t.mtimeMs,size:t.size,walMtimeMs:s.mtimeMs,walSize:s.size}))return o;let i=this._sqlJsDbInflight.get(e);if(i)return i;let r=(async()=>{try{let a=await this.initSqlJs(),l=await $s(e),d={mtimeMs:l.dbMtimeMs,size:l.dbSize,walMtimeMs:l.walMtimeMs,walSize:l.walSize},p=this._sqlJsDbCache.get(e);if(this.sqlJsEntryMatchesFingerprint(p,d))return p;if(!l.walIncluded){let y=this._pendingTransientSqlJsDb.get(e);if(this.sqlJsEntryMatchesFingerprint(y,d))return y}let h={db:new a.Database(l.buffer),...d};return l.walIncluded?(this.evictSqlJsDb(e),this.releasePendingTransientSqlJsDb(e),this._sqlJsDbCache.set(e,h),h):(this.releasePendingTransientSqlJsDb(e),this._pendingTransientSqlJsDb.set(e,h),h)}catch{return null}})();this._sqlJsDbInflight.set(e,r);try{return await r}finally{this._sqlJsDbInflight.get(e)===r&&this._sqlJsDbInflight.delete(e)}}async queryViaSqlJs(e,t,s){let o=await this.getSqlJsDb(e);if(!o)return null;try{let i=o.db.exec(t,s);return{result:i.length===0?ll:i[0],fingerprint:{mtimeMs:o.mtimeMs,size:o.size,walMtimeMs:o.walMtimeMs,walSize:o.walSize}}}catch{return this.evictSqlJsDb(e),null}}async queryAll(e,t,s=[]){if(!this.statDb(e))return{result:ll,fingerprint:null};let o=this.queryReadOnly(e,t,s);return o?{result:o,fingerprint:null}:this.queryViaSqlJs(e,t,s)}evictComposerCacheIfOverCapacity(){for(;this._composerCache.size>n.COMPOSER_CACHE_MAX_ENTRIES;){let e=this._composerCache.keys().next().value;if(e===void 0)break;this._composerCache.delete(e)}}async readComposerData(e){let t=this.getDbPathFromVirtual(e),s=this.getComposerIdFromVirtual(e);if(!s)return null;let o=this.statDb(t),i=this.statWal(t);if(o){let l=this._composerCache.get(e);if(l&&l.mtimeMs===o.mtimeMs&&l.size===o.size&&l.walMtimeMs===i.mtimeMs&&l.walSize===i.size)return l.data}let r=this._composerInflight.get(e);if(r)return r;let a=(async()=>{let l=await this.queryComposerData(t,s);if(l&&o){let d=l.fingerprint??{mtimeMs:o.mtimeMs,size:o.size,walMtimeMs:i.mtimeMs,walSize:i.size};this._composerCache.set(e,{data:l.data,mtimeMs:d.mtimeMs,size:d.size,walMtimeMs:d.walMtimeMs,walSize:d.walSize}),this.evictComposerCacheIfOverCapacity()}return l?l.data:null})();this._composerInflight.set(e,a);try{return await a}finally{this._composerInflight.get(e)===a&&this._composerInflight.delete(e)}}async queryComposerData(e,t){let s=await this.queryAll(e,"SELECT value FROM cursorDiskKV WHERE key = ?",[`composerData:${t}`]);if(!s)return null;if(s.result.values.length===0)return{data:null,fingerprint:s.fingerprint};try{let o=s.result.values[0][0];return{data:JSON.parse(o),fingerprint:s.fingerprint}}catch{return null}}async readBubbles(e,t){if(t.length===0)return new Map;let s=this.getDbPathFromVirtual(e),o=this.getComposerIdFromVirtual(e);if(!o)return new Map;let i=new Map;try{let r=t.map(()=>"?").join(","),a=t.map(d=>`bubbleId:${o}:${d}`),l=await this.queryAll(s,`SELECT key, value FROM cursorDiskKV WHERE key IN (${r})`,a);if(!l)return i;for(let d of l.result.values){let p=d[0],g=d[1],h=p.replace(`bubbleId:${o}:`,"");try{let y=JSON.parse(g);i.set(h,y)}catch{}}}catch{}return i}async discoverSessions(){let e=this.getCursorDbPath();try{let t=await this.queryAll(e,"SELECT key FROM cursorDiskKV WHERE key LIKE 'composerData:%' AND (length(key) - length(replace(key, ':', ''))) = 1");return t?t.result.values.map(s=>{let o=s[0].replace("composerData:","");return`${e}#${o}`}):[]}catch{return[]}}async statSessionFile(e){let t=this.getDbPathFromVirtual(e);return Gt.promises.stat(t)}async getTokens(e){let t=await this.readComposerData(e);return t?{tokens:typeof t.contextTokensUsed=="number"?t.contextTokensUsed:0,thinkingTokens:0}:{tokens:0,thinkingTokens:0}}async countInteractions(e){let t=await this.readComposerData(e);return t?.fullConversationHeadersOnly?t.fullConversationHeadersOnly.filter(s=>s.type===1).length:0}async getModelUsage(e){let t=await this.readComposerData(e);if(!t)return{};let s=typeof t.contextTokensUsed=="number"?t.contextTokensUsed:0;return s===0?{}:{[t.modelConfig?.modelName||"unknown"]:{inputTokens:s,outputTokens:0,sessions:0}}}async getSessionMeta(e){let t=await this.readComposerData(e);if(!t)return{title:void 0,firstInteraction:null,lastInteraction:null,workspacePath:void 0};let s=t.name&&t.name.trim()?t.name.trim():void 0,o=typeof t.createdAt=="number"?t.createdAt:null,i=typeof t.lastUpdatedAt=="number"?t.lastUpdatedAt:null,r=o?new Date(o).toISOString():null,a=i?new Date(i):o?new Date(o):null,l=this.extractWorkspacePath(t);return{title:s,firstInteraction:r,lastInteraction:a?a.toISOString():null,workspacePath:l}}extractWorkspacePath(e){return e.trackedGitRepos&&e.trackedGitRepos.length>0?e.trackedGitRepos[0].repoPath:this.extractWorkspaceFromFileStates(e.originalFileStates)}extractWorkspaceFromFileStates(e){if(!e)return;let t=Object.keys(e);if(t.length!==0)try{return decodeURIComponent(t[0].replace("file:///","").replace("file://","")).replace(/^\/([A-Za-z]):/,"$1:").split(/[/\\]/).slice(0,-1).join(Mt.sep)}catch{return}}async getSessionData(e){let[{tokens:t},s,o,i]=await Promise.all([this.getTokens(e),this.countInteractions(e),this.getModelUsage(e),this.getSessionMeta(e)]),r=i.firstInteraction?new Date(i.firstInteraction).getTime():Date.now();return{tokens:t,interactions:s,modelUsage:o,timestamp:r}}};var ss=S(require("fs")),Ce=S(require("path")),sn=S(require("os")),hd=S(require("crypto"));var Vy=new Set(["intentClassification","model","say"]),Qi=class{getKiroAppDataDir(){let e=sn.platform();if(e==="win32"){let t=process.env.APPDATA||Ce.join(sn.homedir(),"AppData","Roaming");return Ce.join(t,"Kiro")}return e==="darwin"?Ce.join(sn.homedir(),"Library","Application Support","Kiro"):Ce.join(sn.homedir(),".config","Kiro")}getKiroAgentDir(){return Ce.join(this.getKiroAppDataDir(),"User","globalStorage","kiro.kiroagent")}getKiroWorkspaceSessionsDir(){return Ce.join(this.getKiroAgentDir(),"workspace-sessions")}isKiroSessionFile(e){let t=J(e);return t.includes("/kiro.kiroagent/workspace-sessions/")&&t.endsWith(".json")&&!t.endsWith("/sessions.json")}async getKiroSessionFiles(){let e=this.getKiroWorkspaceSessionsDir(),t;try{t=await ss.promises.readdir(e,{withFileTypes:!0})}catch{return[]}let s=[];for(let o of t){if(!o.isDirectory())continue;let i=Ce.join(e,o.name);try{let r=await ss.promises.readdir(i);for(let a of r)a.endsWith(".json")&&a!=="sessions.json"&&s.push(Ce.join(i,a))}catch{}}return s}async readSessionFile(e){try{let t=await ss.promises.readFile(e,"utf8");return JSON.parse(t)}catch{return null}}_executionRecordCache=new Map;getWorkspaceExecutionDir(e){let t=hd.createHash("sha256").update(e).digest("hex").slice(0,32);return Ce.join(this.getKiroAgentDir(),t)}async readExecutionRecordsForSession(e){let t=Ce.basename(e,".json"),s=this.decodeWorkspaceDirName(Ce.basename(Ce.dirname(e)));if(!s)return[];let o=this.getWorkspaceExecutionDir(s),i=await this.collectExecutionFiles(o,0),r=[];for(let a of i){let l=await this.readExecutionFile(a);l?.executionId&&l?.chatSessionId===t&&r.push(this.toExecutionRecord(l))}return r.sort((a,l)=>(a.startTimeMs??0)-(l.startTimeMs??0)),r}async collectExecutionFiles(e,t){if(t>3)return[];let s;try{s=await ss.promises.readdir(e,{withFileTypes:!0})}catch{return[]}let o=[];for(let i of s){if(!/^[0-9a-f]{32}$/.test(i.name))continue;let r=Ce.join(e,i.name);i.isDirectory()?o.push(...await this.collectExecutionFiles(r,t+1)):o.push(r)}return o}async readExecutionFile(e){let t;try{t=await ss.promises.open(e,"r")}catch{return null}try{let s=await t.stat(),o=this._executionRecordCache.get(e);if(o&&o.mtimeMs===s.mtimeMs)return o.parsed;let i=null;try{i=JSON.parse(await t.readFile("utf8"))}catch{i=null}return this._executionRecordCache.set(e,{mtimeMs:s.mtimeMs,parsed:i}),i}finally{await t.close()}}toExecutionRecord(e){let t=Array.isArray(e?.context?.messages)?e.context.messages:[],s=t[t.length-1],o=s?.role==="bot",i=0;for(let l of o?t.slice(0,-1):t)i+=this.estimateTokens(this.extractContextMessageText(l));let r=o?this.extractContextMessageText(s,!0):"",a=this.estimateTokens(o?this.extractContextMessageText(s):"");return{executionId:String(e.executionId),startTimeMs:typeof e.startTime=="number"?e.startTime:null,responseText:r,toolCalls:this.extractActionToolCalls(e),inputTokens:i,outputTokens:a,credits:this.sumUsageCredits(e)}}extractContextMessageText(e,t=!1){let s=[];for(let o of Array.isArray(e?.entries)?e.entries:[]){if(typeof o?.text=="string"){s.push(o.text);continue}t||(o?.args!==void 0?s.push(this.safeStringify(o.args)):o?.document!==void 0&&s.push(this.safeStringify(o.document)))}return s.join(`
|
|
58
|
+
`)}extractActionToolCalls(e){let t=[];for(let s of Array.isArray(e?.actions)?e.actions:[]){let o=typeof s?.actionType=="string"?s.actionType:"";!o||Vy.has(o)||t.push({toolName:o,arguments:s.input!==void 0?this.safeStringify(s.input):void 0})}return t}sumUsageCredits(e){let t=0;for(let s of Array.isArray(e?.usageSummary)?e.usageSummary:[])typeof s?.usage=="number"&&Number.isFinite(s.usage)&&(t+=s.usage);return t}safeStringify(e){if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return String(e)}}estimateTokens(e){return e?Math.ceil(e.length/4):0}async getTokensFromKiroSession(e){let t=await this.readExecutionRecordsForSession(e);if(t.length>0){let s=0;for(let o of t)s+=o.inputTokens+o.outputTokens;return{tokens:s,thinkingTokens:0}}return this.getTokensFromSessionFileText(e)}async getTokensFromSessionFileText(e){let t=await this.readSessionFile(e);if(!t||!Array.isArray(t.history))return{tokens:0,thinkingTokens:0};let s=0;for(let o of t.history){if(Array.isArray(o.promptLogs))for(let i of o.promptLogs)s+=this.estimateTokens(i.prompt||""),s+=this.estimateTokens(i.completion||"");o.message?.role==="assistant"&&typeof o.message.content=="string"&&(s+=this.estimateTokens(o.message.content))}return{tokens:s,thinkingTokens:0}}async countKiroInteractions(e){let t=await this.readSessionFile(e);return!t||!Array.isArray(t.history)?0:t.history.filter(s=>s.message?.role==="user").length}async getKiroModelUsage(e){let t=await this.readExecutionRecordsForSession(e);if(t.length>0){let s=await this.getSessionModelTitle(e),o={[s]:{inputTokens:0,outputTokens:0,sessions:0}};for(let i of t)o[s].inputTokens+=i.inputTokens,o[s].outputTokens+=i.outputTokens;return o}return this.getModelUsageFromSessionFileText(e)}async getSessionModelTitle(e){let t=await this.readSessionFile(e);for(let s of Array.isArray(t?.history)?t.history:[])if(Array.isArray(s.promptLogs))for(let o of s.promptLogs){let i=o.modelTitle||o.completionOptions?.model;if(i&&!O(i))return i}return"agent"}async getModelUsageFromSessionFileText(e){let t=await this.readSessionFile(e);if(!t||!Array.isArray(t.history))return{};let s={};for(let o of t.history)if(Array.isArray(o.promptLogs))for(let i of o.promptLogs){let r=i.modelTitle||i.completionOptions?.model||"unknown";O(r)||(s[r]||(s[r]={inputTokens:0,outputTokens:0,sessions:0}),s[r].inputTokens+=this.estimateTokens(i.prompt||""),s[r].outputTokens+=this.estimateTokens(i.completion||""))}return s}async readSessionIndexEntry(e){let t=Ce.join(Ce.dirname(e),"sessions.json"),s=Ce.basename(e,".json");try{let o=JSON.parse(await ss.promises.readFile(t,"utf8"));if(!Array.isArray(o))return;let i=o.find(r=>r?.sessionId===s);return i?{dateCreated:i.dateCreated?Number(i.dateCreated):void 0,title:i.title,workspaceDirectory:i.workspaceDirectory}:void 0}catch{return}}decodeWorkspaceDirName(e){try{let t=Buffer.from(e.replace(/_/g,"="),"base64").toString("utf8");return/^([a-zA-Z]:[\\/]|\/)/.test(t)?t:void 0}catch{return}}async getKiroSessionMeta(e){let t=await this.readSessionFile(e),s=await this.readSessionIndexEntry(e),o=null,i=null;s?.dateCreated&&Number.isFinite(s.dateCreated)&&(o=new Date(s.dateCreated).toISOString());try{let a=await ss.promises.stat(e);i=a.mtime.toISOString(),o||(o=a.birthtime.toISOString())}catch{}let r=s?.workspaceDirectory??this.decodeWorkspaceDirName(Ce.basename(Ce.dirname(e)));return{title:s?.title??t?.title,firstInteraction:o,lastInteraction:i,workspacePath:r}}async getKiroDailyFractions(e){let t=await this.readExecutionRecordsForSession(e),s=t.reduce((r,a)=>r+a.inputTokens+a.outputTokens,0);if(t.length===0||s===0){let r=await this.getKiroSessionMeta(e),a=r.firstInteraction?Date.parse(r.firstInteraction):NaN;return{[Number.isFinite(a)?N(new Date(a)):N(new Date)]:1}}let o=new Map;for(let r of t){let a=r.startTimeMs!==null?N(new Date(r.startTimeMs)):N(new Date);o.set(a,(o.get(a)??0)+r.inputTokens+r.outputTokens)}let i={};for(let[r,a]of o.entries())i[r]=a/s;return i}extractUserText(e){return typeof e=="string"?e:Array.isArray(e)?e.filter(t=>t.type==="text"&&typeof t.text=="string").map(t=>t.text).join(`
|
|
59
|
+
`):""}async buildKiroTurns(e){let t=await this.readSessionFile(e);if(!t||!Array.isArray(t.history))return[];let s=t.history,o=[],i=0;for(;i<s.length;){if(s[i].message?.role!=="user"){i++;continue}let{turn:a,nextIndex:l}=this.buildTurnFromHistory(s,i);o.push(a),i=l}let r=await this.readExecutionRecordsForSession(e);if(r.length>0){let a=new Map(r.map(l=>[l.executionId,l]));for(let l of o)this.enrichTurnWithExecutionRecords(l,a)}return o}enrichTurnWithExecutionRecords(e,t){let s=e.executionIds.map(i=>t.get(i)).filter(i=>i!==void 0);if(s.length===0)return;let o=s.map(i=>i.responseText).filter(i=>i.length>0);o.length>0&&(e.assistantText=o.join(`
|
|
60
60
|
|
|
61
61
|
`)),e.toolCalls=s.flatMap(i=>i.toolCalls),e.inputTokens=s.reduce((i,r)=>i+r.inputTokens,0),e.outputTokens=s.reduce((i,r)=>i+r.outputTokens,0),e.timestampMs=s[0].startTimeMs}buildTurnFromHistory(e,t){let s={userText:this.extractUserText(e[t].message.content),assistantText:"",model:null,toolCalls:[],inputTokens:0,outputTokens:0,timestampMs:null,executionIds:[]};this.applyPromptLogs(e[t],s);let o=t+1;for(;o<e.length&&e[o].message?.role!=="user";){let i=e[o];i.message?.role==="assistant"&&(typeof i.executionId=="string"&&s.executionIds.push(i.executionId),typeof i.message.content=="string"&&i.message.content&&(s.assistantText+=(s.assistantText?`
|
|
62
62
|
|
|
63
|
-
`:"")+i.message.content),this.applyPromptLogs(i,s),this.collectToolCalls(i,s)),o++}return{turn:s,nextIndex:o}}applyPromptLogs(e,t){if(Array.isArray(e.promptLogs))for(let s of e.promptLogs)s.modelTitle&&!t.model&&(t.model=s.modelTitle),t.inputTokens+=this.estimateTokens(s.prompt||""),t.outputTokens+=this.estimateTokens(s.completion||"")}collectToolCalls(e,t){if(Array.isArray(e.message?.toolCalls))for(let s of e.message.toolCalls)t.toolCalls.push({toolName:s.function?.name||s.name||"unknown",arguments:s.function?.arguments})}};var
|
|
63
|
+
`:"")+i.message.content),this.applyPromptLogs(i,s),this.collectToolCalls(i,s)),o++}return{turn:s,nextIndex:o}}applyPromptLogs(e,t){if(Array.isArray(e.promptLogs))for(let s of e.promptLogs)s.modelTitle&&!t.model&&(t.model=s.modelTitle),t.inputTokens+=this.estimateTokens(s.prompt||""),t.outputTokens+=this.estimateTokens(s.completion||"")}collectToolCalls(e,t){if(Array.isArray(e.message?.toolCalls))for(let s of e.message.toolCalls)t.toolCalls.push({toolName:s.function?.name||s.name||"unknown",arguments:s.function?.arguments})}};var Xn=S(require("fs")),Xi=S(require("path")),yd=S(require("os"));var Zi=class{getKiroCliDataDir(){return Xi.join(yd.homedir(),".kiro")}getKiroCliSessionsDir(){return Xi.join(this.getKiroCliDataDir(),"sessions","cli")}isKiroCliSessionFile(e){let t=J(e);return t.includes("/.kiro/sessions/cli/")&&t.endsWith(".json")}async getKiroCliSessionFiles(){let e=this.getKiroCliSessionsDir();try{await Xn.promises.access(e)}catch{return[]}try{return(await Xn.promises.readdir(e)).filter(s=>s.endsWith(".json")).map(s=>Xi.join(e,s))}catch{return[]}}getMessageLogPath(e){return e.replace(/\.json$/,".jsonl")}async readSessionMetadata(e){let t;try{t=JSON.parse(await Xn.promises.readFile(e,"utf8"))}catch{return null}let s=Array.isArray(t?.session_state?.conversation_metadata?.user_turn_metadatas)?t.session_state.conversation_metadata.user_turn_metadatas:[];return{sessionId:this.asString(t?.session_id),cwd:this.asString(t?.cwd),title:this.asString(t?.title),createdAt:this.asString(t?.created_at),updatedAt:this.asString(t?.updated_at),modelId:this.asString(t?.session_state?.rts_model_state?.model_info?.model_id),turnCount:s.length,totalCredits:this.sumMeteredCredits(s)}}asString(e){return typeof e=="string"?e:void 0}sumMeteredCredits(e){let t=0;for(let s of e)if(Array.isArray(s?.metering_usage))for(let o of s.metering_usage)typeof o?.value=="number"&&Number.isFinite(o.value)&&(t+=o.value);return t}async readSessionMessages(e){let t=this.getMessageLogPath(e),s;try{s=await Xn.promises.readFile(t,"utf8")}catch{return[]}let o=[],i=s.split(/\r?\n/);for(let r=0;r<i.length;r++){let a=i[r].trim();if(!a)continue;let l;try{l=JSON.parse(a)}catch{continue}let d=this.parseMessageRecord(l,r+1);d&&o.push(d)}return o}parseMessageRecord(e,t){let s=e?.kind;if(s!=="Prompt"&&s!=="AssistantMessage"&&s!=="ToolResults")return null;let o=e.data??{},i={kind:s,text:"",toolUses:[],toolResults:[],timestampMs:this.toEpochMs(o?.meta?.timestamp),lineNumber:t};for(let r of Array.isArray(o.content)?o.content:[])this.applyContentPart(r,i);return i}applyContentPart(e,t){if(e?.kind==="text"&&typeof e.data=="string"){t.text+=(t.text?`
|
|
64
64
|
`:"")+e.data;return}if(e?.kind==="toolUse"&&e.data){t.toolUses.push({toolName:typeof e.data.name=="string"?e.data.name:"unknown",arguments:e.data.input!==void 0?this.safeStringify(e.data.input):void 0});return}e?.kind==="toolResult"&&e.data&&t.toolResults.push({toolUseId:typeof e.data.toolUseId=="string"?e.data.toolUseId:"",text:this.extractToolResultText(e.data)})}extractToolResultText(e){let t=[];for(let s of Array.isArray(e.content)?e.content:[])s?.kind==="text"&&typeof s.data=="string"&&t.push(s.data);return t.join(`
|
|
65
65
|
`)}toEpochMs(e){return typeof e!="number"||!Number.isFinite(e)||e<=0?null:e*1e3}safeStringify(e){if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return String(e)}}estimateTokens(e){return e?Math.ceil(e.length/4):0}async getTokensFromKiroCliSession(e){let{inputTokens:t,outputTokens:s}=await this.estimateSessionTokens(e);return{tokens:t+s,thinkingTokens:0}}async estimateSessionTokens(e){let t=await this.readSessionMessages(e),s=0,o=0;for(let i of t)if(i.kind==="AssistantMessage"){o+=this.estimateTokens(i.text);for(let r of i.toolUses)o+=this.estimateTokens(r.arguments??"")}else{s+=this.estimateTokens(i.text);for(let r of i.toolResults)s+=this.estimateTokens(r.text)}return{inputTokens:s,outputTokens:o}}async countKiroCliInteractions(e){let s=(await this.readSessionMessages(e)).filter(i=>i.kind==="Prompt").length;return s>0?s:(await this.readSessionMetadata(e))?.turnCount??0}async getKiroCliModelUsage(e){let t=await this.readSessionMetadata(e),{inputTokens:s,outputTokens:o}=await this.estimateSessionTokens(e);return s===0&&o===0?{}:{[t?.modelId||"unknown"]:{inputTokens:s,outputTokens:o,sessions:0}}}async getKiroCliSessionMeta(e){let t=await this.readSessionMetadata(e);return{title:t?.title,firstInteraction:this.toIsoString(t?.createdAt),lastInteraction:this.toIsoString(t?.updatedAt),workspacePath:t?.cwd}}toIsoString(e){if(!e)return null;let t=Date.parse(e);return Number.isFinite(t)?new Date(t).toISOString():null}async getKiroCliDailyFractions(e){let s=(await this.readSessionMessages(e)).filter(r=>r.kind==="Prompt"&&r.timestampMs!==null).map(r=>N(new Date(r.timestampMs)));if(s.length===0){let r=await this.readSessionMetadata(e),a=r?.createdAt?Date.parse(r.createdAt):NaN;return{[Number.isFinite(a)?N(new Date(a)):N(new Date)]:1}}let o=new Map;for(let r of s)o.set(r,(o.get(r)??0)+1);let i={};for(let[r,a]of o.entries())i[r]=a/s.length;return i}async buildKiroCliTurns(e){let t=await this.readSessionMessages(e),s=[],o=null;for(let i of t){if(i.kind==="Prompt"){o={userText:i.text,assistantText:"",toolCalls:[],timestampMs:i.timestampMs,inputTokens:this.estimateTokens(i.text),outputTokens:0},s.push(o);continue}o&&(i.kind==="AssistantMessage"?this.applyAssistantRecordToTurn(i,o):this.applyToolResultsToTurn(i,o))}return s}applyAssistantRecordToTurn(e,t){e.text&&(t.assistantText+=(t.assistantText?`
|
|
66
66
|
|
|
67
|
-
`:"")+e.text,t.outputTokens+=this.estimateTokens(e.text));for(let s of e.toolUses)t.toolCalls.push({toolName:s.toolName,arguments:s.arguments}),t.outputTokens+=this.estimateTokens(s.arguments??"")}applyToolResultsToTurn(e,t){for(let s of e.toolResults){t.inputTokens+=this.estimateTokens(s.text);let o=[...t.toolCalls].reverse().find(i=>i.result===void 0);o&&(o.result=s.text)}}};var
|
|
67
|
+
`:"")+e.text,t.outputTokens+=this.estimateTokens(e.text));for(let s of e.toolUses)t.toolCalls.push({toolName:s.toolName,arguments:s.arguments}),t.outputTokens+=this.estimateTokens(s.arguments??"")}applyToolResultsToTurn(e,t){for(let s of e.toolResults){t.inputTokens+=this.estimateTokens(s.text);let o=[...t.toolCalls].reverse().find(i=>i.result===void 0);o&&(o.result=s.text)}}};var Zn=S(require("fs")),ns=S(require("path")),tr=S(require("os")),_d=S(Dt());var Yy="devin/cli/sessions.db#";function er(n,e){for(let t of e){let s=n[t];if(typeof s=="number"&&Number.isFinite(s)&&s!==0)return s}return 0}var sr=class{_sqlJsModule=null;_sqlJsInitPromise=null;_dbCache=new Map;_dbCacheInflight=new Map;_dbPathOverride=null;dispose(){for(let e of this._dbCache.values())try{e.db.close()}catch{}this._dbCache.clear(),this._dbCacheInflight.clear(),this._sqlJsInitPromise=null}getConfigDir(){if(process.platform==="win32"){let s=process.env.APPDATA||ns.join(tr.homedir(),"AppData","Roaming");return ns.join(s,"devin","cli")}if(process.platform==="darwin")return ns.join(tr.homedir(),"Library","Application Support","devin","cli");let e=process.env.XDG_DATA_HOME,t=e&&e.trim()?e:ns.join(tr.homedir(),".local","share");return ns.join(t,"devin","cli")}getDbPath(){return this._dbPathOverride??ns.join(this.getConfigDir(),"sessions.db")}setDbPathOverrideForTests(e){this._dbPathOverride=e}virtualPath(e){return`${this.getDbPath()}#${e}`}isDevinCliSessionFile(e){return e.replace(/\\/g,"/").toLowerCase().includes(Yy)}getDbPathFromVirtual(e){let t=e.lastIndexOf("sessions.db#");return t===-1?e:e.substring(0,t+11)}getSessionId(e){let t=e.lastIndexOf("sessions.db#");return t===-1?null:e.substring(t+12)||null}async statSessionFile(e){return Zn.promises.stat(this.getDbPathFromVirtual(e))}closeDb(e){try{e.close()}catch{}}isMissingFileError(e){let t=e?.code;return t==="ENOENT"||t==="ENOTDIR"}async statDb(e){try{return await Zn.promises.stat(e)}catch(t){return this.isMissingFileError(t)&&this._dbCache.has(e)&&(this.closeDb(this._dbCache.get(e).db),this._dbCache.delete(e)),null}}isCachedDbCurrent(e,t){let s=this._dbCache.get(e);return!!s&&s.mtimeMs===t.mtimeMs&&s.size===t.size}sameDbStats(e,t){return e.mtimeMs===t.mtimeMs&&e.size===t.size}async refreshDb(e,t){let s;try{let r=await this.initSqlJs(),a=await Zn.promises.readFile(e);s=new r.Database(a)}catch{return this._dbCache.get(e)?.db??null}let o=await this.statDb(e);if(!o||!this.sameDbStats(t,o))return this.closeDb(s),this._dbCache.get(e)?.db??null;let i=this._dbCache.get(e);return i&&this.closeDb(i.db),this._dbCache.set(e,{db:s,mtimeMs:t.mtimeMs,size:t.size}),s}async getDb(e){let t=await this.statDb(e);if(!t)return this._dbCache.get(e)?.db??null;if(this.isCachedDbCurrent(e,t))return this._dbCache.get(e).db;let s=`${e}:${t.mtimeMs}:${t.size}`,o=this._dbCacheInflight.get(s);if(o)return o;let i=this.refreshDb(e,t);this._dbCacheInflight.set(s,i);try{return await i}finally{this._dbCacheInflight.get(s)===i&&this._dbCacheInflight.delete(s)}}async initSqlJs(){return this._sqlJsModule?this._sqlJsModule:(this._sqlJsInitPromise||(this._sqlJsInitPromise=(async()=>{let e=ns.join(__dirname,"sql-wasm.wasm"),t;try{t=await Zn.promises.readFile(e)}catch{}let s=await(0,_d.default)(t?{wasmBinary:t.buffer}:void 0);return this._sqlJsModule=s,s})().catch(e=>{throw this._sqlJsInitPromise=null,e})),this._sqlJsInitPromise)}rowsToObjects(e){if(e.length===0)return[];let{columns:t,values:s}=e[0];return s.map(o=>{let i={};return t.forEach((r,a)=>{i[r]=o[a]}),i})}async discoverSessionIds(){let e=this.getDbPath(),t=await this.getDb(e);if(!t)return[];try{let s=t.exec("SELECT id FROM sessions WHERE hidden = 0 OR hidden IS NULL ORDER BY last_activity_at DESC");return this.rowsToObjects(s).map(o=>o.id)}catch{try{let s=t.exec("SELECT id FROM sessions ORDER BY last_activity_at DESC");return this.rowsToObjects(s).map(o=>o.id)}catch{return[]}}}async readSession(e){let t=this.getDbPathFromVirtual(e),s=this.getSessionId(e);if(!s)return null;let o=await this.getDb(t);if(!o)return null;try{let i=o.exec(`SELECT id, working_directory, backend_type, model, agent_mode, created_at,
|
|
68
68
|
last_activity_at, title, main_chain_id, cogs_json, hidden
|
|
69
69
|
FROM sessions WHERE id = ?`,[s]),r=this.rowsToObjects(i);return r.length===0?null:r[0]}catch{return null}}async getMessageNodes(e){let t=this.getDbPathFromVirtual(e),s=this.getSessionId(e);if(!s)return[];let o=await this.getDb(t);if(!o)return[];try{let i=o.exec(`SELECT row_id, session_id, node_id, parent_node_id, chat_message, created_at, metadata
|
|
70
70
|
FROM message_nodes WHERE session_id = ? ORDER BY created_at ASC`,[s]);return this.rowsToObjects(i)}catch{return[]}}async getToolCalls(e){let t=this.getDbPathFromVirtual(e),s=this.getSessionId(e);if(!s)return[];let o=await this.getDb(t);if(!o)return[];try{let i=o.exec(`SELECT session_id, tool_call_id, tool_call_json, tool_call_update_json
|
|
71
|
-
FROM tool_call_state WHERE session_id = ?`,[s]);return this.rowsToObjects(i)}catch{return[]}}buildMainChain(e,t){if(e.length===0)return[];if(t==null)return[...e].sort((a,
|
|
72
|
-
`):typeof e.text=="string"?e.text:""}estimateTokens(e){return e?Math.ceil(e.length/4):0}extractCogsTokens(e){let t=this.parseJsonObject(e);if(!t)return null;let s=Yi(t,["input_tokens","prompt_tokens","inputTokens"]),o=Yi(t,["output_tokens","completion_tokens","outputTokens"]),i=Yi(t,["reasoning_tokens","thinking_tokens","reasoningTokens"]);if(s===0&&o===0&&i===0){let r=Yi(t,["used","total_tokens","tokens_used"]);return r>0?{input:r,output:0,thinking:0}:null}return{input:s,output:o,thinking:i}}parseJsonObject(e){if(!e)return null;try{let t=JSON.parse(e);return typeof t=="object"&&t!==null?t:null}catch{return null}}async getTokens(e){let t=await this.readSession(e),s=this.extractCogsTokens(t?.cogs_json??null);if(s)return{tokens:s.input+s.output+s.thinking,thinkingTokens:s.thinking};let o=await this.getMessageNodes(e),i=0;for(let r of o){let a=this.parseChatMessage(r.chat_message);i+=this.estimateTokens(a.text)}return{tokens:i,thinkingTokens:0}}async countInteractions(e){let t=await this.getMessageNodes(e),s=0;for(let o of t)this.parseChatMessage(o.chat_message).role==="user"&&s++;return s>0?s:this.countPromptHistory(e)}async countPromptHistory(e){let t=this.getDbPathFromVirtual(e),s=this.getSessionId(e);if(!s)return 0;let o=await this.getDb(t);if(!o)return 0;try{let i=o.exec("SELECT COUNT(*) as c FROM prompt_history WHERE session_id = ?",[s]),r=this.rowsToObjects(i);return r.length>0&&r[0].c||0}catch{return 0}}async getModelUsage(e){let s=(await this.readSession(e))?.model,o=s&&!O(s)?s:"unknown",i=await this.getMessageNodes(e),r={[o]:{inputTokens:0,outputTokens:0,sessions:0}};for(let a of i){let c=this.parseChatMessage(a.chat_message),d=this.estimateTokens(c.text);c.role==="user"?r[o].inputTokens+=d:c.role==="assistant"&&(r[o].outputTokens+=d)}return r}async getDailyFractions(e){let t=await this.getMessageNodes(e),s={},o=0;for(let r of t){if(!r.created_at)continue;let a=N(new Date(r.created_at*1e3));s[a]=(s[a]||0)+1,o++}if(o===0){let r=await this.readSession(e);return{[r?.last_activity_at?N(new Date(r.last_activity_at*1e3)):N(new Date)]:1}}let i={};for(let[r,a]of Object.entries(s))i[r]=a/o;return i}};var eo=S(require("fs")),mt=S(require("path"));var tt=S(require("fs")),re=S(require("path")),Xn=S(require("os"));var Ty=/\/partition-\d+\.jsonl$/,wy=["embeddings","index","cache","preferences","settings","config","workspacesessions","globalsessions","api.json"];function od(n){let e=n.toLowerCase();return wy.some(t=>e.includes(t))}function id(n){return ue(n).includes("/.copilot/session-state/")}function Zi(n){let e=ue(n);return e.includes("/.copilot/jb/")&&Ty.test(e)}var rd=S(require("fs"));async function Re(n){try{return await rd.promises.access(n),!0}catch{return!1}}var Yn=["Code","Code - Insiders","Code - Exploration","VSCodium","Cursor"],ld=new Set(["Public","Default","Default User","All Users"]);function Zn(){return Xn.platform()==="linux"&&(typeof process.env.WSL_DISTRO_NAME=="string"||typeof process.env.WSL_INTEROP=="string")}function en(){let n=Xn.platform(),e=Xn.homedir(),t=[];if(n==="win32"){let s=process.env.APPDATA||re.join(e,"AppData","Roaming");for(let o of Yn)t.push(re.join(s,o,"User"))}else if(n==="darwin")for(let s of Yn)t.push(re.join(e,"Library","Application Support",s,"User"));else{let s=process.env.XDG_CONFIG_HOME||re.join(e,".config");for(let o of Yn)t.push(re.join(s,o,"User"))}return t.push(re.join(e,".vscode-server","data","User"),re.join(e,".vscode-server-insiders","data","User"),re.join(e,".vscode-remote","data","User"),re.join("/tmp",".vscode-server","data","User"),re.join("/workspace",".vscode-server","data","User")),t}function er(n,e){n.some(s=>s.usersDir===e.usersDir&&s.username.toLowerCase()===e.username.toLowerCase())||n.push(e)}function cd(n){if(!n)return;let e=n.match(/^\/mnt\/([a-z])\/Users\/([^/]+)/);if(e)return{username:e[2],usersDir:`/mnt/${e[1]}/Users`}}var tr="/mnt/c/Users";async function My(){if(!Zn())return[];let n=[],e=[],t=cd(process.env.USERPROFILE);t&&er(e,t);try{let s=await tt.promises.readdir(tr,{withFileTypes:!0});for(let o of s){if(!o.isDirectory())continue;let i=o.name;ld.has(i)||i.startsWith(".")||er(e,{username:i,usersDir:tr})}}catch{if(e.length===0)return[]}for(let{username:s,usersDir:o}of e){let i=re.join(o,s,"AppData","Roaming");for(let r of Yn)n.push(re.join(i,r,"User"))}return n}function tl(){if(!Zn())return[];let n=[],e=cd(process.env.USERPROFILE);e&&er(n,e);try{let s=tt.readdirSync(tr,{withFileTypes:!0});for(let o of s)!o.isDirectory()||o.name.startsWith(".")||ld.has(o.name)||er(n,{username:o.name,usersDir:tr})}catch{}let t=[];for(let{username:s,usersDir:o}of n){let i=re.join(o,s,"AppData","Roaming");for(let r of Yn)t.push(re.join(i,r,"User"))}return t}async function ad(n,e,t,s){if(n.length===0)return;let o=0,i=Array.from({length:Math.min(t,n.length)},async()=>{for(;o<n.length;){let r=o++;try{await e(n[r],r)}catch(a){s?.(n[r],r,a)}}});await Promise.all(i)}async function ud(n,e,t){let s;try{s=await tt.promises.readdir(n,{withFileTypes:!0})}catch(o){t(`Could not scan directory ${n}: ${o}`);return}for(let o of s){let i=re.join(n,o.name);if(o.isDirectory()){await ud(i,e,t);continue}if(!(!o.name.endsWith(".json")&&!o.name.endsWith(".jsonl"))&&!od(o.name))try{(await tt.promises.stat(i)).size>0&&e.push(i)}catch{}}}var Qn=class{id="copilotchat";displayName="GitHub Copilot Chat";handles(e){return!1}getBackingPath(e){return e}async stat(e){return tt.promises.stat(e)}async getTokens(e){try{let t=await Pe(e,"copilotChatAdapter");return t===void 0?{tokens:0,thinkingTokens:0,actualTokens:0}:Hs(t)?{tokens:0,thinkingTokens:0,actualTokens:0}:e.endsWith(".jsonl")||Et(t)?Si(t):{tokens:0,thinkingTokens:0,actualTokens:0}}catch{return{tokens:0,thinkingTokens:0,actualTokens:0}}}async countInteractions(e){return 0}async getModelUsage(e){return{}}async getMeta(e){return{title:void 0,firstInteraction:null,lastInteraction:null}}getEditorRoot(e){let t=ue(e),s=t.lastIndexOf("/User/");return s>=0?t.substring(0,s+5):re.dirname(e)}getCandidatePaths(){let e=[];for(let t of en())e.push({path:t,source:"VS Code"});for(let t of tl())e.push({path:t,source:"VS Code (Windows via WSL)"});return e}async discover(e){let t=this.getCandidatePaths(),s=[],o=await this.resolveAllVSCodePaths(e);e(`\u{1F4C2} Considering ${o.length} candidate VS Code paths`);let i=await Promise.all(o.map(a=>Re(a).catch(()=>!1))),r=o.filter((a,c)=>i[c]);return e(`\u2705 Found ${r.length} of ${o.length} VS Code paths exist on disk`),await ad(r,async a=>{let c=re.basename(re.dirname(a));await this.scanWorkspaceStorage(a,c,s,e),await this.scanGlobalStorage(a,c,s,e)},4,(a,c,d)=>{e(`Failed to scan VS Code user path ${a}: ${d instanceof Error?d.message:String(d)}`)}),{sessionFiles:s,candidatePaths:t}}async resolveAllVSCodePaths(e){let t=en();if(Zn()){e("\u{1FA9F} WSL environment detected \u2014 probing Windows-side VS Code paths");let s=await My();s.length>0?(e(`\u{1FA9F} Adding ${s.length} Windows-side candidate paths from WSL`),t.push(...s)):e("\u{1FA9F} No Windows-side paths found (Windows drive may not be mounted)")}return t}async scanWorkspaceStorage(e,t,s,o){let i=re.join(e,"workspaceStorage"),r;try{r=await tt.promises.readdir(i)}catch{return}let a=["GitHub.copilot-chat","github.copilot-chat","GitHub.copilot","github.copilot"],c=["chatSessions","debug-logs","transcripts"],d=async g=>{try{let h=(await tt.promises.readdir(g)).filter(y=>y.endsWith(".json")||y.endsWith(".jsonl")).map(y=>re.join(g,y));h.length>0&&s.push(...h)}catch{}},p=0;await ad(r,async g=>{let h=re.join(i,g),y;try{y=await tt.promises.readdir(h)}catch{return}let b=new Set(y),T=s.length;b.has("chatSessions")&&await d(re.join(h,"chatSessions"));for(let E of a)if(b.has(E))for(let P of c)await d(re.join(h,E,P));s.length>T&&p++},8),p>0&&o(`\u{1F4C2} ${t}: found sessions in ${p}/${r.length} workspace dir(s)`)}async scanGlobalStorage(e,t,s,o){try{let i=re.join(e,"globalStorage","emptyWindowChatSessions"),r=(await tt.promises.readdir(i)).filter(a=>a.endsWith(".json")||a.endsWith(".jsonl")).map(a=>re.join(i,a));r.length>0&&s.push(...r)}catch{}for(let i of["GitHub.copilot-chat","github.copilot-chat","GitHub.copilot","github.copilot"]){let r=re.join(e,"globalStorage",i);try{await tt.promises.access(r),await ud(r,s,o)}catch{}}}};var sr="saoudrizwan.claude-dev",dd=new Set(["task","user_feedback"]),nr=class{_uiMessagesCache=new Map;getClineStorageDirs(){return en().map(e=>mt.join(e,"globalStorage",sr))}getClineTasksDirs(){return this.getClineStorageDirs().map(e=>mt.join(e,"tasks"))}isClineSessionFile(e){let t=J(e);return t.includes(`/${sr}/tasks/`)&&t.endsWith("/ui_messages.json")}getClineRootFromSessionFile(e){let s=e.replace(/\\/g,"/").toLowerCase().indexOf(`/${sr}/`.toLowerCase());return s!==-1?e.slice(0,s+1+sr.length):this.getClineStorageDirs()[0]}async getClineSessionFiles(){let e=[];for(let t of this.getClineTasksDirs()){let s;try{s=await eo.promises.readdir(t,{withFileTypes:!0})}catch{continue}for(let o of s){if(!o.isDirectory())continue;let i=mt.join(t,o.name,"ui_messages.json");try{await eo.promises.access(i),e.push(i)}catch{}}}return e}async readUiMessages(e){let t;try{t=await eo.promises.open(e,"r")}catch{return[]}try{let s=await t.stat(),o=this._uiMessagesCache.get(e);if(o&&o.mtimeMs===s.mtimeMs)return o.parsed;let i=[];try{let r=JSON.parse(await t.readFile("utf8"));Array.isArray(r)&&(i=r)}catch{}return this._uiMessagesCache.set(e,{mtimeMs:s.mtimeMs,parsed:i}),i}finally{await t.close()}}async getApiRequests(e){let t=await this.readUiMessages(e),s=[];for(let o of t){if(o.say!=="api_req_started"||typeof o.text!="string")continue;let i;try{i=JSON.parse(o.text)}catch{continue}typeof i?.tokensIn!="number"&&typeof i?.tokensOut!="number"||s.push({ts:typeof o.ts=="number"?o.ts:null,tokensIn:this.asNumber(i.tokensIn),tokensOut:this.asNumber(i.tokensOut),cacheWrites:this.asNumber(i.cacheWrites),cacheReads:this.asNumber(i.cacheReads),cost:this.asNumber(i.cost),model:o.modelInfo?.modelId??null,mode:o.modelInfo?.mode??null})}return s}async readTaskHistoryEntry(e){let t=mt.basename(mt.dirname(e)),s=mt.join(this.getClineRootFromSessionFile(e),"state","taskHistory.json");try{let o=JSON.parse(await eo.promises.readFile(s,"utf8"));return Array.isArray(o)?o.find(i=>i?.id===t):void 0}catch{return}}requestInputTokens(e){return e.tokensIn+e.cacheWrites+e.cacheReads}async getTokensFromClineSession(e){let t=await this.getApiRequests(e);if(t.length>0){let o=0;for(let i of t)o+=this.requestInputTokens(i)+i.tokensOut;return{tokens:o,thinkingTokens:0}}let s=await this.readTaskHistoryEntry(e);return s?{tokens:this.asNumber(s.tokensIn)+this.asNumber(s.tokensOut)+this.asNumber(s.cacheWrites)+this.asNumber(s.cacheReads),thinkingTokens:0}:{tokens:0,thinkingTokens:0}}async countClineInteractions(e){return(await this.readUiMessages(e)).filter(s=>s.type==="say"&&dd.has(s.say??"")).length}async getClineModelUsage(e){let t=await this.getApiRequests(e),s={};if(t.length>0){for(let i of t)this.addRequestToModelUsage(s,i.model??"unknown",this.requestInputTokens(i),i.tokensOut,i.cacheReads,i.cacheWrites);return s}let o=await this.readTaskHistoryEntry(e);if(o){let i=this.asNumber(o.cacheReads),r=this.asNumber(o.cacheWrites),a=this.asNumber(o.tokensIn)+i+r;this.addRequestToModelUsage(s,o.modelId??"unknown",a,this.asNumber(o.tokensOut),i,r)}return s}addRequestToModelUsage(e,t,s,o,i,r){O(t)||(e[t]||(e[t]={inputTokens:0,outputTokens:0,sessions:0}),e[t].inputTokens+=s,e[t].outputTokens+=o,i>0&&(e[t].cachedReadTokens=(e[t].cachedReadTokens??0)+i),r>0&&(e[t].cacheCreationTokens=(e[t].cacheCreationTokens??0)+r))}async getClineSessionMeta(e){let t=await this.readUiMessages(e),s=await this.readTaskHistoryEntry(e),o=t.find(a=>typeof a.ts=="number")?.ts??this.taskIdToEpochMs(e),i;for(let a of t)typeof a.ts=="number"&&(i=a.ts);let r=t.find(a=>a.say==="task");return{title:s?.task??r?.text??void 0,firstInteraction:o!==void 0?new Date(o).toISOString():null,lastInteraction:i!==void 0?new Date(i).toISOString():o!==void 0?new Date(o).toISOString():null,workspacePath:s?.cwdOnTaskInitialization}}taskIdToEpochMs(e){let t=mt.basename(mt.dirname(e)),s=Number(t);if(Number.isFinite(s)&&s>9466848e5&&s<41024448e5)return s}async getClineDailyFractions(e){let t=await this.getApiRequests(e),s=t.reduce((r,a)=>r+this.requestInputTokens(a)+a.tokensOut,0);if(t.length===0||s===0){let r=await this.getClineSessionMeta(e),a=r.firstInteraction?Date.parse(r.firstInteraction):NaN;return{[Number.isFinite(a)?N(new Date(a)):N(new Date)]:1}}let o=new Map;for(let r of t){let a=r.ts!==null?N(new Date(r.ts)):N(new Date);o.set(a,(o.get(a)??0)+this.requestInputTokens(r)+r.tokensOut)}let i={};for(let[r,a]of o.entries())i[r]=a/s;return i}async buildClineTurns(e){let t=await this.readUiMessages(e),s=[],o=null;for(let i of t){let r=i.say??i.ask??"";if(i.type==="say"&&dd.has(r)){o=this.newTurn(i),s.push(o);continue}o||(o=this.newTurn(void 0),s.push(o)),this.applyMessageToTurn(o,i,r)}return s}newTurn(e){return{userText:e?.text??"",assistantText:"",model:e?.modelInfo?.modelId??null,mode:e?.modelInfo?.mode??null,toolCalls:[],mcpTools:[],inputTokens:0,outputTokens:0,timestampMs:typeof e?.ts=="number"?e.ts:null}}applyMessageToTurn(e,t,s){switch(s){case"api_req_started":this.applyApiRequestToTurn(e,t);break;case"text":case"completion_result":this.appendAssistantText(e,t.text);break;case"tool":this.applyToolMessageToTurn(e,t);break;case"command":e.toolCalls.push({toolName:"executeCommand",arguments:t.text});break;case"command_output":{let o=e.toolCalls[e.toolCalls.length-1];o&&o.toolName==="executeCommand"&&(o.result=t.text);break}case"use_mcp_server":this.applyMcpMessageToTurn(e,t);break;case"browser_action_launch":case"browser_action":e.toolCalls.push({toolName:"browserAction",arguments:t.text});break;default:break}}applyApiRequestToTurn(e,t){if(t.modelInfo?.modelId&&(e.model=t.modelInfo.modelId),t.modelInfo?.mode&&(e.mode=t.modelInfo.mode),typeof t.text=="string")try{let s=JSON.parse(t.text);e.inputTokens+=this.asNumber(s?.tokensIn)+this.asNumber(s?.cacheWrites)+this.asNumber(s?.cacheReads),e.outputTokens+=this.asNumber(s?.tokensOut)}catch{}}appendAssistantText(e,t){if(!t)return;let s=t.indexOf("<tool_call>"),o=(s!==-1?t.slice(0,s):t).trim();o&&(e.assistantText+=(e.assistantText?`
|
|
71
|
+
FROM tool_call_state WHERE session_id = ?`,[s]);return this.rowsToObjects(i)}catch{return[]}}buildMainChain(e,t){if(e.length===0)return[];if(t==null)return[...e].sort((a,l)=>(a.created_at??0)-(l.created_at??0));let s=new Map;for(let a of e)s.set(a.node_id,a);let o=[],i=s.get(t),r=new Set;for(;i&&!r.has(i.node_id);)r.add(i.node_id),o.push(i),i=i.parent_node_id!==null?s.get(i.parent_node_id):void 0;return o.length===0?[...e].sort((a,l)=>(a.created_at??0)-(l.created_at??0)):o.reverse()}parseChatMessage(e){if(!e)return{role:"unknown",text:""};let t;try{t=JSON.parse(e)}catch{return{role:"unknown",text:e}}if(typeof t!="object"||t===null)return{role:"unknown",text:""};let s=t;return{role:this.extractRole(s),text:this.extractText(s)}}extractRole(e){let t=e.role;if(t==="user"||t==="assistant"||t==="tool")return t;let s=e.sessionUpdate??e.session_update;if(typeof s=="string"){if(s.startsWith("user_message"))return"user";if(s.startsWith("agent_message"))return"assistant";if(s.includes("tool_call"))return"tool"}return"unknown"}extractText(e){let t=e.content;return typeof t=="string"?t:Array.isArray(t)?t.filter(s=>typeof s=="object"&&s!==null).filter(s=>s.type==="text"&&typeof s.text=="string").map(s=>s.text).join(`
|
|
72
|
+
`):typeof e.text=="string"?e.text:""}estimateTokens(e){return e?Math.ceil(e.length/4):0}extractCogsTokens(e){let t=this.parseJsonObject(e);if(!t)return null;let s=er(t,["input_tokens","prompt_tokens","inputTokens"]),o=er(t,["output_tokens","completion_tokens","outputTokens"]),i=er(t,["reasoning_tokens","thinking_tokens","reasoningTokens"]);if(s===0&&o===0&&i===0){let r=er(t,["used","total_tokens","tokens_used"]);return r>0?{input:r,output:0,thinking:0}:null}return{input:s,output:o,thinking:i}}parseJsonObject(e){if(!e)return null;try{let t=JSON.parse(e);return typeof t=="object"&&t!==null?t:null}catch{return null}}async getTokens(e){let t=await this.readSession(e),s=this.extractCogsTokens(t?.cogs_json??null);if(s)return{tokens:s.input+s.output+s.thinking,thinkingTokens:s.thinking};let o=await this.getMessageNodes(e),i=0;for(let r of o){let a=this.parseChatMessage(r.chat_message);i+=this.estimateTokens(a.text)}return{tokens:i,thinkingTokens:0}}async countInteractions(e){let t=await this.getMessageNodes(e),s=0;for(let o of t)this.parseChatMessage(o.chat_message).role==="user"&&s++;return s>0?s:this.countPromptHistory(e)}async countPromptHistory(e){let t=this.getDbPathFromVirtual(e),s=this.getSessionId(e);if(!s)return 0;let o=await this.getDb(t);if(!o)return 0;try{let i=o.exec("SELECT COUNT(*) as c FROM prompt_history WHERE session_id = ?",[s]),r=this.rowsToObjects(i);return r.length>0&&r[0].c||0}catch{return 0}}async getModelUsage(e){let s=(await this.readSession(e))?.model,o=s&&!O(s)?s:"unknown",i=await this.getMessageNodes(e),r={[o]:{inputTokens:0,outputTokens:0,sessions:0}};for(let a of i){let l=this.parseChatMessage(a.chat_message),d=this.estimateTokens(l.text);l.role==="user"?r[o].inputTokens+=d:l.role==="assistant"&&(r[o].outputTokens+=d)}return r}async getDailyFractions(e){let t=await this.getMessageNodes(e),s={},o=0;for(let r of t){if(!r.created_at)continue;let a=N(new Date(r.created_at*1e3));s[a]=(s[a]||0)+1,o++}if(o===0){let r=await this.readSession(e);return{[r?.last_activity_at?N(new Date(r.last_activity_at*1e3)):N(new Date)]:1}}let i={};for(let[r,a]of Object.entries(s))i[r]=a/o;return i}};var oo=S(require("fs")),pt=S(require("path"));var tt=S(require("fs")),re=S(require("path")),so=S(require("os"));var Qy=/\/partition-\d+\.jsonl$/,Xy=["embeddings","index","cache","preferences","settings","config","workspacesessions","globalsessions","api.json"];function bd(n){let e=n.toLowerCase();return Xy.some(t=>e.includes(t))}function Cd(n){return ue(n).includes("/.copilot/session-state/")}function nr(n){let e=ue(n);return e.includes("/.copilot/jb/")&&Qy.test(e)}var kd=S(require("fs"));async function Ue(n){try{return await kd.promises.access(n),!0}catch{return!1}}var eo=["Code","Code - Insiders","Code - Exploration","VSCodium","Cursor"],Td=new Set(["Public","Default","Default User","All Users"]);function no(){return so.platform()==="linux"&&(typeof process.env.WSL_DISTRO_NAME=="string"||typeof process.env.WSL_INTEROP=="string")}function nn(){let n=so.platform(),e=so.homedir(),t=[];if(n==="win32"){let s=process.env.APPDATA||re.join(e,"AppData","Roaming");for(let o of eo)t.push(re.join(s,o,"User"))}else if(n==="darwin")for(let s of eo)t.push(re.join(e,"Library","Application Support",s,"User"));else{let s=process.env.XDG_CONFIG_HOME||re.join(e,".config");for(let o of eo)t.push(re.join(s,o,"User"))}return t.push(re.join(e,".vscode-server","data","User"),re.join(e,".vscode-server-insiders","data","User"),re.join(e,".vscode-remote","data","User"),re.join("/tmp",".vscode-server","data","User"),re.join("/workspace",".vscode-server","data","User")),t}function or(n,e){n.some(s=>s.usersDir===e.usersDir&&s.username.toLowerCase()===e.username.toLowerCase())||n.push(e)}function wd(n){if(!n)return;let e=n.match(/^\/mnt\/([a-z])\/Users\/([^/]+)/);if(e)return{username:e[2],usersDir:`/mnt/${e[1]}/Users`}}var ir="/mnt/c/Users";async function Zy(){if(!no())return[];let n=[],e=[],t=wd(process.env.USERPROFILE);t&&or(e,t);try{let s=await tt.promises.readdir(ir,{withFileTypes:!0});for(let o of s){if(!o.isDirectory())continue;let i=o.name;Td.has(i)||i.startsWith(".")||or(e,{username:i,usersDir:ir})}}catch{if(e.length===0)return[]}for(let{username:s,usersDir:o}of e){let i=re.join(o,s,"AppData","Roaming");for(let r of eo)n.push(re.join(i,r,"User"))}return n}function cl(){if(!no())return[];let n=[],e=wd(process.env.USERPROFILE);e&&or(n,e);try{let s=tt.readdirSync(ir,{withFileTypes:!0});for(let o of s)!o.isDirectory()||o.name.startsWith(".")||Td.has(o.name)||or(n,{username:o.name,usersDir:ir})}catch{}let t=[];for(let{username:s,usersDir:o}of n){let i=re.join(o,s,"AppData","Roaming");for(let r of eo)t.push(re.join(i,r,"User"))}return t}async function Sd(n,e,t,s){if(n.length===0)return;let o=0,i=Array.from({length:Math.min(t,n.length)},async()=>{for(;o<n.length;){let r=o++;try{await e(n[r],r)}catch(a){s?.(n[r],r,a)}}});await Promise.all(i)}async function Md(n,e,t){let s;try{s=await tt.promises.readdir(n,{withFileTypes:!0})}catch(o){t(`Could not scan directory ${n}: ${o}`);return}for(let o of s){let i=re.join(n,o.name);if(o.isDirectory()){await Md(i,e,t);continue}if(!(!o.name.endsWith(".json")&&!o.name.endsWith(".jsonl"))&&!bd(o.name))try{(await tt.promises.stat(i)).size>0&&e.push(i)}catch{}}}var to=class{id="copilotchat";displayName="GitHub Copilot Chat";handles(e){return!1}getBackingPath(e){return e}async stat(e){return tt.promises.stat(e)}async getTokens(e){try{let t=await Pe(e,"copilotChatAdapter");return t===void 0?{tokens:0,thinkingTokens:0,actualTokens:0}:Vs(t)?{tokens:0,thinkingTokens:0,actualTokens:0}:e.endsWith(".jsonl")||Ut(t)?vi(t):{tokens:0,thinkingTokens:0,actualTokens:0}}catch{return{tokens:0,thinkingTokens:0,actualTokens:0}}}async countInteractions(e){return 0}async getModelUsage(e){return{}}async getMeta(e){return{title:void 0,firstInteraction:null,lastInteraction:null}}getEditorRoot(e){let t=ue(e),s=t.lastIndexOf("/User/");return s>=0?t.substring(0,s+5):re.dirname(e)}getCandidatePaths(){let e=[];for(let t of nn())e.push({path:t,source:"VS Code"});for(let t of cl())e.push({path:t,source:"VS Code (Windows via WSL)"});return e}async discover(e){let t=this.getCandidatePaths(),s=[],o=await this.resolveAllVSCodePaths(e);e(`\u{1F4C2} Considering ${o.length} candidate VS Code paths`);let i=await Promise.all(o.map(a=>Ue(a).catch(()=>!1))),r=o.filter((a,l)=>i[l]);return e(`\u2705 Found ${r.length} of ${o.length} VS Code paths exist on disk`),await Sd(r,async a=>{let l=re.basename(re.dirname(a));await this.scanWorkspaceStorage(a,l,s,e),await this.scanGlobalStorage(a,l,s,e)},4,(a,l,d)=>{e(`Failed to scan VS Code user path ${a}: ${d instanceof Error?d.message:String(d)}`)}),{sessionFiles:s,candidatePaths:t}}async resolveAllVSCodePaths(e){let t=nn();if(no()){e("\u{1FA9F} WSL environment detected \u2014 probing Windows-side VS Code paths");let s=await Zy();s.length>0?(e(`\u{1FA9F} Adding ${s.length} Windows-side candidate paths from WSL`),t.push(...s)):e("\u{1FA9F} No Windows-side paths found (Windows drive may not be mounted)")}return t}async scanWorkspaceStorage(e,t,s,o){let i=re.join(e,"workspaceStorage"),r;try{r=await tt.promises.readdir(i)}catch{return}let a=["GitHub.copilot-chat","github.copilot-chat","GitHub.copilot","github.copilot"],l=["chatSessions","debug-logs","transcripts"],d=async g=>{try{let h=(await tt.promises.readdir(g)).filter(y=>y.endsWith(".json")||y.endsWith(".jsonl")).map(y=>re.join(g,y));h.length>0&&s.push(...h)}catch{}},p=0;await Sd(r,async g=>{let h=re.join(i,g),y;try{y=await tt.promises.readdir(h)}catch{return}let b=new Set(y),T=s.length;b.has("chatSessions")&&await d(re.join(h,"chatSessions"));for(let E of a)if(b.has(E))for(let P of l)await d(re.join(h,E,P));s.length>T&&p++},8),p>0&&o(`\u{1F4C2} ${t}: found sessions in ${p}/${r.length} workspace dir(s)`)}async scanGlobalStorage(e,t,s,o){try{let i=re.join(e,"globalStorage","emptyWindowChatSessions"),r=(await tt.promises.readdir(i)).filter(a=>a.endsWith(".json")||a.endsWith(".jsonl")).map(a=>re.join(i,a));r.length>0&&s.push(...r)}catch{}for(let i of["GitHub.copilot-chat","github.copilot-chat","GitHub.copilot","github.copilot"]){let r=re.join(e,"globalStorage",i);try{await tt.promises.access(r),await Md(r,s,o)}catch{}}}};var rr="saoudrizwan.claude-dev",vd=new Set(["task","user_feedback"]),ar=class{_uiMessagesCache=new Map;getClineStorageDirs(){return nn().map(e=>pt.join(e,"globalStorage",rr))}getClineTasksDirs(){return this.getClineStorageDirs().map(e=>pt.join(e,"tasks"))}isClineSessionFile(e){let t=J(e);return t.includes(`/${rr}/tasks/`)&&t.endsWith("/ui_messages.json")}getClineRootFromSessionFile(e){let s=e.replace(/\\/g,"/").toLowerCase().indexOf(`/${rr}/`.toLowerCase());return s!==-1?e.slice(0,s+1+rr.length):this.getClineStorageDirs()[0]}async getClineSessionFiles(){let e=[];for(let t of this.getClineTasksDirs()){let s;try{s=await oo.promises.readdir(t,{withFileTypes:!0})}catch{continue}for(let o of s){if(!o.isDirectory())continue;let i=pt.join(t,o.name,"ui_messages.json");try{await oo.promises.access(i),e.push(i)}catch{}}}return e}async readUiMessages(e){let t;try{t=await oo.promises.open(e,"r")}catch{return[]}try{let s=await t.stat(),o=this._uiMessagesCache.get(e);if(o&&o.mtimeMs===s.mtimeMs)return o.parsed;let i=[];try{let r=JSON.parse(await t.readFile("utf8"));Array.isArray(r)&&(i=r)}catch{}return this._uiMessagesCache.set(e,{mtimeMs:s.mtimeMs,parsed:i}),i}finally{await t.close()}}async getApiRequests(e){let t=await this.readUiMessages(e),s=[];for(let o of t){if(o.say!=="api_req_started"||typeof o.text!="string")continue;let i;try{i=JSON.parse(o.text)}catch{continue}typeof i?.tokensIn!="number"&&typeof i?.tokensOut!="number"||s.push({ts:typeof o.ts=="number"?o.ts:null,tokensIn:this.asNumber(i.tokensIn),tokensOut:this.asNumber(i.tokensOut),cacheWrites:this.asNumber(i.cacheWrites),cacheReads:this.asNumber(i.cacheReads),cost:this.asNumber(i.cost),model:o.modelInfo?.modelId??null,mode:o.modelInfo?.mode??null})}return s}async readTaskHistoryEntry(e){let t=pt.basename(pt.dirname(e)),s=pt.join(this.getClineRootFromSessionFile(e),"state","taskHistory.json");try{let o=JSON.parse(await oo.promises.readFile(s,"utf8"));return Array.isArray(o)?o.find(i=>i?.id===t):void 0}catch{return}}requestInputTokens(e){return e.tokensIn+e.cacheWrites+e.cacheReads}async getTokensFromClineSession(e){let t=await this.getApiRequests(e);if(t.length>0){let o=0;for(let i of t)o+=this.requestInputTokens(i)+i.tokensOut;return{tokens:o,thinkingTokens:0}}let s=await this.readTaskHistoryEntry(e);return s?{tokens:this.asNumber(s.tokensIn)+this.asNumber(s.tokensOut)+this.asNumber(s.cacheWrites)+this.asNumber(s.cacheReads),thinkingTokens:0}:{tokens:0,thinkingTokens:0}}async countClineInteractions(e){return(await this.readUiMessages(e)).filter(s=>s.type==="say"&&vd.has(s.say??"")).length}async getClineModelUsage(e){let t=await this.getApiRequests(e),s={};if(t.length>0){for(let i of t)this.addRequestToModelUsage(s,i.model??"unknown",this.requestInputTokens(i),i.tokensOut,i.cacheReads,i.cacheWrites);return s}let o=await this.readTaskHistoryEntry(e);if(o){let i=this.asNumber(o.cacheReads),r=this.asNumber(o.cacheWrites),a=this.asNumber(o.tokensIn)+i+r;this.addRequestToModelUsage(s,o.modelId??"unknown",a,this.asNumber(o.tokensOut),i,r)}return s}addRequestToModelUsage(e,t,s,o,i,r){O(t)||(e[t]||(e[t]={inputTokens:0,outputTokens:0,sessions:0}),e[t].inputTokens+=s,e[t].outputTokens+=o,i>0&&(e[t].cachedReadTokens=(e[t].cachedReadTokens??0)+i),r>0&&(e[t].cacheCreationTokens=(e[t].cacheCreationTokens??0)+r))}async getClineSessionMeta(e){let t=await this.readUiMessages(e),s=await this.readTaskHistoryEntry(e),o=t.find(a=>typeof a.ts=="number")?.ts??this.taskIdToEpochMs(e),i;for(let a of t)typeof a.ts=="number"&&(i=a.ts);let r=t.find(a=>a.say==="task");return{title:s?.task??r?.text??void 0,firstInteraction:o!==void 0?new Date(o).toISOString():null,lastInteraction:i!==void 0?new Date(i).toISOString():o!==void 0?new Date(o).toISOString():null,workspacePath:s?.cwdOnTaskInitialization}}taskIdToEpochMs(e){let t=pt.basename(pt.dirname(e)),s=Number(t);if(Number.isFinite(s)&&s>9466848e5&&s<41024448e5)return s}async getClineDailyFractions(e){let t=await this.getApiRequests(e),s=t.reduce((r,a)=>r+this.requestInputTokens(a)+a.tokensOut,0);if(t.length===0||s===0){let r=await this.getClineSessionMeta(e),a=r.firstInteraction?Date.parse(r.firstInteraction):NaN;return{[Number.isFinite(a)?N(new Date(a)):N(new Date)]:1}}let o=new Map;for(let r of t){let a=r.ts!==null?N(new Date(r.ts)):N(new Date);o.set(a,(o.get(a)??0)+this.requestInputTokens(r)+r.tokensOut)}let i={};for(let[r,a]of o.entries())i[r]=a/s;return i}async buildClineTurns(e){let t=await this.readUiMessages(e),s=[],o=null;for(let i of t){let r=i.say??i.ask??"";if(i.type==="say"&&vd.has(r)){o=this.newTurn(i),s.push(o);continue}o||(o=this.newTurn(void 0),s.push(o)),this.applyMessageToTurn(o,i,r)}return s}newTurn(e){return{userText:e?.text??"",assistantText:"",model:e?.modelInfo?.modelId??null,mode:e?.modelInfo?.mode??null,toolCalls:[],mcpTools:[],inputTokens:0,outputTokens:0,timestampMs:typeof e?.ts=="number"?e.ts:null}}applyMessageToTurn(e,t,s){switch(s){case"api_req_started":this.applyApiRequestToTurn(e,t);break;case"text":case"completion_result":this.appendAssistantText(e,t.text);break;case"tool":this.applyToolMessageToTurn(e,t);break;case"command":e.toolCalls.push({toolName:"executeCommand",arguments:t.text});break;case"command_output":{let o=e.toolCalls[e.toolCalls.length-1];o&&o.toolName==="executeCommand"&&(o.result=t.text);break}case"use_mcp_server":this.applyMcpMessageToTurn(e,t);break;case"browser_action_launch":case"browser_action":e.toolCalls.push({toolName:"browserAction",arguments:t.text});break;default:break}}applyApiRequestToTurn(e,t){if(t.modelInfo?.modelId&&(e.model=t.modelInfo.modelId),t.modelInfo?.mode&&(e.mode=t.modelInfo.mode),typeof t.text=="string")try{let s=JSON.parse(t.text);e.inputTokens+=this.asNumber(s?.tokensIn)+this.asNumber(s?.cacheWrites)+this.asNumber(s?.cacheReads),e.outputTokens+=this.asNumber(s?.tokensOut)}catch{}}appendAssistantText(e,t){if(!t)return;let s=t.indexOf("<tool_call>"),o=(s!==-1?t.slice(0,s):t).trim();o&&(e.assistantText+=(e.assistantText?`
|
|
73
73
|
|
|
74
|
-
`:"")+o)}applyToolMessageToTurn(e,t){if(typeof t.text=="string")try{let s=JSON.parse(t.text);e.toolCalls.push({toolName:typeof s?.tool=="string"?s.tool:"tool",arguments:typeof s?.path=="string"?s.path:void 0,result:typeof s?.content=="string"?s.content:void 0})}catch{e.toolCalls.push({toolName:"tool",arguments:t.text})}}applyMcpMessageToTurn(e,t){let s="unknown",o="unknown";if(typeof t.text=="string")try{let i=JSON.parse(t.text);typeof i?.serverName=="string"&&(s=i.serverName),typeof i?.toolName=="string"&&(o=i.toolName)}catch{}e.mcpTools.push({server:s,tool:o}),e.toolCalls.push({toolName:`${s}.${o}`})}asNumber(e){return typeof e=="number"&&Number.isFinite(e)?e:0}};var st=S(require("fs")),
|
|
74
|
+
`:"")+o)}applyToolMessageToTurn(e,t){if(typeof t.text=="string")try{let s=JSON.parse(t.text);e.toolCalls.push({toolName:typeof s?.tool=="string"?s.tool:"tool",arguments:typeof s?.path=="string"?s.path:void 0,result:typeof s?.content=="string"?s.content:void 0})}catch{e.toolCalls.push({toolName:"tool",arguments:t.text})}}applyMcpMessageToTurn(e,t){let s="unknown",o="unknown";if(typeof t.text=="string")try{let i=JSON.parse(t.text);typeof i?.serverName=="string"&&(s=i.serverName),typeof i?.toolName=="string"&&(o=i.toolName)}catch{}e.mcpTools.push({server:s,tool:o}),e.toolCalls.push({toolName:`${s}.${o}`})}asNumber(e){return typeof e=="number"&&Number.isFinite(e)?e:0}};var st=S(require("fs")),Bt=S(require("path")),Dd=S(require("os")),Ed=S(Dt());var Pd=/^rollout-.*\.jsonl$/i,e_=/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.jsonl$/i,Ad=/\/state_\d+\.sqlite#/i,t_="state_5.sqlite",xd=/^\s*<(user_instructions|environment_context|turn_context|permissions|ide_context|system_instructions)\b/i,lr=class n{_sqlJsModule=null;_sqlJsInitPromise=null;_dbCache=new Map;_dbCacheInflight=new Map;_rolloutCache=new Map;static ROLLOUT_CACHE_MAX=64;_codexHomeOverride=null;dispose(){for(let e of this._dbCache.values())try{e.db.close()}catch{}this._dbCache.clear(),this._dbCacheInflight.clear(),this._rolloutCache.clear(),this._sqlJsInitPromise=null}getCodexHome(){if(this._codexHomeOverride)return this._codexHomeOverride;let e=process.env.CODEX_HOME;return e&&e.trim()?e:Bt.join(Dd.homedir(),".codex")}setCodexHomeOverrideForTests(e){this._codexHomeOverride=e,this._rolloutCache.clear()}getSessionsDir(){return Bt.join(this.getCodexHome(),"sessions")}getArchivedSessionsDir(){return Bt.join(this.getCodexHome(),"archived_sessions")}getStateDbPath(){let e=this.getCodexHome(),t=null;try{for(let s of st.readdirSync(e)){let o=/^state_(\d+)\.sqlite$/i.exec(s);if(o){let i=parseInt(o[1],10);(!t||i>t.n)&&(t={n:i,name:s})}}}catch{}return Bt.join(e,t?t.name:t_)}isCodexCliSessionFile(e){let t=ue(e).toLowerCase(),s=ue(this.getCodexHome()).toLowerCase();return t.includes("/.codex/")||t.startsWith(s+"/")?Ad.test(t)?!0:Pd.test(Bt.basename(t)):!1}isVirtualThreadPath(e){return Ad.test(ue(e))}getDbPathFromVirtual(e){let t=e.lastIndexOf(".sqlite#");return t===-1?e:e.substring(0,t+7)}getThreadId(e){let t=e.lastIndexOf(".sqlite#");return t===-1?null:e.substring(t+8)||null}virtualPath(e){return`${this.getStateDbPath()}#${e}`}getBackingPath(e){return this.isVirtualThreadPath(e)?this.getDbPathFromVirtual(e):e}async statSessionFile(e){return st.promises.stat(this.getBackingPath(e))}async initSqlJs(){return this._sqlJsModule?this._sqlJsModule:(this._sqlJsInitPromise||(this._sqlJsInitPromise=(async()=>{let e=Bt.join(__dirname,"sql-wasm.wasm"),t;try{t=await st.promises.readFile(e)}catch{}let s=await(0,Ed.default)(t?{wasmBinary:t.buffer}:void 0);return this._sqlJsModule=s,s})().catch(e=>{throw this._sqlJsInitPromise=null,e})),this._sqlJsInitPromise)}closeDb(e){try{e.close()}catch{}}isMissingFileError(e){let t=e?.code;return t==="ENOENT"||t==="ENOTDIR"}async statDb(e){try{return await st.promises.stat(e)}catch(t){return this.isMissingFileError(t)&&this._dbCache.has(e)&&(this.closeDb(this._dbCache.get(e).db),this._dbCache.delete(e)),null}}sameDbStats(e,t){return e.mtimeMs===t.mtimeMs&&e.size===t.size}async refreshDb(e,t){let s;try{let r=await this.initSqlJs(),a=await st.promises.readFile(e);s=new r.Database(a)}catch{return this._dbCache.get(e)?.db??null}let o=await this.statDb(e);if(!o||!this.sameDbStats(t,o))return this.closeDb(s),this._dbCache.get(e)?.db??null;let i=this._dbCache.get(e);return i&&this.closeDb(i.db),this._dbCache.set(e,{db:s,mtimeMs:t.mtimeMs,size:t.size}),s}async getDb(e){let t=await this.statDb(e);if(!t)return this._dbCache.get(e)?.db??null;let s=this._dbCache.get(e);if(s&&s.mtimeMs===t.mtimeMs&&s.size===t.size)return s.db;let o=`${e}:${t.mtimeMs}:${t.size}`,i=this._dbCacheInflight.get(o);if(i)return i;let r=this.refreshDb(e,t);this._dbCacheInflight.set(o,r);try{return await r}finally{this._dbCacheInflight.get(o)===r&&this._dbCacheInflight.delete(o)}}rowsToObjects(e){if(e.length===0)return[];let{columns:t,values:s}=e[0];return s.map(o=>{let i={};return t.forEach((r,a)=>{i[r]=o[a]}),i})}async readAllThreads(){let e=await this.getDb(this.getStateDbPath());if(!e)return[];try{let t=e.exec(`SELECT id, rollout_path, created_at, updated_at, cwd, title, tokens_used,
|
|
75
75
|
has_user_event, archived, first_user_message, model
|
|
76
76
|
FROM threads ORDER BY updated_at DESC`);return this.rowsToObjects(t)}catch{return[]}}async readThread(e){let t=this.getThreadId(e);if(!t)return null;let s=await this.getDb(this.getDbPathFromVirtual(e));if(!s)return null;try{let o=s.exec(`SELECT id, rollout_path, created_at, updated_at, cwd, title, tokens_used,
|
|
77
77
|
has_user_event, archived, first_user_message, model
|
|
78
|
-
FROM threads WHERE id = ?`,[t]),i=this.rowsToObjects(o);return i.length>0?i[0]:null}catch{return null}}toMillis(e){return typeof e!="number"||!Number.isFinite(e)||e<=0?null:e>1e12?e:e*1e3}async collectRolloutFiles(e,t=0,s=[]){if(t>5)return s;let o;try{o=await st.promises.readdir(e,{withFileTypes:!0})}catch{return s}for(let i of o){let r=
|
|
79
|
-
`):""}extractTokenSnapshot(e,t){let s=e.info,o=typeof s=="object"&&s!==null?s.total_token_usage??s:e;if(typeof o!="object"||o===null)return null;let i=o,r=d=>typeof i[d]=="number"&&Number.isFinite(i[d])?i[d]:0,a=r("input_tokens"),
|
|
80
|
-
`)){let i=o.trim();if(i)try{let r=JSON.parse(i);if(typeof r!="object"||r===null)continue;let a=this.normalizeRolloutLine(r);a&&s.push(a)}catch{}}return s}async getRolloutSummary(e){let t=null;try{t=await st.promises.stat(e)}catch{}if(t){let o=this._rolloutCache.get(e);if(o&&o.mtimeMs===t.mtimeMs&&o.size===t.size)return o.summary}let s=this.buildRolloutSummary(await this.readRolloutLines(e));if(t){if(this._rolloutCache.size>=n.ROLLOUT_CACHE_MAX){let o=this._rolloutCache.keys().next().value;o!==void 0&&this._rolloutCache.delete(o)}this._rolloutCache.set(e,{mtimeMs:t.mtimeMs,size:t.size,summary:s})}return s}buildRolloutSummary(e){let t={sessionId:null,cwd:null,firstTimestamp:null,lastTimestamp:null,userMessages:[],assistantMessages:[],toolCalls:[],tokenSnapshots:[],reasoningChars:0,models:[]},s="unknown";for(let o of e)o.timestamp&&(t.firstTimestamp||(t.firstTimestamp=o.timestamp),t.lastTimestamp=o.timestamp),s=this.applyRolloutLine(o,t,s);return t.userMessages.length===0&&(t.userMessages=this.countEventMsgUserMessages(e)),t}applyRolloutLine(e,t,s){if(e.kind==="session_meta"){let o=e.payload;return typeof o.id=="string"&&(t.sessionId=o.id),typeof o.cwd=="string"&&(t.cwd=o.cwd),s}if(e.kind==="turn_context"){let o=e.payload.model;return typeof o=="string"&&o?(t.models.includes(o)||t.models.push(o),o):s}return e.kind==="response_item"?this.applyResponseItem(e,t,s):e.kind==="event_msg"&&this.applyEventMsg(e,t,s),s}computeTokenTotals(e){let t={},s=0,o=null;for(let r of e.tokenSnapshots){let a=o?Math.max(0,r.input-o.input):r.input,
|
|
81
|
-
`)[0].slice(0,100)||void 0,firstInteraction:t.firstTimestamp,lastInteraction:t.lastTimestamp,workspacePath:t.cwd||void 0}}async getThreadMeta(e){let t=await this.readThread(e),s=this.toMillis(t?.created_at),o=this.toMillis(t?.updated_at);return{title:t?.title||t?.first_user_message?.slice(0,100)||void 0,firstInteraction:s?new Date(s).toISOString():null,lastInteraction:o?new Date(o).toISOString():null,workspacePath:t?.cwd||void 0}}async getDailyFractions(e){if(this.isVirtualThreadPath(e)){let r=await this.readThread(e),a=this.toMillis(r?.updated_at)??this.toMillis(r?.created_at);return{[N(a?new Date(a):new Date)]:1}}let t=await this.getRolloutSummary(e),s={},o=0;for(let r of[...t.userMessages,...t.assistantMessages]){if(!r.timestamp)continue;let a=new Date(r.timestamp);if(isNaN(a.getTime()))continue;let
|
|
82
|
-
`);return Iy(e,t),Uy(e,s),Oy(e,o),Fy(e,t,s),e}function Iy(n,e){for(let[t,s]of Object.entries(Ey))for(let o of s)o.test(e)&&(n[t]+=2)}function Uy(n,e){for(let t of e)for(let[s,o]of Object.entries(Dy))o.some(i=>i.test(t))&&(n[s]+=1)}function Oy(n,e){/\b(git (commit|push|pull|merge|rebase|checkout|cherry-pick|tag|branch)|gh pr)\b/i.test(e)&&(n["Git Ops"]+=3),/\b(npm (run )?(test|lint|build)|pnpm (test|build)|yarn (test|build)|pytest|vitest|jest|mocha|cypress)\b/i.test(e)&&(n.Testing+=2),/\b(npm (run )?build|pnpm build|yarn build|docker (build|push|run)|kubectl|helm|terraform|vercel|netlify)\b/i.test(e)&&(n["Build/Deploy"]+=2)}function Fy(n,e,t){t.length===0&&!e&&(n.Conversation+=1),t.length===0&&e&&Object.values(n).every(s=>s===0)&&(n.Conversation+=1)}function Ny(n){return _d(Ry(n))}function bd(n){let e=sl();if(n.length===0)return e.Conversation=1,{primaryCategory:"Conversation",categoryShares:e,turnCategories:[],turnCount:0};let t=n.map(Ny);for(let o of t)e[o]+=1;for(let o of es)e[o]=e[o]/n.length;return{primaryCategory:_d(e),categoryShares:e,turnCategories:t,turnCount:n.length}}function vs(){let n=sl();return n.Conversation=1,{primaryCategory:"Conversation",categoryShares:n,turnCategories:[],turnCount:0}}var Ly=/^(task|agent|read_agent|write_agent|list_agents|create_session|open_pr_session|open_issue_session|fork_session)$|subagent|sub[-_]?agent|agent[-_]?spawn|spawn[-_]?(task|agent)|delegate/i;function Cd(n){let e=0;for(let[t,s]of Object.entries(n))Ly.test(t)&&(e+=s);return e}var jy=new Set(yd.map(n=>n.toLowerCase()));function W(n){return n.toLocaleString("en-US")}function Lt(n){return(n.cli??0)+(n.cliApp??0)+(n.claudeDesktop??0)+(n.claudeVsCode??0)}function ye(n,e){return Math.max(n,e)}var Gy={1:"Stage 1: AI Skeptic",2:"Stage 2: AI Explorer",3:"Stage 3: AI Collaborator",4:"Stage 4: AI Strategist"},We={promptEngineering:{stage2MinInteractions:5,stage2MinAvgTurns:3,stage3MinAvgTurns:5,stage3MinInteractions:30,stage3MinSlashCommands:2,stage4MinInteractions:100,stage4MinSlashCommands:3},contextEngineering:{stage2MinTotalRefs:1,stage3MinRefTypes:3,stage3MinTotalRefs:10,stage4MinRefTypes:5,stage4MinTotalRefs:30},agentic:{stage3MinAvgFilesPerSession:3,stage3MinAgentInteractions:10,stage3MinNonAutoTools:3,stage4MinAgentInteractions:50,stage4MinNonAutoTools:5,stage4MinMultiFileEdits:20,stage3MinMultiAgentParents:1,stage4MinMultiAgentParents:3,multiAgentMinChildren:2,stage3MinDelegationSessions:2,stage4MinDelegationSessions:5},toolUsage:{stage3MinAdvancedTools:2,stage4MinMcpServers:2},customization:{stage3MinCustomizationRate:.3,stage3MinCustomizedRepos:2,stage4MinCustomizationRate:.7,stage4MinCustomizedRepos:3,stage3MinUniqueModels:3,stage4MinUniqueModels:5},workflowIntegration:{stage2MinSessions:3,stage2MinApplyRatePct:50,stage3MinModesUsed:2,hasExplicitContextMinRefs:10,stage3MinContextRefs:20,stage4MinSessions:15}};function By(n){let e=[...n].sort((o,i)=>o-i),t=Math.floor(e.length/2);return e.length%2===0?Math.round((e[t-1]+e[t])/2):e[t]}var qy=["explain","fix","tests","doc","generate","optimize","new","newNotebook","search","fixTestFailure","setupTests"],zy=["review","bug","think","compact","pr_comments"];function Wy(n){return[...qy.filter(e=>(n[e]??0)>0),...zy.filter(e=>(n[`__slash__${e}`]??0)>0)]}function Sd(n){return Object.keys(n).filter(e=>!jy.has(e.toLowerCase())&&!e.startsWith("__slash__")).length}function $y(n,e,t){return n>0||e>0||t>0}function Hy(n,e){return n>0||e>0}function Jy(n,e,t){let s=We.promptEngineering;return n>=s.stage3MinInteractions&&(e.length>=s.stage3MinSlashCommands||t)}function Ky(n,e,t,s){let o=We.promptEngineering;return n>=o.stage4MinInteractions&&e&&(t||s.length>=o.stage4MinSlashCommands)}function Vy(n,e,t){let s=[];return n||s.push("Try [agent mode](https://code.visualstudio.com/docs/copilot/agents/overview) for multi-file changes \u2014 [\u25B6 Agent Mode video](https://tech.hub.ms/github-copilot/videos/agent-mode)"),e.length<t.stage3MinSlashCommands&&s.push("Use [slash commands](https://code.visualstudio.com/docs/copilot/chat/copilot-chat#_add-context-to-your-prompts) like /explain, /fix, or /tests to give structured prompts"),s}function Yy(n,e,t,s,o){let i=[];return n||i.push("Try [agent mode](https://code.visualstudio.com/docs/copilot/agents/overview) for autonomous, multi-step coding tasks"),e||i.push("Experiment with [different models](https://code.visualstudio.com/docs/copilot/chat/copilot-chat#_choose-a-language-model) for different tasks - use fast models for simple queries and reasoning models for complex problems \u2014 [\u25B6 Model selection video](https://tech.hub.ms/github-copilot/videos/model-selection)"),s===0?i.push("Try the Auto model for cost-sensitive tasks so Copilot can pick the most efficient model for you"):s<.5&&i.push("Use the Auto model more often when you want Copilot to balance quality and cost for you"),t.length<o.stage4MinSlashCommands&&n&&e&&i.push("Explore more [slash commands](https://code.visualstudio.com/docs/copilot/chat/copilot-chat#_add-context-to-your-prompts) like /explain, /tests, or /doc to diversify your prompting"),i}function Qy(n,e,t,s,o){let i=We.promptEngineering,r=[];return n<2&&r.push("Try asking Copilot a question using the Chat panel \u2014 [\u25B6 Chat in IDE video](https://tech.hub.ms/github-copilot/videos/chat-in-ide)"),n<3&&r.push(...Vy(e,s,i)),n<4&&r.push(...Yy(e,t,s,o,i)),r}function Xy(n,e,t){if(!n.conversationPatterns)return t;let s=We.promptEngineering,o=Math.round(n.conversationPatterns.multiTurnSessions/Math.max(1,n.sessions)*100);return n.conversationPatterns.multiTurnSessions>0&&e.push(`${W(n.conversationPatterns.multiTurnSessions)} multi-turn sessions (${o}%)`),n.conversationPatterns.avgTurnsPerSession>=s.stage2MinAvgTurns&&(e.push(`Avg ${n.conversationPatterns.avgTurnsPerSession.toFixed(1)} exchanges per session`),t=ye(t,2)),n.conversationPatterns.avgTurnsPerSession>=s.stage3MinAvgTurns&&(t=ye(t,3)),t}function Zy(n){let{stage:e,evidence:t,usedSlashCommands:s,hasModelSwitching:o,hasAgentMode:i,autoUsageRatio:r}=o_(n);return{stage:e,evidence:t,tips:Qy(e,i,o,s,r)}}function e_(n,e){let t=e.modeUsage.ask+e.modeUsage.edit+e.modeUsage.agent+Lt(e.modeUsage);t>0&&n.push(`${W(t)} total interactions`),e.modeUsage.ask>0&&n.push(`${W(e.modeUsage.ask)} ask-mode conversations`),e.modeUsage.agent>0&&n.push(`${W(e.modeUsage.agent)} agent-mode interactions`),Lt(e.modeUsage)>0&&n.push(`${W(Lt(e.modeUsage))} CLI interactions`)}function t_(n,e,t){e.modelSwitching.autoSessions>0&&n.push(`Auto model used in ${W(e.modelSwitching.autoSessions)} session${e.modelSwitching.autoSessions===1?"":"s"} (${Math.round(t*100)}%)`)}function s_(n,e,t){let s=n;return e>0&&(s=ye(s,2)),e>=.5&&(s=ye(s,3)),e>=.8&&t>=5&&(s=4),s}function n_(n,e,t,s){return e?(s.push(`Switched models in ${Math.round(t.modelSwitching.switchingFrequency)}% of sessions`),n<4&&(t.modelSwitching.mixedTierSessions>0||t.modelSwitching.mixedCostSessions>0)?ye(n,3):n):n}function o_(n){let e=[],t=We.promptEngineering;e_(e,n);let s=n.modeUsage.ask+n.modeUsage.edit+n.modeUsage.agent+Lt(n.modeUsage),o=Xy(n,e,1);s>=t.stage2MinInteractions&&(o=2);let i=Wy(n.toolCalls.byTool);i.length>0&&e.push(`Used slash commands: /${i.join(", /")}`);let r=$y(n.modelSwitching.mixedTierSessions,n.modelSwitching.mixedCostSessions,n.modelSwitching.switchingFrequency),a=Hy(n.modeUsage.agent,Lt(n.modeUsage)),c=n.modelSwitching.totalSessions>0?n.modelSwitching.autoSessions/n.modelSwitching.totalSessions:0;return t_(e,n,c),Jy(s,i,a)&&(o=3),Ky(s,a,r,i)&&(o=4),o=s_(o,c,n.sessions),o=n_(o,r,n,e),{stage:o,evidence:e,usedSlashCommands:i,hasModelSwitching:r,hasAgentMode:a,autoUsageRatio:c}}function i_(n,e){if(n.length===0)return;let t=e.length>0?` \u2014 try ${e.slice(0,3).join(", ")}`:"";return`Stage 4 needs ${n.join(" and ")}${t}`}function r_(n,e){let t=n.filter(o=>!o.used).map(o=>o.name);if(t.length===0)return;let s=t.length>3?` and ${t.length-3} more`:"";return`Try ${t.slice(0,3).join(", ")}${s} \u2014 see ${e} to reach Stage 4`}function a_(n,e,t){let s=We.contextEngineering,o=Math.max(0,s.stage4MinRefTypes-e),i=Math.max(0,s.stage4MinTotalRefs-t),r=[{name:"image attachments",used:(n.byKind?.["copilot.image"]??0)>0},{name:"prompt files",used:(n.byKind?.promptFile??0)>0},{name:"custom prompt commands",used:(n.byKind?.prompt??0)>0},{name:"#changes",used:n.changes>0},{name:"#problemsPanel",used:n.problemsPanel>0},{name:"#outputPanel",used:n.outputPanel>0},{name:"#terminalLastCommand",used:n.terminalLastCommand>0},{name:"#terminalSelection",used:n.terminalSelection>0},{name:"#clipboard",used:n.clipboard>0},{name:"@vscode",used:n.vscode>0}];if(r.filter(c=>c.used).length>=2){let c=[{name:"#symbol",used:n.symbol>0},{name:"@workspace",used:n.workspace>0},{name:"#codebase",used:n.codebase>0},{name:"@terminal",used:n.terminal>0},...r].filter(p=>!p.used).map(p=>p.name),d=[];return o>0&&d.push(`${W(e)} of ${s.stage4MinRefTypes} different reference types used`),i>0&&d.push(`${W(t)} of ${s.stage4MinTotalRefs} total references`),i_(d,c)}return r_(r,"[specialized context variables](https://code.visualstudio.com/docs/copilot/chat/copilot-chat#_add-context-to-your-prompts)")}function l_(n,e,t){e>0&&n.push(`${W(e)} ${t}`)}function c_(n){let e=[],t=[[n.file,"#file references"],[n.selection,"#selection references"],[n.codebase,"#codebase references"],[n.workspace,"@workspace references"],[n.terminal,"@terminal references"],[n.vscode,"@vscode references"],[n.clipboard,"#clipboard references"],[n.changes,"#changes references"],[n.problemsPanel,"#problemsPanel references"],[n.outputPanel,"#outputPanel references"],[n.terminalLastCommand,"#terminalLastCommand references"],[n.terminalSelection,"#terminalSelection references"],[n.byKind?.promptFile??0,"prompt file uses"],[n.byKind?.prompt??0,"custom prompt commands"],[n.codeContextLines??0,"lines of code context"]];for(let[s,o]of t)l_(e,s,o);return e}function u_(n){return[n.file,n.selection,n.symbol,n.codebase,n.workspace,n.terminal,n.vscode,n.clipboard,n.changes,n.problemsPanel,n.outputPanel,n.terminalLastCommand,n.terminalSelection,n.byKind?.["copilot.image"]??0,n.byKind?.promptFile??0,n.byKind?.prompt??0].filter(Boolean).length}function d_(n,e,t){let s=n.byKind["copilot.image"]||0;return s>0&&(e.push(`${W(s)} image references (vision)`),t=ye(t,3)),(n.byKind.promptFile||0)>0&&(t=ye(t,3)),t}function m_(n){let e=1,t=We.contextEngineering,s=n.contextReferences,o=s.file+s.selection+s.symbol+s.codebase+s.workspace,i=u_(s),r=c_(s);o>=t.stage2MinTotalRefs&&(e=2),i>=t.stage3MinRefTypes&&o>=t.stage3MinTotalRefs&&(e=3),i>=t.stage4MinRefTypes&&o>=t.stage4MinTotalRefs&&(e=4),e=d_(s,r,e);let a=[];if(e<2&&a.push("Try adding [#file or #selection](https://code.visualstudio.com/docs/copilot/chat/copilot-chat#_add-context-to-your-prompts) references to give Copilot more context"),e<3&&a.push("Explore [@workspace, #codebase, and @terminal](https://code.visualstudio.com/docs/copilot/chat/copilot-chat#_add-context-to-your-prompts) for broader context"),e<4){let c=a_(s,i,o);c&&a.push(c)}return{stage:e,evidence:r,tips:a}}function p_(n,e,t){return n>=t.stage3MinAgentInteractions&&e>=t.stage3MinNonAutoTools}function g_(n,e,t){return n>=t.stage4MinAgentInteractions&&e>=t.stage4MinNonAutoTools}function f_(n,e){return!!n&&n.multiFileEdits>=e.stage4MinMultiFileEdits&&n.avgFilesPerSession>=e.stage3MinAvgFilesPerSession}function h_(n,e,t,s){if(n<e.stage3MinMultiAgentParents)return t;let o=n===1?"1 session":`${W(n)} sessions`;return s.push(`${o} with child workspaces (multi-agent orchestration)`),t=ye(t,3),n>=e.stage4MinMultiAgentParents&&(t=ye(t,4)),t}function y_(n,e,t,s){if(n<e.stage3MinDelegationSessions)return t;let o=n===1?"1 session":`${W(n)} sessions`;return s.push(`${o} delegated work to sub-agents (Task/delegate tool calls)`),t=ye(t,3),n>=e.stage4MinDelegationSessions&&(t=ye(t,4)),t}function __(n){let e=[];return n<2&&e.push("Try [agent mode](https://code.visualstudio.com/docs/copilot/agents/overview) \u2014 it can run terminal commands, edit files, and explore your codebase autonomously \u2014 [\u25B6 Agent Mode video](https://tech.hub.ms/github-copilot/videos/agent-mode)"),n<3&&e.push("Use [agent mode](https://code.visualstudio.com/docs/copilot/agents/overview) for multi-step tasks; let it chain tools like file search, terminal, and code edits \u2014 [\u25B6 Agent Mode video](https://tech.hub.ms/github-copilot/videos/agent-mode)"),n<4&&e.push("Try [multi-agent orchestration](https://code.visualstudio.com/docs/copilot/agents/overview): start child sessions from a parent session to run multiple agents in parallel on independent sub-tasks"),e}function b_(n,e,t){let s=t;return e.modeUsage.agent>0&&(n.push(`${W(e.modeUsage.agent)} agent-mode interactions`),s=2),Lt(e.modeUsage)>0&&(n.push(`${W(Lt(e.modeUsage))} CLI interactions`),s=ye(s,2)),e.toolCalls.total>0&&n.push(`${W(e.toolCalls.total)} tool calls executed`),e.modeUsage.edit>0&&n.push(`${W(e.modeUsage.edit)} edit-mode interactions`),s}function C_(n,e,t,s){if(!e.editScope)return t;let o=t,i=e.editScope.singleFileEdits+e.editScope.multiFileEdits,r=i>0?Math.round(e.editScope.multiFileEdits/i*100):0;return e.editScope.multiFileEdits>0&&(n.push(`${W(e.editScope.multiFileEdits)} multi-file edit sessions (${r}%)`),o=ye(o,2)),e.editScope.avgFilesPerSession>=s.stage3MinAvgFilesPerSession&&(n.push(`Avg ${e.editScope.avgFilesPerSession.toFixed(1)} files per edit session`),o=ye(o,3)),o}function k_(n,e,t,s){let o=n;e.agentTypes?.editsAgent&&(s.push(`${W(e.agentTypes.editsAgent)} edits agent sessions`),o=ye(o,2));let i=Sd(e.toolCalls.byTool),r=e.modeUsage.agent+Lt(e.modeUsage);return p_(r,i,t)&&(o=3),g_(r,i,t)&&(o=4),f_(e.editScope,t)&&(o=ye(o,4)),o=h_(e.multiAgentParentSessions??0,t,o,s),o=y_(e.delegationSessions??0,t,o,s),o}function S_(n,e){let t=Cd(e.toolCalls.byTool);if(t===0)return;let s=e.delegationSessions??0,o=s>0?` (avg ${(t/s).toFixed(1)} per delegating session)`:"";n.push(`${W(t)} sub-agent/delegate tool calls executed${o}`)}function T_(n){let e=[],t=1,s=We.agentic;return t=b_(e,n,t),t=C_(e,n,t,s),t=k_(t,n,s,e),S_(e,n),{stage:t,evidence:e,tips:__(t)}}function kd(n,e,t){let s=[];return n<2&&s.push("Try [agent mode](https://code.visualstudio.com/docs/copilot/agents/overview) to let Copilot use built-in tools for file operations and terminal commands \u2014 [\u25B6 Agent Mode video](https://tech.hub.ms/github-copilot/videos/agent-mode)"),n<3&&(e.length===0&&!t?s.push("Set up [MCP servers](https://code.visualstudio.com/docs/copilot/customization/mcp-servers) to connect Copilot to external tools (databases, APIs, cloud services) \u2014 [\u25B6 MCP with Azure and GitHub](https://tech.hub.ms/github-copilot/videos/mcp-with-azure-and-github)"):e.length>0&&s.push("Explore [GitHub integrations](https://code.visualstudio.com/docs/copilot/agents/agent-tools) and advanced tools like editFiles and run_in_terminal")),n<4&&(e.length===1?s.push("Add more [MCP servers](https://code.visualstudio.com/docs/copilot/customization/mcp-servers) to expand Copilot's capabilities - check the VS Code MCP registry \u2014 [\u25B6 MCP with Azure and GitHub](https://tech.hub.ms/github-copilot/videos/mcp-with-azure-and-github)"):e.length===0&&!t?s.push("Explore the [VS Code MCP registry](https://code.visualstudio.com/docs/copilot/customization/mcp-servers) for tools that integrate with your workflow"):e.length>0&&s.push("You're using multiple MCP servers - keep exploring advanced tool combinations")),s}function w_(n,e,t){let s=Object.keys(e.toolCalls.byTool).length,o=Sd(e.toolCalls.byTool),i=t;if(o>0){let r=s-o,a=r>0?` (+ ${W(r)} automatic)`:"";n.push(`${W(o)} intentional tools used${a}`),i=2}else s>0&&n.push(`${W(s)} tools used (all automatic \u2014 agent reads/searches)`);return i}function M_(n,e,t){return e.agentTypes?.workspaceAgent>0?(n.push(`${W(e.agentTypes.workspaceAgent)} @workspace agent sessions`),ye(t,3)):t}function v_(n,e,t,s){let o={github_pull_request:"GitHub Pull Request",github_repo:"GitHub Repository",run_in_terminal:"Run In Terminal",editFiles:"Edit Files",listFiles:"List Files"},i=Object.keys(o).filter(a=>(e.toolCalls.byTool[a]||0)>0),r=t;return i.length>0&&(n.push(`Advanced tools: ${i.map(a=>o[a]).join(", ")}`),i.length>=s.stage3MinAdvancedTools&&(r=ye(r,3))),r}function P_(n,e,t,s){let o=Object.keys(e.mcpTools.byServer),i=t;return e.mcpTools.total>0&&(n.push(`${W(e.mcpTools.total)} MCP tool calls across ${o.length} server(s)`),i=ye(i,3),o.length>=s.stage4MinMcpServers&&(i=4)),{stage:i,mcpServers:o}}function A_(n,e){let t=[],s=1,o=We.toolUsage;s=w_(t,n,s),s=M_(t,n,s),s=v_(t,n,s,o);let i=e===!1;if(!i){let{stage:r,mcpServers:a}=P_(t,n,s,o);return s=r,{stage:s,evidence:t,tips:kd(s,a)}}return{stage:s,evidence:t,tips:kd(s,[],i)}}function x_(n,e,t){let s=e-t;if(s===0)return"All repos customized! Keep instructions up to date and add [skill files](https://code.visualstudio.com/docs/copilot/customization/agent-skills) or [MCP server configs](https://code.visualstudio.com/docs/copilot/customization/mcp-servers) for deeper integration";let o=`${W(s)} repo${s===1?"":"s"} still missing customization \u2014 add [instructions](https://code.visualstudio.com/docs/copilot/customization/custom-instructions), [agents.md](https://code.visualstudio.com/docs/copilot/customization/custom-instructions), or [MCP configs](https://code.visualstudio.com/docs/copilot/customization/mcp-servers) for full coverage.`,i=(n?.workspaces||[]).filter(a=>Object.values(a.typeStatuses).every(c=>c==="\u274C")).filter(a=>!a.workspacePath.startsWith("<unresolved:")).sort((a,c)=>c.interactionCount!==a.interactionCount?c.interactionCount-a.interactionCount:c.sessionCount-a.sessionCount).slice(0,3);if(i.length===0)return o;let r=i.map(a=>`${a.workspaceName} (${W(a.interactionCount)} interaction${a.interactionCount===1?"":"s"})`).join(`
|
|
78
|
+
FROM threads WHERE id = ?`,[t]),i=this.rowsToObjects(o);return i.length>0?i[0]:null}catch{return null}}toMillis(e){return typeof e!="number"||!Number.isFinite(e)||e<=0?null:e>1e12?e:e*1e3}async collectRolloutFiles(e,t=0,s=[]){if(t>5)return s;let o;try{o=await st.promises.readdir(e,{withFileTypes:!0})}catch{return s}for(let i of o){let r=Bt.join(e,i.name);i.isDirectory()?await this.collectRolloutFiles(r,t+1,s):Pd.test(i.name)&&s.push(r)}return s}async discoverSessions(){let e=[],t=new Set,s=new Set,o=[...await this.collectRolloutFiles(this.getSessionsDir()),...await this.collectRolloutFiles(this.getArchivedSessionsDir())];for(let a of o){let l=ue(a).toLowerCase();if(t.has(l))continue;t.add(l),e.push(a);let d=e_.exec(a);d&&s.add(d[1].toLowerCase())}let i=e.length,r=0;for(let a of await this.readAllThreads()){if(!a.id||s.has(a.id.toLowerCase()))continue;s.add(a.id.toLowerCase());let l=this.resolveThreadPath(a,t);l&&(e.push(l.path),l.dbOnly&&r++)}return{files:e,rolloutCount:i,dbOnlyCount:r}}resolveThreadPath(e,t){if(e.rollout_path&&st.existsSync(e.rollout_path)){let s=ue(e.rollout_path).toLowerCase();return t.has(s)?null:(t.add(s),{path:e.rollout_path,dbOnly:!1})}return{path:this.virtualPath(e.id),dbOnly:!0}}normalizeRolloutLine(e){let t=typeof e.timestamp=="string"?e.timestamp:null,s=typeof e.type=="string"?e.type:null,o=e.payload;return s&&typeof o=="object"&&o!==null?{timestamp:t,kind:s,payload:o}:s?{timestamp:t,kind:"response_item",payload:e}:typeof e.id=="string"&&("instructions"in e||"cwd"in e||"git"in e)?{timestamp:t,kind:"session_meta",payload:e}:null}extractMessageText(e){let t=e.content;return typeof t=="string"?t:Array.isArray(t)?t.filter(s=>typeof s=="object"&&s!==null).filter(s=>typeof s.text=="string"&&(s.type==="input_text"||s.type==="output_text"||s.type==="text"||s.type===void 0)).map(s=>s.text).join(`
|
|
79
|
+
`):""}extractTokenSnapshot(e,t){let s=e.info,o=typeof s=="object"&&s!==null?s.total_token_usage??s:e;if(typeof o!="object"||o===null)return null;let i=o,r=d=>typeof i[d]=="number"&&Number.isFinite(i[d])?i[d]:0,a=r("input_tokens"),l=r("output_tokens");return a===0&&l===0&&r("total_tokens")===0?null:{input:a,cachedInput:r("cached_input_tokens"),output:l,reasoning:r("reasoning_output_tokens"),model:t}}toolNameForResponseItem(e,t){return e==="function_call"||e==="custom_tool_call"?typeof t.name=="string"&&t.name?t.name:"unknown":e==="local_shell_call"?"shell":e==="web_search_call"?"web_search":null}applyMessageItem(e,t,s){let o=e.payload.role,i=this.extractMessageText(e.payload);i&&(o==="user"&&!xd.test(i)?t.userMessages.push({text:i,timestamp:e.timestamp}):o==="assistant"&&t.assistantMessages.push({text:i,timestamp:e.timestamp,model:s}))}applyReasoningItem(e,t){let s=Array.isArray(e.summary)?e.summary:[];for(let o of s)typeof o=="object"&&o!==null&&typeof o.text=="string"&&(t.reasoningChars+=o.text.length)}applyResponseItem(e,t,s){let o=e.payload,i=typeof o.type=="string"?o.type:"";if(i==="message"){this.applyMessageItem(e,t,s);return}if(i==="reasoning"){this.applyReasoningItem(o,t);return}let r=this.toolNameForResponseItem(i,o);r&&t.toolCalls.push({name:r,timestamp:e.timestamp})}applyEventMsg(e,t,s){let o=e.payload;if(o.type==="token_count"){let r=this.extractTokenSnapshot(o,s);r&&t.tokenSnapshots.push(r)}}countEventMsgUserMessages(e){let t=[];for(let s of e){if(s.kind!=="event_msg"||s.payload.type!=="user_message")continue;let o=s.payload.message;typeof o=="string"&&o&&!xd.test(o)&&t.push({text:o,timestamp:s.timestamp})}return t}async readRolloutLines(e){let t;try{t=await st.promises.readFile(e,"utf8")}catch{return[]}let s=[];for(let o of t.split(`
|
|
80
|
+
`)){let i=o.trim();if(i)try{let r=JSON.parse(i);if(typeof r!="object"||r===null)continue;let a=this.normalizeRolloutLine(r);a&&s.push(a)}catch{}}return s}async getRolloutSummary(e){let t=null;try{t=await st.promises.stat(e)}catch{}if(t){let o=this._rolloutCache.get(e);if(o&&o.mtimeMs===t.mtimeMs&&o.size===t.size)return o.summary}let s=this.buildRolloutSummary(await this.readRolloutLines(e));if(t){if(this._rolloutCache.size>=n.ROLLOUT_CACHE_MAX){let o=this._rolloutCache.keys().next().value;o!==void 0&&this._rolloutCache.delete(o)}this._rolloutCache.set(e,{mtimeMs:t.mtimeMs,size:t.size,summary:s})}return s}buildRolloutSummary(e){let t={sessionId:null,cwd:null,firstTimestamp:null,lastTimestamp:null,userMessages:[],assistantMessages:[],toolCalls:[],tokenSnapshots:[],reasoningChars:0,models:[]},s="unknown";for(let o of e)o.timestamp&&(t.firstTimestamp||(t.firstTimestamp=o.timestamp),t.lastTimestamp=o.timestamp),s=this.applyRolloutLine(o,t,s);return t.userMessages.length===0&&(t.userMessages=this.countEventMsgUserMessages(e)),t}applyRolloutLine(e,t,s){if(e.kind==="session_meta"){let o=e.payload;return typeof o.id=="string"&&(t.sessionId=o.id),typeof o.cwd=="string"&&(t.cwd=o.cwd),s}if(e.kind==="turn_context"){let o=e.payload.model;return typeof o=="string"&&o?(t.models.includes(o)||t.models.push(o),o):s}return e.kind==="response_item"?this.applyResponseItem(e,t,s):e.kind==="event_msg"&&this.applyEventMsg(e,t,s),s}computeTokenTotals(e){let t={},s=0,o=null;for(let r of e.tokenSnapshots){let a=o?Math.max(0,r.input-o.input):r.input,l=o?Math.max(0,r.output-o.output):r.output,d=o?Math.max(0,r.reasoning-o.reasoning):r.reasoning;if(a>0||l>0){let p=t[r.model]??(t[r.model]={inputTokens:0,outputTokens:0,sessions:0});p.inputTokens+=a,p.outputTokens+=l}s+=d,o=r}let i=Object.values(t).reduce((r,a)=>r+a.inputTokens+a.outputTokens,0);return{perModel:t,totalTokens:i,thinkingTokens:s}}estimateTextTokens(e){return e?Math.ceil(e.length/4):0}estimateRolloutTokens(e){let t=0,s=0;for(let i of e.userMessages)t+=this.estimateTextTokens(i.text);for(let i of e.assistantMessages)s+=this.estimateTextTokens(i.text);let o=Math.ceil(e.reasoningChars/4);return{input:t,output:s,thinking:o}}async getTokens(e){if(this.isVirtualThreadPath(e)){let i=await this.readThread(e);return{tokens:typeof i?.tokens_used=="number"?i.tokens_used:0,thinkingTokens:0}}let t=await this.getRolloutSummary(e),s=this.computeTokenTotals(t);if(s.totalTokens>0)return{tokens:s.totalTokens,thinkingTokens:s.thinkingTokens};let o=this.estimateRolloutTokens(t);return{tokens:o.input+o.output+o.thinking,thinkingTokens:o.thinking}}async countInteractions(e){if(this.isVirtualThreadPath(e)){let s=await this.readThread(e);return s&&(s.has_user_event===1||typeof s.first_user_message=="string"&&s.first_user_message.trim().length>0)?1:0}return(await this.getRolloutSummary(e)).userMessages.length}async getModelUsage(e){if(this.isVirtualThreadPath(e)){let r=await this.readThread(e),a=typeof r?.tokens_used=="number"?r.tokens_used:0;return a===0?{}:{[r?.model||"unknown"]:{inputTokens:a,outputTokens:0,sessions:0}}}let t=await this.getRolloutSummary(e),s=this.computeTokenTotals(t);if(s.totalTokens>0)return s.perModel;let o=this.estimateRolloutTokens(t);return o.input+o.output+o.thinking===0?{}:{[t.models[t.models.length-1]||"unknown"]:{inputTokens:o.input,outputTokens:o.output+o.thinking,sessions:0}}}async getMeta(e){if(this.isVirtualThreadPath(e))return this.getThreadMeta(e);let t=await this.getRolloutSummary(e);return{title:t.userMessages[0]?.text.split(`
|
|
81
|
+
`)[0].slice(0,100)||void 0,firstInteraction:t.firstTimestamp,lastInteraction:t.lastTimestamp,workspacePath:t.cwd||void 0}}async getThreadMeta(e){let t=await this.readThread(e),s=this.toMillis(t?.created_at),o=this.toMillis(t?.updated_at);return{title:t?.title||t?.first_user_message?.slice(0,100)||void 0,firstInteraction:s?new Date(s).toISOString():null,lastInteraction:o?new Date(o).toISOString():null,workspacePath:t?.cwd||void 0}}async getDailyFractions(e){if(this.isVirtualThreadPath(e)){let r=await this.readThread(e),a=this.toMillis(r?.updated_at)??this.toMillis(r?.created_at);return{[N(a?new Date(a):new Date)]:1}}let t=await this.getRolloutSummary(e),s={},o=0;for(let r of[...t.userMessages,...t.assistantMessages]){if(!r.timestamp)continue;let a=new Date(r.timestamp);if(isNaN(a.getTime()))continue;let l=N(a);s[l]=(s[l]||0)+1,o++}if(o===0){let r=t.lastTimestamp?new Date(t.lastTimestamp):new Date;return{[N(isNaN(r.getTime())?new Date:r)]:1}}let i={};for(let[r,a]of Object.entries(s))i[r]=a/o;return i}};var io=S(require("fs")),on=S(require("path")),ro=S(require("os")),Ld=S(Dt());var Rd=["read_file","copilot_readFile","read","view","view_image","copilot_viewImage","list_dir","list_directory","ls","copilot_listDirectory","find_files","file_search","file_glob_search","copilot_findFiles","opilot_findFiles","copilot_findTextInFiles","copilot_findTestFiles","test_search","grep_search","grep","glob","rg","semantic_search","copilot_searchCodebase","code_search","copilot_getSearchResults","copilot_githubTextSearch","get_search_view_results","search_workspace_symbols","copilot_searchWorkspaceSymbols","vscode_listCodeUsages","get_symbols_by_name","get_errors","copilot_getErrors","get_changed_files","copilot_getChangedFiles","read_project_structure","copilot_readProjectStructure","get_doc_info","copilot_getDocInfo","get_vscode_api","copilot_getVSCodeAPI","get_project_setup_info","copilot_getProjectSetupInfo","get_files_in_project","get_projects_in_solution","get_python_executable_details","get_currentfile","get_file","vscode_get_confirmation","vscode_get_confirmation_with_options","vscode_get_terminal_confirmation","vscode_get_modified_files_confirmation","memory","copilot_memory","copilot_resolveMemoryFileUri","detect_memories","todo","tool_replay","copilot_toolReplay","tool_search","tool_search_tool","get_task_output","get_output_window_logs","job_output","get_terminal_output","await_terminal","terminal_selection","terminal_last_command","read_notebook_cell_output","copilot_readNotebookCellOutput","copilot_getNotebookSummary","test_failure","copilot_testFailure","ask_questions","AskUserQuestion","ask_user_question","copilot_askQuestions","switch_agent","copilot_switchAgent","bash","chmod","vscode_editFile_internal","vscode_fetchWebPage_internal","vscode_searchExtensions_internal","fetch_copilot_cli_documentation","generate_findings","generate_topics","list_bash","read_bash","write_bash","stop_bash","list_powershell","read_powershell","clarify_requirements","get_tests","ide-get_diagnostics","mcp__ide__getDiagnostics","plan","signal_plan_ready","update_plan_progress","EnterPlanMode","ExitPlanMode","stop_agent","mcp_reload","mcp_validate","add_loaded_assembly","analyze_symbol","search_decompiled_symbols","search_web"];var os=["Coding","Debugging","Feature Dev","Refactoring","Testing","Exploration","Planning","Delegation","Git Ops","Build/Deploy","Brainstorming","Conversation"],n_=["Delegation","Git Ops","Build/Deploy","Debugging","Testing","Refactoring","Feature Dev","Planning","Exploration","Coding","Brainstorming","Conversation"],o_={Coding:[/^(edit|create|write|apply_patch|replace|insert|multi_edit|str_replace)$/i],Debugging:[/^(read|view|grep|rg|diagnostics?|log|trace)$/i],"Feature Dev":[],Refactoring:[/^(refactor|rename|move|restructure)$/i],Testing:[/^(test|jest|vitest|pytest|mocha|playwright|cypress)$/i],Exploration:[/^(read|view|grep|rg|glob|search|web_fetch|web_search|ls|list)$/i],Planning:[/^(plan|todo|checklist)$/i],Delegation:[/^(task|agent|subagent|delegate|handoff|write_agent|read_agent)$/i],"Git Ops":[/^(git|commit|push|pull|merge|rebase|cherry-pick|branch|pr)$/i],"Build/Deploy":[/^(build|deploy|release|docker|k8s|helm|terraform|npm|yarn|pnpm)$/i],Brainstorming:[],Conversation:[]},i_={Coding:[/\b(code|implement|write code|function|class|module|api)\b/i],Debugging:[/\b(debug|bug|fix|error|failing|stack ?trace|investigate|root cause|broken)\b/i],"Feature Dev":[/\b(add|create|implement|introduce|support|new feature|build feature)\b/i],Refactoring:[/\b(refactor|rename|simplify|cleanup|clean up|extract|restructure)\b/i],Testing:[/\b(test|tests|unit test|integration test|e2e|pytest|vitest|jest|mocha|cypress)\b/i],Exploration:[/\b(explore|inspect|analyze|understand|investigate|read|search|find where)\b/i],Planning:[/\b(plan|approach|roadmap|steps|outline|strategy)\b/i],Delegation:[/\b(delegate|sub-?agent|spawn agent|handoff|hand off|ask agent)\b/i],"Git Ops":[/\b(git|commit|push|pull request|merge|rebase|branch|cherry-pick|tag)\b/i],"Build/Deploy":[/\b(build|compile|bundle|deploy|release|publish|docker|kubernetes|ci|cd)\b/i],Brainstorming:[/\b(brainstorm|what if|ideas?|alternatives?|trade-?offs?|design options?)\b/i],Conversation:[]};function ul(){return os.reduce((n,e)=>(n[e]=0,n),{})}function Id(n){let e=0,t="Conversation";for(let s of n_){let o=n[s];o>e&&(e=o,t=s)}return e>0?t:"Conversation"}function r_(n){let e=ul(),t=(n.messageText??"").trim(),s=(n.toolNames??[]).map(i=>i.trim()).filter(Boolean),o=(n.shellCommands??[]).join(`
|
|
82
|
+
`);return a_(e,t),l_(e,s),c_(e,o),u_(e,t,s),e}function a_(n,e){for(let[t,s]of Object.entries(i_))for(let o of s)o.test(e)&&(n[t]+=2)}function l_(n,e){for(let t of e)for(let[s,o]of Object.entries(o_))o.some(i=>i.test(t))&&(n[s]+=1)}function c_(n,e){/\b(git (commit|push|pull|merge|rebase|checkout|cherry-pick|tag|branch)|gh pr)\b/i.test(e)&&(n["Git Ops"]+=3),/\b(npm (run )?(test|lint|build)|pnpm (test|build)|yarn (test|build)|pytest|vitest|jest|mocha|cypress)\b/i.test(e)&&(n.Testing+=2),/\b(npm (run )?build|pnpm build|yarn build|docker (build|push|run)|kubectl|helm|terraform|vercel|netlify)\b/i.test(e)&&(n["Build/Deploy"]+=2)}function u_(n,e,t){t.length===0&&!e&&(n.Conversation+=1),t.length===0&&e&&Object.values(n).every(s=>s===0)&&(n.Conversation+=1)}function d_(n){return Id(r_(n))}function Ud(n){let e=ul();if(n.length===0)return e.Conversation=1,{primaryCategory:"Conversation",categoryShares:e,turnCategories:[],turnCount:0};let t=n.map(d_);for(let o of t)e[o]+=1;for(let o of os)e[o]=e[o]/n.length;return{primaryCategory:Id(e),categoryShares:e,turnCategories:t,turnCount:n.length}}function xs(){let n=ul();return n.Conversation=1,{primaryCategory:"Conversation",categoryShares:n,turnCategories:[],turnCount:0}}var m_=/^(task|agent|read_agent|write_agent|list_agents|create_session|open_pr_session|open_issue_session|fork_session)$|subagent|sub[-_]?agent|agent[-_]?spawn|spawn[-_]?(task|agent)|delegate/i;function Od(n){let e=0;for(let[t,s]of Object.entries(n))m_.test(t)&&(e+=s);return e}var p_=new Set(Rd.map(n=>n.toLowerCase()));function W(n){return n.toLocaleString("en-US")}function qt(n){return(n.cli??0)+(n.cliApp??0)+(n.claudeDesktop??0)+(n.claudeVsCode??0)}function ye(n,e){return Math.max(n,e)}var g_={1:"Stage 1: AI Skeptic",2:"Stage 2: AI Explorer",3:"Stage 3: AI Collaborator",4:"Stage 4: AI Strategist"},$e={promptEngineering:{stage2MinInteractions:5,stage2MinAvgTurns:3,stage3MinAvgTurns:5,stage3MinInteractions:30,stage3MinSlashCommands:2,stage4MinInteractions:100,stage4MinSlashCommands:3},contextEngineering:{stage2MinTotalRefs:1,stage3MinRefTypes:3,stage3MinTotalRefs:10,stage4MinRefTypes:5,stage4MinTotalRefs:30},agentic:{stage3MinAvgFilesPerSession:3,stage3MinAgentInteractions:10,stage3MinNonAutoTools:3,stage4MinAgentInteractions:50,stage4MinNonAutoTools:5,stage4MinMultiFileEdits:20,stage3MinMultiAgentParents:1,stage4MinMultiAgentParents:3,multiAgentMinChildren:2,stage3MinDelegationSessions:2,stage4MinDelegationSessions:5},toolUsage:{stage3MinAdvancedTools:2,stage4MinMcpServers:2},customization:{stage3MinCustomizationRate:.3,stage3MinCustomizedRepos:2,stage4MinCustomizationRate:.7,stage4MinCustomizedRepos:3,stage3MinUniqueModels:3,stage4MinUniqueModels:5},workflowIntegration:{stage2MinSessions:3,stage2MinApplyRatePct:50,stage3MinModesUsed:2,hasExplicitContextMinRefs:10,stage3MinContextRefs:20,stage4MinSessions:15}};function f_(n){let e=[...n].sort((o,i)=>o-i),t=Math.floor(e.length/2);return e.length%2===0?Math.round((e[t-1]+e[t])/2):e[t]}var h_=["explain","fix","tests","doc","generate","optimize","new","newNotebook","search","fixTestFailure","setupTests"],y_=["review","bug","think","compact","pr_comments"];function __(n){return[...h_.filter(e=>(n[e]??0)>0),...y_.filter(e=>(n[`__slash__${e}`]??0)>0)]}function Nd(n){return Object.keys(n).filter(e=>!p_.has(e.toLowerCase())&&!e.startsWith("__slash__")).length}function b_(n,e,t){return n>0||e>0||t>0}function C_(n,e){return n>0||e>0}function k_(n,e,t){let s=$e.promptEngineering;return n>=s.stage3MinInteractions&&(e.length>=s.stage3MinSlashCommands||t)}function S_(n,e,t,s){let o=$e.promptEngineering;return n>=o.stage4MinInteractions&&e&&(t||s.length>=o.stage4MinSlashCommands)}function T_(n,e,t){let s=[];return n||s.push("Try [agent mode](https://code.visualstudio.com/docs/copilot/agents/overview) for multi-file changes \u2014 [\u25B6 Agent Mode video](https://tech.hub.ms/github-copilot/videos/agent-mode)"),e.length<t.stage3MinSlashCommands&&s.push("Use [slash commands](https://code.visualstudio.com/docs/copilot/chat/copilot-chat#_add-context-to-your-prompts) like /explain, /fix, or /tests to give structured prompts"),s}function w_(n,e,t,s,o){let i=[];return n||i.push("Try [agent mode](https://code.visualstudio.com/docs/copilot/agents/overview) for autonomous, multi-step coding tasks"),e||i.push("Experiment with [different models](https://code.visualstudio.com/docs/copilot/chat/copilot-chat#_choose-a-language-model) for different tasks - use fast models for simple queries and reasoning models for complex problems \u2014 [\u25B6 Model selection video](https://tech.hub.ms/github-copilot/videos/model-selection)"),s===0?i.push("Try the Auto model for cost-sensitive tasks so Copilot can pick the most efficient model for you"):s<.5&&i.push("Use the Auto model more often when you want Copilot to balance quality and cost for you"),t.length<o.stage4MinSlashCommands&&n&&e&&i.push("Explore more [slash commands](https://code.visualstudio.com/docs/copilot/chat/copilot-chat#_add-context-to-your-prompts) like /explain, /tests, or /doc to diversify your prompting"),i}function M_(n,e,t,s,o){let i=$e.promptEngineering,r=[];return n<2&&r.push("Try asking Copilot a question using the Chat panel \u2014 [\u25B6 Chat in IDE video](https://tech.hub.ms/github-copilot/videos/chat-in-ide)"),n<3&&r.push(...T_(e,s,i)),n<4&&r.push(...w_(e,t,s,o,i)),r}function v_(n,e,t){if(!n.conversationPatterns)return t;let s=$e.promptEngineering,o=Math.round(n.conversationPatterns.multiTurnSessions/Math.max(1,n.sessions)*100);return n.conversationPatterns.multiTurnSessions>0&&e.push(`${W(n.conversationPatterns.multiTurnSessions)} multi-turn sessions (${o}%)`),n.conversationPatterns.avgTurnsPerSession>=s.stage2MinAvgTurns&&(e.push(`Avg ${n.conversationPatterns.avgTurnsPerSession.toFixed(1)} exchanges per session`),t=ye(t,2)),n.conversationPatterns.avgTurnsPerSession>=s.stage3MinAvgTurns&&(t=ye(t,3)),t}function P_(n){let{stage:e,evidence:t,usedSlashCommands:s,hasModelSwitching:o,hasAgentMode:i,autoUsageRatio:r}=R_(n);return{stage:e,evidence:t,tips:M_(e,i,o,s,r)}}function A_(n,e){let t=e.modeUsage.ask+e.modeUsage.edit+e.modeUsage.agent+qt(e.modeUsage);t>0&&n.push(`${W(t)} total interactions`),e.modeUsage.ask>0&&n.push(`${W(e.modeUsage.ask)} ask-mode conversations`),e.modeUsage.agent>0&&n.push(`${W(e.modeUsage.agent)} agent-mode interactions`),qt(e.modeUsage)>0&&n.push(`${W(qt(e.modeUsage))} CLI interactions`)}function x_(n,e,t){e.modelSwitching.autoSessions>0&&n.push(`Auto model used in ${W(e.modelSwitching.autoSessions)} session${e.modelSwitching.autoSessions===1?"":"s"} (${Math.round(t*100)}%)`)}function D_(n,e,t){let s=n;return e>0&&(s=ye(s,2)),e>=.5&&(s=ye(s,3)),e>=.8&&t>=5&&(s=4),s}function E_(n,e,t,s){return e?(s.push(`Switched models in ${Math.round(t.modelSwitching.switchingFrequency)}% of sessions`),n<4&&(t.modelSwitching.mixedTierSessions>0||t.modelSwitching.mixedCostSessions>0)?ye(n,3):n):n}function R_(n){let e=[],t=$e.promptEngineering;A_(e,n);let s=n.modeUsage.ask+n.modeUsage.edit+n.modeUsage.agent+qt(n.modeUsage),o=v_(n,e,1);s>=t.stage2MinInteractions&&(o=2);let i=__(n.toolCalls.byTool);i.length>0&&e.push(`Used slash commands: /${i.join(", /")}`);let r=b_(n.modelSwitching.mixedTierSessions,n.modelSwitching.mixedCostSessions,n.modelSwitching.switchingFrequency),a=C_(n.modeUsage.agent,qt(n.modeUsage)),l=n.modelSwitching.totalSessions>0?n.modelSwitching.autoSessions/n.modelSwitching.totalSessions:0;return x_(e,n,l),k_(s,i,a)&&(o=3),S_(s,a,r,i)&&(o=4),o=D_(o,l,n.sessions),o=E_(o,r,n,e),{stage:o,evidence:e,usedSlashCommands:i,hasModelSwitching:r,hasAgentMode:a,autoUsageRatio:l}}function I_(n,e){if(n.length===0)return;let t=e.length>0?` \u2014 try ${e.slice(0,3).join(", ")}`:"";return`Stage 4 needs ${n.join(" and ")}${t}`}function U_(n,e){let t=n.filter(o=>!o.used).map(o=>o.name);if(t.length===0)return;let s=t.length>3?` and ${t.length-3} more`:"";return`Try ${t.slice(0,3).join(", ")}${s} \u2014 see ${e} to reach Stage 4`}function O_(n,e,t){let s=$e.contextEngineering,o=Math.max(0,s.stage4MinRefTypes-e),i=Math.max(0,s.stage4MinTotalRefs-t),r=[{name:"image attachments",used:(n.byKind?.["copilot.image"]??0)>0},{name:"prompt files",used:(n.byKind?.promptFile??0)>0},{name:"custom prompt commands",used:(n.byKind?.prompt??0)>0},{name:"#changes",used:n.changes>0},{name:"#problemsPanel",used:n.problemsPanel>0},{name:"#outputPanel",used:n.outputPanel>0},{name:"#terminalLastCommand",used:n.terminalLastCommand>0},{name:"#terminalSelection",used:n.terminalSelection>0},{name:"#clipboard",used:n.clipboard>0},{name:"@vscode",used:n.vscode>0}];if(r.filter(l=>l.used).length>=2){let l=[{name:"#symbol",used:n.symbol>0},{name:"@workspace",used:n.workspace>0},{name:"#codebase",used:n.codebase>0},{name:"@terminal",used:n.terminal>0},...r].filter(p=>!p.used).map(p=>p.name),d=[];return o>0&&d.push(`${W(e)} of ${s.stage4MinRefTypes} different reference types used`),i>0&&d.push(`${W(t)} of ${s.stage4MinTotalRefs} total references`),I_(d,l)}return U_(r,"[specialized context variables](https://code.visualstudio.com/docs/copilot/chat/copilot-chat#_add-context-to-your-prompts)")}function F_(n,e,t){e>0&&n.push(`${W(e)} ${t}`)}function N_(n){let e=[],t=[[n.file,"#file references"],[n.selection,"#selection references"],[n.codebase,"#codebase references"],[n.workspace,"@workspace references"],[n.terminal,"@terminal references"],[n.vscode,"@vscode references"],[n.clipboard,"#clipboard references"],[n.changes,"#changes references"],[n.problemsPanel,"#problemsPanel references"],[n.outputPanel,"#outputPanel references"],[n.terminalLastCommand,"#terminalLastCommand references"],[n.terminalSelection,"#terminalSelection references"],[n.byKind?.promptFile??0,"prompt file uses"],[n.byKind?.prompt??0,"custom prompt commands"],[n.codeContextLines??0,"lines of code context"]];for(let[s,o]of t)F_(e,s,o);return e}function L_(n){return[n.file,n.selection,n.symbol,n.codebase,n.workspace,n.terminal,n.vscode,n.clipboard,n.changes,n.problemsPanel,n.outputPanel,n.terminalLastCommand,n.terminalSelection,n.byKind?.["copilot.image"]??0,n.byKind?.promptFile??0,n.byKind?.prompt??0].filter(Boolean).length}function j_(n,e,t){let s=n.byKind["copilot.image"]||0;return s>0&&(e.push(`${W(s)} image references (vision)`),t=ye(t,3)),(n.byKind.promptFile||0)>0&&(t=ye(t,3)),t}function G_(n){let e=1,t=$e.contextEngineering,s=n.contextReferences,o=s.file+s.selection+s.symbol+s.codebase+s.workspace,i=L_(s),r=N_(s);o>=t.stage2MinTotalRefs&&(e=2),i>=t.stage3MinRefTypes&&o>=t.stage3MinTotalRefs&&(e=3),i>=t.stage4MinRefTypes&&o>=t.stage4MinTotalRefs&&(e=4),e=j_(s,r,e);let a=[];if(e<2&&a.push("Try adding [#file or #selection](https://code.visualstudio.com/docs/copilot/chat/copilot-chat#_add-context-to-your-prompts) references to give Copilot more context"),e<3&&a.push("Explore [@workspace, #codebase, and @terminal](https://code.visualstudio.com/docs/copilot/chat/copilot-chat#_add-context-to-your-prompts) for broader context"),e<4){let l=O_(s,i,o);l&&a.push(l)}return{stage:e,evidence:r,tips:a}}function B_(n,e,t){return n>=t.stage3MinAgentInteractions&&e>=t.stage3MinNonAutoTools}function q_(n,e,t){return n>=t.stage4MinAgentInteractions&&e>=t.stage4MinNonAutoTools}function z_(n,e){return!!n&&n.multiFileEdits>=e.stage4MinMultiFileEdits&&n.avgFilesPerSession>=e.stage3MinAvgFilesPerSession}function W_(n,e,t,s){if(n<e.stage3MinMultiAgentParents)return t;let o=n===1?"1 session":`${W(n)} sessions`;return s.push(`${o} with child workspaces (multi-agent orchestration)`),t=ye(t,3),n>=e.stage4MinMultiAgentParents&&(t=ye(t,4)),t}function $_(n,e,t,s){if(n<e.stage3MinDelegationSessions)return t;let o=n===1?"1 session":`${W(n)} sessions`;return s.push(`${o} delegated work to sub-agents (Task/delegate tool calls)`),t=ye(t,3),n>=e.stage4MinDelegationSessions&&(t=ye(t,4)),t}function H_(n){let e=[];return n<2&&e.push("Try [agent mode](https://code.visualstudio.com/docs/copilot/agents/overview) \u2014 it can run terminal commands, edit files, and explore your codebase autonomously \u2014 [\u25B6 Agent Mode video](https://tech.hub.ms/github-copilot/videos/agent-mode)"),n<3&&e.push("Use [agent mode](https://code.visualstudio.com/docs/copilot/agents/overview) for multi-step tasks; let it chain tools like file search, terminal, and code edits \u2014 [\u25B6 Agent Mode video](https://tech.hub.ms/github-copilot/videos/agent-mode)"),n<4&&e.push("Try [multi-agent orchestration](https://code.visualstudio.com/docs/copilot/agents/overview): start child sessions from a parent session to run multiple agents in parallel on independent sub-tasks"),e}function J_(n,e,t){let s=t;return e.modeUsage.agent>0&&(n.push(`${W(e.modeUsage.agent)} agent-mode interactions`),s=2),qt(e.modeUsage)>0&&(n.push(`${W(qt(e.modeUsage))} CLI interactions`),s=ye(s,2)),e.toolCalls.total>0&&n.push(`${W(e.toolCalls.total)} tool calls executed`),e.modeUsage.edit>0&&n.push(`${W(e.modeUsage.edit)} edit-mode interactions`),s}function K_(n,e,t,s){if(!e.editScope)return t;let o=t,i=e.editScope.singleFileEdits+e.editScope.multiFileEdits,r=i>0?Math.round(e.editScope.multiFileEdits/i*100):0;return e.editScope.multiFileEdits>0&&(n.push(`${W(e.editScope.multiFileEdits)} multi-file edit sessions (${r}%)`),o=ye(o,2)),e.editScope.avgFilesPerSession>=s.stage3MinAvgFilesPerSession&&(n.push(`Avg ${e.editScope.avgFilesPerSession.toFixed(1)} files per edit session`),o=ye(o,3)),o}function V_(n,e,t,s){let o=n;e.agentTypes?.editsAgent&&(s.push(`${W(e.agentTypes.editsAgent)} edits agent sessions`),o=ye(o,2));let i=Nd(e.toolCalls.byTool),r=e.modeUsage.agent+qt(e.modeUsage);return B_(r,i,t)&&(o=3),q_(r,i,t)&&(o=4),z_(e.editScope,t)&&(o=ye(o,4)),o=W_(e.multiAgentParentSessions??0,t,o,s),o=$_(e.delegationSessions??0,t,o,s),o}function Y_(n,e){let t=Od(e.toolCalls.byTool);if(t===0)return;let s=e.delegationSessions??0,o=s>0?` (avg ${(t/s).toFixed(1)} per delegating session)`:"";n.push(`${W(t)} sub-agent/delegate tool calls executed${o}`)}function Q_(n){let e=[],t=1,s=$e.agentic;return t=J_(e,n,t),t=K_(e,n,t,s),t=V_(t,n,s,e),Y_(e,n),{stage:t,evidence:e,tips:H_(t)}}function Fd(n,e,t){let s=[];return n<2&&s.push("Try [agent mode](https://code.visualstudio.com/docs/copilot/agents/overview) to let Copilot use built-in tools for file operations and terminal commands \u2014 [\u25B6 Agent Mode video](https://tech.hub.ms/github-copilot/videos/agent-mode)"),n<3&&(e.length===0&&!t?s.push("Set up [MCP servers](https://code.visualstudio.com/docs/copilot/customization/mcp-servers) to connect Copilot to external tools (databases, APIs, cloud services) \u2014 [\u25B6 MCP with Azure and GitHub](https://tech.hub.ms/github-copilot/videos/mcp-with-azure-and-github)"):e.length>0&&s.push("Explore [GitHub integrations](https://code.visualstudio.com/docs/copilot/agents/agent-tools) and advanced tools like editFiles and run_in_terminal")),n<4&&(e.length===1?s.push("Add more [MCP servers](https://code.visualstudio.com/docs/copilot/customization/mcp-servers) to expand Copilot's capabilities - check the VS Code MCP registry \u2014 [\u25B6 MCP with Azure and GitHub](https://tech.hub.ms/github-copilot/videos/mcp-with-azure-and-github)"):e.length===0&&!t?s.push("Explore the [VS Code MCP registry](https://code.visualstudio.com/docs/copilot/customization/mcp-servers) for tools that integrate with your workflow"):e.length>0&&s.push("You're using multiple MCP servers - keep exploring advanced tool combinations")),s}function X_(n,e,t){let s=Object.keys(e.toolCalls.byTool).length,o=Nd(e.toolCalls.byTool),i=t;if(o>0){let r=s-o,a=r>0?` (+ ${W(r)} automatic)`:"";n.push(`${W(o)} intentional tools used${a}`),i=2}else s>0&&n.push(`${W(s)} tools used (all automatic \u2014 agent reads/searches)`);return i}function Z_(n,e,t){return e.agentTypes?.workspaceAgent>0?(n.push(`${W(e.agentTypes.workspaceAgent)} @workspace agent sessions`),ye(t,3)):t}function eb(n,e,t,s){let o={github_pull_request:"GitHub Pull Request",github_repo:"GitHub Repository",run_in_terminal:"Run In Terminal",editFiles:"Edit Files",listFiles:"List Files"},i=Object.keys(o).filter(a=>(e.toolCalls.byTool[a]||0)>0),r=t;return i.length>0&&(n.push(`Advanced tools: ${i.map(a=>o[a]).join(", ")}`),i.length>=s.stage3MinAdvancedTools&&(r=ye(r,3))),r}function tb(n,e,t,s){let o=Object.keys(e.mcpTools.byServer),i=t;return e.mcpTools.total>0&&(n.push(`${W(e.mcpTools.total)} MCP tool calls across ${o.length} server(s)`),i=ye(i,3),o.length>=s.stage4MinMcpServers&&(i=4)),{stage:i,mcpServers:o}}function sb(n,e){let t=[],s=1,o=$e.toolUsage;s=X_(t,n,s),s=Z_(t,n,s),s=eb(t,n,s,o);let i=e===!1;if(!i){let{stage:r,mcpServers:a}=tb(t,n,s,o);return s=r,{stage:s,evidence:t,tips:Fd(s,a)}}return{stage:s,evidence:t,tips:Fd(s,[],i)}}function nb(n,e,t){let s=e-t;if(s===0)return"All repos customized! Keep instructions up to date and add [skill files](https://code.visualstudio.com/docs/copilot/customization/agent-skills) or [MCP server configs](https://code.visualstudio.com/docs/copilot/customization/mcp-servers) for deeper integration";let o=`${W(s)} repo${s===1?"":"s"} still missing customization \u2014 add [instructions](https://code.visualstudio.com/docs/copilot/customization/custom-instructions), [agents.md](https://code.visualstudio.com/docs/copilot/customization/custom-instructions), or [MCP configs](https://code.visualstudio.com/docs/copilot/customization/mcp-servers) for full coverage.`,i=(n?.workspaces||[]).filter(a=>Object.values(a.typeStatuses).every(l=>l==="\u274C")).filter(a=>!a.workspacePath.startsWith("<unresolved:")).sort((a,l)=>l.interactionCount!==a.interactionCount?l.interactionCount-a.interactionCount:l.sessionCount-a.sessionCount).slice(0,3);if(i.length===0)return o;let r=i.map(a=>`${a.workspaceName} (${W(a.interactionCount)} interaction${a.interactionCount===1?"":"s"})`).join(`
|
|
83
83
|
`);return`${o}
|
|
84
84
|
|
|
85
85
|
Top repos to customize first:
|
|
86
|
-
${r}`}function D_(n,e,t,s){let o=1;return e>0&&(o=2),n>=s.stage3MinCustomizationRate&&e>=s.stage3MinCustomizedRepos&&(o=3),n>=s.stage4MinCustomizationRate&&e>=s.stage4MinCustomizedRepos&&(o=4),t>=s.stage3MinUniqueModels&&(o=ye(o,3)),t>=s.stage4MinUniqueModels&&e>=s.stage4MinCustomizedRepos&&(o=4),o}function E_(n,e,t){let s=[],o=e-t;return n<2&&s.push("Create a [.github/copilot-instructions.md](https://code.visualstudio.com/docs/copilot/customization/custom-instructions) or [CLAUDE.md](https://docs.anthropic.com/en/docs/claude-code/memory) file with project-specific guidelines \u2014 [\u25B6 User Instructions video](https://tech.hub.ms/github-copilot/videos/user-instructions)"),n<3&&s.push("Add [custom instructions](https://code.visualstudio.com/docs/copilot/customization/custom-instructions) to more repositories to standardize your Copilot experience \u2014 [\u25B6 User Instructions video](https://tech.hub.ms/github-copilot/videos/user-instructions)"),n<4&&o>0?s.push(`${W(t)} of ${W(e)} repos have customization \u2014 add [instructions and agents.md](https://code.visualstudio.com/docs/copilot/customization/custom-instructions) to the remaining ${W(o)} repo${o===1?"":"s"} for Stage 4`):n<4&&s.push("Aim for consistent customization across all projects with [instructions and agents.md](https://code.visualstudio.com/docs/copilot/customization/custom-instructions)"),s}function R_(n){return[...new Set([...n.modelSwitching.standardModels,...n.modelSwitching.premiumModels,...n.modelSwitching.lowCostModels,...n.modelSwitching.mediumCostModels,...n.modelSwitching.highCostModels])]}function I_(n,e,t,s){e>0&&n.push(`Worked in ${e} repositor${e===1?"y":"ies"}`),t.length>=s.stage3MinUniqueModels&&n.push(`Used ${t.length} different models`)}function U_(n,e,t){let s=n;return e.modelSwitching.foundryWindowsSessions>0&&(s=ye(s,2),t.push(`Used Microsoft Foundry / local models in ${W(e.modelSwitching.foundryWindowsSessions)} session${e.modelSwitching.foundryWindowsSessions===1?"":"s"}`)),e.modelSwitching.unknownProviderSessions>0&&(s=ye(s,2),t.push(`Used models from unknown providers in ${W(e.modelSwitching.unknownProviderSessions)} session${e.modelSwitching.unknownProviderSessions===1?"":"s"}`)),s}function O_(n,e,t,s,o){e>=4?n.push(`${W(t)} of ${W(s)} repos customized (${o.stage4MinCustomizationRate*100}%+ with ${o.stage4MinCustomizedRepos}+ repos \u2192 Stage 4)`):e>=3?n.push(`${W(t)} of ${W(s)} repos customized (${o.stage3MinCustomizationRate*100}%+ with ${o.stage3MinCustomizedRepos}+ repos \u2192 Stage 3)`):t>0&&n.push(`${W(t)} of ${W(s)} repos with custom instructions or agents.md`)}function F_(n,e,t,s,o,i,r){let a=[...n];return t.modelSwitching.foundryWindowsSessions===0&&a.unshift("Try the Microsoft Foundry on Windows extension if you want to experiment with local models and offline-friendly workflows"),t.modelSwitching.unknownProviderSessions===0&&s.length<=1&&a.unshift("Try different model providers from the marketplace when you want more specialized or cost-effective options"),e>=4&&a.push(x_(o,i,r)),a}function N_(n,e){let t=[],s=We.customization,o=e,i=o?.totalWorkspaces??0,r=i-(o?.workspacesWithIssues??0),a=i>0?r/i:0,c=R_(n),d=D_(a,r,c.length,s);I_(t,i,c,s),d=U_(d,n,t),O_(t,d,r,i,s);let p=E_(d,i,r);return p=F_(p,d,n,c,o,i,r),{stage:d,evidence:t,tips:p}}function L_(n,e,t,s){return n>=s.stage4MinSessions&&e>=s.stage3MinModesUsed&&t>=s.stage3MinContextRefs}function j_(n,e,t,s){let o=[];return n<2&&o.push("Use AI more regularly - even for quick questions \u2014 [\u25B6 Chat in IDE video](https://tech.hub.ms/github-copilot/videos/chat-in-ide)"),n<3&&(e<s.stage3MinModesUsed&&o.push("Combine [ask mode with agent mode](https://code.visualstudio.com/docs/copilot/agents/overview) in your daily workflow \u2014 [\u25B6 Agent Mode video](https://tech.hub.ms/github-copilot/videos/agent-mode)"),t<s.hasExplicitContextMinRefs&&o.push("Use explicit [context references](https://code.visualstudio.com/docs/copilot/chat/copilot-chat#_add-context-to-your-prompts) like #file, @workspace, and #selection")),n<4&&(t<s.stage3MinContextRefs&&o.push("Make explicit context a habit - use [#file, @workspace, and other references](https://code.visualstudio.com/docs/copilot/chat/copilot-chat#_add-context-to-your-prompts) consistently"),o.push("Make AI part of every coding task: planning, coding, testing, and reviewing")),o}function G_(n){return n.contextReferences.file+n.contextReferences.selection+n.contextReferences.symbol+n.contextReferences.codebase+n.contextReferences.workspace}function B_(n){return[n.modeUsage.ask>0,n.modeUsage.agent>0,Lt(n.modeUsage)>0].filter(Boolean).length}function q_(n,e,t,s){return e.sessions>=s.stage2MinSessions?(n.push(`${W(e.sessions)} sessions in the last 30 days`),2):t}function z_(n,e,t,s){if(!e.applyUsage||e.applyUsage.totalCodeBlocks<=0)return t;let o=Math.round(e.applyUsage.applyRate);return n.push(`${o}% code block apply rate (${W(e.applyUsage.totalApplies)}/${W(e.applyUsage.totalCodeBlocks)})`),o>=s.stage2MinApplyRatePct?ye(t,2):t}function W_(n,e){if(e.sessionDuration&&e.sessionDuration.avgDurationMs>0&&n.push(`Avg ${Math.round(e.sessionDuration.avgDurationMs/6e4)}min session duration`),e.sessionDuration&&e.sessionDuration.activeDurationMs>0&&e.sessions>0){let t=Math.round(e.sessionDuration.activeDurationMs/e.sessions/6e4);n.push(`Avg ${t}min active time (interacting + waiting on the agent)`)}}function $_(n,e,t,s,o){let i=e;return t>=o.stage3MinModesUsed&&(n.push(`Uses ${t} modes (ask/agent/cli)`),i=ye(i,3)),s>=o.hasExplicitContextMinRefs&&(n.push(`${W(s)} explicit context references`),s>=o.stage3MinContextRefs&&(i=ye(i,3))),i}function H_(n,e,t,s,o,i){return L_(e.sessions,t,s,o)?(i.push("Deep integration: regular usage with multi-mode and explicit context"),4):n}function J_(n){let e=[],t=1,s=We.workflowIntegration;t=q_(e,n,t,s),t=z_(e,n,t,s),W_(e,n);let o=G_(n),i=B_(n);return t=$_(e,t,i,o,s),t=H_(t,n,i,o,s,e),{stage:t,evidence:e,tips:j_(t,i,o,s)}}async function ir(n,e,t=!0,s){let o=await e(t),i=o.last30Days,r=Zy(i),a=m_(i),c=T_(i),d=A_(i,s),p=N_(i,n),g=J_(i),h=By([r.stage,a.stage,c.stage,d.stage,p.stage,g.stage]);return{overallStage:h,overallLabel:Gy[h]??`Stage ${h}`,categories:[{category:"Prompt Engineering",icon:"\u{1F4AC}",stage:r.stage,evidence:r.evidence,tips:r.tips},{category:"Context Engineering",icon:"\u{1F4CE}",stage:a.stage,evidence:a.evidence,tips:a.tips},{category:"Agentic",icon:"\u{1F916}",stage:c.stage,evidence:c.evidence,tips:c.tips},{category:"Tool Usage",icon:"\u{1F527}",stage:d.stage,evidence:d.evidence,tips:d.tips},{category:"Customization",icon:"\u2699\uFE0F",stage:p.stage,evidence:p.evidence,tips:p.tips},{category:"Workflow Integration",icon:"\u{1F504}",stage:g.stage,evidence:g.evidence,tips:g.tips}],period:i,lastUpdated:o.lastUpdated.toISOString(),agenticTrend:o.agenticDailyTrend}}var K_="hermes/state.db#",V_="title_generation",rr=class{_sqlJsModule=null;_sqlJsInitPromise=null;_dbCache=new Map;_dbCacheInflight=new Map;_dbPathOverride=null;dispose(){for(let e of this._dbCache.values())try{e.db.close()}catch{}this._dbCache.clear(),this._dbCacheInflight.clear(),this._sqlJsInitPromise=null}getConfigDir(){let e=process.env.HERMES_HOME;if(e&&e.trim())return e;if(so.platform()==="win32"){let t=process.env.LOCALAPPDATA||tn.join(so.homedir(),"AppData","Local");return tn.join(t,"hermes")}return tn.join(so.homedir(),".hermes")}getDbPath(){return this._dbPathOverride??tn.join(this.getConfigDir(),"state.db")}setDbPathOverrideForTests(e){this._dbPathOverride=e}virtualPath(e){return`${this.getDbPath()}#${e}`}isHermesSessionFile(e){return e.replace(/\\/g,"/").toLowerCase().includes(K_)}getDbPathFromVirtual(e){let t=e.lastIndexOf("state.db#");return t===-1?e:e.substring(0,t+8)}getSessionId(e){let t=e.lastIndexOf("state.db#");return t===-1?null:e.substring(t+9)||null}async statSessionFile(e){return to.promises.stat(this.getDbPathFromVirtual(e))}closeDb(e){try{e.close()}catch{}}isMissingFileError(e){let t=e?.code;return t==="ENOENT"||t==="ENOTDIR"}async statDb(e){try{return await to.promises.stat(e)}catch(t){return this.isMissingFileError(t)&&this._dbCache.has(e)&&(this.closeDb(this._dbCache.get(e).db),this._dbCache.delete(e)),null}}isCachedDbCurrent(e,t){let s=this._dbCache.get(e);return!!s&&s.mtimeMs===t.mtimeMs&&s.size===t.size}sameDbStats(e,t){return e.mtimeMs===t.mtimeMs&&e.size===t.size}async refreshDb(e,t){let s;try{let r=await this.initSqlJs(),a=await to.promises.readFile(e);s=new r.Database(a)}catch{return this._dbCache.get(e)?.db??null}let o=await this.statDb(e);if(!o||!this.sameDbStats(t,o))return this.closeDb(s),this._dbCache.get(e)?.db??null;let i=this._dbCache.get(e);return i&&this.closeDb(i.db),this._dbCache.set(e,{db:s,mtimeMs:t.mtimeMs,size:t.size}),s}async getDb(e){let t=await this.statDb(e);if(!t)return this._dbCache.get(e)?.db??null;if(this.isCachedDbCurrent(e,t))return this._dbCache.get(e).db;let s=`${e}:${t.mtimeMs}:${t.size}`,o=this._dbCacheInflight.get(s);if(o)return o;let i=this.refreshDb(e,t);this._dbCacheInflight.set(s,i);try{return await i}finally{this._dbCacheInflight.get(s)===i&&this._dbCacheInflight.delete(s)}}async initSqlJs(){return this._sqlJsModule?this._sqlJsModule:(this._sqlJsInitPromise||(this._sqlJsInitPromise=(async()=>{let e=tn.join(__dirname,"sql-wasm.wasm"),t;try{t=await to.promises.readFile(e)}catch{}let s=await(0,Td.default)(t?{wasmBinary:t.buffer}:void 0);return this._sqlJsModule=s,s})().catch(e=>{throw this._sqlJsInitPromise=null,e})),this._sqlJsInitPromise)}rowsToObjects(e){if(e.length===0)return[];let{columns:t,values:s}=e[0];return s.map(o=>{let i={};return t.forEach((r,a)=>{i[r]=o[a]}),i})}async discoverSessionIds(){let e=await this.getDb(this.getDbPath());if(!e)return[];try{let t=e.exec("SELECT id FROM sessions ORDER BY started_at DESC");return this.rowsToObjects(t).map(s=>s.id)}catch{return[]}}async getChildCounts(e){let t=new Map;if(e.length===0)return t;let s=await this.getDb(this.getDbPath());if(!s)return t;try{let o=s.exec(`SELECT parent_session_id, COUNT(*) as child_count FROM sessions
|
|
86
|
+
${r}`}function ob(n,e,t,s){let o=1;return e>0&&(o=2),n>=s.stage3MinCustomizationRate&&e>=s.stage3MinCustomizedRepos&&(o=3),n>=s.stage4MinCustomizationRate&&e>=s.stage4MinCustomizedRepos&&(o=4),t>=s.stage3MinUniqueModels&&(o=ye(o,3)),t>=s.stage4MinUniqueModels&&e>=s.stage4MinCustomizedRepos&&(o=4),o}function ib(n,e,t){let s=[],o=e-t;return n<2&&s.push("Create a [.github/copilot-instructions.md](https://code.visualstudio.com/docs/copilot/customization/custom-instructions) or [CLAUDE.md](https://docs.anthropic.com/en/docs/claude-code/memory) file with project-specific guidelines \u2014 [\u25B6 User Instructions video](https://tech.hub.ms/github-copilot/videos/user-instructions)"),n<3&&s.push("Add [custom instructions](https://code.visualstudio.com/docs/copilot/customization/custom-instructions) to more repositories to standardize your Copilot experience \u2014 [\u25B6 User Instructions video](https://tech.hub.ms/github-copilot/videos/user-instructions)"),n<4&&o>0?s.push(`${W(t)} of ${W(e)} repos have customization \u2014 add [instructions and agents.md](https://code.visualstudio.com/docs/copilot/customization/custom-instructions) to the remaining ${W(o)} repo${o===1?"":"s"} for Stage 4`):n<4&&s.push("Aim for consistent customization across all projects with [instructions and agents.md](https://code.visualstudio.com/docs/copilot/customization/custom-instructions)"),s}function rb(n){return[...new Set([...n.modelSwitching.standardModels,...n.modelSwitching.premiumModels,...n.modelSwitching.lowCostModels,...n.modelSwitching.mediumCostModels,...n.modelSwitching.highCostModels])]}function ab(n,e,t,s){e>0&&n.push(`Worked in ${e} repositor${e===1?"y":"ies"}`),t.length>=s.stage3MinUniqueModels&&n.push(`Used ${t.length} different models`)}function lb(n,e,t){let s=n;return e.modelSwitching.foundryWindowsSessions>0&&(s=ye(s,2),t.push(`Used Microsoft Foundry / local models in ${W(e.modelSwitching.foundryWindowsSessions)} session${e.modelSwitching.foundryWindowsSessions===1?"":"s"}`)),e.modelSwitching.unknownProviderSessions>0&&(s=ye(s,2),t.push(`Used models from unknown providers in ${W(e.modelSwitching.unknownProviderSessions)} session${e.modelSwitching.unknownProviderSessions===1?"":"s"}`)),s}function cb(n,e,t,s,o){e>=4?n.push(`${W(t)} of ${W(s)} repos customized (${o.stage4MinCustomizationRate*100}%+ with ${o.stage4MinCustomizedRepos}+ repos \u2192 Stage 4)`):e>=3?n.push(`${W(t)} of ${W(s)} repos customized (${o.stage3MinCustomizationRate*100}%+ with ${o.stage3MinCustomizedRepos}+ repos \u2192 Stage 3)`):t>0&&n.push(`${W(t)} of ${W(s)} repos with custom instructions or agents.md`)}function ub(n,e,t,s,o,i,r){let a=[...n];return t.modelSwitching.foundryWindowsSessions===0&&a.unshift("Try the Microsoft Foundry on Windows extension if you want to experiment with local models and offline-friendly workflows"),t.modelSwitching.unknownProviderSessions===0&&s.length<=1&&a.unshift("Try different model providers from the marketplace when you want more specialized or cost-effective options"),e>=4&&a.push(nb(o,i,r)),a}function db(n,e){let t=[],s=$e.customization,o=e,i=o?.totalWorkspaces??0,r=i-(o?.workspacesWithIssues??0),a=i>0?r/i:0,l=rb(n),d=ob(a,r,l.length,s);ab(t,i,l,s),d=lb(d,n,t),cb(t,d,r,i,s);let p=ib(d,i,r);return p=ub(p,d,n,l,o,i,r),{stage:d,evidence:t,tips:p}}function mb(n,e,t,s){return n>=s.stage4MinSessions&&e>=s.stage3MinModesUsed&&t>=s.stage3MinContextRefs}function pb(n,e,t,s){let o=[];return n<2&&o.push("Use AI more regularly - even for quick questions \u2014 [\u25B6 Chat in IDE video](https://tech.hub.ms/github-copilot/videos/chat-in-ide)"),n<3&&(e<s.stage3MinModesUsed&&o.push("Combine [ask mode with agent mode](https://code.visualstudio.com/docs/copilot/agents/overview) in your daily workflow \u2014 [\u25B6 Agent Mode video](https://tech.hub.ms/github-copilot/videos/agent-mode)"),t<s.hasExplicitContextMinRefs&&o.push("Use explicit [context references](https://code.visualstudio.com/docs/copilot/chat/copilot-chat#_add-context-to-your-prompts) like #file, @workspace, and #selection")),n<4&&(t<s.stage3MinContextRefs&&o.push("Make explicit context a habit - use [#file, @workspace, and other references](https://code.visualstudio.com/docs/copilot/chat/copilot-chat#_add-context-to-your-prompts) consistently"),o.push("Make AI part of every coding task: planning, coding, testing, and reviewing")),o}function gb(n){return n.contextReferences.file+n.contextReferences.selection+n.contextReferences.symbol+n.contextReferences.codebase+n.contextReferences.workspace}function fb(n){return[n.modeUsage.ask>0,n.modeUsage.agent>0,qt(n.modeUsage)>0].filter(Boolean).length}function hb(n,e,t,s){return e.sessions>=s.stage2MinSessions?(n.push(`${W(e.sessions)} sessions in the last 30 days`),2):t}function yb(n,e,t,s){if(!e.applyUsage||e.applyUsage.totalCodeBlocks<=0)return t;let o=Math.round(e.applyUsage.applyRate);return n.push(`${o}% code block apply rate (${W(e.applyUsage.totalApplies)}/${W(e.applyUsage.totalCodeBlocks)})`),o>=s.stage2MinApplyRatePct?ye(t,2):t}function _b(n,e){if(e.sessionDuration&&e.sessionDuration.avgDurationMs>0&&n.push(`Avg ${Math.round(e.sessionDuration.avgDurationMs/6e4)}min session duration`),e.sessionDuration&&e.sessionDuration.activeDurationMs>0&&e.sessions>0){let t=Math.round(e.sessionDuration.activeDurationMs/e.sessions/6e4);n.push(`Avg ${t}min active time (interacting + waiting on the agent)`)}}function bb(n,e,t,s,o){let i=e;return t>=o.stage3MinModesUsed&&(n.push(`Uses ${t} modes (ask/agent/cli)`),i=ye(i,3)),s>=o.hasExplicitContextMinRefs&&(n.push(`${W(s)} explicit context references`),s>=o.stage3MinContextRefs&&(i=ye(i,3))),i}function Cb(n,e,t,s,o,i){return mb(e.sessions,t,s,o)?(i.push("Deep integration: regular usage with multi-mode and explicit context"),4):n}function kb(n){let e=[],t=1,s=$e.workflowIntegration;t=hb(e,n,t,s),t=yb(e,n,t,s),_b(e,n);let o=gb(n),i=fb(n);return t=bb(e,t,i,o,s),t=Cb(t,n,i,o,s,e),{stage:t,evidence:e,tips:pb(t,i,o,s)}}async function cr(n,e,t=!0,s){let o=await e(t),i=o.last30Days,r=P_(i),a=G_(i),l=Q_(i),d=sb(i,s),p=db(i,n),g=kb(i),h=f_([r.stage,a.stage,l.stage,d.stage,p.stage,g.stage]);return{overallStage:h,overallLabel:g_[h]??`Stage ${h}`,categories:[{category:"Prompt Engineering",icon:"\u{1F4AC}",stage:r.stage,evidence:r.evidence,tips:r.tips},{category:"Context Engineering",icon:"\u{1F4CE}",stage:a.stage,evidence:a.evidence,tips:a.tips},{category:"Agentic",icon:"\u{1F916}",stage:l.stage,evidence:l.evidence,tips:l.tips},{category:"Tool Usage",icon:"\u{1F527}",stage:d.stage,evidence:d.evidence,tips:d.tips},{category:"Customization",icon:"\u2699\uFE0F",stage:p.stage,evidence:p.evidence,tips:p.tips},{category:"Workflow Integration",icon:"\u{1F504}",stage:g.stage,evidence:g.evidence,tips:g.tips}],period:i,lastUpdated:o.lastUpdated.toISOString(),agenticTrend:o.agenticDailyTrend}}var Sb="hermes/state.db#",Tb="title_generation",ur=class{_sqlJsModule=null;_sqlJsInitPromise=null;_dbCache=new Map;_dbCacheInflight=new Map;_dbPathOverride=null;dispose(){for(let e of this._dbCache.values())try{e.db.close()}catch{}this._dbCache.clear(),this._dbCacheInflight.clear(),this._sqlJsInitPromise=null}getConfigDir(){let e=process.env.HERMES_HOME;if(e&&e.trim())return e;if(ro.platform()==="win32"){let t=process.env.LOCALAPPDATA||on.join(ro.homedir(),"AppData","Local");return on.join(t,"hermes")}return on.join(ro.homedir(),".hermes")}getDbPath(){return this._dbPathOverride??on.join(this.getConfigDir(),"state.db")}setDbPathOverrideForTests(e){this._dbPathOverride=e}virtualPath(e){return`${this.getDbPath()}#${e}`}isHermesSessionFile(e){return e.replace(/\\/g,"/").toLowerCase().includes(Sb)}getDbPathFromVirtual(e){let t=e.lastIndexOf("state.db#");return t===-1?e:e.substring(0,t+8)}getSessionId(e){let t=e.lastIndexOf("state.db#");return t===-1?null:e.substring(t+9)||null}async statSessionFile(e){return io.promises.stat(this.getDbPathFromVirtual(e))}closeDb(e){try{e.close()}catch{}}isMissingFileError(e){let t=e?.code;return t==="ENOENT"||t==="ENOTDIR"}async statDb(e){try{return await io.promises.stat(e)}catch(t){return this.isMissingFileError(t)&&this._dbCache.has(e)&&(this.closeDb(this._dbCache.get(e).db),this._dbCache.delete(e)),null}}isCachedDbCurrent(e,t){let s=this._dbCache.get(e);return!!s&&s.mtimeMs===t.mtimeMs&&s.size===t.size}sameDbStats(e,t){return e.mtimeMs===t.mtimeMs&&e.size===t.size}async refreshDb(e,t){let s;try{let r=await this.initSqlJs(),a=await io.promises.readFile(e);s=new r.Database(a)}catch{return this._dbCache.get(e)?.db??null}let o=await this.statDb(e);if(!o||!this.sameDbStats(t,o))return this.closeDb(s),this._dbCache.get(e)?.db??null;let i=this._dbCache.get(e);return i&&this.closeDb(i.db),this._dbCache.set(e,{db:s,mtimeMs:t.mtimeMs,size:t.size}),s}async getDb(e){let t=await this.statDb(e);if(!t)return this._dbCache.get(e)?.db??null;if(this.isCachedDbCurrent(e,t))return this._dbCache.get(e).db;let s=`${e}:${t.mtimeMs}:${t.size}`,o=this._dbCacheInflight.get(s);if(o)return o;let i=this.refreshDb(e,t);this._dbCacheInflight.set(s,i);try{return await i}finally{this._dbCacheInflight.get(s)===i&&this._dbCacheInflight.delete(s)}}async initSqlJs(){return this._sqlJsModule?this._sqlJsModule:(this._sqlJsInitPromise||(this._sqlJsInitPromise=(async()=>{let e=on.join(__dirname,"sql-wasm.wasm"),t;try{t=await io.promises.readFile(e)}catch{}let s=await(0,Ld.default)(t?{wasmBinary:t.buffer}:void 0);return this._sqlJsModule=s,s})().catch(e=>{throw this._sqlJsInitPromise=null,e})),this._sqlJsInitPromise)}rowsToObjects(e){if(e.length===0)return[];let{columns:t,values:s}=e[0];return s.map(o=>{let i={};return t.forEach((r,a)=>{i[r]=o[a]}),i})}async discoverSessionIds(){let e=await this.getDb(this.getDbPath());if(!e)return[];try{let t=e.exec("SELECT id FROM sessions ORDER BY started_at DESC");return this.rowsToObjects(t).map(s=>s.id)}catch{return[]}}async getChildCounts(e){let t=new Map;if(e.length===0)return t;let s=await this.getDb(this.getDbPath());if(!s)return t;try{let o=s.exec(`SELECT parent_session_id, COUNT(*) as child_count FROM sessions
|
|
87
87
|
WHERE parent_session_id IS NOT NULL
|
|
88
|
-
GROUP BY parent_session_id`),i=this.rowsToObjects(o),r=new Set(e);for(let a of i){let
|
|
88
|
+
GROUP BY parent_session_id`),i=this.rowsToObjects(o),r=new Set(e);for(let a of i){let l=a.parent_session_id,d=a.child_count??0;l&&r.has(l)&&t.set(l,d)}}catch{}return t}async getMultiAgentParentCount(e,t=$e.agentic.multiAgentMinChildren){let s=await this.getChildCounts(e),o=0;for(let i of s.values())i>=t&&o++;return o}async readSession(e){let t=this.getSessionId(e);if(!t)return null;let s=await this.getDb(this.getDbPathFromVirtual(e));if(!s)return null;try{let o=s.exec(`SELECT id, source, display_name, model, started_at, ended_at, message_count,
|
|
89
89
|
tool_call_count, input_tokens, output_tokens, cache_read_tokens,
|
|
90
90
|
cache_write_tokens, reasoning_tokens, cwd, git_branch, git_repo_root,
|
|
91
91
|
title, api_call_count, parent_session_id, archived, pinned
|
|
@@ -94,11 +94,11 @@ ${r}`}function D_(n,e,t,s){let o=1;return e>0&&(o=2),n>=s.stage3MinCustomization
|
|
|
94
94
|
active, compacted
|
|
95
95
|
FROM messages WHERE session_id = ? ORDER BY timestamp ASC, id ASC`,[t]);return this.rowsToObjects(o)}catch{return[]}}async getModelUsageRows(e,t=!1){let s=this.getSessionId(e);if(!s)return[];let o=await this.getDb(this.getDbPathFromVirtual(e));if(!o)return[];try{let i=o.exec(`SELECT session_id, model, task, api_call_count, input_tokens, output_tokens,
|
|
96
96
|
cache_read_tokens, cache_write_tokens, reasoning_tokens
|
|
97
|
-
FROM session_model_usage WHERE session_id = ?`,[s]),r=this.rowsToObjects(i);return t?r:r.filter(a=>(a.task??"")!==V_)}catch{return[]}}sumUsageRowTokens(e){let t=0,s=0;for(let o of e)t+=(o.input_tokens||0)+(o.output_tokens||0)+(o.cache_read_tokens||0)+(o.cache_write_tokens||0)+(o.reasoning_tokens||0),s+=o.reasoning_tokens||0;return{tokens:t,thinkingTokens:s}}tokensFromSessionRow(e){return e?{tokens:(e.input_tokens||0)+(e.output_tokens||0)+(e.cache_read_tokens||0)+(e.cache_write_tokens||0)+(e.reasoning_tokens||0),thinkingTokens:e.reasoning_tokens||0}:{tokens:0,thinkingTokens:0}}async getTokens(e){let t=await this.getModelUsageRows(e);if(t.length>0)return this.sumUsageRowTokens(t);let s=await this.readSession(e);return this.tokensFromSessionRow(s)}async countInteractions(e){return(await this.getMessages(e)).filter(s=>s.role==="user").length}mergeUsageRowIntoModelUsage(e,t){let s=t.model||"unknown";if(O(s))return;let o=e[s]??{inputTokens:0,outputTokens:0,cachedReadTokens:0,cacheCreationTokens:0};o.inputTokens+=t.input_tokens||0,o.outputTokens+=t.output_tokens||0,o.cachedReadTokens=(o.cachedReadTokens||0)+(t.cache_read_tokens||0),o.cacheCreationTokens=(o.cacheCreationTokens||0)+(t.cache_write_tokens||0),e[s]=o}modelUsageFromSessionRow(e){let t={};if(!e||(e.input_tokens||0)+(e.output_tokens||0)===0)return t;let s=e.model&&!O(e.model)?e.model:"unknown";return t[s]={inputTokens:e.input_tokens||0,outputTokens:e.output_tokens||0,cachedReadTokens:e.cache_read_tokens||0,cacheCreationTokens:e.cache_write_tokens||0,sessions:1},t}async getModelUsage(e){let t=await this.getModelUsageRows(e),s={};for(let i of t)this.mergeUsageRowIntoModelUsage(s,i);if(Object.keys(s).length>0)return s;let o=await this.readSession(e);return this.modelUsageFromSessionRow(o)}async resolveTitle(e,t){if(t?.title&&t.title.trim())return t.title.trim();let o=(await this.getMessages(e)).find(r=>r.role==="user"&&r.content&&r.content.trim());if(!o?.content)return;let i=o.content.trim();return i.length>100?i.slice(0,100)+"...":i}parseToolCalls(e){if(!e)return[];let t;try{t=JSON.parse(e)}catch{return[]}if(!Array.isArray(t))return[];let s=[];for(let o of t){if(typeof o!="object"||o===null)continue;let i=o,r=i.function,a=r?.name||i.name||void 0;if(!a)continue;let c=i.id||i.call_id||null,d=r?.arguments;s.push({id:c,name:a,arguments:typeof d=="string"?d:void 0})}return s}parseToolResultText(e){if(e)try{let t=JSON.parse(e);if(typeof t=="string")return t;if(t&&typeof t=="object"){let s=t;if(typeof s.content=="string")return s.content;if(typeof s.output=="string")return s.output;if(typeof s.result=="string")return s.result}return e}catch{return e}}async getDailyFractions(e){let t=await this.getMessages(e),s={},o=0;for(let r of t){if(!r.timestamp)continue;let a=r.token_count&&r.token_count>0?r.token_count:1,c=N(new Date(r.timestamp*1e3));s[c]=(s[c]||0)+a,o+=a}if(o===0){let r=await this.readSession(e);return{[r?.started_at?N(new Date(r.started_at*1e3)):N(new Date)]:1}}let i={};for(let[r,a]of Object.entries(s))i[r]=a/o;return i}};var bl=S(require("fs")),jt=S(require("path"));var on=S(require("fs")),pr=S(require("path"));var Y_=new Set(["edit","create","write","patch","multiedit","notebookedit","editfiles","edit_files","edit_file","apply_patch","applypatch","create_file","createfile","write_file","writefile","insert_edit_into_file","insertedit","replace_string_in_file","replacestring","edit_notebook_file","editnotebook","str_replace_editor","str_replace","copilot_editfiles","copilot_editfile","copilot_writefile","copilot_applypatch","copilot_createfile","copilot_insertedit","copilot_replacestring","copilot_editnotebook","write_to_file","replace_in_file","apply_diff","replace","fswrite","fsappend","strreplace","windsurf_file_edit","windsurf_file_create"]);function nl(n){return Y_.has(n.toLowerCase())}var Q_=["file_path","filePath","path","absolute_path","absolutePath","target_file","targetFile","file","filename","fileName","notebook_path"];function ol(n){if(!n)return null;let e;try{e=JSON.parse(n)}catch{return null}if(!e||typeof e!="object")return null;let t=e;for(let o of Q_){let i=t[o];if(typeof i=="string"&&i)return i}let s=t.uri;if(s&&typeof s=="object"){let o=s;if(typeof o.fsPath=="string"&&o.fsPath)return o.fsPath;if(typeof o.path=="string"&&o.path)return o.path}return null}function X_(){return{calls:0,toolCalls:0,editTurns:0,oneShotEditTurns:0,retries:0,selfCorrections:0,editToolCalls:0,inputTokens:0,outputTokens:0,cachedReadTokens:0,cost:0}}function wd(n,e){return n[e]||(n[e]=X_()),n[e]}function Z_(n,e){let t=0,s=0,o=0;e.toolCalls=(e.toolCalls??0)+n.length;let i=new Set,r=null,a=0;for(let c of n){if(!nl(c.toolName)){r=null;continue}t++;let d=ol(c.arguments)??`\0unknown-${a++}`;i.has(d)&&(r===d?s++:o++),i.add(d),r=d}e.editToolCalls+=t,t>0&&(e.editTurns++,e.retries+=s,e.selfCorrections+=o,s===0&&o===0&&e.oneShotEditTurns++)}function ar(n){let e={};for(let t of n){let s=t.model||"unknown",o=wd(e,s);o.calls++,Z_(t.toolCalls??[],o)}return e}function Md(n){let e=[];if(!n.response||!Array.isArray(n.response))return e;for(let t of n.response)if(!(!t||typeof t!="object"))if(t.kind==="textEditGroup"){let s=t.uri?.fsPath||t.uri?.path;e.push({toolName:"edit",arguments:s?JSON.stringify({path:s}):void 0})}else(t.kind==="toolInvocationSerialized"||t.kind==="prepareToolInvocation")&&e.push({toolName:"toolInvocation"});return e}function vd(n,e){if(e)for(let[t,s]of Object.entries(e)){let o=wd(n,t);o.calls+=s.calls,o.toolCalls=(o.toolCalls??0)+(s.toolCalls??0),o.editTurns+=s.editTurns,o.oneShotEditTurns+=s.oneShotEditTurns,o.retries+=s.retries,o.selfCorrections+=s.selfCorrections,o.editToolCalls+=s.editToolCalls,o.inputTokens+=s.inputTokens,o.outputTokens+=s.outputTokens,o.cachedReadTokens+=s.cachedReadTokens,o.cost+=s.cost}}var eb=[{re:/^\s*(no[,.!](?:\s|$)|nope\b)/i,label:"starts with 'no'"},{re:/\bthat'?s (not|wrong|incorrect)/i,label:"'that's not/wrong/incorrect'"},{re:/\bnot what i (asked|meant|wanted)/i,label:"'not what I asked/meant/wanted'"},{re:/\byou('?re| are) wrong/i,label:"'you're wrong'"},{re:/\bactually[,.]/i,label:"'actually,'"},{re:/\b(undo|revert|roll ?back)\b/i,label:"undo/revert/rollback"},{re:/\bwhy did you\b/i,label:"'why did you'"},{re:/\byou (broke|deleted|removed|overwrote|changed the wrong)/i,label:"'you broke/deleted/...'"},{re:/\bi (already )?(said|told you|asked)\b/i,label:"'I said/told you/asked'"},{re:/\bdon'?t (do that|change|touch|modify|commit)/i,label:"'don't do that/change/...'"},{re:/\bstop (doing|changing|that|it)\b|^\s*stop[.!]/i,label:"'stop ...'"},{re:/\bthat (doesn'?t|does not|didn'?t|did not) work/i,label:"'that didn't work'"},{re:/\bwrong (file|function|approach|branch|repo|command)/i,label:"'wrong file/approach/...'"}],tb=[{re:/\blet me (fix|correct|revert|redo|try (that |it )?again)/i,label:"'let me fix/correct/...'"},{re:/\bmy (mistake|error|bad|apologies|fault)/i,label:"'my mistake/error/...'"},{re:/\bi (was wrong|made a (mistake|error))/i,label:"'I was wrong / made a mistake'"},{re:/\byou'?re (absolutely )?right/i,label:"'you're right'"},{re:/\b(apologies|sorry)( for|,|\.|!)/i,label:"apology"},{re:/\bthat (failed|didn'?t work|was incorrect|was wrong)/i,label:"'that failed/didn't work/...'"},{re:/\bi (incorrectly|mistakenly)\b/i,label:"'I incorrectly/mistakenly'"},{re:/\bcorrecting (my|that|the above)/i,label:"'correcting ...'"}],sb=[/\b[A-Z]{3,}\b/,/[!?]{2,}/,/\b(again|seriously|for the (last|third|second) time)\b/i];function nb(n){return sb.some(e=>e.test(n))}var ob=/^\s*\[Terminal\b[^\]]*\bnotification\b/i;function ib(n){return!!n&&!ob.test(n)}var rb=50,Pd=240;function Ad(n,e=0){let t=Math.max(0,e-40),s=n.slice(t,t+Pd).replace(/\s+/g," ").trim();return(t>0?"\u2026":"")+s+(t+Pd<n.length?"\u2026":"")}function xd(n,e){if(!n)return null;for(let t of e){let s=t.re.exec(n);if(s)return{label:t.label,index:s.index}}return null}function lr(n,e){if(Rd(n.counts,e),n.moments.length<rb){n.moments.push(e);return}if(e.type==="user-correction"){for(let t=n.moments.length-1;t>=0;t--)if(n.moments[t].type!=="user-correction"){n.moments[t]=e;return}}}function ab(n,e,t,s){let o=new Set,i=null,r=0,a=!1;for(let c of n){if(!nl(c.toolName)){i=null;continue}let d=ol(c.arguments),p=d??`-${r++}`;o.has(p)&&(lr(s,{type:i===p?"edit-retry":"edit-self-correction",turnNumber:e,timestamp:t,snippet:d?`Re-edited ${d}`:"Re-edited a file (path unknown)",...d?{file:d}:{}}),a=!0),o.add(p),i=p}return a}var lb=4;function Dd(n){let e={moments:[],counts:Ed(),openToolErrors:new Map,lastUserCorrectionTurn:null};for(let t=0;t<n.length;t++){let s=n[t],o=t+1,i=s.timestamp??null,r=ib(s.userMessage)?s.userMessage:void 0,a=e.lastUserCorrectionTurn===o-1,c=xd(r,eb);if(c){let y=e.lastUserCorrectionTurn!==null&&o-e.lastUserCorrectionTurn<=lb;lr(e,{type:"user-correction",turnNumber:o,timestamp:i,snippet:Ad(r,c.index),matchedPattern:c.label,...nb(r)?{intensity:"strong"}:{},...y?{escalated:!0}:{}}),e.lastUserCorrectionTurn=o}let d=s.toolCalls??[],p=!1;for(let y of d){let b=e.openToolErrors.get(y.toolName);if(b&&(b.retried=!0,e.counts.toolErrorsRetried++,e.openToolErrors.delete(y.toolName)),y.isError===!0){let T={type:"tool-error",turnNumber:o,timestamp:i,snippet:`Tool failed: ${y.toolName}`,tool:y.toolName,retried:!1};lr(e,T),e.openToolErrors.set(y.toolName,T),p=!0}}let g=ab(d,o,i,e),h=xd(s.assistantResponse,tb);if(h){let y=p?"tool-error":g?"edit-retry":a||c!==null?"user-correction":void 0;y&&lr(e,{type:"agent-self-correction",turnNumber:o,timestamp:i,snippet:Ad(s.assistantResponse,h.index),matchedPattern:h.label,corroboratedBy:y})}}return e.moments.sort((t,s)=>t.turnNumber-s.turnNumber),{moments:e.moments,counts:e.counts}}function Ed(){return{userCorrections:0,editRetries:0,editSelfCorrections:0,toolErrors:0,toolErrorsRetried:0,agentSelfCorrections:0,escalatedUserCorrections:0}}function Rd(n,e){switch(e.type){case"user-correction":n.userCorrections++,e.escalated&&n.escalatedUserCorrections++;break;case"edit-retry":n.editRetries++;break;case"edit-self-correction":n.editSelfCorrections++;break;case"tool-error":n.toolErrors++,e.retried&&n.toolErrorsRetried++;break;case"agent-self-correction":n.agentSelfCorrections++;break}}function Id(n){let e=Ed();for(let t of n)Rd(e,t);return e}function Ud(n,e){e&&(n.userCorrections+=e.userCorrections,n.editRetries+=e.editRetries,n.editSelfCorrections+=e.editSelfCorrections,n.toolErrors+=e.toolErrors,n.toolErrorsRetried+=e.toolErrorsRetried,n.agentSelfCorrections+=e.agentSelfCorrections,n.escalatedUserCorrections+=e.escalatedUserCorrections)}function Fd(){return{"model-switch":{breaks:0,tokensRewritten:0},compaction:{breaks:0,tokensRewritten:0},"ttl-expiry":{breaks:0,tokensRewritten:0},"prefix-invalidated":{breaks:0,tokensRewritten:0}}}function Od(n){return n.inputTokens+n.cacheReadTokens+n.cacheCreationTokens}function cb(n){return(n.cacheCreation1hTokens??0)>0?36e5:3e5}function ub(n,e,t,s){return n.model!==e.model?"model-switch":n.compacted||e.compacted?"compaction":t>s?"ttl-expiry":"prefix-invalidated"}function Nd(n){let e=Fd(),t=[],s=0,o=0;for(let i=0;i<n.length;i++){let r=n[i];if(s+=r.cacheCreationTokens,o=Math.max(o,Od(r)),i===0)continue;let a=n[i-1],c=Od(a);if(c<2e4||r.cacheReadTokens>=.5*c)continue;let d=Math.max(0,r.timestamp-a.timestamp),p=cb(r),g=ub(r,a,d,p),h=c-r.cacheReadTokens;e[g].breaks+=1,e[g].tokensRewritten+=h,t.length<50&&t.push({turnIndex:i,cause:g,model:r.model,tokensRewritten:h,gapMs:d,ttlMs:p,...g==="model-switch"?{previousModel:a.model}:{}})}return{breaks:t,counts:e,tokensWritten:s,peakContextTokens:o,rewriteFactor:o>0?s/o:0}}function db(n,e){if(e)for(let t of Object.keys(n))n[t].breaks+=e[t].breaks,n[t].tokensRewritten+=e[t].tokensRewritten}function Ld(){return{counts:Fd(),sessionsAnalyzed:0,sessionsWithBreaks:0,tokensWritten:0,peakContextTokens:0,worstRewriteFactor:0}}function jd(n,e){db(n.counts,e.counts),n.sessionsAnalyzed++,e.breaks.length>0&&n.sessionsWithBreaks++,n.tokensWritten+=e.tokensWritten,n.peakContextTokens+=e.peakContextTokens,n.worstRewriteFactor=Math.max(n.worstRewriteFactor,e.rewriteFactor)}var cr=S(require("fs")),ts=S(require("path")),zd=S(require("os")),Wd=require("worker_threads");var Gd=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function mb(){return ts.join(zd.homedir(),".copilot","otel")}function sn(n){let e=n.lastIndexOf("#");if(e!==-1&&n.slice(0,e).endsWith(".db")){let t=n.slice(e+1);return Gd.test(t)?t:null}if(n.includes("session-state")){let t=ts.basename(ts.dirname(n));return Gd.test(t)?t:null}return null}function pb(n){let e=t=>typeof t=="number"?t:0;return{model:n?.["gen_ai.response.model"]||n?.["gen_ai.request.model"]||"unknown",input:e(n?.["gen_ai.usage.input_tokens"]),output:e(n?.["gen_ai.usage.output_tokens"]),cacheCreation:e(n?.["gen_ai.usage.cache_creation.input_tokens"]),cacheRead:e(n?.["gen_ai.usage.cache_read.input_tokens"]),nanoAiu:e(n?.["github.copilot.nano_aiu"])}}function gb(n,e,t){n.has(e)||n.set(e,{modelUsage:{},actualTokens:0,cacheReadTokens:0,nanoAiu:0});let s=n.get(e);if(O(t.model))return;s.modelUsage[t.model]||(s.modelUsage[t.model]={inputTokens:0,outputTokens:0,sessions:0});let o=s.modelUsage[t.model];o.inputTokens+=t.input,o.outputTokens+=t.output,t.cacheCreation>0&&(o.cacheCreationTokens=(o.cacheCreationTokens??0)+t.cacheCreation),t.cacheRead>0&&(o.cachedReadTokens=(o.cachedReadTokens??0)+t.cacheRead),s.actualTokens+=t.input+t.output,s.cacheReadTokens+=t.cacheRead,s.nanoAiu+=t.nanoAiu}var $d='"name":"chat ',fb=10;function hb(n,e){if(n.type!=="span"||!n.name?.startsWith("chat "))return;let t=n.attributes?.["gen_ai.conversation.id"];t&&gb(e,t,pb(n.attributes))}function yb(n){if(!n.includes($d))return null;try{return JSON.parse(n)}catch{return null}}function _b(n){let e=n;return{records:Array.isArray(e?.records)?e.records:[],consumed:e?.consumed&&typeof e.consumed=="object"?e.consumed:{}}}var bb=`
|
|
97
|
+
FROM session_model_usage WHERE session_id = ?`,[s]),r=this.rowsToObjects(i);return t?r:r.filter(a=>(a.task??"")!==Tb)}catch{return[]}}sumUsageRowTokens(e){let t=0,s=0;for(let o of e)t+=(o.input_tokens||0)+(o.output_tokens||0)+(o.cache_read_tokens||0)+(o.cache_write_tokens||0)+(o.reasoning_tokens||0),s+=o.reasoning_tokens||0;return{tokens:t,thinkingTokens:s}}tokensFromSessionRow(e){return e?{tokens:(e.input_tokens||0)+(e.output_tokens||0)+(e.cache_read_tokens||0)+(e.cache_write_tokens||0)+(e.reasoning_tokens||0),thinkingTokens:e.reasoning_tokens||0}:{tokens:0,thinkingTokens:0}}async getTokens(e){let t=await this.getModelUsageRows(e);if(t.length>0)return this.sumUsageRowTokens(t);let s=await this.readSession(e);return this.tokensFromSessionRow(s)}async countInteractions(e){return(await this.getMessages(e)).filter(s=>s.role==="user").length}mergeUsageRowIntoModelUsage(e,t){let s=t.model||"unknown";if(O(s))return;let o=e[s]??{inputTokens:0,outputTokens:0,cachedReadTokens:0,cacheCreationTokens:0};o.inputTokens+=t.input_tokens||0,o.outputTokens+=t.output_tokens||0,o.cachedReadTokens=(o.cachedReadTokens||0)+(t.cache_read_tokens||0),o.cacheCreationTokens=(o.cacheCreationTokens||0)+(t.cache_write_tokens||0),e[s]=o}modelUsageFromSessionRow(e){let t={};if(!e||(e.input_tokens||0)+(e.output_tokens||0)===0)return t;let s=e.model&&!O(e.model)?e.model:"unknown";return t[s]={inputTokens:e.input_tokens||0,outputTokens:e.output_tokens||0,cachedReadTokens:e.cache_read_tokens||0,cacheCreationTokens:e.cache_write_tokens||0,sessions:1},t}async getModelUsage(e){let t=await this.getModelUsageRows(e),s={};for(let i of t)this.mergeUsageRowIntoModelUsage(s,i);if(Object.keys(s).length>0)return s;let o=await this.readSession(e);return this.modelUsageFromSessionRow(o)}async resolveTitle(e,t){if(t?.title&&t.title.trim())return t.title.trim();let o=(await this.getMessages(e)).find(r=>r.role==="user"&&r.content&&r.content.trim());if(!o?.content)return;let i=o.content.trim();return i.length>100?i.slice(0,100)+"...":i}parseToolCalls(e){if(!e)return[];let t;try{t=JSON.parse(e)}catch{return[]}if(!Array.isArray(t))return[];let s=[];for(let o of t){if(typeof o!="object"||o===null)continue;let i=o,r=i.function,a=r?.name||i.name||void 0;if(!a)continue;let l=i.id||i.call_id||null,d=r?.arguments;s.push({id:l,name:a,arguments:typeof d=="string"?d:void 0})}return s}parseToolResultText(e){if(e)try{let t=JSON.parse(e);if(typeof t=="string")return t;if(t&&typeof t=="object"){let s=t;if(typeof s.content=="string")return s.content;if(typeof s.output=="string")return s.output;if(typeof s.result=="string")return s.result}return e}catch{return e}}async getDailyFractions(e){let t=await this.getMessages(e),s={},o=0;for(let r of t){if(!r.timestamp)continue;let a=r.token_count&&r.token_count>0?r.token_count:1,l=N(new Date(r.timestamp*1e3));s[l]=(s[l]||0)+a,o+=a}if(o===0){let r=await this.readSession(e);return{[r?.started_at?N(new Date(r.started_at*1e3)):N(new Date)]:1}}let i={};for(let[r,a]of Object.entries(s))i[r]=a/o;return i}};var xl=S(require("fs")),zt=S(require("path"));var ln=S(require("fs")),br=S(require("path"));var wb=new Set(["edit","create","write","patch","multiedit","notebookedit","editfiles","edit_files","edit_file","apply_patch","applypatch","create_file","createfile","write_file","writefile","insert_edit_into_file","insertedit","replace_string_in_file","replacestring","edit_notebook_file","editnotebook","str_replace_editor","str_replace","copilot_editfiles","copilot_editfile","copilot_writefile","copilot_applypatch","copilot_createfile","copilot_insertedit","copilot_replacestring","copilot_editnotebook","write_to_file","replace_in_file","apply_diff","replace","fswrite","fsappend","strreplace","windsurf_file_edit","windsurf_file_create"]);function dl(n){return wb.has(n.toLowerCase())}var Mb=["file_path","filePath","path","absolute_path","absolutePath","target_file","targetFile","file","filename","fileName","notebook_path"];function ml(n){if(!n)return null;let e;try{e=JSON.parse(n)}catch{return null}if(!e||typeof e!="object")return null;let t=e;for(let o of Mb){let i=t[o];if(typeof i=="string"&&i)return i}let s=t.uri;if(s&&typeof s=="object"){let o=s;if(typeof o.fsPath=="string"&&o.fsPath)return o.fsPath;if(typeof o.path=="string"&&o.path)return o.path}return null}function vb(){return{calls:0,toolCalls:0,editTurns:0,oneShotEditTurns:0,retries:0,selfCorrections:0,editToolCalls:0,inputTokens:0,outputTokens:0,cachedReadTokens:0,cost:0}}function jd(n,e){return n[e]||(n[e]=vb()),n[e]}function Pb(n,e){let t=0,s=0,o=0;e.toolCalls=(e.toolCalls??0)+n.length;let i=new Set,r=null,a=0;for(let l of n){if(!dl(l.toolName)){r=null;continue}t++;let d=ml(l.arguments)??`\0unknown-${a++}`;i.has(d)&&(r===d?s++:o++),i.add(d),r=d}e.editToolCalls+=t,t>0&&(e.editTurns++,e.retries+=s,e.selfCorrections+=o,s===0&&o===0&&e.oneShotEditTurns++)}function dr(n){let e={};for(let t of n){let s=t.model||"unknown",o=jd(e,s);o.calls++,Pb(t.toolCalls??[],o)}return e}function Gd(n){let e=[];if(!n.response||!Array.isArray(n.response))return e;for(let t of n.response)if(!(!t||typeof t!="object"))if(t.kind==="textEditGroup"){let s=t.uri?.fsPath||t.uri?.path;e.push({toolName:"edit",arguments:s?JSON.stringify({path:s}):void 0})}else(t.kind==="toolInvocationSerialized"||t.kind==="prepareToolInvocation")&&e.push({toolName:"toolInvocation"});return e}function Bd(n,e){if(e)for(let[t,s]of Object.entries(e)){let o=jd(n,t);o.calls+=s.calls,o.toolCalls=(o.toolCalls??0)+(s.toolCalls??0),o.editTurns+=s.editTurns,o.oneShotEditTurns+=s.oneShotEditTurns,o.retries+=s.retries,o.selfCorrections+=s.selfCorrections,o.editToolCalls+=s.editToolCalls,o.inputTokens+=s.inputTokens,o.outputTokens+=s.outputTokens,o.cachedReadTokens+=s.cachedReadTokens,o.cost+=s.cost}}var Ab=[{re:/^\s*(no[,.!](?:\s|$)|nope\b)/i,label:"starts with 'no'"},{re:/\bthat'?s (not|wrong|incorrect)/i,label:"'that's not/wrong/incorrect'"},{re:/\bnot what i (asked|meant|wanted)/i,label:"'not what I asked/meant/wanted'"},{re:/\byou('?re| are) wrong/i,label:"'you're wrong'"},{re:/\bactually[,.]/i,label:"'actually,'"},{re:/\b(undo|revert|roll ?back)\b/i,label:"undo/revert/rollback"},{re:/\bwhy did you\b/i,label:"'why did you'"},{re:/\byou (broke|deleted|removed|overwrote|changed the wrong)/i,label:"'you broke/deleted/...'"},{re:/\bi (already )?(said|told you|asked)\b/i,label:"'I said/told you/asked'"},{re:/\bdon'?t (do that|change|touch|modify|commit)/i,label:"'don't do that/change/...'"},{re:/\bstop (doing|changing|that|it)\b|^\s*stop[.!]/i,label:"'stop ...'"},{re:/\bthat (doesn'?t|does not|didn'?t|did not) work/i,label:"'that didn't work'"},{re:/\bwrong (file|function|approach|branch|repo|command)/i,label:"'wrong file/approach/...'"}],xb=[{re:/\blet me (fix|correct|revert|redo|try (that |it )?again)/i,label:"'let me fix/correct/...'"},{re:/\bmy (mistake|error|bad|apologies|fault)/i,label:"'my mistake/error/...'"},{re:/\bi (was wrong|made a (mistake|error))/i,label:"'I was wrong / made a mistake'"},{re:/\byou'?re (absolutely )?right/i,label:"'you're right'"},{re:/\b(apologies|sorry)( for|,|\.|!)/i,label:"apology"},{re:/\bthat (failed|didn'?t work|was incorrect|was wrong)/i,label:"'that failed/didn't work/...'"},{re:/\bi (incorrectly|mistakenly)\b/i,label:"'I incorrectly/mistakenly'"},{re:/\bcorrecting (my|that|the above)/i,label:"'correcting ...'"}],Db=[/\b[A-Z]{3,}\b/,/[!?]{2,}/,/\b(again|seriously|for the (last|third|second) time)\b/i];function Eb(n){return Db.some(e=>e.test(n))}var Rb=/^\s*\[Terminal\b[^\]]*\bnotification\b/i;function Ib(n){return!!n&&!Rb.test(n)}var Ub=50,qd=240;function zd(n,e=0){let t=Math.max(0,e-40),s=n.slice(t,t+qd).replace(/\s+/g," ").trim();return(t>0?"\u2026":"")+s+(t+qd<n.length?"\u2026":"")}function Wd(n,e){if(!n)return null;for(let t of e){let s=t.re.exec(n);if(s)return{label:t.label,index:s.index}}return null}function mr(n,e){if(Jd(n.counts,e),n.moments.length<Ub){n.moments.push(e);return}if(e.type==="user-correction"){for(let t=n.moments.length-1;t>=0;t--)if(n.moments[t].type!=="user-correction"){n.moments[t]=e;return}}}function Ob(n,e,t,s){let o=new Set,i=null,r=0,a=!1;for(let l of n){if(!dl(l.toolName)){i=null;continue}let d=ml(l.arguments),p=d??`-${r++}`;o.has(p)&&(mr(s,{type:i===p?"edit-retry":"edit-self-correction",turnNumber:e,timestamp:t,snippet:d?`Re-edited ${d}`:"Re-edited a file (path unknown)",...d?{file:d}:{}}),a=!0),o.add(p),i=p}return a}var Fb=4;function $d(n){let e={moments:[],counts:Hd(),openToolErrors:new Map,lastUserCorrectionTurn:null};for(let t=0;t<n.length;t++){let s=n[t],o=t+1,i=s.timestamp??null,r=Ib(s.userMessage)?s.userMessage:void 0,a=e.lastUserCorrectionTurn===o-1,l=Wd(r,Ab);if(l){let y=e.lastUserCorrectionTurn!==null&&o-e.lastUserCorrectionTurn<=Fb;mr(e,{type:"user-correction",turnNumber:o,timestamp:i,snippet:zd(r,l.index),matchedPattern:l.label,...Eb(r)?{intensity:"strong"}:{},...y?{escalated:!0}:{}}),e.lastUserCorrectionTurn=o}let d=s.toolCalls??[],p=!1;for(let y of d){let b=e.openToolErrors.get(y.toolName);if(b&&(b.retried=!0,e.counts.toolErrorsRetried++,e.openToolErrors.delete(y.toolName)),y.isError===!0){let T={type:"tool-error",turnNumber:o,timestamp:i,snippet:`Tool failed: ${y.toolName}`,tool:y.toolName,retried:!1};mr(e,T),e.openToolErrors.set(y.toolName,T),p=!0}}let g=Ob(d,o,i,e),h=Wd(s.assistantResponse,xb);if(h){let y=p?"tool-error":g?"edit-retry":a||l!==null?"user-correction":void 0;y&&mr(e,{type:"agent-self-correction",turnNumber:o,timestamp:i,snippet:zd(s.assistantResponse,h.index),matchedPattern:h.label,corroboratedBy:y})}}return e.moments.sort((t,s)=>t.turnNumber-s.turnNumber),{moments:e.moments,counts:e.counts}}function Hd(){return{userCorrections:0,editRetries:0,editSelfCorrections:0,toolErrors:0,toolErrorsRetried:0,agentSelfCorrections:0,escalatedUserCorrections:0}}function Jd(n,e){switch(e.type){case"user-correction":n.userCorrections++,e.escalated&&n.escalatedUserCorrections++;break;case"edit-retry":n.editRetries++;break;case"edit-self-correction":n.editSelfCorrections++;break;case"tool-error":n.toolErrors++,e.retried&&n.toolErrorsRetried++;break;case"agent-self-correction":n.agentSelfCorrections++;break}}function Kd(n){let e=Hd();for(let t of n)Jd(e,t);return e}function Vd(n,e){e&&(n.userCorrections+=e.userCorrections,n.editRetries+=e.editRetries,n.editSelfCorrections+=e.editSelfCorrections,n.toolErrors+=e.toolErrors,n.toolErrorsRetried+=e.toolErrorsRetried,n.agentSelfCorrections+=e.agentSelfCorrections,n.escalatedUserCorrections+=e.escalatedUserCorrections)}function Qd(){return{"model-switch":{breaks:0,tokensRewritten:0},compaction:{breaks:0,tokensRewritten:0},"ttl-expiry":{breaks:0,tokensRewritten:0},"prefix-invalidated":{breaks:0,tokensRewritten:0}}}function Yd(n){return n.inputTokens+n.cacheReadTokens+n.cacheCreationTokens}function Nb(n){return(n.cacheCreation1hTokens??0)>0?36e5:3e5}function Lb(n,e,t,s){return n.model!==e.model?"model-switch":n.compacted||e.compacted?"compaction":t>s?"ttl-expiry":"prefix-invalidated"}function Xd(n){let e=Qd(),t=[],s=0,o=0;for(let i=0;i<n.length;i++){let r=n[i];if(s+=r.cacheCreationTokens,o=Math.max(o,Yd(r)),i===0)continue;let a=n[i-1],l=Yd(a);if(l<2e4||r.cacheReadTokens>=.5*l)continue;let d=Math.max(0,r.timestamp-a.timestamp),p=Nb(r),g=Lb(r,a,d,p),h=l-r.cacheReadTokens;e[g].breaks+=1,e[g].tokensRewritten+=h,t.length<50&&t.push({turnIndex:i,cause:g,model:r.model,tokensRewritten:h,gapMs:d,ttlMs:p,...g==="model-switch"?{previousModel:a.model}:{}})}return{breaks:t,counts:e,tokensWritten:s,peakContextTokens:o,rewriteFactor:o>0?s/o:0}}function jb(n,e){if(e)for(let t of Object.keys(n))n[t].breaks+=e[t].breaks,n[t].tokensRewritten+=e[t].tokensRewritten}function Zd(){return{counts:Qd(),sessionsAnalyzed:0,sessionsWithBreaks:0,tokensWritten:0,peakContextTokens:0,worstRewriteFactor:0}}function em(n,e){jb(n.counts,e.counts),n.sessionsAnalyzed++,e.breaks.length>0&&n.sessionsWithBreaks++,n.tokensWritten+=e.tokensWritten,n.peakContextTokens+=e.peakContextTokens,n.worstRewriteFactor=Math.max(n.worstRewriteFactor,e.rewriteFactor)}var pr=S(require("fs")),is=S(require("path")),om=S(require("os")),im=require("worker_threads");var tm=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function Gb(){return is.join(om.homedir(),".copilot","otel")}function rn(n){let e=n.lastIndexOf("#");if(e!==-1&&n.slice(0,e).endsWith(".db")){let t=n.slice(e+1);return tm.test(t)?t:null}if(n.includes("session-state")){let t=is.basename(is.dirname(n));return tm.test(t)?t:null}return null}function Bb(n){let e=t=>typeof t=="number"?t:0;return{model:n?.["gen_ai.response.model"]||n?.["gen_ai.request.model"]||"unknown",input:e(n?.["gen_ai.usage.input_tokens"]),output:e(n?.["gen_ai.usage.output_tokens"]),cacheCreation:e(n?.["gen_ai.usage.cache_creation.input_tokens"]),cacheRead:e(n?.["gen_ai.usage.cache_read.input_tokens"]),nanoAiu:e(n?.["github.copilot.nano_aiu"])}}function qb(n,e,t){n.has(e)||n.set(e,{modelUsage:{},actualTokens:0,cacheReadTokens:0,nanoAiu:0});let s=n.get(e);if(O(t.model))return;s.modelUsage[t.model]||(s.modelUsage[t.model]={inputTokens:0,outputTokens:0,sessions:0});let o=s.modelUsage[t.model];o.inputTokens+=t.input,o.outputTokens+=t.output,t.cacheCreation>0&&(o.cacheCreationTokens=(o.cacheCreationTokens??0)+t.cacheCreation),t.cacheRead>0&&(o.cachedReadTokens=(o.cachedReadTokens??0)+t.cacheRead),s.actualTokens+=t.input+t.output,s.cacheReadTokens+=t.cacheRead,s.nanoAiu+=t.nanoAiu}var rm='"name":"chat ',zb=10;function Wb(n,e){if(n.type!=="span"||!n.name?.startsWith("chat "))return;let t=n.attributes?.["gen_ai.conversation.id"];t&&qb(e,t,Bb(n.attributes))}function $b(n){if(!n.includes(rm))return null;try{return JSON.parse(n)}catch{return null}}function Hb(n){let e=n;return{records:Array.isArray(e?.records)?e.records:[],consumed:e?.consumed&&typeof e.consumed=="object"?e.consumed:{}}}var Jb=`
|
|
98
98
|
const { parentPort, workerData } = require('worker_threads');
|
|
99
99
|
const fs = require('fs');
|
|
100
100
|
const path = require('path');
|
|
101
|
-
const HINT = Buffer.from(${JSON.stringify(
|
|
101
|
+
const HINT = Buffer.from(${JSON.stringify(rm)});
|
|
102
102
|
const NL = 0x0a;
|
|
103
103
|
function readRange(full, start, end) {
|
|
104
104
|
return new Promise((resolve) => {
|
|
@@ -137,53 +137,53 @@ async function run() {
|
|
|
137
137
|
parentPort.postMessage({ records, consumed });
|
|
138
138
|
}
|
|
139
139
|
run().catch(() => { try { parentPort.postMessage({ records: [], consumed: {} }); } catch { /* worker tearing down */ } });
|
|
140
|
-
`;function
|
|
141
|
-
`)){let
|
|
142
|
-
`:"")+o.value)}return t}function
|
|
143
|
-
`).trim():""}function
|
|
144
|
-
`)?0:1);t.linesAdded+=o,t.languageUsage[e]||(t.languageUsage[e]={linesAdded:0,linesRemoved:0}),t.languageUsage[e].linesAdded+=o}if(s.range&&typeof s.range.startLineNumber=="number"&&typeof s.range.endLineNumber=="number"){let o=Math.max(0,s.range.endLineNumber-s.range.startLineNumber);t.linesRemoved+=o,t.languageUsage[e]||(t.languageUsage[e]={linesAdded:0,linesRemoved:0}),t.languageUsage[e].linesRemoved+=o}}function pC(n,e,t){for(let s of n)if(Array.isArray(s))for(let o of s)mC(o,e,t)}function gC(n,e){if(!n.uri)return;let t=n.uri.path||JSON.stringify(n.uri);e.editedFilePaths.push(t);let s=ml(t),o=n;Array.isArray(o.edits)&&pC(o.edits,s,e)}function fC(n){let e={editedFilePaths:[],codeBlocks:0,applies:0,linesAdded:0,linesRemoved:0,languageUsage:{}};if(!n.response||!Array.isArray(n.response))return e;for(let t of n.response)t&&(t.kind==="textEditGroup"&&gC(t,e),t.kind==="codeblockUri"&&(e.codeBlocks++,t.isEdit===!0&&e.applies++));return e}function hC(n,e){for(let[t,s]of Object.entries(e))n[t]||(n[t]={linesAdded:0,linesRemoved:0}),n[t].linesAdded+=s.linesAdded,n[t].linesRemoved+=s.linesRemoved}function yC(n,e,t,s,o){n.timestamp!==void 0&&e.push(n.timestamp),n.timings&&t.push(n.timings),n.waitTime!==void 0&&s.push(n.waitTime),n.timestamp!==void 0&&n.timings?.totalElapsed!==void 0&&o.push({start:n.timestamp,end:n.timestamp+n.timings.totalElapsed})}function rm(n,e,t,s,o,i,r){let a=0,c=0,d=0,p=0,g={};for(let h of n){if(!h)continue;yC(uC(h),s,o,i,r);let y=dC(h);y.agentType!==null&&e[y.agentType]++;let b=fC(h);for(let T of b.editedFilePaths)t.add(T);c+=b.codeBlocks,a+=b.applies,d+=b.linesAdded,p+=b.linesRemoved,hC(g,b.languageUsage)}return{totalApplies:a,totalCodeBlocks:c,totalLinesAdded:d,totalLinesRemoved:p,languageUsage:g}}function _C(n,e,t){if(!(!n.response||!Array.isArray(n.response))){for(let s of n.response)if(s&&(s.kind==="toolInvocationSerialized"||s.kind==="prepareToolInvocation")){let o=s.toolId||s.toolName||s.invocationMessage?.toolName||s.toolSpecificData?.kind||"unknown";dl(o,e,t)}}}function bC(n,e,t,s,o){if(!e.requestId)return;im(t,s.modeUsage),e.agent?.id&&(s.toolCalls.total++,s.toolCalls.byTool[e.agent.id]=(s.toolCalls.byTool[e.agent.id]||0)+1),hl(e,s.contextReferences),_C(e,s,n.toolNameMap);let i={messageText:nm(e),toolNames:om(e)};o.push(i)}function am(n,e,t){return Dt(n,t,e)}function CC(n){let e=0;for(let t=1;t<n.length;t++)n[t]!==n[t-1]&&e++;return e}function lm(n){let e=n.selectedModel,t=n.inputState?.selectedModel;return(e?.identifier||e?.metadata?.id||t?.identifier||t?.metadata?.id||"gpt-4o").replace(/^copilot\//,"")}function kC(n,e,t,s){let o=lm(e),i=e.selectedModel,r=e.inputState?.selectedModel;(i?.identifier||r?.identifier||"").replace(/^copilot\//,"")==="auto"&&(s.modelSwitching.autoSessions=1);let c=[];for(let p of t){if(!p||!p.requestId)continue;let g=am(p,o,n.modelPricing);c.push(g);let h=g.toLowerCase();h.includes("foundry")&&(h.includes("microsoft")||h.includes("aitk"))&&(s.modelSwitching.foundryWindowsSessions=1)}let d=[...new Set(c)];s.modelSwitching.uniqueModels=d,s.modelSwitching.modelCount=d.length,s.modelSwitching.totalRequests=c.length,s.modelSwitching.switchCount=CC(c),V(n.modelPricing,d,c,s)}function SC(n,e,t){let{effortByRequestId:s,defaultEffort:o,switchCount:i}=Tu(n);if(o===null&&s.size===0)return;let r={};for(let[,a]of s)r[a]=(r[a]||0)+1;s.size===0&&o!==null&&(r[o]=e.length),t.thinkingEffort={byEffort:r,switchCount:i,defaultEffort:o}}function TC(n,e,t,s){let o=[],i=e.inputState?.mode?di(e.inputState.mode):"ask";if(e.inputState?.selections&&Array.isArray(e.inputState.selections)){for(let a of e.inputState.selections)if(a&&(a.startLineNumber!==a.endLineNumber||a.startColumn!==a.endColumn)){s.contextReferences.implicitSelection++;break}}let r=e.requests??[];for(let a of r)bC(n,a,i,s,o);kC(n,e,r,s),SC(t,r,s),ul(s,o),cm(r,lm(e),n.modelPricing,s),fl(s)}function wC(n){return(n.selectedModel?.identifier||n.selectedModel?.metadata?.id||"unknown").replace(/^copilot\//,"")}function cm(n,e,t,s){let o=[];for(let i of n)i&&o.push({model:am(i,e,t),toolCalls:Md(i),userMessage:typeof i.message?.text=="string"?i.message.text:void 0,assistantResponse:MC(i),timestamp:typeof i.timestamp=="number"?new Date(i.timestamp).toISOString():null});o.length!==0&&(s.modelEfficiency=ar(o),cl(s,o.find(i=>i.userMessage)?.userMessage),pl(s,o))}function pl(n,e){let t=Dd(e);t.moments.length!==0&&(n.correctionMoments=t.moments,n.correctionCounts=t.counts)}function MC(n){if(!Array.isArray(n.response))return;let e="";for(let t of n.response){let{text:s,isThinking:o}=Ss(t);s&&!o&&(e+=s)}return e||void 0}function vC(n,e){if(n.agent?.id){let t=n.agent.id.toLowerCase();if(t.includes("edit"))return"edit";if(t.includes("agent"))return"agent"}if(e.mode?.id){let t=e.mode.id.toLowerCase();if(t.includes("agent"))return"agent";if(t.includes("edit"))return"edit"}return"ask"}function PC(n,e,t){if(n.kind==="toolInvocationSerialized"||n.kind==="prepareToolInvocation"){let s=n.toolId||n.toolName||n.invocationMessage?.toolName||"unknown";dl(s,e,t.toolNameMap)}if(n.kind==="mcpServersStarting"&&n.didStartServerIds)for(let s of n.didStartServerIds)e.mcpTools.total++,e.mcpTools.byServer[s]=(e.mcpTools.byServer[s]||0)+1;n.kind==="inlineReference"&&n.inlineReference&&gl([n],e.contextReferences)}function AC(n,e,t,s,o){let i=vC(e,t);if(i==="agent"?s.modeUsage.agent++:i==="edit"?s.modeUsage.edit++:s.modeUsage.ask++,hl(e,s.contextReferences),e.response&&Array.isArray(e.response))for(let r of e.response)r&&PC(r,s,n);o.push({messageText:nm(e),toolNames:om(e)})}function xC(n,e,t){if(!e.requests||!Array.isArray(e.requests))return;let s=[];for(let o of e.requests)AC(n,o,e,t,s);ul(t,s),cm(e.requests,wC(e),n.modelPricing,t)}function DC(n,e){for(let t of e.tiers.standard)n.modelSwitching.standardModels.includes(t)||n.modelSwitching.standardModels.push(t);for(let t of e.tiers.premium)n.modelSwitching.premiumModels.includes(t)||n.modelSwitching.premiumModels.push(t);for(let t of e.tiers.unknown)n.modelSwitching.unknownModels.includes(t)||n.modelSwitching.unknownModels.push(t)}function em(n,e){for(let t of e??[])n.includes(t)||n.push(t)}function EC(n,e){for(let t of e.costBuckets?.low??[])n.modelSwitching.lowCostModels.includes(t)||n.modelSwitching.lowCostModels.push(t);for(let t of e.costBuckets?.medium??[])n.modelSwitching.mediumCostModels.includes(t)||n.modelSwitching.mediumCostModels.push(t);for(let t of e.costBuckets?.high??[])n.modelSwitching.highCostModels.includes(t)||n.modelSwitching.highCostModels.push(t)}function RC(n){let e=n.modelSwitching.modelsPerSession;e.length!==0&&(n.modelSwitching.averageModelsPerSession=e.reduce((t,s)=>t+s,0)/e.length,n.modelSwitching.maxModelsPerSession=Math.max(...e),n.modelSwitching.minModelsPerSession=Math.min(...e),n.modelSwitching.switchingFrequency=e.filter(t=>t>1).length/e.length*100)}function IC(n,e){if(e.modelSwitching||(e.modelSwitching={uniqueModels:[],modelCount:0,switchCount:0,autoSessions:0,foundryWindowsSessions:0,unknownProviderSessions:0,selectedModelExtensions:[],unknownProviderModels:[],tiers:{standard:[],premium:[],unknown:[]},hasMixedTiers:!1,standardRequests:0,premiumRequests:0,unknownRequests:0,totalRequests:0,costBuckets:{low:[],medium:[],high:[],unknown:[]},hasMixedCosts:!1,lowCostRequests:0,mediumCostRequests:0,highCostRequests:0}),e.modelSwitching.modelCount<=0)return;let t=e.modelSwitching;n.modelSwitching.totalSessions++,n.modelSwitching.modelsPerSession.push(t.modelCount),DC(n,t),EC(n,t),n.modelSwitching.autoSessions+=t.autoSessions||0,n.modelSwitching.foundryWindowsSessions+=t.foundryWindowsSessions||0,n.modelSwitching.unknownProviderSessions+=t.unknownProviderSessions||0,em(n.modelSwitching.selectedModelExtensions,t.selectedModelExtensions),em(n.modelSwitching.unknownProviderModels,t.unknownProviderModels),t.hasMixedTiers&&n.modelSwitching.mixedTierSessions++,t.hasMixedCosts&&n.modelSwitching.mixedCostSessions++,n.modelSwitching.standardRequests+=t.standardRequests||0,n.modelSwitching.premiumRequests+=t.premiumRequests||0,n.modelSwitching.unknownRequests+=t.unknownRequests||0,n.modelSwitching.lowCostRequests+=t.lowCostRequests||0,n.modelSwitching.mediumCostRequests+=t.mediumCostRequests||0,n.modelSwitching.highCostRequests+=t.highCostRequests||0,n.modelSwitching.totalRequests+=t.totalRequests||0,RC(n)}function UC(n,e){if(e.thinkingEffort){n.thinkingEffortUsage||(n.thinkingEffortUsage={byEffort:{},sessionCount:0,switchCount:0}),n.thinkingEffortUsage.sessionCount++,n.thinkingEffortUsage.switchCount+=e.thinkingEffort.switchCount;for(let[t,s]of Object.entries(e.thinkingEffort.byEffort))n.thinkingEffortUsage.byEffort[t]=(n.thinkingEffortUsage.byEffort[t]||0)+s}}var OC=["file","selection","implicitSelection","symbol","codebase","workspace","terminal","vscode","terminalLastCommand","terminalSelection","clipboard","changes","outputPanel","problemsPanel","pullRequest","copilotInstructions","agentsMd"];function tm(n,e){for(let[t,s]of Object.entries(e))n[t]=(n[t]||0)+s}function FC(n,e){let t=n.contextReferences,s=e.contextReferences;for(let o of OC)t[o]+=s[o]||0;t.codeContextLines=(t.codeContextLines||0)+(s.codeContextLines||0),tm(t.byKind,s.byKind),tm(t.byPath,s.byPath)}function NC(n,e){if(e.editScope){n.editScope.singleFileEdits+=e.editScope.singleFileEdits,n.editScope.multiFileEdits+=e.editScope.multiFileEdits,n.editScope.totalEditedFiles+=e.editScope.totalEditedFiles;let t=n.editScope.singleFileEdits+n.editScope.multiFileEdits;n.editScope.avgFilesPerSession=t>0?n.editScope.totalEditedFiles/t:0}if(e.applyUsage&&(n.applyUsage.totalApplies+=e.applyUsage.totalApplies,n.applyUsage.totalCodeBlocks+=e.applyUsage.totalCodeBlocks,n.applyUsage.applyRate=n.applyUsage.totalCodeBlocks>0?n.applyUsage.totalApplies/n.applyUsage.totalCodeBlocks*100:0),e.sessionDuration){n.sessionDuration.totalDurationMs+=e.sessionDuration.totalDurationMs,n.sessionDuration.activeDurationMs+=e.sessionDuration.activeDurationMs;let t=n.sessions;if(t>0){n.sessionDuration.avgDurationMs=n.sessionDuration.totalDurationMs/t;let s=n.sessionDuration.avgFirstProgressMs*(t-1);n.sessionDuration.avgFirstProgressMs=(s+e.sessionDuration.avgFirstProgressMs)/t;let o=n.sessionDuration.avgTotalElapsedMs*(t-1);n.sessionDuration.avgTotalElapsedMs=(o+e.sessionDuration.avgTotalElapsedMs)/t;let i=n.sessionDuration.avgWaitTimeMs*(t-1);n.sessionDuration.avgWaitTimeMs=(i+e.sessionDuration.avgWaitTimeMs)/t}}if(e.conversationPatterns){n.conversationPatterns.multiTurnSessions+=e.conversationPatterns.multiTurnSessions,n.conversationPatterns.singleTurnSessions+=e.conversationPatterns.singleTurnSessions,n.conversationPatterns.maxTurnsInSession=Math.max(n.conversationPatterns.maxTurnsInSession,e.conversationPatterns.maxTurnsInSession);let t=n.conversationPatterns.multiTurnSessions+n.conversationPatterns.singleTurnSessions;if(t>0){let o=n.conversationPatterns.avgTurnsPerSession*(t-1)+e.conversationPatterns.avgTurnsPerSession;n.conversationPatterns.avgTurnsPerSession=o/t}}e.agentTypes&&(n.agentTypes.editsAgent+=e.agentTypes.editsAgent,n.agentTypes.defaultAgent+=e.agentTypes.defaultAgent,n.agentTypes.workspaceAgent+=e.agentTypes.workspaceAgent,n.agentTypes.other+=e.agentTypes.other),UC(n,e),LC(n,e)}function LC(n,e){e.modelEfficiency&&(n.modelEfficiency||(n.modelEfficiency={}),vd(n.modelEfficiency,e.modelEfficiency))}function jC(n,e){n.modeUsage.ask+=e.modeUsage.ask,n.modeUsage.edit+=e.modeUsage.edit,n.modeUsage.agent+=e.modeUsage.agent,n.modeUsage.plan+=e.modeUsage.plan,n.modeUsage.customAgent+=e.modeUsage.customAgent,n.modeUsage.cli+=e.modeUsage.cli,n.modeUsage.cliApp=(n.modeUsage.cliApp??0)+(e.modeUsage.cliApp??0),n.modeUsage.claudeDesktop=(n.modeUsage.claudeDesktop??0)+(e.modeUsage.claudeDesktop??0),n.modeUsage.claudeVsCode=(n.modeUsage.claudeVsCode??0)+(e.modeUsage.claudeVsCode??0)}function co(n,e){n.toolCalls.total+=e.toolCalls.total;for(let[t,s]of Object.entries(e.toolCalls.byTool))n.toolCalls.byTool[t]=(n.toolCalls.byTool[t]||0)+s;if(e.toolCalls.outputTokensByTool){n.toolCalls.outputTokensByTool||(n.toolCalls.outputTokensByTool={});for(let[t,s]of Object.entries(e.toolCalls.outputTokensByTool))n.toolCalls.outputTokensByTool[t]=(n.toolCalls.outputTokensByTool[t]||0)+s}jC(n,e),FC(n,e),n.mcpTools.total+=e.mcpTools.total;for(let[t,s]of Object.entries(e.mcpTools.byServer))n.mcpTools.byServer[t]=(n.mcpTools.byServer[t]||0)+s;for(let[t,s]of Object.entries(e.mcpTools.byTool))n.mcpTools.byTool[t]=(n.mcpTools.byTool[t]||0)+s;if(e.skillCalls){n.skillCalls||(n.skillCalls={total:0,byName:{}}),n.skillCalls.total+=e.skillCalls.total;for(let[t,s]of Object.entries(e.skillCalls.byName))n.skillCalls.byName[t]=(n.skillCalls.byName[t]||0)+s}IC(n,e),NC(n,e),iC(n,e),BC(n,e),GC(n,e)}function GC(n,e){e.cacheBreakage&&(n.cacheBreakage||(n.cacheBreakage=Ld()),jd(n.cacheBreakage,e.cacheBreakage))}function BC(n,e){if(!e.correctionMoments||e.correctionMoments.length===0)return;n.corrections||(n.corrections={userCorrections:0,editRetries:0,editSelfCorrections:0,toolErrors:0,toolErrorsRetried:0,agentSelfCorrections:0,escalatedUserCorrections:0,sessionsWithMoments:0,sessionsWithUserCorrections:0,sessionsWithEscalations:0});let t=e.correctionCounts??Id(e.correctionMoments);Ud(n.corrections,t),n.corrections.sessionsWithMoments++,t.userCorrections>0&&n.corrections.sessionsWithUserCorrections++,t.escalatedUserCorrections>0&&n.corrections.sessionsWithEscalations++}var qC=[[/#file/gi,"file"],[/#selection/gi,"selection"],[/#symbol/gi,"symbol"],[/#sym(?![:\w])/gi,"symbol"],[/#codebase/gi,"codebase"],[/#terminalLastCommand/gi,"terminalLastCommand"],[/#terminalSelection/gi,"terminalSelection"],[/#clipboard/gi,"clipboard"],[/#changes/gi,"changes"],[/#outputPanel/gi,"outputPanel"],[/#problemsPanel\b/gi,"problemsPanel"],[/#pr\b/gi,"pullRequest"],[/#pullRequest\b/gi,"pullRequest"],[/@workspace/gi,"workspace"],[/@terminal/gi,"terminal"],[/@vscode/gi,"vscode"]];function um(n,e){for(let[t,s]of qC){let o=n.match(t);o&&(e[s]+=o.length)}}function zC(n){let e=n.kind;return e==="reference"&&n.reference?n.reference:e==="inlineReference"&&n.inlineReference?n.inlineReference:null}function WC(n,e,t){e.endsWith("/.github/copilot-instructions.md")||e.includes(".github/copilot-instructions.md")?t.copilotInstructions++:e.endsWith("/agents.md")||e.match(/\/agents\.md$/i)?t.agentsMd++:e.endsWith(".instructions.md")||e.includes(".instructions.md")?t.copilotInstructions++:t.file++;let s=n.length>100?"..."+n.substring(n.length-97):n;t.byPath[s]=(t.byPath[s]||0)+1}function $C(n,e,t){let s=n.fsPath||n.path;typeof s=="string"&&WC(s,J(s),t);let o=n.name;if(typeof o=="string"&&e==="reference"){t.symbol++;let i=`#sym:${o}`;t.byPath[i]=(t.byPath[i]||0)+1}}function gl(n,e){if(Array.isArray(n))for(let t of n){if(!t||typeof t!="object")continue;let s=t,o=s.kind;if(typeof o=="string"&&(e.byKind[o]=(e.byKind[o]||0)+1),o==="pullRequest"){e.pullRequest++;continue}let i=zC(s);i&&$C(i,o,e)}}function HC(n,e){let t=n.kind;if(typeof t=="string"&&(e.byKind[t]=(e.byKind[t]||0)+1),t==="image"&&(e.byKind["copilot.image"]=(e.byKind["copilot.image"]||0)+1),t==="file"&&e.file++,t==="generic"&&typeof n.name=="string"&&n.name.startsWith("sym:")){e.symbol++;let s=`#${n.name}`;e.byPath[s]=(e.byPath[s]||0)+1}}function dm(n,e){if(!n||typeof n!="object")return;let t=n;if(Array.isArray(t.variables))for(let s of t.variables)!s||typeof s!="object"||HC(s,e)}function fl(n){let e=n.modeUsage.ask+n.modeUsage.edit+n.modeUsage.agent+n.modeUsage.cli;n.conversationPatterns={multiTurnSessions:e>1?1:0,singleTurnSessions:e===1?1:0,avgTurnsPerSession:e,maxTurnsInSession:e}}function JC(n,e){if(n.kind!=="dynamic")return;let t=n.data?.range,s=typeof t?.startLineNumber=="number"?t.startLineNumber:0,o=typeof t?.endLineNumber=="number"?t.endLineNumber:0;o>=s&&o>0&&(e.codeContextLines=(e.codeContextLines||0)+(o-s+1))}function KC(n,e){if(n.kind!=="prompt")return;typeof n.slashPromptCommand?.command=="string"&&(e.byKind.prompt=(e.byKind.prompt||0)+1)}function VC(n,e){if(!n||typeof n!="object")return;let t=n;typeof t.text=="string"&&um(t.text,e),JC(t,e),KC(t,e)}function YC(n,e){typeof n.text=="string"&&um(n.text,e);let t=n.parts;if(Array.isArray(t))for(let s of t)VC(s,e)}function hl(n,e){if(!n||typeof n!="object")return;let t=n,s=t.message;s&&typeof s=="object"&&YC(s,e);let o=t.contentReferences;Array.isArray(o)&&gl(o,e);let i=t.variableData;i!==void 0&&dm(i,e)}async function uo(n){try{let t=(await on.promises.readFile(n,"utf8")).trim().split(`
|
|
145
|
-
`),s=[];for(let o of t)if(o.trim())try{s.push(JSON.parse(o))}catch{}return s}catch{return[]}}function V(n,e,t,s){let o=[],i=[],r=[];for(let T of e){let E=
|
|
146
|
-
`),t,n.modelPricing);else{let y=o!==void 0?o:JSON.parse(g);if(!
|
|
147
|
-
`)?0:1):0}function
|
|
148
|
-
`).filter(d=>d.trim());
|
|
149
|
-
`);return e[e.length-1]===""&&e.pop(),e.length}function
|
|
150
|
-
`).filter(i=>i.trim());if(
|
|
151
|
-
`);return
|
|
152
|
-
`),g=await this.processOpenCodeAssistantMessages(
|
|
153
|
-
`),g=await this.processKiloAssistantMessages(
|
|
154
|
-
`),{assistantText:c,toolCalls:d,model:p}=this.processAssistantMessagesForTurn(t),g=s?.prompt_tokens&&o>0?Math.round(s.prompt_tokens/o):0,h=s?.completion_tokens&&o>0?Math.round(s.completion_tokens/o):0;return{turnNumber:i,timestamp:e.created_at?new Date(e.created_at*1e3).toISOString():null,mode:"cli",userMessage:a,assistantResponse:c,model:p,toolCalls:d,contextReferences:G(),mcpTools:[],inputTokensEstimate:g,outputTokensEstimate:h,thinkingTokensEstimate:0}}processAssistantMessagesForTurn(e){let t="",s=[],o=null;for(let i of e){o||(o=i.model||null);for(let r of Array.isArray(i.parts)?i.parts:[])t+=this.processCrushMessagePart(r,s)}return{assistantText:t,toolCalls:s,model:o}}processCrushMessagePart(e,t){return e?.type==="text"&&e?.text?e.text:(e?.type==="tool_call"&&e?.data?.name&&t.push({toolName:e.data.name,arguments:e.data.arguments?JSON.stringify(e.data.arguments):void 0}),"")}async getSyncData(e){return this.crush.getCrushSessionData(e)}async analyzeUsage(e,t){let s=$(),o=await this.crush.getCrushMessages(e),i=[];for(let r of o)r.role==="user"&&s.modeUsage.cli++,r.role==="assistant"&&this.processCrushAssistantMessage(r,s,i);return this.applyCrushModelSwitchingStats(i,s),V(t.modelPricing,s.modelSwitching.uniqueModels,i,s),s}processCrushAssistantMessage(e,t,s){s.push(e.model||"unknown");for(let o of Array.isArray(e.parts)?e.parts:[]){if(o?.type!=="tool_call"||!o?.data?.name)continue;t.toolCalls.total++;let i=o.data.name;t.toolCalls.byTool[i]=(t.toolCalls.byTool[i]||0)+1}}applyCrushModelSwitchingStats(e,t){let s=[...new Set(e)];t.modelSwitching.uniqueModels=s,t.modelSwitching.modelCount=s.length,t.modelSwitching.totalRequests=e.length;let o=0;for(let i=1;i<e.length;i++)e[i]!==e[i-1]&&o++;t.modelSwitching.switchCount=o}};var Am=S(require("fs")),xm=S(require("path")),Dm=S(Ka());var ho=class{constructor(e,t){this.visualStudio=e;this.estimateTokens=t}visualStudio;estimateTokens;id="visualstudio";displayName="Visual Studio";handles(e){return this.visualStudio.isVSSessionFile(e)}getDisplayName(e){return J(e).includes("/ssmsgithubcopilot/")?"SSMS":"Visual Studio"}getBackingPath(e){return e}async stat(e){return this.visualStudio.statSessionFile(e)}async getTokens(e){let t=await this.visualStudio.getTokenEstimates(e,this.estimateTokens);return{...t,actualTokens:t.tokens}}async countInteractions(e){let t=await this.visualStudio.decodeSessionFile(e);return this.visualStudio.countInteractions(t)}async getModelUsage(e){return this.visualStudio.getModelUsage(e,this.estimateTokens)}async getMeta(e){let t=await this.visualStudio.decodeSessionFile(e),s=this.visualStudio.getSessionTitle(t),o=this.visualStudio.getSessionTimestamps(t),i=[];return o.timeCreated&&i.push(new Date(o.timeCreated).getTime()),o.timeUpdated&&i.push(new Date(o.timeUpdated).getTime()),i.sort((r,a)=>r-a),{title:s,firstInteraction:i.length>0?new Date(i[0]).toISOString():null,lastInteraction:i.length>0?new Date(i[i.length-1]).toISOString():null}}getEditorRoot(e){return xm.dirname(e)}skipBackendSync=!0;async discover(e){let t=this.getCandidatePaths(),s=[];try{let o=await this.visualStudio.discoverSessions();o.length>0&&(e(`\u{1F4C4} Found ${o.length} session file(s) in Visual Studio Copilot`),s.push(...o))}catch(o){e(`Could not read Visual Studio session files: ${o}`)}return{sessionFiles:s,candidatePaths:t}}getCandidatePaths(){return[{path:this.visualStudio.getLogDir(),source:"Visual Studio (log dir)"},{path:this.visualStudio.getSsmsSessionsDir(),source:"SSMS (sessions dir)"}]}getRawFileContent(e){try{let t=Am.readFileSync(e),o=(t.length>=2?Array.from((0,Dm.decodeMulti)(t.slice(1))):[]).map((i,r)=>r===0?i:i?.[1]??i);return JSON.stringify(o,null,2)}catch{return"[]"}}async buildTurns(e){let t=[],s=await this.visualStudio.decodeSessionFile(e),o=0;for(let i=1;i<s.length;i+=2){let r=s[i],a=s[i+1];r&&(o++,t.push(this.buildVSTurn(r,a,o)))}return{turns:t}}buildVSTurn(e,t,s){let o=e[1],i=t?.[1],r=this.visualStudio.extractTextFromContent(o?.Content||[]),a=t?this.visualStudio.extractTextFromContent(i?.Content||[]):"",c=this.visualStudio.getModelId(i??o,!i),d=this.visualStudio.extractContextText(o?.Context),p=this.estimateTokens(r+d,c??"gpt-4"),g=t?this.estimateTokens(a,c??"gpt-4"):0;return{turnNumber:s,timestamp:o?.Timestamp?new Date(o.Timestamp).toISOString():null,mode:"ask",userMessage:r,assistantResponse:a,model:c,toolCalls:this.extractVSToolCalls(i),contextReferences:G(),mcpTools:[],inputTokensEstimate:p,outputTokensEstimate:g,thinkingTokensEstimate:0}}extractVSToolCalls(e){let t=[];for(let s of e?.Content||[]){let o=Array.isArray(s)?s[1]:null;o?.Function&&t.push({toolName:String(o.Function.Description||"tool"),result:typeof o.Function.Result=="string"?o.Function.Result:void 0})}return t}async analyzeUsage(e,t){let s=$(),o=await this.visualStudio.decodeSessionFile(e),i=[];for(let c=1;c<o.length;c++)c%2===1?s.modeUsage.ask++:this.processVSResponseObject(o[c]?.[1],s,i,t);let r=[...new Set(i)];s.modelSwitching.uniqueModels=r,s.modelSwitching.modelCount=r.length,s.modelSwitching.totalRequests=i.length;let a=0;for(let c=1;c<i.length;c++)i[c]!==i[c-1]&&a++;return s.modelSwitching.switchCount=a,V(t.modelPricing,r,i,s),s}processVSResponseObject(e,t,s,o){let i=this.visualStudio.getModelId(e,!1);i&&s.push(i);for(let r of e?.Content??[]){let a=Array.isArray(r)?r[1]:null;if(!a?.Function)continue;t.toolCalls.total++;let c=String(a.Function.Name||a.Function.Description||"tool");if(at(c)){t.mcpTools.total++;let d=_t(c,o.toolNameMap);t.mcpTools.byServer[d]=(t.mcpTools.byServer[d]||0)+1;let p=Rn(c);t.mcpTools.byTool[p]=(t.mcpTools.byTool[p]||0)+1,t.toolCalls.total--}else t.toolCalls.byTool[c]=(t.toolCalls.byTool[c]||0)+1}}};var Cl=S(require("fs"));var yo=class{constructor(e){this.continue_=e}continue_;id="continue";displayName="Continue";handles(e){return this.continue_.isContinueSessionFile(e)}getBackingPath(e){return e}async stat(e){return Cl.promises.stat(e)}async getTokens(e){let t=await this.continue_.getTokensFromContinueSession(e);return{...t,actualTokens:t.tokens}}async countInteractions(e){return await this.continue_.countContinueInteractions(e)}async getModelUsage(e){return await this.continue_.getContinueModelUsage(e)}async getMeta(e){let t=await this.continue_.getContinueSessionMeta(e),s=this.continue_.getContinueSessionId(e),o=(await this.continue_.readSessionsIndex()).get(s),i=null,r=null;if(o?.dateCreated){i=new Date(o.dateCreated).toISOString();try{r=(await Cl.promises.stat(e)).mtime.toISOString()}catch{}}let a;if(t?.workspaceDirectory)try{a=decodeURIComponent(t.workspaceDirectory.replace(/^file:\/\/\//,"").replace(/^file:\/\//,""))}catch{}return{title:t?.title,firstInteraction:i,lastInteraction:r,workspacePath:a}}getEditorRoot(e){return this.continue_.getContinueDataDir()}async discover(e){let t=this.getCandidatePaths(),s=[];try{let o=await this.continue_.getContinueSessionFiles();o.length>0&&(e(`\u{1F4C4} Found ${o.length} session file(s) in Continue (~/.continue/sessions)`),s.push(...o))}catch(o){e(`Could not read Continue session files: ${o}`)}return{sessionFiles:s,candidatePaths:t}}getCandidatePaths(){return[{path:this.continue_.getContinueSessionsDir(),source:"Continue"}]}async buildTurns(e){let t=[],s=await this.continue_.buildContinueTurns(e),o=G();for(let i of s)t.push({turnNumber:t.length+1,timestamp:null,mode:"ask",userMessage:i.userText,assistantResponse:i.assistantText,model:i.model,toolCalls:i.toolCalls,contextReferences:o,mcpTools:[],inputTokensEstimate:i.inputTokens,outputTokensEstimate:i.outputTokens,thinkingTokensEstimate:0});return{turns:t}}async analyzeUsage(e,t){let s=$(),o=await this.continue_.buildContinueTurns(e),i=await this.continue_.getContinueSessionMeta(e),r=[];for(let d of o){s.modeUsage.ask++,d.model&&r.push(d.model);for(let p of d.toolCalls)s.toolCalls.total++,s.toolCalls.byTool[p.toolName]=(s.toolCalls.byTool[p.toolName]||0)+1}if(i?.mode==="agent")for(let d=0;d<o.length;d++)s.modeUsage.ask--,s.modeUsage.agent++;let a=[...new Set(r)];s.modelSwitching.uniqueModels=a,s.modelSwitching.modelCount=a.length,s.modelSwitching.totalRequests=r.length;let c=0;for(let d=1;d<r.length;d++)r[d]!==r[d-1]&&c++;return s.modelSwitching.switchCount=c,V(t.modelPricing,a,r,s),s}};var Im=S(require("fs")),yr=S(require("path"));function Em(n){switch((n||"").toLowerCase()){case"agent":return"agent";case"edit":return"edit";case"plan":return"plan";case"ask":return"ask";default:return"ask"}}function Rm(n){if(!n)return null;let e=Date.parse(n);return Number.isNaN(e)?null:new Date(e).toISOString()}var hr=class{constructor(e){this.eclipse=e}eclipse;id="eclipse";displayName="Eclipse";handles(e){return this.eclipse.isEclipseSessionFile(e)}getBackingPath(e){return e}async stat(e){return Im.promises.stat(e)}async getTokens(e){let t=await this.eclipse.getTokensFromEclipseSession(e);return{...t,actualTokens:t.tokens}}async countInteractions(e){return this.eclipse.countEclipseInteractions(e)}async getModelUsage(e){return this.eclipse.getEclipseModelUsage(e)}async getMeta(e){let t=await this.eclipse.getEclipseSessionMeta(e);return{title:t?.title,firstInteraction:Rm(t?.creationDate),lastInteraction:Rm(t?.lastMessageDate)}}getEditorRoot(e){return yr.dirname(e)}async discover(e){let t=this.getCandidatePaths(),s=[];try{let o=await this.eclipse.discoverEclipseSessions();o.length>0&&(e(`\u{1F4C4} Found ${o.length} session file(s) in Eclipse (Copilot conversations)`),s.push(...o))}catch(o){e(`Could not read Eclipse session files: ${o}`)}return{sessionFiles:s,candidatePaths:t}}getCandidatePaths(){return[{path:yr.join(this.eclipse.getDefaultWorkspaceRoot(),".metadata",".plugins","com.microsoft.copilot.eclipse.core","conversations"),source:"Eclipse"}]}async buildTurns(e){let t=[],s=await this.eclipse.buildEclipseTurns(e),o=G();for(let i of s)t.push({turnNumber:t.length+1,timestamp:i.timestamp,mode:Em(i.mode),userMessage:i.userText,assistantResponse:i.assistantText,model:i.model,toolCalls:i.toolCalls,contextReferences:o,mcpTools:[],inputTokensEstimate:i.inputTokens,outputTokensEstimate:i.outputTokens,thinkingTokensEstimate:i.thinkingTokens,thinkingEffort:i.reasoningEffort??void 0});return{turns:t}}async analyzeUsage(e,t){let s=$(),o=await this.eclipse.buildEclipseTurns(e),i=[];for(let c of o){this.tallyMode(s,c.mode),c.model&&i.push(c.model);for(let d of c.toolCalls)s.toolCalls.total++,s.toolCalls.byTool[d.toolName]=(s.toolCalls.byTool[d.toolName]||0)+1}let r=[...new Set(i)];s.modelSwitching.uniqueModels=r,s.modelSwitching.modelCount=r.length,s.modelSwitching.totalRequests=i.length;let a=0;for(let c=1;c<i.length;c++)i[c]!==i[c-1]&&a++;return s.modelSwitching.switchCount=a,V(t.modelPricing,r,i,s),s}tallyMode(e,t){let s=Em(t);s==="agent"?e.modeUsage.agent++:s==="edit"?e.modeUsage.edit++:e.modeUsage.ask++}};var Om=S(require("fs"));var Um=S(require("fs"));var fS=new Set(["review","bug","think","compact","pr_comments"]);function kl(n){let e="";if(typeof n=="string")e=n;else if(Array.isArray(n)){for(let i of n)if(i?.type==="text"&&typeof i.text=="string"){e=i.text;break}}let s=e.trimStart().split(`
|
|
155
|
-
`)[0].trim().match(/^\/([a-z_]+)(?:\s|$)/i);if(!s)return null;let o=s[1].toLowerCase();return
|
|
156
|
-
`):"",{assistantText:r,model:a,actualInputTokens:
|
|
157
|
-
`):"",{assistantText:r,model:a,actualInputTokens:c,actualOutputTokens:d,toolCalls:p,mcpTools:g}=this.processAssistantEventsForTurn(t),h=a||"claude-sonnet-4-6",y=c>0||d>0?{promptTokens:c,completionTokens:d}:void 0;return{turnNumber:s,timestamp:e.timestamp?new Date(e.timestamp).toISOString():null,mode:"agent",userMessage:i,assistantResponse:r,model:h,toolCalls:p,contextReferences:G(),mcpTools:g,inputTokensEstimate:c||this.estimateTokensFn(i,h),outputTokensEstimate:d||this.estimateTokensFn(r,h),thinkingTokensEstimate:0,actualUsage:y}}processAssistantEventsForTurn(e){let t="",s=0,o=0,i=null,r=[],a=[],c=new Set;for(let d of e){let p=d.message;!i&&p?.model&&(i=p.model);let g=d.requestId,h=!g||!c.has(g);g&&c.add(g);let y=p?.usage;if(y&&h){let b=this.extractUsageTokens(y);s+=b.input,o+=b.output}for(let b of Array.isArray(p?.content)?p.content:[])t+=this.processEventContentBlock(b,r,a)}return{assistantText:t,model:i,actualInputTokens:s,actualOutputTokens:o,toolCalls:r,mcpTools:a}}extractUsageTokens(e){return{input:(e.input_tokens||0)+(e.cache_creation_input_tokens||0)+(e.cache_read_input_tokens||0),output:e.output_tokens||0}}processEventContentBlock(e,t,s){if(e.type==="text")return e.text||"";if(e.type==="tool_use"){let o=e.name||"unknown";this.isMcpToolFn(o)?s.push({server:this.extractMcpServerNameFn(o),tool:o}):t.push({toolName:o,arguments:e.input?JSON.stringify(e.input):void 0})}return""}async analyzeUsage(e,t){let s=$(),o=await uo(e),i=[];for(let r of o)r.type==="user"&&r.message?.role==="user"&&!r.isSidechain?this.processDesktopUserEvent(r,s):r.type==="assistant"&&this.processDesktopAssistantEvent(r,s,i);return this.applyDesktopModelSwitchingStats(i,s),V(t.modelPricing,s.modelSwitching.uniqueModels,i,s),s}processDesktopUserEvent(e,t){t.modeUsage.ask++;let s=kl(e.message?.content);if(s){let o=`__slash__${s}`;t.toolCalls.byTool[o]=(t.toolCalls.byTool[o]||0)+1}Tl(t,e.message?.content)}processDesktopAssistantEvent(e,t,s){let o=Ut(e.message?.model||"unknown");s.push(o);let i=Array.isArray(e.message?.content)?e.message.content:[];for(let r of i){if(r?.type!=="tool_use")continue;t.toolCalls.total++;let a=String(r.name||"tool");t.toolCalls.byTool[a]=(t.toolCalls.byTool[a]||0)+1,Sl(t,a,r.input)}}applyDesktopModelSwitchingStats(e,t){let s=[...new Set(e)];t.modelSwitching.uniqueModels=s,t.modelSwitching.modelCount=s.length,t.modelSwitching.totalRequests=e.length;let o=0;for(let i=1;i<e.length;i++)e[i]!==e[i-1]&&o++;t.modelSwitching.switchCount=o}};var Fm=S(require("fs"));var Co=class{constructor(e){this.mistralVibe=e}mistralVibe;id="mistralvibe";displayName="Mistral Vibe";handles(e){return this.mistralVibe.isVibeSessionFile(e)}getBackingPath(e){return e}async stat(e){return Fm.promises.stat(e)}async getTokens(e){let t=await this.mistralVibe.getTokensFromSession(e);return{...t,actualTokens:t.tokens}}async countInteractions(e){return this.mistralVibe.countInteractions(e)}async getModelUsage(e){return this.mistralVibe.getModelUsage(e)}async getMeta(e){let t=await this.mistralVibe.getSessionMeta(e);return{title:t.title,firstInteraction:t.firstInteraction,lastInteraction:t.lastInteraction}}getEditorRoot(e){return this.mistralVibe.getSessionLogDir()}async discover(e){let t=this.getCandidatePaths(),s=[];try{let o=await this.mistralVibe.discoverSessions();o.length>0&&(e(`\u{1F4C4} Found ${o.length} session file(s) in Mistral Vibe (~/.vibe/logs/session)`),s.push(...o))}catch(o){e(`Could not read Mistral Vibe session files: ${o}`)}return{sessionFiles:s,candidatePaths:t}}getCandidatePaths(){return[{path:this.mistralVibe.getSessionLogDir(),source:"Mistral Vibe"}]}async buildTurns(e){let t=[],s=await this.mistralVibe.readSessionMessages(e),o=await this.mistralVibe.getSessionMeta(e),i=await this.mistralVibe.getTokensFromSession(e),r=o.model||"devstral",a=this.findUserMessageIndices(s);for(let c=0;c<a.length;c++){let d=a[c],p=c+1<a.length?a[c+1]:s.length;t.push(this.buildMistralTurn(s,d,p,o,r,c+1))}return{turns:t,actualTokens:i.tokens}}findUserMessageIndices(e){let t=[];for(let s=0;s<e.length;s++)e[s].role==="user"&&e[s].injected!==!0&&t.push(s);return t}buildMistralTurn(e,t,s,o,i,r){let a=e[t],c=typeof a.content=="string"?a.content:"",{assistantText:d,toolCalls:p}=this.collectMistralTurnContent(e,t,s);return{turnNumber:r,timestamp:o.firstInteraction,mode:"cli",userMessage:c,assistantResponse:d,model:i,toolCalls:p,contextReferences:G(),mcpTools:[],inputTokensEstimate:0,outputTokensEstimate:0,thinkingTokensEstimate:0}}collectMistralTurnContent(e,t,s){let o="",i=[];for(let r=t+1;r<s;r++){let a=e[r];if(a.role==="assistant")o+=this.processMistralAssistantMsg(a,i);else if(a.role==="tool"){let c=i[i.length-1];c&&(c.result=typeof a.content=="string"?a.content:void 0)}}return{assistantText:o,toolCalls:i}}processMistralAssistantMsg(e,t){let s="";typeof e.content=="string"&&(s=e.content);for(let o of Array.isArray(e.tool_calls)?e.tool_calls:[])t.push({toolName:o.function?.name||o.name||"unknown",arguments:o.function?.arguments?JSON.stringify(o.function.arguments):void 0});return s}async analyzeUsage(e,t){let s=$(),o=await this.mistralVibe.readSessionMessages(e),r=(await this.mistralVibe.getSessionMeta(e)).model||"devstral",a=[];for(let d of o)if(d.role==="user"&&d.injected!==!0)s.modeUsage.cli++;else if(d.role==="assistant"&&(a.push(r),Array.isArray(d.tool_calls)))for(let p of d.tool_calls){s.toolCalls.total++;let g=String(p.function?.name||p.name||"tool");s.toolCalls.byTool[g]=(s.toolCalls.byTool[g]||0)+1}let c=[...new Set(a)];return s.modelSwitching.uniqueModels=c,s.modelSwitching.modelCount=c.length,s.modelSwitching.totalRequests=a.length,s.modelSwitching.switchCount=0,V(t.modelPricing,c,a,s),s}};var Nm=S(require("fs"));var ko=class{constructor(e){this.geminiCli=e}geminiCli;id="geminicli";displayName="Gemini CLI";handles(e){return this.geminiCli.isGeminiCliSessionFile(e)}getBackingPath(e){return e}async stat(e){return Nm.promises.stat(e)}async getTokens(e){let t=await this.geminiCli.getTokensFromGeminiCliSession(e);return{...t,actualTokens:t.tokens}}async countInteractions(e){return await this.geminiCli.countGeminiCliInteractions(e)}async getModelUsage(e){return await this.geminiCli.getGeminiCliModelUsage(e)}async getMeta(e){return await this.geminiCli.getGeminiCliSessionMeta(e)}getEditorRoot(e){return this.geminiCli.getGeminiDataDir()}async discover(e){let t=this.getCandidatePaths(),s=[];try{let o=await this.geminiCli.getGeminiCliSessionFiles();o.length>0&&(e(`\u{1F4C4} Found ${o.length} session file(s) in Gemini CLI (~/.gemini/tmp/*/chats)`),s.push(...o))}catch(o){e(`Could not read Gemini CLI session files: ${o}`)}return{sessionFiles:s,candidatePaths:t}}getCandidatePaths(){return[{path:this.geminiCli.getGeminiTmpDir(),source:"Gemini CLI (sessions)"},{path:this.geminiCli.getGeminiProjectsPath(),source:"Gemini CLI (projects.json)"},{path:this.geminiCli.getGeminiLogsPath(),source:"Gemini CLI (logs.json)"}]}async buildTurns(e){return await this.geminiCli.buildGeminiCliTurns(e)}async getDailyFractions(e){return await this.geminiCli.getGeminiCliDailyFractions(e)}async analyzeUsage(e,t){let s=$(),o=await this.geminiCli.readGeminiCliSession(e),i=[];s.modeUsage.cli+=o.userRecords.length;for(let r of o.assistantRecords)this.processGeminiAssistantRecord(r,s,i);return this.applyGeminiModelSwitchingStats(i,s),V(t.modelPricing,s.modelSwitching.uniqueModels,i,s),s}processGeminiAssistantRecord(e,t,s){let o=Jn(e.model||"unknown");s.push(o);for(let i of Array.isArray(e.toolCalls)?e.toolCalls:[]){let r=this.resolveGeminiToolName(i);r&&(t.toolCalls.total++,t.toolCalls.byTool[r]=(t.toolCalls.byTool[r]||0)+1)}}resolveGeminiToolName(e){return typeof e?.name=="string"&&e.name.trim().length>0?e.name.trim():typeof e?.displayName=="string"&&e.displayName.trim().length>0?e.displayName.trim():""}applyGeminiModelSwitchingStats(e,t){let s=[...new Set(e)];t.modelSwitching.uniqueModels=s,t.modelSwitching.modelCount=s.length,t.modelSwitching.totalRequests=e.length;let o=0;for(let i=1;i<e.length;i++)e[i]!==e[i-1]&&o++;t.modelSwitching.switchCount=o}};var Lm=S(require("fs")),wl=S(require("inspector"));var So=class{constructor(e,t=()=>0){this.antigravity=e;this.estimateTokens=t}antigravity;estimateTokens;id="antigravity";displayName="Antigravity";handles(e){return this.antigravity.isAntigravitySessionFile(e)}getBackingPath(e){return e}async stat(e){return Lm.promises.stat(e)}async getTokens(e){return{...await this.antigravity.estimateTokensFromAntigravitySession(e,this.estimateTokens),actualTokens:0}}async countInteractions(e){return this.antigravity.countAntigravityInteractions(e)}async getModelUsage(e){return{}}async getMeta(e){return this.antigravity.getAntigravitySessionMeta(e)}getEditorRoot(e){return this.antigravity.getAntigravityBrainDir()}async buildTurns(e){return this.antigravity.buildAntigravityTurns(e)}async discover(e){let t=this.getCandidatePaths(),s=[],o=this.antigravity.getAntigravityBrainDir();wl.url()&&e(`\u{1F50D} [Antigravity] Checking brain dir: ${o}`);try{let i=await this.antigravity.getAntigravitySessionFiles();wl.url()&&e(`\u{1F50D} [Antigravity] Found ${i.length} transcript(s)`),i.length>0&&(e(`\u{1F4C4} Found ${i.length} session file(s) in Antigravity (~/.gemini/antigravity/brain/*/)`),s.push(...i))}catch(i){e(`Could not read Antigravity session files: ${i}`)}return{sessionFiles:s,candidatePaths:t}}getCandidatePaths(){return[{path:this.antigravity.getAntigravityBrainDir(),source:"Antigravity (brain/)"}]}async analyzeUsage(e,t){let s=$(),o=await this.antigravity.readAntigravitySession(e);s.modeUsage.cli+=o.userEntries.length;for(let i of o.modelEntries)if(Array.isArray(i.tool_calls))for(let r of i.tool_calls)r.name&&(s.toolCalls.total++,s.toolCalls.byTool[r.name]=(s.toolCalls.byTool[r.name]||0)+1);return s.modelSwitching.uniqueModels=[],s.modelSwitching.modelCount=0,s.modelSwitching.totalRequests=0,s.modelSwitching.switchCount=0,s}};var jm=S(require("fs"));var To=class{constructor(e){this.pi=e}pi;id="pi";displayName="Pi";handles(e){return this.pi.isPiSessionFile(e)}getBackingPath(e){return e}async stat(e){return jm.promises.stat(e)}async getTokens(e){let t=await this.pi.getTokens(e);return{...t,actualTokens:t.tokens}}async countInteractions(e){return this.pi.countInteractions(e)}async getModelUsage(e){return this.pi.getModelUsage(e)}async getMeta(e){return this.pi.getSessionMeta(e)}getEditorRoot(e){return this.pi.getConfigDir()}async discover(e){let t=this.getCandidatePaths(),s=[];try{let o=await this.pi.discoverSessions();o.length>0&&(e(`\u{1F4C4} Found ${o.length} session file(s) in Pi (~/.pi/agent/sessions)`),s.push(...o))}catch(o){e(`Could not read Pi session files: ${o}`)}return{sessionFiles:s,candidatePaths:t}}getCandidatePaths(){return[{path:this.pi.getConfigDir(),source:"Pi"}]}async buildTurns(e){let t=await this.pi.getMessages(e),{tokens:s}=await this.pi.getTokens(e),o=await this.pi.getModelUsage(e),i=t.filter(c=>c.message?.role==="user").length,{perTurnInput:r,perTurnOutput:a}=this.computePerTurnDefaults(o,i);return{turns:this.buildAllTurns(t,r,a),actualTokens:s}}computePerTurnDefaults(e,t){if(t===0)return{perTurnInput:0,perTurnOutput:0};let s=Object.values(e).reduce((i,r)=>i+r.inputTokens,0),o=Object.values(e).reduce((i,r)=>i+r.outputTokens,0);return{perTurnInput:Math.round(s/t),perTurnOutput:Math.round(o/t)}}buildAllTurns(e,t,s){let o=[],i=0;for(let r=0;r<e.length;r++){if(e[r].message?.role!=="user")continue;i++;let a=this.collectAssistantEvents(e,r);o.push(this.buildTurn(e[r],a,i,t,s))}return o}collectAssistantEvents(e,t){let s=[];for(let o=t+1;o<e.length&&e[o].message?.role!=="user";o++)e[o].message?.role==="assistant"&&s.push(e[o]);return s}buildTurn(e,t,s,o,i){let r=this.extractUserText(e.message?.content),{assistantText:a,toolCalls:c,model:d}=this.processAssistantEvents(t),p=t.reduce((h,y)=>h+(y.message?.usage?.input??0),0),g=t.reduce((h,y)=>h+(y.message?.usage?.output??0),0);return{turnNumber:s,timestamp:e.timestamp??null,mode:"cli",userMessage:r,assistantResponse:a,model:d,toolCalls:c,contextReferences:G(),mcpTools:[],inputTokensEstimate:p>0?p:o,outputTokensEstimate:g>0?g:i,thinkingTokensEstimate:0}}extractUserText(e){return Array.isArray(e)?e.filter(t=>t.type==="text").map(t=>t.text||"").join(`
|
|
158
|
-
`):typeof e=="string"?e:""}processAssistantEvents(e){let t="",s=[],o=null;for(let i of e){let r=i.message;o||(o=r?.model??null),Array.isArray(r?.content)&&(t+=this.processContentParts(r.content,s))}return{assistantText:t,toolCalls:s,model:o}}processContentParts(e,t){let s="";for(let o of e)o.type==="text"&&o.text?s+=o.text:o.type==="toolCall"&&o.name&&t.push({toolName:o.name,arguments:o.arguments?JSON.stringify(o.arguments):void 0});return s}async getSyncData(e){return this.pi.getSessionData(e)}async analyzeUsage(e,t){let s=$(),o=await this.pi.getMessages(e),i=this.collectModelsAndCounts(o,s);return this.applyModelSwitchingStats(i,t,s),s}collectModelsAndCounts(e,t){let s=[];for(let o of e){let i=o.message;i&&(i.role==="user"?t.modeUsage.cli++:i.role==="assistant"&&this.processAssistantForAnalysis(i,s,t))}return s}processAssistantForAnalysis(e,t,s){if(t.push(e.model||"unknown"),!!Array.isArray(e.content)){for(let o of e.content)if(o.type==="toolCall"&&o.name){s.toolCalls.total++;let i=o.name;s.toolCalls.byTool[i]=(s.toolCalls.byTool[i]||0)+1}}}applyModelSwitchingStats(e,t,s){let o=[...new Set(e)];s.modelSwitching.uniqueModels=o,s.modelSwitching.modelCount=o.length,s.modelSwitching.totalRequests=e.length;let i=0;for(let r=1;r<e.length;r++)e[r]!==e[r-1]&&i++;s.modelSwitching.switchCount=i,V(t.modelPricing,o,e,s)}};var
|
|
159
|
-
|
|
160
|
-
`)}async buildTurns(e){let t=await this.cursor.readComposerData(e);if(!t?.fullConversationHeadersOnly)return{turns:[]};let s=t.fullConversationHeadersOnly,o=typeof t.contextTokensUsed=="number"?t.contextTokensUsed:0,i=t.modelConfig?.modelName||null,r=s.map(p=>p.bubbleId).filter(p=>!!p),a=await this.cursor.readBubbles(e,r),c=[],d=0;for(let p=0;p<s.length;p++){let g=s[p];if(g.type!==1)continue;d++;let h=g.bubbleId?a.get(g.bubbleId):void 0;c.push({turnNumber:d,timestamp:h?.createdAt??null,mode:"agent",userMessage:h?.text??"",assistantResponse:this.collectAssistantText(s,p+1,a),model:i,toolCalls:[],contextReferences:G(),mcpTools:[],inputTokensEstimate:0,outputTokensEstimate:0,thinkingTokensEstimate:0})}return{turns:c,actualTokens:o}}async getSyncData(e){return this.cursor.getSessionData(e)}async analyzeUsage(e,t){let s=$(),o=await this.cursor.readComposerData(e);if(!o?.fullConversationHeadersOnly)return s;let i=o.modelConfig?.modelName||"unknown",r=o.fullConversationHeadersOnly,a=r.filter(p=>p.type===1).length,c=r.filter(p=>p.type===2).length;s.modeUsage.agent+=a,c>0&&(s.modelSwitching.uniqueModels=[i],s.modelSwitching.modelCount=1,s.modelSwitching.totalRequests=c,s.modelSwitching.switchCount=0);let d=Array(c).fill(i);return V(t.modelPricing,[i],d,s),s}};var br=S(require("fs")),xe=S(require("path")),vl=S(require("os"));function Ml(){return xe.join(vl.homedir(),".copilot","session-state")}var wo=class n{id="copilotcli";displayName="Copilot CLI";static WORKSPACE_YAML_CONCURRENCY=64;store=new js;_scoutSessionIds=new Set;_appSessionIds=new Set;getDisplayName(e){let t=this.store.getSessionId(e),s=xe.basename(xe.dirname(e));return t&&this._scoutSessionIds.has(t)||s&&this._scoutSessionIds.has(s)?"MS Scout (Copilot CLI)":t&&this._appSessionIds.has(t)||s&&this._appSessionIds.has(s)?"Copilot CLI (App)":"Copilot CLI"}getDisplayNameForDiscoveredPath(e){let t=xe.basename(xe.dirname(e));if(t&&this._scoutSessionIds.has(t))return"MS Scout (Copilot CLI)";if(t&&this._appSessionIds.has(t))return"Copilot CLI (App)"}async getWorkspacePathForDiscoveredPath(e){let t=xe.join(xe.dirname(e),"workspace.yaml");if(!await Re(t))return;let s=await Pe(t,"copilotCliAdapter");return s===void 0?void 0:s.match(/^cwd:\s*(.+)$/m)?.[1]?.trim()||void 0}handles(e){return this.store.isCliStoreSession(e)}getBackingPath(e){return this.store.isCliStoreSession(e)?this.store.getDbPathFromVirtual(e):e}async stat(e){return this.store.isCliStoreSession(e)?this.store.stat(e):br.promises.stat(e)}async getTokens(e){let t=await Ps(e);return t?{tokens:t.actualTokens,thinkingTokens:0,actualTokens:t.actualTokens,cacheReadTokens:t.cacheReadTokens}:{tokens:0,thinkingTokens:0,actualTokens:0}}async countInteractions(e){return this.store.isCliStoreSession(e)?this.store.countTurns(e):0}async getModelUsage(e){return(await Ps(e))?.modelUsage??{}}async getMeta(e){if(this.store.isCliStoreSession(e)){let t=await this.store.readSession(e);return t?{title:t.summary??void 0,firstInteraction:t.created_at,lastInteraction:t.updated_at,workspacePath:t.cwd??void 0,repository:t.repository??void 0}:{title:void 0,firstInteraction:null,lastInteraction:null}}return{title:void 0,firstInteraction:null,lastInteraction:null}}getEditorRoot(e){return this.store.isCliStoreSession(e)?xe.join(vl.homedir(),".copilot"):Ml()}async buildTurns(e){return this.store.isCliStoreSession(e)?{turns:(await this.store.getTurns(e)).map(o=>({turnNumber:o.turn_index+1,timestamp:o.timestamp,mode:"cli",userMessage:o.user_message??"",assistantResponse:o.assistant_response??"",model:null,toolCalls:[],contextReferences:G(),mcpTools:[],inputTokensEstimate:0,outputTokensEstimate:0,thinkingTokensEstimate:0}))}:{turns:[]}}async analyzeUsage(e,t){let s=$();if(!this.store.isCliStoreSession(e))return s;let i=(await this.store.getTurns(e)).filter(a=>a.user_message!==null).length,r=this.store.getSessionId(e);return r&&this._appSessionIds.has(r)?s.modeUsage.cliApp=i:s.modeUsage.cli=i,s}async getDailyFractions(e){return this.store.isCliStoreSession(e)?this.store.getDailyFractions(e):{}}async _tryMarkScoutFromWorkspaceYaml(e,t){let s=xe.join(e,"workspace.yaml");if(!await Re(s))return;let o=await Pe(s,"copilotCliAdapter");if(o===void 0)return;let i=o.match(/^cwd:\s*(.+)$/m);i&&ha(i[1].trim())&&this._scoutSessionIds.add(t);let r=o.match(/^client_name:\s*(.+)$/m);r&&En(r[1].trim())&&this._appSessionIds.add(t)}async markDbOnlySessionsFromWorkspaceYaml(e,t){let s=0,o=async()=>{for(;s<e.length;){let i=e[s++];ha(i.cwd)&&this._scoutSessionIds.add(i.id),await this._tryMarkScoutFromWorkspaceYaml(xe.join(t,i.id),i.id)}};await Promise.all(Array.from({length:Math.min(n.WORKSPACE_YAML_CONCURRENCY,e.length)},()=>o()))}getCandidatePaths(){let e=[{path:Ml(),source:"Copilot CLI"}],t=this.store.getDbPath();return e.push({path:t,source:"Copilot CLI (session-store.db)"}),e}async discover(e){let t=this.getCandidatePaths(),s=[],o=Ml(),i=new Set;try{if(await Re(o)){let r;try{r=await br.promises.readdir(o,{withFileTypes:!0})}catch(p){e(`Could not read Copilot CLI session path in ${o}: ${p}`),r=[]}let a=r.filter(p=>!p.isDirectory()&&(p.name.endsWith(".json")||p.name.endsWith(".jsonl"))).map(p=>xe.join(o,p.name));a.length>0&&(e(`\u{1F4C4} Found ${a.length} session files in Copilot CLI directory`),s.push(...a));let c=r.filter(p=>p.isDirectory()),d=(await Promise.all(c.map(async p=>{let g=xe.join(o,p.name),h=xe.join(g,"events.jsonl");try{if((await br.promises.stat(h)).size>0)return i.add(p.name),await this._tryMarkScoutFromWorkspaceYaml(g,p.name),h}catch{}return null}))).filter(p=>p!==null);d.length>0&&(e(`\u{1F4C4} Found ${d.length} session files in Copilot CLI subdirectories`),s.push(...d))}}catch(r){e(`Could not check Copilot CLI session path ${o}: ${r}`)}try{let r=await this.store.discoverNewSessionsWithCwd(i);if(r.length>0){e(`\u{1F4C4} Found ${r.length} chat-only session(s) in Copilot CLI session-store.db`),await this.markDbOnlySessionsFromWorkspaceYaml(r,o);for(let{id:a}of r)s.push(this.store.virtualPath(a))}}catch(r){e(`Could not read Copilot CLI session-store.db: ${r}`)}return{sessionFiles:s,candidatePaths:t}}};var Mo=S(require("fs")),Cr=S(require("path")),qm=S(require("os"));function Pl(){return Cr.join(qm.homedir(),".copilot","jb")}var vo=class{id="jetbrains";displayName="JetBrains IDE";handles(e){return!1}getBackingPath(e){return e}async stat(e){return Mo.promises.stat(e)}async parsePartition(e){try{let t=await Pe(e,"jetbrainsAdapter");return t===void 0?null:dr(t)}catch{return null}}async getTokens(e){let t=await this.parsePartition(e);return t?{tokens:t.tokens,thinkingTokens:t.thinkingTokens,actualTokens:t.actualTokens}:{tokens:0,thinkingTokens:0,actualTokens:0}}async countInteractions(e){return(await this.parsePartition(e))?.interactions??0}async getModelUsage(e){return(await this.parsePartition(e))?.modelUsage??{}}async getMeta(e){let t=await this.parsePartition(e);return{title:void 0,firstInteraction:t?.firstInteraction??null,lastInteraction:t?.lastInteraction??null}}async getToolCounts(e){return(await this.parsePartition(e))?.toolCounts??{}}async getToolCalls(e){return(await this.parsePartition(e))?.toolCalls??[]}async getTurns(e){return(await this.parsePartition(e))?.turns??[]}async getMessageIds(e){return(await this.parsePartition(e))?.messageIds??[]}async getTurnStatusCounts(e){return(await this.parsePartition(e))?.turnStatusCounts??{success:0,cancelled:0,failed:0,unknown:0}}async hasThinking(e){return(await this.parsePartition(e))?.hasThinking??!1}getEditorRoot(e){return Pl()}getCandidatePaths(){return[{path:Pl(),source:"JetBrains IDE"}]}async discover(e){let t=this.getCandidatePaths(),s=[],o=Pl();try{if(!await Re(o))return{sessionFiles:s,candidatePaths:t};let i;try{i=await Mo.promises.readdir(o,{withFileTypes:!0})}catch(c){return e(`Could not read JetBrains session path in ${o}: ${c}`),{sessionFiles:s,candidatePaths:t}}let r=i.filter(c=>c.isDirectory()),a=(await Promise.all(r.map(async c=>{let d=Cr.join(o,c.name),p;try{p=await Mo.promises.readdir(d,{withFileTypes:!0})}catch{return[]}let g=[];for(let h of p){if(!h.isFile()||!/^partition-\d+\.jsonl$/.test(h.name))continue;let y=Cr.join(d,h.name);try{(await Mo.promises.stat(y)).size>0&&g.push(y)}catch{}}return g}))).flat();a.length>0&&(e(`\u{1F4C4} Found ${a.length} session file(s) in JetBrains IDE Copilot`),s.push(...a))}catch(i){e(`Could not check JetBrains session path ${o}: ${i}`)}return{sessionFiles:s,candidatePaths:t}}};var zm=S(require("fs"));var Po=class{constructor(e){this.kiro=e}kiro;id="kiro";displayName="Kiro";handles(e){return this.kiro.isKiroSessionFile(e)}getBackingPath(e){return e}async stat(e){return zm.promises.stat(e)}async getTokens(e){let t=await this.kiro.getTokensFromKiroSession(e);return{...t,actualTokens:t.tokens}}async countInteractions(e){return await this.kiro.countKiroInteractions(e)}async getModelUsage(e){return await this.kiro.getKiroModelUsage(e)}async getMeta(e){return await this.kiro.getKiroSessionMeta(e)}getEditorRoot(e){return this.kiro.getKiroAppDataDir()}async discover(e){let t=this.getCandidatePaths(),s=[];try{let o=await this.kiro.getKiroSessionFiles();o.length>0&&(e(`\u{1F4C4} Found ${o.length} session file(s) in Kiro (kiro.kiroagent/workspace-sessions)`),s.push(...o))}catch(o){e(`Could not read Kiro session files: ${o}`)}return{sessionFiles:s,candidatePaths:t}}getCandidatePaths(){return[{path:this.kiro.getKiroWorkspaceSessionsDir(),source:"Kiro"}]}async buildTurns(e){let t=await this.kiro.buildKiroTurns(e),s=G();return{turns:t.map((i,r)=>({turnNumber:r+1,timestamp:i.timestampMs!==null?new Date(i.timestampMs).toISOString():null,mode:"agent",userMessage:i.userText,assistantResponse:i.assistantText,model:i.model,toolCalls:i.toolCalls,contextReferences:s,mcpTools:[],inputTokensEstimate:i.inputTokens,outputTokensEstimate:i.outputTokens,thinkingTokensEstimate:0}))}}async getDailyFractions(e){return await this.kiro.getKiroDailyFractions(e)}async analyzeUsage(e,t){let s=$(),o=await this.kiro.buildKiroTurns(e),i=[];for(let c of o){s.modeUsage.agent++,c.model&&i.push(c.model);for(let d of c.toolCalls)s.toolCalls.total++,s.toolCalls.byTool[d.toolName]=(s.toolCalls.byTool[d.toolName]||0)+1}let r=[...new Set(i)];s.modelSwitching.uniqueModels=r,s.modelSwitching.modelCount=r.length,s.modelSwitching.totalRequests=i.length;let a=0;for(let c=1;c<i.length;c++)i[c]!==i[c-1]&&a++;return s.modelSwitching.switchCount=a,V(t.modelPricing,r,i,s),s}};var Wm=S(require("fs"));var Ao=class{constructor(e){this.kiroCli=e}kiroCli;id="kirocli";displayName="Kiro CLI";handles(e){return this.kiroCli.isKiroCliSessionFile(e)}getBackingPath(e){return e}async stat(e){return Wm.promises.stat(e)}async getTokens(e){let t=await this.kiroCli.getTokensFromKiroCliSession(e);return{...t,actualTokens:t.tokens}}async countInteractions(e){return await this.kiroCli.countKiroCliInteractions(e)}async getModelUsage(e){return await this.kiroCli.getKiroCliModelUsage(e)}async getMeta(e){return await this.kiroCli.getKiroCliSessionMeta(e)}getEditorRoot(e){return this.kiroCli.getKiroCliDataDir()}async discover(e){let t=this.getCandidatePaths(),s=[];try{let o=await this.kiroCli.getKiroCliSessionFiles();o.length>0&&(e(`\u{1F4C4} Found ${o.length} session file(s) in Kiro CLI (~/.kiro/sessions/cli)`),s.push(...o))}catch(o){e(`Could not read Kiro CLI session files: ${o}`)}return{sessionFiles:s,candidatePaths:t}}getCandidatePaths(){return[{path:this.kiroCli.getKiroCliSessionsDir(),source:"Kiro CLI"}]}async buildTurns(e){let t=await this.kiroCli.buildKiroCliTurns(e),s=G(),i=(await this.kiroCli.readSessionMetadata(e))?.modelId||null;return{turns:t.map((a,c)=>({turnNumber:c+1,timestamp:a.timestampMs!==null?new Date(a.timestampMs).toISOString():null,mode:"cli",userMessage:a.userText,assistantResponse:a.assistantText,model:i,toolCalls:a.toolCalls,contextReferences:s,mcpTools:[],inputTokensEstimate:a.inputTokens,outputTokensEstimate:a.outputTokens,thinkingTokensEstimate:0}))}}async getDailyFractions(e){return await this.kiroCli.getKiroCliDailyFractions(e)}async analyzeUsage(e,t){let s=$(),o=await this.kiroCli.buildKiroCliTurns(e),r=(await this.kiroCli.readSessionMetadata(e))?.modelId||"unknown",a=[];for(let d of o){s.modeUsage.cli++,a.push(r);for(let p of d.toolCalls)s.toolCalls.total++,s.toolCalls.byTool[p.toolName]=(s.toolCalls.byTool[p.toolName]||0)+1}let c=[...new Set(a)];return s.modelSwitching.uniqueModels=c,s.modelSwitching.modelCount=c.length,s.modelSwitching.totalRequests=a.length,s.modelSwitching.switchCount=0,V(t.modelPricing,c,a,s),s}};var $m=S(require("fs")),Hm=S(require("path"));var kr=class{constructor(e){this.devinCli=e}devinCli;id="devincli";displayName="Devin CLI";handles(e){return this.devinCli.isDevinCliSessionFile(e)}getBackingPath(e){return this.devinCli.getDbPathFromVirtual(e)}async stat(e){return this.devinCli.statSessionFile(e)}async getTokens(e){let t=await this.devinCli.getTokens(e);return{...t,actualTokens:t.tokens}}async countInteractions(e){return this.devinCli.countInteractions(e)}async getModelUsage(e){return this.devinCli.getModelUsage(e)}async getMeta(e){let t=await this.devinCli.readSession(e),s=await this.devinCli.getMessageNodes(e),o=[];t?.created_at&&o.push(t.created_at*1e3),t?.last_activity_at&&o.push(t.last_activity_at*1e3);for(let i of s)i.created_at&&o.push(i.created_at*1e3);return o.sort((i,r)=>i-r),{title:t?.title||void 0,firstInteraction:o.length>0?new Date(o[0]).toISOString():null,lastInteraction:o.length>0?new Date(o[o.length-1]).toISOString():null,workspacePath:t?.working_directory||void 0}}getEditorRoot(e){return Hm.dirname(this.devinCli.getDbPathFromVirtual(e))}async discover(e){let t=this.getCandidatePaths(),s=[],o=this.devinCli.getDbPath();e(`\u{1F4C1} Checking Devin CLI DB path: ${o}`);try{await $m.promises.access(o);let i=await this.devinCli.discoverSessionIds();i.length>0&&e(`\u{1F4C4} Found ${i.length} session(s) in Devin CLI database`),s.push(...i.map(r=>this.devinCli.virtualPath(r)))}catch(i){e(`Could not read Devin CLI database: ${i}`)}return{sessionFiles:s,candidatePaths:t}}getCandidatePaths(){return[{path:this.devinCli.getDbPath(),source:"Devin CLI (sessions.db)"}]}async buildTurns(e){let t=[],s=await this.devinCli.readSession(e),o=await this.devinCli.getMessageNodes(e),i=this.devinCli.buildMainChain(o,s?.main_chain_id??null),r=0;for(let a=0;a<i.length;a++){let c=this.devinCli.parseChatMessage(i[a].chat_message);c.role==="user"&&(r++,t.push(this.buildDevinCliTurn(i,a,c.text,s,r)))}return{turns:t}}buildDevinCliTurn(e,t,s,o,i){let r="";for(let c=t+1;c<e.length;c++){let d=this.devinCli.parseChatMessage(e[c].chat_message);if(d.role==="user")break;d.role==="assistant"&&(r+=(r?`
|
|
161
|
-
`:"")+d.text)}let a=e[t];return{turnNumber:i,timestamp:a.created_at?new Date(a.created_at*1e3).toISOString():null,mode:"cli",userMessage:s,assistantResponse:r,model:o?.model||null,toolCalls:[],contextReferences:G(),mcpTools:[],inputTokensEstimate:Math.ceil(s.length/4),outputTokensEstimate:Math.ceil(r.length/4),thinkingTokensEstimate:0}}async getDailyFractions(e){return this.devinCli.getDailyFractions(e)}async analyzeUsage(e,t){let s=$(),o=await this.devinCli.readSession(e),i=await this.devinCli.getMessageNodes(e),r=this.devinCli.buildMainChain(i,o?.main_chain_id??null),a=await this.devinCli.getToolCalls(e),
|
|
162
|
-
`),
|
|
163
|
-
`:"")+t.content}collectToolCallsFromAssistantMessage(e,t,s){for(let o of this.hermes.parseToolCalls(e.tool_calls)){let i={toolName:o.name,arguments:o.arguments};s.push(i),o.id&&t.set(o.id,i)}}attachToolResult(e,t,s){let o=this.hermes.parseToolResultText(e.content),i=e.tool_call_id?t.get(e.tool_call_id):void 0;if(i){i.result=o;return}e.tool_name&&s.push({toolName:e.tool_name,result:o})}async analyzeUsage(e,t){let s=$(),o=await this.hermes.readSession(e),i=await this.hermes.getMessages(e),r=o?.model||"unknown",a=[];for(let d of i)d.role==="user"&&(s.modeUsage.cli++,a.push(r)),d.role==="tool"&&d.tool_name&&(s.toolCalls.total++,s.toolCalls.byTool[d.tool_name]=(s.toolCalls.byTool[d.tool_name]||0)+1);let
|
|
164
|
-
`);for(let i of o)if(i.trim())try{let r=JSON.parse(i);if(r.type==="user.message"){an(r.timestamp??r.ts??r.data?.timestamp,t);continue}this.processVsCodeDeltaEvent(r,s,t)}catch{}return t}processVsCodeDeltaEvent(e,t,s){let o=e.kind,i=e.k,r=e.v;o===0&&r?.requests&&Array.isArray(r.requests)?this.processKind0Event(r,s):o===2&&Array.isArray(i)&&i[0]==="requests"?this.processKind2Event(i,r,t,s):this.isKind1TimestampUpdate(o,i)&&this.processKind1Event(i,r,t,s)}isKind1TimestampUpdate(e,t){return e===1&&Array.isArray(t)&&t.length===3&&t[0]==="requests"&&(t[2]==="timestamp"||t[2]==="ts")&&typeof t[1]=="number"}processKind0Event(e,t){for(let s of e.requests)an(s.timestamp??s.ts,t)}processKind2Event(e,t,s,o){if(Array.isArray(t))for(let i of t)an(i.timestamp??i.ts,o);else if(t&&typeof t=="object"){let i=t.timestamp??t.ts;i!==void 0&&an(i,o),typeof e[1]=="number"&&(s[e[1]]=i)}}processKind1Event(e,t,s,o){let i=e[1];s[i]===void 0&&an(t,o),s[i]=t}},Il=class{extractCounts(e){let t={};try{let s=JSON.parse(e);if(s.requests&&Array.isArray(s.requests))for(let o of s.requests){let i=o.timestamp??o.ts??o.result?.timestamp;an(i,t)}}catch{}return t}};function IS(n){if(n==null)return null;let e=new Date(n);return isNaN(e.getTime())?null:e}function an(n,e){let t=IS(n);if(t!==null){let s=t.getFullYear(),o=String(t.getMonth()+1).padStart(2,"0"),i=String(t.getDate()).padStart(2,"0"),r=`${s}-${o}-${i}`;e[r]=(e[r]||0)+1}}function Zm(n,e,t){let s=t.getFullYear(),o=String(t.getMonth()+1).padStart(2,"0"),i=String(t.getDate()).padStart(2,"0"),r=`${s}-${o}-${i}`,c=(e?new Rl:new Il).extractCounts(n),d=Object.values(c).reduce((g,h)=>g+h,0);if(d===0)return{[r]:1};let p={};for(let[g,h]of Object.entries(c))p[g]=h/d;return p}function ep(n,e){let t=ur("last7",e),s=ur("last30",e),o=ur("currentMonth",e),i={last7:[],last30:[],currentMonth:[]};for(let r of[...n].sort((a,c)=>c.interactions-a.interactions))r.activityKey>=t&&i.last7.push(r.value),r.activityKey>=s&&i.last30.push(r.value),r.activityKey>=o&&i.currentMonth.push(r.value);return i}var ss=S(require("fs")),Ol=S(require("path")),tp=S(require("os"));var wr=class{maxEntries;constructor(e=2e3){this.maxEntries=e}isValid(e,t,s){return e.mtime===t&&e.size===s}evict(e){if(e.size<=this.maxEntries)return;let t=[...e.entries()].sort((s,o)=>o[1].mtime-s[1].mtime);e.clear();for(let[s,o]of t.slice(0,this.maxEntries))e.set(s,o)}};var sp=6,US=2e3,np=Ol.join(tp.homedir(),".copilot-token-tracker"),Ul=Ol.join(np,"cli-cache.json"),Bt=new Map,ln=!0,op=!1,ip=new wr(US);function Fl(){ln=!1,Bt.clear()}function Nl(){if(ln)try{if(!ss.existsSync(Ul))return;let n=ss.readFileSync(Ul,"utf-8"),e=JSON.parse(n);if(e.version!==sp){Bt.clear();return}Bt=new Map(Object.entries(e.entries))}catch{Bt.clear()}}function Ll(){if(!(!ln||!op))try{ip.evict(Bt),ss.mkdirSync(np,{recursive:!0});let n={version:sp,entries:Object.fromEntries(Bt)};ss.writeFileSync(Ul,JSON.stringify(n),"utf-8")}catch{}}function rp(n,e,t){if(!ln)return null;let s=Bt.get(n);return!s||!ip.isValid(s,e,t)?null:{...s.data,lastModified:new Date(s.data.lastModified)}}function jl(n,e,t,s){ln&&(op=!0,Bt.set(n,{mtime:e,size:t,data:{...s,lastModified:s.lastModified.toISOString()}}))}function Gl(){return{entries:Bt.size,enabled:ln}}var He={CO2_PER_1K_TOKENS:.2,CO2_ABSORPTION_PER_TREE_PER_YEAR:21e3,WATER_USAGE_PER_1K_TOKENS:.3,CO2_PER_KM_DRIVING:120,CO2_PER_PHONE_CHARGE:8.22,WATER_PER_COFFEE_CUP:140,CO2_PER_LED_HOUR:20};var ap={$schema:"http://json-schema.org/draft-07/schema#",description:"Character-to-token ratio estimators for different AI models. Used to estimate token counts from text length.",estimators:{"gpt-4":.25,"gpt-4.1":.25,"gpt-4.1-mini":.25,"gpt-4o":.25,"gpt-4o-mini":.25,"gpt-4-turbo":.25,"gpt-3.5-turbo":.25,"gpt-5":.25,"gpt-5-codex":.25,"gpt-5-mini":.25,"gpt-5.1":.25,"gpt-5.1-codex":.25,"gpt-5.1-codex-max":.25,"gpt-5.1-codex-mini":.25,"gpt-5.2":.25,"gpt-5.2-codex":.25,"gpt-5.2-pro":.25,"gpt-5.3-codex":.25,"gpt-5.4":.25,"gpt-5.4-mini":.25,"gpt-5.4-nano":.25,"gpt-4.1-nano":.25,"gemini-2.0-flash":.25,"gemini-2.0-flash-lite":.25,"gemini-2.5-flash":.25,"gemini-2.5-flash-lite":.25,"claude-sonnet-3.5":.24,"claude-sonnet-3.7":.24,"claude-sonnet-4":.24,"claude-sonnet-4.5":.24,"claude-sonnet-4.6":.24,"claude-haiku":.24,"claude-haiku-4.5":.24,"claude-opus-4.1":.24,"claude-opus-4.5":.24,"claude-opus-4.6":.24,"claude-opus-4.6-(fast-mode)-(preview)":.24,"claude-opus-4.6-fast":.24,"claude-opus-4.7":.24,"gemini-2.5-pro":.25,"gemini-3-flash":.25,"gemini-3-pro":.25,"gemini-3-pro-preview":.25,"gemini-3.1-pro":.25,"gemini-3.1-flash-lite":.25,"grok-code-fast-1":.25,"raptor-mini":.25,goldeneye:.25,"o1-preview":.25,"o1-mini":.25,"o3-mini":.25,"o4-mini":.25,"gpt-5.5":.25,"mistral-large-latest":.25,"mistral-large-2512":.25,"mistral-large-2411":.25,"magistral-medium-latest":.25,"mistral-medium-latest":.25,"mistral-medium-3-5":.25,"mistral-medium-2505":.25,"mistral-small-latest":.25,"mistral-small-2503":.25,"mistral-small-2603":.25,"codestral-latest":.25,"codestral-2501":.25,"open-mistral-nemo":.25,"ministral-3b-2410":.25,"ministral-8b-2410":.25,"magistral-small-latest":.25,"devstral-medium-2507":.25,"pixtral-large-2411":.25,"gemini-3.5-flash":.25,"claude-opus-4.8":.24,"qwen2.5":.25,"mai-code-1-flash[^mai-code-1-flash]":.25,"mai-code-1-flash":.25,"claude-fable-5":.24,"claude-sonnet-5":.24,"claude-opus-4.8-(fast-mode)-(preview)":.24,"kimi-k2.7-code":.25,"gpt-5.6-luna":.25,"gpt-5.6-sol":.25,"gpt-5.6-terra":.25,"gemini-3.6-flash":.25,"claude-opus-5":.24,"grok-4.5":.25,"gemini-3.7-flash":.25,"grok-4.6":.25,"mai-code-1.1-flash":.25,"kimi-k3":.25,"claude-fable-5.1":.24,"gpt-6-astra":.25,"gemini-3.8-flash":.25}};var Mr={$schema:"http://json-schema.org/draft-07/schema#",description:"Model pricing data - costs per million tokens. Each model has direct provider/API pricing at the top level (used as a reference); models billed through GitHub Copilot AI Credits also include a `copilotPricing` block reflecting GitHub's published per-token rates (1 AI credit = $0.01).",metadata:{lastUpdated:"2026-09-05",sources:[{name:"OpenAI API Pricing",url:"https://developers.openai.com/api/docs/pricing",retrievedDate:"2026-04-24"},{name:"Mistral AI API Pricing",url:"https://pricepertoken.com/pricing-page/provider/mistral-ai",retrievedDate:"2026-05-06",note:"Cross-referenced with https://openrouter.ai/mistralai and https://ai-pricing.info/mistral"},{name:"Anthropic Claude Pricing",url:"https://www.anthropic.com/pricing",note:"Standard rates; also see https://platform.claude.com/docs/en/about-claude/pricing",retrievedDate:"2026-03-30"},{name:"Google AI Gemini API Pricing",url:"https://ai.google.dev/gemini-api/docs/pricing",retrievedDate:"2026-03-30"},{name:"xAI Grok API Pricing",url:"https://x.ai/api",retrievedDate:"2026-03-30"},{name:"GitHub Copilot Supported Models",url:"https://docs.github.com/en/copilot/reference/ai-models/supported-models",retrievedDate:"2026-03-30",note:"Source for tier/multiplier data"},{name:"GitHub Copilot Premium Requests",url:"https://docs.github.com/en/copilot/managing-copilot/monitoring-usage-and-entitlements/about-premium-requests",retrievedDate:"2026-03-30",note:"Source for premium request multiplier values"},{name:"OpenRouter Model Pricing",url:"https://openrouter.ai",retrievedDate:"2026-03-30",note:"Cross-provider pricing aggregator used for verification"},{name:"DeepSeek API Pricing",url:"https://platform.deepseek.com/api-docs/pricing",retrievedDate:"2026-06-21",note:"deepseek-v4-flash: $0.14/M input (miss), $0.0028/M input (cache hit), $0.28/M output; free tier (deepseek-v4-flash-free via OpenRouter) is $0"},{name:"GitHub Copilot Models and Pricing",url:"https://docs.github.com/en/copilot/reference/copilot-billing/models-and-pricing",retrievedDate:"2026-04-27",note:"Source for the `copilotPricing` per-model block (GitHub AI Credit per-token rates)"}],disclaimer:"GitHub Copilot uses these models but pricing may differ from direct API usage. These are reference prices for cost estimation purposes only."},pricing:{"gpt-5":{inputCostPerMillion:1.25,outputCostPerMillion:10,category:"GPT-5 models",tier:"premium",displayNames:["GPT-5"]},"gpt-5-codex":{inputCostPerMillion:1.25,outputCostPerMillion:10,category:"GPT-5 models",tier:"premium",displayNames:["GPT-5 Codex (Preview)"]},"gpt-5-mini":{inputCostPerMillion:.25,outputCostPerMillion:2,category:"GPT-5 models",tier:"standard",displayNames:["GPT-5 Mini"],copilotPricing:{inputCostPerMillion:.25,cachedInputCostPerMillion:.025,outputCostPerMillion:2,releaseStatus:"GA",category:"Lightweight"},cachedInputCostPerMillion:.025},"gpt-5.1":{inputCostPerMillion:1.25,outputCostPerMillion:10,category:"GPT-5 models",tier:"premium",displayNames:["GPT-5.1"]},"gpt-5.1-codex":{inputCostPerMillion:1.25,outputCostPerMillion:10,category:"GPT-5 models",tier:"premium",displayNames:["GPT-5.1 Codex"]},"gpt-5.1-codex-max":{inputCostPerMillion:1.75,outputCostPerMillion:14,category:"GPT-5 models",tier:"premium",displayNames:["GPT-5.1 Codex Max"]},"gpt-5.1-codex-mini":{inputCostPerMillion:.25,outputCostPerMillion:2,category:"GPT-5 models",tier:"premium",displayNames:["GPT-5.1 Codex Mini (Preview)"]},"gpt-5.2":{inputCostPerMillion:1.75,outputCostPerMillion:14,category:"GPT-5 models",tier:"standard",displayNames:["GPT-5.2"],copilotPricing:{inputCostPerMillion:1.75,cachedInputCostPerMillion:.175,outputCostPerMillion:14,releaseStatus:"Closing down 2026-06-01",category:"Versatile"}},"gpt-5.2-codex":{inputCostPerMillion:1.75,outputCostPerMillion:14,category:"GPT-5 models",tier:"standard",displayNames:["GPT-5.2 Codex"],copilotPricing:{inputCostPerMillion:1.75,cachedInputCostPerMillion:.175,outputCostPerMillion:14,releaseStatus:"Closing down 2026-06-01",category:"Powerful"}},"gpt-5.2-pro":{inputCostPerMillion:21,outputCostPerMillion:168,category:"GPT-5 models",tier:"premium",displayNames:["GPT-5.2 Pro"]},"gpt-5.3-codex":{inputCostPerMillion:1.75,outputCostPerMillion:14,category:"GPT-5 models",tier:"standard",displayNames:["GPT-5.3 Codex"],copilotPricing:{inputCostPerMillion:1.75,cachedInputCostPerMillion:.175,outputCostPerMillion:14,releaseStatus:"GA",category:"Powerful"},cachedInputCostPerMillion:.175},"gpt-5.4":{inputCostPerMillion:2.5,cachedInputCostPerMillion:.25,outputCostPerMillion:15,category:"GPT-5 models",tier:"standard",displayNames:["GPT-5.4"],copilotPricing:{inputCostPerMillion:2.5,cachedInputCostPerMillion:.25,outputCostPerMillion:15,releaseStatus:"GA",category:"Versatile"}},"gpt-5.4-mini":{inputCostPerMillion:.75,cachedInputCostPerMillion:.075,outputCostPerMillion:4.5,category:"GPT-5 models",tier:"standard",displayNames:["GPT-5.4 mini"],copilotPricing:{inputCostPerMillion:.75,cachedInputCostPerMillion:.075,outputCostPerMillion:4.5,releaseStatus:"GA",category:"Lightweight"}},"gpt-5.4-nano":{inputCostPerMillion:.2,cachedInputCostPerMillion:.02,outputCostPerMillion:1.25,category:"GPT-5 models",tier:"standard",displayNames:["GPT-5.4 nano"],copilotPricing:{inputCostPerMillion:.2,cachedInputCostPerMillion:.02,outputCostPerMillion:1.25,releaseStatus:"GA",category:"Lightweight"}},"gpt-4":{inputCostPerMillion:3,outputCostPerMillion:12,category:"GPT-4 models",tier:"unknown",displayNames:["GPT-4"]},"gpt-4.1":{inputCostPerMillion:2,cachedInputCostPerMillion:.5,outputCostPerMillion:8,category:"GPT-4 models",tier:"standard",displayNames:["GPT-4.1"],copilotPricing:{inputCostPerMillion:2,cachedInputCostPerMillion:.5,outputCostPerMillion:8,releaseStatus:"Closing down 2026-06-01",category:"Versatile"}},"gpt-4.1-mini":{inputCostPerMillion:.4,cachedInputCostPerMillion:.1,outputCostPerMillion:1.6,category:"GPT-4 models",tier:"standard",displayNames:["GPT-4.1 Mini"]},"gpt-4.1-nano":{inputCostPerMillion:.1,cachedInputCostPerMillion:.025,outputCostPerMillion:.4,category:"GPT-4 models",tier:"standard",displayNames:["GPT-4.1 Nano"]},"gpt-4o":{inputCostPerMillion:2.5,outputCostPerMillion:10,cachedInputCostPerMillion:1.25,category:"GPT-4 models",tier:"standard",displayNames:["GPT-4o"]},"gpt-4o-mini":{inputCostPerMillion:.15,outputCostPerMillion:.6,cachedInputCostPerMillion:.075,category:"GPT-4 models",tier:"standard",displayNames:["GPT-4o-mini","GPT-4o Mini"]},"gpt-4o-mini-2024-07-18":{inputCostPerMillion:.15,outputCostPerMillion:.6,cachedInputCostPerMillion:.075,category:"GPT-4 models",tier:"standard",displayNames:["GPT-4o-mini (2024-07-18)"]},"gpt-4-turbo":{inputCostPerMillion:10,outputCostPerMillion:30,category:"GPT-4 models",tier:"standard",displayNames:["GPT-4 Turbo"]},"claude-sonnet-3.5":{inputCostPerMillion:3,outputCostPerMillion:15,cachedInputCostPerMillion:.3,cacheCreationCostPerMillion:3.75,cacheCreation1hCostPerMillion:6,category:"Claude models (Anthropic)",tier:"unknown",displayNames:["Claude Sonnet 3.5"]},"claude-sonnet-3.7":{inputCostPerMillion:3,outputCostPerMillion:15,cachedInputCostPerMillion:.3,cacheCreationCostPerMillion:3.75,cacheCreation1hCostPerMillion:6,category:"Claude models (Anthropic)",tier:"unknown",displayNames:["Claude Sonnet 3.7"]},"claude-sonnet-4":{inputCostPerMillion:3,outputCostPerMillion:15,cachedInputCostPerMillion:.3,cacheCreationCostPerMillion:3.75,cacheCreation1hCostPerMillion:6,category:"Claude models (Anthropic)",tier:"premium",displayNames:["Claude Sonnet 4"],copilotPricing:{inputCostPerMillion:3,cachedInputCostPerMillion:.3,cacheCreationCostPerMillion:3.75,outputCostPerMillion:15,releaseStatus:"GA",category:"Versatile"}},"claude-sonnet-4.5":{inputCostPerMillion:3,outputCostPerMillion:15,cachedInputCostPerMillion:.3,cacheCreationCostPerMillion:3.75,cacheCreation1hCostPerMillion:6,category:"Claude models (Anthropic)",tier:"standard",displayNames:["Claude Sonnet 4.5"],copilotPricing:{inputCostPerMillion:3,cachedInputCostPerMillion:.3,cacheCreationCostPerMillion:3.75,outputCostPerMillion:15,releaseStatus:"GA",category:"Versatile"}},"claude-sonnet-4.6":{inputCostPerMillion:3,outputCostPerMillion:15,cachedInputCostPerMillion:.3,cacheCreationCostPerMillion:3.75,cacheCreation1hCostPerMillion:6,category:"Claude models (Anthropic)",tier:"standard",displayNames:["Claude Sonnet 4.6"],copilotPricing:{inputCostPerMillion:3,cachedInputCostPerMillion:.3,cacheCreationCostPerMillion:3.75,outputCostPerMillion:15,releaseStatus:"GA",category:"Versatile"}},"claude-sonnet-4-6":{inputCostPerMillion:3,outputCostPerMillion:15,cachedInputCostPerMillion:.3,cacheCreationCostPerMillion:3.75,cacheCreation1hCostPerMillion:6,category:"Claude models (Anthropic)",tier:"standard",displayNames:["Claude Sonnet 4.6"],copilotPricing:{inputCostPerMillion:3,cachedInputCostPerMillion:.3,cacheCreationCostPerMillion:3.75,outputCostPerMillion:15,releaseStatus:"GA",category:"Versatile"}},"claude-haiku":{inputCostPerMillion:.25,outputCostPerMillion:1.25,cachedInputCostPerMillion:.025,cacheCreationCostPerMillion:.3125,cacheCreation1hCostPerMillion:.5,category:"Claude models (Anthropic)",tier:"standard",displayNames:["Claude Haiku"]},"claude-haiku-4.5":{inputCostPerMillion:1,outputCostPerMillion:5,cachedInputCostPerMillion:.1,cacheCreationCostPerMillion:1.25,cacheCreation1hCostPerMillion:2,category:"Claude models (Anthropic)",tier:"standard",displayNames:["Claude Haiku 4.5"],copilotPricing:{inputCostPerMillion:1,cachedInputCostPerMillion:.1,cacheCreationCostPerMillion:1.25,outputCostPerMillion:5,releaseStatus:"GA",category:"Versatile"}},"claude-haiku-4-5-20251001":{inputCostPerMillion:1,outputCostPerMillion:5,cachedInputCostPerMillion:.1,cacheCreationCostPerMillion:1.25,cacheCreation1hCostPerMillion:2,category:"Claude models (Anthropic)",tier:"standard",displayNames:["Claude Haiku 4.5 (2025-10-01)"],copilotPricing:{inputCostPerMillion:1,cachedInputCostPerMillion:.1,cacheCreationCostPerMillion:1.25,outputCostPerMillion:5,releaseStatus:"GA",category:"Versatile"}},"claude-opus-4.1":{inputCostPerMillion:15,outputCostPerMillion:75,cachedInputCostPerMillion:1.5,cacheCreationCostPerMillion:18.75,cacheCreation1hCostPerMillion:30,category:"Claude models (Anthropic)",tier:"premium",displayNames:["Claude Opus 4.1"]},"claude-opus-4.5":{inputCostPerMillion:5,outputCostPerMillion:25,cachedInputCostPerMillion:.5,cacheCreationCostPerMillion:6.25,cacheCreation1hCostPerMillion:10,category:"Claude models (Anthropic)",tier:"standard",displayNames:["Claude Opus 4.5"],copilotPricing:{inputCostPerMillion:5,cachedInputCostPerMillion:.5,cacheCreationCostPerMillion:6.25,outputCostPerMillion:25,releaseStatus:"GA",category:"Powerful"}},"claude-opus-4.6":{inputCostPerMillion:5,outputCostPerMillion:25,cachedInputCostPerMillion:.5,cacheCreationCostPerMillion:6.25,cacheCreation1hCostPerMillion:10,category:"Claude models (Anthropic)",tier:"standard",displayNames:["Claude Opus 4.6"],copilotPricing:{inputCostPerMillion:5,cachedInputCostPerMillion:.5,cacheCreationCostPerMillion:6.25,outputCostPerMillion:25,releaseStatus:"GA",category:"Powerful"}},"claude-opus-4.7":{inputCostPerMillion:5,outputCostPerMillion:25,cachedInputCostPerMillion:.5,cacheCreationCostPerMillion:6.25,cacheCreation1hCostPerMillion:10,category:"Claude models (Anthropic)",tier:"standard",displayNames:["Claude Opus 4.7"],copilotPricing:{inputCostPerMillion:5,cachedInputCostPerMillion:.5,cacheCreationCostPerMillion:6.25,outputCostPerMillion:25,releaseStatus:"GA",category:"Powerful"}},"claude-opus-4.6-(fast-mode)-(preview)":{inputCostPerMillion:5,outputCostPerMillion:25,cachedInputCostPerMillion:.5,cacheCreationCostPerMillion:6.25,cacheCreation1hCostPerMillion:10,category:"Claude models (Anthropic)",tier:"standard",displayNames:["Claude Opus 4.6 (Fast Mode Preview)"],copilotPricing:{inputCostPerMillion:30,cachedInputCostPerMillion:3,cacheCreationCostPerMillion:37.5,outputCostPerMillion:150,releaseStatus:"Public preview",category:"Powerful"}},"claude-opus-4.6-fast":{inputCostPerMillion:5,outputCostPerMillion:25,cachedInputCostPerMillion:.5,cacheCreationCostPerMillion:6.25,cacheCreation1hCostPerMillion:10,category:"Claude models (Anthropic)",tier:"premium",displayNames:["Claude Opus 4.6 (Fast)"],copilotPricing:{inputCostPerMillion:30,cachedInputCostPerMillion:3,cacheCreationCostPerMillion:37.5,outputCostPerMillion:150,releaseStatus:"Public preview",category:"Powerful"}},"o3-mini":{inputCostPerMillion:1.1,outputCostPerMillion:4.4,category:"OpenAI reasoning models",tier:"premium",displayNames:["o3-mini"]},"o4-mini":{inputCostPerMillion:1.1,outputCostPerMillion:4.4,category:"OpenAI reasoning models",tier:"premium",displayNames:["o4-mini"]},"o1-preview":{inputCostPerMillion:15,outputCostPerMillion:60,category:"OpenAI reasoning models",tier:"premium",displayNames:["o1-preview"]},"o1-mini":{inputCostPerMillion:3,outputCostPerMillion:12,category:"OpenAI reasoning models",tier:"premium",displayNames:["o1-mini"]},"gpt-3.5-turbo":{inputCostPerMillion:.5,outputCostPerMillion:1.5,category:"Legacy models",tier:"standard",displayNames:["GPT-3.5-Turbo","GPT-3.5 Turbo"]},"gemini-2.5-pro":{inputCostPerMillion:1.25,outputCostPerMillion:10,category:"Google Gemini models",tier:"standard",displayNames:["Gemini 2.5 Pro"],copilotPricing:{inputCostPerMillion:1.25,cachedInputCostPerMillion:.125,outputCostPerMillion:10,releaseStatus:"GA",category:"Powerful"},cachedInputCostPerMillion:.125},"gemini-2.5-flash":{inputCostPerMillion:.3,outputCostPerMillion:2.5,category:"Google Gemini models",tier:"unknown",displayNames:["Gemini 2.5 Flash"]},"gemini-2.5-flash-lite":{inputCostPerMillion:.1,outputCostPerMillion:.4,category:"Google Gemini models",tier:"unknown",displayNames:["Gemini 2.5 Flash Lite"]},"gemini-2.0-flash":{inputCostPerMillion:.1,outputCostPerMillion:.4,category:"Google Gemini models",tier:"standard",displayNames:["Gemini 2.0 Flash"]},"gemini-2.0-flash-lite":{inputCostPerMillion:.075,outputCostPerMillion:.3,category:"Google Gemini models",tier:"standard",displayNames:["Gemini 2.0 Flash Lite"]},"gemini-3-flash":{inputCostPerMillion:.5,outputCostPerMillion:3,category:"Google Gemini models",tier:"standard",displayNames:["Gemini 3 Flash"],copilotPricing:{inputCostPerMillion:.5,cachedInputCostPerMillion:.05,outputCostPerMillion:3,releaseStatus:"Public preview",category:"Lightweight"},cachedInputCostPerMillion:.05},"gemini-3-pro":{inputCostPerMillion:2,outputCostPerMillion:12,category:"Google Gemini models",tier:"premium",displayNames:["Gemini 3 Pro"]},"gemini-3-pro-preview":{inputCostPerMillion:2,outputCostPerMillion:12,category:"Google Gemini models",tier:"premium",displayNames:["Gemini 3 Pro (Preview)"]},"gemini-3.1-pro":{inputCostPerMillion:2,outputCostPerMillion:12,category:"Google Gemini models",tier:"standard",displayNames:["Gemini 3.1 Pro","Gemini 3.1 Pro (Preview)"],copilotPricing:{inputCostPerMillion:2,cachedInputCostPerMillion:.2,outputCostPerMillion:12,releaseStatus:"Public preview",category:"Powerful"},cachedInputCostPerMillion:.2},"gemini-3.1-flash-lite":{inputCostPerMillion:.25,outputCostPerMillion:1.5,category:"Google Gemini models",tier:"unknown",displayNames:["Gemini 3.1 Flash Lite"]},"grok-code-fast-1":{inputCostPerMillion:.2,outputCostPerMillion:1.5,category:"xAI Grok models",tier:"premium",displayNames:["Grok Code Fast 1"],copilotPricing:{inputCostPerMillion:.2,cachedInputCostPerMillion:.02,outputCostPerMillion:1.5,releaseStatus:"GA",category:"Lightweight"}},"raptor-mini":{inputCostPerMillion:.25,outputCostPerMillion:2,category:"GitHub Copilot fine-tuned models",tier:"standard",displayNames:["Raptor Mini"],copilotPricing:{inputCostPerMillion:.25,cachedInputCostPerMillion:.025,outputCostPerMillion:2,releaseStatus:"GA",category:"Versatile"},cachedInputCostPerMillion:.025},goldeneye:{inputCostPerMillion:0,outputCostPerMillion:0,category:"GitHub Copilot fine-tuned models",tier:"standard",copilotPricing:{inputCostPerMillion:1.25,cachedInputCostPerMillion:.125,outputCostPerMillion:10,releaseStatus:"Public preview",category:"Powerful"}},"gpt-5.5":{inputCostPerMillion:5,outputCostPerMillion:30,category:"GPT-5 models",tier:"standard",displayNames:["GPT-5.5"],cachedInputCostPerMillion:.5},"mistral-large-latest":{inputCostPerMillion:.5,outputCostPerMillion:1.5,category:"Mistral models",tier:"unknown",displayNames:["Mistral Large 3"]},"mistral-large-2512":{inputCostPerMillion:.5,outputCostPerMillion:1.5,category:"Mistral models",tier:"unknown",displayNames:["Mistral Large 3 (2512)"]},"mistral-large-2411":{inputCostPerMillion:2,outputCostPerMillion:6,category:"Mistral models",tier:"unknown",displayNames:["Mistral Large 2.1"]},"magistral-medium-latest":{inputCostPerMillion:2,outputCostPerMillion:5,category:"Mistral models",tier:"unknown",displayNames:["Magistral Medium"]},"mistral-medium-latest":{inputCostPerMillion:1.5,outputCostPerMillion:7.5,category:"Mistral models",tier:"unknown",displayNames:["Mistral Medium 3.5"]},"mistral-medium-3-5":{inputCostPerMillion:1.5,outputCostPerMillion:7.5,category:"Mistral models",tier:"unknown",displayNames:["Mistral Medium 3.5"]},"mistral-medium-3.5":{inputCostPerMillion:1.5,outputCostPerMillion:7.5,category:"Mistral models",tier:"unknown",displayNames:["Mistral Medium 3.5"]},"mistral-medium-2505":{inputCostPerMillion:.4,outputCostPerMillion:2,category:"Mistral models",tier:"unknown",displayNames:["Mistral Medium 3.1"]},"mistral-small-latest":{inputCostPerMillion:.1,outputCostPerMillion:.3,category:"Mistral models",tier:"unknown",displayNames:["Mistral Small 3.1"]},"mistral-small-2503":{inputCostPerMillion:.075,outputCostPerMillion:.2,category:"Mistral models",tier:"unknown",displayNames:["Mistral Small 3.2"]},"mistral-small-2603":{inputCostPerMillion:.15,outputCostPerMillion:.6,category:"Mistral models",tier:"unknown",displayNames:["Mistral Small 4"]},"codestral-latest":{inputCostPerMillion:.3,outputCostPerMillion:.9,category:"Mistral models",tier:"unknown",displayNames:["Codestral"]},"codestral-2501":{inputCostPerMillion:.3,outputCostPerMillion:.9,category:"Mistral models",tier:"unknown",displayNames:["Codestral (2501)"]},"open-mistral-nemo":{inputCostPerMillion:.02,outputCostPerMillion:.03,category:"Mistral models",tier:"unknown",displayNames:["Mistral Nemo"]},"ministral-3b-2410":{inputCostPerMillion:.04,outputCostPerMillion:.04,category:"Mistral models",tier:"unknown",displayNames:["Ministral 3B"]},"ministral-8b-2410":{inputCostPerMillion:.1,outputCostPerMillion:.1,category:"Mistral models",tier:"unknown",displayNames:["Ministral 8B"]},"magistral-small-latest":{inputCostPerMillion:.5,outputCostPerMillion:1.5,category:"Mistral models",tier:"unknown",displayNames:["Magistral Small"]},"devstral-medium-2507":{inputCostPerMillion:.4,outputCostPerMillion:2,category:"Mistral models",tier:"unknown",displayNames:["Devstral Medium"]},"devstral-latest":{inputCostPerMillion:.4,outputCostPerMillion:2,category:"Mistral models",tier:"unknown",displayNames:["Devstral 2"]},"pixtral-large-2411":{inputCostPerMillion:2,outputCostPerMillion:6,category:"Mistral models",tier:"unknown",displayNames:["Pixtral Large"]},"gemini-3.5-flash":{inputCostPerMillion:1.5,outputCostPerMillion:9,category:"Google Gemini models",tier:"standard",displayNames:["Gemini 3.5 Flash"],cachedInputCostPerMillion:.15},"claude-opus-4.8":{inputCostPerMillion:5,outputCostPerMillion:25,category:"Claude models (Anthropic)",tier:"standard",displayNames:["Claude Opus 4.8"],cachedInputCostPerMillion:.5,cacheCreationCostPerMillion:6.25,cacheCreation1hCostPerMillion:10},"qwen2.5":{inputCostPerMillion:0,outputCostPerMillion:0,category:" models",tier:"standard",displayNames:["Qwen2.5"]},"mai-code-1-flash[^mai-code-1-flash]":{inputCostPerMillion:0,outputCostPerMillion:0,category:" models",tier:"standard",displayNames:["MAI-Code-1-Flash[^mai-code-1-flash]"]},"mai-code-1-flash":{inputCostPerMillion:.75,outputCostPerMillion:4.5,category:" models",tier:"standard",displayNames:["MAI-Code-1-Flash"],cachedInputCostPerMillion:.075},"claude-fable-5":{inputCostPerMillion:10,outputCostPerMillion:50,category:"Claude models (Anthropic)",tier:"standard",displayNames:["Claude Fable 5"],cachedInputCostPerMillion:1,cacheCreationCostPerMillion:12.5,cacheCreation1hCostPerMillion:20},"deepseek-v4-flash":{inputCostPerMillion:.14,outputCostPerMillion:.28,cachedInputCostPerMillion:.0028,category:"DeepSeek models",tier:"standard",displayNames:["DeepSeek V4 Flash"]},"deepseek-v4-flash-free":{inputCostPerMillion:0,outputCostPerMillion:0,category:"DeepSeek models",tier:"standard",displayNames:["DeepSeek V4 Flash (free)"]},"claude-sonnet-5":{inputCostPerMillion:2,outputCostPerMillion:10,category:"Claude models (Anthropic)",tier:"standard",displayNames:["Claude Sonnet 5"],cachedInputCostPerMillion:.2,cacheCreationCostPerMillion:2.5,cacheCreation1hCostPerMillion:4},"claude-opus-4.8-(fast-mode)-(preview)":{inputCostPerMillion:10,outputCostPerMillion:50,category:"Claude models (Anthropic)",tier:"standard",displayNames:["Claude Opus 4.8 (fast mode) (preview)"],cachedInputCostPerMillion:1,cacheCreationCostPerMillion:12.5,cacheCreation1hCostPerMillion:20},"kimi-k2.7-code":{inputCostPerMillion:.95,outputCostPerMillion:4,category:"Moonshot AI models",tier:"standard",displayNames:["Kimi-K2.7-Code"],cachedInputCostPerMillion:.19},"gpt-5.6-luna":{inputCostPerMillion:.2,outputCostPerMillion:1.2,category:"GPT-5 models",tier:"standard",displayNames:["GPT-5.6 Luna"],cachedInputCostPerMillion:.02,copilotPricing:{inputCostPerMillion:1,cachedInputCostPerMillion:.1,outputCostPerMillion:6,releaseStatus:"GA",category:"Lightweight",longContext:{inputCostPerMillion:2,cachedInputCostPerMillion:.2,outputCostPerMillion:9,threshold:"> 200K"}},cacheCreationCostPerMillion:.25},"gpt-5.6-sol":{inputCostPerMillion:4,outputCostPerMillion:20,category:"GPT-5 models",tier:"standard",displayNames:["GPT-5.6 Sol"],cachedInputCostPerMillion:.4,copilotPricing:{inputCostPerMillion:5,cachedInputCostPerMillion:.5,outputCostPerMillion:30,releaseStatus:"GA",category:"Powerful",longContext:{inputCostPerMillion:10,cachedInputCostPerMillion:1,outputCostPerMillion:45,threshold:"> 272K"}},cacheCreationCostPerMillion:5},"gpt-5.6-terra":{inputCostPerMillion:2,outputCostPerMillion:12,category:"GPT-5 models",tier:"standard",displayNames:["GPT-5.6 Terra"],cachedInputCostPerMillion:.2,copilotPricing:{inputCostPerMillion:2.5,cachedInputCostPerMillion:.25,outputCostPerMillion:15,releaseStatus:"GA",category:"Versatile",longContext:{inputCostPerMillion:5,cachedInputCostPerMillion:.5,outputCostPerMillion:22.5,threshold:"> 272K"}},cacheCreationCostPerMillion:2.5},"gemini-3.6-flash":{inputCostPerMillion:.75,outputCostPerMillion:3.75,category:"Google Gemini models",tier:"standard",displayNames:["Gemini 3.6 Flash"],cachedInputCostPerMillion:.075},"claude-opus-5":{inputCostPerMillion:5,outputCostPerMillion:25,category:"Claude models (Anthropic)",tier:"standard",displayNames:["Claude Opus 5"],cachedInputCostPerMillion:.5,cacheCreationCostPerMillion:6.25},"grok-4.5":{inputCostPerMillion:2,outputCostPerMillion:6,category:"xAI Grok models",tier:"standard",displayNames:["Grok 4.5"],cachedInputCostPerMillion:.5},"gemini-3.7-flash":{inputCostPerMillion:.75,outputCostPerMillion:3.75,category:"Google Gemini models",tier:"standard",displayNames:["Gemini 3.7 Flash"],cachedInputCostPerMillion:.075},"grok-4.6":{inputCostPerMillion:2,outputCostPerMillion:6,category:"xAI Grok models",tier:"standard",displayNames:["Grok 4.6"],cachedInputCostPerMillion:.5},"mai-code-1.1-flash":{inputCostPerMillion:.2,outputCostPerMillion:1.2,category:" models",tier:"standard",displayNames:["MAI-Code-1.1-Flash"],cachedInputCostPerMillion:.02},"kimi-k3":{inputCostPerMillion:3,outputCostPerMillion:15,category:" models",tier:"standard",displayNames:["Kimi K3"],cachedInputCostPerMillion:.3},"claude-fable-5.1":{inputCostPerMillion:10,outputCostPerMillion:50,category:"Claude models (Anthropic)",tier:"standard",displayNames:["Claude Fable 5.1"],cachedInputCostPerMillion:.25,cacheCreationCostPerMillion:12.5},"gpt-6-astra":{inputCostPerMillion:10,outputCostPerMillion:50,category:"OpenAI models",tier:"standard",displayNames:["GPT-6 Astra"],cachedInputCostPerMillion:1,cacheCreationCostPerMillion:12.5},"gemini-3.8-flash":{inputCostPerMillion:.75,outputCostPerMillion:3.75,category:"Google Gemini models",tier:"standard",displayNames:["Gemini 3.8 Flash"],cachedInputCostPerMillion:.075}}};var lp={unknown:"Unknown",windsurf_cascade:"Windsurf Cascade",windsurf_file_edit:"Windsurf: File Edit",windsurf_file_create:"Windsurf: File Create",windsurf_file_read:"Windsurf: File Read",windsurf_terminal:"Windsurf: Terminal",windsurf_search:"Windsurf: Search",windsurf_browser:"Windsurf: Browser",run_in_terminal:"Run In Terminal",run_shell_command:"Run Shell Command",send_to_terminal:"Send To Terminal",run_build:"Run Build",run_command_in_terminal:"Run Command In Terminal","mcp.io.github.git.assign_copilot_to_issue":"GitHub MCP (Local): Assign Copilot to Issue","mcp.io.github.git.create_or_update_file":"GitHub MCP (Local): Create/Update File",mcp_io_github_git_create_or_update_file:"GitHub MCP (Local): Create/Update File",mcp_io_github_git_assign_copilot_to_issue:"GitHub MCP (Local): Assign Copilot to Issue",mcp_io_github_git_pull_request_read:"GitHub MCP (Local): Pull Request Read",mcp_io_github_git_issue_read:"GitHub MCP (Local): Issue Read",mcp_io_github_git_issue_write:"GitHub MCP (Local): Issue Write",mcp_io_github_git_list_issues:"GitHub MCP (Local): List Issues",mcp_io_github_git_create_pull_request:"GitHub MCP (Local): Create Pull Request",mcp_io_github_git_get_file_contents:"GitHub MCP (Local): Get File Contents",mcp_io_github_git_search_code:"GitHub MCP (Local): Search Code",mcp_io_github_git_search_pull_requests:"GitHub MCP (Local): Search Pull Requests",mcp_io_github_git_get_release_by_tag:"GitHub MCP (Local): Get Release By Tag",mcp_io_github_git_search_issues:"GitHub MCP (Local): Search Issues",mcp_io_github_git_add_issue_comment:"GitHub MCP (Local): Add Issue Comment",mcp_io_github_git_list_pull_requests:"GitHub MCP (Local): List Pull Requests",mcp_io_github_git_get_commit:"GitHub MCP (Local): Get Commit",mcp_io_github_git_list_commits:"GitHub MCP (Local): List Commits",mcp_io_github_git_list_code_scanning_alerts:"GitHub MCP (Local): List Code Scanning Alerts",mcp_io_github_git_get_repository_tree:"GitHub MCP (Local): Get Repository Tree",mcp_io_github_git_get_job_logs:"GitHub MCP (Local): Get Job Logs",mcp_io_github_git_list_tags:"GitHub MCP (Local): List Tags",mcp_io_github_git_search_repositories:"GitHub MCP (Local): Search Repositories",mcp_io_github_git_create_repository:"GitHub MCP (Local): Create Repository",mcp_io_github_git_search_users:"GitHub MCP (Local): Search Users",mcp_io_github_git_get_latest_release:"GitHub MCP (Local): Get Latest Release",mcp_io_github_git_get_tag:"GitHub MCP (Local): Get Tag",mcp_github_github_assign_copilot_to_issue:"GitHub MCP (Remote): Assign Copilot to Issue",mcp_github_github_issue_read:"GitHub MCP (Remote): Issue Read",mcp_github_github_issue_write:"GitHub MCP (Remote): Issue Write",mcp_github_github_list_issues:"GitHub MCP (Remote): List Issues",mcp_github_get_file_contents:"GitHub MCP (Remote): Get File Contents",mcp_github_get_latest_release:"GitHub MCP (Remote): Get Latest Release",mcp_github_get_release_by_tag:"GitHub MCP (Remote): Get Release By Tag",mcp_github_list_releases:"GitHub MCP (Remote): List Releases",mcp_github_list_tags:"GitHub MCP (Remote): List Tags",mcp_github_search_code:"GitHub MCP (Remote): Search Code",mcp_github_search_issues:"GitHub MCP (Remote): Search Issues",mcp_github_issue_write:"GitHub MCP (Remote): Issue Write",mcp_github_list_issues:"GitHub MCP (Remote): List Issues",mcp_github_create_pull_request:"GitHub MCP (Remote): Create Pull Request",mcp_github_pull_request_read:"GitHub MCP (Remote): Pull Request Read",mcp_github_list_branches:"MCP GitHub List Branches",mcp_github_update_pull_request:"MCP GitHub Update Pull Request","github-mcp-server-get_file_contents":"GitHub MCP: Get File Contents","github-mcp-server-get_job_logs":"GitHub MCP: Get Job Logs","github-mcp-server-list_commits":"GitHub MCP: List Commits","github-mcp-server-search_code":"GitHub MCP: Search Code","github-mcp-server-actions_list":"GitHub MCP: Actions List","github-mcp-server-list_issues":"GitHub MCP: List Issues","github-mcp-server-search_repositories":"GitHub MCP: Search Repositories","github-mcp-server-list_branches":"GitHub MCP: List Branches","github-mcp-server-issue_read":"GitHub MCP: Issue Read","github-mcp-server-issue_write":"GitHub MCP: Issue Write","github-mcp-server-pull_request_read":"GitHub MCP: Pull Request Read","github-mcp-server-search_issues":"GitHub MCP: Search Issues","github-mcp-server-search_users":"GitHub MCP: Search Users","github-mcp-server-sub_issue_write":"GitHub MCP: Sub Issue Write","github-mcp-server-list_pull_requests":"GitHub MCP Server List Pull Requests","github-mcp-server-search_pull_requests":"GitHub MCP (Remote): Search Pull Requests","github-actions_get":"GitHub Actions: Get","github-actions_list":"GitHub Actions: List","github-create_pull_request":"GitHub: Create Pull Request","github-get_commit":"GitHub: Get Commit","github-get_file_contents":"GitHub: Get File Contents","github-get_job_logs":"GitHub: Get Job Logs","github-get_latest_release":"GitHub: Get Latest Release","github-get_me":"GitHub: Get Me","github-get_release_by_tag":"GitHub: Get Release By Tag","github-get_repository_tree":"GitHub: Get Repository Tree","github-get_teams":"GitHub: Get Teams","github-github_support_docs_search":"GitHub: GitHub Support Docs Search","github-issue_read":"GitHub: Issue Read","github-list_code_scanning_alerts":"GitHub: List Code Scanning Alerts","github-list_dependabot_alerts":"GitHub: List Dependabot Alerts","github-list_tags":"GitHub: List Tags","github-pull_request_read":"GitHub: Pull Request Read","github-pull_request_review_write":"GitHub: Pull Request Review Write","github-search_code":"GitHub: Search Code","github-search_pull_requests":"GitHub: Search Pull Requests","github-search_repositories":"GitHub: Search Repositories","github-update_pull_request":"GitHub: Update Pull Request","mcp_github-code-s_get_code_scanning_alert":"GitHub MCP (Code Scanning): Get Alert","mcp_github-code-s_list_code_scanning_alerts":"GitHub MCP (Code Scanning): List Alerts",mcp_com_microsoft_get_bestpractices:"GitHub MCP: Get Best Practices",mcp_microsoft_doc_microsoft_code_sample_search:"Microsoft Docs MCP: Code Sample Search",mcp_microsoft_doc_microsoft_docs_search:"Microsoft Docs MCP: Docs Search",mcp_microsoftdocs_microsoft_code_sample_search:"Microsoft Docs MCP: Code Sample Search",mcp_microsoftdocs_microsoft_docs_fetch:"Microsoft Docs MCP: Docs Fetch",mcp_microsoftdocs_microsoft_docs_search:"Microsoft Docs MCP: Docs Search",Microsoft_Learn_microsoft_docs_search:"Microsoft Learn: Docs Search","microsoft-learn-microsoft_docs_search":"Microsoft Learn: Docs Search",mcp_gitkraken_git_add_or_commit:"GitKraken MCP: Git Add or Commit",mcp_gitkraken_git_status:"GitKraken MCP: Git Status",mcp_gitkraken_git_branch:"GitKraken MCP: Git Branch",mcp_gitkraken_git_checkout:"GitKraken MCP: Git Checkout",mcp_gitkraken_git_log_or_diff:"GitKraken MCP: Git Log or Diff",mcp_gitkraken_gitkraken_workspace_list:"GitKraken MCP: List Workspaces",mcp_gitkraken_git_push:"GitKraken MCP: Git Push",mcp_gitkraken_gitlens_commit_composer:"GitKraken MCP: GitLens Commit Composer",mcp_git_git_log:"Git MCP: Git Log",mcp_git_git_show:"Git MCP: Git Show",mcp_git_git_diff_staged:"Git MCP: Git Diff Staged",mcp_pencil_batch_design:"Pencil MCP: Batch Design",mcp_pencil_get_editor_state:"Pencil MCP: Get Editor State",mcp_pencil_get_guidelines:"Pencil MCP: Get Guidelines",mcp_pencil_get_screenshot:"Pencil MCP: Get Screenshot",mcp_pencil_snapshot_layout:"Pencil MCP: Snapshot Layout",mcp_figma_get_design_context:"Figma MCP: Get Design Context",mcp_figma_get_screenshot:"Figma MCP: Get Screenshot",mcp_figma_get_variable_defs:"Figma MCP: Get Variable Defs",mcp_azure_aks:"Azure MCP: AKS",mcp_azure_mcp_azureterraformbestpractices:"Azure MCP: Azure Terraform Best Practices",mcp_azure_mcp_documentation:"Azure MCP: Documentation",mcp_azure_mcp_get_bestpractices:"Azure MCP: Get Best Practices",mcp_azure_mcp_group_list:"Azure MCP: Group List",mcp_azure_mcp_storage:"Azure MCP: Storage",mcp_azure_mcp_subscription_list:"Azure MCP: Subscription List",mcp_azure_mcp_pricing:"Azure MCP: Pricing",mcp_azure_mcp_get_azure_bestpractices:"Azure MCP: Get Azure Best Practices","azure-mcp-azureterraformbestpractices":"Azure MCP: Azure Terraform Best Practices","azure-mcp-documentation":"Azure MCP: Documentation","azure-mcp-extension_cli_generate":"Azure MCP: Extension CLI Generate","azure-mcp-get_azure_bestpractices":"Azure MCP: Get Azure Best Practices","azure-mcp-group_list":"Azure MCP: Group List","azure-mcp-subscription_list":"Azure MCP: Subscription List",mcp_bicep_format_bicep_file:"Bicep MCP: Format Bicep File",mcp_bicep_get_az_resource_type_schema:"Bicep MCP: Get Az Resource Type Schema",mcp_bicep_get_bicep_best_practices:"Bicep MCP: Get Bicep Best Practices",mcp_bicep_get_bicep_file_diagnostics:"Bicep MCP: Get Bicep File Diagnostics",mcp_bicep_list_az_resource_types_for_provider:"Bicep MCP: List Az Resource Types For Provider","azure_bicep-get_azure_verified_module":"Azure Bicep: Get Azure Verified Module","azure_development-recommend_custom_modes":"Azure Development: Recommend Custom Modes","azure_resources-query_azure_resource_graph":"Azure Resources: Query Azure Resource Graph",azureResources_getAzureActivityLog:"Azure Resources: Get Azure Activity Log","azure_auth-get_auth_context":"Azure Auth: Get Auth Context","azure_auth-set_auth_context":"Azure Auth: Set Auth Context","ms-azuretools.azure-agent":"Azure Agent",manage_todo_list:"Manage TODO List",copilot_readFile:"Read File",copilot_viewImage:"Copilot View Image",opilot_findFiles:"Find Files",copilot_writeFile:"Write File",copilot_applyPatch:"Apply Patch",copilot_findTextInFiles:"Find Text In Files",copilot_findFiles:"Find Files",copilot_replaceString:"Replace String",copilot_createFile:"Create File",copilot_listDirectory:"List Directory",copilot_fetchWebPage:"Fetch Web Page",copilot_getErrors:"Get Errors",copilot_multiReplaceString:"Multi Replace String",copilot_searchCodebase:"Search Codebase",get_terminal_output:"Get Terminal Output",run_task:"Run Task: Investigate",await_terminal:"Await Terminal command","github.copilot.editsAgent":"GitHub Copilot Edits Agent",todoList:"TODO List",terminal:"Terminal",terminal_last_command:"Terminal Last Command",github_pull_request:"GitHub Pull Request",github_repo:"GitHub Repository",editFiles:"Edit Files",listFiles:"List Files",list_issues:"List Issues",search_subagent:"Search Subagent",execution_subagent:"Execution Subagent",apply_patch:"Apply Patch",ask_questions:"Ask Questions",AskUserQuestion:"Ask User Question",ask_user_question:"Ask User Question",copilot_askQuestions:"Ask Questions",copilot_createAndRunTask:"Create And Run Task",copilot_createDirectory:"Create Directory",copilot_createNewJupyterNotebook:"Create New Jupyter Notebook",copilot_createNewWorkspace:"Create New Workspace",copilot_editFiles:"Edit Files",copilot_editNotebook:"Edit Notebook",copilot_findTestFiles:"Find Test Files",copilot_getChangedFiles:"Get Changed Files",copilot_getDocInfo:"Get Doc Info",copilot_getNotebookSummary:"Get Notebook Summary",copilot_getProjectSetupInfo:"Get Project Setup Info",copilot_getSearchResults:"Get Search Results",copilot_getVSCodeAPI:"Get VSCode API",copilot_githubRepo:"GitHub Repository",copilot_githubTextSearch:"GitHub Text Search",copilot_resolveMemoryFileUri:"Resolve Memory File URI",copilot_insertEdit:"Insert Edit",copilot_installExtension:"Install Extension",copilot_memory:"Memory",copilot_openIntegratedBrowser:"Open Integrated Browser",copilot_openSimpleBrowser:"Open Simple Browser",copilot_readNotebookCellOutput:"Read Notebook Cell Output",copilot_readProjectStructure:"Read Project Structure",copilot_runNotebookCell:"Run Notebook Cell",copilot_runInTerminal:"Run In Terminal",copilot_runTests1:"Run Tests",copilot_runVscodeCommand:"Run VSCode Command",copilot_searchWorkspaceSymbols:"Search Workspace Symbols",copilot_switchAgent:"Switch Agent",copilot_testFailure:"Test Failure",copilot_toolReplay:"Tool Replay",create_and_run_task:"Create And Run Task",create_directory:"Create Directory",create_file:"Create File",remove_file:"Remove File",create_new_jupyter_notebook:"Create New Jupyter Notebook",create_new_workspace:"Create New Workspace",create_virtual_environment:"Create Virtual Environment",edit_files:"Edit Files",edit_file:"Edit File",edit_notebook_file:"Edit Notebook File",fetch_webpage:"Fetch Webpage",file_search:"File Search",get_changed_files:"Get Changed Files",get_doc_info:"Get Doc Info",get_errors:"Get Errors",get_project_setup_info:"Get Project Setup Info",get_files_in_project:"Get Files In Project",get_projects_in_solution:"Get Projects In Solution",configure_python_environment:"Configure Python Environment",get_python_executable_details:"Get Python Executable Details",get_search_view_results:"Get Search View Results",get_task_output:"Get Task Output",get_output_window_logs:"Get Output Window Logs",job_output:"Job Output",get_vscode_api:"Get VSCode API",grep_search:"Grep Search",insert_edit_into_file:"Insert Edit Into File",install_extension:"Install Extension",install_python_packages:"Install Python Packages",list_dir:"List Dir",list_directory:"List Directory",ls:"Ls",memory:"Memory",multi_replace_string_in_file:"Multi Replace String In File",open_integrated_browser:"Open Integrated Browser",open_simple_browser:"Open Simple Browser",read_file:"Read File",view_image:"View Image",read_notebook_cell_output:"Read Notebook Cell Output",read_project_structure:"Read Project Structure",replace_string_in_file:"Replace String In File","setup.agent":"Setup Agent",selectEnvironment:"Select Environment",run_notebook_cell:"Run Notebook Cell",run_vscode_command:"Run VSCode Command",runSubagent:"Run Subagent",renderMermaidDiagram:"Render Mermaid Diagram",runTests:"Run Tests",search_workspace_symbols:"Search Workspace Symbols",semantic_search:"Semantic Search",switch_agent:"Switch Agent",terminal_selection:"Terminal Selection",test_failure:"Test Failure",test_search:"Test Search",tool_replay:"Tool Replay",tool_search:"Tool Search",vscode_askQuestions:"VSCode Ask Questions",vscode_get_confirmation:"VSCode Get Confirmation",vscode_get_confirmation_with_options:"VSCode Get Confirmation With Options",vscode_get_terminal_confirmation:"VSCode Get Terminal Confirmation",vscode_get_modified_files_confirmation:"VSCode Get Modified Files Confirmation",vscode_listCodeUsages:"VSCode List Code Usages",vscode_renameSymbol:"VSCode Rename Symbol","mcp_io_github_ups_get-library-docs":"Context7 MCP: Get Library Docs","mcp_io_github_ups_query-docs":"Context7 MCP: Query Docs","mcp_io_github_ups_resolve-library-id":"Context7 MCP: Resolve Library ID","mcp_context7_get-library-docs":"Context7 MCP: Get Library Docs","mcp_context7_query-docs":"Context7 MCP: Query Docs","mcp_context7_resolve-library-id":"Context7 MCP: Resolve Library ID",mcp_microsoft_pla_browser_evaluate:"Playwright MCP: Browser Evaluate",mcp_microsoft_pla_browser_install:"Playwright MCP: Browser Install",mcp_microsoft_pla_browser_navigate:"Playwright MCP: Browser Navigate",mcp_microsoft_pla_browser_run_code:"Playwright MCP: Browser Run Code",mcp_microsoft_pla_browser_click:"Playwright MCP: Browser Click",mcp_microsoft_pla_browser_fill_form:"Playwright MCP: Browser Fill Form",mcp_microsoft_pla_browser_press_key:"Playwright MCP: Browser Press Key",mcp_microsoft_pla_browser_resize:"Playwright MCP: Browser Resize",mcp_microsoft_pla_browser_snapshot:"Playwright MCP: Browser Snapshot",mcp_microsoft_pla_browser_tabs:"Playwright MCP: Browser Tabs",mcp_microsoft_pla_browser_take_screenshot:"Playwright MCP: Browser Take Screenshot",mcp_microsoft_pla_browser_type:"Playwright MCP: Browser Type",mcp_microsoft_pla_browser_console_messages:"MCP Microsoft Playwright Browser Console Messages",mcp_microsoft_pla_browser_wait_for:"Mcp Microsoft Pla Browser Wait For",mcp_playwright_browser_click:"Playwright MCP: Browser Click",mcp_playwright_browser_navigate:"Playwright MCP: Browser Navigate",mcp_playwright_browser_snapshot:"Playwright MCP: Browser Snapshot",mcp_playwright_browser_take_screenshot:"Playwright MCP: Browser Take Screenshot","microsoft-playwright-mcp-browser_evaluate":"Playwright MCP: Browser Evaluate","microsoft-playwright-mcp-browser_navigate":"Playwright MCP: Browser Navigate","microsoft-playwright-mcp-browser_snapshot":"Playwright MCP: Browser Snapshot",mcp_pylance_mcp_s_pylanceDocString:"Pylance MCP: Pylance Doc String",mcp_pylance_mcp_s_pylanceRunCodeSnippet:"Pylance MCP: Run Code Snippet",mcp_pylance_mcp_s_pylanceWorkspaceRoots:"Pylance MCP: Workspace Roots",mcp_pylance_mcp_s_pylanceFileSyntaxErrors:"Pylance MCP: File Syntax Errors",mcp_pylance_mcp_s_pylanceSyntaxErrors:"Pylance MCP: Syntax Errors","mcp_chrome-devtoo_click":"Chrome DevTools MCP: Click","mcp_chrome-devtoo_evaluate_script":"Chrome DevTools MCP: Evaluate Script","mcp_chrome-devtoo_fill":"Chrome DevTools MCP: Fill","mcp_chrome-devtoo_get_network_request":"Chrome DevTools MCP: Get Network Request","mcp_chrome-devtoo_list_console_messages":"Chrome DevTools MCP: List Console Messages","mcp_chrome-devtoo_list_pages":"Chrome DevTools MCP: List Pages","mcp_chrome-devtoo_navigate_page":"Chrome DevTools MCP: Navigate Page","mcp_chrome-devtoo_new_page":"Chrome DevTools MCP: New Page","mcp_chrome-devtoo_select_page":"Chrome DevTools MCP: Select Page","mcp_chrome-devtoo_take_screenshot":"Chrome DevTools MCP: Take Screenshot","mcp_chrome-devtoo_fill_form":"Chrome DevTools MCP: Fill Form","mcp_chrome-devtoo_hover":"Chrome DevTools MCP: Hover","mcp_chrome-devtoo_list_network_requests":"Chrome DevTools MCP: List Network Requests","mcp_chrome-devtoo_press_key":"Chrome DevTools MCP: Press Key","mcp_chrome-devtoo_take_snapshot":"Chrome DevTools MCP: Take Snapshot","mcp_chrome-devtoo_wait_for":"Chrome DevTools MCP: Wait For","mcp_chrome-devtoo_close_page":"Chrome DevTools MCP: Close Page","mcp_chrome-devtoo_lighthouse_audit":"Chrome DevTools MCP: Lighthouse Audit","mcp_chrome-devtoo_performance_analyze_insight":"Chrome DevTools MCP: Performance Analyze Insight","mcp_chrome-devtoo_performance_start_trace":"Chrome DevTools MCP: Performance Start Trace","mcp_chrome-devtoo_resize_page":"Chrome DevTools MCP: Resize Page","mcp_chrome-devtoo_type_text":"Chrome DevTools MCP: Type Text",mcp_chrome_devtoo_click:"Chrome DevTools MCP: Click",mcp_chrome_devtoo_evaluate_script:"Chrome DevTools MCP: Evaluate Script",mcp_chrome_devtoo_fill:"Chrome DevTools MCP: Fill",mcp_chrome_devtoo_get_console_message:"Chrome DevTools MCP: Get Console Message",mcp_chrome_devtoo_get_network_request:"Chrome DevTools MCP: Get Network Request",mcp_chrome_devtoo_list_console_messages:"Chrome DevTools MCP: List Console Messages",mcp_chrome_devtoo_list_network_requests:"Chrome DevTools MCP: List Network Requests",mcp_chrome_devtoo_list_pages:"Chrome DevTools MCP: List Pages",mcp_chrome_devtoo_navigate_page:"Chrome DevTools MCP: Navigate Page",mcp_chrome_devtoo_new_page:"Chrome DevTools MCP: New Page",mcp_chrome_devtoo_take_snapshot:"Chrome DevTools MCP: Take Snapshot",mcp_chrome_devtoo_wait_for:"Chrome DevTools MCP: Wait For",mcp_io_github_chr_click:"Chrome DevTools MCP: Click",mcp_io_github_chr_emulate:"Chrome DevTools MCP: Emulate",mcp_io_github_chr_evaluate_script:"Chrome DevTools MCP: Evaluate Script",mcp_io_github_chr_list_network_requests:"Chrome DevTools MCP: List Network Requests",mcp_io_github_chr_list_pages:"Chrome DevTools MCP: List Pages",mcp_io_github_chr_navigate_page:"Chrome DevTools MCP: Navigate Page",mcp_io_github_chr_new_page:"Chrome DevTools MCP: New Page",mcp_io_github_chr_resize_page:"Chrome DevTools MCP: Resize Page",mcp_io_github_chr_select_page:"Chrome DevTools MCP: Select Page",mcp_io_github_chr_take_snapshot:"Chrome DevTools MCP: Take Snapshot",mcp_oraios_serena_activate_project:"Serena: Activate Project",mcp_oraios_serena_check_onboarding_performed:"Serena: Check Onboarding Performed",mcp_oraios_serena_create_text_file:"Serena: Create Text File",mcp_oraios_serena_delete_lines:"Serena: Delete Lines",mcp_oraios_serena_delete_memory:"Serena: Delete Memory",mcp_oraios_serena_edit_memory:"Serena: Edit Memory",mcp_oraios_serena_execute_shell_command:"Serena: Execute Shell Command",mcp_oraios_serena_find_file:"Serena: Find File",mcp_oraios_serena_find_referencing_symbols:"Serena: Find Referencing Symbols",mcp_oraios_serena_find_symbol:"Serena: Find Symbol",mcp_oraios_serena_get_current_config:"Serena: Get Current Config",mcp_oraios_serena_get_symbols_overview:"Serena: Get Symbols Overview",mcp_oraios_serena_initial_instructions:"Serena: Initial Instructions",mcp_oraios_serena_insert_after_symbol:"Serena: Insert After Symbol",mcp_oraios_serena_insert_at_line:"Serena: Insert At Line",mcp_oraios_serena_insert_before_symbol:"Serena: Insert Before Symbol",mcp_oraios_serena_jet_brains_find_referencing_symbols:"Serena: JetBrains Find Referencing Symbols",mcp_oraios_serena_jet_brains_find_symbol:"Serena: JetBrains Find Symbol",mcp_oraios_serena_jet_brains_get_symbols_overview:"Serena: JetBrains Get Symbols Overview",mcp_oraios_serena_jet_brains_type_hierarchy:"Serena: JetBrains Type Hierarchy",mcp_oraios_serena_list_dir:"Serena: List Dir",mcp_oraios_serena_list_memories:"Serena: List Memories",mcp_oraios_serena_onboarding:"Serena: Onboarding",mcp_oraios_serena_open_dashboard:"Serena: Open Dashboard",mcp_oraios_serena_prepare_for_new_conversation:"Serena: Prepare For New Conversation",mcp_oraios_serena_read_file:"Serena: Read File",mcp_oraios_serena_read_memory:"Serena: Read Memory",mcp_oraios_serena_remove_project:"Serena: Remove Project",mcp_oraios_serena_rename_symbol:"Serena: Rename Symbol",mcp_oraios_serena_replace_content:"Serena: Replace Content",mcp_oraios_serena_replace_lines:"Serena: Replace Lines",mcp_oraios_serena_replace_symbol_body:"Serena: Replace Symbol Body",mcp_oraios_serena_restart_language_server:"Serena: Restart Language Server",mcp_oraios_serena_search_for_pattern:"Serena: Search For Pattern",mcp_oraios_serena_summarize_changes:"Serena: Summarize Changes",mcp_oraios_serena_switch_modes:"Serena: Switch Modes",mcp_oraios_serena_think_about_collected_information:"Serena: Think About Collected Information",mcp_oraios_serena_think_about_task_adherence:"Serena: Think About Task Adherence",mcp_oraios_serena_think_about_whether_you_are_done:"Serena: Think About Whether You Are Done",mcp_oraios_serena_write_memory:"Serena: Write Memory","mcp_visuals-mcp_display_image":"Visuals MCP: Display Image","mcp_laravel-boost_tinker":"Laravel Boost MCP: Tinker",bash:"Bash",Bash:"Bash",code_search:"Code Search",detect_memories:"Detect Memories",dismiss_deployment_notifications:"Dismiss Deployment Notifications",get_currentfile:"Get Current File",get_file:"Get File",get_symbols_by_name:"Get Symbols By Name","claude-code":"Claude Code","copilot-cloud-agent":"Copilot Cloud Agent",agent:"Agent",copilotcli:"Copilot CLI","github.copilot.default":"GitHub Copilot Default","github.copilot.workspace":"GitHub Copilot Workspace","github.copilot.vscode":"GitHub Copilot VSCode","github.copilot-dynamic.platform":"GitHub Copilot Dynamic: Platform",glob:"Glob",file_glob_search:"File Glob Search",grep:"Grep",kill_terminal:"Kill Terminal",read:"Read",view:"View",vscode_editFile_internal:"VSCode Edit File (Internal)",vscode_fetchWebPage_internal:"VSCode Fetch Web Page (Internal)",vscode_searchExtensions_internal:"VSCode Search Extensions (Internal)","vscode-websearchforcopilot_webSearch":"VSCode WebSearch for Copilot: Web Search",Build_CMakeTools:"CMake Tools: Build",ListBuildTargets_CMakeTools:"CMake Tools: List Build Targets",ListTests_CMakeTools:"CMake Tools: List Tests",RunCtest_CMakeTools:"CMake Tools: Run CTest","nuget_get-nuget-solver":"NuGet: Get NuGet Solver",webfetch:"Web Fetch",web_fetch:"Web Fetch",write:"Write",edit:"Edit",search_replace:"Search Replace",write_file:"Write File",multiedit:"Multi Edit",question:"Question",skill:"Skill",read_skill:"Read Skill",task:"Task",todowrite:"Todo Write",TodoWrite:"Todo Write",todos:"Todos",todo:"Todo",websearch:"Web Search",WebSearch:"Web Search",click_element:"Click Element",navigate_page:"Navigate Page",open_browser_page:"Open Browser Page",read_page:"Read Page",run_playwright_code:"Run Playwright Code",screenshot_page:"Screenshot Page",type_in_page:"Type in Page",task_complete:"Task Complete","pdf-utilities.pdf":"PDF Utilities: PDF","container-tools_get-config":"Container Tools: Get Config","github-pull-request_activePullRequest":"GitHub Pull Request: Active Pull Request","github-pull-request_currentActivePullRequest":"GitHub Pull Request: Current Active Pull Request","github-pull-request_issue_fetch":"GitHub Pull Request: Issue Fetch","github-pull-request_pullRequestStatusChecks":"GitHub Pull Request: Pull Request Status Checks","github-pull-request_pullRequestInViewport":"GitHub MCP (Remote): Pull Request In Viewport","mcp_powerbi-model_connection_operations":"Power BI MCP: Connection Operations",MiniMax_web_search:"MiniMax: Web Search",dingDocuments_get_document_content:"Ding Documents: Get Document Content",dingDocuments_list_nodes:"Ding Documents: List Nodes",dingDocuments_search_documents:"Ding Documents: Search Documents",fetch_fetch:"Fetch: Fetch",mcp__Claude_in_Chrome__computer:"Claude in Chrome MCP: Computer",mcp__Claude_in_Chrome__navigate:"Claude in Chrome MCP: Navigate",mcp__Claude_in_Chrome__browser_batch:"Claude in Chrome MCP: Browser Batch",mcp__Claude_in_Chrome__get_page_text:"Claude in Chrome MCP: Get Page Text",mcp__Claude_in_Chrome__tabs_context_mcp:"Claude in Chrome MCP: Tabs Context",mcp__Claude_in_Chrome__tabs_create_mcp:"Claude in Chrome MCP: Tabs Create",mcp__Claude_in_Chrome__javascript_tool:"Claude in Chrome MCP: Javascript Tool",mcp__Claude_in_Chrome__read_console_messages:"Claude in Chrome MCP: Read Console Messages",mcp__Claude_in_Chrome__read_network_requests:"Claude in Chrome MCP: Read Network Requests",mcp__Claude_in_Chrome:"Claude in Chrome MCP",mcp__Claude_in_Chrome__find:"Claude in Chrome MCP: Find",mcp__Claude_in_Chrome__form_input:"Claude in Chrome MCP: Form Input",mcp__Claude_in_Chrome__list_connected_browsers:"Claude in Chrome MCP: List Connected Browsers",mcp__Claude_in_Chrome__read_page:"Claude in Chrome MCP: Read Page",mcp__Claude_in_Chrome__select_browser:"Claude in Chrome MCP: Select Browser",mcp__cowork__allow_cowork_file_delete:"Cowork MCP: Allow Cowork File Delete",mcp__cowork__present_files:"Cowork MCP: Present Files",mcp__cowork__request_cowork_directory:"Cowork MCP: Request Cowork Directory","mcp__cowork-onboarding__show_onboarding_role_picker":"Cowork Onboarding MCP: Show Onboarding Role Picker",TaskOutput:"Task Output",TaskStop:"Task Stop",mcp__plugins__search_plugins:"Plugins MCP: Search Plugins",mcp__plugins__suggest_plugin_install:"Plugins MCP: Suggest Plugin Install",mcp__workspace__bash:"Workspace MCP: Bash",mcp__workspace__web_fetch:"Workspace MCP: Web Fetch","mcp__mcp-registry__search_mcp_registry":"MCP Registry: Search MCP Registry",Agent:"Agent",Edit:"Edit",Glob:"Glob",Grep:"Grep",NotebookEdit:"Notebook Edit",Read:"Read",Skill:"Skill",TaskCreate:"Task Create",TaskUpdate:"Task Update",ToolSearch:"Tool Search",Write:"Write","mcp__claude_ai_Context7__resolve-library-id":"Context7 MCP (Claude): Resolve Library ID",mcp__claude_ai_Excalidraw__create_view:"Excalidraw MCP (Claude): Create View",mcp__claude_ai_Excalidraw__read_me:"Excalidraw MCP (Claude): Read Me","mcp__claude_ai_Notion__notion-create-pages":"Notion MCP (Claude): Create Pages","mcp__claude_ai_Notion__notion-fetch":"Notion MCP (Claude): Fetch","mcp__claude_ai_Notion__notion-search":"Notion MCP (Claude): Search","mcp__claude_ai_Notion__notion-update-page":"Notion MCP (Claude): Update Page","mcp__context7__query-docs":"Context7 MCP: Query Docs","mcp__context7__resolve-library-id":"Context7 MCP: Resolve Library ID","mcp__databricks-sql-allscopes__authenticate":"Databricks SQL MCP: Authenticate","mcp__databricks-sql-allscopes__complete_authentication":"Databricks SQL MCP: Complete Authentication","mcp__databricks-sql__authenticate":"Databricks SQL MCP: Authenticate",mcp__playwright__browser_evaluate:"Playwright MCP: Browser Evaluate",mcp__playwright__browser_navigate:"Playwright MCP: Browser Navigate","mcp__plugin_context7_context7__query-docs":"Context7 MCP: Query Docs","mcp__plugin_context7_context7__resolve-library-id":"Context7 MCP: Resolve Library ID","mcp__shopify-dev-mcp__learn_shopify_api":"Shopify Dev MCP: Learn Shopify API","mcp__shopify-dev-mcp__search_docs_chunks":"Shopify Dev MCP: Search Docs Chunks","mcp__shopify-dev-mcp__validate_graphql_codeblocks":"Shopify Dev MCP: Validate GraphQL Codeblocks",invalid:"Invalid",rename_session:"Rename Session",update_topic:"Update Topic",rename_branch:"Rename Branch",report_intent:"Report Intent",create_pull_request:"Create Pull Request",update_pull_request:"Update Pull Request",powershell:"PowerShell",ask_user:"Ask User",sql:"SQL",show_file:"Show File",exit_plan_mode:"Exit Plan Mode",get_changes_overview:"Get Changes Overview",annotate_diff_line:"Annotate Diff",add_pr_review_comment:"Add PR Review Comment",remove_pr_review_comment:"Remove PR Review Comment",reply_to_comment:"Reply to Comment",open_pr_session:"Open PR Session",open_issue_session:"Open Issue Session",create_session:"Create Session",list_sessions_and_chats:"List Sessions & Chats",list_projects:"List Projects",get_session:"Get Session",navigate_to:"Navigate To",delete_item:"Delete Item",send_session_message:"Send Session Message",send_chat_message:"Send Chat Message",read_agent:"Read Agent",write_agent:"Write Agent",list_agents:"List Agents",discover_widgets:"Discover Widgets",render_widget:"Render Widget",clear_widget:"Clear Widget",extensions_manage:"Extensions Manage",extensions_reload:"Extensions Reload",create:"Create",fetch_copilot_cli_documentation:"Fetch Copilot CLI Documentation",generate_findings:"Generate Findings",generate_topics:"Generate Topics",list_bash:"List Bash",read_bash:"Read Bash",write_bash:"Write Bash",stop_bash:"Stop Bash",list_powershell:"List PowerShell",read_powershell:"Read PowerShell",render_widget_inbox:"Render Widget Inbox",rg:"Ripgrep",stop_powershell:"Stop PowerShell",store_memory:"Store Memory",web_search:"Web Search",write_powershell:"Write PowerShell",slidev_chooseEntry:"Slidev: Choose Entry",slidev_getPreviewPort:"Slidev: Get Preview Port",clarify_requirements:"Clarify Requirements",get_tests:"Get Tests","ide-get_diagnostics":"IDE: Get Diagnostics","ide-get_selection":"IDE: Get Selection",plan:"Plan",signal_plan_ready:"Signal Plan Ready",update_plan_progress:"Update Plan Progress",EnterPlanMode:"Enter Plan Mode",ExitPlanMode:"Exit Plan Mode",mcp_reload:"MCP: Reload",mcp_validate:"MCP: Validate",stop_agent:"Stop Agent","workiq-accept_eula":"WorkIQ: Accept EULA","workiq-ask_work_iq":"WorkIQ: Ask Work IQ","mcp_ado-remote-mc_core_list_projects":"Azure DevOps MCP: Core List Projects","mcp_ado-remote-mc_repo_branch":"Azure DevOps MCP: Repo Branch","mcp_ado-remote-mc_repo_pull_request":"Azure DevOps MCP: Repo Pull Request","mcp_ado-remote-mc_repo_pull_request_thread":"Azure DevOps MCP: Repo Pull Request Thread","mcp_ado-remote-mc_repo_pull_request_write":"Azure DevOps MCP: Repo Pull Request Write","mcp_ado-remote-mc_repo_repository":"Azure DevOps MCP: Repo Repository","mcp_ado-remote-mc_search_workitem":"Azure DevOps MCP: Search Work Item","mcp_ado-remote-mc_wit_get_work_item":"Azure DevOps MCP: Get Work Item","mcp_ado-remote-mc_wit_work_item":"Azure DevOps MCP: Work Item","mcp_ado-remote-mc_wit_work_item_comment_write":"Azure DevOps MCP: Work Item Comment Write","mcp_ado-remote-mc_wit_work_item_link_write":"Azure DevOps MCP: Work Item Link Write","mcp_ado-remote-mc_wit_work_item_write":"Azure DevOps MCP: Work Item Write",mssql_list_servers:"MSSQL: List Servers",add_loaded_assembly:"Add Loaded Assembly",analyze_symbol:"Analyze Symbol",search_decompiled_symbols:"Search Decompiled Symbols",get_classification_rubric:"Get Classification Rubric",get_weather:"Get Weather",mcp_azure_mcp_search:"Azure MCP: Search",mcp_gitnexus_context:"GitNexus MCP: Context",mcp_gitnexus_cypher:"GitNexus MCP: Cypher",mcp_gitnexus_detect_changes:"GitNexus MCP: Detect Changes",mcp_gitnexus_impact:"GitNexus MCP: Impact",mcp_gitnexus_list_repos:"GitNexus MCP: List Repos",mcp_gitnexus_query:"GitNexus MCP: Query",slidev_getSlideContent:"Slidev: Get Slide Content",mcp__GitLab__get_mcp_server_version:"GitLab MCP: Get MCP Server Version",mcp__plugin_figma_figma__get_design_context:"Figma MCP: Get Design Context",mcp__plugin_figma_figma__get_metadata:"Figma MCP: Get Metadata",mcp__plugin_figma_figma__get_screenshot:"Figma MCP: Get Screenshot",mcp_io_github_tav_tavily_extract:"MCP Io GitHub Tavily Extract",mcp_io_github_tav_tavily_search:"MCP Io GitHub Tavily Search",browser_wait_for:"Browser Wait For",copilot_sessionStoreSql:"Copilot Session Store Sql",explore_subagent:"Explore Subagent","github.copilot.terminalPanel":"Github Copilot Terminal Panel",handle_dialog:"Handle Dialog",run_subagent:"Run Subagent",testFailure:"Test Failure","mcp_angular-cli_get_best_practices":"Angular MCP: Get Best Practices","mcp_angular-cli_list_projects":"Angular MCP: Get Project List",mcp_azure_mcp_extension_cli_generate:"Azure MCP (Local): Generate",mcp_playwright_browser_console_messages:"Playwright MCP: Browser Console Messages",mcp_com_figma_mcp_get_design_context:"Figma MCP (Local): Get Design Context",mcp_com_figma_mcp_get_screenshot:"Figma MCP (Local): Get Screenshot",mcp__Bicep__get_bicep_best_practices:"Bicep MCP: Get Bicep Best Practices","mcp__microsoft-docs-learn__microsoft_docs_fetch":"Microsoft Learn MCP: Microsoft Docs Fetch","mcp__microsoft-docs-learn__microsoft_docs_search":"Microsoft Learn MCP: Microsoft Docs Search",mcp__azure__subscription_list:"Azure MCP: Subscription List",mcp__bicep__get_bicep_file_diagnostics:"Bicep MCP: File Diagnostics",mcp__linear__authenticate:"Linear MCP: Authenticate",mcp__linear__get_issue:"Linear MCP: Get Issue",mcp__linear__list_issues:"Linear MCP: List Issues",mcp__linear__list_teams:"Linear MCP: List Teams",mcp__linear__save_issue:"Linear MCP: Save Issue",mcp_workiq_accept_eula:"WorkIQ Accept EULA",mcp_workiq_ask_work_iq:"WorkIQ Ask Work IQ","mcp_microsoft-lea_microsoft_code_sample_search":"Microsoft Docs MCP (Local): Search Code Sample","mcp_microsoft-lea_microsoft_docs_search":"Microsoft Docs MCP (Remote): Search Docs","mcp_upstash_conte_query-docs":"MCP Upstash: Query Docs","mcp_upstash_conte_resolve-library-id":"MCP Upstash: Resolve Library ID",mcp__Bicep__list_avm_metadata:"MCP Bicep: List Azure Verified Module Metadata",google_research:"Google Research",task_execution:"Task Execution",tool_search_tool_regex:"Tool Search",FindDatabaseObjectsThat:"Find Database Objects That",GetTableColumnNames:"Get Table Column Names",SchemaStore_getSchema:"Schema Store Get Schema",SchemaStore_searchSchemas:"Schema Store Search Schemas",SearchSchemasForOnePartName:"Search Schemas For One Part Name",ValidateGeneratedTSQL:"Validate Generated T-SQL",aspire_execute_resource_command:"Aspire Execute Resource Command",aspire_get_doc:"Aspire Get Doc",aspire_list_console_logs:"Aspire List Console Logs",aspire_list_resources:"Aspire List Resources",aspire_list_structured_logs:"Aspire List Structured Logs",aspire_search_docs:"Aspire Search Docs",codesearch:"CodeSearch","context-engine_context_search":"Context Engine Context Search","context7_query-docs":"Context7 Query Docs","context7_resolve-library-id":"Context7 Resolve Library ID",playwright_browser_navigate:"Playwright Browser Navigate",run_tests:"Run Tests","azure-subscription_list":"Azure Subscription List",debugger_evaluate_expressions:"Debugger Evaluate Expressions",debugger_get_output_window_text:"Debugger Get Output Window Text",get_symbols:"Get Symbols",lookup_vs:"Lookup VS",search_web:"Search Web","aspire-get_doc":"Get Doc","aspire-search_docs":"Search Docs",vote_memory:"Vote Memory",create_issue:"Issue Create",save_workflow:"Workflow Save","context-mode_ctx_execute":"Context Mode: Execute","mcp_context-mode_ctx_batch_execute":"Context Mode: Batch Execute","mcp_context-mode_ctx_execute":"Context Mode: Execute","mcp_context-mode_ctx_search":"Context Mode: Search",mcp_github_issue_read:"GitHub MCP (Remote): Issue Read",mcp_github_search_repositories:"GitHub MCP (Remote): Search Repositories",mcp_io_github_tav_tavily_map:"Tavily MCP: Map","mcp_lean-ctx_ctx_call":"Lean Context: Call","mcp_lean-ctx_ctx_discover_tools":"Lean Context: Discover Tools","mcp_lean-ctx_ctx_edit":"Lean Context: Edit","mcp_lean-ctx_ctx_graph":"Lean Context: Graph","mcp_lean-ctx_ctx_knowledge":"Lean Context: Knowledge","mcp_lean-ctx_ctx_multi_read":"Lean Context: Multi Read","mcp_lean-ctx_ctx_overview":"Lean Context: Overview","mcp_lean-ctx_ctx_read":"Lean Context: Read","mcp_lean-ctx_ctx_search":"Lean Context: Search","mcp_lean-ctx_ctx_session":"Lean Context: Session","mcp_lean-ctx_ctx_shell":"Lean Context: Shell","mcp_lean-ctx_ctx_tree":"Lean Context: Tree","mcp_mcp-server-ti_get_current_time":"Time MCP: Get Current Time",mcp_playwright_browser_close:"Playwright MCP: Browser Close",mcp_playwright_browser_evaluate:"Playwright MCP: Browser Evaluate",mcp_playwright_browser_fill_form:"Playwright MCP: Browser Fill Form",mcp_playwright_browser_network_request:"Playwright MCP: Browser Network Request",mcp_playwright_browser_network_requests:"Playwright MCP: Browser Network Requests",mcp_playwright_browser_press_key:"Playwright MCP: Browser Press Key",mcp_playwright_browser_resize:"Playwright MCP: Browser Resize",mcp_playwright_browser_run_code_unsafe:"Playwright MCP: Browser Run Code Unsafe",mcp_playwright_browser_type:"Playwright MCP: Browser Type",mcp_playwright_browser_wait_for:"Playwright MCP: Browser Wait For",mcp_pylance_mcp_s_pylancePythonEnvironments:"Pylance MCP: Python Environments","mcp_spec-gen_get_architecture_overview":"Spec Gen MCP: Get Architecture Overview","mcp_spec-gen_get_call_graph":"Spec Gen MCP: Get Call Graph",mcp_specgen_analyze_codebase:"Spec Gen MCP: Analyze Codebase",mcp_specgen_get_function_body:"Spec Gen MCP: Get Function Body",mcp_specgen_get_spec:"Spec Gen MCP: Get Spec",mcp_specgen_list_spec_domains:"Spec Gen MCP: List Spec Domains",mcp_specgen_orient:"Spec Gen MCP: Orient",mcp_specgen_search_code:"Spec Gen MCP: Search Code",mcp_specgen_search_specs:"Spec Gen MCP: Search Specs",mcp_stitch_apply_design_system:"Stitch: Apply Design System",mcp_stitch_create_design_system:"Stitch: Create Design System",mcp_stitch_create_project:"Stitch: Create Project",mcp_stitch_edit_screens:"Stitch: Edit Screens",mcp_stitch_generate_screen_from_text:"Stitch: Generate Screen From Text",mcp_stitch_get_project:"Stitch: Get Project",mcp_stitch_get_screen:"Stitch: Get Screen",mcp_stitch_list_design_systems:"Stitch: List Design Systems",mcp_stitch_list_projects:"Stitch: List Projects",mcp_stitch_list_screens:"Stitch: List Screens",mcp_symdex_build_context_pack:"Symdex: Build Context Pack",mcp_symdex_get_callees:"Symdex: Get Callees",mcp_symdex_get_callers:"Symdex: Get Callers",mcp_symdex_get_file_outline:"Symdex: Get File Outline",mcp_symdex_get_file_tree:"Symdex: Get File Tree",mcp_symdex_get_graph_diagram:"Symdex: Get Graph Diagram",mcp_symdex_get_index_status:"Symdex: Get Index Status",mcp_symdex_get_repo_outline:"Symdex: Get Repo Outline",mcp_symdex_get_repo_stats:"Symdex: Get Repo Stats",mcp_symdex_index_folder:"Symdex: Index Folder",mcp_symdex_list_repos:"Symdex: List Repos",mcp_symdex_search_routes:"Symdex: Search Routes",mcp_symdex_search_symbols:"Symdex: Search Symbols",mcp_symdex_search_text:"Symdex: Search Text",mcp_tavily_tavily_crawl:"Tavily: Crawl",mcp_tavily_tavily_extract:"Tavily: Extract",mcp_tavily_tavily_search:"Tavily: Search",mcp_time_get_current_time:"Time: Get Current Time",mcp_trueline_trueline_outline:"Trueline: Outline",mcp_trueline_trueline_read:"Trueline: Read",mcp_trueline_trueline_search:"Trueline: Search",mcp_zettelkasten_zk_create_link:"Zettelkasten: Create Link",mcp_zettelkasten_zk_create_note:"Zettelkasten: Create Note",mcp_zettelkasten_zk_get_note:"Zettelkasten: Get Note",mcp_zettelkasten_zk_remove_link:"Zettelkasten: Remove Link",mcp_zettelkasten_zk_search_notes:"Zettelkasten: Search Notes",mcp_zettelkasten_zk_update_note:"Zettelkasten: Update Note",copilot_listCodeUsages:"Copilot: List Code Usages",create_new_file:"Windsurf: File Create",edit_existing_file:"Windsurf: File Edit","github.copilot.editingSession":"GitHub MCP (Local): Assign Copilot to Issue",mssql_connect:"SQL Server Connection",mssql_disconnect:"SQL Server Disconnection",mssql_list_tables:"SQL Server Tables List",mssql_run_query:"SQL Server Query Execution",run_terminal_command:"Terminal Command Run",single_find_and_replace:"Find and Replace",mcp_io_github_git_add_comment_to_pending_review:"GitHub MCP (Local): Add Comment To Pending Review",mcp_io_github_git_add_reply_to_pull_request_comment:"GitHub MCP (Local): Add Reply To Pull Request Comment",mcp_io_github_git_pull_request_review_write:"GitHub MCP (Local): Pull Request Review Write",mcp_aikido_aikido_full_scan:"Aikido MCP: Full Scan",mcp_aikido_aikido_issues_list:"Aikido MCP: Issues List",mcp_com_atlassian_addCommentToJiraIssue:"Atlassian MCP: Add Comment To Jira Issue",mcp_com_atlassian_atlassianUserInfo:"Atlassian MCP: User Info",mcp_com_atlassian_createConfluencePage:"Atlassian MCP: Create Confluence Page",mcp_com_atlassian_getAccessibleAtlassianResources:"Atlassian MCP: Get Accessible Atlassian Resources",mcp_com_atlassian_getConfluencePage:"Atlassian MCP: Get Confluence Page",mcp_com_atlassian_getConfluencePageFooterComments:"Atlassian MCP: Get Confluence Page Footer Comments",mcp_com_atlassian_getConfluenceSpaces:"Atlassian MCP: Get Confluence Spaces",mcp_com_atlassian_getJiraIssue:"Atlassian MCP: Get Jira Issue",mcp_com_atlassian_search:"Atlassian MCP: Search",mcp_com_atlassian_searchJiraIssuesUsingJql:"Atlassian MCP: Search Jira Issues Using JQL",mcp_com_atlassian_updateConfluencePage:"Atlassian MCP: Update Confluence Page",mcp_sonarqube_analyze_code_snippet:"SonarQube MCP: Analyze Code Snippet",mcp_sonarqube_get_project_quality_gate_status:"SonarQube MCP: Get Project Quality Gate Status",mcp_sonarqube_search_my_sonarqube_projects:"SonarQube MCP: Search My SonarQube Projects",mcp_sonarqube_search_security_hotspots:"SonarQube MCP: Search Security Hotspots",mcp_sonarqube_search_sonar_issues_in_projects:"SonarQube MCP: Search Sonar Issues In Projects",sonarqube_analyze_file:"SonarQube: Analyze File","azure-bicepschema":"Azure Bicep Schema","azure-documentation":"Azure Documentation","azure-extension_cli_generate":"Azure Extension CLI Generate","azure-get_azure_bestpractices":"Get Azure Best Practices",__auto_compact__:"Auto Compact",mcp_github_get_teams:"GitHub MCP (Remote): Get Teams",mcp_github_list_issue_types:"GitHub MCP (Remote): List Issue Types",mcp_github_mcp_se_issue_write:"GitHub MCP (Remote): Write Issue",mcp_github_mcp_se_list_issues:"GitHub MCP (Remote): List Issues",mcp_github_mcp_se_list_label:"GitHub MCP (Remote): List Labels",mcp_github_mcp_se_search_issues:"GitHub MCP (Remote): Search Issues",mcp_github_mcp_se_add_issue_comment:"GitHub MCP (Remote): Add Comment to Issue",mcp_github_mcp_se_create_pull_request:"GitHub MCP (Remote): Create Pull Request",mcp_github_mcp_se_get_file_contents:"GitHub MCP (Remote): Get File Contents",mcp_github_mcp_se_pull_request_read:"GitHub MCP (Remote): Read Pull Request",mcp_github_mcp_se_issue_read:" GitHub MCP (Remote): Issue Read on GitHub",mcp_github_search_users:"GitHub MCP (Remote): Search Users",mcp_github_semantic_issue_similarity_search:"GitHub MCP (Remote): Semantic Issue Similarity Search",codebase:"Codebase",invoke_subagent:"Invoke Subagent",list_permissions:"List Permissions",manage_task:"Manage Task",ccd_session:"CCD Session",mcp__ccd_session__mark_chapter:"CCD Session: Mark Chapter",multi_replace_file_content:"Multi-Replace File Content",read_currently_open_file:"Read Currently Open File",replace_file_content:"Replace File Content",run_command:"Run Command",schedule:"Schedule",send_message:"Send Message",view_file:"View File",write_to_file:"Write To File",glob_search:"Glob Search","azure-devops_core_list_projects":"Azure DevOps Core List Projects","azure-devops_repo_get_file_content":"Azure DevOps Repo Get File Content","azure-devops_repo_list_repos_by_project":"Azure DevOps Repo List Repos By Project","azure-devops_search_code":"Azure DevOps Search Code","azure-devops_wit_get_work_item":"Azure DevOps Wit Get Work Item","azure-devops_wit_query_by_wiql":"Azure DevOps Wit Query By WIQL",mcp_microsoft_azu_wit_get_work_items_batch_by_ids:"Microsoft Azure DevOps MCP (Local): Get Work Items Batch by IDs",mcp_microsoft_azu_wit_get_work_items_for_iteration:"Microsoft Azure DevOps MCP (Local): Get Work Items for Iteration",mcp_microsoft_azu_wit_update_work_items_batch:"Microsoft Azure DevOps MCP (Local): Update Work Items Batch",mcp_microsoft_azu_wit_work_items_link:"Microsoft Azure DevOps MCP (Local): Link Work Items",mcp_microsoft_azu_work_list_iterations:"Microsoft Azure DevOps MCP (Local): List Iterations","microsoft_azure-devops-mcp_core_list_projects":"Azure DevOps Core List Projects","microsoft_azure-devops-mcp_search_workitem":"Azure DevOps Search Work Item","microsoft_azure-devops-mcp_wit_get_work_item":"Microsoft Azure DevOps MCP (Local): Get Work Item",mcp_com_microsoft_get_azure_bestpractices:"Microsoft Docs MCP: Get Azure Best Practices",mcp_github_enterp_create_branch:"GitHub MCP (Remote): Create Branch",mcp_github_enterp_get_latest_release:"GitHub MCP (Remote): Get Latest Release",mcp_github_enterp_pull_request_read:"GitHub MCP (Remote): Pull Request Read",handoff:"Handoff",mcp_ado_search_workitem:"ADO Search Workitem",mcp_ado_wit_add_artifact_link:"ADO Wit Add Artifact Link",mcp_ado_wit_add_child_work_items:"ADO Wit Add Child Work Items",mcp_ado_wit_add_work_item_comment:"ADO Wit Add Work Item Comment",mcp_ado_wit_create_work_item:"ADO Wit Create Work Item",mcp_ado_wit_get_work_item:"ADO Wit Get Work Item",mcp_ado_wit_get_work_item_type:"MCP Ado Wit Get Work Item Type",mcp_ado_wit_get_work_items_batch_by_ids:"MCP Ado Wit Get Work Items Batch By Ids",mcp_ado_wit_list_work_item_comments:"ADO Wit List Work Item Comments",mcp_ado_wit_my_work_items:"ADO Wit My Work Items",mcp_ado_wit_update_work_item:"ADO Wit Update Work Item",mcp_ado_wit_update_work_items_batch:"ADO Wit Update Work Items Batch",mcp_ado_wit_work_item_unlink:"ADO Wit Work Item Unlink",mcp_ado_wit_work_items_link:"ADO Wit Work Items Link",mcp_azure_devops__search_workitem:"Azure DevOps Search Workitem",mcp_github_add_issue_comment:"GitHub Add Issue Comment",mcp_github_create_branch:"GitHub Create Branch",mcp_github_list_commits:"GitHub List Commits",mcp_github_list_pull_requests:"GitHub List Pull Requests",mcp_github_push_files:"GitHub Push Files","mcp_hashline-edit_grep":"Hashline Edit Grep",mcp_raindrop_create_bookmarks:"RainDrop Create Bookmarks","mcp_symdex-mcp_semantic_search":"Symdex MCP Semantic Search","mcp_tavily-global_tavily-search":"Tavily Global Tavily-Search","mcp_tavily_tavily-extract":"Tavily Tavily-Extract","mcp_tavily_tavily-search":"Tavily Tavily-Search",mcp_tavily_tavily_research:"Tavily Tavily-Research",session_store_sql:"SQL Session Store","azure-advisor":"Azure Advisor","azure-devops-core_list_projects":"Azure DevOps Core List Projects","azure-devops-wit_work_item":"Azure DevOps Work Item","azure-devops-wit_work_item_write":"Azure DevOps Work Item Write","azure-group_resource_list":"Azure Group Resource List","azure-sql":"Azure SQL",ScheduleWakeup:"Scheduled Wakeup",mcp__ccd_session__spawn_task:"Spawn Task",mcp_figma_mcp_ser_get_design_context:"Figma MCP (Local): Get Design Context",mcp_figma_mcp_ser_get_libraries:"Figma MCP (Local): Get Libraries",mcp_figma_mcp_ser_get_metadata:"Figma MCP (Local): Get Metadata",mcp_figma_mcp_ser_search_design_system:"Figma MCP (Local): Search Design System","azure-devops-repo_file":"Azure DevOps: File","azure-devops-repo_pull_request":"Azure DevOps: Pull Request","azure-devops-repo_repository":"Azure DevOps: Repository","azure-devops-search_code":"Azure DevOps: Search Code","azure-devops-search_workitem":"Azure DevOps: Work Item","azure-devops-wiki":"Azure DevOps: Wiki","azure-devops-wiki_upsert_page":"Azure DevOps: Wiki Upsert Page","azure-devops-wit_work_item_comment_write":"Azure DevOps: Work Item Comment Write",invoke_canvas_action:"Canvas Action",list_canvas_capabilities:"List Canvas Capabilities",open_canvas:"Open Canvas",subagent:"Subagent",workiq_search_files:"WorkIQ Search Files",workiq_get_email:"Workiq Get Email",workiq_list_emails:"Workiq List Emails",github_text_search:"GitHub MCP (Local): Text Search",mcp_azure_mcp_ser_search:"Azure MCP (Remote): Search","azure_mcp-documentation":"Azure MCP Documentation",mcp_azure_mcp_ser_get_azure_bestpractices:"Serena MCP: Get Azure Best Practices",find:"Find","get-syntax-docs-mermaid":"Mermaid Syntax Docs","mermaid-chart":"Mermaid Chart","mermaid-diagram-preview":"Mermaid Diagram Preview","mermaid-diagram-validator":"Mermaid Diagram Validator",sonarqube_list_potential_security_issues:"SonarQube List Potential Security Issues",m_filesystem_tree:"File System Tree",m_get_settings:"Get Settings",m_get_skill:"Get Skill",m_list_skills:"List Skills",find_symbol:"Find Symbol",finish_plan:"Finish Plan",jcodemunch_file_outline:"JCodeMunch File Outline",jcodemunch_find_references:"JCodeMunch Find References",jcodemunch_get_file_content:"JCodeMunch Get File Content",jcodemunch_get_session_stats:"JCodeMunch Get Session Stats",jcodemunch_get_symbol_source:"JCodeMunch Get Symbol Source",jcodemunch_list_repos:"JCodeMunch List Repos",jcodemunch_search_symbols:"JCodeMunch Search Symbols",jcodemunch_search_text:"JCodeMunch Search Text","mcp_jcodemunch-mc_check_references":"JCodeMunch MCP (Local): Check References","mcp_jcodemunch-mc_find_references":"JCodeMunch MCP (Local): Find References","mcp_jcodemunch-mc_get_file_outline":"JCodeMunch MCP (Local): Get File Outline","mcp_jcodemunch-mc_index_folder":"JCodeMunch MCP (Local): Index Folder","mcp_jcodemunch-mc_list_repos":"JCodeMunch MCP (Local): List Repos","mcp_jcodemunch-mc_plan_turn":"JCodeMunch MCP (Local): Plan Turn","mcp_jcodemunch-mc_search_symbols":"JCodeMunch MCP (Local): Search Symbols","mcp_jcodemunch-mc_winnow_symbols":"JCodeMunch MCP (Local): Winnow Symbols",search_text:"Search Text",ask_question:"Ask Question",create_cpp_performance_test:"Create C++ Performance Test",debugger_continue:"Debug Continue",debugger_get_call_stack:"Debug Get Call Stack",debugger_get_frame_source:"Debug Get Frame Source",debugger_get_threads:"Debug Get Threads",debugger_launch_unit_test:"Debug Launch Unit Test","foundrytk-get_ai_model_guidance":"Foundry: AI Model Guidance","foundrytk-usage_guidance":"Foundry: Usage Guidance","mcp_atlassian-mcp_addCommentToJiraIssue":"Atlassian MCP (Local): Add Comment to Jira Issue","mcp_atlassian-mcp_atlassianUserInfo":"Atlassian MCP (Local): Get User Info","mcp_atlassian-mcp_createJiraIssue":"Atlassian MCP (Local): Create/Update Jira Issue","mcp_atlassian-mcp_editJiraIssue":"Atlassian MCP (Local): Edit Jira Issue","mcp_atlassian-mcp_getAccessibleAtlassianResources":"Atlassian MCP (Local): Get Accessible Resources","mcp_atlassian-mcp_getJiraIssue":"Atlassian MCP (Local): Get Jira Issue","mcp_atlassian-mcp_getJiraIssueTypeMetaWithFields":"Atlassian MCP (Local): Get Jira Issue Type Meta with Fields","mcp_atlassian-mcp_getJiraProjectIssueTypesMetadata":"Atlassian MCP (Local): Get Jira Project Issue Types Metadata","mcp_atlassian-mcp_getTransitionsForJiraIssue":"Atlassian MCP (Local): Get Transitions for Jira Issue","mcp_atlassian-mcp_getVisibleJiraProjects":"Atlassian MCP (Local): Get Visible Jira Projects","mcp_atlassian-mcp_searchJiraIssuesUsingJql":"Atlassian MCP (Local): Search Jira Issues Using JQL","mcp_atlassian-mcp_transitionJiraIssue":"Atlassian MCP (Local): Transition Jira Issue",mcp_figma_mcp_ser_get_screenshot:"Figma MCP: Get Screenshot",mcp_figma_mcp_ser_get_variable_defs:"Figma MCP: Get Variable Defs",mcp_gitkraken_cli_git_log_or_diff:"GitKraken MCP: Log/Compare",mcp_gitkraken_cli_git_push:"GitKraken MCP: Push",mcp_gitkraken_cli_git_status:"GitKraken MCP: Status",mcp_gitkraken_cli_gitlens_commit_composer:"GitKraken MCP: Commit Composer",profile_unit_test:"Profile Unit Test",profiler_agent:"Profiler Agent",run_profiler:"Run Profiler",define_subagent:"Define Subagent",find_by_name:"Find by Name",manage_subagents:"Manage Subagents","mcp__computer-use__request_access":"MCP: Computer Use Request Access","mcp__computer-use__screenshot":"MCP: Computer Use Screenshot",CronList:"Cron List","mcp__scheduled-tasks__list_scheduled_tasks":"MCP: Scheduled Tasks - List Scheduled Tasks",m_accept_workiq_eula:"WorkIQ EULA Acceptance",mcp_azure_bicep_m_get_bicep_best_practices:"Azure Bicep MCP (Local): Get Best Practices",mcp_azure_bicep_m_list_avm_metadata:"Azure Bicep MCP (Remote): List AVM Metadata",mcp_azure_mcp_policy:"Azure MCP Policy",workiq_search_emails:"WorkIQ Search Emails",resolve_memory_file_uri:"Serena: Resolve Memory File URI",generate_image:"Generate Image",mcp__plugins__list_plugins:"MCP Plugins List",mcp__skills__list_skills:"MCP Skills List",mcp__visualize__read_me:"MCP Visualize: Read Me",mcp__visualize__show_widget:"MCP Visualize: Show Widget",read_url_content:"Read URL Content",mcp_jira_editJiraIssue:"JIRA MCP (Remote): Edit Jira Issue",mcp_jira_getAccessibleAtlassianResources:"JIRA MCP (Remote): Get Accessible Atlassian Resources",mcp_jira_getConfluencePage:"JIRA MCP (Remote): Get Confluence Page",mcp_jira_getJiraIssue:"JIRA MCP (Remote): Get Jira Issue","mcp__scheduled-tasks__create_scheduled_task":"Scheduled Tasks MCP: Create Scheduled Task",dart_format:"Dart Format",Monitor:"Monitor",SendMessage:"Send Message","atlassian-getConfluencePage":"Confluence MCP: Page Read/Write","atlassian-getVisibleJiraProjects":"Jira MCP: Projects View/Edit","atlassian-lookupJiraAccountId":"Jira MCP: Account Lookup","github-pull-request_create_pull_request":"GitHub Pull Request Create/Update",mcp_github_check_dependency_vulnerabilities:"GitHub MCP (Local) Check Dependency Vulnerabilities",mcp_provides_tool_pylanceInvokeRefactoring:"MCP Provides Tool Pylance Invoke Refactoring","mcp__codebase-memory-mcp__get_graph_schema":"MCP Codebase Memory Get Graph Schema","mcp__codebase-memory-mcp__index_repository":"MCP Codebase Memory: Index Repository","mcp__codebase-memory-mcp__index_status":"MCP Codebase Memory: Index Status","mcp__codebase-memory-mcp__list_projects":"MCP Codebase Memory: List Projects","mcp__codebase-memory-mcp__query_graph":"MCP Codebase Memory: Query Graph","mcp__codebase-memory-mcp__search_code":"MCP Codebase Memory: Search Code","mcp__codebase-memory-mcp__search_graph":"MCP Codebase Memory: Search Graph",create_project:"Create Project","mcp__scheduled-tasks__update_scheduled_task":"MCP Scheduled Tasks: Update Scheduled Task",mcp_github_mcp_s2_create_pull_request:"MCP GitHub: Create Pull Request",respond_to_session_plan:"Respond To Session Plan",str_replace:"Str Replace","workiq-ask":"Workiq Ask",Artifact:"Figma: Get Design Context",LSP:"Visual Studio Code: LSP",TaskList:"Serena: Task List",mcp__figma__get_design_context:"Figma: Get Design Context",mcp__figma__get_metadata:"Figma: Get Metadata","mcp_atlassian-mcp_getIssueLinkTypes":"Atlassian MCP (Remote): Get Issue Link Types","mcp_atlassian-mcp_search":"Atlassian MCP (Remote): Search",cache_docs:"Cache Docs",call_agent:"Call Agent",delegate_task:"Delegate Task",diff:"Diff",get_task_result:"Get Task Result",git_diff:"Git Diff",git_status:"Git Status",http:"HTTP",jq:"JQ",lsp_diagnostics:"LSP Diagnostics",sed_replace:"SED Replace",update_todo:"Update TODO",workiq_delete_event:"WorkIQ Delete Event",workiq_list_events:"WorkIQ List Events",get_python_environment_details:"Python Environment Details","io_github_tavily-ai_tavily-mcp-tavily_search":"Tavily MCP (Remote): Search","mcp_tavily-mcp_tavily_extract":"Extract from Tavily","mcp_tavily-mcp_tavily_search":"Search in Tavily","microsoft_playwright-mcp-browser_click":"Playwright: Click","microsoft_playwright-mcp-browser_console_messages":"Playwright: Console Messages","microsoft_playwright-mcp-browser_evaluate":"Playwright: Evaluate","microsoft_playwright-mcp-browser_navigate":"Playwright: Navigate","microsoft_playwright-mcp-browser_network_request":"Playwright: Network Request","microsoft_playwright-mcp-browser_network_requests":"Microsoft Playwright MCP Browser Network Requests","microsoft_playwright-mcp-browser_snapshot":"Microsoft Playwright MCP Browser Snapshot","microsoft_playwright-mcp-browser_tabs":"Microsoft Playwright MCP Browser Tabs","microsoft_playwright-mcp-browser_wait_for":"Microsoft Playwright MCP Browser Wait For","rtf-markdown-editor.pdfChat":"PDF Chat",Azure_MCP_Server_get_azure_bestpractices:"Azure MCP: Get Azure Bestpractices",mcp_azure_mcp_ser_subscription_list:"Azure MCP: Search Subscription List","microsoft-learn-microsoft_docs_fetch":"Microsoft Learn: Microsoft Docs Fetch",record_observation:"Record Observation",readFiles:"Read Files",search:"Search",shell:"Shell",steering:"Steering","azure-devops-repo_branch":"Azure DevOps Repository Branch","canvas-authoring-compile_canvas":"Canvas Authoring: Compile Canvas","canvas-authoring-connect":"Canvas Authoring: Connect","canvas-authoring-describe_control":"Canvas Authoring: Describe Control","canvas-authoring-get_data_source_schema":"Canvas Authoring: Get Data Source Schema","canvas-authoring-list_apis":"Canvas Authoring: List APIs","canvas-authoring-list_controls":"Canvas Authoring: List Controls","canvas-authoring-list_data_sources":"Canvas Authoring: List Data Sources","canvas-authoring-sync_canvas":"Canvas Authoring: Sync Canvas","mcp__claude-in-chrome__navigate":"Claude In Chrome MCP: Navigate","mcp__claude-in-chrome__tabs_context_mcp":"Claude In Chrome MCP: Tabs Context ",mcp__Claude_Browser__preview_start:"MCP Claude Browser: Preview Start",mcp__ccd_session__dismiss_task:"MCP: Ccd Session Dismiss Task",mcp__plugin_Notion_notion__authenticate:"MCP Notion: Notion Authenticate",Workflow:"Workflow","atlassian-createJiraIssue":"Atlassian MCP: Create Jira Issue","atlassian-getAccessibleAtlassianResources":"Atlassian MCP: Get Accessible Atlassian Resources",chmod:"Chmod","context7-query-docs":"Context7 MCP: Query Docs","context7-resolve-library-id":"Context7 MCP: Resolve Library ID","github-mcp-server-add_issue_comment":"GitHub MCP: Add Issue Comment","github-mcp-server-add_reply_to_pull_request_comment":"GitHub MCP: Add Reply to Pull Request Comment","github-mcp-server-create_pull_request":"GitHub MCP: Create Pull Request","github-mcp-server-get_me":"GitHub MCP: Get Me","github-mcp-server-label_write":"GitHub MCP: Label Write","github-mcp-server-list_issue_types":"GitHub MCP: List Issue Types","github-mcp-server-list_label":"GitHub MCP: List Label","github-mcp-server-projects_list":"GitHub MCP: Projects List","github-mcp-server-pull_request_review_write":"GitHub MCP: Pull Request Review Write","github-mcp-server-semantic_issue_similarity_search":"GitHub MCP: Semantic Issue Similarity Search","github-mcp-server-semantic_issues_search":"GitHub MCP: Semantic Issues Search",mcp__ide__getDiagnostics:"IDE Get Diagnostics","mcp__microsoft_playwright-mcp__browser_click":"Playwright MCP: Browser Click","mcp__microsoft_playwright-mcp__browser_close":"Playwright MCP: Browser Close","mcp__microsoft_playwright-mcp__browser_console_messages":"Playwright MCP: Browser Console Messages","mcp__microsoft_playwright-mcp__browser_evaluate":"Playwright MCP: Browser Evaluate","mcp__microsoft_playwright-mcp__browser_navigate":"Playwright MCP: Browser Navigate","mcp__microsoft_playwright-mcp__browser_resize":"Playwright MCP: Browser Resize","mcp__microsoft_playwright-mcp__browser_snapshot":"Playwright MCP: Browser Snapshot","mcp__microsoft_playwright-mcp__browser_take_screenshot":"Playwright MCP: Browser Take Screenshot","mcp__microsoft_playwright-mcp__browser_wait_for":"Playwright MCP: Browser Wait For",tool_search_tool:"Tool Search",configure_notebook:"Notebook Configure",restart_notebook_kernel:"Kernel Restart",mcp__Claude_Browser__computer:"MCP Claude Browser: Computer",mcp__Claude_Browser__find:"MCP Claude Browser: Find",mcp__Claude_Browser__get_page_text:"MCP Claude Browser: Get Page Text",mcp__Claude_Browser__navigate:"MCP Claude Browser: Navigate",mcp__Claude_Browser__preview_list:"MCP Claude Browser: Preview List",mcp__Claude_Browser__preview_logs:"MCP Claude Browser: Preview Logs",mcp__Claude_Browser__preview_stop:"MCP Claude Browser: Preview Stop",mcp__Claude_Browser__read_console_messages:"MCP Claude Browser: Read Console Messages",mcp__Claude_Browser__read_page:"MCP Claude Browser: Read Page",mcp__Claude_Browser__tabs_context:"MCP Claude Browser: Tabs Context",mcp__Claude_Browser__tabs_create:"MCP Claude Browser: Tabs Create",mcp__Claude_Browser__tabs_select:"MCP Claude Browser: Tabs Select",mcp_github_github_create_pull_request:"GitHub MCP (Remote): Create Pull Request",mcp_github_github_get_file_contents:"GitHub MCP (Remote): Get File Contents",mcp_github_github_get_job_logs:"GitHub MCP (Remote): Get Job Logs",mcp_github_github_get_latest_release:"GitHub MCP (Remote): Get Latest Release",mcp_github_github_get_release_by_tag:"GitHub MCP (Remote): Get Release By Tag",mcp_github_github_get_repository_tree:"GitHub MCP (Remote): Get Repository Tree",mcp_github_github_get_tag:"GitHub MCP (Remote): Get Tag",mcp_github_github_list_code_scanning_alerts:"GitHub MCP (Remote): List Code Scanning Alerts",mcp_github_github_list_pull_requests:"GitHub MCP (Remote): List Pull Requests",mcp_github_github_list_tags:"GitHub MCP (Remote): List Tags",mcp_github_github_pull_request_read:"GitHub MCP (Remote): Pull Request Read",mcp_github_github_search_issues:"GitHub MCP (Remote): Search Issues",mcp_github_github_search_repositories:"GitHub MCP (Remote): Search Repositories","mcp_actions-marke_lookup-action-versions":"Actions Marketplace MCP: Lookup Action Versions",mcp__dart__analyze_files:"Dart MCP: Analyze Files",mcp__dart__connect_dart_tooling_daemon:"Dart MCP: Connect Dart Tooling Daemon",mcp__dart__flutter_driver:"Dart MCP: Flutter Driver",mcp__dart__get_app_logs:"Dart MCP: Get App Logs",mcp__dart__get_runtime_errors:"Dart MCP: Get Runtime Errors",mcp__dart__get_widget_tree:"Dart MCP: Get Widget Tree",mcp__dart__hot_reload:"Dart MCP: Hot Reload",mcp__dart__launch_app:"Dart MCP: Launch App",mcp__dart__list_devices:"Dart MCP: List Devices",mcp__dart__list_running_apps:"Dart MCP: List Running Apps",mcp__dart__pub_dev_search:"Dart MCP: Pub Dev Search",mcp__dart__resolve_workspace_symbol:"Dart MCP: Resolve Workspace Symbol",mcp__dart__stop_app:"Dart MCP: Stop App",mcp_github_mcp_s2_add_issue_comment:"GitHub MCP (Remote): Add Issue Comment",mcp_github_mcp_s2_issue_read:"GitHub MCP (Remote): Issue Read",mcp_github_mcp_s2_issue_write:"GitHub MCP (Remote): Issue Write",str_replace_editor:"Editor Replace",TaskGet:"Task Get",mcp__claude_ai_Figma__get_design_context:"Figma MCP: Get Design Context",mcp__claude_ai_Figma__get_metadata:"Figma MCP: Get Metadata",mcp__claude_ai_Figma__get_screenshot:"Figma MCP: Get Screenshot",mcp__claude_ai_Figma__get_variable_defs:"Figma MCP: Get Variable Defs",mcp_figma_mcp_ser_use_figma:"Figma MCP: Use Figma","mcp_home-assistan_GetLiveContext":"Home Assistant MCP: Get Live Context",mcp_io_github_git_list_issue_fields:"GitHub MCP (Local): List Issue Fields",mcp_io_github_git_request_copilot_review:"GitHub MCP (Local): Request Copilot Review",mcp_mcpsamples_aw_search_instructions:"MCPSamples: Search Instructions","actions-marketplace_resolveActionVersions":"Actions Marketplace MCP: Resolve Action Versions",execute_code:"Execute Code",mcp__Claude_Browser__javascript_tool:"Claude Browser: JavaScript Tool",mcp__Claude_Browser__resize_window:"Claude Browser: Resize Window",patch:"Patch",searchFiles:"Search Files",search_files:"Search Files",skill_view:"Skill View",EnterWorktree:"Git Entry Worktree",Grace:"Grace",ReportFindings:"Report Findings",__slash__compact:"Compact",mcp__ccd_session_mgmt__get_session:"Session Management MCP: Get Session",mcp__ccd_session_mgmt__list_events:"Session Management MCP: List Events","appmod-search-file":"AppMod Search File",get_instructions:"Get Instructions",get_scenarios:"Get Scenarios",get_state:"Get State",mcp_azure_mcp_ser_azureterraformbestpractices:"Azure MCP (Serena): Azure Terraform Best Practices",mcp_azure_mcp_ser_compute:"Azure MCP (Serena): Compute",mcp_azure_mcp_ser_documentation:"Azure MCP (Serena): Documentation",mcp_azure_mcp_ser_extension_cli_generate:"Azure MCP (Serena): Extension CLI Generate",mcp_azure_mcp_ser_policy:"MCP Azure MCP Ser Policy",mcp_playwright_browser_hover:"Playwright Browser Hover",configure_python_notebook:"Configure Python Notebook",ShareOnboardingGuide:"Share Onboarding Guide",append:"Append",controlProcess:"Control Process",delete:"Delete",displayError:"Display Error",exec:"Execute",getDiagnostics:"Get Diagnostics",getProcessOutput:"Get Process Output",invokeSubAgent:"Invoke Sub-Agent",listProcesses:"List Processes",nuget_get_latest_package_version:"NuGet Get Latest Package Version",pbtStatus:"PB/T Status",readCode:"Read Code",remote_web_search:"Remote Web Search",replace:"Replace",specAgent:"Spec Agent",subagent_response:"Subagent Response",taskStatus:"Task Status",wait:"Wait",mcp__ccd_session_mgmt__list_sessions:"MCP: Ccd Session Mgmt - List Sessions",mcp__ccd_session_mgmt__search_session_transcripts:"MCP: Ccd Session Mgmt - Search Session Transcripts","mcp__claude-in-chrome__browser_batch":"MCP: Claude In Chrome - Browser Batch",get_current_session:"Get Current Session",get_session_context:"Get Session Context",listComments:"List Comments",list_sessions:"List Sessions",problems:"Problems",activate_project:"Project Activation",analyze_calls:"Call Analysis",evaluate_expression:"Expression Evaluation",exec_command:"Command Execution",execute_sql_query:"SQL Query Execution",execute_tool:"Tool Execution",findTests:"Find Tests",find_declaration:"Find Declaration",find_implementations:"Find Implementations",find_referencing_symbols:"Find Referencing Symbols",followup_task:"Follow-up Task",get_current_config:"Get Current Configuration",get_debug_session_status:"Debug Session Status",get_diagnostics_for_file:"Diagnostics for File",get_file_problems:"File Problems",get_repositories:"Repositories",get_run_configurations:"Run Configurations",get_solution_projects:"Solution Projects",get_symbol_info:"Symbol Info",get_symbols_overview:"Symbols Overview",get_variables:"Get Variables",initial_instructions:"Initial Instructions",insert_after_symbol:"Insert After Symbol",interrupt_agent:"Interrupt Agent",js:"JavaScript",lint_files:"Lint Files",list_database_connections:"List Database Connections",list_debug_sessions:"List Debug Sessions",list_directory_tree:"Directory Tree",list_memories:"List Memories",load_workspace_dependencies:"Load Workspace Dependencies",open_file_in_editor:"Open File in Editor",post_edit_quality_check:"Post Edit Quality Check",read_memory:"Read Memory",reformat_file:"Reformat File",rename_symbol:"Rename Symbol",replace_in_files:"Replace In Files",replace_symbol_body:"Replace Symbol Body",run:"Run",safe_delete_symbol:"Safe Delete Symbol",search_file:"Search File",search_for_pattern:"Search for Pattern",search_regex:"Search Regex",search_symbol:"Search Symbol",shell_command:"Shell Command",skill_search:"Skill Search",spawn_agent:"Spawn Agent",update_plan:"Update Plan",wait_agent:"Wait Agent",xdebug_get_debugger_status:"Xdebug Debugger Status",xdebug_get_frame_values:"Xdebug Get Frame Values",xdebug_get_stack:"Xdebug Get Stack",xdebug_get_threads:"Xdebug Get Threads",addComment:"View Unreviewed Comments",resolveComments:"View Unreviewed Comments",viewUnreviewedComments:"View Unreviewed Comments",archive_session:"Archive Session",reply_and_resolve_review_thread:"Reply And Resolve Review Thread",save_session_automation:"Save Session Automation",MCP:"MCP",run_workflow:"Run Workflow",agent_manager:"Agent Manager",background_process:"Background Process","gitea-mcp_get_me":"Gitea MCP: Get Me","gitea-mcp_issue_read":"Gitea MCP (Remote): Issue Read","gitea-mcp_issue_write":"Gitea MCP (Remote): Issue Write",kilo_memory_recall:"Kilo Memory Recall",kilo_memory_save:"Kilo Memory Save","mssql-dab_describe_entities":"MSSQL DAB: Describe Entities","mssql-dab_read_records":"MSSQL DAB: Read Records",outline_create_document:"Outline Create Document",outline_fetch:"Outline Fetch",outline_list_collection_documents:"Outline List Collection Documents",outline_list_collections:"Outline List Collections",outline_list_documents:"Outline List Documents",outline_update_document:"Outline Update Document",plan_exit:"Plan Exit","zai-vision_analyze_image":"ZAI Vision: Analyze Image","zai-web-search_web_search_prime":"ZAI Web Search Prime",zread_get_repo_structure:"ZR Read Repo Structure",zread_search_doc:"ZR Search Doc",SendUserFile:"GitHub MCP (Local): Send User File",kilo_local_recall:"Kilo Local Recall",get_sessions_status:"Playwright MCP: Get Sessions Status",Claude_Browser:"Claude Browser",ExitWorktree:"Exit Worktree",ccd_pr:"Context7 MCP: Create/Update Pull Request",ccd_session_mgmt:"Context7 MCP: Manage Session",mcp__ccd_pr__get_status:"Context7 MCP: Get Status of Pull Request",mcp__ccd_session_mgmt__send_message:"Context7 MCP: Send Message to Session",mcp__ccd_session_mgmt__unarchive_session:"Context7 MCP: Unarchive Session"};var Eo=Mr.pricing,up=new Set(["VS Code","VS Code Insiders","VS Code Exploration","VS Code Server","VS Code Server (Insiders)","VSCodium","Visual Studio","JetBrains","Copilot CLI","Copilot CLI (App)","MS Scout (Copilot CLI)"]),LS=[["claude","Anthropic"],["anthropic","Anthropic"],["gemini","Google"],["google","Google"],["mistral","Mistral AI"],["codestral","Mistral AI"],["magistral","Mistral AI"],["ministral","Mistral AI"],["devstral","Mistral AI"],["pixtral","Mistral AI"],["gpt","OpenAI"],["o1","OpenAI"],["o3","OpenAI"],["o4","OpenAI"],["grok","xAI"],["raptor","xAI"],["goldeneye","xAI"],["qwen","Alibaba"],["mai-","Microsoft"]];function cp(n){return up.has(n)?"copilot":"provider"}function jS(n){let e=Ws(n);if(e)return e;let t=n.toLowerCase(),s=LS.find(([o])=>t.startsWith(o));return s?s[1]:"Other"}function Bl(n,e){let t=Ws(e);return t||(up.has(n)?"GitHub Copilot":jS(e))}function pt(n){return n?n.actualTokens>0?n.actualTokens:n.tokens:0}function ql(n){let e=J(n);return e.includes("/.copilot/jb/")?"JetBrains":e.includes("/.copilot/session-store.db#")||e.includes("/.copilot/session-state/")?"Copilot CLI":e.includes("/.crush/crush.db#")?"Crush":e.includes("/saoudrizwan.claude-dev/tasks/")?"Cline":e.includes("/kilo/kilo.db#")?"Kilo Code":e.includes("/opencode/")?"OpenCode":e.includes("/.codex/")?"Codex CLI":e.includes("/.kiro/sessions/cli/")?"Kiro CLI":e.includes("/kiro.kiroagent/workspace-sessions/")?"Kiro":e.includes("/.continue/sessions/")?"Continue":e.includes("/claude-code-sessions/")||e.includes("/local-agent-mode-sessions/")?"Claude Desktop Cowork":e.includes("/.claude/projects/")?In(n):e.includes("/.vibe/logs/session/")?"Mistral Vibe":e.includes("/.gemini/antigravity/brain/")?"Antigravity":e.includes("/.gemini/tmp/")&&e.includes("/chats/session-")&&e.endsWith(".jsonl")?"Gemini CLI":e.includes("/cursor/")?"Cursor":e.includes("/code - insiders/")?"VS Code Insiders":e.includes("/code - exploration/")?"VS Code Exploration":e.includes("/vscodium/")?"VSCodium":e.includes(".vscode-server-insiders/")?"VS Code Server (Insiders)":e.includes(".vscode-server")?"VS Code Server":e.includes("/.vs/")&&e.includes("/copilot-chat/")?"Visual Studio":"VS Code"}async function zl(n,e,t=20){if(n.length===0)return[];let s=new Array(n.length),o=0,i=Array.from({length:Math.min(t,n.length)},async()=>{for(;o<n.length;){let r=o++;try{s[r]=await e(n[r],r)}catch{s[r]=void 0}}});return await Promise.all(i),s}function Ro(){return{tokens:0,thinkingTokens:0,estimatedTokens:0,actualTokens:0,sessions:0,avgInteractionsPerSession:0,avgTokensPerSession:0,modelUsage:{},editorUsage:{},co2:0,treesEquivalent:0,waterUsage:0,estimatedCost:0}}function Io(n,e,t){let s=Math.round(pt(e)*t),o=Math.round(e.thinkingTokens*t),i=Math.round(e.actualTokens*t);n.tokens+=s,n.thinkingTokens+=o,n.estimatedTokens+=Math.round(e.tokens*t),n.actualTokens+=i,n.sessions++,$e(n.modelUsage,nn(e.modelUsage,t));let r=Math.round(e.interactions*t),a=n.avgInteractionsPerSession*(n.sessions-1)+r;n.avgInteractionsPerSession=n.sessions>0?a/n.sessions:0,n.editorUsage[e.editorSource]||(n.editorUsage[e.editorSource]={tokens:0,sessions:0}),n.editorUsage[e.editorSource].tokens+=s,n.editorUsage[e.editorSource].sessions++}function xs(){return{sessions:0,toolCalls:{total:0,byTool:{}},modeUsage:{ask:0,edit:0,agent:0,plan:0,customAgent:0,cli:0},contextReferences:G(),mcpTools:{total:0,byServer:{},byTool:{}},modelSwitching:{modelsPerSession:[],totalSessions:0,averageModelsPerSession:0,maxModelsPerSession:0,minModelsPerSession:0,switchingFrequency:0,autoSessions:0,foundryWindowsSessions:0,unknownProviderSessions:0,selectedModelExtensions:[],unknownProviderModels:[],standardModels:[],premiumModels:[],lowCostModels:[],mediumCostModels:[],highCostModels:[],unknownModels:[],mixedTierSessions:0,mixedCostSessions:0,standardRequests:0,premiumRequests:0,unknownRequests:0,totalRequests:0,lowCostRequests:0,mediumCostRequests:0,highCostRequests:0},repositories:[],repositoriesWithCustomization:[],editScope:{singleFileEdits:0,multiFileEdits:0,totalEditedFiles:0,avgFilesPerSession:0},applyUsage:{totalApplies:0,totalCodeBlocks:0,applyRate:0},sessionDuration:{totalDurationMs:0,avgDurationMs:0,avgFirstProgressMs:0,avgTotalElapsedMs:0,avgWaitTimeMs:0,activeDurationMs:0},conversationPatterns:{multiTurnSessions:0,singleTurnSessions:0,avgTurnsPerSession:0,maxTurnsInSession:0},agentTypes:{editsAgent:0,defaultAgent:0,workspaceAgent:0,other:0},taskCategoryPrimarySessions:{},taskCategoryWeightedSessions:{}}}var ns=[{bg:"rgba(54, 162, 235, 0.6)",border:"rgba(54, 162, 235, 1)"},{bg:"rgba(255, 99, 132, 0.6)",border:"rgba(255, 99, 132, 1)"},{bg:"rgba(75, 192, 192, 0.6)",border:"rgba(75, 192, 192, 1)"},{bg:"rgba(153, 102, 255, 0.6)",border:"rgba(153, 102, 255, 1)"},{bg:"rgba(255, 159, 64, 0.6)",border:"rgba(255, 159, 64, 1)"},{bg:"rgba(255, 205, 86, 0.6)",border:"rgba(255, 205, 86, 1)"},{bg:"rgba(201, 203, 207, 0.6)",border:"rgba(201, 203, 207, 1)"},{bg:"rgba(100, 181, 246, 0.6)",border:"rgba(100, 181, 246, 1)"}];function Uo(n,e,t){if(!n||!e)throw new Error("buildChartPayload: labels and days are required");if(n.length!==e.length)throw new Error(`buildChartPayload: labels.length (${n.length}) !== days.length (${e.length})`);let s=A=>`${A.getFullYear()}-${String(A.getMonth()+1).padStart(2,"0")}-${String(A.getDate()).padStart(2,"0")}`,o=A=>{let D=A.map(U=>U.entry),B=A.map(U=>U.label),_e=D.map(U=>U.tokens),me=D.map(U=>U.sessions),ae=new Set;D.forEach(U=>Object.keys(U.modelUsage).forEach(Q=>ae.add(Q)));let dn=Array.from(ae).map((U,Q)=>{let be=ns[Q%ns.length];return{label:U,data:D.map(Me=>{let le=Me.modelUsage[U];return le?le.inputTokens+le.outputTokens:0}),backgroundColor:be.bg,borderColor:be.border,borderWidth:1}}),Es=new Set;D.forEach(U=>Object.keys(U.editorUsage).forEach(Q=>Es.add(Q)));let je=Array.from(Es).map((U,Q)=>{let be=ns[Q%ns.length];return{label:U,data:D.map(Me=>Me.editorUsage[U]?.tokens||0),backgroundColor:be.bg,borderColor:be.border,borderWidth:1}}),mn=_e.reduce((U,Q)=>U+Q,0),Wt=me.reduce((U,Q)=>U+Q,0),Mt=A.length,No=D.map(U=>Xe(U.modelUsage,Eo,"copilot")),Lo=No.reduce((U,Q)=>U+Q,0),qr=Mt>0?Lo/Mt:0,as=new Set;D.forEach(U=>{U.editorModelUsage&&Object.keys(U.editorModelUsage).forEach(Q=>as.add(Q))});let Rs=new Map;for(let U of as){let Q=D.reduce((be,Me)=>be+Xe(Me.editorModelUsage?.[U]??{},Eo,cp(U)),0);Rs.set(U,Q)}let jo=Array.from(as).sort((U,Q)=>(Rs.get(Q)||0)-(Rs.get(U)||0)).map((U,Q)=>{let be=ns[Q%ns.length];return{label:U,data:D.map(Me=>Xe(Me.editorModelUsage?.[U]??{},Eo,cp(U))),backgroundColor:be.bg,borderColor:be.border,borderWidth:1}}),pn=new Set;D.forEach(U=>{if(U.editorModelUsage)for(let[Q,be]of Object.entries(U.editorModelUsage))for(let Me of Object.keys(be))pn.add(Bl(Q,Me))});let ot=new Map;for(let U of pn)ot.set(U,D.reduce((Q,be)=>{if(!be.editorModelUsage)return Q;let Me={};for(let[ls,cs]of Object.entries(be.editorModelUsage))for(let[us,vt]of Object.entries(cs))Bl(ls,us)===U&&$e(Me,{[us]:{...vt,sessions:0}});return Q+Xe(Me,Eo,U==="GitHub Copilot"?"copilot":"provider")},0));let it=Array.from(pn).sort((U,Q)=>(ot.get(Q)||0)-(ot.get(U)||0)).map((U,Q)=>{let be=ns[Q%ns.length],Me=U==="GitHub Copilot"?"copilot":"provider";return{label:U,data:D.map(le=>{if(!le.editorModelUsage)return 0;let ls={};for(let[cs,us]of Object.entries(le.editorModelUsage))for(let[vt,Wr]of Object.entries(us))Bl(cs,vt)===U&&$e(ls,{[vt]:{...Wr,sessions:0}});return Xe(ls,Eo,Me)}),backgroundColor:be.bg,borderColor:be.border,borderWidth:1}});return{labels:B,tokensData:_e,sessionsData:me,modelDatasets:dn,editorDatasets:je,repositoryDatasets:[],periodCount:Mt,totalTokens:mn,totalSessions:Wt,avgPerPeriod:Mt>0?Math.round(mn/Mt):0,costData:No,totalCost:Lo,avgCostPerPeriod:qr,editorCostDatasets:jo,billingGroupCostDatasets:it}},i=(A,D)=>{A.tokens+=D.tokens,A.sessions+=D.sessions,$e(A.modelUsage,nn(D.modelUsage,1));for(let[B,_e]of Object.entries(D.editorUsage))A.editorUsage[B]||(A.editorUsage[B]={tokens:0,sessions:0}),A.editorUsage[B].tokens+=_e.tokens,A.editorUsage[B].sessions+=_e.sessions;if(D.editorModelUsage){A.editorModelUsage||(A.editorModelUsage={});for(let[B,_e]of Object.entries(D.editorModelUsage))A.editorModelUsage[B]||(A.editorModelUsage[B]={}),$e(A.editorModelUsage[B],nn(_e,1))}},r=()=>({tokens:0,sessions:0,modelUsage:{},editorUsage:{}}),a=new Date,c=n.map((A,D)=>({label:A,entry:e[D]})),d=o(c),p=A=>{let D=new Date(A);D.setHours(0,0,0,0);let B=D.getDay();return D.setDate(D.getDate()-(B===0?6:B-1)),D},g=A=>{let D=new Date(A);return D.setDate(A.getDate()+6),A.getMonth()===D.getMonth()?`${A.toLocaleDateString("en-US",{month:"short"})} ${A.getDate()}\u2013${D.getDate()}`:`${A.toLocaleDateString("en-US",{month:"short",day:"numeric"})}\u2013${D.toLocaleDateString("en-US",{month:"short",day:"numeric"})}`},h=p(a),y=new Map;for(let A=5;A>=0;A--){let D=new Date(h);D.setDate(h.getDate()-A*7);let B=s(D);y.set(B,{label:g(D),entry:r()})}let b=t||new Map(n.map((A,D)=>[A,e[D]]));for(let[A,D]of b.entries()){let B=p(new Date(A+"T00:00:00")),_e=y.get(s(B));_e&&i(_e.entry,D)}let T=Array.from(y.values()),E=o(T),P=new Map;for(let A=11;A>=0;A--){let D=new Date(a.getFullYear(),a.getMonth()-A,1),B=`${D.getFullYear()}-${String(D.getMonth()+1).padStart(2,"0")}`,_e=D.toLocaleDateString("en-US",{month:"short",year:"numeric"});P.set(B,{label:_e,entry:r()})}for(let[A,D]of b.entries()){let B=A.slice(0,7),_e=P.get(B);_e&&i(_e.entry,D)}let I=Array.from(P.values()),F=o(I),Z={};return e.forEach(A=>{Object.entries(A.editorUsage).forEach(([D,B])=>{Z[D]=(Z[D]||0)+B.tokens})}),{labels:d.labels,tokensData:d.tokensData,sessionsData:d.sessionsData,modelDatasets:d.modelDatasets,editorDatasets:d.editorDatasets,editorTotalsMap:Z,repositoryDatasets:[],repositoryTotalsMap:{},dailyCount:d.periodCount,totalTokens:d.totalTokens,avgTokensPerDay:d.periodCount>0?Math.round(d.totalTokens/d.periodCount):0,totalSessions:d.totalSessions,lastUpdated:new Date().toISOString(),backendConfigured:!1,periodsReady:!0,periods:{day:d,week:E,month:F}}}function Y(n){return n==null||!Number.isFinite(n)?"0":Math.round(n).toLocaleString("en-US")}function de(n){return n==null||!Number.isFinite(n)||n<0?"0":n>=1e9?`${(n/1e9).toFixed(1)}B`:n>=1e6?`${(n/1e6).toFixed(1)}M`:n>=1e3?`${(n/1e3).toFixed(1)}K`:n.toString()}var Oo=ap.estimators,zt=Mr.pricing,GS=lp,BS=n=>{},Pr=n=>{},mp=(n,e)=>{let t=e instanceof Error?e.message:e!==void 0?String(e):"";console.error(w.red(n),t)};async function qS(n){try{let e=await qt.promises.readFile(n,"utf-8");return JSON.parse(e)}catch(e){return e?.code!=="ENOENT"&&mp(`[readJsonFile] Failed to read or parse JSON at ${n}:`,e),null}}var vr=null;function cn(){if(vr)return vr;let n=oi.file(__dirname);return vr=xl({...Al(n),estimateTokens:(e,t)=>te(e,t??"gpt-4",Oo),isMcpTool:at,extractMcpServerName:_t}),vr}function pp(){return new mi({log:BS,warn:Pr,error:mp,ecosystems:cn()})}async function ke(){return pp().getCopilotSessionFiles()}async function Ar(n){let e=new Set,t=Ae.join(dp.homedir(),".claude","projects");for(let o of n){if(o.startsWith(t+Ae.sep)||o.startsWith(t+"/")){let g=await ys(()=>qt.promises.readFile(o,"utf-8"),null,`buildCustomizationMatrix readFile(${o})`);if(g!==null){let h=g.split(`
|
|
165
|
-
`).slice(0,30);for(let y of h)if(y.trim())try{let b=JSON.parse(y);if(b.cwd&&typeof b.cwd=="string"){e.add(b.cwd);break}}catch{}}continue}let i=Ae.dirname(o);if(Ae.basename(i)!=="chatSessions")continue;let r=Ae.dirname(i),a=Ae.join(r,"workspace.json"),
|
|
166
|
-
`);for(let I of P)try{let F=JSON.parse(I);(F.type==="user.message"||F.kind===2&&F.k?.[0]==="requests")&&p++}catch{}}else{let T=
|
|
140
|
+
`;function Kb(n,e){return new Promise((t,s)=>{let o;try{o=new im.Worker(Jb,{eval:!0,workerData:{dir:n,plan:e}})}catch(a){s(a);return}let i=!1,r=a=>{i||(i=!0,o.terminate(),a())};o.once("message",a=>r(()=>t(Hb(a)))),o.once("error",a=>r(()=>s(a))),o.once("exit",a=>r(()=>s(new Error(`OTel worker exited before posting results (code ${a})`))))})}async function Vb(n,e,t){if(t<=e)return Buffer.alloc(0);let s=await pr.promises.open(n,"r");try{let o=t-e,i=Buffer.allocUnsafe(o),{bytesRead:r}=await s.read(i,0,o,e);return r===o?i:i.subarray(0,r)}finally{await s.close()}}async function sm(n,e){let t=[],s={};for(let o of e)try{let i=await Vb(is.join(n,o.name),o.start,o.end),r=i.lastIndexOf(zb);if(r===-1){s[o.name]=o.start;continue}for(let a of i.subarray(0,r+1).toString("utf8").split(`
|
|
141
|
+
`)){let l=$b(a);l&&t.push(l)}s[o.name]=o.start+r+1}catch{}return{records:t,consumed:s}}var co=null,nm=0,lo=new Map,Yb=3e4,Qb=1e6,ao=null;async function Xb(n,e){let t=new Map;for(let s of e)try{t.set(s,(await pr.promises.stat(is.join(n,s))).size)}catch{}return t}function Zb(n){if(co===null)return!0;for(let[e,t]of lo){let s=n.get(e);if(s===void 0||s<t)return!0}return!1}function eC(n,e){let t=[],s=0;for(let[o,i]of n){let r=e.get(o)??0;i>r&&(t.push({name:o,start:r,end:i}),s+=i-r)}return{plan:t,totalBytes:s}}async function tC(n,e,t){try{return t>Qb?await Kb(n,e):await sm(n,e)}catch{return sm(n,e)}}async function sC(){let n=Gb(),e;try{e=(await pr.promises.readdir(n)).filter(p=>p.endsWith(".jsonl"))}catch{return lo=new Map,new Map}let t=await Xb(n,e),s=Zb(t),o=s?new Map:co,i=s?new Map:lo,{plan:r,totalBytes:a}=eC(t,i);if(r.length===0)return lo=i,o;let l=await tC(n,r,a);for(let p of l.records)Wb(p,o);let d=new Map(i);for(let[p,g]of Object.entries(l.consumed))d.set(p,g);return lo=d,o}async function nC(){let n=Date.now();return co&&n-nm<Yb?co:ao||(ao=sC().then(e=>(co=e,nm=Date.now(),e)).finally(()=>{ao=null}),ao)}async function oC(n){let e=rn(n);return e?(await nC()).get(e)??null:null}var am=new qs;async function iC(n,e=am){let t=rn(n);if(!t)return null;let s=await e.getSessionUsage(t);return s||null}async function Ds(n,e=am){let t=await iC(n,e);return t||oC(n)}var rC={today:1,last7:7,last30:30,last90:90};function lm(n,e){if(n==="allTime")return null;if(n==="currentMonth")return new Date(e.getFullYear(),e.getMonth(),1);let t=rC[n];return t===void 0?null:new Date(e.getFullYear(),e.getMonth(),e.getDate()-t+1)}function gr(n,e){let t=lm(n,e);return t?[t.getFullYear(),String(t.getMonth()+1).padStart(2,"0"),String(t.getDate()).padStart(2,"0")].join("-"):"0000-00-00"}var fr=new Set(["VS Code","VS Code Insiders","VS Code Exploration","VS Code Server","VS Code Server (Insiders)","VSCodium","Visual Studio","JetBrains","Copilot CLI","Copilot CLI (App)","MS Scout (Copilot CLI)"]);function He(n,e){for(let[t,s]of Object.entries(e))O(t)||(n[t]||(n[t]={inputTokens:0,outputTokens:0,sessions:0}),n[t].inputTokens+=s.inputTokens,n[t].outputTokens+=s.outputTokens,s.cachedReadTokens!==void 0&&(n[t].cachedReadTokens=(n[t].cachedReadTokens??0)+s.cachedReadTokens),s.cacheCreationTokens!==void 0&&(n[t].cacheCreationTokens=(n[t].cacheCreationTokens??0)+s.cacheCreationTokens),s.cacheCreation1hTokens!==void 0&&(n[t].cacheCreation1hTokens=(n[t].cacheCreation1hTokens??0)+s.cacheCreation1hTokens),aC(n[t],s),s.thinkingTokens!==void 0&&(n[t].thinkingTokens=(n[t].thinkingTokens??0)+s.thinkingTokens),s.sessions!==void 0&&(n[t].sessions=(n[t].sessions??0)+s.sessions))}function aC(n,e){if(!e.autoRouting)return;let t={subset:{inputTokens:0,outputTokens:0,...n.autoRouting,sessions:0}};He(t,{subset:{...e.autoRouting,sessions:0}});let{sessions:s,...o}=t.subset;n.autoRouting=o}function pl(n,e,t){let s=n.autoRouting;return s?{autoRouting:{inputTokens:Math.round(s.inputTokens*e),outputTokens:Math.round(s.outputTokens*t),...s.cachedReadTokens!==void 0?{cachedReadTokens:Math.round(s.cachedReadTokens*e)}:{},...s.cacheCreationTokens!==void 0?{cacheCreationTokens:Math.round(s.cacheCreationTokens*e)}:{},...s.cacheCreation1hTokens!==void 0?{cacheCreation1hTokens:Math.round(s.cacheCreation1hTokens*e)}:{}}}:{}}function um(n,e){for(let[t,s]of Object.entries(e)){let o=n[t];if(!o?.autoRouting)continue;let i=o.inputTokens>0?o.autoRouting.inputTokens/o.inputTokens:0,r=o.outputTokens>0?o.autoRouting.outputTokens/o.outputTokens:0,{sessions:a,...l}=s;s.autoRouting=pl({...s,autoRouting:l},i,r).autoRouting}}function cm(n,e,t){if(e+t<=0)return n;let s=Object.values(n).reduce((h,y)=>h+y.inputTokens,0),o=Object.values(n).reduce((h,y)=>h+y.outputTokens,0),i=s>0?e/s:0,r=o>0?t/o:0,a={},l=0,d=0;for(let[h,y]of Object.entries(n)){let b=Math.round(y.inputTokens*i),T=Math.round(y.outputTokens*r);l+=b,d+=T,a[h]={inputTokens:b,outputTokens:T,...y.cachedReadTokens!==void 0?{cachedReadTokens:Math.round(y.cachedReadTokens*i)}:{},...y.cacheCreationTokens!==void 0?{cacheCreationTokens:Math.round(y.cacheCreationTokens*i)}:{},...y.cacheCreation1hTokens!==void 0?{cacheCreation1hTokens:Math.round(y.cacheCreation1hTokens*i)}:{},...pl(y,i,r),...y.sessions!==void 0?{sessions:y.sessions}:{sessions:0}}}let p=e-l,g=t-d;if(p!==0||g!==0){let h=a.unknown??{inputTokens:0,outputTokens:0,sessions:0};a.unknown={...h,inputTokens:h.inputTokens+p,outputTokens:h.outputTokens+g}}return a}function dm(n,e){if(e<=0)return n;let t=Object.values(n).reduce((a,l)=>a+l.inputTokens,0),s=Object.values(n).reduce((a,l)=>a+l.outputTokens,0),o=t+s;if(o===0)return Object.keys(n).length===0?{unknown:{inputTokens:e,outputTokens:0,sessions:0}}:n;if(o===e)return n;if(s>0&&s<=e)return cm(n,e-s,s);let i=Math.round(e*(t/o)),r=e-i;return cm(n,i,r)}function an(n,e){let t={};for(let[s,o]of Object.entries(n))t[s]={inputTokens:Math.round(o.inputTokens*e),outputTokens:Math.round(o.outputTokens*e),...o.cachedReadTokens!==void 0?{cachedReadTokens:Math.round(o.cachedReadTokens*e)}:{},...o.cacheCreationTokens!==void 0?{cacheCreationTokens:Math.round(o.cacheCreationTokens*e)}:{},...o.cacheCreation1hTokens!==void 0?{cacheCreation1hTokens:Math.round(o.cacheCreation1hTokens*e)}:{},...pl(o,e,e),sessions:0};return t}function gl(n){return fr.has(n)?"copilot":"provider"}var lC=[["anthropic","Anthropic"],["claude","Anthropic"],["codestral","Mistral AI"],["devstral","Mistral AI"],["gemini","Google"],["glm","Z.ai"],["goldeneye","xAI"],["google","Google"],["gpt","OpenAI"],["grok","xAI"],["magistral","Mistral AI"],["mai-","Microsoft"],["ministral","Mistral AI"],["mistral","Mistral AI"],["o1","OpenAI"],["o3","OpenAI"],["o4","OpenAI"],["pixtral","Mistral AI"],["qwen","Alibaba"],["raptor","xAI"]];function fl(n){let e=Mi(n);if(e)return e;let t=Js(n).flatMap(s=>lC.filter(([o])=>s.toLowerCase().startsWith(o))).at(0);return t?t[1]:"Other"}function hr(n,e){let t=Mi(e);return t||(fr.has(n)?"GitHub Copilot":fl(e))}function cC(n){return!n||typeof n!="string"?null:n.startsWith("toolu_")?"claude":n.startsWith("call_")?"gpt":null}function uC(n){let e=[],t=new Set;for(let s of n)if(s)try{let o=JSON.parse(s);if(!o||typeof o!="object")continue;e.push(o),o.type==="user.message_rendered"&&typeof o.data?.turnId=="string"&&t.add(o.data.turnId)}catch{}return{parsed:e,renderedTurnIds:t}}function dC(n,e){n.data?.conversationId&&(e.conversationId=String(n.data.conversationId)),n.data?.source&&(e.source=String(n.data.source)),e.turns=[],e.messageIds=[],e.turnStatusCounts={success:0,cancelled:0,failed:0,unknown:0},e.hasThinking=!1}function mC(n,e){e.result.interactions++,typeof n.timestamp=="string"&&e.firstUserTs===null&&(e.firstUserTs=n.timestamp);let t=n.data?.turnId,s=typeof t=="string"?t:null;s&&s!==e.currentTurnId&&(e.currentTurnId=s,e.currentMessageId=null,e.currentIterationNumber=null),typeof n.data?.content=="string"&&(typeof t!="string"||!e.renderedTurnIds.has(t))&&(e.inputTokens+=te(n.data.content))}function uo(n,e){if(!n.currentTurnId)return;let t=n.turnById.get(n.currentTurnId);t&&e(t)}function pC(n){return typeof n?.text=="string"&&n.text?n.text:typeof n?.content=="string"&&n.content?n.content:null}function gC(n,e){let t=pC(n.data);t&&(e.outputTokens+=te(t));let s=n.data?.thinking?.text;typeof s=="string"&&s&&(e.result.thinkingTokens+=te(s),e.hasThinking=!0,uo(e,o=>{o.hasThinking=!0})),typeof n.data?.messageId=="string"&&(e.currentMessageId=n.data.messageId,e.messageIds.push(n.data.messageId),uo(e,o=>{o.messageId=n.data.messageId})),typeof n.data?.iterationNumber=="number"&&(e.currentIterationNumber=n.data.iterationNumber,uo(e,o=>{o.iterationNumber=n.data.iterationNumber})),typeof n.timestamp=="string"&&(e.lastTurnTs=n.timestamp,uo(e,o=>{o.endTimestamp||(o.endTimestamp=n.timestamp)}))}function fC(n,e,t){e.currentTurnId&&(t.turnId=e.currentTurnId,e.toolCallByTurnId.has(e.currentTurnId)||e.toolCallByTurnId.set(e.currentTurnId,[]),e.toolCallByTurnId.get(e.currentTurnId).push(n||""),uo(e,s=>{s.toolCallCount++}))}function hC(n,e){e.sawToolCall=!0;let t=n.data,s=t?.toolCallId;if(!e.modelFromToolCallId){let r=cC(s);r&&(e.modelFromToolCallId=r)}let o=typeof t?.toolName=="string"?t.toolName:"unknown",i={toolName:o};if(fC(s,e,i),s&&(i.toolCallId=s),t?.arguments!==void 0)try{i.arguments=JSON.stringify(t.arguments)}catch{}e.result.toolCalls.push(i),e.result.toolCounts[o]=(e.result.toolCounts[o]||0)+1,typeof s=="string"&&e.toolCallById.set(s,i)}function yC(n,e){let t="";for(let s of n){let o=s;o&&typeof o.value=="string"&&(e.outputTokens+=te(o.value),t+=(t?`
|
|
142
|
+
`:"")+o.value)}return t}function _C(n,e){let t=n.data?.result?.result,s=Array.isArray(t)?yC(t,e):"",o=n.data?.toolCallId;if(typeof o!="string")return;let i=e.toolCallById.get(o);i&&(typeof n.data?.success=="boolean"&&(i.success=n.data.success),s&&(i.result=s),typeof n.data?.progressMessage=="string"&&(i.progressMessage=n.data.progressMessage))}function bC(n,e){typeof n.data?.model=="string"&&!e.modelFromTurnStart&&(e.modelFromTurnStart=n.data.model),typeof n.data?.turnId=="string"&&(e.currentTurnId=n.data.turnId,e.currentMessageId=null,e.currentIterationNumber=null,e.turnById.has(n.data.turnId)||e.turnById.set(n.data.turnId,{turnId:n.data.turnId,startTimestamp:typeof n.timestamp=="string"?n.timestamp:null,endTimestamp:null,status:null,turnStatus:null,messageId:null,iterationNumber:null,hasThinking:!1,toolCallCount:0}))}function CC(n,e){if(typeof n.timestamp=="string"&&(e.lastTurnTs=n.timestamp),typeof n.data?.turnId!="string")return;let t=e.turnById.get(n.data.turnId);if(!t)return;typeof n.timestamp=="string"&&(t.endTimestamp=n.timestamp);let s=typeof n.data?.status=="string"?n.data.status:null;if(t.turnStatus=typeof n.data?.turnStatus=="string"?n.data.turnStatus:null,!!s)switch(t.status=s,s.toLowerCase()){case"success":e.turnStatusCounts.success++;break;case"cancelled":e.turnStatusCounts.cancelled++;break;case"failed":e.turnStatusCounts.failed++;break;default:e.turnStatusCounts.unknown++;break}}function kC(n,e){switch(n.type){case"partition.created":dC(n,e.result);break;case"user.message":mC(n,e);break;case"user.message_rendered":typeof n.data?.renderedMessage=="string"&&(e.inputTokens+=te(n.data.renderedMessage));break;case"assistant.turn_start":bC(n,e);break;case"assistant.message":gC(n,e);break;case"tool.execution_start":hC(n,e);break;case"tool.execution_complete":_C(n,e);break;case"assistant.turn_end":CC(n,e);break}}function SC(){return{tokens:0,thinkingTokens:0,actualTokens:0,interactions:0,modelUsage:{},mode:"ask",modelHint:"unknown",firstInteraction:null,lastInteraction:null,source:null,conversationId:null,toolCalls:[],toolCounts:{},turns:[],messageIds:[],turnStatusCounts:{success:0,cancelled:0,failed:0,unknown:0},hasThinking:!1}}function TC(n,e){return{inputTokens:0,outputTokens:0,firstUserTs:null,lastTurnTs:null,modelFromTurnStart:null,modelFromToolCallId:null,sawToolCall:!1,toolCallById:new Map,renderedTurnIds:e,result:n,currentTurnId:null,currentMessageId:null,currentIterationNumber:null,turnById:new Map,messageIds:[],turnStatusCounts:{success:0,cancelled:0,failed:0,unknown:0},hasThinking:!1,toolCallByTurnId:new Map}}function wC(n,e){n.mode=e.sawToolCall?"agent":"ask",n.modelHint=e.modelFromTurnStart||e.modelFromToolCallId||"unknown",n.tokens=e.inputTokens+e.outputTokens,n.firstInteraction=e.firstUserTs,n.lastInteraction=e.lastTurnTs,n.hasThinking=e.hasThinking,n.turnStatusCounts={...e.turnStatusCounts},n.turns=Array.from(e.turnById.values()),n.messageIds=[...e.messageIds],n.tokens>0&&n.modelHint!=="unknown"&&!O(n.modelHint)&&(n.modelUsage[n.modelHint]={inputTokens:e.inputTokens,outputTokens:e.outputTokens,sessions:0})}function yr(n){let e=SC(),{parsed:t,renderedTurnIds:s}=uC(n.split(/\r?\n/)),o=TC(e,s);for(let i of t)kC(i,o);return wC(e,o),e}function mm(n){let e=n.split(/\r?\n/);for(let t of e)if(t&&t.indexOf("tool.execution_start")!==-1)try{let s=JSON.parse(t);if(s&&s.type==="tool.execution_start")return"agent"}catch{}return"ask"}function bl(n,e){n.firstUserPrompt||!e||!e.trim()||(n.firstUserPrompt=e.trim().slice(0,500))}function po(n){return n==null}function vC(n){if(typeof n!="object"||n===null||Array.isArray(n))return!1;let e=n;return po(e.id)||typeof e.id=="string"}function Cr(n){if(n===null||typeof n!="object"||Array.isArray(n))return!1;let e=n;return!(!po(e.requests)&&!Array.isArray(e.requests)||!po(e.mode)&&!vC(e.mode)||!po(e.creationDate)&&typeof e.creationDate!="number"||!po(e.lastMessageDate)&&typeof e.lastMessageDate!="number")}function ym(n){return typeof n.message?.text=="string"&&n.message.text.trim()?n.message.text:Array.isArray(n.message?.parts)?n.message.parts.map(e=>typeof e?.text=="string"?e.text:"").filter(Boolean).join(`
|
|
143
|
+
`).trim():""}function _m(n){if(!Array.isArray(n.response))return[];let e=[];for(let t of n.response){if(!t||t.kind!=="toolInvocationSerialized"&&t.kind!=="prepareToolInvocation")continue;let s=t.toolId||t.toolName||t.invocationMessage?.toolName||t.toolSpecificData?.kind||"unknown";e.push(s)}return e}function PC(n){let e=n.modeUsage.plan>0&&n.modeUsage.plan>=n.modeUsage.agent&&n.modeUsage.plan>=n.modeUsage.edit?.6:0,t=n.modeUsage.customAgent>0?Math.min(1,n.modeUsage.customAgent/Math.max(1,n.taskClassification.turnCount)):0;return{planMin:e,delegationMin:t}}function pm(n,e){return n==="Planning"?e.planMin:n==="Delegation"?e.delegationMin:0}function AC(n,e,t){t.planMin>0&&(n.taskClassification.primaryCategory="Planning",e.Planning=Math.max(e.Planning,t.planMin)),t.delegationMin>0&&(e.Delegation=Math.max(e.Delegation,t.delegationMin))}function xC(n,e,t){let s=t.planMin+t.delegationMin;if(s>=1){for(let r of os)e[r]=r==="Planning"?t.planMin/s:r==="Delegation"?t.delegationMin/s:0;return}let o=0;for(let r of os){let a=pm(r,t);o+=Math.max(0,e[r]-a)}let i=1-s;if(o>0){for(let r of os){let a=pm(r,t),l=Math.max(0,e[r]-a);e[r]=a+l*(i/o)}return}e[n.taskClassification.primaryCategory]=(e[n.taskClassification.primaryCategory]||0)+i}function DC(n,e,t){t>0&&e.Delegation>=e[n.taskClassification.primaryCategory]&&(n.taskClassification.primaryCategory="Delegation")}function Cl(n,e){n.taskClassification=e.length>0?Ud(e):xs();let t=n.taskClassification.categoryShares,s=PC(n);AC(n,t,s),xC(n,t,s),DC(n,t,s.delegationMin)}function EC(n){n.taskCategoryPrimarySessions||(n.taskCategoryPrimarySessions={}),n.taskCategoryWeightedSessions||(n.taskCategoryWeightedSessions={})}function RC(n,e){EC(n);let t=e.taskClassification?.primaryCategory??"Conversation";n.taskCategoryPrimarySessions[t]=(n.taskCategoryPrimarySessions[t]||0)+1;let s=e.taskClassification?.categoryShares;for(let o of os){let i=s?.[o]??0;i<=0||(n.taskCategoryWeightedSessions[o]=(n.taskCategoryWeightedSessions[o]||0)+i)}}function _r(n){return typeof n=="string"?n.trim().toLowerCase():""}function mo(n){let e=n.v;return e?.selectedModel??e?.inputState?.selectedModel}function IC(n,e){return n==="auto"||e==="auto"||e.includes("auto")||n.includes("/auto")}function UC(n,e,t,s,o){let i=t.includes("foundry")||t.includes("local")||s.includes("foundry")||s.includes("windows")||o.includes("foundry")||o.includes("windows")||n.includes("foundry");return n.includes("foundry")&&(n.includes("microsoft")||n.includes("aitk"))||e.includes("microsoft")&&i}function OC(n){let e=n?.metadata,t=e?.extension;return{family:_r(e?.family),vendor:_r(e?.vendor),extension:_r(t?.value),category:_r(e?.modelPickerCategory?.label),rawExtension:t?.value}}function Es(n,e,t){let s=(n??"").replace(/^copilot\//,"");if(!s)return;let{family:o,vendor:i,extension:r,category:a,rawExtension:l}=OC(e);IC(s,o)&&(t.modelSwitching.autoSessions=1),UC(s,i,o,r,a)&&(t.modelSwitching.foundryWindowsSessions=1),fl(s)==="Other"&&(t.modelSwitching.unknownProviderSessions=1,t.modelSwitching.unknownProviderModels.includes(s)||t.modelSwitching.unknownProviderModels.push(s)),l&&!t.modelSwitching.selectedModelExtensions.includes(l)&&t.modelSwitching.selectedModelExtensions.push(l)}function FC(n,e){if(n.type==="session.start"&&typeof n.data?.selectedModel=="string"){Es(n.data.selectedModel,mo(n),e);return}if(n.type==="session.model_change"&&typeof n.data?.newModel=="string"){Es(n.data.newModel,mo(n),e);return}let t=xm(n);if(t){Es(t,mo(n),e);return}let s=Dm(n);if(s){Es(s,mo(n),e);return}typeof n.model=="string"&&(Es(n.model,mo(n),e),Am(n,e))}function bm(n,e){n==="agent"?e.agent++:n==="edit"?e.edit++:n==="plan"?e.plan++:n==="customAgent"?e.customAgent++:e.ask++}function kl(n,e,t){if(lt(n)){e.mcpTools.total++;let s=Ct(n,t);e.mcpTools.byServer[s]=(e.mcpTools.byServer[s]||0)+1;let o=Fn(n);e.mcpTools.byTool[o]=(e.mcpTools.byTool[o]||0)+1}else e.toolCalls.total++,e.toolCalls.byTool[n]=(e.toolCalls.byTool[n]||0)+1}function Sl(n){let e=n.split("/").pop()?.split("\\").pop()??"",t=e.lastIndexOf(".");return t<=0?e.toLowerCase()||"unknown":e.slice(t+1).toLowerCase()}function NC(n){return{timestamp:n.timestamp,timings:n.result?.timings,waitTime:n.timeSpentWaiting}}function LC(n){if(!n.agent?.id)return{agentType:null};let e=n.agent.id;return e.includes("edit")?{agentType:"editsAgent"}:e.includes("default")?{agentType:"defaultAgent"}:e.includes("workspace")?{agentType:"workspaceAgent"}:{agentType:"other"}}function jC(n,e,t){if(!n||typeof n!="object")return;let s=n;if(typeof s.text=="string"&&s.text){let o=(s.text.match(/\n/g)??[]).length+(s.text.endsWith(`
|
|
144
|
+
`)?0:1);t.linesAdded+=o,t.languageUsage[e]||(t.languageUsage[e]={linesAdded:0,linesRemoved:0}),t.languageUsage[e].linesAdded+=o}if(s.range&&typeof s.range.startLineNumber=="number"&&typeof s.range.endLineNumber=="number"){let o=Math.max(0,s.range.endLineNumber-s.range.startLineNumber);t.linesRemoved+=o,t.languageUsage[e]||(t.languageUsage[e]={linesAdded:0,linesRemoved:0}),t.languageUsage[e].linesRemoved+=o}}function GC(n,e,t){for(let s of n)if(Array.isArray(s))for(let o of s)jC(o,e,t)}function BC(n,e){if(!n.uri)return;let t=n.uri.path||JSON.stringify(n.uri);e.editedFilePaths.push(t);let s=Sl(t),o=n;Array.isArray(o.edits)&&GC(o.edits,s,e)}function qC(n){let e={editedFilePaths:[],codeBlocks:0,applies:0,linesAdded:0,linesRemoved:0,languageUsage:{}};if(!n.response||!Array.isArray(n.response))return e;for(let t of n.response)t&&(t.kind==="textEditGroup"&&BC(t,e),t.kind==="codeblockUri"&&(e.codeBlocks++,t.isEdit===!0&&e.applies++));return e}function zC(n,e){for(let[t,s]of Object.entries(e))n[t]||(n[t]={linesAdded:0,linesRemoved:0}),n[t].linesAdded+=s.linesAdded,n[t].linesRemoved+=s.linesRemoved}function WC(n,e,t,s,o){n.timestamp!==void 0&&e.push(n.timestamp),n.timings&&t.push(n.timings),n.waitTime!==void 0&&s.push(n.waitTime),n.timestamp!==void 0&&n.timings?.totalElapsed!==void 0&&o.push({start:n.timestamp,end:n.timestamp+n.timings.totalElapsed})}function Cm(n,e,t,s,o,i,r){let a=0,l=0,d=0,p=0,g={};for(let h of n){if(!h)continue;WC(NC(h),s,o,i,r);let y=LC(h);y.agentType!==null&&e[y.agentType]++;let b=qC(h);for(let T of b.editedFilePaths)t.add(T);l+=b.codeBlocks,a+=b.applies,d+=b.linesAdded,p+=b.linesRemoved,zC(g,b.languageUsage)}return{totalApplies:a,totalCodeBlocks:l,totalLinesAdded:d,totalLinesRemoved:p,languageUsage:g}}function $C(n,e,t){if(!(!n.response||!Array.isArray(n.response))){for(let s of n.response)if(s&&(s.kind==="toolInvocationSerialized"||s.kind==="prepareToolInvocation")){let o=s.toolId||s.toolName||s.invocationMessage?.toolName||s.toolSpecificData?.kind||"unknown";kl(o,e,t)}}}function HC(n,e,t,s,o){if(!e.requestId)return;bm(t,s.modeUsage),e.agent?.id&&(s.toolCalls.total++,s.toolCalls.byTool[e.agent.id]=(s.toolCalls.byTool[e.agent.id]||0)+1),vl(e,s.contextReferences),$C(e,s,n.toolNameMap);let i={messageText:ym(e),toolNames:_m(e)};o.push(i)}function km(n,e,t){return It(n,t,e)}function JC(n){let e=0;for(let t=1;t<n.length;t++)n[t]!==n[t-1]&&e++;return e}function Sm(n){let e=n.selectedModel,t=n.inputState?.selectedModel;return(e?.identifier||e?.metadata?.id||t?.identifier||t?.metadata?.id||"gpt-4o").replace(/^copilot\//,"")}function KC(n,e,t,s){let o=Sm(e),i=e.selectedModel,r=e.inputState?.selectedModel;(i?.identifier||r?.identifier||"").replace(/^copilot\//,"")==="auto"&&(s.modelSwitching.autoSessions=1);let l=[];for(let p of t){if(!p||!p.requestId)continue;let g=km(p,o,n.modelPricing);l.push(g);let h=g.toLowerCase();h.includes("foundry")&&(h.includes("microsoft")||h.includes("aitk"))&&(s.modelSwitching.foundryWindowsSessions=1)}let d=[...new Set(l)];s.modelSwitching.uniqueModels=d,s.modelSwitching.modelCount=d.length,s.modelSwitching.totalRequests=l.length,s.modelSwitching.switchCount=JC(l),V(n.modelPricing,d,l,s)}function VC(n,e,t){let{effortByRequestId:s,defaultEffort:o,switchCount:i}=Lu(n);if(o===null&&s.size===0)return;let r={};for(let[,a]of s)r[a]=(r[a]||0)+1;s.size===0&&o!==null&&(r[o]=e.length),t.thinkingEffort={byEffort:r,switchCount:i,defaultEffort:o}}function YC(n,e,t,s){let o=[],i=e.inputState?.mode?fi(e.inputState.mode):"ask";if(e.inputState?.selections&&Array.isArray(e.inputState.selections)){for(let a of e.inputState.selections)if(a&&(a.startLineNumber!==a.endLineNumber||a.startColumn!==a.endColumn)){s.contextReferences.implicitSelection++;break}}let r=e.requests??[];for(let a of r)HC(n,a,i,s,o);KC(n,e,r,s),VC(t,r,s),Cl(s,o),Tm(r,Sm(e),n.modelPricing,s),Ml(s)}function QC(n){return(n.selectedModel?.identifier||n.selectedModel?.metadata?.id||"unknown").replace(/^copilot\//,"")}function Tm(n,e,t,s){let o=[];for(let i of n)i&&o.push({model:km(i,e,t),toolCalls:Gd(i),userMessage:typeof i.message?.text=="string"?i.message.text:void 0,assistantResponse:XC(i),timestamp:typeof i.timestamp=="number"?new Date(i.timestamp).toISOString():null});o.length!==0&&(s.modelEfficiency=dr(o),bl(s,o.find(i=>i.userMessage)?.userMessage),Tl(s,o))}function Tl(n,e){let t=$d(e);t.moments.length!==0&&(n.correctionMoments=t.moments,n.correctionCounts=t.counts)}function XC(n){if(!Array.isArray(n.response))return;let e="";for(let t of n.response){let{text:s,isThinking:o}=vs(t);s&&!o&&(e+=s)}return e||void 0}function ZC(n,e){if(n.agent?.id){let t=n.agent.id.toLowerCase();if(t.includes("edit"))return"edit";if(t.includes("agent"))return"agent"}if(e.mode?.id){let t=e.mode.id.toLowerCase();if(t.includes("agent"))return"agent";if(t.includes("edit"))return"edit"}return"ask"}function ek(n,e,t){if(n.kind==="toolInvocationSerialized"||n.kind==="prepareToolInvocation"){let s=n.toolId||n.toolName||n.invocationMessage?.toolName||"unknown";kl(s,e,t.toolNameMap)}if(n.kind==="mcpServersStarting"&&n.didStartServerIds)for(let s of n.didStartServerIds)e.mcpTools.total++,e.mcpTools.byServer[s]=(e.mcpTools.byServer[s]||0)+1;n.kind==="inlineReference"&&n.inlineReference&&wl([n],e.contextReferences)}function tk(n,e,t,s,o){let i=ZC(e,t);if(i==="agent"?s.modeUsage.agent++:i==="edit"?s.modeUsage.edit++:s.modeUsage.ask++,vl(e,s.contextReferences),e.response&&Array.isArray(e.response))for(let r of e.response)r&&ek(r,s,n);o.push({messageText:ym(e),toolNames:_m(e)})}function sk(n,e,t){if(!e.requests||!Array.isArray(e.requests))return;let s=[];for(let o of e.requests)tk(n,o,e,t,s);Cl(t,s),Tm(e.requests,QC(e),n.modelPricing,t)}function nk(n,e){for(let t of e.tiers.standard)n.modelSwitching.standardModels.includes(t)||n.modelSwitching.standardModels.push(t);for(let t of e.tiers.premium)n.modelSwitching.premiumModels.includes(t)||n.modelSwitching.premiumModels.push(t);for(let t of e.tiers.unknown)n.modelSwitching.unknownModels.includes(t)||n.modelSwitching.unknownModels.push(t)}function gm(n,e){for(let t of e??[])n.includes(t)||n.push(t)}function ok(n,e){for(let t of e.costBuckets?.low??[])n.modelSwitching.lowCostModels.includes(t)||n.modelSwitching.lowCostModels.push(t);for(let t of e.costBuckets?.medium??[])n.modelSwitching.mediumCostModels.includes(t)||n.modelSwitching.mediumCostModels.push(t);for(let t of e.costBuckets?.high??[])n.modelSwitching.highCostModels.includes(t)||n.modelSwitching.highCostModels.push(t)}function ik(n){let e=n.modelSwitching.modelsPerSession;e.length!==0&&(n.modelSwitching.averageModelsPerSession=e.reduce((t,s)=>t+s,0)/e.length,n.modelSwitching.maxModelsPerSession=Math.max(...e),n.modelSwitching.minModelsPerSession=Math.min(...e),n.modelSwitching.switchingFrequency=e.filter(t=>t>1).length/e.length*100)}function rk(n,e){if(e.modelSwitching||(e.modelSwitching={uniqueModels:[],modelCount:0,switchCount:0,autoSessions:0,foundryWindowsSessions:0,unknownProviderSessions:0,selectedModelExtensions:[],unknownProviderModels:[],tiers:{standard:[],premium:[],unknown:[]},hasMixedTiers:!1,standardRequests:0,premiumRequests:0,unknownRequests:0,totalRequests:0,costBuckets:{low:[],medium:[],high:[],unknown:[]},hasMixedCosts:!1,lowCostRequests:0,mediumCostRequests:0,highCostRequests:0}),e.modelSwitching.modelCount<=0)return;let t=e.modelSwitching;n.modelSwitching.totalSessions++,n.modelSwitching.modelsPerSession.push(t.modelCount),nk(n,t),ok(n,t),n.modelSwitching.autoSessions+=t.autoSessions||0,n.modelSwitching.foundryWindowsSessions+=t.foundryWindowsSessions||0,n.modelSwitching.unknownProviderSessions+=t.unknownProviderSessions||0,gm(n.modelSwitching.selectedModelExtensions,t.selectedModelExtensions),gm(n.modelSwitching.unknownProviderModels,t.unknownProviderModels),t.hasMixedTiers&&n.modelSwitching.mixedTierSessions++,t.hasMixedCosts&&n.modelSwitching.mixedCostSessions++,n.modelSwitching.standardRequests+=t.standardRequests||0,n.modelSwitching.premiumRequests+=t.premiumRequests||0,n.modelSwitching.unknownRequests+=t.unknownRequests||0,n.modelSwitching.lowCostRequests+=t.lowCostRequests||0,n.modelSwitching.mediumCostRequests+=t.mediumCostRequests||0,n.modelSwitching.highCostRequests+=t.highCostRequests||0,n.modelSwitching.totalRequests+=t.totalRequests||0,ik(n)}function ak(n,e){if(e.thinkingEffort){n.thinkingEffortUsage||(n.thinkingEffortUsage={byEffort:{},sessionCount:0,switchCount:0}),n.thinkingEffortUsage.sessionCount++,n.thinkingEffortUsage.switchCount+=e.thinkingEffort.switchCount;for(let[t,s]of Object.entries(e.thinkingEffort.byEffort))n.thinkingEffortUsage.byEffort[t]=(n.thinkingEffortUsage.byEffort[t]||0)+s}}var lk=["file","selection","implicitSelection","symbol","codebase","workspace","terminal","vscode","terminalLastCommand","terminalSelection","clipboard","changes","outputPanel","problemsPanel","pullRequest","copilotInstructions","agentsMd"];function fm(n,e){for(let[t,s]of Object.entries(e))n[t]=(n[t]||0)+s}function ck(n,e){let t=n.contextReferences,s=e.contextReferences;for(let o of lk)t[o]+=s[o]||0;t.codeContextLines=(t.codeContextLines||0)+(s.codeContextLines||0),fm(t.byKind,s.byKind),fm(t.byPath,s.byPath)}function uk(n,e){if(e.editScope){n.editScope.singleFileEdits+=e.editScope.singleFileEdits,n.editScope.multiFileEdits+=e.editScope.multiFileEdits,n.editScope.totalEditedFiles+=e.editScope.totalEditedFiles;let t=n.editScope.singleFileEdits+n.editScope.multiFileEdits;n.editScope.avgFilesPerSession=t>0?n.editScope.totalEditedFiles/t:0}if(e.applyUsage&&(n.applyUsage.totalApplies+=e.applyUsage.totalApplies,n.applyUsage.totalCodeBlocks+=e.applyUsage.totalCodeBlocks,n.applyUsage.applyRate=n.applyUsage.totalCodeBlocks>0?n.applyUsage.totalApplies/n.applyUsage.totalCodeBlocks*100:0),e.sessionDuration){n.sessionDuration.totalDurationMs+=e.sessionDuration.totalDurationMs,n.sessionDuration.activeDurationMs+=e.sessionDuration.activeDurationMs;let t=n.sessions;if(t>0){n.sessionDuration.avgDurationMs=n.sessionDuration.totalDurationMs/t;let s=n.sessionDuration.avgFirstProgressMs*(t-1);n.sessionDuration.avgFirstProgressMs=(s+e.sessionDuration.avgFirstProgressMs)/t;let o=n.sessionDuration.avgTotalElapsedMs*(t-1);n.sessionDuration.avgTotalElapsedMs=(o+e.sessionDuration.avgTotalElapsedMs)/t;let i=n.sessionDuration.avgWaitTimeMs*(t-1);n.sessionDuration.avgWaitTimeMs=(i+e.sessionDuration.avgWaitTimeMs)/t}}if(e.conversationPatterns){n.conversationPatterns.multiTurnSessions+=e.conversationPatterns.multiTurnSessions,n.conversationPatterns.singleTurnSessions+=e.conversationPatterns.singleTurnSessions,n.conversationPatterns.maxTurnsInSession=Math.max(n.conversationPatterns.maxTurnsInSession,e.conversationPatterns.maxTurnsInSession);let t=n.conversationPatterns.multiTurnSessions+n.conversationPatterns.singleTurnSessions;if(t>0){let o=n.conversationPatterns.avgTurnsPerSession*(t-1)+e.conversationPatterns.avgTurnsPerSession;n.conversationPatterns.avgTurnsPerSession=o/t}}e.agentTypes&&(n.agentTypes.editsAgent+=e.agentTypes.editsAgent,n.agentTypes.defaultAgent+=e.agentTypes.defaultAgent,n.agentTypes.workspaceAgent+=e.agentTypes.workspaceAgent,n.agentTypes.other+=e.agentTypes.other),ak(n,e),dk(n,e)}function dk(n,e){e.modelEfficiency&&(n.modelEfficiency||(n.modelEfficiency={}),Bd(n.modelEfficiency,e.modelEfficiency))}function mk(n,e){n.modeUsage.ask+=e.modeUsage.ask,n.modeUsage.edit+=e.modeUsage.edit,n.modeUsage.agent+=e.modeUsage.agent,n.modeUsage.plan+=e.modeUsage.plan,n.modeUsage.customAgent+=e.modeUsage.customAgent,n.modeUsage.cli+=e.modeUsage.cli,n.modeUsage.cliApp=(n.modeUsage.cliApp??0)+(e.modeUsage.cliApp??0),n.modeUsage.claudeDesktop=(n.modeUsage.claudeDesktop??0)+(e.modeUsage.claudeDesktop??0),n.modeUsage.claudeVsCode=(n.modeUsage.claudeVsCode??0)+(e.modeUsage.claudeVsCode??0)}function go(n,e){n.toolCalls.total+=e.toolCalls.total;for(let[t,s]of Object.entries(e.toolCalls.byTool))n.toolCalls.byTool[t]=(n.toolCalls.byTool[t]||0)+s;if(e.toolCalls.outputTokensByTool){n.toolCalls.outputTokensByTool||(n.toolCalls.outputTokensByTool={});for(let[t,s]of Object.entries(e.toolCalls.outputTokensByTool))n.toolCalls.outputTokensByTool[t]=(n.toolCalls.outputTokensByTool[t]||0)+s}mk(n,e),ck(n,e),n.mcpTools.total+=e.mcpTools.total;for(let[t,s]of Object.entries(e.mcpTools.byServer))n.mcpTools.byServer[t]=(n.mcpTools.byServer[t]||0)+s;for(let[t,s]of Object.entries(e.mcpTools.byTool))n.mcpTools.byTool[t]=(n.mcpTools.byTool[t]||0)+s;if(e.skillCalls){n.skillCalls||(n.skillCalls={total:0,byName:{}}),n.skillCalls.total+=e.skillCalls.total;for(let[t,s]of Object.entries(e.skillCalls.byName))n.skillCalls.byName[t]=(n.skillCalls.byName[t]||0)+s}rk(n,e),uk(n,e),RC(n,e),gk(n,e),pk(n,e)}function pk(n,e){e.cacheBreakage&&(n.cacheBreakage||(n.cacheBreakage=Zd()),em(n.cacheBreakage,e.cacheBreakage))}function gk(n,e){if(!e.correctionMoments||e.correctionMoments.length===0)return;n.corrections||(n.corrections={userCorrections:0,editRetries:0,editSelfCorrections:0,toolErrors:0,toolErrorsRetried:0,agentSelfCorrections:0,escalatedUserCorrections:0,sessionsWithMoments:0,sessionsWithUserCorrections:0,sessionsWithEscalations:0});let t=e.correctionCounts??Kd(e.correctionMoments);Vd(n.corrections,t),n.corrections.sessionsWithMoments++,t.userCorrections>0&&n.corrections.sessionsWithUserCorrections++,t.escalatedUserCorrections>0&&n.corrections.sessionsWithEscalations++}var fk=[[/#file/gi,"file"],[/#selection/gi,"selection"],[/#symbol/gi,"symbol"],[/#sym(?![:\w])/gi,"symbol"],[/#codebase/gi,"codebase"],[/#terminalLastCommand/gi,"terminalLastCommand"],[/#terminalSelection/gi,"terminalSelection"],[/#clipboard/gi,"clipboard"],[/#changes/gi,"changes"],[/#outputPanel/gi,"outputPanel"],[/#problemsPanel\b/gi,"problemsPanel"],[/#pr\b/gi,"pullRequest"],[/#pullRequest\b/gi,"pullRequest"],[/@workspace/gi,"workspace"],[/@terminal/gi,"terminal"],[/@vscode/gi,"vscode"]];function wm(n,e){for(let[t,s]of fk){let o=n.match(t);o&&(e[s]+=o.length)}}function hk(n){let e=n.kind;return e==="reference"&&n.reference?n.reference:e==="inlineReference"&&n.inlineReference?n.inlineReference:null}function yk(n,e,t){e.endsWith("/.github/copilot-instructions.md")||e.includes(".github/copilot-instructions.md")?t.copilotInstructions++:e.endsWith("/agents.md")||e.match(/\/agents\.md$/i)?t.agentsMd++:e.endsWith(".instructions.md")||e.includes(".instructions.md")?t.copilotInstructions++:t.file++;let s=n.length>100?"..."+n.substring(n.length-97):n;t.byPath[s]=(t.byPath[s]||0)+1}function _k(n,e,t){let s=n.fsPath||n.path;typeof s=="string"&&yk(s,J(s),t);let o=n.name;if(typeof o=="string"&&e==="reference"){t.symbol++;let i=`#sym:${o}`;t.byPath[i]=(t.byPath[i]||0)+1}}function wl(n,e){if(Array.isArray(n))for(let t of n){if(!t||typeof t!="object")continue;let s=t,o=s.kind;if(typeof o=="string"&&(e.byKind[o]=(e.byKind[o]||0)+1),o==="pullRequest"){e.pullRequest++;continue}let i=hk(s);i&&_k(i,o,e)}}function bk(n,e){let t=n.kind;if(typeof t=="string"&&(e.byKind[t]=(e.byKind[t]||0)+1),t==="image"&&(e.byKind["copilot.image"]=(e.byKind["copilot.image"]||0)+1),t==="file"&&e.file++,t==="generic"&&typeof n.name=="string"&&n.name.startsWith("sym:")){e.symbol++;let s=`#${n.name}`;e.byPath[s]=(e.byPath[s]||0)+1}}function Mm(n,e){if(!n||typeof n!="object")return;let t=n;if(Array.isArray(t.variables))for(let s of t.variables)!s||typeof s!="object"||bk(s,e)}function Ml(n){let e=n.modeUsage.ask+n.modeUsage.edit+n.modeUsage.agent+n.modeUsage.cli;n.conversationPatterns={multiTurnSessions:e>1?1:0,singleTurnSessions:e===1?1:0,avgTurnsPerSession:e,maxTurnsInSession:e}}function Ck(n,e){if(n.kind!=="dynamic")return;let t=n.data?.range,s=typeof t?.startLineNumber=="number"?t.startLineNumber:0,o=typeof t?.endLineNumber=="number"?t.endLineNumber:0;o>=s&&o>0&&(e.codeContextLines=(e.codeContextLines||0)+(o-s+1))}function kk(n,e){if(n.kind!=="prompt")return;typeof n.slashPromptCommand?.command=="string"&&(e.byKind.prompt=(e.byKind.prompt||0)+1)}function Sk(n,e){if(!n||typeof n!="object")return;let t=n;typeof t.text=="string"&&wm(t.text,e),Ck(t,e),kk(t,e)}function Tk(n,e){typeof n.text=="string"&&wm(n.text,e);let t=n.parts;if(Array.isArray(t))for(let s of t)Sk(s,e)}function vl(n,e){if(!n||typeof n!="object")return;let t=n,s=t.message;s&&typeof s=="object"&&Tk(s,e);let o=t.contentReferences;Array.isArray(o)&&wl(o,e);let i=t.variableData;i!==void 0&&Mm(i,e)}async function fo(n){try{let t=(await ln.promises.readFile(n,"utf8")).trim().split(`
|
|
145
|
+
`),s=[];for(let o of t)if(o.trim())try{s.push(JSON.parse(o))}catch{}return s}catch{return[]}}function V(n,e,t,s){let o=[],i=[],r=[];for(let T of e){let E=Ps(T,n);E==="standard"?o.push(T):E==="premium"?i.push(T):r.push(T)}s.modelSwitching.tiers={standard:o,premium:i,unknown:r},s.modelSwitching.hasMixedTiers=o.length>0&&i.length>0;let a={low:[],medium:[],high:[],unknown:[]};for(let T of e){let E=Wn(T,n);E==="low"?a.low.push(T):E==="medium"?a.medium.push(T):E==="high"?a.high.push(T):a.unknown.push(T)}s.modelSwitching.costBuckets=a;let l=[a.low,a.medium,a.high].filter(T=>T.length>0).length;s.modelSwitching.hasMixedCosts=l>=2;let d=0,p=0,g=0,h=0,y=0,b=0;for(let T of t){let E=Ps(T,n);E==="standard"?d++:E==="premium"?p++:g++;let P=Wn(T,n);P==="low"?h++:P==="medium"?y++:P==="high"&&b++}s.modelSwitching.standardRequests=d,s.modelSwitching.premiumRequests=p,s.modelSwitching.unknownRequests=g,s.modelSwitching.lowCostRequests=h,s.modelSwitching.mediumCostRequests=y,s.modelSwitching.highCostRequests=b}function yl(n,e,t){let s=Ps(n,t);s==="standard"?e.standard++:s==="premium"?e.premium++:e.unknown++}function _l(n,e,t){let s=Wn(n,t);s==="low"?e.low++:s==="medium"?e.medium++:s==="high"?e.high++:e.unknown++}function vm(n,e){e.modelSwitching.standardRequests=n.standard,e.modelSwitching.premiumRequests=n.premium,e.modelSwitching.unknownRequests=n.unknown,e.modelSwitching.totalRequests=n.standard+n.premium+n.unknown}function Pm(n,e){e.modelSwitching.lowCostRequests=n.low,e.modelSwitching.mediumCostRequests=n.medium,e.modelSwitching.highCostRequests=n.high,e.modelSwitching.totalRequests=n.low+n.medium+n.high+n.unknown}function wk(n,e){let t=[],s=[],o=[];for(let i of n){let r=Ps(i,e);r==="standard"?t.push(i):r==="premium"?s.push(i):o.push(i)}return{standard:t,premium:s,unknown:o}}function Mk(n,e){if(n.model==="auto"){e.modelSwitching.autoSessions=1;return}if(n.model&&n.resolvedModel&&n.model!==n.resolvedModel){e.modelSwitching.autoSessions=1;return}if(n.result?.metadata){if(n.result.metadata.model==="auto"){e.modelSwitching.autoSessions=1;return}if(n.result.metadata.model&&n.result.metadata.resolvedModel&&n.result.metadata.model!==n.result.metadata.resolvedModel){e.modelSwitching.autoSessions=1;return}}}function Am(n,e){if(!n.model)return;let t=String(n.model).toLowerCase();t.includes("foundry")&&(t.includes("microsoft")||t.includes("aitk"))&&(e.modelSwitching.foundryWindowsSessions=1)}function vk(n,e,t){if(!n.requests||!Array.isArray(n.requests))return;let s=null,o=0,i={standard:0,premium:0,unknown:0},r={low:0,medium:0,high:0,unknown:0};for(let a of n.requests){let l=It(a,t);s&&l!==s&&o++,s=l,yl(l,i,t),_l(l,r,t),Mk(a,e),Am(a,e)}e.modelSwitching.switchCount=o,vm(i,e),Pm(r,e)}function Pk(n,e){Es(n.selectedModel?.identifier||n.selectedModel?.metadata?.id,n.selectedModel,e),Es(n.inputState?.selectedModel?.identifier||n.inputState?.selectedModel?.metadata?.id,n.inputState?.selectedModel,e)}function xm(n){if(n.kind!==0)return null;let e=n.v;if(!e)return null;let t=e.selectedModel,s=e.inputState?.selectedModel,o=t?.identifier||t?.metadata?.id||s?.identifier||s?.metadata?.id;return o?o.replace(/^copilot\//,""):null}function Dm(n){if(n.kind!==2||n.k?.[0]!=="selectedModel")return null;let e=n.v,t=e?.identifier||e?.metadata?.id;return t?t.replace(/^copilot\//,""):null}function Ak(n,e){let t=xm(n);if(t)return t;let s=Dm(n);return s||(n.type==="session.start"&&typeof n.data?.selectedModel=="string"?n.data.selectedModel:n.type==="session.model_change"&&typeof n.data?.newModel=="string"?n.data.newModel:e)}function xk(n,e,t){return It(n,t,e)}function Dk(n,e,t,s,o){if(n.type==="user.message"){let i=n.model||s;yl(i,e,o),_l(i,t,o);return}if(!(n.kind!==2||n.k?.[0]!=="requests"||!Array.isArray(n.v)))for(let i of n.v){let r=xk(i,s,o);yl(r,e,o),_l(r,t,o)}}function Ek(n,e,t){let s={standard:0,premium:0,unknown:0},o={low:0,medium:0,high:0,unknown:0},i="unknown";for(let r of n)if(r.trim())try{let a=JSON.parse(r);i=Ak(a,i),FC(a,e),Dk(a,s,o,i,t)}catch{}vm(s,e),Pm(o,e)}async function Em(n,e,t,s,o){try{let i=await kr(n,e,s,o),r=i?Object.keys(i).length:0;if(!i||r===0)return;let a=Object.keys(i);t.modelSwitching.uniqueModels=a,t.modelSwitching.modelCount=a.length;let l=wk(a,n.modelPricing);t.modelSwitching.tiers=l,t.modelSwitching.hasMixedTiers=l.standard.length>0&&l.premium.length>0;let d={low:[],medium:[],high:[],unknown:[]};for(let y of a){let b=Wn(y,n.modelPricing);b==="low"?d.low.push(y):b==="medium"?d.medium.push(y):b==="high"?d.high.push(y):d.unknown.push(y)}t.modelSwitching.costBuckets=d;let p=[d.low,d.medium,d.high].filter(y=>y.length>0).length;t.modelSwitching.hasMixedCosts=p>=2;let g=s??await ln.promises.readFile(e,"utf8");if(Vs(g))return;if(e.endsWith(".jsonl")||Ut(g))Ek(g.trim().split(`
|
|
146
|
+
`),t,n.modelPricing);else{let y=o!==void 0?o:JSON.parse(g);if(!Cr(y)){n.warn(`Unexpected session format in ${e}`);return}Pk(y,t),vk(y,t,n.modelPricing)}}catch(i){n.warn(`Error calculating model switching for ${e}: ${i}`)}}function Rk(n){if(n.length===0)return 0;let e=[...n].sort((i,r)=>i.start-r.start),t=0,s=e[0].start,o=e[0].end;for(let i=1;i<e.length;i++){let{start:r,end:a}=e[i];r<=o?o=Math.max(o,a):(t+=o-s,s=r,o=a)}return t+=o-s,t}function Rm(n,e){for(let[t,s]of Object.entries(e))n[t]||(n[t]={linesAdded:0,linesRemoved:0}),n[t].linesAdded+=s.linesAdded,n[t].linesRemoved+=s.linesRemoved}function Ik(n,e){let t=!1;if(n.length>0)try{let i=JSON.parse(n[0]);i&&typeof i.kind=="number"&&(t=!0)}catch{}if(!t)return;let s={};for(let i of n)try{s=zn(s,JSON.parse(i))}catch{}s.creationDate!==void 0&&e.timestamps.push(s.creationDate),s.lastMessageDate!==void 0&&e.timestamps.push(s.lastMessageDate);let o=Cm(s.requests||[],e.agentCounts,e.editedFiles,e.timestamps,e.timingsData,e.waitTimes,e.activeIntervals);e.totalApplies=o.totalApplies,e.totalCodeBlocks=o.totalCodeBlocks,e.totalLinesAdded=o.totalLinesAdded,e.totalLinesRemoved=o.totalLinesRemoved,Rm(e.allLanguageUsage,o.languageUsage)}function Uk(n,e,t,s){if(!Cr(t))return n.warn(`Unexpected session format in ${e}`),!1;t.creationDate&&s.timestamps.push(t.creationDate),t.lastMessageDate&&s.timestamps.push(t.lastMessageDate);let o=Cm(t.requests??[],s.agentCounts,s.editedFiles,s.timestamps,s.timingsData,s.waitTimes,s.activeIntervals);return s.totalApplies=o.totalApplies,s.totalCodeBlocks=o.totalCodeBlocks,s.totalLinesAdded=o.totalLinesAdded,s.totalLinesRemoved=o.totalLinesRemoved,Rm(s.allLanguageUsage,o.languageUsage),!0}function Ok(n,e){let t=e.editedFiles.size>0?1:0;n.editScope={singleFileEdits:e.editedFiles.size===1?1:0,multiFileEdits:e.editedFiles.size>1?1:0,totalEditedFiles:e.editedFiles.size,avgFilesPerSession:t>0?e.editedFiles.size/t:0,linesAdded:e.totalLinesAdded,linesRemoved:e.totalLinesRemoved,...Object.keys(e.allLanguageUsage).length>0?{languageUsage:e.allLanguageUsage}:{}},n.applyUsage={totalApplies:e.totalApplies,totalCodeBlocks:e.totalCodeBlocks,applyRate:e.totalCodeBlocks>0?e.totalApplies/e.totalCodeBlocks*100:0};let s=e.timestamps.length>=2?Math.max(...e.timestamps)-Math.min(...e.timestamps):0,o=e.timingsData.length>0?e.timingsData.reduce((l,d)=>l+(d.firstProgress||0),0)/e.timingsData.length:0,i=e.timingsData.length>0?e.timingsData.reduce((l,d)=>l+(d.totalElapsed||0),0)/e.timingsData.length:0,r=e.waitTimes.length>0?e.waitTimes.reduce((l,d)=>l+d,0)/e.waitTimes.length:0,a=Rk(e.activeIntervals);n.sessionDuration={totalDurationMs:s,avgDurationMs:s,avgFirstProgressMs:o,avgTotalElapsedMs:i,avgWaitTimeMs:r,activeDurationMs:a},Ml(n),n.agentTypes=e.agentCounts}function hm(n){return n.length>0?(n.match(/\n/g)??[]).length+(n.endsWith(`
|
|
147
|
+
`)?0:1):0}function Fk(n,e){let t=n.data?.toolName,s=n.data?.arguments??{},o=n.data?.toolCallId,i=s.path;if(typeof i!="string"||!i||typeof o!="string"||t!=="edit"&&t!=="create")return;let r=t==="edit"?s.new_str:s.file_text,a=t==="edit"?s.old_str:void 0,l=typeof r=="string"?r:"",d=typeof a=="string"?a:"";e.set(o,{filePath:i,added:hm(l),removed:hm(d)})}function Nk(n,e,t){if(n.data?.success!==!0)return;let s=n.data?.toolCallId;if(typeof s!="string")return;let o=e.get(s);if(!o)return;e.delete(s),t.totalLinesAdded+=o.added,t.totalLinesRemoved+=o.removed,t.editedFiles.add(o.filePath);let i=Sl(o.filePath);t.allLanguageUsage[i]||(t.allLanguageUsage[i]={linesAdded:0,linesRemoved:0}),t.allLanguageUsage[i].linesAdded+=o.added,t.allLanguageUsage[i].linesRemoved+=o.removed}function Lk(n,e){let t=new Map;for(let s of n)try{let o=JSON.parse(s);o.type==="tool.execution_start"?Fk(o,t):o.type==="tool.execution_complete"&&Nk(o,t,e)}catch{}}async function Pl(n,e,t,s,o){try{let i=s??await ln.promises.readFile(e,"utf8");if(Vs(i))return;let r=e.endsWith(".jsonl")||Ut(i),a={totalApplies:0,totalCodeBlocks:0,totalLinesAdded:0,totalLinesRemoved:0,allLanguageUsage:{},editedFiles:new Set,timestamps:[],timingsData:[],waitTimes:[],activeIntervals:[],agentCounts:{editsAgent:0,defaultAgent:0,workspaceAgent:0,other:0}};if(r){let l=i.trim().split(`
|
|
148
|
+
`).filter(d=>d.trim());Ik(l,a),Im(l)||Lk(l,a)}else{let l=o!==void 0?o:JSON.parse(i);if(!Uk(n,e,l,a))return}Ok(t,a)}catch(i){n.warn(`Error tracking enhanced metrics from ${e}: ${i}`)}}function ho(n,e){n.skillCalls||(n.skillCalls={total:0,byName:{}}),n.skillCalls.total++,n.skillCalls.byName[e]=(n.skillCalls.byName[e]||0)+1}function $(){return{toolCalls:{total:0,byTool:{}},modeUsage:{ask:0,edit:0,agent:0,plan:0,customAgent:0,cli:0},contextReferences:G(),mcpTools:{total:0,byServer:{},byTool:{}},taskClassification:xs(),skillCalls:{total:0,byName:{}},modelSwitching:{uniqueModels:[],modelCount:0,switchCount:0,autoSessions:0,foundryWindowsSessions:0,unknownProviderSessions:0,selectedModelExtensions:[],unknownProviderModels:[],tiers:{standard:[],premium:[],unknown:[]},hasMixedTiers:!1,standardRequests:0,premiumRequests:0,unknownRequests:0,totalRequests:0,costBuckets:{low:[],medium:[],high:[],unknown:[]},hasMixedCosts:!1,lowCostRequests:0,mediumCostRequests:0,highCostRequests:0}}}function jk(n,e,t){let s=n.efficiencyTurns[n.efficiencyTurns.length-1];s||(s={model:n.defaultModel,toolCalls:[]},n.efficiencyTurns.push(s));let o={toolName:e,arguments:t?JSON.stringify(t):void 0};return s.toolCalls.push(o),o}function Im(n){if(n.length===0)return!1;try{let e=JSON.parse(n[0]);return e&&typeof e.kind=="number"}catch{return!1}}function Gk(n,e,t){let s={};for(let o of e)try{let i=JSON.parse(o);s=zn(s,i)}catch{}YC(n,s,e,t)}function Um(n,e){for(let t of n){let s=t;if(s&&(s.startLineNumber!==s.endLineNumber||s.startColumn!==s.endColumn)){e.implicitSelection++;break}}}function Bk(n,e,t){n.kind!==0||!n.v?.inputState?.mode||(t.sessionMode=fi(n.v.inputState.mode),Array.isArray(n.v?.inputState?.selections)&&Um(n.v.inputState.selections,e.contextReferences))}function qk(n,e,t){n.kind===1&&(n.k?.includes("mode")&&n.v&&(t.sessionMode=fi(n.v)),n.k?.includes("selections")&&Array.isArray(n.v)&&Um(n.v,e.contextReferences),n.k?.includes("contentReferences")&&Array.isArray(n.v)&&wl(n.v,e.contextReferences),n.k?.includes("variableData")&&n.v&&Mm(n.v,e.contextReferences))}function Om(n){return n.toolId||n.toolName||n.invocationMessage?.toolName||n.toolSpecificData?.kind||"unknown"}function zk(n,e){for(let t of n)if(t&&(t.kind==="toolInvocationSerialized"||t.kind==="prepareToolInvocation")){e.toolCalls.total++;let s=Om(t);e.toolCalls.byTool[s]=(e.toolCalls.byTool[s]||0)+1}}function Wk(n,e){for(let t of n){let s=t;if(s&&s.kind==="toolInvocationSerialized"){e.toolCalls.total++;let o=Om(s);e.toolCalls.byTool[o]=(e.toolCalls.byTool[o]||0)+1}}}function $k(n,e,t){n.requestId&&bm(t,e.modeUsage),n.agent?.id&&(e.toolCalls.total++,e.toolCalls.byTool[n.agent.id]=(e.toolCalls.byTool[n.agent.id]||0)+1),vl(n,e.contextReferences),n.response&&Array.isArray(n.response)&&zk(n.response,e)}function Hk(n,e,t,s){if(n.kind===2){if(n.k?.[0]==="requests"&&Array.isArray(n.v))for(let o of n.v)$k(o,e,t.sessionMode);n.k?.includes("response")&&Array.isArray(n.v)&&Wk(n.v,e)}}function Jk(n,e){typeof n.selectedModel=="string"&&(e.defaultModel=n.selectedModel),typeof n.reasoningEffort=="string"&&(e.defaultEffort=n.reasoningEffort)}function Kk(n,e){n==="agent"?e.modeUsage.agent++:n==="ask"?e.modeUsage.ask++:e.modeUsage.cli++}function Vk(n,e){if(Array.isArray(n))for(let t of n){if(!t||typeof t!="object")continue;let s=t.displayName;typeof s=="string"&&(/clipboard\.png$/i.test(s)?e.byKind["copilot.image"]=(e.byKind["copilot.image"]||0)+1:(/^\d+ lines$/.test(s)||/\.[a-z0-9]+$/i.test(s))&&e.file++)}}function Yk(n){if(typeof n!="string")return null;let e=n.trim().match(/^\/([a-zA-Z0-9_-]+)(?:\s|$)/);return e?e[1]:null}function Qk(n){let e=n.data?.content;if(typeof e!="string")return;let t=n.data?.source;return typeof t=="string"&&(t.startsWith("skill-")||t.startsWith("agent-"))||/^\s*<(?:skill-context|cross_session_message|system_(?:notification|reminder))\b/i.test(e)?void 0:e}function Xk(n,e){return{model:n.model||e.defaultModel,toolCalls:[],userMessage:Qk(n),timestamp:typeof n.timestamp=="string"?n.timestamp:null}}function Zk(n,e,t,s){if(n.type==="session.start"&&n.data&&Jk(n.data,e),n.type==="session.model_change"&&typeof n.data?.newModel=="string"&&(e.defaultModel=n.data.newModel),eS(n,e),n.type==="user.message"){e.requestCount++;let o=typeof n.data?.reasoningEffort=="string"?n.data.reasoningEffort:e.defaultEffort;o&&(e.effortByRequest[o]=(e.effortByRequest[o]||0)+1),e.efficiencyTurns.push(Xk(n,e)),Vk(n.data?.attachments,t.contextReferences),Kk(s,t);let i=Yk(n.data?.content);i&&ho(t,i)}}function eS(n,e){if(n.type!=="assistant.message")return;let t=n.data?.content,s=e.efficiencyTurns[e.efficiencyTurns.length-1];typeof t=="string"&&t&&s&&(s.assistantResponse=(s.assistantResponse??"")+t)}function tS(n){return typeof n?.data?.content=="string"&&n.data.content.trim()?n.data.content:typeof n?.data?.message=="string"&&n.data.message.trim()?n.data.message:typeof n?.content=="string"&&n.content.trim()?n.content:""}function sS(n){if(!n||typeof n!="object")return;let e=n,t=["command","cmd","script"];for(let s of t){let o=e[s];if(typeof o=="string"&&o.trim())return o}}function nS(n,e,t){let s=e;if(n.type==="user.message"&&(s&&t.push(s),s={messageText:tS(n),toolNames:[],shellCommands:[]}),n.type!=="tool.call"&&n.type!=="tool.execution_start"&&n.type!=="tool.result")return s;let o=n.data?.toolName||n.toolName||"unknown";s||(s={toolNames:[],shellCommands:[]}),s.toolNames=s.toolNames??[],s.toolNames.push(o);let i=sS(n.data?.arguments);return i&&(s.shellCommands=s.shellCommands??[],s.shellCommands.push(i)),s}function oS(n,e,t){if(n.type!=="tool.call"&&n.type!=="tool.result"&&n.type!=="tool.execution_start")return;let s=n.data?.toolName||n.toolName||"unknown";if(kl(s,e,t),n.type==="tool.execution_start"&&s==="skill"){let o=n.data?.arguments?.skill;typeof o=="string"&&o.trim()&&ho(e,o.trim())}}function iS(n,e){if(n.type!=="mcp.tool.call"&&!n.data?.mcpServer)return;e.mcpTools.total++;let t=n.data?.mcpServer||"unknown",s=n.data?.toolName||n.toolName||"unknown";e.mcpTools.byServer[t]=(e.mcpTools.byServer[t]||0)+1;let o=Fn(s);e.mcpTools.byTool[o]=(e.mcpTools.byTool[o]||0)+1}function rS(n,e,t){oS(n,e,t),iS(n,e)}function hl(n){if(!n)return 0;let e=n.split(`
|
|
149
|
+
`);return e[e.length-1]===""&&e.pop(),e.length}function Fm(n){n.editScope||(n.editScope={singleFileEdits:0,multiFileEdits:0,totalEditedFiles:0,avgFilesPerSession:0,linesAdded:0,linesRemoved:0})}function aS(n,e){let{toolCallId:t,toolName:s,arguments:o}=n.data??{};if(t&&s){let i=jk(e,s,o);e.pendingToolCalls.set(t,{toolName:s,args:o??{},effCall:i})}}function lS(n,e,t){let s=n.toolName==="edit"?hl(n.args.new_str??""):hl(n.args.file_text??""),o=n.toolName==="edit"?hl(n.args.old_str??""):0;Fm(t),t.editScope.linesAdded=(t.editScope.linesAdded??0)+s,t.editScope.linesRemoved=(t.editScope.linesRemoved??0)+o;let i=n.args.path??"";e.editedFilePaths.add(i);let r=Sl(i);t.editScope.languageUsage||(t.editScope.languageUsage={}),t.editScope.languageUsage[r]||(t.editScope.languageUsage[r]={linesAdded:0,linesRemoved:0}),t.editScope.languageUsage[r].linesAdded+=s,t.editScope.languageUsage[r].linesRemoved+=o}function cS(n){return typeof n=="string"?n:Array.isArray(n)?n.filter(e=>e?.type==="text"&&typeof e.text=="string").map(e=>e.text).join(""):""}function uS(n,e,t){let{toolCallId:s,success:o,result:i}=n.data??{},r=s?e.pendingToolCalls.get(s):void 0;if(s&&e.pendingToolCalls.delete(s),!r||(dS(r,o),o&&(r.toolName==="edit"||r.toolName==="create")&&lS(r,e,t),!i?.content||lt(r.toolName)))return;let a=cS(i.content);if(!a)return;let l=te(a);t.toolCalls.outputTokensByTool||(t.toolCalls.outputTokensByTool={}),t.toolCalls.outputTokensByTool[r.toolName]=(t.toolCalls.outputTokensByTool[r.toolName]||0)+l}function dS(n,e){e===!1&&n.effCall&&(n.effCall.isError=!0)}function mS(n,e,t){n.type==="tool.execution_start"?aS(n,e):n.type==="tool.execution_complete"&&uS(n,e,t)}function pS(n,e){if(n.editedFilePaths.size===0)return;Fm(e);let t=n.editedFilePaths.size;e.editScope.totalEditedFiles=t,e.editScope.singleFileEdits=t===1?1:0,e.editScope.multiFileEdits=t>1?1:0,e.editScope.avgFilesPerSession=t}function gS(n,e,t,s,o,i){Bk(n,e,t),qk(n,e,t),Hk(n,e,t,i),Zk(n,s,e,o),rS(n,e,i),mS(n,s,e)}function fS(n,e){if(n.defaultEffort===null&&Object.keys(n.effortByRequest).length===0)return;let t=Object.keys(n.effortByRequest).length>0?n.effortByRequest:n.defaultEffort!==null?{[n.defaultEffort]:n.requestCount}:{};e.thinkingEffort={byEffort:t,switchCount:0,defaultEffort:n.defaultEffort}}async function hS(n,e,t,s,o){let i=[],r={sessionMode:"ask"},a={defaultModel:"unknown",defaultEffort:null,requestCount:0,effortByRequest:{},pendingToolCalls:new Map,editedFilePaths:new Set,efficiencyTurns:[]},d=nr(e)?mm(s):null,p=null;for(let g of t)if(g.trim())try{let h=JSON.parse(g);p=nS(h,p,i),gS(h,o,r,a,d,n.toolNameMap)}catch{}p&&i.push(p),pS(a,o),fS(a,o),Cl(o,i),a.efficiencyTurns.length>0&&(o.modelEfficiency=dr(a.efficiencyTurns),bl(o,a.efficiencyTurns.find(g=>g.userMessage)?.userMessage),Tl(o,a.efficiencyTurns)),await Em(n,e,o,s),await Pl(n,e,o,s),Ml(o)}async function yS(n,e,t,s){let o=t.trim().split(`
|
|
150
|
+
`).filter(i=>i.trim());if(Im(o)){Gk(n,o,s),await Pl(n,e,s,t),s.taskClassification||(s.taskClassification=xs());return}await hS(n,e,o,t,s)}async function _S(n,e,t,s,o){let i=s!==void 0?s:JSON.parse(t);if(!Cr(i)){n.warn(`Unexpected session format in ${e}`);return}sk(n,i,o),await Em(n,e,o,t,s),await Pl(n,e,o,t,s)}async function bS(n,e,t){if(!(t.modelEfficiency&&t.correctionMoments&&t.correctionCounts&&t.firstUserPrompt)&&n.buildTurns)try{let{turns:s}=await n.buildTurns(e);if(!t.modelEfficiency){let o=dr(s);Object.keys(o).length>0&&(t.modelEfficiency=o)}t.correctionMoments||Tl(t,s),bl(t,s.find(o=>o.userMessage)?.userMessage)}catch{}}async function CS(n,e){if(e.modeUsage.cli===0||!Cd(n))return;let t=br.join(br.dirname(n),"workspace.yaml");if(!await Ue(t))return;let s=await Pe(t,"usageAnalysis");if(s===void 0)return;let o=s.match(/^client_name:\s*(.+)$/m);o&&On(o[1].trim())&&(e.modeUsage.cliApp=e.modeUsage.cli,e.modeUsage.cli=0)}async function Nm(n,e,t,s){let o=$();try{let i=n.ecosystems.find(l=>l.handles(e));if(i&&fu(i)){let l=await i.analyzeUsage(e,{modelPricing:n.modelPricing,toolNameMap:n.toolNameMap});return l.taskClassification||(l.taskClassification=xs()),await bS(i,e,l),l}if(e.startsWith("windsurf://")||e.startsWith("devin://"))return o.taskClassification=xs(),o;let r=t??await ln.promises.readFile(e,"utf8");e.endsWith(".jsonl")||Ut(r)?await yS(n,e,r,o):await _S(n,e,r,s,o)}catch(i){n.warn(`Error analyzing session usage from ${e}: ${i}`)}return o.taskClassification||(o.taskClassification=xs()),await CS(e,o),o}function Lm(n,e,t){if(n.result?.usage){let s=n.result.usage;return t[e].inputTokens+=typeof s.promptTokens=="number"?s.promptTokens:0,t[e].outputTokens+=typeof s.completionTokens=="number"?s.completionTokens:0,!0}return typeof n.result?.promptTokens=="number"&&typeof n.result?.outputTokens=="number"?(t[e].inputTokens+=n.result.promptTokens,t[e].outputTokens+=n.result.outputTokens,!0):n.result?.metadata&&typeof n.result.metadata.promptTokens=="number"&&typeof n.result.metadata.outputTokens=="number"?(t[e].inputTokens+=n.result.metadata.promptTokens,t[e].outputTokens+=n.result.metadata.outputTokens,!0):!1}function jm(n,e,t,s){for(let o of n){let i=Ks(o);if(i){let r=i.modelName||e;if(O(r))continue;t[r]||(t[r]={inputTokens:0,outputTokens:0,sessions:0}),i.prompt&&(t[r].inputTokens+=te(i.prompt,r,s)),i.result&&(t[r].outputTokens+=te(i.result,r,s))}}}function kS(n,e,t){if(O(n))return;t[n]||(t[n]={inputTokens:0,outputTokens:0,sessions:0}),t[n].inputTokens+=typeof e.inputTokens=="number"?e.inputTokens:0,t[n].outputTokens+=typeof e.outputTokens=="number"?e.outputTokens:0;let s=typeof e.cacheReadTokens=="number"?e.cacheReadTokens:0,o=typeof e.cacheWriteTokens=="number"?e.cacheWriteTokens:0;s>0&&(t[n].cachedReadTokens=(t[n].cachedReadTokens??0)+s),o>0&&(t[n].cacheCreationTokens=(t[n].cacheCreationTokens??0)+o)}function SS(n,e){for(let[t,s]of Object.entries(n))s?.usage&&kS(t,s.usage,e)}function TS(n,e,t,s,o){let i=typeof n.data?.outputTokens=="number"?n.data.outputTokens:0;i>0?(t.cliRealOutputByModel||(t.cliRealOutputByModel={}),t.cliRealOutputByModel[e]=(t.cliRealOutputByModel[e]??0)+i):n.data?.content&&(s[e].outputTokens+=te(n.data.content,e,o.tokenEstimators))}function wS(n,e){n.data?.modelMetrics&&(e.cliShutdownModelUsage||(e.cliShutdownModelUsage={}),SS(n.data.modelMetrics,e.cliShutdownModelUsage))}function MS(n,e,t,s,o){if(n.type==="session.shutdown")wS(n,t);else if(n.type==="user.message"&&n.data?.content)s[e].inputTokens+=te(n.data.content,e,o.tokenEstimators);else if(n.type==="assistant.message")TS(n,e,t,s,o);else if(n.type==="tool.execution_start")t.totalCliToolCalls++;else if(n.type==="tool.execution_complete"){let i=n.data?.result?.content||n.data?.result?.detailedContent;i&&(s[e].inputTokens+=te(String(i),e,o.tokenEstimators))}}function vS(n){return n.kind!==0?null:n.v?.selectedModel?.identifier||n.v?.selectedModel?.metadata?.id||n.v?.inputState?.selectedModel?.metadata?.id||null}function PS(n){return n.kind!==2||n.k?.[0]!=="selectedModel"?null:n.v?.identifier||n.v?.metadata?.id||null}function AS(n,e){if(n.type==="session.start"&&typeof n.data?.selectedModel=="string"){e.defaultModel=n.data.selectedModel;return}if(n.type==="session.model_change"&&typeof n.data?.newModel=="string"){e.defaultModel=n.data.newModel;return}let t=vS(n);t&&(e.defaultModel=t.replace(/^copilot\//,""));let s=PS(n);s&&(e.defaultModel=s.replace(/^copilot\//,""))}function xS(n,e,t,s){typeof n.kind=="number"&&(e.isDeltaBased=!0,e.sessionState=zn(e.sessionState,n)),AS(n,e);let o=n.data?.model||n.model||e.defaultModel;O(o)||(t[o]||(t[o]={inputTokens:0,outputTokens:0,sessions:0}),e.isDeltaBased||MS(n,o,e,t,s))}function DS(n,e,t){let s={defaultModel:"unknown",isDeltaBased:!1,sessionState:{},cliShutdownModelUsage:null,cliRealOutputByModel:null,totalCliToolCalls:0};for(let o of n)if(o.trim())try{let i=JSON.parse(o);xS(i,s,e,t)}catch{}return s}function ES(n,e,t,s){if(n.message?.text&&(t[e].inputTokens+=te(n.message.text,e,s.tokenEstimators)),n.response&&Array.isArray(n.response))for(let o of n.response){let{text:i}=vs(o);i&&(t[e].outputTokens+=te(i,e,s.tokenEstimators))}}function RS(n,e,t,s){if(!n.requestId)return;let o=It(n,s.modelPricing,e);if(O(o))return;t[o]||(t[o]={inputTokens:0,outputTokens:0,sessions:0});let i={...t[o]};Lm(n,o,t)||ES(n,o,t,s),Al(n,t[o],i),n.response&&Array.isArray(n.response)&&jm(n.response,o,t,s.tokenEstimators)}function IS(n,e,t){if(!(!n.isDeltaBased||!n.sessionState.requests||!Array.isArray(n.sessionState.requests)))for(let s of n.sessionState.requests)s&&RS(s,n.defaultModel,e,t)}function US(n,e,t,s){let o=Ra(n);for(let[i,r]of o){let a=e.sessionState.requests?.[i];if(!a||a.result?.usage||typeof a.result?.promptTokens=="number"||a.result?.metadata&&typeof a.result.metadata.promptTokens=="number")continue;let l=It(a,s.modelPricing,e.defaultModel);if(O(l))continue;t[l]||(t[l]={inputTokens:0,outputTokens:0,sessions:0});let d={...t[l]};t[l].inputTokens+=r.promptTokens,t[l].outputTokens+=r.outputTokens,Al(a,t[l],d)}}function OS(n,e){let t=Math.max(1,Math.round(n.totalCliToolCalls/2)),s=Math.max(1,(t+1)/2),o={};for(let[i,r]of Object.entries(n.cliRealOutputByModel)){let a=e[i]?.inputTokens??0;o[i]={inputTokens:Math.round(a*s),outputTokens:r,sessions:0}}return o}function FS(n,e,t){let s=DS(n,e,t);return!s.isDeltaBased&&s.cliShutdownModelUsage?s.cliShutdownModelUsage:!s.isDeltaBased&&s.cliRealOutputByModel?OS(s,e):(IS(s,e,t),US(n,s,e,t),null)}function NS(n,e,t,s){if(n.message?.parts)for(let o of n.message.parts)o.text&&(t[e].inputTokens+=te(o.text,e,s.tokenEstimators));if(n.response&&Array.isArray(n.response))for(let o of n.response){let{text:i}=vs(o);i&&(t[e].outputTokens+=te(i,e,s.tokenEstimators))}}function Al(n,e,t){Ia(n)&&(e.autoRouting={inputTokens:(e.autoRouting?.inputTokens??0)+e.inputTokens-t.inputTokens,outputTokens:(e.autoRouting?.outputTokens??0)+e.outputTokens-t.outputTokens})}function LS(n,e,t){let s=It(n,t.modelPricing);if(O(s))return;e[s]||(e[s]={inputTokens:0,outputTokens:0,sessions:0});let o={...e[s]};Lm(n,s,e)||NS(n,s,e,t),Al(n,e[s],o),n.response&&Array.isArray(n.response)&&jm(n.response,s,e,t.tokenEstimators)}function jS(n,e,t){if(!(!n.requests||!Array.isArray(n.requests)))for(let s of n.requests)LS(s,e,t)}async function GS(n,e,t,s){if(rn(n)){let r=await Ds(n);if(r&&Object.keys(r.modelUsage).length>0)return r.modelUsage}let o=e.trim().split(`
|
|
151
|
+
`);return FS(o,t,s)??t}async function BS(n,e,t,s,o){if(Vs(e))return t;if(n.endsWith(".jsonl")||Ut(e))return GS(n,e,t,s);let r=o!==void 0?o:JSON.parse(e);return Cr(r)?(jS(r,t,s),t):(s.warn(`Unexpected session format in ${n}`),t)}async function kr(n,e,t,s){let o={};if(n.ecosystems){let i=n.ecosystems.find(r=>r.handles(e));if(i)return i.getModelUsage(e)}if(e.startsWith("windsurf://")||e.startsWith("devin://"))return o;try{let i=t??await ln.promises.readFile(e,"utf8");return await BS(e,i,o,n,s)}catch(i){n.warn(`Error getting model usage from ${e}: ${i}`)}return o}var yo=class{constructor(e){this.openCode=e}openCode;id="opencode";displayName="OpenCode";handles(e){return this.openCode.isOpenCodeSessionFile(e)}getBackingPath(e){return this.openCode.isOpenCodeDbSession(e)?zt.join(this.openCode.getOpenCodeDataDir(),"opencode.db"):e}async stat(e){return this.openCode.statSessionFile(e)}async getTokens(e){let t=await this.openCode.getTokensFromOpenCodeSession(e);return{...t,actualTokens:t.tokens}}async countInteractions(e){return this.openCode.countOpenCodeInteractions(e)}async getModelUsage(e){return this.openCode.getOpenCodeModelUsage(e)}async getMeta(e){let t=[],s,o,i=await this.readOpenCodeSessionData(e);i&&(s=i.title||i.slug,o=i.directory||void 0,i.time?.created&&t.push(i.time.created),i.time?.updated&&t.push(i.time.updated));let r=await this.openCode.getOpenCodeMessagesForSession(e);for(let a of r)a.time?.created&&t.push(a.time.created),a.time?.completed&&t.push(a.time.completed);return t.sort((a,l)=>a-l),{title:s,firstInteraction:t.length>0?new Date(t[0]).toISOString():null,lastInteraction:t.length>0?new Date(t[t.length-1]).toISOString():null,workspacePath:o}}async readOpenCodeSessionData(e){let t=this.openCode.getOpenCodeSessionId(e);return this.openCode.isOpenCodeDbSession(e)&&t?this.openCode.readOpenCodeDbSession(t):ks(async()=>{let s=await Pe(e,"openCodeAdapter");return s===void 0?null:JSON.parse(s)},null,`openCodeAdapter getMeta readFile(${e})`)}getEditorRoot(e){return this.openCode.getOpenCodeDataDir()}async discover(e){let t=this.getCandidatePaths(),s=[],o=this.openCode.getOpenCodeDataDir(),i=zt.join(o,"storage","session"),r=zt.join(o,"opencode.db");if(e(`\u{1F4C1} Checking OpenCode JSON path: ${i}`),e(`\u{1F4C1} Checking OpenCode DB path: ${r}`),await Ue(i)){let d=async g=>{let h=[];try{h=await xl.promises.readdir(g,{withFileTypes:!0})}catch(y){console.error(`[openCodeAdapter] Failed to read dir ${g}:`,y)}for(let y of h)if(y.isDirectory())await d(zt.join(g,y.name));else if(y.name.startsWith("ses_")&&y.name.endsWith(".json")){let b=zt.join(g,y.name);try{(await xl.promises.stat(b)).size>0&&s.push(b)}catch(T){console.error(`[openCodeAdapter] Failed to stat ${b}:`,T)}}};await d(i);let p=s.length;p>0&&e(`\u{1F4C4} Found ${p} session files in OpenCode storage`)}if(await Ue(r))try{let d=new Set(s.filter(h=>this.openCode.isOpenCodeSessionFile(h)).map(h=>this.openCode.getOpenCodeSessionId(h)).filter(Boolean)),p=await this.openCode.discoverOpenCodeDbSessions(),g=0;for(let h of p)d.has(h)||(s.push(zt.join(o,`opencode.db#${h}`)),g++);g>0&&e(`\u{1F4C4} Found ${g} additional session(s) in OpenCode database`)}catch(d){e(`OpenCode DB exists but could not be read: ${d}`)}return{sessionFiles:s,candidatePaths:t}}getCandidatePaths(){let e=this.openCode.getOpenCodeDataDir();return[{path:zt.join(e,"storage","session"),source:"OpenCode (JSON)"},{path:zt.join(e,"opencode.db"),source:"OpenCode (DB)"}]}async buildTurns(e){let t=[],s=await this.openCode.getOpenCodeMessagesForSession(e),o=0,i=0;for(let r=0;r<s.length;r++){let a=s[r];if(a.role!=="user")continue;i++;let l=s.filter((y,b)=>b>r&&y.role==="assistant"&&y.parentID===a.id),p=(await this.openCode.getOpenCodePartsForMessage(a.id)).filter(y=>y.type==="text").map(y=>y.text||"").join(`
|
|
152
|
+
`),g=await this.processOpenCodeAssistantMessages(l,o),h=Math.max(0,g.turnCumulativeTotal-o-g.turnOutputAndThinking);t.push({turnNumber:i,timestamp:a.time?.created?new Date(a.time.created).toISOString():null,mode:"cli",userMessage:p,assistantResponse:g.assistantText,model:g.model,toolCalls:g.toolCalls,contextReferences:G(),mcpTools:[],inputTokensEstimate:h,outputTokensEstimate:g.turnOutputAndThinking-g.thinkingTokens,thinkingTokensEstimate:g.thinkingTokens}),o=g.turnCumulativeTotal}return{turns:t}}async processOpenCodeAssistantMessages(e,t){let s="",o=[],i=null,r=0,a=t;for(let d of e){i||(i=d.modelID||d.model?.modelID||null),r+=d.tokens?.reasoning||0,typeof d.tokens?.total=="number"&&(a=Math.max(a,d.tokens.total));let p=await this.openCode.getOpenCodePartsForMessage(d.id);for(let g of p)s+=this.processOpenCodePart(g,o)}let l=e.reduce((d,p)=>d+(p.tokens?.output||0)+(p.tokens?.reasoning||0),0);return{assistantText:s,toolCalls:o,model:i,thinkingTokens:r,turnCumulativeTotal:a,turnOutputAndThinking:l}}processOpenCodePart(e,t){return e.type==="text"&&e.text?e.text:(e.type==="tool"&&e.tool&&t.push({toolName:e.tool,arguments:e.state?.input?JSON.stringify(e.state.input):void 0,result:e.state?.output||void 0}),"")}async getSyncData(e){return this.openCode.getOpenCodeSessionData(e)}async analyzeUsage(e,t){let s=$(),o=await this.openCode.getOpenCodeMessagesForSession(e),i=[];for(let r of o)r.role==="user"&&s.modeUsage.cli++,r.role==="assistant"&&await this.processOpenCodeAssistantMessage(r,s,i);if(i.length>0){let r=[...new Set(i)];s.modelSwitching.uniqueModels=r,s.modelSwitching.modelCount=r.length,s.modelSwitching.totalRequests=i.length;let a=0;for(let l=1;l<i.length;l++)i[l]!==i[l-1]&&a++;s.modelSwitching.switchCount=a,V(t.modelPricing,r,i,s)}return s}async processOpenCodeAssistantMessage(e,t,s){s.push(e.modelID||"unknown");let o=await this.openCode.getOpenCodePartsForMessage(e.id);for(let i of o)i.type!=="tool"||!i.tool||(t.toolCalls.total++,t.toolCalls.byTool[i.tool]=(t.toolCalls.byTool[i.tool]||0)+1)}};var Gm=S(require("path"));var _o=class{constructor(e){this.kilo=e}kilo;id="kilo";displayName="Kilo Code";handles(e){return this.kilo.isKiloSessionFile(e)}getBackingPath(e){return this.kilo.getKiloDbPath()}async stat(e){return this.kilo.statSessionFile(e)}async getTokens(e){let t=await this.kilo.getTokensFromKiloSession(e);return{...t,actualTokens:t.tokens}}async countInteractions(e){return this.kilo.countKiloInteractions(e)}async getModelUsage(e){return this.kilo.getKiloModelUsage(e)}async getMeta(e){let t=[],s,o,i=await this.readKiloSessionData(e);i&&(s=i.title||i.slug,o=i.directory||void 0,i.time?.created&&t.push(i.time.created),i.time?.updated&&t.push(i.time.updated));let r=await this.kilo.getKiloMessagesForSession(e);for(let a of r)a.time?.created&&t.push(a.time.created),a.time?.completed&&t.push(a.time.completed);return t.sort((a,l)=>a-l),{title:s,firstInteraction:t.length>0?new Date(t[0]).toISOString():null,lastInteraction:t.length>0?new Date(t[t.length-1]).toISOString():null,workspacePath:o}}async readKiloSessionData(e){let t=this.kilo.getKiloSessionId(e);return t?this.kilo.readKiloDbSession(t):null}getEditorRoot(e){return this.kilo.getKiloDataDir()}async discover(e){let t=this.getCandidatePaths(),s=[],o=this.kilo.getKiloDataDir(),i=this.kilo.getKiloDbPath();if(e(`\u{1F4C1} Checking Kilo Code DB path: ${i}`),await Ue(i))try{let a=await this.kilo.discoverKiloDbSessions();for(let l of a)s.push(Gm.join(o,`kilo.db#${l}`));a.length>0&&e(`\u{1F4C4} Found ${a.length} session(s) in Kilo Code database`)}catch(a){e(`Kilo Code DB exists but could not be read: ${a}`)}return{sessionFiles:s,candidatePaths:t}}getCandidatePaths(){return[{path:this.kilo.getKiloDbPath(),source:"Kilo Code (DB)"}]}async buildTurns(e){let t=[],s=await this.kilo.getKiloMessagesForSession(e),o=0,i=0;for(let r=0;r<s.length;r++){let a=s[r];if(a.role!=="user")continue;i++;let l=s.filter((y,b)=>b>r&&y.role==="assistant"&&y.parentID===a.id),p=(await this.kilo.getKiloPartsForMessage(a.id)).filter(y=>y.type==="text").map(y=>y.text||"").join(`
|
|
153
|
+
`),g=await this.processKiloAssistantMessages(l,o),h=Math.max(0,g.turnCumulativeTotal-o-g.turnOutputAndThinking);t.push({turnNumber:i,timestamp:a.time?.created?new Date(a.time.created).toISOString():null,mode:"cli",userMessage:p,assistantResponse:g.assistantText,model:g.model,toolCalls:g.toolCalls,contextReferences:G(),mcpTools:[],inputTokensEstimate:h,outputTokensEstimate:g.turnOutputAndThinking-g.thinkingTokens,thinkingTokensEstimate:g.thinkingTokens}),o=g.turnCumulativeTotal}return{turns:t}}async processKiloAssistantMessages(e,t){let s="",o=[],i=null,r=0,a=t;for(let d of e){i||(i=d.modelID||d.model?.modelID||null),r+=d.tokens?.reasoning||0,typeof d.tokens?.total=="number"&&(a=Math.max(a,d.tokens.total));let p=await this.kilo.getKiloPartsForMessage(d.id);for(let g of p)s+=this.processKiloPart(g,o)}let l=e.reduce((d,p)=>d+(p.tokens?.output||0)+(p.tokens?.reasoning||0),0);return{assistantText:s,toolCalls:o,model:i,thinkingTokens:r,turnCumulativeTotal:a,turnOutputAndThinking:l}}processKiloPart(e,t){return e.type==="text"&&e.text?e.text:(e.type==="tool"&&e.tool&&t.push({toolName:e.tool,arguments:e.state?.input?JSON.stringify(e.state.input):void 0,result:e.state?.output||void 0}),"")}async getSyncData(e){return this.kilo.getKiloSessionData(e)}async analyzeUsage(e,t){let s=$(),o=await this.kilo.getKiloMessagesForSession(e),i=[];for(let r of o)r.role==="user"&&s.modeUsage.cli++,r.role==="assistant"&&await this.processKiloAssistantMessage(r,s,i);if(i.length>0){let r=[...new Set(i)];s.modelSwitching.uniqueModels=r,s.modelSwitching.modelCount=r.length,s.modelSwitching.totalRequests=i.length;let a=0;for(let l=1;l<i.length;l++)i[l]!==i[l-1]&&a++;s.modelSwitching.switchCount=a,V(t.modelPricing,r,i,s)}return s}async processKiloAssistantMessage(e,t,s){s.push(e.modelID||"unknown");let o=await this.kilo.getKiloPartsForMessage(e.id);for(let i of o)i.type!=="tool"||!i.tool||typeof i.tool!="string"||O(i.tool)||(t.toolCalls.total++,t.toolCalls.byTool[i.tool]=(t.toolCalls.byTool[i.tool]||0)+1)}};var Bm=S(require("fs")),Wt=S(require("path"));var bo=class{constructor(e){this.crush=e}crush;id="crush";displayName="Crush";handles(e){return this.crush.isCrushSessionFile(e)}getBackingPath(e){return this.crush.getCrushDbPath(e)}async stat(e){return this.crush.statSessionFile(e)}async getTokens(e){let t=await this.crush.getTokensFromCrushSession(e);return{...t,actualTokens:t.tokens}}async countInteractions(e){return this.crush.countCrushInteractions(e)}async getModelUsage(e){return this.crush.getCrushModelUsage(e)}async getMeta(e){let t=[],s=await this.crush.readCrushSession(e),o;s&&(o=s.title||void 0,s.created_at&&t.push(s.created_at*1e3),s.updated_at&&t.push(s.updated_at*1e3));let i=await this.crush.getCrushMessages(e);for(let r of i)r.created_at&&t.push(r.created_at*1e3),r.finished_at&&t.push(r.finished_at*1e3);return t.sort((r,a)=>r-a),{title:o,firstInteraction:t.length>0?new Date(t[0]).toISOString():null,lastInteraction:t.length>0?new Date(t[t.length-1]).toISOString():null}}getEditorRoot(e){return Wt.dirname(this.crush.getCrushDbPath(e))}async discover(e){let t=this.getCandidatePaths(),s=[];try{let o=this.crush.readCrushProjects();e(`\u{1F4C1} Crush: found ${o.length} project(s) in projects.json`);let i=await Promise.all(o.map(async a=>{let l=Wt.join(a.data_dir,"crush.db");e(`\u{1F4C1} Checking Crush DB path: ${l}`);try{return await Bm.promises.access(l),(await this.crush.discoverSessionsInDb(l)).map(p=>Wt.join(a.data_dir,`crush.db#${p}`))}catch(d){e(`Could not read Crush database for ${a.path}: ${d}`)}return[]})),r=i.reduce((a,l)=>a+l.length,0);r>0&&e(`\u{1F4C4} Found ${r} session(s) in Crush database(s)`),s.push(...i.flat())}catch(o){e(`Could not read Crush projects: ${o}`)}return{sessionFiles:s,candidatePaths:t}}getCandidatePaths(){let e=this.crush.getCrushConfigDir(),t=[{path:Wt.join(e,"projects.json"),source:"Crush (projects.json)"}],s=Sa(()=>this.crush.readCrushProjects().map(o=>({path:Wt.join(o.data_dir,"crush.db"),source:`Crush (${Wt.basename(o.path)})`})),[],"crushAdapter getCandidatePaths");return t.push(...s),t}async buildTurns(e){let t=[],s=await this.crush.getCrushMessages(e),o=await this.crush.readCrushSession(e),i=s.filter(a=>a.role==="user").length,r=0;for(let a=0;a<s.length;a++){let l=s[a];if(l.role!=="user")continue;r++;let d=[];for(let p=a+1;p<s.length&&s[p].role!=="user";p++)s[p].role==="assistant"&&d.push(s[p]);t.push(this.buildCrushTurn(l,d,o,i,r))}return{turns:t}}buildCrushTurn(e,t,s,o,i){let a=(Array.isArray(e.parts)?e.parts:[]).filter(y=>y?.type==="text"&&y?.text).map(y=>y.text).join(`
|
|
154
|
+
`),{assistantText:l,toolCalls:d,model:p}=this.processAssistantMessagesForTurn(t),g=s?.prompt_tokens&&o>0?Math.round(s.prompt_tokens/o):0,h=s?.completion_tokens&&o>0?Math.round(s.completion_tokens/o):0;return{turnNumber:i,timestamp:e.created_at?new Date(e.created_at*1e3).toISOString():null,mode:"cli",userMessage:a,assistantResponse:l,model:p,toolCalls:d,contextReferences:G(),mcpTools:[],inputTokensEstimate:g,outputTokensEstimate:h,thinkingTokensEstimate:0}}processAssistantMessagesForTurn(e){let t="",s=[],o=null;for(let i of e){o||(o=i.model||null);for(let r of Array.isArray(i.parts)?i.parts:[])t+=this.processCrushMessagePart(r,s)}return{assistantText:t,toolCalls:s,model:o}}processCrushMessagePart(e,t){return e?.type==="text"&&e?.text?e.text:(e?.type==="tool_call"&&e?.data?.name&&t.push({toolName:e.data.name,arguments:e.data.arguments?JSON.stringify(e.data.arguments):void 0}),"")}async getSyncData(e){return this.crush.getCrushSessionData(e)}async analyzeUsage(e,t){let s=$(),o=await this.crush.getCrushMessages(e),i=[];for(let r of o)r.role==="user"&&s.modeUsage.cli++,r.role==="assistant"&&this.processCrushAssistantMessage(r,s,i);return this.applyCrushModelSwitchingStats(i,s),V(t.modelPricing,s.modelSwitching.uniqueModels,i,s),s}processCrushAssistantMessage(e,t,s){s.push(e.model||"unknown");for(let o of Array.isArray(e.parts)?e.parts:[]){if(o?.type!=="tool_call"||!o?.data?.name)continue;t.toolCalls.total++;let i=o.data.name;t.toolCalls.byTool[i]=(t.toolCalls.byTool[i]||0)+1}}applyCrushModelSwitchingStats(e,t){let s=[...new Set(e)];t.modelSwitching.uniqueModels=s,t.modelSwitching.modelCount=s.length,t.modelSwitching.totalRequests=e.length;let o=0;for(let i=1;i<e.length;i++)e[i]!==e[i-1]&&o++;t.modelSwitching.switchCount=o}};var qm=S(require("fs")),zm=S(require("path")),Wm=S(sl());var Co=class{constructor(e,t){this.visualStudio=e;this.estimateTokens=t}visualStudio;estimateTokens;id="visualstudio";displayName="Visual Studio";handles(e){return this.visualStudio.isVSSessionFile(e)}getDisplayName(e){return J(e).includes("/ssmsgithubcopilot/")?"SSMS":"Visual Studio"}getBackingPath(e){return e}async stat(e){return this.visualStudio.statSessionFile(e)}async getTokens(e){let t=await this.visualStudio.getTokenEstimates(e,this.estimateTokens);return{...t,actualTokens:t.tokens}}async countInteractions(e){let t=await this.visualStudio.decodeSessionFile(e);return this.visualStudio.countInteractions(t)}async getModelUsage(e){return this.visualStudio.getModelUsage(e,this.estimateTokens)}async getMeta(e){let t=await this.visualStudio.decodeSessionFile(e),s=this.visualStudio.getSessionTitle(t),o=this.visualStudio.getSessionTimestamps(t),i=[];return o.timeCreated&&i.push(new Date(o.timeCreated).getTime()),o.timeUpdated&&i.push(new Date(o.timeUpdated).getTime()),i.sort((r,a)=>r-a),{title:s,firstInteraction:i.length>0?new Date(i[0]).toISOString():null,lastInteraction:i.length>0?new Date(i[i.length-1]).toISOString():null}}getEditorRoot(e){return zm.dirname(e)}skipBackendSync=!0;async discover(e){let t=this.getCandidatePaths(),s=[];try{let o=await this.visualStudio.discoverSessions();o.length>0&&(e(`\u{1F4C4} Found ${o.length} session file(s) in Visual Studio Copilot`),s.push(...o))}catch(o){e(`Could not read Visual Studio session files: ${o}`)}return{sessionFiles:s,candidatePaths:t}}getCandidatePaths(){return[{path:this.visualStudio.getLogDir(),source:"Visual Studio (log dir)"},{path:this.visualStudio.getVsAppDataSessionsDir(),source:"Visual Studio (AppData sessions dir)"},{path:this.visualStudio.getSsmsSessionsDir(),source:"SSMS (sessions dir)"}]}getRawFileContent(e){try{let t=qm.readFileSync(e),o=(t.length>=2?Array.from((0,Wm.decodeMulti)(t.slice(1))):[]).map((i,r)=>r===0?i:i?.[1]??i);return JSON.stringify(o,null,2)}catch{return"[]"}}async buildTurns(e){let t=[],s=await this.visualStudio.decodeSessionFile(e),o=0;for(let i=1;i<s.length;i+=2){let r=s[i],a=s[i+1];r&&(o++,t.push(this.buildVSTurn(r,a,o)))}return{turns:t}}buildVSTurn(e,t,s){let o=e[1],i=t?.[1],r=this.visualStudio.extractTextFromContent(o?.Content||[]),a=t?this.visualStudio.extractTextFromContent(i?.Content||[]):"",l=this.visualStudio.getModelId(i??o,!i),d=this.visualStudio.extractContextText(o?.Context),p=this.estimateTokens(r+d,l??"gpt-4"),g=t?this.estimateTokens(a,l??"gpt-4"):0;return{turnNumber:s,timestamp:o?.Timestamp?new Date(o.Timestamp).toISOString():null,mode:"ask",userMessage:r,assistantResponse:a,model:l,toolCalls:this.extractVSToolCalls(i),contextReferences:G(),mcpTools:[],inputTokensEstimate:p,outputTokensEstimate:g,thinkingTokensEstimate:0}}extractVSToolCalls(e){let t=[];for(let s of e?.Content||[]){let o=Array.isArray(s)?s[1]:null;o?.Function&&t.push({toolName:String(o.Function.Description||"tool"),result:typeof o.Function.Result=="string"?o.Function.Result:void 0})}return t}async analyzeUsage(e,t){let s=$(),o=await this.visualStudio.decodeSessionFile(e),i=[];for(let l=1;l<o.length;l++)l%2===1?s.modeUsage.ask++:this.processVSResponseObject(o[l]?.[1],s,i,t);let r=[...new Set(i)];s.modelSwitching.uniqueModels=r,s.modelSwitching.modelCount=r.length,s.modelSwitching.totalRequests=i.length;let a=0;for(let l=1;l<i.length;l++)i[l]!==i[l-1]&&a++;return s.modelSwitching.switchCount=a,V(t.modelPricing,r,i,s),s}processVSResponseObject(e,t,s,o){let i=this.visualStudio.getModelId(e,!1);i&&s.push(i);for(let r of e?.Content??[]){let a=Array.isArray(r)?r[1]:null;if(!a?.Function)continue;t.toolCalls.total++;let l=String(a.Function.Name||a.Function.Description||"tool");if(lt(l)){t.mcpTools.total++;let d=Ct(l,o.toolNameMap);t.mcpTools.byServer[d]=(t.mcpTools.byServer[d]||0)+1;let p=Fn(l);t.mcpTools.byTool[p]=(t.mcpTools.byTool[p]||0)+1,t.toolCalls.total--}else t.toolCalls.byTool[l]=(t.toolCalls.byTool[l]||0)+1}}};var Dl=S(require("fs"));var ko=class{constructor(e){this.continue_=e}continue_;id="continue";displayName="Continue";handles(e){return this.continue_.isContinueSessionFile(e)}getBackingPath(e){return e}async stat(e){return Dl.promises.stat(e)}async getTokens(e){let t=await this.continue_.getTokensFromContinueSession(e);return{...t,actualTokens:t.tokens}}async countInteractions(e){return await this.continue_.countContinueInteractions(e)}async getModelUsage(e){return await this.continue_.getContinueModelUsage(e)}async getMeta(e){let t=await this.continue_.getContinueSessionMeta(e),s=this.continue_.getContinueSessionId(e),o=(await this.continue_.readSessionsIndex()).get(s),i=null,r=null;if(o?.dateCreated){i=new Date(o.dateCreated).toISOString();try{r=(await Dl.promises.stat(e)).mtime.toISOString()}catch{}}let a;if(t?.workspaceDirectory)try{a=decodeURIComponent(t.workspaceDirectory.replace(/^file:\/\/\//,"").replace(/^file:\/\//,""))}catch{}return{title:t?.title,firstInteraction:i,lastInteraction:r,workspacePath:a}}getEditorRoot(e){return this.continue_.getContinueDataDir()}async discover(e){let t=this.getCandidatePaths(),s=[];try{let o=await this.continue_.getContinueSessionFiles();o.length>0&&(e(`\u{1F4C4} Found ${o.length} session file(s) in Continue (~/.continue/sessions)`),s.push(...o))}catch(o){e(`Could not read Continue session files: ${o}`)}return{sessionFiles:s,candidatePaths:t}}getCandidatePaths(){return[{path:this.continue_.getContinueSessionsDir(),source:"Continue"}]}async buildTurns(e){let t=[],s=await this.continue_.buildContinueTurns(e),o=G();for(let i of s)t.push({turnNumber:t.length+1,timestamp:null,mode:"ask",userMessage:i.userText,assistantResponse:i.assistantText,model:i.model,toolCalls:i.toolCalls,contextReferences:o,mcpTools:[],inputTokensEstimate:i.inputTokens,outputTokensEstimate:i.outputTokens,thinkingTokensEstimate:0});return{turns:t}}async analyzeUsage(e,t){let s=$(),o=await this.continue_.buildContinueTurns(e),i=await this.continue_.getContinueSessionMeta(e),r=[];for(let d of o){s.modeUsage.ask++,d.model&&r.push(d.model);for(let p of d.toolCalls)s.toolCalls.total++,s.toolCalls.byTool[p.toolName]=(s.toolCalls.byTool[p.toolName]||0)+1}if(i?.mode==="agent")for(let d=0;d<o.length;d++)s.modeUsage.ask--,s.modeUsage.agent++;let a=[...new Set(r)];s.modelSwitching.uniqueModels=a,s.modelSwitching.modelCount=a.length,s.modelSwitching.totalRequests=r.length;let l=0;for(let d=1;d<r.length;d++)r[d]!==r[d-1]&&l++;return s.modelSwitching.switchCount=l,V(t.modelPricing,a,r,s),s}};var Jm=S(require("fs")),Tr=S(require("path"));function $m(n){switch((n||"").toLowerCase()){case"agent":return"agent";case"edit":return"edit";case"plan":return"plan";case"ask":return"ask";default:return"ask"}}function Hm(n){if(!n)return null;let e=Date.parse(n);return Number.isNaN(e)?null:new Date(e).toISOString()}var Sr=class{constructor(e){this.eclipse=e}eclipse;id="eclipse";displayName="Eclipse";handles(e){return this.eclipse.isEclipseSessionFile(e)}getBackingPath(e){return e}async stat(e){return Jm.promises.stat(e)}async getTokens(e){let t=await this.eclipse.getTokensFromEclipseSession(e);return{...t,actualTokens:t.tokens}}async countInteractions(e){return this.eclipse.countEclipseInteractions(e)}async getModelUsage(e){return this.eclipse.getEclipseModelUsage(e)}async getMeta(e){let t=await this.eclipse.getEclipseSessionMeta(e);return{title:t?.title,firstInteraction:Hm(t?.creationDate),lastInteraction:Hm(t?.lastMessageDate)}}getEditorRoot(e){return Tr.dirname(e)}async discover(e){let t=this.getCandidatePaths(),s=[];try{let o=await this.eclipse.discoverEclipseSessions();o.length>0&&(e(`\u{1F4C4} Found ${o.length} session file(s) in Eclipse (Copilot conversations)`),s.push(...o))}catch(o){e(`Could not read Eclipse session files: ${o}`)}return{sessionFiles:s,candidatePaths:t}}getCandidatePaths(){return[{path:Tr.join(this.eclipse.getDefaultWorkspaceRoot(),".metadata",".plugins","com.microsoft.copilot.eclipse.core","conversations"),source:"Eclipse"}]}async buildTurns(e){let t=[],s=await this.eclipse.buildEclipseTurns(e),o=G();for(let i of s)t.push({turnNumber:t.length+1,timestamp:i.timestamp,mode:$m(i.mode),userMessage:i.userText,assistantResponse:i.assistantText,model:i.model,toolCalls:i.toolCalls,contextReferences:o,mcpTools:[],inputTokensEstimate:i.inputTokens,outputTokensEstimate:i.outputTokens,thinkingTokensEstimate:i.thinkingTokens,thinkingEffort:i.reasoningEffort??void 0});return{turns:t}}async analyzeUsage(e,t){let s=$(),o=await this.eclipse.buildEclipseTurns(e),i=[];for(let l of o){this.tallyMode(s,l.mode),l.model&&i.push(l.model);for(let d of l.toolCalls)s.toolCalls.total++,s.toolCalls.byTool[d.toolName]=(s.toolCalls.byTool[d.toolName]||0)+1}let r=[...new Set(i)];s.modelSwitching.uniqueModels=r,s.modelSwitching.modelCount=r.length,s.modelSwitching.totalRequests=i.length;let a=0;for(let l=1;l<i.length;l++)i[l]!==i[l-1]&&a++;return s.modelSwitching.switchCount=a,V(t.modelPricing,r,i,s),s}tallyMode(e,t){let s=$m(t);s==="agent"?e.modeUsage.agent++:s==="edit"?e.modeUsage.edit++:e.modeUsage.ask++}};var Vm=S(require("fs"));var Km=S(require("fs"));var qS=new Set(["review","bug","think","compact","pr_comments"]);function El(n){let e="";if(typeof n=="string")e=n;else if(Array.isArray(n)){for(let i of n)if(i?.type==="text"&&typeof i.text=="string"){e=i.text;break}}let s=e.trimStart().split(`
|
|
155
|
+
`)[0].trim().match(/^\/([a-z_]+)(?:\s|$)/i);if(!s)return null;let o=s[1].toLowerCase();return qS.has(o)?o:null}function zS(n,e){if(n!=="Skill")return null;let t=e?.skill;return typeof t=="string"&&t.trim()?t.trim():null}function WS(n){let e="";if(typeof n=="string")e=n;else if(Array.isArray(n)){for(let s of n)if(s?.type==="text"&&typeof s.text=="string"){e=s.text;break}}let t=e.match(/<command-name>\/([a-zA-Z0-9_-]+)<\/command-name>/);return t?t[1]:null}function Rl(n,e,t){let s=zS(e,t);s&&ho(n,s)}function Il(n,e){let t=WS(e);t&&ho(n,t)}var So=class{constructor(e,t=lt,s=Ct,o=()=>0){this.claudeCode=e;this.isMcpToolFn=t;this.extractMcpServerNameFn=s;this.estimateTokensFn=o}claudeCode;isMcpToolFn;extractMcpServerNameFn;estimateTokensFn;id="claudecode";displayName="Claude Code";handles(e){return this.claudeCode.isClaudeCodeSessionFile(e)}getDisplayName(e){return Nn(e)}getBackingPath(e){return e}async stat(e){return Km.promises.stat(e)}async getTokens(e){let t=await this.claudeCode.getTokensFromClaudeCodeSession(e);return{...t,actualTokens:t.tokens}}async countInteractions(e){return await this.claudeCode.countClaudeCodeInteractions(e)}async getModelUsage(e){return await this.claudeCode.getClaudeCodeModelUsage(e)}async getMeta(e){let t=await this.claudeCode.getClaudeCodeSessionMeta(e);return{title:t?.title,firstInteraction:t?.firstInteraction||null,lastInteraction:t?.lastInteraction||null,workspacePath:t?.cwd}}async getDailyFractions(e){return await this.claudeCode.getClaudeCodeDailyFractions(e)}getEditorRoot(e){return this.claudeCode.getClaudeCodeProjectsDir()}async discover(e){let t=this.getCandidatePaths(),s=[];try{let o=await this.claudeCode.getClaudeCodeSessionFiles();o.length>0&&(e(`\u{1F4C4} Found ${o.length} session file(s) in Claude Code (~/.claude/projects)`),s.push(...o))}catch(o){e(`Could not read Claude Code session files: ${o}`)}return{sessionFiles:s,candidatePaths:t}}getCandidatePaths(){return[{path:this.claudeCode.getClaudeCodeProjectsDir(),source:"Claude Code"}]}async buildTurns(e){let t=[],s=await fo(e),o=null,i=[];for(let a of s)if(a.type==="user"&&!a.isSidechain&&a.message?.role==="user"&&this.isRealUserMessage(a)){let l=this.buildTurnFromEvents(o,i,t.length+1);l&&t.push(l),o=a,i.length=0}else a.type==="assistant"&&a.message?.stop_reason&&a.message?.role==="assistant"&&i.push(a);let r=this.buildTurnFromEvents(o,i,t.length+1);return r&&t.push(r),{turns:t}}isRealUserMessage(e){return ts(e)}buildTurnFromEvents(e,t,s){if(!e)return null;let o=e.message?.content,i=typeof o=="string"?o:Array.isArray(o)?o.filter(b=>b.type==="text").map(b=>b.text||"").join(`
|
|
156
|
+
`):"",{assistantText:r,model:a,actualInputTokens:l,actualOutputTokens:d,toolCalls:p,mcpTools:g}=this.processAssistantEventsForTurn(t),h=a||"claude-sonnet-4-6",y=l>0||d>0?{promptTokens:l,completionTokens:d}:void 0;return{turnNumber:s,timestamp:e.timestamp?new Date(e.timestamp).toISOString():null,mode:"agent",userMessage:i,assistantResponse:r,model:h,toolCalls:p,contextReferences:G(),mcpTools:g,inputTokensEstimate:l||this.estimateTokensFn(i,h),outputTokensEstimate:d||this.estimateTokensFn(r,h),thinkingTokensEstimate:0,actualUsage:y}}processAssistantEventsForTurn(e){let t="",s=0,o=0,i=null,r=[],a=[],l=new Set;for(let d of e){let p=d.message;!i&&p?.model&&(i=Lt(p.model));let g=p?.id,h=!g||!l.has(g);g&&l.add(g),p?.usage&&h&&(s+=this.extractInputTokens(p.usage),o+=p.usage.output_tokens||0);for(let y of Array.isArray(p?.content)?p.content:[])t+=this.processContentBlock(y,r,a)}return{assistantText:t,model:i,actualInputTokens:s,actualOutputTokens:o,toolCalls:r,mcpTools:a}}extractInputTokens(e){return(e.input_tokens||0)+(e.cache_creation_input_tokens||0)+(e.cache_read_input_tokens||0)}processContentBlock(e,t,s){if(e.type==="text")return e.text||"";if(e.type==="tool_use"){let o=e.name||"unknown";this.isMcpToolFn(o)?s.push({server:this.extractMcpServerNameFn(o),tool:o}):t.push({toolName:o,arguments:e.input?JSON.stringify(e.input):void 0})}return""}async analyzeUsage(e,t){let s=$(),o=await fo(e),i=[],r=this.resolveModeBucket(e),a=new Map;for(let l of o)l.type==="user"&&l.message?.role==="user"&&!l.isSidechain?this.processUserEvent(l,s,r):l.type==="assistant"?(this.processAssistantEvent(l,s,t,i),this.collectCacheTurn(l,a)):l.type==="system"&&l.subtype==="compact_boundary"&&this.processCompactBoundaryEvent(l,s);if(a.size>0){let l=[...a.values()].sort((d,p)=>d.timestamp-p.timestamp);s.cacheBreakage=Xd(l)}return this.applyModelSwitchingStats(i,s),V(t.modelPricing,s.modelSwitching.uniqueModels,i,s),s}collectCacheTurn(e,t){if(e.isSidechain)return;let s=e.message,o=s?.usage,i=s?.id;if(!o||!i||s?.model==="<synthetic>")return;let r=Date.parse(e.timestamp);Number.isNaN(r)||t.set(i,{timestamp:r,model:Lt(s.model||"unknown"),inputTokens:o.input_tokens||0,cacheReadTokens:o.cache_read_input_tokens||0,cacheCreationTokens:o.cache_creation_input_tokens||0,cacheCreation1hTokens:o.cache_creation?.ephemeral_1h_input_tokens||0,compacted:!!s.context_management})}processCompactBoundaryEvent(e,t){e.compactMetadata?.trigger==="auto"&&(t.toolCalls.byTool.__auto_compact__=(t.toolCalls.byTool.__auto_compact__||0)+1)}resolveModeBucket(e){let t=Nn(e);return t==="Claude Code CLI"?"cli":t==="Claude Desktop"?"claudeDesktop":"claudeVsCode"}processUserEvent(e,t,s){s==="cli"?t.modeUsage.cli++:t.modeUsage[s]=(t.modeUsage[s]??0)+1;let o=El(e.message?.content);if(o){let i=`__slash__${o}`;t.toolCalls.byTool[i]=(t.toolCalls.byTool[i]||0)+1}Il(t,e.message?.content)}processAssistantEvent(e,t,s,o){let i=Lt(e.message?.model||"unknown");o.push(i);let r=Array.isArray(e.message?.content)?e.message.content:[];for(let a of r){if(a?.type!=="tool_use")continue;let l=String(a.name||"tool");if(lt(l)){let d=Ct(l,s.toolNameMap);t.mcpTools.total++,t.mcpTools.byServer[d]=(t.mcpTools.byServer[d]||0)+1,t.mcpTools.byTool[l]=(t.mcpTools.byTool[l]||0)+1}else t.toolCalls.total++,t.toolCalls.byTool[l]=(t.toolCalls.byTool[l]||0)+1,Rl(t,l,a.input)}}applyModelSwitchingStats(e,t){let s=[...new Set(e)];t.modelSwitching.uniqueModels=s,t.modelSwitching.modelCount=s.length,t.modelSwitching.totalRequests=e.length;let o=0;for(let i=1;i<e.length;i++)e[i]!==e[i-1]&&o++;t.modelSwitching.switchCount=o}};var To=class{constructor(e,t,s,o){this.claudeDesktop=e;this.isMcpToolFn=t;this.extractMcpServerNameFn=s;this.estimateTokensFn=o}claudeDesktop;isMcpToolFn;extractMcpServerNameFn;estimateTokensFn;id="claudedesktop";displayName="Claude Desktop Cowork";handles(e){return this.claudeDesktop.isDesktopSessionFile(e)}getBackingPath(e){return e}async stat(e){return Vm.promises.stat(e)}async getTokens(e){let t=await this.claudeDesktop.getTokensFromDesktopSession(e);return{...t,actualTokens:t.tokens}}async countInteractions(e){return await this.claudeDesktop.countDesktopSessionInteractions(e)}async getModelUsage(e){return await this.claudeDesktop.getDesktopSessionModelUsage(e)}async getMeta(e){let t=await this.claudeDesktop.getDesktopSessionMeta(e);return{title:t?.title,firstInteraction:t?.firstInteraction||null,lastInteraction:t?.lastInteraction||null,workspacePath:t?.cwd}}getEditorRoot(e){return this.claudeDesktop.getSessionDirForFile(e)}async discover(e){let t=this.getCandidatePaths(),s=[];try{let o=await this.claudeDesktop.getDesktopSessionFiles();o.length>0&&(e(`\u{1F4C4} Found ${o.length} session file(s) in Claude Desktop Cowork`),s.push(...o))}catch(o){e(`Could not read Claude Desktop Cowork session files: ${o}`)}return{sessionFiles:s,candidatePaths:t}}getCandidatePaths(){return this.claudeDesktop.getDesktopSessionDirs().map(e=>({path:e,source:"Claude Desktop (Cowork)"}))}async buildTurns(e){let t=[],s=await this.claudeDesktop.readDesktopSessionEvents(e),o=null,i=[];for(let a of s)if(a.type==="user"&&!a.isSidechain&&a.message?.role==="user"&&this.isRealUserMessage(a)){let l=this.buildTurnFromEvents(o,i,t.length+1);l&&t.push(l),o=a,i.length=0}else a.type==="assistant"&&a.message?.stop_reason&&a.message?.role==="assistant"&&i.push(a);let r=this.buildTurnFromEvents(o,i,t.length+1);return r&&t.push(r),{turns:t}}isRealUserMessage(e){return ts(e)}buildTurnFromEvents(e,t,s){if(!e)return null;let o=e.message?.content,i=typeof o=="string"?o:Array.isArray(o)?o.filter(b=>b.type==="text").map(b=>b.text||"").join(`
|
|
157
|
+
`):"",{assistantText:r,model:a,actualInputTokens:l,actualOutputTokens:d,toolCalls:p,mcpTools:g}=this.processAssistantEventsForTurn(t),h=a||"claude-sonnet-4-6",y=l>0||d>0?{promptTokens:l,completionTokens:d}:void 0;return{turnNumber:s,timestamp:e.timestamp?new Date(e.timestamp).toISOString():null,mode:"agent",userMessage:i,assistantResponse:r,model:h,toolCalls:p,contextReferences:G(),mcpTools:g,inputTokensEstimate:l||this.estimateTokensFn(i,h),outputTokensEstimate:d||this.estimateTokensFn(r,h),thinkingTokensEstimate:0,actualUsage:y}}processAssistantEventsForTurn(e){let t="",s=0,o=0,i=null,r=[],a=[],l=new Set;for(let d of e){let p=d.message;!i&&p?.model&&(i=p.model);let g=d.requestId,h=!g||!l.has(g);g&&l.add(g);let y=p?.usage;if(y&&h){let b=this.extractUsageTokens(y);s+=b.input,o+=b.output}for(let b of Array.isArray(p?.content)?p.content:[])t+=this.processEventContentBlock(b,r,a)}return{assistantText:t,model:i,actualInputTokens:s,actualOutputTokens:o,toolCalls:r,mcpTools:a}}extractUsageTokens(e){return{input:(e.input_tokens||0)+(e.cache_creation_input_tokens||0)+(e.cache_read_input_tokens||0),output:e.output_tokens||0}}processEventContentBlock(e,t,s){if(e.type==="text")return e.text||"";if(e.type==="tool_use"){let o=e.name||"unknown";this.isMcpToolFn(o)?s.push({server:this.extractMcpServerNameFn(o),tool:o}):t.push({toolName:o,arguments:e.input?JSON.stringify(e.input):void 0})}return""}async analyzeUsage(e,t){let s=$(),o=await fo(e),i=[];for(let r of o)r.type==="user"&&r.message?.role==="user"&&!r.isSidechain?this.processDesktopUserEvent(r,s):r.type==="assistant"&&this.processDesktopAssistantEvent(r,s,i);return this.applyDesktopModelSwitchingStats(i,s),V(t.modelPricing,s.modelSwitching.uniqueModels,i,s),s}processDesktopUserEvent(e,t){t.modeUsage.ask++;let s=El(e.message?.content);if(s){let o=`__slash__${s}`;t.toolCalls.byTool[o]=(t.toolCalls.byTool[o]||0)+1}Il(t,e.message?.content)}processDesktopAssistantEvent(e,t,s){let o=Lt(e.message?.model||"unknown");s.push(o);let i=Array.isArray(e.message?.content)?e.message.content:[];for(let r of i){if(r?.type!=="tool_use")continue;t.toolCalls.total++;let a=String(r.name||"tool");t.toolCalls.byTool[a]=(t.toolCalls.byTool[a]||0)+1,Rl(t,a,r.input)}}applyDesktopModelSwitchingStats(e,t){let s=[...new Set(e)];t.modelSwitching.uniqueModels=s,t.modelSwitching.modelCount=s.length,t.modelSwitching.totalRequests=e.length;let o=0;for(let i=1;i<e.length;i++)e[i]!==e[i-1]&&o++;t.modelSwitching.switchCount=o}};var Ym=S(require("fs"));var wo=class{constructor(e){this.mistralVibe=e}mistralVibe;id="mistralvibe";displayName="Mistral Vibe";handles(e){return this.mistralVibe.isVibeSessionFile(e)}getBackingPath(e){return e}async stat(e){return Ym.promises.stat(e)}async getTokens(e){let t=await this.mistralVibe.getTokensFromSession(e);return{...t,actualTokens:t.tokens}}async countInteractions(e){return this.mistralVibe.countInteractions(e)}async getModelUsage(e){return this.mistralVibe.getModelUsage(e)}async getMeta(e){let t=await this.mistralVibe.getSessionMeta(e);return{title:t.title,firstInteraction:t.firstInteraction,lastInteraction:t.lastInteraction}}getEditorRoot(e){return this.mistralVibe.getSessionLogDir()}async discover(e){let t=this.getCandidatePaths(),s=[];try{let o=await this.mistralVibe.discoverSessions();o.length>0&&(e(`\u{1F4C4} Found ${o.length} session file(s) in Mistral Vibe (~/.vibe/logs/session)`),s.push(...o))}catch(o){e(`Could not read Mistral Vibe session files: ${o}`)}return{sessionFiles:s,candidatePaths:t}}getCandidatePaths(){return[{path:this.mistralVibe.getSessionLogDir(),source:"Mistral Vibe"}]}async buildTurns(e){let t=[],s=await this.mistralVibe.readSessionMessages(e),o=await this.mistralVibe.getSessionMeta(e),i=await this.mistralVibe.getTokensFromSession(e),r=o.model||"devstral",a=this.findUserMessageIndices(s);for(let l=0;l<a.length;l++){let d=a[l],p=l+1<a.length?a[l+1]:s.length;t.push(this.buildMistralTurn(s,d,p,o,r,l+1))}return{turns:t,actualTokens:i.tokens}}findUserMessageIndices(e){let t=[];for(let s=0;s<e.length;s++)e[s].role==="user"&&e[s].injected!==!0&&t.push(s);return t}buildMistralTurn(e,t,s,o,i,r){let a=e[t],l=typeof a.content=="string"?a.content:"",{assistantText:d,toolCalls:p}=this.collectMistralTurnContent(e,t,s);return{turnNumber:r,timestamp:o.firstInteraction,mode:"cli",userMessage:l,assistantResponse:d,model:i,toolCalls:p,contextReferences:G(),mcpTools:[],inputTokensEstimate:0,outputTokensEstimate:0,thinkingTokensEstimate:0}}collectMistralTurnContent(e,t,s){let o="",i=[];for(let r=t+1;r<s;r++){let a=e[r];if(a.role==="assistant")o+=this.processMistralAssistantMsg(a,i);else if(a.role==="tool"){let l=i[i.length-1];l&&(l.result=typeof a.content=="string"?a.content:void 0)}}return{assistantText:o,toolCalls:i}}processMistralAssistantMsg(e,t){let s="";typeof e.content=="string"&&(s=e.content);for(let o of Array.isArray(e.tool_calls)?e.tool_calls:[])t.push({toolName:o.function?.name||o.name||"unknown",arguments:o.function?.arguments?JSON.stringify(o.function.arguments):void 0});return s}async analyzeUsage(e,t){let s=$(),o=await this.mistralVibe.readSessionMessages(e),r=(await this.mistralVibe.getSessionMeta(e)).model||"devstral",a=[];for(let d of o)if(d.role==="user"&&d.injected!==!0)s.modeUsage.cli++;else if(d.role==="assistant"&&(a.push(r),Array.isArray(d.tool_calls)))for(let p of d.tool_calls){s.toolCalls.total++;let g=String(p.function?.name||p.name||"tool");s.toolCalls.byTool[g]=(s.toolCalls.byTool[g]||0)+1}let l=[...new Set(a)];return s.modelSwitching.uniqueModels=l,s.modelSwitching.modelCount=l.length,s.modelSwitching.totalRequests=a.length,s.modelSwitching.switchCount=0,V(t.modelPricing,l,a,s),s}};var Qm=S(require("fs"));var Mo=class{constructor(e){this.geminiCli=e}geminiCli;id="geminicli";displayName="Gemini CLI";handles(e){return this.geminiCli.isGeminiCliSessionFile(e)}getBackingPath(e){return e}async stat(e){return Qm.promises.stat(e)}async getTokens(e){let t=await this.geminiCli.getTokensFromGeminiCliSession(e);return{...t,actualTokens:t.tokens}}async countInteractions(e){return await this.geminiCli.countGeminiCliInteractions(e)}async getModelUsage(e){return await this.geminiCli.getGeminiCliModelUsage(e)}async getMeta(e){return await this.geminiCli.getGeminiCliSessionMeta(e)}getEditorRoot(e){return this.geminiCli.getGeminiDataDir()}async discover(e){let t=this.getCandidatePaths(),s=[];try{let o=await this.geminiCli.getGeminiCliSessionFiles();o.length>0&&(e(`\u{1F4C4} Found ${o.length} session file(s) in Gemini CLI (~/.gemini/tmp/*/chats)`),s.push(...o))}catch(o){e(`Could not read Gemini CLI session files: ${o}`)}return{sessionFiles:s,candidatePaths:t}}getCandidatePaths(){return[{path:this.geminiCli.getGeminiTmpDir(),source:"Gemini CLI (sessions)"},{path:this.geminiCli.getGeminiProjectsPath(),source:"Gemini CLI (projects.json)"},{path:this.geminiCli.getGeminiLogsPath(),source:"Gemini CLI (logs.json)"}]}async buildTurns(e){return await this.geminiCli.buildGeminiCliTurns(e)}async getDailyFractions(e){return await this.geminiCli.getGeminiCliDailyFractions(e)}async analyzeUsage(e,t){let s=$(),o=await this.geminiCli.readGeminiCliSession(e),i=[];s.modeUsage.cli+=o.userRecords.length;for(let r of o.assistantRecords)this.processGeminiAssistantRecord(r,s,i);return this.applyGeminiModelSwitchingStats(i,s),V(t.modelPricing,s.modelSwitching.uniqueModels,i,s),s}processGeminiAssistantRecord(e,t,s){let o=Qn(e.model||"unknown");s.push(o);for(let i of Array.isArray(e.toolCalls)?e.toolCalls:[]){let r=this.resolveGeminiToolName(i);r&&(t.toolCalls.total++,t.toolCalls.byTool[r]=(t.toolCalls.byTool[r]||0)+1)}}resolveGeminiToolName(e){return typeof e?.name=="string"&&e.name.trim().length>0?e.name.trim():typeof e?.displayName=="string"&&e.displayName.trim().length>0?e.displayName.trim():""}applyGeminiModelSwitchingStats(e,t){let s=[...new Set(e)];t.modelSwitching.uniqueModels=s,t.modelSwitching.modelCount=s.length,t.modelSwitching.totalRequests=e.length;let o=0;for(let i=1;i<e.length;i++)e[i]!==e[i-1]&&o++;t.modelSwitching.switchCount=o}};var Xm=S(require("fs")),Ul=S(require("inspector"));var vo=class{constructor(e,t=()=>0){this.antigravity=e;this.estimateTokens=t}antigravity;estimateTokens;id="antigravity";displayName="Antigravity";handles(e){return this.antigravity.isAntigravitySessionFile(e)}getBackingPath(e){return e}async stat(e){return Xm.promises.stat(e)}async getTokens(e){return{...await this.antigravity.estimateTokensFromAntigravitySession(e,this.estimateTokens),actualTokens:0}}async countInteractions(e){return this.antigravity.countAntigravityInteractions(e)}async getModelUsage(e){return{}}async getMeta(e){return this.antigravity.getAntigravitySessionMeta(e)}getEditorRoot(e){return this.antigravity.getAntigravityBrainDir()}async buildTurns(e){return this.antigravity.buildAntigravityTurns(e)}async discover(e){let t=this.getCandidatePaths(),s=[],o=this.antigravity.getAntigravityBrainDir();Ul.url()&&e(`\u{1F50D} [Antigravity] Checking brain dir: ${o}`);try{let i=await this.antigravity.getAntigravitySessionFiles();Ul.url()&&e(`\u{1F50D} [Antigravity] Found ${i.length} transcript(s)`),i.length>0&&(e(`\u{1F4C4} Found ${i.length} session file(s) in Antigravity (~/.gemini/antigravity/brain/*/)`),s.push(...i))}catch(i){e(`Could not read Antigravity session files: ${i}`)}return{sessionFiles:s,candidatePaths:t}}getCandidatePaths(){return[{path:this.antigravity.getAntigravityBrainDir(),source:"Antigravity (brain/)"}]}async analyzeUsage(e,t){let s=$(),o=await this.antigravity.readAntigravitySession(e);s.modeUsage.cli+=o.userEntries.length;for(let i of o.modelEntries)if(Array.isArray(i.tool_calls))for(let r of i.tool_calls)r.name&&(s.toolCalls.total++,s.toolCalls.byTool[r.name]=(s.toolCalls.byTool[r.name]||0)+1);return s.modelSwitching.uniqueModels=[],s.modelSwitching.modelCount=0,s.modelSwitching.totalRequests=0,s.modelSwitching.switchCount=0,s}};var Zm=S(require("fs"));var Po=class{constructor(e){this.pi=e}pi;id="pi";displayName="Pi";handles(e){return this.pi.isPiSessionFile(e)}getBackingPath(e){return e}async stat(e){return Zm.promises.stat(e)}async getTokens(e){let t=await this.pi.getTokens(e);return{...t,actualTokens:t.tokens}}async countInteractions(e){return this.pi.countInteractions(e)}async getModelUsage(e){return this.pi.getModelUsage(e)}async getMeta(e){return this.pi.getSessionMeta(e)}getEditorRoot(e){return this.pi.getConfigDir()}async discover(e){let t=this.getCandidatePaths(),s=[];try{let o=await this.pi.discoverSessions();o.length>0&&(e(`\u{1F4C4} Found ${o.length} session file(s) in Pi (~/.pi/agent/sessions)`),s.push(...o))}catch(o){e(`Could not read Pi session files: ${o}`)}return{sessionFiles:s,candidatePaths:t}}getCandidatePaths(){return[{path:this.pi.getConfigDir(),source:"Pi"}]}async buildTurns(e){let t=await this.pi.getMessages(e),{tokens:s}=await this.pi.getTokens(e),o=await this.pi.getModelUsage(e),i=t.filter(l=>l.message?.role==="user").length,{perTurnInput:r,perTurnOutput:a}=this.computePerTurnDefaults(o,i);return{turns:this.buildAllTurns(t,r,a),actualTokens:s}}computePerTurnDefaults(e,t){if(t===0)return{perTurnInput:0,perTurnOutput:0};let s=Object.values(e).reduce((i,r)=>i+r.inputTokens,0),o=Object.values(e).reduce((i,r)=>i+r.outputTokens,0);return{perTurnInput:Math.round(s/t),perTurnOutput:Math.round(o/t)}}buildAllTurns(e,t,s){let o=[],i=0;for(let r=0;r<e.length;r++){if(e[r].message?.role!=="user")continue;i++;let a=this.collectAssistantEvents(e,r);o.push(this.buildTurn(e[r],a,i,t,s))}return o}collectAssistantEvents(e,t){let s=[];for(let o=t+1;o<e.length&&e[o].message?.role!=="user";o++)e[o].message?.role==="assistant"&&s.push(e[o]);return s}buildTurn(e,t,s,o,i){let r=this.extractUserText(e.message?.content),{assistantText:a,toolCalls:l,model:d}=this.processAssistantEvents(t),p=t.reduce((h,y)=>h+(y.message?.usage?.input??0),0),g=t.reduce((h,y)=>h+(y.message?.usage?.output??0),0);return{turnNumber:s,timestamp:e.timestamp??null,mode:"cli",userMessage:r,assistantResponse:a,model:d,toolCalls:l,contextReferences:G(),mcpTools:[],inputTokensEstimate:p>0?p:o,outputTokensEstimate:g>0?g:i,thinkingTokensEstimate:0}}extractUserText(e){return Array.isArray(e)?e.filter(t=>t.type==="text").map(t=>t.text||"").join(`
|
|
158
|
+
`):typeof e=="string"?e:""}processAssistantEvents(e){let t="",s=[],o=null;for(let i of e){let r=i.message;o||(o=r?.model??null),Array.isArray(r?.content)&&(t+=this.processContentParts(r.content,s))}return{assistantText:t,toolCalls:s,model:o}}processContentParts(e,t){let s="";for(let o of e)o.type==="text"&&o.text?s+=o.text:o.type==="toolCall"&&o.name&&t.push({toolName:o.name,arguments:o.arguments?JSON.stringify(o.arguments):void 0});return s}async getSyncData(e){return this.pi.getSessionData(e)}async analyzeUsage(e,t){let s=$(),o=await this.pi.getMessages(e),i=this.collectModelsAndCounts(o,s);return this.applyModelSwitchingStats(i,t,s),s}collectModelsAndCounts(e,t){let s=[];for(let o of e){let i=o.message;i&&(i.role==="user"?t.modeUsage.cli++:i.role==="assistant"&&this.processAssistantForAnalysis(i,s,t))}return s}processAssistantForAnalysis(e,t,s){if(t.push(e.model||"unknown"),!!Array.isArray(e.content)){for(let o of e.content)if(o.type==="toolCall"&&o.name){s.toolCalls.total++;let i=o.name;s.toolCalls.byTool[i]=(s.toolCalls.byTool[i]||0)+1}}}applyModelSwitchingStats(e,t,s){let o=[...new Set(e)];s.modelSwitching.uniqueModels=o,s.modelSwitching.modelCount=o.length,s.modelSwitching.totalRequests=e.length;let i=0;for(let r=1;r<e.length;r++)e[r]!==e[r-1]&&i++;s.modelSwitching.switchCount=i,V(t.modelPricing,o,e,s)}};var ep=S(require("fs")),tp=S(require("path"));var wr=class{constructor(e){this.cursor=e}cursor;id="cursor";displayName="Cursor";handles(e){return this.cursor.isCursorSessionFile(e)}getBackingPath(e){return this.cursor.getDbPathFromVirtual(e)}async stat(e){return this.cursor.statSessionFile(e)}async getTokens(e){let t=await this.cursor.getTokens(e);return{...t,actualTokens:t.tokens}}async countInteractions(e){return this.cursor.countInteractions(e)}async getModelUsage(e){return this.cursor.getModelUsage(e)}async getMeta(e){return this.cursor.getSessionMeta(e)}getEditorRoot(e){return tp.dirname(this.cursor.getDbPathFromVirtual(e))}async discover(e){let t=this.getCandidatePaths(),s=this.cursor.getCursorDbPath();e(`\u{1F4C1} Checking Cursor DB path: ${s}`);let o=[];try{await ep.promises.access(s),o=await this.cursor.discoverSessions(),o.length>0&&e(`\u{1F4C4} Found ${o.length} Cursor session(s)`)}catch{e(`\u{1F4C1} Cursor DB not found: ${s}`)}return{sessionFiles:o,candidatePaths:t}}getCandidatePaths(){return[{path:this.cursor.getCursorDbPath(),source:"Cursor (state.vscdb)"}]}collectAssistantText(e,t,s){let o=[],i=t;for(;i<e.length&&e[i].type!==1;){let r=e[i].bubbleId,a=r?s.get(r):void 0;a?.text&&o.push(a.text),i++}return o.join(`
|
|
159
|
+
|
|
160
|
+
`)}async buildTurns(e){let t=await this.cursor.readComposerData(e);if(!t?.fullConversationHeadersOnly)return{turns:[]};let s=t.fullConversationHeadersOnly,o=typeof t.contextTokensUsed=="number"?t.contextTokensUsed:0,i=t.modelConfig?.modelName||null,r=s.map(p=>p.bubbleId).filter(p=>!!p),a=await this.cursor.readBubbles(e,r),l=[],d=0;for(let p=0;p<s.length;p++){let g=s[p];if(g.type!==1)continue;d++;let h=g.bubbleId?a.get(g.bubbleId):void 0;l.push({turnNumber:d,timestamp:h?.createdAt??null,mode:"agent",userMessage:h?.text??"",assistantResponse:this.collectAssistantText(s,p+1,a),model:i,toolCalls:[],contextReferences:G(),mcpTools:[],inputTokensEstimate:0,outputTokensEstimate:0,thinkingTokensEstimate:0})}return{turns:l,actualTokens:o}}async getSyncData(e){return this.cursor.getSessionData(e)}async analyzeUsage(e,t){let s=$(),o=await this.cursor.readComposerData(e);if(!o?.fullConversationHeadersOnly)return s;let i=o.modelConfig?.modelName||"unknown",r=o.fullConversationHeadersOnly,a=r.filter(p=>p.type===1).length,l=r.filter(p=>p.type===2).length;s.modeUsage.agent+=a,l>0&&(s.modelSwitching.uniqueModels=[i],s.modelSwitching.modelCount=1,s.modelSwitching.totalRequests=l,s.modelSwitching.switchCount=0);let d=Array(l).fill(i);return V(t.modelPricing,[i],d,s),s}};var Mr=S(require("fs")),De=S(require("path")),Fl=S(require("os"));function Ol(){return De.join(Fl.homedir(),".copilot","session-state")}var Ao=class n{id="copilotcli";displayName="Copilot CLI";static WORKSPACE_YAML_CONCURRENCY=64;store=new qs;_scoutSessionIds=new Set;_appSessionIds=new Set;getDisplayName(e){let t=this.store.getSessionId(e),s=De.basename(De.dirname(e));return t&&this._scoutSessionIds.has(t)||s&&this._scoutSessionIds.has(s)?"MS Scout (Copilot CLI)":t&&this._appSessionIds.has(t)||s&&this._appSessionIds.has(s)?"Copilot CLI (App)":"Copilot CLI"}getDisplayNameForDiscoveredPath(e){let t=De.basename(De.dirname(e));if(t&&this._scoutSessionIds.has(t))return"MS Scout (Copilot CLI)";if(t&&this._appSessionIds.has(t))return"Copilot CLI (App)"}async getWorkspacePathForDiscoveredPath(e){let t=De.join(De.dirname(e),"workspace.yaml");if(!await Ue(t))return;let s=await Pe(t,"copilotCliAdapter");return s===void 0?void 0:s.match(/^cwd:\s*(.+)$/m)?.[1]?.trim()||void 0}handles(e){return this.store.isCliStoreSession(e)}getBackingPath(e){return this.store.isCliStoreSession(e)?this.store.getDbPathFromVirtual(e):e}async stat(e){return this.store.isCliStoreSession(e)?this.store.stat(e):Mr.promises.stat(e)}async getTokens(e){let t=await Ds(e);return t?{tokens:t.actualTokens,thinkingTokens:0,actualTokens:t.actualTokens,cacheReadTokens:t.cacheReadTokens}:{tokens:0,thinkingTokens:0,actualTokens:0}}async countInteractions(e){return this.store.isCliStoreSession(e)?this.store.countTurns(e):0}async getModelUsage(e){return(await Ds(e))?.modelUsage??{}}async getMeta(e){if(this.store.isCliStoreSession(e)){let t=await this.store.readSession(e);return t?{title:t.summary??void 0,firstInteraction:t.created_at,lastInteraction:t.updated_at,workspacePath:t.cwd??void 0,repository:t.repository??void 0}:{title:void 0,firstInteraction:null,lastInteraction:null}}return{title:void 0,firstInteraction:null,lastInteraction:null}}getEditorRoot(e){return this.store.isCliStoreSession(e)?De.join(Fl.homedir(),".copilot"):Ol()}async buildTurns(e){return this.store.isCliStoreSession(e)?{turns:(await this.store.getTurns(e)).map(o=>({turnNumber:o.turn_index+1,timestamp:o.timestamp,mode:"cli",userMessage:o.user_message??"",assistantResponse:o.assistant_response??"",model:null,toolCalls:[],contextReferences:G(),mcpTools:[],inputTokensEstimate:0,outputTokensEstimate:0,thinkingTokensEstimate:0}))}:{turns:[]}}async analyzeUsage(e,t){let s=$();if(!this.store.isCliStoreSession(e))return s;let i=(await this.store.getTurns(e)).filter(a=>a.user_message!==null).length,r=this.store.getSessionId(e);return r&&this._appSessionIds.has(r)?s.modeUsage.cliApp=i:s.modeUsage.cli=i,s}async getDailyFractions(e){return this.store.isCliStoreSession(e)?this.store.getDailyFractions(e):{}}async _tryMarkScoutFromWorkspaceYaml(e,t){let s=De.join(e,"workspace.yaml");if(!await Ue(s))return;let o=await Pe(s,"copilotCliAdapter");if(o===void 0)return;let i=o.match(/^cwd:\s*(.+)$/m);i&&wa(i[1].trim())&&this._scoutSessionIds.add(t);let r=o.match(/^client_name:\s*(.+)$/m);r&&On(r[1].trim())&&this._appSessionIds.add(t)}async markDbOnlySessionsFromWorkspaceYaml(e,t){let s=0,o=async()=>{for(;s<e.length;){let i=e[s++];wa(i.cwd)&&this._scoutSessionIds.add(i.id),await this._tryMarkScoutFromWorkspaceYaml(De.join(t,i.id),i.id)}};await Promise.all(Array.from({length:Math.min(n.WORKSPACE_YAML_CONCURRENCY,e.length)},()=>o()))}getCandidatePaths(){let e=[{path:Ol(),source:"Copilot CLI"}],t=this.store.getDbPath();return e.push({path:t,source:"Copilot CLI (session-store.db)"}),e}async discover(e){let t=this.getCandidatePaths(),s=[],o=Ol(),i=new Set;try{if(await Ue(o)){let r;try{r=await Mr.promises.readdir(o,{withFileTypes:!0})}catch(p){e(`Could not read Copilot CLI session path in ${o}: ${p}`),r=[]}let a=r.filter(p=>!p.isDirectory()&&(p.name.endsWith(".json")||p.name.endsWith(".jsonl"))).map(p=>De.join(o,p.name));a.length>0&&(e(`\u{1F4C4} Found ${a.length} session files in Copilot CLI directory`),s.push(...a));let l=r.filter(p=>p.isDirectory()),d=(await Promise.all(l.map(async p=>{let g=De.join(o,p.name),h=De.join(g,"events.jsonl");try{if((await Mr.promises.stat(h)).size>0)return i.add(p.name),await this._tryMarkScoutFromWorkspaceYaml(g,p.name),h}catch{}return null}))).filter(p=>p!==null);d.length>0&&(e(`\u{1F4C4} Found ${d.length} session files in Copilot CLI subdirectories`),s.push(...d))}}catch(r){e(`Could not check Copilot CLI session path ${o}: ${r}`)}try{let r=await this.store.discoverNewSessionsWithCwd(i);if(r.length>0){e(`\u{1F4C4} Found ${r.length} chat-only session(s) in Copilot CLI session-store.db`),await this.markDbOnlySessionsFromWorkspaceYaml(r,o);for(let{id:a}of r)s.push(this.store.virtualPath(a))}}catch(r){e(`Could not read Copilot CLI session-store.db: ${r}`)}return{sessionFiles:s,candidatePaths:t}}};var xo=S(require("fs")),vr=S(require("path")),sp=S(require("os"));function Nl(){return vr.join(sp.homedir(),".copilot","jb")}var Do=class{id="jetbrains";displayName="JetBrains IDE";handles(e){return!1}getBackingPath(e){return e}async stat(e){return xo.promises.stat(e)}async parsePartition(e){try{let t=await Pe(e,"jetbrainsAdapter");return t===void 0?null:yr(t)}catch{return null}}async getTokens(e){let t=await this.parsePartition(e);return t?{tokens:t.tokens,thinkingTokens:t.thinkingTokens,actualTokens:t.actualTokens}:{tokens:0,thinkingTokens:0,actualTokens:0}}async countInteractions(e){return(await this.parsePartition(e))?.interactions??0}async getModelUsage(e){return(await this.parsePartition(e))?.modelUsage??{}}async getMeta(e){let t=await this.parsePartition(e);return{title:void 0,firstInteraction:t?.firstInteraction??null,lastInteraction:t?.lastInteraction??null}}async getToolCounts(e){return(await this.parsePartition(e))?.toolCounts??{}}async getToolCalls(e){return(await this.parsePartition(e))?.toolCalls??[]}async getTurns(e){return(await this.parsePartition(e))?.turns??[]}async getMessageIds(e){return(await this.parsePartition(e))?.messageIds??[]}async getTurnStatusCounts(e){return(await this.parsePartition(e))?.turnStatusCounts??{success:0,cancelled:0,failed:0,unknown:0}}async hasThinking(e){return(await this.parsePartition(e))?.hasThinking??!1}getEditorRoot(e){return Nl()}getCandidatePaths(){return[{path:Nl(),source:"JetBrains IDE"}]}async discover(e){let t=this.getCandidatePaths(),s=[],o=Nl();try{if(!await Ue(o))return{sessionFiles:s,candidatePaths:t};let i;try{i=await xo.promises.readdir(o,{withFileTypes:!0})}catch(l){return e(`Could not read JetBrains session path in ${o}: ${l}`),{sessionFiles:s,candidatePaths:t}}let r=i.filter(l=>l.isDirectory()),a=(await Promise.all(r.map(async l=>{let d=vr.join(o,l.name),p;try{p=await xo.promises.readdir(d,{withFileTypes:!0})}catch{return[]}let g=[];for(let h of p){if(!h.isFile()||!/^partition-\d+\.jsonl$/.test(h.name))continue;let y=vr.join(d,h.name);try{(await xo.promises.stat(y)).size>0&&g.push(y)}catch{}}return g}))).flat();a.length>0&&(e(`\u{1F4C4} Found ${a.length} session file(s) in JetBrains IDE Copilot`),s.push(...a))}catch(i){e(`Could not check JetBrains session path ${o}: ${i}`)}return{sessionFiles:s,candidatePaths:t}}};var np=S(require("fs"));var Eo=class{constructor(e){this.kiro=e}kiro;id="kiro";displayName="Kiro";handles(e){return this.kiro.isKiroSessionFile(e)}getBackingPath(e){return e}async stat(e){return np.promises.stat(e)}async getTokens(e){let t=await this.kiro.getTokensFromKiroSession(e);return{...t,actualTokens:t.tokens}}async countInteractions(e){return await this.kiro.countKiroInteractions(e)}async getModelUsage(e){return await this.kiro.getKiroModelUsage(e)}async getMeta(e){return await this.kiro.getKiroSessionMeta(e)}getEditorRoot(e){return this.kiro.getKiroAppDataDir()}async discover(e){let t=this.getCandidatePaths(),s=[];try{let o=await this.kiro.getKiroSessionFiles();o.length>0&&(e(`\u{1F4C4} Found ${o.length} session file(s) in Kiro (kiro.kiroagent/workspace-sessions)`),s.push(...o))}catch(o){e(`Could not read Kiro session files: ${o}`)}return{sessionFiles:s,candidatePaths:t}}getCandidatePaths(){return[{path:this.kiro.getKiroWorkspaceSessionsDir(),source:"Kiro"}]}async buildTurns(e){let t=await this.kiro.buildKiroTurns(e),s=G();return{turns:t.map((i,r)=>({turnNumber:r+1,timestamp:i.timestampMs!==null?new Date(i.timestampMs).toISOString():null,mode:"agent",userMessage:i.userText,assistantResponse:i.assistantText,model:i.model,toolCalls:i.toolCalls,contextReferences:s,mcpTools:[],inputTokensEstimate:i.inputTokens,outputTokensEstimate:i.outputTokens,thinkingTokensEstimate:0}))}}async getDailyFractions(e){return await this.kiro.getKiroDailyFractions(e)}async analyzeUsage(e,t){let s=$(),o=await this.kiro.buildKiroTurns(e),i=[];for(let l of o){s.modeUsage.agent++,l.model&&i.push(l.model);for(let d of l.toolCalls)s.toolCalls.total++,s.toolCalls.byTool[d.toolName]=(s.toolCalls.byTool[d.toolName]||0)+1}let r=[...new Set(i)];s.modelSwitching.uniqueModels=r,s.modelSwitching.modelCount=r.length,s.modelSwitching.totalRequests=i.length;let a=0;for(let l=1;l<i.length;l++)i[l]!==i[l-1]&&a++;return s.modelSwitching.switchCount=a,V(t.modelPricing,r,i,s),s}};var op=S(require("fs"));var Ro=class{constructor(e){this.kiroCli=e}kiroCli;id="kirocli";displayName="Kiro CLI";handles(e){return this.kiroCli.isKiroCliSessionFile(e)}getBackingPath(e){return e}async stat(e){return op.promises.stat(e)}async getTokens(e){let t=await this.kiroCli.getTokensFromKiroCliSession(e);return{...t,actualTokens:t.tokens}}async countInteractions(e){return await this.kiroCli.countKiroCliInteractions(e)}async getModelUsage(e){return await this.kiroCli.getKiroCliModelUsage(e)}async getMeta(e){return await this.kiroCli.getKiroCliSessionMeta(e)}getEditorRoot(e){return this.kiroCli.getKiroCliDataDir()}async discover(e){let t=this.getCandidatePaths(),s=[];try{let o=await this.kiroCli.getKiroCliSessionFiles();o.length>0&&(e(`\u{1F4C4} Found ${o.length} session file(s) in Kiro CLI (~/.kiro/sessions/cli)`),s.push(...o))}catch(o){e(`Could not read Kiro CLI session files: ${o}`)}return{sessionFiles:s,candidatePaths:t}}getCandidatePaths(){return[{path:this.kiroCli.getKiroCliSessionsDir(),source:"Kiro CLI"}]}async buildTurns(e){let t=await this.kiroCli.buildKiroCliTurns(e),s=G(),i=(await this.kiroCli.readSessionMetadata(e))?.modelId||null;return{turns:t.map((a,l)=>({turnNumber:l+1,timestamp:a.timestampMs!==null?new Date(a.timestampMs).toISOString():null,mode:"cli",userMessage:a.userText,assistantResponse:a.assistantText,model:i,toolCalls:a.toolCalls,contextReferences:s,mcpTools:[],inputTokensEstimate:a.inputTokens,outputTokensEstimate:a.outputTokens,thinkingTokensEstimate:0}))}}async getDailyFractions(e){return await this.kiroCli.getKiroCliDailyFractions(e)}async analyzeUsage(e,t){let s=$(),o=await this.kiroCli.buildKiroCliTurns(e),r=(await this.kiroCli.readSessionMetadata(e))?.modelId||"unknown",a=[];for(let d of o){s.modeUsage.cli++,a.push(r);for(let p of d.toolCalls)s.toolCalls.total++,s.toolCalls.byTool[p.toolName]=(s.toolCalls.byTool[p.toolName]||0)+1}let l=[...new Set(a)];return s.modelSwitching.uniqueModels=l,s.modelSwitching.modelCount=l.length,s.modelSwitching.totalRequests=a.length,s.modelSwitching.switchCount=0,V(t.modelPricing,l,a,s),s}};var ip=S(require("fs")),rp=S(require("path"));var Pr=class{constructor(e){this.devinCli=e}devinCli;id="devincli";displayName="Devin CLI";handles(e){return this.devinCli.isDevinCliSessionFile(e)}getBackingPath(e){return this.devinCli.getDbPathFromVirtual(e)}async stat(e){return this.devinCli.statSessionFile(e)}async getTokens(e){let t=await this.devinCli.getTokens(e);return{...t,actualTokens:t.tokens}}async countInteractions(e){return this.devinCli.countInteractions(e)}async getModelUsage(e){return this.devinCli.getModelUsage(e)}async getMeta(e){let t=await this.devinCli.readSession(e),s=await this.devinCli.getMessageNodes(e),o=[];t?.created_at&&o.push(t.created_at*1e3),t?.last_activity_at&&o.push(t.last_activity_at*1e3);for(let i of s)i.created_at&&o.push(i.created_at*1e3);return o.sort((i,r)=>i-r),{title:t?.title||void 0,firstInteraction:o.length>0?new Date(o[0]).toISOString():null,lastInteraction:o.length>0?new Date(o[o.length-1]).toISOString():null,workspacePath:t?.working_directory||void 0}}getEditorRoot(e){return rp.dirname(this.devinCli.getDbPathFromVirtual(e))}async discover(e){let t=this.getCandidatePaths(),s=[],o=this.devinCli.getDbPath();e(`\u{1F4C1} Checking Devin CLI DB path: ${o}`);try{await ip.promises.access(o);let i=await this.devinCli.discoverSessionIds();i.length>0&&e(`\u{1F4C4} Found ${i.length} session(s) in Devin CLI database`),s.push(...i.map(r=>this.devinCli.virtualPath(r)))}catch(i){e(`Could not read Devin CLI database: ${i}`)}return{sessionFiles:s,candidatePaths:t}}getCandidatePaths(){return[{path:this.devinCli.getDbPath(),source:"Devin CLI (sessions.db)"}]}async buildTurns(e){let t=[],s=await this.devinCli.readSession(e),o=await this.devinCli.getMessageNodes(e),i=this.devinCli.buildMainChain(o,s?.main_chain_id??null),r=0;for(let a=0;a<i.length;a++){let l=this.devinCli.parseChatMessage(i[a].chat_message);l.role==="user"&&(r++,t.push(this.buildDevinCliTurn(i,a,l.text,s,r)))}return{turns:t}}buildDevinCliTurn(e,t,s,o,i){let r="";for(let l=t+1;l<e.length;l++){let d=this.devinCli.parseChatMessage(e[l].chat_message);if(d.role==="user")break;d.role==="assistant"&&(r+=(r?`
|
|
161
|
+
`:"")+d.text)}let a=e[t];return{turnNumber:i,timestamp:a.created_at?new Date(a.created_at*1e3).toISOString():null,mode:"cli",userMessage:s,assistantResponse:r,model:o?.model||null,toolCalls:[],contextReferences:G(),mcpTools:[],inputTokensEstimate:Math.ceil(s.length/4),outputTokensEstimate:Math.ceil(r.length/4),thinkingTokensEstimate:0}}async getDailyFractions(e){return this.devinCli.getDailyFractions(e)}async analyzeUsage(e,t){let s=$(),o=await this.devinCli.readSession(e),i=await this.devinCli.getMessageNodes(e),r=this.devinCli.buildMainChain(i,o?.main_chain_id??null),a=await this.devinCli.getToolCalls(e),l=o?.model||"unknown",d=[];for(let g of r)this.devinCli.parseChatMessage(g.chat_message).role==="user"&&(s.modeUsage.cli++,d.push(l));s.toolCalls.total=a.length;for(let g of a){let h=this.extractToolName(g.tool_call_json);s.toolCalls.byTool[h]=(s.toolCalls.byTool[h]||0)+1}let p=[...new Set(d)];return s.modelSwitching.uniqueModels=p,s.modelSwitching.modelCount=p.length,s.modelSwitching.totalRequests=d.length,V(t.modelPricing,p,d,s),s}extractToolName(e){if(!e)return"unknown";try{let t=JSON.parse(e),s=t.title??t.name??t.kind;return typeof s=="string"&&s?s:"unknown"}catch{return"unknown"}}};var ap=S(require("fs"));var Ar=class{constructor(e){this.cline=e}cline;id="cline";displayName="Cline";handles(e){return this.cline.isClineSessionFile(e)}getBackingPath(e){return e}async stat(e){return ap.promises.stat(e)}async getTokens(e){let t=await this.cline.getTokensFromClineSession(e);return{...t,actualTokens:t.tokens}}async countInteractions(e){return await this.cline.countClineInteractions(e)}async getModelUsage(e){return await this.cline.getClineModelUsage(e)}async getMeta(e){return await this.cline.getClineSessionMeta(e)}getEditorRoot(e){return this.cline.getClineRootFromSessionFile(e)}async discover(e){let t=this.getCandidatePaths(),s=[];try{let o=await this.cline.getClineSessionFiles();o.length>0&&(e(`\u{1F4C4} Found ${o.length} session file(s) in Cline (saoudrizwan.claude-dev/tasks)`),s.push(...o))}catch(o){e(`Could not read Cline session files: ${o}`)}return{sessionFiles:s,candidatePaths:t}}getCandidatePaths(){return this.cline.getClineTasksDirs().map(e=>({path:e,source:"Cline"}))}async buildTurns(e){let t=await this.cline.buildClineTurns(e),s=await this.cline.getTokensFromClineSession(e),o=G();return{turns:t.map((r,a)=>({turnNumber:a+1,timestamp:r.timestampMs!==null?new Date(r.timestampMs).toISOString():null,mode:this.toChatMode(r),userMessage:r.userText,assistantResponse:r.assistantText,model:r.model,toolCalls:r.toolCalls,contextReferences:o,mcpTools:r.mcpTools,inputTokensEstimate:r.inputTokens,outputTokensEstimate:r.outputTokens,thinkingTokensEstimate:0,actualUsage:r.inputTokens>0||r.outputTokens>0?{promptTokens:r.inputTokens,completionTokens:r.outputTokens}:void 0})),actualTokens:s.tokens}}toChatMode(e){return e.mode==="plan"?"plan":"agent"}async getDailyFractions(e){return await this.cline.getClineDailyFractions(e)}async analyzeUsage(e,t){let s=$(),o=await this.cline.buildClineTurns(e);for(let d of o){d.mode==="plan"?s.modeUsage.plan++:s.modeUsage.agent++;for(let p of d.toolCalls)s.toolCalls.total++,s.toolCalls.byTool[p.toolName]=(s.toolCalls.byTool[p.toolName]||0)+1;for(let p of d.mcpTools)s.mcpTools.total++,s.mcpTools.byServer[p.server]=(s.mcpTools.byServer[p.server]||0)+1,s.mcpTools.byTool[p.tool]=(s.mcpTools.byTool[p.tool]||0)+1}let r=(await this.cline.getApiRequests(e)).map(d=>d.model).filter(d=>!!d),a=[...new Set(r)];s.modelSwitching.uniqueModels=a,s.modelSwitching.modelCount=a.length,s.modelSwitching.totalRequests=r.length;let l=0;for(let d=1;d<r.length;d++)r[d]!==r[d-1]&&l++;return s.modelSwitching.switchCount=l,V(t.modelPricing,a,r,s),s}};var Io=class{constructor(e){this.codexCli=e}codexCli;id="codexcli";displayName="Codex CLI";handles(e){return this.codexCli.isCodexCliSessionFile(e)}getBackingPath(e){return this.codexCli.getBackingPath(e)}async stat(e){return this.codexCli.statSessionFile(e)}async getTokens(e){let t=await this.codexCli.getTokens(e);return{...t,actualTokens:t.tokens}}async countInteractions(e){return this.codexCli.countInteractions(e)}async getModelUsage(e){return this.codexCli.getModelUsage(e)}async getMeta(e){return this.codexCli.getMeta(e)}getEditorRoot(e){return this.codexCli.getCodexHome()}async discover(e){let t=this.getCandidatePaths(),s=[];try{let{files:o,rolloutCount:i,dbOnlyCount:r}=await this.codexCli.discoverSessions();o.length>0&&e(`\u{1F4C4} Found ${o.length} Codex CLI session(s) (${i} rollout file(s), ${r} DB-only thread(s))`),s.push(...o)}catch(o){e(`Could not read Codex CLI sessions: ${o}`)}return{sessionFiles:s,candidatePaths:t}}getCandidatePaths(){return[{path:this.codexCli.getSessionsDir(),source:"Codex CLI (sessions)"},{path:this.codexCli.getArchivedSessionsDir(),source:"Codex CLI (archived sessions)"},{path:this.codexCli.getStateDbPath(),source:"Codex CLI (state db)"}]}async getDailyFractions(e){return this.codexCli.getDailyFractions(e)}async buildTurns(e){if(this.codexCli.isVirtualThreadPath(e))return this.buildDbThreadTurns(e);let t=await this.codexCli.getRolloutSummary(e),s=this.codexCli.computeTokenTotals(t);return{turns:t.userMessages.map((i,r)=>this.buildRolloutTurn(t,r,i)),actualTokens:s.totalTokens>0?s.totalTokens:void 0}}async buildDbThreadTurns(e){let t=await this.codexCli.readThread(e);if(!t)return{turns:[]};let s=t.first_user_message?.trim()||"";if(!s)return{turns:[],actualTokens:t.tokens_used||void 0};let o=this.codexCli.toMillis(t.created_at);return{turns:[{turnNumber:1,timestamp:o?new Date(o).toISOString():null,mode:"cli",userMessage:s,assistantResponse:"",model:t.model||null,toolCalls:[],contextReferences:G(),mcpTools:[],inputTokensEstimate:Math.ceil(s.length/4),outputTokensEstimate:0,thinkingTokensEstimate:0}],actualTokens:t.tokens_used||void 0}}buildRolloutTurn(e,t,s){let o=e.userMessages[t+1]?.timestamp??null,i=d=>s.timestamp?d?d>=s.timestamp&&(o===null||d<o):!1:t===e.userMessages.length-1,r=e.assistantMessages.filter(d=>i(d.timestamp)),a=r.map(d=>d.text).join(`
|
|
162
|
+
`),l=r.length>0?r[r.length-1].model:e.models[e.models.length-1]??null;return{turnNumber:t+1,timestamp:s.timestamp,mode:"cli",userMessage:s.text,assistantResponse:a,model:l==="unknown"?null:l,toolCalls:e.toolCalls.filter(d=>i(d.timestamp)).map(d=>({toolName:d.name})),contextReferences:G(),mcpTools:[],inputTokensEstimate:Math.ceil(s.text.length/4),outputTokensEstimate:Math.ceil(a.length/4),thinkingTokensEstimate:0}}async analyzeUsage(e,t){let s=$();if(this.codexCli.isVirtualThreadPath(e))return this.analyzeDbThread(e,t,s);let o=await this.codexCli.getRolloutSummary(e);s.modeUsage.cli+=o.userMessages.length,s.toolCalls.total=o.toolCalls.length;for(let r of o.toolCalls){let a=t.toolNameMap[r.name]||r.name;s.toolCalls.byTool[a]=(s.toolCalls.byTool[a]||0)+1}let i=o.assistantMessages.map(r=>r.model).filter(r=>r!=="unknown");return this.applyModelStats(i.length>0?i:o.models,s,t),s}async analyzeDbThread(e,t,s){let o=await this.codexCli.readThread(e);if(!o)return s;let i=await this.codexCli.countInteractions(e);return s.modeUsage.cli+=i,o.model&&this.applyModelStats([o.model],s,t),s}applyModelStats(e,t,s){let o=[...new Set(e)];t.modelSwitching.uniqueModels=o,t.modelSwitching.modelCount=o.length,t.modelSwitching.totalRequests=e.length;let i=0;for(let r=1;r<e.length;r++)e[r]!==e[r-1]&&i++;t.modelSwitching.switchCount=i,V(s.modelPricing,o,e,t)}};var lp=S(require("fs")),cp=S(require("path"));var xr=class{constructor(e){this.hermes=e}hermes;id="hermes";displayName="Hermes";handles(e){return this.hermes.isHermesSessionFile(e)}getBackingPath(e){return this.hermes.getDbPathFromVirtual(e)}async stat(e){return this.hermes.statSessionFile(e)}async getTokens(e){let t=await this.hermes.getTokens(e);return{...t,actualTokens:t.tokens}}async countInteractions(e){return this.hermes.countInteractions(e)}async getModelUsage(e){return this.hermes.getModelUsage(e)}async getMeta(e){let t=await this.hermes.readSession(e),s=await this.hermes.getMessages(e),o=await this.hermes.resolveTitle(e,t),i=[];t?.started_at&&i.push(t.started_at*1e3),t?.ended_at&&i.push(t.ended_at*1e3);for(let r of s)r.timestamp&&i.push(r.timestamp*1e3);return i.sort((r,a)=>r-a),{title:o,firstInteraction:i.length>0?new Date(i[0]).toISOString():null,lastInteraction:i.length>0?new Date(i[i.length-1]).toISOString():null,workspacePath:t?.cwd||void 0}}getEditorRoot(e){return cp.dirname(this.hermes.getDbPathFromVirtual(e))}async discover(e){let t=this.getCandidatePaths(),s=[],o=this.hermes.getDbPath();e(`\u{1F4C1} Checking Hermes DB path: ${o}`);try{await lp.promises.access(o);let i=await this.hermes.discoverSessionIds();i.length>0&&e(`\u{1F4C4} Found ${i.length} session(s) in Hermes database`),s.push(...i.map(r=>this.hermes.virtualPath(r)))}catch(i){e(`Could not read Hermes database: ${i}`)}return{sessionFiles:s,candidatePaths:t}}getCandidatePaths(){return[{path:this.hermes.getDbPath(),source:"Hermes (state.db)"}]}async getDailyFractions(e){return this.hermes.getDailyFractions(e)}async buildTurns(e){let t=[],s=await this.hermes.getMessages(e),o=await this.hermes.readSession(e),i=0;for(let r=0;r<s.length;r++){let a=s[r];if(a.role!=="user")continue;i++;let l=[];for(let d=r+1;d<s.length&&s[d].role!=="user";d++)l.push(s[d]);t.push(this.buildHermesTurn(a,l,o,i))}return{turns:t}}buildHermesTurn(e,t,s,o){let{assistantText:i,toolCalls:r,outputTokens:a}=this.processTurnMessages(t);return{turnNumber:o,timestamp:e.timestamp?new Date(e.timestamp*1e3).toISOString():null,mode:"cli",userMessage:e.content||"",assistantResponse:i,model:s?.model||null,toolCalls:r,contextReferences:G(),mcpTools:[],inputTokensEstimate:e.token_count||Math.ceil((e.content||"").length/4),outputTokensEstimate:a,thinkingTokensEstimate:t.reduce((l,d)=>l+(d.reasoning||d.reasoning_content?Math.ceil(((d.reasoning||"")+(d.reasoning_content||"")).length/4):0),0)}}processTurnMessages(e){let t="",s=0,o=new Map,i=[];for(let r of e)r.role==="assistant"?(t=this.appendAssistantText(t,r),s+=r.token_count||0,this.collectToolCallsFromAssistantMessage(r,o,i)):r.role==="tool"&&this.attachToolResult(r,o,i);return{assistantText:t,toolCalls:i,outputTokens:s}}appendAssistantText(e,t){return!t.content||!t.content.trim()?e:e+(e?`
|
|
163
|
+
`:"")+t.content}collectToolCallsFromAssistantMessage(e,t,s){for(let o of this.hermes.parseToolCalls(e.tool_calls)){let i={toolName:o.name,arguments:o.arguments};s.push(i),o.id&&t.set(o.id,i)}}attachToolResult(e,t,s){let o=this.hermes.parseToolResultText(e.content),i=e.tool_call_id?t.get(e.tool_call_id):void 0;if(i){i.result=o;return}e.tool_name&&s.push({toolName:e.tool_name,result:o})}async analyzeUsage(e,t){let s=$(),o=await this.hermes.readSession(e),i=await this.hermes.getMessages(e),r=o?.model||"unknown",a=[];for(let d of i)d.role==="user"&&(s.modeUsage.cli++,a.push(r)),d.role==="tool"&&d.tool_name&&(s.toolCalls.total++,s.toolCalls.byTool[d.tool_name]=(s.toolCalls.byTool[d.tool_name]||0)+1);let l=[...new Set(a)];return s.modelSwitching.uniqueModels=l,s.modelSwitching.modelCount=l.length,s.modelSwitching.totalRequests=a.length,V(t.modelPricing,l,a,s),s}};function Ll(n){return{openCode:new bi(n),kilo:new ki(n),crush:new Ti(n),continue_:new wi,eclipse:new Pi,visualStudio:new Gi,claudeCode:new qi,claudeDesktop:new Wi,mistralVibe:new $i,geminiCli:new Hi,antigravity:new Ji,pi:new Vi,cursor:new Yi(n),kiro:new Qi,kiroCli:new Zi,devinCli:new sr,cline:new ar,codexCli:new lr,hermes:new ur}}function jl(n){return[new yo(n.openCode),new _o(n.kilo),new bo(n.crush),new Co(n.visualStudio,n.estimateTokens),new ko(n.continue_),new Sr(n.eclipse),new To(n.claudeDesktop,n.isMcpTool,n.extractMcpServerName,n.estimateTokens),new So(n.claudeCode,n.isMcpTool,n.extractMcpServerName,n.estimateTokens),new wo(n.mistralVibe),new vo(n.antigravity,n.estimateTokens),new Mo(n.geminiCli),new Po(n.pi),new wr(n.cursor),new Eo(n.kiro),new Ro(n.kiroCli),new Pr(n.devinCli),new Ar(n.cline),new Io(n.codexCli),new xr(n.hermes),new to,new Ao,new Do]}function Uo(n,e){try{return JSON.parse(n)}catch(t){console.error(`[${e}] JSON parse error:`,t);return}}function nt(n){return typeof n=="object"&&n!==null}function up(n){return typeof n!="string"?!1:!["__proto__","prototype","constructor","hasOwnProperty"].includes(n)&&!n.startsWith("__")}function cn(n){return/^\d+$/.test(n)}function Gl(n,e){if(typeof n!="string")return e;let t=n.trim();return t?t.startsWith("copilot/")?t.substring(8):t:e}function $S(n,e,t){let s=n;for(let o=0;o<e.length-1;o++){let i=e[o],r=e[o+1];if(Array.isArray(s)&&cn(i)){let a=Number(i),l=s[a],d;nt(l)?d=l:(d=cn(r)?[]:Object.create(null),s[a]=d),s=d;continue}if(!nt(s))return null;s=t(s,i,r)}return{root:n,current:s}}function HS(n,e,t,s){return Array.isArray(e)&&cn(t)?(e[Number(t)]=s,n):(nt(e)&&Object.defineProperty(e,t,{value:s,writable:!0,enumerable:!0,configurable:!0}),n)}function JS(n,e,t,s){let o;if(Array.isArray(e)&&cn(t)){let i=Number(t);Array.isArray(e[i])||(e[i]=[]),o=e[i]}else nt(e)&&(Array.isArray(e[t])||Object.defineProperty(e,t,{value:[],writable:!0,enumerable:!0,configurable:!0}),o=e[t]);return Array.isArray(o)&&(Array.isArray(s)?o.push(...s):o.push(s)),n}function KS(n,e){if(!nt(e))return n;let t=e.kind,s=e.k,o=e.v;if(t===0)return o;if(!Array.isArray(s)||s.length===0)return n;let i=s.map(String);for(let h of i)if(!up(h))return n;let r=nt(n)?n:Object.create(null),l=$S(r,i,(h,y,b)=>{let T=h[y];if(!nt(T)){let E=cn(b)?[]:Object.create(null);return h[y]=E,E}return T});if(!l)return r;let{root:d,current:p}=l,g=i[i.length-1];return t===1?HS(d,p,g,o):t===2?JS(d,p,g,o):d}function VS(n){if(!Array.isArray(n))return{responseText:"",thinkingText:""};let e="",t="";for(let s of n){let{text:o,isThinking:i}=vs(s);o&&(i?t+=o:e+=o)}return{responseText:e,thinkingText:t}}var Bl=class{constructor(e,t){this.defaultModel=e;this.estimateTokens=t}defaultModel;estimateTokens;modelUsage={};totalInputTokens=0;totalOutputTokens=0;ensureModel(e){return typeof e=="string"&&e?e:this.defaultModel}addInput(e,t){let s=this.ensureModel(e);if(O(s))return;this.modelUsage[s]||(this.modelUsage[s]={inputTokens:0,outputTokens:0,sessions:0});let o=this.estimateTokens(t,s);this.modelUsage[s].inputTokens+=o,this.totalInputTokens+=o}addOutput(e,t){let s=this.ensureModel(e);if(O(s))return;this.modelUsage[s]||(this.modelUsage[s]={inputTokens:0,outputTokens:0,sessions:0});let o=this.estimateTokens(t,s);this.modelUsage[s].outputTokens+=o,this.totalOutputTokens+=o}};function YS(n,e,t){let s=n.modelId??n.selectedModel?.identifier??n.model,o=Gl(s,t);if(typeof s=="string"&&s.trim())return o;let i=e?e(n):void 0;return Gl(i,"")||o}function QS(n,e,t){if(n.message?.parts)for(let s of n.message.parts)typeof s?.text=="string"&&s.text&&t(e,s.text);else typeof n.message?.text=="string"&&t(e,n.message.text)}function XS(n,e,t,s){let o=n.modelName||e;n.prompt&&t(o,n.prompt),n.result&&s(o,n.result)}function ZS(n,e,t,s){let o=Ks(n);if(o){XS(o,e,t,s);return}if(n&&(n.kind==="thinking"||typeof n.value=="string"))return;let i=n?.message?.parts;if(i)for(let r of i)typeof r?.text=="string"&&r.text&&s(e,r.text)}function eT(n,e,t,s){for(let o of n)ZS(o,e,t,s)}function tT(n){if(!n)return 0;if(n.usage){let e=typeof n.usage.promptTokens=="number"?n.usage.promptTokens:0,t=typeof n.usage.completionTokens=="number"?n.usage.completionTokens:0;return e+t}return typeof n.promptTokens=="number"&&typeof n.outputTokens=="number"?n.promptTokens+n.outputTokens:n.metadata&&typeof n.metadata.promptTokens=="number"&&typeof n.metadata.outputTokens=="number"?n.metadata.promptTokens+n.metadata.outputTokens:0}function sT(n){return Array.isArray(n.requests)?n.requests:Array.isArray(n.history)?n.history:[]}function nT(n){return n.trim().length>0}function dp(n,e,t,s,o,i,r){if(n==null||typeof n!="object")return;let a=n,l=YS(a,o,i);QS(a,l,t);let{responseText:d,thinkingText:p}=VS(a.response);d&&s(l,d),p&&(e.thinkingTokens+=r(p,l));let g=Array.isArray(a.response)?a.response:Array.isArray(a.responses)?a.responses:[];eT(g,l,t,s),e.actualTokens+=tT(a.result)}function oT(n){if(!nt(n))return!1;let e=n.message;return nt(e)&&typeof e.text=="string"&&!!e.text.trim()}function iT(n){if(n.length===0)return null;let e=Uo(n[0],"sessionParser");if(!e||typeof e.kind!="number")return null;let t=Object.create(null);for(let o of n){let i=Uo(o,"sessionParser");i!==void 0&&(t=KS(t,i))}let s=nt(t)?t:null;return s&&Array.isArray(s.requests)?s.requests:[]}function mp(n,e,t,s){let o,i="unknown",r=new Bl(i,t),{modelUsage:a}=r,l=r.addInput.bind(r),d=r.addOutput.bind(r),p={thinkingTokens:0,actualTokens:0};if(n.endsWith(".jsonl")){let y=e.split(/\r?\n/).filter(nT),b=iT(y);if(b!==null){let T=b.filter(oT).length;for(let E of b)dp(E,p,l,d,s,i,t);return{tokens:r.totalInputTokens+r.totalOutputTokens+p.thinkingTokens,interactions:T,modelUsage:a,thinkingTokens:p.thinkingTokens,actualTokens:0}}if(o=Uo(e.trim(),"sessionParser"),o===void 0)return{tokens:0,interactions:0,modelUsage:{},thinkingTokens:0,actualTokens:0}}if(!o&&(o=Uo(e,"sessionParser"),o===void 0))return{tokens:0,interactions:0,modelUsage:{},thinkingTokens:0,actualTokens:0};if(!nt(o)||Array.isArray(o))return{tokens:0,interactions:0,modelUsage:{},thinkingTokens:0,actualTokens:0};let g=sT(o),h=g.length;for(let y of g)dp(y,p,l,d,s,i,t);return{tokens:r.totalInputTokens+r.totalOutputTokens+p.thinkingTokens,interactions:h,modelUsage:a,thinkingTokens:p.thinkingTokens,actualTokens:p.actualTokens}}var ql=class{extractCounts(e){let t={},s={},o=e.trim().split(`
|
|
164
|
+
`);for(let i of o)if(i.trim())try{let r=JSON.parse(i);if(r.type==="user.message"){un(r.timestamp??r.ts??r.data?.timestamp,t);continue}this.processVsCodeDeltaEvent(r,s,t)}catch{}return t}processVsCodeDeltaEvent(e,t,s){let o=e.kind,i=e.k,r=e.v;o===0&&r?.requests&&Array.isArray(r.requests)?this.processKind0Event(r,s):o===2&&Array.isArray(i)&&i[0]==="requests"?this.processKind2Event(i,r,t,s):this.isKind1TimestampUpdate(o,i)&&this.processKind1Event(i,r,t,s)}isKind1TimestampUpdate(e,t){return e===1&&Array.isArray(t)&&t.length===3&&t[0]==="requests"&&(t[2]==="timestamp"||t[2]==="ts")&&typeof t[1]=="number"}processKind0Event(e,t){for(let s of e.requests)un(s.timestamp??s.ts,t)}processKind2Event(e,t,s,o){if(Array.isArray(t))for(let i of t)un(i.timestamp??i.ts,o);else if(t&&typeof t=="object"){let i=t.timestamp??t.ts;i!==void 0&&un(i,o),typeof e[1]=="number"&&(s[e[1]]=i)}}processKind1Event(e,t,s,o){let i=e[1];s[i]===void 0&&un(t,o),s[i]=t}},zl=class{extractCounts(e){let t={};try{let s=JSON.parse(e);if(s.requests&&Array.isArray(s.requests))for(let o of s.requests){let i=o.timestamp??o.ts??o.result?.timestamp;un(i,t)}}catch{}return t}};function rT(n){if(n==null)return null;let e=new Date(n);return isNaN(e.getTime())?null:e}function un(n,e){let t=rT(n);if(t!==null){let s=t.getFullYear(),o=String(t.getMonth()+1).padStart(2,"0"),i=String(t.getDate()).padStart(2,"0"),r=`${s}-${o}-${i}`;e[r]=(e[r]||0)+1}}function pp(n,e,t){let s=t.getFullYear(),o=String(t.getMonth()+1).padStart(2,"0"),i=String(t.getDate()).padStart(2,"0"),r=`${s}-${o}-${i}`,l=(e?new ql:new zl).extractCounts(n),d=Object.values(l).reduce((g,h)=>g+h,0);if(d===0)return{[r]:1};let p={};for(let[g,h]of Object.entries(l))p[g]=h/d;return p}var dn={$schema:"http://json-schema.org/draft-07/schema#",description:"Model pricing data - costs per million tokens. Each model has direct provider/API pricing at the top level (used as a reference); models billed through GitHub Copilot AI Credits also include a `copilotPricing` block reflecting GitHub's published per-token rates (1 AI credit = $0.01).",metadata:{lastUpdated:"2026-09-23",sources:[{name:"OpenAI API Pricing",url:"https://developers.openai.com/api/docs/pricing",retrievedDate:"2026-04-24"},{name:"Mistral Vibe CLI reported rates",url:"https://docs.mistral.ai/vibe/code/cli/",retrievedDate:"2026-09-20",note:"input/output/cached_input_price_per_million read from ~/.vibe/logs/session/*/meta.json stats; cross-checked against the existing mistral-medium-3.5 entry, which matched exactly. Source of the devstral-2, glm-5-2 and Mistral Medium 3.5 cached-read rates."},{name:"Mistral AI API Pricing",url:"https://pricepertoken.com/pricing-page/provider/mistral-ai",retrievedDate:"2026-05-06",note:"Cross-referenced with https://openrouter.ai/mistralai and https://ai-pricing.info/mistral"},{name:"Anthropic Claude Pricing",url:"https://www.anthropic.com/pricing",note:"Standard rates; also see https://platform.claude.com/docs/en/about-claude/pricing",retrievedDate:"2026-03-30"},{name:"Google AI Gemini API Pricing",url:"https://ai.google.dev/gemini-api/docs/pricing",retrievedDate:"2026-03-30"},{name:"xAI Grok API Pricing",url:"https://x.ai/api",retrievedDate:"2026-03-30"},{name:"GitHub Copilot Supported Models",url:"https://docs.github.com/en/copilot/reference/ai-models/supported-models",retrievedDate:"2026-03-30",note:"Source for tier/multiplier data"},{name:"GitHub Copilot Premium Requests",url:"https://docs.github.com/en/copilot/managing-copilot/monitoring-usage-and-entitlements/about-premium-requests",retrievedDate:"2026-03-30",note:"Source for premium request multiplier values"},{name:"OpenRouter Model Pricing",url:"https://openrouter.ai",retrievedDate:"2026-03-30",note:"Cross-provider pricing aggregator used for verification"},{name:"DeepSeek API Pricing",url:"https://platform.deepseek.com/api-docs/pricing",retrievedDate:"2026-06-21",note:"deepseek-v4-flash: $0.14/M input (miss), $0.0028/M input (cache hit), $0.28/M output; free tier (deepseek-v4-flash-free via OpenRouter) is $0"},{name:"GitHub Copilot Models and Pricing",url:"https://docs.github.com/en/copilot/reference/copilot-billing/models-and-pricing",retrievedDate:"2026-04-27",note:"Source for the `copilotPricing` per-model block (GitHub AI Credit per-token rates)"}],disclaimer:"GitHub Copilot uses these models but pricing may differ from direct API usage. These are reference prices for cost estimation purposes only."},pricing:{"gpt-5":{inputCostPerMillion:1.25,outputCostPerMillion:10,category:"GPT-5 models",tier:"premium",displayNames:["GPT-5"]},"gpt-5-codex":{inputCostPerMillion:1.25,outputCostPerMillion:10,category:"GPT-5 models",tier:"premium",displayNames:["GPT-5 Codex (Preview)"]},"gpt-5-mini":{inputCostPerMillion:.25,outputCostPerMillion:2,category:"GPT-5 models",tier:"standard",displayNames:["GPT-5 Mini"],copilotPricing:{inputCostPerMillion:.25,cachedInputCostPerMillion:.025,outputCostPerMillion:2,releaseStatus:"GA",category:"Lightweight"},cachedInputCostPerMillion:.025},"gpt-5.1":{inputCostPerMillion:1.25,outputCostPerMillion:10,category:"GPT-5 models",tier:"premium",displayNames:["GPT-5.1"]},"gpt-5.1-codex":{inputCostPerMillion:1.25,outputCostPerMillion:10,category:"GPT-5 models",tier:"premium",displayNames:["GPT-5.1 Codex"]},"gpt-5.1-codex-max":{inputCostPerMillion:1.75,outputCostPerMillion:14,category:"GPT-5 models",tier:"premium",displayNames:["GPT-5.1 Codex Max"]},"gpt-5.1-codex-mini":{inputCostPerMillion:.25,outputCostPerMillion:2,category:"GPT-5 models",tier:"premium",displayNames:["GPT-5.1 Codex Mini (Preview)"]},"gpt-5.2":{inputCostPerMillion:1.75,outputCostPerMillion:14,category:"GPT-5 models",tier:"standard",displayNames:["GPT-5.2"],copilotPricing:{inputCostPerMillion:1.75,cachedInputCostPerMillion:.175,outputCostPerMillion:14,releaseStatus:"Closing down 2026-06-01",category:"Versatile"}},"gpt-5.2-codex":{inputCostPerMillion:1.75,outputCostPerMillion:14,category:"GPT-5 models",tier:"standard",displayNames:["GPT-5.2 Codex"],copilotPricing:{inputCostPerMillion:1.75,cachedInputCostPerMillion:.175,outputCostPerMillion:14,releaseStatus:"Closing down 2026-06-01",category:"Powerful"}},"gpt-5.2-pro":{inputCostPerMillion:21,outputCostPerMillion:168,category:"GPT-5 models",tier:"premium",displayNames:["GPT-5.2 Pro"]},"gpt-5.3-codex":{inputCostPerMillion:1.75,outputCostPerMillion:14,category:"GPT-5 models",tier:"standard",displayNames:["GPT-5.3 Codex"],copilotPricing:{inputCostPerMillion:1.75,cachedInputCostPerMillion:.175,outputCostPerMillion:14,releaseStatus:"GA",category:"Powerful"},cachedInputCostPerMillion:.175},"gpt-5.4":{inputCostPerMillion:2.5,cachedInputCostPerMillion:.25,outputCostPerMillion:15,category:"GPT-5 models",tier:"standard",displayNames:["GPT-5.4"],copilotPricing:{inputCostPerMillion:2.5,cachedInputCostPerMillion:.25,outputCostPerMillion:15,releaseStatus:"GA",category:"Versatile"}},"gpt-5.4-mini":{inputCostPerMillion:.75,cachedInputCostPerMillion:.075,outputCostPerMillion:4.5,category:"GPT-5 models",tier:"standard",displayNames:["GPT-5.4 mini"],copilotPricing:{inputCostPerMillion:.75,cachedInputCostPerMillion:.075,outputCostPerMillion:4.5,releaseStatus:"GA",category:"Lightweight"}},"gpt-5.4-nano":{inputCostPerMillion:.2,cachedInputCostPerMillion:.02,outputCostPerMillion:1.25,category:"GPT-5 models",tier:"standard",displayNames:["GPT-5.4 nano"],copilotPricing:{inputCostPerMillion:.2,cachedInputCostPerMillion:.02,outputCostPerMillion:1.25,releaseStatus:"GA",category:"Lightweight"}},"gpt-4":{inputCostPerMillion:3,outputCostPerMillion:12,category:"GPT-4 models",tier:"unknown",displayNames:["GPT-4"]},"gpt-4.1":{inputCostPerMillion:2,cachedInputCostPerMillion:.5,outputCostPerMillion:8,category:"GPT-4 models",tier:"standard",displayNames:["GPT-4.1"],copilotPricing:{inputCostPerMillion:2,cachedInputCostPerMillion:.5,outputCostPerMillion:8,releaseStatus:"Closing down 2026-06-01",category:"Versatile"}},"gpt-4.1-mini":{inputCostPerMillion:.4,cachedInputCostPerMillion:.1,outputCostPerMillion:1.6,category:"GPT-4 models",tier:"standard",displayNames:["GPT-4.1 Mini"]},"gpt-4.1-nano":{inputCostPerMillion:.1,cachedInputCostPerMillion:.025,outputCostPerMillion:.4,category:"GPT-4 models",tier:"standard",displayNames:["GPT-4.1 Nano"]},"gpt-4o":{inputCostPerMillion:2.5,outputCostPerMillion:10,cachedInputCostPerMillion:1.25,category:"GPT-4 models",tier:"standard",displayNames:["GPT-4o"]},"gpt-4o-mini":{inputCostPerMillion:.15,outputCostPerMillion:.6,cachedInputCostPerMillion:.075,category:"GPT-4 models",tier:"standard",displayNames:["GPT-4o-mini","GPT-4o Mini"]},"gpt-4o-mini-2024-07-18":{inputCostPerMillion:.15,outputCostPerMillion:.6,cachedInputCostPerMillion:.075,category:"GPT-4 models",tier:"standard",displayNames:["GPT-4o-mini (2024-07-18)"]},"gpt-4-turbo":{inputCostPerMillion:10,outputCostPerMillion:30,category:"GPT-4 models",tier:"standard",displayNames:["GPT-4 Turbo"]},"claude-sonnet-3.5":{inputCostPerMillion:3,outputCostPerMillion:15,cachedInputCostPerMillion:.3,cacheCreationCostPerMillion:3.75,cacheCreation1hCostPerMillion:6,category:"Claude models (Anthropic)",tier:"unknown",displayNames:["Claude Sonnet 3.5"]},"claude-sonnet-3.7":{inputCostPerMillion:3,outputCostPerMillion:15,cachedInputCostPerMillion:.3,cacheCreationCostPerMillion:3.75,cacheCreation1hCostPerMillion:6,category:"Claude models (Anthropic)",tier:"unknown",displayNames:["Claude Sonnet 3.7"]},"claude-sonnet-4":{inputCostPerMillion:3,outputCostPerMillion:15,cachedInputCostPerMillion:.3,cacheCreationCostPerMillion:3.75,cacheCreation1hCostPerMillion:6,category:"Claude models (Anthropic)",tier:"premium",displayNames:["Claude Sonnet 4"],copilotPricing:{inputCostPerMillion:3,cachedInputCostPerMillion:.3,cacheCreationCostPerMillion:3.75,outputCostPerMillion:15,releaseStatus:"GA",category:"Versatile"}},"claude-sonnet-4.5":{inputCostPerMillion:3,outputCostPerMillion:15,cachedInputCostPerMillion:.3,cacheCreationCostPerMillion:3.75,cacheCreation1hCostPerMillion:6,category:"Claude models (Anthropic)",tier:"standard",displayNames:["Claude Sonnet 4.5"],copilotPricing:{inputCostPerMillion:3,cachedInputCostPerMillion:.3,cacheCreationCostPerMillion:3.75,outputCostPerMillion:15,releaseStatus:"GA",category:"Versatile"}},"claude-sonnet-4.6":{inputCostPerMillion:3,outputCostPerMillion:15,cachedInputCostPerMillion:.3,cacheCreationCostPerMillion:3.75,cacheCreation1hCostPerMillion:6,category:"Claude models (Anthropic)",tier:"standard",displayNames:["Claude Sonnet 4.6"],copilotPricing:{inputCostPerMillion:3,cachedInputCostPerMillion:.3,cacheCreationCostPerMillion:3.75,outputCostPerMillion:15,releaseStatus:"GA",category:"Versatile"}},"claude-sonnet-4-6":{inputCostPerMillion:3,outputCostPerMillion:15,cachedInputCostPerMillion:.3,cacheCreationCostPerMillion:3.75,cacheCreation1hCostPerMillion:6,category:"Claude models (Anthropic)",tier:"standard",displayNames:["Claude Sonnet 4.6"],copilotPricing:{inputCostPerMillion:3,cachedInputCostPerMillion:.3,cacheCreationCostPerMillion:3.75,outputCostPerMillion:15,releaseStatus:"GA",category:"Versatile"}},"claude-haiku":{inputCostPerMillion:.25,outputCostPerMillion:1.25,cachedInputCostPerMillion:.025,cacheCreationCostPerMillion:.3125,cacheCreation1hCostPerMillion:.5,category:"Claude models (Anthropic)",tier:"standard",displayNames:["Claude Haiku"]},"claude-haiku-4.5":{inputCostPerMillion:1,outputCostPerMillion:5,cachedInputCostPerMillion:.1,cacheCreationCostPerMillion:1.25,cacheCreation1hCostPerMillion:2,category:"Claude models (Anthropic)",tier:"standard",displayNames:["Claude Haiku 4.5"],copilotPricing:{inputCostPerMillion:1,cachedInputCostPerMillion:.1,cacheCreationCostPerMillion:1.25,outputCostPerMillion:5,releaseStatus:"GA",category:"Versatile"}},"claude-haiku-4-5-20251001":{inputCostPerMillion:1,outputCostPerMillion:5,cachedInputCostPerMillion:.1,cacheCreationCostPerMillion:1.25,cacheCreation1hCostPerMillion:2,category:"Claude models (Anthropic)",tier:"standard",displayNames:["Claude Haiku 4.5 (2025-10-01)"],copilotPricing:{inputCostPerMillion:1,cachedInputCostPerMillion:.1,cacheCreationCostPerMillion:1.25,outputCostPerMillion:5,releaseStatus:"GA",category:"Versatile"}},"claude-opus-4.1":{inputCostPerMillion:15,outputCostPerMillion:75,cachedInputCostPerMillion:1.5,cacheCreationCostPerMillion:18.75,cacheCreation1hCostPerMillion:30,category:"Claude models (Anthropic)",tier:"premium",displayNames:["Claude Opus 4.1"]},"claude-opus-4.5":{inputCostPerMillion:5,outputCostPerMillion:25,cachedInputCostPerMillion:.5,cacheCreationCostPerMillion:6.25,cacheCreation1hCostPerMillion:10,category:"Claude models (Anthropic)",tier:"standard",displayNames:["Claude Opus 4.5"],copilotPricing:{inputCostPerMillion:5,cachedInputCostPerMillion:.5,cacheCreationCostPerMillion:6.25,outputCostPerMillion:25,releaseStatus:"GA",category:"Powerful"}},"claude-opus-4.6":{inputCostPerMillion:5,outputCostPerMillion:25,cachedInputCostPerMillion:.5,cacheCreationCostPerMillion:6.25,cacheCreation1hCostPerMillion:10,category:"Claude models (Anthropic)",tier:"standard",displayNames:["Claude Opus 4.6"],copilotPricing:{inputCostPerMillion:5,cachedInputCostPerMillion:.5,cacheCreationCostPerMillion:6.25,outputCostPerMillion:25,releaseStatus:"GA",category:"Powerful"}},"claude-opus-4.7":{inputCostPerMillion:5,outputCostPerMillion:25,cachedInputCostPerMillion:.5,cacheCreationCostPerMillion:6.25,cacheCreation1hCostPerMillion:10,category:"Claude models (Anthropic)",tier:"standard",displayNames:["Claude Opus 4.7"],copilotPricing:{inputCostPerMillion:5,cachedInputCostPerMillion:.5,cacheCreationCostPerMillion:6.25,outputCostPerMillion:25,releaseStatus:"GA",category:"Powerful"}},"claude-opus-4.6-(fast-mode)-(preview)":{inputCostPerMillion:5,outputCostPerMillion:25,cachedInputCostPerMillion:.5,cacheCreationCostPerMillion:6.25,cacheCreation1hCostPerMillion:10,category:"Claude models (Anthropic)",tier:"standard",displayNames:["Claude Opus 4.6 (Fast Mode Preview)"],copilotPricing:{inputCostPerMillion:30,cachedInputCostPerMillion:3,cacheCreationCostPerMillion:37.5,outputCostPerMillion:150,releaseStatus:"Public preview",category:"Powerful"}},"claude-opus-4.6-fast":{inputCostPerMillion:5,outputCostPerMillion:25,cachedInputCostPerMillion:.5,cacheCreationCostPerMillion:6.25,cacheCreation1hCostPerMillion:10,category:"Claude models (Anthropic)",tier:"premium",displayNames:["Claude Opus 4.6 (Fast)"],copilotPricing:{inputCostPerMillion:30,cachedInputCostPerMillion:3,cacheCreationCostPerMillion:37.5,outputCostPerMillion:150,releaseStatus:"Public preview",category:"Powerful"}},"o3-mini":{inputCostPerMillion:1.1,outputCostPerMillion:4.4,category:"OpenAI reasoning models",tier:"premium",displayNames:["o3-mini"]},"o4-mini":{inputCostPerMillion:1.1,outputCostPerMillion:4.4,category:"OpenAI reasoning models",tier:"premium",displayNames:["o4-mini"]},"o1-preview":{inputCostPerMillion:15,outputCostPerMillion:60,category:"OpenAI reasoning models",tier:"premium",displayNames:["o1-preview"]},"o1-mini":{inputCostPerMillion:3,outputCostPerMillion:12,category:"OpenAI reasoning models",tier:"premium",displayNames:["o1-mini"]},"gpt-3.5-turbo":{inputCostPerMillion:.5,outputCostPerMillion:1.5,category:"Legacy models",tier:"standard",displayNames:["GPT-3.5-Turbo","GPT-3.5 Turbo"]},"gemini-2.5-pro":{inputCostPerMillion:1.25,outputCostPerMillion:10,category:"Google Gemini models",tier:"standard",displayNames:["Gemini 2.5 Pro"],copilotPricing:{inputCostPerMillion:1.25,cachedInputCostPerMillion:.125,outputCostPerMillion:10,releaseStatus:"GA",category:"Powerful"},cachedInputCostPerMillion:.125},"gemini-2.5-flash":{inputCostPerMillion:.3,outputCostPerMillion:2.5,category:"Google Gemini models",tier:"unknown",displayNames:["Gemini 2.5 Flash"]},"gemini-2.5-flash-lite":{inputCostPerMillion:.1,outputCostPerMillion:.4,category:"Google Gemini models",tier:"unknown",displayNames:["Gemini 2.5 Flash Lite"]},"gemini-2.0-flash":{inputCostPerMillion:.1,outputCostPerMillion:.4,category:"Google Gemini models",tier:"standard",displayNames:["Gemini 2.0 Flash"]},"gemini-2.0-flash-lite":{inputCostPerMillion:.075,outputCostPerMillion:.3,category:"Google Gemini models",tier:"standard",displayNames:["Gemini 2.0 Flash Lite"]},"gemini-3-flash":{inputCostPerMillion:.5,outputCostPerMillion:3,category:"Google Gemini models",tier:"standard",displayNames:["Gemini 3 Flash"],copilotPricing:{inputCostPerMillion:.5,cachedInputCostPerMillion:.05,outputCostPerMillion:3,releaseStatus:"Public preview",category:"Lightweight"},cachedInputCostPerMillion:.05},"gemini-3-pro":{inputCostPerMillion:2,outputCostPerMillion:12,category:"Google Gemini models",tier:"premium",displayNames:["Gemini 3 Pro"]},"gemini-3-pro-preview":{inputCostPerMillion:2,outputCostPerMillion:12,category:"Google Gemini models",tier:"premium",displayNames:["Gemini 3 Pro (Preview)"]},"gemini-3.1-pro":{inputCostPerMillion:2,outputCostPerMillion:12,category:"Google Gemini models",tier:"standard",displayNames:["Gemini 3.1 Pro","Gemini 3.1 Pro (Preview)"],copilotPricing:{inputCostPerMillion:2,cachedInputCostPerMillion:.2,outputCostPerMillion:12,releaseStatus:"Public preview",category:"Powerful"},cachedInputCostPerMillion:.2},"gemini-3.1-flash-lite":{inputCostPerMillion:.25,outputCostPerMillion:1.5,category:"Google Gemini models",tier:"unknown",displayNames:["Gemini 3.1 Flash Lite"]},"grok-code-fast-1":{inputCostPerMillion:.2,outputCostPerMillion:1.5,category:"xAI Grok models",tier:"premium",displayNames:["Grok Code Fast 1"],copilotPricing:{inputCostPerMillion:.2,cachedInputCostPerMillion:.02,outputCostPerMillion:1.5,releaseStatus:"GA",category:"Lightweight"}},"raptor-mini":{inputCostPerMillion:.25,outputCostPerMillion:2,category:"GitHub Copilot fine-tuned models",tier:"standard",displayNames:["Raptor Mini"],copilotPricing:{inputCostPerMillion:.25,cachedInputCostPerMillion:.025,outputCostPerMillion:2,releaseStatus:"GA",category:"Versatile"},cachedInputCostPerMillion:.025},goldeneye:{inputCostPerMillion:0,outputCostPerMillion:0,category:"GitHub Copilot fine-tuned models",tier:"standard",copilotPricing:{inputCostPerMillion:1.25,cachedInputCostPerMillion:.125,outputCostPerMillion:10,releaseStatus:"Public preview",category:"Powerful"}},"gpt-5.5":{inputCostPerMillion:5,outputCostPerMillion:30,category:"GPT-5 models",tier:"standard",displayNames:["GPT-5.5"],cachedInputCostPerMillion:.5},"mistral-large-latest":{inputCostPerMillion:.5,outputCostPerMillion:1.5,category:"Mistral models",tier:"unknown",displayNames:["Mistral Large 3"]},"mistral-large-2512":{inputCostPerMillion:.5,outputCostPerMillion:1.5,category:"Mistral models",tier:"unknown",displayNames:["Mistral Large 3 (2512)"]},"mistral-large-2411":{inputCostPerMillion:2,outputCostPerMillion:6,category:"Mistral models",tier:"unknown",displayNames:["Mistral Large 2.1"]},"magistral-medium-latest":{inputCostPerMillion:2,outputCostPerMillion:5,category:"Mistral models",tier:"unknown",displayNames:["Magistral Medium"]},"mistral-medium-latest":{inputCostPerMillion:1.5,cachedInputCostPerMillion:.15,outputCostPerMillion:7.5,category:"Mistral models",tier:"unknown",displayNames:["Mistral Medium 3.5"]},"mistral-medium-3-5":{inputCostPerMillion:1.5,cachedInputCostPerMillion:.15,outputCostPerMillion:7.5,category:"Mistral models",tier:"unknown",displayNames:["Mistral Medium 3.5"]},"mistral-medium-3.5":{inputCostPerMillion:1.5,cachedInputCostPerMillion:.15,outputCostPerMillion:7.5,category:"Mistral models",tier:"unknown",displayNames:["Mistral Medium 3.5"]},"devstral-2":{inputCostPerMillion:.4,outputCostPerMillion:2,category:"Mistral models",tier:"unknown",displayNames:["Devstral 2"]},"glm-5-2":{inputCostPerMillion:1.4,outputCostPerMillion:4.4,category:"Z.ai GLM models",tier:"unknown",displayNames:["GLM 5.2"]},"mistral-medium-2505":{inputCostPerMillion:.4,outputCostPerMillion:2,category:"Mistral models",tier:"unknown",displayNames:["Mistral Medium 3.1"]},"mistral-small-latest":{inputCostPerMillion:.1,outputCostPerMillion:.3,category:"Mistral models",tier:"unknown",displayNames:["Mistral Small 3.1"]},"mistral-small-2503":{inputCostPerMillion:.075,outputCostPerMillion:.2,category:"Mistral models",tier:"unknown",displayNames:["Mistral Small 3.2"]},"mistral-small-2603":{inputCostPerMillion:.15,outputCostPerMillion:.6,category:"Mistral models",tier:"unknown",displayNames:["Mistral Small 4"]},"codestral-latest":{inputCostPerMillion:.3,outputCostPerMillion:.9,category:"Mistral models",tier:"unknown",displayNames:["Codestral"]},"codestral-2501":{inputCostPerMillion:.3,outputCostPerMillion:.9,category:"Mistral models",tier:"unknown",displayNames:["Codestral (2501)"]},"open-mistral-nemo":{inputCostPerMillion:.02,outputCostPerMillion:.03,category:"Mistral models",tier:"unknown",displayNames:["Mistral Nemo"]},"ministral-3b-2410":{inputCostPerMillion:.04,outputCostPerMillion:.04,category:"Mistral models",tier:"unknown",displayNames:["Ministral 3B"]},"ministral-8b-2410":{inputCostPerMillion:.1,outputCostPerMillion:.1,category:"Mistral models",tier:"unknown",displayNames:["Ministral 8B"]},"magistral-small-latest":{inputCostPerMillion:.5,outputCostPerMillion:1.5,category:"Mistral models",tier:"unknown",displayNames:["Magistral Small"]},"devstral-medium-2507":{inputCostPerMillion:.4,outputCostPerMillion:2,category:"Mistral models",tier:"unknown",displayNames:["Devstral Medium"]},"devstral-latest":{inputCostPerMillion:.4,outputCostPerMillion:2,category:"Mistral models",tier:"unknown",displayNames:["Devstral 2"]},"pixtral-large-2411":{inputCostPerMillion:2,outputCostPerMillion:6,category:"Mistral models",tier:"unknown",displayNames:["Pixtral Large"]},"gemini-3.5-flash":{inputCostPerMillion:1.5,outputCostPerMillion:9,category:"Google Gemini models",tier:"standard",displayNames:["Gemini 3.5 Flash"],cachedInputCostPerMillion:.15},"claude-opus-4.8":{inputCostPerMillion:5,outputCostPerMillion:25,category:"Claude models (Anthropic)",tier:"standard",displayNames:["Claude Opus 4.8"],cachedInputCostPerMillion:.5,cacheCreationCostPerMillion:6.25,cacheCreation1hCostPerMillion:10},"qwen2.5":{inputCostPerMillion:0,outputCostPerMillion:0,category:" models",tier:"standard",displayNames:["Qwen2.5"]},"mai-code-1-flash[^mai-code-1-flash]":{inputCostPerMillion:0,outputCostPerMillion:0,category:" models",tier:"standard",displayNames:["MAI-Code-1-Flash[^mai-code-1-flash]"]},"mai-code-1-flash":{inputCostPerMillion:.75,outputCostPerMillion:4.5,category:" models",tier:"standard",displayNames:["MAI-Code-1-Flash"],cachedInputCostPerMillion:.075},"claude-fable-5":{inputCostPerMillion:10,outputCostPerMillion:50,category:"Claude models (Anthropic)",tier:"standard",displayNames:["Claude Fable 5"],cachedInputCostPerMillion:1,cacheCreationCostPerMillion:12.5,cacheCreation1hCostPerMillion:20},"deepseek-v4-flash":{inputCostPerMillion:.14,outputCostPerMillion:.28,cachedInputCostPerMillion:.0028,category:"DeepSeek models",tier:"standard",displayNames:["DeepSeek V4 Flash"]},"deepseek-v4-flash-free":{inputCostPerMillion:0,outputCostPerMillion:0,category:"DeepSeek models",tier:"standard",displayNames:["DeepSeek V4 Flash (free)"]},"claude-sonnet-5":{inputCostPerMillion:2,outputCostPerMillion:10,category:"Claude models (Anthropic)",tier:"standard",displayNames:["Claude Sonnet 5"],cachedInputCostPerMillion:.2,cacheCreationCostPerMillion:2.5,cacheCreation1hCostPerMillion:4},"claude-opus-4.8-(fast-mode)-(preview)":{inputCostPerMillion:10,outputCostPerMillion:50,category:"Claude models (Anthropic)",tier:"standard",displayNames:["Claude Opus 4.8 (fast mode) (preview)"],cachedInputCostPerMillion:1,cacheCreationCostPerMillion:12.5,cacheCreation1hCostPerMillion:20},"kimi-k2.7-code":{inputCostPerMillion:.95,outputCostPerMillion:4,category:"Moonshot AI models",tier:"standard",displayNames:["Kimi-K2.7-Code"],cachedInputCostPerMillion:.19},"gpt-5.6-luna":{inputCostPerMillion:.2,outputCostPerMillion:1.2,category:"GPT-5 models",tier:"standard",displayNames:["GPT-5.6 Luna"],cachedInputCostPerMillion:.02,copilotPricing:{inputCostPerMillion:1,cachedInputCostPerMillion:.1,outputCostPerMillion:6,releaseStatus:"GA",category:"Lightweight",longContext:{inputCostPerMillion:2,cachedInputCostPerMillion:.2,outputCostPerMillion:9,threshold:"> 200K"}},cacheCreationCostPerMillion:.25},"gpt-5.6-sol":{inputCostPerMillion:4,outputCostPerMillion:20,category:"GPT-5 models",tier:"standard",displayNames:["GPT-5.6 Sol"],cachedInputCostPerMillion:.4,copilotPricing:{inputCostPerMillion:5,cachedInputCostPerMillion:.5,outputCostPerMillion:30,releaseStatus:"GA",category:"Powerful",longContext:{inputCostPerMillion:10,cachedInputCostPerMillion:1,outputCostPerMillion:45,threshold:"> 272K"}},cacheCreationCostPerMillion:5},"gpt-5.6-terra":{inputCostPerMillion:2,outputCostPerMillion:12,category:"GPT-5 models",tier:"standard",displayNames:["GPT-5.6 Terra"],cachedInputCostPerMillion:.2,copilotPricing:{inputCostPerMillion:2.5,cachedInputCostPerMillion:.25,outputCostPerMillion:15,releaseStatus:"GA",category:"Versatile",longContext:{inputCostPerMillion:5,cachedInputCostPerMillion:.5,outputCostPerMillion:22.5,threshold:"> 272K"}},cacheCreationCostPerMillion:2.5},"gemini-3.6-flash":{inputCostPerMillion:.75,outputCostPerMillion:3.75,category:"Google Gemini models",tier:"standard",displayNames:["Gemini 3.6 Flash"],cachedInputCostPerMillion:.075},"claude-opus-5":{inputCostPerMillion:5,outputCostPerMillion:25,category:"Claude models (Anthropic)",tier:"standard",displayNames:["Claude Opus 5"],cachedInputCostPerMillion:.5,cacheCreationCostPerMillion:6.25},"grok-4.5":{inputCostPerMillion:2,outputCostPerMillion:6,category:"xAI Grok models",tier:"standard",displayNames:["Grok 4.5"],cachedInputCostPerMillion:.5},"gemini-3.7-flash":{inputCostPerMillion:.75,outputCostPerMillion:3.75,category:"Google Gemini models",tier:"standard",displayNames:["Gemini 3.7 Flash"],cachedInputCostPerMillion:.075},"grok-4.6":{inputCostPerMillion:2,outputCostPerMillion:6,category:"xAI Grok models",tier:"standard",displayNames:["Grok 4.6"],cachedInputCostPerMillion:.5},"mai-code-1.1-flash":{inputCostPerMillion:.2,outputCostPerMillion:1.2,category:" models",tier:"standard",displayNames:["MAI-Code-1.1-Flash"],cachedInputCostPerMillion:.02},"kimi-k3":{inputCostPerMillion:3,outputCostPerMillion:15,category:" models",tier:"standard",displayNames:["Kimi K3"],cachedInputCostPerMillion:.3},"claude-fable-5.1":{inputCostPerMillion:10,outputCostPerMillion:50,category:"Claude models (Anthropic)",tier:"standard",displayNames:["Claude Fable 5.1"],cachedInputCostPerMillion:.25,cacheCreationCostPerMillion:12.5},"gpt-6-astra":{inputCostPerMillion:10,outputCostPerMillion:50,category:"OpenAI models",tier:"standard",displayNames:["GPT-6 Astra"],cachedInputCostPerMillion:1,cacheCreationCostPerMillion:12.5},"gemini-3.8-flash":{inputCostPerMillion:.75,outputCostPerMillion:3.75,category:"Google Gemini models",tier:"standard",displayNames:["Gemini 3.8 Flash"],cachedInputCostPerMillion:.075},"grok-4.7":{inputCostPerMillion:2,outputCostPerMillion:6,category:"xAI Grok models",tier:"standard",displayNames:["Grok 4.7"],cachedInputCostPerMillion:.5},"gpt-6-luna":{inputCostPerMillion:.1,outputCostPerMillion:.5,category:"OpenAI models",tier:"standard",displayNames:["GPT-6 Luna"],cachedInputCostPerMillion:.01,cacheCreationCostPerMillion:.125},"gpt-6-sol":{inputCostPerMillion:2,outputCostPerMillion:10,category:"OpenAI models",tier:"standard",displayNames:["GPT-6 Sol"],cachedInputCostPerMillion:.2,cacheCreationCostPerMillion:2.5},"claude-opus-5.5":{inputCostPerMillion:4,outputCostPerMillion:20,category:"Claude models (Anthropic)",tier:"standard",displayNames:["Claude Opus 5.5"],cachedInputCostPerMillion:.2,cacheCreationCostPerMillion:5}}};var Oe={ARXIV_ID:"2505.09598",ARXIV_VERSION:"v6",PROMPT_INPUT_TOKENS:1e4,PROMPT_OUTPUT_TOKENS:1500,ENERGY_WH_PER_QUERY:5.671,ENERGY_WH_PER_QUERY_UNCERTAINTY:.302,PUE:1.14,WUE_SITE_L_PER_KWH:.18,WUE_SOURCE_L_PER_KWH:5.11,CIF_KG_CO2E_PER_KWH:.287},ZD=Object.freeze({paper:"https://arxiv.org/abs/2505.09598",neuland:"https://github.com/neuland/tokendashboard-backend/blob/main/docs/co2-methodology.md"});var Dr=1/20,gp=Oe.PROMPT_OUTPUT_TOKENS+Oe.PROMPT_INPUT_TOKENS*Dr,lT=Oe.ENERGY_WH_PER_QUERY/1e3/Oe.PUE*Oe.WUE_SITE_L_PER_KWH+Oe.ENERGY_WH_PER_QUERY/1e3*Oe.WUE_SOURCE_L_PER_KWH,vt={CO2_GRAMS_PER_MILLION_OUTPUT_EQUIVALENT_TOKENS:840,WATER_LITERS_PER_MILLION_OUTPUT_EQUIVALENT_TOKENS:lT/gp*1e6,INPUT_TOKEN_OUTPUT_EQUIVALENT_WEIGHT:Dr,CACHE_WRITE_OUTPUT_EQUIVALENT_WEIGHT:Dr*1.25,CACHE_READ_OUTPUT_EQUIVALENT_WEIGHT:Dr*.01,UNATTRIBUTED_OUTPUT_EQUIVALENT_PER_TOKEN:gp/(Oe.PROMPT_INPUT_TOKENS+Oe.PROMPT_OUTPUT_TOKENS),REFERENCE_OUTPUT_COST_PER_MILLION:15,CO2_ABSORPTION_PER_TREE_PER_YEAR:21e3},yp=dn.pricing;function cT(n,e=yp){for(let t of Js(n)){let s=e[t];if(s)return s.outputCostPerMillion>0?s.outputCostPerMillion/vt.REFERENCE_OUTPUT_COST_PER_MILLION:1}return 1}function uT(n){let e=Math.max(0,n.cachedReadTokens??0),t=Math.max(0,n.cacheCreationTokens??0),s=Math.max(0,n.inputTokens-e-t);return Math.max(0,n.outputTokens)+s*vt.INPUT_TOKEN_OUTPUT_EQUIVALENT_WEIGHT+t*vt.CACHE_WRITE_OUTPUT_EQUIVALENT_WEIGHT+e*vt.CACHE_READ_OUTPUT_EQUIVALENT_WEIGHT}function fp(n){let e=0;for(let t of Object.values(n))e+=Math.max(0,t.inputTokens)+Math.max(0,t.outputTokens);return e}var hp="unknown";function dT(n){if(!(hp in n))return n;let{[hp]:e,...t}=n;return t}function _p(n,e,t=yp){let s=dT(n),o=fp(s),i=Math.max(0,(e??fp(n))-o),r=i*vt.UNATTRIBUTED_OUTPUT_EQUIVALENT_PER_TOKEN,a=r,l=r;for(let[p,g]of Object.entries(s)){let h=uT(g);a+=h,l+=h*cT(p,t)}let d=l/1e6*vt.CO2_GRAMS_PER_MILLION_OUTPUT_EQUIVALENT_TOKENS;return{co2:d,waterUsage:l/1e6*vt.WATER_LITERS_PER_MILLION_OUTPUT_EQUIVALENT_TOKENS,treesEquivalent:d/vt.CO2_ABSORPTION_PER_TREE_PER_YEAR,outputEquivalentTokens:a,attributedTokens:o,unattributedTokens:i}}function bp(n,e){let t=gr("last7",e),s=gr("last30",e),o=gr("currentMonth",e),i={last7:[],last30:[],currentMonth:[]};for(let r of[...n].sort((a,l)=>l.interactions-a.interactions))r.activityKey>=t&&i.last7.push(r.value),r.activityKey>=s&&i.last30.push(r.value),r.activityKey>=o&&i.currentMonth.push(r.value);return i}var rs=S(require("fs")),$l=S(require("path")),Cp=S(require("os"));var Er=class{maxEntries;constructor(e=2e3){this.maxEntries=e}isValid(e,t,s){return e.mtime===t&&e.size===s}evict(e){if(e.size<=this.maxEntries)return;let t=[...e.entries()].sort((s,o)=>o[1].mtime-s[1].mtime);e.clear();for(let[s,o]of t.slice(0,this.maxEntries))e.set(s,o)}};var kp=7,mT=2e3,Sp=$l.join(Cp.homedir(),".copilot-token-tracker"),Wl=$l.join(Sp,"cli-cache.json"),$t=new Map,mn=!0,Tp=!1,wp=new Er(mT);function Hl(){mn=!1,$t.clear()}function Jl(){if(mn)try{if(!rs.existsSync(Wl))return;let n=rs.readFileSync(Wl,"utf-8"),e=JSON.parse(n);if(e.version!==kp){$t.clear();return}$t=new Map(Object.entries(e.entries))}catch{$t.clear()}}function Kl(){if(!(!mn||!Tp))try{wp.evict($t),rs.mkdirSync(Sp,{recursive:!0});let n={version:kp,entries:Object.fromEntries($t)};rs.writeFileSync(Wl,JSON.stringify(n),"utf-8")}catch{}}function Mp(n,e,t){if(!mn)return null;let s=$t.get(n);return!s||!wp.isValid(s,e,t)?null:{...s.data,lastModified:new Date(s.data.lastModified)}}function Vl(n,e,t,s){mn&&(Tp=!0,$t.set(n,{mtime:e,size:t,data:{...s,lastModified:s.lastModified.toISOString()}}))}function Yl(){return{entries:$t.size,enabled:mn}}var vp={$schema:"http://json-schema.org/draft-07/schema#",description:"Character-to-token ratio estimators for different AI models. Used to estimate token counts from text length.",estimators:{"gpt-4":.25,"gpt-4.1":.25,"gpt-4.1-mini":.25,"gpt-4o":.25,"gpt-4o-mini":.25,"gpt-4-turbo":.25,"gpt-3.5-turbo":.25,"gpt-5":.25,"gpt-5-codex":.25,"gpt-5-mini":.25,"gpt-5.1":.25,"gpt-5.1-codex":.25,"gpt-5.1-codex-max":.25,"gpt-5.1-codex-mini":.25,"gpt-5.2":.25,"gpt-5.2-codex":.25,"gpt-5.2-pro":.25,"gpt-5.3-codex":.25,"gpt-5.4":.25,"gpt-5.4-mini":.25,"gpt-5.4-nano":.25,"gpt-4.1-nano":.25,"gemini-2.0-flash":.25,"gemini-2.0-flash-lite":.25,"gemini-2.5-flash":.25,"gemini-2.5-flash-lite":.25,"claude-sonnet-3.5":.24,"claude-sonnet-3.7":.24,"claude-sonnet-4":.24,"claude-sonnet-4.5":.24,"claude-sonnet-4.6":.24,"claude-haiku":.24,"claude-haiku-4.5":.24,"claude-opus-4.1":.24,"claude-opus-4.5":.24,"claude-opus-4.6":.24,"claude-opus-4.6-(fast-mode)-(preview)":.24,"claude-opus-4.6-fast":.24,"claude-opus-4.7":.24,"gemini-2.5-pro":.25,"gemini-3-flash":.25,"gemini-3-pro":.25,"gemini-3-pro-preview":.25,"gemini-3.1-pro":.25,"gemini-3.1-flash-lite":.25,"grok-code-fast-1":.25,"raptor-mini":.25,goldeneye:.25,"o1-preview":.25,"o1-mini":.25,"o3-mini":.25,"o4-mini":.25,"gpt-5.5":.25,"mistral-large-latest":.25,"mistral-large-2512":.25,"mistral-large-2411":.25,"magistral-medium-latest":.25,"mistral-medium-latest":.25,"mistral-medium-3-5":.25,"mistral-medium-2505":.25,"mistral-small-latest":.25,"mistral-small-2503":.25,"mistral-small-2603":.25,"codestral-latest":.25,"codestral-2501":.25,"open-mistral-nemo":.25,"ministral-3b-2410":.25,"ministral-8b-2410":.25,"magistral-small-latest":.25,"devstral-medium-2507":.25,"pixtral-large-2411":.25,"gemini-3.5-flash":.25,"claude-opus-4.8":.24,"qwen2.5":.25,"mai-code-1-flash[^mai-code-1-flash]":.25,"mai-code-1-flash":.25,"claude-fable-5":.24,"claude-sonnet-5":.24,"claude-opus-4.8-(fast-mode)-(preview)":.24,"kimi-k2.7-code":.25,"gpt-5.6-luna":.25,"gpt-5.6-sol":.25,"gpt-5.6-terra":.25,"gemini-3.6-flash":.25,"claude-opus-5":.24,"grok-4.5":.25,"gemini-3.7-flash":.25,"grok-4.6":.25,"mai-code-1.1-flash":.25,"kimi-k3":.25,"claude-fable-5.1":.24,"gpt-6-astra":.25,"gemini-3.8-flash":.25,"grok-4.7":.25,"gpt-6-luna":.25,"gpt-6-sol":.25,"claude-opus-5.5":.24}};var Pp={unknown:"Unknown",windsurf_cascade:"Windsurf Cascade",windsurf_file_edit:"Windsurf: File Edit",windsurf_file_create:"Windsurf: File Create",windsurf_file_read:"Windsurf: File Read",windsurf_terminal:"Windsurf: Terminal",windsurf_search:"Windsurf: Search",windsurf_browser:"Windsurf: Browser",run_in_terminal:"Run In Terminal",run_shell_command:"Run Shell Command",send_to_terminal:"Send To Terminal",run_build:"Run Build",run_command_in_terminal:"Run Command In Terminal","mcp.io.github.git.assign_copilot_to_issue":"GitHub MCP (Local): Assign Copilot to Issue","mcp.io.github.git.create_or_update_file":"GitHub MCP (Local): Create/Update File",mcp_io_github_git_create_or_update_file:"GitHub MCP (Local): Create/Update File",mcp_io_github_git_assign_copilot_to_issue:"GitHub MCP (Local): Assign Copilot to Issue",mcp_io_github_git_pull_request_read:"GitHub MCP (Local): Pull Request Read",mcp_io_github_git_issue_read:"GitHub MCP (Local): Issue Read",mcp_io_github_git_issue_write:"GitHub MCP (Local): Issue Write",mcp_io_github_git_list_issues:"GitHub MCP (Local): List Issues",mcp_io_github_git_create_pull_request:"GitHub MCP (Local): Create Pull Request",mcp_io_github_git_get_file_contents:"GitHub MCP (Local): Get File Contents",mcp_io_github_git_search_code:"GitHub MCP (Local): Search Code",mcp_io_github_git_search_pull_requests:"GitHub MCP (Local): Search Pull Requests",mcp_io_github_git_get_release_by_tag:"GitHub MCP (Local): Get Release By Tag",mcp_io_github_git_search_issues:"GitHub MCP (Local): Search Issues",mcp_io_github_git_add_issue_comment:"GitHub MCP (Local): Add Issue Comment",mcp_io_github_git_list_pull_requests:"GitHub MCP (Local): List Pull Requests",mcp_io_github_git_get_commit:"GitHub MCP (Local): Get Commit",mcp_io_github_git_list_commits:"GitHub MCP (Local): List Commits",mcp_io_github_git_list_code_scanning_alerts:"GitHub MCP (Local): List Code Scanning Alerts",mcp_io_github_git_get_repository_tree:"GitHub MCP (Local): Get Repository Tree",mcp_io_github_git_get_job_logs:"GitHub MCP (Local): Get Job Logs",mcp_io_github_git_list_tags:"GitHub MCP (Local): List Tags",mcp_io_github_git_search_repositories:"GitHub MCP (Local): Search Repositories",mcp_io_github_git_create_repository:"GitHub MCP (Local): Create Repository",mcp_io_github_git_search_users:"GitHub MCP (Local): Search Users",mcp_io_github_git_get_latest_release:"GitHub MCP (Local): Get Latest Release",mcp_io_github_git_get_tag:"GitHub MCP (Local): Get Tag",mcp_github_github_assign_copilot_to_issue:"GitHub MCP (Remote): Assign Copilot to Issue",mcp_github_github_issue_read:"GitHub MCP (Remote): Issue Read",mcp_github_github_issue_write:"GitHub MCP (Remote): Issue Write",mcp_github_github_list_issues:"GitHub MCP (Remote): List Issues",mcp_github_get_file_contents:"GitHub MCP (Remote): Get File Contents",mcp_github_get_latest_release:"GitHub MCP (Remote): Get Latest Release",mcp_github_get_release_by_tag:"GitHub MCP (Remote): Get Release By Tag",mcp_github_list_releases:"GitHub MCP (Remote): List Releases",mcp_github_list_tags:"GitHub MCP (Remote): List Tags",mcp_github_search_code:"GitHub MCP (Remote): Search Code",mcp_github_search_issues:"GitHub MCP (Remote): Search Issues",mcp_github_issue_write:"GitHub MCP (Remote): Issue Write",mcp_github_list_issues:"GitHub MCP (Remote): List Issues",mcp_github_create_pull_request:"GitHub MCP (Remote): Create Pull Request",mcp_github_pull_request_read:"GitHub MCP (Remote): Pull Request Read",mcp_github_list_branches:"MCP GitHub List Branches",mcp_github_update_pull_request:"MCP GitHub Update Pull Request","github-mcp-server-get_file_contents":"GitHub MCP: Get File Contents","github-mcp-server-get_job_logs":"GitHub MCP: Get Job Logs","github-mcp-server-list_commits":"GitHub MCP: List Commits","github-mcp-server-search_code":"GitHub MCP: Search Code","github-mcp-server-actions_list":"GitHub MCP: Actions List","github-mcp-server-list_issues":"GitHub MCP: List Issues","github-mcp-server-search_repositories":"GitHub MCP: Search Repositories","github-mcp-server-list_branches":"GitHub MCP: List Branches","github-mcp-server-issue_read":"GitHub MCP: Issue Read","github-mcp-server-issue_write":"GitHub MCP: Issue Write","github-mcp-server-pull_request_read":"GitHub MCP: Pull Request Read","github-mcp-server-search_issues":"GitHub MCP: Search Issues","github-mcp-server-search_users":"GitHub MCP: Search Users","github-mcp-server-sub_issue_write":"GitHub MCP: Sub Issue Write","github-mcp-server-list_pull_requests":"GitHub MCP Server List Pull Requests","github-mcp-server-search_pull_requests":"GitHub MCP (Remote): Search Pull Requests","github-actions_get":"GitHub Actions: Get","github-actions_list":"GitHub Actions: List","github-create_pull_request":"GitHub: Create Pull Request","github-get_commit":"GitHub: Get Commit","github-get_file_contents":"GitHub: Get File Contents","github-get_job_logs":"GitHub: Get Job Logs","github-get_latest_release":"GitHub: Get Latest Release","github-get_me":"GitHub: Get Me","github-get_release_by_tag":"GitHub: Get Release By Tag","github-get_repository_tree":"GitHub: Get Repository Tree","github-get_teams":"GitHub: Get Teams","github-github_support_docs_search":"GitHub: GitHub Support Docs Search","github-issue_read":"GitHub: Issue Read","github-list_code_scanning_alerts":"GitHub: List Code Scanning Alerts","github-list_dependabot_alerts":"GitHub: List Dependabot Alerts","github-list_tags":"GitHub: List Tags","github-pull_request_read":"GitHub: Pull Request Read","github-pull_request_review_write":"GitHub: Pull Request Review Write","github-search_code":"GitHub: Search Code","github-search_pull_requests":"GitHub: Search Pull Requests","github-search_repositories":"GitHub: Search Repositories","github-update_pull_request":"GitHub: Update Pull Request","mcp_github-code-s_get_code_scanning_alert":"GitHub MCP (Code Scanning): Get Alert","mcp_github-code-s_list_code_scanning_alerts":"GitHub MCP (Code Scanning): List Alerts",mcp_com_microsoft_get_bestpractices:"GitHub MCP: Get Best Practices",mcp_microsoft_doc_microsoft_code_sample_search:"Microsoft Docs MCP: Code Sample Search",mcp_microsoft_doc_microsoft_docs_search:"Microsoft Docs MCP: Docs Search",mcp_microsoftdocs_microsoft_code_sample_search:"Microsoft Docs MCP: Code Sample Search",mcp_microsoftdocs_microsoft_docs_fetch:"Microsoft Docs MCP: Docs Fetch",mcp_microsoftdocs_microsoft_docs_search:"Microsoft Docs MCP: Docs Search",Microsoft_Learn_microsoft_docs_search:"Microsoft Learn: Docs Search","microsoft-learn-microsoft_docs_search":"Microsoft Learn: Docs Search",mcp_gitkraken_git_add_or_commit:"GitKraken MCP: Git Add or Commit",mcp_gitkraken_git_status:"GitKraken MCP: Git Status",mcp_gitkraken_git_branch:"GitKraken MCP: Git Branch",mcp_gitkraken_git_checkout:"GitKraken MCP: Git Checkout",mcp_gitkraken_git_log_or_diff:"GitKraken MCP: Git Log or Diff",mcp_gitkraken_gitkraken_workspace_list:"GitKraken MCP: List Workspaces",mcp_gitkraken_git_push:"GitKraken MCP: Git Push",mcp_gitkraken_gitlens_commit_composer:"GitKraken MCP: GitLens Commit Composer",mcp_git_git_log:"Git MCP: Git Log",mcp_git_git_show:"Git MCP: Git Show",mcp_git_git_diff_staged:"Git MCP: Git Diff Staged",mcp_pencil_batch_design:"Pencil MCP: Batch Design",mcp_pencil_get_editor_state:"Pencil MCP: Get Editor State",mcp_pencil_get_guidelines:"Pencil MCP: Get Guidelines",mcp_pencil_get_screenshot:"Pencil MCP: Get Screenshot",mcp_pencil_snapshot_layout:"Pencil MCP: Snapshot Layout",mcp_figma_get_design_context:"Figma MCP: Get Design Context",mcp_figma_get_screenshot:"Figma MCP: Get Screenshot",mcp_figma_get_variable_defs:"Figma MCP: Get Variable Defs",mcp_azure_aks:"Azure MCP: AKS",mcp_azure_mcp_azureterraformbestpractices:"Azure MCP: Azure Terraform Best Practices",mcp_azure_mcp_documentation:"Azure MCP: Documentation",mcp_azure_mcp_get_bestpractices:"Azure MCP: Get Best Practices",mcp_azure_mcp_group_list:"Azure MCP: Group List",mcp_azure_mcp_storage:"Azure MCP: Storage",mcp_azure_mcp_subscription_list:"Azure MCP: Subscription List",mcp_azure_mcp_pricing:"Azure MCP: Pricing",mcp_azure_mcp_get_azure_bestpractices:"Azure MCP: Get Azure Best Practices","azure-mcp-azureterraformbestpractices":"Azure MCP: Azure Terraform Best Practices","azure-mcp-documentation":"Azure MCP: Documentation","azure-mcp-extension_cli_generate":"Azure MCP: Extension CLI Generate","azure-mcp-get_azure_bestpractices":"Azure MCP: Get Azure Best Practices","azure-mcp-group_list":"Azure MCP: Group List","azure-mcp-subscription_list":"Azure MCP: Subscription List",mcp_bicep_format_bicep_file:"Bicep MCP: Format Bicep File",mcp_bicep_get_az_resource_type_schema:"Bicep MCP: Get Az Resource Type Schema",mcp_bicep_get_bicep_best_practices:"Bicep MCP: Get Bicep Best Practices",mcp_bicep_get_bicep_file_diagnostics:"Bicep MCP: Get Bicep File Diagnostics",mcp_bicep_list_az_resource_types_for_provider:"Bicep MCP: List Az Resource Types For Provider","azure_bicep-get_azure_verified_module":"Azure Bicep: Get Azure Verified Module","azure_development-recommend_custom_modes":"Azure Development: Recommend Custom Modes","azure_resources-query_azure_resource_graph":"Azure Resources: Query Azure Resource Graph",azureResources_getAzureActivityLog:"Azure Resources: Get Azure Activity Log","azure_auth-get_auth_context":"Azure Auth: Get Auth Context","azure_auth-set_auth_context":"Azure Auth: Set Auth Context","ms-azuretools.azure-agent":"Azure Agent",manage_todo_list:"Manage TODO List",copilot_readFile:"Read File",copilot_viewImage:"Copilot View Image",opilot_findFiles:"Find Files",copilot_writeFile:"Write File",copilot_applyPatch:"Apply Patch",copilot_findTextInFiles:"Find Text In Files",copilot_findFiles:"Find Files",copilot_replaceString:"Replace String",copilot_createFile:"Create File",copilot_listDirectory:"List Directory",copilot_fetchWebPage:"Fetch Web Page",copilot_getErrors:"Get Errors",copilot_multiReplaceString:"Multi Replace String",copilot_searchCodebase:"Search Codebase",get_terminal_output:"Get Terminal Output",run_task:"Run Task: Investigate",await_terminal:"Await Terminal command","github.copilot.editsAgent":"GitHub Copilot Edits Agent",todoList:"TODO List",terminal:"Terminal",terminal_last_command:"Terminal Last Command",github_pull_request:"GitHub Pull Request",github_repo:"GitHub Repository",editFiles:"Edit Files",listFiles:"List Files",list_issues:"List Issues",search_subagent:"Search Subagent",execution_subagent:"Execution Subagent",apply_patch:"Apply Patch",ask_questions:"Ask Questions",AskUserQuestion:"Ask User Question",ask_user_question:"Ask User Question",copilot_askQuestions:"Ask Questions",copilot_createAndRunTask:"Create And Run Task",copilot_createDirectory:"Create Directory",copilot_createNewJupyterNotebook:"Create New Jupyter Notebook",copilot_createNewWorkspace:"Create New Workspace",copilot_editFiles:"Edit Files",copilot_editNotebook:"Edit Notebook",copilot_findTestFiles:"Find Test Files",copilot_getChangedFiles:"Get Changed Files",copilot_getDocInfo:"Get Doc Info",copilot_getNotebookSummary:"Get Notebook Summary",copilot_getProjectSetupInfo:"Get Project Setup Info",copilot_getSearchResults:"Get Search Results",copilot_getVSCodeAPI:"Get VSCode API",copilot_githubRepo:"GitHub Repository",copilot_githubTextSearch:"GitHub Text Search",copilot_resolveMemoryFileUri:"Resolve Memory File URI",copilot_insertEdit:"Insert Edit",copilot_installExtension:"Install Extension",copilot_memory:"Memory",copilot_openIntegratedBrowser:"Open Integrated Browser",copilot_openSimpleBrowser:"Open Simple Browser",copilot_readNotebookCellOutput:"Read Notebook Cell Output",copilot_readProjectStructure:"Read Project Structure",copilot_runNotebookCell:"Run Notebook Cell",copilot_runInTerminal:"Run In Terminal",copilot_runTests1:"Run Tests",copilot_runVscodeCommand:"Run VSCode Command",copilot_searchWorkspaceSymbols:"Search Workspace Symbols",copilot_switchAgent:"Switch Agent",copilot_testFailure:"Test Failure",copilot_toolReplay:"Tool Replay",create_and_run_task:"Create And Run Task",create_directory:"Create Directory",create_file:"Create File",remove_file:"Remove File",create_new_jupyter_notebook:"Create New Jupyter Notebook",create_new_workspace:"Create New Workspace",create_virtual_environment:"Create Virtual Environment",edit_files:"Edit Files",edit_file:"Edit File",edit_notebook_file:"Edit Notebook File",fetch_webpage:"Fetch Webpage",file_search:"File Search",get_changed_files:"Get Changed Files",get_doc_info:"Get Doc Info",get_errors:"Get Errors",get_project_setup_info:"Get Project Setup Info",get_files_in_project:"Get Files In Project",get_projects_in_solution:"Get Projects In Solution",configure_python_environment:"Configure Python Environment",get_python_executable_details:"Get Python Executable Details",get_search_view_results:"Get Search View Results",get_task_output:"Get Task Output",get_output_window_logs:"Get Output Window Logs",job_output:"Job Output",get_vscode_api:"Get VSCode API",grep_search:"Grep Search",insert_edit_into_file:"Insert Edit Into File",install_extension:"Install Extension",install_python_packages:"Install Python Packages",list_dir:"List Dir",list_directory:"List Directory",ls:"Ls",memory:"Memory",multi_replace_string_in_file:"Multi Replace String In File",open_integrated_browser:"Open Integrated Browser",open_simple_browser:"Open Simple Browser",read_file:"Read File",view_image:"View Image",read_notebook_cell_output:"Read Notebook Cell Output",read_project_structure:"Read Project Structure",replace_string_in_file:"Replace String In File","setup.agent":"Setup Agent",selectEnvironment:"Select Environment",run_notebook_cell:"Run Notebook Cell",run_vscode_command:"Run VSCode Command",runSubagent:"Run Subagent",renderMermaidDiagram:"Render Mermaid Diagram",runTests:"Run Tests",search_workspace_symbols:"Search Workspace Symbols",semantic_search:"Semantic Search",switch_agent:"Switch Agent",terminal_selection:"Terminal Selection",test_failure:"Test Failure",test_search:"Test Search",tool_replay:"Tool Replay",tool_search:"Tool Search",vscode_askQuestions:"VSCode Ask Questions",vscode_get_confirmation:"VSCode Get Confirmation",vscode_get_confirmation_with_options:"VSCode Get Confirmation With Options",vscode_get_terminal_confirmation:"VSCode Get Terminal Confirmation",vscode_get_modified_files_confirmation:"VSCode Get Modified Files Confirmation",vscode_listCodeUsages:"VSCode List Code Usages",vscode_renameSymbol:"VSCode Rename Symbol","mcp_io_github_ups_get-library-docs":"Context7 MCP: Get Library Docs","mcp_io_github_ups_query-docs":"Context7 MCP: Query Docs","mcp_io_github_ups_resolve-library-id":"Context7 MCP: Resolve Library ID","mcp_context7_get-library-docs":"Context7 MCP: Get Library Docs","mcp_context7_query-docs":"Context7 MCP: Query Docs","mcp_context7_resolve-library-id":"Context7 MCP: Resolve Library ID",mcp_microsoft_pla_browser_evaluate:"Playwright MCP: Browser Evaluate",mcp_microsoft_pla_browser_install:"Playwright MCP: Browser Install",mcp_microsoft_pla_browser_navigate:"Playwright MCP: Browser Navigate",mcp_microsoft_pla_browser_run_code:"Playwright MCP: Browser Run Code",mcp_microsoft_pla_browser_click:"Playwright MCP: Browser Click",mcp_microsoft_pla_browser_fill_form:"Playwright MCP: Browser Fill Form",mcp_microsoft_pla_browser_press_key:"Playwright MCP: Browser Press Key",mcp_microsoft_pla_browser_resize:"Playwright MCP: Browser Resize",mcp_microsoft_pla_browser_snapshot:"Playwright MCP: Browser Snapshot",mcp_microsoft_pla_browser_tabs:"Playwright MCP: Browser Tabs",mcp_microsoft_pla_browser_take_screenshot:"Playwright MCP: Browser Take Screenshot",mcp_microsoft_pla_browser_type:"Playwright MCP: Browser Type",mcp_microsoft_pla_browser_console_messages:"MCP Microsoft Playwright Browser Console Messages",mcp_microsoft_pla_browser_wait_for:"Mcp Microsoft Pla Browser Wait For",mcp_playwright_browser_click:"Playwright MCP: Browser Click",mcp_playwright_browser_navigate:"Playwright MCP: Browser Navigate",mcp_playwright_browser_snapshot:"Playwright MCP: Browser Snapshot",mcp_playwright_browser_take_screenshot:"Playwright MCP: Browser Take Screenshot","microsoft-playwright-mcp-browser_evaluate":"Playwright MCP: Browser Evaluate","microsoft-playwright-mcp-browser_navigate":"Playwright MCP: Browser Navigate","microsoft-playwright-mcp-browser_snapshot":"Playwright MCP: Browser Snapshot",mcp_pylance_mcp_s_pylanceDocString:"Pylance MCP: Pylance Doc String",mcp_pylance_mcp_s_pylanceRunCodeSnippet:"Pylance MCP: Run Code Snippet",mcp_pylance_mcp_s_pylanceWorkspaceRoots:"Pylance MCP: Workspace Roots",mcp_pylance_mcp_s_pylanceFileSyntaxErrors:"Pylance MCP: File Syntax Errors",mcp_pylance_mcp_s_pylanceSyntaxErrors:"Pylance MCP: Syntax Errors","mcp_chrome-devtoo_click":"Chrome DevTools MCP: Click","mcp_chrome-devtoo_evaluate_script":"Chrome DevTools MCP: Evaluate Script","mcp_chrome-devtoo_fill":"Chrome DevTools MCP: Fill","mcp_chrome-devtoo_get_network_request":"Chrome DevTools MCP: Get Network Request","mcp_chrome-devtoo_list_console_messages":"Chrome DevTools MCP: List Console Messages","mcp_chrome-devtoo_list_pages":"Chrome DevTools MCP: List Pages","mcp_chrome-devtoo_navigate_page":"Chrome DevTools MCP: Navigate Page","mcp_chrome-devtoo_new_page":"Chrome DevTools MCP: New Page","mcp_chrome-devtoo_select_page":"Chrome DevTools MCP: Select Page","mcp_chrome-devtoo_take_screenshot":"Chrome DevTools MCP: Take Screenshot","mcp_chrome-devtoo_fill_form":"Chrome DevTools MCP: Fill Form","mcp_chrome-devtoo_hover":"Chrome DevTools MCP: Hover","mcp_chrome-devtoo_list_network_requests":"Chrome DevTools MCP: List Network Requests","mcp_chrome-devtoo_press_key":"Chrome DevTools MCP: Press Key","mcp_chrome-devtoo_take_snapshot":"Chrome DevTools MCP: Take Snapshot","mcp_chrome-devtoo_wait_for":"Chrome DevTools MCP: Wait For","mcp_chrome-devtoo_close_page":"Chrome DevTools MCP: Close Page","mcp_chrome-devtoo_lighthouse_audit":"Chrome DevTools MCP: Lighthouse Audit","mcp_chrome-devtoo_performance_analyze_insight":"Chrome DevTools MCP: Performance Analyze Insight","mcp_chrome-devtoo_performance_start_trace":"Chrome DevTools MCP: Performance Start Trace","mcp_chrome-devtoo_resize_page":"Chrome DevTools MCP: Resize Page","mcp_chrome-devtoo_type_text":"Chrome DevTools MCP: Type Text",mcp_chrome_devtoo_click:"Chrome DevTools MCP: Click",mcp_chrome_devtoo_evaluate_script:"Chrome DevTools MCP: Evaluate Script",mcp_chrome_devtoo_fill:"Chrome DevTools MCP: Fill",mcp_chrome_devtoo_get_console_message:"Chrome DevTools MCP: Get Console Message",mcp_chrome_devtoo_get_network_request:"Chrome DevTools MCP: Get Network Request",mcp_chrome_devtoo_list_console_messages:"Chrome DevTools MCP: List Console Messages",mcp_chrome_devtoo_list_network_requests:"Chrome DevTools MCP: List Network Requests",mcp_chrome_devtoo_list_pages:"Chrome DevTools MCP: List Pages",mcp_chrome_devtoo_navigate_page:"Chrome DevTools MCP: Navigate Page",mcp_chrome_devtoo_new_page:"Chrome DevTools MCP: New Page",mcp_chrome_devtoo_take_snapshot:"Chrome DevTools MCP: Take Snapshot",mcp_chrome_devtoo_wait_for:"Chrome DevTools MCP: Wait For",mcp_io_github_chr_click:"Chrome DevTools MCP: Click",mcp_io_github_chr_emulate:"Chrome DevTools MCP: Emulate",mcp_io_github_chr_evaluate_script:"Chrome DevTools MCP: Evaluate Script",mcp_io_github_chr_list_network_requests:"Chrome DevTools MCP: List Network Requests",mcp_io_github_chr_list_pages:"Chrome DevTools MCP: List Pages",mcp_io_github_chr_navigate_page:"Chrome DevTools MCP: Navigate Page",mcp_io_github_chr_new_page:"Chrome DevTools MCP: New Page",mcp_io_github_chr_resize_page:"Chrome DevTools MCP: Resize Page",mcp_io_github_chr_select_page:"Chrome DevTools MCP: Select Page",mcp_io_github_chr_take_snapshot:"Chrome DevTools MCP: Take Snapshot",mcp_oraios_serena_activate_project:"Serena: Activate Project",mcp_oraios_serena_check_onboarding_performed:"Serena: Check Onboarding Performed",mcp_oraios_serena_create_text_file:"Serena: Create Text File",mcp_oraios_serena_delete_lines:"Serena: Delete Lines",mcp_oraios_serena_delete_memory:"Serena: Delete Memory",mcp_oraios_serena_edit_memory:"Serena: Edit Memory",mcp_oraios_serena_execute_shell_command:"Serena: Execute Shell Command",mcp_oraios_serena_find_file:"Serena: Find File",mcp_oraios_serena_find_referencing_symbols:"Serena: Find Referencing Symbols",mcp_oraios_serena_find_symbol:"Serena: Find Symbol",mcp_oraios_serena_get_current_config:"Serena: Get Current Config",mcp_oraios_serena_get_symbols_overview:"Serena: Get Symbols Overview",mcp_oraios_serena_initial_instructions:"Serena: Initial Instructions",mcp_oraios_serena_insert_after_symbol:"Serena: Insert After Symbol",mcp_oraios_serena_insert_at_line:"Serena: Insert At Line",mcp_oraios_serena_insert_before_symbol:"Serena: Insert Before Symbol",mcp_oraios_serena_jet_brains_find_referencing_symbols:"Serena: JetBrains Find Referencing Symbols",mcp_oraios_serena_jet_brains_find_symbol:"Serena: JetBrains Find Symbol",mcp_oraios_serena_jet_brains_get_symbols_overview:"Serena: JetBrains Get Symbols Overview",mcp_oraios_serena_jet_brains_type_hierarchy:"Serena: JetBrains Type Hierarchy",mcp_oraios_serena_list_dir:"Serena: List Dir",mcp_oraios_serena_list_memories:"Serena: List Memories",mcp_oraios_serena_onboarding:"Serena: Onboarding",mcp_oraios_serena_open_dashboard:"Serena: Open Dashboard",mcp_oraios_serena_prepare_for_new_conversation:"Serena: Prepare For New Conversation",mcp_oraios_serena_read_file:"Serena: Read File",mcp_oraios_serena_read_memory:"Serena: Read Memory",mcp_oraios_serena_remove_project:"Serena: Remove Project",mcp_oraios_serena_rename_symbol:"Serena: Rename Symbol",mcp_oraios_serena_replace_content:"Serena: Replace Content",mcp_oraios_serena_replace_lines:"Serena: Replace Lines",mcp_oraios_serena_replace_symbol_body:"Serena: Replace Symbol Body",mcp_oraios_serena_restart_language_server:"Serena: Restart Language Server",mcp_oraios_serena_search_for_pattern:"Serena: Search For Pattern",mcp_oraios_serena_summarize_changes:"Serena: Summarize Changes",mcp_oraios_serena_switch_modes:"Serena: Switch Modes",mcp_oraios_serena_think_about_collected_information:"Serena: Think About Collected Information",mcp_oraios_serena_think_about_task_adherence:"Serena: Think About Task Adherence",mcp_oraios_serena_think_about_whether_you_are_done:"Serena: Think About Whether You Are Done",mcp_oraios_serena_write_memory:"Serena: Write Memory","mcp_visuals-mcp_display_image":"Visuals MCP: Display Image","mcp_laravel-boost_tinker":"Laravel Boost MCP: Tinker",bash:"Bash",Bash:"Bash",code_search:"Code Search",detect_memories:"Detect Memories",dismiss_deployment_notifications:"Dismiss Deployment Notifications",get_currentfile:"Get Current File",get_file:"Get File",get_symbols_by_name:"Get Symbols By Name","claude-code":"Claude Code","copilot-cloud-agent":"Copilot Cloud Agent",agent:"Agent",copilotcli:"Copilot CLI","github.copilot.default":"GitHub Copilot Default","github.copilot.workspace":"GitHub Copilot Workspace","github.copilot.vscode":"GitHub Copilot VSCode","github.copilot-dynamic.platform":"GitHub Copilot Dynamic: Platform",glob:"Glob",file_glob_search:"File Glob Search",grep:"Grep",kill_terminal:"Kill Terminal",read:"Read",view:"View",vscode_editFile_internal:"VSCode Edit File (Internal)",vscode_fetchWebPage_internal:"VSCode Fetch Web Page (Internal)",vscode_searchExtensions_internal:"VSCode Search Extensions (Internal)","vscode-websearchforcopilot_webSearch":"VSCode WebSearch for Copilot: Web Search",Build_CMakeTools:"CMake Tools: Build",ListBuildTargets_CMakeTools:"CMake Tools: List Build Targets",ListTests_CMakeTools:"CMake Tools: List Tests",RunCtest_CMakeTools:"CMake Tools: Run CTest","nuget_get-nuget-solver":"NuGet: Get NuGet Solver",webfetch:"Web Fetch",web_fetch:"Web Fetch",write:"Write",edit:"Edit",search_replace:"Search Replace",write_file:"Write File",multiedit:"Multi Edit",question:"Question",skill:"Skill",read_skill:"Read Skill",task:"Task",todowrite:"Todo Write",TodoWrite:"Todo Write",todos:"Todos",todo:"Todo",websearch:"Web Search",WebSearch:"Web Search",click_element:"Click Element",navigate_page:"Navigate Page",open_browser_page:"Open Browser Page",read_page:"Read Page",run_playwright_code:"Run Playwright Code",screenshot_page:"Screenshot Page",type_in_page:"Type in Page",task_complete:"Task Complete","pdf-utilities.pdf":"PDF Utilities: PDF","container-tools_get-config":"Container Tools: Get Config","github-pull-request_activePullRequest":"GitHub Pull Request: Active Pull Request","github-pull-request_currentActivePullRequest":"GitHub Pull Request: Current Active Pull Request","github-pull-request_issue_fetch":"GitHub Pull Request: Issue Fetch","github-pull-request_pullRequestStatusChecks":"GitHub Pull Request: Pull Request Status Checks","github-pull-request_pullRequestInViewport":"GitHub MCP (Remote): Pull Request In Viewport","mcp_powerbi-model_connection_operations":"Power BI MCP: Connection Operations",MiniMax_web_search:"MiniMax: Web Search",dingDocuments_get_document_content:"Ding Documents: Get Document Content",dingDocuments_list_nodes:"Ding Documents: List Nodes",dingDocuments_search_documents:"Ding Documents: Search Documents",fetch_fetch:"Fetch: Fetch",mcp__Claude_in_Chrome__computer:"Claude in Chrome MCP: Computer",mcp__Claude_in_Chrome__navigate:"Claude in Chrome MCP: Navigate",mcp__Claude_in_Chrome__browser_batch:"Claude in Chrome MCP: Browser Batch",mcp__Claude_in_Chrome__get_page_text:"Claude in Chrome MCP: Get Page Text",mcp__Claude_in_Chrome__tabs_context_mcp:"Claude in Chrome MCP: Tabs Context",mcp__Claude_in_Chrome__tabs_create_mcp:"Claude in Chrome MCP: Tabs Create",mcp__Claude_in_Chrome__javascript_tool:"Claude in Chrome MCP: Javascript Tool",mcp__Claude_in_Chrome__read_console_messages:"Claude in Chrome MCP: Read Console Messages",mcp__Claude_in_Chrome__read_network_requests:"Claude in Chrome MCP: Read Network Requests",mcp__Claude_in_Chrome:"Claude in Chrome MCP",mcp__Claude_in_Chrome__find:"Claude in Chrome MCP: Find",mcp__Claude_in_Chrome__form_input:"Claude in Chrome MCP: Form Input",mcp__Claude_in_Chrome__list_connected_browsers:"Claude in Chrome MCP: List Connected Browsers",mcp__Claude_in_Chrome__read_page:"Claude in Chrome MCP: Read Page",mcp__Claude_in_Chrome__select_browser:"Claude in Chrome MCP: Select Browser",mcp__cowork__allow_cowork_file_delete:"Cowork MCP: Allow Cowork File Delete",mcp__cowork__present_files:"Cowork MCP: Present Files",mcp__cowork__request_cowork_directory:"Cowork MCP: Request Cowork Directory","mcp__cowork-onboarding__show_onboarding_role_picker":"Cowork Onboarding MCP: Show Onboarding Role Picker",TaskOutput:"Task Output",TaskStop:"Task Stop",mcp__plugins__search_plugins:"Plugins MCP: Search Plugins",mcp__plugins__suggest_plugin_install:"Plugins MCP: Suggest Plugin Install",mcp__workspace__bash:"Workspace MCP: Bash",mcp__workspace__web_fetch:"Workspace MCP: Web Fetch","mcp__mcp-registry__search_mcp_registry":"MCP Registry: Search MCP Registry",Agent:"Agent",Edit:"Edit",Glob:"Glob",Grep:"Grep",NotebookEdit:"Notebook Edit",Read:"Read",Skill:"Skill",TaskCreate:"Task Create",TaskUpdate:"Task Update",ToolSearch:"Tool Search",Write:"Write","mcp__claude_ai_Context7__resolve-library-id":"Context7 MCP (Claude): Resolve Library ID",mcp__claude_ai_Excalidraw__create_view:"Excalidraw MCP (Claude): Create View",mcp__claude_ai_Excalidraw__read_me:"Excalidraw MCP (Claude): Read Me","mcp__claude_ai_Notion__notion-create-pages":"Notion MCP (Claude): Create Pages","mcp__claude_ai_Notion__notion-fetch":"Notion MCP (Claude): Fetch","mcp__claude_ai_Notion__notion-search":"Notion MCP (Claude): Search","mcp__claude_ai_Notion__notion-update-page":"Notion MCP (Claude): Update Page","mcp__context7__query-docs":"Context7 MCP: Query Docs","mcp__context7__resolve-library-id":"Context7 MCP: Resolve Library ID","mcp__databricks-sql-allscopes__authenticate":"Databricks SQL MCP: Authenticate","mcp__databricks-sql-allscopes__complete_authentication":"Databricks SQL MCP: Complete Authentication","mcp__databricks-sql__authenticate":"Databricks SQL MCP: Authenticate",mcp__playwright__browser_evaluate:"Playwright MCP: Browser Evaluate",mcp__playwright__browser_navigate:"Playwright MCP: Browser Navigate","mcp__plugin_context7_context7__query-docs":"Context7 MCP: Query Docs","mcp__plugin_context7_context7__resolve-library-id":"Context7 MCP: Resolve Library ID","mcp__shopify-dev-mcp__learn_shopify_api":"Shopify Dev MCP: Learn Shopify API","mcp__shopify-dev-mcp__search_docs_chunks":"Shopify Dev MCP: Search Docs Chunks","mcp__shopify-dev-mcp__validate_graphql_codeblocks":"Shopify Dev MCP: Validate GraphQL Codeblocks",invalid:"Invalid",rename_session:"Rename Session",update_topic:"Update Topic",rename_branch:"Rename Branch",report_intent:"Report Intent",create_pull_request:"Create Pull Request",update_pull_request:"Update Pull Request",powershell:"PowerShell",ask_user:"Ask User",sql:"SQL",show_file:"Show File",exit_plan_mode:"Exit Plan Mode",get_changes_overview:"Get Changes Overview",annotate_diff_line:"Annotate Diff",add_pr_review_comment:"Add PR Review Comment",remove_pr_review_comment:"Remove PR Review Comment",reply_to_comment:"Reply to Comment",open_pr_session:"Open PR Session",open_issue_session:"Open Issue Session",create_session:"Create Session",list_sessions_and_chats:"List Sessions & Chats",list_projects:"List Projects",get_session:"Get Session",navigate_to:"Navigate To",delete_item:"Delete Item",send_session_message:"Send Session Message",send_chat_message:"Send Chat Message",read_agent:"Read Agent",write_agent:"Write Agent",list_agents:"List Agents",discover_widgets:"Discover Widgets",render_widget:"Render Widget",clear_widget:"Clear Widget",extensions_manage:"Extensions Manage",extensions_reload:"Extensions Reload",create:"Create",fetch_copilot_cli_documentation:"Fetch Copilot CLI Documentation",generate_findings:"Generate Findings",generate_topics:"Generate Topics",list_bash:"List Bash",read_bash:"Read Bash",write_bash:"Write Bash",stop_bash:"Stop Bash",list_powershell:"List PowerShell",read_powershell:"Read PowerShell",render_widget_inbox:"Render Widget Inbox",rg:"Ripgrep",stop_powershell:"Stop PowerShell",store_memory:"Store Memory",web_search:"Web Search",write_powershell:"Write PowerShell",slidev_chooseEntry:"Slidev: Choose Entry",slidev_getPreviewPort:"Slidev: Get Preview Port",clarify_requirements:"Clarify Requirements",get_tests:"Get Tests","ide-get_diagnostics":"IDE: Get Diagnostics","ide-get_selection":"IDE: Get Selection",plan:"Plan",signal_plan_ready:"Signal Plan Ready",update_plan_progress:"Update Plan Progress",EnterPlanMode:"Enter Plan Mode",ExitPlanMode:"Exit Plan Mode",mcp_reload:"MCP: Reload",mcp_validate:"MCP: Validate",stop_agent:"Stop Agent","workiq-accept_eula":"WorkIQ: Accept EULA","workiq-ask_work_iq":"WorkIQ: Ask Work IQ","mcp_ado-remote-mc_core_list_projects":"Azure DevOps MCP: Core List Projects","mcp_ado-remote-mc_repo_branch":"Azure DevOps MCP: Repo Branch","mcp_ado-remote-mc_repo_pull_request":"Azure DevOps MCP: Repo Pull Request","mcp_ado-remote-mc_repo_pull_request_thread":"Azure DevOps MCP: Repo Pull Request Thread","mcp_ado-remote-mc_repo_pull_request_write":"Azure DevOps MCP: Repo Pull Request Write","mcp_ado-remote-mc_repo_repository":"Azure DevOps MCP: Repo Repository","mcp_ado-remote-mc_search_workitem":"Azure DevOps MCP: Search Work Item","mcp_ado-remote-mc_wit_get_work_item":"Azure DevOps MCP: Get Work Item","mcp_ado-remote-mc_wit_work_item":"Azure DevOps MCP: Work Item","mcp_ado-remote-mc_wit_work_item_comment_write":"Azure DevOps MCP: Work Item Comment Write","mcp_ado-remote-mc_wit_work_item_link_write":"Azure DevOps MCP: Work Item Link Write","mcp_ado-remote-mc_wit_work_item_write":"Azure DevOps MCP: Work Item Write",mssql_list_servers:"MSSQL: List Servers",add_loaded_assembly:"Add Loaded Assembly",analyze_symbol:"Analyze Symbol",search_decompiled_symbols:"Search Decompiled Symbols",get_classification_rubric:"Get Classification Rubric",get_weather:"Get Weather",mcp_azure_mcp_search:"Azure MCP: Search",mcp_gitnexus_context:"GitNexus MCP: Context",mcp_gitnexus_cypher:"GitNexus MCP: Cypher",mcp_gitnexus_detect_changes:"GitNexus MCP: Detect Changes",mcp_gitnexus_impact:"GitNexus MCP: Impact",mcp_gitnexus_list_repos:"GitNexus MCP: List Repos",mcp_gitnexus_query:"GitNexus MCP: Query",slidev_getSlideContent:"Slidev: Get Slide Content",mcp__GitLab__get_mcp_server_version:"GitLab MCP: Get MCP Server Version",mcp__plugin_figma_figma__get_design_context:"Figma MCP: Get Design Context",mcp__plugin_figma_figma__get_metadata:"Figma MCP: Get Metadata",mcp__plugin_figma_figma__get_screenshot:"Figma MCP: Get Screenshot",mcp_io_github_tav_tavily_extract:"MCP Io GitHub Tavily Extract",mcp_io_github_tav_tavily_search:"MCP Io GitHub Tavily Search",browser_wait_for:"Browser Wait For",copilot_sessionStoreSql:"Copilot Session Store Sql",explore_subagent:"Explore Subagent","github.copilot.terminalPanel":"Github Copilot Terminal Panel",handle_dialog:"Handle Dialog",run_subagent:"Run Subagent",testFailure:"Test Failure","mcp_angular-cli_get_best_practices":"Angular MCP: Get Best Practices","mcp_angular-cli_list_projects":"Angular MCP: Get Project List",mcp_azure_mcp_extension_cli_generate:"Azure MCP (Local): Generate",mcp_playwright_browser_console_messages:"Playwright MCP: Browser Console Messages",mcp_com_figma_mcp_get_design_context:"Figma MCP (Local): Get Design Context",mcp_com_figma_mcp_get_screenshot:"Figma MCP (Local): Get Screenshot",mcp__Bicep__get_bicep_best_practices:"Bicep MCP: Get Bicep Best Practices","mcp__microsoft-docs-learn__microsoft_docs_fetch":"Microsoft Learn MCP: Microsoft Docs Fetch","mcp__microsoft-docs-learn__microsoft_docs_search":"Microsoft Learn MCP: Microsoft Docs Search",mcp__azure__subscription_list:"Azure MCP: Subscription List",mcp__bicep__get_bicep_file_diagnostics:"Bicep MCP: File Diagnostics",mcp__linear__authenticate:"Linear MCP: Authenticate",mcp__linear__get_issue:"Linear MCP: Get Issue",mcp__linear__list_issues:"Linear MCP: List Issues",mcp__linear__list_teams:"Linear MCP: List Teams",mcp__linear__save_issue:"Linear MCP: Save Issue",mcp_workiq_accept_eula:"WorkIQ Accept EULA",mcp_workiq_ask_work_iq:"WorkIQ Ask Work IQ","mcp_microsoft-lea_microsoft_code_sample_search":"Microsoft Docs MCP (Local): Search Code Sample","mcp_microsoft-lea_microsoft_docs_search":"Microsoft Docs MCP (Remote): Search Docs","mcp_upstash_conte_query-docs":"MCP Upstash: Query Docs","mcp_upstash_conte_resolve-library-id":"MCP Upstash: Resolve Library ID",mcp__Bicep__list_avm_metadata:"MCP Bicep: List Azure Verified Module Metadata",google_research:"Google Research",task_execution:"Task Execution",tool_search_tool_regex:"Tool Search",FindDatabaseObjectsThat:"Find Database Objects That",GetTableColumnNames:"Get Table Column Names",SchemaStore_getSchema:"Schema Store Get Schema",SchemaStore_searchSchemas:"Schema Store Search Schemas",SearchSchemasForOnePartName:"Search Schemas For One Part Name",ValidateGeneratedTSQL:"Validate Generated T-SQL",aspire_execute_resource_command:"Aspire Execute Resource Command",aspire_get_doc:"Aspire Get Doc",aspire_list_console_logs:"Aspire List Console Logs",aspire_list_resources:"Aspire List Resources",aspire_list_structured_logs:"Aspire List Structured Logs",aspire_search_docs:"Aspire Search Docs",codesearch:"CodeSearch","context-engine_context_search":"Context Engine Context Search","context7_query-docs":"Context7 Query Docs","context7_resolve-library-id":"Context7 Resolve Library ID",playwright_browser_navigate:"Playwright Browser Navigate",run_tests:"Run Tests","azure-subscription_list":"Azure Subscription List",debugger_evaluate_expressions:"Debugger Evaluate Expressions",debugger_get_output_window_text:"Debugger Get Output Window Text",get_symbols:"Get Symbols",lookup_vs:"Lookup VS",search_web:"Search Web","aspire-get_doc":"Get Doc","aspire-search_docs":"Search Docs",vote_memory:"Vote Memory",create_issue:"Issue Create",save_workflow:"Workflow Save","context-mode_ctx_execute":"Context Mode: Execute","mcp_context-mode_ctx_batch_execute":"Context Mode: Batch Execute","mcp_context-mode_ctx_execute":"Context Mode: Execute","mcp_context-mode_ctx_search":"Context Mode: Search",mcp_github_issue_read:"GitHub MCP (Remote): Issue Read",mcp_github_search_repositories:"GitHub MCP (Remote): Search Repositories",mcp_io_github_tav_tavily_map:"Tavily MCP: Map","mcp_lean-ctx_ctx_call":"Lean Context: Call","mcp_lean-ctx_ctx_discover_tools":"Lean Context: Discover Tools","mcp_lean-ctx_ctx_edit":"Lean Context: Edit","mcp_lean-ctx_ctx_graph":"Lean Context: Graph","mcp_lean-ctx_ctx_knowledge":"Lean Context: Knowledge","mcp_lean-ctx_ctx_multi_read":"Lean Context: Multi Read","mcp_lean-ctx_ctx_overview":"Lean Context: Overview","mcp_lean-ctx_ctx_read":"Lean Context: Read","mcp_lean-ctx_ctx_search":"Lean Context: Search","mcp_lean-ctx_ctx_session":"Lean Context: Session","mcp_lean-ctx_ctx_shell":"Lean Context: Shell","mcp_lean-ctx_ctx_tree":"Lean Context: Tree","mcp_mcp-server-ti_get_current_time":"Time MCP: Get Current Time",mcp_playwright_browser_close:"Playwright MCP: Browser Close",mcp_playwright_browser_evaluate:"Playwright MCP: Browser Evaluate",mcp_playwright_browser_fill_form:"Playwright MCP: Browser Fill Form",mcp_playwright_browser_network_request:"Playwright MCP: Browser Network Request",mcp_playwright_browser_network_requests:"Playwright MCP: Browser Network Requests",mcp_playwright_browser_press_key:"Playwright MCP: Browser Press Key",mcp_playwright_browser_resize:"Playwright MCP: Browser Resize",mcp_playwright_browser_run_code_unsafe:"Playwright MCP: Browser Run Code Unsafe",mcp_playwright_browser_type:"Playwright MCP: Browser Type",mcp_playwright_browser_wait_for:"Playwright MCP: Browser Wait For",mcp_pylance_mcp_s_pylancePythonEnvironments:"Pylance MCP: Python Environments","mcp_spec-gen_get_architecture_overview":"Spec Gen MCP: Get Architecture Overview","mcp_spec-gen_get_call_graph":"Spec Gen MCP: Get Call Graph",mcp_specgen_analyze_codebase:"Spec Gen MCP: Analyze Codebase",mcp_specgen_get_function_body:"Spec Gen MCP: Get Function Body",mcp_specgen_get_spec:"Spec Gen MCP: Get Spec",mcp_specgen_list_spec_domains:"Spec Gen MCP: List Spec Domains",mcp_specgen_orient:"Spec Gen MCP: Orient",mcp_specgen_search_code:"Spec Gen MCP: Search Code",mcp_specgen_search_specs:"Spec Gen MCP: Search Specs",mcp_stitch_apply_design_system:"Stitch: Apply Design System",mcp_stitch_create_design_system:"Stitch: Create Design System",mcp_stitch_create_project:"Stitch: Create Project",mcp_stitch_edit_screens:"Stitch: Edit Screens",mcp_stitch_generate_screen_from_text:"Stitch: Generate Screen From Text",mcp_stitch_get_project:"Stitch: Get Project",mcp_stitch_get_screen:"Stitch: Get Screen",mcp_stitch_list_design_systems:"Stitch: List Design Systems",mcp_stitch_list_projects:"Stitch: List Projects",mcp_stitch_list_screens:"Stitch: List Screens",mcp_symdex_build_context_pack:"Symdex: Build Context Pack",mcp_symdex_get_callees:"Symdex: Get Callees",mcp_symdex_get_callers:"Symdex: Get Callers",mcp_symdex_get_file_outline:"Symdex: Get File Outline",mcp_symdex_get_file_tree:"Symdex: Get File Tree",mcp_symdex_get_graph_diagram:"Symdex: Get Graph Diagram",mcp_symdex_get_index_status:"Symdex: Get Index Status",mcp_symdex_get_repo_outline:"Symdex: Get Repo Outline",mcp_symdex_get_repo_stats:"Symdex: Get Repo Stats",mcp_symdex_index_folder:"Symdex: Index Folder",mcp_symdex_list_repos:"Symdex: List Repos",mcp_symdex_search_routes:"Symdex: Search Routes",mcp_symdex_search_symbols:"Symdex: Search Symbols",mcp_symdex_search_text:"Symdex: Search Text",mcp_tavily_tavily_crawl:"Tavily: Crawl",mcp_tavily_tavily_extract:"Tavily: Extract",mcp_tavily_tavily_search:"Tavily: Search",mcp_time_get_current_time:"Time: Get Current Time",mcp_trueline_trueline_outline:"Trueline: Outline",mcp_trueline_trueline_read:"Trueline: Read",mcp_trueline_trueline_search:"Trueline: Search",mcp_zettelkasten_zk_create_link:"Zettelkasten: Create Link",mcp_zettelkasten_zk_create_note:"Zettelkasten: Create Note",mcp_zettelkasten_zk_get_note:"Zettelkasten: Get Note",mcp_zettelkasten_zk_remove_link:"Zettelkasten: Remove Link",mcp_zettelkasten_zk_search_notes:"Zettelkasten: Search Notes",mcp_zettelkasten_zk_update_note:"Zettelkasten: Update Note",copilot_listCodeUsages:"Copilot: List Code Usages",create_new_file:"Windsurf: File Create",edit_existing_file:"Windsurf: File Edit","github.copilot.editingSession":"GitHub MCP (Local): Assign Copilot to Issue",mssql_connect:"SQL Server Connection",mssql_disconnect:"SQL Server Disconnection",mssql_list_tables:"SQL Server Tables List",mssql_run_query:"SQL Server Query Execution",run_terminal_command:"Terminal Command Run",single_find_and_replace:"Find and Replace",mcp_io_github_git_add_comment_to_pending_review:"GitHub MCP (Local): Add Comment To Pending Review",mcp_io_github_git_add_reply_to_pull_request_comment:"GitHub MCP (Local): Add Reply To Pull Request Comment",mcp_io_github_git_pull_request_review_write:"GitHub MCP (Local): Pull Request Review Write",mcp_aikido_aikido_full_scan:"Aikido MCP: Full Scan",mcp_aikido_aikido_issues_list:"Aikido MCP: Issues List",mcp_com_atlassian_addCommentToJiraIssue:"Atlassian MCP: Add Comment To Jira Issue",mcp_com_atlassian_atlassianUserInfo:"Atlassian MCP: User Info",mcp_com_atlassian_createConfluencePage:"Atlassian MCP: Create Confluence Page",mcp_com_atlassian_getAccessibleAtlassianResources:"Atlassian MCP: Get Accessible Atlassian Resources",mcp_com_atlassian_getConfluencePage:"Atlassian MCP: Get Confluence Page",mcp_com_atlassian_getConfluencePageFooterComments:"Atlassian MCP: Get Confluence Page Footer Comments",mcp_com_atlassian_getConfluenceSpaces:"Atlassian MCP: Get Confluence Spaces",mcp_com_atlassian_getJiraIssue:"Atlassian MCP: Get Jira Issue",mcp_com_atlassian_search:"Atlassian MCP: Search",mcp_com_atlassian_searchJiraIssuesUsingJql:"Atlassian MCP: Search Jira Issues Using JQL",mcp_com_atlassian_updateConfluencePage:"Atlassian MCP: Update Confluence Page",mcp_sonarqube_analyze_code_snippet:"SonarQube MCP: Analyze Code Snippet",mcp_sonarqube_get_project_quality_gate_status:"SonarQube MCP: Get Project Quality Gate Status",mcp_sonarqube_search_my_sonarqube_projects:"SonarQube MCP: Search My SonarQube Projects",mcp_sonarqube_search_security_hotspots:"SonarQube MCP: Search Security Hotspots",mcp_sonarqube_search_sonar_issues_in_projects:"SonarQube MCP: Search Sonar Issues In Projects",sonarqube_analyze_file:"SonarQube: Analyze File","azure-bicepschema":"Azure Bicep Schema","azure-documentation":"Azure Documentation","azure-extension_cli_generate":"Azure Extension CLI Generate","azure-get_azure_bestpractices":"Get Azure Best Practices",__auto_compact__:"Auto Compact",mcp_github_get_teams:"GitHub MCP (Remote): Get Teams",mcp_github_list_issue_types:"GitHub MCP (Remote): List Issue Types",mcp_github_mcp_se_issue_write:"GitHub MCP (Remote): Write Issue",mcp_github_mcp_se_list_issues:"GitHub MCP (Remote): List Issues",mcp_github_mcp_se_list_label:"GitHub MCP (Remote): List Labels",mcp_github_mcp_se_search_issues:"GitHub MCP (Remote): Search Issues",mcp_github_mcp_se_add_issue_comment:"GitHub MCP (Remote): Add Comment to Issue",mcp_github_mcp_se_create_pull_request:"GitHub MCP (Remote): Create Pull Request",mcp_github_mcp_se_get_file_contents:"GitHub MCP (Remote): Get File Contents",mcp_github_mcp_se_pull_request_read:"GitHub MCP (Remote): Read Pull Request",mcp_github_mcp_se_issue_read:" GitHub MCP (Remote): Issue Read on GitHub",mcp_github_search_users:"GitHub MCP (Remote): Search Users",mcp_github_semantic_issue_similarity_search:"GitHub MCP (Remote): Semantic Issue Similarity Search",codebase:"Codebase",invoke_subagent:"Invoke Subagent",list_permissions:"List Permissions",manage_task:"Manage Task",ccd_session:"CCD Session",mcp__ccd_session__mark_chapter:"CCD Session: Mark Chapter",multi_replace_file_content:"Multi-Replace File Content",read_currently_open_file:"Read Currently Open File",replace_file_content:"Replace File Content",run_command:"Run Command",schedule:"Schedule",send_message:"Send Message",view_file:"View File",write_to_file:"Write To File",glob_search:"Glob Search","azure-devops_core_list_projects":"Azure DevOps Core List Projects","azure-devops_repo_get_file_content":"Azure DevOps Repo Get File Content","azure-devops_repo_list_repos_by_project":"Azure DevOps Repo List Repos By Project","azure-devops_search_code":"Azure DevOps Search Code","azure-devops_wit_get_work_item":"Azure DevOps Wit Get Work Item","azure-devops_wit_query_by_wiql":"Azure DevOps Wit Query By WIQL",mcp_microsoft_azu_wit_get_work_items_batch_by_ids:"Microsoft Azure DevOps MCP (Local): Get Work Items Batch by IDs",mcp_microsoft_azu_wit_get_work_items_for_iteration:"Microsoft Azure DevOps MCP (Local): Get Work Items for Iteration",mcp_microsoft_azu_wit_update_work_items_batch:"Microsoft Azure DevOps MCP (Local): Update Work Items Batch",mcp_microsoft_azu_wit_work_items_link:"Microsoft Azure DevOps MCP (Local): Link Work Items",mcp_microsoft_azu_work_list_iterations:"Microsoft Azure DevOps MCP (Local): List Iterations","microsoft_azure-devops-mcp_core_list_projects":"Azure DevOps Core List Projects","microsoft_azure-devops-mcp_search_workitem":"Azure DevOps Search Work Item","microsoft_azure-devops-mcp_wit_get_work_item":"Microsoft Azure DevOps MCP (Local): Get Work Item",mcp_com_microsoft_get_azure_bestpractices:"Microsoft Docs MCP: Get Azure Best Practices",mcp_github_enterp_create_branch:"GitHub MCP (Remote): Create Branch",mcp_github_enterp_get_latest_release:"GitHub MCP (Remote): Get Latest Release",mcp_github_enterp_pull_request_read:"GitHub MCP (Remote): Pull Request Read",handoff:"Handoff",mcp_ado_search_workitem:"ADO Search Workitem",mcp_ado_wit_add_artifact_link:"ADO Wit Add Artifact Link",mcp_ado_wit_add_child_work_items:"ADO Wit Add Child Work Items",mcp_ado_wit_add_work_item_comment:"ADO Wit Add Work Item Comment",mcp_ado_wit_create_work_item:"ADO Wit Create Work Item",mcp_ado_wit_get_work_item:"ADO Wit Get Work Item",mcp_ado_wit_get_work_item_type:"MCP Ado Wit Get Work Item Type",mcp_ado_wit_get_work_items_batch_by_ids:"MCP Ado Wit Get Work Items Batch By Ids",mcp_ado_wit_list_work_item_comments:"ADO Wit List Work Item Comments",mcp_ado_wit_my_work_items:"ADO Wit My Work Items",mcp_ado_wit_update_work_item:"ADO Wit Update Work Item",mcp_ado_wit_update_work_items_batch:"ADO Wit Update Work Items Batch",mcp_ado_wit_work_item_unlink:"ADO Wit Work Item Unlink",mcp_ado_wit_work_items_link:"ADO Wit Work Items Link",mcp_azure_devops__search_workitem:"Azure DevOps Search Workitem",mcp_github_add_issue_comment:"GitHub Add Issue Comment",mcp_github_create_branch:"GitHub Create Branch",mcp_github_list_commits:"GitHub List Commits",mcp_github_list_pull_requests:"GitHub List Pull Requests",mcp_github_push_files:"GitHub Push Files","mcp_hashline-edit_grep":"Hashline Edit Grep",mcp_raindrop_create_bookmarks:"RainDrop Create Bookmarks","mcp_symdex-mcp_semantic_search":"Symdex MCP Semantic Search","mcp_tavily-global_tavily-search":"Tavily Global Tavily-Search","mcp_tavily_tavily-extract":"Tavily Tavily-Extract","mcp_tavily_tavily-search":"Tavily Tavily-Search",mcp_tavily_tavily_research:"Tavily Tavily-Research",session_store_sql:"SQL Session Store","azure-advisor":"Azure Advisor","azure-devops-core_list_projects":"Azure DevOps Core List Projects","azure-devops-wit_work_item":"Azure DevOps Work Item","azure-devops-wit_work_item_write":"Azure DevOps Work Item Write","azure-group_resource_list":"Azure Group Resource List","azure-sql":"Azure SQL",ScheduleWakeup:"Scheduled Wakeup",mcp__ccd_session__spawn_task:"Spawn Task",mcp_figma_mcp_ser_get_design_context:"Figma MCP (Local): Get Design Context",mcp_figma_mcp_ser_get_libraries:"Figma MCP (Local): Get Libraries",mcp_figma_mcp_ser_get_metadata:"Figma MCP (Local): Get Metadata",mcp_figma_mcp_ser_search_design_system:"Figma MCP (Local): Search Design System","azure-devops-repo_file":"Azure DevOps: File","azure-devops-repo_pull_request":"Azure DevOps: Pull Request","azure-devops-repo_repository":"Azure DevOps: Repository","azure-devops-search_code":"Azure DevOps: Search Code","azure-devops-search_workitem":"Azure DevOps: Work Item","azure-devops-wiki":"Azure DevOps: Wiki","azure-devops-wiki_upsert_page":"Azure DevOps: Wiki Upsert Page","azure-devops-wit_work_item_comment_write":"Azure DevOps: Work Item Comment Write",invoke_canvas_action:"Canvas Action",list_canvas_capabilities:"List Canvas Capabilities",open_canvas:"Open Canvas",subagent:"Subagent",workiq_search_files:"WorkIQ Search Files",workiq_get_email:"Workiq Get Email",workiq_list_emails:"Workiq List Emails",github_text_search:"GitHub MCP (Local): Text Search",mcp_azure_mcp_ser_search:"Azure MCP (Remote): Search","azure_mcp-documentation":"Azure MCP Documentation",mcp_azure_mcp_ser_get_azure_bestpractices:"Serena MCP: Get Azure Best Practices",find:"Find","get-syntax-docs-mermaid":"Mermaid Syntax Docs","mermaid-chart":"Mermaid Chart","mermaid-diagram-preview":"Mermaid Diagram Preview","mermaid-diagram-validator":"Mermaid Diagram Validator",sonarqube_list_potential_security_issues:"SonarQube List Potential Security Issues",m_filesystem_tree:"File System Tree",m_get_settings:"Get Settings",m_get_skill:"Get Skill",m_list_skills:"List Skills",find_symbol:"Find Symbol",finish_plan:"Finish Plan",jcodemunch_file_outline:"JCodeMunch File Outline",jcodemunch_find_references:"JCodeMunch Find References",jcodemunch_get_file_content:"JCodeMunch Get File Content",jcodemunch_get_session_stats:"JCodeMunch Get Session Stats",jcodemunch_get_symbol_source:"JCodeMunch Get Symbol Source",jcodemunch_list_repos:"JCodeMunch List Repos",jcodemunch_search_symbols:"JCodeMunch Search Symbols",jcodemunch_search_text:"JCodeMunch Search Text","mcp_jcodemunch-mc_check_references":"JCodeMunch MCP (Local): Check References","mcp_jcodemunch-mc_find_references":"JCodeMunch MCP (Local): Find References","mcp_jcodemunch-mc_get_file_outline":"JCodeMunch MCP (Local): Get File Outline","mcp_jcodemunch-mc_index_folder":"JCodeMunch MCP (Local): Index Folder","mcp_jcodemunch-mc_list_repos":"JCodeMunch MCP (Local): List Repos","mcp_jcodemunch-mc_plan_turn":"JCodeMunch MCP (Local): Plan Turn","mcp_jcodemunch-mc_search_symbols":"JCodeMunch MCP (Local): Search Symbols","mcp_jcodemunch-mc_winnow_symbols":"JCodeMunch MCP (Local): Winnow Symbols",search_text:"Search Text",ask_question:"Ask Question",create_cpp_performance_test:"Create C++ Performance Test",debugger_continue:"Debug Continue",debugger_get_call_stack:"Debug Get Call Stack",debugger_get_frame_source:"Debug Get Frame Source",debugger_get_threads:"Debug Get Threads",debugger_launch_unit_test:"Debug Launch Unit Test","foundrytk-get_ai_model_guidance":"Foundry: AI Model Guidance","foundrytk-usage_guidance":"Foundry: Usage Guidance","mcp_atlassian-mcp_addCommentToJiraIssue":"Atlassian MCP (Local): Add Comment to Jira Issue","mcp_atlassian-mcp_atlassianUserInfo":"Atlassian MCP (Local): Get User Info","mcp_atlassian-mcp_createJiraIssue":"Atlassian MCP (Local): Create/Update Jira Issue","mcp_atlassian-mcp_editJiraIssue":"Atlassian MCP (Local): Edit Jira Issue","mcp_atlassian-mcp_getAccessibleAtlassianResources":"Atlassian MCP (Local): Get Accessible Resources","mcp_atlassian-mcp_getJiraIssue":"Atlassian MCP (Local): Get Jira Issue","mcp_atlassian-mcp_getJiraIssueTypeMetaWithFields":"Atlassian MCP (Local): Get Jira Issue Type Meta with Fields","mcp_atlassian-mcp_getJiraProjectIssueTypesMetadata":"Atlassian MCP (Local): Get Jira Project Issue Types Metadata","mcp_atlassian-mcp_getTransitionsForJiraIssue":"Atlassian MCP (Local): Get Transitions for Jira Issue","mcp_atlassian-mcp_getVisibleJiraProjects":"Atlassian MCP (Local): Get Visible Jira Projects","mcp_atlassian-mcp_searchJiraIssuesUsingJql":"Atlassian MCP (Local): Search Jira Issues Using JQL","mcp_atlassian-mcp_transitionJiraIssue":"Atlassian MCP (Local): Transition Jira Issue",mcp_figma_mcp_ser_get_screenshot:"Figma MCP: Get Screenshot",mcp_figma_mcp_ser_get_variable_defs:"Figma MCP: Get Variable Defs",mcp_gitkraken_cli_git_log_or_diff:"GitKraken MCP: Log/Compare",mcp_gitkraken_cli_git_push:"GitKraken MCP: Push",mcp_gitkraken_cli_git_status:"GitKraken MCP: Status",mcp_gitkraken_cli_gitlens_commit_composer:"GitKraken MCP: Commit Composer",profile_unit_test:"Profile Unit Test",profiler_agent:"Profiler Agent",run_profiler:"Run Profiler",define_subagent:"Define Subagent",find_by_name:"Find by Name",manage_subagents:"Manage Subagents","mcp__computer-use__request_access":"MCP: Computer Use Request Access","mcp__computer-use__screenshot":"MCP: Computer Use Screenshot",CronList:"Cron List","mcp__scheduled-tasks__list_scheduled_tasks":"MCP: Scheduled Tasks - List Scheduled Tasks",m_accept_workiq_eula:"WorkIQ EULA Acceptance",mcp_azure_bicep_m_get_bicep_best_practices:"Azure Bicep MCP (Local): Get Best Practices",mcp_azure_bicep_m_list_avm_metadata:"Azure Bicep MCP (Remote): List AVM Metadata",mcp_azure_mcp_policy:"Azure MCP Policy",workiq_search_emails:"WorkIQ Search Emails",resolve_memory_file_uri:"Serena: Resolve Memory File URI",generate_image:"Generate Image",mcp__plugins__list_plugins:"MCP Plugins List",mcp__skills__list_skills:"MCP Skills List",mcp__visualize__read_me:"MCP Visualize: Read Me",mcp__visualize__show_widget:"MCP Visualize: Show Widget",read_url_content:"Read URL Content",mcp_jira_editJiraIssue:"JIRA MCP (Remote): Edit Jira Issue",mcp_jira_getAccessibleAtlassianResources:"JIRA MCP (Remote): Get Accessible Atlassian Resources",mcp_jira_getConfluencePage:"JIRA MCP (Remote): Get Confluence Page",mcp_jira_getJiraIssue:"JIRA MCP (Remote): Get Jira Issue","mcp__scheduled-tasks__create_scheduled_task":"Scheduled Tasks MCP: Create Scheduled Task",dart_format:"Dart Format",Monitor:"Monitor",SendMessage:"Send Message","atlassian-getConfluencePage":"Confluence MCP: Page Read/Write","atlassian-getVisibleJiraProjects":"Jira MCP: Projects View/Edit","atlassian-lookupJiraAccountId":"Jira MCP: Account Lookup","github-pull-request_create_pull_request":"GitHub Pull Request Create/Update",mcp_github_check_dependency_vulnerabilities:"GitHub MCP (Local) Check Dependency Vulnerabilities",mcp_provides_tool_pylanceInvokeRefactoring:"MCP Provides Tool Pylance Invoke Refactoring","mcp__codebase-memory-mcp__get_graph_schema":"MCP Codebase Memory Get Graph Schema","mcp__codebase-memory-mcp__index_repository":"MCP Codebase Memory: Index Repository","mcp__codebase-memory-mcp__index_status":"MCP Codebase Memory: Index Status","mcp__codebase-memory-mcp__list_projects":"MCP Codebase Memory: List Projects","mcp__codebase-memory-mcp__query_graph":"MCP Codebase Memory: Query Graph","mcp__codebase-memory-mcp__search_code":"MCP Codebase Memory: Search Code","mcp__codebase-memory-mcp__search_graph":"MCP Codebase Memory: Search Graph",create_project:"Create Project","mcp__scheduled-tasks__update_scheduled_task":"MCP Scheduled Tasks: Update Scheduled Task",mcp_github_mcp_s2_create_pull_request:"MCP GitHub: Create Pull Request",respond_to_session_plan:"Respond To Session Plan",str_replace:"Str Replace","workiq-ask":"Workiq Ask",Artifact:"Figma: Get Design Context",LSP:"Visual Studio Code: LSP",TaskList:"Serena: Task List",mcp__figma__get_design_context:"Figma: Get Design Context",mcp__figma__get_metadata:"Figma: Get Metadata","mcp_atlassian-mcp_getIssueLinkTypes":"Atlassian MCP (Remote): Get Issue Link Types","mcp_atlassian-mcp_search":"Atlassian MCP (Remote): Search",cache_docs:"Cache Docs",call_agent:"Call Agent",delegate_task:"Delegate Task",diff:"Diff",get_task_result:"Get Task Result",git_diff:"Git Diff",git_status:"Git Status",http:"HTTP",jq:"JQ",lsp_diagnostics:"LSP Diagnostics",sed_replace:"SED Replace",update_todo:"Update TODO",workiq_delete_event:"WorkIQ Delete Event",workiq_list_events:"WorkIQ List Events",get_python_environment_details:"Python Environment Details","io_github_tavily-ai_tavily-mcp-tavily_search":"Tavily MCP (Remote): Search","mcp_tavily-mcp_tavily_extract":"Extract from Tavily","mcp_tavily-mcp_tavily_search":"Search in Tavily","microsoft_playwright-mcp-browser_click":"Playwright: Click","microsoft_playwright-mcp-browser_console_messages":"Playwright: Console Messages","microsoft_playwright-mcp-browser_evaluate":"Playwright: Evaluate","microsoft_playwright-mcp-browser_navigate":"Playwright: Navigate","microsoft_playwright-mcp-browser_network_request":"Playwright: Network Request","microsoft_playwright-mcp-browser_network_requests":"Microsoft Playwright MCP Browser Network Requests","microsoft_playwright-mcp-browser_snapshot":"Microsoft Playwright MCP Browser Snapshot","microsoft_playwright-mcp-browser_tabs":"Microsoft Playwright MCP Browser Tabs","microsoft_playwright-mcp-browser_wait_for":"Microsoft Playwright MCP Browser Wait For","rtf-markdown-editor.pdfChat":"PDF Chat",Azure_MCP_Server_get_azure_bestpractices:"Azure MCP: Get Azure Bestpractices",mcp_azure_mcp_ser_subscription_list:"Azure MCP: Search Subscription List","microsoft-learn-microsoft_docs_fetch":"Microsoft Learn: Microsoft Docs Fetch",record_observation:"Record Observation",readFiles:"Read Files",search:"Search",shell:"Shell",steering:"Steering","azure-devops-repo_branch":"Azure DevOps Repository Branch","canvas-authoring-compile_canvas":"Canvas Authoring: Compile Canvas","canvas-authoring-connect":"Canvas Authoring: Connect","canvas-authoring-describe_control":"Canvas Authoring: Describe Control","canvas-authoring-get_data_source_schema":"Canvas Authoring: Get Data Source Schema","canvas-authoring-list_apis":"Canvas Authoring: List APIs","canvas-authoring-list_controls":"Canvas Authoring: List Controls","canvas-authoring-list_data_sources":"Canvas Authoring: List Data Sources","canvas-authoring-sync_canvas":"Canvas Authoring: Sync Canvas","mcp__claude-in-chrome__navigate":"Claude In Chrome MCP: Navigate","mcp__claude-in-chrome__tabs_context_mcp":"Claude In Chrome MCP: Tabs Context ",mcp__Claude_Browser__preview_start:"MCP Claude Browser: Preview Start",mcp__ccd_session__dismiss_task:"MCP: Ccd Session Dismiss Task",mcp__plugin_Notion_notion__authenticate:"MCP Notion: Notion Authenticate",Workflow:"Workflow","atlassian-createJiraIssue":"Atlassian MCP: Create Jira Issue","atlassian-getAccessibleAtlassianResources":"Atlassian MCP: Get Accessible Atlassian Resources",chmod:"Chmod","context7-query-docs":"Context7 MCP: Query Docs","context7-resolve-library-id":"Context7 MCP: Resolve Library ID","github-mcp-server-add_issue_comment":"GitHub MCP: Add Issue Comment","github-mcp-server-add_reply_to_pull_request_comment":"GitHub MCP: Add Reply to Pull Request Comment","github-mcp-server-create_pull_request":"GitHub MCP: Create Pull Request","github-mcp-server-get_me":"GitHub MCP: Get Me","github-mcp-server-label_write":"GitHub MCP: Label Write","github-mcp-server-list_issue_types":"GitHub MCP: List Issue Types","github-mcp-server-list_label":"GitHub MCP: List Label","github-mcp-server-projects_list":"GitHub MCP: Projects List","github-mcp-server-pull_request_review_write":"GitHub MCP: Pull Request Review Write","github-mcp-server-semantic_issue_similarity_search":"GitHub MCP: Semantic Issue Similarity Search","github-mcp-server-semantic_issues_search":"GitHub MCP: Semantic Issues Search",mcp__ide__getDiagnostics:"IDE Get Diagnostics","mcp__microsoft_playwright-mcp__browser_click":"Playwright MCP: Browser Click","mcp__microsoft_playwright-mcp__browser_close":"Playwright MCP: Browser Close","mcp__microsoft_playwright-mcp__browser_console_messages":"Playwright MCP: Browser Console Messages","mcp__microsoft_playwright-mcp__browser_evaluate":"Playwright MCP: Browser Evaluate","mcp__microsoft_playwright-mcp__browser_navigate":"Playwright MCP: Browser Navigate","mcp__microsoft_playwright-mcp__browser_resize":"Playwright MCP: Browser Resize","mcp__microsoft_playwright-mcp__browser_snapshot":"Playwright MCP: Browser Snapshot","mcp__microsoft_playwright-mcp__browser_take_screenshot":"Playwright MCP: Browser Take Screenshot","mcp__microsoft_playwright-mcp__browser_wait_for":"Playwright MCP: Browser Wait For",tool_search_tool:"Tool Search",configure_notebook:"Notebook Configure",restart_notebook_kernel:"Kernel Restart",mcp__Claude_Browser__computer:"MCP Claude Browser: Computer",mcp__Claude_Browser__find:"MCP Claude Browser: Find",mcp__Claude_Browser__get_page_text:"MCP Claude Browser: Get Page Text",mcp__Claude_Browser__navigate:"MCP Claude Browser: Navigate",mcp__Claude_Browser__preview_list:"MCP Claude Browser: Preview List",mcp__Claude_Browser__preview_logs:"MCP Claude Browser: Preview Logs",mcp__Claude_Browser__preview_stop:"MCP Claude Browser: Preview Stop",mcp__Claude_Browser__read_console_messages:"MCP Claude Browser: Read Console Messages",mcp__Claude_Browser__read_page:"MCP Claude Browser: Read Page",mcp__Claude_Browser__tabs_context:"MCP Claude Browser: Tabs Context",mcp__Claude_Browser__tabs_create:"MCP Claude Browser: Tabs Create",mcp__Claude_Browser__tabs_select:"MCP Claude Browser: Tabs Select",mcp_github_github_create_pull_request:"GitHub MCP (Remote): Create Pull Request",mcp_github_github_get_file_contents:"GitHub MCP (Remote): Get File Contents",mcp_github_github_get_job_logs:"GitHub MCP (Remote): Get Job Logs",mcp_github_github_get_latest_release:"GitHub MCP (Remote): Get Latest Release",mcp_github_github_get_release_by_tag:"GitHub MCP (Remote): Get Release By Tag",mcp_github_github_get_repository_tree:"GitHub MCP (Remote): Get Repository Tree",mcp_github_github_get_tag:"GitHub MCP (Remote): Get Tag",mcp_github_github_list_code_scanning_alerts:"GitHub MCP (Remote): List Code Scanning Alerts",mcp_github_github_list_pull_requests:"GitHub MCP (Remote): List Pull Requests",mcp_github_github_list_tags:"GitHub MCP (Remote): List Tags",mcp_github_github_pull_request_read:"GitHub MCP (Remote): Pull Request Read",mcp_github_github_search_issues:"GitHub MCP (Remote): Search Issues",mcp_github_github_search_repositories:"GitHub MCP (Remote): Search Repositories","mcp_actions-marke_lookup-action-versions":"Actions Marketplace MCP: Lookup Action Versions",mcp__dart__analyze_files:"Dart MCP: Analyze Files",mcp__dart__connect_dart_tooling_daemon:"Dart MCP: Connect Dart Tooling Daemon",mcp__dart__flutter_driver:"Dart MCP: Flutter Driver",mcp__dart__get_app_logs:"Dart MCP: Get App Logs",mcp__dart__get_runtime_errors:"Dart MCP: Get Runtime Errors",mcp__dart__get_widget_tree:"Dart MCP: Get Widget Tree",mcp__dart__hot_reload:"Dart MCP: Hot Reload",mcp__dart__launch_app:"Dart MCP: Launch App",mcp__dart__list_devices:"Dart MCP: List Devices",mcp__dart__list_running_apps:"Dart MCP: List Running Apps",mcp__dart__pub_dev_search:"Dart MCP: Pub Dev Search",mcp__dart__resolve_workspace_symbol:"Dart MCP: Resolve Workspace Symbol",mcp__dart__stop_app:"Dart MCP: Stop App",mcp_github_mcp_s2_add_issue_comment:"GitHub MCP (Remote): Add Issue Comment",mcp_github_mcp_s2_issue_read:"GitHub MCP (Remote): Issue Read",mcp_github_mcp_s2_issue_write:"GitHub MCP (Remote): Issue Write",str_replace_editor:"Editor Replace",TaskGet:"Task Get",mcp__claude_ai_Figma__get_design_context:"Figma MCP: Get Design Context",mcp__claude_ai_Figma__get_metadata:"Figma MCP: Get Metadata",mcp__claude_ai_Figma__get_screenshot:"Figma MCP: Get Screenshot",mcp__claude_ai_Figma__get_variable_defs:"Figma MCP: Get Variable Defs",mcp_figma_mcp_ser_use_figma:"Figma MCP: Use Figma","mcp_home-assistan_GetLiveContext":"Home Assistant MCP: Get Live Context",mcp_io_github_git_list_issue_fields:"GitHub MCP (Local): List Issue Fields",mcp_io_github_git_request_copilot_review:"GitHub MCP (Local): Request Copilot Review",mcp_mcpsamples_aw_search_instructions:"MCPSamples: Search Instructions","actions-marketplace_resolveActionVersions":"Actions Marketplace MCP: Resolve Action Versions",execute_code:"Execute Code",mcp__Claude_Browser__javascript_tool:"Claude Browser: JavaScript Tool",mcp__Claude_Browser__resize_window:"Claude Browser: Resize Window",patch:"Patch",searchFiles:"Search Files",search_files:"Search Files",skill_view:"Skill View",EnterWorktree:"Git Entry Worktree",Grace:"Grace",ReportFindings:"Report Findings",__slash__compact:"Compact",mcp__ccd_session_mgmt__get_session:"Session Management MCP: Get Session",mcp__ccd_session_mgmt__list_events:"Session Management MCP: List Events","appmod-search-file":"AppMod Search File",get_instructions:"Get Instructions",get_scenarios:"Get Scenarios",get_state:"Get State",mcp_azure_mcp_ser_azureterraformbestpractices:"Azure MCP (Serena): Azure Terraform Best Practices",mcp_azure_mcp_ser_compute:"Azure MCP (Serena): Compute",mcp_azure_mcp_ser_documentation:"Azure MCP (Serena): Documentation",mcp_azure_mcp_ser_extension_cli_generate:"Azure MCP (Serena): Extension CLI Generate",mcp_azure_mcp_ser_policy:"MCP Azure MCP Ser Policy",mcp_playwright_browser_hover:"Playwright Browser Hover",configure_python_notebook:"Configure Python Notebook",ShareOnboardingGuide:"Share Onboarding Guide",append:"Append",controlProcess:"Control Process",delete:"Delete",displayError:"Display Error",exec:"Execute",getDiagnostics:"Get Diagnostics",getProcessOutput:"Get Process Output",invokeSubAgent:"Invoke Sub-Agent",listProcesses:"List Processes",nuget_get_latest_package_version:"NuGet Get Latest Package Version",pbtStatus:"PB/T Status",readCode:"Read Code",remote_web_search:"Remote Web Search",replace:"Replace",specAgent:"Spec Agent",subagent_response:"Subagent Response",taskStatus:"Task Status",wait:"Wait",mcp__ccd_session_mgmt__list_sessions:"MCP: Ccd Session Mgmt - List Sessions",mcp__ccd_session_mgmt__search_session_transcripts:"MCP: Ccd Session Mgmt - Search Session Transcripts","mcp__claude-in-chrome__browser_batch":"MCP: Claude In Chrome - Browser Batch",get_current_session:"Get Current Session",get_session_context:"Get Session Context",listComments:"List Comments",list_sessions:"List Sessions",problems:"Problems",activate_project:"Project Activation",analyze_calls:"Call Analysis",evaluate_expression:"Expression Evaluation",exec_command:"Command Execution",execute_sql_query:"SQL Query Execution",execute_tool:"Tool Execution",findTests:"Find Tests",find_declaration:"Find Declaration",find_implementations:"Find Implementations",find_referencing_symbols:"Find Referencing Symbols",followup_task:"Follow-up Task",get_current_config:"Get Current Configuration",get_debug_session_status:"Debug Session Status",get_diagnostics_for_file:"Diagnostics for File",get_file_problems:"File Problems",get_repositories:"Repositories",get_run_configurations:"Run Configurations",get_solution_projects:"Solution Projects",get_symbol_info:"Symbol Info",get_symbols_overview:"Symbols Overview",get_variables:"Get Variables",initial_instructions:"Initial Instructions",insert_after_symbol:"Insert After Symbol",interrupt_agent:"Interrupt Agent",js:"JavaScript",lint_files:"Lint Files",list_database_connections:"List Database Connections",list_debug_sessions:"List Debug Sessions",list_directory_tree:"Directory Tree",list_memories:"List Memories",load_workspace_dependencies:"Load Workspace Dependencies",open_file_in_editor:"Open File in Editor",post_edit_quality_check:"Post Edit Quality Check",read_memory:"Read Memory",reformat_file:"Reformat File",rename_symbol:"Rename Symbol",replace_in_files:"Replace In Files",replace_symbol_body:"Replace Symbol Body",run:"Run",safe_delete_symbol:"Safe Delete Symbol",search_file:"Search File",search_for_pattern:"Search for Pattern",search_regex:"Search Regex",search_symbol:"Search Symbol",shell_command:"Shell Command",skill_search:"Skill Search",spawn_agent:"Spawn Agent",update_plan:"Update Plan",wait_agent:"Wait Agent",xdebug_get_debugger_status:"Xdebug Debugger Status",xdebug_get_frame_values:"Xdebug Get Frame Values",xdebug_get_stack:"Xdebug Get Stack",xdebug_get_threads:"Xdebug Get Threads",addComment:"View Unreviewed Comments",resolveComments:"View Unreviewed Comments",viewUnreviewedComments:"View Unreviewed Comments",archive_session:"Archive Session",reply_and_resolve_review_thread:"Reply And Resolve Review Thread",save_session_automation:"Save Session Automation",MCP:"MCP",run_workflow:"Run Workflow",agent_manager:"Agent Manager",background_process:"Background Process","gitea-mcp_get_me":"Gitea MCP: Get Me","gitea-mcp_issue_read":"Gitea MCP (Remote): Issue Read","gitea-mcp_issue_write":"Gitea MCP (Remote): Issue Write",kilo_memory_recall:"Kilo Memory Recall",kilo_memory_save:"Kilo Memory Save","mssql-dab_describe_entities":"MSSQL DAB: Describe Entities","mssql-dab_read_records":"MSSQL DAB: Read Records",outline_create_document:"Outline Create Document",outline_fetch:"Outline Fetch",outline_list_collection_documents:"Outline List Collection Documents",outline_list_collections:"Outline List Collections",outline_list_documents:"Outline List Documents",outline_update_document:"Outline Update Document",plan_exit:"Plan Exit","zai-vision_analyze_image":"ZAI Vision: Analyze Image","zai-web-search_web_search_prime":"ZAI Web Search Prime",zread_get_repo_structure:"ZR Read Repo Structure",zread_search_doc:"ZR Search Doc",SendUserFile:"GitHub MCP (Local): Send User File",kilo_local_recall:"Kilo Local Recall",get_sessions_status:"Playwright MCP: Get Sessions Status",Claude_Browser:"Claude Browser",ExitWorktree:"Exit Worktree",ccd_pr:"Context7 MCP: Create/Update Pull Request",ccd_session_mgmt:"Context7 MCP: Manage Session",mcp__ccd_pr__get_status:"Context7 MCP: Get Status of Pull Request",mcp__ccd_session_mgmt__send_message:"Context7 MCP: Send Message to Session",mcp__ccd_session_mgmt__unarchive_session:"Context7 MCP: Unarchive Session",jarvis:"Jarvis",mcp__terminal__read_terminal:"MCP Terminal Read Terminal",mcp_jarvis_github_local_repos:"GitHub MCP (Local): Repositories",mcp_jarvis_github_search_files:"GitHub MCP (Local): Search Files",mcp_jarvis_ruddr_customer_budget:"Ruddr Customer Budget",ListPlugins:"Plugin List",SearchPlugins:"Search Plugins",ccd_view:"View Ccd",mcp__ccd_view__show_pane:"Show Pane","mcp__plugin_canvas-apps_canvas-authoring__compile_canvas":"Compile Canvas","mcp__plugin_canvas-apps_canvas-authoring__connect":"Connect","mcp__plugin_canvas-apps_canvas-authoring__describe_control":"Describe Control","mcp__plugin_canvas-apps_canvas-authoring__get_accessibility_errors":"Get Accessibility Errors","mcp__plugin_canvas-apps_canvas-authoring__get_appchecker_errors":"Get Appchecker Errors","mcp__plugin_canvas-apps_canvas-authoring__get_data_source_schema":"Get Data Source Schema","mcp__plugin_canvas-apps_canvas-authoring__list_controls":"List Controls","mcp__plugin_canvas-apps_canvas-authoring__list_data_sources":"List Data Sources","mcp__plugin_canvas-apps_canvas-authoring__sync_canvas":"Sync Canvas","mcp__plugin_power-automate_flowagent__create_flow":"Create Flow","mcp__plugin_power-automate_flowagent__delete_flow":"Delete Flow","mcp__plugin_power-automate_flowagent__get_flow":"Get Flow","mcp__plugin_power-automate_flowagent__get_operation_details":"Get Operation Details","mcp__plugin_power-automate_flowagent__get_run_action_repetitions":"Get Run Action Repetitions","mcp__plugin_power-automate_flowagent__get_run_history":"Get Run History","mcp__plugin_power-automate_flowagent__list_connections":"List Connections","mcp__plugin_power-automate_flowagent__list_environments":"List Environments","mcp__plugin_power-automate_flowagent__list_flows":"List Flows","mcp__plugin_power-automate_flowagent__publish_flow":"Publish Flow","mcp__plugin_power-automate_flowagent__run_flow":"Run Flow","mcp__plugin_power-automate_flowagent__search_operations":"Search Operations","mcp__plugin_power-automate_flowagent__whoami":"Whoami","plugin_canvas-apps_canvas-authoring":"Canvas Authoring","plugin_power-automate_flowagent":"Power Automate Flowagent","plugin_power-automate_microsoft-learn":"Microsoft Learn",get_web_pages:"Get Web Pages","github-pull-request_doSearch":"GitHub MCP (Remote): Do Search","github-pull-request_resolveReviewThread":"GitHub MCP (Remote): Resolve Review Thread",sonarqube_setup_connected_mode:"SonarQube Setup: Connected Mode","desktop-comma":"Desktop Command Line",markitdown:"Markdown Editor",mcp__claude_ai_Gmail__search_threads:"Claude Code: Search Threads","mcp_desktop-comma_read_file":"Desktop Command Line: Read File","mcp_desktop-comma_write_file":"Desktop Command Line: Write File","mcp_desktop-comma_write_pdf":"Desktop Command Line: Write PDF",mcp_markitdown_convert_to_markdown:"Markdown Editor: Convert to Markdown",request_user_input:"Request User Input",write_stdin:"Write StdIn",github:"GitHub",mcp_io_github_git_list_releases:"GitHub MCP (Local): List Releases",mcp_io_github_git_merge_pull_request:"GitHub MCP (Local): Merge Pull Request",mcp_io_github_git_update_pull_request_branch:"GitHub MCP (Local): Update Pull Request Branch",ReadNotifications:"GitHub MCP (Remote): Read Notifications"};var Oo=dn.pricing;function gt(n){return n?n.actualTokens>0?n.actualTokens:n.tokens:0}function Ql(n){let e=J(n);if(e.includes("/.copilot/jb/"))return"JetBrains";if(e.includes("/.copilot/session-store.db#")||e.includes("/.copilot/session-state/"))return"Copilot CLI";if(e.includes("/.crush/crush.db#"))return"Crush";if(e.includes("/saoudrizwan.claude-dev/tasks/"))return"Cline";if(e.includes("/kilo/kilo.db#"))return"Kilo Code";if(e.includes("/opencode/"))return"OpenCode";if(e.includes("/.codex/"))return"Codex CLI";if(e.includes("/.kiro/sessions/cli/"))return"Kiro CLI";if(e.includes("/kiro.kiroagent/workspace-sessions/"))return"Kiro";if(e.includes("/.continue/sessions/"))return"Continue";if(e.includes("/claude-code-sessions/")||e.includes("/local-agent-mode-sessions/"))return"Claude Desktop Cowork";if(e.includes("/.claude/projects/"))return Nn(n);if(e.includes("/.vibe/logs/session/"))return"Mistral Vibe";if(e.includes("/.gemini/antigravity/brain/"))return"Antigravity";if(e.includes("/.gemini/tmp/")&&e.includes("/chats/session-")&&e.endsWith(".jsonl"))return"Gemini CLI";if(e.includes("/cursor/"))return"Cursor";if(e.includes("/code - insiders/"))return"VS Code Insiders";if(e.includes("/code - exploration/"))return"VS Code Exploration";if(e.includes("/vscodium/"))return"VSCodium";if(e.includes(".vscode-server-insiders/"))return"VS Code Server (Insiders)";if(e.includes(".vscode-server"))return"VS Code Server";if(e.includes("/copilot-chat/")&&e.includes("/sessions/")){if(e.includes("/ssmsgithubcopilot/copilot-chat/"))return"SSMS";if(e.includes("/.vs/")||e.includes("/vsgithubcopilot/copilot-chat/"))return"Visual Studio"}return"VS Code"}async function Xl(n,e,t=20){if(n.length===0)return[];let s=new Array(n.length),o=0,i=Array.from({length:Math.min(t,n.length)},async()=>{for(;o<n.length;){let r=o++;try{s[r]=await e(n[r],r)}catch{s[r]=void 0}}});return await Promise.all(i),s}function Fo(){return{tokens:0,thinkingTokens:0,estimatedTokens:0,actualTokens:0,sessions:0,avgInteractionsPerSession:0,avgTokensPerSession:0,modelUsage:{},editorUsage:{},co2:0,treesEquivalent:0,waterUsage:0,estimatedCost:0}}function No(n,e,t){let s=Math.round(gt(e)*t),o=Math.round(e.thinkingTokens*t),i=Math.round(e.actualTokens*t);n.tokens+=s,n.thinkingTokens+=o,n.estimatedTokens+=Math.round(e.tokens*t),n.actualTokens+=i,n.sessions++,He(n.modelUsage,an(e.modelUsage,t));let r=Math.round(e.interactions*t),a=n.avgInteractionsPerSession*(n.sessions-1)+r;n.avgInteractionsPerSession=n.sessions>0?a/n.sessions:0,n.editorUsage[e.editorSource]||(n.editorUsage[e.editorSource]={tokens:0,sessions:0}),n.editorUsage[e.editorSource].tokens+=s,n.editorUsage[e.editorSource].sessions++}function Rs(){return{sessions:0,toolCalls:{total:0,byTool:{}},modeUsage:{ask:0,edit:0,agent:0,plan:0,customAgent:0,cli:0},contextReferences:G(),mcpTools:{total:0,byServer:{},byTool:{}},modelSwitching:{modelsPerSession:[],totalSessions:0,averageModelsPerSession:0,maxModelsPerSession:0,minModelsPerSession:0,switchingFrequency:0,autoSessions:0,foundryWindowsSessions:0,unknownProviderSessions:0,selectedModelExtensions:[],unknownProviderModels:[],standardModels:[],premiumModels:[],lowCostModels:[],mediumCostModels:[],highCostModels:[],unknownModels:[],mixedTierSessions:0,mixedCostSessions:0,standardRequests:0,premiumRequests:0,unknownRequests:0,totalRequests:0,lowCostRequests:0,mediumCostRequests:0,highCostRequests:0},repositories:[],repositoriesWithCustomization:[],editScope:{singleFileEdits:0,multiFileEdits:0,totalEditedFiles:0,avgFilesPerSession:0},applyUsage:{totalApplies:0,totalCodeBlocks:0,applyRate:0},sessionDuration:{totalDurationMs:0,avgDurationMs:0,avgFirstProgressMs:0,avgTotalElapsedMs:0,avgWaitTimeMs:0,activeDurationMs:0},conversationPatterns:{multiTurnSessions:0,singleTurnSessions:0,avgTurnsPerSession:0,maxTurnsInSession:0},agentTypes:{editsAgent:0,defaultAgent:0,workspaceAgent:0,other:0},taskCategoryPrimarySessions:{},taskCategoryWeightedSessions:{}}}var as=[{bg:"rgba(54, 162, 235, 0.6)",border:"rgba(54, 162, 235, 1)"},{bg:"rgba(255, 99, 132, 0.6)",border:"rgba(255, 99, 132, 1)"},{bg:"rgba(75, 192, 192, 0.6)",border:"rgba(75, 192, 192, 1)"},{bg:"rgba(153, 102, 255, 0.6)",border:"rgba(153, 102, 255, 1)"},{bg:"rgba(255, 159, 64, 0.6)",border:"rgba(255, 159, 64, 1)"},{bg:"rgba(255, 205, 86, 0.6)",border:"rgba(255, 205, 86, 1)"},{bg:"rgba(201, 203, 207, 0.6)",border:"rgba(201, 203, 207, 1)"},{bg:"rgba(100, 181, 246, 0.6)",border:"rgba(100, 181, 246, 1)"}];function Lo(n,e,t){if(!n||!e)throw new Error("buildChartPayload: labels and days are required");if(n.length!==e.length)throw new Error(`buildChartPayload: labels.length (${n.length}) !== days.length (${e.length})`);let s=A=>`${A.getFullYear()}-${String(A.getMonth()+1).padStart(2,"0")}-${String(A.getDate()).padStart(2,"0")}`,o=A=>{let D=A.map(U=>U.entry),B=A.map(U=>U.label),_e=D.map(U=>U.tokens),me=D.map(U=>U.sessions),ae=new Set;D.forEach(U=>Object.keys(U.modelUsage).forEach(Q=>ae.add(Q)));let fn=Array.from(ae).map((U,Q)=>{let be=as[Q%as.length];return{label:U,data:D.map(Me=>{let le=Me.modelUsage[U];return le?le.inputTokens+le.outputTokens:0}),backgroundColor:be.bg,borderColor:be.border,borderWidth:1}}),Us=new Set;D.forEach(U=>Object.keys(U.editorUsage).forEach(Q=>Us.add(Q)));let Be=Array.from(Us).map((U,Q)=>{let be=as[Q%as.length];return{label:U,data:D.map(Me=>Me.editorUsage[U]?.tokens||0),backgroundColor:be.bg,borderColor:be.border,borderWidth:1}}),hn=_e.reduce((U,Q)=>U+Q,0),Kt=me.reduce((U,Q)=>U+Q,0),At=A.length,Bo=D.map(U=>Xe(U.modelUsage,Oo,"copilot")),qo=Bo.reduce((U,Q)=>U+Q,0),Yr=At>0?qo/At:0,ds=new Set;D.forEach(U=>{U.editorModelUsage&&Object.keys(U.editorModelUsage).forEach(Q=>ds.add(Q))});let Os=new Map;for(let U of ds){let Q=D.reduce((be,Me)=>be+Xe(Me.editorModelUsage?.[U]??{},Oo,gl(U)),0);Os.set(U,Q)}let zo=Array.from(ds).sort((U,Q)=>(Os.get(Q)||0)-(Os.get(U)||0)).map((U,Q)=>{let be=as[Q%as.length];return{label:U,data:D.map(Me=>Xe(Me.editorModelUsage?.[U]??{},Oo,gl(U))),backgroundColor:be.bg,borderColor:be.border,borderWidth:1}}),yn=new Set;D.forEach(U=>{if(U.editorModelUsage)for(let[Q,be]of Object.entries(U.editorModelUsage))for(let Me of Object.keys(be))yn.add(hr(Q,Me))});let it=new Map;for(let U of yn)it.set(U,D.reduce((Q,be)=>{if(!be.editorModelUsage)return Q;let Me={};for(let[ms,ps]of Object.entries(be.editorModelUsage))for(let[gs,xt]of Object.entries(ps))hr(ms,gs)===U&&He(Me,{[gs]:{...xt,sessions:0}});return Q+Xe(Me,Oo,U==="GitHub Copilot"?"copilot":"provider")},0));let rt=Array.from(yn).sort((U,Q)=>(it.get(Q)||0)-(it.get(U)||0)).map((U,Q)=>{let be=as[Q%as.length],Me=U==="GitHub Copilot"?"copilot":"provider";return{label:U,data:D.map(le=>{if(!le.editorModelUsage)return 0;let ms={};for(let[ps,gs]of Object.entries(le.editorModelUsage))for(let[xt,Xr]of Object.entries(gs))hr(ps,xt)===U&&He(ms,{[xt]:{...Xr,sessions:0}});return Xe(ms,Oo,Me)}),backgroundColor:be.bg,borderColor:be.border,borderWidth:1}});return{labels:B,tokensData:_e,sessionsData:me,modelDatasets:fn,editorDatasets:Be,repositoryDatasets:[],periodCount:At,totalTokens:hn,totalSessions:Kt,avgPerPeriod:At>0?Math.round(hn/At):0,costData:Bo,totalCost:qo,avgCostPerPeriod:Yr,editorCostDatasets:zo,billingGroupCostDatasets:rt}},i=(A,D)=>{A.tokens+=D.tokens,A.sessions+=D.sessions,He(A.modelUsage,an(D.modelUsage,1));for(let[B,_e]of Object.entries(D.editorUsage))A.editorUsage[B]||(A.editorUsage[B]={tokens:0,sessions:0}),A.editorUsage[B].tokens+=_e.tokens,A.editorUsage[B].sessions+=_e.sessions;if(D.editorModelUsage){A.editorModelUsage||(A.editorModelUsage={});for(let[B,_e]of Object.entries(D.editorModelUsage))A.editorModelUsage[B]||(A.editorModelUsage[B]={}),He(A.editorModelUsage[B],an(_e,1))}},r=()=>({tokens:0,sessions:0,modelUsage:{},editorUsage:{}}),a=new Date,l=n.map((A,D)=>({label:A,entry:e[D]})),d=o(l),p=A=>{let D=new Date(A);D.setHours(0,0,0,0);let B=D.getDay();return D.setDate(D.getDate()-(B===0?6:B-1)),D},g=A=>{let D=new Date(A);return D.setDate(A.getDate()+6),A.getMonth()===D.getMonth()?`${A.toLocaleDateString("en-US",{month:"short"})} ${A.getDate()}\u2013${D.getDate()}`:`${A.toLocaleDateString("en-US",{month:"short",day:"numeric"})}\u2013${D.toLocaleDateString("en-US",{month:"short",day:"numeric"})}`},h=p(a),y=new Map;for(let A=5;A>=0;A--){let D=new Date(h);D.setDate(h.getDate()-A*7);let B=s(D);y.set(B,{label:g(D),entry:r()})}let b=t||new Map(n.map((A,D)=>[A,e[D]]));for(let[A,D]of b.entries()){let B=p(new Date(A+"T00:00:00")),_e=y.get(s(B));_e&&i(_e.entry,D)}let T=Array.from(y.values()),E=o(T),P=new Map;for(let A=11;A>=0;A--){let D=new Date(a.getFullYear(),a.getMonth()-A,1),B=`${D.getFullYear()}-${String(D.getMonth()+1).padStart(2,"0")}`,_e=D.toLocaleDateString("en-US",{month:"short",year:"numeric"});P.set(B,{label:_e,entry:r()})}for(let[A,D]of b.entries()){let B=A.slice(0,7),_e=P.get(B);_e&&i(_e.entry,D)}let I=Array.from(P.values()),F=o(I),Z={};return e.forEach(A=>{Object.entries(A.editorUsage).forEach(([D,B])=>{Z[D]=(Z[D]||0)+B.tokens})}),{labels:d.labels,tokensData:d.tokensData,sessionsData:d.sessionsData,modelDatasets:d.modelDatasets,editorDatasets:d.editorDatasets,editorTotalsMap:Z,repositoryDatasets:[],repositoryTotalsMap:{},dailyCount:d.periodCount,totalTokens:d.totalTokens,avgTokensPerDay:d.periodCount>0?Math.round(d.totalTokens/d.periodCount):0,totalSessions:d.totalSessions,lastUpdated:new Date().toISOString(),backendConfigured:!1,periodsReady:!0,periods:{day:d,week:E,month:F}}}function Y(n){return n==null||!Number.isFinite(n)?"0":Math.round(n).toLocaleString("en-US")}function de(n){return n==null||!Number.isFinite(n)||n<0?"0":n>=1e9?`${(n/1e9).toFixed(1)}B`:n>=1e6?`${(n/1e6).toFixed(1)}M`:n>=1e3?`${(n/1e3).toFixed(1)}K`:n.toString()}var ot={...vt,CO2_PER_KM_DRIVING:120,CO2_PER_PHONE_CHARGE:8.22,WATER_PER_COFFEE_CUP:140,CO2_PER_LED_HOUR:20};var jo=vp.estimators,Jt=dn.pricing,fT=Pp,hT=n=>{},Ir=n=>{},xp=(n,e)=>{let t=e instanceof Error?e.message:e!==void 0?String(e):"";console.error(w.red(n),t)};async function yT(n){try{let e=await Ht.promises.readFile(n,"utf-8");return JSON.parse(e)}catch(e){return e?.code!=="ENOENT"&&xp(`[readJsonFile] Failed to read or parse JSON at ${n}:`,e),null}}var Rr=null;function pn(){if(Rr)return Rr;let n=li.file(__dirname);return Rr=jl({...Ll(n),estimateTokens:(e,t)=>te(e,t??"gpt-4",jo),isMcpTool:lt,extractMcpServerName:Ct}),Rr}function Dp(){return new hi({log:hT,warn:Ir,error:xp,ecosystems:pn()})}async function ke(){return Dp().getCopilotSessionFiles()}async function Ur(n){let e=new Set,t=Ae.join(Ap.homedir(),".claude","projects");for(let o of n){if(o.startsWith(t+Ae.sep)||o.startsWith(t+"/")){let g=await ks(()=>Ht.promises.readFile(o,"utf-8"),null,`buildCustomizationMatrix readFile(${o})`);if(g!==null){let h=g.split(`
|
|
165
|
+
`).slice(0,30);for(let y of h)if(y.trim())try{let b=JSON.parse(y);if(b.cwd&&typeof b.cwd=="string"){e.add(b.cwd);break}}catch{}}continue}let i=Ae.dirname(o);if(Ae.basename(i)!=="chatSessions")continue;let r=Ae.dirname(i),a=Ae.join(r,"workspace.json"),l=await yT(a);if(!l)continue;let d=l.folder;if(!d||!d.startsWith("file://"))continue;let p=In(d);p&&e.add(p)}if(e.size===0)return;let s=0;for(let o of e)await ks(async()=>{let[r,a,l]=await Promise.all([Ht.promises.access(Ae.join(o,".github","copilot-instructions.md")).then(()=>!0).catch(()=>!1),Ht.promises.access(Ae.join(o,"agents.md")).then(()=>!0).catch(()=>!1),Ht.promises.access(Ae.join(o,"CLAUDE.md")).then(()=>!0).catch(()=>!1)]);return!r&&!a&&!l},!0,`buildCustomizationMatrix workspace check(${o})`)&&s++;return{customizationTypes:[],workspaces:[],totalWorkspaces:e.size,workspacesWithIssues:s}}function Or(){return Dp().getDiagnosticCandidatePaths()}function _T(n,e){return te(n,e||"gpt-4",jo)}function bT(n){return It(n,Jt)}async function Ep(n){let e=pn().find(t=>t.handles(n));return e?e.stat(n):Ht.promises.stat(n)}async function CT(n,e=!1){let t=Ae.basename(n,Ae.extname(n));if(!/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(t))return null;let o=n.replace(/\\/g,"/").match(/^(.*\/workspaceStorage\/[^/]+)\//);if(!o)return null;let r=o[1].replace(/\//g,"\\"),a=["GitHub.copilot-chat","github.copilot-chat","GitHub.copilot","github.copilot"];for(let l of a){let d=Ae.join(r,l,"debug-logs",t,"main.jsonl");try{let p=await Ht.promises.readFile(d,"utf8"),g=Fu(p);if(g)return e&&console.error(` \u2713 Found debug log: ${t} (tokens: ${g.inputTokens+g.outputTokens})`),g}catch{}}return e&&console.error(` \u2717 No debug log found: ${t}`),null}async function Is(n,e=!1){try{let t=await Ep(n),s=Mp(n,t.mtimeMs,t.size);if(s)return s;let o=pn().find(T=>T.handles(n));if(o){let[T,E,P]=await Promise.all([o.getTokens(n),o.countInteractions(n),o.getModelUsage(n)]),I=N(t.mtime),F={file:n,tokens:T.actualTokens>0?T.actualTokens:T.tokens,thinkingTokens:T.thinkingTokens,actualTokens:T.actualTokens,interactions:E,modelUsage:P,lastModified:t.mtime,editorSource:Ql(n),dailyFractions:await o.getDailyFractions?.(n)??{[I]:1}};return Vl(n,t.mtimeMs,t.size,F),F}let i=await Ht.promises.readFile(n,"utf-8");if(!i.trim())return null;let r=n.endsWith(".jsonl")||Ut(i),a=0,l=0,d=0,p=0,g={};if(r){let T=rn(n)?await Ds(n):null,E=vi(i,T);if(a=E.actualTokens>0?E.actualTokens:E.tokens,l=E.thinkingTokens,d=E.actualTokens,g=await kr({warn:Ir,tokenEstimators:jo,modelPricing:Jt,ecosystems:pn()},n,i),Object.keys(g).length===0&&nr(n)){let I=yr(i);Object.keys(I.modelUsage).length>0?g=I.modelUsage:I.tokens>0&&(g={[I.modelHint&&I.modelHint!=="unknown"?I.modelHint:"unknown"]:{inputTokens:I.tokens,outputTokens:0,sessions:0}})}g=dm(g,d||a);let P=i.trim().split(`
|
|
166
|
+
`);for(let I of P)try{let F=JSON.parse(I);(F.type==="user.message"||F.kind===2&&F.k?.[0]==="requests")&&p++}catch{}}else{let T=mp(n,i,_T,bT);a=T.tokens,l=T.thinkingTokens,d=T.actualTokens,p=T.interactions,g=await kr({warn:Ir,tokenEstimators:jo,modelPricing:Jt,ecosystems:pn()},n,i)}let h=pp(i,r,t.mtime),y=await CT(n,e);if(y&&y.inputTokens+y.outputTokens>0&&(a=y.inputTokens+y.outputTokens,d=a,Object.keys(y.modelBreakdown).length>0)){let T={};for(let[E,P]of Object.entries(y.modelBreakdown))T[E]={inputTokens:P.inputTokens,outputTokens:P.outputTokens,sessions:0,...P.cachedTokens>0?{cachedReadTokens:P.cachedTokens}:{}};um(g,T),g=T}let b={file:n,tokens:a,thinkingTokens:l,actualTokens:d,interactions:p,modelUsage:g,lastModified:t.mtime,editorSource:Ql(n),dailyFractions:h};return Vl(n,t.mtimeMs,t.size,b),b}catch{return null}}async function ls(n,e){let t=new Date,s=N(t),o=t.getFullYear(),i=t.getMonth(),r=N(new Date(o,i,1)),a=new Date(o,i,0),l=N(new Date(a.getFullYear(),a.getMonth(),1)),d=new Date(o,i,t.getDate()-30),p=N(d),g={today:Fo(),month:Fo(),lastMonth:Fo(),last30Days:Fo()},h=0,y=await Xl(n,async b=>{let T=await Is(b);return e&&e(++h,n.length),T});for(let b of y){if(!b||b.tokens===0||!Object.keys(b.dailyFractions).some(Z=>Z>=l))continue;let E=0,P=0,I=0,F=0;for(let[Z,A]of Object.entries(b.dailyFractions))Z===s&&(E+=A),Z>=r&&(P+=A),Z>=l&&Z<r&&(I+=A),Z>=p&&(F+=A);E>0&&No(g.today,b,E),P>0&&No(g.month,b,P),I>0&&No(g.lastMonth,b,I),F>0&&No(g.last30Days,b,F)}for(let b of Object.values(g)){b.sessions>0&&(b.avgTokensPerSession=Math.round(b.tokens/b.sessions));let T=_p(b.modelUsage,b.tokens);b.co2=T.co2,b.treesEquivalent=T.treesEquivalent,b.waterUsage=T.waterUsage,b.estimatedCost=Xe(b.modelUsage,Jt),b.estimatedCostCopilot=Xe(b.modelUsage,Jt,"copilot")}return{...g,lastUpdated:t}}async function cs(n){let e={warn:Ir,tokenEstimators:jo,modelPricing:Jt,toolNameMap:fT,ecosystems:pn()},t=new Date,s=new Date(t.getFullYear(),t.getMonth(),t.getDate()),o=new Date(t.getFullYear(),t.getMonth(),t.getDate()-30),i=new Date(t.getFullYear(),t.getMonth(),1),r=new Date(t.getFullYear(),t.getMonth()-1,1),a=r<o?r:o,l=Rs(),d=Rs(),p=Rs(),g=Rs(),h=[],y=[];for(let b of n)try{let E=(await Ep(b)).mtime;if(E<a)continue;let P=await Nm(e,b),I,F=E>=o?await Is(b):void 0;if(F&&F.interactions>0){let Z=0,A=0,D=0;for(let B of Object.values(F.modelUsage))Z+=B.inputTokens,A+=B.outputTokens,D+=B.cachedReadTokens??0;I={title:null,filePath:b,interactions:F.interactions,toolCalls:P.toolCalls.total,inputTokens:Z,outputTokens:A,thinkingTokens:F.thinkingTokens??0,cachedTokens:D,totalTokens:F.tokens,estimatedCost:Xe(F.modelUsage,Jt),editor:F.editorSource,models:Object.keys(F.modelUsage),lastActivity:F.lastModified.toISOString(),...P.sessionDuration?.totalDurationMs!==void 0?{durationMs:P.sessionDuration.totalDurationMs}:{},...P.sessionDuration?.activeDurationMs!==void 0?{activeDurationMs:P.sessionDuration.activeDurationMs}:{}},y.push({activityKey:N(F.lastModified),interactions:F.interactions,value:I})}E>=o&&(go(d,P),d.sessions++),E>=i&&(go(p,P),p.sessions++),E>=s&&(go(l,P),l.sessions++,I&&h.push(I)),E>=r&&E<i&&(go(g,P),g.sessions++)}catch{}return{today:l,last30Days:d,month:p,lastMonth:g,lastUpdated:t,todaySessions:h.sort((b,T)=>T.interactions-b.interactions),recentSessions:bp(y,t)}}async function Fr(n,e=!1){let t=new Date,s=new Date(t.getFullYear(),t.getMonth(),t.getDate()-30),o=N(s),i=N(t),r=new Map,a=new Date(s);for(;N(a)<=i;){let h=N(a);r.set(h,{tokens:0,sessions:0,modelUsage:{},editorUsage:{}}),a.setDate(a.getDate()+1)}let l=new Map,d=await Xl(n,async h=>Is(h,e));for(let h of d){if(!h||h.tokens===0||h.interactions===0)continue;let y=gt(h);for(let[b,T]of Object.entries(h.dailyFractions)){let E=Math.round(y*T),P=an(h.modelUsage,T),I=r.get(b);if(I){I.tokens+=E,I.sessions++,He(I.modelUsage,P);let A=h.editorSource;I.editorUsage[A]||(I.editorUsage[A]={tokens:0,sessions:0}),I.editorUsage[A].tokens+=E,I.editorUsage[A].sessions++,I.editorModelUsage||(I.editorModelUsage={}),I.editorModelUsage[A]||(I.editorModelUsage[A]={}),He(I.editorModelUsage[A],P)}l.has(b)||l.set(b,{tokens:0,sessions:0,modelUsage:{},editorUsage:{}});let F=l.get(b);F.tokens+=E,F.sessions++,He(F.modelUsage,P);let Z=h.editorSource;F.editorUsage[Z]||(F.editorUsage[Z]={tokens:0,sessions:0}),F.editorUsage[Z].tokens+=E,F.editorUsage[Z].sessions++,F.editorModelUsage||(F.editorModelUsage={}),F.editorModelUsage[Z]||(F.editorModelUsage[Z]={}),He(F.editorModelUsage[Z],P)}}let p=Array.from(r.keys()).sort(),g=p.map(h=>r.get(h));return{labels:p,days:g,allDaysMap:l}}var kT=50;function Rp(n=kT){process.stdout.write("\r"+" ".repeat(Math.max(0,n))+"\r")}function Zl(n){process.stdout.write(w.dim(n))}var ST=80,Je=class{silent;constructor(e=!1){this.silent=e}show(e){this.silent||Zl(e)}update(e){this.silent||(process.stdout.write("\r"),Zl(e))}done(){this.silent||Rp(ST)}};function Se(n){return n.json===!0}var Ip=new ce("stats").description("Show overview of discovered session files, sessions, chat turns, and tokens").option("-v, --verbose","Show detailed per-folder breakdown").option("--json","Output raw JSON (for machine consumption)").action(async n=>{let e=Se(n);if(e||console.log(w.bold.cyan(`
|
|
167
167
|
\u{1F50D} Copilot Token Tracker - Session Statistics
|
|
168
|
-
`)),n.verbose&&!e){let y=
|
|
169
|
-
`));let o=0,i=0,r=0,a=0,
|
|
168
|
+
`)),n.verbose&&!e){let y=Or();console.log(w.dim("Search paths:"));for(let b of y){let T=b.exists?w.green("\u2705"):w.dim("\u274C");console.log(` ${T} ${w.dim(b.source)}: ${b.path}`)}console.log()}let t=new Je(e);t.show("Scanning for session files...");let s=await ke();if(t.done(),s.length===0){e?process.stdout.write("{}"):(console.log(w.yellow("\u26A0\uFE0F No session files found.")),console.log(w.dim("Have you used GitHub Copilot Chat in VS Code yet?")));return}e||console.log(w.green(`\u{1F4C2} Found ${w.bold(Y(s.length))} session file(s)
|
|
169
|
+
`));let o=0,i=0,r=0,a=0,l=0,d={},p={};for(let y=0;y<s.length;y++){let b=await Is(s[y]);if(!b||b.tokens===0){l++;continue}if(a++,o+=gt(b),i+=b.thinkingTokens,r+=b.interactions,d[b.editorSource]||(d[b.editorSource]={files:0,tokens:0,interactions:0}),d[b.editorSource].files++,d[b.editorSource].tokens+=gt(b),d[b.editorSource].interactions+=b.interactions,n.verbose){let T=wT(s[y]);p[T]||(p[T]={files:0,tokens:0}),p[T].files++,p[T].tokens+=gt(b)}((y+1)%50===0||y===s.length-1)&&t.update(`Processing: ${y+1}/${s.length}`)}if(t.done(),e){let y={totalFiles:s.length,processedFiles:a,emptyFiles:l,totalTokens:o,totalThinkingTokens:i,totalInteractions:r,byEditor:d,lastUpdated:new Date().toISOString()};process.stdout.write(JSON.stringify(y));return}console.log(w.bold("\u{1F4CA} Summary")),console.log(w.dim("\u2500".repeat(50))),console.log(` Session files (with data): ${w.bold(Y(a))}`),l>0&&console.log(` Empty/skipped files: ${w.dim(Y(l))}`),console.log(` Total chat turns: ${w.bold(Y(r))}`),console.log(` Total tokens: ${w.bold.yellow(de(o))}`),i>0&&console.log(` Thinking tokens (included): ${w.dim(de(i))}`);let g=Yl();g.enabled&&g.entries>0&&console.log(w.dim(` Cache: ${Y(g.entries)} entries loaded`)),console.log();let h=Object.entries(d).sort((y,b)=>b[1].tokens-y[1].tokens);if(h.length>0){console.log(w.bold("\u{1F5A5}\uFE0F By Editor")),console.log(w.dim("\u2500".repeat(50)));for(let[y,b]of h){let T=TT(y);console.log(` ${T.padEnd(25)} ${Y(b.files).padStart(5)} files ${de(b.tokens).padStart(8)} tokens ${Y(b.interactions).padStart(6)} turns`)}console.log()}if(n.verbose&&Object.keys(p).length>0){let y=Object.entries(p).sort((b,T)=>T[1].tokens-b[1].tokens);console.log(w.bold("\u{1F4C1} By Folder")),console.log(w.dim("\u2500".repeat(70)));for(let[b,T]of y.slice(0,20))console.log(` ${b.substring(0,50).padEnd(50)} ${Y(T.files).padStart(5)} files ${de(T.tokens).padStart(8)} tokens`);y.length>20&&console.log(w.dim(` ... and ${y.length-20} more folders`)),console.log()}});function TT(n){return n?{vscode:"VS Code","vscode-insiders":"VS Code Insiders","vscode-exploration":"VS Code Exploration","vscode-remote":"VS Code Remote",vscodium:"VSCodium",cursor:"Cursor","copilot-cli":"Copilot CLI",opencode:"OpenCode","claude-code":"Claude Code","claude-desktop-cowork":"Claude Desktop (Cowork)","mistral-vibe":"Mistral Vibe","gemini-cli":"Gemini CLI"}[n]||n:"Unknown"}function wT(n){let e=n.split(/[/\\]/),t=e.indexOf("chatSessions");return t>=2?e.slice(t-1,t+1).join("/"):e.slice(-3,-1).join("/")}function Up(n=new Date){return{today:{},month:{},lastMonth:{},last30Days:{},lastUpdated:n.toISOString(),backendConfigured:!1}}function Nr(n=new Date){return{labels:[],tokensData:[],sessionsData:[],modelDatasets:[],editorDatasets:[],editorTotalsMap:{},repositoryDatasets:[],repositoryTotalsMap:{},dailyCount:0,totalTokens:0,avgTokensPerDay:0,totalSessions:0,lastUpdated:n.toISOString(),backendConfigured:!1}}function Lr(n=new Date){return{today:{},last30Days:{},month:{},lastMonth:{},locale:Intl.DateTimeFormat().resolvedOptions().locale,lastUpdated:n.toISOString(),backendConfigured:!1}}function Op(){return{}}function jr(n){return{today:n.today,month:n.month,lastMonth:n.lastMonth,last30Days:n.last30Days,lastUpdated:n.lastUpdated.toISOString(),backendConfigured:!1}}function Gr(n,e=new Date){return{...n,locale:Intl.DateTimeFormat().resolvedOptions().locale,lastUpdated:e.toISOString(),backendConfigured:!1}}function Br(n){return{overallStage:n.overallStage,overallLabel:n.overallLabel,categories:n.categories,period:n.period,lastUpdated:n.lastUpdated,backendConfigured:!1}}var Fp=new ce("usage").description("Show token usage for today, current month, last month, and last 30 days").option("-m, --models","Show per-model token breakdown").option("-c, --cost","Show estimated cost breakdown").option("--json","Output raw JSON (for machine consumption)").action(async n=>{let e=await MT(n);if(!e)return;let t=await vT(e,n);if(Se(n)){process.stdout.write(JSON.stringify(jr(t)));return}console.log(w.bold.cyan(`
|
|
170
170
|
\u{1F4CA} Copilot Token Tracker - Usage Report
|
|
171
|
-
`));let s=[{label:"Today",emoji:"\u{1F4C5}",stats:t.today},{label:"This Month",emoji:"\u{1F4C6}",stats:t.month},{label:"Last Month",emoji:"\u{1F5D3}\uFE0F",stats:t.lastMonth},{label:"Last 30 Days",emoji:"\u{1F4C8}",stats:t.last30Days}];for(let o of s)
|
|
172
|
-
`))});async function
|
|
171
|
+
`));let s=[{label:"Today",emoji:"\u{1F4C5}",stats:t.today},{label:"This Month",emoji:"\u{1F4C6}",stats:t.month},{label:"Last Month",emoji:"\u{1F5D3}\uFE0F",stats:t.lastMonth},{label:"Last 30 Days",emoji:"\u{1F4C8}",stats:t.last30Days}];for(let o of s)PT(o.label,o.emoji,o.stats,n);console.log(w.dim(`Last updated: ${t.lastUpdated.toLocaleString()}
|
|
172
|
+
`))});async function MT(n){let e=Se(n),t=new Je(e);t.show("Scanning for session files...");let s=await ke();return t.done(),s.length===0?(e?process.stdout.write("{}"):console.log(w.yellow("\u26A0\uFE0F No session files found.")),null):s}async function vT(n,e){let t=Se(e),s=new Je(t);s.show("Calculating token usage...");let o=await ls(n,(i,r)=>{s.update(`Processing: ${i}/${r} files`)});return s.done(),o}function PT(n,e,t,s){if(console.log(w.bold(`${e} ${n}`)),console.log(w.dim("\u2500".repeat(55))),!t||t.sessions===0){console.log(w.dim(" No activity in this period")),console.log();return}if(console.log(` Sessions: ${w.bold(Y(t.sessions))}`),console.log(` Avg interactions/sess: ${w.bold(t.avgInteractionsPerSession.toFixed(1))}`),console.log(` Total tokens: ${w.bold.yellow(de(t.tokens))}`),t.thinkingTokens>0&&console.log(` Thinking tokens: ${w.dim(de(t.thinkingTokens))} (included in total)`),console.log(` Avg tokens/session: ${w.bold(de(t.avgTokensPerSession))}`),s.cost&&(t.estimatedCostCopilot??0)>0&&console.log(` Estimated cost (UBB): ${w.green("$"+(t.estimatedCostCopilot??0).toFixed(4))} ${w.dim("(Copilot AI Credits)")}`),s.models&&Object.keys(t.modelUsage).length>0){console.log(),console.log(w.dim(" Model Breakdown:"));let o=Object.entries(t.modelUsage).sort((i,r)=>r[1].inputTokens+r[1].outputTokens-(i[1].inputTokens+i[1].outputTokens));for(let[i,r]of o){let a=r.inputTokens+r.outputTokens,l=Ps(i,Jt),d=l==="premium"?w.yellow(" \u2B50"):l==="standard"?w.dim(" \u25CB"):"";console.log(` ${(i+d).padEnd(35)} ${de(r.inputTokens).padStart(8)} in ${de(r.outputTokens).padStart(8)} out ${de(a).padStart(8)} total`)}}if(Object.keys(t.editorUsage).length>1){console.log(),console.log(w.dim(" Editor Breakdown:"));let o=Object.entries(t.editorUsage).sort((i,r)=>r[1].tokens-i[1].tokens);for(let[i,r]of o)console.log(` ${i.padEnd(25)} ${Y(r.sessions).padStart(5)} sessions ${de(r.tokens).padStart(8)} tokens`)}console.log()}var Np=new ce("environmental").alias("env").description("Show environmental impact of your Copilot usage (CO2, water, trees)").action(async()=>{console.log(w.bold.cyan(`
|
|
173
173
|
\u{1F30D} Copilot Token Tracker - Environmental Impact
|
|
174
|
-
`));let n=new Je;n.show("Scanning for session files...");let e=await ke();if(n.done(),e.length===0){console.log(w.yellow("\u26A0\uFE0F No session files found."));return}n.show("Calculating usage...");let t=await
|
|
175
|
-
`));for(let i of s)
|
|
176
|
-
`))});function
|
|
174
|
+
`));let n=new Je;n.show("Scanning for session files...");let e=await ke();if(n.done(),e.length===0){console.log(w.yellow("\u26A0\uFE0F No session files found."));return}n.show("Calculating usage...");let t=await ls(e,(i,r)=>{n.update(`Processing: ${i}/${r} files`)});n.done();let s=[{label:"Today",emoji:"\u{1F4C5}",stats:t.today},{label:"This Month",emoji:"\u{1F4C6}",stats:t.month},{label:"Last Month",emoji:"\u{1F5D3}\uFE0F",stats:t.lastMonth},{label:"Last 30 Days",emoji:"\u{1F4C8}",stats:t.last30Days}];console.log(w.dim(`Methodology: Jegham et al., "How Hungry is AI?" (arXiv:${Oe.ARXIV_ID}), via neuland/tokendashboard-backend.`)),console.log(w.dim(` Reference: Claude 3.7 Sonnet, ${Oe.PROMPT_INPUT_TOKENS} in / ${Oe.PROMPT_OUTPUT_TOKENS} out = ${Oe.ENERGY_WH_PER_QUERY} Wh per query`)),console.log(w.dim(` CO\u2082: ${ot.CO2_GRAMS_PER_MILLION_OUTPUT_EQUIVALENT_TOKENS} gCO\u2082e per 1M output-equivalent tokens (Sonnet), ${Oe.CIF_KG_CO2E_PER_KWH} kgCO\u2082e/kWh`)),console.log(w.dim(` Water: ${ot.WATER_LITERS_PER_MILLION_OUTPUT_EQUIVALENT_TOKENS.toFixed(1)} L per 1M output-equivalent tokens (Sonnet), on-site + off-site`)),console.log(w.dim(` Approximate weights: output=1, uncached input=${ot.INPUT_TOKEN_OUTPUT_EQUIVALENT_WEIGHT}, cache write=${ot.CACHE_WRITE_OUTPUT_EQUIVALENT_WEIGHT}, cache read=${ot.CACHE_READ_OUTPUT_EQUIVALENT_WEIGHT}`)),console.log(w.dim(" Other models scaled from Sonnet by output-token price.")),console.log(w.dim(" Tokens without a per-model breakdown use the reference request's input/output mix.")),console.log(w.dim(` Tree absorption: ${Lp(ot.CO2_ABSORPTION_PER_TREE_PER_YEAR)} CO\u2082/year
|
|
175
|
+
`));for(let i of s)AT(i.label,i.emoji,i.stats);let o=t.last30Days;if(o.tokens>0){console.log(w.bold("\u{1F504} Context Comparisons (Last 30 Days)")),console.log(w.dim("\u2500".repeat(55)));let i=o.co2,r=o.waterUsage,a=i/ot.CO2_PER_KM_DRIVING;console.log(` \u{1F697} Equivalent to driving: ${a.toFixed(3)} km`);let l=i/ot.CO2_PER_PHONE_CHARGE;console.log(` \u{1F4F1} Smartphone charges: ${l.toFixed(1)}`);let d=r/ot.WATER_PER_COFFEE_CUP;console.log(` \u2615 Cups of coffee (water): ${d.toFixed(4)}`);let p=i/ot.CO2_PER_LED_HOUR;console.log(` \u{1F4A1} LED bulb hours: ${p.toFixed(2)}`),console.log()}console.log(w.dim(`Last updated: ${t.lastUpdated.toLocaleString()}
|
|
176
|
+
`))});function Lp(n){return n==null||!Number.isFinite(n)||n<0?"0.000 gCO\u2082e":n>=1e3?`${(n/1e3).toFixed(2)} kgCO\u2082e`:`${n.toFixed(3)} gCO\u2082e`}function AT(n,e,t){if(console.log(w.bold(`${e} ${n}`)),console.log(w.dim("\u2500".repeat(55))),!t||t.sessions===0){console.log(w.dim(" No activity in this period")),console.log();return}if(console.log(` Tokens used: ${w.bold.yellow(de(t.tokens))}`),console.log(` CO\u2082 emissions: ${w.bold(Lp(t.co2))}`),console.log(` Water usage: ${w.bold(t.waterUsage.toFixed(3))} liters`),t.treesEquivalent>0){let s=t.treesEquivalent<.001?t.treesEquivalent.toExponential(2):t.treesEquivalent.toFixed(6);console.log(` Trees to offset: ${w.green(s)} trees/year`)}console.log()}var jp=new ce("fluency").description("Show your Copilot Fluency Score and improvement tips").option("-t, --tips","Show improvement tips for each category").option("--json","Output raw JSON (for machine consumption)").action(async n=>{let e=Se(n);e||console.log(w.bold.cyan(`
|
|
177
177
|
\u{1F3AF} Copilot Token Tracker - Fluency Score
|
|
178
|
-
`));let t=new Je(e);t.show("Scanning for session files...");let s=await ke();if(t.done(),s.length===0){e?process.stdout.write("{}"):console.log(w.yellow("\u26A0\uFE0F No session files found."));return}t.show("Analyzing usage patterns...");let o=await
|
|
179
|
-
`))});function
|
|
178
|
+
`));let t=new Je(e);t.show("Scanning for session files...");let s=await ke();if(t.done(),s.length===0){e?process.stdout.write("{}"):console.log(w.yellow("\u26A0\uFE0F No session files found."));return}t.show("Analyzing usage patterns...");let o=await cs(s);t.done();let i=await Ur(s),r=await cr(i,async()=>o,!1);if(e){process.stdout.write(JSON.stringify(Br(r)));return}let a={1:w.red,2:w.yellow,3:w.blue,4:w.green},l=y=>{let b=Number.isFinite(y)&&y>=1&&y<=4?Math.floor(y):0,T="\u2588".repeat(b),E="\u2591".repeat(4-b);return T+E};console.log(w.bold("Overall Fluency Score")),console.log(w.dim("\u2500".repeat(55)));let d=a[r.overallStage]||w.white;console.log(` ${d(l(r.overallStage))} ${w.bold(r.overallLabel)}`),console.log(),console.log(w.bold("Category Breakdown")),console.log(w.dim("\u2500".repeat(55)));for(let y of r.categories){let b=a[y.stage]||w.white;if(console.log(` ${y.icon} ${w.bold(y.category)}`),console.log(` ${b(l(y.stage))} Stage ${y.stage}/4`),y.evidence.length>0){let T=y.evidence.slice(0,3);for(let E of T)console.log(w.dim(` \u2713 ${E}`));y.evidence.length>3&&console.log(w.dim(` ... and ${y.evidence.length-3} more`))}if(y.tips.length>0&&y.stage<4){console.log(w.yellow(" \u{1F4A1} Tips:"));for(let T of y.tips.slice(0,2)){let E=T.replace(/\[([^\]]+)\]\([^)]+\)/g,"$1").replace(/\[▶ [^\]]+\]\([^)]+\)/g,"").trim();console.log(w.yellow(` \u2192 ${E}`))}}console.log()}let p=r.period;console.log(w.bold("\u{1F4CA} Analysis Period (Last 30 Days)")),console.log(w.dim("\u2500".repeat(55))),console.log(` Sessions analyzed: ${w.bold(Y(p.sessions))}`);let g=p.modeUsage.ask+p.modeUsage.edit+p.modeUsage.agent+p.modeUsage.cli+(p.modeUsage.cliApp??0)+(p.modeUsage.claudeDesktop??0)+(p.modeUsage.claudeVsCode??0);console.log(` Total interactions: ${w.bold(Y(g))}`),p.modeUsage.ask>0&&console.log(` Ask mode: ${Y(p.modeUsage.ask)}`),p.modeUsage.edit>0&&console.log(` Edit mode: ${Y(p.modeUsage.edit)}`),p.modeUsage.agent>0&&console.log(` Agent mode: ${Y(p.modeUsage.agent)}`),p.modeUsage.cli>0&&console.log(` CLI: ${Y(p.modeUsage.cli)}`),(p.modeUsage.cliApp??0)>0&&console.log(` Copilot App (CLI): ${Y(p.modeUsage.cliApp)}`),(p.modeUsage.claudeDesktop??0)>0&&console.log(` Claude Desktop: ${Y(p.modeUsage.claudeDesktop)}`),(p.modeUsage.claudeVsCode??0)>0&&console.log(` Claude (VS Code): ${Y(p.modeUsage.claudeVsCode)}`),p.toolCalls.total>0&&console.log(` Tool calls: ${Y(p.toolCalls.total)}`),p.mcpTools.total>0&&console.log(` MCP tool calls: ${Y(p.mcpTools.total)}`);let h=p.contextReferences.file+p.contextReferences.selection+p.contextReferences.codebase+p.contextReferences.workspace+p.contextReferences.terminal+p.contextReferences.vscode;h>0&&console.log(` Context references: ${Y(h)}`),console.log(),console.log(w.dim(`Last updated: ${r.lastUpdated}
|
|
179
|
+
`))});function xT(n,e){let t=ui(n),s=t.includes("opencode.db#")?t.split("#")[0]:t,o=null,i=0;for(let r of e){let a=ui(r.path);s.startsWith(a)&&a.length>i&&(o={path:r.path,source:r.source},i=a.length)}return o}function ec(n,e=55){if(!n)return"";if(n.length<=e)return n;let t=n.replace(/\\/g,"/").split("/"),s=n;for(let o=t.length-1;o>1&&(s="\u2026/"+t.slice(-o).join("/"),!(s.length<=e));o--);return s}function Gp(n,e,t){if(!n||!e||!t)return;if(n.length!==t.length)throw new Error(`printTable: headers.length (${n.length}) !== colWidths.length (${t.length})`);let s=w.dim("\u2500".repeat(t.reduce((i,r)=>i+r+3,-1))),o=n.map((i,r)=>w.bold(i.padEnd(t[r]))).join(" \u2502 ");console.log(" "+o),console.log(" "+s);for(let i of e){let r=i.map((a,l)=>{let d=a.padEnd(t[l]);return l===0?w.dim(d):d}).join(w.dim(" \u2502 "));console.log(" "+r)}console.log(" "+s)}var Bp=new ce("diagnostics").description("Show session file search locations and per-location usage stats").action(async()=>{console.log(w.bold.cyan(`
|
|
180
180
|
\u{1F52C} Copilot Token Tracker - Diagnostics
|
|
181
|
-
`));let n=
|
|
181
|
+
`));let n=Or(),e=n.filter(P=>P.exists),t=n.filter(P=>!P.exists);console.log(w.bold(`\u{1F4C2} Search Locations (${e.length} found / ${n.length} total)`)),console.log(w.dim("\u2500".repeat(65)));let s=["Source","Exists","Path"],o=[18,6,55],i=n.map(P=>[P.source,P.exists?w.green("yes"):w.dim("no"),ec(P.path,55)]);if(Gp(s,i,o),console.log(),e.length===0){console.log(w.yellow("\u26A0\uFE0F No search paths exist on this machine.")),console.log(w.dim("Have you used GitHub Copilot Chat in VS Code yet?"));return}let r=new Je;r.show("Scanning for session files...");let a=await ke();if(r.done(),a.length===0){console.log(w.yellow("\u26A0\uFE0F No session files found in any search path."));return}let l=new Map;for(let P of e)l.set(P.path,{label:ec(P.path,45),source:P.source,files:0,sessions:0,interactions:0,tokens:0});let d=0,p=0,g=0,h=0;for(let P=0;P<a.length;P++){((P+1)%25===0||P===a.length-1)&&r.update(`Processing: ${P+1}/${a.length} files...`);let I=xT(a[P],n),F=I?I.path:"__unknown__";l.has(F)||l.set(F,{label:I?ec(I.path,45):"(unknown)",source:I?I.source:"unknown",files:0,sessions:0,interactions:0,tokens:0});let Z=l.get(F);Z.files++,d++;let A=await Is(a[P]);A&&A.tokens>0&&(Z.sessions++,Z.interactions+=A.interactions,Z.tokens+=gt(A),p++,g+=A.interactions,h+=gt(A))}r.done(),console.log(w.bold("\u{1F4CA} Stats per Search Location")),console.log(w.dim("\u2500".repeat(65)));let y=["Source","Files","Sessions","Turns","Tokens"],b=[18,6,9,8,14],T=[],E=[...l.values()].filter(P=>P.files>0).sort((P,I)=>I.tokens-P.tokens||P.source.localeCompare(I.source));for(let P of E)T.push([P.source,Y(P.files),Y(P.sessions),Y(P.interactions),de(P.tokens)]);T.length===0?console.log(w.dim(" No session data found in any location.")):Gp(y,T,b),console.log(),console.log(w.bold("\u{1F4C8} Totals (all time)")),console.log(w.dim("\u2500".repeat(65))),console.log(` Total files found: ${w.bold(Y(d))}`),console.log(` Files with data: ${w.bold(Y(p))}`),console.log(` Total chat turns: ${w.bold(Y(g))}`),console.log(` Total tokens: ${w.bold.yellow(de(h))}`),t.length>0&&(console.log(),console.log(w.dim(`\u2139\uFE0F ${t.length} search path(s) not present on this machine \u2014 this is normal if you don't use all VS Code variants.`))),console.log()});var qp=new ce("chart").description("Output daily token usage data for the chart webview").option("--json","Output raw JSON (for machine consumption)").option("-v, --verbose","Show debug log discovery details").action(async n=>{let e=await ke();if(e.length===0){Se(n)?process.stdout.write(JSON.stringify(Nr())):console.log(w.yellow("\u26A0\uFE0F No session files found."));return}let t=n.verbose===!0,{labels:s,days:o,allDaysMap:i}=await Fr(e,t),r=Lo(s,o,i);if(Se(n)){process.stdout.write(JSON.stringify(r));return}console.log(w.bold.cyan(`
|
|
182
182
|
\u{1F4CA} Token Usage Summary
|
|
183
|
-
`));let a=r.periods||{},
|
|
184
|
-
`);return}let e=await ke(),t=new Date;if(e.length===0){process.stdout.write(JSON.stringify(
|
|
185
|
-
`)}return i?i.replace(/^["']|["']$/g,""):void 0}}function
|
|
186
|
-
`);return}let p
|
|
183
|
+
`));let a=r.periods||{},l=[{key:"day",label:"Daily (last 30 days)"},{key:"week",label:"Weekly (last 6 weeks)"},{key:"month",label:"Monthly (last 12 months)"}];for(let{key:d,label:p}of l){let g=a[d];if(!g)continue;console.log(w.bold(p)),console.log(w.dim("\u2500".repeat(60)));let h=(g.labels||[]).map((I,F)=>{let Z=g.tokensData?.[F]??0,A=g.costData?.[F]??0;return{Period:I,Tokens:Y(Z),Cost:`$${A.toFixed(2)}`}});h.length>0&&console.table(h);let y=g.totalTokens??0,b=g.totalCost??0,T=g.periodCount??0,E=T>0?Math.round(y/T):0,P=T>0?b/T:0;console.log(w.bold("Totals:")),console.log(` Total Tokens: ${Y(y)}`),console.log(` Total Cost: $${b.toFixed(2)}`),console.log(` Avg per Period: ${Y(E)} tokens, $${P.toFixed(2)} cost`),console.log()}});var zp=new ce("usage-analysis").description("Output usage analysis stats for the usage analysis webview").option("--json","Output raw JSON (for machine consumption)").action(async n=>{if(!Se(n)){process.stderr.write(`Use --json flag for usage analysis data output
|
|
184
|
+
`);return}let e=await ke(),t=new Date;if(e.length===0){process.stdout.write(JSON.stringify(Lr(t)));return}let s=await cs(e),o=Gr(s,t);process.stdout.write(JSON.stringify(o))});var Fe=S(require("fs")),ee=S(require("path")),$p=require("url");var DT=4,Hp=1;function ET(n){try{if(!Fe.existsSync(n))return[];let e=Fe.readFileSync(n,"utf-8"),s=JSON.parse(e)?.servers;return!s||typeof s!="object"?[]:Object.keys(s)}catch{return[]}}function RT(n){return[ee.join(n,".vscode","mcp.json"),ee.join(n,".mcp.json"),ee.join(n,".vs","mcp.json"),ee.join(n,".cursor","mcp.json")]}function IT(){let n=process.env.USERPROFILE??process.env.HOME??"";return n?[ee.join(n,".mcp.json")]:[]}function zr(n){let e=[],t=new Map,s=new Set,o=[...n.flatMap(RT),...IT()];for(let i of o)for(let r of ET(i)){t.has(r)||t.set(r,[]);let a=t.get(r);a.includes(i)||a.push(i),s.has(r)||(s.add(r),e.push({name:`mcp__${r}`,description:`MCP server: ${r}`,source:"mcp",server:r,configFiles:a}))}return e}function UT(n,e){try{let t=Fe.readFileSync(n,"utf-8"),s=OT(t);if(s)return s}catch{}return e}function OT(n){let e=FT(n);if(e!==void 0){let o=LT(e);if(o)return o}let t=/^description:\s+(?!>|[|])(.+)/im.exec(n);if(t)return t[1].trim().replace(/^["']|["']$/g,"");let s=/^#\s+(.+)/m.exec(n);if(s)return s[1].trim()}function FT(n){let e=n.replace(/^\uFEFF/,"").trimStart();if(!/^---(?:\r?\n|$)/.test(e))return;let t=e.slice(3),s=t.search(/\n---(?:\r?\n|$)/m);if(s!==-1)return t.slice(0,s)}function NT(n,e,t){let s=[];for(let o=e;o<n.length;o++){let i=n[o];if(i.trim()===""){s.push("");continue}if((i.match(/^(\s*)/)?.[1].length??0)<=t)break;s.push(i.trim())}for(;s.length>0&&s[s.length-1]==="";)s.pop();return s}function LT(n){let e=n.split(/\r?\n/);for(let t=0;t<e.length;t++){let s=/^(\s*)description:\s*(.*)/i.exec(e[t]);if(!s)continue;let o=s[1].length,i=s[2].trim(),r=/^([|>])[-+>]?\s*$/.exec(i);if(r){let a=NT(e,t+1,o);return a.length===0?void 0:r[1]===">"?a.join(" "):a.join(`
|
|
185
|
+
`)}return i?i.replace(/^["']|["']$/g,""):void 0}}function tc(n){try{if(!Fe.existsSync(n))return;let e=Fe.readFileSync(n,"utf-8");return JSON.parse(e)}catch{return}}function qr(n,e,t,s){let o;try{o=Fe.readdirSync(e,{withFileTypes:!0})}catch{return[]}let i=[];for(let r of o){if(!r.isDirectory())continue;let a=ee.join(e,r.name,"SKILL.md");if(!Fe.existsSync(a)||t.has(a))continue;t.add(a);let l=UT(a,`Skill: ${r.name}`),d=ee.relative(n,a).replace(/\\/g,"/"),p={name:r.name,description:l,source:"skill",skillPath:d,configFiles:[a]};s&&(p.pluginName=s),i.push(p)}return i}var jT=new Set([".git","node_modules","dist","out","build",".next",".venv","venv","target",".idea",".vscode"]),GT=4,BT=400;function qT(n,e=GT){let t=[],s=new Set,o=0,i=(r,a)=>{if(a>e||s.has(r)||o>=BT)return;s.add(r),o++;let l;try{l=Fe.readdirSync(r,{withFileTypes:!0})}catch{return}for(let d of l){if(!d.isDirectory()||jT.has(d.name))continue;let p=ee.join(r,d.name);if(d.name==="skills"){t.push(p);continue}i(p,a+1)}};return i(n,0),t}function Wp(n,e,t){if(!Fe.existsSync(e))return[];let s=[];s.push(...qr(n,e,t));for(let o of qT(e))s.push(...qr(n,o,t));return s}function Jp(n,e){let t=n.trim();return t?(t.startsWith("~")&&(t==="~"?t=e:(t.startsWith("~/")||t.startsWith("~\\"))&&(t=ee.join(e,t.slice(2)))),t=t.replace(/\$\{env:([^}]+)\}/gi,(s,o)=>process.env[o]??""),t=t.replace(/%([^%]+)%/g,(s,o)=>process.env[o]??""),ee.isAbsolute(t)||(t=ee.resolve(e,t)),t):""}function zT(n){let e=process.env.APPDATA??ee.join(n,"AppData","Roaming");return process.platform==="win32"?[ee.join(e,"Code","User","settings.json"),ee.join(e,"Code - Insiders","User","settings.json")]:process.platform==="darwin"?[ee.join(n,"Library","Application Support","Code","User","settings.json"),ee.join(n,"Library","Application Support","Code - Insiders","User","settings.json")]:[ee.join(n,".config","Code","User","settings.json"),ee.join(n,".config","Code - Insiders","User","settings.json")]}function WT(n){let e=new Set;for(let t of zT(n)){let o=tc(t)?.["chat.agentSkillsLocations"];if(Array.isArray(o))for(let i of o){if(typeof i!="string")continue;let r=Jp(i,n);r&&e.add(r)}}return[...e]}var $T=[".github/skills",".claude/skills",".agents/skills"];function HT(){let n=process.env.USERPROFILE??process.env.HOME??"";return n?[ee.join(n,".copilot","skills"),ee.join(n,".claude","skills"),ee.join(n,".agents","skills")]:[]}function JT(n){try{let e=new URL(n);return e.protocol!=="file:"?void 0:ee.normalize((0,$p.fileURLToPath)(e))}catch{return}}function KT(n){let e=tc(ee.join(n,"plugin.json")),t;return Array.isArray(e?.skills)?t=e.skills.filter(s=>typeof s=="string"):typeof e?.skills=="string"?t=[e.skills]:t=["./skills/"],t.map(s=>ee.resolve(n,s)).filter(s=>Fe.existsSync(s))}function VT(n){let e=tc(ee.join(n,"installed.json"));if(!Array.isArray(e?.installed))return[];let t=[];for(let s of e.installed){if(typeof s!="object"||s===null)continue;let o=s,i=o.pluginUri;if(typeof i!="string")continue;let r=JT(i);if(!r||!Fe.existsSync(r))continue;let a=typeof o.name=="string"&&o.name?o.name:ee.basename(r);for(let l of KT(r))t.push({dir:l,pluginName:a})}return t}function YT(){let n=process.env.USERPROFILE??process.env.HOME??"";if(!n)return[];let e=[ee.join(n,".vscode","agent-plugins"),ee.join(n,".vscode-insiders","agent-plugins")],t=[];for(let s of e)t.push(...VT(s));return t}function Wr(n,e){let t=[],s=new Set;for(let a of n)for(let l of $T){let d=ee.join(a,...l.split("/"));Fe.existsSync(d)&&t.push(...qr(a,d,s))}let o=process.env.USERPROFILE??process.env.HOME??"";for(let a of HT())t.push(...Wp(o,a,s));for(let{dir:a,pluginName:l}of YT())t.push(...qr(o,a,s,l));let i=Array.isArray(e?.additionalSkillDirs)?e.additionalSkillDirs:[],r=[...WT(o),...i.filter(a=>typeof a=="string").map(a=>Jp(a,o)).filter(Boolean)];for(let a of r)t.push(...Wp(o,a,s));return t}function Kp(n){return Math.round(n.reduce((e,t)=>e+(t.name.length+t.description.length+10),0)/DT)}function QT(n){let e={};for(let[t,s]of Object.entries(n.toolCalls.byTool))e[t]=(e[t]??0)+s;for(let[t,s]of Object.entries(n.mcpTools.byTool))e[t]=(e[t]??0)+s;for(let[t,s]of Object.entries(n.skillCalls?.byName??{}))e[t]=(e[t]??0)+s;return e}function XT(n,e,t){let s=new Set;for(let o of n)o.source==="mcp"&&o.server&&s.add(o.server);return Array.from(s).map(o=>{let i=n.filter(h=>h.source==="mcp"&&h.server===o),r=i.filter(h=>h.name===`mcp__${o}`?(t.mcpTools.byServer[o]??0)>=Hp:e.has(h.name)),a=[...new Set(i.flatMap(h=>h.configFiles??[]))],l=i.find(h=>h.extensionId),d=l?.extensionId,p=l?.enabled,g=l?.extensionActive;return{server:o,availableToolCount:i.length,usedToolCount:r.length,configFiles:a.length>0?a:void 0,extensionId:d,enabled:p,extensionActive:g}}).filter(o=>o.enabled!==!1)}function ZT(n){let e={};for(let s of n){let o=s.server??s.source;e[o]||(e[o]=[]),e[o].push(s)}let t={};for(let[s,o]of Object.entries(e))t[s]=Kp(o);return{totalTokens:Object.values(t).reduce((s,o)=>s+o,0),byServer:t}}function ew(n,e,t){let s=[];for(let o of n)if(o.usedToolCount===0){let i=e.filter(r=>r.source==="mcp"&&r.server===o.server);s.push({type:"disable-mcp-server",target:o.server,reason:`No tools from the "${o.server}" MCP server were used in the last ${t} days.`,estimatedTokenSavings:Kp(i)})}for(let o of e.filter(i=>i.source==="skill"))s.push({type:"refine-skill",target:o.name,reason:`The "${o.name}" skill was not invoked in the last ${t} days. Consider updating its description or removing it to reduce instruction-file bloat.`});return s}function tw(n,e){let t=new Map;for(let o of n){if(o.source!=="skill"||!o.pluginName)continue;let i=t.get(o.name)??new Set;i.add(o.pluginName),t.set(o.name,i)}let s=new Map;for(let o of n){if(o.source!=="skill"||!o.pluginName)continue;let i=s.get(o.pluginName)??{available:0,used:0};i.available++,e.has(o.name)&&(t.get(o.name)?.size??0)===1&&i.used++,s.set(o.pluginName,i)}return Array.from(s.entries()).map(([o,{available:i,used:r}])=>({pluginName:o,availableSkillCount:i,usedSkillCount:r})).sort((o,i)=>o.usedSkillCount-i.usedSkillCount)}function $r(n,e,t){let s=QT(e),o=Object.entries(s).map(([g,h])=>({name:g,count:h})).sort((g,h)=>h.count-g.count),i=new Set(Object.keys(s)),r=n.filter(g=>g.source==="skill"?!i.has(g.name):g.source==="mcp"&&g.server?g.enabled===!1?!1:g.name===`mcp__${g.server}`?(e.mcpTools.byServer[g.server]??0)<Hp:!i.has(g.name):!i.has(g.name)),a=XT(n,i,e),l=tw(n,i),d=ZT(r),p=ew(a,r,t);return{windowDays:t,availableTools:n,usedTools:o,unusedTools:r,underusedMcpServers:a,underusedAgentPlugins:l,estimatedPromptBloat:d,recommendations:p}}var Go=30,Vp=new ce("curation").description("Analyse tool curation: compare available MCP servers and skills against actual usage").option("--json","Output raw JSON (for machine consumption)").option("--window <days>",`Look-back window in days (default: ${Go})`,String(Go)).action(async n=>{let e=Math.max(1,parseInt(n.window??String(Go),10)||Go),t=process.cwd(),s=await ke(),i=(s.length>0?await cs(s):null)?.last30Days,r=[t],a=zr(r),l=Wr(r),d=[...a,...l];if(d.length===0&&!i){Se(n)?process.stdout.write(JSON.stringify(Hr(e))):process.stderr.write(`No MCP servers or skills found in the current directory, and no session data available.
|
|
186
|
+
`);return}let p=$r(d,i??Rs(),e);Se(n)?process.stdout.write(JSON.stringify(p)):sw(p)});function Hr(n=Go){return{windowDays:n,availableTools:[],usedTools:[],unusedTools:[],underusedMcpServers:[],underusedAgentPlugins:[],estimatedPromptBloat:{totalTokens:0,byServer:{}},recommendations:[]}}function sw(n){let{availableTools:e,usedTools:t,unusedTools:s,underusedMcpServers:o,estimatedPromptBloat:i,recommendations:r,windowDays:a}=n;if(process.stdout.write(`
|
|
187
187
|
Tool Curation Report (last ${a} days)
|
|
188
188
|
`),process.stdout.write("=".repeat(50)+`
|
|
189
189
|
|
|
@@ -195,8 +195,8 @@ Tool Curation Report (last ${a} days)
|
|
|
195
195
|
`),o.length>0){let d=o.filter(p=>p.usedToolCount===0);if(d.length>0){process.stdout.write(`Unused MCP Servers:
|
|
196
196
|
`);for(let p of d){let g=i.byServer[p.server],h=g?` (~${g.toLocaleString()} tokens overhead)`:"";process.stdout.write(` \u2022 ${p.server}${h}
|
|
197
197
|
`)}process.stdout.write(`
|
|
198
|
-
`)}}let
|
|
199
|
-
`);for(let d of
|
|
198
|
+
`)}}let l=s.filter(d=>d.source==="skill");if(l.length>0){process.stdout.write(`Unused Skills:
|
|
199
|
+
`);for(let d of l)process.stdout.write(` \u2022 ${d.name}
|
|
200
200
|
`);process.stdout.write(`
|
|
201
201
|
`)}if(r.length>0){process.stdout.write(`Recommendations:
|
|
202
202
|
`);for(let d of r){let p=d.estimatedTokenSavings?` (saves ~${d.estimatedTokenSavings.toLocaleString()} tokens/interaction)`:"";process.stdout.write(` \u2192 ${d.reason}${p}
|
|
@@ -204,8 +204,42 @@ Tool Curation Report (last ${a} days)
|
|
|
204
204
|
`)}if(t.length>0){process.stdout.write(`Top Used Tools (last ${a}d):
|
|
205
205
|
`);for(let d of t.slice(0,10))process.stdout.write(` ${String(d.count).padStart(5)}x ${d.name}
|
|
206
206
|
`);process.stdout.write(`
|
|
207
|
-
`)}}var
|
|
208
|
-
`);return}let e=new Date,t=await ke();if(t.length===0){let Z={details:yp(e),chart:Er(e),usage:Rr(e),fluency:_p(),curation:Gr()};process.stdout.write(JSON.stringify(Z));return}let[s,{labels:o,days:i,allDaysMap:r},a]=await Promise.all([os(t),Dr(t),is(t)]),c=Uo(o,i,r),d=Ir(s),p=Ur(a,e),g=await Ar(t),h=await ir(g,async()=>a,!1),y=Or(h),b=process.cwd(),T=Nr([b]),E=Lr([b]),P=[...T,...E],I=P.length>0?jr(P,a.last30Days,30):Gr(),F={details:d,chart:c,usage:p,fluency:y,curation:I};process.stdout.write(JSON.stringify(F))});var rs=S(require("fs")),Vl=S(require("path")),Op=S(require("os"));var Fp=Vl.join(Op.homedir(),".copilot-token-tracker"),Kl=Vl.join(Fp,"omp-segment-cache.json"),Jl=5;function AT(n){try{if(!rs.existsSync(Kl))return null;let e=JSON.parse(rs.readFileSync(Kl,"utf-8"));if(typeof e.formatted!="string"||typeof e.updatedAt!="string"||typeof e.todayTokens!="number"||typeof e.thisMonthTokens!="number"||typeof e.last30DaysTokens!="number")return null;let t=Date.parse(e.updatedAt);if(!Number.isFinite(t))return null;let s=Date.now()-t;return s<0||s>n*6e4?null:e}catch{return null}}function xT(n){try{rs.mkdirSync(Fp,{recursive:!0}),rs.writeFileSync(Kl,JSON.stringify(n),"utf-8")}catch{}}function DT(n,e){return JSON.stringify({today:n.todayTokens,month:n.thisMonthTokens,last30Days:n.last30DaysTokens,todayFormatted:de(n.todayTokens),monthFormatted:de(n.thisMonthTokens),last30DaysFormatted:de(n.last30DaysTokens),formatted:n.formatted,updatedAt:n.updatedAt,cached:e})}function Up(n,e,t){e.hideZero&&n.todayTokens===0&&n.last30DaysTokens===0||process.stdout.write(e.json?DT(n,t):n.formatted)}async function ET(){let n=await ke(),e=0,t=0,s=0;if(n.length>0){let o=await os(n);e=o.today.tokens,t=o.month.tokens,s=o.last30Days.tokens}return{updatedAt:new Date().toISOString(),formatted:`${de(e)} today \xB7 ${de(t)} month \xB7 ${de(s)} 30d`,todayTokens:e,thisMonthTokens:t,last30DaysTokens:s}}var Np=new ce("segment").description("Output a compact token usage string for use in oh-my-posh prompt segments").option("--ttl <minutes>",`Segment cache TTL in minutes (default: ${Jl})`,`${Jl}`).option("--refresh","Force refresh \u2014 bypass the segment output cache").option("--hide-zero","Output nothing when both today and 30-day token counts are zero").option("--json","Output structured JSON (today/month/30d token counts) instead of the formatted string. Uses the same fast cache as the default output \u2014 recommended for custom prompt hooks (e.g. the PowerShell pre-prompt hook) instead of the uncached `usage --json` command.").action(async n=>{let e=Number(n.ttl),t=Number.isFinite(e)&&e>=0?e:Jl;if(!n.refresh){let o=AT(t);if(o){Up(o,n,!0);return}}let s=await ET();xT(s),Up(s,n,!1)});var wt=S(require("fs")),Ue=S(require("path"));var RT=["GitHub.copilot-chat","github.copilot-chat","GitHub.copilot","github.copilot"],Lp=["memory-tool","memories"],IT=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,UT=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,un=90,Yl=10*1024;function OT(n){if(!(!n||n==="repo"||!UT.test(n)))try{let e=Buffer.from(n,"base64").toString("utf8");return IT.test(e)?e:void 0}catch{return}}function jp(n){try{return wt.readdirSync(n,{withFileTypes:!0}).filter(e=>e.isFile()&&e.name.toLowerCase().endsWith(".md")).map(e=>Ue.join(n,e.name))}catch{return[]}}function Ql(n){try{return wt.readdirSync(n,{withFileTypes:!0}).filter(e=>e.isDirectory()).map(e=>e.name)}catch{return[]}}function Gp(n,e,t={}){try{let s=wt.statSync(n);return{path:n,scope:e,sizeBytes:s.size,mtimeMs:s.mtimeMs,title:Ue.basename(n,Ue.extname(n)),...t}}catch{return}}function Bp(n){let e=new Set(Ql(n));return RT.filter(t=>e.has(t))}function FT(n){let e=Ue.join(n,"globalStorage");return Bp(e).map(t=>Ue.join(e,t,...Lp)).filter(t=>wt.existsSync(t))}function NT(n,e){let t=Ue.join(n,"workspaceStorage",e);return Bp(t).map(s=>Ue.join(t,s,...Lp)).filter(s=>wt.existsSync(s))}function LT(n,e){let t=Ue.join(n,"workspaceStorage",e),s=Ue.join(t,"workspace.json"),o=Ue.join(t,"meta.json");if(wt.existsSync(s)){let i=ii(s,["folder","workspace","configuration","uri","path"]);if(i)return i}if(wt.existsSync(o))return ii(o,["folder","uri","workspace","path"])}function jT(n,e){let t=NT(n,e);if(t.length===0)return[];let s=LT(n,e),o=[];for(let i of t)for(let r of Ql(i)){let a=r==="repo",c=r==="session",d=a||c?void 0:OT(r);if(!a&&!c&&!d)continue;let p=a?"repo":"session";for(let g of jp(Ue.join(i,r))){let h=Gp(g,p,{workspaceHash:e,workspaceName:s,sessionId:d});h&&o.push(h)}}return o}function GT(n){let e=[];for(let s of FT(n))for(let o of jp(s)){let i=Gp(o,"user");i&&e.push(i)}let t=Ue.join(n,"workspaceStorage");for(let s of Ql(t))e.push(...jT(n,s));return e}function BT(){let n=en();return Zn()&&n.push(...tl()),Array.from(new Set(n))}function qp(n=BT()){return n.flatMap(GT)}function qT(n,e){let t=e.scope==="user"?"__user__":e.workspaceHash??"__unknown__",s=n.get(t);return s||(s={workspaceHash:e.scope==="user"?void 0:e.workspaceHash,workspaceName:e.scope==="user"?"User (global)":e.workspaceName,repoCount:0,sessionCount:0,userCount:0,totalBytes:0,newestMtimeMs:null,oldestMtimeMs:null,staleFiles:[]},n.set(t,s)),s}function zT(n,e,t){e.scope==="repo"?n.repoCount++:e.scope==="session"?n.sessionCount++:e.scope==="user"&&n.userCount++,n.totalBytes+=e.sizeBytes,n.newestMtimeMs=n.newestMtimeMs===null?e.mtimeMs:Math.max(n.newestMtimeMs,e.mtimeMs),n.oldestMtimeMs=n.oldestMtimeMs===null?e.mtimeMs:Math.min(n.oldestMtimeMs,e.mtimeMs),(!n.largestFile||e.sizeBytes>n.largestFile.sizeBytes)&&(n.largestFile=e),e.mtimeMs<t&&n.staleFiles.push(e)}function zp(n,e={}){let t=e.staleDays??un,s=e.largeFileBytes??Yl,o=Date.now()-t*24*60*60*1e3,i=new Map;for(let r of n){let a=qT(i,r);zT(a,r,o)}return{staleDays:t,largeFileBytes:s,files:n,byWorkspace:Array.from(i.values()),totalFiles:n.length,totalBytes:n.reduce((r,a)=>r+a.sizeBytes,0),staleFileCount:n.filter(r=>r.mtimeMs<o).length,largeFileCount:n.filter(r=>r.sizeBytes>s).length}}var Br=Yl/1024;function Wp(n){let e=n.trim();return/^-?\d+$/.test(e)?parseInt(e,10):NaN}function WT(n){let e=Wp(n.staleDays??String(un)),t=Math.max(1,Number.isNaN(e)?un:e),s=Wp(n.largeKb??String(Br)),o=Math.max(1,Number.isNaN(s)?Br:s)*1024;return{staleDays:t,largeFileBytes:o}}var $p=new ce("memory-files").description("Report on GitHub Copilot agent memory files on this machine (counts, staleness, size)").option("--json","Output raw JSON (for machine consumption)").option("--stale-days <days>",`Days since last edit before a memory file is flagged stale (default: ${un})`,String(un)).option("--large-kb <kb>",`Size in KB above which a memory file is flagged large (default: ${Br})`,String(Br)).action(n=>{let{staleDays:e,largeFileBytes:t}=WT(n),s=qp(),o=zp(s,{staleDays:e,largeFileBytes:t});Se(n)?process.stdout.write(JSON.stringify(o)):$T(o)});function $T(n){if(process.stdout.write(`
|
|
207
|
+
`)}}var Yp=new ce("all").description("Output all view data in a single JSON response (for Visual Studio extension)").option("--json","Output raw JSON (required)").action(async n=>{if(!Se(n)){process.stderr.write(`Use --json flag for all data output
|
|
208
|
+
`);return}let e=new Date,t=await ke();if(t.length===0){let Z={details:Up(e),chart:Nr(e),usage:Lr(e),fluency:Op(),curation:Hr()};process.stdout.write(JSON.stringify(Z));return}let[s,{labels:o,days:i,allDaysMap:r},a]=await Promise.all([ls(t),Fr(t),cs(t)]),l=Lo(o,i,r),d=jr(s),p=Gr(a,e),g=await Ur(t),h=await cr(g,async()=>a,!1),y=Br(h),b=process.cwd(),T=zr([b]),E=Wr([b]),P=[...T,...E],I=P.length>0?$r(P,a.last30Days,30):Hr(),F={details:d,chart:l,usage:p,fluency:y,curation:I};process.stdout.write(JSON.stringify(F))});var us=S(require("fs")),oc=S(require("path")),Xp=S(require("os"));var Zp=oc.join(Xp.homedir(),".copilot-token-tracker"),nc=oc.join(Zp,"omp-segment-cache.json"),sc=5;function nw(n){try{if(!us.existsSync(nc))return null;let e=JSON.parse(us.readFileSync(nc,"utf-8"));if(typeof e.formatted!="string"||typeof e.updatedAt!="string"||typeof e.todayTokens!="number"||typeof e.thisMonthTokens!="number"||typeof e.last30DaysTokens!="number")return null;let t=Date.parse(e.updatedAt);if(!Number.isFinite(t))return null;let s=Date.now()-t;return s<0||s>n*6e4?null:e}catch{return null}}function ow(n){try{us.mkdirSync(Zp,{recursive:!0}),us.writeFileSync(nc,JSON.stringify(n),"utf-8")}catch{}}function iw(n,e){return JSON.stringify({today:n.todayTokens,month:n.thisMonthTokens,last30Days:n.last30DaysTokens,todayFormatted:de(n.todayTokens),monthFormatted:de(n.thisMonthTokens),last30DaysFormatted:de(n.last30DaysTokens),formatted:n.formatted,updatedAt:n.updatedAt,cached:e})}function Qp(n,e,t){e.hideZero&&n.todayTokens===0&&n.last30DaysTokens===0||process.stdout.write(e.json?iw(n,t):n.formatted)}async function rw(){let n=await ke(),e=0,t=0,s=0;if(n.length>0){let o=await ls(n);e=o.today.tokens,t=o.month.tokens,s=o.last30Days.tokens}return{updatedAt:new Date().toISOString(),formatted:`${de(e)} today \xB7 ${de(t)} month \xB7 ${de(s)} 30d`,todayTokens:e,thisMonthTokens:t,last30DaysTokens:s}}var eg=new ce("segment").description("Output a compact token usage string for use in oh-my-posh prompt segments").option("--ttl <minutes>",`Segment cache TTL in minutes (default: ${sc})`,`${sc}`).option("--refresh","Force refresh \u2014 bypass the segment output cache").option("--hide-zero","Output nothing when both today and 30-day token counts are zero").option("--json","Output structured JSON (today/month/30d token counts) instead of the formatted string. Uses the same fast cache as the default output \u2014 recommended for custom prompt hooks (e.g. the PowerShell pre-prompt hook) instead of the uncached `usage --json` command.").action(async n=>{let e=Number(n.ttl),t=Number.isFinite(e)&&e>=0?e:sc;if(!n.refresh){let o=nw(t);if(o){Qp(o,n,!0);return}}let s=await rw();ow(s),Qp(s,n,!1)});var _g=require("child_process");var Pt=S(require("fs")),Ne=S(require("path"));var aw=["GitHub.copilot-chat","github.copilot-chat","GitHub.copilot","github.copilot"],tg=["memory-tool","memories"],lw=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,cw=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,gn=90,ic=10*1024;function uw(n){if(!(!n||n==="repo"||!cw.test(n)))try{let e=Buffer.from(n,"base64").toString("utf8");return lw.test(e)?e:void 0}catch{return}}function sg(n){try{return Pt.readdirSync(n,{withFileTypes:!0}).filter(e=>e.isFile()&&e.name.toLowerCase().endsWith(".md")).map(e=>Ne.join(n,e.name))}catch{return[]}}function rc(n){try{return Pt.readdirSync(n,{withFileTypes:!0}).filter(e=>e.isDirectory()).map(e=>e.name)}catch{return[]}}function ng(n,e,t={}){try{let s=Pt.statSync(n);return{path:n,scope:e,sizeBytes:s.size,mtimeMs:s.mtimeMs,title:Ne.basename(n,Ne.extname(n)),...t}}catch{return}}function og(n){let e=new Set(rc(n));return aw.filter(t=>e.has(t))}function dw(n){let e=Ne.join(n,"globalStorage");return og(e).map(t=>Ne.join(e,t,...tg)).filter(t=>Pt.existsSync(t))}function mw(n,e){let t=Ne.join(n,"workspaceStorage",e);return og(t).map(s=>Ne.join(t,s,...tg)).filter(s=>Pt.existsSync(s))}function pw(n,e){let t=Ne.join(n,"workspaceStorage",e),s=Ne.join(t,"workspace.json"),o=Ne.join(t,"meta.json");if(Pt.existsSync(s)){let i=ci(s,["folder","workspace","configuration","uri","path"]);if(i)return i}if(Pt.existsSync(o))return ci(o,["folder","uri","workspace","path"])}function gw(n,e){let t=mw(n,e);if(t.length===0)return[];let s=pw(n,e),o=[];for(let i of t)for(let r of rc(i)){let a=r==="repo",l=r==="session",d=a||l?void 0:uw(r);if(!a&&!l&&!d)continue;let p=a?"repo":"session";for(let g of sg(Ne.join(i,r))){let h=ng(g,p,{workspaceHash:e,workspaceName:s,sessionId:d});h&&o.push(h)}}return o}function fw(n){let e=[];for(let s of dw(n))for(let o of sg(s)){let i=ng(o,"user");i&&e.push(i)}let t=Ne.join(n,"workspaceStorage");for(let s of rc(t))e.push(...gw(n,s));return e}function hw(){let n=nn();return no()&&n.push(...cl()),Array.from(new Set(n))}function ig(n=hw()){return n.flatMap(fw)}function yw(n,e){let t=e.scope==="user"?"__user__":e.workspaceHash??"__unknown__",s=n.get(t);return s||(s={workspaceHash:e.scope==="user"?void 0:e.workspaceHash,workspaceName:e.scope==="user"?"User (global)":e.workspaceName,repoCount:0,sessionCount:0,userCount:0,totalBytes:0,newestMtimeMs:null,oldestMtimeMs:null,staleFiles:[]},n.set(t,s)),s}function _w(n,e,t){e.scope==="repo"?n.repoCount++:e.scope==="session"?n.sessionCount++:e.scope==="user"&&n.userCount++,n.totalBytes+=e.sizeBytes,n.newestMtimeMs=n.newestMtimeMs===null?e.mtimeMs:Math.max(n.newestMtimeMs,e.mtimeMs),n.oldestMtimeMs=n.oldestMtimeMs===null?e.mtimeMs:Math.min(n.oldestMtimeMs,e.mtimeMs),(!n.largestFile||e.sizeBytes>n.largestFile.sizeBytes)&&(n.largestFile=e),e.mtimeMs<t&&n.staleFiles.push(e)}function rg(n,e={}){let t=e.staleDays??gn,s=e.largeFileBytes??ic,o=Date.now()-t*24*60*60*1e3,i=new Map;for(let r of n){let a=yw(i,r);_w(a,r,o)}return{staleDays:t,largeFileBytes:s,files:n,byWorkspace:Array.from(i.values()),totalFiles:n.length,totalBytes:n.reduce((r,a)=>r+a.sizeBytes,0),staleFileCount:n.filter(r=>r.mtimeMs<o).length,largeFileCount:n.filter(r=>r.sizeBytes>s).length}}var cg="https://api.githubcopilot.com",bw="agents/swe/internal/memory/v0",Cw="copilot-developer-cli";var kw=/(^|\/)(AGENTS\.md|CLAUDE\.md|copilot-instructions\.md)$|(^|\/)\.github\/(instructions|skills|agents)\/|(^|\/)docs\//i,Sw=/^user input:/i;function ag(n,e,t,s=cg){let o=new URL(`${s}/${bw}/${n}/${e}`);return t!==void 0&&o.searchParams.set("limit",String(t)),o.toString()}var Tw=new Set(["github.com","www.github.com","ssh.github.com"]),ww=new Set(["https:","http:","ssh:","git:","git+ssh:"]);function ug(n){let e=n.trim();if(!e)return;let t=/^(?:[^@/]+@)?([^/:]+):(?!\/)(.+)$/.exec(e),{host:s,path:o}=t?{host:t[1],path:t[2]}:Mw(e);if(!s||!Tw.has(s.toLowerCase()))return;let i=o.replace(/[?#].*$/,"").replace(/^\/+/,"").replace(/\/+$/,"").replace(/\.git$/i,"").split("/");return i.length===2&&i.every(dg)?`${i[0]}/${i[1]}`:void 0}function dg(n){return/^[A-Za-z0-9._-]+$/.test(n)&&n!=="."&&n!==".."}var lc="<invalid repository>";function cc(n){let e=n.split("/");return e.length===2&&e.every(dg)}function Mw(n){try{let e=new URL(n);return ww.has(e.protocol)?{host:e.hostname,path:e.pathname}:{host:"",path:""}}catch{return{host:"",path:""}}}async function mg(n,e,t=500){let s=e.fetchFn??fetch,o=e.apiBase??cg,i=e.timeoutMs??15e3;if(!cc(n))return{repo:lc,enabled:void 0,memories:[],error:"Not a valid owner/name repository."};let r;try{r=await e.getToken()}catch(g){return{repo:n,enabled:void 0,memories:[],error:`Could not get a GitHub token: ${ac(g)}`}}if(!r)return{repo:n,enabled:void 0,memories:[],error:"No GitHub token available."};let a={Authorization:`Bearer ${r}`,"Copilot-Integration-Id":Cw,Accept:"application/json"},l=await vw(ag(n,"enabled",void 0,o),a,s,i);if(l===!1)return{repo:n,enabled:!1,memories:[]};let d;try{d=await s(ag(n,"recent",t,o),{headers:a,signal:pg(i)})}catch(g){return{repo:n,enabled:l,memories:[],error:`Memory request failed: ${ac(g)}`}}if(d.status===204)return{repo:n,enabled:l,memories:[]};if(!d.ok){let g=await Pw(d);return{repo:n,enabled:l,memories:[],error:`HTTP ${d.status}: ${g}`}}let p;try{p=await d.json()}catch(g){return{repo:n,enabled:l,memories:[],error:`Malformed memory response: ${ac(g)}`}}return Array.isArray(p)?{repo:n,enabled:l,memories:p.filter(Aw),truncated:p.length>=t}:{repo:n,enabled:l,memories:[],error:"Memory response was not an array."}}async function vw(n,e,t,s){try{let o=await t(n,{headers:e,signal:pg(s)});if(!o.ok)return;let i=await o.json();return typeof i?.enabled=="boolean"?i.enabled:void 0}catch{return}}function pg(n){return typeof AbortSignal?.timeout=="function"?AbortSignal.timeout(n):void 0}async function Pw(n){try{return(await n.text()).slice(0,500)}catch{return"<unreadable body>"}}function ac(n){return n instanceof Error?n.message:String(n)}function Aw(n){if(typeof n!="object"||n===null)return!1;let e=n;return typeof e.id=="string"&&typeof e.subject=="string"&&typeof e.fact=="string"&&Array.isArray(e.citations)&&e.citations.every(t=>typeof t=="string")}function xw(n){let e=gg(n);return!e||!uc(e)?!1:kw.test(e)}function gg(n){let e=n.trim();if(!e||Sw.test(e))return;let t=e.indexOf(":",e.length>1&&e[1]===":"?2:0);return(t===-1?e:e.slice(0,t)).trim()||void 0}function uc(n){return!n||/^[/\\]/.test(n)||/^[A-Za-z]:/.test(n)?!1:!n.split(/[/\\]/).includes("..")}function fg(n,e){let t=e??Dw(),s;try{s=t.realpathSync(t.resolve(n))}catch{s=t.resolve(n)}return o=>{if(!uc(o))return!1;try{let i=t.realpathSync(t.resolve(s,o)),r=t.relative(s,i);return r===""||!r.startsWith("..")&&!t.isAbsolute(r)}catch{return!1}}}function Dw(){let n=require("fs"),e=require("path");return{realpathSync:t=>n.realpathSync(t),resolve:(...t)=>e.resolve(...t),relative:(t,s)=>e.relative(t,s),isAbsolute:t=>e.isAbsolute(t)}}function Ew(n){return n.toLowerCase().replace(/[^\p{L}\p{N}]+/gu," ").trim()}function Rw(n,e){let t={bySubject:new Map,documentedIds:new Set,codeDerivedIds:new Set,staleCitations:[]};for(let s of n){let o=Ew(s.subject),i=t.bySubject.get(o);i?i.push(s):t.bySubject.set(o,[s]);let r=[];for(let l of s.citations){xw(l)&&t.documentedIds.add(s.id);let d=gg(l);d&&uc(d)&&r.push(d)}r.length>0&&t.codeDerivedIds.add(s.id);let a=r.filter(l=>!e.fileExists(l));a.length>0&&t.staleCitations.push({id:s.id,subject:s.subject,fact:s.fact,missingPaths:a,fullyStale:a.length===r.length})}return t}function Iw(n){let e=[];for(let[t,s]of n.bySubject)s.some(o=>n.documentedIds.has(o.id))||s.some(o=>n.codeDerivedIds.has(o.id))&&e.push({subject:t,displaySubject:s[0].subject,repeatCount:s.length,representativeFact:s.reduce((o,i)=>i.fact.length>o.length?i.fact:o,s[0].fact),citations:Array.from(new Set(s.flatMap(o=>o.citations))).sort(),memoryIds:s.map(o=>o.id)});return e.sort((t,s)=>s.repeatCount-t.repeatCount||t.subject.localeCompare(s.subject)),e}function hg(n,e){let t=n.memories,s=Rw(t,e),o=Iw(s);return{repo:n.repo,enabled:n.enabled,error:n.error,truncated:n.truncated===!0,totalMemories:t.length,distinctSubjects:s.bySubject.size,documentedCount:s.documentedIds.size,promotionCandidateCount:o.reduce((i,r)=>i+r.repeatCount,0),repeatedGroupCount:o.filter(i=>i.repeatCount>1).length,promotionGroups:o,unverifiableCount:t.filter(i=>!s.codeDerivedIds.has(i.id)).length,staleCitations:s.staleCitations,fullyStaleCount:s.staleCitations.filter(i=>i.fullyStale).length,byAgent:lg(t,i=>i.source?.agent),byModel:lg(t,i=>i.source?.baseModel)}}function lg(n,e){let t=new Map;for(let s of n){let o=e(s);typeof o!="string"||o===""||t.set(o,(t.get(o)??0)+1)}return Object.fromEntries(t)}var Uw=10;function yg(n,e=Uw){let t=n.promotionGroups.slice(0,e);if(t.length===0)return n.enabled===!1?`_Memory is turned off for this repository, so there is nothing to promote._
|
|
209
|
+
`:n.totalMemories===0?`_This repository has no stored memories yet, so there is nothing to promote._
|
|
210
|
+
`:`_No promotion candidates: every stored memory already cites an instruction file._
|
|
211
|
+
`;let s=[`<!-- Suggested from ${n.totalMemories}${n.truncated?"+ (truncated)":""} Copilot server memories for ${Jr(n.repo)}.`," Each fact is an agent observation \u2014 verify it against the citations before committing. -->",""];for(let o of t){let i=o.repeatCount>1?` _(re-learned ${o.repeatCount}x)_`:"";s.push(`- **${Jr(o.displaySubject)}**${i} \u2014 ${Jr(o.representativeFact)}`),o.citations.length>0&&s.push(` - Sources: ${o.citations.slice(0,5).map(Jr).join(", ")}`)}return s.push(""),s.join(`
|
|
212
|
+
`)}function Jr(n){return ft(n).replace(/--+>/g,"-- >").replace(/<!--+/g,"< !--")}function ft(n){return n.replace(/[\u0000-\u001F\u007F-\u009F]/g," ").replace(/\s+/g," ").trim()}var Vr=ic/1024;function dc(n){let e=n.trim();return/^-?\d+$/.test(e)?parseInt(e,10):NaN}function Ow(n){let e=dc(n.staleDays??String(gn)),t=Math.max(1,Number.isNaN(e)?gn:e),s=dc(n.largeKb??String(Vr)),o=Math.max(1,Number.isNaN(s)?Vr:s)*1024;return{staleDays:t,largeFileBytes:o}}var bg=new ce("memory-files").description("Report on GitHub Copilot agent memory files on this machine (counts, staleness, size)").option("--json","Output raw JSON (for machine consumption)").option("--stale-days <days>",`Days since last edit before a memory file is flagged stale (default: ${gn})`,String(gn)).option("--large-kb <kb>",`Size in KB above which a memory file is flagged large (default: ${Vr})`,String(Vr)).option("--server","Also fetch this repository's server-side Copilot memories (requires network and the GitHub CLI)").option("--repo <owner/name>","Repository to read server memories for (default: this checkout's origin remote)").option("--limit <n>",`Maximum server memories to request (default: ${500})`,String(500)).option("--promote","Print the server-memory promotion candidates as a Markdown block for AGENTS.md").action(async n=>{let{staleDays:e,largeFileBytes:t}=Ow(n),s=ig(),o=rg(s,{staleDays:e,largeFileBytes:t}),i=!!(n.server||n.promote||n.repo),r=dc(n.limit??String(500)),a=Math.max(1,Number.isNaN(r)?500:r),l=i?await Nw(process.cwd(),n.repo,a):void 0;if(Se(n)){process.stdout.write(JSON.stringify(i?{...o,serverMemories:l??null}:o));return}if(n.promote){l?l.error?(process.stderr.write(`Could not read ${ft(l.repo)}: ${ft(l.error)}
|
|
213
|
+
`),process.exitCode=1):process.stdout.write(yg(l)):process.stdout.write(`Not a GitHub repository checkout \u2014 pass --repo owner/name.
|
|
214
|
+
`);return}jw(o),i&&Lw(l)});function mc(n,e,t){try{return(0,_g.execFileSync)(n,e,{cwd:t,encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim()||void 0}catch{return}}function Fw(n){let e=mc("git",["rev-parse","--show-toplevel"],n),t=mc("git",["remote","get-url","origin"],n);if(!e||!t)return;let s=ug(t);return s?{root:e,repo:s}:void 0}async function Nw(n,e,t){let s=Fw(n),o=e??s?.repo;if(!o)return;if(e!==void 0&&!cc(e))return{repo:lc,enabled:void 0,error:"--repo must be owner/name.",truncated:!1,totalMemories:0,distinctSubjects:0,documentedCount:0,promotionCandidateCount:0,repeatedGroupCount:0,promotionGroups:[],unverifiableCount:0,staleCitations:[],fullyStaleCount:0,byAgent:{},byModel:{}};let i=s?.root??n,r=!e||e===s?.repo,a=await mg(o,{getToken:async()=>{let l=mc("gh",["auth","token","--hostname","github.com"],n);if(!l)throw new Error("No github.com token from the GitHub CLI \u2014 install it and run `gh auth login --hostname github.com`.");return l}},t);return hg(a,{fileExists:r?fg(i):()=>!0})}function Lw(n){if(process.stdout.write(`
|
|
215
|
+
Copilot Server Memories (this repository)
|
|
216
|
+
`),process.stdout.write("=".repeat(50)+`
|
|
217
|
+
|
|
218
|
+
`),!n){process.stdout.write(`Not a GitHub repository checkout \u2014 pass --repo owner/name to pick one.
|
|
219
|
+
`);return}if(n.error){process.stdout.write(`Could not read ${ft(n.repo)}: ${ft(n.error)}
|
|
220
|
+
`);return}if(process.stdout.write(`Repository: ${ft(n.repo)}
|
|
221
|
+
`),process.stdout.write(`Memory enabled: ${n.enabled??"unknown"}
|
|
222
|
+
`),process.stdout.write(`Stored memories: ${n.totalMemories}${n.truncated?"+ (truncated at the request limit)":""} across ${n.distinctSubjects} subjects
|
|
223
|
+
`),process.stdout.write(`Already documented: ${n.documentedCount} (cite AGENTS.md or another instruction file)
|
|
224
|
+
`),n.unverifiableCount>0&&process.stdout.write(`Not promotable: ${n.unverifiableCount} (no verifiable file citation, e.g. "User input: ...")
|
|
225
|
+
`),process.stdout.write(`Promotion candidates: ${n.promotionCandidateCount} in ${n.promotionGroups.length} groups, ${n.repeatedGroupCount} re-learned more than once
|
|
226
|
+
`),process.stdout.write(`Stale citations: ${n.staleCitations.length} memories, ${n.fullyStaleCount} with no surviving source
|
|
227
|
+
|
|
228
|
+
`),n.truncated&&process.stdout.write(`Note: the server returned a full page, so more memories may exist than are counted here.
|
|
229
|
+
Raise --limit to read further.
|
|
230
|
+
|
|
231
|
+
`),n.totalMemories===0){process.stdout.write(n.enabled===!1?`Memory is turned off for this repository.
|
|
232
|
+
`:`This repository has no stored memories yet.
|
|
233
|
+
`);return}process.stdout.write(`Top promotion candidates (consider adding these to AGENTS.md):
|
|
234
|
+
`);for(let e of n.promotionGroups.slice(0,10)){let t=e.repeatCount>1?` (re-learned ${e.repeatCount}x)`:"";process.stdout.write(` \u2022 ${ft(e.displaySubject)}${t}
|
|
235
|
+
`),process.stdout.write(` ${ft(e.representativeFact)}
|
|
236
|
+
`)}if(process.stdout.write(`
|
|
237
|
+
Run with --promote for a Markdown block you can paste in.
|
|
238
|
+
`),n.fullyStaleCount>0){process.stdout.write(`
|
|
239
|
+
Memories whose every cited file is gone:
|
|
240
|
+
`);for(let e of n.staleCitations.filter(t=>t.fullyStale).slice(0,10))process.stdout.write(` \u2022 ${ft(e.subject)}: ${ft(e.missingPaths.join(", "))}
|
|
241
|
+
`)}process.stdout.write(`
|
|
242
|
+
`)}function jw(n){if(process.stdout.write(`
|
|
209
243
|
Copilot Memory Files Report
|
|
210
244
|
`),process.stdout.write("=".repeat(50)+`
|
|
211
245
|
|
|
@@ -220,4 +254,5 @@ Copilot Memory Files Report
|
|
|
220
254
|
`),process.stdout.write(` repo-scope: ${e.repoCount}, session-scope: ${e.sessionCount}, global-scope: ${e.userCount}, size: ${(e.totalBytes/1024).toFixed(1)} KB
|
|
221
255
|
`),e.staleFiles.length>0&&process.stdout.write(` stale: ${e.staleFiles.map(s=>s.title).join(", ")}
|
|
222
256
|
`)}process.stdout.write(`
|
|
223
|
-
`)}var
|
|
257
|
+
`)}var Bw=Cg(),Ee=new ce;Ee.name("copilot-token-tracker").description("Analyze GitHub Copilot token usage from local session files").version(Bw.version).option("--no-cache","Bypass the session file cache and re-parse everything");Ee.hook("preAction",()=>{Ee.opts().cache===!1?Hl():Jl()});Ee.hook("postAction",()=>{Kl()});Ee.addCommand(Ip);Ee.addCommand(Fp);Ee.addCommand(Np);Ee.addCommand(jp);Ee.addCommand(Bp);Ee.addCommand(qp);Ee.addCommand(zp);Ee.addCommand(Yp);Ee.addCommand(eg);Ee.addCommand(Vp);Ee.addCommand(bg);Ee.parseAsync().catch(n=>{process.stderr.write(`${n instanceof Error?n.message:String(n)}
|
|
258
|
+
`),process.exitCode=1});
|