@rajbos/ai-engineering-fluency 0.2.12 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +1 -0
  2. package/dist/cli.js +138 -77
  3. package/package.json +4 -3
package/dist/cli.js CHANGED
@@ -1,103 +1,164 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var _d=Object.create;var Oa=Object.defineProperty;var bd=Object.getOwnPropertyDescriptor;var Cd=Object.getOwnPropertyNames;var kd=Object.getPrototypeOf,Sd=Object.prototype.hasOwnProperty;var be=(n,e)=>()=>{try{return e||n((e={exports:{}}).exports,e),e.exports}catch(t){throw e=0,t}};var wd=(n,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Cd(e))!Sd.call(n,o)&&o!==t&&Oa(n,o,{get:()=>e[o],enumerable:!(s=bd(e,o))||s.enumerable});return n};var v=(n,e,t)=>(t=n!=null?_d(kd(n)):{},wd(e||!n||!n.__esModule?Oa(t,"default",{value:n,enumerable:!0}):t,n));var Ns=be((oo,jt)=>{var so=void 0,no=function(n){return so||(so=new Promise(function(e,t){var s=typeof n<"u"?n:{},o=s.onAbort;s.onAbort=function(a){t(new Error(a)),o&&o(a)},s.postRun=s.postRun||[],s.postRun.push(function(){e(s)}),jt=void 0;var i;i||=typeof s<"u"?s:{};var r=!!globalThis.window,l=!!globalThis.WorkerGlobalScope,u=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer";i.onRuntimeInitialized=function(){function a(b,M){switch(typeof M){case"boolean":hd(b,M?1:0);break;case"number":pd(b,M);break;case"string":gd(b,M,-1,-1);break;case"object":if(M===null)Ra(b);else if(M.length!=null){var E=Gn(M.length);D.set(M,E),fd(b,E,M.length,-1),xs(E)}else zn(b,"Wrong API use : tried to return a value of an unknown type ("+M+").",-1);break;default:Ra(b)}}function c(b,M){for(var E=[],R=0;R<b;R+=1){var q=at(M+4*R,"i32"),K=ld(q);if(K===1||K===2)q=md(q);else if(K===3)q=ud(q);else if(K===4){K=q,q=cd(K),K=dd(K);for(var $e=new Uint8Array(q),Le=0;Le<q;Le+=1)$e[Le]=D[K+Le];q=$e}else q=null;E.push(q)}return E}function d(b,M){this.Qa=b,this.db=M,this.Oa=1,this.mb=[]}function g(b,M){if(this.db=M,this.fb=Ln(b),this.fb===null)throw Error("Unable to allocate memory for the SQL string");this.lb=this.fb,this.$a=this.sb=null}function h(b){if(this.filename="dbfile_"+(4294967295*Math.random()>>>0),b!=null){var M=this.filename,E="/",R=M;if(E&&(E=typeof E=="string"?E:gi(E),R=M?di(E+"/"+M):E),M=ia(!0,!0),R=Nu(R,M),b){if(typeof b=="string"){E=Array(b.length);for(var q=0,K=b.length;q<K;++q)E[q]=b.charCodeAt(q);b=E}Un(R,M|146),E=es(R,577),Ca(E,b,0,b.length,0),Ci(E),Un(R,M)}}this.handleError(F(this.filename,k)),this.db=at(k,"i32"),Ua(this.db),this.gb={},this.Sa={}}var k=Ot(4),T=i.cwrap,F=T("sqlite3_open","number",["string","number"]),V=T("sqlite3_close_v2","number",["number"]),L=T("sqlite3_exec","number",["number","string","number","number","number"]),le=T("sqlite3_changes","number",["number"]),ke=T("sqlite3_prepare_v2","number",["number","string","number","number","number"]),Pa=T("sqlite3_sql","string",["number"]),Wu=T("sqlite3_normalized_sql","string",["number"]),Aa=T("sqlite3_prepare_v2","number",["number","number","number","number","number"]),Hu=T("sqlite3_bind_text","number",["number","number","number","number","number"]),xa=T("sqlite3_bind_blob","number",["number","number","number","number","number"]),Ju=T("sqlite3_bind_double","number",["number","number","number"]),Vu=T("sqlite3_bind_int","number",["number","number","number"]),Ku=T("sqlite3_bind_parameter_index","number",["number","string"]),Qu=T("sqlite3_step","number",["number"]),Yu=T("sqlite3_errmsg","string",["number"]),Xu=T("sqlite3_column_count","number",["number"]),Zu=T("sqlite3_data_count","number",["number"]),ed=T("sqlite3_column_double","number",["number","number"]),Da=T("sqlite3_column_text","string",["number","number"]),td=T("sqlite3_column_blob","number",["number","number"]),sd=T("sqlite3_column_bytes","number",["number","number"]),nd=T("sqlite3_column_type","number",["number","number"]),od=T("sqlite3_column_name","string",["number","number"]),id=T("sqlite3_reset","number",["number"]),rd=T("sqlite3_clear_bindings","number",["number"]),ad=T("sqlite3_finalize","number",["number"]),Ea=T("sqlite3_create_function_v2","number","number string number number number number number number number".split(" ")),ld=T("sqlite3_value_type","number",["number"]),cd=T("sqlite3_value_bytes","number",["number"]),ud=T("sqlite3_value_text","string",["number"]),dd=T("sqlite3_value_blob","number",["number"]),md=T("sqlite3_value_double","number",["number"]),pd=T("sqlite3_result_double","",["number","number"]),Ra=T("sqlite3_result_null","",["number"]),gd=T("sqlite3_result_text","",["number","string","number","number"]),fd=T("sqlite3_result_blob","",["number","number","number","number"]),hd=T("sqlite3_result_int","",["number","number"]),zn=T("sqlite3_result_error","",["number","string","number"]),Ia=T("sqlite3_aggregate_context","number",["number","number"]),Ua=T("RegisterExtensionFunctions","number",["number"]),Fa=T("sqlite3_update_hook","number",["number","number","number"]);d.prototype.bind=function(b){if(!this.Qa)throw"Statement closed";return this.reset(),Array.isArray(b)?this.Gb(b):b!=null&&typeof b=="object"?this.Hb(b):!0},d.prototype.step=function(){if(!this.Qa)throw"Statement closed";this.Oa=1;var b=Qu(this.Qa);switch(b){case 100:return!0;case 101:return!1;default:throw this.db.handleError(b)}},d.prototype.Ab=function(b){return b==null&&(b=this.Oa,this.Oa+=1),ed(this.Qa,b)},d.prototype.Ob=function(b){if(b==null&&(b=this.Oa,this.Oa+=1),b=Da(this.Qa,b),typeof BigInt!="function")throw Error("BigInt is not supported");return BigInt(b)},d.prototype.Tb=function(b){return b==null&&(b=this.Oa,this.Oa+=1),Da(this.Qa,b)},d.prototype.getBlob=function(b){b==null&&(b=this.Oa,this.Oa+=1);var M=sd(this.Qa,b);b=td(this.Qa,b);for(var E=new Uint8Array(M),R=0;R<M;R+=1)E[R]=D[b+R];return E},d.prototype.get=function(b,M){M=M||{},b!=null&&this.bind(b)&&this.step(),b=[];for(var E=Zu(this.Qa),R=0;R<E;R+=1)switch(nd(this.Qa,R)){case 1:var q=M.useBigInt?this.Ob(R):this.Ab(R);b.push(q);break;case 2:b.push(this.Ab(R));break;case 3:b.push(this.Tb(R));break;case 4:b.push(this.getBlob(R));break;default:b.push(null)}return b},d.prototype.qb=function(){for(var b=[],M=Xu(this.Qa),E=0;E<M;E+=1)b.push(od(this.Qa,E));return b},d.prototype.zb=function(b,M){b=this.get(b,M),M=this.qb();for(var E={},R=0;R<M.length;R+=1)E[M[R]]=b[R];return E},d.prototype.Sb=function(){return Pa(this.Qa)},d.prototype.Pb=function(){return Wu(this.Qa)},d.prototype.run=function(b){return b!=null&&this.bind(b),this.step(),this.reset()},d.prototype.wb=function(b,M){M==null&&(M=this.Oa,this.Oa+=1),b=Ln(b),this.mb.push(b),this.db.handleError(Hu(this.Qa,M,b,-1,0))},d.prototype.Fb=function(b,M){M==null&&(M=this.Oa,this.Oa+=1);var E=Gn(b.length);D.set(b,E),this.mb.push(E),this.db.handleError(xa(this.Qa,M,E,b.length,0))},d.prototype.vb=function(b,M){M==null&&(M=this.Oa,this.Oa+=1),this.db.handleError((b===(b|0)?Vu:Ju)(this.Qa,M,b))},d.prototype.Ib=function(b){b==null&&(b=this.Oa,this.Oa+=1),xa(this.Qa,b,0,0,0)},d.prototype.xb=function(b,M){switch(M==null&&(M=this.Oa,this.Oa+=1),typeof b){case"string":this.wb(b,M);return;case"number":this.vb(b,M);return;case"bigint":this.wb(b.toString(),M);return;case"boolean":this.vb(b+0,M);return;case"object":if(b===null){this.Ib(M);return}if(b.length!=null){this.Fb(b,M);return}}throw"Wrong API use : tried to bind a value of an unknown type ("+b+")."},d.prototype.Hb=function(b){var M=this;return Object.keys(b).forEach(function(E){var R=Ku(M.Qa,E);R!==0&&M.xb(b[E],R)}),!0},d.prototype.Gb=function(b){for(var M=0;M<b.length;M+=1)this.xb(b[M],M+1);return!0},d.prototype.reset=function(){return this.freemem(),rd(this.Qa)===0&&id(this.Qa)===0},d.prototype.freemem=function(){for(var b;(b=this.mb.pop())!==void 0;)xs(b)},d.prototype.Ya=function(){this.freemem();var b=ad(this.Qa)===0;return delete this.db.gb[this.Qa],this.Qa=0,b},g.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 b=Bn(),M=Ot(4);Ts(k),Ts(M);try{this.db.handleError(Aa(this.db.db,this.lb,-1,k,M)),this.lb=at(M,"i32");var E=at(k,"i32");return E===0?(this.ob(),{done:!0}):(this.$a=new d(E,this.db),this.db.gb[E]=this.$a,{value:this.$a,done:!1})}catch(R){throw this.sb=ge(this.lb),this.ob(),R}finally{jn(b)}},g.prototype.ob=function(){xs(this.fb),this.fb=null},g.prototype.Qb=function(){return this.sb!==null?this.sb:ge(this.lb)},typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"&&(g.prototype[Symbol.iterator]=function(){return this}),h.prototype.run=function(b,M){if(!this.db)throw"Database closed";if(M){b=this.tb(b,M);try{b.step()}finally{b.Ya()}}else this.handleError(L(this.db,b,0,0,k));return this},h.prototype.exec=function(b,M,E){if(!this.db)throw"Database closed";var R=null,q=null,K=null;try{K=q=Ln(b);var $e=Ot(4);for(b=[];at(K,"i8")!==0;){Ts(k),Ts($e),this.handleError(Aa(this.db,K,-1,k,$e));var Le=at(k,"i32");if(K=at($e,"i32"),Le!==0){var Ee=null;for(R=new d(Le,this),M!=null&&R.bind(M);R.step();)Ee===null&&(Ee={columns:R.qb(),values:[]},b.push(Ee)),Ee.values.push(R.get(null,E));R.Ya()}}return b}catch(We){throw R&&R.Ya(),We}finally{q&&xs(q)}},h.prototype.Mb=function(b,M,E,R,q){typeof M=="function"&&(R=E,E=M,M=void 0),b=this.tb(b,M);try{for(;b.step();)E(b.zb(null,q))}finally{b.Ya()}if(typeof R=="function")return R()},h.prototype.tb=function(b,M){if(Ts(k),this.handleError(ke(this.db,b,-1,k,0)),b=at(k,"i32"),b===0)throw"Nothing to prepare";var E=new d(b,this);return M!=null&&E.bind(M),this.gb[b]=E},h.prototype.Ub=function(b){return new g(b,this)},h.prototype.Nb=function(){Object.values(this.gb).forEach(function(M){M.Ya()}),Object.values(this.Sa).forEach(kt),this.Sa={},this.handleError(V(this.db));var b=Lu(this.filename);return this.handleError(F(this.filename,k)),this.db=at(k,"i32"),Ua(this.db),b},h.prototype.close=function(){this.db!==null&&(Object.values(this.gb).forEach(function(b){b.Ya()}),Object.values(this.Sa).forEach(kt),this.Sa={},this.Za&&(kt(this.Za),this.Za=void 0),this.handleError(V(this.db)),fa("/"+this.filename),this.db=null)},h.prototype.handleError=function(b){if(b===0)return null;throw b=Yu(this.db),Error(b)},h.prototype.Rb=function(){return le(this.db)},h.prototype.Kb=function(b,M){Object.prototype.hasOwnProperty.call(this.Sa,b)&&(kt(this.Sa[b]),delete this.Sa[b]);var E=As(function(R,q,K){q=c(q,K);try{var $e=M.apply(null,q)}catch(Le){zn(R,Le,-1);return}a(R,$e)},"viii");return this.Sa[b]=E,this.handleError(Ea(this.db,b,M.length,1,0,E,0,0,0)),this},h.prototype.Jb=function(b,M){var E=M.init||function(){return null},R=M.finalize||function(Ee){return Ee},q=M.step;if(!q)throw"An aggregate function must have a step function in "+b;var K={};Object.hasOwnProperty.call(this.Sa,b)&&(kt(this.Sa[b]),delete this.Sa[b]),M=b+"__finalize",Object.hasOwnProperty.call(this.Sa,M)&&(kt(this.Sa[M]),delete this.Sa[M]);var $e=As(function(Ee,We,Pi){var Nt=Ia(Ee,1);Object.hasOwnProperty.call(K,Nt)||(K[Nt]=E()),We=c(We,Pi),We=[K[Nt]].concat(We);try{K[Nt]=q.apply(null,We)}catch(yd){delete K[Nt],zn(Ee,yd,-1)}},"viii"),Le=As(function(Ee){var We=Ia(Ee,1);try{var Pi=R(K[We])}catch(Nt){delete K[We],zn(Ee,Nt,-1);return}a(Ee,Pi),delete K[We]},"vi");return this.Sa[b]=$e,this.Sa[M]=Le,this.handleError(Ea(this.db,b,q.length-1,1,0,0,$e,Le,0)),this},h.prototype.Zb=function(b){return this.Za&&(Fa(this.db,0,0),kt(this.Za),this.Za=void 0),b?(this.Za=As(function(M,E,R,q,K){switch(E){case 18:M="insert";break;case 23:M="update";break;case 9:M="delete";break;default:throw"unknown operationCode in updateHook callback: "+E}if(R=ge(R),q=ge(q),K>Number.MAX_SAFE_INTEGER)throw"rowId too big to fit inside a Number";b(M,R,q,Number(K))},"viiiij"),Fa(this.db,this.Za,0),this):this},d.prototype.bind=d.prototype.bind,d.prototype.step=d.prototype.step,d.prototype.get=d.prototype.get,d.prototype.getColumnNames=d.prototype.qb,d.prototype.getAsObject=d.prototype.zb,d.prototype.getSQL=d.prototype.Sb,d.prototype.getNormalizedSQL=d.prototype.Pb,d.prototype.run=d.prototype.run,d.prototype.reset=d.prototype.reset,d.prototype.freemem=d.prototype.freemem,d.prototype.free=d.prototype.Ya,g.prototype.next=g.prototype.next,g.prototype.getRemainingSQL=g.prototype.Qb,h.prototype.run=h.prototype.run,h.prototype.exec=h.prototype.exec,h.prototype.each=h.prototype.Mb,h.prototype.prepare=h.prototype.tb,h.prototype.iterateStatements=h.prototype.Ub,h.prototype.export=h.prototype.Nb,h.prototype.close=h.prototype.close,h.prototype.handleError=h.prototype.handleError,h.prototype.getRowsModified=h.prototype.Rb,h.prototype.create_function=h.prototype.Kb,h.prototype.create_aggregate=h.prototype.Jb,h.prototype.updateHook=h.prototype.Zb,i.Database=h};var m="./this.program",p=(a,c)=>{throw c},f=globalThis.document?.currentScript?.src;typeof __filename<"u"?f=__filename:l&&(f=self.location.href);var y="",_,C;if(u){var S=require("node:fs");y=__dirname+"/",C=a=>(a=A(a)?new URL(a):a,S.readFileSync(a)),_=async a=>(a=A(a)?new URL(a):a,S.readFileSync(a,void 0)),1<process.argv.length&&(m=process.argv[1].replace(/\\/g,"/")),process.argv.slice(2),typeof jt<"u"&&(jt.exports=i),p=(a,c)=>{throw process.exitCode=a,c}}else if(r||l){try{y=new URL(".",f).href}catch{}l&&(C=a=>{var c=new XMLHttpRequest;return c.open("GET",a,!1),c.responseType="arraybuffer",c.send(null),new Uint8Array(c.response)}),_=async a=>{if(A(a))return new Promise((d,g)=>{var h=new XMLHttpRequest;h.open("GET",a,!0),h.responseType="arraybuffer",h.onload=()=>{h.status==200||h.status==0&&h.response?d(h.response):g(h.status)},h.onerror=g,h.send(null)});var c=await fetch(a,{credentials:"same-origin"});if(c.ok)return c.arrayBuffer();throw Error(c.status+" : "+c.url)}}var I=console.log.bind(console),P=console.error.bind(console),U,te=!1,j,A=a=>a.startsWith("file://"),D,O,oe,re,X,Cs,Kt,De;function ks(){var a=qn.buffer;D=new Int8Array(a),oe=new Int16Array(a),O=new Uint8Array(a),new Uint16Array(a),re=new Int32Array(a),X=new Uint32Array(a),Cs=new Float32Array(a),Kt=new Float64Array(a),De=new BigInt64Array(a),new BigUint64Array(a)}function yt(a){throw i.onAbort?.(a),a="Aborted("+a+")",P(a),te=!0,new WebAssembly.RuntimeError(a+". Build with -sASSERTIONS for more info.")}var rt;async function Pn(a){if(!U)try{var c=await _(a);return new Uint8Array(c)}catch{}if(a==rt&&U)a=new Uint8Array(U);else if(C)a=C(a);else throw"both async and sync fetching of the wasm failed";return a}async function An(a,c){try{var d=await Pn(a);return await WebAssembly.instantiate(d,c)}catch(g){P(`failed to asynchronously prepare wasm: ${g}`),yt(g)}}async function ui(a){var c=rt;if(!U&&!A(c)&&!u)try{var d=fetch(c,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(d,a)}catch(g){P(`wasm streaming compile failed: ${g}`),P("falling back to ArrayBuffer instantiation")}return An(c,a)}class Y{name="ExitStatus";constructor(c){this.message=`Program terminated with exit(${c})`,this.status=c}}var we=a=>{for(;0<a.length;)a.shift()(i)},_t=[],Qt=[],Ss=()=>{var a=i.preRun.shift();Qt.push(a)},Rt=0,ws=null;function at(a,c="i8"){switch(c.endsWith("*")&&(c="*"),c){case"i1":return D[a];case"i8":return D[a];case"i16":return oe[a>>1];case"i32":return re[a>>2];case"i64":return De[a>>3];case"float":return Cs[a>>2];case"double":return Kt[a>>3];case"*":return X[a>>2];default:yt(`invalid type for getValue: ${c}`)}}var xn=!0;function Ts(a){var c="i32";switch(c.endsWith("*")&&(c="*"),c){case"i1":D[a]=0;break;case"i8":D[a]=0;break;case"i16":oe[a>>1]=0;break;case"i32":re[a>>2]=0;break;case"i64":De[a>>3]=BigInt(0);break;case"float":Cs[a>>2]=0;break;case"double":Kt[a>>3]=0;break;case"*":X[a>>2]=0;break;default:yt(`invalid type for setValue: ${c}`)}}var Xr=new TextDecoder,Zr=(a,c,d,g)=>{if(d=c+d,g)return d;for(;a[c]&&!(c>=d);)++c;return c},ge=(a,c,d)=>a?Xr.decode(O.subarray(a,Zr(O,a,c,d))):"",ea=(a,c)=>{for(var d=0,g=a.length-1;0<=g;g--){var h=a[g];h==="."?a.splice(g,1):h===".."?(a.splice(g,1),d++):d&&(a.splice(g,1),d--)}if(c)for(;d;d--)a.unshift("..");return a},di=a=>{var c=a.charAt(0)==="/",d=a.slice(-1)==="/";return(a=ea(a.split("/").filter(g=>!!g),!c).join("/"))||c||(a="."),a&&d&&(a+="/"),(c?"/":"")+a},ta=a=>{var c=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(a).slice(1);return a=c[0],c=c[1],!a&&!c?".":(c&&=c.slice(0,-1),a+c)},Dn=a=>a&&a.match(/([^\/]+|\/)\/*$/)[1],Pu=()=>{if(u){var a=require("node:crypto");return c=>a.randomFillSync(c)}return c=>crypto.getRandomValues(c)},sa=a=>{(sa=Pu())(a)},Au=(...a)=>{for(var c="",d=!1,g=a.length-1;-1<=g&&!d;g--){if(d=0<=g?a[g]:"/",typeof d!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!d)return"";c=d+"/"+c,d=d.charAt(0)==="/"}return c=ea(c.split("/").filter(h=>!!h),!d).join("/"),(d?"/":"")+c||"."},Ms=a=>{var c=Zr(a,0);return Xr.decode(a.buffer?a.subarray(0,c):new Uint8Array(a.slice(0,c)))},mi=[],Yt=a=>{for(var c=0,d=0;d<a.length;++d){var g=a.charCodeAt(d);127>=g?c++:2047>=g?c+=2:55296<=g&&57343>=g?(c+=4,++d):c+=3}return c},Ze=(a,c,d,g)=>{if(!(0<g))return 0;var h=d;g=d+g-1;for(var k=0;k<a.length;++k){var T=a.codePointAt(k);if(127>=T){if(d>=g)break;c[d++]=T}else if(2047>=T){if(d+1>=g)break;c[d++]=192|T>>6,c[d++]=128|T&63}else if(65535>=T){if(d+2>=g)break;c[d++]=224|T>>12,c[d++]=128|T>>6&63,c[d++]=128|T&63}else{if(d+3>=g)break;c[d++]=240|T>>18,c[d++]=128|T>>12&63,c[d++]=128|T>>6&63,c[d++]=128|T&63,k++}}return c[d]=0,d-h},na=[];function oa(a,c){na[a]={input:[],output:[],eb:c},_i(a,xu)}var xu={open(a){var c=na[a.node.rdev];if(!c)throw new x(43);a.tty=c,a.seekable=!1},close(a){a.tty.eb.fsync(a.tty)},fsync(a){a.tty.eb.fsync(a.tty)},read(a,c,d,g){if(!a.tty||!a.tty.eb.Bb)throw new x(60);for(var h=0,k=0;k<g;k++){try{var T=a.tty.eb.Bb(a.tty)}catch{throw new x(29)}if(T===void 0&&h===0)throw new x(6);if(T==null)break;h++,c[d+k]=T}return h&&(a.node.atime=Date.now()),h},write(a,c,d,g){if(!a.tty||!a.tty.eb.ub)throw new x(60);try{for(var h=0;h<g;h++)a.tty.eb.ub(a.tty,c[d+h])}catch{throw new x(29)}return g&&(a.node.mtime=a.node.ctime=Date.now()),h}},Du={Bb(){e:{if(!mi.length){var a=null;if(u){var c=Buffer.alloc(256),d=0,g=process.stdin.fd;try{d=S.readSync(g,c,0,256)}catch(h){if(h.toString().includes("EOF"))d=0;else throw h}0<d&&(a=c.slice(0,d).toString("utf-8"))}else globalThis.window?.prompt&&(a=window.prompt("Input: "),a!==null&&(a+=`
3
- `));if(!a){a=null;break e}c=Array(Yt(a)+1),a=Ze(a,c,0,c.length),c.length=a,mi=c}a=mi.shift()}return a},ub(a,c){c===null||c===10?(I(Ms(a.output)),a.output=[]):c!=0&&a.output.push(c)},fsync(a){0<a.output?.length&&(I(Ms(a.output)),a.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]}},Eu={ub(a,c){c===null||c===10?(P(Ms(a.output)),a.output=[]):c!=0&&a.output.push(c)},fsync(a){0<a.output?.length&&(P(Ms(a.output)),a.output=[])}},N={Wa:null,Xa(){return N.createNode(null,"/",16895,0)},createNode(a,c,d,g){if((d&61440)===24576||(d&61440)===4096)throw new x(63);return N.Wa||(N.Wa={dir:{node:{Ta:N.La.Ta,Ua:N.La.Ua,lookup:N.La.lookup,ib:N.La.ib,rename:N.La.rename,unlink:N.La.unlink,rmdir:N.La.rmdir,readdir:N.La.readdir,symlink:N.La.symlink},stream:{Va:N.Ma.Va}},file:{node:{Ta:N.La.Ta,Ua:N.La.Ua},stream:{Va:N.Ma.Va,read:N.Ma.read,write:N.Ma.write,jb:N.Ma.jb,kb:N.Ma.kb}},link:{node:{Ta:N.La.Ta,Ua:N.La.Ua,readlink:N.La.readlink},stream:{}},yb:{node:{Ta:N.La.Ta,Ua:N.La.Ua},stream:Ou}}),d=ca(a,c,d,g),Pe(d.mode)?(d.La=N.Wa.dir.node,d.Ma=N.Wa.dir.stream,d.Na={}):(d.mode&61440)===32768?(d.La=N.Wa.file.node,d.Ma=N.Wa.file.stream,d.Ra=0,d.Na=null):(d.mode&61440)===40960?(d.La=N.Wa.link.node,d.Ma=N.Wa.link.stream):(d.mode&61440)===8192&&(d.La=N.Wa.yb.node,d.Ma=N.Wa.yb.stream),d.atime=d.mtime=d.ctime=Date.now(),a&&(a.Na[c]=d,a.atime=a.mtime=a.ctime=d.atime),d},fc(a){return a.Na?a.Na.subarray?a.Na.subarray(0,a.Ra):new Uint8Array(a.Na):new Uint8Array(0)},La:{Ta(a){var c={};return c.dev=(a.mode&61440)===8192?a.id:1,c.ino=a.id,c.mode=a.mode,c.nlink=1,c.uid=0,c.gid=0,c.rdev=a.rdev,Pe(a.mode)?c.size=4096:(a.mode&61440)===32768?c.size=a.Ra:(a.mode&61440)===40960?c.size=a.link.length:c.size=0,c.atime=new Date(a.atime),c.mtime=new Date(a.mtime),c.ctime=new Date(a.ctime),c.blksize=4096,c.blocks=Math.ceil(c.size/c.blksize),c},Ua(a,c){for(var d of["mode","atime","mtime","ctime"])c[d]!=null&&(a[d]=c[d]);c.size!==void 0&&(c=c.size,a.Ra!=c&&(c==0?(a.Na=null,a.Ra=0):(d=a.Na,a.Na=new Uint8Array(c),d&&a.Na.set(d.subarray(0,Math.min(c,a.Ra))),a.Ra=c)))},lookup(){throw N.nb||(N.nb=new x(44),N.nb.stack="<generic error, no stack>"),N.nb},ib(a,c,d,g){return N.createNode(a,c,d,g)},rename(a,c,d){try{var g=It(c,d)}catch{}if(g){if(Pe(a.mode))for(var h in g.Na)throw new x(55);hi(g)}delete a.parent.Na[a.name],c.Na[d]=a,a.name=d,c.ctime=c.mtime=a.parent.ctime=a.parent.mtime=Date.now()},unlink(a,c){delete a.Na[c],a.ctime=a.mtime=Date.now()},rmdir(a,c){var d=It(a,c),g;for(g in d.Na)throw new x(55);delete a.Na[c],a.ctime=a.mtime=Date.now()},readdir(a){return[".","..",...Object.keys(a.Na)]},symlink(a,c,d){return a=N.createNode(a,c,41471,0),a.link=d,a},readlink(a){if((a.mode&61440)!==40960)throw new x(28);return a.link}},Ma:{read(a,c,d,g,h){var k=a.node.Na;if(h>=a.node.Ra)return 0;if(a=Math.min(a.node.Ra-h,g),8<a&&k.subarray)c.set(k.subarray(h,h+a),d);else for(g=0;g<a;g++)c[d+g]=k[h+g];return a},write(a,c,d,g,h,k){if(c.buffer===D.buffer&&(k=!1),!g)return 0;if(a=a.node,a.mtime=a.ctime=Date.now(),c.subarray&&(!a.Na||a.Na.subarray)){if(k)return a.Na=c.subarray(d,d+g),a.Ra=g;if(a.Ra===0&&h===0)return a.Na=c.slice(d,d+g),a.Ra=g;if(h+g<=a.Ra)return a.Na.set(c.subarray(d,d+g),h),g}k=h+g;var T=a.Na?a.Na.length:0;if(T>=k||(k=Math.max(k,T*(1048576>T?2:1.125)>>>0),T!=0&&(k=Math.max(k,256)),T=a.Na,a.Na=new Uint8Array(k),0<a.Ra&&a.Na.set(T.subarray(0,a.Ra),0)),a.Na.subarray&&c.subarray)a.Na.set(c.subarray(d,d+g),h);else for(k=0;k<g;k++)a.Na[h+k]=c[d+k];return a.Ra=Math.max(a.Ra,h+g),g},Va(a,c,d){if(d===1?c+=a.position:d===2&&(a.node.mode&61440)===32768&&(c+=a.node.Ra),0>c)throw new x(28);return c},jb(a,c,d,g,h){if((a.node.mode&61440)!==32768)throw new x(43);if(a=a.node.Na,h&2||!a||a.buffer!==D.buffer){h=!0,g=65536*Math.ceil(c/65536);var k=Ma(65536,g);if(k&&O.fill(0,k,k+g),g=k,!g)throw new x(48);a&&((0<d||d+c<a.length)&&(a.subarray?a=a.subarray(d,d+c):a=Array.prototype.slice.call(a,d,d+c)),D.set(a,g))}else h=!1,g=a.byteOffset;return{Xb:g,Eb:h}},kb(a,c,d,g){return N.Ma.write(a,c,0,g,d,!1),0}}},ia=(a,c)=>{var d=0;return a&&(d|=365),c&&(d|=146),d},pi=null,ra={},Xt=[],Ru=1,bt=null,aa=!1,la=!0,x=class{name="ErrnoError";constructor(a){this.Pa=a}},Iu=class{hb={};node=null;get flags(){return this.hb.flags}set flags(a){this.hb.flags=a}get position(){return this.hb.position}set position(a){this.hb.position=a}},Uu=class{La={};Ma={};bb=null;constructor(a,c,d,g){a||=this,this.parent=a,this.Xa=a.Xa,this.id=Ru++,this.name=c,this.mode=d,this.rdev=g,this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&365)===365}set read(a){a?this.mode|=365:this.mode&=-366}get write(){return(this.mode&146)===146}set write(a){a?this.mode|=146:this.mode&=-147}};function Ne(a,c={}){if(!a)throw new x(44);c.pb??(c.pb=!0),a.charAt(0)==="/"||(a="//"+a);var d=0;e:for(;40>d;d++){a=a.split("/").filter(F=>!!F);for(var g=pi,h="/",k=0;k<a.length;k++){var T=k===a.length-1;if(T&&c.parent)break;if(a[k]!==".")if(a[k]==="..")if(h=ta(h),g===g.parent){a=h+"/"+a.slice(k+1).join("/"),d--;continue e}else g=g.parent;else{h=di(h+"/"+a[k]);try{g=It(g,a[k])}catch(F){if(F?.Pa===44&&T&&c.Wb)return{path:h};throw F}if(!g.bb||T&&!c.pb||(g=g.bb.root),(g.mode&61440)===40960&&(!T||c.ab)){if(!g.La.readlink)throw new x(52);g=g.La.readlink(g),g.charAt(0)==="/"||(g=ta(h)+"/"+g),a=g+"/"+a.slice(k+1).join("/");continue e}}}return{path:h,node:g}}throw new x(32)}function gi(a){for(var c;;){if(a===a.parent)return a=a.Xa.Db,c?a[a.length-1]!=="/"?`${a}/${c}`:a+c:a;c=c?`${a.name}/${c}`:a.name,a=a.parent}}function fi(a,c){for(var d=0,g=0;g<c.length;g++)d=(d<<5)-d+c.charCodeAt(g)|0;return(a+d>>>0)%bt.length}function hi(a){var c=fi(a.parent.id,a.name);if(bt[c]===a)bt[c]=a.cb;else for(c=bt[c];c;){if(c.cb===a){c.cb=a.cb;break}c=c.cb}}function It(a,c){var d=Pe(a.mode)?(d=Zt(a,"x"))?d:a.La.lookup?0:2:54;if(d)throw new x(d);for(d=bt[fi(a.id,c)];d;d=d.cb){var g=d.name;if(d.parent.id===a.id&&g===c)return d}return a.La.lookup(a,c)}function ca(a,c,d,g){return a=new Uu(a,c,d,g),c=fi(a.parent.id,a.name),a.cb=bt[c],bt[c]=a}function Pe(a){return(a&61440)===16384}function Zt(a,c){return la?0:c.includes("r")&&!(a.mode&292)||c.includes("w")&&!(a.mode&146)||c.includes("x")&&!(a.mode&73)?2:0}function ua(a,c){if(!Pe(a.mode))return 54;try{return It(a,c),20}catch{}return Zt(a,"wx")}function da(a,c,d){try{var g=It(a,c)}catch(h){return h.Pa}if(a=Zt(a,"wx"))return a;if(d){if(!Pe(g.mode))return 54;if(g===g.parent||gi(g)==="/")return 10}else if(Pe(g.mode))return 31;return 0}function En(a){if(!a)throw new x(63);return a}function Te(a){if(a=Xt[a],!a)throw new x(8);return a}function ma(a,c=-1){if(a=Object.assign(new Iu,a),c==-1)e:{for(c=0;4096>=c;c++)if(!Xt[c])break e;throw new x(33)}return a.fd=c,Xt[c]=a}function Fu(a,c=-1){return a=ma(a,c),a.Ma?.ec?.(a),a}function yi(a,c,d){var g=a?.Ma.Ua;a=g?a:c,g??=c.La.Ua,En(g),g(a,d)}var Ou={open(a){a.Ma=ra[a.node.rdev].Ma,a.Ma.open?.(a)},Va(){throw new x(70)}};function _i(a,c){ra[a]={Ma:c}}function pa(a,c){var d=c==="/";if(d&&pi)throw new x(10);if(!d&&c){var g=Ne(c,{pb:!1});if(c=g.path,g=g.node,g.bb)throw new x(10);if(!Pe(g.mode))throw new x(54)}c={type:a,kc:{},Db:c,Vb:[]},a=a.Xa(c),a.Xa=c,c.root=a,d?pi=a:g&&(g.bb=c,g.Xa&&g.Xa.Vb.push(c))}function Rn(a,c,d){var g=Ne(a,{parent:!0}).node;if(a=Dn(a),!a)throw new x(28);if(a==="."||a==="..")throw new x(20);var h=ua(g,a);if(h)throw new x(h);if(!g.La.ib)throw new x(63);return g.La.ib(g,a,c,d)}function Nu(a,c=438){return Rn(a,c&4095|32768,0)}function et(a,c=511){return Rn(a,c&1023|16384,0)}function In(a,c,d){typeof d>"u"&&(d=c,c=438),Rn(a,c|8192,d)}function bi(a,c){if(!Au(a))throw new x(44);var d=Ne(c,{parent:!0}).node;if(!d)throw new x(44);c=Dn(c);var g=ua(d,c);if(g)throw new x(g);if(!d.La.symlink)throw new x(63);d.La.symlink(d,c,a)}function ga(a){var c=Ne(a,{parent:!0}).node;a=Dn(a);var d=It(c,a),g=da(c,a,!0);if(g)throw new x(g);if(!c.La.rmdir)throw new x(63);if(d.bb)throw new x(10);c.La.rmdir(c,a),hi(d)}function fa(a){var c=Ne(a,{parent:!0}).node;if(!c)throw new x(44);a=Dn(a);var d=It(c,a),g=da(c,a,!1);if(g)throw new x(g);if(!c.La.unlink)throw new x(63);if(d.bb)throw new x(10);c.La.unlink(c,a),hi(d)}function vs(a,c){return a=Ne(a,{ab:!c}).node,En(a.La.Ta)(a)}function ha(a,c,d,g){yi(a,c,{mode:d&4095|c.mode&-4096,ctime:Date.now(),Lb:g})}function Un(a,c){a=typeof a=="string"?Ne(a,{ab:!0}).node:a,ha(null,a,c)}function ya(a,c,d){if(Pe(c.mode))throw new x(31);if((c.mode&61440)!==32768)throw new x(28);var g=Zt(c,"w");if(g)throw new x(g);yi(a,c,{size:d,timestamp:Date.now()})}function es(a,c,d=438){if(a==="")throw new x(44);if(typeof c=="string"){var g={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090}[c];if(typeof g>"u")throw Error(`Unknown file open mode: ${c}`);c=g}if(d=c&64?d&4095|32768:0,typeof a=="object")g=a;else{var h=a.endsWith("/"),k=Ne(a,{ab:!(c&131072),Wb:!0});g=k.node,a=k.path}if(k=!1,c&64)if(g){if(c&128)throw new x(20)}else{if(h)throw new x(31);g=Rn(a,d|511,0),k=!0}if(!g)throw new x(44);if((g.mode&61440)===8192&&(c&=-513),c&65536&&!Pe(g.mode))throw new x(54);if(!k&&(g?(g.mode&61440)===40960?h=32:(h=["r","w","rw"][c&3],c&512&&(h+="w"),h=Pe(g.mode)&&(h!=="r"||c&576)?31:Zt(g,h)):h=44,h))throw new x(h);return c&512&&!k&&(h=g,h=typeof h=="string"?Ne(h,{ab:!0}).node:h,ya(null,h,0)),c=ma({node:g,path:gi(g),flags:c&-131713,seekable:!0,position:0,Ma:g.Ma,Yb:[],error:!1}),c.Ma.open&&c.Ma.open(c),k&&Un(g,d&511),c}function Ci(a){if(a.fd===null)throw new x(8);a.rb&&(a.rb=null);try{a.Ma.close&&a.Ma.close(a)}catch(c){throw c}finally{Xt[a.fd]=null}a.fd=null}function _a(a,c,d){if(a.fd===null)throw new x(8);if(!a.seekable||!a.Ma.Va)throw new x(70);if(d!=0&&d!=1&&d!=2)throw new x(28);a.position=a.Ma.Va(a,c,d),a.Yb=[]}function ba(a,c,d,g,h){if(0>g||0>h)throw new x(28);if(a.fd===null)throw new x(8);if((a.flags&2097155)===1)throw new x(8);if(Pe(a.node.mode))throw new x(31);if(!a.Ma.read)throw new x(28);var k=typeof h<"u";if(!k)h=a.position;else if(!a.seekable)throw new x(70);return c=a.Ma.read(a,c,d,g,h),k||(a.position+=c),c}function Ca(a,c,d,g,h){if(0>g||0>h)throw new x(28);if(a.fd===null)throw new x(8);if((a.flags&2097155)===0)throw new x(8);if(Pe(a.node.mode))throw new x(31);if(!a.Ma.write)throw new x(28);a.seekable&&a.flags&1024&&_a(a,0,2);var k=typeof h<"u";if(!k)h=a.position;else if(!a.seekable)throw new x(70);return c=a.Ma.write(a,c,d,g,h,void 0),k||(a.position+=c),c}function Lu(a){var c=c||0,d="binary";d!=="utf8"&&d!=="binary"&&yt(`Invalid encoding type "${d}"`),c=es(a,c),a=vs(a).size;var g=new Uint8Array(a);return ba(c,g,0,a,0),d==="utf8"&&(g=Ms(g)),Ci(c),g}function Ct(a,c,d){a=di("/dev/"+a);var g=ia(!!c,!!d);Ct.Cb??(Ct.Cb=64);var h=Ct.Cb++<<8|0;_i(h,{open(k){k.seekable=!1},close(){d?.buffer?.length&&d(10)},read(k,T,F,V){for(var L=0,le=0;le<V;le++){try{var ke=c()}catch{throw new x(29)}if(ke===void 0&&L===0)throw new x(6);if(ke==null)break;L++,T[F+le]=ke}return L&&(k.node.atime=Date.now()),L},write(k,T,F,V){for(var L=0;L<V;L++)try{d(T[F+L])}catch{throw new x(29)}return V&&(k.node.mtime=k.node.ctime=Date.now()),L}}),In(a,g,h)}var ae={};function Ut(a,c,d){if(c.charAt(0)==="/")return c;if(a=a===-100?"/":Te(a).path,c.length==0){if(!d)throw new x(44);return a}return a+"/"+c}function Fn(a,c){X[a>>2]=c.dev,X[a+4>>2]=c.mode,X[a+8>>2]=c.nlink,X[a+12>>2]=c.uid,X[a+16>>2]=c.gid,X[a+20>>2]=c.rdev,De[a+24>>3]=BigInt(c.size),re[a+32>>2]=4096,re[a+36>>2]=c.blocks;var d=c.atime.getTime(),g=c.mtime.getTime(),h=c.ctime.getTime();return De[a+40>>3]=BigInt(Math.floor(d/1e3)),X[a+48>>2]=d%1e3*1e6,De[a+56>>3]=BigInt(Math.floor(g/1e3)),X[a+64>>2]=g%1e3*1e6,De[a+72>>3]=BigInt(Math.floor(h/1e3)),X[a+80>>2]=h%1e3*1e6,De[a+88>>3]=BigInt(c.ino),0}var On=void 0,Nn=()=>{var a=re[+On>>2];return On+=4,a},ki=0,Gu=[0,31,60,91,121,152,182,213,244,274,305,335],ju=[0,31,59,90,120,151,181,212,243,273,304,334],Ps={},ka=a=>{j=a,xn||0<ki||(i.onExit?.(a),te=!0),p(a,new Y(a))},Bu=a=>{if(!te)try{a()}catch(c){c instanceof Y||c=="unwind"||p(1,c)}finally{if(!(xn||0<ki))try{j=a=j,ka(a)}catch(c){c instanceof Y||c=="unwind"||p(1,c)}}},Si={},Sa=()=>{if(!wi){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:(globalThis.navigator?.language??"C").replace("-","_")+".UTF-8",_:m||"./this.program"},c;for(c in Si)Si[c]===void 0?delete a[c]:a[c]=Si[c];var d=[];for(c in a)d.push(`${c}=${a[c]}`);wi=d}return wi},wi,qu=(a,c,d,g)=>{var h={string:L=>{var le=0;if(L!=null&&L!==0){le=Yt(L)+1;var ke=Ot(le);Ze(L,O,ke,le),le=ke}return le},array:L=>{var le=Ot(L.length);return D.set(L,le),le}};a=i["_"+a];var k=[],T=0;if(g)for(var F=0;F<g.length;F++){var V=h[d[F]];V?(T===0&&(T=Bn()),k[F]=V(g[F])):k[F]=g[F]}return d=a(...k),d=(function(L){return T!==0&&jn(T),c==="string"?ge(L):c==="boolean"?!!L:L})(d)},Ln=a=>{var c=Yt(a)+1,d=Gn(c);return d&&Ze(a,O,d,c),d},Ft,Ti=[],kt=a=>{Ft.delete(St.get(a)),St.set(a,null),Ti.push(a)},wa=a=>{let c=a.length;return[c%128|128,c>>7,...a]},zu={i:127,p:127,j:126,f:125,d:124,e:111},Ta=a=>wa(Array.from(a,c=>zu[c])),As=(a,c)=>{if(!Ft){Ft=new WeakMap;var d=St.length;if(Ft)for(var g=0;g<0+d;g++){var h=St.get(g);h&&Ft.set(h,g)}}if(d=Ft.get(a)||0)return d;d=Ti.length?Ti.pop():St.grow(1);try{St.set(d,a)}catch(k){if(!(k instanceof TypeError))throw k;c=Uint8Array.of(0,97,115,109,1,0,0,0,1,...wa([1,96,...Ta(c.slice(1)),...Ta(c[0]==="v"?"":c[0])]),2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0),c=new WebAssembly.Module(c),c=new WebAssembly.Instance(c,{e:{f:a}}).exports.f,St.set(d,c)}return Ft.set(a,d),d};if(bt=Array(4096),pa(N,"/"),et("/tmp"),et("/home"),et("/home/web_user"),(function(){et("/dev"),_i(259,{read:()=>0,write:(g,h,k,T)=>T,Va:()=>0}),In("/dev/null",259),oa(1280,Du),oa(1536,Eu),In("/dev/tty",1280),In("/dev/tty1",1536);var a=new Uint8Array(1024),c=0,d=()=>(c===0&&(sa(a),c=a.byteLength),a[--c]);Ct("random",d),Ct("urandom",d),et("/dev/shm"),et("/dev/shm/tmp")})(),(function(){et("/proc");var a=et("/proc/self");et("/proc/self/fd"),pa({Xa(){var c=ca(a,"fd",16895,73);return c.Ma={Va:N.Ma.Va},c.La={lookup(d,g){d=+g;var h=Te(d);return d={parent:null,Xa:{Db:"fake"},La:{readlink:()=>h.path},id:d+1},d.parent=d},readdir(){return Array.from(Xt.entries()).filter(([,d])=>d).map(([d])=>d.toString())}},c}},"/proc/self/fd")})(),i.noExitRuntime&&(xn=i.noExitRuntime),i.print&&(I=i.print),i.printErr&&(P=i.printErr),i.wasmBinary&&(U=i.wasmBinary),i.thisProgram&&(m=i.thisProgram),i.preInit)for(typeof i.preInit=="function"&&(i.preInit=[i.preInit]);0<i.preInit.length;)i.preInit.shift()();i.stackSave=()=>Bn(),i.stackRestore=a=>jn(a),i.stackAlloc=a=>Ot(a),i.cwrap=(a,c,d,g)=>{var h=!d||d.every(k=>k==="number"||k==="boolean");return c!=="string"&&h&&!g?i["_"+a]:(...k)=>qu(a,c,d,k)},i.addFunction=As,i.removeFunction=kt,i.UTF8ToString=ge,i.stringToNewUTF8=Ln,i.writeArrayToMemory=(a,c)=>{D.set(a,c)};var Gn,xs,Ma,va,jn,Ot,Bn,qn,St,$u={a:(a,c,d,g)=>yt(`Assertion failed: ${ge(a)}, at: `+[c?ge(c):"unknown filename",d,g?ge(g):"unknown function"]),i:function(a,c){try{return a=ge(a),Un(a,c),0}catch(d){if(typeof ae>"u"||d.name!=="ErrnoError")throw d;return-d.Pa}},L:function(a,c,d){try{if(c=ge(c),c=Ut(a,c),d&-8)return-28;var g=Ne(c,{ab:!0}).node;return g?(a="",d&4&&(a+="r"),d&2&&(a+="w"),d&1&&(a+="x"),a&&Zt(g,a)?-2:0):-44}catch(h){if(typeof ae>"u"||h.name!=="ErrnoError")throw h;return-h.Pa}},j:function(a,c){try{var d=Te(a);return ha(d,d.node,c,!1),0}catch(g){if(typeof ae>"u"||g.name!=="ErrnoError")throw g;return-g.Pa}},h:function(a){try{var c=Te(a);return yi(c,c.node,{timestamp:Date.now(),Lb:!1}),0}catch(d){if(typeof ae>"u"||d.name!=="ErrnoError")throw d;return-d.Pa}},b:function(a,c,d){On=d;try{var g=Te(a);switch(c){case 0:var h=Nn();if(0>h)break;for(;Xt[h];)h++;return Fu(g,h).fd;case 1:case 2:return 0;case 3:return g.flags;case 4:return h=Nn(),g.flags|=h,0;case 12:return h=Nn(),oe[h+0>>1]=2,0;case 13:case 14:return 0}return-28}catch(k){if(typeof ae>"u"||k.name!=="ErrnoError")throw k;return-k.Pa}},g:function(a,c){try{var d=Te(a),g=d.node,h=d.Ma.Ta;a=h?d:g,h??=g.La.Ta,En(h);var k=h(a);return Fn(c,k)}catch(T){if(typeof ae>"u"||T.name!=="ErrnoError")throw T;return-T.Pa}},H:function(a,c){c=-9007199254740992>c||9007199254740992<c?NaN:Number(c);try{if(isNaN(c))return-61;var d=Te(a);if(0>c||(d.flags&2097155)===0)throw new x(28);return ya(d,d.node,c),0}catch(g){if(typeof ae>"u"||g.name!=="ErrnoError")throw g;return-g.Pa}},G:function(a,c){try{if(c===0)return-28;var d=Yt("/")+1;return c<d?-68:(Ze("/",O,a,c),d)}catch(g){if(typeof ae>"u"||g.name!=="ErrnoError")throw g;return-g.Pa}},K:function(a,c){try{return a=ge(a),Fn(c,vs(a,!0))}catch(d){if(typeof ae>"u"||d.name!=="ErrnoError")throw d;return-d.Pa}},C:function(a,c,d){try{return c=ge(c),c=Ut(a,c),et(c,d),0}catch(g){if(typeof ae>"u"||g.name!=="ErrnoError")throw g;return-g.Pa}},J:function(a,c,d,g){try{c=ge(c);var h=g&256;return c=Ut(a,c,g&4096),Fn(d,h?vs(c,!0):vs(c))}catch(k){if(typeof ae>"u"||k.name!=="ErrnoError")throw k;return-k.Pa}},x:function(a,c,d,g){On=g;try{c=ge(c),c=Ut(a,c);var h=g?Nn():0;return es(c,d,h).fd}catch(k){if(typeof ae>"u"||k.name!=="ErrnoError")throw k;return-k.Pa}},v:function(a,c,d,g){try{if(c=ge(c),c=Ut(a,c),0>=g)return-28;var h=Ne(c).node;if(!h)throw new x(44);if(!h.La.readlink)throw new x(28);var k=h.La.readlink(h),T=Math.min(g,Yt(k)),F=D[d+T];return Ze(k,O,d,g+1),D[d+T]=F,T}catch(V){if(typeof ae>"u"||V.name!=="ErrnoError")throw V;return-V.Pa}},u:function(a){try{return a=ge(a),ga(a),0}catch(c){if(typeof ae>"u"||c.name!=="ErrnoError")throw c;return-c.Pa}},f:function(a,c){try{return a=ge(a),Fn(c,vs(a))}catch(d){if(typeof ae>"u"||d.name!=="ErrnoError")throw d;return-d.Pa}},r:function(a,c,d){try{if(c=ge(c),c=Ut(a,c),d)if(d===512)ga(c);else return-28;else fa(c);return 0}catch(g){if(typeof ae>"u"||g.name!=="ErrnoError")throw g;return-g.Pa}},q:function(a,c,d){try{c=ge(c),c=Ut(a,c,!0);var g=Date.now(),h,k;if(d){var T=X[d>>2]+4294967296*re[d+4>>2],F=re[d+8>>2];F==1073741823?h=g:F==1073741822?h=null:h=1e3*T+F/1e6,d+=16,T=X[d>>2]+4294967296*re[d+4>>2],F=re[d+8>>2],F==1073741823?k=g:F==1073741822?k=null:k=1e3*T+F/1e6}else k=h=g;if((k??h)!==null){a=h;var V=Ne(c,{ab:!0}).node;En(V.La.Ua)(V,{atime:a,mtime:k})}return 0}catch(L){if(typeof ae>"u"||L.name!=="ErrnoError")throw L;return-L.Pa}},m:()=>yt(""),l:()=>{xn=!1,ki=0},A:function(a,c){a=-9007199254740992>a||9007199254740992<a?NaN:Number(a),a=new Date(1e3*a),re[c>>2]=a.getSeconds(),re[c+4>>2]=a.getMinutes(),re[c+8>>2]=a.getHours(),re[c+12>>2]=a.getDate(),re[c+16>>2]=a.getMonth(),re[c+20>>2]=a.getFullYear()-1900,re[c+24>>2]=a.getDay();var d=a.getFullYear();re[c+28>>2]=(d%4!==0||d%100===0&&d%400!==0?ju:Gu)[a.getMonth()]+a.getDate()-1|0,re[c+36>>2]=-(60*a.getTimezoneOffset()),d=new Date(a.getFullYear(),6,1).getTimezoneOffset();var g=new Date(a.getFullYear(),0,1).getTimezoneOffset();re[c+32>>2]=(d!=g&&a.getTimezoneOffset()==Math.min(g,d))|0},y:function(a,c,d,g,h,k,T){h=-9007199254740992>h||9007199254740992<h?NaN:Number(h);try{var F=Te(g);if((c&2)!==0&&(d&2)===0&&(F.flags&2097155)!==2)throw new x(2);if((F.flags&2097155)===1)throw new x(2);if(!F.Ma.jb)throw new x(43);if(!a)throw new x(28);var V=F.Ma.jb(F,a,h,c,d),L=V.Xb;return re[k>>2]=V.Eb,X[T>>2]=L,0}catch(le){if(typeof ae>"u"||le.name!=="ErrnoError")throw le;return-le.Pa}},z:function(a,c,d,g,h,k){k=-9007199254740992>k||9007199254740992<k?NaN:Number(k);try{var T=Te(h);if(d&2){if(d=k,(T.node.mode&61440)!==32768)throw new x(43);if(!(g&2)){var F=O.slice(a,a+c);T.Ma.kb&&T.Ma.kb(T,F,d,c,g)}}}catch(V){if(typeof ae>"u"||V.name!=="ErrnoError")throw V;return-V.Pa}},n:(a,c)=>{if(Ps[a]&&(clearTimeout(Ps[a].id),delete Ps[a]),!c)return 0;var d=setTimeout(()=>{delete Ps[a],Bu(()=>va(a,performance.now()))},c);return Ps[a]={id:d,lc:c},0},B:(a,c,d,g)=>{var h=new Date().getFullYear(),k=new Date(h,0,1).getTimezoneOffset();h=new Date(h,6,1).getTimezoneOffset(),X[a>>2]=60*Math.max(k,h),re[c>>2]=+(k!=h),c=T=>{var F=Math.abs(T);return`UTC${0<=T?"-":"+"}${String(Math.floor(F/60)).padStart(2,"0")}${String(F%60).padStart(2,"0")}`},a=c(k),c=c(h),h<k?(Ze(a,O,d,17),Ze(c,O,g,17)):(Ze(a,O,g,17),Ze(c,O,d,17))},d:()=>Date.now(),s:()=>2147483648,c:()=>performance.now(),o:a=>{var c=O.length;if(a>>>=0,2147483648<a)return!1;for(var d=1;4>=d;d*=2){var g=c*(1+.2/d);g=Math.min(g,a+100663296);e:{g=(Math.min(2147483648,65536*Math.ceil(Math.max(a,g)/65536))-qn.buffer.byteLength+65535)/65536|0;try{qn.grow(g),ks();var h=1;break e}catch{}h=void 0}if(h)return!0}return!1},E:(a,c)=>{var d=0,g=0,h;for(h of Sa()){var k=c+d;X[a+g>>2]=k,d+=Ze(h,O,k,1/0)+1,g+=4}return 0},F:(a,c)=>{var d=Sa();X[a>>2]=d.length,a=0;for(var g of d)a+=Yt(g)+1;return X[c>>2]=a,0},e:function(a){try{var c=Te(a);return Ci(c),0}catch(d){if(typeof ae>"u"||d.name!=="ErrnoError")throw d;return d.Pa}},p:function(a,c){try{var d=Te(a);return D[c]=d.tty?2:Pe(d.mode)?3:(d.mode&61440)===40960?7:4,oe[c+2>>1]=0,De[c+8>>3]=BigInt(0),De[c+16>>3]=BigInt(0),0}catch(g){if(typeof ae>"u"||g.name!=="ErrnoError")throw g;return g.Pa}},w:function(a,c,d,g){try{e:{var h=Te(a);a=c;for(var k,T=c=0;T<d;T++){var F=X[a>>2],V=X[a+4>>2];a+=8;var L=ba(h,D,F,V,k);if(0>L){var le=-1;break e}if(c+=L,L<V)break;typeof k<"u"&&(k+=L)}le=c}return X[g>>2]=le,0}catch(ke){if(typeof ae>"u"||ke.name!=="ErrnoError")throw ke;return ke.Pa}},D:function(a,c,d,g){c=-9007199254740992>c||9007199254740992<c?NaN:Number(c);try{if(isNaN(c))return 61;var h=Te(a);return _a(h,c,d),De[g>>3]=BigInt(h.position),h.rb&&c===0&&d===0&&(h.rb=null),0}catch(k){if(typeof ae>"u"||k.name!=="ErrnoError")throw k;return k.Pa}},I:function(a){try{var c=Te(a);return c.Ma?.fsync?.(c)}catch(d){if(typeof ae>"u"||d.name!=="ErrnoError")throw d;return d.Pa}},t:function(a,c,d,g){try{e:{var h=Te(a);a=c;for(var k,T=c=0;T<d;T++){var F=X[a>>2],V=X[a+4>>2];a+=8;var L=Ca(h,D,F,V,k);if(0>L){var le=-1;break e}if(c+=L,L<V)break;typeof k<"u"&&(k+=L)}le=c}return X[g>>2]=le,0}catch(ke){if(typeof ae>"u"||ke.name!=="ErrnoError")throw ke;return ke.Pa}},k:ka};function Mi(){function a(){if(i.calledRun=!0,!te){if(!i.noFSInit&&!aa){var c,d;aa=!0,c??=i.stdin,d??=i.stdout,g??=i.stderr,c?Ct("stdin",c):bi("/dev/tty","/dev/stdin"),d?Ct("stdout",null,d):bi("/dev/tty","/dev/stdout"),g?Ct("stderr",null,g):bi("/dev/tty1","/dev/stderr"),es("/dev/stdin",0),es("/dev/stdout",1),es("/dev/stderr",1)}if(vi.N(),la=!1,i.onRuntimeInitialized?.(),i.postRun)for(typeof i.postRun=="function"&&(i.postRun=[i.postRun]);i.postRun.length;){var g=i.postRun.shift();_t.push(g)}we(_t)}}if(0<Rt)ws=Mi;else{if(i.preRun)for(typeof i.preRun=="function"&&(i.preRun=[i.preRun]);i.preRun.length;)Ss();we(Qt),0<Rt?ws=Mi:i.setStatus?(i.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>i.setStatus(""),1),a()},1)):a()}}var vi;return(async function(){function a(d){return d=vi=d.exports,i._sqlite3_free=d.P,i._sqlite3_value_text=d.Q,i._sqlite3_prepare_v2=d.R,i._sqlite3_step=d.S,i._sqlite3_reset=d.T,i._sqlite3_exec=d.U,i._sqlite3_finalize=d.V,i._sqlite3_column_name=d.W,i._sqlite3_column_text=d.X,i._sqlite3_column_type=d.Y,i._sqlite3_errmsg=d.Z,i._sqlite3_clear_bindings=d._,i._sqlite3_value_blob=d.$,i._sqlite3_value_bytes=d.aa,i._sqlite3_value_double=d.ba,i._sqlite3_value_int=d.ca,i._sqlite3_value_type=d.da,i._sqlite3_result_blob=d.ea,i._sqlite3_result_double=d.fa,i._sqlite3_result_error=d.ga,i._sqlite3_result_int=d.ha,i._sqlite3_result_int64=d.ia,i._sqlite3_result_null=d.ja,i._sqlite3_result_text=d.ka,i._sqlite3_aggregate_context=d.la,i._sqlite3_column_count=d.ma,i._sqlite3_data_count=d.na,i._sqlite3_column_blob=d.oa,i._sqlite3_column_bytes=d.pa,i._sqlite3_column_double=d.qa,i._sqlite3_bind_blob=d.ra,i._sqlite3_bind_double=d.sa,i._sqlite3_bind_int=d.ta,i._sqlite3_bind_text=d.ua,i._sqlite3_bind_parameter_index=d.va,i._sqlite3_sql=d.wa,i._sqlite3_normalized_sql=d.xa,i._sqlite3_changes=d.ya,i._sqlite3_close_v2=d.za,i._sqlite3_create_function_v2=d.Aa,i._sqlite3_update_hook=d.Ba,i._sqlite3_open=d.Ca,Gn=i._malloc=d.Da,xs=i._free=d.Ea,i._RegisterExtensionFunctions=d.Fa,Ma=d.Ga,va=d.Ha,jn=d.Ia,Ot=d.Ja,Bn=d.Ka,qn=d.M,St=d.O,ks(),Rt--,i.monitorRunDependencies?.(Rt),Rt==0&&ws&&(d=ws,ws=null,d()),vi}Rt++,i.monitorRunDependencies?.(Rt);var c={a:$u};return i.instantiateWasm?new Promise(d=>{i.instantiateWasm(c,(g,h)=>{d(a(g,h))})}):(rt??=i.locateFile?i.locateFile("sql-wasm.wasm",y):y+"sql-wasm.wasm",a((await ui(c)).instance))})(),Mi(),s}),so)};typeof oo=="object"&&typeof jt=="object"?(jt.exports=no,jt.exports.default=no):typeof define=="function"&&define.amd?define([],function(){return no}):typeof oo=="object"&&(oo.Module=no)});var uo=be(ct=>{"use strict";Object.defineProperty(ct,"__esModule",{value:!0});ct.utf8Count=xm;ct.utf8EncodeJs=hl;ct.utf8EncodeTE=yl;ct.utf8Encode=Rm;ct.utf8DecodeJs=_l;ct.utf8DecodeTD=bl;ct.utf8Decode=Om;function xm(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 hl(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 l=n.charCodeAt(i);(l&64512)===56320&&(++i,r=((r&1023)<<10)+(l&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 Dm=new TextEncoder,Em=50;function yl(n,e,t){Dm.encodeInto(n,e.subarray(t))}function Rm(n,e,t){n.length>Em?yl(n,e,t):hl(n,e,t)}var Im=4096;function _l(n,e,t){let s=e,o=s+t,i=[],r="";for(;s<o;){let l=n[s++];if((l&128)===0)i.push(l);else if((l&224)===192){let u=n[s++]&63;i.push((l&31)<<6|u)}else if((l&240)===224){let u=n[s++]&63,m=n[s++]&63;i.push((l&31)<<12|u<<6|m)}else if((l&248)===240){let u=n[s++]&63,m=n[s++]&63,p=n[s++]&63,f=(l&7)<<18|u<<12|m<<6|p;f>65535&&(f-=65536,i.push(f>>>10&1023|55296),f=56320|f&1023),i.push(f)}else i.push(l);i.length>=Im&&(r+=String.fromCharCode(...i),i.length=0)}return i.length>0&&(r+=String.fromCharCode(...i)),r}var Um=new TextDecoder,Fm=200;function bl(n,e,t){let s=n.subarray(e,e+t);return Um.decode(s)}function Om(n,e,t){return t>Fm?bl(n,e,t):_l(n,e,t)}});var Bi=be(mo=>{"use strict";Object.defineProperty(mo,"__esModule",{value:!0});mo.ExtData=void 0;var ji=class{type;data;constructor(e,t){this.type=e,this.data=t}};mo.ExtData=ji});var go=be(po=>{"use strict";Object.defineProperty(po,"__esModule",{value:!0});po.DecodeError=void 0;var qi=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})}};po.DecodeError=qi});var fo=be(Mt=>{"use strict";Object.defineProperty(Mt,"__esModule",{value:!0});Mt.UINT32_MAX=void 0;Mt.setUint64=Nm;Mt.setInt64=Lm;Mt.getInt64=Gm;Mt.getUint64=jm;Mt.UINT32_MAX=4294967295;function Nm(n,e,t){let s=t/4294967296,o=t;n.setUint32(e,s),n.setUint32(e+4,o)}function Lm(n,e,t){let s=Math.floor(t/4294967296),o=t;n.setUint32(e,s),n.setUint32(e+4,o)}function Gm(n,e){let t=n.getInt32(e),s=n.getUint32(e+4);return t*4294967296+s}function jm(n,e){let t=n.getUint32(e),s=n.getUint32(e+4);return t*4294967296+s}});var zi=be(je=>{"use strict";Object.defineProperty(je,"__esModule",{value:!0});je.timestampExtension=je.EXT_TIMESTAMP=void 0;je.encodeTimeSpecToTimestamp=kl;je.encodeDateToTimeSpec=Sl;je.encodeTimestampExtension=wl;je.decodeTimestampToTimeSpec=Tl;je.decodeTimestampExtension=Ml;var Bm=go(),Cl=fo();je.EXT_TIMESTAMP=-1;var qm=4294967296-1,zm=17179869184-1;function kl({sec:n,nsec:e}){if(n>=0&&e>=0&&n<=zm)if(e===0&&n<=qm){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,Cl.setInt64)(s,4,n),t}}function Sl(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 wl(n){if(n instanceof Date){let e=Sl(n);return kl(e)}else return null}function Tl(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,Cl.getInt64)(e,4),s=e.getUint32(0);return{sec:t,nsec:s}}default:throw new Bm.DecodeError(`Unrecognized data size for timestamp (expected 4, 8, or 12): ${n.length}`)}}function Ml(n){let e=Tl(n);return new Date(e.sec*1e3+e.nsec/1e6)}je.timestampExtension={type:je.EXT_TIMESTAMP,encode:wl,decode:Ml}});var _o=be(yo=>{"use strict";Object.defineProperty(yo,"__esModule",{value:!0});yo.ExtensionCodec=void 0;var ho=Bi(),$m=zi(),$i=class n{static defaultCodec=new n;__brand;builtInEncoders=[];builtInDecoders=[];encoders=[];decoders=[];constructor(){this.register($m.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 ho.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 ho.ExtData(r,i)}}}return e instanceof ho.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 ho.ExtData(t,e)}};yo.ExtensionCodec=$i});var Hi=be(Wi=>{"use strict";Object.defineProperty(Wi,"__esModule",{value:!0});Wi.ensureUint8Array=Hm;function Wm(n){return n instanceof ArrayBuffer||typeof SharedArrayBuffer<"u"&&n instanceof SharedArrayBuffer}function Hm(n){return n instanceof Uint8Array?n:ArrayBuffer.isView(n)?new Uint8Array(n.buffer,n.byteOffset,n.byteLength):Wm(n)?new Uint8Array(n):Uint8Array.from(n)}});var Vi=be(nt=>{"use strict";Object.defineProperty(nt,"__esModule",{value:!0});nt.Encoder=nt.DEFAULT_INITIAL_BUFFER_SIZE=nt.DEFAULT_MAX_DEPTH=void 0;var vl=uo(),Jm=_o(),Pl=fo(),Vm=Hi();nt.DEFAULT_MAX_DEPTH=100;nt.DEFAULT_INITIAL_BUFFER_SIZE=2048;var Ji=class n{extensionCodec;context;useBigInt64;maxDepth;initialBufferSize;sortKeys;forceFloat32;ignoreUndefined;forceIntegerToFloat;pos;view;bytes;entered=!1;constructor(e){this.extensionCodec=e?.extensionCodec??Jm.ExtensionCodec.defaultCodec,this.context=e?.context,this.useBigInt64=e?.useBigInt64??!1,this.maxDepth=e?.maxDepth??nt.DEFAULT_MAX_DEPTH,this.initialBufferSize=e?.initialBufferSize??nt.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,vl.utf8Count)(e);this.ensureBufferSizeToWrite(5+s),this.writeStringHeader(s),(0,vl.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,Vm.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,Pl.setUint64)(this.view,this.pos,e),this.pos+=8}writeI64(e){this.ensureBufferSizeToWrite(8),(0,Pl.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}};nt.Encoder=Ji});var Al=be(Ki=>{"use strict";Object.defineProperty(Ki,"__esModule",{value:!0});Ki.encode=Qm;var Km=Vi();function Qm(n,e){return new Km.Encoder(e).encodeSharedRef(n)}});var xl=be(Qi=>{"use strict";Object.defineProperty(Qi,"__esModule",{value:!0});Qi.prettyByte=Ym;function Ym(n){return`${n<0?"-":""}0x${Math.abs(n).toString(16).padStart(2,"0")}`}});var Dl=be(bo=>{"use strict";Object.defineProperty(bo,"__esModule",{value:!0});bo.CachedKeyDecoder=void 0;var Xm=uo(),Zm=16,ep=16,Yi=class{hit=0;miss=0;caches;maxKeyLength;maxLengthPerKey;constructor(e=Zm,t=ep){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 l=0;l<s;l++)if(r[l]!==e[t+l])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,Xm.utf8DecodeJs)(e,t,s),r=Uint8Array.prototype.slice.call(e,t,t+s);return this.store(r,i),i}};bo.CachedKeyDecoder=Yi});var ko=be(Co=>{"use strict";Object.defineProperty(Co,"__esModule",{value:!0});Co.Decoder=void 0;var Xi=xl(),tp=_o(),$t=fo(),sp=uo(),El=Hi(),np=Dl(),ut=go(),Zi="array",$s="map_key",Il="map_value",op=n=>{if(typeof n=="string"||typeof n=="number")return n;throw new ut.DecodeError("The type of key must be string or number but "+typeof n)},er=class{stack=[];stackHeadPosition=-1;get length(){return this.stackHeadPosition+1}top(){return this.stack[this.stackHeadPosition]}pushArrayState(e){let t=this.getUninitializedStateFromPool();t.type=Zi,t.position=0,t.size=e,t.array=new Array(e)}pushMapState(e){let t=this.getUninitializedStateFromPool();t.type=$s,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===Zi){let s=e;s.size=0,s.array=void 0,s.position=0,s.type=void 0}if(e.type===$s||e.type===Il){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}},zs=-1,sr=new DataView(new ArrayBuffer(0)),ip=new Uint8Array(sr.buffer);try{sr.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 Rl=new RangeError("Insufficient data"),rp=new np.CachedKeyDecoder,tr=class n{extensionCodec;context;useBigInt64;rawStrings;maxStrLength;maxBinLength;maxArrayLength;maxMapLength;maxExtLength;keyDecoder;mapKeyConverter;totalPos=0;pos=0;view=sr;bytes=ip;headByte=zs;stack=new er;entered=!1;constructor(e){this.extensionCodec=e?.extensionCodec??tp.ExtensionCodec.defaultCodec,this.context=e?.context,this.useBigInt64=e?.useBigInt64??!1,this.rawStrings=e?.rawStrings??!1,this.maxStrLength=e?.maxStrLength??$t.UINT32_MAX,this.maxBinLength=e?.maxBinLength??$t.UINT32_MAX,this.maxArrayLength=e?.maxArrayLength??$t.UINT32_MAX,this.maxMapLength=e?.maxMapLength??$t.UINT32_MAX,this.maxExtLength=e?.maxExtLength??$t.UINT32_MAX,this.keyDecoder=e?.keyDecoder!==void 0?e.keyDecoder:rp,this.mapKeyConverter=e?.mapKeyConverter??op}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=zs,this.stack.reset()}setBuffer(e){let t=(0,El.ensureUint8Array)(e);this.bytes=t,this.view=new DataView(t.buffer,t.byteOffset,t.byteLength),this.pos=0}appendBuffer(e){if(this.headByte===zs&&!this.hasRemaining(1))this.setBuffer(e);else{let t=this.bytes.subarray(this.pos),s=(0,El.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 l of e){if(t)throw this.entered=!1,this.createExtraByteError(this.totalPos);this.appendBuffer(l);try{s=this.doDecodeSync(),t=!0}catch(u){if(!(u instanceof RangeError))throw u}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,Xi.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 ut.DecodeError(`Unrecognized type byte: ${(0,Xi.prettyByte)(e)}`);this.complete();let s=this.stack;for(;s.length>0;){let o=s.top();if(o.type===Zi)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===$s){if(t==="__proto__")throw new ut.DecodeError("The key __proto__ is not allowed");o.key=this.mapKeyConverter(t),o.type=Il;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=$s;continue e}}return t}}readHeadByte(){return this.headByte===zs&&(this.headByte=this.readU8()),this.headByte}complete(){this.headByte=zs}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 ut.DecodeError(`Unrecognized array type byte: ${(0,Xi.prettyByte)(e)}`)}}}pushMapState(e){if(e>this.maxMapLength)throw new ut.DecodeError(`Max length exceeded: map length (${e}) > maxMapLengthLength (${this.maxMapLength})`);this.stack.pushMapState(e)}pushArrayState(e){if(e>this.maxArrayLength)throw new ut.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 ut.DecodeError(`Max length exceeded: UTF-8 byte length (${e}) > maxStrLength (${this.maxStrLength})`);if(this.bytes.byteLength<this.pos+t+e)throw Rl;let s=this.pos+t,o;return this.stateIsMapKey()&&this.keyDecoder?.canBeCached(e)?o=this.keyDecoder.decode(this.bytes,s,e):o=(0,sp.utf8Decode)(this.bytes,s,e),this.pos+=t+e,o}stateIsMapKey(){return this.stack.length>0?this.stack.top().type===$s:!1}decodeBinary(e,t){if(e>this.maxBinLength)throw new ut.DecodeError(`Max length exceeded: bin length (${e}) > maxBinLength (${this.maxBinLength})`);if(!this.hasRemaining(e+t))throw Rl;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 ut.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,$t.getUint64)(this.view,this.pos);return this.pos+=8,e}readI64(){let e=(0,$t.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}};Co.Decoder=tr});var Fl=be(So=>{"use strict";Object.defineProperty(So,"__esModule",{value:!0});So.decode=ap;So.decodeMulti=lp;var Ul=ko();function ap(n,e){return new Ul.Decoder(e).decode(n)}function lp(n,e){return new Ul.Decoder(e).decodeMulti(n)}});var Ll=be(Ws=>{"use strict";Object.defineProperty(Ws,"__esModule",{value:!0});Ws.isAsyncIterable=Ol;Ws.asyncIterableFromStream=Nl;Ws.ensureAsyncIterable=cp;function Ol(n){return n[Symbol.asyncIterator]!=null}async function*Nl(n){let e=n.getReader();try{for(;;){let{done:t,value:s}=await e.read();if(t)return;yield s}}finally{e.releaseLock()}}function cp(n){return Ol(n)?n:Nl(n)}});var Gl=be(Hs=>{"use strict";Object.defineProperty(Hs,"__esModule",{value:!0});Hs.decodeAsync=up;Hs.decodeArrayStream=dp;Hs.decodeMultiStream=mp;var nr=ko(),or=Ll();async function up(n,e){let t=(0,or.ensureAsyncIterable)(n);return new nr.Decoder(e).decodeAsync(t)}function dp(n,e){let t=(0,or.ensureAsyncIterable)(n);return new nr.Decoder(e).decodeArrayStream(t)}function mp(n,e){let t=(0,or.ensureAsyncIterable)(n);return new nr.Decoder(e).decodeStream(t)}});var rr=be(z=>{"use strict";Object.defineProperty(z,"__esModule",{value:!0});z.decodeTimestampExtension=z.encodeTimestampExtension=z.decodeTimestampToTimeSpec=z.encodeTimeSpecToTimestamp=z.encodeDateToTimeSpec=z.EXT_TIMESTAMP=z.ExtData=z.ExtensionCodec=z.Encoder=z.DecodeError=z.Decoder=z.decodeMultiStream=z.decodeArrayStream=z.decodeAsync=z.decodeMulti=z.decode=z.encode=void 0;var pp=Al();Object.defineProperty(z,"encode",{enumerable:!0,get:function(){return pp.encode}});var jl=Fl();Object.defineProperty(z,"decode",{enumerable:!0,get:function(){return jl.decode}});Object.defineProperty(z,"decodeMulti",{enumerable:!0,get:function(){return jl.decodeMulti}});var ir=Gl();Object.defineProperty(z,"decodeAsync",{enumerable:!0,get:function(){return ir.decodeAsync}});Object.defineProperty(z,"decodeArrayStream",{enumerable:!0,get:function(){return ir.decodeArrayStream}});Object.defineProperty(z,"decodeMultiStream",{enumerable:!0,get:function(){return ir.decodeMultiStream}});var gp=ko();Object.defineProperty(z,"Decoder",{enumerable:!0,get:function(){return gp.Decoder}});var fp=go();Object.defineProperty(z,"DecodeError",{enumerable:!0,get:function(){return fp.DecodeError}});var hp=Vi();Object.defineProperty(z,"Encoder",{enumerable:!0,get:function(){return hp.Encoder}});var yp=_o();Object.defineProperty(z,"ExtensionCodec",{enumerable:!0,get:function(){return yp.ExtensionCodec}});var _p=Bi();Object.defineProperty(z,"ExtData",{enumerable:!0,get:function(){return _p.ExtData}});var cs=zi();Object.defineProperty(z,"EXT_TIMESTAMP",{enumerable:!0,get:function(){return cs.EXT_TIMESTAMP}});Object.defineProperty(z,"encodeDateToTimeSpec",{enumerable:!0,get:function(){return cs.encodeDateToTimeSpec}});Object.defineProperty(z,"encodeTimeSpecToTimestamp",{enumerable:!0,get:function(){return cs.encodeTimeSpecToTimestamp}});Object.defineProperty(z,"decodeTimestampToTimeSpec",{enumerable:!0,get:function(){return cs.decodeTimestampToTimeSpec}});Object.defineProperty(z,"encodeTimestampExtension",{enumerable:!0,get:function(){return cs.encodeTimestampExtension}});Object.defineProperty(z,"decodeTimestampExtension",{enumerable:!0,get:function(){return cs.decodeTimestampExtension}})});var vu=be((Yw,u_)=>{u_.exports={name:"@rajbos/ai-engineering-fluency",version:"0.2.12",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"},devDependencies:{"@msgpack/msgpack":"^3.1.3","@types/node":"^26.0.0",chalk:"^5.6.2",commander:"^15.0.0",esbuild:"^0.28.0","sql.js":"^1.12.0",typescript:"^6.0.2"},engines:{node:">=22.14.0"}}});var wt=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}},Lt=class extends wt{constructor(e){super(1,"commander.invalidArgument",e),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};var Ds=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 Lt(`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 $n(n){let e=n.name()+(n.variadic===!0?"...":"");return n.required?"<"+e+">":"["+e+"]"}var Ba=require("node:events"),Hn=v(require("node:child_process"),1),tt=v(require("node:path"),1),Rs=v(require("node:fs"),1),J=v(require("node:process"),1),qa=require("node:util");var Na=require("node:util"),Es=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=>$n(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(f,y){return t.formatItem(f,s,y,t)}let r=[`${t.styleTitle("Usage:")} ${t.styleUsage(t.commandUsage(e))}`,""],l=t.commandDescription(e);l.length>0&&(r=r.concat([t.boxWrap(t.styleCommandDescription(l),o),""]));let u=t.visibleArguments(e).map(f=>i(t.styleArgumentTerm(t.argumentTerm(f)),t.styleArgumentDescription(t.argumentDescription(f))));if(r=r.concat(this.formatItemList("Arguments:",u,t)),this.groupItems(e.options,t.visibleOptions(e),f=>f.helpGroupHeading??"Options:").forEach((f,y)=>{let _=f.map(C=>i(t.styleOptionTerm(t.optionTerm(C)),t.styleOptionDescription(t.optionDescription(C))));r=r.concat(this.formatItemList(y,_,t))}),t.showGlobalOptions){let f=t.visibleGlobalOptions(e).map(y=>i(t.styleOptionTerm(t.optionTerm(y)),t.styleOptionDescription(t.optionDescription(y))));r=r.concat(this.formatItemList("Global Options:",f,t))}return this.groupItems(e.commands,t.visibleCommands(e),f=>f.helpGroup()||"Commands:").forEach((f,y)=>{let _=f.map(C=>i(t.styleSubcommandTerm(t.subcommandTerm(C)),t.styleSubcommandDescription(t.subcommandDescription(C))));r=r.concat(this.formatItemList(y,_,t))}),r.join(`
4
- `)}displayWidth(e){return(0,Na.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 l=e.padEnd(t+e.length-o.displayWidth(e)),u=2,p=(this.helpWidth??80)-t-u-2,f;return p<this.minWidthToWrap||o.preformatted(s)?f=s:f=o.boxWrap(s,p).replace(/\n/g,`
5
- `+" ".repeat(t+u)),r+l+" ".repeat(u)+f.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 l=r.match(o);if(l===null){i.push("");return}let u=[l.shift()],m=this.displayWidth(u[0]);l.forEach(p=>{let f=this.displayWidth(p);if(m+f<=t){u.push(p),m+=f;return}i.push(u.join(""));let y=p.trimStart();u=[y],m=this.displayWidth(y)}),i.push(u.join(""))}),i.join(`
7
- `)}};var ts=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=Td(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 Lt(`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?La(this.name().replace(/^no-/,"")):La(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}},Wn=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 La(n){return n.split("-").reduce((e,t)=>e+t[0].toUpperCase()+t.slice(1))}function Td(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],l=`option creation failed due to '${r}' in option flags '${n}'`;throw/^-[^-][^-]/.test(r)?new Error(`${l}
2
+ "use strict";var rm=Object.create;var cl=Object.defineProperty;var am=Object.getOwnPropertyDescriptor;var lm=Object.getOwnPropertyNames;var cm=Object.getPrototypeOf,um=Object.prototype.hasOwnProperty;var Te=(n,e)=>()=>{try{return e||n((e={exports:{}}).exports,e),e.exports}catch(t){throw e=0,t}};var dm=(n,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of lm(e))!um.call(n,o)&&o!==t&&cl(n,o,{get:()=>e[o],enumerable:!(s=am(e,o))||s.enumerable});return n};var T=(n,e,t)=>(t=n!=null?rm(cm(n)):{},dm(e||!n||!n.__esModule?cl(t,"default",{value:n,enumerable:!0}):t,n));var Ss=Te((xo,ts)=>{var vo=void 0,Ao=function(n){return vo||(vo=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)}),ts=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(b,v){switch(typeof v){case"boolean":om(b,v?1:0);break;case"number":tm(b,v);break;case"string":sm(b,v,-1,-1);break;case"object":if(v===null)il(b);else if(v.length!=null){var I=lo(v.length);x.set(v,I),nm(b,I,v.length,-1),Js(I)}else po(b,"Wrong API use : tried to return a value of an unknown type ("+v+").",-1);break;default:il(b)}}function u(b,v){for(var I=[],O=0;O<b;O+=1){var $=Ye(v+4*O,"i32"),oe=Qd($);if(oe===1||oe===2)$=em($);else if(oe===3)$=Xd($);else if(oe===4){oe=$,$=Yd(oe),oe=Zd(oe);for(var Xe=new Uint8Array($),ze=0;ze<$;ze+=1)Xe[ze]=x[oe+ze];$=Xe}else $=null;I.push($)}return I}function d(b,v){this.Qa=b,this.db=v,this.Oa=1,this.mb=[]}function f(b,v){if(this.db=v,this.fb=ao(b),this.fb===null)throw Error("Unable to allocate memory for the SQL string");this.lb=this.fb,this.$a=this.sb=null}function y(b){if(this.filename="dbfile_"+(4294967295*Math.random()>>>0),b!=null){var v=this.filename,I="/",O=v;if(I&&(I=typeof I=="string"?I:$i(I),O=v?Jt(I+"/"+v):I),v=Ra(!0,!0),O=Md(O,v),b){if(typeof b=="string"){I=Array(b.length);for(var $=0,oe=b.length;$<oe;++$)I[$]=b.charCodeAt($);b=I}no(O,v|146),I=_s(O,577),Ja(I,b,0,b.length,0),Qi(I),no(O,v)}}this.handleError(L(this.filename,k)),this.db=Ye(k,"i32"),al(this.db),this.gb={},this.Sa={}}var k=Yt(4),M=i.cwrap,L=M("sqlite3_open","number",["string","number"]),ne=M("sqlite3_close_v2","number",["number"]),B=M("sqlite3_exec","number",["number","string","number","number","number"]),me=M("sqlite3_changes","number",["number"]),Pe=M("sqlite3_prepare_v2","number",["number","string","number","number","number"]),el=M("sqlite3_sql","string",["number"]),Id=M("sqlite3_normalized_sql","string",["number"]),tl=M("sqlite3_prepare_v2","number",["number","number","number","number","number"]),Ud=M("sqlite3_bind_text","number",["number","number","number","number","number"]),sl=M("sqlite3_bind_blob","number",["number","number","number","number","number"]),Od=M("sqlite3_bind_double","number",["number","number","number"]),Fd=M("sqlite3_bind_int","number",["number","number","number"]),Nd=M("sqlite3_bind_parameter_index","number",["number","string"]),Ld=M("sqlite3_step","number",["number"]),jd=M("sqlite3_errmsg","string",["number"]),Gd=M("sqlite3_column_count","number",["number"]),Bd=M("sqlite3_data_count","number",["number"]),qd=M("sqlite3_column_double","number",["number","number"]),nl=M("sqlite3_column_text","string",["number","number"]),zd=M("sqlite3_column_blob","number",["number","number"]),$d=M("sqlite3_column_bytes","number",["number","number"]),Wd=M("sqlite3_column_type","number",["number","number"]),Hd=M("sqlite3_column_name","string",["number","number"]),Jd=M("sqlite3_reset","number",["number"]),Vd=M("sqlite3_clear_bindings","number",["number"]),Kd=M("sqlite3_finalize","number",["number"]),ol=M("sqlite3_create_function_v2","number","number string number number number number number number number".split(" ")),Qd=M("sqlite3_value_type","number",["number"]),Yd=M("sqlite3_value_bytes","number",["number"]),Xd=M("sqlite3_value_text","string",["number"]),Zd=M("sqlite3_value_blob","number",["number"]),em=M("sqlite3_value_double","number",["number"]),tm=M("sqlite3_result_double","",["number","number"]),il=M("sqlite3_result_null","",["number"]),sm=M("sqlite3_result_text","",["number","string","number","number"]),nm=M("sqlite3_result_blob","",["number","number","number","number"]),om=M("sqlite3_result_int","",["number","number"]),po=M("sqlite3_result_error","",["number","string","number"]),rl=M("sqlite3_aggregate_context","number",["number","number"]),al=M("RegisterExtensionFunctions","number",["number"]),ll=M("sqlite3_update_hook","number",["number","number","number"]);d.prototype.bind=function(b){if(!this.Qa)throw"Statement closed";return this.reset(),Array.isArray(b)?this.Gb(b):b!=null&&typeof b=="object"?this.Hb(b):!0},d.prototype.step=function(){if(!this.Qa)throw"Statement closed";this.Oa=1;var b=Ld(this.Qa);switch(b){case 100:return!0;case 101:return!1;default:throw this.db.handleError(b)}},d.prototype.Ab=function(b){return b==null&&(b=this.Oa,this.Oa+=1),qd(this.Qa,b)},d.prototype.Ob=function(b){if(b==null&&(b=this.Oa,this.Oa+=1),b=nl(this.Qa,b),typeof BigInt!="function")throw Error("BigInt is not supported");return BigInt(b)},d.prototype.Tb=function(b){return b==null&&(b=this.Oa,this.Oa+=1),nl(this.Qa,b)},d.prototype.getBlob=function(b){b==null&&(b=this.Oa,this.Oa+=1);var v=$d(this.Qa,b);b=zd(this.Qa,b);for(var I=new Uint8Array(v),O=0;O<v;O+=1)I[O]=x[b+O];return I},d.prototype.get=function(b,v){v=v||{},b!=null&&this.bind(b)&&this.step(),b=[];for(var I=Bd(this.Qa),O=0;O<I;O+=1)switch(Wd(this.Qa,O)){case 1:var $=v.useBigInt?this.Ob(O):this.Ab(O);b.push($);break;case 2:b.push(this.Ab(O));break;case 3:b.push(this.Tb(O));break;case 4:b.push(this.getBlob(O));break;default:b.push(null)}return b},d.prototype.qb=function(){for(var b=[],v=Gd(this.Qa),I=0;I<v;I+=1)b.push(Hd(this.Qa,I));return b},d.prototype.zb=function(b,v){b=this.get(b,v),v=this.qb();for(var I={},O=0;O<v.length;O+=1)I[v[O]]=b[O];return I},d.prototype.Sb=function(){return el(this.Qa)},d.prototype.Pb=function(){return Id(this.Qa)},d.prototype.run=function(b){return b!=null&&this.bind(b),this.step(),this.reset()},d.prototype.wb=function(b,v){v==null&&(v=this.Oa,this.Oa+=1),b=ao(b),this.mb.push(b),this.db.handleError(Ud(this.Qa,v,b,-1,0))},d.prototype.Fb=function(b,v){v==null&&(v=this.Oa,this.Oa+=1);var I=lo(b.length);x.set(b,I),this.mb.push(I),this.db.handleError(sl(this.Qa,v,I,b.length,0))},d.prototype.vb=function(b,v){v==null&&(v=this.Oa,this.Oa+=1),this.db.handleError((b===(b|0)?Fd:Od)(this.Qa,v,b))},d.prototype.Ib=function(b){b==null&&(b=this.Oa,this.Oa+=1),sl(this.Qa,b,0,0,0)},d.prototype.xb=function(b,v){switch(v==null&&(v=this.Oa,this.Oa+=1),typeof b){case"string":this.wb(b,v);return;case"number":this.vb(b,v);return;case"bigint":this.wb(b.toString(),v);return;case"boolean":this.vb(b+0,v);return;case"object":if(b===null){this.Ib(v);return}if(b.length!=null){this.Fb(b,v);return}}throw"Wrong API use : tried to bind a value of an unknown type ("+b+")."},d.prototype.Hb=function(b){var v=this;return Object.keys(b).forEach(function(I){var O=Nd(v.Qa,I);O!==0&&v.xb(b[I],O)}),!0},d.prototype.Gb=function(b){for(var v=0;v<b.length;v+=1)this.xb(b[v],v+1);return!0},d.prototype.reset=function(){return this.freemem(),Vd(this.Qa)===0&&Jd(this.Qa)===0},d.prototype.freemem=function(){for(var b;(b=this.mb.pop())!==void 0;)Js(b)},d.prototype.Ya=function(){this.freemem();var b=Kd(this.Qa)===0;return delete this.db.gb[this.Qa],this.Qa=0,b},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 b=uo(),v=Yt(4);H(k),H(v);try{this.db.handleError(tl(this.db.db,this.lb,-1,k,v)),this.lb=Ye(v,"i32");var I=Ye(k,"i32");return I===0?(this.ob(),{done:!0}):(this.$a=new d(I,this.db),this.db.gb[I]=this.$a,{value:this.$a,done:!1})}catch(O){throw this.sb=ae(this.lb),this.ob(),O}finally{co(b)}},f.prototype.ob=function(){Js(this.fb),this.fb=null},f.prototype.Qb=function(){return this.sb!==null?this.sb:ae(this.lb)},typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"&&(f.prototype[Symbol.iterator]=function(){return this}),y.prototype.run=function(b,v){if(!this.db)throw"Database closed";if(v){b=this.tb(b,v);try{b.step()}finally{b.Ya()}}else this.handleError(B(this.db,b,0,0,k));return this},y.prototype.exec=function(b,v,I){if(!this.db)throw"Database closed";var O=null,$=null,oe=null;try{oe=$=ao(b);var Xe=Yt(4);for(b=[];Ye(oe,"i8")!==0;){H(k),H(Xe),this.handleError(tl(this.db,oe,-1,k,Xe));var ze=Ye(k,"i32");if(oe=Ye(Xe,"i32"),ze!==0){var Fe=null;for(O=new d(ze,this),v!=null&&O.bind(v);O.step();)Fe===null&&(Fe={columns:O.qb(),values:[]},b.push(Fe)),Fe.values.push(O.get(null,I));O.Ya()}}return b}catch(Ze){throw O&&O.Ya(),Ze}finally{$&&Js($)}},y.prototype.Mb=function(b,v,I,O,$){typeof v=="function"&&(O=I,I=v,v=void 0),b=this.tb(b,v);try{for(;b.step();)I(b.zb(null,$))}finally{b.Ya()}if(typeof O=="function")return O()},y.prototype.tb=function(b,v){if(H(k),this.handleError(Pe(this.db,b,-1,k,0)),b=Ye(k,"i32"),b===0)throw"Nothing to prepare";var I=new d(b,this);return v!=null&&I.bind(v),this.gb[b]=I},y.prototype.Ub=function(b){return new f(b,this)},y.prototype.Nb=function(){Object.values(this.gb).forEach(function(v){v.Ya()}),Object.values(this.Sa).forEach(Et),this.Sa={},this.handleError(ne(this.db));var b=Pd(this.filename);return this.handleError(L(this.filename,k)),this.db=Ye(k,"i32"),al(this.db),b},y.prototype.close=function(){this.db!==null&&(Object.values(this.gb).forEach(function(b){b.Ya()}),Object.values(this.Sa).forEach(Et),this.Sa={},this.Za&&(Et(this.Za),this.Za=void 0),this.handleError(ne(this.db)),qa("/"+this.filename),this.db=null)},y.prototype.handleError=function(b){if(b===0)return null;throw b=jd(this.db),Error(b)},y.prototype.Rb=function(){return me(this.db)},y.prototype.Kb=function(b,v){Object.prototype.hasOwnProperty.call(this.Sa,b)&&(Et(this.Sa[b]),delete this.Sa[b]);var I=Hs(function(O,$,oe){$=u($,oe);try{var Xe=v.apply(null,$)}catch(ze){po(O,ze,-1);return}l(O,Xe)},"viii");return this.Sa[b]=I,this.handleError(ol(this.db,b,v.length,1,0,I,0,0,0)),this},y.prototype.Jb=function(b,v){var I=v.init||function(){return null},O=v.finalize||function(Fe){return Fe},$=v.step;if(!$)throw"An aggregate function must have a step function in "+b;var oe={};Object.hasOwnProperty.call(this.Sa,b)&&(Et(this.Sa[b]),delete this.Sa[b]),v=b+"__finalize",Object.hasOwnProperty.call(this.Sa,v)&&(Et(this.Sa[v]),delete this.Sa[v]);var Xe=Hs(function(Fe,Ze,nr){var Xt=rl(Fe,1);Object.hasOwnProperty.call(oe,Xt)||(oe[Xt]=I()),Ze=u(Ze,nr),Ze=[oe[Xt]].concat(Ze);try{oe[Xt]=$.apply(null,Ze)}catch(im){delete oe[Xt],po(Fe,im,-1)}},"viii"),ze=Hs(function(Fe){var Ze=rl(Fe,1);try{var nr=O(oe[Ze])}catch(Xt){delete oe[Ze],po(Fe,Xt,-1);return}l(Fe,nr),delete oe[Ze]},"vi");return this.Sa[b]=Xe,this.Sa[v]=ze,this.handleError(ol(this.db,b,$.length-1,1,0,0,Xe,ze,0)),this},y.prototype.Zb=function(b){return this.Za&&(ll(this.db,0,0),Et(this.Za),this.Za=void 0),b?(this.Za=Hs(function(v,I,O,$,oe){switch(I){case 18:v="insert";break;case 23:v="update";break;case 9:v="delete";break;default:throw"unknown operationCode in updateHook callback: "+I}if(O=ae(O),$=ae($),oe>Number.MAX_SAFE_INTEGER)throw"rowId too big to fit inside a Number";b(v,O,$,Number(oe))},"viiiij"),ll(this.db,this.Za,0),this):this},d.prototype.bind=d.prototype.bind,d.prototype.step=d.prototype.step,d.prototype.get=d.prototype.get,d.prototype.getColumnNames=d.prototype.qb,d.prototype.getAsObject=d.prototype.zb,d.prototype.getSQL=d.prototype.Sb,d.prototype.getNormalizedSQL=d.prototype.Pb,d.prototype.run=d.prototype.run,d.prototype.reset=d.prototype.reset,d.prototype.freemem=d.prototype.freemem,d.prototype.free=d.prototype.Ya,f.prototype.next=f.prototype.next,f.prototype.getRemainingSQL=f.prototype.Qb,y.prototype.run=y.prototype.run,y.prototype.exec=y.prototype.exec,y.prototype.each=y.prototype.Mb,y.prototype.prepare=y.prototype.tb,y.prototype.iterateStatements=y.prototype.Ub,y.prototype.export=y.prototype.Nb,y.prototype.close=y.prototype.close,y.prototype.handleError=y.prototype.handleError,y.prototype.getRowsModified=y.prototype.Rb,y.prototype.create_function=y.prototype.Kb,y.prototype.create_aggregate=y.prototype.Jb,y.prototype.updateHook=y.prototype.Zb,i.Database=y};var m="./this.program",p=(l,u)=>{throw u},g=globalThis.document?.currentScript?.src;typeof __filename<"u"?g=__filename:a&&(g=self.location.href);var h="",_,C;if(c){var S=require("node:fs");h=__dirname+"/",C=l=>(l=P(l)?new URL(l):l,S.readFileSync(l)),_=async l=>(l=P(l)?new URL(l):l,S.readFileSync(l,void 0)),1<process.argv.length&&(m=process.argv[1].replace(/\\/g,"/")),process.argv.slice(2),typeof ts<"u"&&(ts.exports=i),p=(l,u)=>{throw process.exitCode=l,u}}else if(r||a){try{h=new URL(".",g).href}catch{}a&&(C=l=>{var u=new XMLHttpRequest;return u.open("GET",l,!1),u.responseType="arraybuffer",u.send(null),new Uint8Array(u.response)}),_=async l=>{if(P(l))return new Promise((d,f)=>{var y=new XMLHttpRequest;y.open("GET",l,!0),y.responseType="arraybuffer",y.onload=()=>{y.status==200||y.status==0&&y.response?d(y.response):f(y.status)},y.onerror=f,y.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),A=console.error.bind(console),R,j=!1,F,P=l=>l.startsWith("file://"),x,N,re,se,te,Gs,ms,Ue;function Bs(){var l=mo.buffer;x=new Int8Array(l),re=new Int16Array(l),N=new Uint8Array(l),new Uint16Array(l),se=new Int32Array(l),te=new Uint32Array(l),Gs=new Float32Array(l),ms=new Float64Array(l),Ue=new BigInt64Array(l),new BigUint64Array(l)}function At(l){throw i.onAbort?.(l),l="Aborted("+l+")",A(l),j=!0,new WebAssembly.RuntimeError(l+". Build with -sASSERTIONS for more info.")}var yt;async function Qn(l){if(!R)try{var u=await _(l);return new Uint8Array(u)}catch{}if(l==yt&&R)l=new Uint8Array(R);else if(C)l=C(l);else throw"both async and sync fetching of the wasm failed";return l}async function Yn(l,u){try{var d=await Qn(l);return await WebAssembly.instantiate(d,u)}catch(f){A(`failed to asynchronously prepare wasm: ${f}`),At(f)}}async function Gi(l){var u=yt;if(!R&&!P(u)&&!c)try{var d=fetch(u,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(d,l)}catch(f){A(`wasm streaming compile failed: ${f}`),A("falling back to ArrayBuffer instantiation")}return Yn(u,l)}class Ht{name="ExitStatus";constructor(u){this.message=`Program terminated with exit(${u})`,this.status=u}}var ps=l=>{for(;0<l.length;)l.shift()(i)},Bi=[],Xn=[],qs=()=>{var l=i.preRun.shift();Xn.push(l)},Qe=0,gs=null;function Ye(l,u="i8"){switch(u.endsWith("*")&&(u="*"),u){case"i1":return x[l];case"i8":return x[l];case"i16":return re[l>>1];case"i32":return se[l>>2];case"i64":return Ue[l>>3];case"float":return Gs[l>>2];case"double":return ms[l>>3];case"*":return te[l>>2];default:At(`invalid type for getValue: ${u}`)}}var U=!0;function H(l){var u="i32";switch(u.endsWith("*")&&(u="*"),u){case"i1":x[l]=0;break;case"i8":x[l]=0;break;case"i16":re[l>>1]=0;break;case"i32":se[l>>2]=0;break;case"i64":Ue[l>>3]=BigInt(0);break;case"float":Gs[l>>2]=0;break;case"double":ms[l>>3]=0;break;case"*":te[l>>2]=0;break;default:At(`invalid type for setValue: ${u}`)}}var ye=new TextDecoder,Ce=(l,u,d,f)=>{if(d=u+d,f)return d;for(;l[u]&&!(u>=d);)++u;return u},ae=(l,u,d)=>l?ye.decode(N.subarray(l,Ce(N,l,u,d))):"",at=(l,u)=>{for(var d=0,f=l.length-1;0<=f;f--){var y=l[f];y==="."?l.splice(f,1):y===".."?(l.splice(f,1),d++):d&&(l.splice(f,1),d--)}if(u)for(;d;d--)l.unshift("..");return l},Jt=l=>{var u=l.charAt(0)==="/",d=l.slice(-1)==="/";return(l=at(l.split("/").filter(f=>!!f),!u).join("/"))||u||(l="."),l&&d&&(l+="/"),(u?"/":"")+l},lt=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)},Oe=l=>l&&l.match(/([^\/]+|\/)\/*$/)[1],Zn=()=>{if(c){var l=require("node:crypto");return u=>l.randomFillSync(u)}return u=>crypto.getRandomValues(u)},xa=l=>{(xa=Zn())(l)},hd=(...l)=>{for(var u="",d=!1,f=l.length-1;-1<=f&&!d;f--){if(d=0<=f?l[f]:"/",typeof d!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!d)return"";u=d+"/"+u,d=d.charAt(0)==="/"}return u=at(u.split("/").filter(y=>!!y),!d).join("/"),(d?"/":"")+u||"."},zs=l=>{var u=Ce(l,0);return ye.decode(l.buffer?l.subarray(0,u):new Uint8Array(l.slice(0,u)))},qi=[],fs=l=>{for(var u=0,d=0;d<l.length;++d){var f=l.charCodeAt(d);127>=f?u++:2047>=f?u+=2:55296<=f&&57343>=f?(u+=4,++d):u+=3}return u},ct=(l,u,d,f)=>{if(!(0<f))return 0;var y=d;f=d+f-1;for(var k=0;k<l.length;++k){var M=l.codePointAt(k);if(127>=M){if(d>=f)break;u[d++]=M}else if(2047>=M){if(d+1>=f)break;u[d++]=192|M>>6,u[d++]=128|M&63}else if(65535>=M){if(d+2>=f)break;u[d++]=224|M>>12,u[d++]=128|M>>6&63,u[d++]=128|M&63}else{if(d+3>=f)break;u[d++]=240|M>>18,u[d++]=128|M>>12&63,u[d++]=128|M>>6&63,u[d++]=128|M&63,k++}}return u[d]=0,d-y},Da=[];function Ea(l,u){Da[l]={input:[],output:[],eb:u},Vi(l,yd)}var yd={open(l){var u=Da[l.node.rdev];if(!u)throw new D(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,d,f){if(!l.tty||!l.tty.eb.Bb)throw new D(60);for(var y=0,k=0;k<f;k++){try{var M=l.tty.eb.Bb(l.tty)}catch{throw new D(29)}if(M===void 0&&y===0)throw new D(6);if(M==null)break;y++,u[d+k]=M}return y&&(l.node.atime=Date.now()),y},write(l,u,d,f){if(!l.tty||!l.tty.eb.ub)throw new D(60);try{for(var y=0;y<f;y++)l.tty.eb.ub(l.tty,u[d+y])}catch{throw new D(29)}return f&&(l.node.mtime=l.node.ctime=Date.now()),y}},_d={Bb(){e:{if(!qi.length){var l=null;if(c){var u=Buffer.alloc(256),d=0,f=process.stdin.fd;try{d=S.readSync(f,u,0,256)}catch(y){if(y.toString().includes("EOF"))d=0;else throw y}0<d&&(l=u.slice(0,d).toString("utf-8"))}else globalThis.window?.prompt&&(l=window.prompt("Input: "),l!==null&&(l+=`
3
+ `));if(!l){l=null;break e}u=Array(fs(l)+1),l=ct(l,u,0,u.length),u.length=l,qi=u}l=qi.shift()}return l},ub(l,u){u===null||u===10?(E(zs(l.output)),l.output=[]):u!=0&&l.output.push(u)},fsync(l){0<l.output?.length&&(E(zs(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]}},Cd={ub(l,u){u===null||u===10?(A(zs(l.output)),l.output=[]):u!=0&&l.output.push(u)},fsync(l){0<l.output?.length&&(A(zs(l.output)),l.output=[])}},G={Wa:null,Xa(){return G.createNode(null,"/",16895,0)},createNode(l,u,d,f){if((d&61440)===24576||(d&61440)===4096)throw new D(63);return G.Wa||(G.Wa={dir:{node:{Ta:G.La.Ta,Ua:G.La.Ua,lookup:G.La.lookup,ib:G.La.ib,rename:G.La.rename,unlink:G.La.unlink,rmdir:G.La.rmdir,readdir:G.La.readdir,symlink:G.La.symlink},stream:{Va:G.Ma.Va}},file:{node:{Ta:G.La.Ta,Ua:G.La.Ua},stream:{Va:G.Ma.Va,read:G.Ma.read,write:G.Ma.write,jb:G.Ma.jb,kb:G.Ma.kb}},link:{node:{Ta:G.La.Ta,Ua:G.La.Ua,readlink:G.La.readlink},stream:{}},yb:{node:{Ta:G.La.Ta,Ua:G.La.Ua},stream:Td}}),d=Fa(l,u,d,f),Ee(d.mode)?(d.La=G.Wa.dir.node,d.Ma=G.Wa.dir.stream,d.Na={}):(d.mode&61440)===32768?(d.La=G.Wa.file.node,d.Ma=G.Wa.file.stream,d.Ra=0,d.Na=null):(d.mode&61440)===40960?(d.La=G.Wa.link.node,d.Ma=G.Wa.link.stream):(d.mode&61440)===8192&&(d.La=G.Wa.yb.node,d.Ma=G.Wa.yb.stream),d.atime=d.mtime=d.ctime=Date.now(),l&&(l.Na[u]=d,l.atime=l.mtime=l.ctime=d.atime),d},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,Ee(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 d of["mode","atime","mtime","ctime"])u[d]!=null&&(l[d]=u[d]);u.size!==void 0&&(u=u.size,l.Ra!=u&&(u==0?(l.Na=null,l.Ra=0):(d=l.Na,l.Na=new Uint8Array(u),d&&l.Na.set(d.subarray(0,Math.min(u,l.Ra))),l.Ra=u)))},lookup(){throw G.nb||(G.nb=new D(44),G.nb.stack="<generic error, no stack>"),G.nb},ib(l,u,d,f){return G.createNode(l,u,d,f)},rename(l,u,d){try{var f=Vt(u,d)}catch{}if(f){if(Ee(l.mode))for(var y in f.Na)throw new D(55);Hi(f)}delete l.parent.Na[l.name],u.Na[d]=l,l.name=d,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 d=Vt(l,u),f;for(f in d.Na)throw new D(55);delete l.Na[u],l.ctime=l.mtime=Date.now()},readdir(l){return[".","..",...Object.keys(l.Na)]},symlink(l,u,d){return l=G.createNode(l,u,41471,0),l.link=d,l},readlink(l){if((l.mode&61440)!==40960)throw new D(28);return l.link}},Ma:{read(l,u,d,f,y){var k=l.node.Na;if(y>=l.node.Ra)return 0;if(l=Math.min(l.node.Ra-y,f),8<l&&k.subarray)u.set(k.subarray(y,y+l),d);else for(f=0;f<l;f++)u[d+f]=k[y+f];return l},write(l,u,d,f,y,k){if(u.buffer===x.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(d,d+f),l.Ra=f;if(l.Ra===0&&y===0)return l.Na=u.slice(d,d+f),l.Ra=f;if(y+f<=l.Ra)return l.Na.set(u.subarray(d,d+f),y),f}k=y+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(d,d+f),y);else for(k=0;k<f;k++)l.Na[y+k]=u[d+k];return l.Ra=Math.max(l.Ra,y+f),f},Va(l,u,d){if(d===1?u+=l.position:d===2&&(l.node.mode&61440)===32768&&(u+=l.node.Ra),0>u)throw new D(28);return u},jb(l,u,d,f,y){if((l.node.mode&61440)!==32768)throw new D(43);if(l=l.node.Na,y&2||!l||l.buffer!==x.buffer){y=!0,f=65536*Math.ceil(u/65536);var k=Xa(65536,f);if(k&&N.fill(0,k,k+f),f=k,!f)throw new D(48);l&&((0<d||d+u<l.length)&&(l.subarray?l=l.subarray(d,d+u):l=Array.prototype.slice.call(l,d,d+u)),x.set(l,f))}else y=!1,f=l.byteOffset;return{Xb:f,Eb:y}},kb(l,u,d,f){return G.Ma.write(l,u,0,f,d,!1),0}}},Ra=(l,u)=>{var d=0;return l&&(d|=365),u&&(d|=146),d},zi=null,Ia={},hs=[],bd=1,xt=null,Ua=!1,Oa=!0,D=class{name="ErrnoError";constructor(l){this.Pa=l}},kd=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}},Sd=class{La={};Ma={};bb=null;constructor(l,u,d,f){l||=this,this.parent=l,this.Xa=l.Xa,this.id=bd++,this.name=u,this.mode=d,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 qe(l,u={}){if(!l)throw new D(44);u.pb??(u.pb=!0),l.charAt(0)==="/"||(l="//"+l);var d=0;e:for(;40>d;d++){l=l.split("/").filter(L=>!!L);for(var f=zi,y="/",k=0;k<l.length;k++){var M=k===l.length-1;if(M&&u.parent)break;if(l[k]!==".")if(l[k]==="..")if(y=lt(y),f===f.parent){l=y+"/"+l.slice(k+1).join("/"),d--;continue e}else f=f.parent;else{y=Jt(y+"/"+l[k]);try{f=Vt(f,l[k])}catch(L){if(L?.Pa===44&&M&&u.Wb)return{path:y};throw L}if(!f.bb||M&&!u.pb||(f=f.bb.root),(f.mode&61440)===40960&&(!M||u.ab)){if(!f.La.readlink)throw new D(52);f=f.La.readlink(f),f.charAt(0)==="/"||(f=lt(y)+"/"+f),l=f+"/"+l.slice(k+1).join("/");continue e}}}return{path:y,node:f}}throw new D(32)}function $i(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 Wi(l,u){for(var d=0,f=0;f<u.length;f++)d=(d<<5)-d+u.charCodeAt(f)|0;return(l+d>>>0)%xt.length}function Hi(l){var u=Wi(l.parent.id,l.name);if(xt[u]===l)xt[u]=l.cb;else for(u=xt[u];u;){if(u.cb===l){u.cb=l.cb;break}u=u.cb}}function Vt(l,u){var d=Ee(l.mode)?(d=ys(l,"x"))?d:l.La.lookup?0:2:54;if(d)throw new D(d);for(d=xt[Wi(l.id,u)];d;d=d.cb){var f=d.name;if(d.parent.id===l.id&&f===u)return d}return l.La.lookup(l,u)}function Fa(l,u,d,f){return l=new Sd(l,u,d,f),u=Wi(l.parent.id,l.name),l.cb=xt[u],xt[u]=l}function Ee(l){return(l&61440)===16384}function ys(l,u){return Oa?0:u.includes("r")&&!(l.mode&292)||u.includes("w")&&!(l.mode&146)||u.includes("x")&&!(l.mode&73)?2:0}function Na(l,u){if(!Ee(l.mode))return 54;try{return Vt(l,u),20}catch{}return ys(l,"wx")}function La(l,u,d){try{var f=Vt(l,u)}catch(y){return y.Pa}if(l=ys(l,"wx"))return l;if(d){if(!Ee(f.mode))return 54;if(f===f.parent||$i(f)==="/")return 10}else if(Ee(f.mode))return 31;return 0}function eo(l){if(!l)throw new D(63);return l}function Ae(l){if(l=hs[l],!l)throw new D(8);return l}function ja(l,u=-1){if(l=Object.assign(new kd,l),u==-1)e:{for(u=0;4096>=u;u++)if(!hs[u])break e;throw new D(33)}return l.fd=u,hs[u]=l}function wd(l,u=-1){return l=ja(l,u),l.Ma?.ec?.(l),l}function Ji(l,u,d){var f=l?.Ma.Ua;l=f?l:u,f??=u.La.Ua,eo(f),f(l,d)}var Td={open(l){l.Ma=Ia[l.node.rdev].Ma,l.Ma.open?.(l)},Va(){throw new D(70)}};function Vi(l,u){Ia[l]={Ma:u}}function Ga(l,u){var d=u==="/";if(d&&zi)throw new D(10);if(!d&&u){var f=qe(u,{pb:!1});if(u=f.path,f=f.node,f.bb)throw new D(10);if(!Ee(f.mode))throw new D(54)}u={type:l,kc:{},Db:u,Vb:[]},l=l.Xa(u),l.Xa=u,u.root=l,d?zi=l:f&&(f.bb=u,f.Xa&&f.Xa.Vb.push(u))}function to(l,u,d){var f=qe(l,{parent:!0}).node;if(l=Oe(l),!l)throw new D(28);if(l==="."||l==="..")throw new D(20);var y=Na(f,l);if(y)throw new D(y);if(!f.La.ib)throw new D(63);return f.La.ib(f,l,u,d)}function Md(l,u=438){return to(l,u&4095|32768,0)}function ut(l,u=511){return to(l,u&1023|16384,0)}function so(l,u,d){typeof d>"u"&&(d=u,u=438),to(l,u|8192,d)}function Ki(l,u){if(!hd(l))throw new D(44);var d=qe(u,{parent:!0}).node;if(!d)throw new D(44);u=Oe(u);var f=Na(d,u);if(f)throw new D(f);if(!d.La.symlink)throw new D(63);d.La.symlink(d,u,l)}function Ba(l){var u=qe(l,{parent:!0}).node;l=Oe(l);var d=Vt(u,l),f=La(u,l,!0);if(f)throw new D(f);if(!u.La.rmdir)throw new D(63);if(d.bb)throw new D(10);u.La.rmdir(u,l),Hi(d)}function qa(l){var u=qe(l,{parent:!0}).node;if(!u)throw new D(44);l=Oe(l);var d=Vt(u,l),f=La(u,l,!1);if(f)throw new D(f);if(!u.La.unlink)throw new D(63);if(d.bb)throw new D(10);u.La.unlink(u,l),Hi(d)}function $s(l,u){return l=qe(l,{ab:!u}).node,eo(l.La.Ta)(l)}function za(l,u,d,f){Ji(l,u,{mode:d&4095|u.mode&-4096,ctime:Date.now(),Lb:f})}function no(l,u){l=typeof l=="string"?qe(l,{ab:!0}).node:l,za(null,l,u)}function $a(l,u,d){if(Ee(u.mode))throw new D(31);if((u.mode&61440)!==32768)throw new D(28);var f=ys(u,"w");if(f)throw new D(f);Ji(l,u,{size:d,timestamp:Date.now()})}function _s(l,u,d=438){if(l==="")throw new D(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(d=u&64?d&4095|32768:0,typeof l=="object")f=l;else{var y=l.endsWith("/"),k=qe(l,{ab:!(u&131072),Wb:!0});f=k.node,l=k.path}if(k=!1,u&64)if(f){if(u&128)throw new D(20)}else{if(y)throw new D(31);f=to(l,d|511,0),k=!0}if(!f)throw new D(44);if((f.mode&61440)===8192&&(u&=-513),u&65536&&!Ee(f.mode))throw new D(54);if(!k&&(f?(f.mode&61440)===40960?y=32:(y=["r","w","rw"][u&3],u&512&&(y+="w"),y=Ee(f.mode)&&(y!=="r"||u&576)?31:ys(f,y)):y=44,y))throw new D(y);return u&512&&!k&&(y=f,y=typeof y=="string"?qe(y,{ab:!0}).node:y,$a(null,y,0)),u=ja({node:f,path:$i(f),flags:u&-131713,seekable:!0,position:0,Ma:f.Ma,Yb:[],error:!1}),u.Ma.open&&u.Ma.open(u),k&&no(f,d&511),u}function Qi(l){if(l.fd===null)throw new D(8);l.rb&&(l.rb=null);try{l.Ma.close&&l.Ma.close(l)}catch(u){throw u}finally{hs[l.fd]=null}l.fd=null}function Wa(l,u,d){if(l.fd===null)throw new D(8);if(!l.seekable||!l.Ma.Va)throw new D(70);if(d!=0&&d!=1&&d!=2)throw new D(28);l.position=l.Ma.Va(l,u,d),l.Yb=[]}function Ha(l,u,d,f,y){if(0>f||0>y)throw new D(28);if(l.fd===null)throw new D(8);if((l.flags&2097155)===1)throw new D(8);if(Ee(l.node.mode))throw new D(31);if(!l.Ma.read)throw new D(28);var k=typeof y<"u";if(!k)y=l.position;else if(!l.seekable)throw new D(70);return u=l.Ma.read(l,u,d,f,y),k||(l.position+=u),u}function Ja(l,u,d,f,y){if(0>f||0>y)throw new D(28);if(l.fd===null)throw new D(8);if((l.flags&2097155)===0)throw new D(8);if(Ee(l.node.mode))throw new D(31);if(!l.Ma.write)throw new D(28);l.seekable&&l.flags&1024&&Wa(l,0,2);var k=typeof y<"u";if(!k)y=l.position;else if(!l.seekable)throw new D(70);return u=l.Ma.write(l,u,d,f,y,void 0),k||(l.position+=u),u}function Pd(l){var u=u||0,d="binary";d!=="utf8"&&d!=="binary"&&At(`Invalid encoding type "${d}"`),u=_s(l,u),l=$s(l).size;var f=new Uint8Array(l);return Ha(u,f,0,l,0),d==="utf8"&&(f=zs(f)),Qi(u),f}function Dt(l,u,d){l=Jt("/dev/"+l);var f=Ra(!!u,!!d);Dt.Cb??(Dt.Cb=64);var y=Dt.Cb++<<8|0;Vi(y,{open(k){k.seekable=!1},close(){d?.buffer?.length&&d(10)},read(k,M,L,ne){for(var B=0,me=0;me<ne;me++){try{var Pe=u()}catch{throw new D(29)}if(Pe===void 0&&B===0)throw new D(6);if(Pe==null)break;B++,M[L+me]=Pe}return B&&(k.node.atime=Date.now()),B},write(k,M,L,ne){for(var B=0;B<ne;B++)try{d(M[L+B])}catch{throw new D(29)}return ne&&(k.node.mtime=k.node.ctime=Date.now()),B}}),so(l,f,y)}var de={};function Kt(l,u,d){if(u.charAt(0)==="/")return u;if(l=l===-100?"/":Ae(l).path,u.length==0){if(!d)throw new D(44);return l}return l+"/"+u}function oo(l,u){te[l>>2]=u.dev,te[l+4>>2]=u.mode,te[l+8>>2]=u.nlink,te[l+12>>2]=u.uid,te[l+16>>2]=u.gid,te[l+20>>2]=u.rdev,Ue[l+24>>3]=BigInt(u.size),se[l+32>>2]=4096,se[l+36>>2]=u.blocks;var d=u.atime.getTime(),f=u.mtime.getTime(),y=u.ctime.getTime();return Ue[l+40>>3]=BigInt(Math.floor(d/1e3)),te[l+48>>2]=d%1e3*1e6,Ue[l+56>>3]=BigInt(Math.floor(f/1e3)),te[l+64>>2]=f%1e3*1e6,Ue[l+72>>3]=BigInt(Math.floor(y/1e3)),te[l+80>>2]=y%1e3*1e6,Ue[l+88>>3]=BigInt(u.ino),0}var io=void 0,ro=()=>{var l=se[+io>>2];return io+=4,l},Yi=0,vd=[0,31,60,91,121,152,182,213,244,274,305,335],Ad=[0,31,59,90,120,151,181,212,243,273,304,334],Ws={},Va=l=>{F=l,U||0<Yi||(i.onExit?.(l),j=!0),p(l,new Ht(l))},xd=l=>{if(!j)try{l()}catch(u){u instanceof Ht||u=="unwind"||p(1,u)}finally{if(!(U||0<Yi))try{F=l=F,Va(l)}catch(u){u instanceof Ht||u=="unwind"||p(1,u)}}},Xi={},Ka=()=>{if(!Zi){var l={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:(globalThis.navigator?.language??"C").replace("-","_")+".UTF-8",_:m||"./this.program"},u;for(u in Xi)Xi[u]===void 0?delete l[u]:l[u]=Xi[u];var d=[];for(u in l)d.push(`${u}=${l[u]}`);Zi=d}return Zi},Zi,Dd=(l,u,d,f)=>{var y={string:B=>{var me=0;if(B!=null&&B!==0){me=fs(B)+1;var Pe=Yt(me);ct(B,N,Pe,me),me=Pe}return me},array:B=>{var me=Yt(B.length);return x.set(B,me),me}};l=i["_"+l];var k=[],M=0;if(f)for(var L=0;L<f.length;L++){var ne=y[d[L]];ne?(M===0&&(M=uo()),k[L]=ne(f[L])):k[L]=f[L]}return d=l(...k),d=(function(B){return M!==0&&co(M),u==="string"?ae(B):u==="boolean"?!!B:B})(d)},ao=l=>{var u=fs(l)+1,d=lo(u);return d&&ct(l,N,d,u),d},Qt,er=[],Et=l=>{Qt.delete(Rt.get(l)),Rt.set(l,null),er.push(l)},Qa=l=>{let u=l.length;return[u%128|128,u>>7,...l]},Ed={i:127,p:127,j:126,f:125,d:124,e:111},Ya=l=>Qa(Array.from(l,u=>Ed[u])),Hs=(l,u)=>{if(!Qt){Qt=new WeakMap;var d=Rt.length;if(Qt)for(var f=0;f<0+d;f++){var y=Rt.get(f);y&&Qt.set(y,f)}}if(d=Qt.get(l)||0)return d;d=er.length?er.pop():Rt.grow(1);try{Rt.set(d,l)}catch(k){if(!(k instanceof TypeError))throw k;u=Uint8Array.of(0,97,115,109,1,0,0,0,1,...Qa([1,96,...Ya(u.slice(1)),...Ya(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,Rt.set(d,u)}return Qt.set(l,d),d};if(xt=Array(4096),Ga(G,"/"),ut("/tmp"),ut("/home"),ut("/home/web_user"),(function(){ut("/dev"),Vi(259,{read:()=>0,write:(f,y,k,M)=>M,Va:()=>0}),so("/dev/null",259),Ea(1280,_d),Ea(1536,Cd),so("/dev/tty",1280),so("/dev/tty1",1536);var l=new Uint8Array(1024),u=0,d=()=>(u===0&&(xa(l),u=l.byteLength),l[--u]);Dt("random",d),Dt("urandom",d),ut("/dev/shm"),ut("/dev/shm/tmp")})(),(function(){ut("/proc");var l=ut("/proc/self");ut("/proc/self/fd"),Ga({Xa(){var u=Fa(l,"fd",16895,73);return u.Ma={Va:G.Ma.Va},u.La={lookup(d,f){d=+f;var y=Ae(d);return d={parent:null,Xa:{Db:"fake"},La:{readlink:()=>y.path},id:d+1},d.parent=d},readdir(){return Array.from(hs.entries()).filter(([,d])=>d).map(([d])=>d.toString())}},u}},"/proc/self/fd")})(),i.noExitRuntime&&(U=i.noExitRuntime),i.print&&(E=i.print),i.printErr&&(A=i.printErr),i.wasmBinary&&(R=i.wasmBinary),i.thisProgram&&(m=i.thisProgram),i.preInit)for(typeof i.preInit=="function"&&(i.preInit=[i.preInit]);0<i.preInit.length;)i.preInit.shift()();i.stackSave=()=>uo(),i.stackRestore=l=>co(l),i.stackAlloc=l=>Yt(l),i.cwrap=(l,u,d,f)=>{var y=!d||d.every(k=>k==="number"||k==="boolean");return u!=="string"&&y&&!f?i["_"+l]:(...k)=>Dd(l,u,d,k)},i.addFunction=Hs,i.removeFunction=Et,i.UTF8ToString=ae,i.stringToNewUTF8=ao,i.writeArrayToMemory=(l,u)=>{x.set(l,u)};var lo,Js,Xa,Za,co,Yt,uo,mo,Rt,Rd={a:(l,u,d,f)=>At(`Assertion failed: ${ae(l)}, at: `+[u?ae(u):"unknown filename",d,f?ae(f):"unknown function"]),i:function(l,u){try{return l=ae(l),no(l,u),0}catch(d){if(typeof de>"u"||d.name!=="ErrnoError")throw d;return-d.Pa}},L:function(l,u,d){try{if(u=ae(u),u=Kt(l,u),d&-8)return-28;var f=qe(u,{ab:!0}).node;return f?(l="",d&4&&(l+="r"),d&2&&(l+="w"),d&1&&(l+="x"),l&&ys(f,l)?-2:0):-44}catch(y){if(typeof de>"u"||y.name!=="ErrnoError")throw y;return-y.Pa}},j:function(l,u){try{var d=Ae(l);return za(d,d.node,u,!1),0}catch(f){if(typeof de>"u"||f.name!=="ErrnoError")throw f;return-f.Pa}},h:function(l){try{var u=Ae(l);return Ji(u,u.node,{timestamp:Date.now(),Lb:!1}),0}catch(d){if(typeof de>"u"||d.name!=="ErrnoError")throw d;return-d.Pa}},b:function(l,u,d){io=d;try{var f=Ae(l);switch(u){case 0:var y=ro();if(0>y)break;for(;hs[y];)y++;return wd(f,y).fd;case 1:case 2:return 0;case 3:return f.flags;case 4:return y=ro(),f.flags|=y,0;case 12:return y=ro(),re[y+0>>1]=2,0;case 13:case 14:return 0}return-28}catch(k){if(typeof de>"u"||k.name!=="ErrnoError")throw k;return-k.Pa}},g:function(l,u){try{var d=Ae(l),f=d.node,y=d.Ma.Ta;l=y?d:f,y??=f.La.Ta,eo(y);var k=y(l);return oo(u,k)}catch(M){if(typeof de>"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 d=Ae(l);if(0>u||(d.flags&2097155)===0)throw new D(28);return $a(d,d.node,u),0}catch(f){if(typeof de>"u"||f.name!=="ErrnoError")throw f;return-f.Pa}},G:function(l,u){try{if(u===0)return-28;var d=fs("/")+1;return u<d?-68:(ct("/",N,l,u),d)}catch(f){if(typeof de>"u"||f.name!=="ErrnoError")throw f;return-f.Pa}},K:function(l,u){try{return l=ae(l),oo(u,$s(l,!0))}catch(d){if(typeof de>"u"||d.name!=="ErrnoError")throw d;return-d.Pa}},C:function(l,u,d){try{return u=ae(u),u=Kt(l,u),ut(u,d),0}catch(f){if(typeof de>"u"||f.name!=="ErrnoError")throw f;return-f.Pa}},J:function(l,u,d,f){try{u=ae(u);var y=f&256;return u=Kt(l,u,f&4096),oo(d,y?$s(u,!0):$s(u))}catch(k){if(typeof de>"u"||k.name!=="ErrnoError")throw k;return-k.Pa}},x:function(l,u,d,f){io=f;try{u=ae(u),u=Kt(l,u);var y=f?ro():0;return _s(u,d,y).fd}catch(k){if(typeof de>"u"||k.name!=="ErrnoError")throw k;return-k.Pa}},v:function(l,u,d,f){try{if(u=ae(u),u=Kt(l,u),0>=f)return-28;var y=qe(u).node;if(!y)throw new D(44);if(!y.La.readlink)throw new D(28);var k=y.La.readlink(y),M=Math.min(f,fs(k)),L=x[d+M];return ct(k,N,d,f+1),x[d+M]=L,M}catch(ne){if(typeof de>"u"||ne.name!=="ErrnoError")throw ne;return-ne.Pa}},u:function(l){try{return l=ae(l),Ba(l),0}catch(u){if(typeof de>"u"||u.name!=="ErrnoError")throw u;return-u.Pa}},f:function(l,u){try{return l=ae(l),oo(u,$s(l))}catch(d){if(typeof de>"u"||d.name!=="ErrnoError")throw d;return-d.Pa}},r:function(l,u,d){try{if(u=ae(u),u=Kt(l,u),d)if(d===512)Ba(u);else return-28;else qa(u);return 0}catch(f){if(typeof de>"u"||f.name!=="ErrnoError")throw f;return-f.Pa}},q:function(l,u,d){try{u=ae(u),u=Kt(l,u,!0);var f=Date.now(),y,k;if(d){var M=te[d>>2]+4294967296*se[d+4>>2],L=se[d+8>>2];L==1073741823?y=f:L==1073741822?y=null:y=1e3*M+L/1e6,d+=16,M=te[d>>2]+4294967296*se[d+4>>2],L=se[d+8>>2],L==1073741823?k=f:L==1073741822?k=null:k=1e3*M+L/1e6}else k=y=f;if((k??y)!==null){l=y;var ne=qe(u,{ab:!0}).node;eo(ne.La.Ua)(ne,{atime:l,mtime:k})}return 0}catch(B){if(typeof de>"u"||B.name!=="ErrnoError")throw B;return-B.Pa}},m:()=>At(""),l:()=>{U=!1,Yi=0},A:function(l,u){l=-9007199254740992>l||9007199254740992<l?NaN:Number(l),l=new Date(1e3*l),se[u>>2]=l.getSeconds(),se[u+4>>2]=l.getMinutes(),se[u+8>>2]=l.getHours(),se[u+12>>2]=l.getDate(),se[u+16>>2]=l.getMonth(),se[u+20>>2]=l.getFullYear()-1900,se[u+24>>2]=l.getDay();var d=l.getFullYear();se[u+28>>2]=(d%4!==0||d%100===0&&d%400!==0?Ad:vd)[l.getMonth()]+l.getDate()-1|0,se[u+36>>2]=-(60*l.getTimezoneOffset()),d=new Date(l.getFullYear(),6,1).getTimezoneOffset();var f=new Date(l.getFullYear(),0,1).getTimezoneOffset();se[u+32>>2]=(d!=f&&l.getTimezoneOffset()==Math.min(f,d))|0},y:function(l,u,d,f,y,k,M){y=-9007199254740992>y||9007199254740992<y?NaN:Number(y);try{var L=Ae(f);if((u&2)!==0&&(d&2)===0&&(L.flags&2097155)!==2)throw new D(2);if((L.flags&2097155)===1)throw new D(2);if(!L.Ma.jb)throw new D(43);if(!l)throw new D(28);var ne=L.Ma.jb(L,l,y,u,d),B=ne.Xb;return se[k>>2]=ne.Eb,te[M>>2]=B,0}catch(me){if(typeof de>"u"||me.name!=="ErrnoError")throw me;return-me.Pa}},z:function(l,u,d,f,y,k){k=-9007199254740992>k||9007199254740992<k?NaN:Number(k);try{var M=Ae(y);if(d&2){if(d=k,(M.node.mode&61440)!==32768)throw new D(43);if(!(f&2)){var L=N.slice(l,l+u);M.Ma.kb&&M.Ma.kb(M,L,d,u,f)}}}catch(ne){if(typeof de>"u"||ne.name!=="ErrnoError")throw ne;return-ne.Pa}},n:(l,u)=>{if(Ws[l]&&(clearTimeout(Ws[l].id),delete Ws[l]),!u)return 0;var d=setTimeout(()=>{delete Ws[l],xd(()=>Za(l,performance.now()))},u);return Ws[l]={id:d,lc:u},0},B:(l,u,d,f)=>{var y=new Date().getFullYear(),k=new Date(y,0,1).getTimezoneOffset();y=new Date(y,6,1).getTimezoneOffset(),te[l>>2]=60*Math.max(k,y),se[u>>2]=+(k!=y),u=M=>{var L=Math.abs(M);return`UTC${0<=M?"-":"+"}${String(Math.floor(L/60)).padStart(2,"0")}${String(L%60).padStart(2,"0")}`},l=u(k),u=u(y),y<k?(ct(l,N,d,17),ct(u,N,f,17)):(ct(l,N,f,17),ct(u,N,d,17))},d:()=>Date.now(),s:()=>2147483648,c:()=>performance.now(),o:l=>{var u=N.length;if(l>>>=0,2147483648<l)return!1;for(var d=1;4>=d;d*=2){var f=u*(1+.2/d);f=Math.min(f,l+100663296);e:{f=(Math.min(2147483648,65536*Math.ceil(Math.max(l,f)/65536))-mo.buffer.byteLength+65535)/65536|0;try{mo.grow(f),Bs();var y=1;break e}catch{}y=void 0}if(y)return!0}return!1},E:(l,u)=>{var d=0,f=0,y;for(y of Ka()){var k=u+d;te[l+f>>2]=k,d+=ct(y,N,k,1/0)+1,f+=4}return 0},F:(l,u)=>{var d=Ka();te[l>>2]=d.length,l=0;for(var f of d)l+=fs(f)+1;return te[u>>2]=l,0},e:function(l){try{var u=Ae(l);return Qi(u),0}catch(d){if(typeof de>"u"||d.name!=="ErrnoError")throw d;return d.Pa}},p:function(l,u){try{var d=Ae(l);return x[u]=d.tty?2:Ee(d.mode)?3:(d.mode&61440)===40960?7:4,re[u+2>>1]=0,Ue[u+8>>3]=BigInt(0),Ue[u+16>>3]=BigInt(0),0}catch(f){if(typeof de>"u"||f.name!=="ErrnoError")throw f;return f.Pa}},w:function(l,u,d,f){try{e:{var y=Ae(l);l=u;for(var k,M=u=0;M<d;M++){var L=te[l>>2],ne=te[l+4>>2];l+=8;var B=Ha(y,x,L,ne,k);if(0>B){var me=-1;break e}if(u+=B,B<ne)break;typeof k<"u"&&(k+=B)}me=u}return te[f>>2]=me,0}catch(Pe){if(typeof de>"u"||Pe.name!=="ErrnoError")throw Pe;return Pe.Pa}},D:function(l,u,d,f){u=-9007199254740992>u||9007199254740992<u?NaN:Number(u);try{if(isNaN(u))return 61;var y=Ae(l);return Wa(y,u,d),Ue[f>>3]=BigInt(y.position),y.rb&&u===0&&d===0&&(y.rb=null),0}catch(k){if(typeof de>"u"||k.name!=="ErrnoError")throw k;return k.Pa}},I:function(l){try{var u=Ae(l);return u.Ma?.fsync?.(u)}catch(d){if(typeof de>"u"||d.name!=="ErrnoError")throw d;return d.Pa}},t:function(l,u,d,f){try{e:{var y=Ae(l);l=u;for(var k,M=u=0;M<d;M++){var L=te[l>>2],ne=te[l+4>>2];l+=8;var B=Ja(y,x,L,ne,k);if(0>B){var me=-1;break e}if(u+=B,B<ne)break;typeof k<"u"&&(k+=B)}me=u}return te[f>>2]=me,0}catch(Pe){if(typeof de>"u"||Pe.name!=="ErrnoError")throw Pe;return Pe.Pa}},k:Va};function tr(){function l(){if(i.calledRun=!0,!j){if(!i.noFSInit&&!Ua){var u,d;Ua=!0,u??=i.stdin,d??=i.stdout,f??=i.stderr,u?Dt("stdin",u):Ki("/dev/tty","/dev/stdin"),d?Dt("stdout",null,d):Ki("/dev/tty","/dev/stdout"),f?Dt("stderr",null,f):Ki("/dev/tty1","/dev/stderr"),_s("/dev/stdin",0),_s("/dev/stdout",1),_s("/dev/stderr",1)}if(sr.N(),Oa=!1,i.onRuntimeInitialized?.(),i.postRun)for(typeof i.postRun=="function"&&(i.postRun=[i.postRun]);i.postRun.length;){var f=i.postRun.shift();Bi.push(f)}ps(Bi)}}if(0<Qe)gs=tr;else{if(i.preRun)for(typeof i.preRun=="function"&&(i.preRun=[i.preRun]);i.preRun.length;)qs();ps(Xn),0<Qe?gs=tr:i.setStatus?(i.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>i.setStatus(""),1),l()},1)):l()}}var sr;return(async function(){function l(d){return d=sr=d.exports,i._sqlite3_free=d.P,i._sqlite3_value_text=d.Q,i._sqlite3_prepare_v2=d.R,i._sqlite3_step=d.S,i._sqlite3_reset=d.T,i._sqlite3_exec=d.U,i._sqlite3_finalize=d.V,i._sqlite3_column_name=d.W,i._sqlite3_column_text=d.X,i._sqlite3_column_type=d.Y,i._sqlite3_errmsg=d.Z,i._sqlite3_clear_bindings=d._,i._sqlite3_value_blob=d.$,i._sqlite3_value_bytes=d.aa,i._sqlite3_value_double=d.ba,i._sqlite3_value_int=d.ca,i._sqlite3_value_type=d.da,i._sqlite3_result_blob=d.ea,i._sqlite3_result_double=d.fa,i._sqlite3_result_error=d.ga,i._sqlite3_result_int=d.ha,i._sqlite3_result_int64=d.ia,i._sqlite3_result_null=d.ja,i._sqlite3_result_text=d.ka,i._sqlite3_aggregate_context=d.la,i._sqlite3_column_count=d.ma,i._sqlite3_data_count=d.na,i._sqlite3_column_blob=d.oa,i._sqlite3_column_bytes=d.pa,i._sqlite3_column_double=d.qa,i._sqlite3_bind_blob=d.ra,i._sqlite3_bind_double=d.sa,i._sqlite3_bind_int=d.ta,i._sqlite3_bind_text=d.ua,i._sqlite3_bind_parameter_index=d.va,i._sqlite3_sql=d.wa,i._sqlite3_normalized_sql=d.xa,i._sqlite3_changes=d.ya,i._sqlite3_close_v2=d.za,i._sqlite3_create_function_v2=d.Aa,i._sqlite3_update_hook=d.Ba,i._sqlite3_open=d.Ca,lo=i._malloc=d.Da,Js=i._free=d.Ea,i._RegisterExtensionFunctions=d.Fa,Xa=d.Ga,Za=d.Ha,co=d.Ia,Yt=d.Ja,uo=d.Ka,mo=d.M,Rt=d.O,Bs(),Qe--,i.monitorRunDependencies?.(Qe),Qe==0&&gs&&(d=gs,gs=null,d()),sr}Qe++,i.monitorRunDependencies?.(Qe);var u={a:Rd};return i.instantiateWasm?new Promise(d=>{i.instantiateWasm(u,(f,y)=>{d(l(f,y))})}):(yt??=i.locateFile?i.locateFile("sql-wasm.wasm",h):h+"sql-wasm.wasm",l((await Gi(u)).instance))})(),tr(),s}),vo)};typeof xo=="object"&&typeof ts=="object"?(ts.exports=Ao,ts.exports.default=Ao):typeof define=="function"&&define.amd?define([],function(){return Ao}):typeof xo=="object"&&(xo.Module=Ao)});var Oo=Te(Ct=>{"use strict";Object.defineProperty(Ct,"__esModule",{value:!0});Ct.utf8Count=Cp;Ct.utf8EncodeJs=zl;Ct.utf8EncodeTE=$l;Ct.utf8Encode=Sp;Ct.utf8DecodeJs=Wl;Ct.utf8DecodeTD=Hl;Ct.utf8Decode=Pp;function Cp(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 zl(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 bp=new TextEncoder,kp=50;function $l(n,e,t){bp.encodeInto(n,e.subarray(t))}function Sp(n,e,t){n.length>kp?$l(n,e,t):zl(n,e,t)}var wp=4096;function Wl(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,m=n[s++]&63;i.push((a&31)<<12|c<<6|m)}else if((a&248)===240){let c=n[s++]&63,m=n[s++]&63,p=n[s++]&63,g=(a&7)<<18|c<<12|m<<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>=wp&&(r+=String.fromCharCode(...i),i.length=0)}return i.length>0&&(r+=String.fromCharCode(...i)),r}var Tp=new TextDecoder,Mp=200;function Hl(n,e,t){let s=n.subarray(e,e+t);return Tp.decode(s)}function Pp(n,e,t){return t>Mp?Hl(n,e,t):Wl(n,e,t)}});var yr=Te(Fo=>{"use strict";Object.defineProperty(Fo,"__esModule",{value:!0});Fo.ExtData=void 0;var hr=class{type;data;constructor(e,t){this.type=e,this.data=t}};Fo.ExtData=hr});var Lo=Te(No=>{"use strict";Object.defineProperty(No,"__esModule",{value:!0});No.DecodeError=void 0;var _r=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})}};No.DecodeError=_r});var jo=Te(Ot=>{"use strict";Object.defineProperty(Ot,"__esModule",{value:!0});Ot.UINT32_MAX=void 0;Ot.setUint64=vp;Ot.setInt64=Ap;Ot.getInt64=xp;Ot.getUint64=Dp;Ot.UINT32_MAX=4294967295;function vp(n,e,t){let s=t/4294967296,o=t;n.setUint32(e,s),n.setUint32(e+4,o)}function Ap(n,e,t){let s=Math.floor(t/4294967296),o=t;n.setUint32(e,s),n.setUint32(e+4,o)}function xp(n,e){let t=n.getInt32(e),s=n.getUint32(e+4);return t*4294967296+s}function Dp(n,e){let t=n.getUint32(e),s=n.getUint32(e+4);return t*4294967296+s}});var Cr=Te(He=>{"use strict";Object.defineProperty(He,"__esModule",{value:!0});He.timestampExtension=He.EXT_TIMESTAMP=void 0;He.encodeTimeSpecToTimestamp=Vl;He.encodeDateToTimeSpec=Kl;He.encodeTimestampExtension=Ql;He.decodeTimestampToTimeSpec=Yl;He.decodeTimestampExtension=Xl;var Ep=Lo(),Jl=jo();He.EXT_TIMESTAMP=-1;var Rp=4294967296-1,Ip=17179869184-1;function Vl({sec:n,nsec:e}){if(n>=0&&e>=0&&n<=Ip)if(e===0&&n<=Rp){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,Jl.setInt64)(s,4,n),t}}function Kl(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 Ql(n){if(n instanceof Date){let e=Kl(n);return Vl(e)}else return null}function Yl(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,Jl.getInt64)(e,4),s=e.getUint32(0);return{sec:t,nsec:s}}default:throw new Ep.DecodeError(`Unrecognized data size for timestamp (expected 4, 8, or 12): ${n.length}`)}}function Xl(n){let e=Yl(n);return new Date(e.sec*1e3+e.nsec/1e6)}He.timestampExtension={type:He.EXT_TIMESTAMP,encode:Ql,decode:Xl}});var qo=Te(Bo=>{"use strict";Object.defineProperty(Bo,"__esModule",{value:!0});Bo.ExtensionCodec=void 0;var Go=yr(),Up=Cr(),br=class n{static defaultCodec=new n;__brand;builtInEncoders=[];builtInDecoders=[];encoders=[];decoders=[];constructor(){this.register(Up.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 Go.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 Go.ExtData(r,i)}}}return e instanceof Go.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 Go.ExtData(t,e)}};Bo.ExtensionCodec=br});var Sr=Te(kr=>{"use strict";Object.defineProperty(kr,"__esModule",{value:!0});kr.ensureUint8Array=Fp;function Op(n){return n instanceof ArrayBuffer||typeof SharedArrayBuffer<"u"&&n instanceof SharedArrayBuffer}function Fp(n){return n instanceof Uint8Array?n:ArrayBuffer.isView(n)?new Uint8Array(n.buffer,n.byteOffset,n.byteLength):Op(n)?new Uint8Array(n):Uint8Array.from(n)}});var Tr=Te(gt=>{"use strict";Object.defineProperty(gt,"__esModule",{value:!0});gt.Encoder=gt.DEFAULT_INITIAL_BUFFER_SIZE=gt.DEFAULT_MAX_DEPTH=void 0;var Zl=Oo(),Np=qo(),ec=jo(),Lp=Sr();gt.DEFAULT_MAX_DEPTH=100;gt.DEFAULT_INITIAL_BUFFER_SIZE=2048;var wr=class n{extensionCodec;context;useBigInt64;maxDepth;initialBufferSize;sortKeys;forceFloat32;ignoreUndefined;forceIntegerToFloat;pos;view;bytes;entered=!1;constructor(e){this.extensionCodec=e?.extensionCodec??Np.ExtensionCodec.defaultCodec,this.context=e?.context,this.useBigInt64=e?.useBigInt64??!1,this.maxDepth=e?.maxDepth??gt.DEFAULT_MAX_DEPTH,this.initialBufferSize=e?.initialBufferSize??gt.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,Zl.utf8Count)(e);this.ensureBufferSizeToWrite(5+s),this.writeStringHeader(s),(0,Zl.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,Lp.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,ec.setUint64)(this.view,this.pos,e),this.pos+=8}writeI64(e){this.ensureBufferSizeToWrite(8),(0,ec.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}};gt.Encoder=wr});var tc=Te(Mr=>{"use strict";Object.defineProperty(Mr,"__esModule",{value:!0});Mr.encode=Gp;var jp=Tr();function Gp(n,e){return new jp.Encoder(e).encodeSharedRef(n)}});var sc=Te(Pr=>{"use strict";Object.defineProperty(Pr,"__esModule",{value:!0});Pr.prettyByte=Bp;function Bp(n){return`${n<0?"-":""}0x${Math.abs(n).toString(16).padStart(2,"0")}`}});var nc=Te(zo=>{"use strict";Object.defineProperty(zo,"__esModule",{value:!0});zo.CachedKeyDecoder=void 0;var qp=Oo(),zp=16,$p=16,vr=class{hit=0;miss=0;caches;maxKeyLength;maxLengthPerKey;constructor(e=zp,t=$p){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,qp.utf8DecodeJs)(e,t,s),r=Uint8Array.prototype.slice.call(e,t,t+s);return this.store(r,i),i}};zo.CachedKeyDecoder=vr});var Wo=Te($o=>{"use strict";Object.defineProperty($o,"__esModule",{value:!0});$o.Decoder=void 0;var Ar=sc(),Wp=qo(),is=jo(),Hp=Oo(),oc=Sr(),Jp=nc(),bt=Lo(),xr="array",an="map_key",rc="map_value",Vp=n=>{if(typeof n=="string"||typeof n=="number")return n;throw new bt.DecodeError("The type of key must be string or number but "+typeof n)},Dr=class{stack=[];stackHeadPosition=-1;get length(){return this.stackHeadPosition+1}top(){return this.stack[this.stackHeadPosition]}pushArrayState(e){let t=this.getUninitializedStateFromPool();t.type=xr,t.position=0,t.size=e,t.array=new Array(e)}pushMapState(e){let t=this.getUninitializedStateFromPool();t.type=an,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===xr){let s=e;s.size=0,s.array=void 0,s.position=0,s.type=void 0}if(e.type===an||e.type===rc){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}},rn=-1,Rr=new DataView(new ArrayBuffer(0)),Kp=new Uint8Array(Rr.buffer);try{Rr.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 ic=new RangeError("Insufficient data"),Qp=new Jp.CachedKeyDecoder,Er=class n{extensionCodec;context;useBigInt64;rawStrings;maxStrLength;maxBinLength;maxArrayLength;maxMapLength;maxExtLength;keyDecoder;mapKeyConverter;totalPos=0;pos=0;view=Rr;bytes=Kp;headByte=rn;stack=new Dr;entered=!1;constructor(e){this.extensionCodec=e?.extensionCodec??Wp.ExtensionCodec.defaultCodec,this.context=e?.context,this.useBigInt64=e?.useBigInt64??!1,this.rawStrings=e?.rawStrings??!1,this.maxStrLength=e?.maxStrLength??is.UINT32_MAX,this.maxBinLength=e?.maxBinLength??is.UINT32_MAX,this.maxArrayLength=e?.maxArrayLength??is.UINT32_MAX,this.maxMapLength=e?.maxMapLength??is.UINT32_MAX,this.maxExtLength=e?.maxExtLength??is.UINT32_MAX,this.keyDecoder=e?.keyDecoder!==void 0?e.keyDecoder:Qp,this.mapKeyConverter=e?.mapKeyConverter??Vp}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=rn,this.stack.reset()}setBuffer(e){let t=(0,oc.ensureUint8Array)(e);this.bytes=t,this.view=new DataView(t.buffer,t.byteOffset,t.byteLength),this.pos=0}appendBuffer(e){if(this.headByte===rn&&!this.hasRemaining(1))this.setBuffer(e);else{let t=this.bytes.subarray(this.pos),s=(0,oc.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,Ar.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 bt.DecodeError(`Unrecognized type byte: ${(0,Ar.prettyByte)(e)}`);this.complete();let s=this.stack;for(;s.length>0;){let o=s.top();if(o.type===xr)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===an){if(t==="__proto__")throw new bt.DecodeError("The key __proto__ is not allowed");o.key=this.mapKeyConverter(t),o.type=rc;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=an;continue e}}return t}}readHeadByte(){return this.headByte===rn&&(this.headByte=this.readU8()),this.headByte}complete(){this.headByte=rn}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 bt.DecodeError(`Unrecognized array type byte: ${(0,Ar.prettyByte)(e)}`)}}}pushMapState(e){if(e>this.maxMapLength)throw new bt.DecodeError(`Max length exceeded: map length (${e}) > maxMapLengthLength (${this.maxMapLength})`);this.stack.pushMapState(e)}pushArrayState(e){if(e>this.maxArrayLength)throw new bt.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 bt.DecodeError(`Max length exceeded: UTF-8 byte length (${e}) > maxStrLength (${this.maxStrLength})`);if(this.bytes.byteLength<this.pos+t+e)throw ic;let s=this.pos+t,o;return this.stateIsMapKey()&&this.keyDecoder?.canBeCached(e)?o=this.keyDecoder.decode(this.bytes,s,e):o=(0,Hp.utf8Decode)(this.bytes,s,e),this.pos+=t+e,o}stateIsMapKey(){return this.stack.length>0?this.stack.top().type===an:!1}decodeBinary(e,t){if(e>this.maxBinLength)throw new bt.DecodeError(`Max length exceeded: bin length (${e}) > maxBinLength (${this.maxBinLength})`);if(!this.hasRemaining(e+t))throw ic;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 bt.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,is.getUint64)(this.view,this.pos);return this.pos+=8,e}readI64(){let e=(0,is.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}};$o.Decoder=Er});var lc=Te(Ho=>{"use strict";Object.defineProperty(Ho,"__esModule",{value:!0});Ho.decode=Yp;Ho.decodeMulti=Xp;var ac=Wo();function Yp(n,e){return new ac.Decoder(e).decode(n)}function Xp(n,e){return new ac.Decoder(e).decodeMulti(n)}});var dc=Te(ln=>{"use strict";Object.defineProperty(ln,"__esModule",{value:!0});ln.isAsyncIterable=cc;ln.asyncIterableFromStream=uc;ln.ensureAsyncIterable=Zp;function cc(n){return n[Symbol.asyncIterator]!=null}async function*uc(n){let e=n.getReader();try{for(;;){let{done:t,value:s}=await e.read();if(t)return;yield s}}finally{e.releaseLock()}}function Zp(n){return cc(n)?n:uc(n)}});var mc=Te(cn=>{"use strict";Object.defineProperty(cn,"__esModule",{value:!0});cn.decodeAsync=eg;cn.decodeArrayStream=tg;cn.decodeMultiStream=sg;var Ir=Wo(),Ur=dc();async function eg(n,e){let t=(0,Ur.ensureAsyncIterable)(n);return new Ir.Decoder(e).decodeAsync(t)}function tg(n,e){let t=(0,Ur.ensureAsyncIterable)(n);return new Ir.Decoder(e).decodeArrayStream(t)}function sg(n,e){let t=(0,Ur.ensureAsyncIterable)(n);return new Ir.Decoder(e).decodeStream(t)}});var Fr=Te(V=>{"use strict";Object.defineProperty(V,"__esModule",{value:!0});V.decodeTimestampExtension=V.encodeTimestampExtension=V.decodeTimestampToTimeSpec=V.encodeTimeSpecToTimestamp=V.encodeDateToTimeSpec=V.EXT_TIMESTAMP=V.ExtData=V.ExtensionCodec=V.Encoder=V.DecodeError=V.Decoder=V.decodeMultiStream=V.decodeArrayStream=V.decodeAsync=V.decodeMulti=V.decode=V.encode=void 0;var ng=tc();Object.defineProperty(V,"encode",{enumerable:!0,get:function(){return ng.encode}});var pc=lc();Object.defineProperty(V,"decode",{enumerable:!0,get:function(){return pc.decode}});Object.defineProperty(V,"decodeMulti",{enumerable:!0,get:function(){return pc.decodeMulti}});var Or=mc();Object.defineProperty(V,"decodeAsync",{enumerable:!0,get:function(){return Or.decodeAsync}});Object.defineProperty(V,"decodeArrayStream",{enumerable:!0,get:function(){return Or.decodeArrayStream}});Object.defineProperty(V,"decodeMultiStream",{enumerable:!0,get:function(){return Or.decodeMultiStream}});var og=Wo();Object.defineProperty(V,"Decoder",{enumerable:!0,get:function(){return og.Decoder}});var ig=Lo();Object.defineProperty(V,"DecodeError",{enumerable:!0,get:function(){return ig.DecodeError}});var rg=Tr();Object.defineProperty(V,"Encoder",{enumerable:!0,get:function(){return rg.Encoder}});var ag=qo();Object.defineProperty(V,"ExtensionCodec",{enumerable:!0,get:function(){return ag.ExtensionCodec}});var lg=yr();Object.defineProperty(V,"ExtData",{enumerable:!0,get:function(){return lg.ExtData}});var As=Cr();Object.defineProperty(V,"EXT_TIMESTAMP",{enumerable:!0,get:function(){return As.EXT_TIMESTAMP}});Object.defineProperty(V,"encodeDateToTimeSpec",{enumerable:!0,get:function(){return As.encodeDateToTimeSpec}});Object.defineProperty(V,"encodeTimeSpecToTimestamp",{enumerable:!0,get:function(){return As.encodeTimeSpecToTimestamp}});Object.defineProperty(V,"decodeTimestampToTimeSpec",{enumerable:!0,get:function(){return As.decodeTimestampToTimeSpec}});Object.defineProperty(V,"encodeTimestampExtension",{enumerable:!0,get:function(){return As.encodeTimestampExtension}});Object.defineProperty(V,"decodeTimestampExtension",{enumerable:!0,get:function(){return As.decodeTimestampExtension}})});var fd=Te((JM,PC)=>{PC.exports={name:"@rajbos/ai-engineering-fluency",version:"0.3.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:"^5.6.2",commander:"^15.0.0",esbuild:"^0.28.0","sql.js":"^1.12.0",typescript:"^7.0.2"},engines:{node:">=22.14.0"}}});var It=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}},Zt=class extends It{constructor(e){super(1,"commander.invalidArgument",e),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};var Vs=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 Zt(`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 go(n){let e=n.name()+(n.variadic===!0?"...":"");return n.required?"<"+e+">":"["+e+"]"}var gl=require("node:events"),ho=T(require("node:child_process"),1),dt=T(require("node:path"),1),Qs=T(require("node:fs"),1),Z=T(require("node:process"),1),fl=require("node:util");var ul=require("node:util"),Ks=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=>go(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 _=g.map(C=>i(t.styleOptionTerm(t.optionTerm(C)),t.styleOptionDescription(t.optionDescription(C))));r=r.concat(this.formatItemList(h,_,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 _=g.map(C=>i(t.styleSubcommandTerm(t.subcommandTerm(C)),t.styleSubcommandDescription(t.subcommandDescription(C))));r=r.concat(this.formatItemList(h,_,t))}),r.join(`
4
+ `)}displayWidth(e){return(0,ul.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)),c=2,p=(this.helpWidth??80)-t-c-2,g;return p<this.minWidthToWrap||o.preformatted(s)?g=s:g=o.boxWrap(s,p).replace(/\n/g,`
5
+ `+" ".repeat(t+c)),r+a+" ".repeat(c)+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 c=[a.shift()],m=this.displayWidth(c[0]);a.forEach(p=>{let g=this.displayWidth(p);if(m+g<=t){c.push(p),m+=g;return}i.push(c.join(""));let h=p.trimStart();c=[h],m=this.displayWidth(h)}),i.push(c.join(""))}),i.join(`
7
+ `)}};var Cs=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=mm(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 Zt(`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?dl(this.name().replace(/^no-/,"")):dl(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}},fo=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 dl(n){return n.split("-").reduce((e,t)=>e+t[0].toUpperCase()+t.slice(1))}function mm(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
- - or use a double dash for a long option (and can have two, like '--ws, --workspace')`):s.test(r)?new Error(`${l}
11
- - too many short flags`):o.test(r)?new Error(`${l}
12
- - too many long flags`):new Error(`${l}
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 Md(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 Ai(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 l=Md(n,r),u=Math.max(n.length,r.length);(u-l)/u>i&&(l<o?(o=l,s=[r]):l===o&&s.push(r))}),s.sort((r,l)=>r.localeCompare(l)),t&&(s=s.map(r=>`--${r}`)),s.length>1?`
10
+ - or use a double dash for a long option (and can have two, like '--ws, --workspace')`):s.test(r)?new Error(`${a}
11
+ - too many short flags`):o.test(r)?new Error(`${a}
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 pm(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 or(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=pm(n,r),c=Math.max(n.length,r.length);(c-a)/c>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 ie=class n extends Ba.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=>J.default.stdout.write(t),writeErr:t=>J.default.stderr.write(t),outputError:(t,s)=>s(t),getOutHelpWidth:()=>J.default.stdout.isTTY?J.default.stdout.columns:void 0,getErrHelpWidth:()=>J.default.stderr.isTTY?J.default.stderr.columns:void 0,getOutHasColors:()=>ja()??(J.default.stdout.isTTY&&J.default.stdout.hasColors?.()),getErrHasColors:()=>ja()??(J.default.stderr.isTTY&&J.default.stderr.hasColors?.()),stripColor:t=>(0,qa.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,l]=e.match(/([^ ]+) *(.*)/),u=this.createCommand(r);return o&&(u.description(o),u._executableHandler=!0),i.isDefault&&(this._defaultCommandName=u._name),u._hidden=!!(i.noHelp||i.hidden),u._executableFile=i.executableFile||null,l&&u.arguments(l),this._registerCommand(u),u.parent=this,u.copyInheritedSettings(this),o?this:u}createCommand(e){return new n(e)}createHelp(){return Object.assign(new Es,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 Ds(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",l=this.createCommand(o);return l.helpOption(!1),i&&l.arguments(i),r&&l.description(r),this._addImplicitHelpCommand=!0,this._helpCommand=l,(e||t)&&this._initCommandGroup(l),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 wt(e,t,s)),J.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 ts(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,l)=>{i==null&&e.presetArg!==void 0&&(i=e.presetArg);let u=this.getOptionValue(s);i!==null&&e.parseArg?i=this._callParseArg(e,i,u,r):i!==null&&e.variadic&&(i=e._collectValue(i,u)),i==null&&(e.negate?i=!1:e.isBoolean()||e.optional?i=!0:i=""),this.setOptionValueWithSource(s,i,l)};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 ts)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 l=o;o=(u,m)=>{let p=l.exec(u);return p?p[0]:m},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){J.default.versions?.electron&&(t.from="electron");let o=J.default.execArgv??[];(o.includes("-e")||o.includes("--eval")||o.includes("-p")||o.includes("--print"))&&(t.from="eval")}e===void 0&&(e=J.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":J.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(Rs.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
15
+ (Did you mean ${s[0]}?)`:""}var ue=class n extends gl.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=>Z.default.stdout.write(t),writeErr:t=>Z.default.stderr.write(t),outputError:(t,s)=>s(t),getOutHelpWidth:()=>Z.default.stdout.isTTY?Z.default.stdout.columns:void 0,getErrHelpWidth:()=>Z.default.stderr.isTTY?Z.default.stderr.columns:void 0,getOutHasColors:()=>pl()??(Z.default.stdout.isTTY&&Z.default.stdout.hasColors?.()),getErrHasColors:()=>pl()??(Z.default.stderr.isTTY&&Z.default.stderr.hasColors?.()),stripColor:t=>(0,fl.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(/([^ ]+) *(.*)/),c=this.createCommand(r);return o&&(c.description(o),c._executableHandler=!0),i.isDefault&&(this._defaultCommandName=c._name),c._hidden=!!(i.noHelp||i.hidden),c._executableFile=i.executableFile||null,a&&c.arguments(a),this._registerCommand(c),c.parent=this,c.copyInheritedSettings(this),o?this:c}createCommand(e){return new n(e)}createHelp(){return Object.assign(new Ks,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 Vs(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 It(e,t,s)),Z.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 Cs(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 c=this.getOptionValue(s);i!==null&&e.parseArg?i=this._callParseArg(e,i,c,r):i!==null&&e.variadic&&(i=e._collectValue(i,c)),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 Cs)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=(c,m)=>{let p=a.exec(c);return p?p[0]:m},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){Z.default.versions?.electron&&(t.from="electron");let o=Z.default.execArgv??[];(o.includes("-e")||o.includes("--eval")||o.includes("-p")||o.includes("--print"))&&(t.from="eval")}e===void 0&&(e=Z.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":Z.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(Qs.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,f){let y=tt.default.resolve(p,f);if(Rs.default.existsSync(y))return y;if(s.includes(tt.default.extname(f)))return;let _=s.find(C=>Rs.default.existsSync(`${y}${C}`));if(_)return`${y}${_}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let i=e._executableFile||`${this._name}-${e._name}`,r=this._executableDir||"";if(this._scriptPath){let p;try{p=Rs.default.realpathSync(this._scriptPath)}catch{p=this._scriptPath}r=tt.default.resolve(tt.default.dirname(p),r)}if(r){let p=o(r,i);if(!p&&!e._executableFile&&this._scriptPath){let f=tt.default.basename(this._scriptPath,tt.default.extname(this._scriptPath));f!==this._name&&(p=o(r,`${f}-${e._name}`))}i=p||i}let l=s.includes(tt.default.extname(i)),u;J.default.platform!=="win32"?l?(t.unshift(i),t=Ga(J.default.execArgv).concat(t),u=Hn.default.spawn(J.default.argv[0],t,{stdio:"inherit"})):u=Hn.default.spawn(i,t,{stdio:"inherit"}):(this._checkForMissingExecutable(i,r,e._name),t.unshift(i),t=Ga(J.default.execArgv).concat(t),u=Hn.default.spawn(J.default.execPath,t,{stdio:"inherit"})),u.killed||["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach(f=>{J.default.on(f,()=>{u.killed===!1&&u.exitCode===null&&u.kill(f)})});let m=this._exitCallback;u.on("close",p=>{p=p??1,m?m(new wt(p,"commander.executeSubCommandAsync","(close)")):J.default.exit(p)}),u.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(!m)J.default.exit(1);else{let f=new wt(1,"commander.executeSubCommandAsync","(error)");f.nestedError=p,m(f)}}),this.runningCommand=u}_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 l=`error: command-argument value '${o}' is invalid for argument '${s.name()}'.`;r=this._callParseArg(s,o,i,l)}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,l)=>e(s,l,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(f=>f.options.map(y=>y.short).some(y=>/^-\d$/.test(y))):!1,l=null,u=null,m=0;for(;m<e.length||u;){let p=u??e[m++];if(u=null,p==="--"){o===s&&o.push(p),o.push(...e.slice(m));break}if(l&&(!i(p)||r(p))){this.emit(`option:${l.name()}`,p);continue}if(l=null,i(p)){let f=this._findOption(p);if(f){if(f.required){let y=e[m++];y===void 0&&this.optionMissingArgument(f),this.emit(`option:${f.name()}`,y)}else if(f.optional){let y=null;m<e.length&&(!i(e[m])||r(e[m]))&&(y=e[m++]),this.emit(`option:${f.name()}`,y)}else this.emit(`option:${f.name()}`);l=f.variadic?f:null;continue}}if(p.length>2&&p[0]==="-"&&p[1]!=="-"){let f=this._findOption(`-${p[1]}`);if(f){f.required||f.optional&&this._combineFlagAndOptionalValue?this.emit(`option:${f.name()}`,p.slice(2)):(this.emit(`option:${f.name()}`),u=`-${p.slice(2)}`);continue}}if(/^--[^=]+=/.test(p)){let f=p.indexOf("="),y=this._findOption(p.slice(0,f));if(y&&(y.required||y.optional)){this.emit(`option:${y.name()}`,p.slice(f+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(m));break}else if(this._getHelpCommand()&&p===this._getHelpCommand().name()){t.push(p,...e.slice(m));break}else if(this._defaultCommandName){s.push(p,...e.slice(m));break}}if(this._passThroughOptions){o.push(p,...e.slice(m));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}
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=dt.default.resolve(p,g);if(Qs.default.existsSync(h))return h;if(s.includes(dt.default.extname(g)))return;let _=s.find(C=>Qs.default.existsSync(`${h}${C}`));if(_)return`${h}${_}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let i=e._executableFile||`${this._name}-${e._name}`,r=this._executableDir||"";if(this._scriptPath){let p;try{p=Qs.default.realpathSync(this._scriptPath)}catch{p=this._scriptPath}r=dt.default.resolve(dt.default.dirname(p),r)}if(r){let p=o(r,i);if(!p&&!e._executableFile&&this._scriptPath){let g=dt.default.basename(this._scriptPath,dt.default.extname(this._scriptPath));g!==this._name&&(p=o(r,`${g}-${e._name}`))}i=p||i}let a=s.includes(dt.default.extname(i)),c;Z.default.platform!=="win32"?a?(t.unshift(i),t=ml(Z.default.execArgv).concat(t),c=ho.default.spawn(Z.default.argv[0],t,{stdio:"inherit"})):c=ho.default.spawn(i,t,{stdio:"inherit"}):(this._checkForMissingExecutable(i,r,e._name),t.unshift(i),t=ml(Z.default.execArgv).concat(t),c=ho.default.spawn(Z.default.execPath,t,{stdio:"inherit"})),c.killed||["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach(g=>{Z.default.on(g,()=>{c.killed===!1&&c.exitCode===null&&c.kill(g)})});let m=this._exitCallback;c.on("close",p=>{p=p??1,m?m(new It(p,"commander.executeSubCommandAsync","(close)")):Z.default.exit(p)}),c.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(!m)Z.default.exit(1);else{let g=new It(1,"commander.executeSubCommandAsync","(error)");g.nestedError=p,m(g)}}),this.runningCommand=c}_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,c=null,m=0;for(;m<e.length||c;){let p=c??e[m++];if(c=null,p==="--"){o===s&&o.push(p),o.push(...e.slice(m));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[m++];h===void 0&&this.optionMissingArgument(g),this.emit(`option:${g.name()}`,h)}else if(g.optional){let h=null;m<e.length&&(!i(e[m])||r(e[m]))&&(h=e[m++]),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()}`),c=`-${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(m));break}else if(this._getHelpCommand()&&p===this._getHelpCommand().name()){t.push(p,...e.slice(m));break}else if(this._defaultCommandName){s.push(p,...e.slice(m));break}}if(this._passThroughOptions){o.push(p,...e.slice(m));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 J.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()}`,J.default.env[e.envVar]):this.emit(`optionEnv:${e.name()}`))}})}_parseOptionsImplied(){let e=new Wn(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 l=r.attributeName(),u=this.getOptionValue(l),m=this.options.find(f=>f.negate&&l===f.attributeName()),p=this.options.find(f=>!f.negate&&l===f.attributeName());return m&&(m.presetArg===void 0&&u===!1||m.presetArg!==void 0&&u===m.presetArg)?m:p||r},o=r=>{let l=s(r),u=l.attributeName();return this.getOptionValueSource(u)==="env"?`environment variable '${l.envVar}'`:`option '${l.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(l=>l.long).map(l=>l.long);o=o.concat(r),i=i.parent}while(i&&!i._enablePositionalOptions);t=Ai(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(", "),l=`error: too many arguments${i}. Expected ${t} argument${s} but got ${o}: ${r}.`;this.error(l,{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=Ai(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=>$n(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=tt.default.basename(e,tt.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=l=>this._outputConfiguration.writeErr(l),o=this._outputConfiguration.getErrHasColors(),i=this._outputConfiguration.getErrHelpWidth()):(s=l=>this._outputConfiguration.writeOut(l),o=this._outputConfiguration.getOutHasColors(),i=this._outputConfiguration.getOutHelpWidth()),{error:t,write:l=>(o||(l=this._outputConfiguration.stripColor(l)),s(l)),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(J.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.
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 Z.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()}`,Z.default.env[e.envVar]):this.emit(`optionEnv:${e.name()}`))}})}_parseOptionsImplied(){let e=new fo(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(),c=this.getOptionValue(a),m=this.options.find(g=>g.negate&&a===g.attributeName()),p=this.options.find(g=>!g.negate&&a===g.attributeName());return m&&(m.presetArg===void 0&&c===!1||m.presetArg!==void 0&&c===m.presetArg)?m:p||r},o=r=>{let a=s(r),c=a.attributeName();return this.getOptionValueSource(c)==="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=or(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=or(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=>go(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=dt.default.basename(e,dt.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(Z.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 Ga(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 ja(){if(J.default.env.NO_COLOR||J.default.env.FORCE_COLOR==="0"||J.default.env.FORCE_COLOR==="false")return!1;if(J.default.env.FORCE_COLOR||J.default.env.CLICOLOR_FORCE!==void 0)return!0}var R_=new ie;var za=(n=0)=>e=>`\x1B[${e+n}m`,$a=(n=0)=>e=>`\x1B[${38+n};5;${e}m`,Wa=(n=0)=>(e,t,s)=>`\x1B[${38+n};2;${e};${t};${s}m`,ce={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,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]}},U_=Object.keys(ce.modifier),vd=Object.keys(ce.color),Pd=Object.keys(ce.bgColor),F_=[...vd,...Pd];function Ad(){let n=new Map;for(let[e,t]of Object.entries(ce)){for(let[s,o]of Object.entries(t))ce[s]={open:`\x1B[${o[0]}m`,close:`\x1B[${o[1]}m`},t[s]=ce[s],n.set(o[0],o[1]);Object.defineProperty(ce,e,{value:t,enumerable:!1})}return Object.defineProperty(ce,"codes",{value:n,enumerable:!1}),ce.color.close="\x1B[39m",ce.bgColor.close="\x1B[49m",ce.color.ansi=za(),ce.color.ansi256=$a(),ce.color.ansi16m=Wa(),ce.bgColor.ansi=za(10),ce.bgColor.ansi256=$a(10),ce.bgColor.ansi16m=Wa(10),Object.defineProperties(ce,{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=/[a-f\d]{6}|[a-f\d]{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=>ce.rgbToAnsi256(...ce.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 l=e%36;t=Math.floor(e/36)/5,s=Math.floor(l/6)/5,o=l%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)=>ce.ansi256ToAnsi(ce.rgbToAnsi256(e,t,s)),enumerable:!1},hexToAnsi:{value:e=>ce.ansi256ToAnsi(ce.hexToAnsi256(e)),enumerable:!1}}),ce}var xd=Ad(),He=xd;var Vn=v(require("node:process"),1),Ja=v(require("node:os"),1),xi=v(require("node:tty"),1);function Ge(n,e=globalThis.Deno?globalThis.Deno.args:Vn.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:ue}=Vn.default,Jn;Ge("no-color")||Ge("no-colors")||Ge("color=false")||Ge("color=never")?Jn=0:(Ge("color")||Ge("colors")||Ge("color=true")||Ge("color=always"))&&(Jn=1);function Dd(){if("FORCE_COLOR"in ue)return ue.FORCE_COLOR==="true"?1:ue.FORCE_COLOR==="false"?0:ue.FORCE_COLOR.length===0?1:Math.min(Number.parseInt(ue.FORCE_COLOR,10),3)}function Ed(n){return n===0?!1:{level:n,hasBasic:!0,has256:n>=2,has16m:n>=3}}function Rd(n,{streamIsTTY:e,sniffFlags:t=!0}={}){let s=Dd();s!==void 0&&(Jn=s);let o=t?Jn:s;if(o===0)return 0;if(t){if(Ge("color=16m")||Ge("color=full")||Ge("color=truecolor"))return 3;if(Ge("color=256"))return 2}if("TF_BUILD"in ue&&"AGENT_NAME"in ue)return 1;if(n&&!e&&o===void 0)return 0;let i=o||0;if(ue.TERM==="dumb")return i;if(Vn.default.platform==="win32"){let r=Ja.default.release().split(".");return Number(r[0])>=10&&Number(r[2])>=10586?Number(r[2])>=14931?3:2:1}if("CI"in ue)return["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some(r=>r in ue)?3:["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(r=>r in ue)||ue.CI_NAME==="codeship"?1:i;if("TEAMCITY_VERSION"in ue)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(ue.TEAMCITY_VERSION)?1:0;if(ue.COLORTERM==="truecolor"||ue.TERM==="xterm-kitty"||ue.TERM==="xterm-ghostty"||ue.TERM==="wezterm")return 3;if("TERM_PROGRAM"in ue){let r=Number.parseInt((ue.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(ue.TERM_PROGRAM){case"iTerm.app":return r>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(ue.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(ue.TERM)||"COLORTERM"in ue?1:i}function Ha(n,e={}){let t=Rd(n,{streamIsTTY:n&&n.isTTY,...e});return Ed(t)}var Id={stdout:Ha({isTTY:xi.default.isatty(1)}),stderr:Ha({isTTY:xi.default.isatty(2)})},Va=Id;function Ka(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 Qa(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
28
+ `)}),this}_outputHelpIfRequested(e){let t=this._getHelpOption();t&&e.find(o=>t.is(o))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function ml(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 pl(){if(Z.default.env.NO_COLOR||Z.default.env.FORCE_COLOR==="0"||Z.default.env.FORCE_COLOR==="false")return!1;if(Z.default.env.FORCE_COLOR||Z.default.env.CLICOLOR_FORCE!==void 0)return!0}var VC=new ue;var hl=(n=0)=>e=>`\x1B[${e+n}m`,yl=(n=0)=>e=>`\x1B[${38+n};5;${e}m`,_l=(n=0)=>(e,t,s)=>`\x1B[${38+n};2;${e};${t};${s}m`,pe={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,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]}},QC=Object.keys(pe.modifier),gm=Object.keys(pe.color),fm=Object.keys(pe.bgColor),YC=[...gm,...fm];function hm(){let n=new Map;for(let[e,t]of Object.entries(pe)){for(let[s,o]of Object.entries(t))pe[s]={open:`\x1B[${o[0]}m`,close:`\x1B[${o[1]}m`},t[s]=pe[s],n.set(o[0],o[1]);Object.defineProperty(pe,e,{value:t,enumerable:!1})}return Object.defineProperty(pe,"codes",{value:n,enumerable:!1}),pe.color.close="\x1B[39m",pe.bgColor.close="\x1B[49m",pe.color.ansi=hl(),pe.color.ansi256=yl(),pe.color.ansi16m=_l(),pe.bgColor.ansi=hl(10),pe.bgColor.ansi256=yl(10),pe.bgColor.ansi16m=_l(10),Object.defineProperties(pe,{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=/[a-f\d]{6}|[a-f\d]{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=>pe.rgbToAnsi256(...pe.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)=>pe.ansi256ToAnsi(pe.rgbToAnsi256(e,t,s)),enumerable:!1},hexToAnsi:{value:e=>pe.ansi256ToAnsi(pe.hexToAnsi256(e)),enumerable:!1}}),pe}var ym=hm(),et=ym;var _o=T(require("node:process"),1),bl=T(require("node:os"),1),ir=T(require("node:tty"),1);function $e(n,e=globalThis.Deno?globalThis.Deno.args:_o.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:ge}=_o.default,yo;$e("no-color")||$e("no-colors")||$e("color=false")||$e("color=never")?yo=0:($e("color")||$e("colors")||$e("color=true")||$e("color=always"))&&(yo=1);function _m(){if("FORCE_COLOR"in ge)return ge.FORCE_COLOR==="true"?1:ge.FORCE_COLOR==="false"?0:ge.FORCE_COLOR.length===0?1:Math.min(Number.parseInt(ge.FORCE_COLOR,10),3)}function Cm(n){return n===0?!1:{level:n,hasBasic:!0,has256:n>=2,has16m:n>=3}}function bm(n,{streamIsTTY:e,sniffFlags:t=!0}={}){let s=_m();s!==void 0&&(yo=s);let o=t?yo:s;if(o===0)return 0;if(t){if($e("color=16m")||$e("color=full")||$e("color=truecolor"))return 3;if($e("color=256"))return 2}if("TF_BUILD"in ge&&"AGENT_NAME"in ge)return 1;if(n&&!e&&o===void 0)return 0;let i=o||0;if(ge.TERM==="dumb")return i;if(_o.default.platform==="win32"){let r=bl.default.release().split(".");return Number(r[0])>=10&&Number(r[2])>=10586?Number(r[2])>=14931?3:2:1}if("CI"in ge)return["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some(r=>r in ge)?3:["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(r=>r in ge)||ge.CI_NAME==="codeship"?1:i;if("TEAMCITY_VERSION"in ge)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(ge.TEAMCITY_VERSION)?1:0;if(ge.COLORTERM==="truecolor"||ge.TERM==="xterm-kitty"||ge.TERM==="xterm-ghostty"||ge.TERM==="wezterm")return 3;if("TERM_PROGRAM"in ge){let r=Number.parseInt((ge.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(ge.TERM_PROGRAM){case"iTerm.app":return r>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(ge.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(ge.TERM)||"COLORTERM"in ge?1:i}function Cl(n,e={}){let t=bm(n,{streamIsTTY:n&&n.isTTY,...e});return Cm(t)}var km={stdout:Cl({isTTY:ir.default.isatty(1)}),stderr:Cl({isTTY:ir.default.isatty(2)})},kl=km;function Sl(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 wl(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{stdout:Ya,stderr:Xa}=Va,Di=Symbol("GENERATOR"),ss=Symbol("STYLER"),Is=Symbol("IS_EMPTY"),Za=["ansi","ansi","ansi256","ansi16m"],ns=Object.create(null),Ud=(n,e={})=>{if(e.level&&!(Number.isInteger(e.level)&&e.level>=0&&e.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let t=Ya?Ya.level:0;n.level=e.level===void 0?t:e.level};var Fd=n=>{let e=(...t)=>t.join(" ");return Ud(e,n),Object.setPrototypeOf(e,Us.prototype),e};function Us(n){return Fd(n)}Object.setPrototypeOf(Us.prototype,Function.prototype);for(let[n,e]of Object.entries(He))ns[n]={get(){let t=Kn(this,Ri(e.open,e.close,this[ss]),this[Is]);return Object.defineProperty(this,n,{value:t}),t}};ns.visible={get(){let n=Kn(this,this[ss],!0);return Object.defineProperty(this,"visible",{value:n}),n}};var Ei=(n,e,t,...s)=>n==="rgb"?e==="ansi16m"?He[t].ansi16m(...s):e==="ansi256"?He[t].ansi256(He.rgbToAnsi256(...s)):He[t].ansi(He.rgbToAnsi(...s)):n==="hex"?Ei("rgb",e,t,...He.hexToRgb(...s)):He[t][n](...s),Od=["rgb","hex","ansi256"];for(let n of Od){ns[n]={get(){let{level:t}=this;return function(...s){let o=Ri(Ei(n,Za[t],"color",...s),He.color.close,this[ss]);return Kn(this,o,this[Is])}}};let e="bg"+n[0].toUpperCase()+n.slice(1);ns[e]={get(){let{level:t}=this;return function(...s){let o=Ri(Ei(n,Za[t],"bgColor",...s),He.bgColor.close,this[ss]);return Kn(this,o,this[Is])}}}}var Nd=Object.defineProperties(()=>{},{...ns,level:{enumerable:!0,get(){return this[Di].level},set(n){this[Di].level=n}}}),Ri=(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}},Kn=(n,e,t)=>{let s=(...o)=>Ld(s,o.length===1?""+o[0]:o.join(" "));return Object.setPrototypeOf(s,Nd),s[Di]=n,s[ss]=e,s[Is]=t,s},Ld=(n,e)=>{if(n.level<=0||!e)return n[Is]?"":e;let t=n[ss];if(t===void 0)return e;let{openAll:s,closeAll:o}=t;if(e.includes("\x1B"))for(;t!==void 0;)e=Ka(e,t.close,t.open),t=t.parent;let i=e.indexOf(`
32
- `);return i!==-1&&(e=Qa(e,o,s,i)),s+e+o};Object.defineProperties(Us.prototype,ns);var Gd=Us(),q_=Us({level:Xa?Xa.level:0});var w=Gd;var ht=v(require("fs")),Se=v(require("path")),Qc=v(require("os"));var el={getConfiguration:()=>({get:()=>{}})},Ii={getExtension:()=>{}},Qn=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 Os=v(require("fs")),ol=v(require("path"));function Ui(n){return typeof n.discover=="function"}function sl(n){return typeof n.analyzeUsage=="function"}function Yn(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 fe(n){return n.replace(/\\/g,"/")}var Xn=fe;function Z(n){return fe(n).toLowerCase()}function Zn(n,e=process.platform){let t=fe(n);return e==="linux"?t:t.toLowerCase()}function Fi(n,e,t){try{return n()}catch(s){return console.error(`[recovery] ${t??"unknown"}:`,s),e}}async function Gt(n,e,t){try{return await n()}catch(s){return console.error(`[recovery] ${t??"unknown"}:`,s),e}}var jd=/^mcp__[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}__(.+)$/i;function nl(n){return jd.test(n)}function Bd(n){return!n||n==="agent"?"agent":n.includes("plan-agent/Plan.agent.md")?"plan":n.includes(".agent.md")?"customAgent":"agent"}function eo(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"?Bd(n.id):"ask":"ask":"ask"}function Je(n){return n.startsWith("mcp.")||n.startsWith("mcp_")||n.startsWith("mcp__")}function Fs(n){return n.startsWith("mcp_github_github_")?"mcp_io_github_git_"+n.substring(18):n.startsWith("mcp.github.github.")?"mcp.io.github.git."+n.substring(18):n}function st(n,e={}){let t=e[n]??e[n.toLowerCase()];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(nl(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"}var to=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 Os.promises.access(e),!0}catch{return!1}}pathExistsWithLogging(e,t){try{let s=Os.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(Ui(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();e.push({path:t,exists:this.pathExistsWithLogging(t,"Windsurf Cascade"),source:"Windsurf Cascade"})}return e}checkCopilotExtension(){let e=Ii.getExtension("GitHub.copilot"),t=Ii.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?.()??el.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 Os.promises.readdir(s)).filter(i=>i.endsWith(".json")||i.endsWith(".jsonl")).map(i=>ol.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}}collectAdapterFiles(e,t,s,o,i){for(let r=0;r<e.length;r++){let l=e[r];if(l.status==="rejected"){this.deps.warn(`Could not discover ${t[r].displayName} sessions: ${l.reason}`),this._lastDiscoveryHadError=!0;continue}let u=[];for(let m of l.value.sessionFiles){let p=Zn(m);s.has(p)||(s.add(p),u.push(m))}u.length>0&&(o.push(...u),i&&i(u))}}async collectWindsurfFiles(e,t,s){if(this.deps.windsurf)try{let i=(await this.deps.windsurf.getWindsurfSessions()).map(r=>r.file).filter(r=>{let l=Zn(r);return e.has(l)?!1:(e.add(l),!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(Ui);this.deps.log(`\u{1F50D} Searching for session files via ${i.length} discoverable ecosystem adapter(s) (parallel)`);let r=await Promise.allSettled(i.map(u=>u.discover(this.deps.log)));this.collectAdapterFiles(r,i,t,s,e),await this.collectWindsurfFiles(t,s,e);let l=r.reduce((u,m)=>u+(m.status==="fulfilled"?m.value.sessionFiles.length:0),0)-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 se=v(require("fs")),Ae=v(require("path")),os=v(require("os")),il=v(Ns());var io=class{_sqlJsModule=null;_sqlJsInitPromise=null;_dbCache=null;_dbCacheInflight=new Map;extensionUri;constructor(e){this.extensionUri=e}getOpenCodeDataDir(){let e=os.platform(),t=os.homedir();if(e==="win32")return Ae.join(t,".local","share","opencode");let s=process.env.XDG_DATA_HOME||Ae.join(t,".local","share");return Ae.join(s,"opencode")}isOpenCodeSessionFile(e){let t=Z(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=Ae.join(__dirname,"sql-wasm.wasm"),t;se.existsSync(e)&&(t=se.readFileSync(e));let s=await(0,il.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._dbCacheInflight.clear(),this._sqlJsInitPromise=null}closeDb(e){try{e.close()}catch{}}closeDbCache(){this._dbCache&&(this.closeDb(this._dbCache.db),this._dbCache=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 se.statSync(e)}catch(t){return this.isMissingFileError(t)&&this._dbCache?.path===e&&this.closeDbCache(),null}}getWalMtimeMs(e){try{return se.statSync(e+"-wal").mtimeMs}catch{return 0}}isCachedDbCurrent(e,t){return this._dbCache?.path===e&&this._dbCache.mtimeMs===t.mtimeMs&&this._dbCache.size===t.size&&this._dbCache.walMtimeMs===this.getWalMtimeMs(e)}getDbCacheKey(e,t){return`${e}:${t.mtimeMs}:${t.size}:wal${this.getWalMtimeMs(e)}`}sameDbStats(e,t){return e.mtimeMs===t.mtimeMs&&e.size===t.size}async tryReadDbWithWal(e){let t=e+"-wal",s;try{s=se.statSync(t).size}catch{return null}if(s===0)return null;try{let{DatabaseSync:o}=require("node:sqlite"),i=os.tmpdir(),r=Ae.join(i,`opencode-wal-${Date.now()}.db`),l=r+"-wal",u=r+"-shm",m=e+"-shm";se.copyFileSync(e,r),se.copyFileSync(t,l),se.existsSync(m)&&se.copyFileSync(m,u);let p=new o(r);p.exec("PRAGMA wal_checkpoint(TRUNCATE);"),p.close();let f=se.readFileSync(r);for(let y of[r,l,u])try{se.unlinkSync(y)}catch{}return f}catch{return null}}async refreshOpenCodeDb(e,t){let s;try{let i=await this.initSqlJs(),l=await this.tryReadDbWithWal(e)??se.readFileSync(e);s=new i.Database(l)}catch{return this.getCachedDbForPath(e)}let o=this.statOpenCodeDb(e);return!o||!this.sameDbStats(t,o)?(this.closeDb(s),this.isCachedDbCurrent(e,o??t)?this._dbCache?.db??null:this.getCachedDbForPath(e)):(this.closeDbCache(),this._dbCache={db:s,path:e,mtimeMs:t.mtimeMs,size:t.size,walMtimeMs:this.getWalMtimeMs(e)},s)}async getOpenCodeDb(){let e=Ae.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 l=0;l<i.length;l++)r[i[l]]=o[l];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=Ae.join(this.getOpenCodeDataDir(),"opencode.db");return se.promises.stat(t)}return se.promises.stat(e)}readOpenCodeMessages(e){let t=this.getOpenCodeDataDir(),s=Ae.join(t,"storage","message",e),o=[];try{if(!se.existsSync(s))return o;let i=se.readdirSync(s,{withFileTypes:!0});for(let r of i)if(!(!r.isFile()||!r.name.endsWith(".json")))try{let l=se.readFileSync(Ae.join(s,r.name),"utf8"),u=JSON.parse(l);o.push(u)}catch{}}catch{}return o.sort((i,r)=>(i.time?.created||0)-(r.time?.created||0)),o}readOpenCodeParts(e){let t=this.getOpenCodeDataDir(),s=Ae.join(t,"storage","part",e),o=[];try{if(!se.existsSync(s))return o;let i=se.readdirSync(s,{withFileTypes:!0});for(let r of i)if(!(!r.isFile()||!r.name.endsWith(".json")))try{let l=se.readFileSync(Ae.join(s,r.name),"utf8"),u=JSON.parse(l);o.push(u)}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=Ae.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 l=s.get(r.id)??[];if(l.length===0)continue;let u=this.computeTurnCumTotal(l,o),m=u-o;if(m<=0){o=u;continue}let p=l[0].modelID||l[0].model?.modelID||"unknown";t[p]||(t[p]={inputTokens:0,outputTokens:0});let f=l.reduce((C,S)=>C+(S.tokens?.output||0)+(S.tokens?.reasoning||0),0);t[p].inputTokens+=Math.max(0,m-f),t[p].outputTokens+=f;let y=l.reduce((C,S)=>C+(S.tokens?.cache?.read||0),0),_=l.reduce((C,S)=>C+(S.tokens?.cache?.write||0),0);y>0&&(t[p].cachedReadTokens=(t[p].cachedReadTokens??0)+y),_>0&&(t[p].cacheCreationTokens=(t[p].cacheCreationTokens??0)+_),o=u}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),l=this.getAssistantMessagesByParent(t),u={};for(let p=0;p<t.length;p++){let f=t[p];if(f.role!=="user")continue;let y=l.get(f.id)??[];if(y.length===0)continue;let _=y[0].modelID||y[0].model?.modelID||"unknown";u[_]=(u[_]||0)+1}let m={};for(let[p,f]of Object.entries(r))m[p]={...f,interactions:u[p]||0};return{tokens:o,interactions:i,modelUsage:m,timestamp:s}}};var Ve=v(require("fs")),Bt=v(require("path")),Ls=v(require("os")),rl=v(Ns());var ro=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 Ve.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(),l=Ve.readFileSync(e);s=new r.Database(l)}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(Ls.platform()==="win32"){let s=process.env.LOCALAPPDATA||Bt.join(Ls.homedir(),"AppData","Local");return Bt.join(s,"crush")}let t=process.env.XDG_CONFIG_HOME||Bt.join(Ls.homedir(),".config");return Bt.join(t,"crush")}readCrushProjects(){let e=Bt.join(this.getCrushConfigDir(),"projects.json");if(!Ve.existsSync(e))return[];try{let t=Ve.readFileSync(e,"utf8"),s=JSON.parse(t);return Array.isArray(s.projects)?s.projects:[]}catch{return[]}}isCrushSessionFile(e){return fe(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=Bt.join(__dirname,"sql-wasm.wasm"),t;Ve.existsSync(e)&&(t=Ve.readFileSync(e));let s=await(0,rl.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 Ve.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,l=i[0].values[0],u={};return r.forEach((m,p)=>{u[m]=l[p]}),u}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(l=>{let u={};if(r.forEach((m,p)=>{u[m]=l[p]}),typeof u.parts=="string")try{u.parts=JSON.parse(u.parts)}catch{u.parts=[]}return u})}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 l=(await this.getCrushMessages(e)).filter(p=>p.role==="assistant"&&p.model);if(l.length===0)return t.unknown={inputTokens:o,outputTokens:i},t;let u={};for(let p of l){let f=p.model||"unknown";u[f]=(u[f]||0)+1}let m=l.length;for(let[p,f]of Object.entries(u)){let y=f/m;t[p]={inputTokens:Math.round(o*y),outputTokens:Math.round(i*y)}}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(),l=await this.getCrushModelUsage(e),m=(await this.getCrushMessages(e)).filter(y=>y.role==="user").length,p=s+o,f={};for(let[y,_]of Object.entries(l)){let C=_.inputTokens+_.outputTokens,S=p>0?C/p:0;f[y]={inputTokens:_.inputTokens,outputTokens:_.outputTokens,interactions:Math.round(m*S)}}return{tokens:i,interactions:m,modelUsage:f,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 Gs=v(require("fs")),qt=v(require("path")),al=v(require("os"));var ao=class{getContinueDataDir(){return qt.join(al.homedir(),".continue")}getContinueSessionsDir(){return qt.join(this.getContinueDataDir(),"sessions")}isContinueSessionFile(e){let t=Z(e);return t.includes("/.continue/sessions/")&&t.endsWith(".json")}async getContinueSessionFiles(){let e=this.getContinueSessionsDir();try{await Gs.promises.access(e)}catch{return[]}try{return(await Gs.promises.readdir(e)).filter(s=>s.endsWith(".json")&&s!=="sessions.json").map(s=>qt.join(e,s))}catch{return[]}}async readSessionFile(e){try{let t=await Gs.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";s[r]||(s[r]={inputTokens:0,outputTokens: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=qt.join(this.getContinueSessionsDir(),"sessions.json"),t=new Map;try{let s=await Gs.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 qt.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(`
33
- `):""}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:l,nextIndex:u}=this.buildTurnFromHistory(s,i,t.chatModelTitle||null);o.push(l),i=u}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 l=e[r],u=l.message?.role;u==="assistant"?this.processAssistantSubItem(l,i):u==="tool"&&this.processToolSubItem(l,i),r++}for(let[,l]of i.pendingToolCalls)i.toolCalls.push(l);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 ls=v(require("fs")),Ke=v(require("path")),Gi=v(require("os"));function he(n){let e=n.getFullYear(),t=String(n.getMonth()+1).padStart(2,"0"),s=String(n.getDate()).padStart(2,"0");return`${e}-${t}-${s}`}function qd(n){if(typeof n!="object"||n===null)return;let t=n.result;if(!(typeof t!="object"||t===null))return t}function zd(n){if(typeof n!="object"||n===null)return;let t=n.response;if(Array.isArray(t))return t}function $d(n){return typeof n!="object"||n===null?!1:n.kind==="toolInvocationSerialized"}function Wd(n){return typeof n!="object"||n===null?!1:n.kind==="subagent"}var Hd=20,Jd=5,Vd=130,Kd=50,Qd=10,Yd=.25,Xd=10,ll=new WeakMap;function Zd(n){let e=ll.get(n);return e||(e=Object.entries(n).map(([t,s])=>[t,t.replace("-",""),s]),ll.set(n,e)),e}function W(n,e="gpt-4",t={}){let s=Yd;for(let[o,i,r]of Zd(t))if(e.includes(o)||e.includes(i)){s=r;break}return Math.ceil(n.length*s)}function em(n){return n.trim().toLowerCase().replace(/\s+/g,"-")}function is(n){if(!$d(n))return null;let e=n.toolSpecificData;if(!Wd(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(([l],[u])=>Number(l)-Number(u)),s=r.map(([,l])=>typeof l=="string"?l:"").join("")}let o=typeof e.modelName=="string"?e.modelName:"",i=o?em(o):"";return t||s?{prompt:t,result:s,modelName:i}:null}function rs(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 Rb=1/1e11;function tm(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 sm(n,e){let t=n.length;for(let o of e.keys())o+1>t&&(t=o+1);let s=0;for(let o=0;o<t;o++){let i=qd(n[o]),r=i?tm(i):0;if(r>0)s+=r;else{let l=e.get(o);l&&(s+=l.promptTokens+l.outputTokens)}}return s}function nm(n){let e=is(n);if(!e)return 0;let t=0;return e.prompt&&(t+=W(e.prompt)),e.result&&(t+=W(e.result)),t}function om(n){let e=0;for(let t of n){let s=zd(t);if(s)for(let o of s)e+=nm(o)}return e}function im(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+=W(String(i.text)))}return t}function rm(n,e){if(is(n))return;let{text:t,isThinking:s}=rs(n);t&&(s?e.totalThinkingTokens+=W(t):e.totalTokens+=W(t))}function am(n,e){let t=n.k;if(!(n.kind!==2||!t?.includes("response")||!Array.isArray(n.v)))for(let s of n.v)rm(s,e)}var Oi=class{estimate(e){let t={totalTokens:0,totalThinkingTokens:0,parseFailedLines:0},s={};for(let u of e)if(u.trim())try{let m=JSON.parse(u);s=js(s,m),t.totalTokens+=im(m),am(m,t)}catch{t.parseFailedLines++}let o=t.parseFailedLines>0?Li(e):new Map,i=s.requests,r=Array.isArray(i)?i:[],l=sm(r,o);return t.totalTokens+=om(r),{tokens:t.totalTokens+t.totalThinkingTokens,thinkingTokens:t.totalThinkingTokens,actualTokens:l,cacheReadTokens:0,modelUsage:{},dailyActualTokens:{},copilotNanoAiu:0}}};function lm(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,l=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}),t.cliShutdownModelUsage[n].inputTokens+=o,t.cliShutdownModelUsage[n].outputTokens+=i,r>0&&(t.cliShutdownModelUsage[n].cachedReadTokens=(t.cliShutdownModelUsage[n].cachedReadTokens??0)+r),l>0&&(t.cliShutdownModelUsage[n].cacheCreationTokens=(t.cliShutdownModelUsage[n].cacheCreationTokens??0)+l),o+i}function cm(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+=lm(i,r,e);let o=typeof t.totalNanoAiu=="number"?t.totalNanoAiu:0;if(o>0&&(e.cliTotalNanoAiu+=o),s>0&&n.timestamp){let i=he(new Date(String(n.timestamp)));i&&i!=="Inval"&&(e.dailyActualTokens[i]=(e.dailyActualTokens[i]||0)+s)}}function um(n,e){let t=n.data,s=typeof t?.messagesRemovedDuringTruncation=="number"?t.messagesRemovedDuringTruncation:0;s>0&&(e.truncationCount++,e.messagesRemovedByTruncation+=s)}function dm(n,e){let t=n?.reasoningText;typeof t=="string"&&t&&(e.totalThinkingTokens+=W(t));let s=n?.thinking?.text;typeof s=="string"&&s&&(e.totalThinkingTokens+=W(s))}function mm(n,e,t){t.cliRealOutputByModel||(t.cliRealOutputByModel={});let s=String(n?.model??"unknown");t.cliRealOutputByModel[s]=(t.cliRealOutputByModel[s]??0)+e}function pm(n,e){let t=n.data,s=typeof t?.outputTokens=="number"?t.outputTokens:0;s>0?mm(t,s,e):t?.content&&(e.totalTokens+=W(String(t.content))),dm(t,e)}function gm(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+=W(s))}function fm(n,e){let t=n.data;n.type==="user.message"&&t?.content?e.totalTokens+=W(String(t.content)):n.type==="user.message_rendered"&&t?.renderedMessage?e.totalTokens+=W(String(t.renderedMessage)):n.type==="assistant.message"?pm(n,e):n.type==="tool.execution_start"?e.totalEstToolCalls++:n.type==="tool.execution_complete"?gm(t,e):n.content&&(e.totalTokens+=W(String(n.content)))}function hm(n){if(!n.cliRealOutputByModel)return;let e=n.totalEstToolCalls>Hd?Vd:n.totalEstToolCalls>Jd?Kd:Qd;for(let t of Object.values(n.cliRealOutputByModel)){let s=Math.round(t*e);n.cliActualTokens+=s+t,n.cliCacheReadTokens+=s}}var Ni=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};for(let s of e)if(s.trim())try{let o=JSON.parse(s);o.type==="session.shutdown"?cm(o,t):o.type==="session.truncation"&&um(o,t),fm(o,t)}catch{}return t.cliActualTokens||hm(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}:{}}}};function ym(n){let e=0;for(let t of n)if(t.trim()){if(++e>Xd)break;try{if(typeof JSON.parse(t).kind=="number")return new Oi}catch{}}return new Ni}function lo(n){let e=n.trim().split(`
34
- `);return ym(e).estimate(e)}function _m(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;let l=typeof t?.model=="string"&&t.model?t.model:"";if(!l)return;let u=e.modelBreakdown[l]??{inputTokens:0,outputTokens:0,cachedTokens:0};u.inputTokens+=s,u.outputTokens+=o,u.cachedTokens+=i,e.modelBreakdown[l]=u}function dl(n){let e={inputTokens:0,outputTokens:0,cachedTokens:0,modelTurns:0,modelBreakdown:{},copilotNanoAiu:0};for(let t of n.split(/\r?\n/))if(t.trim())try{let s=JSON.parse(t);s.type==="llm_request"&&_m(s,e)}catch{}return e.modelTurns>0?e:null}function ml(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 u=r.reasoningEffort;if(!u||typeof u!="object")return null;let m=u;return typeof m.default=="string"?m.default:null}function bm(n,e){let s=n.v?.inputState,o=ml(s?.selectedModel);o!==null&&(e.currentEffort=o,e.defaultEffort=o)}function Cm(n,e){let t=n.k;if(!Array.isArray(t)||t[0]!=="inputState"||t[1]!=="selectedModel")return;let s=ml(n.v);s!==null&&s!==e.currentEffort&&(e.currentEffort!==null&&e.switchCount++,e.currentEffort=s)}function km(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 pl(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?bm(s,e):s.kind===1?Cm(s,e):s.kind===2&&km(s,e))}return{effortByRequestId:e.effortByRequestId,defaultEffort:e.defaultEffort,switchCount:e.switchCount}}function Li(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+)/),l=t.match(/"completionTokens":(\d+)/);i&&(r||l)&&e.set(o,{promptTokens:parseInt(i[1],10),outputTokens:parseInt(r?.[1]||l[1],10)})}return e}var cl=new WeakMap;function gl(n){let e=cl.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},cl.set(n,e)}return e}function Sm(n,e){let{map:t,sortedNames:s}=gl(e);for(let o of s)if(n.includes(o))return t[o];return null}function wm(n,e){let{map:t,sortedNames:s}=gl(e);for(let o of s)if(n.includes(o))return t[o];return null}function Tt(n,e={}){if(n.modelId)return n.modelId.replace(/^copilot\//,"");if(n.result?.metadata?.modelId)return n.result.metadata.modelId.replace(/^copilot\//,"");if(n.result?.details){let t=wm(n.result.details,e);if(t)return t}if(n.result?.metadata?.modelId)return n.result.metadata.modelId.replace(/^copilot\//,"");if(n.result?.details){let t=Sm(n.result.details,e);if(t)return t}return"gpt-4"}function lt(n){let e=n.trim();if(!e.includes(`
31
+ `,o)}while(s!==-1);return i+=n.slice(o),i}var{stdout:Tl,stderr:Ml}=kl,rr=Symbol("GENERATOR"),bs=Symbol("STYLER"),Ys=Symbol("IS_EMPTY"),Pl=["ansi","ansi","ansi256","ansi16m"],ks=Object.create(null),Sm=(n,e={})=>{if(e.level&&!(Number.isInteger(e.level)&&e.level>=0&&e.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let t=Tl?Tl.level:0;n.level=e.level===void 0?t:e.level};var wm=n=>{let e=(...t)=>t.join(" ");return Sm(e,n),Object.setPrototypeOf(e,Xs.prototype),e};function Xs(n){return wm(n)}Object.setPrototypeOf(Xs.prototype,Function.prototype);for(let[n,e]of Object.entries(et))ks[n]={get(){let t=Co(this,lr(e.open,e.close,this[bs]),this[Ys]);return Object.defineProperty(this,n,{value:t}),t}};ks.visible={get(){let n=Co(this,this[bs],!0);return Object.defineProperty(this,"visible",{value:n}),n}};var ar=(n,e,t,...s)=>n==="rgb"?e==="ansi16m"?et[t].ansi16m(...s):e==="ansi256"?et[t].ansi256(et.rgbToAnsi256(...s)):et[t].ansi(et.rgbToAnsi(...s)):n==="hex"?ar("rgb",e,t,...et.hexToRgb(...s)):et[t][n](...s),Tm=["rgb","hex","ansi256"];for(let n of Tm){ks[n]={get(){let{level:t}=this;return function(...s){let o=lr(ar(n,Pl[t],"color",...s),et.color.close,this[bs]);return Co(this,o,this[Ys])}}};let e="bg"+n[0].toUpperCase()+n.slice(1);ks[e]={get(){let{level:t}=this;return function(...s){let o=lr(ar(n,Pl[t],"bgColor",...s),et.bgColor.close,this[bs]);return Co(this,o,this[Ys])}}}}var Mm=Object.defineProperties(()=>{},{...ks,level:{enumerable:!0,get(){return this[rr].level},set(n){this[rr].level=n}}}),lr=(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}},Co=(n,e,t)=>{let s=(...o)=>Pm(s,o.length===1?""+o[0]:o.join(" "));return Object.setPrototypeOf(s,Mm),s[rr]=n,s[bs]=e,s[Ys]=t,s},Pm=(n,e)=>{if(n.level<=0||!e)return n[Ys]?"":e;let t=n[bs];if(t===void 0)return e;let{openAll:s,closeAll:o}=t;if(e.includes("\x1B"))for(;t!==void 0;)e=Sl(e,t.close,t.open),t=t.parent;let i=e.indexOf(`
32
+ `);return i!==-1&&(e=wl(e,o,s,i)),s+e+o};Object.defineProperties(Xs.prototype,ks);var vm=Xs(),ob=Xs({level:Ml?Ml.level:0});var w=vm;var vt=T(require("fs")),ve=T(require("path")),ju=T(require("os"));var vl={getConfiguration:()=>({get:()=>{}})},cr={getExtension:()=>{}},bo=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 en=T(require("fs")),El=T(require("path"));function ur(n){return typeof n.discover=="function"}function xl(n){return typeof n.analyzeUsage=="function"}var We=T(require("fs"));function ko(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 be(n){return n.replace(/\\/g,"/")}var So=be;function ee(n){return be(n).toLowerCase()}function wo(n,e=process.platform){let t=be(n);return e==="linux"?t:t.toLowerCase()}function dr(n,e,t){try{return n()}catch(s){return console.error(`[recovery] ${t??"unknown"}:`,s),e}}async function es(n,e,t){try{return await n()}catch(s){return console.error(`[recovery] ${t??"unknown"}:`,s),e}}var Am=/^mcp__[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}__(.+)$/i;function Dl(n){return Am.test(n)}function xm(n){return!n||n==="agent"?"agent":n.includes("plan-agent/Plan.agent.md")?"plan":n.includes(".agent.md")?"customAgent":"agent"}function To(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"?xm(n.id):"ask":"ask":"ask"}function tt(n){return n.startsWith("mcp.")||n.startsWith("mcp_")||n.startsWith("mcp__")}function Zs(n){return n.startsWith("mcp_github_github_")?"mcp_io_github_git_"+n.substring(18):n.startsWith("mcp.github.github.")?"mcp.io.github.git."+n.substring(18):n}function mt(n,e={}){let t=e[n]??e[n.toLowerCase()];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(Dl(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 Mo(n){try{let e=We.openSync(n,"r");try{let t=Buffer.alloc(65536),s=We.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{We.closeSync(e)}}catch{}return"Claude Code"}var Po=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 en.promises.access(e),!0}catch{return!1}}pathExistsWithLogging(e,t){try{let s=en.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(ur(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=cr.getExtension("GitHub.copilot"),t=cr.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?.()??vl.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 en.promises.readdir(s)).filter(i=>i.endsWith(".json")||i.endsWith(".jsonl")).map(i=>El.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}}collectAdapterFiles(e,t,s,o,i){for(let r=0;r<e.length;r++){let a=e[r];if(a.status==="rejected"){this.deps.warn(`Could not discover ${t[r].displayName} sessions: ${a.reason}`),this._lastDiscoveryHadError=!0;continue}let c=[];for(let m of a.value.sessionFiles){let p=wo(m);s.has(p)||(s.add(p),c.push(m))}c.length>0&&(o.push(...c),i&&i(c))}}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=wo(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(ur);this.deps.log(`\u{1F50D} Searching for session files via ${i.length} discoverable ecosystem adapter(s) (parallel)`);let r=await Promise.allSettled(i.map(c=>c.discover(this.deps.log)));this.collectAdapterFiles(r,i,t,s,e),await this.collectWindsurfFiles(t,s,e);let a=r.reduce((c,m)=>c+(m.status==="fulfilled"?m.value.sessionFiles.length:0),0)-s.length;return a>0&&this.deps.log(`\u{1F9F9} Deduplicated ${a} 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 ce=T(require("fs")),Re=T(require("path")),ws=T(require("os")),Rl=T(Ss());var Do=class{_sqlJsModule=null;_sqlJsInitPromise=null;_dbCache=null;_dbCacheInflight=new Map;extensionUri;constructor(e){this.extensionUri=e}getOpenCodeDataDir(){let e=ws.platform(),t=ws.homedir();if(e==="win32")return Re.join(t,".local","share","opencode");let s=process.env.XDG_DATA_HOME||Re.join(t,".local","share");return Re.join(s,"opencode")}isOpenCodeSessionFile(e){let t=ee(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=Re.join(__dirname,"sql-wasm.wasm"),t;ce.existsSync(e)&&(t=ce.readFileSync(e));let s=await(0,Rl.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._dbCacheInflight.clear(),this._sqlJsInitPromise=null}closeDb(e){try{e.close()}catch{}}closeDbCache(){this._dbCache&&(this.closeDb(this._dbCache.db),this._dbCache=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 ce.statSync(e)}catch(t){return this.isMissingFileError(t)&&this._dbCache?.path===e&&this.closeDbCache(),null}}getWalMtimeMs(e){try{return ce.statSync(e+"-wal").mtimeMs}catch{return 0}}isCachedDbCurrent(e,t){return this._dbCache?.path===e&&this._dbCache.mtimeMs===t.mtimeMs&&this._dbCache.size===t.size&&this._dbCache.walMtimeMs===this.getWalMtimeMs(e)}getDbCacheKey(e,t){return`${e}:${t.mtimeMs}:${t.size}:wal${this.getWalMtimeMs(e)}`}sameDbStats(e,t){return e.mtimeMs===t.mtimeMs&&e.size===t.size}async tryReadDbWithWal(e){let t=e+"-wal",s;try{s=ce.statSync(t).size}catch{return null}if(s===0)return null;try{let{DatabaseSync:o}=require("node:sqlite"),i=ws.tmpdir(),r=Re.join(i,`opencode-wal-${Date.now()}.db`),a=r+"-wal",c=r+"-shm",m=e+"-shm";ce.copyFileSync(e,r),ce.copyFileSync(t,a),ce.existsSync(m)&&ce.copyFileSync(m,c);let p=new o(r);p.exec("PRAGMA wal_checkpoint(TRUNCATE);"),p.close();let g=ce.readFileSync(r);for(let h of[r,a,c])try{ce.unlinkSync(h)}catch{}return g}catch{return null}}async refreshOpenCodeDb(e,t){let s;try{let i=await this.initSqlJs(),a=await this.tryReadDbWithWal(e)??ce.readFileSync(e);s=new i.Database(a)}catch{return this.getCachedDbForPath(e)}let o=this.statOpenCodeDb(e);return!o||!this.sameDbStats(t,o)?(this.closeDb(s),this.isCachedDbCurrent(e,o??t)?this._dbCache?.db??null:this.getCachedDbForPath(e)):(this.closeDbCache(),this._dbCache={db:s,path:e,mtimeMs:t.mtimeMs,size:t.size,walMtimeMs:this.getWalMtimeMs(e)},s)}async getOpenCodeDb(){let e=Re.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=Re.join(this.getOpenCodeDataDir(),"opencode.db");return ce.promises.stat(t)}return ce.promises.stat(e)}readOpenCodeMessages(e){let t=this.getOpenCodeDataDir(),s=Re.join(t,"storage","message",e),o=[];try{if(!ce.existsSync(s))return o;let i=ce.readdirSync(s,{withFileTypes:!0});for(let r of i)if(!(!r.isFile()||!r.name.endsWith(".json")))try{let a=ce.readFileSync(Re.join(s,r.name),"utf8"),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=Re.join(t,"storage","part",e),o=[];try{if(!ce.existsSync(s))return o;let i=ce.readdirSync(s,{withFileTypes:!0});for(let r of i)if(!(!r.isFile()||!r.name.endsWith(".json")))try{let a=ce.readFileSync(Re.join(s,r.name),"utf8"),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=Re.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),m=c-o;if(m<=0){o=c;continue}let p=a[0].modelID||a[0].model?.modelID||"unknown";t[p]||(t[p]={inputTokens:0,outputTokens:0});let g=a.reduce((C,S)=>C+(S.tokens?.output||0)+(S.tokens?.reasoning||0),0);t[p].inputTokens+=Math.max(0,m-g),t[p].outputTokens+=g;let h=a.reduce((C,S)=>C+(S.tokens?.cache?.read||0),0),_=a.reduce((C,S)=>C+(S.tokens?.cache?.write||0),0);h>0&&(t[p].cachedReadTokens=(t[p].cachedReadTokens??0)+h),_>0&&(t[p].cacheCreationTokens=(t[p].cacheCreationTokens??0)+_),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 _=h[0].modelID||h[0].model?.modelID||"unknown";c[_]=(c[_]||0)+1}let m={};for(let[p,g]of Object.entries(r))m[p]={...g,interactions:c[p]||0};return{tokens:o,interactions:i,modelUsage:m,timestamp:s}}};var st=T(require("fs")),ss=T(require("path")),tn=T(require("os")),Il=T(Ss());var Eo=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 st.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=st.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(tn.platform()==="win32"){let s=process.env.LOCALAPPDATA||ss.join(tn.homedir(),"AppData","Local");return ss.join(s,"crush")}let t=process.env.XDG_CONFIG_HOME||ss.join(tn.homedir(),".config");return ss.join(t,"crush")}readCrushProjects(){let e=ss.join(this.getCrushConfigDir(),"projects.json");if(!st.existsSync(e))return[];try{let t=st.readFileSync(e,"utf8"),s=JSON.parse(t);return Array.isArray(s.projects)?s.projects:[]}catch{return[]}}isCrushSessionFile(e){return be(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=ss.join(__dirname,"sql-wasm.wasm"),t;st.existsSync(e)&&(t=st.readFileSync(e));let s=await(0,Il.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 st.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((m,p)=>{c[m]=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((m,p)=>{c[m]=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},t;let c={};for(let p of a){let g=p.model||"unknown";c[g]=(c[g]||0)+1}let m=a.length;for(let[p,g]of Object.entries(c)){let h=g/m;t[p]={inputTokens:Math.round(o*h),outputTokens:Math.round(i*h)}}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),m=(await this.getCrushMessages(e)).filter(h=>h.role==="user").length,p=s+o,g={};for(let[h,_]of Object.entries(a)){let C=_.inputTokens+_.outputTokens,S=p>0?C/p:0;g[h]={inputTokens:_.inputTokens,outputTokens:_.outputTokens,interactions:Math.round(m*S)}}return{tokens:i,interactions:m,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 sn=T(require("fs")),ns=T(require("path")),Ul=T(require("os"));var Ro=class{getContinueDataDir(){return ns.join(Ul.homedir(),".continue")}getContinueSessionsDir(){return ns.join(this.getContinueDataDir(),"sessions")}isContinueSessionFile(e){let t=ee(e);return t.includes("/.continue/sessions/")&&t.endsWith(".json")}async getContinueSessionFiles(){let e=this.getContinueSessionsDir();try{await sn.promises.access(e)}catch{return[]}try{return(await sn.promises.readdir(e)).filter(s=>s.endsWith(".json")&&s!=="sessions.json").map(s=>ns.join(e,s))}catch{return[]}}async readSessionFile(e){try{let t=await sn.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";s[r]||(s[r]={inputTokens:0,outputTokens: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=ns.join(this.getContinueSessionsDir(),"sessions.json"),t=new Map;try{let s=await sn.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 ns.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 vs=T(require("fs")),nt=T(require("path")),fr=T(require("os"));function W(n){let e=n.getFullYear(),t=String(n.getMonth()+1).padStart(2,"0"),s=String(n.getDate()).padStart(2,"0");return`${e}-${t}-${s}`}function Dm(n){if(typeof n!="object"||n===null)return;let t=n.result;if(!(typeof t!="object"||t===null))return t}function Em(n){if(typeof n!="object"||n===null)return;let t=n.response;if(Array.isArray(t))return t}function Rm(n){return typeof n!="object"||n===null?!1:n.kind==="toolInvocationSerialized"}function Im(n){return typeof n!="object"||n===null?!1:n.kind==="subagent"}var Um=20,Om=5,Fm=130,Nm=50,Lm=10,jm=.25,Gm=10,Ol=new WeakMap;function Bm(n){let e=Ol.get(n);return e||(e=Object.entries(n).map(([t,s])=>[t,t.replace("-",""),s]),Ol.set(n,e)),e}function Q(n,e="gpt-4",t={}){let s=jm;for(let[o,i,r]of Bm(t))if(e.includes(o)||e.includes(i)){s=r;break}return Math.ceil(n.length*s)}function qm(n){return n.trim().toLowerCase().replace(/\s+/g,"-")}function Ts(n){if(!Rm(n))return null;let e=n.toolSpecificData;if(!Im(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?qm(o):"";return t||s?{prompt:t,result:s,modelName:i}:null}function Ms(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 Kb=1/1e11;function zm(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 $m(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 Wm(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=Dm(n[i]),a=r?$m(r):0;if(a>0)s+=a,o=Math.max(o,zm(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 Hm(n){let e=Ts(n);if(!e)return 0;let t=0;return e.prompt&&(t+=Q(e.prompt)),e.result&&(t+=Q(e.result)),t}function Jm(n){let e=0;for(let t of n){let s=Em(t);if(s)for(let o of s)e+=Hm(o)}return e}function Vm(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+=Q(String(i.text)))}return t}function Km(n,e){if(Ts(n))return;let{text:t,isThinking:s}=Ms(n);t&&(s?e.totalThinkingTokens+=Q(t):e.totalTokens+=Q(t))}function Qm(n,e){let t=n.k;if(!(n.kind!==2||!t?.includes("response")||!Array.isArray(n.v)))for(let s of n.v)Km(s,e)}var mr=class{estimate(e){let t={totalTokens:0,totalThinkingTokens:0,parseFailedLines:0},s={};for(let m of e)if(m.trim())try{let p=JSON.parse(m);s=nn(s,p),t.totalTokens+=Vm(p),Qm(p,t)}catch{t.parseFailedLines++}let o=t.parseFailedLines>0?gr(e):new Map,i=s.requests,r=Array.isArray(i)?i:[],{total:a,maxPromptTokens:c}=Wm(r,o);return t.totalTokens+=Jm(r),{tokens:t.totalTokens+t.totalThinkingTokens,thinkingTokens:t.totalThinkingTokens,actualTokens:a,cacheReadTokens:0,modelUsage:{},dailyActualTokens:{},copilotNanoAiu:0,...c>0?{maxRequestInputTokens:c}:{}}}};function Ym(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}),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 Xm(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+=Ym(i,r,e);let o=typeof t.totalNanoAiu=="number"?t.totalNanoAiu:0;if(o>0&&(e.cliTotalNanoAiu+=o),s>0&&n.timestamp){let i=W(new Date(String(n.timestamp)));i&&i!=="Inval"&&(e.dailyActualTokens[i]=(e.dailyActualTokens[i]||0)+s)}}function Zm(n,e){let s=n.data?.contextTier;typeof s=="string"&&s&&(e.contextTier=s)}function ep(n,e){let t=n.data,s=typeof t?.messagesRemovedDuringTruncation=="number"?t.messagesRemovedDuringTruncation:0;s>0&&(e.truncationCount++,e.messagesRemovedByTruncation+=s)}function tp(n,e){let t=n?.reasoningText;typeof t=="string"&&t&&(e.totalThinkingTokens+=Q(t));let s=n?.thinking?.text;typeof s=="string"&&s&&(e.totalThinkingTokens+=Q(s))}function sp(n,e,t){t.cliRealOutputByModel||(t.cliRealOutputByModel={});let s=String(n?.model??"unknown");t.cliRealOutputByModel[s]=(t.cliRealOutputByModel[s]??0)+e}function np(n,e){let t=n.data,s=typeof t?.outputTokens=="number"?t.outputTokens:0;s>0?sp(t,s,e):t?.content&&(e.totalTokens+=Q(String(t.content))),tp(t,e)}function op(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+=Q(s))}function ip(n,e){let t=n.data;n.type==="user.message"&&t?.content?e.totalTokens+=Q(String(t.content)):n.type==="user.message_rendered"&&t?.renderedMessage?e.totalTokens+=Q(String(t.renderedMessage)):n.type==="assistant.message"?np(n,e):n.type==="tool.execution_start"?e.totalEstToolCalls++:n.type==="tool.execution_complete"?op(t,e):n.content&&(e.totalTokens+=Q(String(n.content)))}function rp(n){if(!n.cliRealOutputByModel)return;let e=n.totalEstToolCalls>Um?Fm:n.totalEstToolCalls>Om?Nm:Lm;for(let t of Object.values(n.cliRealOutputByModel)){let s=Math.round(t*e);n.cliActualTokens+=s+t,n.cliCacheReadTokens+=s}}var pr=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"?Xm(o,t):o.type==="session.truncation"?ep(o,t):(o.type==="session.start"||o.type==="session.resume"||o.type==="session.model_change")&&Zm(o,t),ip(o,t)}catch{}return t.cliActualTokens||rp(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 ap(n){let e=0;for(let t of n)if(t.trim()){if(++e>Gm)break;try{if(typeof JSON.parse(t).kind=="number")return new mr}catch{}}return new pr}function Io(n,e){let t=n.trim().split(`
35
+ `),o=ap(t).estimate(t);return e?{...o,actualTokens:e.actualTokens,cacheReadTokens:e.cacheReadTokens,copilotNanoAiu:e.nanoAiu||o.copilotNanoAiu}:o}function lp(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 c=e.modelBreakdown[a]??{inputTokens:0,outputTokens:0,cachedTokens:0};c.inputTokens+=s,c.outputTokens+=o,c.cachedTokens+=i,e.modelBreakdown[a]=c}function Ll(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"&&lp(s,e)}catch{}return e.modelTurns>0?e:null}function jl(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 c=r.reasoningEffort;if(!c||typeof c!="object")return null;let m=c;return typeof m.default=="string"?m.default:null}function cp(n,e){let s=n.v?.inputState,o=jl(s?.selectedModel);o!==null&&(e.currentEffort=o,e.defaultEffort=o)}function up(n,e){let t=n.k;if(!Array.isArray(t)||t[0]!=="inputState"||t[1]!=="selectedModel")return;let s=jl(n.v);s!==null&&s!==e.currentEffort&&(e.currentEffort!==null&&e.switchCount++,e.currentEffort=s)}function dp(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 Gl(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?cp(s,e):s.kind===1?up(s,e):s.kind===2&&dp(s,e))}return{effortByRequestId:e.effortByRequestId,defaultEffort:e.defaultEffort,switchCount:e.switchCount}}function gr(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 Fl=new WeakMap;function Bl(n){let e=Fl.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},Fl.set(n,e)}return e}function mp(n,e){let{map:t,sortedNames:s}=Bl(e);for(let o of s)if(n.includes(o))return t[o];return null}function pp(n,e){let{map:t,sortedNames:s}=Bl(e);for(let o of s)if(n.includes(o))return t[o];return null}function Ut(n,e={}){if(n.modelId)return n.modelId.replace(/^copilot\//,"");if(n.result?.metadata?.modelId)return n.result.metadata.modelId.replace(/^copilot\//,"");if(n.result?.details){let t=pp(n.result.details,e);if(t)return t}if(n.result?.metadata?.modelId)return n.result.metadata.modelId.replace(/^copilot\//,"");if(n.result?.details){let t=mp(n.result.details,e);if(t)return t}return"gpt-4"}function _t(n){let e=n.trim();if(!e.includes(`
35
36
  `))return!1;let t=e.split(`
36
- `).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 as(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 Tm(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 Mm(n,e,t){Array.isArray(n)?n[Number(e)]=t:n[e]=t}function vm(n,e){Array.isArray(e)?n.push(...e):n.push(e)}function Pm(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];vm(s,t)}function js(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),l=typeof n=="object"&&n!==null?n:{},u=l;for(let p=0;p<r.length-1;p++)u=Tm(u,r[p],/^\d+$/.test(r[p+1]));let m=r[r.length-1];return s===1?(Mm(u,m,i),l):(s===2&&Pm(u,m,i),l)}function zt(n,e={}){let t=e[n];if(t&&typeof t.multiplier=="number")return t.multiplier===0?"standard":"premium";for(let[s,o]of Object.entries(e))if((n.includes(s)||s.includes(n))&&typeof o.multiplier=="number")return o.multiplier===0?"standard":"premium";return"unknown"}function ul(n){let e=n.copilotPricing?.inputCostPerMillion??null;return e!==null?e<2?"low":e<5?"medium":"high":typeof n.multiplier=="number"?n.multiplier===0?"low":n.multiplier<=1?"medium":"high":"unknown"}function Bs(n,e={}){let t=e[n];if(t)return ul(t);for(let[s,o]of Object.entries(e))if(n.includes(s)||s.includes(n))return ul(o);return"unknown"}function qs(n,e={},t="provider"){let s=0;for(let[o,i]of Object.entries(n)){let r=e[o];if(!r)continue;let l=t==="copilot"&&r.copilotPricing?r.copilotPricing:r,u=i.cachedReadTokens??0,m=i.cacheCreationTokens??0,f=Math.max(0,i.inputTokens-u-m)/1e6*l.inputCostPerMillion,y=u/1e6*(l.cachedInputCostPerMillion??l.inputCostPerMillion),_=m/1e6*(l.cacheCreationCostPerMillion??l.inputCostPerMillion),C=i.outputTokens/1e6*l.outputCostPerMillion;s+=f+y+_+C}return s}function Q(){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 Am="com.microsoft.copilot.eclipse",fl=Ke.join(".metadata",".plugins","com.microsoft.copilot.eclipse.core","conversations"),co=class{getDefaultWorkspaceRoot(){return Ke.join(Gi.homedir(),"eclipse-workspace")}getEclipseInstallsRoot(){return Ke.join(Gi.homedir(),"eclipse")}isEclipseSessionFile(e){let t=Z(e);return t.includes(Am)&&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 ls.promises.readdir(e)}catch{return[]}let s=[];for(let o of t){let i=Ke.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 ls.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=Ke.join(t,fl);e.push(...await this.discoverSessionsInDir(s))}return e}async discoverSessionsInDir(e){let t;try{t=await ls.promises.readdir(e,{withFileTypes:!0})}catch{return[]}let s=[];for(let o of t){if(!o.isDirectory())continue;let i=Ke.join(e,o.name),r;try{r=await ls.promises.readdir(i)}catch{continue}for(let l of r)l.endsWith(".json")&&s.push(Ke.join(i,l))}return s}async getDiagnosticCandidatePaths(){return(await this.getWorkspaceRoots()).map(t=>Ke.join(t,fl))}async readSession(e){try{let t=await ls.promises.readFile(e,"utf8");return JSON.parse(t)}catch{return null}}getEclipseSessionId(e){return Ke.basename(e,".json")}estimate(e){return e?W(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(`
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 Ps(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 gp(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 fp(n,e,t){Array.isArray(n)?n[Number(e)]=t:n[e]=t}function hp(n,e){Array.isArray(e)?n.push(...e):n.push(e)}function yp(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];hp(s,t)}function nn(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:{},c=a;for(let p=0;p<r.length-1;p++)c=gp(c,r[p],/^\d+$/.test(r[p+1]));let m=r[r.length-1];return s===1?(fp(c,m,i),a):(s===2&&yp(c,m,i),a)}function os(n,e={}){let t=e[n];if(t&&typeof t.multiplier=="number")return t.multiplier===0?"standard":"premium";for(let[s,o]of Object.entries(e))if((n.includes(s)||s.includes(n))&&typeof o.multiplier=="number")return o.multiplier===0?"standard":"premium";return"unknown"}function Nl(n){let e=n.copilotPricing?.inputCostPerMillion??null;return e!==null?e<2?"low":e<5?"medium":"high":typeof n.multiplier=="number"?n.multiplier===0?"low":n.multiplier<=1?"medium":"high":"unknown"}function on(n,e={}){let t=e[n];if(t)return Nl(t);for(let[s,o]of Object.entries(e))if(n.includes(s)||s.includes(n))return Nl(o);return"unknown"}function pt(n,e={},t="provider"){let s=0;for(let[o,i]of Object.entries(n)){let r=e[o];if(!r)continue;let a=t==="copilot"&&r.copilotPricing?r.copilotPricing:r,c=i.cachedReadTokens??0,m=i.cacheCreationTokens??0,p=Math.min(i.cacheCreation1hTokens??0,m),g=m-p,_=Math.max(0,i.inputTokens-c-m)/1e6*a.inputCostPerMillion,C=c/1e6*(a.cachedInputCostPerMillion??a.inputCostPerMillion),S=g/1e6*(a.cacheCreationCostPerMillion??a.inputCostPerMillion),E=p/1e6*(a.cacheCreation1hCostPerMillion??a.cacheCreationCostPerMillion??a.inputCostPerMillion),A=i.outputTokens/1e6*a.outputCostPerMillion;s+=_+C+S+E+A}return s}function J(){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 _p="com.microsoft.copilot.eclipse",ql=nt.join(".metadata",".plugins","com.microsoft.copilot.eclipse.core","conversations"),Uo=class{getDefaultWorkspaceRoot(){return nt.join(fr.homedir(),"eclipse-workspace")}getEclipseInstallsRoot(){return nt.join(fr.homedir(),"eclipse")}isEclipseSessionFile(e){let t=ee(e);return t.includes(_p)&&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 vs.promises.readdir(e)}catch{return[]}let s=[];for(let o of t){let i=nt.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 vs.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=nt.join(t,ql);e.push(...await this.discoverSessionsInDir(s))}return e}async discoverSessionsInDir(e){let t;try{t=await vs.promises.readdir(e,{withFileTypes:!0})}catch{return[]}let s=[];for(let o of t){if(!o.isDirectory())continue;let i=nt.join(e,o.name),r;try{r=await vs.promises.readdir(i)}catch{continue}for(let a of r)a.endsWith(".json")&&s.push(nt.join(i,a))}return s}async getDiagnosticCandidatePaths(){return(await this.getWorkspaceRoots()).map(t=>nt.join(t,ql))}async readSession(e){try{let t=await vs.promises.readFile(e,"utf8");return JSON.parse(t)}catch{return null}}getEclipseSessionId(e){return nt.basename(e,".json")}estimate(e){return e?Q(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(`
37
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(`
38
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(`
39
- `):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 l=this.findCopilotReply(o,i,r?.turnId),u=r?.model||l?.reply?.modelName||"unknown";s[u]||(s[u]={inputTokens:0,outputTokens:0}),s[u].inputTokens+=this.estimate(this.userText(r)),s[u].outputTokens+=this.estimate(this.assistantText(l))}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 xe=v(require("fs")),Re=v(require("path")),Wt=v(require("os")),To=v(rr());var bp=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"]),wo=class{isVSSessionFile(e){let t=Z(e),s=t.includes("/.vs/")&&t.includes("/copilot-chat/")&&t.includes("/sessions/"),o=t.includes("/ssmsgithubcopilot/")&&t.includes("/copilot-chat/")&&t.includes("/sessions/");return s||o}async statSessionFile(e){return xe.promises.stat(e)}getLogDir(){let e=process.env.LOCALAPPDATA||Re.join(Wt.homedir(),"AppData","Local");return Re.join(e,"Temp","VSGitHubCopilotLogs")}getSsmsSessionsDir(){let e=process.env.LOCALAPPDATA||Re.join(Wt.homedir(),"AppData","Local");return Re.join(e,"Microsoft","SSMS")}async discoverSessions(){let e=new Set,t=[];return await this._discoverFromLogs(e,t),await this._discoverFromFilesystem(e,t),await this._discoverFromSsmsAppData(e,t),t}async _discoverFromLogs(e,t){let s=this.getLogDir(),o;try{o=(await xe.promises.readdir(s)).filter(l=>l.endsWith(".chat.log")).map(l=>Re.join(s,l))}catch{return}let i=/Updating session file '([^']+)'/;for(let r of o)try{let l=await xe.promises.readFile(r,"utf8");await this._processLogFileLines(l,i,e,t)}catch{}}async _processLogFileLines(e,t,s,o){for(let i of e.split(`
40
- `)){let r=t.exec(i);if(!r)continue;let l=r[1];if(!s.has(l)){s.add(l);try{await xe.promises.access(l),o.push(l)}catch{}}}}async _discoverFromFilesystem(e,t){if(Wt.platform()!=="win32")return;let s=Wt.homedir(),o=["C","D"],i=[],r=["code","repos","src","projects","dev","workspace","work","source"];for(let l of r){let u=Re.join(s,l);try{await xe.promises.access(u),i.push(u)}catch{}}for(let l of r){let u=Re.join(s,"Documents",l);try{await xe.promises.access(u),i.push(u)}catch{}}for(let l of o)for(let u of r){let m=l+":\\"+u;try{await xe.promises.access(m),i.push(m)}catch{}}for(let l of i)await this._scanForVsDirs(l,0,5,e,t)}async _scanForVsDirs(e,t,s,o,i){if(t>s)return;let r;try{r=await xe.promises.readdir(e,{withFileTypes:!0})}catch{return}let l=r.filter(m=>{if(!m.isDirectory())return!1;let p=m.name;return!(bp.has(p)||p.startsWith(".")&&p!==".vs")}),u=8;for(let m=0;m<l.length;m+=u)await Promise.all(l.slice(m,m+u).map(async p=>{let f=Re.join(e,p.name);p.name===".vs"?await this._findSessionsInVsDir(f,o,i):await this._scanForVsDirs(f,t+1,s,o,i)}))}async _collectFromSessionsDir(e,t,s){let o;try{o=await xe.promises.readdir(e,{withFileTypes:!0})}catch{return}for(let i of o){if(!i.isFile())continue;let r=Re.join(e,i.name);t.has(r)||(t.add(r),s.push(r))}}async _collectFromHashDirs(e,t,s){let o;try{o=await xe.promises.readdir(e,{withFileTypes:!0})}catch{return}for(let i of o)i.isDirectory()&&await this._collectFromSessionsDir(Re.join(e,i.name,"sessions"),t,s)}async _findSessionsInVsDir(e,t,s){let o;try{o=await xe.promises.readdir(e,{withFileTypes:!0})}catch{return}for(let i of o)i.isDirectory()&&await this._collectFromHashDirs(Re.join(e,i.name,"copilot-chat"),t,s)}async _discoverFromSsmsAppData(e,t){if(Wt.platform()!=="win32")return;let s=this.getSsmsSessionsDir(),o;try{o=await xe.promises.readdir(s,{withFileTypes:!0})}catch{return}for(let i of o)i.isDirectory()&&await this._collectFromHashDirs(Re.join(s,i.name,"SSMSGitHubCopilot","copilot-chat"),e,t)}async decodeSessionFile(e){try{let t=await xe.promises.readFile(e);return t.length<2?[]:Array.from((0,To.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(`
41
- `)}_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((u,m)=>u-m),i=Buffer.from(o.map(u=>e[u])),r=(0,To.decode)(i),l=Array.isArray(r)?r[1]:r;l?.Content&&typeof l.Content=="string"&&t.push(l.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(`
42
- `)}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 l=this.extractTextFromContent(r.Content),u=i%2===1,m=u?this.extractContextText(r.Context):"";if(!l&&!m)continue;let p=this.getModelId(r,u)||void 0;o+=t(l+m,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 l=o[r]?.[1];if(!l?.Content)continue;let u=this.extractTextFromContent(l.Content),m=r%2===1,p=m?this.extractContextText(l.Context):"";if(!u&&!p)continue;let f=this.getModelId(l,m)||"unknown";i[f]||(i[f]={input:"",output:""}),m?i[f].input+=u+p:i[f].output+=u}for(let[r,l]of Object.entries(i))s[r]={inputTokens:t(l.input,r),outputTokens:t(l.output,r)};return s}};var us=v(require("fs")),Ht=v(require("path")),vo=v(require("os"));function vt(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 Mo=class{getClaudeCodeDataDir(){return Ht.join(vo.homedir(),".claude")}getClaudeCodeProjectsDir(){return Ht.join(this.getClaudeCodeDataDir(),"projects")}isClaudeCodeSessionFile(e){let t=Z(e),s=Z(this.getClaudeCodeProjectsDir());return t.startsWith(s)&&t.endsWith(".jsonl")}async getClaudeCodeSessionFiles(){let e=this.getClaudeCodeProjectsDir();try{await us.promises.access(e)}catch{return[]}try{let t=await us.promises.readdir(e,{withFileTypes:!0});return(await Promise.all(t.filter(o=>o.isDirectory()).map(o=>this.collectJsonlFilesFromProject(Ht.join(e,o.name))))).flat()}catch(t){return console.error("[claudecode] Failed to read projects dir:",t),[]}}async collectJsonlFilesFromProject(e){try{let t=await us.promises.readdir(e,{withFileTypes:!0});return(await Promise.all(t.filter(o=>!o.isDirectory()&&o.name.endsWith(".jsonl")).map(async o=>{let i=Ht.join(e,o.name);try{return(await us.promises.stat(i)).size>0?[i]:[]}catch(r){return console.error(`[claudecode] Failed to stat ${i}:`,r),[]}}))).flat()}catch(t){return console.error(`[claudecode] Failed to read project dir ${e}:`,t),[]}}async readSessionEvents(e){return Gt(async()=>{let s=(await us.promises.readFile(e,"utf8")).trim().split(`
43
- `),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]}async getTokensFromClaudeCodeSession(e){let t=await this.readSessionEvents(e),s=0,o=0;for(let i of this.deduplicateAssistantEvents(t)){let r=i.message.usage,l=(typeof r.input_tokens=="number"?r.input_tokens:0)+(typeof r.cache_creation_input_tokens=="number"?r.cache_creation_input_tokens:0)+(typeof r.cache_read_input_tokens=="number"?r.cache_read_input_tokens:0),u=typeof r.output_tokens=="number"?r.output_tokens:0;s+=l,o+=u}return{tokens:s+o,thinkingTokens:0}}async countClaudeCodeInteractions(e){let t=await this.readSessionEvents(e),s=0;for(let o of t)if(o.type==="user"&&!o.isSidechain&&o.message?.role==="user"){let i=o.message?.content;(typeof i=="string"||Array.isArray(i)&&i.some(l=>l.type==="text")&&!i.some(l=>l.type==="tool_result"))&&s++}return s}async getClaudeCodeModelUsage(e){let t=await this.readSessionEvents(e),s={};for(let o of this.deduplicateAssistantEvents(t)){let i=o.message.usage,r=vt(o.message?.model||"unknown");s[r]||(s[r]={inputTokens:0,outputTokens:0});let l=typeof i.cache_creation_input_tokens=="number"?i.cache_creation_input_tokens:0,u=typeof i.cache_read_input_tokens=="number"?i.cache_read_input_tokens:0,m=(typeof i.input_tokens=="number"?i.input_tokens:0)+l+u,p=typeof i.output_tokens=="number"?i.output_tokens:0;s[r].inputTokens+=m,s[r].outputTokens+=p,l>0&&(s[r].cacheCreationTokens=(s[r].cacheCreationTokens??0)+l),u>0&&(s[r].cachedReadTokens=(s[r].cachedReadTokens??0)+u)}return s}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),l,u;return r.length>0&&(r.sort((m,p)=>m-p),l=new Date(r[0]).toISOString(),u=new Date(r[r.length-1]).toISOString()),{title:s,entrypoint:o,firstInteraction:l,lastInteraction:u,cwd:i}}extractMetaFieldsFromEvents(e){let t,s,o,i=[];for(let r of e)if(r.type==="ai-title"&&r.aiTitle&&(t=r.aiTitle),!s&&r.entrypoint&&(s=r.entrypoint),!o&&r.cwd&&(o=r.cwd),r.timestamp){let l=new Date(r.timestamp).getTime();isNaN(l)||i.push(l)}return{title:t,entrypoint:s,cwd:o,timestamps:i}}getClaudeCodeSessionId(e){return Ht.basename(e,".jsonl")}getProjectPathFromHash(e){if(vo.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 ds=v(require("fs")),Js=v(require("path")),Vs=v(require("os"));var Cp="Claude_pzs8sxrjxfjjc",Po=class{getCoworkBaseDir(){let e=Vs.platform();if(e==="win32"){let t=process.env.LOCALAPPDATA||Js.join(Vs.homedir(),"AppData","Local");return Js.join(t,"Packages",Cp,"LocalCache","Roaming","Claude","local-agent-mode-sessions")}return e==="darwin"?Js.join(Vs.homedir(),"Library","Application Support","Claude","local-agent-mode-sessions"):""}isCoworkSessionFile(e){let t=Z(e);return t.includes("/local-agent-mode-sessions/")&&t.endsWith(".jsonl")}async getCoworkSessionFiles(){let e=this.getCoworkBaseDir();if(!e)return[];try{await ds.promises.access(e)}catch{return[]}let t=[];try{await this.walkForJsonlFiles(e,t,0,8)}catch{}return t}async walkForJsonlFiles(e,t,s,o){if(s>o)return;let i;try{i=await ds.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=Js.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 ds.promises.stat(r)).size>0&&s.push(r)}catch{}}async readCoworkEvents(e){try{let s=(await ds.promises.readFile(e,"utf8")).trim().split(`
44
- `),o=[];for(let i of s)if(i.trim())try{o.push(JSON.parse(i))}catch{}return o}catch{return[]}}async getTokensFromCoworkSession(e){let t=await this.readCoworkEvents(e),s=0,o=0,i=new Set;for(let r of t){let l=this.extractCoworkEventTokens(r,i);l&&(s+=l.inputTokens,o+=l.outputTokens)}return{tokens:s+o,thinkingTokens:0}}computeCoworkTokenCounts(e){let t=typeof e.cache_creation_input_tokens=="number"?e.cache_creation_input_tokens:0,s=typeof e.cache_read_input_tokens=="number"?e.cache_read_input_tokens:0,o=(typeof e.input_tokens=="number"?e.input_tokens:0)+t+s,i=typeof e.output_tokens=="number"?e.output_tokens:0;return{inputTokens:o,outputTokens:i,cacheCreation:t,cachedRead:s}}extractCoworkEventTokens(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.computeCoworkTokenCounts(s);return{inputTokens:i,outputTokens:r}}async countCoworkInteractions(e){let t=await this.readCoworkEvents(e),s=0;for(let o of t)if(o.type==="user"&&!o.isSidechain&&o.message?.role==="user"){let i=o.message?.content;(typeof i=="string"||Array.isArray(i)&&i.some(l=>l.type==="text")&&!i.some(l=>l.type==="tool_result"))&&s++}return s}async getCoworkModelUsage(e){let t=await this.readCoworkEvents(e),s={},o=new Set;for(let i of t)this.processCoworkEventModelUsage(i,o,s);return s}processCoworkEventModelUsage(e,t,s){if(e.type!=="assistant")return;let o=e.message?.usage;if(!o)return;let i=e.requestId;if(i){if(!e.message?.stop_reason||t.has(i))return;t.add(i)}let r=vt(e.message?.model||"unknown");s[r]||(s[r]={inputTokens:0,outputTokens:0});let{inputTokens:l,outputTokens:u,cacheCreation:m,cachedRead:p}=this.computeCoworkTokenCounts(o);s[r].inputTokens+=l,s[r].outputTokens+=u,m>0&&(s[r].cacheCreationTokens=(s[r].cacheCreationTokens??0)+m),p>0&&(s[r].cachedReadTokens=(s[r].cachedReadTokens??0)+p)}getMetadataPathFromJsonl(e){let s=fe(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 getCoworkSessionMeta(e){let t=this.getMetadataPathFromJsonl(e);if(!t)return null;try{let s=await ds.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,l=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 l=="string"?l:void 0}}catch{return null}}};var Ks=v(require("fs")),dt=v(require("path")),ar=v(require("os"));var Ao=class{getVibeHomeDir(){let e=process.env.VIBE_HOME;return e?dt.resolve(e.replace(/^~/,ar.homedir())):dt.join(ar.homedir(),".vibe")}getSessionLogDir(){return dt.join(this.getVibeHomeDir(),"logs","session")}isVibeSessionFile(e){let t=fe(e);return t.includes("/.vibe/logs/session/")&&t.endsWith("/meta.json")}getSessionDir(e){return dt.dirname(e)}async discoverSessions(){let e=this.getSessionLogDir();try{let t=await Ks.promises.readdir(e,{withFileTypes:!0}),s=[];for(let o of t){if(!o.isDirectory())continue;let i=dt.join(e,o.name,"meta.json");try{await Ks.promises.access(i),s.push(i)}catch{}}return s}catch{return[]}}async readSessionMeta(e){try{let t=await Ks.promises.readFile(e,"utf8");return JSON.parse(t)}catch{return null}}async readSessionMessages(e){let t=dt.join(this.getSessionDir(e),"messages.jsonl");try{let o=(await Ks.promises.readFile(t,"utf8")).trim().split(`
45
- `),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;return s+o===0?{}:{[t.config?.active_model||"devstral"]:{inputTokens:s,outputTokens:o}}}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[u,m]of Object.entries(i))r[u]={...m,interactions:o};let l=t.start_time?new Date(t.start_time).getTime():0;return{tokens:s,interactions:o,modelUsage:r,timestamp:l}}};var Be=v(require("fs")),cr=v(require("os")),ot=v(require("path"));function B(n){return typeof n=="string"&&n.trim().length>0}function ms(n){return typeof n=="number"&&Number.isFinite(n)?n:0}function ps(n){if(!B(n))return null;let e=Date.parse(n);return Number.isFinite(e)?e:null}function lr(n,e){let t=ps(n.timestamp),s=ps(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 Qs(n){if(!n)return n;let e=n.trim();return e==="gemini-3-flash-preview"?"gemini-3-flash":e}async function kp(n){let e=[];try{let t=await Be.promises.readdir(n,{withFileTypes:!0});for(let s of t){if(s.isDirectory()||!s.name.startsWith("session-")||!s.name.endsWith(".jsonl"))continue;let o=ot.join(n,s.name);try{(await Be.promises.stat(o)).size>0&&e.push(o)}catch{}}}catch{}return e}async function Sp(n,e){if(!e.isDirectory())return[];let t=ot.join(n,e.name,"chats");try{await Be.promises.access(t)}catch{return[]}return kp(t)}function wp(n){return{sessionId:n.sessionId,projectHash:B(n.projectHash)?n.projectHash:void 0,startTime:B(n.startTime)?n.startTime:void 0,lastUpdated:B(n.lastUpdated)?n.lastUpdated:void 0,kind:B(n.kind)?n.kind:void 0}}var xo=class{_projectsIndexCache=null;_projectsIndexInflight=new Map;getGeminiDataDir(){return ot.join(cr.homedir(),".gemini")}getGeminiTmpDir(){return ot.join(this.getGeminiDataDir(),"tmp")}getGeminiProjectsPath(){return ot.join(this.getGeminiDataDir(),"projects.json")}getGeminiLogsPath(){return ot.join(this.getGeminiDataDir(),"logs.json")}isGeminiCliSessionFile(e){let t=Z(e),s=Z(this.getGeminiTmpDir());return t.startsWith(s)&&t.includes("/chats/session-")&&t.endsWith(".jsonl")}async collectSessionFilesFromChatDir(e){let t=[];try{let s=await Be.promises.readdir(e,{withFileTypes:!0});for(let o of s){if(o.isDirectory()||!o.name.startsWith("session-")||!o.name.endsWith(".jsonl"))continue;let i=ot.join(e,o.name);try{(await Be.promises.stat(i)).size>0&&t.push(i)}catch{}}}catch{}return t}async getGeminiCliSessionFiles(){let e=this.getGeminiTmpDir();try{await Be.promises.access(e)}catch{return[]}try{let t=await Be.promises.readdir(e,{withFileTypes:!0});return(await Promise.all(t.map(o=>Sp(e,o)))).flat()}catch{return[]}}parseGeminiSessionHeader(e){return{sessionId:e.sessionId,projectHash:B(e.projectHash)?e.projectHash:void 0,startTime:B(e.startTime)?e.startTime:void 0,lastUpdated:B(e.lastUpdated)?e.lastUpdated:void 0,kind:B(e.kind)?e.kind:void 0}}parseGeminiUserRecord(e,t,s){let o=B(e.id)?e.id:`__user_${t}`;return s.has(o)?null:(s.add(o),{id:B(e.id)?e.id:void 0,timestamp:B(e.timestamp)?e.timestamp:void 0,type:"user",content:e.content,lineNumber:t})}parseGeminiAssistantRecord(e,t,s){return{id:B(e.id)?e.id:`__assistant_${s.value++}_${t}`,record:{id:B(e.id)?e.id:void 0,timestamp:B(e.timestamp)?e.timestamp:void 0,type:"gemini",content:e.content,thoughts:Array.isArray(e.thoughts)?e.thoughts:[],tokens:e.tokens,model:B(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&&B(o?.sessionId)){s.header=this.parseGeminiSessionHeader(o);return}if(B(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,l]of(await this.readJsonlLines(e)).entries()){let u;try{u=JSON.parse(l)}catch{continue}this._rgsDispatchLine(u,r,t)}t.header&&t.latestHeaderUpdate&&(t.header.lastUpdated=t.latestHeaderUpdate),t.userRecords.sort(lr);let s=Array.from(t.assistantRecords.values()).sort(lr),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&&B(e?.sessionId)){s.header=wp(e);return}if(B(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=B(e.id)?e.id:`__user_${t}`;s.has(i)||(s.add(i),o.push({id:B(e.id)?e.id:void 0,timestamp:B(e.timestamp)?e.timestamp:void 0,type:"user",content:e.content,lineNumber:t}))}_rgsHandleGeminiRecord(e,t,s,o){let i=B(e.id)?e.id:`__assistant_${s}_${t}`;return o.set(i,{id:B(e.id)?e.id:void 0,timestamp:B(e.timestamp)?e.timestamp:void 0,type:"gemini",content:e.content,thoughts:Array.isArray(e.thoughts)?e.thoughts:[],tokens:e.tokens,model:B(e.model)?e.model:void 0,toolCalls:Array.isArray(e.toolCalls)?e.toolCalls:[],lineNumber:t}),B(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=Qs(o.model||"unknown"),r=this.getTokenBreakdown(o.tokens);s[i]||(s[i]={inputTokens:0,outputTokens: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)}return s}async getGeminiCliSessionMeta(e){let t=await this.readGeminiCliSession(e),s=[],o=i=>{let r=ps(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,l=0,u=0,m=0,p=0;for(let f of e.assistants){let y=this.getTokenBreakdown(f.tokens);p+=y.total,i+=y.input,r+=y.output,l+=y.thinking,u+=y.tool,m+=y.cached;let _=B(f.content)?f.content.trim():"";_.length>0&&t.push(_);for(let C of this.toDisplayToolCalls(f.toolCalls))s.push(C);B(f.model)&&(o=Qs(f.model))}return{assistantContents:t,toolCalls:s,model:o,inputTokens:i,outputTokens:r,thinkingTokens:l,toolTokens:u,cachedTokens:m,totalTokens:p}}async buildGeminiCliTurns(e){let t=await this.readGeminiCliSession(e),s=this.groupConversationTurns(t),o=[],i=0;for(let r of s){let l={assistantContents:[],toolCalls:[],model:null,inputTokens:0,outputTokens:0,thinkingTokens:0,toolTokens:0,cachedTokens:0};for(let P of r.assistants)i+=this._bgtAggregateAssistant(P,l);let{assistantContents:u,toolCalls:m,model:p,inputTokens:f,outputTokens:y,thinkingTokens:_,toolTokens:C,cachedTokens:S}=l,I=f>0||y>0||_>0||C>0?{promptTokens:f,completionTokens:y+_+C,promptTokenDetails:this.buildPromptTokenDetails(f,S)}: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:u.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),c=r?.model||a?.reply?.modelName||"unknown";s[c]||(s[c]={inputTokens:0,outputTokens:0}),s[c].inputTokens+=this.estimate(this.userText(r)),s[c].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=T(require("fs")),Ne=T(require("path")),rs=T(require("os")),Vo=T(Fr());var cg=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"]),Jo=class{isVSSessionFile(e){let t=ee(e),s=t.includes("/.vs/")&&t.includes("/copilot-chat/")&&t.includes("/sessions/"),o=t.includes("/ssmsgithubcopilot/")&&t.includes("/copilot-chat/")&&t.includes("/sessions/");return s||o}async statSessionFile(e){return Ie.promises.stat(e)}getLogDir(){let e=process.env.LOCALAPPDATA||Ne.join(rs.homedir(),"AppData","Local");return Ne.join(e,"Temp","VSGitHubCopilotLogs")}getSsmsSessionsDir(){let e=process.env.LOCALAPPDATA||Ne.join(rs.homedir(),"AppData","Local");return Ne.join(e,"Microsoft","SSMS")}async discoverSessions(){let e=new Set,t=[];return await this._discoverFromLogs(e,t),await this._discoverFromFilesystem(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=>Ne.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(rs.platform()!=="win32")return;let s=rs.homedir(),o=["C","D"],i=[],r=["code","repos","src","projects","dev","workspace","work","source"];for(let a of r){let c=Ne.join(s,a);try{await Ie.promises.access(c),i.push(c)}catch{}}for(let a of r){let c=Ne.join(s,"Documents",a);try{await Ie.promises.access(c),i.push(c)}catch{}}for(let a of o)for(let c of r){let m=a+":\\"+c;try{await Ie.promises.access(m),i.push(m)}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(m=>{if(!m.isDirectory())return!1;let p=m.name;return!(cg.has(p)||p.startsWith(".")&&p!==".vs")}),c=8;for(let m=0;m<a.length;m+=c)await Promise.all(a.slice(m,m+c).map(async p=>{let g=Ne.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=Ne.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(Ne.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(Ne.join(e,i.name,"copilot-chat"),t,s)}async _discoverFromSsmsAppData(e,t){if(rs.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(Ne.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,Vo.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((c,m)=>c-m),i=Buffer.from(o.map(c=>e[c])),r=(0,Vo.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),c=i%2===1,m=c?this.extractContextText(r.Context):"";if(!a&&!m)continue;let p=this.getModelId(r,c)||void 0;o+=t(a+m,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 c=this.extractTextFromContent(a.Content),m=r%2===1,p=m?this.extractContextText(a.Context):"";if(!c&&!p)continue;let g=this.getModelId(a,m)||"unknown";i[g]||(i[g]={input:"",output:""}),m?i[g].input+=c+p:i[g].output+=c}for(let[r,a]of Object.entries(i))s[r]={inputTokens:t(a.input,r),outputTokens:t(a.output,r)};return s}};var as=T(require("fs")),Se=T(require("path")),Qo=T(require("os"));function Ft(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 Ko=class{getClaudeCodeDataDir(){return Se.join(Qo.homedir(),".claude")}getClaudeCodeProjectsDir(){return Se.join(this.getClaudeCodeDataDir(),"projects")}isClaudeCodeSessionFile(e){let t=ee(e),s=ee(this.getClaudeCodeProjectsDir());return t.startsWith(s)&&t.endsWith(".jsonl")}async getClaudeCodeSessionFiles(){let e=this.getClaudeCodeProjectsDir();try{await as.promises.access(e)}catch{return[]}try{let t=await as.promises.readdir(e,{withFileTypes:!0});return(await Promise.all(t.filter(o=>o.isDirectory()).map(o=>this.collectJsonlFilesFromProject(Se.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 as.promises.readdir(e,{withFileTypes:!0});return(await Promise.all(o.map(async r=>{let a=Se.join(e,r.name);if(r.isDirectory())return this.collectJsonlFilesFromProject(a,t+1,s);if(!r.name.endsWith(".jsonl"))return[];try{return(await as.promises.stat(a)).size>0?[a]:[]}catch(c){return console.error(`[claudecode] Failed to stat ${a}:`,c),[]}}))).flat()}catch(o){return console.error(`[claudecode] Failed to read project dir ${e}:`,o),[]}}async readSessionEvents(e){return es(async()=>{let s=(await as.promises.readFile(e,"utf8")).trim().split(`
44
+ `),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(Se.sep),s=t.lastIndexOf("subagents");return s>0?{sessionId:t[s-1],projectDir:t.slice(0,s-1).join(Se.sep)}:{sessionId:Se.basename(e,".jsonl"),projectDir:Se.dirname(e)}}async getSessionFamilyFiles(e){let{projectDir:t,sessionId:s}=this.resolveSessionFamilyRoot(e),o=Se.join(t,`${s}.jsonl`),i=Se.join(t,s,"subagents"),r=[];try{await as.promises.access(i),r=(await this.collectJsonlFilesFromProject(i)).sort()}catch{}return[o,...r]}async getPriorFamilyMessageIds(e){if(e.split(Se.sep).lastIndexOf("subagents")<=0)return new Set;let s=await this.getSessionFamilyFiles(e),o=Se.normalize(e),i=new Set;for(let r of s){if(Se.normalize(r)===o)break;let a=await this.readSessionEvents(r);for(let c of this.deduplicateAssistantEvents(a)){let m=c.message?.id;m&&i.add(m)}}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=W(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),c=a?.firstInteraction?Date.parse(a.firstInteraction):NaN;return{[isNaN(c)?W(new Date):W(new Date(c))]:1}}let r={};for(let[a,c]of o.entries())r[a]=c/i;return r}async countClaudeCodeInteractions(e){let t=await this.readSessionEvents(e),s=0;for(let o of t)if(o.type==="user"&&!o.isSidechain&&o.message?.role==="user"){let i=o.message?.content;(typeof i=="string"||Array.isArray(i)&&i.some(a=>a.type==="text")&&!i.some(a=>a.type==="tool_result"))&&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){e[t]||(e[t]={inputTokens:0,outputTokens:0});let{cacheCreation:o,cacheCreation1h:i,cachedRead:r}=this.extractCacheTokenBreakdown(s),a=(typeof s.input_tokens=="number"?s.input_tokens:0)+o+r,c=typeof s.output_tokens=="number"?s.output_tokens:0;e[t].inputTokens+=a,e[t].outputTokens+=c,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,c=Ft(i.message?.model||"unknown");this.addModelUsageEntry(o,c,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,c;return r.length>0&&(r.sort((m,p)=>m-p),a=new Date(r[0]).toISOString(),c=new Date(r[r.length-1]).toISOString()),{title:s,entrypoint:o,firstInteraction:a,lastInteraction:c,cwd:i}}extractMetaFieldsFromEvents(e){let t,s,o,i=[];for(let r of e)if(r.type==="ai-title"&&r.aiTitle&&(t=r.aiTitle),!s&&r.entrypoint&&(s=r.entrypoint),!o&&r.cwd&&(o=r.cwd),r.timestamp){let a=new Date(r.timestamp).getTime();isNaN(a)||i.push(a)}return{title:t,entrypoint:s,cwd:o,timestamps:i}}getClaudeCodeSessionId(e){return Se.basename(e,".jsonl")}getProjectPathFromHash(e){if(Qo.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 xs=T(require("fs")),un=T(require("path")),dn=T(require("os"));var ug="Claude_pzs8sxrjxfjjc",Yo=class{getCoworkBaseDir(){let e=dn.platform();if(e==="win32"){let t=process.env.LOCALAPPDATA||un.join(dn.homedir(),"AppData","Local");return un.join(t,"Packages",ug,"LocalCache","Roaming","Claude","local-agent-mode-sessions")}return e==="darwin"?un.join(dn.homedir(),"Library","Application Support","Claude","local-agent-mode-sessions"):""}isCoworkSessionFile(e){let t=ee(e);return t.includes("/local-agent-mode-sessions/")&&t.endsWith(".jsonl")}async getCoworkSessionFiles(){let e=this.getCoworkBaseDir();if(!e)return[];try{await xs.promises.access(e)}catch{return[]}let t=[];try{await this.walkForJsonlFiles(e,t,0,8)}catch{}return t}async walkForJsonlFiles(e,t,s,o){if(s>o)return;let i;try{i=await xs.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=un.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 xs.promises.stat(r)).size>0&&s.push(r)}catch{}}async readCoworkEvents(e){try{let s=(await xs.promises.readFile(e,"utf8")).trim().split(`
45
+ `),o=[];for(let i of s)if(i.trim())try{o.push(JSON.parse(i))}catch{}return o}catch{return[]}}async getTokensFromCoworkSession(e){let t=await this.readCoworkEvents(e),s=0,o=0,i=new Set;for(let r of t){let a=this.extractCoworkEventTokens(r,i);a&&(s+=a.inputTokens,o+=a.outputTokens)}return{tokens:s+o,thinkingTokens:0}}computeCoworkTokenCounts(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}}extractCoworkEventTokens(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.computeCoworkTokenCounts(s);return{inputTokens:i,outputTokens:r}}async countCoworkInteractions(e){let t=await this.readCoworkEvents(e),s=0;for(let o of t)if(o.type==="user"&&!o.isSidechain&&o.message?.role==="user"){let i=o.message?.content;(typeof i=="string"||Array.isArray(i)&&i.some(a=>a.type==="text")&&!i.some(a=>a.type==="tool_result"))&&s++}return s}async getCoworkModelUsage(e){let t=await this.readCoworkEvents(e),s={},o=new Set;for(let i of t)this.processCoworkEventModelUsage(i,o,s);return s}processCoworkEventModelUsage(e,t,s){if(e.type!=="assistant")return;let o=e.message?.usage;if(!o||!this.shouldCountCoworkRequest(e,t))return;let i=Ft(e.message?.model||"unknown");s[i]||(s[i]={inputTokens:0,outputTokens:0}),this.applyCoworkTokenCounts(s[i],o)}shouldCountCoworkRequest(e,t){let s=e.requestId;return s?!e.message?.stop_reason||t.has(s)?!1:(t.add(s),!0):!0}applyCoworkTokenCounts(e,t){let{inputTokens:s,outputTokens:o,cacheCreation:i,cachedRead:r,cacheCreation1h:a}=this.computeCoworkTokenCounts(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=be(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 getCoworkSessionMeta(e){let t=this.getMetadataPathFromJsonl(e);if(!t)return null;try{let s=await xs.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 mn=T(require("fs")),kt=T(require("path")),Nr=T(require("os"));var Xo=class{getVibeHomeDir(){let e=process.env.VIBE_HOME;return e?kt.resolve(e.replace(/^~/,Nr.homedir())):kt.join(Nr.homedir(),".vibe")}getSessionLogDir(){return kt.join(this.getVibeHomeDir(),"logs","session")}isVibeSessionFile(e){let t=be(e);return t.includes("/.vibe/logs/session/")&&t.endsWith("/meta.json")}getSessionDir(e){return kt.dirname(e)}async discoverSessions(){let e=this.getSessionLogDir();try{let t=await mn.promises.readdir(e,{withFileTypes:!0}),s=[];for(let o of t){if(!o.isDirectory())continue;let i=kt.join(e,o.name,"meta.json");try{await mn.promises.access(i),s.push(i)}catch{}}return s}catch{return[]}}async readSessionMeta(e){try{let t=await mn.promises.readFile(e,"utf8");return JSON.parse(t)}catch{return null}}async readSessionMessages(e){let t=kt.join(this.getSessionDir(e),"messages.jsonl");try{let o=(await mn.promises.readFile(t,"utf8")).trim().split(`
46
+ `),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;return s+o===0?{}:{[t.config?.active_model||"devstral"]:{inputTokens:s,outputTokens:o}}}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[c,m]of Object.entries(i))r[c]={...m,interactions:o};let a=t.start_time?new Date(t.start_time).getTime():0;return{tokens:s,interactions:o,modelUsage:r,timestamp:a}}};var Je=T(require("fs")),jr=T(require("os")),ft=T(require("path"));function z(n){return typeof n=="string"&&n.trim().length>0}function Ds(n){return typeof n=="number"&&Number.isFinite(n)?n:0}function Es(n){if(!z(n))return null;let e=Date.parse(n);return Number.isFinite(e)?e:null}function Lr(n,e){let t=Es(n.timestamp),s=Es(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 pn(n){if(!n)return n;let e=n.trim();return e==="gemini-3-flash-preview"?"gemini-3-flash":e}async function dg(n){let e=[];try{let t=await Je.promises.readdir(n,{withFileTypes:!0});for(let s of t){if(s.isDirectory()||!s.name.startsWith("session-")||!s.name.endsWith(".jsonl"))continue;let o=ft.join(n,s.name);try{(await Je.promises.stat(o)).size>0&&e.push(o)}catch{}}}catch{}return e}async function mg(n,e){if(!e.isDirectory())return[];let t=ft.join(n,e.name,"chats");try{await Je.promises.access(t)}catch{return[]}return dg(t)}function pg(n){return{sessionId:n.sessionId,projectHash:z(n.projectHash)?n.projectHash:void 0,startTime:z(n.startTime)?n.startTime:void 0,lastUpdated:z(n.lastUpdated)?n.lastUpdated:void 0,kind:z(n.kind)?n.kind:void 0}}var Zo=class{_projectsIndexCache=null;_projectsIndexInflight=new Map;getGeminiDataDir(){return ft.join(jr.homedir(),".gemini")}getGeminiTmpDir(){return ft.join(this.getGeminiDataDir(),"tmp")}getGeminiProjectsPath(){return ft.join(this.getGeminiDataDir(),"projects.json")}getGeminiLogsPath(){return ft.join(this.getGeminiDataDir(),"logs.json")}isGeminiCliSessionFile(e){let t=ee(e),s=ee(this.getGeminiTmpDir());return t.startsWith(s)&&t.includes("/chats/session-")&&t.endsWith(".jsonl")}async collectSessionFilesFromChatDir(e){let t=[];try{let s=await Je.promises.readdir(e,{withFileTypes:!0});for(let o of s){if(o.isDirectory()||!o.name.startsWith("session-")||!o.name.endsWith(".jsonl"))continue;let i=ft.join(e,o.name);try{(await Je.promises.stat(i)).size>0&&t.push(i)}catch{}}}catch{}return t}async getGeminiCliSessionFiles(){let e=this.getGeminiTmpDir();try{await Je.promises.access(e)}catch{return[]}try{let t=await Je.promises.readdir(e,{withFileTypes:!0});return(await Promise.all(t.map(o=>mg(e,o)))).flat()}catch{return[]}}parseGeminiSessionHeader(e){return{sessionId:e.sessionId,projectHash:z(e.projectHash)?e.projectHash:void 0,startTime:z(e.startTime)?e.startTime:void 0,lastUpdated:z(e.lastUpdated)?e.lastUpdated:void 0,kind:z(e.kind)?e.kind:void 0}}parseGeminiUserRecord(e,t,s){let o=z(e.id)?e.id:`__user_${t}`;return s.has(o)?null:(s.add(o),{id:z(e.id)?e.id:void 0,timestamp:z(e.timestamp)?e.timestamp:void 0,type:"user",content:e.content,lineNumber:t})}parseGeminiAssistantRecord(e,t,s){return{id:z(e.id)?e.id:`__assistant_${s.value++}_${t}`,record:{id:z(e.id)?e.id:void 0,timestamp:z(e.timestamp)?e.timestamp:void 0,type:"gemini",content:e.content,thoughts:Array.isArray(e.thoughts)?e.thoughts:[],tokens:e.tokens,model:z(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&&z(o?.sessionId)){s.header=this.parseGeminiSessionHeader(o);return}if(z(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 c;try{c=JSON.parse(a)}catch{continue}this._rgsDispatchLine(c,r,t)}t.header&&t.latestHeaderUpdate&&(t.header.lastUpdated=t.latestHeaderUpdate),t.userRecords.sort(Lr);let s=Array.from(t.assistantRecords.values()).sort(Lr),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&&z(e?.sessionId)){s.header=pg(e);return}if(z(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=z(e.id)?e.id:`__user_${t}`;s.has(i)||(s.add(i),o.push({id:z(e.id)?e.id:void 0,timestamp:z(e.timestamp)?e.timestamp:void 0,type:"user",content:e.content,lineNumber:t}))}_rgsHandleGeminiRecord(e,t,s,o){let i=z(e.id)?e.id:`__assistant_${s}_${t}`;return o.set(i,{id:z(e.id)?e.id:void 0,timestamp:z(e.timestamp)?e.timestamp:void 0,type:"gemini",content:e.content,thoughts:Array.isArray(e.thoughts)?e.thoughts:[],tokens:e.tokens,model:z(e.model)?e.model:void 0,toolCalls:Array.isArray(e.toolCalls)?e.toolCalls:[],lineNumber:t}),z(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=pn(o.model||"unknown"),r=this.getTokenBreakdown(o.tokens);s[i]||(s[i]={inputTokens:0,outputTokens: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)}return s}async getGeminiCliSessionMeta(e){let t=await this.readGeminiCliSession(e),s=[],o=i=>{let r=Es(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,c=0,m=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,c+=h.tool,m+=h.cached;let _=z(g.content)?g.content.trim():"";_.length>0&&t.push(_);for(let C of this.toDisplayToolCalls(g.toolCalls))s.push(C);z(g.model)&&(o=pn(g.model))}return{assistantContents:t,toolCalls:s,model:o,inputTokens:i,outputTokens:r,thinkingTokens:a,toolTokens:c,cachedTokens:m,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 A of r.assistants)i+=this._bgtAggregateAssistant(A,a);let{assistantContents:c,toolCalls:m,model:p,inputTokens:g,outputTokens:h,thinkingTokens:_,toolTokens:C,cachedTokens:S}=a,E=g>0||h>0||_>0||C>0?{promptTokens:g,completionTokens:h+_+C,promptTokenDetails:this.buildPromptTokenDetails(g,S)}: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:c.join(`
46
47
 
47
- `),model:p,toolCalls:m,contextReferences:Q(),mcpTools:[],inputTokensEstimate:f,outputTokensEstimate:y+C,thinkingTokensEstimate:_,actualUsage:I})}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=B(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 B(e.model)&&(t.model=Qs(e.model)),s.total}async getGeminiCliDailyFractions(e){let t=await this.readGeminiCliSession(e),s=t.userRecords.map(l=>this.toLocalDayKey(l.timestamp)).filter(l=>!!l);if(s.length===0)for(let l of t.assistantRecords){let u=this.toLocalDayKey(l.timestamp);u&&s.push(u)}if(s.length===0)return{[this.toLocalDayKey(t.header?.startTime)??this.toLocalDayKey(t.header?.lastUpdated)??he(new Date)]:1};let o=new Map;for(let l of s)o.set(l,(o.get(l)??0)+1);let i=s.length,r={};for(let[l,u]of o.entries())r[l]=u/i;return r}async readJsonlLines(e){try{return(await Be.promises.readFile(e,"utf8")).split(/\r?\n/).map(t=>t.trim()).filter(t=>t.length>0)}catch{return[]}}getProjectBucketFromPath(e){let s=fe(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 Be.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 l=new Map;try{let m=JSON.parse(await Be.promises.readFile(e,"utf8"));if(Array.isArray(m))for(let p of m)this.addProjectMapping(l,void 0,p);else if(m&&typeof m=="object")for(let[p,f]of Object.entries(m))this.addProjectMapping(l,p,f)}catch{}let u=await Be.promises.stat(e).catch(()=>null);return u&&u.mtimeMs===t.mtimeMs&&u.size===t.size&&(this._projectsIndexCache={map:l,mtimeMs:t.mtimeMs,size:t.size}),l})();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(B(e[s]))return e[s].trim()}looksLikePath(e){let t=fe(e);return/^[a-zA-Z]:/.test(e)||t.startsWith("/")||t.startsWith("~")||t.startsWith("file://")}normalizeWorkspacePath(e){let t=e.trim().replace(/^~(?=[/\\]|$)/,cr.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 ot.normalize(t)}getTokenBreakdown(e){let t=ms(e?.input),s=ms(e?.output),o=ms(e?.cached),i=ms(e?.thoughts),r=ms(e?.tool),l=ms(e?.total)||t+s+i+r;return{input:t,output:s,cached:o,thinking:i,tool:r,total:l}}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(B(e))return e.trim();if(!Array.isArray(e))return"";let t=[];for(let s of e)s&&typeof s=="object"&&B(s.text)&&t.push(s.text.trim());return t.join(`
48
+ `),model:p,toolCalls:m,contextReferences:J(),mcpTools:[],inputTokensEstimate:g,outputTokensEstimate:h+C,thinkingTokensEstimate:_,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=z(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 z(e.model)&&(t.model=pn(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 c=this.toLocalDayKey(a.timestamp);c&&s.push(c)}if(s.length===0)return{[this.toLocalDayKey(t.header?.startTime)??this.toLocalDayKey(t.header?.lastUpdated)??W(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,c]of o.entries())r[a]=c/i;return r}async readJsonlLines(e){try{return(await Je.promises.readFile(e,"utf8")).split(/\r?\n/).map(t=>t.trim()).filter(t=>t.length>0)}catch{return[]}}getProjectBucketFromPath(e){let s=be(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 Je.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{let m=JSON.parse(await Je.promises.readFile(e,"utf8"));if(Array.isArray(m))for(let p of m)this.addProjectMapping(a,void 0,p);else if(m&&typeof m=="object")for(let[p,g]of Object.entries(m))this.addProjectMapping(a,p,g)}catch{}let c=await Je.promises.stat(e).catch(()=>null);return c&&c.mtimeMs===t.mtimeMs&&c.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(z(e[s]))return e[s].trim()}looksLikePath(e){let t=be(e);return/^[a-zA-Z]:/.test(e)||t.startsWith("/")||t.startsWith("~")||t.startsWith("file://")}normalizeWorkspacePath(e){let t=e.trim().replace(/^~(?=[/\\]|$)/,jr.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 ft.normalize(t)}getTokenBreakdown(e){let t=Ds(e?.input),s=Ds(e?.output),o=Ds(e?.cached),i=Ds(e?.thoughts),r=Ds(e?.tool),a=Ds(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(z(e))return e.trim();if(!Array.isArray(e))return"";let t=[];for(let s of e)s&&typeof s=="object"&&z(s.text)&&t.push(s.text.trim());return t.join(`
48
49
 
49
- `).trim()}toDisplayToolCalls(e){if(!Array.isArray(e))return[];let t=[];for(let s of e){let o=B(s?.name)?s.name.trim():"",r=(B(s?.displayName)?s.displayName.trim():"")||o;r&&t.push({toolName:r,arguments:s.args!==void 0?this.safeStringify(s.args):void 0,result:B(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,l)=>lr(r.record,l.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=ps(e);if(s!==null)return new Date(s).toISOString();for(let o of t){let i=ps(o.timestamp);if(i!==null)return new Date(i).toISOString()}return null}toLocalDayKey(e){let t=ps(e);return t!==null?he(new Date(t)):null}};var Do=v(require("fs")),Bl=v(require("os")),it=v(require("path"));function ur(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 Tp(n,e){n.content&&n.content.trim()&&(e.assistantResponse+=(e.assistantResponse?`
50
+ `).trim()}toDisplayToolCalls(e){if(!Array.isArray(e))return[];let t=[];for(let s of e){let o=z(s?.name)?s.name.trim():"",r=(z(s?.displayName)?s.displayName.trim():"")||o;r&&t.push({toolName:r,arguments:s.args!==void 0?this.safeStringify(s.args):void 0,result:z(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)=>Lr(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=Es(e);if(s!==null)return new Date(s).toISOString();for(let o of t){let i=Es(o.timestamp);if(i!==null)return new Date(i).toISOString()}return null}toLocalDayKey(e){let t=Es(e);return t!==null?W(new Date(t)):null}};var ei=T(require("fs")),gc=T(require("os")),ht=T(require("path"));function Gr(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 gg(n,e){n.content&&n.content.trim()&&(e.assistantResponse+=(e.assistantResponse?`
50
51
 
51
52
  `:"")+n.content.trim()),n.thinking&&n.thinking.trim()&&(e.thinkingContent+=(e.thinkingContent?`
52
53
 
53
- `:"")+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 Mp(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 vp(n,e){n.type==="PLANNER_RESPONSE"?Tp(n,e):n.type==="SEARCH_WEB"&&n.content&&Mp(n,e)}function Pp(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"&&vp(o,t)}return t}var Eo=class{getAntigravityDataDir(){return it.join(Bl.homedir(),".gemini","antigravity")}getAntigravityBrainDir(){return it.join(this.getAntigravityDataDir(),"brain")}isAntigravitySessionFile(e){let t=Z(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 it.basename(it.dirname(it.dirname(it.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 Do.promises.readdir(e,{withFileTypes:!0})}catch{return[]}for(let o of s){if(!o.isDirectory())continue;let i=it.join(e,o.name,".system_generated","logs","transcript.jsonl");try{(await Do.promises.stat(i)).size>0&&t.push(i)}catch{}}return t}async readAntigravitySession(e){let t=this.getSessionIdFromPath(e),s=[],o=[],i=[],r;try{r=await Do.promises.readFile(e,"utf8")}catch{return{sessionId:t,userEntries:s,modelEntries:o,allEntries:i}}let l=r.split(`
54
- `).filter(m=>m.trim().length>0);for(let m of l){let p;try{p=JSON.parse(m)}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 u=(m,p)=>m.step_index-p.step_index;return i.sort(u),s.sort(u),o.sort(u),{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 l of s.userEntries)o+=t(ur(l.content??""));for(let l of s.modelEntries)l.type==="PLANNER_RESPONSE"&&(l.content&&(i+=t(l.content)),l.thinking&&(r+=t(l.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 u=t.userEntries[0].content??"",m=ur(u);o=m.length>120?m.substring(0,117)+"...":m||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:ur(t.content??""),assistantResponse:s,model:null,toolCalls:o,contextReferences:Q(),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 l=s[r];if(!this._batIsUserInputEntry(l))continue;i++;let{assistantResponse:u,toolCalls:m}=Pp(s,r+1);o.push(this._batCreateChatTurn(i,l,u,m))}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 Ro=v(require("fs")),qe=v(require("path")),ql=v(require("os"));var Io=class{getConfigDir(){return qe.join(ql.homedir(),".pi","agent","sessions")}isPiSessionFile(e){let t=fe(e);return t.includes("/.pi/agent/sessions/")&&t.endsWith(".jsonl")}async discoverSessions(){let e=this.getConfigDir(),t=[];try{let s=await Ro.promises.readdir(e,{withFileTypes:!0});for(let o of s)o.isDirectory()&&await this.collectSessionFilesInDir(qe.join(e,o.name),t,4)}catch{}return t}async collectSessionFilesInDir(e,t,s){if(!(s<=0))try{let o=await Ro.promises.readdir(e,{withFileTypes:!0});for(let i of o)i.isFile()&&i.name.endsWith(".jsonl")?t.push(qe.join(e,i.name)):i.isDirectory()&&await this.collectSessionFilesInDir(qe.join(e,i.name),t,s-1)}catch{}}async readLines(e){try{let t=await Ro.promises.readFile(e,"utf8");return this.parseJsonlContent(t)}catch{return[]}}parseJsonlContent(e){let t=[];for(let s of e.split(`
55
- `)){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(qe.basename(e)!=="session.jsonl")return null;let t=qe.dirname(qe.dirname(qe.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 l=s.model||"unknown";t[l]||(t[l]={inputTokens:0,outputTokens:0}),t[l].inputTokens+=i,t[l].outputTokens+=r,this.accumulateCacheTokens(o,t[l])}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(u=>u.type==="session"),o=s?.cwd,i=o?qe.basename(o):void 0,r=s?.timestamp??null,l=this.findLastTimestamp(t);return{title:i,firstInteraction:r,lastInteraction:l,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,l=this.buildModelUsageWithInteractions(o,s);return{tokens:t,interactions:s,modelUsage:l,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 l=r.inputTokens+r.outputTokens,u=s>0?l/s:0;o[i]={inputTokens:r.inputTokens,outputTokens:r.outputTokens,interactions:Math.round(t*u)}}return o}};var _e=v(require("fs")),Qe=v(require("path")),Pt=v(require("os")),zl=v(Ns());var Uo=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}getCursorGlobalStorageDir(){let e=Pt.platform();if(e==="win32"){let s=process.env.APPDATA||Qe.join(Pt.homedir(),"AppData","Roaming");return Qe.join(s,"Cursor","User","globalStorage")}if(e==="darwin")return Qe.join(Pt.homedir(),"Library","Application Support","Cursor","User","globalStorage");let t=process.env.XDG_CONFIG_HOME||Qe.join(Pt.homedir(),".config");return Qe.join(t,"Cursor","User","globalStorage")}getCursorDbPath(){return Qe.join(this.getCursorGlobalStorageDir(),"state.vscdb")}isCursorSessionFile(e){return Z(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=Qe.join(__dirname,"sql-wasm.wasm"),t;_e.existsSync(e)&&(t=_e.readFileSync(e));let s=await(0,zl.default)(t?{wasmBinary:t.buffer}:void 0);return this._sqlJsModule=s,s})().catch(e=>{throw this._sqlJsInitPromise=null,e})),this._sqlJsInitPromise)}getWalMtimeMs(e){try{return _e.statSync(e+"-wal").mtimeMs}catch{return 0}}statDb(e){try{return _e.statSync(e)}catch(t){let s=t?.code;if((s==="ENOENT"||s==="ENOTDIR")&&this._dbCache.has(e)){try{this._dbCache.get(e).db.close()}catch{}this._dbCache.delete(e)}return null}}isCachedDbCurrent(e,t){let s=this._dbCache.get(e);return!!s&&s.mtimeMs===t.mtimeMs&&s.size===t.size&&s.walMtimeMs===this.getWalMtimeMs(e)}async tryReadDbWithWal(e){let t=e+"-wal",s;try{s=_e.statSync(t).size}catch{return null}if(s===0)return null;try{let{DatabaseSync:o}=require("node:sqlite"),i=Pt.tmpdir(),r=Qe.join(i,`cursor-wal-${Date.now()}.db`),l=r+"-wal",u=r+"-shm",m=e+"-shm";_e.copyFileSync(e,r),_e.copyFileSync(t,l),_e.existsSync(m)&&_e.copyFileSync(m,u);let p=new o(r);p.exec("PRAGMA wal_checkpoint(TRUNCATE);"),p.close();let f=_e.readFileSync(r);for(let y of[r,l,u])try{_e.unlinkSync(y)}catch{}return f}catch{return null}}async refreshDb(e,t){let s=this.getWalMtimeMs(e),o;try{let l=await this.initSqlJs(),m=await this.tryReadDbWithWal(e)??_e.readFileSync(e);o=new l.Database(m)}catch{return this._dbCache.get(e)?.db??null}let i=this.statDb(e);if(!i||i.mtimeMs!==t.mtimeMs||i.size!==t.size){try{o.close()}catch{}return this._dbCache.get(e)?.db??null}let r=this._dbCache.get(e);if(r)try{r.db.close()}catch{}return this._dbCache.set(e,{db:o,mtimeMs:t.mtimeMs,size:t.size,walMtimeMs:s}),o}async getDb(e){let t=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}:wal${this.getWalMtimeMs(e)}`,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 readComposerData(e){let t=this.getDbPathFromVirtual(e),s=this.getComposerIdFromVirtual(e);if(!s)return null;let o=await this.getDb(t);if(!o)return null;try{let i=o.exec("SELECT value FROM cursorDiskKV WHERE key = ?",[`composerData:${s}`]);if(i.length===0||i[0].values.length===0)return null;let r=i[0].values[0][0];return JSON.parse(r)}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=await this.getDb(s);if(!i)return new Map;let r=new Map;try{let l=t.map(()=>"?").join(","),u=t.map(p=>`bubbleId:${o}:${p}`),m=i.exec(`SELECT key, value FROM cursorDiskKV WHERE key IN (${l})`,u);if(m.length===0)return r;for(let p of m[0].values){let f=p[0],y=p[1],_=f.replace(`bubbleId:${o}:`,"");try{let C=JSON.parse(y);r.set(_,C)}catch{}}}catch{}return r}async discoverSessions(){let e=this.getCursorDbPath(),t=await this.getDb(e);if(!t)return[];try{let s=t.exec("SELECT key FROM cursorDiskKV WHERE key LIKE 'composerData:%' AND (length(key) - length(replace(key, ':', ''))) = 1");return s.length===0?[]:s[0].values.map(o=>{let i=o[0].replace("composerData:","");return`${e}#${i}`})}catch{return[]}}async statSessionFile(e){let t=this.getDbPathFromVirtual(e);return _e.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}}}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,l=i?new Date(i):o?new Date(o):null,u=this.extractWorkspacePath(t);return{title:s,firstInteraction:r,lastInteraction:l?l.toISOString():null,workspacePath:u}}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(Qe.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 Go=v(require("fs")),pt=v(require("path"));var gs=v(require("fs"));function $l(n){if(!(typeof window>"u"))return window[n]}var Ap=$l("__MODEL_PRICING__"),xp={};for(let[n,e]of Object.entries(Ap?.pricing??{}))e.displayNames&&e.displayNames.length>0&&(xp[n]=e.displayNames[0]);var Dp=[["anthropic","Anthropic"],["claude","Anthropic"],["codestral","Mistral AI"],["devstral","Mistral AI"],["gemini","Google"],["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 Wl(n){let e=n.toLowerCase(),t=Dp.find(([s])=>e.startsWith(s));return t?t[1]:"Other"}var Ep=/\/partition-\d+\.jsonl$/,Rp=["embeddings","index","cache","preferences","settings","config","workspacesessions","globalsessions","api.json"];function Hl(n){let e=n.toLowerCase();return Rp.some(t=>e.includes(t))}function Fo(n){let e=fe(n);return e.includes("/.copilot/jb/")&&Ep.test(e)}function Ip(n){return!n||typeof n!="string"?null:n.startsWith("toolu_")?"claude":n.startsWith("call_")?"gpt":null}function Up(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 Fp(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 Op(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+=W(n.data.content))}function Ys(n,e){if(!n.currentTurnId)return;let t=n.turnById.get(n.currentTurnId);t&&e(t)}function Np(n){return typeof n?.text=="string"&&n.text?n.text:typeof n?.content=="string"&&n.content?n.content:null}function Lp(n,e){let t=Np(n.data);t&&(e.outputTokens+=W(t));let s=n.data?.thinking?.text;typeof s=="string"&&s&&(e.result.thinkingTokens+=W(s),e.hasThinking=!0,Ys(e,o=>{o.hasThinking=!0})),typeof n.data?.messageId=="string"&&(e.currentMessageId=n.data.messageId,e.messageIds.push(n.data.messageId),Ys(e,o=>{o.messageId=n.data.messageId})),typeof n.data?.iterationNumber=="number"&&(e.currentIterationNumber=n.data.iterationNumber,Ys(e,o=>{o.iterationNumber=n.data.iterationNumber})),typeof n.timestamp=="string"&&(e.lastTurnTs=n.timestamp,Ys(e,o=>{o.endTimestamp||(o.endTimestamp=n.timestamp)}))}function Gp(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||""),Ys(e,s=>{s.toolCallCount++}))}function jp(n,e){e.sawToolCall=!0;let t=n.data,s=t?.toolCallId;if(!e.modelFromToolCallId){let r=Ip(s);r&&(e.modelFromToolCallId=r)}let o=typeof t?.toolName=="string"?t.toolName:"unknown",i={toolName:o};if(Gp(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 Bp(n,e){let t="";for(let s of n){let o=s;o&&typeof o.value=="string"&&(e.outputTokens+=W(o.value),t+=(t?`
56
- `:"")+o.value)}return t}function qp(n,e){let t=n.data?.result?.result,s=Array.isArray(t)?Bp(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 zp(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 $p(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 Wp(n,e){switch(n.type){case"partition.created":Fp(n,e.result);break;case"user.message":Op(n,e);break;case"user.message_rendered":typeof n.data?.renderedMessage=="string"&&(e.inputTokens+=W(n.data.renderedMessage));break;case"assistant.turn_start":zp(n,e);break;case"assistant.message":Lp(n,e);break;case"tool.execution_start":jp(n,e);break;case"tool.execution_complete":qp(n,e);break;case"assistant.turn_end":$p(n,e);break}}function Hp(){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 Jp(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 Vp(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"&&(n.modelUsage[n.modelHint]={inputTokens:e.inputTokens,outputTokens:e.outputTokens})}function Oo(n){let e=Hp(),{parsed:t,renderedTurnIds:s}=Up(n.split(/\r?\n/)),o=Jp(e,s);for(let i of t)Wp(i,o);return Vp(e,o),e}function Jl(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 Zs(n){return n==null}function Kp(n){if(typeof n!="object"||n===null||Array.isArray(n))return!1;let e=n;return Zs(e.id)||typeof e.id=="string"}function Lo(n){if(n===null||typeof n!="object"||Array.isArray(n))return!1;let e=n;return!(!Zs(e.requests)&&!Array.isArray(e.requests)||!Zs(e.mode)&&!Kp(e.mode)||!Zs(e.creationDate)&&typeof e.creationDate!="number"||!Zs(e.lastMessageDate)&&typeof e.lastMessageDate!="number")}function No(n){return typeof n=="string"?n.trim().toLowerCase():""}function Xs(n){let e=n.v;return e?.selectedModel??e?.inputState?.selectedModel}function Qp(n,e){return n==="auto"||e==="auto"||e.includes("auto")||n.includes("/auto")}function Yp(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 Xp(n){let e=n?.metadata,t=e?.extension;return{family:No(e?.family),vendor:No(e?.vendor),extension:No(t?.value),category:No(e?.modelPickerCategory?.label),rawExtension:t?.value}}function Jt(n,e,t){let s=(n??"").replace(/^copilot\//,"");if(!s)return;let{family:o,vendor:i,extension:r,category:l,rawExtension:u}=Xp(e);Qp(s,o)&&(t.modelSwitching.autoSessions=1),Yp(s,i,o,r,l)&&(t.modelSwitching.foundryWindowsSessions=1),Wl(s)==="Other"&&(t.modelSwitching.unknownProviderSessions=1,t.modelSwitching.unknownProviderModels.includes(s)||t.modelSwitching.unknownProviderModels.push(s)),u&&!t.modelSwitching.selectedModelExtensions.includes(u)&&t.modelSwitching.selectedModelExtensions.push(u)}function Zp(n,e){if(n.type==="session.start"&&typeof n.data?.selectedModel=="string"){Jt(n.data.selectedModel,Xs(n),e);return}if(n.type==="session.model_change"&&typeof n.data?.newModel=="string"){Jt(n.data.newModel,Xs(n),e);return}let t=oc(n);if(t){Jt(t,Xs(n),e);return}let s=ic(n);if(s){Jt(s,Xs(n),e);return}typeof n.model=="string"&&(Jt(n.model,Xs(n),e),nc(n,e))}function Yl(n,e){n==="agent"?e.agent++:n==="edit"?e.edit++:n==="plan"?e.plan++:n==="customAgent"?e.customAgent++:e.ask++}function fr(n,e,t){if(Je(n)){e.mcpTools.total++;let s=st(n,t);e.mcpTools.byServer[s]=(e.mcpTools.byServer[s]||0)+1;let o=Fs(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 hr(n){let e=n.split("/").pop()?.split("\\").pop()??"",t=e.lastIndexOf(".");return t<=0?e.toLowerCase()||"unknown":e.slice(t+1).toLowerCase()}function eg(n){return{timestamp:n.timestamp,timings:n.result?.timings,waitTime:n.timeSpentWaiting}}function tg(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 sg(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(`
57
- `)?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 ng(n,e,t){for(let s of n)if(Array.isArray(s))for(let o of s)sg(o,e,t)}function og(n,e){if(!n.uri)return;let t=n.uri.path||JSON.stringify(n.uri);e.editedFilePaths.push(t);let s=hr(t),o=n;Array.isArray(o.edits)&&ng(o.edits,s,e)}function ig(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"&&og(t,e),t.kind==="codeblockUri"&&(e.codeBlocks++,t.isEdit===!0&&e.applies++));return e}function rg(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 ag(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 Xl(n,e,t,s,o,i,r){let l=0,u=0,m=0,p=0,f={};for(let y of n){if(!y)continue;ag(eg(y),s,o,i,r);let _=tg(y);_.agentType!==null&&e[_.agentType]++;let C=ig(y);for(let S of C.editedFilePaths)t.add(S);u+=C.codeBlocks,l+=C.applies,m+=C.linesAdded,p+=C.linesRemoved,rg(f,C.languageUsage)}return{totalApplies:l,totalCodeBlocks:u,totalLinesAdded:m,totalLinesRemoved:p,languageUsage:f}}function lg(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";fr(o,e,t)}}}function cg(n,e,t,s){e.requestId&&(Yl(t,s.modeUsage),e.agent?.id&&(s.toolCalls.total++,s.toolCalls.byTool[e.agent.id]=(s.toolCalls.byTool[e.agent.id]||0)+1),br(e,s.contextReferences),lg(e,s,n.toolNameMap))}function ug(n,e,t){return n.modelId?n.modelId.replace(/^copilot\//,""):n.result?.metadata?.modelId?n.result.metadata.modelId.replace(/^copilot\//,""):n.result?.details?Tt(n,t):e}function dg(n){let e=0;for(let t=1;t<n.length;t++)n[t]!==n[t-1]&&e++;return e}function mg(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 pg(n,e,t,s){let o=mg(e),i=e.selectedModel,r=e.inputState?.selectedModel;(i?.identifier||r?.identifier||"").replace(/^copilot\//,"")==="auto"&&(s.modelSwitching.autoSessions=1);let u=[];for(let p of t){if(!p||!p.requestId)continue;let f=ug(p,o,n.modelPricing);u.push(f);let y=f.toLowerCase();y.includes("foundry")&&(y.includes("microsoft")||y.includes("aitk"))&&(s.modelSwitching.foundryWindowsSessions=1)}let m=[...new Set(u)];s.modelSwitching.uniqueModels=m,s.modelSwitching.modelCount=m.length,s.modelSwitching.totalRequests=u.length,s.modelSwitching.switchCount=dg(u),de(n.modelPricing,m,u,s)}function gg(n,e,t){let{effortByRequestId:s,defaultEffort:o,switchCount:i}=pl(n);if(o===null&&s.size===0)return;let r={};for(let[,l]of s)r[l]=(r[l]||0)+1;s.size===0&&o!==null&&(r[o]=e.length),t.thinkingEffort={byEffort:r,switchCount:i,defaultEffort:o}}function fg(n,e,t,s){let o=e.inputState?.mode?eo(e.inputState.mode):"ask";if(e.inputState?.selections&&Array.isArray(e.inputState.selections)){for(let r of e.inputState.selections)if(r&&(r.startLineNumber!==r.endLineNumber||r.startColumn!==r.endColumn)){s.contextReferences.implicitSelection++;break}}let i=e.requests??[];for(let r of i)cg(n,r,o,s);pg(n,e,i,s),gg(t,i,s),_r(s)}function hg(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 yg(n,e,t){if(n.kind==="toolInvocationSerialized"||n.kind==="prepareToolInvocation"){let s=n.toolId||n.toolName||n.invocationMessage?.toolName||"unknown";fr(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&&yr([n],e.contextReferences)}function _g(n,e,t,s){let o=hg(e,t);if(o==="agent"?s.modeUsage.agent++:o==="edit"?s.modeUsage.edit++:s.modeUsage.ask++,br(e,s.contextReferences),e.response&&Array.isArray(e.response))for(let i of e.response)i&&yg(i,s,n)}function bg(n,e,t){if(!(!e.requests||!Array.isArray(e.requests)))for(let s of e.requests)_g(n,s,e,t)}function Cg(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 Vl(n,e){for(let t of e??[])n.includes(t)||n.push(t)}function kg(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 Sg(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 wg(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),Cg(n,t),kg(n,t),n.modelSwitching.autoSessions+=t.autoSessions||0,n.modelSwitching.foundryWindowsSessions+=t.foundryWindowsSessions||0,n.modelSwitching.unknownProviderSessions+=t.unknownProviderSessions||0,Vl(n.modelSwitching.selectedModelExtensions,t.selectedModelExtensions),Vl(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,Sg(n)}function Tg(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 Mg=["file","selection","implicitSelection","symbol","codebase","workspace","terminal","vscode","terminalLastCommand","terminalSelection","clipboard","changes","outputPanel","problemsPanel","pullRequest","copilotInstructions","agentsMd"];function Kl(n,e){for(let[t,s]of Object.entries(e))n[t]=(n[t]||0)+s}function vg(n,e){let t=n.contextReferences,s=e.contextReferences;for(let o of Mg)t[o]+=s[o]||0;t.codeContextLines=(t.codeContextLines||0)+(s.codeContextLines||0),Kl(t.byKind,s.byKind),Kl(t.byPath,s.byPath)}function Pg(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),Tg(n,e)}function en(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}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,vg(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;wg(n,e),Pg(n,e)}var Ag=[[/#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 Zl(n,e){for(let[t,s]of Ag){let o=n.match(t);o&&(e[s]+=o.length)}}function xg(n){let e=n.kind;return e==="reference"&&n.reference?n.reference:e==="inlineReference"&&n.inlineReference?n.inlineReference:null}function Dg(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 Eg(n,e,t){let s=n.fsPath||n.path;typeof s=="string"&&Dg(s,Z(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 yr(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=xg(s);i&&Eg(i,o,e)}}function Rg(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 ec(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"||Rg(s,e)}function _r(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 Ig(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 Ug(n,e){if(n.kind!=="prompt")return;typeof n.slashPromptCommand?.command=="string"&&(e.byKind.prompt=(e.byKind.prompt||0)+1)}function Fg(n,e){if(!n||typeof n!="object")return;let t=n;typeof t.text=="string"&&Zl(t.text,e),Ig(t,e),Ug(t,e)}function Og(n,e){typeof n.text=="string"&&Zl(n.text,e);let t=n.parts;if(Array.isArray(t))for(let s of t)Fg(s,e)}function br(n,e){if(!n||typeof n!="object")return;let t=n,s=t.message;s&&typeof s=="object"&&Og(s,e);let o=t.contentReferences;Array.isArray(o)&&yr(o,e);let i=t.variableData;i!==void 0&&ec(i,e)}async function tn(n){try{let t=(await gs.promises.readFile(n,"utf8")).trim().split(`
58
- `),s=[];for(let o of t)if(o.trim())try{s.push(JSON.parse(o))}catch{}return s}catch{return[]}}function de(n,e,t,s){let o=[],i=[],r=[];for(let S of e){let I=zt(S,n);I==="standard"?o.push(S):I==="premium"?i.push(S):r.push(S)}s.modelSwitching.tiers={standard:o,premium:i,unknown:r},s.modelSwitching.hasMixedTiers=o.length>0&&i.length>0;let l={low:[],medium:[],high:[],unknown:[]};for(let S of e){let I=Bs(S,n);I==="low"?l.low.push(S):I==="medium"?l.medium.push(S):I==="high"?l.high.push(S):l.unknown.push(S)}s.modelSwitching.costBuckets=l;let u=[l.low,l.medium,l.high].filter(S=>S.length>0).length;s.modelSwitching.hasMixedCosts=u>=2;let m=0,p=0,f=0,y=0,_=0,C=0;for(let S of t){let I=zt(S,n);I==="standard"?m++:I==="premium"?p++:f++;let P=Bs(S,n);P==="low"?y++:P==="medium"?_++:P==="high"&&C++}s.modelSwitching.standardRequests=m,s.modelSwitching.premiumRequests=p,s.modelSwitching.unknownRequests=f,s.modelSwitching.lowCostRequests=y,s.modelSwitching.mediumCostRequests=_,s.modelSwitching.highCostRequests=C}function mr(n,e,t){let s=zt(n,t);s==="standard"?e.standard++:s==="premium"?e.premium++:e.unknown++}function pr(n,e,t){let s=Bs(n,t);s==="low"?e.low++:s==="medium"?e.medium++:s==="high"?e.high++:e.unknown++}function tc(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 sc(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 Ng(n,e){let t=[],s=[],o=[];for(let i of n){let r=zt(i,e);r==="standard"?t.push(i):r==="premium"?s.push(i):o.push(i)}return{standard:t,premium:s,unknown:o}}function Lg(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 nc(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 Gg(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 l of n.requests){let u=Tt(l,t);s&&u!==s&&o++,s=u,mr(u,i,t),pr(u,r,t),Lg(l,e),nc(l,e)}e.modelSwitching.switchCount=o,tc(i,e),sc(r,e)}function jg(n,e){Jt(n.selectedModel?.identifier||n.selectedModel?.metadata?.id,n.selectedModel,e),Jt(n.inputState?.selectedModel?.identifier||n.inputState?.selectedModel?.metadata?.id,n.inputState?.selectedModel,e)}function oc(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 ic(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 Bg(n,e){let t=oc(n);if(t)return t;let s=ic(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 qg(n,e,t){let s=n;return s.modelId?s.modelId.replace(/^copilot\//,""):s.result?.metadata?.modelId?s.result.metadata.modelId.replace(/^copilot\//,""):s.result?.details?Tt(n,t):e}function zg(n,e,t,s,o){if(n.type==="user.message"){let i=n.model||s;mr(i,e,o),pr(i,t,o);return}if(!(n.kind!==2||n.k?.[0]!=="requests"||!Array.isArray(n.v)))for(let i of n.v){let r=qg(i,s,o);mr(r,e,o),pr(r,t,o)}}function $g(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 l=JSON.parse(r);i=Bg(l,i),Zp(l,e),zg(l,s,o,i,t)}catch{}tc(s,e),sc(o,e)}async function rc(n,e,t,s,o){try{let i=await Cr(n,e,s,o),r=i?Object.keys(i).length:0;if(!i||r===0)return;let l=Object.keys(i);t.modelSwitching.uniqueModels=l,t.modelSwitching.modelCount=l.length;let u=Ng(l,n.modelPricing);t.modelSwitching.tiers=u,t.modelSwitching.hasMixedTiers=u.standard.length>0&&u.premium.length>0;let m={low:[],medium:[],high:[],unknown:[]};for(let _ of l){let C=Bs(_,n.modelPricing);C==="low"?m.low.push(_):C==="medium"?m.medium.push(_):C==="high"?m.high.push(_):m.unknown.push(_)}t.modelSwitching.costBuckets=m;let p=[m.low,m.medium,m.high].filter(_=>_.length>0).length;t.modelSwitching.hasMixedCosts=p>=2;let f=s??await gs.promises.readFile(e,"utf8");if(as(f))return;if(e.endsWith(".jsonl")||lt(f))$g(f.trim().split(`
59
- `),t,n.modelPricing);else{let _=o!==void 0?o:JSON.parse(f);if(!Lo(_)){n.warn(`Unexpected session format in ${e}`);return}jg(_,t),Gg(_,t,n.modelPricing)}}catch(i){n.warn(`Error calculating model switching for ${e}: ${i}`)}}function Wg(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:l}=e[i];r<=o?o=Math.max(o,l):(t+=o-s,s=r,o=l)}return t+=o-s,t}function ac(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 Hg(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=js(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=Xl(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,ac(e.allLanguageUsage,o.languageUsage)}function Jg(n,e,t,s){if(!Lo(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=Xl(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,ac(s.allLanguageUsage,o.languageUsage),!0}function Vg(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((u,m)=>u+(m.firstProgress||0),0)/e.timingsData.length:0,i=e.timingsData.length>0?e.timingsData.reduce((u,m)=>u+(m.totalElapsed||0),0)/e.timingsData.length:0,r=e.waitTimes.length>0?e.waitTimes.reduce((u,m)=>u+m,0)/e.waitTimes.length:0,l=Wg(e.activeIntervals);n.sessionDuration={totalDurationMs:s,avgDurationMs:s,avgFirstProgressMs:o,avgTotalElapsedMs:i,avgWaitTimeMs:r,activeDurationMs:l},_r(n),n.agentTypes=e.agentCounts}function Ql(n){return n.length>0?(n.match(/\n/g)??[]).length+(n.endsWith(`
60
- `)?0:1):0}function Kg(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,l=t==="edit"?s.old_str:void 0,u=typeof r=="string"?r:"",m=typeof l=="string"?l:"";e.set(o,{filePath:i,added:Ql(u),removed:Ql(m)})}function Qg(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=hr(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 Yg(n,e){let t=new Map;for(let s of n)try{let o=JSON.parse(s);o.type==="tool.execution_start"?Kg(o,t):o.type==="tool.execution_complete"&&Qg(o,t,e)}catch{}}async function gr(n,e,t,s,o){try{let i=s??await gs.promises.readFile(e,"utf8");if(as(i))return;let r=e.endsWith(".jsonl")||lt(i),l={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 u=i.trim().split(`
61
- `).filter(m=>m.trim());Hg(u,l),lc(u)||Yg(u,l)}else{let u=o!==void 0?o:JSON.parse(i);if(!Jg(n,e,u,l))return}Vg(t,l)}catch(i){n.warn(`Error tracking enhanced metrics from ${e}: ${i}`)}}function ne(){return{toolCalls:{total:0,byTool:{}},modeUsage:{ask:0,edit:0,agent:0,plan:0,customAgent:0,cli:0},contextReferences:Q(),mcpTools:{total:0,byServer:{},byTool:{}},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 lc(n){if(n.length===0)return!1;try{let e=JSON.parse(n[0]);return e&&typeof e.kind=="number"}catch{return!1}}function Xg(n,e,t){let s={};for(let o of e)try{let i=JSON.parse(o);s=js(s,i)}catch{}fg(n,s,e,t)}function cc(n,e){for(let t of n){let s=t;if(s&&(s.startLineNumber!==s.endLineNumber||s.startColumn!==s.endColumn)){e.implicitSelection++;break}}}function Zg(n,e,t){n.kind!==0||!n.v?.inputState?.mode||(t.sessionMode=eo(n.v.inputState.mode),Array.isArray(n.v?.inputState?.selections)&&cc(n.v.inputState.selections,e.contextReferences))}function ef(n,e,t){n.kind===1&&(n.k?.includes("mode")&&n.v&&(t.sessionMode=eo(n.v)),n.k?.includes("selections")&&Array.isArray(n.v)&&cc(n.v,e.contextReferences),n.k?.includes("contentReferences")&&Array.isArray(n.v)&&yr(n.v,e.contextReferences),n.k?.includes("variableData")&&n.v&&ec(n.v,e.contextReferences))}function uc(n){return n.toolId||n.toolName||n.invocationMessage?.toolName||n.toolSpecificData?.kind||"unknown"}function tf(n,e){for(let t of n)if(t&&(t.kind==="toolInvocationSerialized"||t.kind==="prepareToolInvocation")){e.toolCalls.total++;let s=uc(t);e.toolCalls.byTool[s]=(e.toolCalls.byTool[s]||0)+1}}function sf(n,e){for(let t of n){let s=t;if(s&&s.kind==="toolInvocationSerialized"){e.toolCalls.total++;let o=uc(s);e.toolCalls.byTool[o]=(e.toolCalls.byTool[o]||0)+1}}}function nf(n,e,t){n.requestId&&Yl(t,e.modeUsage),n.agent?.id&&(e.toolCalls.total++,e.toolCalls.byTool[n.agent.id]=(e.toolCalls.byTool[n.agent.id]||0)+1),br(n,e.contextReferences),n.response&&Array.isArray(n.response)&&tf(n.response,e)}function of(n,e,t,s){if(n.kind===2){if(n.k?.[0]==="requests"&&Array.isArray(n.v))for(let o of n.v)nf(o,e,t.sessionMode);n.k?.includes("response")&&Array.isArray(n.v)&&sf(n.v,e)}}function rf(n,e){typeof n.selectedModel=="string"&&(e.defaultModel=n.selectedModel),typeof n.reasoningEffort=="string"&&(e.defaultEffort=n.reasoningEffort)}function af(n,e){n==="agent"?e.modeUsage.agent++:n==="ask"?e.modeUsage.ask++:e.modeUsage.cli++}function lf(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 cf(n,e,t,s){if(n.type==="session.start"&&n.data&&rf(n.data,e),n.type==="session.model_change"&&typeof n.data?.newModel=="string"&&(e.defaultModel=n.data.newModel),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),lf(n.data?.attachments,t.contextReferences),af(s,t)}}function uf(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";fr(s,e,t)}function df(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=Fs(s);e.mcpTools.byTool[o]=(e.mcpTools.byTool[o]||0)+1}function mf(n,e,t){uf(n,e,t),df(n,e)}function dr(n){if(!n)return 0;let e=n.split(`
62
- `);return e[e.length-1]===""&&e.pop(),e.length}function dc(n){n.editScope||(n.editScope={singleFileEdits:0,multiFileEdits:0,totalEditedFiles:0,avgFilesPerSession:0,linesAdded:0,linesRemoved:0})}function pf(n,e){let{toolCallId:t,toolName:s,arguments:o}=n.data??{};t&&s&&e.pendingToolCalls.set(t,{toolName:s,args:o??{}})}function gf(n,e,t){let s=n.toolName==="edit"?dr(n.args.new_str??""):dr(n.args.file_text??""),o=n.toolName==="edit"?dr(n.args.old_str??""):0;dc(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=hr(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 ff(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 hf(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||(o&&(r.toolName==="edit"||r.toolName==="create")&&gf(r,e,t),!i?.content||Je(r.toolName)))return;let l=ff(i.content);if(!l)return;let u=W(l);t.toolCalls.outputTokensByTool||(t.toolCalls.outputTokensByTool={}),t.toolCalls.outputTokensByTool[r.toolName]=(t.toolCalls.outputTokensByTool[r.toolName]||0)+u}function yf(n,e,t){n.type==="tool.execution_start"?pf(n,e):n.type==="tool.execution_complete"&&hf(n,e,t)}function _f(n,e){if(n.editedFilePaths.size===0)return;dc(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 bf(n,e,t,s,o,i){Zg(n,e,t),ef(n,e,t),of(n,e,t,i),cf(n,s,e,o),mf(n,e,i),yf(n,s,e)}function Cf(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 kf(n,e,t,s,o){let i={sessionMode:"ask"},r={defaultModel:"unknown",defaultEffort:null,requestCount:0,effortByRequest:{},pendingToolCalls:new Map,editedFilePaths:new Set},u=Fo(e)?Jl(s):null;for(let m of t)if(m.trim())try{let p=JSON.parse(m);bf(p,o,i,r,u,n.toolNameMap)}catch{}_f(r,o),Cf(r,o),await rc(n,e,o,s),await gr(n,e,o,s),_r(o)}async function mc(n,e,t,s){let o=ne();try{let i=n.ecosystems.find(u=>u.handles(e));if(i&&sl(i))return i.analyzeUsage(e,{modelPricing:n.modelPricing,toolNameMap:n.toolNameMap});if(e.startsWith("windsurf://"))return o;let r=t??await gs.promises.readFile(e,"utf8");if(e.endsWith(".jsonl")||lt(r)){let u=r.trim().split(`
63
- `).filter(m=>m.trim());if(lc(u))return Xg(n,u,o),await gr(n,e,o,r),o;await kf(n,e,u,r,o)}else{let u=s!==void 0?s:JSON.parse(r);if(!Lo(u))return n.warn(`Unexpected session format in ${e}`),o;bg(n,u,o),await rc(n,e,o,r,s),await gr(n,e,o,r,s)}}catch(i){n.warn(`Error analyzing session usage from ${e}: ${i}`)}return o}function pc(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 gc(n,e,t,s){for(let o of n){let i=is(o);if(i){let r=i.modelName||e;t[r]||(t[r]={inputTokens:0,outputTokens:0}),i.prompt&&(t[r].inputTokens+=W(i.prompt,r,s)),i.result&&(t[r].outputTokens+=W(i.result,r,s))}}}function Sf(n,e,t){t[n]||(t[n]={inputTokens:0,outputTokens: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 wf(n,e){for(let[t,s]of Object.entries(n))s?.usage&&Sf(t,s.usage,e)}function Tf(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+=W(n.data.content,e,o.tokenEstimators))}function Mf(n,e){n.data?.modelMetrics&&(e.cliShutdownModelUsage||(e.cliShutdownModelUsage={}),wf(n.data.modelMetrics,e.cliShutdownModelUsage))}function vf(n,e,t,s,o){if(n.type==="session.shutdown")Mf(n,t);else if(n.type==="user.message"&&n.data?.content)s[e].inputTokens+=W(n.data.content,e,o.tokenEstimators);else if(n.type==="assistant.message")Tf(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+=W(String(i),e,o.tokenEstimators))}}function Pf(n){return n.kind!==0?null:n.v?.selectedModel?.identifier||n.v?.selectedModel?.metadata?.id||n.v?.inputState?.selectedModel?.metadata?.id||null}function Af(n){return n.kind!==2||n.k?.[0]!=="selectedModel"?null:n.v?.identifier||n.v?.metadata?.id||null}function xf(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=Pf(n);t&&(e.defaultModel=t.replace(/^copilot\//,""));let s=Af(n);s&&(e.defaultModel=s.replace(/^copilot\//,""))}function Df(n,e,t,s){typeof n.kind=="number"&&(e.isDeltaBased=!0,e.sessionState=js(e.sessionState,n)),xf(n,e);let o=n.data?.model||n.model||e.defaultModel;t[o]||(t[o]={inputTokens:0,outputTokens:0}),e.isDeltaBased||vf(n,o,e,t,s)}function Ef(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);Df(i,s,e,t)}catch{}return s}function Rf(n,e,t,s){if(n.message?.text&&(t[e].inputTokens+=W(n.message.text,e,s.tokenEstimators)),n.response&&Array.isArray(n.response))for(let o of n.response){let{text:i}=rs(o);i&&(t[e].outputTokens+=W(i,e,s.tokenEstimators))}}function If(n,e,t,s){if(!n.requestId)return;let o=e;n.modelId?o=n.modelId.replace(/^copilot\//,""):n.result?.metadata?.modelId?o=n.result.metadata.modelId.replace(/^copilot\//,""):n.result?.details&&(o=Tt(n,s.modelPricing)),t[o]||(t[o]={inputTokens:0,outputTokens:0}),pc(n,o,t)||Rf(n,o,t,s),n.response&&Array.isArray(n.response)&&gc(n.response,o,t,s.tokenEstimators)}function Uf(n,e,t){if(!(!n.isDeltaBased||!n.sessionState.requests||!Array.isArray(n.sessionState.requests)))for(let s of n.sessionState.requests)s&&If(s,n.defaultModel,e,t)}function Ff(n,e,t){let s=Li(n);for(let[o,i]of s){let r=e.sessionState.requests?.[o];if(!r||r.result?.usage||typeof r.result?.promptTokens=="number"||r.result?.metadata&&typeof r.result.metadata.promptTokens=="number")continue;let l=e.defaultModel;r.modelId&&(l=r.modelId.replace(/^copilot\//,"")),t[l]||(t[l]={inputTokens:0,outputTokens:0}),t[l].inputTokens+=i.promptTokens,t[l].outputTokens+=i.outputTokens}}function Of(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 l=e[i]?.inputTokens??0;o[i]={inputTokens:Math.round(l*s),outputTokens:r}}return o}function Nf(n,e,t){let s=Ef(n,e,t);return!s.isDeltaBased&&s.cliShutdownModelUsage?s.cliShutdownModelUsage:!s.isDeltaBased&&s.cliRealOutputByModel?Of(s,e):(Uf(s,e,t),Ff(n,s,e),null)}function Lf(n,e,t,s){if(n.message?.parts)for(let o of n.message.parts)o.text&&(t[e].inputTokens+=W(o.text,e,s.tokenEstimators));if(n.response&&Array.isArray(n.response))for(let o of n.response){let{text:i}=rs(o);i&&(t[e].outputTokens+=W(i,e,s.tokenEstimators))}}function Gf(n,e,t){let s=Tt(n,t.modelPricing);e[s]||(e[s]={inputTokens:0,outputTokens:0}),pc(n,s,e)||Lf(n,s,e,t),n.response&&Array.isArray(n.response)&&gc(n.response,s,e,t.tokenEstimators)}function jf(n,e,t){if(!(!n.requests||!Array.isArray(n.requests)))for(let s of n.requests)Gf(s,e,t)}async function Cr(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://"))return o;try{let i=t??await gs.promises.readFile(e,"utf8");if(as(i))return o;if(e.endsWith(".jsonl")||lt(i)){let u=i.trim().split(`
64
- `);return Nf(u,o,n)??o}let l=s!==void 0?s:JSON.parse(i);if(!Lo(l))return n.warn(`Unexpected session format in ${e}`),o;jf(l,o,n)}catch(i){n.warn(`Error getting model usage from ${e}: ${i}`)}return o}var fc=v(require("fs"));async function mt(n){try{return await fc.promises.access(n),!0}catch{return!1}}var sn=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)?pt.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 l of r)l.time?.created&&t.push(l.time.created),l.time?.completed&&t.push(l.time.completed);return t.sort((l,u)=>l-u),{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):Gt(async()=>JSON.parse(await Go.promises.readFile(e,"utf8")),null,`openCodeAdapter getMeta readFile(${e})`)}getEditorRoot(e){return this.openCode.getOpenCodeDataDir()}async discover(e){let t=this.getCandidatePaths(),s=[],o=this.openCode.getOpenCodeDataDir(),i=pt.join(o,"storage","session"),r=pt.join(o,"opencode.db");if(e(`\u{1F4C1} Checking OpenCode JSON path: ${i}`),e(`\u{1F4C1} Checking OpenCode DB path: ${r}`),await mt(i)){let m=async f=>{let y=[];try{y=await Go.promises.readdir(f,{withFileTypes:!0})}catch(_){console.error(`[openCodeAdapter] Failed to read dir ${f}:`,_)}for(let _ of y)if(_.isDirectory())await m(pt.join(f,_.name));else if(_.name.startsWith("ses_")&&_.name.endsWith(".json")){let C=pt.join(f,_.name);try{(await Go.promises.stat(C)).size>0&&s.push(C)}catch(S){console.error(`[openCodeAdapter] Failed to stat ${C}:`,S)}}};await m(i);let p=s.length;p>0&&e(`\u{1F4C4} Found ${p} session files in OpenCode storage`)}if(await mt(r))try{let m=new Set(s.filter(y=>this.openCode.isOpenCodeSessionFile(y)).map(y=>this.openCode.getOpenCodeSessionId(y)).filter(Boolean)),p=await this.openCode.discoverOpenCodeDbSessions(),f=0;for(let y of p)m.has(y)||(s.push(pt.join(o,`opencode.db#${y}`)),f++);f>0&&e(`\u{1F4C4} Found ${f} additional session(s) in OpenCode database`)}catch(m){e(`OpenCode DB exists but could not be read: ${m}`)}return{sessionFiles:s,candidatePaths:t}}getCandidatePaths(){let e=this.openCode.getOpenCodeDataDir();return[{path:pt.join(e,"storage","session"),source:"OpenCode (JSON)"},{path:pt.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 l=s[r];if(l.role!=="user")continue;i++;let u=s.filter((_,C)=>C>r&&_.role==="assistant"&&_.parentID===l.id),p=(await this.openCode.getOpenCodePartsForMessage(l.id)).filter(_=>_.type==="text").map(_=>_.text||"").join(`
65
- `),f=await this.processOpenCodeAssistantMessages(u,o),y=Math.max(0,f.turnCumulativeTotal-o-f.turnOutputAndThinking);t.push({turnNumber:i,timestamp:l.time?.created?new Date(l.time.created).toISOString():null,mode:"cli",userMessage:p,assistantResponse:f.assistantText,model:f.model,toolCalls:f.toolCalls,contextReferences:Q(),mcpTools:[],inputTokensEstimate:y,outputTokensEstimate:f.turnOutputAndThinking-f.thinkingTokens,thinkingTokensEstimate:f.thinkingTokens}),o=f.turnCumulativeTotal}return{turns:t}}async processOpenCodeAssistantMessages(e,t){let s="",o=[],i=null,r=0,l=t;for(let m of e){i||(i=m.modelID||m.model?.modelID||null),r+=m.tokens?.reasoning||0,typeof m.tokens?.total=="number"&&(l=Math.max(l,m.tokens.total));let p=await this.openCode.getOpenCodePartsForMessage(m.id);for(let f of p)s+=this.processOpenCodePart(f,o)}let u=e.reduce((m,p)=>m+(p.tokens?.output||0)+(p.tokens?.reasoning||0),0);return{assistantText:s,toolCalls:o,model:i,thinkingTokens:r,turnCumulativeTotal:l,turnOutputAndThinking:u}}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=ne(),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 l=0;for(let u=1;u<i.length;u++)i[u]!==i[u-1]&&l++;s.modelSwitching.switchCount=l,de(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 hc=v(require("fs")),gt=v(require("path"));var nn=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,l)=>r-l),{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 gt.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 l=>{let u=gt.join(l.data_dir,"crush.db");e(`\u{1F4C1} Checking Crush DB path: ${u}`);try{return await hc.promises.access(u),(await this.crush.discoverSessionsInDb(u)).map(p=>gt.join(l.data_dir,`crush.db#${p}`))}catch(m){e(`Could not read Crush database for ${l.path}: ${m}`)}return[]})),r=i.reduce((l,u)=>l+u.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:gt.join(e,"projects.json"),source:"Crush (projects.json)"}],s=Fi(()=>this.crush.readCrushProjects().map(o=>({path:gt.join(o.data_dir,"crush.db"),source:`Crush (${gt.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(l=>l.role==="user").length,r=0;for(let l=0;l<s.length;l++){let u=s[l];if(u.role!=="user")continue;r++;let m=[];for(let p=l+1;p<s.length&&s[p].role!=="user";p++)s[p].role==="assistant"&&m.push(s[p]);t.push(this.buildCrushTurn(u,m,o,i,r))}return{turns:t}}buildCrushTurn(e,t,s,o,i){let l=(Array.isArray(e.parts)?e.parts:[]).filter(_=>_?.type==="text"&&_?.text).map(_=>_.text).join(`
66
- `),{assistantText:u,toolCalls:m,model:p}=this.processAssistantMessagesForTurn(t),f=s?.prompt_tokens&&o>0?Math.round(s.prompt_tokens/o):0,y=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:l,assistantResponse:u,model:p,toolCalls:m,contextReferences:Q(),mcpTools:[],inputTokensEstimate:f,outputTokensEstimate:y,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=ne(),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),de(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 yc=v(require("fs")),_c=v(require("path")),bc=v(rr());var on=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 Z(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,l)=>r-l),{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 _c.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=yc.readFileSync(e),o=(t.length>=2?Array.from((0,bc.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],l=s[i+1];r&&(o++,t.push(this.buildVSTurn(r,l,o)))}return{turns:t}}buildVSTurn(e,t,s){let o=e[1],i=t?.[1],r=this.visualStudio.extractTextFromContent(o?.Content||[]),l=t?this.visualStudio.extractTextFromContent(i?.Content||[]):"",u=this.visualStudio.getModelId(i??o,!i),m=this.visualStudio.extractContextText(o?.Context),p=this.estimateTokens(r+m,u??"gpt-4"),f=t?this.estimateTokens(l,u??"gpt-4"):0;return{turnNumber:s,timestamp:o?.Timestamp?new Date(o.Timestamp).toISOString():null,mode:"ask",userMessage:r,assistantResponse:l,model:u,toolCalls:this.extractVSToolCalls(i),contextReferences:Q(),mcpTools:[],inputTokensEstimate:p,outputTokensEstimate:f,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=ne(),o=await this.visualStudio.decodeSessionFile(e),i=[];for(let u=1;u<o.length;u++)u%2===1?s.modeUsage.ask++:this.processVSResponseObject(o[u]?.[1],s,i,t);let r=[...new Set(i)];s.modelSwitching.uniqueModels=r,s.modelSwitching.modelCount=r.length,s.modelSwitching.totalRequests=i.length;let l=0;for(let u=1;u<i.length;u++)i[u]!==i[u-1]&&l++;return s.modelSwitching.switchCount=l,de(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 l=Array.isArray(r)?r[1]:null;if(!l?.Function)continue;t.toolCalls.total++;let u=String(l.Function.Name||l.Function.Description||"tool");if(Je(u)){t.mcpTools.total++;let m=st(u,o.toolNameMap);t.mcpTools.byServer[m]=(t.mcpTools.byServer[m]||0)+1;let p=Fs(u);t.mcpTools.byTool[p]=(t.mcpTools.byTool[p]||0)+1,t.toolCalls.total--}else t.toolCalls.byTool[u]=(t.toolCalls.byTool[u]||0)+1}}};var kr=v(require("fs"));var rn=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 kr.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 kr.promises.stat(e)).mtime.toISOString()}catch{}}let l;if(t?.workspaceDirectory)try{l=decodeURIComponent(t.workspaceDirectory.replace(/^file:\/\/\//,"").replace(/^file:\/\//,""))}catch{}return{title:t?.title,firstInteraction:i,lastInteraction:r,workspacePath:l}}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=Q();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=ne(),o=await this.continue_.buildContinueTurns(e),i=await this.continue_.getContinueSessionMeta(e),r=[];for(let m of o){s.modeUsage.ask++,m.model&&r.push(m.model);for(let p of m.toolCalls)s.toolCalls.total++,s.toolCalls.byTool[p.toolName]=(s.toolCalls.byTool[p.toolName]||0)+1}if(i?.mode==="agent")for(let m=0;m<o.length;m++)s.modeUsage.ask--,s.modeUsage.agent++;let l=[...new Set(r)];s.modelSwitching.uniqueModels=l,s.modelSwitching.modelCount=l.length,s.modelSwitching.totalRequests=r.length;let u=0;for(let m=1;m<r.length;m++)r[m]!==r[m-1]&&u++;return s.modelSwitching.switchCount=u,de(t.modelPricing,l,r,s),s}};var Sc=v(require("fs")),Bo=v(require("path"));function Cc(n){switch((n||"").toLowerCase()){case"agent":return"agent";case"edit":return"edit";case"plan":return"plan";case"ask":return"ask";default:return"ask"}}function kc(n){if(!n)return null;let e=Date.parse(n);return Number.isNaN(e)?null:new Date(e).toISOString()}var jo=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 Sc.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:kc(t?.creationDate),lastInteraction:kc(t?.lastMessageDate)}}getEditorRoot(e){return Bo.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:Bo.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=Q();for(let i of s)t.push({turnNumber:t.length+1,timestamp:i.timestamp,mode:Cc(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=ne(),o=await this.eclipse.buildEclipseTurns(e),i=[];for(let u of o){this.tallyMode(s,u.mode),u.model&&i.push(u.model);for(let m of u.toolCalls)s.toolCalls.total++,s.toolCalls.byTool[m.toolName]=(s.toolCalls.byTool[m.toolName]||0)+1}let r=[...new Set(i)];s.modelSwitching.uniqueModels=r,s.modelSwitching.modelCount=r.length,s.modelSwitching.totalRequests=i.length;let l=0;for(let u=1;u<i.length;u++)i[u]!==i[u-1]&&l++;return s.modelSwitching.switchCount=l,de(t.modelPricing,r,i,s),s}tallyMode(e,t){let s=Cc(t);s==="agent"?e.modeUsage.agent++:s==="edit"?e.modeUsage.edit++:e.modeUsage.ask++}};var Tc=v(require("fs"));var wc=v(require("fs"));var Bf=new Set(["review","bug","think","compact","pr_comments"]);function Sr(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(`
67
- `)[0].trim().match(/^\/([a-z_]+)(?:\s|$)/i);if(!s)return null;let o=s[1].toLowerCase();return Bf.has(o)?o:null}var an=class{constructor(e,t=Je,s=st,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)}getBackingPath(e){return e}async stat(e){return wc.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}}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 tn(e),o=null,i=[];for(let l of s)if(l.type==="user"&&!l.isSidechain&&l.message?.role==="user"&&this.isRealUserMessage(l)){let u=this.buildTurnFromEvents(o,i,t.length+1);u&&t.push(u),o=l,i.length=0}else l.type==="assistant"&&l.message?.stop_reason&&l.message?.role==="assistant"&&i.push(l);let r=this.buildTurnFromEvents(o,i,t.length+1);return r&&t.push(r),{turns:t}}isRealUserMessage(e){let t=e.message?.content;if(typeof t=="string")return!!t.trim();if(!Array.isArray(t))return!1;let s=t.some(i=>i.type==="text"),o=t.some(i=>i.type==="tool_result");return s&&!o}buildTurnFromEvents(e,t,s){if(!e)return null;let o=e.message?.content,i=typeof o=="string"?o:Array.isArray(o)?o.filter(C=>C.type==="text").map(C=>C.text||"").join(`
68
- `):"",{assistantText:r,model:l,actualInputTokens:u,actualOutputTokens:m,toolCalls:p,mcpTools:f}=this.processAssistantEventsForTurn(t),y=l||"claude-sonnet-4-6",_=u>0||m>0?{promptTokens:u,completionTokens:m}:void 0;return{turnNumber:s,timestamp:e.timestamp?new Date(e.timestamp).toISOString():null,mode:"agent",userMessage:i,assistantResponse:r,model:y,toolCalls:p,contextReferences:Q(),mcpTools:f,inputTokensEstimate:u||this.estimateTokensFn(i,y),outputTokensEstimate:m||this.estimateTokensFn(r,y),thinkingTokensEstimate:0,actualUsage:_}}processAssistantEventsForTurn(e){let t="",s=0,o=0,i=null,r=[],l=[],u=new Set;for(let m of e){let p=m.message;!i&&p?.model&&(i=vt(p.model));let f=p?.id,y=!f||!u.has(f);f&&u.add(f),p?.usage&&y&&(s+=this.extractInputTokens(p.usage),o+=p.usage.output_tokens||0);for(let _ of Array.isArray(p?.content)?p.content:[])t+=this.processContentBlock(_,r,l)}return{assistantText:t,model:i,actualInputTokens:s,actualOutputTokens:o,toolCalls:r,mcpTools:l}}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=ne(),o=await tn(e),i=[];for(let r of o)r.type==="user"&&r.message?.role==="user"&&!r.isSidechain?this.processUserEvent(r,s):r.type==="assistant"?this.processAssistantEvent(r,s,t,i):r.type==="system"&&r.subtype==="compact_boundary"&&this.processCompactBoundaryEvent(r,s);return this.applyModelSwitchingStats(i,s),de(t.modelPricing,s.modelSwitching.uniqueModels,i,s),s}processCompactBoundaryEvent(e,t){e.compactMetadata?.trigger==="auto"&&(t.toolCalls.byTool.__auto_compact__=(t.toolCalls.byTool.__auto_compact__||0)+1)}processUserEvent(e,t){t.modeUsage.cli++;let s=Sr(e.message?.content);if(s){let o=`__slash__${s}`;t.toolCalls.byTool[o]=(t.toolCalls.byTool[o]||0)+1}}processAssistantEvent(e,t,s,o){let i=vt(e.message?.model||"unknown");o.push(i);let r=Array.isArray(e.message?.content)?e.message.content:[];for(let l of r){if(l?.type!=="tool_use")continue;let u=String(l.name||"tool");if(Je(u)){let m=st(u,s.toolNameMap);t.mcpTools.total++,t.mcpTools.byServer[m]=(t.mcpTools.byServer[m]||0)+1,t.mcpTools.byTool[u]=(t.mcpTools.byTool[u]||0)+1}else t.toolCalls.total++,t.toolCalls.byTool[u]=(t.toolCalls.byTool[u]||0)+1}}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 ln=class{constructor(e,t,s,o){this.claudeDesktopCowork=e;this.isMcpToolFn=t;this.extractMcpServerNameFn=s;this.estimateTokensFn=o}claudeDesktopCowork;isMcpToolFn;extractMcpServerNameFn;estimateTokensFn;id="claudedesktop";displayName="Claude Desktop Cowork";handles(e){return this.claudeDesktopCowork.isCoworkSessionFile(e)}getBackingPath(e){return e}async stat(e){return Tc.promises.stat(e)}async getTokens(e){let t=await this.claudeDesktopCowork.getTokensFromCoworkSession(e);return{...t,actualTokens:t.tokens}}async countInteractions(e){return await this.claudeDesktopCowork.countCoworkInteractions(e)}async getModelUsage(e){return await this.claudeDesktopCowork.getCoworkModelUsage(e)}async getMeta(e){let t=await this.claudeDesktopCowork.getCoworkSessionMeta(e);return{title:t?.title,firstInteraction:t?.firstInteraction||null,lastInteraction:t?.lastInteraction||null,workspacePath:t?.cwd}}getEditorRoot(e){return this.claudeDesktopCowork.getCoworkBaseDir()}async discover(e){let t=this.getCandidatePaths(),s=[];try{let o=await this.claudeDesktopCowork.getCoworkSessionFiles();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(){let e=this.claudeDesktopCowork.getCoworkBaseDir();return e?[{path:e,source:"Claude Desktop (Cowork)"}]:[]}async buildTurns(e){let t=[],s=await this.claudeDesktopCowork.readCoworkEvents(e),o=null,i=[];for(let l of s)if(l.type==="user"&&!l.isSidechain&&l.message?.role==="user"&&this.isRealUserMessage(l)){let u=this.buildTurnFromEvents(o,i,t.length+1);u&&t.push(u),o=l,i.length=0}else l.type==="assistant"&&l.message?.stop_reason&&l.message?.role==="assistant"&&i.push(l);let r=this.buildTurnFromEvents(o,i,t.length+1);return r&&t.push(r),{turns:t}}isRealUserMessage(e){let t=e.message?.content;if(typeof t=="string")return!!t.trim();if(!Array.isArray(t))return!1;let s=t.some(i=>i.type==="text"),o=t.some(i=>i.type==="tool_result");return s&&!o}buildTurnFromEvents(e,t,s){if(!e)return null;let o=e.message?.content,i=typeof o=="string"?o:Array.isArray(o)?o.filter(C=>C.type==="text").map(C=>C.text||"").join(`
69
- `):"",{assistantText:r,model:l,actualInputTokens:u,actualOutputTokens:m,toolCalls:p,mcpTools:f}=this.processAssistantEventsForTurn(t),y=l||"claude-sonnet-4-6",_=u>0||m>0?{promptTokens:u,completionTokens:m}:void 0;return{turnNumber:s,timestamp:e.timestamp?new Date(e.timestamp).toISOString():null,mode:"agent",userMessage:i,assistantResponse:r,model:y,toolCalls:p,contextReferences:Q(),mcpTools:f,inputTokensEstimate:u||this.estimateTokensFn(i,y),outputTokensEstimate:m||this.estimateTokensFn(r,y),thinkingTokensEstimate:0,actualUsage:_}}processAssistantEventsForTurn(e){let t="",s=0,o=0,i=null,r=[],l=[],u=new Set;for(let m of e){let p=m.message;!i&&p?.model&&(i=p.model);let f=m.requestId,y=!f||!u.has(f);f&&u.add(f);let _=p?.usage;if(_&&y){let C=this.extractUsageTokens(_);s+=C.input,o+=C.output}for(let C of Array.isArray(p?.content)?p.content:[])t+=this.processEventContentBlock(C,r,l)}return{assistantText:t,model:i,actualInputTokens:s,actualOutputTokens:o,toolCalls:r,mcpTools:l}}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=ne(),o=await tn(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),de(t.modelPricing,s.modelSwitching.uniqueModels,i,s),s}processDesktopUserEvent(e,t){t.modeUsage.ask++;let s=Sr(e.message?.content);if(s){let o=`__slash__${s}`;t.toolCalls.byTool[o]=(t.toolCalls.byTool[o]||0)+1}}processDesktopAssistantEvent(e,t,s){let o=vt(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 l=String(r.name||"tool");t.toolCalls.byTool[l]=(t.toolCalls.byTool[l]||0)+1}}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 Mc=v(require("fs"));var cn=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 Mc.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",l=this.findUserMessageIndices(s);for(let u=0;u<l.length;u++){let m=l[u],p=u+1<l.length?l[u+1]:s.length;t.push(this.buildMistralTurn(s,m,p,o,r,u+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 l=e[t],u=typeof l.content=="string"?l.content:"",{assistantText:m,toolCalls:p}=this.collectMistralTurnContent(e,t,s);return{turnNumber:r,timestamp:o.firstInteraction,mode:"cli",userMessage:u,assistantResponse:m,model:i,toolCalls:p,contextReferences:Q(),mcpTools:[],inputTokensEstimate:0,outputTokensEstimate:0,thinkingTokensEstimate:0}}collectMistralTurnContent(e,t,s){let o="",i=[];for(let r=t+1;r<s;r++){let l=e[r];if(l.role==="assistant")o+=this.processMistralAssistantMsg(l,i);else if(l.role==="tool"){let u=i[i.length-1];u&&(u.result=typeof l.content=="string"?l.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=ne(),o=await this.mistralVibe.readSessionMessages(e),r=(await this.mistralVibe.getSessionMeta(e)).model||"devstral",l=[];for(let m of o)if(m.role==="user"&&m.injected!==!0)s.modeUsage.cli++;else if(m.role==="assistant"&&(l.push(r),Array.isArray(m.tool_calls)))for(let p of m.tool_calls){s.toolCalls.total++;let f=String(p.function?.name||p.name||"tool");s.toolCalls.byTool[f]=(s.toolCalls.byTool[f]||0)+1}let u=[...new Set(l)];return s.modelSwitching.uniqueModels=u,s.modelSwitching.modelCount=u.length,s.modelSwitching.totalRequests=l.length,s.modelSwitching.switchCount=0,de(t.modelPricing,u,l,s),s}};var vc=v(require("fs"));var un=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 vc.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=ne(),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),de(t.modelPricing,s.modelSwitching.uniqueModels,i,s),s}processGeminiAssistantRecord(e,t,s){let o=Qs(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 Pc=v(require("fs")),wr=v(require("inspector"));var dn=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 Pc.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();wr.url()&&e(`\u{1F50D} [Antigravity] Checking brain dir: ${o}`);try{let i=await this.antigravity.getAntigravitySessionFiles();wr.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=ne(),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 Ac=v(require("fs"));var mn=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 Ac.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(u=>u.message?.role==="user").length,{perTurnInput:r,perTurnOutput:l}=this.computePerTurnDefaults(o,i);return{turns:this.buildAllTurns(t,r,l),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 l=this.collectAssistantEvents(e,r);o.push(this.buildTurn(e[r],l,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:l,toolCalls:u,model:m}=this.processAssistantEvents(t),p=t.reduce((y,_)=>y+(_.message?.usage?.input??0),0),f=t.reduce((y,_)=>y+(_.message?.usage?.output??0),0);return{turnNumber:s,timestamp:e.timestamp??null,mode:"cli",userMessage:r,assistantResponse:l,model:m,toolCalls:u,contextReferences:Q(),mcpTools:[],inputTokensEstimate:p>0?p:o,outputTokensEstimate:f>0?f:i,thinkingTokensEstimate:0}}extractUserText(e){return Array.isArray(e)?e.filter(t=>t.type==="text").map(t=>t.text||"").join(`
70
- `):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=ne(),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,de(t.modelPricing,o,e,s)}};var xc=v(require("fs")),Dc=v(require("path"));var qo=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 Dc.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 xc.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,l=r?s.get(r):void 0;l?.text&&o.push(l.text),i++}return o.join(`
54
+ `:"")+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 fg(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 hg(n,e){n.type==="PLANNER_RESPONSE"?gg(n,e):n.type==="SEARCH_WEB"&&n.content&&fg(n,e)}function yg(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"&&hg(o,t)}return t}var ti=class{getAntigravityDataDir(){return ht.join(gc.homedir(),".gemini","antigravity")}getAntigravityBrainDir(){return ht.join(this.getAntigravityDataDir(),"brain")}isAntigravitySessionFile(e){let t=ee(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 ht.basename(ht.dirname(ht.dirname(ht.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 ei.promises.readdir(e,{withFileTypes:!0})}catch{return[]}for(let o of s){if(!o.isDirectory())continue;let i=ht.join(e,o.name,".system_generated","logs","transcript.jsonl");try{(await ei.promises.stat(i)).size>0&&t.push(i)}catch{}}return t}async readAntigravitySession(e){let t=this.getSessionIdFromPath(e),s=[],o=[],i=[],r;try{r=await ei.promises.readFile(e,"utf8")}catch{return{sessionId:t,userEntries:s,modelEntries:o,allEntries:i}}let a=r.split(`
55
+ `).filter(m=>m.trim().length>0);for(let m of a){let p;try{p=JSON.parse(m)}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 c=(m,p)=>m.step_index-p.step_index;return i.sort(c),s.sort(c),o.sort(c),{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(Gr(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 c=t.userEntries[0].content??"",m=Gr(c);o=m.length>120?m.substring(0,117)+"...":m||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:Gr(t.content??""),assistantResponse:s,model:null,toolCalls:o,contextReferences:J(),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:c,toolCalls:m}=yg(s,r+1);o.push(this._batCreateChatTurn(i,a,c,m))}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 si=T(require("fs")),Ve=T(require("path")),fc=T(require("os"));var ni=class{getConfigDir(){return Ve.join(fc.homedir(),".pi","agent","sessions")}isPiSessionFile(e){let t=be(e);return t.includes("/.pi/agent/sessions/")&&t.endsWith(".jsonl")}async discoverSessions(){let e=this.getConfigDir(),t=[];try{let s=await si.promises.readdir(e,{withFileTypes:!0});for(let o of s)o.isDirectory()&&await this.collectSessionFilesInDir(Ve.join(e,o.name),t,4)}catch{}return t}async collectSessionFilesInDir(e,t,s){if(!(s<=0))try{let o=await si.promises.readdir(e,{withFileTypes:!0});for(let i of o)i.isFile()&&i.name.endsWith(".jsonl")?t.push(Ve.join(e,i.name)):i.isDirectory()&&await this.collectSessionFilesInDir(Ve.join(e,i.name),t,s-1)}catch{}}async readLines(e){try{let t=await si.promises.readFile(e,"utf8");return this.parseJsonlContent(t)}catch{return[]}}parseJsonlContent(e){let t=[];for(let s of e.split(`
56
+ `)){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(Ve.basename(e)!=="session.jsonl")return null;let t=Ve.dirname(Ve.dirname(Ve.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";t[a]||(t[a]={inputTokens:0,outputTokens: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?Ve.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,interactions:Math.round(t*c)}}return o}};var we=T(require("fs")),ot=T(require("path")),Nt=T(require("os")),hc=T(Ss());var oi=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}getCursorGlobalStorageDir(){let e=Nt.platform();if(e==="win32"){let s=process.env.APPDATA||ot.join(Nt.homedir(),"AppData","Roaming");return ot.join(s,"Cursor","User","globalStorage")}if(e==="darwin")return ot.join(Nt.homedir(),"Library","Application Support","Cursor","User","globalStorage");let t=process.env.XDG_CONFIG_HOME||ot.join(Nt.homedir(),".config");return ot.join(t,"Cursor","User","globalStorage")}getCursorDbPath(){return ot.join(this.getCursorGlobalStorageDir(),"state.vscdb")}isCursorSessionFile(e){return ee(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=ot.join(__dirname,"sql-wasm.wasm"),t;we.existsSync(e)&&(t=we.readFileSync(e));let s=await(0,hc.default)(t?{wasmBinary:t.buffer}:void 0);return this._sqlJsModule=s,s})().catch(e=>{throw this._sqlJsInitPromise=null,e})),this._sqlJsInitPromise)}getWalMtimeMs(e){try{return we.statSync(e+"-wal").mtimeMs}catch{return 0}}statDb(e){try{return we.statSync(e)}catch(t){let s=t?.code;if((s==="ENOENT"||s==="ENOTDIR")&&this._dbCache.has(e)){try{this._dbCache.get(e).db.close()}catch{}this._dbCache.delete(e)}return null}}isCachedDbCurrent(e,t){let s=this._dbCache.get(e);return!!s&&s.mtimeMs===t.mtimeMs&&s.size===t.size&&s.walMtimeMs===this.getWalMtimeMs(e)}async tryReadDbWithWal(e){let t=e+"-wal",s;try{s=we.statSync(t).size}catch{return null}if(s===0)return null;try{let{DatabaseSync:o}=require("node:sqlite"),i=Nt.tmpdir(),r=ot.join(i,`cursor-wal-${Date.now()}.db`),a=r+"-wal",c=r+"-shm",m=e+"-shm";we.copyFileSync(e,r),we.copyFileSync(t,a),we.existsSync(m)&&we.copyFileSync(m,c);let p=new o(r);p.exec("PRAGMA wal_checkpoint(TRUNCATE);"),p.close();let g=we.readFileSync(r);for(let h of[r,a,c])try{we.unlinkSync(h)}catch{}return g}catch{return null}}async refreshDb(e,t){let s=this.getWalMtimeMs(e),o;try{let a=await this.initSqlJs(),m=await this.tryReadDbWithWal(e)??we.readFileSync(e);o=new a.Database(m)}catch{return this._dbCache.get(e)?.db??null}let i=this.statDb(e);if(!i||i.mtimeMs!==t.mtimeMs||i.size!==t.size){try{o.close()}catch{}return this._dbCache.get(e)?.db??null}let r=this._dbCache.get(e);if(r)try{r.db.close()}catch{}return this._dbCache.set(e,{db:o,mtimeMs:t.mtimeMs,size:t.size,walMtimeMs:s}),o}async getDb(e){let t=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}:wal${this.getWalMtimeMs(e)}`,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 readComposerData(e){let t=this.getDbPathFromVirtual(e),s=this.getComposerIdFromVirtual(e);if(!s)return null;let o=await this.getDb(t);if(!o)return null;try{let i=o.exec("SELECT value FROM cursorDiskKV WHERE key = ?",[`composerData:${s}`]);if(i.length===0||i[0].values.length===0)return null;let r=i[0].values[0][0];return JSON.parse(r)}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=await this.getDb(s);if(!i)return new Map;let r=new Map;try{let a=t.map(()=>"?").join(","),c=t.map(p=>`bubbleId:${o}:${p}`),m=i.exec(`SELECT key, value FROM cursorDiskKV WHERE key IN (${a})`,c);if(m.length===0)return r;for(let p of m[0].values){let g=p[0],h=p[1],_=g.replace(`bubbleId:${o}:`,"");try{let C=JSON.parse(h);r.set(_,C)}catch{}}}catch{}return r}async discoverSessions(){let e=this.getCursorDbPath(),t=await this.getDb(e);if(!t)return[];try{let s=t.exec("SELECT key FROM cursorDiskKV WHERE key LIKE 'composerData:%' AND (length(key) - length(replace(key, ':', ''))) = 1");return s.length===0?[]:s[0].values.map(o=>{let i=o[0].replace("composerData:","");return`${e}#${i}`})}catch{return[]}}async statSessionFile(e){let t=this.getDbPathFromVirtual(e);return we.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}}}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(ot.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 St=T(require("fs")),_e=T(require("path")),Rs=T(require("os")),yc=T(require("crypto"));var _g=new Set(["intentClassification","model","say"]),ii=class{getKiroAppDataDir(){let e=Rs.platform();if(e==="win32"){let t=process.env.APPDATA||_e.join(Rs.homedir(),"AppData","Roaming");return _e.join(t,"Kiro")}return e==="darwin"?_e.join(Rs.homedir(),"Library","Application Support","Kiro"):_e.join(Rs.homedir(),".config","Kiro")}getKiroAgentDir(){return _e.join(this.getKiroAppDataDir(),"User","globalStorage","kiro.kiroagent")}getKiroWorkspaceSessionsDir(){return _e.join(this.getKiroAgentDir(),"workspace-sessions")}isKiroSessionFile(e){let t=ee(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 St.promises.readdir(e,{withFileTypes:!0})}catch{return[]}let s=[];for(let o of t){if(!o.isDirectory())continue;let i=_e.join(e,o.name);try{let r=await St.promises.readdir(i);for(let a of r)a.endsWith(".json")&&a!=="sessions.json"&&s.push(_e.join(i,a))}catch{}}return s}async readSessionFile(e){try{let t=await St.promises.readFile(e,"utf8");return JSON.parse(t)}catch{return null}}_executionRecordCache=new Map;getWorkspaceExecutionDir(e){let t=yc.createHash("sha256").update(e).digest("hex").slice(0,32);return _e.join(this.getKiroAgentDir(),t)}async readExecutionRecordsForSession(e){let t=_e.basename(e,".json"),s=this.decodeWorkspaceDirName(_e.basename(_e.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 St.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=_e.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 St.promises.stat(e)}catch{return null}let s=this._executionRecordCache.get(e);if(s&&s.mtimeMs===t.mtimeMs)return s.parsed;let o=null;try{o=JSON.parse(await St.promises.readFile(e,"utf8"))}catch{o=null}return this._executionRecordCache.set(e,{mtimeMs:t.mtimeMs,parsed:o}),o}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(`
57
+ `)}extractActionToolCalls(e){let t=[];for(let s of Array.isArray(e?.actions)?e.actions:[]){let o=typeof s?.actionType=="string"?s.actionType:"";!o||_g.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}};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)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";s[r]||(s[r]={inputTokens:0,outputTokens:0}),s[r].inputTokens+=this.estimateTokens(i.prompt||""),s[r].outputTokens+=this.estimateTokens(i.completion||"")}return s}async readSessionIndexEntry(e){let t=_e.join(_e.dirname(e),"sessions.json"),s=_e.basename(e,".json");try{let o=JSON.parse(await St.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 St.promises.stat(e);i=a.mtime.toISOString(),o||(o=a.birthtime.toISOString())}catch{}let r=s?.workspaceDirectory??this.decodeWorkspaceDirName(_e.basename(_e.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)?W(new Date(a)):W(new Date)]:1}}let o=new Map;for(let r of t){let a=r.startTimeMs!==null?W(new Date(r.startTimeMs)):W(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(`
58
+ `):""}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:c}=this.buildTurnFromHistory(s,i);o.push(a),i=c}let r=await this.readExecutionRecordsForSession(e);if(r.length>0){let a=new Map(r.map(c=>[c.executionId,c]));for(let c of o)this.enrichTurnWithExecutionRecords(c,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(`
71
59
 
72
- `)}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),l=await this.cursor.readBubbles(e,r),u=[],m=0;for(let p=0;p<s.length;p++){let f=s[p];if(f.type!==1)continue;m++;let y=f.bubbleId?l.get(f.bubbleId):void 0;u.push({turnNumber:m,timestamp:y?.createdAt??null,mode:"agent",userMessage:y?.text??"",assistantResponse:this.collectAssistantText(s,p+1,l),model:i,toolCalls:[],contextReferences:Q(),mcpTools:[],inputTokensEstimate:0,outputTokensEstimate:0,thinkingTokensEstimate:0})}return{turns:u,actualTokens:o}}async getSyncData(e){return this.cursor.getSessionData(e)}async analyzeUsage(e,t){let s=ne(),o=await this.cursor.readComposerData(e);if(!o?.fullConversationHeadersOnly)return s;let i=o.modelConfig?.modelName||"unknown",r=o.fullConversationHeadersOnly,l=r.filter(p=>p.type===1).length,u=r.filter(p=>p.type===2).length;s.modeUsage.agent+=l,u>0&&(s.modelSwitching.uniqueModels=[i],s.modelSwitching.modelCount=1,s.modelSwitching.totalRequests=u,s.modelSwitching.switchCount=0);let m=Array(u).fill(i);return de(t.modelPricing,[i],m,s),s}};var Ie=v(require("fs")),ee=v(require("path")),fn=v(require("os"));var pn=["Code","Code - Insiders","Code - Exploration","VSCodium","Cursor"],Ic=new Set(["Public","Default","Default User","All Users"]);function Tr(){return fn.platform()==="linux"&&(typeof process.env.WSL_DISTRO_NAME=="string"||typeof process.env.WSL_INTEROP=="string")}function Ec(){let n=fn.platform(),e=fn.homedir(),t=[];if(n==="win32"){let s=process.env.APPDATA||ee.join(e,"AppData","Roaming");for(let o of pn)t.push(ee.join(s,o,"User"))}else if(n==="darwin")for(let s of pn)t.push(ee.join(e,"Library","Application Support",s,"User"));else{let s=process.env.XDG_CONFIG_HOME||ee.join(e,".config");for(let o of pn)t.push(ee.join(s,o,"User"))}return t.push(ee.join(e,".vscode-server","data","User"),ee.join(e,".vscode-server-insiders","data","User"),ee.join(e,".vscode-remote","data","User"),ee.join("/tmp",".vscode-server","data","User"),ee.join("/workspace",".vscode-server","data","User")),t}async function qf(){if(!Tr())return[];let n=[],e=[],t=process.env.USERPROFILE;if(t){let o=t.match(/^\/mnt\/[a-z]\/Users\/([^/]+)/);o&&e.push(o[1])}let s="/mnt/c/Users";try{let o=await Ie.promises.readdir(s,{withFileTypes:!0});for(let i of o){if(!i.isDirectory())continue;let r=i.name;Ic.has(r)||r.startsWith(".")||e.includes(r)||e.push(r)}}catch{return[]}for(let o of e){let i=ee.join(s,o,"AppData","Roaming");for(let r of pn)n.push(ee.join(i,r,"User"))}return n}function zf(){if(!Tr())return[];let n=[],e="/mnt/c/Users";try{let t=Ie.readdirSync(e,{withFileTypes:!0});for(let s of t)if(!(!s.isDirectory()||s.name.startsWith(".")||Ic.has(s.name)))for(let o of pn)n.push(ee.join(e,s.name,"AppData","Roaming",o,"User"))}catch{}return n}async function Rc(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(l){s?.(n[r],r,l)}}});await Promise.all(i)}async function Uc(n,e,t){let s;try{s=await Ie.promises.readdir(n,{withFileTypes:!0})}catch(o){t(`Could not scan directory ${n}: ${o}`);return}for(let o of s){let i=ee.join(n,o.name);if(o.isDirectory()){await Uc(i,e,t);continue}if(!(!o.name.endsWith(".json")&&!o.name.endsWith(".jsonl"))&&!Hl(o.name))try{(await Ie.promises.stat(i)).size>0&&e.push(i)}catch{}}}var gn=class{id="copilotchat";displayName="GitHub Copilot Chat";handles(e){return!1}getBackingPath(e){return e}async stat(e){return Ie.promises.stat(e)}async getTokens(e){try{let t=await Ie.promises.readFile(e,"utf8");return as(t)?{tokens:0,thinkingTokens:0,actualTokens:0}:e.endsWith(".jsonl")||lt(t)?lo(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=fe(e),s=t.lastIndexOf("/User/");return s>=0?t.substring(0,s+5):ee.dirname(e)}getCandidatePaths(){let e=[];for(let t of Ec())e.push({path:t,source:"VS Code"});for(let t of zf())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(l=>mt(l).catch(()=>!1))),r=o.filter((l,u)=>i[u]);return e(`\u2705 Found ${r.length} of ${o.length} VS Code paths exist on disk`),await Rc(r,async l=>{let u=ee.basename(ee.dirname(l));await this.scanWorkspaceStorage(l,u,s,e),await this.scanGlobalStorage(l,u,s,e)},4,(l,u,m)=>{e(`Failed to scan VS Code user path ${l}: ${m instanceof Error?m.message:String(m)}`)}),{sessionFiles:s,candidatePaths:t}}async resolveAllVSCodePaths(e){let t=Ec();if(Tr()){e("\u{1FA9F} WSL environment detected \u2014 probing Windows-side VS Code paths");let s=await qf();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=ee.join(e,"workspaceStorage"),r;try{r=await Ie.promises.readdir(i)}catch{return}let l=["GitHub.copilot-chat","github.copilot-chat","GitHub.copilot","github.copilot"],u=["chatSessions","debug-logs","transcripts"],m=async f=>{try{let y=(await Ie.promises.readdir(f)).filter(_=>_.endsWith(".json")||_.endsWith(".jsonl")).map(_=>ee.join(f,_));y.length>0&&s.push(...y)}catch{}},p=0;await Rc(r,async f=>{let y=ee.join(i,f),_;try{_=await Ie.promises.readdir(y)}catch{return}let C=new Set(_),S=s.length;C.has("chatSessions")&&await m(ee.join(y,"chatSessions"));for(let I of l)if(C.has(I))for(let P of u)await m(ee.join(y,I,P));s.length>S&&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=ee.join(e,"globalStorage","emptyWindowChatSessions"),r=(await Ie.promises.readdir(i)).filter(l=>l.endsWith(".json")||l.endsWith(".jsonl")).map(l=>ee.join(i,l));r.length>0&&s.push(...r)}catch{}for(let i of["GitHub.copilot-chat","github.copilot-chat","GitHub.copilot","github.copilot"]){let r=ee.join(e,"globalStorage",i);try{await Ie.promises.access(r),await Uc(r,s,o)}catch{}}}};var yn=v(require("fs")),Ue=v(require("path")),Ar=v(require("os"));var hn=v(require("fs")),Mr=v(require("path")),Fc=v(require("os")),Oc=v(Ns());function vr(n){return n?n.replace(/\\/g,"/").toLowerCase().includes("/microsoft scout"):!1}function $f(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 Wf(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 zo=class{_sqlJsModule=null;_sqlJsInitPromise=null;_dbCache=new Map;_dbCacheInflight=new Map;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"}async statDb(e){try{return await hn.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(),l=await hn.promises.readFile(e);s=new r.Database(l)}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 Mr.join(Fc.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 stat(e){return hn.promises.stat(this.getDbPathFromVirtual(e))}async initSqlJs(){return this._sqlJsModule?this._sqlJsModule:(this._sqlJsInitPromise||(this._sqlJsInitPromise=(async()=>{let e=Mr.join(__dirname,"sql-wasm.wasm"),t;try{t=await hn.promises.readFile(e)}catch{}let s=await(0,Oc.default)(t?{wasmBinary:t}: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);if(!s)return null;let o=await this.getDb(t);if(!o)return null;try{let i=o.exec("SELECT id, cwd, repository, branch, summary, 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,l=i[0].values[0],u={};return r.forEach((m,p)=>{u[m]=l[p]}),$f(u)?u:null}catch{return 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,l=[];for(let u of i[0].values){let m={};r.forEach((p,f)=>{m[p]=u[f]}),Wf(m)&&l.push(m)}return l}catch{return[]}}async countTurns(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(*) FROM turns WHERE session_id = ?",[s]);return i.length===0||i[0].values.length===0?0:i[0].values[0][0]||0}catch{return 0}}async getDailyFractions(e){let t=await this.getTurns(e),s={},o=0;for(let r of t)if(r.timestamp)try{let l=he(new Date(r.timestamp));s[l]=(s[l]||0)+1,o++}catch{}if(o===0){let r=await this.readSession(e);return{[r?.updated_at?he(new Date(r.updated_at)):he(new Date)]:1}}let i={};for(let[r,l]of Object.entries(s))i[r]=l/o;return i}};function Pr(){return Ue.join(Ar.homedir(),".copilot","session-state")}var _n=class{id="copilotcli";displayName="Copilot CLI";store=new zo;_scoutSessionIds=new Set;getDisplayName(e){let t=this.store.getSessionId(e);if(t&&this._scoutSessionIds.has(t))return"MS Scout (Copilot CLI)";let s=Ue.basename(Ue.dirname(e));return s&&this._scoutSessionIds.has(s)?"MS Scout (Copilot CLI)":"Copilot CLI"}getDisplayNameForDiscoveredPath(e){let t=Ue.basename(Ue.dirname(e));if(t&&this._scoutSessionIds.has(t))return"MS Scout (Copilot CLI)"}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):yn.promises.stat(e)}async getTokens(e){return{tokens:0,thinkingTokens:0,actualTokens:0}}async countInteractions(e){return this.store.isCliStoreSession(e)?this.store.countTurns(e):0}async getModelUsage(e){return{}}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}:{title:void 0,firstInteraction:null,lastInteraction:null}}return{title:void 0,firstInteraction:null,lastInteraction:null}}getEditorRoot(e){return this.store.isCliStoreSession(e)?Ue.join(Ar.homedir(),".copilot"):Pr()}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:Q(),mcpTools:[],inputTokensEstimate:0,outputTokensEstimate:0,thinkingTokensEstimate:0}))}:{turns:[]}}async analyzeUsage(e,t){let s=ne();if(!this.store.isCliStoreSession(e))return s;let o=await this.store.getTurns(e);return s.modeUsage.cli=o.filter(i=>i.user_message!==null).length,s}async getDailyFractions(e){return this.store.isCliStoreSession(e)?this.store.getDailyFractions(e):{}}async _tryMarkScoutFromWorkspaceYaml(e,t){let s=Ue.join(e,"workspace.yaml");try{let i=(await yn.promises.readFile(s,"utf8")).match(/^cwd:\s*(.+)$/m);i&&vr(i[1].trim())&&this._scoutSessionIds.add(t)}catch{}}getCandidatePaths(){let e=[{path:Pr(),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=Pr(),i=new Set;try{if(await mt(o)){let r;try{r=await yn.promises.readdir(o,{withFileTypes:!0})}catch(p){e(`Could not read Copilot CLI session path in ${o}: ${p}`),r=[]}let l=r.filter(p=>!p.isDirectory()&&(p.name.endsWith(".json")||p.name.endsWith(".jsonl"))).map(p=>Ue.join(o,p.name));l.length>0&&(e(`\u{1F4C4} Found ${l.length} session files in Copilot CLI directory`),s.push(...l));let u=r.filter(p=>p.isDirectory()),m=(await Promise.all(u.map(async p=>{let f=Ue.join(o,p.name),y=Ue.join(f,"events.jsonl");try{if((await yn.promises.stat(y)).size>0)return i.add(p.name),await this._tryMarkScoutFromWorkspaceYaml(f,p.name),y}catch{}return null}))).filter(p=>p!==null);m.length>0&&(e(`\u{1F4C4} Found ${m.length} session files in Copilot CLI subdirectories`),s.push(...m))}}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`);for(let{id:l,cwd:u}of r)vr(u)&&this._scoutSessionIds.add(l),s.push(this.store.virtualPath(l))}}catch(r){e(`Could not read Copilot CLI session-store.db: ${r}`)}return{sessionFiles:s,candidatePaths:t}}};var fs=v(require("fs")),$o=v(require("path")),Nc=v(require("os"));function xr(){return $o.join(Nc.homedir(),".copilot","jb")}var bn=class{id="jetbrains";displayName="JetBrains IDE";handles(e){return!1}getBackingPath(e){return e}async stat(e){return fs.promises.stat(e)}async parsePartition(e){try{let t=await fs.promises.readFile(e,"utf8");return Oo(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 xr()}getCandidatePaths(){return[{path:xr(),source:"JetBrains IDE"}]}async discover(e){let t=this.getCandidatePaths(),s=[],o=xr();try{if(!await mt(o))return{sessionFiles:s,candidatePaths:t};let i;try{i=await fs.promises.readdir(o,{withFileTypes:!0})}catch(u){return e(`Could not read JetBrains session path in ${o}: ${u}`),{sessionFiles:s,candidatePaths:t}}let r=i.filter(u=>u.isDirectory()),l=(await Promise.all(r.map(async u=>{let m=$o.join(o,u.name),p;try{p=await fs.promises.readdir(m,{withFileTypes:!0})}catch{return[]}let f=[];for(let y of p){if(!y.isFile()||!/^partition-\d+\.jsonl$/.test(y.name))continue;let _=$o.join(m,y.name);try{(await fs.promises.stat(_)).size>0&&f.push(_)}catch{}}return f}))).flat();l.length>0&&(e(`\u{1F4C4} Found ${l.length} session file(s) in JetBrains IDE Copilot`),s.push(...l))}catch(i){e(`Could not check JetBrains session path ${o}: ${i}`)}return{sessionFiles:s,candidatePaths:t}}};function Dr(n){return{openCode:new io(n),crush:new ro(n),continue_:new ao,eclipse:new co,visualStudio:new wo,claudeCode:new Mo,claudeDesktopCowork:new Po,mistralVibe:new Ao,geminiCli:new xo,antigravity:new Eo,pi:new Io,cursor:new Uo(n)}}function Er(n){return[new sn(n.openCode),new nn(n.crush),new on(n.visualStudio,n.estimateTokens),new rn(n.continue_),new jo(n.eclipse),new ln(n.claudeDesktopCowork,n.isMcpTool,n.extractMcpServerName,n.estimateTokens),new an(n.claudeCode,n.isMcpTool,n.extractMcpServerName,n.estimateTokens),new cn(n.mistralVibe),new dn(n.antigravity,n.estimateTokens),new un(n.geminiCli),new mn(n.pi),new qo(n.cursor),new gn,new _n,new bn]}function Cn(n,e){try{return JSON.parse(n)}catch(t){console.error(`[${e}] JSON parse error:`,t);return}}function ze(n){return typeof n=="object"&&n!==null}function Lc(n){return typeof n!="string"?!1:!["__proto__","prototype","constructor","hasOwnProperty"].includes(n)&&!n.startsWith("__")}function hs(n){return/^\d+$/.test(n)}function Rr(n,e){if(typeof n!="string")return e;let t=n.trim();return t?t.startsWith("copilot/")?t.substring(8):t:e}function Hf(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)&&hs(i)){let l=Number(i),u=s[l],m;ze(u)?m=u:(m=hs(r)?[]:Object.create(null),s[l]=m),s=m;continue}if(!ze(s))return null;s=t(s,i,r)}return{root:n,current:s}}function Jf(n,e,t,s){return Array.isArray(e)&&hs(t)?(e[Number(t)]=s,n):(ze(e)&&Object.defineProperty(e,t,{value:s,writable:!0,enumerable:!0,configurable:!0}),n)}function Vf(n,e,t,s){let o;if(Array.isArray(e)&&hs(t)){let i=Number(t);Array.isArray(e[i])||(e[i]=[]),o=e[i]}else ze(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 Kf(n,e){if(!ze(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 y of i)if(!Lc(y))return n;let r=ze(n)?n:Object.create(null),u=Hf(r,i,(y,_,C)=>{let S=y[_];if(!ze(S)){let I=hs(C)?[]:Object.create(null);return y[_]=I,I}return S});if(!u)return r;let{root:m,current:p}=u,f=i[i.length-1];return t===1?Jf(m,p,f,o):t===2?Vf(m,p,f,o):m}function Qf(n){if(!Array.isArray(n))return{responseText:"",thinkingText:""};let e="",t="";for(let s of n){let{text:o,isThinking:i}=rs(s);o&&(i?t+=o:e+=o)}return{responseText:e,thinkingText:t}}var Ir=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);this.modelUsage[s]||(this.modelUsage[s]={inputTokens:0,outputTokens:0});let o=this.estimateTokens(t,s);this.modelUsage[s].inputTokens+=o,this.totalInputTokens+=o}addOutput(e,t){let s=this.ensureModel(e);this.modelUsage[s]||(this.modelUsage[s]={inputTokens:0,outputTokens:0});let o=this.estimateTokens(t,s);this.modelUsage[s].outputTokens+=o,this.totalOutputTokens+=o}};function Yf(n,e,t){let s=n.modelId??n.selectedModel?.identifier??n.model,o=Rr(s,t);if(typeof s=="string"&&s.trim())return o;let i=e?e(n):void 0;return Rr(i,"")||o}function Xf(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 Zf(n,e,t,s){let o=n.modelName||e;n.prompt&&t(o,n.prompt),n.result&&s(o,n.result)}function eh(n,e,t,s){let o=is(n);if(o){Zf(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 th(n,e,t,s){for(let o of n)eh(o,e,t,s)}function sh(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 nh(n){return Array.isArray(n.requests)?n.requests:Array.isArray(n.history)?n.history:[]}function oh(n){return n.trim().length>0}function Gc(n,e,t,s,o,i,r){if(n==null||typeof n!="object")return;let l=n,u=Yf(l,o,i);Xf(l,u,t);let{responseText:m,thinkingText:p}=Qf(l.response);m&&s(u,m),p&&(e.thinkingTokens+=r(p,u));let f=Array.isArray(l.response)?l.response:Array.isArray(l.responses)?l.responses:[];th(f,u,t,s),e.actualTokens+=sh(l.result)}function ih(n){if(!ze(n))return!1;let e=n.message;return ze(e)&&typeof e.text=="string"&&!!e.text.trim()}function rh(n){if(n.length===0)return null;let e=Cn(n[0],"sessionParser");if(!e||typeof e.kind!="number")return null;let t=Object.create(null);for(let o of n){let i=Cn(o,"sessionParser");i!==void 0&&(t=Kf(t,i))}let s=ze(t)?t:null;return s&&Array.isArray(s.requests)?s.requests:[]}function jc(n,e,t,s){let o,i="unknown",r=new Ir(i,t),{modelUsage:l}=r,u=r.addInput.bind(r),m=r.addOutput.bind(r),p={thinkingTokens:0,actualTokens:0};if(n.endsWith(".jsonl")){let _=e.split(/\r?\n/).filter(oh),C=rh(_);if(C!==null){let S=C.filter(ih).length;for(let I of C)Gc(I,p,u,m,s,i,t);return{tokens:r.totalInputTokens+r.totalOutputTokens+p.thinkingTokens,interactions:S,modelUsage:l,thinkingTokens:p.thinkingTokens,actualTokens:0}}if(o=Cn(e.trim(),"sessionParser"),o===void 0)return{tokens:0,interactions:0,modelUsage:{},thinkingTokens:0,actualTokens:0}}if(!o&&(o=Cn(e,"sessionParser"),o===void 0))return{tokens:0,interactions:0,modelUsage:{},thinkingTokens:0,actualTokens:0};if(!ze(o)||Array.isArray(o))return{tokens:0,interactions:0,modelUsage:{},thinkingTokens:0,actualTokens:0};let f=nh(o),y=f.length;for(let _ of f)Gc(_,p,u,m,s,i,t);return{tokens:r.totalInputTokens+r.totalOutputTokens+p.thinkingTokens,interactions:y,modelUsage:l,thinkingTokens:p.thinkingTokens,actualTokens:p.actualTokens}}var Ur=class{extractCounts(e){let t={},s={},o=e.trim().split(`
73
- `);for(let i of o)if(i.trim())try{let r=JSON.parse(i);if(r.type==="user.message"){ys(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)ys(s.timestamp??s.ts,t)}processKind2Event(e,t,s,o){if(Array.isArray(t))for(let i of t)ys(i.timestamp??i.ts,o);else if(t&&typeof t=="object"){let i=t.timestamp??t.ts;i!==void 0&&ys(i,o),typeof e[1]=="number"&&(s[e[1]]=i)}}processKind1Event(e,t,s,o){let i=e[1];s[i]===void 0&&ys(t,o),s[i]=t}},Fr=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;ys(i,t)}}catch{}return t}};function ah(n){if(n==null)return null;let e=new Date(n);return isNaN(e.getTime())?null:e}function ys(n,e){let t=ah(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 Bc(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}`,u=(e?new Ur:new Fr).extractCounts(n),m=Object.values(u).reduce((f,y)=>f+y,0);if(m===0)return{[r]:1};let p={};for(let[f,y]of Object.entries(u))p[f]=y/m;return p}var At=v(require("fs")),Nr=v(require("path")),qc=v(require("os"));var Wo=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 zc=5,lh=2e3,$c=Nr.join(qc.homedir(),".copilot-token-tracker"),Or=Nr.join($c,"cli-cache.json"),ft=new Map,_s=!0,Wc=!1,Hc=new Wo(lh);function Lr(){_s=!1,ft.clear()}function Gr(){if(_s)try{if(!At.existsSync(Or))return;let n=At.readFileSync(Or,"utf-8"),e=JSON.parse(n);if(e.version!==zc){ft.clear();return}ft=new Map(Object.entries(e.entries))}catch{ft.clear()}}function jr(){if(!(!_s||!Wc))try{Hc.evict(ft),At.mkdirSync($c,{recursive:!0});let n={version:zc,entries:Object.fromEntries(ft)};At.writeFileSync(Or,JSON.stringify(n),"utf-8")}catch{}}function Jc(n,e,t){if(!_s)return null;let s=ft.get(n);return!s||!Hc.isValid(s,e,t)?null:{...s.data,lastModified:new Date(s.data.lastModified)}}function Br(n,e,t,s){_s&&(Wc=!0,ft.set(n,{mtime:e,size:t,data:{...s,lastModified:s.lastModified.toISOString()}}))}function qr(){return{entries:ft.size,enabled:_s}}var Fe={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 Vc={$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}};var Ho={$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-07-01",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",multiplier:1,displayNames:["GPT-5"]},"gpt-5-codex":{inputCostPerMillion:1.25,outputCostPerMillion:10,category:"GPT-5 models",tier:"premium",multiplier:1,displayNames:["GPT-5 Codex (Preview)"]},"gpt-5-mini":{inputCostPerMillion:.25,outputCostPerMillion:2,category:"GPT-5 models",tier:"standard",multiplier:0,displayNames:["GPT-5 Mini"],copilotPricing:{inputCostPerMillion:.25,cachedInputCostPerMillion:.025,outputCostPerMillion:2,releaseStatus:"GA",category:"Lightweight"}},"gpt-5.1":{inputCostPerMillion:1.25,outputCostPerMillion:10,category:"GPT-5 models",tier:"premium",multiplier:1,displayNames:["GPT-5.1"]},"gpt-5.1-codex":{inputCostPerMillion:1.25,outputCostPerMillion:10,category:"GPT-5 models",tier:"premium",multiplier:1,displayNames:["GPT-5.1 Codex"]},"gpt-5.1-codex-max":{inputCostPerMillion:1.75,outputCostPerMillion:14,category:"GPT-5 models",tier:"premium",multiplier:1,displayNames:["GPT-5.1 Codex Max"]},"gpt-5.1-codex-mini":{inputCostPerMillion:.25,outputCostPerMillion:2,category:"GPT-5 models",tier:"premium",multiplier:.33,displayNames:["GPT-5.1 Codex Mini (Preview)"]},"gpt-5.2":{inputCostPerMillion:1.75,outputCostPerMillion:14,category:"GPT-5 models",tier:"standard",multiplier:1,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",multiplier:1,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",multiplier:1,displayNames:["GPT-5.2 Pro"]},"gpt-5.3-codex":{inputCostPerMillion:1.75,outputCostPerMillion:14,category:"GPT-5 models",tier:"standard",multiplier:1,displayNames:["GPT-5.3 Codex"],copilotPricing:{inputCostPerMillion:1.75,cachedInputCostPerMillion:.175,outputCostPerMillion:14,releaseStatus:"GA",category:"Powerful"}},"gpt-5.4":{inputCostPerMillion:2.5,cachedInputCostPerMillion:.25,outputCostPerMillion:15,category:"GPT-5 models",tier:"standard",multiplier:1,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",multiplier:.33,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",multiplier:.25,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",multiplier:1,displayNames:["GPT-4"]},"gpt-4.1":{inputCostPerMillion:2,cachedInputCostPerMillion:.5,outputCostPerMillion:8,category:"GPT-4 models",tier:"standard",multiplier:0,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",multiplier:0,displayNames:["GPT-4.1 Mini"]},"gpt-4.1-nano":{inputCostPerMillion:.1,cachedInputCostPerMillion:.025,outputCostPerMillion:.4,category:"GPT-4 models",tier:"standard",multiplier:0,displayNames:["GPT-4.1 Nano"]},"gpt-4o":{inputCostPerMillion:2.5,outputCostPerMillion:10,cachedInputCostPerMillion:1.25,category:"GPT-4 models",tier:"standard",multiplier:0,displayNames:["GPT-4o"]},"gpt-4o-mini":{inputCostPerMillion:.15,outputCostPerMillion:.6,cachedInputCostPerMillion:.075,category:"GPT-4 models",tier:"standard",multiplier:0,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",multiplier:0,displayNames:["GPT-4o-mini (2024-07-18)"]},"gpt-4-turbo":{inputCostPerMillion:10,outputCostPerMillion:30,category:"GPT-4 models",tier:"standard",multiplier:0,displayNames:["GPT-4 Turbo"]},"claude-sonnet-3.5":{inputCostPerMillion:3,outputCostPerMillion:15,cachedInputCostPerMillion:.3,cacheCreationCostPerMillion:3.75,category:"Claude models (Anthropic)",tier:"unknown",multiplier:1,displayNames:["Claude Sonnet 3.5"]},"claude-sonnet-3.7":{inputCostPerMillion:3,outputCostPerMillion:15,cachedInputCostPerMillion:.3,cacheCreationCostPerMillion:3.75,category:"Claude models (Anthropic)",tier:"unknown",multiplier:1,displayNames:["Claude Sonnet 3.7"]},"claude-sonnet-4":{inputCostPerMillion:3,outputCostPerMillion:15,cachedInputCostPerMillion:.3,cacheCreationCostPerMillion:3.75,category:"Claude models (Anthropic)",tier:"premium",multiplier:1,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,category:"Claude models (Anthropic)",tier:"standard",multiplier:1,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,category:"Claude models (Anthropic)",tier:"standard",multiplier:1,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,category:"Claude models (Anthropic)",tier:"standard",multiplier:1,displayNames:["Claude Sonnet 4.6 (alternate format)"],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,category:"Claude models (Anthropic)",tier:"standard",multiplier:0,displayNames:["Claude Haiku"]},"claude-haiku-4.5":{inputCostPerMillion:1,outputCostPerMillion:5,cachedInputCostPerMillion:.1,cacheCreationCostPerMillion:1.25,category:"Claude models (Anthropic)",tier:"standard",multiplier:.33,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,category:"Claude models (Anthropic)",tier:"standard",multiplier:.33,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,category:"Claude models (Anthropic)",tier:"premium",multiplier:10,displayNames:["Claude Opus 4.1"]},"claude-opus-4.5":{inputCostPerMillion:5,outputCostPerMillion:25,cachedInputCostPerMillion:.5,cacheCreationCostPerMillion:6.25,category:"Claude models (Anthropic)",tier:"standard",multiplier:3,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,category:"Claude models (Anthropic)",tier:"standard",multiplier:3,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,category:"Claude models (Anthropic)",tier:"standard",multiplier:15,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,category:"Claude models (Anthropic)",tier:"standard",multiplier:30,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,category:"Claude models (Anthropic)",tier:"premium",multiplier:30,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",multiplier:1,displayNames:["o3-mini"]},"o4-mini":{inputCostPerMillion:1.1,outputCostPerMillion:4.4,category:"OpenAI reasoning models",tier:"premium",multiplier:1,displayNames:["o4-mini"]},"o1-preview":{inputCostPerMillion:15,outputCostPerMillion:60,category:"OpenAI reasoning models",tier:"premium",multiplier:1,displayNames:["o1-preview"]},"o1-mini":{inputCostPerMillion:3,outputCostPerMillion:12,category:"OpenAI reasoning models",tier:"premium",multiplier:1,displayNames:["o1-mini"]},"gpt-3.5-turbo":{inputCostPerMillion:.5,outputCostPerMillion:1.5,category:"Legacy models",tier:"standard",multiplier:0,displayNames:["GPT-3.5-Turbo","GPT-3.5 Turbo"]},"gemini-2.5-pro":{inputCostPerMillion:1.25,outputCostPerMillion:10,category:"Google Gemini models",tier:"standard",multiplier:1,displayNames:["Gemini 2.5 Pro"],copilotPricing:{inputCostPerMillion:1.25,cachedInputCostPerMillion:.125,outputCostPerMillion:10,releaseStatus:"GA",category:"Powerful"}},"gemini-2.5-flash":{inputCostPerMillion:.3,outputCostPerMillion:2.5,category:"Google Gemini models",tier:"unknown",multiplier:1,displayNames:["Gemini 2.5 Flash"]},"gemini-2.5-flash-lite":{inputCostPerMillion:.1,outputCostPerMillion:.4,category:"Google Gemini models",tier:"unknown",multiplier:1,displayNames:["Gemini 2.5 Flash Lite"]},"gemini-2.0-flash":{inputCostPerMillion:.1,outputCostPerMillion:.4,category:"Google Gemini models",tier:"standard",multiplier:0,displayNames:["Gemini 2.0 Flash"]},"gemini-2.0-flash-lite":{inputCostPerMillion:.075,outputCostPerMillion:.3,category:"Google Gemini models",tier:"standard",multiplier:0,displayNames:["Gemini 2.0 Flash Lite"]},"gemini-3-flash":{inputCostPerMillion:.5,outputCostPerMillion:3,category:"Google Gemini models",tier:"standard",multiplier:.33,displayNames:["Gemini 3 Flash"],copilotPricing:{inputCostPerMillion:.5,cachedInputCostPerMillion:.05,outputCostPerMillion:3,releaseStatus:"Public preview",category:"Lightweight"}},"gemini-3-pro":{inputCostPerMillion:2,outputCostPerMillion:12,category:"Google Gemini models",tier:"premium",multiplier:1,displayNames:["Gemini 3 Pro"]},"gemini-3-pro-preview":{inputCostPerMillion:2,outputCostPerMillion:12,category:"Google Gemini models",tier:"premium",multiplier:1,displayNames:["Gemini 3 Pro (Preview)"]},"gemini-3.1-pro":{inputCostPerMillion:2,outputCostPerMillion:12,category:"Google Gemini models",tier:"standard",multiplier:1,displayNames:["Gemini 3.1 Pro","Gemini 3.1 Pro (Preview)"],copilotPricing:{inputCostPerMillion:2,cachedInputCostPerMillion:.2,outputCostPerMillion:12,releaseStatus:"Public preview",category:"Powerful"}},"gemini-3.1-flash-lite":{inputCostPerMillion:.25,outputCostPerMillion:1.5,category:"Google Gemini models",tier:"unknown",multiplier:.33,displayNames:["Gemini 3.1 Flash Lite"]},"grok-code-fast-1":{inputCostPerMillion:.2,outputCostPerMillion:1.5,category:"xAI Grok models",tier:"premium",multiplier:.25,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",multiplier:0,displayNames:["Raptor Mini"],copilotPricing:{inputCostPerMillion:.25,cachedInputCostPerMillion:.025,outputCostPerMillion:2,releaseStatus:"GA",category:"Versatile"}},goldeneye:{inputCostPerMillion:0,outputCostPerMillion:0,category:"GitHub Copilot fine-tuned models",tier:"standard",multiplier:0,copilotPricing:{inputCostPerMillion:1.25,cachedInputCostPerMillion:.125,outputCostPerMillion:10,releaseStatus:"Public preview",category:"Powerful"}},"gpt-5.5":{inputCostPerMillion:0,outputCostPerMillion:0,category:"GPT-5 models",tier:"standard",multiplier:7.5,displayNames:["GPT-5.5"]},"mistral-large-latest":{inputCostPerMillion:.5,outputCostPerMillion:1.5,category:"Mistral models",tier:"unknown",multiplier:1,displayNames:["Mistral Large 3"]},"mistral-large-2512":{inputCostPerMillion:.5,outputCostPerMillion:1.5,category:"Mistral models",tier:"unknown",multiplier:1,displayNames:["Mistral Large 3 (2512)"]},"mistral-large-2411":{inputCostPerMillion:2,outputCostPerMillion:6,category:"Mistral models",tier:"unknown",multiplier:1,displayNames:["Mistral Large 2.1"]},"magistral-medium-latest":{inputCostPerMillion:2,outputCostPerMillion:5,category:"Mistral models",tier:"unknown",multiplier:1,displayNames:["Magistral Medium"]},"mistral-medium-latest":{inputCostPerMillion:1.5,outputCostPerMillion:7.5,category:"Mistral models",tier:"unknown",multiplier:1,displayNames:["Mistral Medium 3.5"]},"mistral-medium-3-5":{inputCostPerMillion:1.5,outputCostPerMillion:7.5,category:"Mistral models",tier:"unknown",multiplier:1,displayNames:["Mistral Medium 3.5"]},"mistral-medium-3.5":{inputCostPerMillion:1.5,outputCostPerMillion:7.5,category:"Mistral models",tier:"unknown",multiplier:1,displayNames:["Mistral Medium 3.5"]},"mistral-medium-2505":{inputCostPerMillion:.4,outputCostPerMillion:2,category:"Mistral models",tier:"unknown",multiplier:1,displayNames:["Mistral Medium 3.1"]},"mistral-small-latest":{inputCostPerMillion:.1,outputCostPerMillion:.3,category:"Mistral models",tier:"unknown",multiplier:1,displayNames:["Mistral Small 3.1"]},"mistral-small-2503":{inputCostPerMillion:.075,outputCostPerMillion:.2,category:"Mistral models",tier:"unknown",multiplier:1,displayNames:["Mistral Small 3.2"]},"mistral-small-2603":{inputCostPerMillion:.15,outputCostPerMillion:.6,category:"Mistral models",tier:"unknown",multiplier:1,displayNames:["Mistral Small 4"]},"codestral-latest":{inputCostPerMillion:.3,outputCostPerMillion:.9,category:"Mistral models",tier:"unknown",multiplier:1,displayNames:["Codestral"]},"codestral-2501":{inputCostPerMillion:.3,outputCostPerMillion:.9,category:"Mistral models",tier:"unknown",multiplier:1,displayNames:["Codestral (2501)"]},"open-mistral-nemo":{inputCostPerMillion:.02,outputCostPerMillion:.03,category:"Mistral models",tier:"unknown",multiplier:1,displayNames:["Mistral Nemo"]},"ministral-3b-2410":{inputCostPerMillion:.04,outputCostPerMillion:.04,category:"Mistral models",tier:"unknown",multiplier:1,displayNames:["Ministral 3B"]},"ministral-8b-2410":{inputCostPerMillion:.1,outputCostPerMillion:.1,category:"Mistral models",tier:"unknown",multiplier:1,displayNames:["Ministral 8B"]},"magistral-small-latest":{inputCostPerMillion:.5,outputCostPerMillion:1.5,category:"Mistral models",tier:"unknown",multiplier:1,displayNames:["Magistral Small"]},"devstral-medium-2507":{inputCostPerMillion:.4,outputCostPerMillion:2,category:"Mistral models",tier:"unknown",multiplier:1,displayNames:["Devstral Medium"]},"pixtral-large-2411":{inputCostPerMillion:2,outputCostPerMillion:6,category:"Mistral models",tier:"unknown",multiplier:1,displayNames:["Pixtral Large"]},"gemini-3.5-flash":{inputCostPerMillion:0,outputCostPerMillion:0,category:"Google Gemini models",tier:"standard",multiplier:14,displayNames:["Gemini 3.5 Flash"]},"claude-opus-4.8":{inputCostPerMillion:5,outputCostPerMillion:25,category:"Claude models (Anthropic)",tier:"standard",multiplier:15,displayNames:["Claude Opus 4.8"]},"qwen2.5":{inputCostPerMillion:0,outputCostPerMillion:0,category:" models",tier:"standard",multiplier:0,displayNames:["Qwen2.5"]},"mai-code-1-flash[^mai-code-1-flash]":{inputCostPerMillion:0,outputCostPerMillion:0,category:" models",tier:"standard",multiplier:0,displayNames:["MAI-Code-1-Flash[^mai-code-1-flash]"]},"mai-code-1-flash":{inputCostPerMillion:0,outputCostPerMillion:0,category:" models",tier:"standard",multiplier:0,displayNames:["MAI-Code-1-Flash"]},"claude-fable-5":{inputCostPerMillion:10,outputCostPerMillion:50,category:"Claude models (Anthropic)",tier:"standard",multiplier:0,displayNames:["Claude Fable 5"]},"deepseek-v4-flash":{inputCostPerMillion:.14,outputCostPerMillion:.28,cachedInputCostPerMillion:.0028,category:"DeepSeek models",tier:"standard",multiplier:0,displayNames:["DeepSeek V4 Flash"]},"deepseek-v4-flash-free":{inputCostPerMillion:0,outputCostPerMillion:0,category:"DeepSeek models",tier:"standard",multiplier:0,displayNames:["DeepSeek V4 Flash (free)"]},"claude-sonnet-5":{inputCostPerMillion:0,outputCostPerMillion:0,category:"Claude models (Anthropic)",tier:"standard",multiplier:0,displayNames:["Claude Sonnet 5"]},"claude-opus-4.8-(fast-mode)-(preview)":{inputCostPerMillion:0,outputCostPerMillion:0,category:"Claude models (Anthropic)",tier:"standard",multiplier:0,displayNames:["Claude Opus 4.8 (fast mode) (preview)"]},"kimi-k2.7-code":{inputCostPerMillion:0,outputCostPerMillion:0,category:"Moonshot AI models",tier:"standard",multiplier:0,displayNames:["Kimi-K2.7-Code"]}}};var Kc={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_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",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_github_mcp_se_add_issue_comment:"Add Comment to Issue on GitHub MCP (Remote)",mcp_github_mcp_se_create_pull_request:"Create Pull Request on GitHub MCP (Remote)",mcp_github_mcp_se_get_file_contents:"Get File Contents from GitHub MCP (Remote)",mcp_github_mcp_se_pull_request_read:"Read Pull Request on GitHub MCP (Remote)",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"};var mh=Ho.pricing;function Ye(n){return n?n.actualTokens>0?n.actualTokens:n.tokens:0}function zr(n){let e=Z(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("/opencode/")?"OpenCode":e.includes("/.continue/sessions/")?"Continue":e.includes("/local-agent-mode-sessions/")?"Claude Desktop Cowork":e.includes("/.claude/projects/")?"Claude Code":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 $r(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 kn(){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 Sn(n,e,t){let s=Math.round(Ye(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++;for(let[u,m]of Object.entries(e.modelUsage))n.modelUsage[u]||(n.modelUsage[u]={inputTokens:0,outputTokens:0}),n.modelUsage[u].inputTokens+=Math.round(m.inputTokens*t),n.modelUsage[u].outputTokens+=Math.round(m.outputTokens*t),m.cachedReadTokens!==void 0&&(n.modelUsage[u].cachedReadTokens=(n.modelUsage[u].cachedReadTokens??0)+Math.round(m.cachedReadTokens*t)),m.cacheCreationTokens!==void 0&&(n.modelUsage[u].cacheCreationTokens=(n.modelUsage[u].cacheCreationTokens??0)+Math.round(m.cacheCreationTokens*t));let r=Math.round(e.interactions*t),l=n.avgInteractionsPerSession*(n.sessions-1)+r;n.avgInteractionsPerSession=n.sessions>0?l/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 wn(){return{sessions:0,toolCalls:{total:0,byTool:{}},modeUsage:{ask:0,edit:0,agent:0,plan:0,customAgent:0,cli:0},contextReferences:Q(),mcpTools:{total:0,byServer:{},byTool:{}},modelSwitching:{modelsPerSession:[],totalSessions:0,averageModelsPerSession:0,maxModelsPerSession:0,minModelsPerSession:0,switchingFrequency:0,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}}}var Jo=[{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 Tn(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(Y=>Y.entry),O=A.map(Y=>Y.label),oe=D.map(Y=>Y.tokens),re=D.map(Y=>Y.sessions),X=new Set;D.forEach(Y=>Object.keys(Y.modelUsage).forEach(we=>X.add(we)));let Cs=Array.from(X).map((Y,we)=>{let _t=Jo[we%Jo.length];return{label:Y,data:D.map(Qt=>{let Ss=Qt.modelUsage[Y];return Ss?Ss.inputTokens+Ss.outputTokens:0}),backgroundColor:_t.bg,borderColor:_t.border,borderWidth:1}}),Kt=new Set;D.forEach(Y=>Object.keys(Y.editorUsage).forEach(we=>Kt.add(we)));let De=Array.from(Kt).map((Y,we)=>{let _t=Jo[we%Jo.length];return{label:Y,data:D.map(Qt=>Qt.editorUsage[Y]?.tokens||0),backgroundColor:_t.bg,borderColor:_t.border,borderWidth:1}}),ks=oe.reduce((Y,we)=>Y+we,0),yt=re.reduce((Y,we)=>Y+we,0),rt=A.length,Pn=D.map(Y=>qs(Y.modelUsage,mh,"copilot")),An=Pn.reduce((Y,we)=>Y+we,0),ui=rt>0?An/rt:0;return{labels:O,tokensData:oe,sessionsData:re,modelDatasets:Cs,editorDatasets:De,repositoryDatasets:[],periodCount:rt,totalTokens:ks,totalSessions:yt,avgPerPeriod:rt>0?Math.round(ks/rt):0,costData:Pn,totalCost:An,avgCostPerPeriod:ui}},i=(A,D)=>{A.tokens+=D.tokens,A.sessions+=D.sessions;for(let[O,oe]of Object.entries(D.modelUsage))A.modelUsage[O]||(A.modelUsage[O]={inputTokens:0,outputTokens:0}),A.modelUsage[O].inputTokens+=oe.inputTokens,A.modelUsage[O].outputTokens+=oe.outputTokens,oe.cachedReadTokens!==void 0&&(A.modelUsage[O].cachedReadTokens=(A.modelUsage[O].cachedReadTokens??0)+oe.cachedReadTokens),oe.cacheCreationTokens!==void 0&&(A.modelUsage[O].cacheCreationTokens=(A.modelUsage[O].cacheCreationTokens??0)+oe.cacheCreationTokens);for(let[O,oe]of Object.entries(D.editorUsage))A.editorUsage[O]||(A.editorUsage[O]={tokens:0,sessions:0}),A.editorUsage[O].tokens+=oe.tokens,A.editorUsage[O].sessions+=oe.sessions},r=()=>({tokens:0,sessions:0,modelUsage:{},editorUsage:{}}),l=new Date,u=n.map((A,D)=>({label:A,entry:e[D]})),m=o(u),p=A=>{let D=new Date(A);D.setHours(0,0,0,0);let O=D.getDay();return D.setDate(D.getDate()-(O===0?6:O-1)),D},f=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"})}`},y=p(l),_=new Map;for(let A=5;A>=0;A--){let D=new Date(y);D.setDate(y.getDate()-A*7);let O=s(D);_.set(O,{label:f(D),entry:r()})}let C=t||new Map(n.map((A,D)=>[A,e[D]]));for(let[A,D]of C.entries()){let O=p(new Date(A+"T00:00:00")),oe=_.get(s(O));oe&&i(oe.entry,D)}let S=Array.from(_.values()),I=o(S),P=new Map;for(let A=11;A>=0;A--){let D=new Date(l.getFullYear(),l.getMonth()-A,1),O=`${D.getFullYear()}-${String(D.getMonth()+1).padStart(2,"0")}`,oe=D.toLocaleDateString("en-US",{month:"short",year:"numeric"});P.set(O,{label:oe,entry:r()})}for(let[A,D]of C.entries()){let O=A.slice(0,7),oe=P.get(O);oe&&i(oe.entry,D)}let U=Array.from(P.values()),te=o(U),j={};return e.forEach(A=>{Object.entries(A.editorUsage).forEach(([D,O])=>{j[D]=(j[D]||0)+O.tokens})}),{labels:m.labels,tokensData:m.tokensData,sessionsData:m.sessionsData,modelDatasets:m.modelDatasets,editorDatasets:m.editorDatasets,editorTotalsMap:j,repositoryDatasets:[],repositoryTotalsMap:{},dailyCount:m.periodCount,totalTokens:m.totalTokens,avgTokensPerDay:m.periodCount>0?Math.round(m.totalTokens/m.periodCount):0,totalSessions:m.totalSessions,lastUpdated:new Date().toISOString(),backendConfigured:!1,periodsReady:!0,periods:{day:m,week:I,month:te}}}function H(n){return n==null||!Number.isFinite(n)?"0":Math.round(n).toLocaleString("en-US")}function me(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 Ko=Vc.estimators,Vt=Ho.pricing,ph=Kc,gh=n=>{},Wr=n=>{},Yc=(n,e)=>{let t=e instanceof Error?e.message:e!==void 0?String(e):"";console.error(w.red(n),t)};async function fh(n){try{let e=await ht.promises.readFile(n,"utf-8");return JSON.parse(e)}catch(e){return e?.code!=="ENOENT"&&Yc(`[readJsonFile] Failed to read or parse JSON at ${n}:`,e),null}}var Vo=null;function Mn(){if(Vo)return Vo;let n=Qn.file(__dirname);return Vo=Er({...Dr(n),estimateTokens:(e,t)=>W(e,t??"gpt-4",Ko),isMcpTool:Je,extractMcpServerName:st}),Vo}function Xc(){return new to({log:gh,warn:Wr,error:Yc,ecosystems:Mn()})}async function ye(){return Xc().getCopilotSessionFiles()}async function Qo(n){let e=new Set,t=Se.join(Qc.homedir(),".claude","projects");for(let o of n){if(o.startsWith(t+Se.sep)||o.startsWith(t+"/")){let f=await Gt(()=>ht.promises.readFile(o,"utf-8"),null,`buildCustomizationMatrix readFile(${o})`);if(f!==null){let y=f.split(`
74
- `).slice(0,30);for(let _ of y)if(_.trim())try{let C=JSON.parse(_);if(C.cwd&&typeof C.cwd=="string"){e.add(C.cwd);break}}catch{}}continue}let i=Se.dirname(o);if(Se.basename(i)!=="chatSessions")continue;let r=Se.dirname(i),l=Se.join(r,"workspace.json"),u=await fh(l);if(!u)continue;let m=u.folder;if(!m||!m.startsWith("file://"))continue;let p=Yn(m);p&&e.add(p)}if(e.size===0)return;let s=0;for(let o of e)await Gt(async()=>{let[r,l,u]=await Promise.all([ht.promises.access(Se.join(o,".github","copilot-instructions.md")).then(()=>!0).catch(()=>!1),ht.promises.access(Se.join(o,"agents.md")).then(()=>!0).catch(()=>!1),ht.promises.access(Se.join(o,"CLAUDE.md")).then(()=>!0).catch(()=>!1)]);return!r&&!l&&!u},!0,`buildCustomizationMatrix workspace check(${o})`)&&s++;return{customizationTypes:[],workspaces:[],totalWorkspaces:e.size,workspacesWithIssues:s}}function Yo(){return Xc().getDiagnosticCandidatePaths()}function hh(n,e){return W(n,e||"gpt-4",Ko)}function yh(n){return Tt(n,Vt)}async function Zc(n){let e=Mn().find(t=>t.handles(n));return e?e.stat(n):ht.promises.stat(n)}async function _h(n,e=!1){let t=Se.basename(n,Se.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,"\\"),l=["GitHub.copilot-chat","github.copilot-chat","GitHub.copilot","github.copilot"];for(let u of l){let m=Se.join(r,u,"debug-logs",t,"main.jsonl");try{let p=await ht.promises.readFile(m,"utf8"),f=dl(p);if(f)return e&&console.error(` \u2713 Found debug log: ${t} (tokens: ${f.inputTokens+f.outputTokens})`),f}catch{}}return e&&console.error(` \u2717 No debug log found: ${t}`),null}async function bs(n,e=!1){try{let t=await Zc(n),s=Jc(n,t.mtimeMs,t.size);if(s)return s;let o=Mn().find(S=>S.handles(n));if(o){let[S,I,P]=await Promise.all([o.getTokens(n),o.countInteractions(n),o.getModelUsage(n)]),U=he(t.mtime),te={file:n,tokens:S.actualTokens>0?S.actualTokens:S.tokens,thinkingTokens:S.thinkingTokens,actualTokens:S.actualTokens,interactions:I,modelUsage:P,lastModified:t.mtime,editorSource:zr(n),dailyFractions:await o.getDailyFractions?.(n)??{[U]:1}};return Br(n,t.mtimeMs,t.size,te),te}let i=await ht.promises.readFile(n,"utf-8");if(!i.trim())return null;let r=n.endsWith(".jsonl")||lt(i),l=0,u=0,m=0,p=0,f={};if(r){let S=lo(i);if(l=S.actualTokens>0?S.actualTokens:S.tokens,u=S.thinkingTokens,m=S.actualTokens,f=await Cr({warn:Wr,tokenEstimators:Ko,modelPricing:Vt,ecosystems:Mn()},n,i),Object.keys(f).length===0&&Fo(n)){let P=Oo(i);Object.keys(P.modelUsage).length>0?f=P.modelUsage:P.tokens>0&&(f={[P.modelHint&&P.modelHint!=="unknown"?P.modelHint:"unknown"]:{inputTokens:P.tokens,outputTokens:0}})}let I=i.trim().split(`
75
- `);for(let P of I)try{let U=JSON.parse(P);(U.type==="user.message"||U.kind===2&&U.k?.[0]==="requests")&&p++}catch{}}else{let S=jc(n,i,hh,yh);l=S.tokens,u=S.thinkingTokens,m=S.actualTokens,p=S.interactions,f=S.modelUsage}let y=Bc(i,r,t.mtime),_=await _h(n,e);if(_&&_.inputTokens+_.outputTokens>0&&(l=_.inputTokens+_.outputTokens,m=l,Object.keys(_.modelBreakdown).length>0)){f={};for(let[S,I]of Object.entries(_.modelBreakdown))f[S]={inputTokens:I.inputTokens,outputTokens:I.outputTokens,...I.cachedTokens>0?{cachedReadTokens:I.cachedTokens}:{}}}let C={file:n,tokens:l,thinkingTokens:u,actualTokens:m,interactions:p,modelUsage:f,lastModified:t.mtime,editorSource:zr(n),dailyFractions:y};return Br(n,t.mtimeMs,t.size,C),C}catch{return null}}async function xt(n,e){let t=new Date,s=he(t),o=t.getFullYear(),i=t.getMonth(),r=he(new Date(o,i,1)),l=new Date(o,i,0),u=he(new Date(l.getFullYear(),l.getMonth(),1)),m=new Date(o,i,t.getDate()-30),p=he(m),f={today:kn(),month:kn(),lastMonth:kn(),last30Days:kn()},y=0,_=await $r(n,async C=>{let S=await bs(C);return e&&e(++y,n.length),S});for(let C of _){if(!C||C.tokens===0||!Object.keys(C.dailyFractions).some(j=>j>=u))continue;let I=0,P=0,U=0,te=0;for(let[j,A]of Object.entries(C.dailyFractions))j===s&&(I+=A),j>=r&&(P+=A),j>=u&&j<r&&(U+=A),j>=p&&(te+=A);I>0&&Sn(f.today,C,I),P>0&&Sn(f.month,C,P),U>0&&Sn(f.lastMonth,C,U),te>0&&Sn(f.last30Days,C,te)}for(let C of Object.values(f))C.sessions>0&&(C.avgTokensPerSession=Math.round(C.tokens/C.sessions)),C.co2=C.tokens/1e3*Fe.CO2_PER_1K_TOKENS,C.treesEquivalent=C.co2/Fe.CO2_ABSORPTION_PER_TREE_PER_YEAR,C.waterUsage=C.tokens/1e3*Fe.WATER_USAGE_PER_1K_TOKENS,C.estimatedCost=qs(C.modelUsage,Vt),C.estimatedCostCopilot=qs(C.modelUsage,Vt,"copilot");return{...f,lastUpdated:t}}async function Dt(n){let e={warn:Wr,tokenEstimators:Ko,modelPricing:Vt,toolNameMap:ph,ecosystems:Mn()},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),l=r<o?r:o,u=wn(),m=wn(),p=wn(),f=wn();for(let y of n)try{let C=(await Zc(y)).mtime;if(C<l)continue;let S=await mc(e,y);C>=o&&(en(m,S),m.sessions++),C>=i&&(en(p,S),p.sessions++),C>=s&&(en(u,S),u.sessions++),C>=r&&C<i&&(en(f,S),f.sessions++)}catch{}return{today:u,last30Days:m,month:p,lastMonth:f,lastUpdated:t}}async function Xo(n,e=!1){let t=new Date,s=new Date(t.getFullYear(),t.getMonth(),t.getDate()-30),o=he(s),i=he(t),r=new Map,l=new Date(s);for(;he(l)<=i;){let y=he(l);r.set(y,{tokens:0,sessions:0,modelUsage:{},editorUsage:{}}),l.setDate(l.getDate()+1)}let u=new Map,m=await $r(n,async y=>bs(y,e));for(let y of m){if(!y||y.tokens===0||y.interactions===0)continue;let _=Ye(y);for(let[C,S]of Object.entries(y.dailyFractions)){let I=Math.round(_*S),P=r.get(C);if(P){P.tokens+=I,P.sessions++;for(let[A,D]of Object.entries(y.modelUsage))P.modelUsage[A]||(P.modelUsage[A]={inputTokens:0,outputTokens:0}),P.modelUsage[A].inputTokens+=Math.round(D.inputTokens*S),P.modelUsage[A].outputTokens+=Math.round(D.outputTokens*S),D.cachedReadTokens!==void 0&&(P.modelUsage[A].cachedReadTokens=(P.modelUsage[A].cachedReadTokens??0)+Math.round(D.cachedReadTokens*S)),D.cacheCreationTokens!==void 0&&(P.modelUsage[A].cacheCreationTokens=(P.modelUsage[A].cacheCreationTokens??0)+Math.round(D.cacheCreationTokens*S));let j=y.editorSource;P.editorUsage[j]||(P.editorUsage[j]={tokens:0,sessions:0}),P.editorUsage[j].tokens+=I,P.editorUsage[j].sessions++}u.has(C)||u.set(C,{tokens:0,sessions:0,modelUsage:{},editorUsage:{}});let U=u.get(C);U.tokens+=I,U.sessions++;for(let[j,A]of Object.entries(y.modelUsage))U.modelUsage[j]||(U.modelUsage[j]={inputTokens:0,outputTokens:0}),U.modelUsage[j].inputTokens+=Math.round(A.inputTokens*S),U.modelUsage[j].outputTokens+=Math.round(A.outputTokens*S),A.cachedReadTokens!==void 0&&(U.modelUsage[j].cachedReadTokens=(U.modelUsage[j].cachedReadTokens??0)+Math.round(A.cachedReadTokens*S)),A.cacheCreationTokens!==void 0&&(U.modelUsage[j].cacheCreationTokens=(U.modelUsage[j].cacheCreationTokens??0)+Math.round(A.cacheCreationTokens*S));let te=y.editorSource;U.editorUsage[te]||(U.editorUsage[te]={tokens:0,sessions:0}),U.editorUsage[te].tokens+=I,U.editorUsage[te].sessions++}}let p=Array.from(r.keys()).sort(),f=p.map(y=>r.get(y));return{labels:p,days:f,allDaysMap:u}}var bh=50;function eu(n=bh){process.stdout.write("\r"+" ".repeat(n)+"\r")}function Hr(n){process.stdout.write(w.dim(n))}var Ch=80,Oe=class{silent;constructor(e=!1){this.silent=e}show(e){this.silent||Hr(e)}update(e){this.silent||(process.stdout.write("\r"),Hr(e))}done(){this.silent||eu(Ch)}};function Ce(n){return n.json===!0}var tu=new ie("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=Ce(n);if(e||console.log(w.bold.cyan(`
60
+ `)),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?`
61
+
62
+ `:"")+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 gn=T(require("fs")),ri=T(require("path")),_c=T(require("os"));var ai=class{getKiroCliDataDir(){return ri.join(_c.homedir(),".kiro")}getKiroCliSessionsDir(){return ri.join(this.getKiroCliDataDir(),"sessions","cli")}isKiroCliSessionFile(e){let t=ee(e);return t.includes("/.kiro/sessions/cli/")&&t.endsWith(".json")}async getKiroCliSessionFiles(){let e=this.getKiroCliSessionsDir();try{await gn.promises.access(e)}catch{return[]}try{return(await gn.promises.readdir(e)).filter(s=>s.endsWith(".json")).map(s=>ri.join(e,s))}catch{return[]}}getMessageLogPath(e){return e.replace(/\.json$/,".jsonl")}async readSessionMetadata(e){let t;try{t=JSON.parse(await gn.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 gn.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 c;try{c=JSON.parse(a)}catch{continue}let m=this.parseMessageRecord(c,r+1);m&&o.push(m)}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?`
63
+ `:"")+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(`
64
+ `)}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}}}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=>W(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)?W(new Date(a)):W(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?`
65
+
66
+ `:"")+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 fn=T(require("fs")),Lt=T(require("path")),ci=T(require("os")),Cc=T(Ss());var Cg="devin/cli/sessions.db#";function li(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 ui=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||Lt.join(ci.homedir(),"AppData","Roaming");return Lt.join(s,"devin","cli")}if(process.platform==="darwin")return Lt.join(ci.homedir(),"Library","Application Support","devin","cli");let e=process.env.XDG_DATA_HOME,t=e&&e.trim()?e:Lt.join(ci.homedir(),".local","share");return Lt.join(t,"devin","cli")}getDbPath(){return this._dbPathOverride??Lt.join(this.getConfigDir(),"sessions.db")}setDbPathOverrideForTests(e){this._dbPathOverride=e}virtualPath(e){return`${this.getDbPath()}#${e}`}isDevinCliSessionFile(e){return e.replace(/\\/g,"/").toLowerCase().includes(Cg)}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 fn.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 fn.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 fn.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=Lt.join(__dirname,"sql-wasm.wasm"),t;try{t=await fn.promises.readFile(e)}catch{}let s=await(0,Cc.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,
67
+ last_activity_at, title, main_chain_id, cogs_json, hidden
68
+ 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
69
+ 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
70
+ 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,c)=>(a.created_at??0)-(c.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,c)=>(a.created_at??0)-(c.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(`
71
+ `):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=li(t,["input_tokens","prompt_tokens","inputTokens"]),o=li(t,["output_tokens","completion_tokens","outputTokens"]),i=li(t,["reasoning_tokens","thinking_tokens","reasoningTokens"]);if(s===0&&o===0&&i===0){let r=li(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||"unknown",o=await this.getMessageNodes(e),i={[s]:{inputTokens:0,outputTokens:0}};for(let r of o){let a=this.parseChatMessage(r.chat_message),c=this.estimateTokens(a.text);a.role==="user"?i[s].inputTokens+=c:a.role==="assistant"&&(i[s].outputTokens+=c)}return i}async getDailyFractions(e){let t=await this.getMessageNodes(e),s={},o=0;for(let r of t){if(!r.created_at)continue;let a=W(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?W(new Date(r.last_activity_at*1e3)):W(new Date)]:1}}let i={};for(let[r,a]of Object.entries(s))i[r]=a/o;return i}};var hi=T(require("fs")),Tt=T(require("path"));var Os=T(require("fs"));var di=T(require("fs")),jt=T(require("path")),Mc=T(require("os")),Pc=require("worker_threads");var hn=T(require("fs")),Br=T(require("path")),bc=T(require("os")),kc=T(Ss());function qr(n){return n?n.replace(/\\/g,"/").toLowerCase().includes("/microsoft scout"):!1}function bg(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 kg(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 Is=class{_sqlJsModule=null;_sqlJsInitPromise=null;_initSqlJsFn;_dbCache=new Map;_dbCacheInflight=new Map;_sessionsCache=new Map;_sessionsCacheInflight=new Map;_turnCountsCache=new Map;_turnCountsCacheInflight=new Map;constructor(e){this._initSqlJsFn=e??kc.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._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 hn.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 hn.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 Br.join(bc.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 m=a.exec("SELECT id, cwd, repository, branch, summary, created_at, updated_at FROM sessions");if(m.length>0){let p=m[0].columns;for(let g of m[0].values){let h={};p.forEach((_,C)=>{h[_]=g[C]}),bg(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 m=a.exec("SELECT session_id, COUNT(*) FROM turns GROUP BY session_id");if(m.length>0)for(let p of m[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 stat(e){let t=this.getDbPathFromVirtual(e),s=this.getSessionId(e),o=await hn.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=Br.join(__dirname,"sql-wasm.wasm"),t;try{t=await hn.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 m={};r.forEach((p,g)=>{m[p]=c[g]}),kg(m)&&a.push(m)}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(),s=await this.getDb(t);if(!s)return null;try{let o=s.exec("SELECT model, input_tokens, output_tokens, cache_read_tokens, cache_write_tokens, total_nano_aiu FROM assistant_usage_events WHERE session_id = ?",[e]);if(!o.length)return null;let i=o[0].columns,r={},a=0,c=0,m=0;for(let p of o[0].values){let g={};i.forEach((R,j)=>{g[R]=p[j]});let h=typeof g.model=="string"?g.model:"unknown",_=typeof g.input_tokens=="number"?g.input_tokens:0,C=typeof g.output_tokens=="number"?g.output_tokens:0,S=typeof g.cache_read_tokens=="number"?g.cache_read_tokens:0,E=typeof g.cache_write_tokens=="number"?g.cache_write_tokens:0,A=typeof g.total_nano_aiu=="number"?g.total_nano_aiu:0;r[h]||(r[h]={inputTokens:0,outputTokens:0}),r[h].inputTokens+=_,r[h].outputTokens+=C,S>0&&(r[h].cachedReadTokens=(r[h].cachedReadTokens??0)+S),E>0&&(r[h].cacheCreationTokens=(r[h].cacheCreationTokens??0)+E),a+=_+C,c+=S,m+=A}return a===0&&c===0&&m===0?null:{modelUsage:r,actualTokens:a,cacheReadTokens:c,nanoAiu:m}}catch{return null}}async getDailyFractions(e){let t=await this.getTurns(e),s={},o=0;for(let r of t)if(r.timestamp)try{let a=W(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?W(new Date(r.updated_at)):W(new Date)]:1}}let i={};for(let[r,a]of Object.entries(s))i[r]=a/o;return i}};var Sc=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function Sg(){return jt.join(Mc.homedir(),".copilot","otel")}function Us(n){let e=n.lastIndexOf("#");if(e!==-1&&n.slice(0,e).endsWith(".db")){let t=n.slice(e+1);return Sc.test(t)?t:null}if(n.includes("session-state")){let t=jt.basename(jt.dirname(n));return Sc.test(t)?t:null}return null}function wg(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 Tg(n,e,t){n.has(e)||n.set(e,{modelUsage:{},actualTokens:0,cacheReadTokens:0,nanoAiu:0});let s=n.get(e);s.modelUsage[t.model]||(s.modelUsage[t.model]={inputTokens:0,outputTokens: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 vc='"name":"chat ',Mg=10;function Pg(n,e){if(n.type!=="span"||!n.name?.startsWith("chat "))return;let t=n.attributes?.["gen_ai.conversation.id"];t&&Tg(e,t,wg(n.attributes))}function vg(n){if(!n.includes(vc))return null;try{return JSON.parse(n)}catch{return null}}function Ag(n){let e=n;return{records:Array.isArray(e?.records)?e.records:[],consumed:e?.consumed&&typeof e.consumed=="object"?e.consumed:{}}}var xg=`
72
+ const { parentPort, workerData } = require('worker_threads');
73
+ const fs = require('fs');
74
+ const path = require('path');
75
+ const HINT = Buffer.from(${JSON.stringify(vc)});
76
+ const NL = 0x0a;
77
+ function readRange(full, start, end) {
78
+ return new Promise((resolve) => {
79
+ const records = [];
80
+ if (end <= start) { resolve({ records, consumed: start }); return; }
81
+ const stream = fs.createReadStream(full, { start, end: end - 1 });
82
+ let carry = null;
83
+ let consumed = start;
84
+ stream.on('data', (chunk) => {
85
+ const buf = carry ? Buffer.concat([carry, chunk]) : chunk;
86
+ let from = 0, nl;
87
+ while ((nl = buf.indexOf(NL, from)) !== -1) {
88
+ const line = buf.subarray(from, nl);
89
+ if (line.indexOf(HINT) !== -1) {
90
+ try { records.push(JSON.parse(line.toString('utf8'))); } catch { /* malformed line \u2014 skip */ }
91
+ }
92
+ consumed += (nl - from) + 1;
93
+ from = nl + 1;
94
+ }
95
+ carry = from < buf.length ? buf.subarray(from) : null;
96
+ });
97
+ stream.on('end', () => resolve({ records, consumed }));
98
+ stream.on('error', () => resolve({ records, consumed }));
99
+ });
100
+ }
101
+ async function run() {
102
+ const records = [];
103
+ const consumed = {};
104
+ for (const item of workerData.plan) {
105
+ try {
106
+ const r = await readRange(path.join(workerData.dir, item.name), item.start, item.end);
107
+ for (const rec of r.records) { records.push(rec); }
108
+ consumed[item.name] = r.consumed;
109
+ } catch { /* unreadable file \u2014 leave its offset untouched */ }
110
+ }
111
+ parentPort.postMessage({ records, consumed });
112
+ }
113
+ run().catch(() => { try { parentPort.postMessage({ records: [], consumed: {} }); } catch { /* worker tearing down */ } });
114
+ `;function Dg(n,e){return new Promise((t,s)=>{let o;try{o=new Pc.Worker(xg,{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(Ag(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 Eg(n,e,t){if(t<=e)return Buffer.alloc(0);let s=await di.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 wc(n,e){let t=[],s={};for(let o of e)try{let i=await Eg(jt.join(n,o.name),o.start,o.end),r=i.lastIndexOf(Mg);if(r===-1){s[o.name]=o.start;continue}for(let a of i.subarray(0,r+1).toString("utf8").split(`
115
+ `)){let c=vg(a);c&&t.push(c)}s[o.name]=o.start+r+1}catch{}return{records:t,consumed:s}}var Cn=null,Tc=0,_n=new Map,Rg=3e4,Ig=1e6,yn=null;async function Ug(n,e){let t=new Map;for(let s of e)try{t.set(s,(await di.promises.stat(jt.join(n,s))).size)}catch{}return t}function Og(n){if(Cn===null)return!0;for(let[e,t]of _n){let s=n.get(e);if(s===void 0||s<t)return!0}return!1}function Fg(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 Ng(n,e,t){try{return t>Ig?await Dg(n,e):await wc(n,e)}catch{return wc(n,e)}}async function Lg(){let n=Sg(),e;try{e=(await di.promises.readdir(n)).filter(p=>p.endsWith(".jsonl"))}catch{return _n=new Map,new Map}let t=await Ug(n,e),s=Og(t),o=s?new Map:Cn,i=s?new Map:_n,{plan:r,totalBytes:a}=Fg(t,i);if(r.length===0)return _n=i,o;let c=await Ng(n,r,a);for(let p of c.records)Pg(p,o);let m=new Map(i);for(let[p,g]of Object.entries(c.consumed))m.set(p,g);return _n=m,o}async function jg(){let n=Date.now();return Cn&&n-Tc<Rg?Cn:yn||(yn=Lg().then(e=>(Cn=e,Tc=Date.now(),e)).finally(()=>{yn=null}),yn)}async function Gg(n){let e=Us(n);return e?(await jg()).get(e)??null:null}var Ac=new Is;async function Bg(n,e=Ac){let t=Us(n);if(!t)return null;let s=await e.getSessionUsage(t);return s||null}async function ls(n,e=Ac){let t=await Bg(n,e);return t||Gg(n)}function xc(n){let e=globalThis.window;return e?e[n]:void 0}var qg=xc("__MODEL_PRICING__"),zg={};for(let[n,e]of Object.entries(qg?.pricing??{}))e.displayNames&&e.displayNames.length>0&&(zg[n]=e.displayNames[0]);var Wg=[["anthropic","Anthropic"],["claude","Anthropic"],["codestral","Mistral AI"],["devstral","Mistral AI"],["gemini","Google"],["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 Dc(n){let e=n.toLowerCase(),t=Wg.find(([s])=>e.startsWith(s));return t?t[1]:"Other"}var Hg=/\/partition-\d+\.jsonl$/,Jg=["embeddings","index","cache","preferences","settings","config","workspacesessions","globalsessions","api.json"];function Ec(n){let e=n.toLowerCase();return Jg.some(t=>e.includes(t))}function mi(n){let e=be(n);return e.includes("/.copilot/jb/")&&Hg.test(e)}function Vg(n){return!n||typeof n!="string"?null:n.startsWith("toolu_")?"claude":n.startsWith("call_")?"gpt":null}function Kg(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 Qg(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 Yg(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+=Q(n.data.content))}function bn(n,e){if(!n.currentTurnId)return;let t=n.turnById.get(n.currentTurnId);t&&e(t)}function Xg(n){return typeof n?.text=="string"&&n.text?n.text:typeof n?.content=="string"&&n.content?n.content:null}function Zg(n,e){let t=Xg(n.data);t&&(e.outputTokens+=Q(t));let s=n.data?.thinking?.text;typeof s=="string"&&s&&(e.result.thinkingTokens+=Q(s),e.hasThinking=!0,bn(e,o=>{o.hasThinking=!0})),typeof n.data?.messageId=="string"&&(e.currentMessageId=n.data.messageId,e.messageIds.push(n.data.messageId),bn(e,o=>{o.messageId=n.data.messageId})),typeof n.data?.iterationNumber=="number"&&(e.currentIterationNumber=n.data.iterationNumber,bn(e,o=>{o.iterationNumber=n.data.iterationNumber})),typeof n.timestamp=="string"&&(e.lastTurnTs=n.timestamp,bn(e,o=>{o.endTimestamp||(o.endTimestamp=n.timestamp)}))}function ef(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||""),bn(e,s=>{s.toolCallCount++}))}function tf(n,e){e.sawToolCall=!0;let t=n.data,s=t?.toolCallId;if(!e.modelFromToolCallId){let r=Vg(s);r&&(e.modelFromToolCallId=r)}let o=typeof t?.toolName=="string"?t.toolName:"unknown",i={toolName:o};if(ef(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 sf(n,e){let t="";for(let s of n){let o=s;o&&typeof o.value=="string"&&(e.outputTokens+=Q(o.value),t+=(t?`
116
+ `:"")+o.value)}return t}function nf(n,e){let t=n.data?.result?.result,s=Array.isArray(t)?sf(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 of(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 rf(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 af(n,e){switch(n.type){case"partition.created":Qg(n,e.result);break;case"user.message":Yg(n,e);break;case"user.message_rendered":typeof n.data?.renderedMessage=="string"&&(e.inputTokens+=Q(n.data.renderedMessage));break;case"assistant.turn_start":of(n,e);break;case"assistant.message":Zg(n,e);break;case"tool.execution_start":tf(n,e);break;case"tool.execution_complete":nf(n,e);break;case"assistant.turn_end":rf(n,e);break}}function lf(){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 cf(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 uf(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"&&(n.modelUsage[n.modelHint]={inputTokens:e.inputTokens,outputTokens:e.outputTokens})}function pi(n){let e=lf(),{parsed:t,renderedTurnIds:s}=Kg(n.split(/\r?\n/)),o=cf(e,s);for(let i of t)af(i,o);return uf(e,o),e}function Rc(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 Sn(n){return n==null}function df(n){if(typeof n!="object"||n===null||Array.isArray(n))return!1;let e=n;return Sn(e.id)||typeof e.id=="string"}function fi(n){if(n===null||typeof n!="object"||Array.isArray(n))return!1;let e=n;return!(!Sn(e.requests)&&!Array.isArray(e.requests)||!Sn(e.mode)&&!df(e.mode)||!Sn(e.creationDate)&&typeof e.creationDate!="number"||!Sn(e.lastMessageDate)&&typeof e.lastMessageDate!="number")}function gi(n){return typeof n=="string"?n.trim().toLowerCase():""}function kn(n){let e=n.v;return e?.selectedModel??e?.inputState?.selectedModel}function mf(n,e){return n==="auto"||e==="auto"||e.includes("auto")||n.includes("/auto")}function pf(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 gf(n){let e=n?.metadata,t=e?.extension;return{family:gi(e?.family),vendor:gi(e?.vendor),extension:gi(t?.value),category:gi(e?.modelPickerCategory?.label),rawExtension:t?.value}}function cs(n,e,t){let s=(n??"").replace(/^copilot\//,"");if(!s)return;let{family:o,vendor:i,extension:r,category:a,rawExtension:c}=gf(e);mf(s,o)&&(t.modelSwitching.autoSessions=1),pf(s,i,o,r,a)&&(t.modelSwitching.foundryWindowsSessions=1),Dc(s)==="Other"&&(t.modelSwitching.unknownProviderSessions=1,t.modelSwitching.unknownProviderModels.includes(s)||t.modelSwitching.unknownProviderModels.push(s)),c&&!t.modelSwitching.selectedModelExtensions.includes(c)&&t.modelSwitching.selectedModelExtensions.push(c)}function ff(n,e){if(n.type==="session.start"&&typeof n.data?.selectedModel=="string"){cs(n.data.selectedModel,kn(n),e);return}if(n.type==="session.model_change"&&typeof n.data?.newModel=="string"){cs(n.data.newModel,kn(n),e);return}let t=zc(n);if(t){cs(t,kn(n),e);return}let s=$c(n);if(s){cs(s,kn(n),e);return}typeof n.model=="string"&&(cs(n.model,kn(n),e),qc(n,e))}function Fc(n,e){n==="agent"?e.agent++:n==="edit"?e.edit++:n==="plan"?e.plan++:n==="customAgent"?e.customAgent++:e.ask++}function Jr(n,e,t){if(tt(n)){e.mcpTools.total++;let s=mt(n,t);e.mcpTools.byServer[s]=(e.mcpTools.byServer[s]||0)+1;let o=Zs(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 Vr(n){let e=n.split("/").pop()?.split("\\").pop()??"",t=e.lastIndexOf(".");return t<=0?e.toLowerCase()||"unknown":e.slice(t+1).toLowerCase()}function hf(n){return{timestamp:n.timestamp,timings:n.result?.timings,waitTime:n.timeSpentWaiting}}function yf(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 _f(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(`
117
+ `)?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 Cf(n,e,t){for(let s of n)if(Array.isArray(s))for(let o of s)_f(o,e,t)}function bf(n,e){if(!n.uri)return;let t=n.uri.path||JSON.stringify(n.uri);e.editedFilePaths.push(t);let s=Vr(t),o=n;Array.isArray(o.edits)&&Cf(o.edits,s,e)}function kf(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"&&bf(t,e),t.kind==="codeblockUri"&&(e.codeBlocks++,t.isEdit===!0&&e.applies++));return e}function Sf(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 wf(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 Nc(n,e,t,s,o,i,r){let a=0,c=0,m=0,p=0,g={};for(let h of n){if(!h)continue;wf(hf(h),s,o,i,r);let _=yf(h);_.agentType!==null&&e[_.agentType]++;let C=kf(h);for(let S of C.editedFilePaths)t.add(S);c+=C.codeBlocks,a+=C.applies,m+=C.linesAdded,p+=C.linesRemoved,Sf(g,C.languageUsage)}return{totalApplies:a,totalCodeBlocks:c,totalLinesAdded:m,totalLinesRemoved:p,languageUsage:g}}function Tf(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";Jr(o,e,t)}}}function Mf(n,e,t,s){e.requestId&&(Fc(t,s.modeUsage),e.agent?.id&&(s.toolCalls.total++,s.toolCalls.byTool[e.agent.id]=(s.toolCalls.byTool[e.agent.id]||0)+1),Yr(e,s.contextReferences),Tf(e,s,n.toolNameMap))}function Pf(n,e,t){return n.modelId?n.modelId.replace(/^copilot\//,""):n.result?.metadata?.modelId?n.result.metadata.modelId.replace(/^copilot\//,""):n.result?.details?Ut(n,t):e}function vf(n){let e=0;for(let t=1;t<n.length;t++)n[t]!==n[t-1]&&e++;return e}function Af(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 xf(n,e,t,s){let o=Af(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=Pf(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 m=[...new Set(c)];s.modelSwitching.uniqueModels=m,s.modelSwitching.modelCount=m.length,s.modelSwitching.totalRequests=c.length,s.modelSwitching.switchCount=vf(c),ie(n.modelPricing,m,c,s)}function Df(n,e,t){let{effortByRequestId:s,defaultEffort:o,switchCount:i}=Gl(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 Ef(n,e,t,s){let o=e.inputState?.mode?To(e.inputState.mode):"ask";if(e.inputState?.selections&&Array.isArray(e.inputState.selections)){for(let r of e.inputState.selections)if(r&&(r.startLineNumber!==r.endLineNumber||r.startColumn!==r.endColumn)){s.contextReferences.implicitSelection++;break}}let i=e.requests??[];for(let r of i)Mf(n,r,o,s);xf(n,e,i,s),Df(t,i,s),Qr(s)}function Rf(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 If(n,e,t){if(n.kind==="toolInvocationSerialized"||n.kind==="prepareToolInvocation"){let s=n.toolId||n.toolName||n.invocationMessage?.toolName||"unknown";Jr(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&&Kr([n],e.contextReferences)}function Uf(n,e,t,s){let o=Rf(e,t);if(o==="agent"?s.modeUsage.agent++:o==="edit"?s.modeUsage.edit++:s.modeUsage.ask++,Yr(e,s.contextReferences),e.response&&Array.isArray(e.response))for(let i of e.response)i&&If(i,s,n)}function Of(n,e,t){if(!(!e.requests||!Array.isArray(e.requests)))for(let s of e.requests)Uf(n,s,e,t)}function Ff(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 Ic(n,e){for(let t of e??[])n.includes(t)||n.push(t)}function Nf(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 Lf(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 jf(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),Ff(n,t),Nf(n,t),n.modelSwitching.autoSessions+=t.autoSessions||0,n.modelSwitching.foundryWindowsSessions+=t.foundryWindowsSessions||0,n.modelSwitching.unknownProviderSessions+=t.unknownProviderSessions||0,Ic(n.modelSwitching.selectedModelExtensions,t.selectedModelExtensions),Ic(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,Lf(n)}function Gf(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 Bf=["file","selection","implicitSelection","symbol","codebase","workspace","terminal","vscode","terminalLastCommand","terminalSelection","clipboard","changes","outputPanel","problemsPanel","pullRequest","copilotInstructions","agentsMd"];function Uc(n,e){for(let[t,s]of Object.entries(e))n[t]=(n[t]||0)+s}function qf(n,e){let t=n.contextReferences,s=e.contextReferences;for(let o of Bf)t[o]+=s[o]||0;t.codeContextLines=(t.codeContextLines||0)+(s.codeContextLines||0),Uc(t.byKind,s.byKind),Uc(t.byPath,s.byPath)}function zf(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),Gf(n,e)}function wn(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}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,qf(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;jf(n,e),zf(n,e)}var $f=[[/#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 Lc(n,e){for(let[t,s]of $f){let o=n.match(t);o&&(e[s]+=o.length)}}function Wf(n){let e=n.kind;return e==="reference"&&n.reference?n.reference:e==="inlineReference"&&n.inlineReference?n.inlineReference:null}function Hf(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 Jf(n,e,t){let s=n.fsPath||n.path;typeof s=="string"&&Hf(s,ee(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 Kr(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=Wf(s);i&&Jf(i,o,e)}}function Vf(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 jc(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"||Vf(s,e)}function Qr(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 Kf(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 Qf(n,e){if(n.kind!=="prompt")return;typeof n.slashPromptCommand?.command=="string"&&(e.byKind.prompt=(e.byKind.prompt||0)+1)}function Yf(n,e){if(!n||typeof n!="object")return;let t=n;typeof t.text=="string"&&Lc(t.text,e),Kf(t,e),Qf(t,e)}function Xf(n,e){typeof n.text=="string"&&Lc(n.text,e);let t=n.parts;if(Array.isArray(t))for(let s of t)Yf(s,e)}function Yr(n,e){if(!n||typeof n!="object")return;let t=n,s=t.message;s&&typeof s=="object"&&Xf(s,e);let o=t.contentReferences;Array.isArray(o)&&Kr(o,e);let i=t.variableData;i!==void 0&&jc(i,e)}async function Tn(n){try{let t=(await Os.promises.readFile(n,"utf8")).trim().split(`
118
+ `),s=[];for(let o of t)if(o.trim())try{s.push(JSON.parse(o))}catch{}return s}catch{return[]}}function ie(n,e,t,s){let o=[],i=[],r=[];for(let S of e){let E=os(S,n);E==="standard"?o.push(S):E==="premium"?i.push(S):r.push(S)}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 S of e){let E=on(S,n);E==="low"?a.low.push(S):E==="medium"?a.medium.push(S):E==="high"?a.high.push(S):a.unknown.push(S)}s.modelSwitching.costBuckets=a;let c=[a.low,a.medium,a.high].filter(S=>S.length>0).length;s.modelSwitching.hasMixedCosts=c>=2;let m=0,p=0,g=0,h=0,_=0,C=0;for(let S of t){let E=os(S,n);E==="standard"?m++:E==="premium"?p++:g++;let A=on(S,n);A==="low"?h++:A==="medium"?_++:A==="high"&&C++}s.modelSwitching.standardRequests=m,s.modelSwitching.premiumRequests=p,s.modelSwitching.unknownRequests=g,s.modelSwitching.lowCostRequests=h,s.modelSwitching.mediumCostRequests=_,s.modelSwitching.highCostRequests=C}function $r(n,e,t){let s=os(n,t);s==="standard"?e.standard++:s==="premium"?e.premium++:e.unknown++}function Wr(n,e,t){let s=on(n,t);s==="low"?e.low++:s==="medium"?e.medium++:s==="high"?e.high++:e.unknown++}function Gc(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 Bc(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 Zf(n,e){let t=[],s=[],o=[];for(let i of n){let r=os(i,e);r==="standard"?t.push(i):r==="premium"?s.push(i):o.push(i)}return{standard:t,premium:s,unknown:o}}function eh(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 qc(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 th(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 c=Ut(a,t);s&&c!==s&&o++,s=c,$r(c,i,t),Wr(c,r,t),eh(a,e),qc(a,e)}e.modelSwitching.switchCount=o,Gc(i,e),Bc(r,e)}function sh(n,e){cs(n.selectedModel?.identifier||n.selectedModel?.metadata?.id,n.selectedModel,e),cs(n.inputState?.selectedModel?.identifier||n.inputState?.selectedModel?.metadata?.id,n.inputState?.selectedModel,e)}function zc(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 $c(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 nh(n,e){let t=zc(n);if(t)return t;let s=$c(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 oh(n,e,t){let s=n;return s.modelId?s.modelId.replace(/^copilot\//,""):s.result?.metadata?.modelId?s.result.metadata.modelId.replace(/^copilot\//,""):s.result?.details?Ut(n,t):e}function ih(n,e,t,s,o){if(n.type==="user.message"){let i=n.model||s;$r(i,e,o),Wr(i,t,o);return}if(!(n.kind!==2||n.k?.[0]!=="requests"||!Array.isArray(n.v)))for(let i of n.v){let r=oh(i,s,o);$r(r,e,o),Wr(r,t,o)}}function rh(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=nh(a,i),ff(a,e),ih(a,s,o,i,t)}catch{}Gc(s,e),Bc(o,e)}async function Wc(n,e,t,s,o){try{let i=await Xr(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 c=Zf(a,n.modelPricing);t.modelSwitching.tiers=c,t.modelSwitching.hasMixedTiers=c.standard.length>0&&c.premium.length>0;let m={low:[],medium:[],high:[],unknown:[]};for(let _ of a){let C=on(_,n.modelPricing);C==="low"?m.low.push(_):C==="medium"?m.medium.push(_):C==="high"?m.high.push(_):m.unknown.push(_)}t.modelSwitching.costBuckets=m;let p=[m.low,m.medium,m.high].filter(_=>_.length>0).length;t.modelSwitching.hasMixedCosts=p>=2;let g=s??await Os.promises.readFile(e,"utf8");if(Ps(g))return;if(e.endsWith(".jsonl")||_t(g))rh(g.trim().split(`
119
+ `),t,n.modelPricing);else{let _=o!==void 0?o:JSON.parse(g);if(!fi(_)){n.warn(`Unexpected session format in ${e}`);return}sh(_,t),th(_,t,n.modelPricing)}}catch(i){n.warn(`Error calculating model switching for ${e}: ${i}`)}}function ah(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 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 lh(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=nn(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=Nc(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,Hc(e.allLanguageUsage,o.languageUsage)}function ch(n,e,t,s){if(!fi(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=Nc(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,Hc(s.allLanguageUsage,o.languageUsage),!0}function uh(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((c,m)=>c+(m.firstProgress||0),0)/e.timingsData.length:0,i=e.timingsData.length>0?e.timingsData.reduce((c,m)=>c+(m.totalElapsed||0),0)/e.timingsData.length:0,r=e.waitTimes.length>0?e.waitTimes.reduce((c,m)=>c+m,0)/e.waitTimes.length:0,a=ah(e.activeIntervals);n.sessionDuration={totalDurationMs:s,avgDurationMs:s,avgFirstProgressMs:o,avgTotalElapsedMs:i,avgWaitTimeMs:r,activeDurationMs:a},Qr(n),n.agentTypes=e.agentCounts}function Oc(n){return n.length>0?(n.match(/\n/g)??[]).length+(n.endsWith(`
120
+ `)?0:1):0}function dh(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,c=typeof r=="string"?r:"",m=typeof a=="string"?a:"";e.set(o,{filePath:i,added:Oc(c),removed:Oc(m)})}function mh(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=Vr(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 ph(n,e){let t=new Map;for(let s of n)try{let o=JSON.parse(s);o.type==="tool.execution_start"?dh(o,t):o.type==="tool.execution_complete"&&mh(o,t,e)}catch{}}async function Hr(n,e,t,s,o){try{let i=s??await Os.promises.readFile(e,"utf8");if(Ps(i))return;let r=e.endsWith(".jsonl")||_t(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 c=i.trim().split(`
121
+ `).filter(m=>m.trim());lh(c,a),Jc(c)||ph(c,a)}else{let c=o!==void 0?o:JSON.parse(i);if(!ch(n,e,c,a))return}uh(t,a)}catch(i){n.warn(`Error tracking enhanced metrics from ${e}: ${i}`)}}function X(){return{toolCalls:{total:0,byTool:{}},modeUsage:{ask:0,edit:0,agent:0,plan:0,customAgent:0,cli:0},contextReferences:J(),mcpTools:{total:0,byServer:{},byTool:{}},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 Jc(n){if(n.length===0)return!1;try{let e=JSON.parse(n[0]);return e&&typeof e.kind=="number"}catch{return!1}}function gh(n,e,t){let s={};for(let o of e)try{let i=JSON.parse(o);s=nn(s,i)}catch{}Ef(n,s,e,t)}function Vc(n,e){for(let t of n){let s=t;if(s&&(s.startLineNumber!==s.endLineNumber||s.startColumn!==s.endColumn)){e.implicitSelection++;break}}}function fh(n,e,t){n.kind!==0||!n.v?.inputState?.mode||(t.sessionMode=To(n.v.inputState.mode),Array.isArray(n.v?.inputState?.selections)&&Vc(n.v.inputState.selections,e.contextReferences))}function hh(n,e,t){n.kind===1&&(n.k?.includes("mode")&&n.v&&(t.sessionMode=To(n.v)),n.k?.includes("selections")&&Array.isArray(n.v)&&Vc(n.v,e.contextReferences),n.k?.includes("contentReferences")&&Array.isArray(n.v)&&Kr(n.v,e.contextReferences),n.k?.includes("variableData")&&n.v&&jc(n.v,e.contextReferences))}function Kc(n){return n.toolId||n.toolName||n.invocationMessage?.toolName||n.toolSpecificData?.kind||"unknown"}function yh(n,e){for(let t of n)if(t&&(t.kind==="toolInvocationSerialized"||t.kind==="prepareToolInvocation")){e.toolCalls.total++;let s=Kc(t);e.toolCalls.byTool[s]=(e.toolCalls.byTool[s]||0)+1}}function _h(n,e){for(let t of n){let s=t;if(s&&s.kind==="toolInvocationSerialized"){e.toolCalls.total++;let o=Kc(s);e.toolCalls.byTool[o]=(e.toolCalls.byTool[o]||0)+1}}}function Ch(n,e,t){n.requestId&&Fc(t,e.modeUsage),n.agent?.id&&(e.toolCalls.total++,e.toolCalls.byTool[n.agent.id]=(e.toolCalls.byTool[n.agent.id]||0)+1),Yr(n,e.contextReferences),n.response&&Array.isArray(n.response)&&yh(n.response,e)}function bh(n,e,t,s){if(n.kind===2){if(n.k?.[0]==="requests"&&Array.isArray(n.v))for(let o of n.v)Ch(o,e,t.sessionMode);n.k?.includes("response")&&Array.isArray(n.v)&&_h(n.v,e)}}function kh(n,e){typeof n.selectedModel=="string"&&(e.defaultModel=n.selectedModel),typeof n.reasoningEffort=="string"&&(e.defaultEffort=n.reasoningEffort)}function Sh(n,e){n==="agent"?e.modeUsage.agent++:n==="ask"?e.modeUsage.ask++:e.modeUsage.cli++}function wh(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 Th(n,e,t,s){if(n.type==="session.start"&&n.data&&kh(n.data,e),n.type==="session.model_change"&&typeof n.data?.newModel=="string"&&(e.defaultModel=n.data.newModel),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),wh(n.data?.attachments,t.contextReferences),Sh(s,t)}}function Mh(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";Jr(s,e,t)}function Ph(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=Zs(s);e.mcpTools.byTool[o]=(e.mcpTools.byTool[o]||0)+1}function vh(n,e,t){Mh(n,e,t),Ph(n,e)}function zr(n){if(!n)return 0;let e=n.split(`
122
+ `);return e[e.length-1]===""&&e.pop(),e.length}function Qc(n){n.editScope||(n.editScope={singleFileEdits:0,multiFileEdits:0,totalEditedFiles:0,avgFilesPerSession:0,linesAdded:0,linesRemoved:0})}function Ah(n,e){let{toolCallId:t,toolName:s,arguments:o}=n.data??{};t&&s&&e.pendingToolCalls.set(t,{toolName:s,args:o??{}})}function xh(n,e,t){let s=n.toolName==="edit"?zr(n.args.new_str??""):zr(n.args.file_text??""),o=n.toolName==="edit"?zr(n.args.old_str??""):0;Qc(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=Vr(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 Dh(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 Eh(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||(o&&(r.toolName==="edit"||r.toolName==="create")&&xh(r,e,t),!i?.content||tt(r.toolName)))return;let a=Dh(i.content);if(!a)return;let c=Q(a);t.toolCalls.outputTokensByTool||(t.toolCalls.outputTokensByTool={}),t.toolCalls.outputTokensByTool[r.toolName]=(t.toolCalls.outputTokensByTool[r.toolName]||0)+c}function Rh(n,e,t){n.type==="tool.execution_start"?Ah(n,e):n.type==="tool.execution_complete"&&Eh(n,e,t)}function Ih(n,e){if(n.editedFilePaths.size===0)return;Qc(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 Uh(n,e,t,s,o,i){fh(n,e,t),hh(n,e,t),bh(n,e,t,i),Th(n,s,e,o),vh(n,e,i),Rh(n,s,e)}function Oh(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 Fh(n,e,t,s,o){let i={sessionMode:"ask"},r={defaultModel:"unknown",defaultEffort:null,requestCount:0,effortByRequest:{},pendingToolCalls:new Map,editedFilePaths:new Set},c=mi(e)?Rc(s):null;for(let m of t)if(m.trim())try{let p=JSON.parse(m);Uh(p,o,i,r,c,n.toolNameMap)}catch{}Ih(r,o),Oh(r,o),await Wc(n,e,o,s),await Hr(n,e,o,s),Qr(o)}async function Yc(n,e,t,s){let o=X();try{let i=n.ecosystems.find(c=>c.handles(e));if(i&&xl(i))return i.analyzeUsage(e,{modelPricing:n.modelPricing,toolNameMap:n.toolNameMap});if(e.startsWith("windsurf://")||e.startsWith("devin://"))return o;let r=t??await Os.promises.readFile(e,"utf8");if(e.endsWith(".jsonl")||_t(r)){let c=r.trim().split(`
123
+ `).filter(m=>m.trim());if(Jc(c))return gh(n,c,o),await Hr(n,e,o,r),o;await Fh(n,e,c,r,o)}else{let c=s!==void 0?s:JSON.parse(r);if(!fi(c))return n.warn(`Unexpected session format in ${e}`),o;Of(n,c,o),await Wc(n,e,o,r,s),await Hr(n,e,o,r,s)}}catch(i){n.warn(`Error analyzing session usage from ${e}: ${i}`)}return o}function Xc(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 Zc(n,e,t,s){for(let o of n){let i=Ts(o);if(i){let r=i.modelName||e;t[r]||(t[r]={inputTokens:0,outputTokens:0}),i.prompt&&(t[r].inputTokens+=Q(i.prompt,r,s)),i.result&&(t[r].outputTokens+=Q(i.result,r,s))}}}function Nh(n,e,t){t[n]||(t[n]={inputTokens:0,outputTokens: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 Lh(n,e){for(let[t,s]of Object.entries(n))s?.usage&&Nh(t,s.usage,e)}function jh(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+=Q(n.data.content,e,o.tokenEstimators))}function Gh(n,e){n.data?.modelMetrics&&(e.cliShutdownModelUsage||(e.cliShutdownModelUsage={}),Lh(n.data.modelMetrics,e.cliShutdownModelUsage))}function Bh(n,e,t,s,o){if(n.type==="session.shutdown")Gh(n,t);else if(n.type==="user.message"&&n.data?.content)s[e].inputTokens+=Q(n.data.content,e,o.tokenEstimators);else if(n.type==="assistant.message")jh(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+=Q(String(i),e,o.tokenEstimators))}}function qh(n){return n.kind!==0?null:n.v?.selectedModel?.identifier||n.v?.selectedModel?.metadata?.id||n.v?.inputState?.selectedModel?.metadata?.id||null}function zh(n){return n.kind!==2||n.k?.[0]!=="selectedModel"?null:n.v?.identifier||n.v?.metadata?.id||null}function $h(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=qh(n);t&&(e.defaultModel=t.replace(/^copilot\//,""));let s=zh(n);s&&(e.defaultModel=s.replace(/^copilot\//,""))}function Wh(n,e,t,s){typeof n.kind=="number"&&(e.isDeltaBased=!0,e.sessionState=nn(e.sessionState,n)),$h(n,e);let o=n.data?.model||n.model||e.defaultModel;t[o]||(t[o]={inputTokens:0,outputTokens:0}),e.isDeltaBased||Bh(n,o,e,t,s)}function Hh(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);Wh(i,s,e,t)}catch{}return s}function Jh(n,e,t,s){if(n.message?.text&&(t[e].inputTokens+=Q(n.message.text,e,s.tokenEstimators)),n.response&&Array.isArray(n.response))for(let o of n.response){let{text:i}=Ms(o);i&&(t[e].outputTokens+=Q(i,e,s.tokenEstimators))}}function Vh(n,e,t,s){if(!n.requestId)return;let o=e;n.modelId?o=n.modelId.replace(/^copilot\//,""):n.result?.metadata?.modelId?o=n.result.metadata.modelId.replace(/^copilot\//,""):n.result?.details&&(o=Ut(n,s.modelPricing)),t[o]||(t[o]={inputTokens:0,outputTokens:0}),Xc(n,o,t)||Jh(n,o,t,s),n.response&&Array.isArray(n.response)&&Zc(n.response,o,t,s.tokenEstimators)}function Kh(n,e,t){if(!(!n.isDeltaBased||!n.sessionState.requests||!Array.isArray(n.sessionState.requests)))for(let s of n.sessionState.requests)s&&Vh(s,n.defaultModel,e,t)}function Qh(n,e,t){let s=gr(n);for(let[o,i]of s){let r=e.sessionState.requests?.[o];if(!r||r.result?.usage||typeof r.result?.promptTokens=="number"||r.result?.metadata&&typeof r.result.metadata.promptTokens=="number")continue;let a=e.defaultModel;r.modelId&&(a=r.modelId.replace(/^copilot\//,"")),t[a]||(t[a]={inputTokens:0,outputTokens:0}),t[a].inputTokens+=i.promptTokens,t[a].outputTokens+=i.outputTokens}}function Yh(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}}return o}function Xh(n,e,t){let s=Hh(n,e,t);return!s.isDeltaBased&&s.cliShutdownModelUsage?s.cliShutdownModelUsage:!s.isDeltaBased&&s.cliRealOutputByModel?Yh(s,e):(Kh(s,e,t),Qh(n,s,e),null)}function Zh(n,e,t,s){if(n.message?.parts)for(let o of n.message.parts)o.text&&(t[e].inputTokens+=Q(o.text,e,s.tokenEstimators));if(n.response&&Array.isArray(n.response))for(let o of n.response){let{text:i}=Ms(o);i&&(t[e].outputTokens+=Q(i,e,s.tokenEstimators))}}function ey(n,e,t){let s=Ut(n,t.modelPricing);e[s]||(e[s]={inputTokens:0,outputTokens:0}),Xc(n,s,e)||Zh(n,s,e,t),n.response&&Array.isArray(n.response)&&Zc(n.response,s,e,t.tokenEstimators)}function ty(n,e,t){if(!(!n.requests||!Array.isArray(n.requests)))for(let s of n.requests)ey(s,e,t)}async function sy(n,e,t,s){if(Us(n)){let r=await ls(n);if(r&&Object.keys(r.modelUsage).length>0)return r.modelUsage}let o=e.trim().split(`
124
+ `);return Xh(o,t,s)??t}async function ny(n,e,t,s,o){if(Ps(e))return t;if(n.endsWith(".jsonl")||_t(e))return sy(n,e,t,s);let r=o!==void 0?o:JSON.parse(e);return fi(r)?(ty(r,t,s),t):(s.warn(`Unexpected session format in ${n}`),t)}async function Xr(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 Os.promises.readFile(e,"utf8");return await ny(e,i,o,n,s)}catch(i){n.warn(`Error getting model usage from ${e}: ${i}`)}return o}var eu=T(require("fs"));async function wt(n){try{return await eu.promises.access(n),!0}catch{return!1}}var Mn=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)?Tt.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,c)=>a-c),{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):es(async()=>JSON.parse(await hi.promises.readFile(e,"utf8")),null,`openCodeAdapter getMeta readFile(${e})`)}getEditorRoot(e){return this.openCode.getOpenCodeDataDir()}async discover(e){let t=this.getCandidatePaths(),s=[],o=this.openCode.getOpenCodeDataDir(),i=Tt.join(o,"storage","session"),r=Tt.join(o,"opencode.db");if(e(`\u{1F4C1} Checking OpenCode JSON path: ${i}`),e(`\u{1F4C1} Checking OpenCode DB path: ${r}`),await wt(i)){let m=async g=>{let h=[];try{h=await hi.promises.readdir(g,{withFileTypes:!0})}catch(_){console.error(`[openCodeAdapter] Failed to read dir ${g}:`,_)}for(let _ of h)if(_.isDirectory())await m(Tt.join(g,_.name));else if(_.name.startsWith("ses_")&&_.name.endsWith(".json")){let C=Tt.join(g,_.name);try{(await hi.promises.stat(C)).size>0&&s.push(C)}catch(S){console.error(`[openCodeAdapter] Failed to stat ${C}:`,S)}}};await m(i);let p=s.length;p>0&&e(`\u{1F4C4} Found ${p} session files in OpenCode storage`)}if(await wt(r))try{let m=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)m.has(h)||(s.push(Tt.join(o,`opencode.db#${h}`)),g++);g>0&&e(`\u{1F4C4} Found ${g} additional session(s) in OpenCode database`)}catch(m){e(`OpenCode DB exists but could not be read: ${m}`)}return{sessionFiles:s,candidatePaths:t}}getCandidatePaths(){let e=this.openCode.getOpenCodeDataDir();return[{path:Tt.join(e,"storage","session"),source:"OpenCode (JSON)"},{path:Tt.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 c=s.filter((_,C)=>C>r&&_.role==="assistant"&&_.parentID===a.id),p=(await this.openCode.getOpenCodePartsForMessage(a.id)).filter(_=>_.type==="text").map(_=>_.text||"").join(`
125
+ `),g=await this.processOpenCodeAssistantMessages(c,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:J(),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 m of e){i||(i=m.modelID||m.model?.modelID||null),r+=m.tokens?.reasoning||0,typeof m.tokens?.total=="number"&&(a=Math.max(a,m.tokens.total));let p=await this.openCode.getOpenCodePartsForMessage(m.id);for(let g of p)s+=this.processOpenCodePart(g,o)}let c=e.reduce((m,p)=>m+(p.tokens?.output||0)+(p.tokens?.reasoning||0),0);return{assistantText:s,toolCalls:o,model:i,thinkingTokens:r,turnCumulativeTotal:a,turnOutputAndThinking:c}}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=X(),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 c=1;c<i.length;c++)i[c]!==i[c-1]&&a++;s.modelSwitching.switchCount=a,ie(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 tu=T(require("fs")),Mt=T(require("path"));var Pn=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 Mt.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 c=Mt.join(a.data_dir,"crush.db");e(`\u{1F4C1} Checking Crush DB path: ${c}`);try{return await tu.promises.access(c),(await this.crush.discoverSessionsInDb(c)).map(p=>Mt.join(a.data_dir,`crush.db#${p}`))}catch(m){e(`Could not read Crush database for ${a.path}: ${m}`)}return[]})),r=i.reduce((a,c)=>a+c.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:Mt.join(e,"projects.json"),source:"Crush (projects.json)"}],s=dr(()=>this.crush.readCrushProjects().map(o=>({path:Mt.join(o.data_dir,"crush.db"),source:`Crush (${Mt.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 c=s[a];if(c.role!=="user")continue;r++;let m=[];for(let p=a+1;p<s.length&&s[p].role!=="user";p++)s[p].role==="assistant"&&m.push(s[p]);t.push(this.buildCrushTurn(c,m,o,i,r))}return{turns:t}}buildCrushTurn(e,t,s,o,i){let a=(Array.isArray(e.parts)?e.parts:[]).filter(_=>_?.type==="text"&&_?.text).map(_=>_.text).join(`
126
+ `),{assistantText:c,toolCalls:m,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:m,contextReferences:J(),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=X(),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),ie(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 su=T(require("fs")),nu=T(require("path")),ou=T(Fr());var vn=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 ee(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 nu.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=su.readFileSync(e),o=(t.length>=2?Array.from((0,ou.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),m=this.visualStudio.extractContextText(o?.Context),p=this.estimateTokens(r+m,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:J(),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=X(),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,ie(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(tt(c)){t.mcpTools.total++;let m=mt(c,o.toolNameMap);t.mcpTools.byServer[m]=(t.mcpTools.byServer[m]||0)+1;let p=Zs(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 Zr=T(require("fs"));var An=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 Zr.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 Zr.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=J();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=X(),o=await this.continue_.buildContinueTurns(e),i=await this.continue_.getContinueSessionMeta(e),r=[];for(let m of o){s.modeUsage.ask++,m.model&&r.push(m.model);for(let p of m.toolCalls)s.toolCalls.total++,s.toolCalls.byTool[p.toolName]=(s.toolCalls.byTool[p.toolName]||0)+1}if(i?.mode==="agent")for(let m=0;m<o.length;m++)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 m=1;m<r.length;m++)r[m]!==r[m-1]&&c++;return s.modelSwitching.switchCount=c,ie(t.modelPricing,a,r,s),s}};var au=T(require("fs")),_i=T(require("path"));function iu(n){switch((n||"").toLowerCase()){case"agent":return"agent";case"edit":return"edit";case"plan":return"plan";case"ask":return"ask";default:return"ask"}}function ru(n){if(!n)return null;let e=Date.parse(n);return Number.isNaN(e)?null:new Date(e).toISOString()}var yi=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 au.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:ru(t?.creationDate),lastInteraction:ru(t?.lastMessageDate)}}getEditorRoot(e){return _i.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:_i.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=J();for(let i of s)t.push({turnNumber:t.length+1,timestamp:i.timestamp,mode:iu(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=X(),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 m of c.toolCalls)s.toolCalls.total++,s.toolCalls.byTool[m.toolName]=(s.toolCalls.byTool[m.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,ie(t.modelPricing,r,i,s),s}tallyMode(e,t){let s=iu(t);s==="agent"?e.modeUsage.agent++:s==="edit"?e.modeUsage.edit++:e.modeUsage.ask++}};var cu=T(require("fs"));var lu=T(require("fs"));var oy=new Set(["review","bug","think","compact","pr_comments"]);function ea(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(`
127
+ `)[0].trim().match(/^\/([a-z_]+)(?:\s|$)/i);if(!s)return null;let o=s[1].toLowerCase();return oy.has(o)?o:null}var xn=class{constructor(e,t=tt,s=mt,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 Mo(e)}getBackingPath(e){return e}async stat(e){return lu.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 Tn(e),o=null,i=[];for(let a of s)if(a.type==="user"&&!a.isSidechain&&a.message?.role==="user"&&this.isRealUserMessage(a)){let c=this.buildTurnFromEvents(o,i,t.length+1);c&&t.push(c),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){let t=e.message?.content;if(typeof t=="string")return!!t.trim();if(!Array.isArray(t))return!1;let s=t.some(i=>i.type==="text"),o=t.some(i=>i.type==="tool_result");return s&&!o}buildTurnFromEvents(e,t,s){if(!e)return null;let o=e.message?.content,i=typeof o=="string"?o:Array.isArray(o)?o.filter(C=>C.type==="text").map(C=>C.text||"").join(`
128
+ `):"",{assistantText:r,model:a,actualInputTokens:c,actualOutputTokens:m,toolCalls:p,mcpTools:g}=this.processAssistantEventsForTurn(t),h=a||"claude-sonnet-4-6",_=c>0||m>0?{promptTokens:c,completionTokens:m}: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:J(),mcpTools:g,inputTokensEstimate:c||this.estimateTokensFn(i,h),outputTokensEstimate:m||this.estimateTokensFn(r,h),thinkingTokensEstimate:0,actualUsage:_}}processAssistantEventsForTurn(e){let t="",s=0,o=0,i=null,r=[],a=[],c=new Set;for(let m of e){let p=m.message;!i&&p?.model&&(i=Ft(p.model));let g=p?.id,h=!g||!c.has(g);g&&c.add(g),p?.usage&&h&&(s+=this.extractInputTokens(p.usage),o+=p.usage.output_tokens||0);for(let _ of Array.isArray(p?.content)?p.content:[])t+=this.processContentBlock(_,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=X(),o=await Tn(e),i=[];for(let r of o)r.type==="user"&&r.message?.role==="user"&&!r.isSidechain?this.processUserEvent(r,s):r.type==="assistant"?this.processAssistantEvent(r,s,t,i):r.type==="system"&&r.subtype==="compact_boundary"&&this.processCompactBoundaryEvent(r,s);return this.applyModelSwitchingStats(i,s),ie(t.modelPricing,s.modelSwitching.uniqueModels,i,s),s}processCompactBoundaryEvent(e,t){e.compactMetadata?.trigger==="auto"&&(t.toolCalls.byTool.__auto_compact__=(t.toolCalls.byTool.__auto_compact__||0)+1)}processUserEvent(e,t){t.modeUsage.cli++;let s=ea(e.message?.content);if(s){let o=`__slash__${s}`;t.toolCalls.byTool[o]=(t.toolCalls.byTool[o]||0)+1}}processAssistantEvent(e,t,s,o){let i=Ft(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 c=String(a.name||"tool");if(tt(c)){let m=mt(c,s.toolNameMap);t.mcpTools.total++,t.mcpTools.byServer[m]=(t.mcpTools.byServer[m]||0)+1,t.mcpTools.byTool[c]=(t.mcpTools.byTool[c]||0)+1}else t.toolCalls.total++,t.toolCalls.byTool[c]=(t.toolCalls.byTool[c]||0)+1}}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 Dn=class{constructor(e,t,s,o){this.claudeDesktopCowork=e;this.isMcpToolFn=t;this.extractMcpServerNameFn=s;this.estimateTokensFn=o}claudeDesktopCowork;isMcpToolFn;extractMcpServerNameFn;estimateTokensFn;id="claudedesktop";displayName="Claude Desktop Cowork";handles(e){return this.claudeDesktopCowork.isCoworkSessionFile(e)}getBackingPath(e){return e}async stat(e){return cu.promises.stat(e)}async getTokens(e){let t=await this.claudeDesktopCowork.getTokensFromCoworkSession(e);return{...t,actualTokens:t.tokens}}async countInteractions(e){return await this.claudeDesktopCowork.countCoworkInteractions(e)}async getModelUsage(e){return await this.claudeDesktopCowork.getCoworkModelUsage(e)}async getMeta(e){let t=await this.claudeDesktopCowork.getCoworkSessionMeta(e);return{title:t?.title,firstInteraction:t?.firstInteraction||null,lastInteraction:t?.lastInteraction||null,workspacePath:t?.cwd}}getEditorRoot(e){return this.claudeDesktopCowork.getCoworkBaseDir()}async discover(e){let t=this.getCandidatePaths(),s=[];try{let o=await this.claudeDesktopCowork.getCoworkSessionFiles();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(){let e=this.claudeDesktopCowork.getCoworkBaseDir();return e?[{path:e,source:"Claude Desktop (Cowork)"}]:[]}async buildTurns(e){let t=[],s=await this.claudeDesktopCowork.readCoworkEvents(e),o=null,i=[];for(let a of s)if(a.type==="user"&&!a.isSidechain&&a.message?.role==="user"&&this.isRealUserMessage(a)){let c=this.buildTurnFromEvents(o,i,t.length+1);c&&t.push(c),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){let t=e.message?.content;if(typeof t=="string")return!!t.trim();if(!Array.isArray(t))return!1;let s=t.some(i=>i.type==="text"),o=t.some(i=>i.type==="tool_result");return s&&!o}buildTurnFromEvents(e,t,s){if(!e)return null;let o=e.message?.content,i=typeof o=="string"?o:Array.isArray(o)?o.filter(C=>C.type==="text").map(C=>C.text||"").join(`
129
+ `):"",{assistantText:r,model:a,actualInputTokens:c,actualOutputTokens:m,toolCalls:p,mcpTools:g}=this.processAssistantEventsForTurn(t),h=a||"claude-sonnet-4-6",_=c>0||m>0?{promptTokens:c,completionTokens:m}: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:J(),mcpTools:g,inputTokensEstimate:c||this.estimateTokensFn(i,h),outputTokensEstimate:m||this.estimateTokensFn(r,h),thinkingTokensEstimate:0,actualUsage:_}}processAssistantEventsForTurn(e){let t="",s=0,o=0,i=null,r=[],a=[],c=new Set;for(let m of e){let p=m.message;!i&&p?.model&&(i=p.model);let g=m.requestId,h=!g||!c.has(g);g&&c.add(g);let _=p?.usage;if(_&&h){let C=this.extractUsageTokens(_);s+=C.input,o+=C.output}for(let C of Array.isArray(p?.content)?p.content:[])t+=this.processEventContentBlock(C,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=X(),o=await Tn(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),ie(t.modelPricing,s.modelSwitching.uniqueModels,i,s),s}processDesktopUserEvent(e,t){t.modeUsage.ask++;let s=ea(e.message?.content);if(s){let o=`__slash__${s}`;t.toolCalls.byTool[o]=(t.toolCalls.byTool[o]||0)+1}}processDesktopAssistantEvent(e,t,s){let o=Ft(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}}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 uu=T(require("fs"));var En=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 uu.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 m=a[c],p=c+1<a.length?a[c+1]:s.length;t.push(this.buildMistralTurn(s,m,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:m,toolCalls:p}=this.collectMistralTurnContent(e,t,s);return{turnNumber:r,timestamp:o.firstInteraction,mode:"cli",userMessage:c,assistantResponse:m,model:i,toolCalls:p,contextReferences:J(),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=X(),o=await this.mistralVibe.readSessionMessages(e),r=(await this.mistralVibe.getSessionMeta(e)).model||"devstral",a=[];for(let m of o)if(m.role==="user"&&m.injected!==!0)s.modeUsage.cli++;else if(m.role==="assistant"&&(a.push(r),Array.isArray(m.tool_calls)))for(let p of m.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,ie(t.modelPricing,c,a,s),s}};var du=T(require("fs"));var Rn=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 du.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=X(),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),ie(t.modelPricing,s.modelSwitching.uniqueModels,i,s),s}processGeminiAssistantRecord(e,t,s){let o=pn(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 mu=T(require("fs")),ta=T(require("inspector"));var In=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 mu.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();ta.url()&&e(`\u{1F50D} [Antigravity] Checking brain dir: ${o}`);try{let i=await this.antigravity.getAntigravitySessionFiles();ta.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=X(),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 pu=T(require("fs"));var Un=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 pu.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:m}=this.processAssistantEvents(t),p=t.reduce((h,_)=>h+(_.message?.usage?.input??0),0),g=t.reduce((h,_)=>h+(_.message?.usage?.output??0),0);return{turnNumber:s,timestamp:e.timestamp??null,mode:"cli",userMessage:r,assistantResponse:a,model:m,toolCalls:c,contextReferences:J(),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(`
130
+ `):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=X(),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,ie(t.modelPricing,o,e,s)}};var gu=T(require("fs")),fu=T(require("path"));var Ci=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 fu.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 gu.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(`
131
+
132
+ `)}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=[],m=0;for(let p=0;p<s.length;p++){let g=s[p];if(g.type!==1)continue;m++;let h=g.bubbleId?a.get(g.bubbleId):void 0;c.push({turnNumber:m,timestamp:h?.createdAt??null,mode:"agent",userMessage:h?.text??"",assistantResponse:this.collectAssistantText(s,p+1,a),model:i,toolCalls:[],contextReferences:J(),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=X(),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 m=Array(c).fill(i);return ie(t.modelPricing,[i],m,s),s}};var Le=T(require("fs")),le=T(require("path")),Nn=T(require("os"));var On=["Code","Code - Insiders","Code - Exploration","VSCodium","Cursor"],_u=new Set(["Public","Default","Default User","All Users"]);function sa(){return Nn.platform()==="linux"&&(typeof process.env.WSL_DISTRO_NAME=="string"||typeof process.env.WSL_INTEROP=="string")}function hu(){let n=Nn.platform(),e=Nn.homedir(),t=[];if(n==="win32"){let s=process.env.APPDATA||le.join(e,"AppData","Roaming");for(let o of On)t.push(le.join(s,o,"User"))}else if(n==="darwin")for(let s of On)t.push(le.join(e,"Library","Application Support",s,"User"));else{let s=process.env.XDG_CONFIG_HOME||le.join(e,".config");for(let o of On)t.push(le.join(s,o,"User"))}return t.push(le.join(e,".vscode-server","data","User"),le.join(e,".vscode-server-insiders","data","User"),le.join(e,".vscode-remote","data","User"),le.join("/tmp",".vscode-server","data","User"),le.join("/workspace",".vscode-server","data","User")),t}async function iy(){if(!sa())return[];let n=[],e=[],t=process.env.USERPROFILE;if(t){let o=t.match(/^\/mnt\/[a-z]\/Users\/([^/]+)/);o&&e.push(o[1])}let s="/mnt/c/Users";try{let o=await Le.promises.readdir(s,{withFileTypes:!0});for(let i of o){if(!i.isDirectory())continue;let r=i.name;_u.has(r)||r.startsWith(".")||e.includes(r)||e.push(r)}}catch{return[]}for(let o of e){let i=le.join(s,o,"AppData","Roaming");for(let r of On)n.push(le.join(i,r,"User"))}return n}function ry(){if(!sa())return[];let n=[],e="/mnt/c/Users";try{let t=Le.readdirSync(e,{withFileTypes:!0});for(let s of t)if(!(!s.isDirectory()||s.name.startsWith(".")||_u.has(s.name)))for(let o of On)n.push(le.join(e,s.name,"AppData","Roaming",o,"User"))}catch{}return n}async function yu(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 Cu(n,e,t){let s;try{s=await Le.promises.readdir(n,{withFileTypes:!0})}catch(o){t(`Could not scan directory ${n}: ${o}`);return}for(let o of s){let i=le.join(n,o.name);if(o.isDirectory()){await Cu(i,e,t);continue}if(!(!o.name.endsWith(".json")&&!o.name.endsWith(".jsonl"))&&!Ec(o.name))try{(await Le.promises.stat(i)).size>0&&e.push(i)}catch{}}}var Fn=class{id="copilotchat";displayName="GitHub Copilot Chat";handles(e){return!1}getBackingPath(e){return e}async stat(e){return Le.promises.stat(e)}async getTokens(e){try{let t=await Le.promises.readFile(e,"utf8");return Ps(t)?{tokens:0,thinkingTokens:0,actualTokens:0}:e.endsWith(".jsonl")||_t(t)?Io(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=be(e),s=t.lastIndexOf("/User/");return s>=0?t.substring(0,s+5):le.dirname(e)}getCandidatePaths(){let e=[];for(let t of hu())e.push({path:t,source:"VS Code"});for(let t of ry())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=>wt(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 yu(r,async a=>{let c=le.basename(le.dirname(a));await this.scanWorkspaceStorage(a,c,s,e),await this.scanGlobalStorage(a,c,s,e)},4,(a,c,m)=>{e(`Failed to scan VS Code user path ${a}: ${m instanceof Error?m.message:String(m)}`)}),{sessionFiles:s,candidatePaths:t}}async resolveAllVSCodePaths(e){let t=hu();if(sa()){e("\u{1FA9F} WSL environment detected \u2014 probing Windows-side VS Code paths");let s=await iy();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=le.join(e,"workspaceStorage"),r;try{r=await Le.promises.readdir(i)}catch{return}let a=["GitHub.copilot-chat","github.copilot-chat","GitHub.copilot","github.copilot"],c=["chatSessions","debug-logs","transcripts"],m=async g=>{try{let h=(await Le.promises.readdir(g)).filter(_=>_.endsWith(".json")||_.endsWith(".jsonl")).map(_=>le.join(g,_));h.length>0&&s.push(...h)}catch{}},p=0;await yu(r,async g=>{let h=le.join(i,g),_;try{_=await Le.promises.readdir(h)}catch{return}let C=new Set(_),S=s.length;C.has("chatSessions")&&await m(le.join(h,"chatSessions"));for(let E of a)if(C.has(E))for(let A of c)await m(le.join(h,E,A));s.length>S&&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=le.join(e,"globalStorage","emptyWindowChatSessions"),r=(await Le.promises.readdir(i)).filter(a=>a.endsWith(".json")||a.endsWith(".jsonl")).map(a=>le.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=le.join(e,"globalStorage",i);try{await Le.promises.access(r),await Cu(r,s,o)}catch{}}}};var Ln=T(require("fs")),je=T(require("path")),oa=T(require("os"));function na(){return je.join(oa.homedir(),".copilot","session-state")}var jn=class{id="copilotcli";displayName="Copilot CLI";store=new Is;_scoutSessionIds=new Set;getDisplayName(e){let t=this.store.getSessionId(e);if(t&&this._scoutSessionIds.has(t))return"MS Scout (Copilot CLI)";let s=je.basename(je.dirname(e));return s&&this._scoutSessionIds.has(s)?"MS Scout (Copilot CLI)":"Copilot CLI"}getDisplayNameForDiscoveredPath(e){let t=je.basename(je.dirname(e));if(t&&this._scoutSessionIds.has(t))return"MS Scout (Copilot CLI)"}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):Ln.promises.stat(e)}async getTokens(e){let t=await ls(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 ls(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}:{title:void 0,firstInteraction:null,lastInteraction:null}}return{title:void 0,firstInteraction:null,lastInteraction:null}}getEditorRoot(e){return this.store.isCliStoreSession(e)?je.join(oa.homedir(),".copilot"):na()}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:J(),mcpTools:[],inputTokensEstimate:0,outputTokensEstimate:0,thinkingTokensEstimate:0}))}:{turns:[]}}async analyzeUsage(e,t){let s=X();if(!this.store.isCliStoreSession(e))return s;let o=await this.store.getTurns(e);return s.modeUsage.cli=o.filter(i=>i.user_message!==null).length,s}async getDailyFractions(e){return this.store.isCliStoreSession(e)?this.store.getDailyFractions(e):{}}async _tryMarkScoutFromWorkspaceYaml(e,t){let s=je.join(e,"workspace.yaml");try{let i=(await Ln.promises.readFile(s,"utf8")).match(/^cwd:\s*(.+)$/m);i&&qr(i[1].trim())&&this._scoutSessionIds.add(t)}catch{}}getCandidatePaths(){let e=[{path:na(),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=na(),i=new Set;try{if(await wt(o)){let r;try{r=await Ln.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=>je.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()),m=(await Promise.all(c.map(async p=>{let g=je.join(o,p.name),h=je.join(g,"events.jsonl");try{if((await Ln.promises.stat(h)).size>0)return i.add(p.name),await this._tryMarkScoutFromWorkspaceYaml(g,p.name),h}catch{}return null}))).filter(p=>p!==null);m.length>0&&(e(`\u{1F4C4} Found ${m.length} session files in Copilot CLI subdirectories`),s.push(...m))}}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`);for(let{id:a,cwd:c}of r)qr(c)&&this._scoutSessionIds.add(a),s.push(this.store.virtualPath(a))}}catch(r){e(`Could not read Copilot CLI session-store.db: ${r}`)}return{sessionFiles:s,candidatePaths:t}}};var Fs=T(require("fs")),bi=T(require("path")),bu=T(require("os"));function ia(){return bi.join(bu.homedir(),".copilot","jb")}var Gn=class{id="jetbrains";displayName="JetBrains IDE";handles(e){return!1}getBackingPath(e){return e}async stat(e){return Fs.promises.stat(e)}async parsePartition(e){try{let t=await Fs.promises.readFile(e,"utf8");return pi(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 ia()}getCandidatePaths(){return[{path:ia(),source:"JetBrains IDE"}]}async discover(e){let t=this.getCandidatePaths(),s=[],o=ia();try{if(!await wt(o))return{sessionFiles:s,candidatePaths:t};let i;try{i=await Fs.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 m=bi.join(o,c.name),p;try{p=await Fs.promises.readdir(m,{withFileTypes:!0})}catch{return[]}let g=[];for(let h of p){if(!h.isFile()||!/^partition-\d+\.jsonl$/.test(h.name))continue;let _=bi.join(m,h.name);try{(await Fs.promises.stat(_)).size>0&&g.push(_)}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 ku=T(require("fs"));var Bn=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 ku.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=J();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=X(),o=await this.kiro.buildKiroTurns(e),i=[];for(let c of o){s.modeUsage.agent++,c.model&&i.push(c.model);for(let m of c.toolCalls)s.toolCalls.total++,s.toolCalls.byTool[m.toolName]=(s.toolCalls.byTool[m.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,ie(t.modelPricing,r,i,s),s}};var Su=T(require("fs"));var qn=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 Su.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=J(),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=X(),o=await this.kiroCli.buildKiroCliTurns(e),r=(await this.kiroCli.readSessionMetadata(e))?.modelId||"unknown",a=[];for(let m of o){s.modeUsage.cli++,a.push(r);for(let p of m.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,ie(t.modelPricing,c,a,s),s}};var wu=T(require("fs")),Tu=T(require("path"));var ki=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 Tu.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 wu.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 m=this.devinCli.parseChatMessage(e[c].chat_message);if(m.role==="user")break;m.role==="assistant"&&(r+=(r?`
133
+ `:"")+m.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:J(),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=X(),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),c=o?.model||"unknown",m=[];for(let g of r)this.devinCli.parseChatMessage(g.chat_message).role==="user"&&(s.modeUsage.cli++,m.push(c));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(m)];return s.modelSwitching.uniqueModels=p,s.modelSwitching.modelCount=p.length,s.modelSwitching.totalRequests=m.length,ie(t.modelPricing,p,m,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"}}};function ra(n){return{openCode:new Do(n),crush:new Eo(n),continue_:new Ro,eclipse:new Uo,visualStudio:new Jo,claudeCode:new Ko,claudeDesktopCowork:new Yo,mistralVibe:new Xo,geminiCli:new Zo,antigravity:new ti,pi:new ni,cursor:new oi(n),kiro:new ii,kiroCli:new ai,devinCli:new ui}}function aa(n){return[new Mn(n.openCode),new Pn(n.crush),new vn(n.visualStudio,n.estimateTokens),new An(n.continue_),new yi(n.eclipse),new Dn(n.claudeDesktopCowork,n.isMcpTool,n.extractMcpServerName,n.estimateTokens),new xn(n.claudeCode,n.isMcpTool,n.extractMcpServerName,n.estimateTokens),new En(n.mistralVibe),new In(n.antigravity,n.estimateTokens),new Rn(n.geminiCli),new Un(n.pi),new Ci(n.cursor),new Bn(n.kiro),new qn(n.kiroCli),new ki(n.devinCli),new Fn,new jn,new Gn]}function zn(n,e){try{return JSON.parse(n)}catch(t){console.error(`[${e}] JSON parse error:`,t);return}}function Ke(n){return typeof n=="object"&&n!==null}function Mu(n){return typeof n!="string"?!1:!["__proto__","prototype","constructor","hasOwnProperty"].includes(n)&&!n.startsWith("__")}function Ns(n){return/^\d+$/.test(n)}function la(n,e){if(typeof n!="string")return e;let t=n.trim();return t?t.startsWith("copilot/")?t.substring(8):t:e}function ay(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)&&Ns(i)){let a=Number(i),c=s[a],m;Ke(c)?m=c:(m=Ns(r)?[]:Object.create(null),s[a]=m),s=m;continue}if(!Ke(s))return null;s=t(s,i,r)}return{root:n,current:s}}function ly(n,e,t,s){return Array.isArray(e)&&Ns(t)?(e[Number(t)]=s,n):(Ke(e)&&Object.defineProperty(e,t,{value:s,writable:!0,enumerable:!0,configurable:!0}),n)}function cy(n,e,t,s){let o;if(Array.isArray(e)&&Ns(t)){let i=Number(t);Array.isArray(e[i])||(e[i]=[]),o=e[i]}else Ke(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 uy(n,e){if(!Ke(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(!Mu(h))return n;let r=Ke(n)?n:Object.create(null),c=ay(r,i,(h,_,C)=>{let S=h[_];if(!Ke(S)){let E=Ns(C)?[]:Object.create(null);return h[_]=E,E}return S});if(!c)return r;let{root:m,current:p}=c,g=i[i.length-1];return t===1?ly(m,p,g,o):t===2?cy(m,p,g,o):m}function dy(n){if(!Array.isArray(n))return{responseText:"",thinkingText:""};let e="",t="";for(let s of n){let{text:o,isThinking:i}=Ms(s);o&&(i?t+=o:e+=o)}return{responseText:e,thinkingText:t}}var ca=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);this.modelUsage[s]||(this.modelUsage[s]={inputTokens:0,outputTokens:0});let o=this.estimateTokens(t,s);this.modelUsage[s].inputTokens+=o,this.totalInputTokens+=o}addOutput(e,t){let s=this.ensureModel(e);this.modelUsage[s]||(this.modelUsage[s]={inputTokens:0,outputTokens:0});let o=this.estimateTokens(t,s);this.modelUsage[s].outputTokens+=o,this.totalOutputTokens+=o}};function my(n,e,t){let s=n.modelId??n.selectedModel?.identifier??n.model,o=la(s,t);if(typeof s=="string"&&s.trim())return o;let i=e?e(n):void 0;return la(i,"")||o}function py(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 gy(n,e,t,s){let o=n.modelName||e;n.prompt&&t(o,n.prompt),n.result&&s(o,n.result)}function fy(n,e,t,s){let o=Ts(n);if(o){gy(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 hy(n,e,t,s){for(let o of n)fy(o,e,t,s)}function yy(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 _y(n){return Array.isArray(n.requests)?n.requests:Array.isArray(n.history)?n.history:[]}function Cy(n){return n.trim().length>0}function Pu(n,e,t,s,o,i,r){if(n==null||typeof n!="object")return;let a=n,c=my(a,o,i);py(a,c,t);let{responseText:m,thinkingText:p}=dy(a.response);m&&s(c,m),p&&(e.thinkingTokens+=r(p,c));let g=Array.isArray(a.response)?a.response:Array.isArray(a.responses)?a.responses:[];hy(g,c,t,s),e.actualTokens+=yy(a.result)}function by(n){if(!Ke(n))return!1;let e=n.message;return Ke(e)&&typeof e.text=="string"&&!!e.text.trim()}function ky(n){if(n.length===0)return null;let e=zn(n[0],"sessionParser");if(!e||typeof e.kind!="number")return null;let t=Object.create(null);for(let o of n){let i=zn(o,"sessionParser");i!==void 0&&(t=uy(t,i))}let s=Ke(t)?t:null;return s&&Array.isArray(s.requests)?s.requests:[]}function vu(n,e,t,s){let o,i="unknown",r=new ca(i,t),{modelUsage:a}=r,c=r.addInput.bind(r),m=r.addOutput.bind(r),p={thinkingTokens:0,actualTokens:0};if(n.endsWith(".jsonl")){let _=e.split(/\r?\n/).filter(Cy),C=ky(_);if(C!==null){let S=C.filter(by).length;for(let E of C)Pu(E,p,c,m,s,i,t);return{tokens:r.totalInputTokens+r.totalOutputTokens+p.thinkingTokens,interactions:S,modelUsage:a,thinkingTokens:p.thinkingTokens,actualTokens:0}}if(o=zn(e.trim(),"sessionParser"),o===void 0)return{tokens:0,interactions:0,modelUsage:{},thinkingTokens:0,actualTokens:0}}if(!o&&(o=zn(e,"sessionParser"),o===void 0))return{tokens:0,interactions:0,modelUsage:{},thinkingTokens:0,actualTokens:0};if(!Ke(o)||Array.isArray(o))return{tokens:0,interactions:0,modelUsage:{},thinkingTokens:0,actualTokens:0};let g=_y(o),h=g.length;for(let _ of g)Pu(_,p,c,m,s,i,t);return{tokens:r.totalInputTokens+r.totalOutputTokens+p.thinkingTokens,interactions:h,modelUsage:a,thinkingTokens:p.thinkingTokens,actualTokens:p.actualTokens}}var ua=class{extractCounts(e){let t={},s={},o=e.trim().split(`
134
+ `);for(let i of o)if(i.trim())try{let r=JSON.parse(i);if(r.type==="user.message"){Ls(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)Ls(s.timestamp??s.ts,t)}processKind2Event(e,t,s,o){if(Array.isArray(t))for(let i of t)Ls(i.timestamp??i.ts,o);else if(t&&typeof t=="object"){let i=t.timestamp??t.ts;i!==void 0&&Ls(i,o),typeof e[1]=="number"&&(s[e[1]]=i)}}processKind1Event(e,t,s,o){let i=e[1];s[i]===void 0&&Ls(t,o),s[i]=t}},da=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;Ls(i,t)}}catch{}return t}};function Sy(n){if(n==null)return null;let e=new Date(n);return isNaN(e.getTime())?null:e}function Ls(n,e){let t=Sy(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 Au(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 ua:new da).extractCounts(n),m=Object.values(c).reduce((g,h)=>g+h,0);if(m===0)return{[r]:1};let p={};for(let[g,h]of Object.entries(c))p[g]=h/m;return p}var Gt=T(require("fs")),pa=T(require("path")),xu=T(require("os"));var Si=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 Du=5,wy=2e3,Eu=pa.join(xu.homedir(),".copilot-token-tracker"),ma=pa.join(Eu,"cli-cache.json"),Pt=new Map,js=!0,Ru=!1,Iu=new Si(wy);function ga(){js=!1,Pt.clear()}function fa(){if(js)try{if(!Gt.existsSync(ma))return;let n=Gt.readFileSync(ma,"utf-8"),e=JSON.parse(n);if(e.version!==Du){Pt.clear();return}Pt=new Map(Object.entries(e.entries))}catch{Pt.clear()}}function ha(){if(!(!js||!Ru))try{Iu.evict(Pt),Gt.mkdirSync(Eu,{recursive:!0});let n={version:Du,entries:Object.fromEntries(Pt)};Gt.writeFileSync(ma,JSON.stringify(n),"utf-8")}catch{}}function Uu(n,e,t){if(!js)return null;let s=Pt.get(n);return!s||!Iu.isValid(s,e,t)?null:{...s.data,lastModified:new Date(s.data.lastModified)}}function ya(n,e,t,s){js&&(Ru=!0,Pt.set(n,{mtime:e,size:t,data:{...s,lastModified:s.lastModified.toISOString()}}))}function _a(){return{entries:Pt.size,enabled:js}}var Ge={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 Ou={$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}};var wi={$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-07-11",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",multiplier:1,displayNames:["GPT-5"]},"gpt-5-codex":{inputCostPerMillion:1.25,outputCostPerMillion:10,category:"GPT-5 models",tier:"premium",multiplier:1,displayNames:["GPT-5 Codex (Preview)"]},"gpt-5-mini":{inputCostPerMillion:.25,outputCostPerMillion:2,category:"GPT-5 models",tier:"standard",multiplier:0,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",multiplier:1,displayNames:["GPT-5.1"]},"gpt-5.1-codex":{inputCostPerMillion:1.25,outputCostPerMillion:10,category:"GPT-5 models",tier:"premium",multiplier:1,displayNames:["GPT-5.1 Codex"]},"gpt-5.1-codex-max":{inputCostPerMillion:1.75,outputCostPerMillion:14,category:"GPT-5 models",tier:"premium",multiplier:1,displayNames:["GPT-5.1 Codex Max"]},"gpt-5.1-codex-mini":{inputCostPerMillion:.25,outputCostPerMillion:2,category:"GPT-5 models",tier:"premium",multiplier:.33,displayNames:["GPT-5.1 Codex Mini (Preview)"]},"gpt-5.2":{inputCostPerMillion:1.75,outputCostPerMillion:14,category:"GPT-5 models",tier:"standard",multiplier:1,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",multiplier:1,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",multiplier:1,displayNames:["GPT-5.2 Pro"]},"gpt-5.3-codex":{inputCostPerMillion:1.75,outputCostPerMillion:14,category:"GPT-5 models",tier:"standard",multiplier:1,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",multiplier:1,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",multiplier:.33,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",multiplier:.25,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",multiplier:1,displayNames:["GPT-4"]},"gpt-4.1":{inputCostPerMillion:2,cachedInputCostPerMillion:.5,outputCostPerMillion:8,category:"GPT-4 models",tier:"standard",multiplier:0,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",multiplier:0,displayNames:["GPT-4.1 Mini"]},"gpt-4.1-nano":{inputCostPerMillion:.1,cachedInputCostPerMillion:.025,outputCostPerMillion:.4,category:"GPT-4 models",tier:"standard",multiplier:0,displayNames:["GPT-4.1 Nano"]},"gpt-4o":{inputCostPerMillion:2.5,outputCostPerMillion:10,cachedInputCostPerMillion:1.25,category:"GPT-4 models",tier:"standard",multiplier:0,displayNames:["GPT-4o"]},"gpt-4o-mini":{inputCostPerMillion:.15,outputCostPerMillion:.6,cachedInputCostPerMillion:.075,category:"GPT-4 models",tier:"standard",multiplier:0,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",multiplier:0,displayNames:["GPT-4o-mini (2024-07-18)"]},"gpt-4-turbo":{inputCostPerMillion:10,outputCostPerMillion:30,category:"GPT-4 models",tier:"standard",multiplier:0,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",multiplier:1,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",multiplier:1,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",multiplier:1,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",multiplier:1,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",multiplier:1,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",multiplier:1,displayNames:["Claude Sonnet 4.6 (alternate format)"],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",multiplier:0,displayNames:["Claude Haiku"]},"claude-haiku-4.5":{inputCostPerMillion:1,outputCostPerMillion:5,cachedInputCostPerMillion:.1,cacheCreationCostPerMillion:1.25,cacheCreation1hCostPerMillion:2,category:"Claude models (Anthropic)",tier:"standard",multiplier:.33,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",multiplier:.33,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",multiplier:10,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",multiplier:3,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",multiplier:3,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",multiplier:15,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",multiplier:30,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",multiplier:30,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",multiplier:1,displayNames:["o3-mini"]},"o4-mini":{inputCostPerMillion:1.1,outputCostPerMillion:4.4,category:"OpenAI reasoning models",tier:"premium",multiplier:1,displayNames:["o4-mini"]},"o1-preview":{inputCostPerMillion:15,outputCostPerMillion:60,category:"OpenAI reasoning models",tier:"premium",multiplier:1,displayNames:["o1-preview"]},"o1-mini":{inputCostPerMillion:3,outputCostPerMillion:12,category:"OpenAI reasoning models",tier:"premium",multiplier:1,displayNames:["o1-mini"]},"gpt-3.5-turbo":{inputCostPerMillion:.5,outputCostPerMillion:1.5,category:"Legacy models",tier:"standard",multiplier:0,displayNames:["GPT-3.5-Turbo","GPT-3.5 Turbo"]},"gemini-2.5-pro":{inputCostPerMillion:1.25,outputCostPerMillion:10,category:"Google Gemini models",tier:"standard",multiplier:1,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",multiplier:1,displayNames:["Gemini 2.5 Flash"]},"gemini-2.5-flash-lite":{inputCostPerMillion:.1,outputCostPerMillion:.4,category:"Google Gemini models",tier:"unknown",multiplier:1,displayNames:["Gemini 2.5 Flash Lite"]},"gemini-2.0-flash":{inputCostPerMillion:.1,outputCostPerMillion:.4,category:"Google Gemini models",tier:"standard",multiplier:0,displayNames:["Gemini 2.0 Flash"]},"gemini-2.0-flash-lite":{inputCostPerMillion:.075,outputCostPerMillion:.3,category:"Google Gemini models",tier:"standard",multiplier:0,displayNames:["Gemini 2.0 Flash Lite"]},"gemini-3-flash":{inputCostPerMillion:.5,outputCostPerMillion:3,category:"Google Gemini models",tier:"standard",multiplier:.33,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",multiplier:1,displayNames:["Gemini 3 Pro"]},"gemini-3-pro-preview":{inputCostPerMillion:2,outputCostPerMillion:12,category:"Google Gemini models",tier:"premium",multiplier:1,displayNames:["Gemini 3 Pro (Preview)"]},"gemini-3.1-pro":{inputCostPerMillion:2,outputCostPerMillion:12,category:"Google Gemini models",tier:"standard",multiplier:1,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",multiplier:.33,displayNames:["Gemini 3.1 Flash Lite"]},"grok-code-fast-1":{inputCostPerMillion:.2,outputCostPerMillion:1.5,category:"xAI Grok models",tier:"premium",multiplier:.25,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",multiplier:0,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",multiplier:0,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",multiplier:7.5,displayNames:["GPT-5.5"],cachedInputCostPerMillion:.5},"mistral-large-latest":{inputCostPerMillion:.5,outputCostPerMillion:1.5,category:"Mistral models",tier:"unknown",multiplier:1,displayNames:["Mistral Large 3"]},"mistral-large-2512":{inputCostPerMillion:.5,outputCostPerMillion:1.5,category:"Mistral models",tier:"unknown",multiplier:1,displayNames:["Mistral Large 3 (2512)"]},"mistral-large-2411":{inputCostPerMillion:2,outputCostPerMillion:6,category:"Mistral models",tier:"unknown",multiplier:1,displayNames:["Mistral Large 2.1"]},"magistral-medium-latest":{inputCostPerMillion:2,outputCostPerMillion:5,category:"Mistral models",tier:"unknown",multiplier:1,displayNames:["Magistral Medium"]},"mistral-medium-latest":{inputCostPerMillion:1.5,outputCostPerMillion:7.5,category:"Mistral models",tier:"unknown",multiplier:1,displayNames:["Mistral Medium 3.5"]},"mistral-medium-3-5":{inputCostPerMillion:1.5,outputCostPerMillion:7.5,category:"Mistral models",tier:"unknown",multiplier:1,displayNames:["Mistral Medium 3.5"]},"mistral-medium-3.5":{inputCostPerMillion:1.5,outputCostPerMillion:7.5,category:"Mistral models",tier:"unknown",multiplier:1,displayNames:["Mistral Medium 3.5"]},"mistral-medium-2505":{inputCostPerMillion:.4,outputCostPerMillion:2,category:"Mistral models",tier:"unknown",multiplier:1,displayNames:["Mistral Medium 3.1"]},"mistral-small-latest":{inputCostPerMillion:.1,outputCostPerMillion:.3,category:"Mistral models",tier:"unknown",multiplier:1,displayNames:["Mistral Small 3.1"]},"mistral-small-2503":{inputCostPerMillion:.075,outputCostPerMillion:.2,category:"Mistral models",tier:"unknown",multiplier:1,displayNames:["Mistral Small 3.2"]},"mistral-small-2603":{inputCostPerMillion:.15,outputCostPerMillion:.6,category:"Mistral models",tier:"unknown",multiplier:1,displayNames:["Mistral Small 4"]},"codestral-latest":{inputCostPerMillion:.3,outputCostPerMillion:.9,category:"Mistral models",tier:"unknown",multiplier:1,displayNames:["Codestral"]},"codestral-2501":{inputCostPerMillion:.3,outputCostPerMillion:.9,category:"Mistral models",tier:"unknown",multiplier:1,displayNames:["Codestral (2501)"]},"open-mistral-nemo":{inputCostPerMillion:.02,outputCostPerMillion:.03,category:"Mistral models",tier:"unknown",multiplier:1,displayNames:["Mistral Nemo"]},"ministral-3b-2410":{inputCostPerMillion:.04,outputCostPerMillion:.04,category:"Mistral models",tier:"unknown",multiplier:1,displayNames:["Ministral 3B"]},"ministral-8b-2410":{inputCostPerMillion:.1,outputCostPerMillion:.1,category:"Mistral models",tier:"unknown",multiplier:1,displayNames:["Ministral 8B"]},"magistral-small-latest":{inputCostPerMillion:.5,outputCostPerMillion:1.5,category:"Mistral models",tier:"unknown",multiplier:1,displayNames:["Magistral Small"]},"devstral-medium-2507":{inputCostPerMillion:.4,outputCostPerMillion:2,category:"Mistral models",tier:"unknown",multiplier:1,displayNames:["Devstral Medium"]},"pixtral-large-2411":{inputCostPerMillion:2,outputCostPerMillion:6,category:"Mistral models",tier:"unknown",multiplier:1,displayNames:["Pixtral Large"]},"gemini-3.5-flash":{inputCostPerMillion:1.5,outputCostPerMillion:9,category:"Google Gemini models",tier:"standard",multiplier:14,displayNames:["Gemini 3.5 Flash"],cachedInputCostPerMillion:.15},"claude-opus-4.8":{inputCostPerMillion:5,outputCostPerMillion:25,category:"Claude models (Anthropic)",tier:"standard",multiplier:15,displayNames:["Claude Opus 4.8"],cachedInputCostPerMillion:.5,cacheCreationCostPerMillion:6.25,cacheCreation1hCostPerMillion:10},"qwen2.5":{inputCostPerMillion:0,outputCostPerMillion:0,category:" models",tier:"standard",multiplier:0,displayNames:["Qwen2.5"]},"mai-code-1-flash[^mai-code-1-flash]":{inputCostPerMillion:0,outputCostPerMillion:0,category:" models",tier:"standard",multiplier:0,displayNames:["MAI-Code-1-Flash[^mai-code-1-flash]"]},"mai-code-1-flash":{inputCostPerMillion:.75,outputCostPerMillion:4.5,category:" models",tier:"standard",multiplier:0,displayNames:["MAI-Code-1-Flash"],cachedInputCostPerMillion:.075},"claude-fable-5":{inputCostPerMillion:10,outputCostPerMillion:50,category:"Claude models (Anthropic)",tier:"standard",multiplier:0,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",multiplier:0,displayNames:["DeepSeek V4 Flash"]},"deepseek-v4-flash-free":{inputCostPerMillion:0,outputCostPerMillion:0,category:"DeepSeek models",tier:"standard",multiplier:0,displayNames:["DeepSeek V4 Flash (free)"]},"claude-sonnet-5":{inputCostPerMillion:2,outputCostPerMillion:10,category:"Claude models (Anthropic)",tier:"standard",multiplier:0,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",multiplier:0,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",multiplier:0,displayNames:["Kimi-K2.7-Code"],cachedInputCostPerMillion:.19},"gpt-5.6-luna":{inputCostPerMillion:1,outputCostPerMillion:6,category:"GPT-5 models",tier:"standard",multiplier:0,displayNames:["GPT-5.6 Luna"],cachedInputCostPerMillion:.1,copilotPricing:{inputCostPerMillion:1,cachedInputCostPerMillion:.1,outputCostPerMillion:6,releaseStatus:"GA",category:"Lightweight",longContext:{inputCostPerMillion:2,cachedInputCostPerMillion:.2,outputCostPerMillion:9,threshold:"> 200K"}}},"gpt-5.6-sol":{inputCostPerMillion:5,outputCostPerMillion:30,category:"GPT-5 models",tier:"standard",multiplier:0,displayNames:["GPT-5.6 Sol"],cachedInputCostPerMillion:.5,copilotPricing:{inputCostPerMillion:5,cachedInputCostPerMillion:.5,outputCostPerMillion:30,releaseStatus:"GA",category:"Powerful",longContext:{inputCostPerMillion:10,cachedInputCostPerMillion:1,outputCostPerMillion:45,threshold:"> 272K"}}},"gpt-5.6-terra":{inputCostPerMillion:2.5,outputCostPerMillion:15,category:"GPT-5 models",tier:"standard",multiplier:0,displayNames:["GPT-5.6 Terra"],cachedInputCostPerMillion:.25,copilotPricing:{inputCostPerMillion:2.5,cachedInputCostPerMillion:.25,outputCostPerMillion:15,releaseStatus:"GA",category:"Versatile",longContext:{inputCostPerMillion:5,cachedInputCostPerMillion:.5,outputCostPerMillion:22.5,threshold:"> 272K"}}}}};var Fu={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",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"};var $n=wi.pricing,Lu=new Set(["VS Code","VS Code Insiders","VS Code Exploration","VS Code Server","VS Code Server (Insiders)","VSCodium","Visual Studio","JetBrains","Copilot CLI","MS Scout (Copilot CLI)"]),vy=[["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 Nu(n){return Lu.has(n)?"copilot":"provider"}function Ay(n){let e=n.toLowerCase(),t=vy.find(([s])=>e.startsWith(s));return t?t[1]:"Other"}function Ca(n,e){return Lu.has(n)?"GitHub Copilot":Ay(e)}function it(n){return n?n.actualTokens>0?n.actualTokens:n.tokens:0}function ba(n){let e=ee(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("/opencode/")?"OpenCode":e.includes("/.kiro/sessions/cli/")?"Kiro CLI":e.includes("/kiro.kiroagent/workspace-sessions/")?"Kiro":e.includes("/.continue/sessions/")?"Continue":e.includes("/local-agent-mode-sessions/")?"Claude Desktop Cowork":e.includes("/.claude/projects/")?Mo(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 ka(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 Wn(){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 Hn(n,e,t){let s=Math.round(it(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++;for(let[c,m]of Object.entries(e.modelUsage))n.modelUsage[c]||(n.modelUsage[c]={inputTokens:0,outputTokens:0}),n.modelUsage[c].inputTokens+=Math.round(m.inputTokens*t),n.modelUsage[c].outputTokens+=Math.round(m.outputTokens*t),m.cachedReadTokens!==void 0&&(n.modelUsage[c].cachedReadTokens=(n.modelUsage[c].cachedReadTokens??0)+Math.round(m.cachedReadTokens*t)),m.cacheCreationTokens!==void 0&&(n.modelUsage[c].cacheCreationTokens=(n.modelUsage[c].cacheCreationTokens??0)+Math.round(m.cacheCreationTokens*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 us(){return{sessions:0,toolCalls:{total:0,byTool:{}},modeUsage:{ask:0,edit:0,agent:0,plan:0,customAgent:0,cli:0},contextReferences:J(),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}}}var Bt=[{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 Jn(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=P=>`${P.getFullYear()}-${String(P.getMonth()+1).padStart(2,"0")}-${String(P.getDate()).padStart(2,"0")}`,o=P=>{let x=P.map(U=>U.entry),N=P.map(U=>U.label),re=x.map(U=>U.tokens),se=x.map(U=>U.sessions),te=new Set;x.forEach(U=>Object.keys(U.modelUsage).forEach(H=>te.add(H)));let Gs=Array.from(te).map((U,H)=>{let ye=Bt[H%Bt.length];return{label:U,data:x.map(Ce=>{let ae=Ce.modelUsage[U];return ae?ae.inputTokens+ae.outputTokens:0}),backgroundColor:ye.bg,borderColor:ye.border,borderWidth:1}}),ms=new Set;x.forEach(U=>Object.keys(U.editorUsage).forEach(H=>ms.add(H)));let Ue=Array.from(ms).map((U,H)=>{let ye=Bt[H%Bt.length];return{label:U,data:x.map(Ce=>Ce.editorUsage[U]?.tokens||0),backgroundColor:ye.bg,borderColor:ye.border,borderWidth:1}}),Bs=re.reduce((U,H)=>U+H,0),At=se.reduce((U,H)=>U+H,0),yt=P.length,Qn=x.map(U=>pt(U.modelUsage,$n,"copilot")),Yn=Qn.reduce((U,H)=>U+H,0),Gi=yt>0?Yn/yt:0,Ht=new Set;x.forEach(U=>{U.editorModelUsage&&Object.keys(U.editorModelUsage).forEach(H=>Ht.add(H))});let ps=new Map;for(let U of Ht){let H=x.reduce((ye,Ce)=>ye+pt(Ce.editorModelUsage?.[U]??{},$n,Nu(U)),0);ps.set(U,H)}let Xn=Array.from(Ht).sort((U,H)=>(ps.get(H)||0)-(ps.get(U)||0)).map((U,H)=>{let ye=Bt[H%Bt.length];return{label:U,data:x.map(Ce=>pt(Ce.editorModelUsage?.[U]??{},$n,Nu(U))),backgroundColor:ye.bg,borderColor:ye.border,borderWidth:1}}),qs=new Set;x.forEach(U=>{if(U.editorModelUsage)for(let[H,ye]of Object.entries(U.editorModelUsage))for(let Ce of Object.keys(ye))qs.add(Ca(H,Ce))});let Qe=new Map;for(let U of qs)Qe.set(U,x.reduce((H,ye)=>{if(!ye.editorModelUsage)return H;let Ce={};for(let[at,Jt]of Object.entries(ye.editorModelUsage))for(let[lt,Oe]of Object.entries(Jt))Ca(at,lt)===U&&(Ce[lt]||(Ce[lt]={inputTokens:0,outputTokens:0}),Ce[lt].inputTokens+=Oe.inputTokens,Ce[lt].outputTokens+=Oe.outputTokens);return H+pt(Ce,$n,U==="GitHub Copilot"?"copilot":"provider")},0));let Ye=Array.from(qs).sort((U,H)=>(Qe.get(H)||0)-(Qe.get(U)||0)).map((U,H)=>{let ye=Bt[H%Bt.length],Ce=U==="GitHub Copilot"?"copilot":"provider";return{label:U,data:x.map(ae=>{if(!ae.editorModelUsage)return 0;let at={};for(let[Jt,lt]of Object.entries(ae.editorModelUsage))for(let[Oe,Zn]of Object.entries(lt))Ca(Jt,Oe)===U&&(at[Oe]||(at[Oe]={inputTokens:0,outputTokens:0}),at[Oe].inputTokens+=Zn.inputTokens,at[Oe].outputTokens+=Zn.outputTokens);return pt(at,$n,Ce)}),backgroundColor:ye.bg,borderColor:ye.border,borderWidth:1}});return{labels:N,tokensData:re,sessionsData:se,modelDatasets:Gs,editorDatasets:Ue,repositoryDatasets:[],periodCount:yt,totalTokens:Bs,totalSessions:At,avgPerPeriod:yt>0?Math.round(Bs/yt):0,costData:Qn,totalCost:Yn,avgCostPerPeriod:Gi,editorCostDatasets:Xn,billingGroupCostDatasets:Ye}},i=(P,x)=>{P.tokens+=x.tokens,P.sessions+=x.sessions;for(let[N,re]of Object.entries(x.modelUsage))P.modelUsage[N]||(P.modelUsage[N]={inputTokens:0,outputTokens:0}),P.modelUsage[N].inputTokens+=re.inputTokens,P.modelUsage[N].outputTokens+=re.outputTokens,re.cachedReadTokens!==void 0&&(P.modelUsage[N].cachedReadTokens=(P.modelUsage[N].cachedReadTokens??0)+re.cachedReadTokens),re.cacheCreationTokens!==void 0&&(P.modelUsage[N].cacheCreationTokens=(P.modelUsage[N].cacheCreationTokens??0)+re.cacheCreationTokens);for(let[N,re]of Object.entries(x.editorUsage))P.editorUsage[N]||(P.editorUsage[N]={tokens:0,sessions:0}),P.editorUsage[N].tokens+=re.tokens,P.editorUsage[N].sessions+=re.sessions;if(x.editorModelUsage){P.editorModelUsage||(P.editorModelUsage={});for(let[N,re]of Object.entries(x.editorModelUsage)){P.editorModelUsage[N]||(P.editorModelUsage[N]={});for(let[se,te]of Object.entries(re))P.editorModelUsage[N][se]||(P.editorModelUsage[N][se]={inputTokens:0,outputTokens:0}),P.editorModelUsage[N][se].inputTokens+=te.inputTokens,P.editorModelUsage[N][se].outputTokens+=te.outputTokens}}},r=()=>({tokens:0,sessions:0,modelUsage:{},editorUsage:{}}),a=new Date,c=n.map((P,x)=>({label:P,entry:e[x]})),m=o(c),p=P=>{let x=new Date(P);x.setHours(0,0,0,0);let N=x.getDay();return x.setDate(x.getDate()-(N===0?6:N-1)),x},g=P=>{let x=new Date(P);return x.setDate(P.getDate()+6),P.getMonth()===x.getMonth()?`${P.toLocaleDateString("en-US",{month:"short"})} ${P.getDate()}\u2013${x.getDate()}`:`${P.toLocaleDateString("en-US",{month:"short",day:"numeric"})}\u2013${x.toLocaleDateString("en-US",{month:"short",day:"numeric"})}`},h=p(a),_=new Map;for(let P=5;P>=0;P--){let x=new Date(h);x.setDate(h.getDate()-P*7);let N=s(x);_.set(N,{label:g(x),entry:r()})}let C=t||new Map(n.map((P,x)=>[P,e[x]]));for(let[P,x]of C.entries()){let N=p(new Date(P+"T00:00:00")),re=_.get(s(N));re&&i(re.entry,x)}let S=Array.from(_.values()),E=o(S),A=new Map;for(let P=11;P>=0;P--){let x=new Date(a.getFullYear(),a.getMonth()-P,1),N=`${x.getFullYear()}-${String(x.getMonth()+1).padStart(2,"0")}`,re=x.toLocaleDateString("en-US",{month:"short",year:"numeric"});A.set(N,{label:re,entry:r()})}for(let[P,x]of C.entries()){let N=P.slice(0,7),re=A.get(N);re&&i(re.entry,x)}let R=Array.from(A.values()),j=o(R),F={};return e.forEach(P=>{Object.entries(P.editorUsage).forEach(([x,N])=>{F[x]=(F[x]||0)+N.tokens})}),{labels:m.labels,tokensData:m.tokensData,sessionsData:m.sessionsData,modelDatasets:m.modelDatasets,editorDatasets:m.editorDatasets,editorTotalsMap:F,repositoryDatasets:[],repositoryTotalsMap:{},dailyCount:m.periodCount,totalTokens:m.totalTokens,avgTokensPerDay:m.periodCount>0?Math.round(m.totalTokens/m.periodCount):0,totalSessions:m.totalSessions,lastUpdated:new Date().toISOString(),backendConfigured:!1,periodsReady:!0,periods:{day:m,week:E,month:j}}}function Y(n){return n==null||!Number.isFinite(n)?"0":Math.round(n).toLocaleString("en-US")}function fe(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 Mi=Ou.estimators,qt=wi.pricing,xy=Fu,Dy=n=>{},Sa=n=>{},Gu=(n,e)=>{let t=e instanceof Error?e.message:e!==void 0?String(e):"";console.error(w.red(n),t)};async function Ey(n){try{let e=await vt.promises.readFile(n,"utf-8");return JSON.parse(e)}catch(e){return e?.code!=="ENOENT"&&Gu(`[readJsonFile] Failed to read or parse JSON at ${n}:`,e),null}}var Ti=null;function Vn(){if(Ti)return Ti;let n=bo.file(__dirname);return Ti=aa({...ra(n),estimateTokens:(e,t)=>Q(e,t??"gpt-4",Mi),isMcpTool:tt,extractMcpServerName:mt}),Ti}function Bu(){return new Po({log:Dy,warn:Sa,error:Gu,ecosystems:Vn()})}async function ke(){return Bu().getCopilotSessionFiles()}async function Pi(n){let e=new Set,t=ve.join(ju.homedir(),".claude","projects");for(let o of n){if(o.startsWith(t+ve.sep)||o.startsWith(t+"/")){let g=await es(()=>vt.promises.readFile(o,"utf-8"),null,`buildCustomizationMatrix readFile(${o})`);if(g!==null){let h=g.split(`
135
+ `).slice(0,30);for(let _ of h)if(_.trim())try{let C=JSON.parse(_);if(C.cwd&&typeof C.cwd=="string"){e.add(C.cwd);break}}catch{}}continue}let i=ve.dirname(o);if(ve.basename(i)!=="chatSessions")continue;let r=ve.dirname(i),a=ve.join(r,"workspace.json"),c=await Ey(a);if(!c)continue;let m=c.folder;if(!m||!m.startsWith("file://"))continue;let p=ko(m);p&&e.add(p)}if(e.size===0)return;let s=0;for(let o of e)await es(async()=>{let[r,a,c]=await Promise.all([vt.promises.access(ve.join(o,".github","copilot-instructions.md")).then(()=>!0).catch(()=>!1),vt.promises.access(ve.join(o,"agents.md")).then(()=>!0).catch(()=>!1),vt.promises.access(ve.join(o,"CLAUDE.md")).then(()=>!0).catch(()=>!1)]);return!r&&!a&&!c},!0,`buildCustomizationMatrix workspace check(${o})`)&&s++;return{customizationTypes:[],workspaces:[],totalWorkspaces:e.size,workspacesWithIssues:s}}function vi(){return Bu().getDiagnosticCandidatePaths()}function Ry(n,e){return Q(n,e||"gpt-4",Mi)}function Iy(n){return Ut(n,qt)}async function qu(n){let e=Vn().find(t=>t.handles(n));return e?e.stat(n):vt.promises.stat(n)}async function Uy(n,e=!1){let t=ve.basename(n,ve.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 c of a){let m=ve.join(r,c,"debug-logs",t,"main.jsonl");try{let p=await vt.promises.readFile(m,"utf8"),g=Ll(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 ds(n,e=!1){try{let t=await qu(n),s=Uu(n,t.mtimeMs,t.size);if(s)return s;let o=Vn().find(S=>S.handles(n));if(o){let[S,E,A]=await Promise.all([o.getTokens(n),o.countInteractions(n),o.getModelUsage(n)]),R=W(t.mtime),j={file:n,tokens:S.actualTokens>0?S.actualTokens:S.tokens,thinkingTokens:S.thinkingTokens,actualTokens:S.actualTokens,interactions:E,modelUsage:A,lastModified:t.mtime,editorSource:ba(n),dailyFractions:await o.getDailyFractions?.(n)??{[R]:1}};return ya(n,t.mtimeMs,t.size,j),j}let i=await vt.promises.readFile(n,"utf-8");if(!i.trim())return null;let r=n.endsWith(".jsonl")||_t(i),a=0,c=0,m=0,p=0,g={};if(r){let S=Us(n)?await ls(n):null,E=Io(i,S);if(a=E.actualTokens>0?E.actualTokens:E.tokens,c=E.thinkingTokens,m=E.actualTokens,g=await Xr({warn:Sa,tokenEstimators:Mi,modelPricing:qt,ecosystems:Vn()},n,i),Object.keys(g).length===0&&mi(n)){let R=pi(i);Object.keys(R.modelUsage).length>0?g=R.modelUsage:R.tokens>0&&(g={[R.modelHint&&R.modelHint!=="unknown"?R.modelHint:"unknown"]:{inputTokens:R.tokens,outputTokens:0}})}let A=i.trim().split(`
136
+ `);for(let R of A)try{let j=JSON.parse(R);(j.type==="user.message"||j.kind===2&&j.k?.[0]==="requests")&&p++}catch{}}else{let S=vu(n,i,Ry,Iy);a=S.tokens,c=S.thinkingTokens,m=S.actualTokens,p=S.interactions,g=S.modelUsage}let h=Au(i,r,t.mtime),_=await Uy(n,e);if(_&&_.inputTokens+_.outputTokens>0&&(a=_.inputTokens+_.outputTokens,m=a,Object.keys(_.modelBreakdown).length>0)){g={};for(let[S,E]of Object.entries(_.modelBreakdown))g[S]={inputTokens:E.inputTokens,outputTokens:E.outputTokens,...E.cachedTokens>0?{cachedReadTokens:E.cachedTokens}:{}}}let C={file:n,tokens:a,thinkingTokens:c,actualTokens:m,interactions:p,modelUsage:g,lastModified:t.mtime,editorSource:ba(n),dailyFractions:h};return ya(n,t.mtimeMs,t.size,C),C}catch{return null}}async function zt(n,e){let t=new Date,s=W(t),o=t.getFullYear(),i=t.getMonth(),r=W(new Date(o,i,1)),a=new Date(o,i,0),c=W(new Date(a.getFullYear(),a.getMonth(),1)),m=new Date(o,i,t.getDate()-30),p=W(m),g={today:Wn(),month:Wn(),lastMonth:Wn(),last30Days:Wn()},h=0,_=await ka(n,async C=>{let S=await ds(C);return e&&e(++h,n.length),S});for(let C of _){if(!C||C.tokens===0||!Object.keys(C.dailyFractions).some(F=>F>=c))continue;let E=0,A=0,R=0,j=0;for(let[F,P]of Object.entries(C.dailyFractions))F===s&&(E+=P),F>=r&&(A+=P),F>=c&&F<r&&(R+=P),F>=p&&(j+=P);E>0&&Hn(g.today,C,E),A>0&&Hn(g.month,C,A),R>0&&Hn(g.lastMonth,C,R),j>0&&Hn(g.last30Days,C,j)}for(let C of Object.values(g))C.sessions>0&&(C.avgTokensPerSession=Math.round(C.tokens/C.sessions)),C.co2=C.tokens/1e3*Ge.CO2_PER_1K_TOKENS,C.treesEquivalent=C.co2/Ge.CO2_ABSORPTION_PER_TREE_PER_YEAR,C.waterUsage=C.tokens/1e3*Ge.WATER_USAGE_PER_1K_TOKENS,C.estimatedCost=pt(C.modelUsage,qt),C.estimatedCostCopilot=pt(C.modelUsage,qt,"copilot");return{...g,lastUpdated:t}}async function $t(n){let e={warn:Sa,tokenEstimators:Mi,modelPricing:qt,toolNameMap:xy,ecosystems:Vn()},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,c=us(),m=us(),p=us(),g=us(),h=[];for(let _ of n)try{let S=(await qu(_)).mtime;if(S<a)continue;let E=await Yc(e,_);if(S>=o&&(wn(m,E),m.sessions++),S>=i&&(wn(p,E),p.sessions++),S>=s){wn(c,E),c.sessions++;let A=await ds(_);if(A&&A.interactions>0){let R=0,j=0,F=0;for(let P of Object.values(A.modelUsage))R+=P.inputTokens,j+=P.outputTokens,F+=P.cachedReadTokens??0;h.push({title:null,filePath:_,interactions:A.interactions,toolCalls:E.toolCalls.total,inputTokens:R,outputTokens:j,thinkingTokens:A.thinkingTokens??0,cachedTokens:F,totalTokens:A.tokens,estimatedCost:pt(A.modelUsage,qt),editor:A.editorSource,models:Object.keys(A.modelUsage),lastActivity:A.lastModified.toISOString()})}}S>=r&&S<i&&(wn(g,E),g.sessions++)}catch{}return{today:c,last30Days:m,month:p,lastMonth:g,lastUpdated:t,todaySessions:h.sort((_,C)=>C.interactions-_.interactions)}}async function Ai(n,e=!1){let t=new Date,s=new Date(t.getFullYear(),t.getMonth(),t.getDate()-30),o=W(s),i=W(t),r=new Map,a=new Date(s);for(;W(a)<=i;){let h=W(a);r.set(h,{tokens:0,sessions:0,modelUsage:{},editorUsage:{}}),a.setDate(a.getDate()+1)}let c=new Map,m=await ka(n,async h=>ds(h,e));for(let h of m){if(!h||h.tokens===0||h.interactions===0)continue;let _=it(h);for(let[C,S]of Object.entries(h.dailyFractions)){let E=Math.round(_*S),A=r.get(C);if(A){A.tokens+=E,A.sessions++;for(let[P,x]of Object.entries(h.modelUsage))A.modelUsage[P]||(A.modelUsage[P]={inputTokens:0,outputTokens:0}),A.modelUsage[P].inputTokens+=Math.round(x.inputTokens*S),A.modelUsage[P].outputTokens+=Math.round(x.outputTokens*S),x.cachedReadTokens!==void 0&&(A.modelUsage[P].cachedReadTokens=(A.modelUsage[P].cachedReadTokens??0)+Math.round(x.cachedReadTokens*S)),x.cacheCreationTokens!==void 0&&(A.modelUsage[P].cacheCreationTokens=(A.modelUsage[P].cacheCreationTokens??0)+Math.round(x.cacheCreationTokens*S));let F=h.editorSource;A.editorUsage[F]||(A.editorUsage[F]={tokens:0,sessions:0}),A.editorUsage[F].tokens+=E,A.editorUsage[F].sessions++,A.editorModelUsage||(A.editorModelUsage={}),A.editorModelUsage[F]||(A.editorModelUsage[F]={});for(let[P,x]of Object.entries(h.modelUsage))A.editorModelUsage[F][P]||(A.editorModelUsage[F][P]={inputTokens:0,outputTokens:0}),A.editorModelUsage[F][P].inputTokens+=Math.round(x.inputTokens*S),A.editorModelUsage[F][P].outputTokens+=Math.round(x.outputTokens*S)}c.has(C)||c.set(C,{tokens:0,sessions:0,modelUsage:{},editorUsage:{}});let R=c.get(C);R.tokens+=E,R.sessions++;for(let[F,P]of Object.entries(h.modelUsage))R.modelUsage[F]||(R.modelUsage[F]={inputTokens:0,outputTokens:0}),R.modelUsage[F].inputTokens+=Math.round(P.inputTokens*S),R.modelUsage[F].outputTokens+=Math.round(P.outputTokens*S),P.cachedReadTokens!==void 0&&(R.modelUsage[F].cachedReadTokens=(R.modelUsage[F].cachedReadTokens??0)+Math.round(P.cachedReadTokens*S)),P.cacheCreationTokens!==void 0&&(R.modelUsage[F].cacheCreationTokens=(R.modelUsage[F].cacheCreationTokens??0)+Math.round(P.cacheCreationTokens*S));let j=h.editorSource;R.editorUsage[j]||(R.editorUsage[j]={tokens:0,sessions:0}),R.editorUsage[j].tokens+=E,R.editorUsage[j].sessions++,R.editorModelUsage||(R.editorModelUsage={}),R.editorModelUsage[j]||(R.editorModelUsage[j]={});for(let[F,P]of Object.entries(h.modelUsage))R.editorModelUsage[j][F]||(R.editorModelUsage[j][F]={inputTokens:0,outputTokens:0}),R.editorModelUsage[j][F].inputTokens+=Math.round(P.inputTokens*S),R.editorModelUsage[j][F].outputTokens+=Math.round(P.outputTokens*S)}}let p=Array.from(r.keys()).sort(),g=p.map(h=>r.get(h));return{labels:p,days:g,allDaysMap:c}}var Oy=50;function zu(n=Oy){process.stdout.write("\r"+" ".repeat(Math.max(0,n))+"\r")}function wa(n){process.stdout.write(w.dim(n))}var Fy=80,Be=class{silent;constructor(e=!1){this.silent=e}show(e){this.silent||wa(e)}update(e){this.silent||(process.stdout.write("\r"),wa(e))}done(){this.silent||zu(Fy)}};function Me(n){return n.json===!0}var $u=new ue("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=Me(n);if(e||console.log(w.bold.cyan(`
76
137
  \u{1F50D} Copilot Token Tracker - Session Statistics
77
- `)),n.verbose&&!e){let _=Yo();console.log(w.dim("Search paths:"));for(let C of _){let S=C.exists?w.green("\u2705"):w.dim("\u274C");console.log(` ${S} ${w.dim(C.source)}: ${C.path}`)}console.log()}let t=new Oe(e);t.show("Scanning for session files...");let s=await ye();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(H(s.length))} session file(s)
78
- `));let o=0,i=0,r=0,l=0,u=0,m={},p={};for(let _=0;_<s.length;_++){let C=await bs(s[_]);if(!C||C.tokens===0){u++;continue}if(l++,o+=Ye(C),i+=C.thinkingTokens,r+=C.interactions,m[C.editorSource]||(m[C.editorSource]={files:0,tokens:0,interactions:0}),m[C.editorSource].files++,m[C.editorSource].tokens+=Ye(C),m[C.editorSource].interactions+=C.interactions,n.verbose){let S=Sh(s[_]);p[S]||(p[S]={files:0,tokens:0}),p[S].files++,p[S].tokens+=Ye(C)}((_+1)%50===0||_===s.length-1)&&t.update(`Processing: ${_+1}/${s.length}`)}if(t.done(),e){let _={totalFiles:s.length,processedFiles:l,emptyFiles:u,totalTokens:o,totalThinkingTokens:i,totalInteractions:r,byEditor:m,lastUpdated:new Date().toISOString()};process.stdout.write(JSON.stringify(_));return}console.log(w.bold("\u{1F4CA} Summary")),console.log(w.dim("\u2500".repeat(50))),console.log(` Session files (with data): ${w.bold(H(l))}`),u>0&&console.log(` Empty/skipped files: ${w.dim(H(u))}`),console.log(` Total chat turns: ${w.bold(H(r))}`),console.log(` Total tokens: ${w.bold.yellow(me(o))}`),i>0&&console.log(` Thinking tokens (included): ${w.dim(me(i))}`);let f=qr();f.enabled&&f.entries>0&&console.log(w.dim(` Cache: ${H(f.entries)} entries loaded`)),console.log();let y=Object.entries(m).sort((_,C)=>C[1].tokens-_[1].tokens);if(y.length>0){console.log(w.bold("\u{1F5A5}\uFE0F By Editor")),console.log(w.dim("\u2500".repeat(50)));for(let[_,C]of y){let S=kh(_);console.log(` ${S.padEnd(25)} ${H(C.files).padStart(5)} files ${me(C.tokens).padStart(8)} tokens ${H(C.interactions).padStart(6)} turns`)}console.log()}if(n.verbose&&Object.keys(p).length>0){let _=Object.entries(p).sort((C,S)=>S[1].tokens-C[1].tokens);console.log(w.bold("\u{1F4C1} By Folder")),console.log(w.dim("\u2500".repeat(70)));for(let[C,S]of _.slice(0,20))console.log(` ${C.substring(0,50).padEnd(50)} ${H(S.files).padStart(5)} files ${me(S.tokens).padStart(8)} tokens`);_.length>20&&console.log(w.dim(` ... and ${_.length-20} more folders`)),console.log()}});function kh(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 Sh(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 su(n=new Date){return{today:{},month:{},lastMonth:{},last30Days:{},lastUpdated:n.toISOString(),backendConfigured:!1}}function Zo(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 ei(n=new Date){return{today:{},last30Days:{},month:{},lastMonth:{},locale:Intl.DateTimeFormat().resolvedOptions().locale,lastUpdated:n.toISOString(),backendConfigured:!1}}function nu(){return{}}function ti(n){return{today:n.today,month:n.month,lastMonth:n.lastMonth,last30Days:n.last30Days,lastUpdated:n.lastUpdated.toISOString(),backendConfigured:!1}}function si(n,e=new Date){return{...n,locale:Intl.DateTimeFormat().resolvedOptions().locale,lastUpdated:e.toISOString(),backendConfigured:!1}}function ni(n){return{overallStage:n.overallStage,overallLabel:n.overallLabel,categories:n.categories,period:n.period,lastUpdated:n.lastUpdated,backendConfigured:!1}}var ou=new ie("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 wh(n);if(!e)return;let t=await Th(e,n);if(Ce(n)){process.stdout.write(JSON.stringify(ti(t)));return}console.log(w.bold.cyan(`
138
+ `)),n.verbose&&!e){let _=vi();console.log(w.dim("Search paths:"));for(let C of _){let S=C.exists?w.green("\u2705"):w.dim("\u274C");console.log(` ${S} ${w.dim(C.source)}: ${C.path}`)}console.log()}let t=new Be(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)
139
+ `));let o=0,i=0,r=0,a=0,c=0,m={},p={};for(let _=0;_<s.length;_++){let C=await ds(s[_]);if(!C||C.tokens===0){c++;continue}if(a++,o+=it(C),i+=C.thinkingTokens,r+=C.interactions,m[C.editorSource]||(m[C.editorSource]={files:0,tokens:0,interactions:0}),m[C.editorSource].files++,m[C.editorSource].tokens+=it(C),m[C.editorSource].interactions+=C.interactions,n.verbose){let S=Ly(s[_]);p[S]||(p[S]={files:0,tokens:0}),p[S].files++,p[S].tokens+=it(C)}((_+1)%50===0||_===s.length-1)&&t.update(`Processing: ${_+1}/${s.length}`)}if(t.done(),e){let _={totalFiles:s.length,processedFiles:a,emptyFiles:c,totalTokens:o,totalThinkingTokens:i,totalInteractions:r,byEditor:m,lastUpdated:new Date().toISOString()};process.stdout.write(JSON.stringify(_));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))}`),c>0&&console.log(` Empty/skipped files: ${w.dim(Y(c))}`),console.log(` Total chat turns: ${w.bold(Y(r))}`),console.log(` Total tokens: ${w.bold.yellow(fe(o))}`),i>0&&console.log(` Thinking tokens (included): ${w.dim(fe(i))}`);let g=_a();g.enabled&&g.entries>0&&console.log(w.dim(` Cache: ${Y(g.entries)} entries loaded`)),console.log();let h=Object.entries(m).sort((_,C)=>C[1].tokens-_[1].tokens);if(h.length>0){console.log(w.bold("\u{1F5A5}\uFE0F By Editor")),console.log(w.dim("\u2500".repeat(50)));for(let[_,C]of h){let S=Ny(_);console.log(` ${S.padEnd(25)} ${Y(C.files).padStart(5)} files ${fe(C.tokens).padStart(8)} tokens ${Y(C.interactions).padStart(6)} turns`)}console.log()}if(n.verbose&&Object.keys(p).length>0){let _=Object.entries(p).sort((C,S)=>S[1].tokens-C[1].tokens);console.log(w.bold("\u{1F4C1} By Folder")),console.log(w.dim("\u2500".repeat(70)));for(let[C,S]of _.slice(0,20))console.log(` ${C.substring(0,50).padEnd(50)} ${Y(S.files).padStart(5)} files ${fe(S.tokens).padStart(8)} tokens`);_.length>20&&console.log(w.dim(` ... and ${_.length-20} more folders`)),console.log()}});function Ny(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 Ly(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 Wu(n=new Date){return{today:{},month:{},lastMonth:{},last30Days:{},lastUpdated:n.toISOString(),backendConfigured:!1}}function xi(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 Di(n=new Date){return{today:{},last30Days:{},month:{},lastMonth:{},locale:Intl.DateTimeFormat().resolvedOptions().locale,lastUpdated:n.toISOString(),backendConfigured:!1}}function Hu(){return{}}function Ei(n){return{today:n.today,month:n.month,lastMonth:n.lastMonth,last30Days:n.last30Days,lastUpdated:n.lastUpdated.toISOString(),backendConfigured:!1}}function Ri(n,e=new Date){return{...n,locale:Intl.DateTimeFormat().resolvedOptions().locale,lastUpdated:e.toISOString(),backendConfigured:!1}}function Ii(n){return{overallStage:n.overallStage,overallLabel:n.overallLabel,categories:n.categories,period:n.period,lastUpdated:n.lastUpdated,backendConfigured:!1}}var Ju=new ue("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 jy(n);if(!e)return;let t=await Gy(e,n);if(Me(n)){process.stdout.write(JSON.stringify(Ei(t)));return}console.log(w.bold.cyan(`
79
140
  \u{1F4CA} Copilot Token Tracker - Usage Report
80
- `));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)Mh(o.label,o.emoji,o.stats,n);console.log(w.dim(`Last updated: ${t.lastUpdated.toLocaleString()}
81
- `))});async function wh(n){let e=Ce(n),t=new Oe(e);t.show("Scanning for session files...");let s=await ye();return t.done(),s.length===0?(e?process.stdout.write("{}"):console.log(w.yellow("\u26A0\uFE0F No session files found.")),null):s}async function Th(n,e){let t=Ce(e),s=new Oe(t);s.show("Calculating token usage...");let o=await xt(n,(i,r)=>{s.update(`Processing: ${i}/${r} files`)});return s.done(),o}function Mh(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(H(t.sessions))}`),console.log(` Avg interactions/sess: ${w.bold(t.avgInteractionsPerSession.toFixed(1))}`),console.log(` Total tokens: ${w.bold.yellow(me(t.tokens))}`),t.thinkingTokens>0&&console.log(` Thinking tokens: ${w.dim(me(t.thinkingTokens))} (included in total)`),console.log(` Avg tokens/session: ${w.bold(me(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 l=r.inputTokens+r.outputTokens,u=zt(i,Vt),m=u==="premium"?w.yellow(" \u2B50"):u==="standard"?w.dim(" \u25CB"):"";console.log(` ${(i+m).padEnd(35)} ${me(r.inputTokens).padStart(8)} in ${me(r.outputTokens).padStart(8)} out ${me(l).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)} ${H(r.sessions).padStart(5)} sessions ${me(r.tokens).padStart(8)} tokens`)}console.log()}var iu=new ie("environmental").alias("env").description("Show environmental impact of your Copilot usage (CO2, water, trees)").action(async()=>{console.log(w.bold.cyan(`
141
+ `));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)By(o.label,o.emoji,o.stats,n);console.log(w.dim(`Last updated: ${t.lastUpdated.toLocaleString()}
142
+ `))});async function jy(n){let e=Me(n),t=new Be(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 Gy(n,e){let t=Me(e),s=new Be(t);s.show("Calculating token usage...");let o=await zt(n,(i,r)=>{s.update(`Processing: ${i}/${r} files`)});return s.done(),o}function By(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(fe(t.tokens))}`),t.thinkingTokens>0&&console.log(` Thinking tokens: ${w.dim(fe(t.thinkingTokens))} (included in total)`),console.log(` Avg tokens/session: ${w.bold(fe(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,c=os(i,qt),m=c==="premium"?w.yellow(" \u2B50"):c==="standard"?w.dim(" \u25CB"):"";console.log(` ${(i+m).padEnd(35)} ${fe(r.inputTokens).padStart(8)} in ${fe(r.outputTokens).padStart(8)} out ${fe(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 ${fe(r.tokens).padStart(8)} tokens`)}console.log()}var Vu=new ue("environmental").alias("env").description("Show environmental impact of your Copilot usage (CO2, water, trees)").action(async()=>{console.log(w.bold.cyan(`
82
143
  \u{1F30D} Copilot Token Tracker - Environmental Impact
83
- `));let n=new Oe;n.show("Scanning for session files...");let e=await ye();if(n.done(),e.length===0){console.log(w.yellow("\u26A0\uFE0F No session files found."));return}n.show("Calculating usage...");let t=await xt(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: Estimates based on industry averages for AI inference")),console.log(w.dim(` CO\u2082: ${Fe.CO2_PER_1K_TOKENS} gCO\u2082e per 1K tokens`)),console.log(w.dim(` Water: ${Fe.WATER_USAGE_PER_1K_TOKENS} L per 1K tokens`)),console.log(w.dim(` Tree absorption: ${ru(Fe.CO2_ABSORPTION_PER_TREE_PER_YEAR)} CO\u2082/year
84
- `));for(let i of s)vh(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,l=i/Fe.CO2_PER_KM_DRIVING;console.log(` \u{1F697} Equivalent to driving: ${l.toFixed(3)} km`);let u=i/Fe.CO2_PER_PHONE_CHARGE;console.log(` \u{1F4F1} Smartphone charges: ${u.toFixed(1)}`);let m=r/Fe.WATER_PER_COFFEE_CUP;console.log(` \u2615 Cups of coffee (water): ${m.toFixed(4)}`);let p=i/Fe.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()}
85
- `))});function ru(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 vh(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(me(t.tokens))}`),console.log(` CO\u2082 emissions: ${w.bold(ru(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 au=["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","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","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","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 Ah=new Set(au.map(n=>n.toLowerCase()));function G(n){return n.toLocaleString("en-US")}function pe(n,e){return Math.max(n,e)}var xh={1:"Stage 1: AI Skeptic",2:"Stage 2: AI Explorer",3:"Stage 3: AI Collaborator",4:"Stage 4: AI Strategist"},Xe={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},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 Dh(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 Eh=["explain","fix","tests","doc","generate","optimize","new","newNotebook","search","fixTestFailure","setupTests"],Rh=["review","bug","think","compact","pr_comments"];function Ih(n){return[...Eh.filter(e=>(n[e]??0)>0),...Rh.filter(e=>(n[`__slash__${e}`]??0)>0)]}function cu(n){return Object.keys(n).filter(e=>!Ah.has(e.toLowerCase())&&!e.startsWith("__slash__")).length}function Uh(n,e,t){return n>0||e>0||t>0}function Fh(n,e){return n>0||e>0}function Oh(n,e,t){let s=Xe.promptEngineering;return n>=s.stage3MinInteractions&&(e.length>=s.stage3MinSlashCommands||t)}function Nh(n,e,t,s){let o=Xe.promptEngineering;return n>=o.stage4MinInteractions&&e&&(t||s.length>=o.stage4MinSlashCommands)}function Lh(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 Gh(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 jh(n,e,t,s,o){let i=Xe.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(...Lh(e,s,i)),n<4&&r.push(...Gh(e,t,s,o,i)),r}function Bh(n,e,t){if(!n.conversationPatterns)return t;let s=Xe.promptEngineering,o=Math.round(n.conversationPatterns.multiTurnSessions/Math.max(1,n.sessions)*100);return n.conversationPatterns.multiTurnSessions>0&&e.push(`${G(n.conversationPatterns.multiTurnSessions)} multi-turn sessions (${o}%)`),n.conversationPatterns.avgTurnsPerSession>=s.stage2MinAvgTurns&&(e.push(`Avg ${n.conversationPatterns.avgTurnsPerSession.toFixed(1)} exchanges per session`),t=pe(t,2)),n.conversationPatterns.avgTurnsPerSession>=s.stage3MinAvgTurns&&(t=pe(t,3)),t}function qh(n){let{stage:e,evidence:t,usedSlashCommands:s,hasModelSwitching:o,hasAgentMode:i,autoUsageRatio:r}=Jh(n);return{stage:e,evidence:t,tips:jh(e,i,o,s,r)}}function zh(n,e){let t=e.modeUsage.ask+e.modeUsage.edit+e.modeUsage.agent+e.modeUsage.cli;t>0&&n.push(`${G(t)} total interactions`),e.modeUsage.ask>0&&n.push(`${G(e.modeUsage.ask)} ask-mode conversations`),e.modeUsage.agent>0&&n.push(`${G(e.modeUsage.agent)} agent-mode interactions`),e.modeUsage.cli>0&&n.push(`${G(e.modeUsage.cli)} CLI interactions`)}function $h(n,e,t){e.modelSwitching.autoSessions>0&&n.push(`Auto model used in ${G(e.modelSwitching.autoSessions)} session${e.modelSwitching.autoSessions===1?"":"s"} (${Math.round(t*100)}%)`)}function Wh(n,e,t){let s=n;return e>0&&(s=pe(s,2)),e>=.5&&(s=pe(s,3)),e>=.8&&t>=5&&(s=4),s}function Hh(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)?pe(n,3):n):n}function Jh(n){let e=[],t=Xe.promptEngineering;zh(e,n);let s=n.modeUsage.ask+n.modeUsage.edit+n.modeUsage.agent+n.modeUsage.cli,o=Bh(n,e,1);s>=t.stage2MinInteractions&&(o=2);let i=Ih(n.toolCalls.byTool);i.length>0&&e.push(`Used slash commands: /${i.join(", /")}`);let r=Uh(n.modelSwitching.mixedTierSessions,n.modelSwitching.mixedCostSessions,n.modelSwitching.switchingFrequency),l=Fh(n.modeUsage.agent,n.modeUsage.cli),u=n.modelSwitching.totalSessions>0?n.modelSwitching.autoSessions/n.modelSwitching.totalSessions:0;return $h(e,n,u),Oh(s,i,l)&&(o=3),Nh(s,l,r,i)&&(o=4),o=Wh(o,u,n.sessions),o=Hh(o,r,n,e),{stage:o,evidence:e,usedSlashCommands:i,hasModelSwitching:r,hasAgentMode:l,autoUsageRatio:u}}function Vh(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 Kh(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 Qh(n,e,t){let s=Xe.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(u=>u.used).length>=2){let u=[{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),m=[];return o>0&&m.push(`${G(e)} of ${s.stage4MinRefTypes} different reference types used`),i>0&&m.push(`${G(t)} of ${s.stage4MinTotalRefs} total references`),Vh(m,u)}return Kh(r,"[specialized context variables](https://code.visualstudio.com/docs/copilot/chat/copilot-chat#_add-context-to-your-prompts)")}function Yh(n,e,t){e>0&&n.push(`${G(e)} ${t}`)}function Xh(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)Yh(e,s,o);return e}function Zh(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 ey(n,e,t){let s=n.byKind["copilot.image"]||0;return s>0&&(e.push(`${G(s)} image references (vision)`),t=pe(t,3)),(n.byKind.promptFile||0)>0&&(t=pe(t,3)),t}function ty(n){let e=1,t=Xe.contextEngineering,s=n.contextReferences,o=s.file+s.selection+s.symbol+s.codebase+s.workspace,i=Zh(s),r=Xh(s);o>=t.stage2MinTotalRefs&&(e=2),i>=t.stage3MinRefTypes&&o>=t.stage3MinTotalRefs&&(e=3),i>=t.stage4MinRefTypes&&o>=t.stage4MinTotalRefs&&(e=4),e=ey(s,r,e);let l=[];if(e<2&&l.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&&l.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 u=Qh(s,i,o);u&&l.push(u)}return{stage:e,evidence:r,tips:l}}function sy(n,e,t){return n>=t.stage3MinAgentInteractions&&e>=t.stage3MinNonAutoTools}function ny(n,e,t){return n>=t.stage4MinAgentInteractions&&e>=t.stage4MinNonAutoTools}function oy(n,e){return!!n&&n.multiFileEdits>=e.stage4MinMultiFileEdits&&n.avgFilesPerSession>=e.stage3MinAvgFilesPerSession}function iy(n,e,t,s){if(n<e.stage3MinMultiAgentParents)return t;let o=n===1?"1 session":`${G(n)} sessions`;return s.push(`${o} with child workspaces (multi-agent orchestration)`),t=pe(t,3),n>=e.stage4MinMultiAgentParents&&(t=pe(t,4)),t}function ry(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 ay(n,e,t){let s=t;return e.modeUsage.agent>0&&(n.push(`${G(e.modeUsage.agent)} agent-mode interactions`),s=2),e.modeUsage.cli>0&&(n.push(`${G(e.modeUsage.cli)} CLI interactions`),s=pe(s,2)),e.toolCalls.total>0&&n.push(`${G(e.toolCalls.total)} tool calls executed`),e.modeUsage.edit>0&&n.push(`${G(e.modeUsage.edit)} edit-mode interactions`),s}function ly(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(`${G(e.editScope.multiFileEdits)} multi-file edit sessions (${r}%)`),o=pe(o,2)),e.editScope.avgFilesPerSession>=s.stage3MinAvgFilesPerSession&&(n.push(`Avg ${e.editScope.avgFilesPerSession.toFixed(1)} files per edit session`),o=pe(o,3)),o}function cy(n,e,t,s){let o=n;e.agentTypes?.editsAgent&&(s.push(`${G(e.agentTypes.editsAgent)} edits agent sessions`),o=pe(o,2));let i=cu(e.toolCalls.byTool),r=e.modeUsage.agent+e.modeUsage.cli;return sy(r,i,t)&&(o=3),ny(r,i,t)&&(o=4),oy(e.editScope,t)&&(o=pe(o,4)),o=iy(e.multiAgentParentSessions??0,t,o,s),o}function uy(n){let e=[],t=1,s=Xe.agentic;return t=ay(e,n,t),t=ly(e,n,t,s),t=cy(t,n,s,e),{stage:t,evidence:e,tips:ry(t)}}function lu(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 dy(n,e,t){let s=Object.keys(e.toolCalls.byTool).length,o=cu(e.toolCalls.byTool),i=t;if(o>0){let r=s-o,l=r>0?` (+ ${G(r)} automatic)`:"";n.push(`${G(o)} intentional tools used${l}`),i=2}else s>0&&n.push(`${G(s)} tools used (all automatic \u2014 agent reads/searches)`);return i}function my(n,e,t){return e.agentTypes?.workspaceAgent>0?(n.push(`${G(e.agentTypes.workspaceAgent)} @workspace agent sessions`),pe(t,3)):t}function py(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(l=>(e.toolCalls.byTool[l]||0)>0),r=t;return i.length>0&&(n.push(`Advanced tools: ${i.map(l=>o[l]).join(", ")}`),i.length>=s.stage3MinAdvancedTools&&(r=pe(r,3))),r}function gy(n,e,t,s){let o=Object.keys(e.mcpTools.byServer),i=t;return e.mcpTools.total>0&&(n.push(`${G(e.mcpTools.total)} MCP tool calls across ${o.length} server(s)`),i=pe(i,3),o.length>=s.stage4MinMcpServers&&(i=4)),{stage:i,mcpServers:o}}function fy(n,e){let t=[],s=1,o=Xe.toolUsage;s=dy(t,n,s),s=my(t,n,s),s=py(t,n,s,o);let i=e===!1;if(!i){let{stage:r,mcpServers:l}=gy(t,n,s,o);return s=r,{stage:s,evidence:t,tips:lu(s,l)}}return{stage:s,evidence:t,tips:lu(s,[],i)}}function hy(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=`${G(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(l=>Object.values(l.typeStatuses).every(u=>u==="\u274C")).filter(l=>!l.workspacePath.startsWith("<unresolved:")).sort((l,u)=>u.interactionCount!==l.interactionCount?u.interactionCount-l.interactionCount:u.sessionCount-l.sessionCount).slice(0,3);if(i.length===0)return o;let r=i.map(l=>`${l.workspaceName} (${G(l.interactionCount)} interaction${l.interactionCount===1?"":"s"})`).join(`
144
+ `));let n=new Be;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 zt(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: Estimates based on industry averages for AI inference")),console.log(w.dim(` CO\u2082: ${Ge.CO2_PER_1K_TOKENS} gCO\u2082e per 1K tokens`)),console.log(w.dim(` Water: ${Ge.WATER_USAGE_PER_1K_TOKENS} L per 1K tokens`)),console.log(w.dim(` Tree absorption: ${Ku(Ge.CO2_ABSORPTION_PER_TREE_PER_YEAR)} CO\u2082/year
145
+ `));for(let i of s)qy(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/Ge.CO2_PER_KM_DRIVING;console.log(` \u{1F697} Equivalent to driving: ${a.toFixed(3)} km`);let c=i/Ge.CO2_PER_PHONE_CHARGE;console.log(` \u{1F4F1} Smartphone charges: ${c.toFixed(1)}`);let m=r/Ge.WATER_PER_COFFEE_CUP;console.log(` \u2615 Cups of coffee (water): ${m.toFixed(4)}`);let p=i/Ge.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()}
146
+ `))});function Ku(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 qy(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(fe(t.tokens))}`),console.log(` CO\u2082 emissions: ${w.bold(Ku(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 Qu=["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 $y=new Set(Qu.map(n=>n.toLowerCase()));function q(n){return n.toLocaleString("en-US")}function he(n,e){return Math.max(n,e)}var Wy={1:"Stage 1: AI Skeptic",2:"Stage 2: AI Explorer",3:"Stage 3: AI Collaborator",4:"Stage 4: AI Strategist"},rt={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},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 Hy(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 Jy=["explain","fix","tests","doc","generate","optimize","new","newNotebook","search","fixTestFailure","setupTests"],Vy=["review","bug","think","compact","pr_comments"];function Ky(n){return[...Jy.filter(e=>(n[e]??0)>0),...Vy.filter(e=>(n[`__slash__${e}`]??0)>0)]}function Xu(n){return Object.keys(n).filter(e=>!$y.has(e.toLowerCase())&&!e.startsWith("__slash__")).length}function Qy(n,e,t){return n>0||e>0||t>0}function Yy(n,e){return n>0||e>0}function Xy(n,e,t){let s=rt.promptEngineering;return n>=s.stage3MinInteractions&&(e.length>=s.stage3MinSlashCommands||t)}function Zy(n,e,t,s){let o=rt.promptEngineering;return n>=o.stage4MinInteractions&&e&&(t||s.length>=o.stage4MinSlashCommands)}function e_(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 t_(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 s_(n,e,t,s,o){let i=rt.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(...e_(e,s,i)),n<4&&r.push(...t_(e,t,s,o,i)),r}function n_(n,e,t){if(!n.conversationPatterns)return t;let s=rt.promptEngineering,o=Math.round(n.conversationPatterns.multiTurnSessions/Math.max(1,n.sessions)*100);return n.conversationPatterns.multiTurnSessions>0&&e.push(`${q(n.conversationPatterns.multiTurnSessions)} multi-turn sessions (${o}%)`),n.conversationPatterns.avgTurnsPerSession>=s.stage2MinAvgTurns&&(e.push(`Avg ${n.conversationPatterns.avgTurnsPerSession.toFixed(1)} exchanges per session`),t=he(t,2)),n.conversationPatterns.avgTurnsPerSession>=s.stage3MinAvgTurns&&(t=he(t,3)),t}function o_(n){let{stage:e,evidence:t,usedSlashCommands:s,hasModelSwitching:o,hasAgentMode:i,autoUsageRatio:r}=c_(n);return{stage:e,evidence:t,tips:s_(e,i,o,s,r)}}function i_(n,e){let t=e.modeUsage.ask+e.modeUsage.edit+e.modeUsage.agent+e.modeUsage.cli;t>0&&n.push(`${q(t)} total interactions`),e.modeUsage.ask>0&&n.push(`${q(e.modeUsage.ask)} ask-mode conversations`),e.modeUsage.agent>0&&n.push(`${q(e.modeUsage.agent)} agent-mode interactions`),e.modeUsage.cli>0&&n.push(`${q(e.modeUsage.cli)} CLI interactions`)}function r_(n,e,t){e.modelSwitching.autoSessions>0&&n.push(`Auto model used in ${q(e.modelSwitching.autoSessions)} session${e.modelSwitching.autoSessions===1?"":"s"} (${Math.round(t*100)}%)`)}function a_(n,e,t){let s=n;return e>0&&(s=he(s,2)),e>=.5&&(s=he(s,3)),e>=.8&&t>=5&&(s=4),s}function l_(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)?he(n,3):n):n}function c_(n){let e=[],t=rt.promptEngineering;i_(e,n);let s=n.modeUsage.ask+n.modeUsage.edit+n.modeUsage.agent+n.modeUsage.cli,o=n_(n,e,1);s>=t.stage2MinInteractions&&(o=2);let i=Ky(n.toolCalls.byTool);i.length>0&&e.push(`Used slash commands: /${i.join(", /")}`);let r=Qy(n.modelSwitching.mixedTierSessions,n.modelSwitching.mixedCostSessions,n.modelSwitching.switchingFrequency),a=Yy(n.modeUsage.agent,n.modeUsage.cli),c=n.modelSwitching.totalSessions>0?n.modelSwitching.autoSessions/n.modelSwitching.totalSessions:0;return r_(e,n,c),Xy(s,i,a)&&(o=3),Zy(s,a,r,i)&&(o=4),o=a_(o,c,n.sessions),o=l_(o,r,n,e),{stage:o,evidence:e,usedSlashCommands:i,hasModelSwitching:r,hasAgentMode:a,autoUsageRatio:c}}function u_(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 d_(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 m_(n,e,t){let s=rt.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),m=[];return o>0&&m.push(`${q(e)} of ${s.stage4MinRefTypes} different reference types used`),i>0&&m.push(`${q(t)} of ${s.stage4MinTotalRefs} total references`),u_(m,c)}return d_(r,"[specialized context variables](https://code.visualstudio.com/docs/copilot/chat/copilot-chat#_add-context-to-your-prompts)")}function p_(n,e,t){e>0&&n.push(`${q(e)} ${t}`)}function g_(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)p_(e,s,o);return e}function f_(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 h_(n,e,t){let s=n.byKind["copilot.image"]||0;return s>0&&(e.push(`${q(s)} image references (vision)`),t=he(t,3)),(n.byKind.promptFile||0)>0&&(t=he(t,3)),t}function y_(n){let e=1,t=rt.contextEngineering,s=n.contextReferences,o=s.file+s.selection+s.symbol+s.codebase+s.workspace,i=f_(s),r=g_(s);o>=t.stage2MinTotalRefs&&(e=2),i>=t.stage3MinRefTypes&&o>=t.stage3MinTotalRefs&&(e=3),i>=t.stage4MinRefTypes&&o>=t.stage4MinTotalRefs&&(e=4),e=h_(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=m_(s,i,o);c&&a.push(c)}return{stage:e,evidence:r,tips:a}}function __(n,e,t){return n>=t.stage3MinAgentInteractions&&e>=t.stage3MinNonAutoTools}function C_(n,e,t){return n>=t.stage4MinAgentInteractions&&e>=t.stage4MinNonAutoTools}function b_(n,e){return!!n&&n.multiFileEdits>=e.stage4MinMultiFileEdits&&n.avgFilesPerSession>=e.stage3MinAvgFilesPerSession}function k_(n,e,t,s){if(n<e.stage3MinMultiAgentParents)return t;let o=n===1?"1 session":`${q(n)} sessions`;return s.push(`${o} with child workspaces (multi-agent orchestration)`),t=he(t,3),n>=e.stage4MinMultiAgentParents&&(t=he(t,4)),t}function S_(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 w_(n,e,t){let s=t;return e.modeUsage.agent>0&&(n.push(`${q(e.modeUsage.agent)} agent-mode interactions`),s=2),e.modeUsage.cli>0&&(n.push(`${q(e.modeUsage.cli)} CLI interactions`),s=he(s,2)),e.toolCalls.total>0&&n.push(`${q(e.toolCalls.total)} tool calls executed`),e.modeUsage.edit>0&&n.push(`${q(e.modeUsage.edit)} edit-mode interactions`),s}function T_(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(`${q(e.editScope.multiFileEdits)} multi-file edit sessions (${r}%)`),o=he(o,2)),e.editScope.avgFilesPerSession>=s.stage3MinAvgFilesPerSession&&(n.push(`Avg ${e.editScope.avgFilesPerSession.toFixed(1)} files per edit session`),o=he(o,3)),o}function M_(n,e,t,s){let o=n;e.agentTypes?.editsAgent&&(s.push(`${q(e.agentTypes.editsAgent)} edits agent sessions`),o=he(o,2));let i=Xu(e.toolCalls.byTool),r=e.modeUsage.agent+e.modeUsage.cli;return __(r,i,t)&&(o=3),C_(r,i,t)&&(o=4),b_(e.editScope,t)&&(o=he(o,4)),o=k_(e.multiAgentParentSessions??0,t,o,s),o}function P_(n){let e=[],t=1,s=rt.agentic;return t=w_(e,n,t),t=T_(e,n,t,s),t=M_(t,n,s,e),{stage:t,evidence:e,tips:S_(t)}}function Yu(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 v_(n,e,t){let s=Object.keys(e.toolCalls.byTool).length,o=Xu(e.toolCalls.byTool),i=t;if(o>0){let r=s-o,a=r>0?` (+ ${q(r)} automatic)`:"";n.push(`${q(o)} intentional tools used${a}`),i=2}else s>0&&n.push(`${q(s)} tools used (all automatic \u2014 agent reads/searches)`);return i}function A_(n,e,t){return e.agentTypes?.workspaceAgent>0?(n.push(`${q(e.agentTypes.workspaceAgent)} @workspace agent sessions`),he(t,3)):t}function x_(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=he(r,3))),r}function D_(n,e,t,s){let o=Object.keys(e.mcpTools.byServer),i=t;return e.mcpTools.total>0&&(n.push(`${q(e.mcpTools.total)} MCP tool calls across ${o.length} server(s)`),i=he(i,3),o.length>=s.stage4MinMcpServers&&(i=4)),{stage:i,mcpServers:o}}function E_(n,e){let t=[],s=1,o=rt.toolUsage;s=v_(t,n,s),s=A_(t,n,s),s=x_(t,n,s,o);let i=e===!1;if(!i){let{stage:r,mcpServers:a}=D_(t,n,s,o);return s=r,{stage:s,evidence:t,tips:Yu(s,a)}}return{stage:s,evidence:t,tips:Yu(s,[],i)}}function R_(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=`${q(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} (${q(a.interactionCount)} interaction${a.interactionCount===1?"":"s"})`).join(`
86
147
  `);return`${o}
87
148
 
88
149
  Top repos to customize first:
89
- ${r}`}function yy(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=pe(o,3)),t>=s.stage4MinUniqueModels&&e>=s.stage4MinCustomizedRepos&&(o=4),o}function _y(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(`${G(t)} of ${G(e)} repos have customization \u2014 add [instructions and agents.md](https://code.visualstudio.com/docs/copilot/customization/custom-instructions) to the remaining ${G(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 by(n){return[...new Set([...n.modelSwitching.standardModels,...n.modelSwitching.premiumModels,...n.modelSwitching.lowCostModels,...n.modelSwitching.mediumCostModels,...n.modelSwitching.highCostModels])]}function Cy(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 ky(n,e,t){let s=n;return e.modelSwitching.foundryWindowsSessions>0&&(s=pe(s,2),t.push(`Used Microsoft Foundry / local models in ${G(e.modelSwitching.foundryWindowsSessions)} session${e.modelSwitching.foundryWindowsSessions===1?"":"s"}`)),e.modelSwitching.unknownProviderSessions>0&&(s=pe(s,2),t.push(`Used models from unknown providers in ${G(e.modelSwitching.unknownProviderSessions)} session${e.modelSwitching.unknownProviderSessions===1?"":"s"}`)),s}function Sy(n,e,t,s,o){e>=4?n.push(`${G(t)} of ${G(s)} repos customized (${o.stage4MinCustomizationRate*100}%+ with ${o.stage4MinCustomizedRepos}+ repos \u2192 Stage 4)`):e>=3?n.push(`${G(t)} of ${G(s)} repos customized (${o.stage3MinCustomizationRate*100}%+ with ${o.stage3MinCustomizedRepos}+ repos \u2192 Stage 3)`):t>0&&n.push(`${G(t)} of ${G(s)} repos with custom instructions or agents.md`)}function wy(n,e,t,s,o,i,r){let l=[...n];return t.modelSwitching.foundryWindowsSessions===0&&l.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&&l.unshift("Try different model providers from the marketplace when you want more specialized or cost-effective options"),e>=4&&l.push(hy(o,i,r)),l}function Ty(n,e){let t=[],s=Xe.customization,o=e,i=o?.totalWorkspaces??0,r=i-(o?.workspacesWithIssues??0),l=i>0?r/i:0,u=by(n),m=yy(l,r,u.length,s);Cy(t,i,u,s),m=ky(m,n,t),Sy(t,m,r,i,s);let p=_y(m,i,r);return p=wy(p,m,n,u,o,i,r),{stage:m,evidence:t,tips:p}}function My(n,e,t,s){return n>=s.stage4MinSessions&&e>=s.stage3MinModesUsed&&t>=s.stage3MinContextRefs}function vy(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 Py(n){return n.contextReferences.file+n.contextReferences.selection+n.contextReferences.symbol+n.contextReferences.codebase+n.contextReferences.workspace}function Ay(n){return[n.modeUsage.ask>0,n.modeUsage.agent>0,n.modeUsage.cli>0].filter(Boolean).length}function xy(n,e,t,s){return e.sessions>=s.stage2MinSessions?(n.push(`${G(e.sessions)} sessions in the last 30 days`),2):t}function Dy(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 (${G(e.applyUsage.totalApplies)}/${G(e.applyUsage.totalCodeBlocks)})`),o>=s.stage2MinApplyRatePct?pe(t,2):t}function Ey(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 Ry(n,e,t,s,o){let i=e;return t>=o.stage3MinModesUsed&&(n.push(`Uses ${t} modes (ask/agent/cli)`),i=pe(i,3)),s>=o.hasExplicitContextMinRefs&&(n.push(`${G(s)} explicit context references`),s>=o.stage3MinContextRefs&&(i=pe(i,3))),i}function Iy(n,e,t,s,o,i){return My(e.sessions,t,s,o)?(i.push("Deep integration: regular usage with multi-mode and explicit context"),4):n}function Uy(n){let e=[],t=1,s=Xe.workflowIntegration;t=xy(e,n,t,s),t=Dy(e,n,t,s),Ey(e,n);let o=Py(n),i=Ay(n);return t=Ry(e,t,i,o,s),t=Iy(t,n,i,o,s,e),{stage:t,evidence:e,tips:vy(t,i,o,s)}}async function oi(n,e,t=!0,s){let o=await e(t),i=o.last30Days,r=qh(i),l=ty(i),u=uy(i),m=fy(i,s),p=Ty(i,n),f=Uy(i),y=Dh([r.stage,l.stage,u.stage,m.stage,p.stage,f.stage]);return{overallStage:y,overallLabel:xh[y]??`Stage ${y}`,categories:[{category:"Prompt Engineering",icon:"\u{1F4AC}",stage:r.stage,evidence:r.evidence,tips:r.tips},{category:"Context Engineering",icon:"\u{1F4CE}",stage:l.stage,evidence:l.evidence,tips:l.tips},{category:"Agentic",icon:"\u{1F916}",stage:u.stage,evidence:u.evidence,tips:u.tips},{category:"Tool Usage",icon:"\u{1F527}",stage:m.stage,evidence:m.evidence,tips:m.tips},{category:"Customization",icon:"\u2699\uFE0F",stage:p.stage,evidence:p.evidence,tips:p.tips},{category:"Workflow Integration",icon:"\u{1F504}",stage:f.stage,evidence:f.evidence,tips:f.tips}],period:i,lastUpdated:o.lastUpdated.toISOString()}}var uu=new ie("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=Ce(n);e||console.log(w.bold.cyan(`
150
+ ${r}`}function I_(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=he(o,3)),t>=s.stage4MinUniqueModels&&e>=s.stage4MinCustomizedRepos&&(o=4),o}function U_(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(`${q(t)} of ${q(e)} repos have customization \u2014 add [instructions and agents.md](https://code.visualstudio.com/docs/copilot/customization/custom-instructions) to the remaining ${q(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 O_(n){return[...new Set([...n.modelSwitching.standardModels,...n.modelSwitching.premiumModels,...n.modelSwitching.lowCostModels,...n.modelSwitching.mediumCostModels,...n.modelSwitching.highCostModels])]}function F_(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 N_(n,e,t){let s=n;return e.modelSwitching.foundryWindowsSessions>0&&(s=he(s,2),t.push(`Used Microsoft Foundry / local models in ${q(e.modelSwitching.foundryWindowsSessions)} session${e.modelSwitching.foundryWindowsSessions===1?"":"s"}`)),e.modelSwitching.unknownProviderSessions>0&&(s=he(s,2),t.push(`Used models from unknown providers in ${q(e.modelSwitching.unknownProviderSessions)} session${e.modelSwitching.unknownProviderSessions===1?"":"s"}`)),s}function L_(n,e,t,s,o){e>=4?n.push(`${q(t)} of ${q(s)} repos customized (${o.stage4MinCustomizationRate*100}%+ with ${o.stage4MinCustomizedRepos}+ repos \u2192 Stage 4)`):e>=3?n.push(`${q(t)} of ${q(s)} repos customized (${o.stage3MinCustomizationRate*100}%+ with ${o.stage3MinCustomizedRepos}+ repos \u2192 Stage 3)`):t>0&&n.push(`${q(t)} of ${q(s)} repos with custom instructions or agents.md`)}function j_(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(R_(o,i,r)),a}function G_(n,e){let t=[],s=rt.customization,o=e,i=o?.totalWorkspaces??0,r=i-(o?.workspacesWithIssues??0),a=i>0?r/i:0,c=O_(n),m=I_(a,r,c.length,s);F_(t,i,c,s),m=N_(m,n,t),L_(t,m,r,i,s);let p=U_(m,i,r);return p=j_(p,m,n,c,o,i,r),{stage:m,evidence:t,tips:p}}function B_(n,e,t,s){return n>=s.stage4MinSessions&&e>=s.stage3MinModesUsed&&t>=s.stage3MinContextRefs}function q_(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 z_(n){return n.contextReferences.file+n.contextReferences.selection+n.contextReferences.symbol+n.contextReferences.codebase+n.contextReferences.workspace}function $_(n){return[n.modeUsage.ask>0,n.modeUsage.agent>0,n.modeUsage.cli>0].filter(Boolean).length}function W_(n,e,t,s){return e.sessions>=s.stage2MinSessions?(n.push(`${q(e.sessions)} sessions in the last 30 days`),2):t}function H_(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 (${q(e.applyUsage.totalApplies)}/${q(e.applyUsage.totalCodeBlocks)})`),o>=s.stage2MinApplyRatePct?he(t,2):t}function J_(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 V_(n,e,t,s,o){let i=e;return t>=o.stage3MinModesUsed&&(n.push(`Uses ${t} modes (ask/agent/cli)`),i=he(i,3)),s>=o.hasExplicitContextMinRefs&&(n.push(`${q(s)} explicit context references`),s>=o.stage3MinContextRefs&&(i=he(i,3))),i}function K_(n,e,t,s,o,i){return B_(e.sessions,t,s,o)?(i.push("Deep integration: regular usage with multi-mode and explicit context"),4):n}function Q_(n){let e=[],t=1,s=rt.workflowIntegration;t=W_(e,n,t,s),t=H_(e,n,t,s),J_(e,n);let o=z_(n),i=$_(n);return t=V_(e,t,i,o,s),t=K_(t,n,i,o,s,e),{stage:t,evidence:e,tips:q_(t,i,o,s)}}async function Ui(n,e,t=!0,s){let o=await e(t),i=o.last30Days,r=o_(i),a=y_(i),c=P_(i),m=E_(i,s),p=G_(i,n),g=Q_(i),h=Hy([r.stage,a.stage,c.stage,m.stage,p.stage,g.stage]);return{overallStage:h,overallLabel:Wy[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:m.stage,evidence:m.evidence,tips:m.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()}}var Zu=new ue("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=Me(n);e||console.log(w.bold.cyan(`
90
151
  \u{1F3AF} Copilot Token Tracker - Fluency Score
91
- `));let t=new Oe(e);t.show("Scanning for session files...");let s=await ye();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 Dt(s);t.done();let i=await Qo(s),r=await oi(i,async()=>o,!1);if(e){process.stdout.write(JSON.stringify(ni(r)));return}let l={1:w.red,2:w.yellow,3:w.blue,4:w.green},u=_=>{let C=Number.isFinite(_)&&_>=1&&_<=4?Math.floor(_):0,S="\u2588".repeat(C),I="\u2591".repeat(4-C);return S+I};console.log(w.bold("Overall Fluency Score")),console.log(w.dim("\u2500".repeat(55)));let m=l[r.overallStage]||w.white;console.log(` ${m(u(r.overallStage))} ${w.bold(r.overallLabel)}`),console.log(),console.log(w.bold("Category Breakdown")),console.log(w.dim("\u2500".repeat(55)));for(let _ of r.categories){let C=l[_.stage]||w.white;if(console.log(` ${_.icon} ${w.bold(_.category)}`),console.log(` ${C(u(_.stage))} Stage ${_.stage}/4`),_.evidence.length>0){let S=_.evidence.slice(0,3);for(let I of S)console.log(w.dim(` \u2713 ${I}`));_.evidence.length>3&&console.log(w.dim(` ... and ${_.evidence.length-3} more`))}if(_.tips.length>0&&_.stage<4){console.log(w.yellow(" \u{1F4A1} Tips:"));for(let S of _.tips.slice(0,2)){let I=S.replace(/\[([^\]]+)\]\([^)]+\)/g,"$1").replace(/\[▶ [^\]]+\]\([^)]+\)/g,"").trim();console.log(w.yellow(` \u2192 ${I}`))}}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(H(p.sessions))}`);let f=p.modeUsage.ask+p.modeUsage.edit+p.modeUsage.agent+p.modeUsage.cli;console.log(` Total interactions: ${w.bold(H(f))}`),p.modeUsage.ask>0&&console.log(` Ask mode: ${H(p.modeUsage.ask)}`),p.modeUsage.edit>0&&console.log(` Edit mode: ${H(p.modeUsage.edit)}`),p.modeUsage.agent>0&&console.log(` Agent mode: ${H(p.modeUsage.agent)}`),p.modeUsage.cli>0&&console.log(` CLI: ${H(p.modeUsage.cli)}`),p.toolCalls.total>0&&console.log(` Tool calls: ${H(p.toolCalls.total)}`),p.mcpTools.total>0&&console.log(` MCP tool calls: ${H(p.mcpTools.total)}`);let y=p.contextReferences.file+p.contextReferences.selection+p.contextReferences.codebase+p.contextReferences.workspace+p.contextReferences.terminal+p.contextReferences.vscode;y>0&&console.log(` Context references: ${H(y)}`),console.log(),console.log(w.dim(`Last updated: ${r.lastUpdated}
92
- `))});function Fy(n,e){let t=Xn(n),s=t.includes("opencode.db#")?t.split("#")[0]:t,o=null,i=0;for(let r of e){let l=Xn(r.path);s.startsWith(l)&&l.length>i&&(o={path:r.path,source:r.source},i=l.length)}return o}function Jr(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 du(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((l,u)=>{let m=l.padEnd(t[u]);return u===0?w.dim(m):m}).join(w.dim(" \u2502 "));console.log(" "+r)}console.log(" "+s)}var mu=new ie("diagnostics").description("Show session file search locations and per-location usage stats").action(async()=>{console.log(w.bold.cyan(`
152
+ `));let t=new Be(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 $t(s);t.done();let i=await Pi(s),r=await Ui(i,async()=>o,!1);if(e){process.stdout.write(JSON.stringify(Ii(r)));return}let a={1:w.red,2:w.yellow,3:w.blue,4:w.green},c=_=>{let C=Number.isFinite(_)&&_>=1&&_<=4?Math.floor(_):0,S="\u2588".repeat(C),E="\u2591".repeat(4-C);return S+E};console.log(w.bold("Overall Fluency Score")),console.log(w.dim("\u2500".repeat(55)));let m=a[r.overallStage]||w.white;console.log(` ${m(c(r.overallStage))} ${w.bold(r.overallLabel)}`),console.log(),console.log(w.bold("Category Breakdown")),console.log(w.dim("\u2500".repeat(55)));for(let _ of r.categories){let C=a[_.stage]||w.white;if(console.log(` ${_.icon} ${w.bold(_.category)}`),console.log(` ${C(c(_.stage))} Stage ${_.stage}/4`),_.evidence.length>0){let S=_.evidence.slice(0,3);for(let E of S)console.log(w.dim(` \u2713 ${E}`));_.evidence.length>3&&console.log(w.dim(` ... and ${_.evidence.length-3} more`))}if(_.tips.length>0&&_.stage<4){console.log(w.yellow(" \u{1F4A1} Tips:"));for(let S of _.tips.slice(0,2)){let E=S.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;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.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}
153
+ `))});function Y_(n,e){let t=So(n),s=t.includes("opencode.db#")?t.split("#")[0]:t,o=null,i=0;for(let r of e){let a=So(r.path);s.startsWith(a)&&a.length>i&&(o={path:r.path,source:r.source},i=a.length)}return o}function Ta(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 ed(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,c)=>{let m=a.padEnd(t[c]);return c===0?w.dim(m):m}).join(w.dim(" \u2502 "));console.log(" "+r)}console.log(" "+s)}var td=new ue("diagnostics").description("Show session file search locations and per-location usage stats").action(async()=>{console.log(w.bold.cyan(`
93
154
  \u{1F52C} Copilot Token Tracker - Diagnostics
94
- `));let n=Yo(),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"),Jr(P.path,55)]);if(du(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 Oe;r.show("Scanning for session files...");let l=await ye();if(r.done(),l.length===0){console.log(w.yellow("\u26A0\uFE0F No session files found in any search path."));return}let u=new Map;for(let P of e)u.set(P.path,{label:Jr(P.path,45),source:P.source,files:0,sessions:0,interactions:0,tokens:0});let m=0,p=0,f=0,y=0;for(let P=0;P<l.length;P++){((P+1)%25===0||P===l.length-1)&&r.update(`Processing: ${P+1}/${l.length} files...`);let U=Fy(l[P],n),te=U?U.path:"__unknown__";u.has(te)||u.set(te,{label:U?Jr(U.path,45):"(unknown)",source:U?U.source:"unknown",files:0,sessions:0,interactions:0,tokens:0});let j=u.get(te);j.files++,m++;let A=await bs(l[P]);A&&A.tokens>0&&(j.sessions++,j.interactions+=A.interactions,j.tokens+=Ye(A),p++,f+=A.interactions,y+=Ye(A))}r.done(),console.log(w.bold("\u{1F4CA} Stats per Search Location")),console.log(w.dim("\u2500".repeat(65)));let _=["Source","Files","Sessions","Turns","Tokens"],C=[18,6,9,8,14],S=[],I=[...u.values()].filter(P=>P.files>0).sort((P,U)=>U.tokens-P.tokens||P.source.localeCompare(U.source));for(let P of I)S.push([P.source,H(P.files),H(P.sessions),H(P.interactions),me(P.tokens)]);S.length===0?console.log(w.dim(" No session data found in any location.")):du(_,S,C),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(H(m))}`),console.log(` Files with data: ${w.bold(H(p))}`),console.log(` Total chat turns: ${w.bold(H(f))}`),console.log(` Total tokens: ${w.bold.yellow(me(y))}`),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 pu=new ie("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 ye();if(e.length===0){Ce(n)?process.stdout.write(JSON.stringify(Zo())):console.log(w.yellow("\u26A0\uFE0F No session files found."));return}let t=n.verbose===!0,{labels:s,days:o,allDaysMap:i}=await Xo(e,t),r=Tn(s,o,i);if(Ce(n)){process.stdout.write(JSON.stringify(r));return}console.log(w.bold.cyan(`
155
+ `));let n=vi(),e=n.filter(A=>A.exists),t=n.filter(A=>!A.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(A=>[A.source,A.exists?w.green("yes"):w.dim("no"),Ta(A.path,55)]);if(ed(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 Be;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 c=new Map;for(let A of e)c.set(A.path,{label:Ta(A.path,45),source:A.source,files:0,sessions:0,interactions:0,tokens:0});let m=0,p=0,g=0,h=0;for(let A=0;A<a.length;A++){((A+1)%25===0||A===a.length-1)&&r.update(`Processing: ${A+1}/${a.length} files...`);let R=Y_(a[A],n),j=R?R.path:"__unknown__";c.has(j)||c.set(j,{label:R?Ta(R.path,45):"(unknown)",source:R?R.source:"unknown",files:0,sessions:0,interactions:0,tokens:0});let F=c.get(j);F.files++,m++;let P=await ds(a[A]);P&&P.tokens>0&&(F.sessions++,F.interactions+=P.interactions,F.tokens+=it(P),p++,g+=P.interactions,h+=it(P))}r.done(),console.log(w.bold("\u{1F4CA} Stats per Search Location")),console.log(w.dim("\u2500".repeat(65)));let _=["Source","Files","Sessions","Turns","Tokens"],C=[18,6,9,8,14],S=[],E=[...c.values()].filter(A=>A.files>0).sort((A,R)=>R.tokens-A.tokens||A.source.localeCompare(R.source));for(let A of E)S.push([A.source,Y(A.files),Y(A.sessions),Y(A.interactions),fe(A.tokens)]);S.length===0?console.log(w.dim(" No session data found in any location.")):ed(_,S,C),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(m))}`),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(fe(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 sd=new ue("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){Me(n)?process.stdout.write(JSON.stringify(xi())):console.log(w.yellow("\u26A0\uFE0F No session files found."));return}let t=n.verbose===!0,{labels:s,days:o,allDaysMap:i}=await Ai(e,t),r=Jn(s,o,i);if(Me(n)){process.stdout.write(JSON.stringify(r));return}console.log(w.bold.cyan(`
95
156
  \u{1F4CA} Token Usage Summary
96
- `));let l=r.periods||{},u=[{key:"day",label:"Daily (last 30 days)"},{key:"week",label:"Weekly (last 6 weeks)"},{key:"month",label:"Monthly (last 12 months)"}];for(let{key:m,label:p}of u){let f=l[m];if(!f)continue;console.log(w.bold(p)),console.log(w.dim("\u2500".repeat(60)));let y=(f.labels||[]).map((U,te)=>{let j=f.tokensData?.[te]??0,A=f.costData?.[te]??0;return{Period:U,Tokens:H(j),Cost:`$${A.toFixed(2)}`}});y.length>0&&console.table(y);let _=f.totalTokens??0,C=f.totalCost??0,S=f.periodCount??0,I=S>0?Math.round(_/S):0,P=S>0?C/S:0;console.log(w.bold("Totals:")),console.log(` Total Tokens: ${H(_)}`),console.log(` Total Cost: $${C.toFixed(2)}`),console.log(` Avg per Period: ${H(I)} tokens, $${P.toFixed(2)} cost`),console.log()}});var gu=new ie("usage-analysis").description("Output usage analysis stats for the usage analysis webview").option("--json","Output raw JSON (for machine consumption)").action(async n=>{if(!Ce(n)){process.stderr.write(`Use --json flag for usage analysis data output
97
- `);return}let e=await ye(),t=new Date;if(e.length===0){process.stdout.write(JSON.stringify(ei(t)));return}let s=await Dt(e),o=si(s,t);process.stdout.write(JSON.stringify(o))});var Me=v(require("fs")),$=v(require("path")),hu=require("url");var Oy=4,yu=1;function Ny(n){try{if(!Me.existsSync(n))return[];let e=Me.readFileSync(n,"utf-8"),s=JSON.parse(e)?.servers;return!s||typeof s!="object"?[]:Object.keys(s)}catch{return[]}}function Ly(n){return[$.join(n,".vscode","mcp.json"),$.join(n,".mcp.json"),$.join(n,".vs","mcp.json"),$.join(n,".cursor","mcp.json")]}function Gy(){let n=process.env.USERPROFILE??process.env.HOME??"";return n?[$.join(n,".mcp.json")]:[]}function ri(n){let e=[],t=new Map,s=new Set,o=[...n.flatMap(Ly),...Gy()];for(let i of o)for(let r of Ny(i)){t.has(r)||t.set(r,[]);let l=t.get(r);l.includes(i)||l.push(i),s.has(r)||(s.add(r),e.push({name:`mcp__${r}`,description:`MCP server: ${r}`,source:"mcp",server:r,configFiles:l}))}return e}function jy(n,e){try{let t=Me.readFileSync(n,"utf-8"),s=By(t);if(s)return s}catch{}return e}function By(n){let e=qy(n);if(e!==void 0){let o=$y(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 qy(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 zy(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 $y(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 l=zy(e,t+1,o);return l.length===0?void 0:r[1]===">"?l.join(" "):l.join(`
98
- `)}return i?i.replace(/^["']|["']$/g,""):void 0}}function Vr(n){try{if(!Me.existsSync(n))return;let e=Me.readFileSync(n,"utf-8");return JSON.parse(e)}catch{return}}function ii(n,e,t,s){let o;try{o=Me.readdirSync(e,{withFileTypes:!0})}catch{return[]}let i=[];for(let r of o){if(!r.isDirectory())continue;let l=$.join(e,r.name,"SKILL.md");if(!Me.existsSync(l)||t.has(l))continue;t.add(l);let u=jy(l,`Skill: ${r.name}`),m=$.relative(n,l).replace(/\\/g,"/"),p={name:r.name,description:u,source:"skill",skillPath:m,configFiles:[l]};s&&(p.pluginName=s),i.push(p)}return i}var Wy=new Set([".git","node_modules","dist","out","build",".next",".venv","venv","target",".idea",".vscode"]),Hy=4,Jy=400;function Vy(n,e=Hy){let t=[],s=new Set,o=0,i=(r,l)=>{if(l>e||s.has(r)||o>=Jy)return;s.add(r),o++;let u;try{u=Me.readdirSync(r,{withFileTypes:!0})}catch{return}for(let m of u){if(!m.isDirectory()||Wy.has(m.name))continue;let p=$.join(r,m.name);if(m.name==="skills"){t.push(p);continue}i(p,l+1)}};return i(n,0),t}function fu(n,e,t){if(!Me.existsSync(e))return[];let s=[];s.push(...ii(n,e,t));for(let o of Vy(e))s.push(...ii(n,o,t));return s}function _u(n,e){let t=n.trim();return t?(t.startsWith("~")&&(t==="~"?t=e:(t.startsWith("~/")||t.startsWith("~\\"))&&(t=$.join(e,t.slice(2)))),t=t.replace(/\$\{env:([^}]+)\}/gi,(s,o)=>process.env[o]??""),t=t.replace(/%([^%]+)%/g,(s,o)=>process.env[o]??""),$.isAbsolute(t)||(t=$.resolve(e,t)),t):""}function Ky(n){let e=process.env.APPDATA??$.join(n,"AppData","Roaming");return process.platform==="win32"?[$.join(e,"Code","User","settings.json"),$.join(e,"Code - Insiders","User","settings.json")]:process.platform==="darwin"?[$.join(n,"Library","Application Support","Code","User","settings.json"),$.join(n,"Library","Application Support","Code - Insiders","User","settings.json")]:[$.join(n,".config","Code","User","settings.json"),$.join(n,".config","Code - Insiders","User","settings.json")]}function Qy(n){let e=new Set;for(let t of Ky(n)){let o=Vr(t)?.["chat.agentSkillsLocations"];if(Array.isArray(o))for(let i of o){if(typeof i!="string")continue;let r=_u(i,n);r&&e.add(r)}}return[...e]}var Yy=[".github/skills",".claude/skills",".agents/skills"];function Xy(){let n=process.env.USERPROFILE??process.env.HOME??"";return n?[$.join(n,".copilot","skills"),$.join(n,".claude","skills"),$.join(n,".agents","skills")]:[]}function Zy(n){try{let e=new URL(n);return e.protocol!=="file:"?void 0:$.normalize((0,hu.fileURLToPath)(e))}catch{return}}function e_(n){let e=Vr($.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=>$.resolve(n,s)).filter(s=>Me.existsSync(s))}function t_(n){let e=Vr($.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=Zy(i);if(!r||!Me.existsSync(r))continue;let l=typeof o.name=="string"&&o.name?o.name:$.basename(r);for(let u of e_(r))t.push({dir:u,pluginName:l})}return t}function s_(){let n=process.env.USERPROFILE??process.env.HOME??"";if(!n)return[];let e=[$.join(n,".vscode","agent-plugins"),$.join(n,".vscode-insiders","agent-plugins")],t=[];for(let s of e)t.push(...t_(s));return t}function ai(n,e){let t=[],s=new Set;for(let l of n)for(let u of Yy){let m=$.join(l,...u.split("/"));Me.existsSync(m)&&t.push(...ii(l,m,s))}let o=process.env.USERPROFILE??process.env.HOME??"";for(let l of Xy())t.push(...fu(o,l,s));for(let{dir:l,pluginName:u}of s_())t.push(...ii(o,l,s,u));let i=Array.isArray(e?.additionalSkillDirs)?e.additionalSkillDirs:[],r=[...Qy(o),...i.filter(l=>typeof l=="string").map(l=>_u(l,o)).filter(Boolean)];for(let l of r)t.push(...fu(o,l,s));return t}function bu(n){return Math.round(n.reduce((e,t)=>e+(t.name.length+t.description.length+10),0)/Oy)}function n_(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;return e}function o_(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(y=>y.source==="mcp"&&y.server===o),r=i.filter(y=>y.name===`mcp__${o}`?(t.mcpTools.byServer[o]??0)>=yu:e.has(y.name)),l=[...new Set(i.flatMap(y=>y.configFiles??[]))],u=i.find(y=>y.extensionId),m=u?.extensionId,p=u?.enabled,f=u?.extensionActive;return{server:o,availableToolCount:i.length,usedToolCount:r.length,configFiles:l.length>0?l:void 0,extensionId:m,enabled:p,extensionActive:f}}).filter(o=>o.enabled!==!1)}function i_(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]=bu(o);return{totalTokens:Object.values(t).reduce((s,o)=>s+o,0),byServer:t}}function r_(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:bu(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 a_(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 li(n,e,t){let s=n_(e),o=Object.entries(s).map(([f,y])=>({name:f,count:y})).sort((f,y)=>y.count-f.count),i=new Set(Object.keys(s)),r=n.filter(f=>f.source==="skill"?!i.has(f.name):f.source==="mcp"&&f.server?f.enabled===!1?!1:f.name===`mcp__${f.server}`?(e.mcpTools.byServer[f.server]??0)<yu:!i.has(f.name):!i.has(f.name)),l=o_(n,i,e),u=a_(n,i),m=i_(r),p=r_(l,r,t);return{windowDays:t,availableTools:n,usedTools:o,unusedTools:r,underusedMcpServers:l,underusedAgentPlugins:u,estimatedPromptBloat:m,recommendations:p}}var vn=30,Cu=new ie("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: ${vn})`,String(vn)).action(async n=>{let e=Math.max(1,parseInt(n.window??String(vn),10)||vn),t=process.cwd(),s=await ye(),i=(s.length>0?await Dt(s):null)?.last30Days,r=[t],l=ri(r),u=ai(r),m=[...l,...u];if(m.length===0&&!i){Ce(n)?process.stdout.write(JSON.stringify(ci(e))):process.stderr.write(`No MCP servers or skills found in the current directory, and no session data available.
99
- `);return}let f=li(m,i??{sessions:0,toolCalls:{total:0,byTool:{}},modeUsage:{ask:0,edit:0,agent:0,plan:0,customAgent:0,cli:0},contextReferences:{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,byKind:{},byPath:{},copilotInstructions:0,agentsMd:0},mcpTools:{total:0,byServer:{},byTool:{}},modelSwitching:{modelsPerSession:[],totalSessions:0,averageModelsPerSession:0,maxModelsPerSession:0,minModelsPerSession:0,switchingFrequency:0,standardModels:[],premiumModels:[],unknownModels:[],mixedTierSessions:0,standardRequests:0,premiumRequests:0,unknownRequests:0,totalRequests:0,lowCostModels:[],mediumCostModels:[],highCostModels:[],mixedCostSessions: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}},e);Ce(n)?process.stdout.write(JSON.stringify(f)):l_(f)});function ci(n=vn){return{windowDays:n,availableTools:[],usedTools:[],unusedTools:[],underusedMcpServers:[],estimatedPromptBloat:{totalTokens:0,byServer:{}},recommendations:[]}}function l_(n){let{availableTools:e,usedTools:t,unusedTools:s,underusedMcpServers:o,estimatedPromptBloat:i,recommendations:r,windowDays:l}=n;if(process.stdout.write(`
100
- Tool Curation Report (last ${l} days)
157
+ `));let a=r.periods||{},c=[{key:"day",label:"Daily (last 30 days)"},{key:"week",label:"Weekly (last 6 weeks)"},{key:"month",label:"Monthly (last 12 months)"}];for(let{key:m,label:p}of c){let g=a[m];if(!g)continue;console.log(w.bold(p)),console.log(w.dim("\u2500".repeat(60)));let h=(g.labels||[]).map((R,j)=>{let F=g.tokensData?.[j]??0,P=g.costData?.[j]??0;return{Period:R,Tokens:Y(F),Cost:`$${P.toFixed(2)}`}});h.length>0&&console.table(h);let _=g.totalTokens??0,C=g.totalCost??0,S=g.periodCount??0,E=S>0?Math.round(_/S):0,A=S>0?C/S:0;console.log(w.bold("Totals:")),console.log(` Total Tokens: ${Y(_)}`),console.log(` Total Cost: $${C.toFixed(2)}`),console.log(` Avg per Period: ${Y(E)} tokens, $${A.toFixed(2)} cost`),console.log()}});var nd=new ue("usage-analysis").description("Output usage analysis stats for the usage analysis webview").option("--json","Output raw JSON (for machine consumption)").action(async n=>{if(!Me(n)){process.stderr.write(`Use --json flag for usage analysis data output
158
+ `);return}let e=await ke(),t=new Date;if(e.length===0){process.stdout.write(JSON.stringify(Di(t)));return}let s=await $t(e),o=Ri(s,t);process.stdout.write(JSON.stringify(o))});var xe=T(require("fs")),K=T(require("path")),id=require("url");var X_=4,rd=1;function Z_(n){try{if(!xe.existsSync(n))return[];let e=xe.readFileSync(n,"utf-8"),s=JSON.parse(e)?.servers;return!s||typeof s!="object"?[]:Object.keys(s)}catch{return[]}}function eC(n){return[K.join(n,".vscode","mcp.json"),K.join(n,".mcp.json"),K.join(n,".vs","mcp.json"),K.join(n,".cursor","mcp.json")]}function tC(){let n=process.env.USERPROFILE??process.env.HOME??"";return n?[K.join(n,".mcp.json")]:[]}function Fi(n){let e=[],t=new Map,s=new Set,o=[...n.flatMap(eC),...tC()];for(let i of o)for(let r of Z_(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 sC(n,e){try{let t=xe.readFileSync(n,"utf-8"),s=nC(t);if(s)return s}catch{}return e}function nC(n){let e=oC(n);if(e!==void 0){let o=rC(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 oC(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 iC(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 rC(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=iC(e,t+1,o);return a.length===0?void 0:r[1]===">"?a.join(" "):a.join(`
159
+ `)}return i?i.replace(/^["']|["']$/g,""):void 0}}function Ma(n){try{if(!xe.existsSync(n))return;let e=xe.readFileSync(n,"utf-8");return JSON.parse(e)}catch{return}}function Oi(n,e,t,s){let o;try{o=xe.readdirSync(e,{withFileTypes:!0})}catch{return[]}let i=[];for(let r of o){if(!r.isDirectory())continue;let a=K.join(e,r.name,"SKILL.md");if(!xe.existsSync(a)||t.has(a))continue;t.add(a);let c=sC(a,`Skill: ${r.name}`),m=K.relative(n,a).replace(/\\/g,"/"),p={name:r.name,description:c,source:"skill",skillPath:m,configFiles:[a]};s&&(p.pluginName=s),i.push(p)}return i}var aC=new Set([".git","node_modules","dist","out","build",".next",".venv","venv","target",".idea",".vscode"]),lC=4,cC=400;function uC(n,e=lC){let t=[],s=new Set,o=0,i=(r,a)=>{if(a>e||s.has(r)||o>=cC)return;s.add(r),o++;let c;try{c=xe.readdirSync(r,{withFileTypes:!0})}catch{return}for(let m of c){if(!m.isDirectory()||aC.has(m.name))continue;let p=K.join(r,m.name);if(m.name==="skills"){t.push(p);continue}i(p,a+1)}};return i(n,0),t}function od(n,e,t){if(!xe.existsSync(e))return[];let s=[];s.push(...Oi(n,e,t));for(let o of uC(e))s.push(...Oi(n,o,t));return s}function ad(n,e){let t=n.trim();return t?(t.startsWith("~")&&(t==="~"?t=e:(t.startsWith("~/")||t.startsWith("~\\"))&&(t=K.join(e,t.slice(2)))),t=t.replace(/\$\{env:([^}]+)\}/gi,(s,o)=>process.env[o]??""),t=t.replace(/%([^%]+)%/g,(s,o)=>process.env[o]??""),K.isAbsolute(t)||(t=K.resolve(e,t)),t):""}function dC(n){let e=process.env.APPDATA??K.join(n,"AppData","Roaming");return process.platform==="win32"?[K.join(e,"Code","User","settings.json"),K.join(e,"Code - Insiders","User","settings.json")]:process.platform==="darwin"?[K.join(n,"Library","Application Support","Code","User","settings.json"),K.join(n,"Library","Application Support","Code - Insiders","User","settings.json")]:[K.join(n,".config","Code","User","settings.json"),K.join(n,".config","Code - Insiders","User","settings.json")]}function mC(n){let e=new Set;for(let t of dC(n)){let o=Ma(t)?.["chat.agentSkillsLocations"];if(Array.isArray(o))for(let i of o){if(typeof i!="string")continue;let r=ad(i,n);r&&e.add(r)}}return[...e]}var pC=[".github/skills",".claude/skills",".agents/skills"];function gC(){let n=process.env.USERPROFILE??process.env.HOME??"";return n?[K.join(n,".copilot","skills"),K.join(n,".claude","skills"),K.join(n,".agents","skills")]:[]}function fC(n){try{let e=new URL(n);return e.protocol!=="file:"?void 0:K.normalize((0,id.fileURLToPath)(e))}catch{return}}function hC(n){let e=Ma(K.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=>K.resolve(n,s)).filter(s=>xe.existsSync(s))}function yC(n){let e=Ma(K.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=fC(i);if(!r||!xe.existsSync(r))continue;let a=typeof o.name=="string"&&o.name?o.name:K.basename(r);for(let c of hC(r))t.push({dir:c,pluginName:a})}return t}function _C(){let n=process.env.USERPROFILE??process.env.HOME??"";if(!n)return[];let e=[K.join(n,".vscode","agent-plugins"),K.join(n,".vscode-insiders","agent-plugins")],t=[];for(let s of e)t.push(...yC(s));return t}function Ni(n,e){let t=[],s=new Set;for(let a of n)for(let c of pC){let m=K.join(a,...c.split("/"));xe.existsSync(m)&&t.push(...Oi(a,m,s))}let o=process.env.USERPROFILE??process.env.HOME??"";for(let a of gC())t.push(...od(o,a,s));for(let{dir:a,pluginName:c}of _C())t.push(...Oi(o,a,s,c));let i=Array.isArray(e?.additionalSkillDirs)?e.additionalSkillDirs:[],r=[...mC(o),...i.filter(a=>typeof a=="string").map(a=>ad(a,o)).filter(Boolean)];for(let a of r)t.push(...od(o,a,s));return t}function ld(n){return Math.round(n.reduce((e,t)=>e+(t.name.length+t.description.length+10),0)/X_)}function CC(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;return e}function bC(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)>=rd:e.has(h.name)),a=[...new Set(i.flatMap(h=>h.configFiles??[]))],c=i.find(h=>h.extensionId),m=c?.extensionId,p=c?.enabled,g=c?.extensionActive;return{server:o,availableToolCount:i.length,usedToolCount:r.length,configFiles:a.length>0?a:void 0,extensionId:m,enabled:p,extensionActive:g}}).filter(o=>o.enabled!==!1)}function kC(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]=ld(o);return{totalTokens:Object.values(t).reduce((s,o)=>s+o,0),byServer:t}}function SC(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:ld(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 wC(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 Li(n,e,t){let s=CC(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)<rd:!i.has(g.name):!i.has(g.name)),a=bC(n,i,e),c=wC(n,i),m=kC(r),p=SC(a,r,t);return{windowDays:t,availableTools:n,usedTools:o,unusedTools:r,underusedMcpServers:a,underusedAgentPlugins:c,estimatedPromptBloat:m,recommendations:p}}var Kn=30,cd=new ue("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: ${Kn})`,String(Kn)).action(async n=>{let e=Math.max(1,parseInt(n.window??String(Kn),10)||Kn),t=process.cwd(),s=await ke(),i=(s.length>0?await $t(s):null)?.last30Days,r=[t],a=Fi(r),c=Ni(r),m=[...a,...c];if(m.length===0&&!i){Me(n)?process.stdout.write(JSON.stringify(ji(e))):process.stderr.write(`No MCP servers or skills found in the current directory, and no session data available.
160
+ `);return}let p=Li(m,i??us(),e);Me(n)?process.stdout.write(JSON.stringify(p)):TC(p)});function ji(n=Kn){return{windowDays:n,availableTools:[],usedTools:[],unusedTools:[],underusedMcpServers:[],underusedAgentPlugins:[],estimatedPromptBloat:{totalTokens:0,byServer:{}},recommendations:[]}}function TC(n){let{availableTools:e,usedTools:t,unusedTools:s,underusedMcpServers:o,estimatedPromptBloat:i,recommendations:r,windowDays:a}=n;if(process.stdout.write(`
161
+ Tool Curation Report (last ${a} days)
101
162
  `),process.stdout.write("=".repeat(50)+`
102
163
 
103
164
  `),process.stdout.write(`Available tools: ${e.length}
@@ -106,16 +167,16 @@ Tool Curation Report (last ${l} days)
106
167
  `),i.totalTokens>0&&process.stdout.write(`Est. overhead: ~${i.totalTokens.toLocaleString()} tokens/interaction
107
168
  `),process.stdout.write(`
108
169
  `),o.length>0){let m=o.filter(p=>p.usedToolCount===0);if(m.length>0){process.stdout.write(`Unused MCP Servers:
109
- `);for(let p of m){let f=i.byServer[p.server],y=f?` (~${f.toLocaleString()} tokens overhead)`:"";process.stdout.write(` \u2022 ${p.server}${y}
170
+ `);for(let p of m){let g=i.byServer[p.server],h=g?` (~${g.toLocaleString()} tokens overhead)`:"";process.stdout.write(` \u2022 ${p.server}${h}
110
171
  `)}process.stdout.write(`
111
- `)}}let u=s.filter(m=>m.source==="skill");if(u.length>0){process.stdout.write(`Unused Skills:
112
- `);for(let m of u)process.stdout.write(` \u2022 ${m.name}
172
+ `)}}let c=s.filter(m=>m.source==="skill");if(c.length>0){process.stdout.write(`Unused Skills:
173
+ `);for(let m of c)process.stdout.write(` \u2022 ${m.name}
113
174
  `);process.stdout.write(`
114
175
  `)}if(r.length>0){process.stdout.write(`Recommendations:
115
176
  `);for(let m of r){let p=m.estimatedTokenSavings?` (saves ~${m.estimatedTokenSavings.toLocaleString()} tokens/interaction)`:"";process.stdout.write(` \u2192 ${m.reason}${p}
116
177
  `)}process.stdout.write(`
117
- `)}if(t.length>0){process.stdout.write(`Top Used Tools (last ${l}d):
178
+ `)}if(t.length>0){process.stdout.write(`Top Used Tools (last ${a}d):
118
179
  `);for(let m of t.slice(0,10))process.stdout.write(` ${String(m.count).padStart(5)}x ${m.name}
119
180
  `);process.stdout.write(`
120
- `)}}var ku=new ie("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(!Ce(n)){process.stderr.write(`Use --json flag for all data output
121
- `);return}let e=new Date,t=await ye();if(t.length===0){let j={details:su(e),chart:Zo(e),usage:ei(e),fluency:nu(),curation:ci()};process.stdout.write(JSON.stringify(j));return}let[s,{labels:o,days:i,allDaysMap:r},l]=await Promise.all([xt(t),Xo(t),Dt(t)]),u=Tn(o,i,r),m=ti(s),p=si(l,e),f=await Qo(t),y=await oi(f,async()=>l,!1),_=ni(y),C=process.cwd(),S=ri([C]),I=ai([C]),P=[...S,...I],U=P.length>0?li(P,l.last30Days,30):ci(),te={details:m,chart:u,usage:p,fluency:_,curation:U};process.stdout.write(JSON.stringify(te))});var Et=v(require("fs")),Yr=v(require("path")),wu=v(require("os"));var Tu=Yr.join(wu.homedir(),".copilot-token-tracker"),Qr=Yr.join(Tu,"omp-segment-cache.json"),Kr=5;function c_(n){try{if(!Et.existsSync(Qr))return null;let e=JSON.parse(Et.readFileSync(Qr,"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 Su(n){try{Et.mkdirSync(Tu,{recursive:!0}),Et.writeFileSync(Qr,JSON.stringify(n),"utf-8")}catch{}}var Mu=new ie("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: ${Kr})`,`${Kr}`).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").action(async n=>{let e=Number(n.ttl),t=Number.isFinite(e)&&e>=0?e:Kr;if(!n.refresh){let u=c_(t);if(u){if(n.hideZero&&u.todayTokens===0&&u.last30DaysTokens===0)return;process.stdout.write(u.formatted);return}}let s=await ye(),o=0,i=0,r=0;if(s.length>0){let u=await xt(s);o=u.today.tokens,i=u.month.tokens,r=u.last30Days.tokens}if(n.hideZero&&o===0&&r===0){Su({updatedAt:new Date().toISOString(),formatted:"",todayTokens:o,thisMonthTokens:i,last30DaysTokens:r});return}let l=`${me(o)} today \xB7 ${me(i)} month \xB7 ${me(r)} 30d`;Su({updatedAt:new Date().toISOString(),formatted:l,todayTokens:o,thisMonthTokens:i,last30DaysTokens:r}),process.stdout.write(l)});var d_=vu(),ve=new ie;ve.name("copilot-token-tracker").description("Analyze GitHub Copilot token usage from local session files").version(d_.version).option("--no-cache","Bypass the session file cache and re-parse everything");ve.hook("preAction",()=>{ve.opts().cache===!1?Lr():Gr()});ve.hook("postAction",()=>{jr()});ve.addCommand(tu);ve.addCommand(ou);ve.addCommand(iu);ve.addCommand(uu);ve.addCommand(mu);ve.addCommand(pu);ve.addCommand(gu);ve.addCommand(ku);ve.addCommand(Mu);ve.addCommand(Cu);ve.parse();
181
+ `)}}var ud=new ue("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(!Me(n)){process.stderr.write(`Use --json flag for all data output
182
+ `);return}let e=new Date,t=await ke();if(t.length===0){let F={details:Wu(e),chart:xi(e),usage:Di(e),fluency:Hu(),curation:ji()};process.stdout.write(JSON.stringify(F));return}let[s,{labels:o,days:i,allDaysMap:r},a]=await Promise.all([zt(t),Ai(t),$t(t)]),c=Jn(o,i,r),m=Ei(s),p=Ri(a,e),g=await Pi(t),h=await Ui(g,async()=>a,!1),_=Ii(h),C=process.cwd(),S=Fi([C]),E=Ni([C]),A=[...S,...E],R=A.length>0?Li(A,a.last30Days,30):ji(),j={details:m,chart:c,usage:p,fluency:_,curation:R};process.stdout.write(JSON.stringify(j))});var Wt=T(require("fs")),Aa=T(require("path")),md=T(require("os"));var pd=Aa.join(md.homedir(),".copilot-token-tracker"),va=Aa.join(pd,"omp-segment-cache.json"),Pa=5;function MC(n){try{if(!Wt.existsSync(va))return null;let e=JSON.parse(Wt.readFileSync(va,"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 dd(n){try{Wt.mkdirSync(pd,{recursive:!0}),Wt.writeFileSync(va,JSON.stringify(n),"utf-8")}catch{}}var gd=new ue("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: ${Pa})`,`${Pa}`).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").action(async n=>{let e=Number(n.ttl),t=Number.isFinite(e)&&e>=0?e:Pa;if(!n.refresh){let c=MC(t);if(c){if(n.hideZero&&c.todayTokens===0&&c.last30DaysTokens===0)return;process.stdout.write(c.formatted);return}}let s=await ke(),o=0,i=0,r=0;if(s.length>0){let c=await zt(s);o=c.today.tokens,i=c.month.tokens,r=c.last30Days.tokens}if(n.hideZero&&o===0&&r===0){dd({updatedAt:new Date().toISOString(),formatted:"",todayTokens:o,thisMonthTokens:i,last30DaysTokens:r});return}let a=`${fe(o)} today \xB7 ${fe(i)} month \xB7 ${fe(r)} 30d`;dd({updatedAt:new Date().toISOString(),formatted:a,todayTokens:o,thisMonthTokens:i,last30DaysTokens:r}),process.stdout.write(a)});var vC=fd(),De=new ue;De.name("copilot-token-tracker").description("Analyze GitHub Copilot token usage from local session files").version(vC.version).option("--no-cache","Bypass the session file cache and re-parse everything");De.hook("preAction",()=>{De.opts().cache===!1?ga():fa()});De.hook("postAction",()=>{ha()});De.addCommand($u);De.addCommand(Ju);De.addCommand(Vu);De.addCommand(Zu);De.addCommand(td);De.addCommand(sd);De.addCommand(nd);De.addCommand(ud);De.addCommand(gd);De.addCommand(cd);De.parse();