@rajbos/ai-engineering-fluency 0.2.11 → 0.2.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/cli.js +86 -73
- package/package.json +3 -2
package/dist/cli.js
CHANGED
|
@@ -1,100 +1,113 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var rd=Object.create;var xa=Object.defineProperty;var ad=Object.getOwnPropertyDescriptor;var ld=Object.getOwnPropertyNames;var cd=Object.getPrototypeOf,ud=Object.prototype.hasOwnProperty;var be=(n,e)=>()=>{try{return e||n((e={exports:{}}).exports,e),e.exports}catch(t){throw e=0,t}};var dd=(n,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of ld(e))!ud.call(n,o)&&o!==t&&xa(n,o,{get:()=>e[o],enumerable:!(s=ad(e,o))||s.enumerable});return n};var P=(n,e,t)=>(t=n!=null?rd(cd(n)):{},dd(e||!n||!n.__esModule?xa(t,"default",{value:n,enumerable:!0}):t,n));var Fs=be((to,Gt)=>{var Zn=void 0,eo=function(n){return Zn||(Zn=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)}),Gt=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":od(b,M?1:0);break;case"number":td(b,M);break;case"string":sd(b,M,-1,-1);break;case"object":if(M===null)Ma(b);else if(M.length!=null){var E=On(M.length);D.set(M,E),nd(b,E,M.length,-1),vs(E)}else jn(b,"Wrong API use : tried to return a value of an unknown type ("+M+").",-1);break;default:Ma(b)}}function c(b,M){for(var E=[],R=0;R<b;R+=1){var q=rt(M+4*R,"i32"),K=Qu(q);if(K===1||K===2)q=ed(q);else if(K===3)q=Xu(q);else if(K===4){K=q,q=Yu(K),K=Zu(K);for(var ze=new Uint8Array(q),Le=0;Le<q;Le+=1)ze[Le]=D[K+Le];q=ze}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=Fn(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:li(E),R=M?ii(E+"/"+M):E),M=Xr(!0,!0),R=Mu(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}En(R,M|146),E=Zt(R,577),pa(E,b,0,b.length,0),gi(E),En(R,M)}}this.handleError(F(this.filename,k)),this.db=rt(k,"i32"),va(this.db),this.gb={},this.Sa={}}var k=Ft(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"]),ae=T("sqlite3_changes","number",["number"]),ke=T("sqlite3_prepare_v2","number",["number","string","number","number","number"]),Ca=T("sqlite3_sql","string",["number"]),Iu=T("sqlite3_normalized_sql","string",["number"]),ka=T("sqlite3_prepare_v2","number",["number","number","number","number","number"]),Uu=T("sqlite3_bind_text","number",["number","number","number","number","number"]),Sa=T("sqlite3_bind_blob","number",["number","number","number","number","number"]),Fu=T("sqlite3_bind_double","number",["number","number","number"]),Ou=T("sqlite3_bind_int","number",["number","number","number"]),Nu=T("sqlite3_bind_parameter_index","number",["number","string"]),Lu=T("sqlite3_step","number",["number"]),Gu=T("sqlite3_errmsg","string",["number"]),ju=T("sqlite3_column_count","number",["number"]),Bu=T("sqlite3_data_count","number",["number"]),qu=T("sqlite3_column_double","number",["number","number"]),wa=T("sqlite3_column_text","string",["number","number"]),$u=T("sqlite3_column_blob","number",["number","number"]),zu=T("sqlite3_column_bytes","number",["number","number"]),Wu=T("sqlite3_column_type","number",["number","number"]),Hu=T("sqlite3_column_name","string",["number","number"]),Ju=T("sqlite3_reset","number",["number"]),Vu=T("sqlite3_clear_bindings","number",["number"]),Ku=T("sqlite3_finalize","number",["number"]),Ta=T("sqlite3_create_function_v2","number","number string number number number number number number number".split(" ")),Qu=T("sqlite3_value_type","number",["number"]),Yu=T("sqlite3_value_bytes","number",["number"]),Xu=T("sqlite3_value_text","string",["number"]),Zu=T("sqlite3_value_blob","number",["number"]),ed=T("sqlite3_value_double","number",["number"]),td=T("sqlite3_result_double","",["number","number"]),Ma=T("sqlite3_result_null","",["number"]),sd=T("sqlite3_result_text","",["number","string","number","number"]),nd=T("sqlite3_result_blob","",["number","number","number","number"]),od=T("sqlite3_result_int","",["number","number"]),jn=T("sqlite3_result_error","",["number","string","number"]),Pa=T("sqlite3_aggregate_context","number",["number","number"]),va=T("RegisterExtensionFunctions","number",["number"]),Aa=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=Lu(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),qu(this.Qa,b)},d.prototype.Ob=function(b){if(b==null&&(b=this.Oa,this.Oa+=1),b=wa(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),wa(this.Qa,b)},d.prototype.getBlob=function(b){b==null&&(b=this.Oa,this.Oa+=1);var M=zu(this.Qa,b);b=$u(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=Bu(this.Qa),R=0;R<E;R+=1)switch(Wu(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=ju(this.Qa),E=0;E<M;E+=1)b.push(Hu(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 Ca(this.Qa)},d.prototype.Pb=function(){return Iu(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=Fn(b),this.mb.push(b),this.db.handleError(Uu(this.Qa,M,b,-1,0))},d.prototype.Fb=function(b,M){M==null&&(M=this.Oa,this.Oa+=1);var E=On(b.length);D.set(b,E),this.mb.push(E),this.db.handleError(Sa(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)?Ou:Fu)(this.Qa,M,b))},d.prototype.Ib=function(b){b==null&&(b=this.Oa,this.Oa+=1),Sa(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=Nu(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(),Vu(this.Qa)===0&&Ju(this.Qa)===0},d.prototype.freemem=function(){for(var b;(b=this.mb.pop())!==void 0;)vs(b)},d.prototype.Ya=function(){this.freemem();var b=Ku(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=Ln(),M=Ft(4);Ss(k),Ss(M);try{this.db.handleError(ka(this.db.db,this.lb,-1,k,M)),this.lb=rt(M,"i32");var E=rt(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{Nn(b)}},g.prototype.ob=function(){vs(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=Fn(b);var ze=Ft(4);for(b=[];rt(K,"i8")!==0;){Ss(k),Ss(ze),this.handleError(ka(this.db,K,-1,k,ze));var Le=rt(k,"i32");if(K=rt(ze,"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&&vs(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(Ss(k),this.handleError(ke(this.db,b,-1,k,0)),b=rt(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(Ct),this.Sa={},this.handleError(V(this.db));var b=Pu(this.filename);return this.handleError(F(this.filename,k)),this.db=rt(k,"i32"),va(this.db),b},h.prototype.close=function(){this.db!==null&&(Object.values(this.gb).forEach(function(b){b.Ya()}),Object.values(this.Sa).forEach(Ct),this.Sa={},this.Za&&(Ct(this.Za),this.Za=void 0),this.handleError(V(this.db)),la("/"+this.filename),this.db=null)},h.prototype.handleError=function(b){if(b===0)return null;throw b=Gu(this.db),Error(b)},h.prototype.Rb=function(){return ae(this.db)},h.prototype.Kb=function(b,M){Object.prototype.hasOwnProperty.call(this.Sa,b)&&(Ct(this.Sa[b]),delete this.Sa[b]);var E=Ps(function(R,q,K){q=c(q,K);try{var ze=M.apply(null,q)}catch(Le){jn(R,Le,-1);return}a(R,ze)},"viii");return this.Sa[b]=E,this.handleError(Ta(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)&&(Ct(this.Sa[b]),delete this.Sa[b]),M=b+"__finalize",Object.hasOwnProperty.call(this.Sa,M)&&(Ct(this.Sa[M]),delete this.Sa[M]);var ze=Ps(function(Ee,We,ki){var Ot=Pa(Ee,1);Object.hasOwnProperty.call(K,Ot)||(K[Ot]=E()),We=c(We,ki),We=[K[Ot]].concat(We);try{K[Ot]=q.apply(null,We)}catch(id){delete K[Ot],jn(Ee,id,-1)}},"viii"),Le=Ps(function(Ee){var We=Pa(Ee,1);try{var ki=R(K[We])}catch(Ot){delete K[We],jn(Ee,Ot,-1);return}a(Ee,ki),delete K[We]},"vi");return this.Sa[b]=ze,this.Sa[M]=Le,this.handleError(Ta(this.db,b,q.length-1,1,0,0,ze,Le,0)),this},h.prototype.Zb=function(b){return this.Za&&(Aa(this.db,0,0),Ct(this.Za),this.Za=void 0),b?(this.Za=Ps(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"),Aa(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 Gt<"u"&&(Gt.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),v=console.error.bind(console),U,ee=!1,j,A=a=>a.startsWith("file://"),D,O,se,ie,Y,_s,Vt,De;function bs(){var a=Gn.buffer;D=new Int8Array(a),se=new Int16Array(a),O=new Uint8Array(a),new Uint16Array(a),ie=new Int32Array(a),Y=new Uint32Array(a),_s=new Float32Array(a),Vt=new Float64Array(a),De=new BigInt64Array(a),new BigUint64Array(a)}function ht(a){throw i.onAbort?.(a),a="Aborted("+a+")",v(a),ee=!0,new WebAssembly.RuntimeError(a+". Build with -sASSERTIONS for more info.")}var it;async function Tn(a){if(!U)try{var c=await _(a);return new Uint8Array(c)}catch{}if(a==it&&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 Mn(a,c){try{var d=await Tn(a);return await WebAssembly.instantiate(d,c)}catch(g){v(`failed to asynchronously prepare wasm: ${g}`),ht(g)}}async function oi(a){var c=it;if(!U&&!A(c)&&!u)try{var d=fetch(c,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(d,a)}catch(g){v(`wasm streaming compile failed: ${g}`),v("falling back to ArrayBuffer instantiation")}return Mn(c,a)}class Q{name="ExitStatus";constructor(c){this.message=`Program terminated with exit(${c})`,this.status=c}}var we=a=>{for(;0<a.length;)a.shift()(i)},yt=[],Kt=[],Cs=()=>{var a=i.preRun.shift();Kt.push(a)},Et=0,ks=null;function rt(a,c="i8"){switch(c.endsWith("*")&&(c="*"),c){case"i1":return D[a];case"i8":return D[a];case"i16":return se[a>>1];case"i32":return ie[a>>2];case"i64":return De[a>>3];case"float":return _s[a>>2];case"double":return Vt[a>>3];case"*":return Y[a>>2];default:ht(`invalid type for getValue: ${c}`)}}var Pn=!0;function Ss(a){var c="i32";switch(c.endsWith("*")&&(c="*"),c){case"i1":D[a]=0;break;case"i8":D[a]=0;break;case"i16":se[a>>1]=0;break;case"i32":ie[a>>2]=0;break;case"i64":De[a>>3]=BigInt(0);break;case"float":_s[a>>2]=0;break;case"double":Vt[a>>3]=0;break;case"*":Y[a>>2]=0;break;default:ht(`invalid type for setValue: ${c}`)}}var Wr=new TextDecoder,Hr=(a,c,d,g)=>{if(d=c+d,g)return d;for(;a[c]&&!(c>=d);)++c;return c},ge=(a,c,d)=>a?Wr.decode(O.subarray(a,Hr(O,a,c,d))):"",Jr=(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},ii=a=>{var c=a.charAt(0)==="/",d=a.slice(-1)==="/";return(a=Jr(a.split("/").filter(g=>!!g),!c).join("/"))||c||(a="."),a&&d&&(a+="/"),(c?"/":"")+a},Vr=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)},vn=a=>a&&a.match(/([^\/]+|\/)\/*$/)[1],fu=()=>{if(u){var a=require("node:crypto");return c=>a.randomFillSync(c)}return c=>crypto.getRandomValues(c)},Kr=a=>{(Kr=fu())(a)},hu=(...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=Jr(c.split("/").filter(h=>!!h),!d).join("/"),(d?"/":"")+c||"."},ws=a=>{var c=Hr(a,0);return Wr.decode(a.buffer?a.subarray(0,c):new Uint8Array(a.slice(0,c)))},ri=[],Qt=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},Xe=(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},Qr=[];function Yr(a,c){Qr[a]={input:[],output:[],eb:c},mi(a,yu)}var yu={open(a){var c=Qr[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}},_u={Bb(){e:{if(!ri.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(Qt(a)+1),a=Xe(a,c,0,c.length),c.length=a,ri=c}a=ri.shift()}return a},ub(a,c){c===null||c===10?(I(ws(a.output)),a.output=[]):c!=0&&a.output.push(c)},fsync(a){0<a.output?.length&&(I(ws(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]}},bu={ub(a,c){c===null||c===10?(v(ws(a.output)),a.output=[]):c!=0&&a.output.push(c)},fsync(a){0<a.output?.length&&(v(ws(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:Tu}}),d=sa(a,c,d,g),ve(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,ve(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=Rt(c,d)}catch{}if(g){if(ve(a.mode))for(var h in g.Na)throw new x(55);ui(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=Rt(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=_a(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}}},Xr=(a,c)=>{var d=0;return a&&(d|=365),c&&(d|=146),d},ai=null,Zr={},Yt=[],Cu=1,_t=null,ea=!1,ta=!0,x=class{name="ErrnoError";constructor(a){this.Pa=a}},ku=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}},Su=class{La={};Ma={};bb=null;constructor(a,c,d,g){a||=this,this.parent=a,this.Xa=a.Xa,this.id=Cu++,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=ai,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=Vr(h),g===g.parent){a=h+"/"+a.slice(k+1).join("/"),d--;continue e}else g=g.parent;else{h=ii(h+"/"+a[k]);try{g=Rt(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=Vr(h)+"/"+g),a=g+"/"+a.slice(k+1).join("/");continue e}}}return{path:h,node:g}}throw new x(32)}function li(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 ci(a,c){for(var d=0,g=0;g<c.length;g++)d=(d<<5)-d+c.charCodeAt(g)|0;return(a+d>>>0)%_t.length}function ui(a){var c=ci(a.parent.id,a.name);if(_t[c]===a)_t[c]=a.cb;else for(c=_t[c];c;){if(c.cb===a){c.cb=a.cb;break}c=c.cb}}function Rt(a,c){var d=ve(a.mode)?(d=Xt(a,"x"))?d:a.La.lookup?0:2:54;if(d)throw new x(d);for(d=_t[ci(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 sa(a,c,d,g){return a=new Su(a,c,d,g),c=ci(a.parent.id,a.name),a.cb=_t[c],_t[c]=a}function ve(a){return(a&61440)===16384}function Xt(a,c){return ta?0:c.includes("r")&&!(a.mode&292)||c.includes("w")&&!(a.mode&146)||c.includes("x")&&!(a.mode&73)?2:0}function na(a,c){if(!ve(a.mode))return 54;try{return Rt(a,c),20}catch{}return Xt(a,"wx")}function oa(a,c,d){try{var g=Rt(a,c)}catch(h){return h.Pa}if(a=Xt(a,"wx"))return a;if(d){if(!ve(g.mode))return 54;if(g===g.parent||li(g)==="/")return 10}else if(ve(g.mode))return 31;return 0}function An(a){if(!a)throw new x(63);return a}function Te(a){if(a=Yt[a],!a)throw new x(8);return a}function ia(a,c=-1){if(a=Object.assign(new ku,a),c==-1)e:{for(c=0;4096>=c;c++)if(!Yt[c])break e;throw new x(33)}return a.fd=c,Yt[c]=a}function wu(a,c=-1){return a=ia(a,c),a.Ma?.ec?.(a),a}function di(a,c,d){var g=a?.Ma.Ua;a=g?a:c,g??=c.La.Ua,An(g),g(a,d)}var Tu={open(a){a.Ma=Zr[a.node.rdev].Ma,a.Ma.open?.(a)},Va(){throw new x(70)}};function mi(a,c){Zr[a]={Ma:c}}function ra(a,c){var d=c==="/";if(d&&ai)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(!ve(g.mode))throw new x(54)}c={type:a,kc:{},Db:c,Vb:[]},a=a.Xa(c),a.Xa=c,c.root=a,d?ai=a:g&&(g.bb=c,g.Xa&&g.Xa.Vb.push(c))}function xn(a,c,d){var g=Ne(a,{parent:!0}).node;if(a=vn(a),!a)throw new x(28);if(a==="."||a==="..")throw new x(20);var h=na(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 Mu(a,c=438){return xn(a,c&4095|32768,0)}function Ze(a,c=511){return xn(a,c&1023|16384,0)}function Dn(a,c,d){typeof d>"u"&&(d=c,c=438),xn(a,c|8192,d)}function pi(a,c){if(!hu(a))throw new x(44);var d=Ne(c,{parent:!0}).node;if(!d)throw new x(44);c=vn(c);var g=na(d,c);if(g)throw new x(g);if(!d.La.symlink)throw new x(63);d.La.symlink(d,c,a)}function aa(a){var c=Ne(a,{parent:!0}).node;a=vn(a);var d=Rt(c,a),g=oa(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),ui(d)}function la(a){var c=Ne(a,{parent:!0}).node;if(!c)throw new x(44);a=vn(a);var d=Rt(c,a),g=oa(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),ui(d)}function Ts(a,c){return a=Ne(a,{ab:!c}).node,An(a.La.Ta)(a)}function ca(a,c,d,g){di(a,c,{mode:d&4095|c.mode&-4096,ctime:Date.now(),Lb:g})}function En(a,c){a=typeof a=="string"?Ne(a,{ab:!0}).node:a,ca(null,a,c)}function ua(a,c,d){if(ve(c.mode))throw new x(31);if((c.mode&61440)!==32768)throw new x(28);var g=Xt(c,"w");if(g)throw new x(g);di(a,c,{size:d,timestamp:Date.now()})}function Zt(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=xn(a,d|511,0),k=!0}if(!g)throw new x(44);if((g.mode&61440)===8192&&(c&=-513),c&65536&&!ve(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=ve(g.mode)&&(h!=="r"||c&576)?31:Xt(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,ua(null,h,0)),c=ia({node:g,path:li(g),flags:c&-131713,seekable:!0,position:0,Ma:g.Ma,Yb:[],error:!1}),c.Ma.open&&c.Ma.open(c),k&&En(g,d&511),c}function gi(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{Yt[a.fd]=null}a.fd=null}function da(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 ma(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(ve(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 pa(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(ve(a.node.mode))throw new x(31);if(!a.Ma.write)throw new x(28);a.seekable&&a.flags&1024&&da(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 Pu(a){var c=c||0,d="binary";d!=="utf8"&&d!=="binary"&&ht(`Invalid encoding type "${d}"`),c=Zt(a,c),a=Ts(a).size;var g=new Uint8Array(a);return ma(c,g,0,a,0),d==="utf8"&&(g=ws(g)),gi(c),g}function bt(a,c,d){a=ii("/dev/"+a);var g=Xr(!!c,!!d);bt.Cb??(bt.Cb=64);var h=bt.Cb++<<8|0;mi(h,{open(k){k.seekable=!1},close(){d?.buffer?.length&&d(10)},read(k,T,F,V){for(var L=0,ae=0;ae<V;ae++){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+ae]=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}}),Dn(a,g,h)}var re={};function It(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 Rn(a,c){Y[a>>2]=c.dev,Y[a+4>>2]=c.mode,Y[a+8>>2]=c.nlink,Y[a+12>>2]=c.uid,Y[a+16>>2]=c.gid,Y[a+20>>2]=c.rdev,De[a+24>>3]=BigInt(c.size),ie[a+32>>2]=4096,ie[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)),Y[a+48>>2]=d%1e3*1e6,De[a+56>>3]=BigInt(Math.floor(g/1e3)),Y[a+64>>2]=g%1e3*1e6,De[a+72>>3]=BigInt(Math.floor(h/1e3)),Y[a+80>>2]=h%1e3*1e6,De[a+88>>3]=BigInt(c.ino),0}var In=void 0,Un=()=>{var a=ie[+In>>2];return In+=4,a},fi=0,vu=[0,31,60,91,121,152,182,213,244,274,305,335],Au=[0,31,59,90,120,151,181,212,243,273,304,334],Ms={},ga=a=>{j=a,Pn||0<fi||(i.onExit?.(a),ee=!0),p(a,new Q(a))},xu=a=>{if(!ee)try{a()}catch(c){c instanceof Q||c=="unwind"||p(1,c)}finally{if(!(Pn||0<fi))try{j=a=j,ga(a)}catch(c){c instanceof Q||c=="unwind"||p(1,c)}}},hi={},fa=()=>{if(!yi){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 hi)hi[c]===void 0?delete a[c]:a[c]=hi[c];var d=[];for(c in a)d.push(`${c}=${a[c]}`);yi=d}return yi},yi,Du=(a,c,d,g)=>{var h={string:L=>{var ae=0;if(L!=null&&L!==0){ae=Qt(L)+1;var ke=Ft(ae);Xe(L,O,ke,ae),ae=ke}return ae},array:L=>{var ae=Ft(L.length);return D.set(L,ae),ae}};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=Ln()),k[F]=V(g[F])):k[F]=g[F]}return d=a(...k),d=(function(L){return T!==0&&Nn(T),c==="string"?ge(L):c==="boolean"?!!L:L})(d)},Fn=a=>{var c=Qt(a)+1,d=On(c);return d&&Xe(a,O,d,c),d},Ut,_i=[],Ct=a=>{Ut.delete(kt.get(a)),kt.set(a,null),_i.push(a)},ha=a=>{let c=a.length;return[c%128|128,c>>7,...a]},Eu={i:127,p:127,j:126,f:125,d:124,e:111},ya=a=>ha(Array.from(a,c=>Eu[c])),Ps=(a,c)=>{if(!Ut){Ut=new WeakMap;var d=kt.length;if(Ut)for(var g=0;g<0+d;g++){var h=kt.get(g);h&&Ut.set(h,g)}}if(d=Ut.get(a)||0)return d;d=_i.length?_i.pop():kt.grow(1);try{kt.set(d,a)}catch(k){if(!(k instanceof TypeError))throw k;c=Uint8Array.of(0,97,115,109,1,0,0,0,1,...ha([1,96,...ya(c.slice(1)),...ya(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,kt.set(d,c)}return Ut.set(a,d),d};if(_t=Array(4096),ra(N,"/"),Ze("/tmp"),Ze("/home"),Ze("/home/web_user"),(function(){Ze("/dev"),mi(259,{read:()=>0,write:(g,h,k,T)=>T,Va:()=>0}),Dn("/dev/null",259),Yr(1280,_u),Yr(1536,bu),Dn("/dev/tty",1280),Dn("/dev/tty1",1536);var a=new Uint8Array(1024),c=0,d=()=>(c===0&&(Kr(a),c=a.byteLength),a[--c]);bt("random",d),bt("urandom",d),Ze("/dev/shm"),Ze("/dev/shm/tmp")})(),(function(){Ze("/proc");var a=Ze("/proc/self");Ze("/proc/self/fd"),ra({Xa(){var c=sa(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(Yt.entries()).filter(([,d])=>d).map(([d])=>d.toString())}},c}},"/proc/self/fd")})(),i.noExitRuntime&&(Pn=i.noExitRuntime),i.print&&(I=i.print),i.printErr&&(v=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=()=>Ln(),i.stackRestore=a=>Nn(a),i.stackAlloc=a=>Ft(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)=>Du(a,c,d,k)},i.addFunction=Ps,i.removeFunction=Ct,i.UTF8ToString=ge,i.stringToNewUTF8=Fn,i.writeArrayToMemory=(a,c)=>{D.set(a,c)};var On,vs,_a,ba,Nn,Ft,Ln,Gn,kt,Ru={a:(a,c,d,g)=>ht(`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),En(a,c),0}catch(d){if(typeof re>"u"||d.name!=="ErrnoError")throw d;return-d.Pa}},L:function(a,c,d){try{if(c=ge(c),c=It(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&&Xt(g,a)?-2:0):-44}catch(h){if(typeof re>"u"||h.name!=="ErrnoError")throw h;return-h.Pa}},j:function(a,c){try{var d=Te(a);return ca(d,d.node,c,!1),0}catch(g){if(typeof re>"u"||g.name!=="ErrnoError")throw g;return-g.Pa}},h:function(a){try{var c=Te(a);return di(c,c.node,{timestamp:Date.now(),Lb:!1}),0}catch(d){if(typeof re>"u"||d.name!=="ErrnoError")throw d;return-d.Pa}},b:function(a,c,d){In=d;try{var g=Te(a);switch(c){case 0:var h=Un();if(0>h)break;for(;Yt[h];)h++;return wu(g,h).fd;case 1:case 2:return 0;case 3:return g.flags;case 4:return h=Un(),g.flags|=h,0;case 12:return h=Un(),se[h+0>>1]=2,0;case 13:case 14:return 0}return-28}catch(k){if(typeof re>"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,An(h);var k=h(a);return Rn(c,k)}catch(T){if(typeof re>"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 ua(d,d.node,c),0}catch(g){if(typeof re>"u"||g.name!=="ErrnoError")throw g;return-g.Pa}},G:function(a,c){try{if(c===0)return-28;var d=Qt("/")+1;return c<d?-68:(Xe("/",O,a,c),d)}catch(g){if(typeof re>"u"||g.name!=="ErrnoError")throw g;return-g.Pa}},K:function(a,c){try{return a=ge(a),Rn(c,Ts(a,!0))}catch(d){if(typeof re>"u"||d.name!=="ErrnoError")throw d;return-d.Pa}},C:function(a,c,d){try{return c=ge(c),c=It(a,c),Ze(c,d),0}catch(g){if(typeof re>"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=It(a,c,g&4096),Rn(d,h?Ts(c,!0):Ts(c))}catch(k){if(typeof re>"u"||k.name!=="ErrnoError")throw k;return-k.Pa}},x:function(a,c,d,g){In=g;try{c=ge(c),c=It(a,c);var h=g?Un():0;return Zt(c,d,h).fd}catch(k){if(typeof re>"u"||k.name!=="ErrnoError")throw k;return-k.Pa}},v:function(a,c,d,g){try{if(c=ge(c),c=It(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,Qt(k)),F=D[d+T];return Xe(k,O,d,g+1),D[d+T]=F,T}catch(V){if(typeof re>"u"||V.name!=="ErrnoError")throw V;return-V.Pa}},u:function(a){try{return a=ge(a),aa(a),0}catch(c){if(typeof re>"u"||c.name!=="ErrnoError")throw c;return-c.Pa}},f:function(a,c){try{return a=ge(a),Rn(c,Ts(a))}catch(d){if(typeof re>"u"||d.name!=="ErrnoError")throw d;return-d.Pa}},r:function(a,c,d){try{if(c=ge(c),c=It(a,c),d)if(d===512)aa(c);else return-28;else la(c);return 0}catch(g){if(typeof re>"u"||g.name!=="ErrnoError")throw g;return-g.Pa}},q:function(a,c,d){try{c=ge(c),c=It(a,c,!0);var g=Date.now(),h,k;if(d){var T=Y[d>>2]+4294967296*ie[d+4>>2],F=ie[d+8>>2];F==1073741823?h=g:F==1073741822?h=null:h=1e3*T+F/1e6,d+=16,T=Y[d>>2]+4294967296*ie[d+4>>2],F=ie[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;An(V.La.Ua)(V,{atime:a,mtime:k})}return 0}catch(L){if(typeof re>"u"||L.name!=="ErrnoError")throw L;return-L.Pa}},m:()=>ht(""),l:()=>{Pn=!1,fi=0},A:function(a,c){a=-9007199254740992>a||9007199254740992<a?NaN:Number(a),a=new Date(1e3*a),ie[c>>2]=a.getSeconds(),ie[c+4>>2]=a.getMinutes(),ie[c+8>>2]=a.getHours(),ie[c+12>>2]=a.getDate(),ie[c+16>>2]=a.getMonth(),ie[c+20>>2]=a.getFullYear()-1900,ie[c+24>>2]=a.getDay();var d=a.getFullYear();ie[c+28>>2]=(d%4!==0||d%100===0&&d%400!==0?Au:vu)[a.getMonth()]+a.getDate()-1|0,ie[c+36>>2]=-(60*a.getTimezoneOffset()),d=new Date(a.getFullYear(),6,1).getTimezoneOffset();var g=new Date(a.getFullYear(),0,1).getTimezoneOffset();ie[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 ie[k>>2]=V.Eb,Y[T>>2]=L,0}catch(ae){if(typeof re>"u"||ae.name!=="ErrnoError")throw ae;return-ae.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 re>"u"||V.name!=="ErrnoError")throw V;return-V.Pa}},n:(a,c)=>{if(Ms[a]&&(clearTimeout(Ms[a].id),delete Ms[a]),!c)return 0;var d=setTimeout(()=>{delete Ms[a],xu(()=>ba(a,performance.now()))},c);return Ms[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(),Y[a>>2]=60*Math.max(k,h),ie[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?(Xe(a,O,d,17),Xe(c,O,g,17)):(Xe(a,O,g,17),Xe(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))-Gn.buffer.byteLength+65535)/65536|0;try{Gn.grow(g),bs();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 fa()){var k=c+d;Y[a+g>>2]=k,d+=Xe(h,O,k,1/0)+1,g+=4}return 0},F:(a,c)=>{var d=fa();Y[a>>2]=d.length,a=0;for(var g of d)a+=Qt(g)+1;return Y[c>>2]=a,0},e:function(a){try{var c=Te(a);return gi(c),0}catch(d){if(typeof re>"u"||d.name!=="ErrnoError")throw d;return d.Pa}},p:function(a,c){try{var d=Te(a);return D[c]=d.tty?2:ve(d.mode)?3:(d.mode&61440)===40960?7:4,se[c+2>>1]=0,De[c+8>>3]=BigInt(0),De[c+16>>3]=BigInt(0),0}catch(g){if(typeof re>"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=Y[a>>2],V=Y[a+4>>2];a+=8;var L=ma(h,D,F,V,k);if(0>L){var ae=-1;break e}if(c+=L,L<V)break;typeof k<"u"&&(k+=L)}ae=c}return Y[g>>2]=ae,0}catch(ke){if(typeof re>"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 da(h,c,d),De[g>>3]=BigInt(h.position),h.rb&&c===0&&d===0&&(h.rb=null),0}catch(k){if(typeof re>"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 re>"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=Y[a>>2],V=Y[a+4>>2];a+=8;var L=pa(h,D,F,V,k);if(0>L){var ae=-1;break e}if(c+=L,L<V)break;typeof k<"u"&&(k+=L)}ae=c}return Y[g>>2]=ae,0}catch(ke){if(typeof re>"u"||ke.name!=="ErrnoError")throw ke;return ke.Pa}},k:ga};function bi(){function a(){if(i.calledRun=!0,!ee){if(!i.noFSInit&&!ea){var c,d;ea=!0,c??=i.stdin,d??=i.stdout,g??=i.stderr,c?bt("stdin",c):pi("/dev/tty","/dev/stdin"),d?bt("stdout",null,d):pi("/dev/tty","/dev/stdout"),g?bt("stderr",null,g):pi("/dev/tty1","/dev/stderr"),Zt("/dev/stdin",0),Zt("/dev/stdout",1),Zt("/dev/stderr",1)}if(Ci.N(),ta=!1,i.onRuntimeInitialized?.(),i.postRun)for(typeof i.postRun=="function"&&(i.postRun=[i.postRun]);i.postRun.length;){var g=i.postRun.shift();yt.push(g)}we(yt)}}if(0<Et)ks=bi;else{if(i.preRun)for(typeof i.preRun=="function"&&(i.preRun=[i.preRun]);i.preRun.length;)Cs();we(Kt),0<Et?ks=bi:i.setStatus?(i.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>i.setStatus(""),1),a()},1)):a()}}var Ci;return(async function(){function a(d){return d=Ci=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,On=i._malloc=d.Da,vs=i._free=d.Ea,i._RegisterExtensionFunctions=d.Fa,_a=d.Ga,ba=d.Ha,Nn=d.Ia,Ft=d.Ja,Ln=d.Ka,Gn=d.M,kt=d.O,bs(),Et--,i.monitorRunDependencies?.(Et),Et==0&&ks&&(d=ks,ks=null,d()),Ci}Et++,i.monitorRunDependencies?.(Et);var c={a:Ru};return i.instantiateWasm?new Promise(d=>{i.instantiateWasm(c,(g,h)=>{d(a(g,h))})}):(it??=i.locateFile?i.locateFile("sql-wasm.wasm",y):y+"sql-wasm.wasm",a((await oi(c)).instance))})(),bi(),s}),Zn)};typeof to=="object"&&typeof Gt=="object"?(Gt.exports=eo,Gt.exports.default=eo):typeof define=="function"&&define.amd?define([],function(){return eo}):typeof to=="object"&&(to.Module=eo)});var io=be(at=>{"use strict";Object.defineProperty(at,"__esModule",{value:!0});at.utf8Count=Dd;at.utf8EncodeJs=tl;at.utf8EncodeTE=sl;at.utf8Encode=Id;at.utf8DecodeJs=nl;at.utf8DecodeTD=ol;at.utf8Decode=Nd;function Dd(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 tl(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 Ed=new TextEncoder,Rd=50;function sl(n,e,t){Ed.encodeInto(n,e.subarray(t))}function Id(n,e,t){n.length>Rd?sl(n,e,t):tl(n,e,t)}var Ud=4096;function nl(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>=Ud&&(r+=String.fromCharCode(...i),i.length=0)}return i.length>0&&(r+=String.fromCharCode(...i)),r}var Fd=new TextDecoder,Od=200;function ol(n,e,t){let s=n.subarray(e,e+t);return Fd.decode(s)}function Nd(n,e,t){return t>Od?ol(n,e,t):nl(n,e,t)}});var Ei=be(ro=>{"use strict";Object.defineProperty(ro,"__esModule",{value:!0});ro.ExtData=void 0;var Di=class{type;data;constructor(e,t){this.type=e,this.data=t}};ro.ExtData=Di});var lo=be(ao=>{"use strict";Object.defineProperty(ao,"__esModule",{value:!0});ao.DecodeError=void 0;var Ri=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})}};ao.DecodeError=Ri});var co=be(wt=>{"use strict";Object.defineProperty(wt,"__esModule",{value:!0});wt.UINT32_MAX=void 0;wt.setUint64=Ld;wt.setInt64=Gd;wt.getInt64=jd;wt.getUint64=Bd;wt.UINT32_MAX=4294967295;function Ld(n,e,t){let s=t/4294967296,o=t;n.setUint32(e,s),n.setUint32(e+4,o)}function Gd(n,e,t){let s=Math.floor(t/4294967296),o=t;n.setUint32(e,s),n.setUint32(e+4,o)}function jd(n,e){let t=n.getInt32(e),s=n.getUint32(e+4);return t*4294967296+s}function Bd(n,e){let t=n.getUint32(e),s=n.getUint32(e+4);return t*4294967296+s}});var Ii=be(je=>{"use strict";Object.defineProperty(je,"__esModule",{value:!0});je.timestampExtension=je.EXT_TIMESTAMP=void 0;je.encodeTimeSpecToTimestamp=rl;je.encodeDateToTimeSpec=al;je.encodeTimestampExtension=ll;je.decodeTimestampToTimeSpec=cl;je.decodeTimestampExtension=ul;var qd=lo(),il=co();je.EXT_TIMESTAMP=-1;var $d=4294967296-1,zd=17179869184-1;function rl({sec:n,nsec:e}){if(n>=0&&e>=0&&n<=zd)if(e===0&&n<=$d){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,il.setInt64)(s,4,n),t}}function al(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 ll(n){if(n instanceof Date){let e=al(n);return rl(e)}else return null}function cl(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,il.getInt64)(e,4),s=e.getUint32(0);return{sec:t,nsec:s}}default:throw new qd.DecodeError(`Unrecognized data size for timestamp (expected 4, 8, or 12): ${n.length}`)}}function ul(n){let e=cl(n);return new Date(e.sec*1e3+e.nsec/1e6)}je.timestampExtension={type:je.EXT_TIMESTAMP,encode:ll,decode:ul}});var po=be(mo=>{"use strict";Object.defineProperty(mo,"__esModule",{value:!0});mo.ExtensionCodec=void 0;var uo=Ei(),Wd=Ii(),Ui=class n{static defaultCodec=new n;__brand;builtInEncoders=[];builtInDecoders=[];encoders=[];decoders=[];constructor(){this.register(Wd.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 uo.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 uo.ExtData(r,i)}}}return e instanceof uo.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 uo.ExtData(t,e)}};mo.ExtensionCodec=Ui});var Oi=be(Fi=>{"use strict";Object.defineProperty(Fi,"__esModule",{value:!0});Fi.ensureUint8Array=Jd;function Hd(n){return n instanceof ArrayBuffer||typeof SharedArrayBuffer<"u"&&n instanceof SharedArrayBuffer}function Jd(n){return n instanceof Uint8Array?n:ArrayBuffer.isView(n)?new Uint8Array(n.buffer,n.byteOffset,n.byteLength):Hd(n)?new Uint8Array(n):Uint8Array.from(n)}});var Li=be(st=>{"use strict";Object.defineProperty(st,"__esModule",{value:!0});st.Encoder=st.DEFAULT_INITIAL_BUFFER_SIZE=st.DEFAULT_MAX_DEPTH=void 0;var dl=io(),Vd=po(),ml=co(),Kd=Oi();st.DEFAULT_MAX_DEPTH=100;st.DEFAULT_INITIAL_BUFFER_SIZE=2048;var Ni=class n{extensionCodec;context;useBigInt64;maxDepth;initialBufferSize;sortKeys;forceFloat32;ignoreUndefined;forceIntegerToFloat;pos;view;bytes;entered=!1;constructor(e){this.extensionCodec=e?.extensionCodec??Vd.ExtensionCodec.defaultCodec,this.context=e?.context,this.useBigInt64=e?.useBigInt64??!1,this.maxDepth=e?.maxDepth??st.DEFAULT_MAX_DEPTH,this.initialBufferSize=e?.initialBufferSize??st.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,dl.utf8Count)(e);this.ensureBufferSizeToWrite(5+s),this.writeStringHeader(s),(0,dl.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,Kd.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,ml.setUint64)(this.view,this.pos,e),this.pos+=8}writeI64(e){this.ensureBufferSizeToWrite(8),(0,ml.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}};st.Encoder=Ni});var pl=be(Gi=>{"use strict";Object.defineProperty(Gi,"__esModule",{value:!0});Gi.encode=Yd;var Qd=Li();function Yd(n,e){return new Qd.Encoder(e).encodeSharedRef(n)}});var gl=be(ji=>{"use strict";Object.defineProperty(ji,"__esModule",{value:!0});ji.prettyByte=Xd;function Xd(n){return`${n<0?"-":""}0x${Math.abs(n).toString(16).padStart(2,"0")}`}});var fl=be(go=>{"use strict";Object.defineProperty(go,"__esModule",{value:!0});go.CachedKeyDecoder=void 0;var Zd=io(),em=16,tm=16,Bi=class{hit=0;miss=0;caches;maxKeyLength;maxLengthPerKey;constructor(e=em,t=tm){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,Zd.utf8DecodeJs)(e,t,s),r=Uint8Array.prototype.slice.call(e,t,t+s);return this.store(r,i),i}};go.CachedKeyDecoder=Bi});var ho=be(fo=>{"use strict";Object.defineProperty(fo,"__esModule",{value:!0});fo.Decoder=void 0;var qi=gl(),sm=po(),qt=co(),nm=io(),hl=Oi(),om=fl(),lt=lo(),$i="array",Gs="map_key",_l="map_value",im=n=>{if(typeof n=="string"||typeof n=="number")return n;throw new lt.DecodeError("The type of key must be string or number but "+typeof n)},zi=class{stack=[];stackHeadPosition=-1;get length(){return this.stackHeadPosition+1}top(){return this.stack[this.stackHeadPosition]}pushArrayState(e){let t=this.getUninitializedStateFromPool();t.type=$i,t.position=0,t.size=e,t.array=new Array(e)}pushMapState(e){let t=this.getUninitializedStateFromPool();t.type=Gs,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===$i){let s=e;s.size=0,s.array=void 0,s.position=0,s.type=void 0}if(e.type===Gs||e.type===_l){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}},Ls=-1,Hi=new DataView(new ArrayBuffer(0)),rm=new Uint8Array(Hi.buffer);try{Hi.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 yl=new RangeError("Insufficient data"),am=new om.CachedKeyDecoder,Wi=class n{extensionCodec;context;useBigInt64;rawStrings;maxStrLength;maxBinLength;maxArrayLength;maxMapLength;maxExtLength;keyDecoder;mapKeyConverter;totalPos=0;pos=0;view=Hi;bytes=rm;headByte=Ls;stack=new zi;entered=!1;constructor(e){this.extensionCodec=e?.extensionCodec??sm.ExtensionCodec.defaultCodec,this.context=e?.context,this.useBigInt64=e?.useBigInt64??!1,this.rawStrings=e?.rawStrings??!1,this.maxStrLength=e?.maxStrLength??qt.UINT32_MAX,this.maxBinLength=e?.maxBinLength??qt.UINT32_MAX,this.maxArrayLength=e?.maxArrayLength??qt.UINT32_MAX,this.maxMapLength=e?.maxMapLength??qt.UINT32_MAX,this.maxExtLength=e?.maxExtLength??qt.UINT32_MAX,this.keyDecoder=e?.keyDecoder!==void 0?e.keyDecoder:am,this.mapKeyConverter=e?.mapKeyConverter??im}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=Ls,this.stack.reset()}setBuffer(e){let t=(0,hl.ensureUint8Array)(e);this.bytes=t,this.view=new DataView(t.buffer,t.byteOffset,t.byteLength),this.pos=0}appendBuffer(e){if(this.headByte===Ls&&!this.hasRemaining(1))this.setBuffer(e);else{let t=this.bytes.subarray(this.pos),s=(0,hl.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,qi.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 lt.DecodeError(`Unrecognized type byte: ${(0,qi.prettyByte)(e)}`);this.complete();let s=this.stack;for(;s.length>0;){let o=s.top();if(o.type===$i)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===Gs){if(t==="__proto__")throw new lt.DecodeError("The key __proto__ is not allowed");o.key=this.mapKeyConverter(t),o.type=_l;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=Gs;continue e}}return t}}readHeadByte(){return this.headByte===Ls&&(this.headByte=this.readU8()),this.headByte}complete(){this.headByte=Ls}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 lt.DecodeError(`Unrecognized array type byte: ${(0,qi.prettyByte)(e)}`)}}}pushMapState(e){if(e>this.maxMapLength)throw new lt.DecodeError(`Max length exceeded: map length (${e}) > maxMapLengthLength (${this.maxMapLength})`);this.stack.pushMapState(e)}pushArrayState(e){if(e>this.maxArrayLength)throw new lt.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 lt.DecodeError(`Max length exceeded: UTF-8 byte length (${e}) > maxStrLength (${this.maxStrLength})`);if(this.bytes.byteLength<this.pos+t+e)throw yl;let s=this.pos+t,o;return this.stateIsMapKey()&&this.keyDecoder?.canBeCached(e)?o=this.keyDecoder.decode(this.bytes,s,e):o=(0,nm.utf8Decode)(this.bytes,s,e),this.pos+=t+e,o}stateIsMapKey(){return this.stack.length>0?this.stack.top().type===Gs:!1}decodeBinary(e,t){if(e>this.maxBinLength)throw new lt.DecodeError(`Max length exceeded: bin length (${e}) > maxBinLength (${this.maxBinLength})`);if(!this.hasRemaining(e+t))throw yl;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 lt.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,qt.getUint64)(this.view,this.pos);return this.pos+=8,e}readI64(){let e=(0,qt.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}};fo.Decoder=Wi});var Cl=be(yo=>{"use strict";Object.defineProperty(yo,"__esModule",{value:!0});yo.decode=lm;yo.decodeMulti=cm;var bl=ho();function lm(n,e){return new bl.Decoder(e).decode(n)}function cm(n,e){return new bl.Decoder(e).decodeMulti(n)}});var wl=be(js=>{"use strict";Object.defineProperty(js,"__esModule",{value:!0});js.isAsyncIterable=kl;js.asyncIterableFromStream=Sl;js.ensureAsyncIterable=um;function kl(n){return n[Symbol.asyncIterator]!=null}async function*Sl(n){let e=n.getReader();try{for(;;){let{done:t,value:s}=await e.read();if(t)return;yield s}}finally{e.releaseLock()}}function um(n){return kl(n)?n:Sl(n)}});var Tl=be(Bs=>{"use strict";Object.defineProperty(Bs,"__esModule",{value:!0});Bs.decodeAsync=dm;Bs.decodeArrayStream=mm;Bs.decodeMultiStream=pm;var Ji=ho(),Vi=wl();async function dm(n,e){let t=(0,Vi.ensureAsyncIterable)(n);return new Ji.Decoder(e).decodeAsync(t)}function mm(n,e){let t=(0,Vi.ensureAsyncIterable)(n);return new Ji.Decoder(e).decodeArrayStream(t)}function pm(n,e){let t=(0,Vi.ensureAsyncIterable)(n);return new Ji.Decoder(e).decodeStream(t)}});var Qi=be($=>{"use strict";Object.defineProperty($,"__esModule",{value:!0});$.decodeTimestampExtension=$.encodeTimestampExtension=$.decodeTimestampToTimeSpec=$.encodeTimeSpecToTimestamp=$.encodeDateToTimeSpec=$.EXT_TIMESTAMP=$.ExtData=$.ExtensionCodec=$.Encoder=$.DecodeError=$.Decoder=$.decodeMultiStream=$.decodeArrayStream=$.decodeAsync=$.decodeMulti=$.decode=$.encode=void 0;var gm=pl();Object.defineProperty($,"encode",{enumerable:!0,get:function(){return gm.encode}});var Ml=Cl();Object.defineProperty($,"decode",{enumerable:!0,get:function(){return Ml.decode}});Object.defineProperty($,"decodeMulti",{enumerable:!0,get:function(){return Ml.decodeMulti}});var Ki=Tl();Object.defineProperty($,"decodeAsync",{enumerable:!0,get:function(){return Ki.decodeAsync}});Object.defineProperty($,"decodeArrayStream",{enumerable:!0,get:function(){return Ki.decodeArrayStream}});Object.defineProperty($,"decodeMultiStream",{enumerable:!0,get:function(){return Ki.decodeMultiStream}});var fm=ho();Object.defineProperty($,"Decoder",{enumerable:!0,get:function(){return fm.Decoder}});var hm=lo();Object.defineProperty($,"DecodeError",{enumerable:!0,get:function(){return hm.DecodeError}});var ym=Li();Object.defineProperty($,"Encoder",{enumerable:!0,get:function(){return ym.Encoder}});var _m=po();Object.defineProperty($,"ExtensionCodec",{enumerable:!0,get:function(){return _m.ExtensionCodec}});var bm=Ei();Object.defineProperty($,"ExtData",{enumerable:!0,get:function(){return bm.ExtData}});var os=Ii();Object.defineProperty($,"EXT_TIMESTAMP",{enumerable:!0,get:function(){return os.EXT_TIMESTAMP}});Object.defineProperty($,"encodeDateToTimeSpec",{enumerable:!0,get:function(){return os.encodeDateToTimeSpec}});Object.defineProperty($,"encodeTimeSpecToTimestamp",{enumerable:!0,get:function(){return os.encodeTimeSpecToTimestamp}});Object.defineProperty($,"decodeTimestampToTimeSpec",{enumerable:!0,get:function(){return os.decodeTimestampToTimeSpec}});Object.defineProperty($,"encodeTimestampExtension",{enumerable:!0,get:function(){return os.encodeTimestampExtension}});Object.defineProperty($,"decodeTimestampExtension",{enumerable:!0,get:function(){return os.decodeTimestampExtension}})});var gu=be((_w,Gy)=>{Gy.exports={name:"@rajbos/ai-engineering-fluency",version:"0.2.10",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 St=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}},Nt=class extends St{constructor(e){super(1,"commander.invalidArgument",e),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};var As=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 Nt(`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 Bn(n){let e=n.name()+(n.variadic===!0?"...":"");return n.required?"<"+e+">":"["+e+"]"}var Ua=require("node:events"),$n=P(require("node:child_process"),1),et=P(require("node:path"),1),Ds=P(require("node:fs"),1),H=P(require("node:process"),1),Fa=require("node:util");var Da=require("node:util"),xs=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=>Bn(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,
|
|
5
|
-
`+" ".repeat(t+u)),r+
|
|
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
|
|
7
|
-
`)}};var
|
|
2
|
+
"use strict";var Ed=Object.create;var Wa=Object.defineProperty;var Rd=Object.getOwnPropertyDescriptor;var Id=Object.getOwnPropertyNames;var Ud=Object.getPrototypeOf,Fd=Object.prototype.hasOwnProperty;var Ce=(n,e)=>()=>{try{return e||n((e={exports:{}}).exports,e),e.exports}catch(t){throw e=0,t}};var Od=(n,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Id(e))!Fd.call(n,o)&&o!==t&&Wa(n,o,{get:()=>e[o],enumerable:!(s=Rd(e,o))||s.enumerable});return n};var P=(n,e,t)=>(t=n!=null?Ed(Ud(n)):{},Od(e||!n||!n.__esModule?Wa(t,"default",{value:n,enumerable:!0}):t,n));var Bs=Ce((uo,qt)=>{var lo=void 0,co=function(n){return lo||(lo=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)}),qt=void 0;var i;i||=typeof s<"u"?s:{};var r=!!globalThis.window,a=!!globalThis.WorkerGlobalScope,u=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer";i.onRuntimeInitialized=function(){function l(b,M){switch(typeof M){case"boolean":xd(b,M?1:0);break;case"number":Pd(b,M);break;case"string":vd(b,M,-1,-1);break;case"object":if(M===null)Ba(b);else if(M.length!=null){var E=Wn(M.length);D.set(M,E),Ad(b,E,M.length,-1),Is(E)}else Kn(b,"Wrong API use : tried to return a value of an unknown type ("+M+").",-1);break;default:Ba(b)}}function c(b,M){for(var E=[],R=0;R<b;R+=1){var q=lt(M+4*R,"i32"),X=kd(q);if(X===1||X===2)q=Md(q);else if(X===3)q=wd(q);else if(X===4){X=q,q=Sd(X),X=Td(X);for(var We=new Uint8Array(q),je=0;je<q;je+=1)We[je]=D[X+je];q=We}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=$n(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:wi(E),R=M?Ci(E+"/"+M):E),M=ga(!0,!0),R=Qu(R,M),b){if(typeof b=="string"){E=Array(b.length);for(var q=0,X=b.length;q<X;++q)E[q]=b.charCodeAt(q);b=E}Gn(R,M|146),E=ns(R,577),xa(E,b,0,b.length,0),xi(E),Gn(R,M)}}this.handleError(F(this.filename,k)),this.db=lt(k,"i32"),za(this.db),this.gb={},this.Sa={}}var k=Lt(4),T=i.cwrap,F=T("sqlite3_open","number",["string","number"]),Y=T("sqlite3_close_v2","number",["number"]),L=T("sqlite3_exec","number",["number","string","number","number","number"]),ue=T("sqlite3_changes","number",["number"]),Se=T("sqlite3_prepare_v2","number",["number","string","number","number","number"]),Oa=T("sqlite3_sql","string",["number"]),od=T("sqlite3_normalized_sql","string",["number"]),Na=T("sqlite3_prepare_v2","number",["number","number","number","number","number"]),id=T("sqlite3_bind_text","number",["number","number","number","number","number"]),La=T("sqlite3_bind_blob","number",["number","number","number","number","number"]),rd=T("sqlite3_bind_double","number",["number","number","number"]),ad=T("sqlite3_bind_int","number",["number","number","number"]),ld=T("sqlite3_bind_parameter_index","number",["number","string"]),cd=T("sqlite3_step","number",["number"]),ud=T("sqlite3_errmsg","string",["number"]),dd=T("sqlite3_column_count","number",["number"]),md=T("sqlite3_data_count","number",["number"]),pd=T("sqlite3_column_double","number",["number","number"]),ja=T("sqlite3_column_text","string",["number","number"]),gd=T("sqlite3_column_blob","number",["number","number"]),fd=T("sqlite3_column_bytes","number",["number","number"]),hd=T("sqlite3_column_type","number",["number","number"]),yd=T("sqlite3_column_name","string",["number","number"]),_d=T("sqlite3_reset","number",["number"]),bd=T("sqlite3_clear_bindings","number",["number"]),Cd=T("sqlite3_finalize","number",["number"]),Ga=T("sqlite3_create_function_v2","number","number string number number number number number number number".split(" ")),kd=T("sqlite3_value_type","number",["number"]),Sd=T("sqlite3_value_bytes","number",["number"]),wd=T("sqlite3_value_text","string",["number"]),Td=T("sqlite3_value_blob","number",["number"]),Md=T("sqlite3_value_double","number",["number"]),Pd=T("sqlite3_result_double","",["number","number"]),Ba=T("sqlite3_result_null","",["number"]),vd=T("sqlite3_result_text","",["number","string","number","number"]),Ad=T("sqlite3_result_blob","",["number","number","number","number"]),xd=T("sqlite3_result_int","",["number","number"]),Kn=T("sqlite3_result_error","",["number","string","number"]),qa=T("sqlite3_aggregate_context","number",["number","number"]),za=T("RegisterExtensionFunctions","number",["number"]),$a=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=cd(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),pd(this.Qa,b)},d.prototype.Ob=function(b){if(b==null&&(b=this.Oa,this.Oa+=1),b=ja(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),ja(this.Qa,b)},d.prototype.getBlob=function(b){b==null&&(b=this.Oa,this.Oa+=1);var M=fd(this.Qa,b);b=gd(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=md(this.Qa),R=0;R<E;R+=1)switch(hd(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=dd(this.Qa),E=0;E<M;E+=1)b.push(yd(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 Oa(this.Qa)},d.prototype.Pb=function(){return od(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=$n(b),this.mb.push(b),this.db.handleError(id(this.Qa,M,b,-1,0))},d.prototype.Fb=function(b,M){M==null&&(M=this.Oa,this.Oa+=1);var E=Wn(b.length);D.set(b,E),this.mb.push(E),this.db.handleError(La(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)?ad:rd)(this.Qa,M,b))},d.prototype.Ib=function(b){b==null&&(b=this.Oa,this.Oa+=1),La(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=ld(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(),bd(this.Qa)===0&&_d(this.Qa)===0},d.prototype.freemem=function(){for(var b;(b=this.mb.pop())!==void 0;)Is(b)},d.prototype.Ya=function(){this.freemem();var b=Cd(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=Jn(),M=Lt(4);As(k),As(M);try{this.db.handleError(Na(this.db.db,this.lb,-1,k,M)),this.lb=lt(M,"i32");var E=lt(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=he(this.lb),this.ob(),R}finally{Hn(b)}},g.prototype.ob=function(){Is(this.fb),this.fb=null},g.prototype.Qb=function(){return this.sb!==null?this.sb:he(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,X=null;try{X=q=$n(b);var We=Lt(4);for(b=[];lt(X,"i8")!==0;){As(k),As(We),this.handleError(Na(this.db,X,-1,k,We));var je=lt(k,"i32");if(X=lt(We,"i32"),je!==0){var Re=null;for(R=new d(je,this),M!=null&&R.bind(M);R.step();)Re===null&&(Re={columns:R.qb(),values:[]},b.push(Re)),Re.values.push(R.get(null,E));R.Ya()}}return b}catch(He){throw R&&R.Ya(),He}finally{q&&Is(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(As(k),this.handleError(Se(this.db,b,-1,k,0)),b=lt(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(wt),this.Sa={},this.handleError(Y(this.db));var b=Yu(this.filename);return this.handleError(F(this.filename,k)),this.db=lt(k,"i32"),za(this.db),b},h.prototype.close=function(){this.db!==null&&(Object.values(this.gb).forEach(function(b){b.Ya()}),Object.values(this.Sa).forEach(wt),this.Sa={},this.Za&&(wt(this.Za),this.Za=void 0),this.handleError(Y(this.db)),Ta("/"+this.filename),this.db=null)},h.prototype.handleError=function(b){if(b===0)return null;throw b=ud(this.db),Error(b)},h.prototype.Rb=function(){return ue(this.db)},h.prototype.Kb=function(b,M){Object.prototype.hasOwnProperty.call(this.Sa,b)&&(wt(this.Sa[b]),delete this.Sa[b]);var E=Rs(function(R,q,X){q=c(q,X);try{var We=M.apply(null,q)}catch(je){Kn(R,je,-1);return}l(R,We)},"viii");return this.Sa[b]=E,this.handleError(Ga(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(Re){return Re},q=M.step;if(!q)throw"An aggregate function must have a step function in "+b;var X={};Object.hasOwnProperty.call(this.Sa,b)&&(wt(this.Sa[b]),delete this.Sa[b]),M=b+"__finalize",Object.hasOwnProperty.call(this.Sa,M)&&(wt(this.Sa[M]),delete this.Sa[M]);var We=Rs(function(Re,He,Oi){var jt=qa(Re,1);Object.hasOwnProperty.call(X,jt)||(X[jt]=E()),He=c(He,Oi),He=[X[jt]].concat(He);try{X[jt]=q.apply(null,He)}catch(Dd){delete X[jt],Kn(Re,Dd,-1)}},"viii"),je=Rs(function(Re){var He=qa(Re,1);try{var Oi=R(X[He])}catch(jt){delete X[He],Kn(Re,jt,-1);return}l(Re,Oi),delete X[He]},"vi");return this.Sa[b]=We,this.Sa[M]=je,this.handleError(Ga(this.db,b,q.length-1,1,0,0,We,je,0)),this},h.prototype.Zb=function(b){return this.Za&&($a(this.db,0,0),wt(this.Za),this.Za=void 0),b?(this.Za=Rs(function(M,E,R,q,X){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=he(R),q=he(q),X>Number.MAX_SAFE_INTEGER)throw"rowId too big to fit inside a Number";b(M,R,q,Number(X))},"viiiij"),$a(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=(l,c)=>{throw c},f=globalThis.document?.currentScript?.src;typeof __filename<"u"?f=__filename:a&&(f=self.location.href);var y="",_,C;if(u){var S=require("node:fs");y=__dirname+"/",C=l=>(l=A(l)?new URL(l):l,S.readFileSync(l)),_=async l=>(l=A(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 qt<"u"&&(qt.exports=i),p=(l,c)=>{throw process.exitCode=l,c}}else if(r||a){try{y=new URL(".",f).href}catch{}a&&(C=l=>{var c=new XMLHttpRequest;return c.open("GET",l,!1),c.responseType="arraybuffer",c.send(null),new Uint8Array(c.response)}),_=async l=>{if(A(l))return new Promise((d,g)=>{var h=new XMLHttpRequest;h.open("GET",l,!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(l,{credentials:"same-origin"});if(c.ok)return c.arrayBuffer();throw Error(c.status+" : "+c.url)}}var I=console.log.bind(console),v=console.error.bind(console),U,ne=!1,G,A=l=>l.startsWith("file://"),D,O,re,le,te,Ts,Xt,Ee;function Ms(){var l=Vn.buffer;D=new Int8Array(l),re=new Int16Array(l),O=new Uint8Array(l),new Uint16Array(l),le=new Int32Array(l),te=new Uint32Array(l),Ts=new Float32Array(l),Xt=new Float64Array(l),Ee=new BigInt64Array(l),new BigUint64Array(l)}function bt(l){throw i.onAbort?.(l),l="Aborted("+l+")",v(l),ne=!0,new WebAssembly.RuntimeError(l+". Build with -sASSERTIONS for more info.")}var at;async function In(l){if(!U)try{var c=await _(l);return new Uint8Array(c)}catch{}if(l==at&&U)l=new Uint8Array(U);else if(C)l=C(l);else throw"both async and sync fetching of the wasm failed";return l}async function Un(l,c){try{var d=await In(l);return await WebAssembly.instantiate(d,c)}catch(g){v(`failed to asynchronously prepare wasm: ${g}`),bt(g)}}async function bi(l){var c=at;if(!U&&!A(c)&&!u)try{var d=fetch(c,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(d,l)}catch(g){v(`wasm streaming compile failed: ${g}`),v("falling back to ArrayBuffer instantiation")}return Un(c,l)}class Z{name="ExitStatus";constructor(c){this.message=`Program terminated with exit(${c})`,this.status=c}}var Te=l=>{for(;0<l.length;)l.shift()(i)},Ct=[],Zt=[],Ps=()=>{var l=i.preRun.shift();Zt.push(l)},Ut=0,vs=null;function lt(l,c="i8"){switch(c.endsWith("*")&&(c="*"),c){case"i1":return D[l];case"i8":return D[l];case"i16":return re[l>>1];case"i32":return le[l>>2];case"i64":return Ee[l>>3];case"float":return Ts[l>>2];case"double":return Xt[l>>3];case"*":return te[l>>2];default:bt(`invalid type for getValue: ${c}`)}}var Fn=!0;function As(l){var c="i32";switch(c.endsWith("*")&&(c="*"),c){case"i1":D[l]=0;break;case"i8":D[l]=0;break;case"i16":re[l>>1]=0;break;case"i32":le[l>>2]=0;break;case"i64":Ee[l>>3]=BigInt(0);break;case"float":Ts[l>>2]=0;break;case"double":Xt[l>>3]=0;break;case"*":te[l>>2]=0;break;default:bt(`invalid type for setValue: ${c}`)}}var aa=new TextDecoder,la=(l,c,d,g)=>{if(d=c+d,g)return d;for(;l[c]&&!(c>=d);)++c;return c},he=(l,c,d)=>l?aa.decode(O.subarray(l,la(O,l,c,d))):"",ca=(l,c)=>{for(var d=0,g=l.length-1;0<=g;g--){var h=l[g];h==="."?l.splice(g,1):h===".."?(l.splice(g,1),d++):d&&(l.splice(g,1),d--)}if(c)for(;d;d--)l.unshift("..");return l},Ci=l=>{var c=l.charAt(0)==="/",d=l.slice(-1)==="/";return(l=ca(l.split("/").filter(g=>!!g),!c).join("/"))||c||(l="."),l&&d&&(l+="/"),(c?"/":"")+l},ua=l=>{var c=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(l).slice(1);return l=c[0],c=c[1],!l&&!c?".":(c&&=c.slice(0,-1),l+c)},On=l=>l&&l.match(/([^\/]+|\/)\/*$/)[1],Gu=()=>{if(u){var l=require("node:crypto");return c=>l.randomFillSync(c)}return c=>crypto.getRandomValues(c)},da=l=>{(da=Gu())(l)},Bu=(...l)=>{for(var c="",d=!1,g=l.length-1;-1<=g&&!d;g--){if(d=0<=g?l[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=ca(c.split("/").filter(h=>!!h),!d).join("/"),(d?"/":"")+c||"."},xs=l=>{var c=la(l,0);return aa.decode(l.buffer?l.subarray(0,c):new Uint8Array(l.slice(0,c)))},ki=[],es=l=>{for(var c=0,d=0;d<l.length;++d){var g=l.charCodeAt(d);127>=g?c++:2047>=g?c+=2:55296<=g&&57343>=g?(c+=4,++d):c+=3}return c},et=(l,c,d,g)=>{if(!(0<g))return 0;var h=d;g=d+g-1;for(var k=0;k<l.length;++k){var T=l.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},ma=[];function pa(l,c){ma[l]={input:[],output:[],eb:c},vi(l,qu)}var qu={open(l){var c=ma[l.node.rdev];if(!c)throw new x(43);l.tty=c,l.seekable=!1},close(l){l.tty.eb.fsync(l.tty)},fsync(l){l.tty.eb.fsync(l.tty)},read(l,c,d,g){if(!l.tty||!l.tty.eb.Bb)throw new x(60);for(var h=0,k=0;k<g;k++){try{var T=l.tty.eb.Bb(l.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&&(l.node.atime=Date.now()),h},write(l,c,d,g){if(!l.tty||!l.tty.eb.ub)throw new x(60);try{for(var h=0;h<g;h++)l.tty.eb.ub(l.tty,c[d+h])}catch{throw new x(29)}return g&&(l.node.mtime=l.node.ctime=Date.now()),h}},zu={Bb(){e:{if(!ki.length){var l=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&&(l=c.slice(0,d).toString("utf-8"))}else globalThis.window?.prompt&&(l=window.prompt("Input: "),l!==null&&(l+=`
|
|
3
|
+
`));if(!l){l=null;break e}c=Array(es(l)+1),l=et(l,c,0,c.length),c.length=l,ki=c}l=ki.shift()}return l},ub(l,c){c===null||c===10?(I(xs(l.output)),l.output=[]):c!=0&&l.output.push(c)},fsync(l){0<l.output?.length&&(I(xs(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]}},$u={ub(l,c){c===null||c===10?(v(xs(l.output)),l.output=[]):c!=0&&l.output.push(c)},fsync(l){0<l.output?.length&&(v(xs(l.output)),l.output=[])}},N={Wa:null,Xa(){return N.createNode(null,"/",16895,0)},createNode(l,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:Ku}}),d=_a(l,c,d,g),Ae(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(),l&&(l.Na[c]=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 c={};return c.dev=(l.mode&61440)===8192?l.id:1,c.ino=l.id,c.mode=l.mode,c.nlink=1,c.uid=0,c.gid=0,c.rdev=l.rdev,Ae(l.mode)?c.size=4096:(l.mode&61440)===32768?c.size=l.Ra:(l.mode&61440)===40960?c.size=l.link.length:c.size=0,c.atime=new Date(l.atime),c.mtime=new Date(l.mtime),c.ctime=new Date(l.ctime),c.blksize=4096,c.blocks=Math.ceil(c.size/c.blksize),c},Ua(l,c){for(var d of["mode","atime","mtime","ctime"])c[d]!=null&&(l[d]=c[d]);c.size!==void 0&&(c=c.size,l.Ra!=c&&(c==0?(l.Na=null,l.Ra=0):(d=l.Na,l.Na=new Uint8Array(c),d&&l.Na.set(d.subarray(0,Math.min(c,l.Ra))),l.Ra=c)))},lookup(){throw N.nb||(N.nb=new x(44),N.nb.stack="<generic error, no stack>"),N.nb},ib(l,c,d,g){return N.createNode(l,c,d,g)},rename(l,c,d){try{var g=Ft(c,d)}catch{}if(g){if(Ae(l.mode))for(var h in g.Na)throw new x(55);Mi(g)}delete l.parent.Na[l.name],c.Na[d]=l,l.name=d,c.ctime=c.mtime=l.parent.ctime=l.parent.mtime=Date.now()},unlink(l,c){delete l.Na[c],l.ctime=l.mtime=Date.now()},rmdir(l,c){var d=Ft(l,c),g;for(g in d.Na)throw new x(55);delete l.Na[c],l.ctime=l.mtime=Date.now()},readdir(l){return[".","..",...Object.keys(l.Na)]},symlink(l,c,d){return l=N.createNode(l,c,41471,0),l.link=d,l},readlink(l){if((l.mode&61440)!==40960)throw new x(28);return l.link}},Ma:{read(l,c,d,g,h){var k=l.node.Na;if(h>=l.node.Ra)return 0;if(l=Math.min(l.node.Ra-h,g),8<l&&k.subarray)c.set(k.subarray(h,h+l),d);else for(g=0;g<l;g++)c[d+g]=k[h+g];return l},write(l,c,d,g,h,k){if(c.buffer===D.buffer&&(k=!1),!g)return 0;if(l=l.node,l.mtime=l.ctime=Date.now(),c.subarray&&(!l.Na||l.Na.subarray)){if(k)return l.Na=c.subarray(d,d+g),l.Ra=g;if(l.Ra===0&&h===0)return l.Na=c.slice(d,d+g),l.Ra=g;if(h+g<=l.Ra)return l.Na.set(c.subarray(d,d+g),h),g}k=h+g;var T=l.Na?l.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=l.Na,l.Na=new Uint8Array(k),0<l.Ra&&l.Na.set(T.subarray(0,l.Ra),0)),l.Na.subarray&&c.subarray)l.Na.set(c.subarray(d,d+g),h);else for(k=0;k<g;k++)l.Na[h+k]=c[d+k];return l.Ra=Math.max(l.Ra,h+g),g},Va(l,c,d){if(d===1?c+=l.position:d===2&&(l.node.mode&61440)===32768&&(c+=l.node.Ra),0>c)throw new x(28);return c},jb(l,c,d,g,h){if((l.node.mode&61440)!==32768)throw new x(43);if(l=l.node.Na,h&2||!l||l.buffer!==D.buffer){h=!0,g=65536*Math.ceil(c/65536);var k=Ua(65536,g);if(k&&O.fill(0,k,k+g),g=k,!g)throw new x(48);l&&((0<d||d+c<l.length)&&(l.subarray?l=l.subarray(d,d+c):l=Array.prototype.slice.call(l,d,d+c)),D.set(l,g))}else h=!1,g=l.byteOffset;return{Xb:g,Eb:h}},kb(l,c,d,g){return N.Ma.write(l,c,0,g,d,!1),0}}},ga=(l,c)=>{var d=0;return l&&(d|=365),c&&(d|=146),d},Si=null,fa={},ts=[],Wu=1,kt=null,ha=!1,ya=!0,x=class{name="ErrnoError";constructor(l){this.Pa=l}},Hu=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}},Ju=class{La={};Ma={};bb=null;constructor(l,c,d,g){l||=this,this.parent=l,this.Xa=l.Xa,this.id=Wu++,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(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 Le(l,c={}){if(!l)throw new x(44);c.pb??(c.pb=!0),l.charAt(0)==="/"||(l="//"+l);var d=0;e:for(;40>d;d++){l=l.split("/").filter(F=>!!F);for(var g=Si,h="/",k=0;k<l.length;k++){var T=k===l.length-1;if(T&&c.parent)break;if(l[k]!==".")if(l[k]==="..")if(h=ua(h),g===g.parent){l=h+"/"+l.slice(k+1).join("/"),d--;continue e}else g=g.parent;else{h=Ci(h+"/"+l[k]);try{g=Ft(g,l[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=ua(h)+"/"+g),l=g+"/"+l.slice(k+1).join("/");continue e}}}return{path:h,node:g}}throw new x(32)}function wi(l){for(var c;;){if(l===l.parent)return l=l.Xa.Db,c?l[l.length-1]!=="/"?`${l}/${c}`:l+c:l;c=c?`${l.name}/${c}`:l.name,l=l.parent}}function Ti(l,c){for(var d=0,g=0;g<c.length;g++)d=(d<<5)-d+c.charCodeAt(g)|0;return(l+d>>>0)%kt.length}function Mi(l){var c=Ti(l.parent.id,l.name);if(kt[c]===l)kt[c]=l.cb;else for(c=kt[c];c;){if(c.cb===l){c.cb=l.cb;break}c=c.cb}}function Ft(l,c){var d=Ae(l.mode)?(d=ss(l,"x"))?d:l.La.lookup?0:2:54;if(d)throw new x(d);for(d=kt[Ti(l.id,c)];d;d=d.cb){var g=d.name;if(d.parent.id===l.id&&g===c)return d}return l.La.lookup(l,c)}function _a(l,c,d,g){return l=new Ju(l,c,d,g),c=Ti(l.parent.id,l.name),l.cb=kt[c],kt[c]=l}function Ae(l){return(l&61440)===16384}function ss(l,c){return ya?0:c.includes("r")&&!(l.mode&292)||c.includes("w")&&!(l.mode&146)||c.includes("x")&&!(l.mode&73)?2:0}function ba(l,c){if(!Ae(l.mode))return 54;try{return Ft(l,c),20}catch{}return ss(l,"wx")}function Ca(l,c,d){try{var g=Ft(l,c)}catch(h){return h.Pa}if(l=ss(l,"wx"))return l;if(d){if(!Ae(g.mode))return 54;if(g===g.parent||wi(g)==="/")return 10}else if(Ae(g.mode))return 31;return 0}function Nn(l){if(!l)throw new x(63);return l}function Me(l){if(l=ts[l],!l)throw new x(8);return l}function ka(l,c=-1){if(l=Object.assign(new Hu,l),c==-1)e:{for(c=0;4096>=c;c++)if(!ts[c])break e;throw new x(33)}return l.fd=c,ts[c]=l}function Vu(l,c=-1){return l=ka(l,c),l.Ma?.ec?.(l),l}function Pi(l,c,d){var g=l?.Ma.Ua;l=g?l:c,g??=c.La.Ua,Nn(g),g(l,d)}var Ku={open(l){l.Ma=fa[l.node.rdev].Ma,l.Ma.open?.(l)},Va(){throw new x(70)}};function vi(l,c){fa[l]={Ma:c}}function Sa(l,c){var d=c==="/";if(d&&Si)throw new x(10);if(!d&&c){var g=Le(c,{pb:!1});if(c=g.path,g=g.node,g.bb)throw new x(10);if(!Ae(g.mode))throw new x(54)}c={type:l,kc:{},Db:c,Vb:[]},l=l.Xa(c),l.Xa=c,c.root=l,d?Si=l:g&&(g.bb=c,g.Xa&&g.Xa.Vb.push(c))}function Ln(l,c,d){var g=Le(l,{parent:!0}).node;if(l=On(l),!l)throw new x(28);if(l==="."||l==="..")throw new x(20);var h=ba(g,l);if(h)throw new x(h);if(!g.La.ib)throw new x(63);return g.La.ib(g,l,c,d)}function Qu(l,c=438){return Ln(l,c&4095|32768,0)}function tt(l,c=511){return Ln(l,c&1023|16384,0)}function jn(l,c,d){typeof d>"u"&&(d=c,c=438),Ln(l,c|8192,d)}function Ai(l,c){if(!Bu(l))throw new x(44);var d=Le(c,{parent:!0}).node;if(!d)throw new x(44);c=On(c);var g=ba(d,c);if(g)throw new x(g);if(!d.La.symlink)throw new x(63);d.La.symlink(d,c,l)}function wa(l){var c=Le(l,{parent:!0}).node;l=On(l);var d=Ft(c,l),g=Ca(c,l,!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,l),Mi(d)}function Ta(l){var c=Le(l,{parent:!0}).node;if(!c)throw new x(44);l=On(l);var d=Ft(c,l),g=Ca(c,l,!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,l),Mi(d)}function Ds(l,c){return l=Le(l,{ab:!c}).node,Nn(l.La.Ta)(l)}function Ma(l,c,d,g){Pi(l,c,{mode:d&4095|c.mode&-4096,ctime:Date.now(),Lb:g})}function Gn(l,c){l=typeof l=="string"?Le(l,{ab:!0}).node:l,Ma(null,l,c)}function Pa(l,c,d){if(Ae(c.mode))throw new x(31);if((c.mode&61440)!==32768)throw new x(28);var g=ss(c,"w");if(g)throw new x(g);Pi(l,c,{size:d,timestamp:Date.now()})}function ns(l,c,d=438){if(l==="")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 l=="object")g=l;else{var h=l.endsWith("/"),k=Le(l,{ab:!(c&131072),Wb:!0});g=k.node,l=k.path}if(k=!1,c&64)if(g){if(c&128)throw new x(20)}else{if(h)throw new x(31);g=Ln(l,d|511,0),k=!0}if(!g)throw new x(44);if((g.mode&61440)===8192&&(c&=-513),c&65536&&!Ae(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=Ae(g.mode)&&(h!=="r"||c&576)?31:ss(g,h)):h=44,h))throw new x(h);return c&512&&!k&&(h=g,h=typeof h=="string"?Le(h,{ab:!0}).node:h,Pa(null,h,0)),c=ka({node:g,path:wi(g),flags:c&-131713,seekable:!0,position:0,Ma:g.Ma,Yb:[],error:!1}),c.Ma.open&&c.Ma.open(c),k&&Gn(g,d&511),c}function xi(l){if(l.fd===null)throw new x(8);l.rb&&(l.rb=null);try{l.Ma.close&&l.Ma.close(l)}catch(c){throw c}finally{ts[l.fd]=null}l.fd=null}function va(l,c,d){if(l.fd===null)throw new x(8);if(!l.seekable||!l.Ma.Va)throw new x(70);if(d!=0&&d!=1&&d!=2)throw new x(28);l.position=l.Ma.Va(l,c,d),l.Yb=[]}function Aa(l,c,d,g,h){if(0>g||0>h)throw new x(28);if(l.fd===null)throw new x(8);if((l.flags&2097155)===1)throw new x(8);if(Ae(l.node.mode))throw new x(31);if(!l.Ma.read)throw new x(28);var k=typeof h<"u";if(!k)h=l.position;else if(!l.seekable)throw new x(70);return c=l.Ma.read(l,c,d,g,h),k||(l.position+=c),c}function xa(l,c,d,g,h){if(0>g||0>h)throw new x(28);if(l.fd===null)throw new x(8);if((l.flags&2097155)===0)throw new x(8);if(Ae(l.node.mode))throw new x(31);if(!l.Ma.write)throw new x(28);l.seekable&&l.flags&1024&&va(l,0,2);var k=typeof h<"u";if(!k)h=l.position;else if(!l.seekable)throw new x(70);return c=l.Ma.write(l,c,d,g,h,void 0),k||(l.position+=c),c}function Yu(l){var c=c||0,d="binary";d!=="utf8"&&d!=="binary"&&bt(`Invalid encoding type "${d}"`),c=ns(l,c),l=Ds(l).size;var g=new Uint8Array(l);return Aa(c,g,0,l,0),d==="utf8"&&(g=xs(g)),xi(c),g}function St(l,c,d){l=Ci("/dev/"+l);var g=ga(!!c,!!d);St.Cb??(St.Cb=64);var h=St.Cb++<<8|0;vi(h,{open(k){k.seekable=!1},close(){d?.buffer?.length&&d(10)},read(k,T,F,Y){for(var L=0,ue=0;ue<Y;ue++){try{var Se=c()}catch{throw new x(29)}if(Se===void 0&&L===0)throw new x(6);if(Se==null)break;L++,T[F+ue]=Se}return L&&(k.node.atime=Date.now()),L},write(k,T,F,Y){for(var L=0;L<Y;L++)try{d(T[F+L])}catch{throw new x(29)}return Y&&(k.node.mtime=k.node.ctime=Date.now()),L}}),jn(l,g,h)}var ce={};function Ot(l,c,d){if(c.charAt(0)==="/")return c;if(l=l===-100?"/":Me(l).path,c.length==0){if(!d)throw new x(44);return l}return l+"/"+c}function Bn(l,c){te[l>>2]=c.dev,te[l+4>>2]=c.mode,te[l+8>>2]=c.nlink,te[l+12>>2]=c.uid,te[l+16>>2]=c.gid,te[l+20>>2]=c.rdev,Ee[l+24>>3]=BigInt(c.size),le[l+32>>2]=4096,le[l+36>>2]=c.blocks;var d=c.atime.getTime(),g=c.mtime.getTime(),h=c.ctime.getTime();return Ee[l+40>>3]=BigInt(Math.floor(d/1e3)),te[l+48>>2]=d%1e3*1e6,Ee[l+56>>3]=BigInt(Math.floor(g/1e3)),te[l+64>>2]=g%1e3*1e6,Ee[l+72>>3]=BigInt(Math.floor(h/1e3)),te[l+80>>2]=h%1e3*1e6,Ee[l+88>>3]=BigInt(c.ino),0}var qn=void 0,zn=()=>{var l=le[+qn>>2];return qn+=4,l},Di=0,Xu=[0,31,60,91,121,152,182,213,244,274,305,335],Zu=[0,31,59,90,120,151,181,212,243,273,304,334],Es={},Da=l=>{G=l,Fn||0<Di||(i.onExit?.(l),ne=!0),p(l,new Z(l))},ed=l=>{if(!ne)try{l()}catch(c){c instanceof Z||c=="unwind"||p(1,c)}finally{if(!(Fn||0<Di))try{G=l=G,Da(l)}catch(c){c instanceof Z||c=="unwind"||p(1,c)}}},Ei={},Ea=()=>{if(!Ri){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"},c;for(c in Ei)Ei[c]===void 0?delete l[c]:l[c]=Ei[c];var d=[];for(c in l)d.push(`${c}=${l[c]}`);Ri=d}return Ri},Ri,td=(l,c,d,g)=>{var h={string:L=>{var ue=0;if(L!=null&&L!==0){ue=es(L)+1;var Se=Lt(ue);et(L,O,Se,ue),ue=Se}return ue},array:L=>{var ue=Lt(L.length);return D.set(L,ue),ue}};l=i["_"+l];var k=[],T=0;if(g)for(var F=0;F<g.length;F++){var Y=h[d[F]];Y?(T===0&&(T=Jn()),k[F]=Y(g[F])):k[F]=g[F]}return d=l(...k),d=(function(L){return T!==0&&Hn(T),c==="string"?he(L):c==="boolean"?!!L:L})(d)},$n=l=>{var c=es(l)+1,d=Wn(c);return d&&et(l,O,d,c),d},Nt,Ii=[],wt=l=>{Nt.delete(Tt.get(l)),Tt.set(l,null),Ii.push(l)},Ra=l=>{let c=l.length;return[c%128|128,c>>7,...l]},sd={i:127,p:127,j:126,f:125,d:124,e:111},Ia=l=>Ra(Array.from(l,c=>sd[c])),Rs=(l,c)=>{if(!Nt){Nt=new WeakMap;var d=Tt.length;if(Nt)for(var g=0;g<0+d;g++){var h=Tt.get(g);h&&Nt.set(h,g)}}if(d=Nt.get(l)||0)return d;d=Ii.length?Ii.pop():Tt.grow(1);try{Tt.set(d,l)}catch(k){if(!(k instanceof TypeError))throw k;c=Uint8Array.of(0,97,115,109,1,0,0,0,1,...Ra([1,96,...Ia(c.slice(1)),...Ia(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:l}}).exports.f,Tt.set(d,c)}return Nt.set(l,d),d};if(kt=Array(4096),Sa(N,"/"),tt("/tmp"),tt("/home"),tt("/home/web_user"),(function(){tt("/dev"),vi(259,{read:()=>0,write:(g,h,k,T)=>T,Va:()=>0}),jn("/dev/null",259),pa(1280,zu),pa(1536,$u),jn("/dev/tty",1280),jn("/dev/tty1",1536);var l=new Uint8Array(1024),c=0,d=()=>(c===0&&(da(l),c=l.byteLength),l[--c]);St("random",d),St("urandom",d),tt("/dev/shm"),tt("/dev/shm/tmp")})(),(function(){tt("/proc");var l=tt("/proc/self");tt("/proc/self/fd"),Sa({Xa(){var c=_a(l,"fd",16895,73);return c.Ma={Va:N.Ma.Va},c.La={lookup(d,g){d=+g;var h=Me(d);return d={parent:null,Xa:{Db:"fake"},La:{readlink:()=>h.path},id:d+1},d.parent=d},readdir(){return Array.from(ts.entries()).filter(([,d])=>d).map(([d])=>d.toString())}},c}},"/proc/self/fd")})(),i.noExitRuntime&&(Fn=i.noExitRuntime),i.print&&(I=i.print),i.printErr&&(v=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=()=>Jn(),i.stackRestore=l=>Hn(l),i.stackAlloc=l=>Lt(l),i.cwrap=(l,c,d,g)=>{var h=!d||d.every(k=>k==="number"||k==="boolean");return c!=="string"&&h&&!g?i["_"+l]:(...k)=>td(l,c,d,k)},i.addFunction=Rs,i.removeFunction=wt,i.UTF8ToString=he,i.stringToNewUTF8=$n,i.writeArrayToMemory=(l,c)=>{D.set(l,c)};var Wn,Is,Ua,Fa,Hn,Lt,Jn,Vn,Tt,nd={a:(l,c,d,g)=>bt(`Assertion failed: ${he(l)}, at: `+[c?he(c):"unknown filename",d,g?he(g):"unknown function"]),i:function(l,c){try{return l=he(l),Gn(l,c),0}catch(d){if(typeof ce>"u"||d.name!=="ErrnoError")throw d;return-d.Pa}},L:function(l,c,d){try{if(c=he(c),c=Ot(l,c),d&-8)return-28;var g=Le(c,{ab:!0}).node;return g?(l="",d&4&&(l+="r"),d&2&&(l+="w"),d&1&&(l+="x"),l&&ss(g,l)?-2:0):-44}catch(h){if(typeof ce>"u"||h.name!=="ErrnoError")throw h;return-h.Pa}},j:function(l,c){try{var d=Me(l);return Ma(d,d.node,c,!1),0}catch(g){if(typeof ce>"u"||g.name!=="ErrnoError")throw g;return-g.Pa}},h:function(l){try{var c=Me(l);return Pi(c,c.node,{timestamp:Date.now(),Lb:!1}),0}catch(d){if(typeof ce>"u"||d.name!=="ErrnoError")throw d;return-d.Pa}},b:function(l,c,d){qn=d;try{var g=Me(l);switch(c){case 0:var h=zn();if(0>h)break;for(;ts[h];)h++;return Vu(g,h).fd;case 1:case 2:return 0;case 3:return g.flags;case 4:return h=zn(),g.flags|=h,0;case 12:return h=zn(),re[h+0>>1]=2,0;case 13:case 14:return 0}return-28}catch(k){if(typeof ce>"u"||k.name!=="ErrnoError")throw k;return-k.Pa}},g:function(l,c){try{var d=Me(l),g=d.node,h=d.Ma.Ta;l=h?d:g,h??=g.La.Ta,Nn(h);var k=h(l);return Bn(c,k)}catch(T){if(typeof ce>"u"||T.name!=="ErrnoError")throw T;return-T.Pa}},H:function(l,c){c=-9007199254740992>c||9007199254740992<c?NaN:Number(c);try{if(isNaN(c))return-61;var d=Me(l);if(0>c||(d.flags&2097155)===0)throw new x(28);return Pa(d,d.node,c),0}catch(g){if(typeof ce>"u"||g.name!=="ErrnoError")throw g;return-g.Pa}},G:function(l,c){try{if(c===0)return-28;var d=es("/")+1;return c<d?-68:(et("/",O,l,c),d)}catch(g){if(typeof ce>"u"||g.name!=="ErrnoError")throw g;return-g.Pa}},K:function(l,c){try{return l=he(l),Bn(c,Ds(l,!0))}catch(d){if(typeof ce>"u"||d.name!=="ErrnoError")throw d;return-d.Pa}},C:function(l,c,d){try{return c=he(c),c=Ot(l,c),tt(c,d),0}catch(g){if(typeof ce>"u"||g.name!=="ErrnoError")throw g;return-g.Pa}},J:function(l,c,d,g){try{c=he(c);var h=g&256;return c=Ot(l,c,g&4096),Bn(d,h?Ds(c,!0):Ds(c))}catch(k){if(typeof ce>"u"||k.name!=="ErrnoError")throw k;return-k.Pa}},x:function(l,c,d,g){qn=g;try{c=he(c),c=Ot(l,c);var h=g?zn():0;return ns(c,d,h).fd}catch(k){if(typeof ce>"u"||k.name!=="ErrnoError")throw k;return-k.Pa}},v:function(l,c,d,g){try{if(c=he(c),c=Ot(l,c),0>=g)return-28;var h=Le(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,es(k)),F=D[d+T];return et(k,O,d,g+1),D[d+T]=F,T}catch(Y){if(typeof ce>"u"||Y.name!=="ErrnoError")throw Y;return-Y.Pa}},u:function(l){try{return l=he(l),wa(l),0}catch(c){if(typeof ce>"u"||c.name!=="ErrnoError")throw c;return-c.Pa}},f:function(l,c){try{return l=he(l),Bn(c,Ds(l))}catch(d){if(typeof ce>"u"||d.name!=="ErrnoError")throw d;return-d.Pa}},r:function(l,c,d){try{if(c=he(c),c=Ot(l,c),d)if(d===512)wa(c);else return-28;else Ta(c);return 0}catch(g){if(typeof ce>"u"||g.name!=="ErrnoError")throw g;return-g.Pa}},q:function(l,c,d){try{c=he(c),c=Ot(l,c,!0);var g=Date.now(),h,k;if(d){var T=te[d>>2]+4294967296*le[d+4>>2],F=le[d+8>>2];F==1073741823?h=g:F==1073741822?h=null:h=1e3*T+F/1e6,d+=16,T=te[d>>2]+4294967296*le[d+4>>2],F=le[d+8>>2],F==1073741823?k=g:F==1073741822?k=null:k=1e3*T+F/1e6}else k=h=g;if((k??h)!==null){l=h;var Y=Le(c,{ab:!0}).node;Nn(Y.La.Ua)(Y,{atime:l,mtime:k})}return 0}catch(L){if(typeof ce>"u"||L.name!=="ErrnoError")throw L;return-L.Pa}},m:()=>bt(""),l:()=>{Fn=!1,Di=0},A:function(l,c){l=-9007199254740992>l||9007199254740992<l?NaN:Number(l),l=new Date(1e3*l),le[c>>2]=l.getSeconds(),le[c+4>>2]=l.getMinutes(),le[c+8>>2]=l.getHours(),le[c+12>>2]=l.getDate(),le[c+16>>2]=l.getMonth(),le[c+20>>2]=l.getFullYear()-1900,le[c+24>>2]=l.getDay();var d=l.getFullYear();le[c+28>>2]=(d%4!==0||d%100===0&&d%400!==0?Zu:Xu)[l.getMonth()]+l.getDate()-1|0,le[c+36>>2]=-(60*l.getTimezoneOffset()),d=new Date(l.getFullYear(),6,1).getTimezoneOffset();var g=new Date(l.getFullYear(),0,1).getTimezoneOffset();le[c+32>>2]=(d!=g&&l.getTimezoneOffset()==Math.min(g,d))|0},y:function(l,c,d,g,h,k,T){h=-9007199254740992>h||9007199254740992<h?NaN:Number(h);try{var F=Me(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(!l)throw new x(28);var Y=F.Ma.jb(F,l,h,c,d),L=Y.Xb;return le[k>>2]=Y.Eb,te[T>>2]=L,0}catch(ue){if(typeof ce>"u"||ue.name!=="ErrnoError")throw ue;return-ue.Pa}},z:function(l,c,d,g,h,k){k=-9007199254740992>k||9007199254740992<k?NaN:Number(k);try{var T=Me(h);if(d&2){if(d=k,(T.node.mode&61440)!==32768)throw new x(43);if(!(g&2)){var F=O.slice(l,l+c);T.Ma.kb&&T.Ma.kb(T,F,d,c,g)}}}catch(Y){if(typeof ce>"u"||Y.name!=="ErrnoError")throw Y;return-Y.Pa}},n:(l,c)=>{if(Es[l]&&(clearTimeout(Es[l].id),delete Es[l]),!c)return 0;var d=setTimeout(()=>{delete Es[l],ed(()=>Fa(l,performance.now()))},c);return Es[l]={id:d,lc:c},0},B:(l,c,d,g)=>{var h=new Date().getFullYear(),k=new Date(h,0,1).getTimezoneOffset();h=new Date(h,6,1).getTimezoneOffset(),te[l>>2]=60*Math.max(k,h),le[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")}`},l=c(k),c=c(h),h<k?(et(l,O,d,17),et(c,O,g,17)):(et(l,O,g,17),et(c,O,d,17))},d:()=>Date.now(),s:()=>2147483648,c:()=>performance.now(),o:l=>{var c=O.length;if(l>>>=0,2147483648<l)return!1;for(var d=1;4>=d;d*=2){var g=c*(1+.2/d);g=Math.min(g,l+100663296);e:{g=(Math.min(2147483648,65536*Math.ceil(Math.max(l,g)/65536))-Vn.buffer.byteLength+65535)/65536|0;try{Vn.grow(g),Ms();var h=1;break e}catch{}h=void 0}if(h)return!0}return!1},E:(l,c)=>{var d=0,g=0,h;for(h of Ea()){var k=c+d;te[l+g>>2]=k,d+=et(h,O,k,1/0)+1,g+=4}return 0},F:(l,c)=>{var d=Ea();te[l>>2]=d.length,l=0;for(var g of d)l+=es(g)+1;return te[c>>2]=l,0},e:function(l){try{var c=Me(l);return xi(c),0}catch(d){if(typeof ce>"u"||d.name!=="ErrnoError")throw d;return d.Pa}},p:function(l,c){try{var d=Me(l);return D[c]=d.tty?2:Ae(d.mode)?3:(d.mode&61440)===40960?7:4,re[c+2>>1]=0,Ee[c+8>>3]=BigInt(0),Ee[c+16>>3]=BigInt(0),0}catch(g){if(typeof ce>"u"||g.name!=="ErrnoError")throw g;return g.Pa}},w:function(l,c,d,g){try{e:{var h=Me(l);l=c;for(var k,T=c=0;T<d;T++){var F=te[l>>2],Y=te[l+4>>2];l+=8;var L=Aa(h,D,F,Y,k);if(0>L){var ue=-1;break e}if(c+=L,L<Y)break;typeof k<"u"&&(k+=L)}ue=c}return te[g>>2]=ue,0}catch(Se){if(typeof ce>"u"||Se.name!=="ErrnoError")throw Se;return Se.Pa}},D:function(l,c,d,g){c=-9007199254740992>c||9007199254740992<c?NaN:Number(c);try{if(isNaN(c))return 61;var h=Me(l);return va(h,c,d),Ee[g>>3]=BigInt(h.position),h.rb&&c===0&&d===0&&(h.rb=null),0}catch(k){if(typeof ce>"u"||k.name!=="ErrnoError")throw k;return k.Pa}},I:function(l){try{var c=Me(l);return c.Ma?.fsync?.(c)}catch(d){if(typeof ce>"u"||d.name!=="ErrnoError")throw d;return d.Pa}},t:function(l,c,d,g){try{e:{var h=Me(l);l=c;for(var k,T=c=0;T<d;T++){var F=te[l>>2],Y=te[l+4>>2];l+=8;var L=xa(h,D,F,Y,k);if(0>L){var ue=-1;break e}if(c+=L,L<Y)break;typeof k<"u"&&(k+=L)}ue=c}return te[g>>2]=ue,0}catch(Se){if(typeof ce>"u"||Se.name!=="ErrnoError")throw Se;return Se.Pa}},k:Da};function Ui(){function l(){if(i.calledRun=!0,!ne){if(!i.noFSInit&&!ha){var c,d;ha=!0,c??=i.stdin,d??=i.stdout,g??=i.stderr,c?St("stdin",c):Ai("/dev/tty","/dev/stdin"),d?St("stdout",null,d):Ai("/dev/tty","/dev/stdout"),g?St("stderr",null,g):Ai("/dev/tty1","/dev/stderr"),ns("/dev/stdin",0),ns("/dev/stdout",1),ns("/dev/stderr",1)}if(Fi.N(),ya=!1,i.onRuntimeInitialized?.(),i.postRun)for(typeof i.postRun=="function"&&(i.postRun=[i.postRun]);i.postRun.length;){var g=i.postRun.shift();Ct.push(g)}Te(Ct)}}if(0<Ut)vs=Ui;else{if(i.preRun)for(typeof i.preRun=="function"&&(i.preRun=[i.preRun]);i.preRun.length;)Ps();Te(Zt),0<Ut?vs=Ui:i.setStatus?(i.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>i.setStatus(""),1),l()},1)):l()}}var Fi;return(async function(){function l(d){return d=Fi=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,Wn=i._malloc=d.Da,Is=i._free=d.Ea,i._RegisterExtensionFunctions=d.Fa,Ua=d.Ga,Fa=d.Ha,Hn=d.Ia,Lt=d.Ja,Jn=d.Ka,Vn=d.M,Tt=d.O,Ms(),Ut--,i.monitorRunDependencies?.(Ut),Ut==0&&vs&&(d=vs,vs=null,d()),Fi}Ut++,i.monitorRunDependencies?.(Ut);var c={a:nd};return i.instantiateWasm?new Promise(d=>{i.instantiateWasm(c,(g,h)=>{d(l(g,h))})}):(at??=i.locateFile?i.locateFile("sql-wasm.wasm",y):y+"sql-wasm.wasm",l((await bi(c)).instance))})(),Ui(),s}),lo)};typeof uo=="object"&&typeof qt=="object"?(qt.exports=co,qt.exports.default=co):typeof define=="function"&&define.amd?define([],function(){return co}):typeof uo=="object"&&(uo.Module=co)});var yo=Ce(ut=>{"use strict";Object.defineProperty(ut,"__esModule",{value:!0});ut.utf8Count=qm;ut.utf8EncodeJs=Ml;ut.utf8EncodeTE=Pl;ut.utf8Encode=Wm;ut.utf8DecodeJs=vl;ut.utf8DecodeTD=Al;ut.utf8Decode=Km;function qm(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 Ml(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 zm=new TextEncoder,$m=50;function Pl(n,e,t){zm.encodeInto(n,e.subarray(t))}function Wm(n,e,t){n.length>$m?Pl(n,e,t):Ml(n,e,t)}var Hm=4096;function vl(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 u=n[s++]&63;i.push((a&31)<<6|u)}else if((a&240)===224){let u=n[s++]&63,m=n[s++]&63;i.push((a&31)<<12|u<<6|m)}else if((a&248)===240){let u=n[s++]&63,m=n[s++]&63,p=n[s++]&63,f=(a&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(a);i.length>=Hm&&(r+=String.fromCharCode(...i),i.length=0)}return i.length>0&&(r+=String.fromCharCode(...i)),r}var Jm=new TextDecoder,Vm=200;function Al(n,e,t){let s=n.subarray(e,e+t);return Jm.decode(s)}function Km(n,e,t){return t>Vm?Al(n,e,t):vl(n,e,t)}});var Qi=Ce(_o=>{"use strict";Object.defineProperty(_o,"__esModule",{value:!0});_o.ExtData=void 0;var Ki=class{type;data;constructor(e,t){this.type=e,this.data=t}};_o.ExtData=Ki});var Co=Ce(bo=>{"use strict";Object.defineProperty(bo,"__esModule",{value:!0});bo.DecodeError=void 0;var Yi=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})}};bo.DecodeError=Yi});var ko=Ce(vt=>{"use strict";Object.defineProperty(vt,"__esModule",{value:!0});vt.UINT32_MAX=void 0;vt.setUint64=Qm;vt.setInt64=Ym;vt.getInt64=Xm;vt.getUint64=Zm;vt.UINT32_MAX=4294967295;function Qm(n,e,t){let s=t/4294967296,o=t;n.setUint32(e,s),n.setUint32(e+4,o)}function Ym(n,e,t){let s=Math.floor(t/4294967296),o=t;n.setUint32(e,s),n.setUint32(e+4,o)}function Xm(n,e){let t=n.getInt32(e),s=n.getUint32(e+4);return t*4294967296+s}function Zm(n,e){let t=n.getUint32(e),s=n.getUint32(e+4);return t*4294967296+s}});var Xi=Ce(Be=>{"use strict";Object.defineProperty(Be,"__esModule",{value:!0});Be.timestampExtension=Be.EXT_TIMESTAMP=void 0;Be.encodeTimeSpecToTimestamp=Dl;Be.encodeDateToTimeSpec=El;Be.encodeTimestampExtension=Rl;Be.decodeTimestampToTimeSpec=Il;Be.decodeTimestampExtension=Ul;var ep=Co(),xl=ko();Be.EXT_TIMESTAMP=-1;var tp=4294967296-1,sp=17179869184-1;function Dl({sec:n,nsec:e}){if(n>=0&&e>=0&&n<=sp)if(e===0&&n<=tp){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,xl.setInt64)(s,4,n),t}}function El(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 Rl(n){if(n instanceof Date){let e=El(n);return Dl(e)}else return null}function Il(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,xl.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 Ul(n){let e=Il(n);return new Date(e.sec*1e3+e.nsec/1e6)}Be.timestampExtension={type:Be.EXT_TIMESTAMP,encode:Rl,decode:Ul}});var To=Ce(wo=>{"use strict";Object.defineProperty(wo,"__esModule",{value:!0});wo.ExtensionCodec=void 0;var So=Qi(),np=Xi(),Zi=class n{static defaultCodec=new n;__brand;builtInEncoders=[];builtInDecoders=[];encoders=[];decoders=[];constructor(){this.register(np.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 So.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 So.ExtData(r,i)}}}return e instanceof So.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 So.ExtData(t,e)}};wo.ExtensionCodec=Zi});var tr=Ce(er=>{"use strict";Object.defineProperty(er,"__esModule",{value:!0});er.ensureUint8Array=ip;function op(n){return n instanceof ArrayBuffer||typeof SharedArrayBuffer<"u"&&n instanceof SharedArrayBuffer}function ip(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 nr=Ce(ot=>{"use strict";Object.defineProperty(ot,"__esModule",{value:!0});ot.Encoder=ot.DEFAULT_INITIAL_BUFFER_SIZE=ot.DEFAULT_MAX_DEPTH=void 0;var Fl=yo(),rp=To(),Ol=ko(),ap=tr();ot.DEFAULT_MAX_DEPTH=100;ot.DEFAULT_INITIAL_BUFFER_SIZE=2048;var sr=class n{extensionCodec;context;useBigInt64;maxDepth;initialBufferSize;sortKeys;forceFloat32;ignoreUndefined;forceIntegerToFloat;pos;view;bytes;entered=!1;constructor(e){this.extensionCodec=e?.extensionCodec??rp.ExtensionCodec.defaultCodec,this.context=e?.context,this.useBigInt64=e?.useBigInt64??!1,this.maxDepth=e?.maxDepth??ot.DEFAULT_MAX_DEPTH,this.initialBufferSize=e?.initialBufferSize??ot.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,Fl.utf8Count)(e);this.ensureBufferSizeToWrite(5+s),this.writeStringHeader(s),(0,Fl.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,ap.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,Ol.setUint64)(this.view,this.pos,e),this.pos+=8}writeI64(e){this.ensureBufferSizeToWrite(8),(0,Ol.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}};ot.Encoder=sr});var Nl=Ce(or=>{"use strict";Object.defineProperty(or,"__esModule",{value:!0});or.encode=cp;var lp=nr();function cp(n,e){return new lp.Encoder(e).encodeSharedRef(n)}});var Ll=Ce(ir=>{"use strict";Object.defineProperty(ir,"__esModule",{value:!0});ir.prettyByte=up;function up(n){return`${n<0?"-":""}0x${Math.abs(n).toString(16).padStart(2,"0")}`}});var jl=Ce(Mo=>{"use strict";Object.defineProperty(Mo,"__esModule",{value:!0});Mo.CachedKeyDecoder=void 0;var dp=yo(),mp=16,pp=16,rr=class{hit=0;miss=0;caches;maxKeyLength;maxLengthPerKey;constructor(e=mp,t=pp){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,dp.utf8DecodeJs)(e,t,s),r=Uint8Array.prototype.slice.call(e,t,t+s);return this.store(r,i),i}};Mo.CachedKeyDecoder=rr});var vo=Ce(Po=>{"use strict";Object.defineProperty(Po,"__esModule",{value:!0});Po.Decoder=void 0;var ar=Ll(),gp=To(),Ht=ko(),fp=yo(),Gl=tr(),hp=jl(),dt=Co(),lr="array",Vs="map_key",ql="map_value",yp=n=>{if(typeof n=="string"||typeof n=="number")return n;throw new dt.DecodeError("The type of key must be string or number but "+typeof n)},cr=class{stack=[];stackHeadPosition=-1;get length(){return this.stackHeadPosition+1}top(){return this.stack[this.stackHeadPosition]}pushArrayState(e){let t=this.getUninitializedStateFromPool();t.type=lr,t.position=0,t.size=e,t.array=new Array(e)}pushMapState(e){let t=this.getUninitializedStateFromPool();t.type=Vs,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===lr){let s=e;s.size=0,s.array=void 0,s.position=0,s.type=void 0}if(e.type===Vs||e.type===ql){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}},Js=-1,dr=new DataView(new ArrayBuffer(0)),_p=new Uint8Array(dr.buffer);try{dr.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 Bl=new RangeError("Insufficient data"),bp=new hp.CachedKeyDecoder,ur=class n{extensionCodec;context;useBigInt64;rawStrings;maxStrLength;maxBinLength;maxArrayLength;maxMapLength;maxExtLength;keyDecoder;mapKeyConverter;totalPos=0;pos=0;view=dr;bytes=_p;headByte=Js;stack=new cr;entered=!1;constructor(e){this.extensionCodec=e?.extensionCodec??gp.ExtensionCodec.defaultCodec,this.context=e?.context,this.useBigInt64=e?.useBigInt64??!1,this.rawStrings=e?.rawStrings??!1,this.maxStrLength=e?.maxStrLength??Ht.UINT32_MAX,this.maxBinLength=e?.maxBinLength??Ht.UINT32_MAX,this.maxArrayLength=e?.maxArrayLength??Ht.UINT32_MAX,this.maxMapLength=e?.maxMapLength??Ht.UINT32_MAX,this.maxExtLength=e?.maxExtLength??Ht.UINT32_MAX,this.keyDecoder=e?.keyDecoder!==void 0?e.keyDecoder:bp,this.mapKeyConverter=e?.mapKeyConverter??yp}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=Js,this.stack.reset()}setBuffer(e){let t=(0,Gl.ensureUint8Array)(e);this.bytes=t,this.view=new DataView(t.buffer,t.byteOffset,t.byteLength),this.pos=0}appendBuffer(e){if(this.headByte===Js&&!this.hasRemaining(1))this.setBuffer(e);else{let t=this.bytes.subarray(this.pos),s=(0,Gl.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(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,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 dt.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===lr)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===Vs){if(t==="__proto__")throw new dt.DecodeError("The key __proto__ is not allowed");o.key=this.mapKeyConverter(t),o.type=ql;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=Vs;continue e}}return t}}readHeadByte(){return this.headByte===Js&&(this.headByte=this.readU8()),this.headByte}complete(){this.headByte=Js}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 dt.DecodeError(`Unrecognized array type byte: ${(0,ar.prettyByte)(e)}`)}}}pushMapState(e){if(e>this.maxMapLength)throw new dt.DecodeError(`Max length exceeded: map length (${e}) > maxMapLengthLength (${this.maxMapLength})`);this.stack.pushMapState(e)}pushArrayState(e){if(e>this.maxArrayLength)throw new dt.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 dt.DecodeError(`Max length exceeded: UTF-8 byte length (${e}) > maxStrLength (${this.maxStrLength})`);if(this.bytes.byteLength<this.pos+t+e)throw Bl;let s=this.pos+t,o;return this.stateIsMapKey()&&this.keyDecoder?.canBeCached(e)?o=this.keyDecoder.decode(this.bytes,s,e):o=(0,fp.utf8Decode)(this.bytes,s,e),this.pos+=t+e,o}stateIsMapKey(){return this.stack.length>0?this.stack.top().type===Vs:!1}decodeBinary(e,t){if(e>this.maxBinLength)throw new dt.DecodeError(`Max length exceeded: bin length (${e}) > maxBinLength (${this.maxBinLength})`);if(!this.hasRemaining(e+t))throw Bl;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 dt.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,Ht.getUint64)(this.view,this.pos);return this.pos+=8,e}readI64(){let e=(0,Ht.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}};Po.Decoder=ur});var $l=Ce(Ao=>{"use strict";Object.defineProperty(Ao,"__esModule",{value:!0});Ao.decode=Cp;Ao.decodeMulti=kp;var zl=vo();function Cp(n,e){return new zl.Decoder(e).decode(n)}function kp(n,e){return new zl.Decoder(e).decodeMulti(n)}});var Jl=Ce(Ks=>{"use strict";Object.defineProperty(Ks,"__esModule",{value:!0});Ks.isAsyncIterable=Wl;Ks.asyncIterableFromStream=Hl;Ks.ensureAsyncIterable=Sp;function Wl(n){return n[Symbol.asyncIterator]!=null}async function*Hl(n){let e=n.getReader();try{for(;;){let{done:t,value:s}=await e.read();if(t)return;yield s}}finally{e.releaseLock()}}function Sp(n){return Wl(n)?n:Hl(n)}});var Vl=Ce(Qs=>{"use strict";Object.defineProperty(Qs,"__esModule",{value:!0});Qs.decodeAsync=wp;Qs.decodeArrayStream=Tp;Qs.decodeMultiStream=Mp;var mr=vo(),pr=Jl();async function wp(n,e){let t=(0,pr.ensureAsyncIterable)(n);return new mr.Decoder(e).decodeAsync(t)}function Tp(n,e){let t=(0,pr.ensureAsyncIterable)(n);return new mr.Decoder(e).decodeArrayStream(t)}function Mp(n,e){let t=(0,pr.ensureAsyncIterable)(n);return new mr.Decoder(e).decodeStream(t)}});var fr=Ce(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=Nl();Object.defineProperty(z,"encode",{enumerable:!0,get:function(){return Pp.encode}});var Kl=$l();Object.defineProperty(z,"decode",{enumerable:!0,get:function(){return Kl.decode}});Object.defineProperty(z,"decodeMulti",{enumerable:!0,get:function(){return Kl.decodeMulti}});var gr=Vl();Object.defineProperty(z,"decodeAsync",{enumerable:!0,get:function(){return gr.decodeAsync}});Object.defineProperty(z,"decodeArrayStream",{enumerable:!0,get:function(){return gr.decodeArrayStream}});Object.defineProperty(z,"decodeMultiStream",{enumerable:!0,get:function(){return gr.decodeMultiStream}});var vp=vo();Object.defineProperty(z,"Decoder",{enumerable:!0,get:function(){return vp.Decoder}});var Ap=Co();Object.defineProperty(z,"DecodeError",{enumerable:!0,get:function(){return Ap.DecodeError}});var xp=nr();Object.defineProperty(z,"Encoder",{enumerable:!0,get:function(){return xp.Encoder}});var Dp=To();Object.defineProperty(z,"ExtensionCodec",{enumerable:!0,get:function(){return Dp.ExtensionCodec}});var Ep=Qi();Object.defineProperty(z,"ExtData",{enumerable:!0,get:function(){return Ep.ExtData}});var ms=Xi();Object.defineProperty(z,"EXT_TIMESTAMP",{enumerable:!0,get:function(){return ms.EXT_TIMESTAMP}});Object.defineProperty(z,"encodeDateToTimeSpec",{enumerable:!0,get:function(){return ms.encodeDateToTimeSpec}});Object.defineProperty(z,"encodeTimeSpecToTimestamp",{enumerable:!0,get:function(){return ms.encodeTimeSpecToTimestamp}});Object.defineProperty(z,"decodeTimestampToTimeSpec",{enumerable:!0,get:function(){return ms.decodeTimestampToTimeSpec}});Object.defineProperty(z,"encodeTimestampExtension",{enumerable:!0,get:function(){return ms.encodeTimestampExtension}});Object.defineProperty(z,"decodeTimestampExtension",{enumerable:!0,get:function(){return ms.decodeTimestampExtension}})});var ju=Ce((DT,T_)=>{T_.exports={name:"@rajbos/ai-engineering-fluency",version:"0.2.13",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:"^6.0.2"},engines:{node:">=22.14.0"}}});var Mt=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}},Gt=class extends Mt{constructor(e){super(1,"commander.invalidArgument",e),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};var Us=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 Gt(`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 Qn(n){let e=n.name()+(n.variadic===!0?"...":"");return n.required?"<"+e+">":"["+e+"]"}var Qa=require("node:events"),Xn=P(require("node:child_process"),1),st=P(require("node:path"),1),Os=P(require("node:fs"),1),V=P(require("node:process"),1),Ya=require("node:util");var Ha=require("node:util"),Fs=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=>Qn(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))}`,""],a=t.commandDescription(e);a.length>0&&(r=r.concat([t.boxWrap(t.styleCommandDescription(a),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,Ha.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)),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+a+" ".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 a=r.match(o);if(a===null){i.push("");return}let u=[a.shift()],m=this.displayWidth(u[0]);a.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 os=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=Nd(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 Gt(`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?Ja(this.name().replace(/^no-/,"")):Ja(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}},Yn=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 Ja(n){return n.split("-").reduce((e,t)=>e+t[0].toUpperCase()+t.slice(1))}function Nd(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(`${
|
|
11
|
-
- too many short flags`):o.test(r)?new Error(`${
|
|
12
|
-
- too many long flags`):new Error(`${
|
|
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
|
|
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 Ld(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 Ni(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=Ld(n,r),u=Math.max(n.length,r.length);(u-a)/u>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
|
|
16
|
-
- specify the name in Command constructor or using .name()`);return t=t||{},t.isDefault&&(this._defaultCommandName=e._name),(t.noHelp||t.hidden)&&(e._hidden=!0),this._registerCommand(e),e.parent=this,e._checkForBrokenPassThrough(),this}createArgument(e,t){return new
|
|
17
|
-
Expecting one of '${s.join("', '")}'`);return this._lifeCycleHooks[e]?this._lifeCycleHooks[e].push(t):this._lifeCycleHooks[e]=[t],this}exitOverride(e){return e?this._exitCallback=e:this._exitCallback=t=>{if(t.code!=="commander.executeSubCommandAsync")throw t},this}_exit(e,t,s){this._exitCallback&&this._exitCallback(new
|
|
18
|
-
- already used by option '${t.flags}'`)}this._initOptionGroup(e),this.options.push(e)}_registerCommand(e){let t=o=>[o.name()].concat(o.aliases()),s=t(e).find(o=>this._findCommand(o));if(s){let o=t(this._findCommand(s)).join("|"),i=t(e).join("|");throw new Error(`cannot add command '${i}' as already have command '${o}'`)}this._initCommandGroup(e),this.commands.push(e)}addOption(e){this._registerOption(e);let t=e.name(),s=e.attributeName();e.defaultValue!==void 0&&this.setOptionValueWithSource(s,e.defaultValue,"default");let o=(i,r,
|
|
19
|
-
- either make a new Command for each call to parse, or stop storing options as properties`);this._name=this._savedState._name,this._scriptPath=null,this.rawArgs=[],this._optionValues={...this._savedState._optionValues},this._optionValueSources={...this._savedState._optionValueSources},this.args=[],this.processedArgs=[]}_checkForMissingExecutable(e,t,s){if(
|
|
15
|
+
(Did you mean ${s[0]}?)`:""}var ae=class n extends Qa.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=>V.default.stdout.write(t),writeErr:t=>V.default.stderr.write(t),outputError:(t,s)=>s(t),getOutHelpWidth:()=>V.default.stdout.isTTY?V.default.stdout.columns:void 0,getErrHelpWidth:()=>V.default.stderr.isTTY?V.default.stderr.columns:void 0,getOutHasColors:()=>Ka()??(V.default.stdout.isTTY&&V.default.stdout.hasColors?.()),getErrHasColors:()=>Ka()??(V.default.stderr.isTTY&&V.default.stderr.hasColors?.()),stripColor:t=>(0,Ya.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(/([^ ]+) *(.*)/),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,a&&u.arguments(a),this._registerCommand(u),u.parent=this,u.copyInheritedSettings(this),o?this:u}createCommand(e){return new n(e)}createHelp(){return Object.assign(new Fs,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 Us(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 Mt(e,t,s)),V.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 os(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 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,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 os)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=(u,m)=>{let p=a.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){V.default.versions?.electron&&(t.from="electron");let o=V.default.execArgv??[];(o.includes("-e")||o.includes("--eval")||o.includes("-p")||o.includes("--print"))&&(t.from="eval")}e===void 0&&(e=V.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":V.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(Os.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=
|
|
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=st.default.resolve(p,f);if(Os.default.existsSync(y))return y;if(s.includes(st.default.extname(f)))return;let _=s.find(C=>Os.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=Os.default.realpathSync(this._scriptPath)}catch{p=this._scriptPath}r=st.default.resolve(st.default.dirname(p),r)}if(r){let p=o(r,i);if(!p&&!e._executableFile&&this._scriptPath){let f=st.default.basename(this._scriptPath,st.default.extname(this._scriptPath));f!==this._name&&(p=o(r,`${f}-${e._name}`))}i=p||i}let a=s.includes(st.default.extname(i)),u;V.default.platform!=="win32"?a?(t.unshift(i),t=Va(V.default.execArgv).concat(t),u=Xn.default.spawn(V.default.argv[0],t,{stdio:"inherit"})):u=Xn.default.spawn(i,t,{stdio:"inherit"}):(this._checkForMissingExecutable(i,r,e._name),t.unshift(i),t=Va(V.default.execArgv).concat(t),u=Xn.default.spawn(V.default.execPath,t,{stdio:"inherit"})),u.killed||["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach(f=>{V.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 Mt(p,"commander.executeSubCommandAsync","(close)")):V.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)V.default.exit(1);else{let f=new Mt(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 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(f=>f.options.map(y=>y.short).some(y=>/^-\d$/.test(y))):!1,a=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(a&&(!i(p)||r(p))){this.emit(`option:${a.name()}`,p);continue}if(a=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()}`);a=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}
|
|
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
|
|
26
|
-
`),this._exit(0,"commander.version",e)}),this}description(e,t){return e===void 0&&t===void 0?this._description:(this._description=e,t&&(this._argsDescription=t),this)}summary(e){return e===void 0?this._summary:(this._summary=e,this)}alias(e){if(e===void 0)return this._aliases[0];let t=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler&&(t=this.commands[this.commands.length-1]),e===t._name)throw new Error("Command alias can't be the same as its name");let s=this.parent?._findCommand(e);if(s){let o=[s.name()].concat(s.aliases()).join("|");throw new Error(`cannot add alias '${e}' to command '${this.name()}' as already have command '${o}'`)}return t._aliases.push(e),this}aliases(e){return e===void 0?this._aliases:(e.forEach(t=>this.alias(t)),this)}usage(e){if(e===void 0){if(this._usage)return this._usage;let t=this.registeredArguments.map(s=>
|
|
25
|
+
`),this.outputHelp({error:!0}));let s=t||{},o=s.exitCode||1,i=s.code||"commander.error";this._exit(o,i,e)}_parseOptionsEnv(){this.options.forEach(e=>{if(e.envVar&&e.envVar in V.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()}`,V.default.env[e.envVar]):this.emit(`optionEnv:${e.name()}`))}})}_parseOptionsImplied(){let e=new Yn(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(),u=this.getOptionValue(a),m=this.options.find(f=>f.negate&&a===f.attributeName()),p=this.options.find(f=>!f.negate&&a===f.attributeName());return m&&(m.presetArg===void 0&&u===!1||m.presetArg!==void 0&&u===m.presetArg)?m:p||r},o=r=>{let a=s(r),u=a.attributeName();return this.getOptionValueSource(u)==="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=Ni(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=Ni(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=>Qn(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=st.default.basename(e,st.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(V.default.exitCode??0);t===0&&e&&typeof e!="function"&&e.error&&(t=1),this._exit(t,"commander.help","(outputHelp)")}addHelpText(e,t){let s=["beforeAll","before","after","afterAll"];if(!s.includes(e))throw new Error(`Unexpected value for position to addHelpText.
|
|
27
27
|
Expecting one of '${s.join("', '")}'`);let o=`${e}Help`;return this.on(o,i=>{let r;typeof t=="function"?r=t({error:i.error,command:i.command}):r=t,r&&i.write(`${r}
|
|
28
|
-
`)}),this}_outputHelpIfRequested(e){let t=this._getHelpOption();t&&e.find(o=>t.is(o))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function
|
|
28
|
+
`)}),this}_outputHelpIfRequested(e){let t=this._getHelpOption();t&&e.find(o=>t.is(o))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function Va(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 Ka(){if(V.default.env.NO_COLOR||V.default.env.FORCE_COLOR==="0"||V.default.env.FORCE_COLOR==="false")return!1;if(V.default.env.FORCE_COLOR||V.default.env.CLICOLOR_FORCE!==void 0)return!0}var H_=new ae;var Xa=(n=0)=>e=>`\x1B[${e+n}m`,Za=(n=0)=>e=>`\x1B[${38+n};5;${e}m`,el=(n=0)=>(e,t,s)=>`\x1B[${38+n};2;${e};${t};${s}m`,de={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]}},V_=Object.keys(de.modifier),jd=Object.keys(de.color),Gd=Object.keys(de.bgColor),K_=[...jd,...Gd];function Bd(){let n=new Map;for(let[e,t]of Object.entries(de)){for(let[s,o]of Object.entries(t))de[s]={open:`\x1B[${o[0]}m`,close:`\x1B[${o[1]}m`},t[s]=de[s],n.set(o[0],o[1]);Object.defineProperty(de,e,{value:t,enumerable:!1})}return Object.defineProperty(de,"codes",{value:n,enumerable:!1}),de.color.close="\x1B[39m",de.bgColor.close="\x1B[49m",de.color.ansi=Xa(),de.color.ansi256=Za(),de.color.ansi16m=el(),de.bgColor.ansi=Xa(10),de.bgColor.ansi256=Za(10),de.bgColor.ansi16m=el(10),Object.defineProperties(de,{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=>de.rgbToAnsi256(...de.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)=>de.ansi256ToAnsi(de.rgbToAnsi256(e,t,s)),enumerable:!1},hexToAnsi:{value:e=>de.ansi256ToAnsi(de.hexToAnsi256(e)),enumerable:!1}}),de}var qd=Bd(),Je=qd;var eo=P(require("node:process"),1),sl=P(require("node:os"),1),Li=P(require("node:tty"),1);function Ge(n,e=globalThis.Deno?globalThis.Deno.args:eo.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:me}=eo.default,Zn;Ge("no-color")||Ge("no-colors")||Ge("color=false")||Ge("color=never")?Zn=0:(Ge("color")||Ge("colors")||Ge("color=true")||Ge("color=always"))&&(Zn=1);function zd(){if("FORCE_COLOR"in me)return me.FORCE_COLOR==="true"?1:me.FORCE_COLOR==="false"?0:me.FORCE_COLOR.length===0?1:Math.min(Number.parseInt(me.FORCE_COLOR,10),3)}function $d(n){return n===0?!1:{level:n,hasBasic:!0,has256:n>=2,has16m:n>=3}}function Wd(n,{streamIsTTY:e,sniffFlags:t=!0}={}){let s=zd();s!==void 0&&(Zn=s);let o=t?Zn: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 me&&"AGENT_NAME"in me)return 1;if(n&&!e&&o===void 0)return 0;let i=o||0;if(me.TERM==="dumb")return i;if(eo.default.platform==="win32"){let r=sl.default.release().split(".");return Number(r[0])>=10&&Number(r[2])>=10586?Number(r[2])>=14931?3:2:1}if("CI"in me)return["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some(r=>r in me)?3:["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(r=>r in me)||me.CI_NAME==="codeship"?1:i;if("TEAMCITY_VERSION"in me)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(me.TEAMCITY_VERSION)?1:0;if(me.COLORTERM==="truecolor"||me.TERM==="xterm-kitty"||me.TERM==="xterm-ghostty"||me.TERM==="wezterm")return 3;if("TERM_PROGRAM"in me){let r=Number.parseInt((me.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(me.TERM_PROGRAM){case"iTerm.app":return r>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(me.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(me.TERM)||"COLORTERM"in me?1:i}function tl(n,e={}){let t=Wd(n,{streamIsTTY:n&&n.isTTY,...e});return $d(t)}var Hd={stdout:tl({isTTY:Li.default.isatty(1)}),stderr:tl({isTTY:Li.default.isatty(2)})},nl=Hd;function ol(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 il(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:
|
|
32
|
-
`);return i!==-1&&(e=$a(e,o,s,i)),s+e+o};Object.defineProperties(Rs.prototype,ss);var vd=Rs(),y_=Rs({level:Wa?Wa.level:0});var w=vd;var ft=P(require("fs")),Se=P(require("path")),Gc=P(require("os"));var Ja={getConfiguration:()=>({get:()=>{}})},vi={getExtension:()=>{}},Jn=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 Us=P(require("fs")),Ya=P(require("path"));function Ai(n){return typeof n.discover=="function"}function Ka(n){return typeof n.analyzeUsage=="function"}function Vn(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 Kn=fe;function oe(n){return fe(n).toLowerCase()}function Qn(n,e=process.platform){let t=fe(n);return e==="linux"?t:t.toLowerCase()}function xi(n,e,t){try{return n()}catch(s){return console.error(`[recovery] ${t??"unknown"}:`,s),e}}async function Lt(n,e,t){try{return await n()}catch(s){return console.error(`[recovery] ${t??"unknown"}:`,s),e}}var Ad=/^mcp__[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}__(.+)$/i;function Qa(n){return Ad.test(n)}function xd(n){return!n||n==="agent"?"agent":n.includes("plan-agent/Plan.agent.md")?"plan":n.includes(".agent.md")?"customAgent":"agent"}function Yn(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"?xd(n.id):"ask":"ask":"ask"}function Je(n){return n.startsWith("mcp.")||n.startsWith("mcp_")||n.startsWith("mcp__")}function Is(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 tt(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(Qa(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 Xn=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 Us.promises.access(e),!0}catch{return!1}}pathExistsWithLogging(e,t){try{let s=Us.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(Ai(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=vi.getExtension("GitHub.copilot"),t=vi.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?.()??Ja.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 Us.promises.readdir(s)).filter(i=>i.endsWith(".json")||i.endsWith(".jsonl")).map(i=>Ya.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=Qn(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=Qn(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(Ai);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 te=P(require("fs")),Ae=P(require("path")),ns=P(require("os")),Xa=P(Fs());var so=class{_sqlJsModule=null;_sqlJsInitPromise=null;_dbCache=null;_dbCacheInflight=new Map;extensionUri;constructor(e){this.extensionUri=e}getOpenCodeDataDir(){let e=ns.platform(),t=ns.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=oe(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;te.existsSync(e)&&(t=te.readFileSync(e));let s=await(0,Xa.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 te.statSync(e)}catch(t){return this.isMissingFileError(t)&&this._dbCache?.path===e&&this.closeDbCache(),null}}getWalMtimeMs(e){try{return te.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=te.statSync(t).size}catch{return null}if(s===0)return null;try{let{DatabaseSync:o}=require("node:sqlite"),i=ns.tmpdir(),r=Ae.join(i,`opencode-wal-${Date.now()}.db`),l=r+"-wal",u=r+"-shm",m=e+"-shm";te.copyFileSync(e,r),te.copyFileSync(t,l),te.existsSync(m)&&te.copyFileSync(m,u);let p=new o(r);p.exec("PRAGMA wal_checkpoint(TRUNCATE);"),p.close();let f=te.readFileSync(r);for(let y of[r,l,u])try{te.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)??te.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 te.promises.stat(t)}return te.promises.stat(e)}readOpenCodeMessages(e){let t=this.getOpenCodeDataDir(),s=Ae.join(t,"storage","message",e),o=[];try{if(!te.existsSync(s))return o;let i=te.readdirSync(s,{withFileTypes:!0});for(let r of i)if(!(!r.isFile()||!r.name.endsWith(".json")))try{let l=te.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(!te.existsSync(s))return o;let i=te.readdirSync(s,{withFileTypes:!0});for(let r of i)if(!(!r.isFile()||!r.name.endsWith(".json")))try{let l=te.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=P(require("fs")),jt=P(require("path")),Os=P(require("os")),Za=P(Fs());var no=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(Os.platform()==="win32"){let s=process.env.LOCALAPPDATA||jt.join(Os.homedir(),"AppData","Local");return jt.join(s,"crush")}let t=process.env.XDG_CONFIG_HOME||jt.join(Os.homedir(),".config");return jt.join(t,"crush")}readCrushProjects(){let e=jt.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=jt.join(__dirname,"sql-wasm.wasm"),t;Ve.existsSync(e)&&(t=Ve.readFileSync(e));let s=await(0,Za.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 Ns=P(require("fs")),Bt=P(require("path")),el=P(require("os"));var oo=class{getContinueDataDir(){return Bt.join(el.homedir(),".continue")}getContinueSessionsDir(){return Bt.join(this.getContinueDataDir(),"sessions")}isContinueSessionFile(e){let t=oe(e);return t.includes("/.continue/sessions/")&&t.endsWith(".json")}async getContinueSessionFiles(){let e=this.getContinueSessionsDir();try{await Ns.promises.access(e)}catch{return[]}try{return(await Ns.promises.readdir(e)).filter(s=>s.endsWith(".json")&&s!=="sessions.json").map(s=>Bt.join(e,s))}catch{return[]}}async readSessionFile(e){try{let t=await Ns.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=Bt.join(this.getContinueSessionsDir(),"sessions.json"),t=new Map;try{let s=await Ns.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 Bt.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:
|
|
34
|
-
`)
|
|
35
|
-
`)}_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,bo.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(`
|
|
36
|
-
`)}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 is=P(require("fs")),zt=P(require("path")),ko=P(require("os"));function Tt(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 Co=class{getClaudeCodeDataDir(){return zt.join(ko.homedir(),".claude")}getClaudeCodeProjectsDir(){return zt.join(this.getClaudeCodeDataDir(),"projects")}isClaudeCodeSessionFile(e){let t=oe(e),s=oe(this.getClaudeCodeProjectsDir());return t.startsWith(s)&&t.endsWith(".jsonl")}async getClaudeCodeSessionFiles(){let e=this.getClaudeCodeProjectsDir();try{await is.promises.access(e)}catch{return[]}try{let t=await is.promises.readdir(e,{withFileTypes:!0});return(await Promise.all(t.filter(o=>o.isDirectory()).map(o=>this.collectJsonlFilesFromProject(zt.join(e,o.name))))).flat()}catch(t){return console.error("[claudecode] Failed to read projects dir:",t),[]}}async collectJsonlFilesFromProject(e){try{let t=await is.promises.readdir(e,{withFileTypes:!0});return(await Promise.all(t.filter(o=>!o.isDirectory()&&o.name.endsWith(".jsonl")).map(async o=>{let i=zt.join(e,o.name);try{return(await is.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 Lt(async()=>{let s=(await is.promises.readFile(e,"utf8")).trim().split(`
|
|
37
|
-
`),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=Tt(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 zt.basename(e,".jsonl")}getProjectPathFromHash(e){if(ko.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 rs=P(require("fs")),qs=P(require("path")),$s=P(require("os"));var km="Claude_pzs8sxrjxfjjc",So=class{getCoworkBaseDir(){let e=$s.platform();if(e==="win32"){let t=process.env.LOCALAPPDATA||qs.join($s.homedir(),"AppData","Local");return qs.join(t,"Packages",km,"LocalCache","Roaming","Claude","local-agent-mode-sessions")}return e==="darwin"?qs.join($s.homedir(),"Library","Application Support","Claude","local-agent-mode-sessions"):""}isCoworkSessionFile(e){let t=oe(e);return t.includes("/local-agent-mode-sessions/")&&t.endsWith(".jsonl")}async getCoworkSessionFiles(){let e=this.getCoworkBaseDir();if(!e)return[];try{await rs.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 rs.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=qs.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 rs.promises.stat(r)).size>0&&s.push(r)}catch{}}async readCoworkEvents(e){try{let s=(await rs.promises.readFile(e,"utf8")).trim().split(`
|
|
38
|
-
`),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=Tt(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 rs.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 zs=P(require("fs")),ct=P(require("path")),Yi=P(require("os"));var wo=class{getVibeHomeDir(){let e=process.env.VIBE_HOME;return e?ct.resolve(e.replace(/^~/,Yi.homedir())):ct.join(Yi.homedir(),".vibe")}getSessionLogDir(){return ct.join(this.getVibeHomeDir(),"logs","session")}isVibeSessionFile(e){let t=fe(e);return t.includes("/.vibe/logs/session/")&&t.endsWith("/meta.json")}getSessionDir(e){return ct.dirname(e)}async discoverSessions(){let e=this.getSessionLogDir();try{let t=await zs.promises.readdir(e,{withFileTypes:!0}),s=[];for(let o of t){if(!o.isDirectory())continue;let i=ct.join(e,o.name,"meta.json");try{await zs.promises.access(i),s.push(i)}catch{}}return s}catch{return[]}}async readSessionMeta(e){try{let t=await zs.promises.readFile(e,"utf8");return JSON.parse(t)}catch{return null}}async readSessionMessages(e){let t=ct.join(this.getSessionDir(e),"messages.jsonl");try{let o=(await zs.promises.readFile(t,"utf8")).trim().split(`
|
|
39
|
-
`),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=P(require("fs")),sr=P(require("os")),nt=P(require("path"));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 Sm(n){if(typeof n!="object"||n===null)return;let t=n.result;if(!(typeof t!="object"||t===null))return t}function wm(n){if(typeof n!="object"||n===null)return;let t=n.response;if(Array.isArray(t))return t}function Tm(n){return typeof n!="object"||n===null?!1:n.kind==="toolInvocationSerialized"}function Mm(n){return typeof n!="object"||n===null?!1:n.kind==="subagent"}var Pm=20,vm=5,Am=130,xm=50,Dm=10,Em=.25,Rm=10,Pl=new WeakMap;function Im(n){let e=Pl.get(n);return e||(e=Object.entries(n).map(([t,s])=>[t,t.replace("-",""),s]),Pl.set(n,e)),e}function J(n,e="gpt-4",t={}){let s=Em;for(let[o,i,r]of Im(t))if(e.includes(o)||e.includes(i)){s=r;break}return Math.ceil(n.length*s)}function Um(n){return n.trim().toLowerCase().replace(/\s+/g,"-")}function as(n){if(!Tm(n))return null;let e=n.toolSpecificData;if(!Mm(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?Um(o):"";return t||s?{prompt:t,result:s,modelName:i}:null}function ls(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 Ib=1/1e11;function Fm(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 Om(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=Sm(n[o]),r=i?Fm(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=as(n);if(!e)return 0;let t=0;return e.prompt&&(t+=J(e.prompt)),e.result&&(t+=J(e.result)),t}function Lm(n){let e=0;for(let t of n){let s=wm(t);if(s)for(let o of s)e+=Nm(o)}return e}function Gm(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+=J(String(i.text)))}return t}function jm(n,e){if(as(n))return;let{text:t,isThinking:s}=ls(n);t&&(s?e.totalThinkingTokens+=J(t):e.totalTokens+=J(t))}function Bm(n,e){let t=n.k;if(!(n.kind!==2||!t?.includes("response")||!Array.isArray(n.v)))for(let s of n.v)jm(s,e)}var Xi=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=Ws(s,m),t.totalTokens+=Gm(m),Bm(m,t)}catch{t.parseFailedLines++}let o=t.parseFailedLines>0?er(e):new Map,i=s.requests,r=Array.isArray(i)?i:[],l=Om(r,o);return t.totalTokens+=Lm(r),{tokens:t.totalTokens+t.totalThinkingTokens,thinkingTokens:t.totalThinkingTokens,actualTokens:l,cacheReadTokens:0,modelUsage:{},dailyActualTokens:{},copilotNanoAiu:0}}};function qm(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 $m(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+=qm(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 zm(n,e){let t=n.data,s=typeof t?.messagesRemovedDuringTruncation=="number"?t.messagesRemovedDuringTruncation:0;s>0&&(e.truncationCount++,e.messagesRemovedByTruncation+=s)}function Wm(n,e){let t=n?.reasoningText;typeof t=="string"&&t&&(e.totalThinkingTokens+=J(t));let s=n?.thinking?.text;typeof s=="string"&&s&&(e.totalThinkingTokens+=J(s))}function Hm(n,e,t){t.cliRealOutputByModel||(t.cliRealOutputByModel={});let s=String(n?.model??"unknown");t.cliRealOutputByModel[s]=(t.cliRealOutputByModel[s]??0)+e}function Jm(n,e){let t=n.data,s=typeof t?.outputTokens=="number"?t.outputTokens:0;s>0?Hm(t,s,e):t?.content&&(e.totalTokens+=J(String(t.content))),Wm(t,e)}function Vm(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+=J(s))}function Km(n,e){let t=n.data;n.type==="user.message"&&t?.content?e.totalTokens+=J(String(t.content)):n.type==="user.message_rendered"&&t?.renderedMessage?e.totalTokens+=J(String(t.renderedMessage)):n.type==="assistant.message"?Jm(n,e):n.type==="tool.execution_start"?e.totalEstToolCalls++:n.type==="tool.execution_complete"?Vm(t,e):n.content&&(e.totalTokens+=J(String(n.content)))}function Qm(n){if(!n.cliRealOutputByModel)return;let e=n.totalEstToolCalls>Pm?Am:n.totalEstToolCalls>vm?xm:Dm;for(let t of Object.values(n.cliRealOutputByModel)){let s=Math.round(t*e);n.cliActualTokens+=s+t,n.cliCacheReadTokens+=s}}var Zi=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"?$m(o,t):o.type==="session.truncation"&&zm(o,t),Km(o,t)}catch{}return t.cliActualTokens||Qm(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>Rm)break;try{if(typeof JSON.parse(t).kind=="number")return new Xi}catch{}}return new Zi}function To(n){let e=n.trim().split(`
|
|
40
|
-
`);return Ym(e).estimate(e)}function Xm(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 xl(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"&&Xm(s,e)}catch{}return e.modelTurns>0?e:null}function Dl(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 Zm(n,e){let s=n.v?.inputState,o=Dl(s?.selectedModel);o!==null&&(e.currentEffort=o,e.defaultEffort=o)}function ep(n,e){let t=n.k;if(!Array.isArray(t)||t[0]!=="inputState"||t[1]!=="selectedModel")return;let s=Dl(n.v);s!==null&&s!==e.currentEffort&&(e.currentEffort!==null&&e.switchCount++,e.currentEffort=s)}function tp(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 El(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?Zm(s,e):s.kind===1?ep(s,e):s.kind===2&&tp(s,e))}return{effortByRequestId:e.effortByRequestId,defaultEffort:e.defaultEffort,switchCount:e.switchCount}}function er(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 vl=new WeakMap;function Rl(n){let e=vl.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},vl.set(n,e)}return e}function sp(n,e){let{map:t,sortedNames:s}=Rl(e);for(let o of s)if(n.includes(o))return t[o];return null}function np(n,e){let{map:t,sortedNames:s}=Rl(e);for(let o of s)if(n.includes(o))return t[o];return null}function Mt(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=np(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=sp(n.result.details,e);if(t)return t}return"gpt-4"}function ut(n){let e=n.trim();if(!e.includes(`
|
|
31
|
+
`,o)}while(s!==-1);return i+=n.slice(o),i}var{stdout:rl,stderr:al}=nl,ji=Symbol("GENERATOR"),is=Symbol("STYLER"),Ns=Symbol("IS_EMPTY"),ll=["ansi","ansi","ansi256","ansi16m"],rs=Object.create(null),Jd=(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=rl?rl.level:0;n.level=e.level===void 0?t:e.level};var Vd=n=>{let e=(...t)=>t.join(" ");return Jd(e,n),Object.setPrototypeOf(e,Ls.prototype),e};function Ls(n){return Vd(n)}Object.setPrototypeOf(Ls.prototype,Function.prototype);for(let[n,e]of Object.entries(Je))rs[n]={get(){let t=to(this,Bi(e.open,e.close,this[is]),this[Ns]);return Object.defineProperty(this,n,{value:t}),t}};rs.visible={get(){let n=to(this,this[is],!0);return Object.defineProperty(this,"visible",{value:n}),n}};var Gi=(n,e,t,...s)=>n==="rgb"?e==="ansi16m"?Je[t].ansi16m(...s):e==="ansi256"?Je[t].ansi256(Je.rgbToAnsi256(...s)):Je[t].ansi(Je.rgbToAnsi(...s)):n==="hex"?Gi("rgb",e,t,...Je.hexToRgb(...s)):Je[t][n](...s),Kd=["rgb","hex","ansi256"];for(let n of Kd){rs[n]={get(){let{level:t}=this;return function(...s){let o=Bi(Gi(n,ll[t],"color",...s),Je.color.close,this[is]);return to(this,o,this[Ns])}}};let e="bg"+n[0].toUpperCase()+n.slice(1);rs[e]={get(){let{level:t}=this;return function(...s){let o=Bi(Gi(n,ll[t],"bgColor",...s),Je.bgColor.close,this[is]);return to(this,o,this[Ns])}}}}var Qd=Object.defineProperties(()=>{},{...rs,level:{enumerable:!0,get(){return this[ji].level},set(n){this[ji].level=n}}}),Bi=(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}},to=(n,e,t)=>{let s=(...o)=>Yd(s,o.length===1?""+o[0]:o.join(" "));return Object.setPrototypeOf(s,Qd),s[ji]=n,s[is]=e,s[Ns]=t,s},Yd=(n,e)=>{if(n.level<=0||!e)return n[Ns]?"":e;let t=n[is];if(t===void 0)return e;let{openAll:s,closeAll:o}=t;if(e.includes("\x1B"))for(;t!==void 0;)e=ol(e,t.close,t.open),t=t.parent;let i=e.indexOf(`
|
|
32
|
+
`);return i!==-1&&(e=il(e,o,s,i)),s+e+o};Object.defineProperties(Ls.prototype,rs);var Xd=Ls(),sb=Ls({level:al?al.level:0});var w=Xd;var _t=P(require("fs")),we=P(require("path")),cu=P(require("os"));var cl={getConfiguration:()=>({get:()=>{}})},qi={getExtension:()=>{}},so=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 Gs=P(require("fs")),pl=P(require("path"));function zi(n){return typeof n.discover=="function"}function dl(n){return typeof n.analyzeUsage=="function"}function no(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 ye(n){return n.replace(/\\/g,"/")}var oo=ye;function K(n){return ye(n).toLowerCase()}function io(n,e=process.platform){let t=ye(n);return e==="linux"?t:t.toLowerCase()}function $i(n,e,t){try{return n()}catch(s){return console.error(`[recovery] ${t??"unknown"}:`,s),e}}async function Bt(n,e,t){try{return await n()}catch(s){return console.error(`[recovery] ${t??"unknown"}:`,s),e}}var Zd=/^mcp__[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}__(.+)$/i;function ml(n){return Zd.test(n)}function em(n){return!n||n==="agent"?"agent":n.includes("plan-agent/Plan.agent.md")?"plan":n.includes(".agent.md")?"customAgent":"agent"}function ro(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"?em(n.id):"ask":"ask":"ask"}function Ve(n){return n.startsWith("mcp.")||n.startsWith("mcp_")||n.startsWith("mcp__")}function js(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 nt(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(ml(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 ao=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 Gs.promises.access(e),!0}catch{return!1}}pathExistsWithLogging(e,t){try{let s=Gs.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(zi(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=qi.getExtension("GitHub.copilot"),t=qi.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?.()??cl.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 Gs.promises.readdir(s)).filter(i=>i.endsWith(".json")||i.endsWith(".jsonl")).map(i=>pl.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 u=[];for(let m of a.value.sessionFiles){let p=io(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 a=io(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(zi);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 a=r.reduce((u,m)=>u+(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 oe=P(require("fs")),xe=P(require("path")),as=P(require("os")),gl=P(Bs());var mo=class{_sqlJsModule=null;_sqlJsInitPromise=null;_dbCache=null;_dbCacheInflight=new Map;extensionUri;constructor(e){this.extensionUri=e}getOpenCodeDataDir(){let e=as.platform(),t=as.homedir();if(e==="win32")return xe.join(t,".local","share","opencode");let s=process.env.XDG_DATA_HOME||xe.join(t,".local","share");return xe.join(s,"opencode")}isOpenCodeSessionFile(e){let t=K(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=xe.join(__dirname,"sql-wasm.wasm"),t;oe.existsSync(e)&&(t=oe.readFileSync(e));let s=await(0,gl.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 oe.statSync(e)}catch(t){return this.isMissingFileError(t)&&this._dbCache?.path===e&&this.closeDbCache(),null}}getWalMtimeMs(e){try{return oe.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=oe.statSync(t).size}catch{return null}if(s===0)return null;try{let{DatabaseSync:o}=require("node:sqlite"),i=as.tmpdir(),r=xe.join(i,`opencode-wal-${Date.now()}.db`),a=r+"-wal",u=r+"-shm",m=e+"-shm";oe.copyFileSync(e,r),oe.copyFileSync(t,a),oe.existsSync(m)&&oe.copyFileSync(m,u);let p=new o(r);p.exec("PRAGMA wal_checkpoint(TRUNCATE);"),p.close();let f=oe.readFileSync(r);for(let y of[r,a,u])try{oe.unlinkSync(y)}catch{}return f}catch{return null}}async refreshOpenCodeDb(e,t){let s;try{let i=await this.initSqlJs(),a=await this.tryReadDbWithWal(e)??oe.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=xe.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=xe.join(this.getOpenCodeDataDir(),"opencode.db");return oe.promises.stat(t)}return oe.promises.stat(e)}readOpenCodeMessages(e){let t=this.getOpenCodeDataDir(),s=xe.join(t,"storage","message",e),o=[];try{if(!oe.existsSync(s))return o;let i=oe.readdirSync(s,{withFileTypes:!0});for(let r of i)if(!(!r.isFile()||!r.name.endsWith(".json")))try{let a=oe.readFileSync(xe.join(s,r.name),"utf8"),u=JSON.parse(a);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=xe.join(t,"storage","part",e),o=[];try{if(!oe.existsSync(s))return o;let i=oe.readdirSync(s,{withFileTypes:!0});for(let r of i)if(!(!r.isFile()||!r.name.endsWith(".json")))try{let a=oe.readFileSync(xe.join(s,r.name),"utf8"),u=JSON.parse(a);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=xe.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 u=this.computeTurnCumTotal(a,o),m=u-o;if(m<=0){o=u;continue}let p=a[0].modelID||a[0].model?.modelID||"unknown";t[p]||(t[p]={inputTokens:0,outputTokens:0});let f=a.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=a.reduce((C,S)=>C+(S.tokens?.cache?.read||0),0),_=a.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),a=this.getAssistantMessagesByParent(t),u={};for(let p=0;p<t.length;p++){let f=t[p];if(f.role!=="user")continue;let y=a.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 Ke=P(require("fs")),zt=P(require("path")),qs=P(require("os")),fl=P(Bs());var po=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 Ke.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=Ke.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(qs.platform()==="win32"){let s=process.env.LOCALAPPDATA||zt.join(qs.homedir(),"AppData","Local");return zt.join(s,"crush")}let t=process.env.XDG_CONFIG_HOME||zt.join(qs.homedir(),".config");return zt.join(t,"crush")}readCrushProjects(){let e=zt.join(this.getCrushConfigDir(),"projects.json");if(!Ke.existsSync(e))return[];try{let t=Ke.readFileSync(e,"utf8"),s=JSON.parse(t);return Array.isArray(s.projects)?s.projects:[]}catch{return[]}}isCrushSessionFile(e){return ye(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=zt.join(__dirname,"sql-wasm.wasm"),t;Ke.existsSync(e)&&(t=Ke.readFileSync(e));let s=await(0,fl.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 Ke.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],u={};return r.forEach((m,p)=>{u[m]=a[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(a=>{let u={};if(r.forEach((m,p)=>{u[m]=a[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 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 u={};for(let p of a){let f=p.model||"unknown";u[f]=(u[f]||0)+1}let m=a.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(),a=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(a)){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 zs=P(require("fs")),$t=P(require("path")),hl=P(require("os"));var go=class{getContinueDataDir(){return $t.join(hl.homedir(),".continue")}getContinueSessionsDir(){return $t.join(this.getContinueDataDir(),"sessions")}isContinueSessionFile(e){let t=K(e);return t.includes("/.continue/sessions/")&&t.endsWith(".json")}async getContinueSessionFiles(){let e=this.getContinueSessionsDir();try{await zs.promises.access(e)}catch{return[]}try{return(await zs.promises.readdir(e)).filter(s=>s.endsWith(".json")&&s!=="sessions.json").map(s=>$t.join(e,s))}catch{return[]}}async readSessionFile(e){try{let t=await zs.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=$t.join(this.getContinueSessionsDir(),"sessions.json"),t=new Map;try{let s=await zs.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 $t.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:a,nextIndex:u}=this.buildTurnFromHistory(s,i,t.chatModelTitle||null);o.push(a),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 a=e[r],u=a.message?.role;u==="assistant"?this.processAssistantSubItem(a,i):u==="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 ds=P(require("fs")),Qe=P(require("path")),Vi=P(require("os"));function ee(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 tm(n){if(typeof n!="object"||n===null)return;let t=n.result;if(!(typeof t!="object"||t===null))return t}function sm(n){if(typeof n!="object"||n===null)return;let t=n.response;if(Array.isArray(t))return t}function nm(n){return typeof n!="object"||n===null?!1:n.kind==="toolInvocationSerialized"}function om(n){return typeof n!="object"||n===null?!1:n.kind==="subagent"}var im=20,rm=5,am=130,lm=50,cm=10,um=.25,dm=10,yl=new WeakMap;function mm(n){let e=yl.get(n);return e||(e=Object.entries(n).map(([t,s])=>[t,t.replace("-",""),s]),yl.set(n,e)),e}function W(n,e="gpt-4",t={}){let s=um;for(let[o,i,r]of mm(t))if(e.includes(o)||e.includes(i)){s=r;break}return Math.ceil(n.length*s)}function pm(n){return n.trim().toLowerCase().replace(/\s+/g,"-")}function ls(n){if(!nm(n))return null;let e=n.toolSpecificData;if(!om(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],[u])=>Number(a)-Number(u)),s=r.map(([,a])=>typeof a=="string"?a:"").join("")}let o=typeof e.modelName=="string"?e.modelName:"",i=o?pm(o):"";return t||s?{prompt:t,result:s,modelName:i}:null}function cs(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 Hb=1/1e11;function gm(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 fm(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=tm(n[o]),r=i?gm(i):0;if(r>0)s+=r;else{let a=e.get(o);a&&(s+=a.promptTokens+a.outputTokens)}}return s}function hm(n){let e=ls(n);if(!e)return 0;let t=0;return e.prompt&&(t+=W(e.prompt)),e.result&&(t+=W(e.result)),t}function ym(n){let e=0;for(let t of n){let s=sm(t);if(s)for(let o of s)e+=hm(o)}return e}function _m(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 bm(n,e){if(ls(n))return;let{text:t,isThinking:s}=cs(n);t&&(s?e.totalThinkingTokens+=W(t):e.totalTokens+=W(t))}function Cm(n,e){let t=n.k;if(!(n.kind!==2||!t?.includes("response")||!Array.isArray(n.v)))for(let s of n.v)bm(s,e)}var Wi=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=$s(s,m),t.totalTokens+=_m(m),Cm(m,t)}catch{t.parseFailedLines++}let o=t.parseFailedLines>0?Ji(e):new Map,i=s.requests,r=Array.isArray(i)?i:[],a=fm(r,o);return t.totalTokens+=ym(r),{tokens:t.totalTokens+t.totalThinkingTokens,thinkingTokens:t.totalThinkingTokens,actualTokens:a,cacheReadTokens:0,modelUsage:{},dailyActualTokens:{},copilotNanoAiu:0}}};function km(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 Sm(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+=km(i,r,e);let o=typeof t.totalNanoAiu=="number"?t.totalNanoAiu:0;if(o>0&&(e.cliTotalNanoAiu+=o),s>0&&n.timestamp){let i=ee(new Date(String(n.timestamp)));i&&i!=="Inval"&&(e.dailyActualTokens[i]=(e.dailyActualTokens[i]||0)+s)}}function wm(n,e){let t=n.data,s=typeof t?.messagesRemovedDuringTruncation=="number"?t.messagesRemovedDuringTruncation:0;s>0&&(e.truncationCount++,e.messagesRemovedByTruncation+=s)}function Tm(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))),Tm(t,e)}function vm(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 Am(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"?vm(t,e):n.content&&(e.totalTokens+=W(String(n.content)))}function xm(n){if(!n.cliRealOutputByModel)return;let e=n.totalEstToolCalls>im?am:n.totalEstToolCalls>rm?lm:cm;for(let t of Object.values(n.cliRealOutputByModel)){let s=Math.round(t*e);n.cliActualTokens+=s+t,n.cliCacheReadTokens+=s}}var Hi=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"?Sm(o,t):o.type==="session.truncation"&&wm(o,t),Am(o,t)}catch{}return t.cliActualTokens||xm(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 Dm(n){let e=0;for(let t of n)if(t.trim()){if(++e>dm)break;try{if(typeof JSON.parse(t).kind=="number")return new Wi}catch{}}return new Hi}function fo(n){let e=n.trim().split(`
|
|
34
|
+
`);return Dm(e).estimate(e)}function Em(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 a=typeof t?.model=="string"&&t.model?t.model:"";if(!a)return;let u=e.modelBreakdown[a]??{inputTokens:0,outputTokens:0,cachedTokens:0};u.inputTokens+=s,u.outputTokens+=o,u.cachedTokens+=i,e.modelBreakdown[a]=u}function Cl(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"&&Em(s,e)}catch{}return e.modelTurns>0?e:null}function kl(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 Rm(n,e){let s=n.v?.inputState,o=kl(s?.selectedModel);o!==null&&(e.currentEffort=o,e.defaultEffort=o)}function Im(n,e){let t=n.k;if(!Array.isArray(t)||t[0]!=="inputState"||t[1]!=="selectedModel")return;let s=kl(n.v);s!==null&&s!==e.currentEffort&&(e.currentEffort!==null&&e.switchCount++,e.currentEffort=s)}function Um(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 Sl(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?Rm(s,e):s.kind===1?Im(s,e):s.kind===2&&Um(s,e))}return{effortByRequestId:e.effortByRequestId,defaultEffort:e.defaultEffort,switchCount:e.switchCount}}function Ji(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 _l=new WeakMap;function wl(n){let e=_l.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},_l.set(n,e)}return e}function Fm(n,e){let{map:t,sortedNames:s}=wl(e);for(let o of s)if(n.includes(o))return t[o];return null}function Om(n,e){let{map:t,sortedNames:s}=wl(e);for(let o of s)if(n.includes(o))return t[o];return null}function Pt(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=Om(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=Fm(n.result.details,e);if(t)return t}return"gpt-4"}function ct(n){let e=n.trim();if(!e.includes(`
|
|
41
35
|
`))return!1;let t=e.split(`
|
|
42
|
-
`).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
|
|
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 us(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 Nm(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 Lm(n,e,t){Array.isArray(n)?n[Number(e)]=t:n[e]=t}function jm(n,e){Array.isArray(e)?n.push(...e):n.push(e)}function Gm(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];jm(s,t)}function $s(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:{},u=a;for(let p=0;p<r.length-1;p++)u=Nm(u,r[p],/^\d+$/.test(r[p+1]));let m=r[r.length-1];return s===1?(Lm(u,m,i),a):(s===2&&Gm(u,m,i),a)}function Wt(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 bl(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 Ws(n,e={}){let t=e[n];if(t)return bl(t);for(let[s,o]of Object.entries(e))if(n.includes(s)||s.includes(n))return bl(o);return"unknown"}function Hs(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,u=i.cachedReadTokens??0,m=i.cacheCreationTokens??0,f=Math.max(0,i.inputTokens-u-m)/1e6*a.inputCostPerMillion,y=u/1e6*(a.cachedInputCostPerMillion??a.inputCostPerMillion),_=m/1e6*(a.cacheCreationCostPerMillion??a.inputCostPerMillion),C=i.outputTokens/1e6*a.outputCostPerMillion;s+=f+y+_+C}return s}function H(){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 Bm="com.microsoft.copilot.eclipse",Tl=Qe.join(".metadata",".plugins","com.microsoft.copilot.eclipse.core","conversations"),ho=class{getDefaultWorkspaceRoot(){return Qe.join(Vi.homedir(),"eclipse-workspace")}getEclipseInstallsRoot(){return Qe.join(Vi.homedir(),"eclipse")}isEclipseSessionFile(e){let t=K(e);return t.includes(Bm)&&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 ds.promises.readdir(e)}catch{return[]}let s=[];for(let o of t){let i=Qe.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 ds.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=Qe.join(t,Tl);e.push(...await this.discoverSessionsInDir(s))}return e}async discoverSessionsInDir(e){let t;try{t=await ds.promises.readdir(e,{withFileTypes:!0})}catch{return[]}let s=[];for(let o of t){if(!o.isDirectory())continue;let i=Qe.join(e,o.name),r;try{r=await ds.promises.readdir(i)}catch{continue}for(let a of r)a.endsWith(".json")&&s.push(Qe.join(i,a))}return s}async getDiagnosticCandidatePaths(){return(await this.getWorkspaceRoots()).map(t=>Qe.join(t,Tl))}async readSession(e){try{let t=await ds.promises.readFile(e,"utf8");return JSON.parse(t)}catch{return null}}getEclipseSessionId(e){return Qe.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
|
+
`):""}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
|
+
`):""}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 a=this.findCopilotReply(o,i,r?.turnId),u=r?.model||a?.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(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 De=P(require("fs")),Ie=P(require("path")),Jt=P(require("os")),Do=P(fr());var Rp=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"]),xo=class{isVSSessionFile(e){let t=K(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 De.promises.stat(e)}getLogDir(){let e=process.env.LOCALAPPDATA||Ie.join(Jt.homedir(),"AppData","Local");return Ie.join(e,"Temp","VSGitHubCopilotLogs")}getSsmsSessionsDir(){let e=process.env.LOCALAPPDATA||Ie.join(Jt.homedir(),"AppData","Local");return Ie.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 De.promises.readdir(s)).filter(a=>a.endsWith(".chat.log")).map(a=>Ie.join(s,a))}catch{return}let i=/Updating session file '([^']+)'/;for(let r of o)try{let a=await De.promises.readFile(r,"utf8");await this._processLogFileLines(a,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 a=r[1];if(!s.has(a)){s.add(a);try{await De.promises.access(a),o.push(a)}catch{}}}}async _discoverFromFilesystem(e,t){if(Jt.platform()!=="win32")return;let s=Jt.homedir(),o=["C","D"],i=[],r=["code","repos","src","projects","dev","workspace","work","source"];for(let a of r){let u=Ie.join(s,a);try{await De.promises.access(u),i.push(u)}catch{}}for(let a of r){let u=Ie.join(s,"Documents",a);try{await De.promises.access(u),i.push(u)}catch{}}for(let a of o)for(let u of r){let m=a+":\\"+u;try{await De.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 De.promises.readdir(e,{withFileTypes:!0})}catch{return}let a=r.filter(m=>{if(!m.isDirectory())return!1;let p=m.name;return!(Rp.has(p)||p.startsWith(".")&&p!==".vs")}),u=8;for(let m=0;m<a.length;m+=u)await Promise.all(a.slice(m,m+u).map(async p=>{let f=Ie.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 De.promises.readdir(e,{withFileTypes:!0})}catch{return}for(let i of o){if(!i.isFile())continue;let r=Ie.join(e,i.name);t.has(r)||(t.add(r),s.push(r))}}async _collectFromHashDirs(e,t,s){let o;try{o=await De.promises.readdir(e,{withFileTypes:!0})}catch{return}for(let i of o)i.isDirectory()&&await this._collectFromSessionsDir(Ie.join(e,i.name,"sessions"),t,s)}async _findSessionsInVsDir(e,t,s){let o;try{o=await De.promises.readdir(e,{withFileTypes:!0})}catch{return}for(let i of o)i.isDirectory()&&await this._collectFromHashDirs(Ie.join(e,i.name,"copilot-chat"),t,s)}async _discoverFromSsmsAppData(e,t){if(Jt.platform()!=="win32")return;let s=this.getSsmsSessionsDir(),o;try{o=await De.promises.readdir(s,{withFileTypes:!0})}catch{return}for(let i of o)i.isDirectory()&&await this._collectFromHashDirs(Ie.join(s,i.name,"SSMSGitHubCopilot","copilot-chat"),e,t)}async decodeSessionFile(e){try{let t=await De.promises.readFile(e);return t.length<2?[]:Array.from((0,Do.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,Do.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(`
|
|
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 a=this.extractTextFromContent(r.Content),u=i%2===1,m=u?this.extractContextText(r.Context):"";if(!a&&!m)continue;let p=this.getModelId(r,u)||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 u=this.extractTextFromContent(a.Content),m=r%2===1,p=m?this.extractContextText(a.Context):"";if(!u&&!p)continue;let f=this.getModelId(a,m)||"unknown";i[f]||(i[f]={input:"",output:""}),m?i[f].input+=u+p:i[f].output+=u}for(let[r,a]of Object.entries(i))s[r]={inputTokens:t(a.input,r),outputTokens:t(a.output,r)};return s}};var ps=P(require("fs")),Vt=P(require("path")),Ro=P(require("os"));function At(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 Eo=class{getClaudeCodeDataDir(){return Vt.join(Ro.homedir(),".claude")}getClaudeCodeProjectsDir(){return Vt.join(this.getClaudeCodeDataDir(),"projects")}isClaudeCodeSessionFile(e){let t=K(e),s=K(this.getClaudeCodeProjectsDir());return t.startsWith(s)&&t.endsWith(".jsonl")}async getClaudeCodeSessionFiles(){let e=this.getClaudeCodeProjectsDir();try{await ps.promises.access(e)}catch{return[]}try{let t=await ps.promises.readdir(e,{withFileTypes:!0});return(await Promise.all(t.filter(o=>o.isDirectory()).map(o=>this.collectJsonlFilesFromProject(Vt.join(e,o.name))))).flat()}catch(t){return console.error("[claudecode] Failed to read projects dir:",t),[]}}async collectJsonlFilesFromProject(e){try{let t=await ps.promises.readdir(e,{withFileTypes:!0});return(await Promise.all(t.filter(o=>!o.isDirectory()&&o.name.endsWith(".jsonl")).map(async o=>{let i=Vt.join(e,o.name);try{return(await ps.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 Bt(async()=>{let s=(await ps.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,a=(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+=a,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(a=>a.type==="text")&&!i.some(a=>a.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=At(o.message?.model||"unknown");s[r]||(s[r]={inputTokens:0,outputTokens:0});let a=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)+a+u,p=typeof i.output_tokens=="number"?i.output_tokens:0;s[r].inputTokens+=m,s[r].outputTokens+=p,a>0&&(s[r].cacheCreationTokens=(s[r].cacheCreationTokens??0)+a),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),a,u;return r.length>0&&(r.sort((m,p)=>m-p),a=new Date(r[0]).toISOString(),u=new Date(r[r.length-1]).toISOString()),{title:s,entrypoint:o,firstInteraction:a,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 a=new Date(r.timestamp).getTime();isNaN(a)||i.push(a)}return{title:t,entrypoint:s,cwd:o,timestamps:i}}getClaudeCodeSessionId(e){return Vt.basename(e,".jsonl")}getProjectPathFromHash(e){if(Ro.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 gs=P(require("fs")),Ys=P(require("path")),Xs=P(require("os"));var Ip="Claude_pzs8sxrjxfjjc",Io=class{getCoworkBaseDir(){let e=Xs.platform();if(e==="win32"){let t=process.env.LOCALAPPDATA||Ys.join(Xs.homedir(),"AppData","Local");return Ys.join(t,"Packages",Ip,"LocalCache","Roaming","Claude","local-agent-mode-sessions")}return e==="darwin"?Ys.join(Xs.homedir(),"Library","Application Support","Claude","local-agent-mode-sessions"):""}isCoworkSessionFile(e){let t=K(e);return t.includes("/local-agent-mode-sessions/")&&t.endsWith(".jsonl")}async getCoworkSessionFiles(){let e=this.getCoworkBaseDir();if(!e)return[];try{await gs.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 gs.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=Ys.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 gs.promises.stat(r)).size>0&&s.push(r)}catch{}}async readCoworkEvents(e){try{let s=(await gs.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 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_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(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)return;let i=e.requestId;if(i){if(!e.message?.stop_reason||t.has(i))return;t.add(i)}let r=At(e.message?.model||"unknown");s[r]||(s[r]={inputTokens:0,outputTokens:0});let{inputTokens:a,outputTokens:u,cacheCreation:m,cachedRead:p}=this.computeCoworkTokenCounts(o);s[r].inputTokens+=a,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=ye(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 gs.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 Zs=P(require("fs")),mt=P(require("path")),hr=P(require("os"));var Uo=class{getVibeHomeDir(){let e=process.env.VIBE_HOME;return e?mt.resolve(e.replace(/^~/,hr.homedir())):mt.join(hr.homedir(),".vibe")}getSessionLogDir(){return mt.join(this.getVibeHomeDir(),"logs","session")}isVibeSessionFile(e){let t=ye(e);return t.includes("/.vibe/logs/session/")&&t.endsWith("/meta.json")}getSessionDir(e){return mt.dirname(e)}async discoverSessions(){let e=this.getSessionLogDir();try{let t=await Zs.promises.readdir(e,{withFileTypes:!0}),s=[];for(let o of t){if(!o.isDirectory())continue;let i=mt.join(e,o.name,"meta.json");try{await Zs.promises.access(i),s.push(i)}catch{}}return s}catch{return[]}}async readSessionMeta(e){try{let t=await Zs.promises.readFile(e,"utf8");return JSON.parse(t)}catch{return null}}async readSessionMessages(e){let t=mt.join(this.getSessionDir(e),"messages.jsonl");try{let o=(await Zs.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 a=t.start_time?new Date(t.start_time).getTime():0;return{tokens:s,interactions:o,modelUsage:r,timestamp:a}}};var qe=P(require("fs")),_r=P(require("os")),it=P(require("path"));function B(n){return typeof n=="string"&&n.trim().length>0}function fs(n){return typeof n=="number"&&Number.isFinite(n)?n:0}function hs(n){if(!B(n))return null;let e=Date.parse(n);return Number.isFinite(e)?e:null}function yr(n,e){let t=hs(n.timestamp),s=hs(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 en(n){if(!n)return n;let e=n.trim();return e==="gemini-3-flash-preview"?"gemini-3-flash":e}async function Up(n){let e=[];try{let t=await qe.promises.readdir(n,{withFileTypes:!0});for(let s of t){if(s.isDirectory()||!s.name.startsWith("session-")||!s.name.endsWith(".jsonl"))continue;let o=it.join(n,s.name);try{(await qe.promises.stat(o)).size>0&&e.push(o)}catch{}}}catch{}return e}async function Fp(n,e){if(!e.isDirectory())return[];let t=it.join(n,e.name,"chats");try{await qe.promises.access(t)}catch{return[]}return Up(t)}function Op(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 Fo=class{_projectsIndexCache=null;_projectsIndexInflight=new Map;getGeminiDataDir(){return it.join(_r.homedir(),".gemini")}getGeminiTmpDir(){return it.join(this.getGeminiDataDir(),"tmp")}getGeminiProjectsPath(){return it.join(this.getGeminiDataDir(),"projects.json")}getGeminiLogsPath(){return it.join(this.getGeminiDataDir(),"logs.json")}isGeminiCliSessionFile(e){let t=K(e),s=K(this.getGeminiTmpDir());return t.startsWith(s)&&t.includes("/chats/session-")&&t.endsWith(".jsonl")}async collectSessionFilesFromChatDir(e){let t=[];try{let s=await qe.promises.readdir(e,{withFileTypes:!0});for(let o of s){if(o.isDirectory()||!o.name.startsWith("session-")||!o.name.endsWith(".jsonl"))continue;let i=it.join(e,o.name);try{(await qe.promises.stat(i)).size>0&&t.push(i)}catch{}}}catch{}return t}async getGeminiCliSessionFiles(){let e=this.getGeminiTmpDir();try{await qe.promises.access(e)}catch{return[]}try{let t=await qe.promises.readdir(e,{withFileTypes:!0});return(await Promise.all(t.map(o=>Fp(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,a]of(await this.readJsonlLines(e)).entries()){let u;try{u=JSON.parse(a)}catch{continue}this._rgsDispatchLine(u,r,t)}t.header&&t.latestHeaderUpdate&&(t.header.lastUpdated=t.latestHeaderUpdate),t.userRecords.sort(yr);let s=Array.from(t.assistantRecords.values()).sort(yr),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=Op(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=en(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=hs(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,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,a+=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=en(f.model))}return{assistantContents:t,toolCalls:s,model:o,inputTokens:i,outputTokens:r,thinkingTokens:a,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 a={assistantContents:[],toolCalls:[],model:null,inputTokens:0,outputTokens:0,thinkingTokens:0,toolTokens:0,cachedTokens:0};for(let v of r.assistants)i+=this._bgtAggregateAssistant(v,a);let{assistantContents:u,toolCalls:m,model:p,inputTokens:f,outputTokens:y,thinkingTokens:_,toolTokens:C,cachedTokens:S}=a,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(`
|
|
43
46
|
|
|
44
|
-
`),model:p,toolCalls:m,contextReferences:
|
|
47
|
+
`),model:p,toolCalls:m,contextReferences:H(),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=en(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 u=this.toLocalDayKey(a.timestamp);u&&s.push(u)}if(s.length===0)return{[this.toLocalDayKey(t.header?.startTime)??this.toLocalDayKey(t.header?.lastUpdated)??ee(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,u]of o.entries())r[a]=u/i;return r}async readJsonlLines(e){try{return(await qe.promises.readFile(e,"utf8")).split(/\r?\n/).map(t=>t.trim()).filter(t=>t.length>0)}catch{return[]}}getProjectBucketFromPath(e){let s=ye(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 qe.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 qe.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,f]of Object.entries(m))this.addProjectMapping(a,p,f)}catch{}let u=await qe.promises.stat(e).catch(()=>null);return u&&u.mtimeMs===t.mtimeMs&&u.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(B(e[s]))return e[s].trim()}looksLikePath(e){let t=ye(e);return/^[a-zA-Z]:/.test(e)||t.startsWith("/")||t.startsWith("~")||t.startsWith("file://")}normalizeWorkspacePath(e){let t=e.trim().replace(/^~(?=[/\\]|$)/,_r.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 it.normalize(t)}getTokenBreakdown(e){let t=fs(e?.input),s=fs(e?.output),o=fs(e?.cached),i=fs(e?.thoughts),r=fs(e?.tool),a=fs(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(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(`
|
|
45
48
|
|
|
46
|
-
`).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,
|
|
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,a)=>yr(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=hs(e);if(s!==null)return new Date(s).toISOString();for(let o of t){let i=hs(o.timestamp);if(i!==null)return new Date(i).toISOString()}return null}toLocalDayKey(e){let t=hs(e);return t!==null?ee(new Date(t)):null}};var Oo=P(require("fs")),Ql=P(require("os")),rt=P(require("path"));function br(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 Np(n,e){n.content&&n.content.trim()&&(e.assistantResponse+=(e.assistantResponse?`
|
|
47
50
|
|
|
48
51
|
`:"")+n.content.trim()),n.thinking&&n.thinking.trim()&&(e.thinkingContent+=(e.thinkingContent?`
|
|
49
52
|
|
|
50
|
-
`:"")+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
|
|
51
|
-
`).filter(m=>m.trim().length>0);for(let m of
|
|
52
|
-
`)){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=P(require("fs")),Ke=P(require("path")),Pt=P(require("os")),Fl=P(Fs());var Do=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||Ke.join(Pt.homedir(),"AppData","Roaming");return Ke.join(s,"Cursor","User","globalStorage")}if(e==="darwin")return Ke.join(Pt.homedir(),"Library","Application Support","Cursor","User","globalStorage");let t=process.env.XDG_CONFIG_HOME||Ke.join(Pt.homedir(),".config");return Ke.join(t,"Cursor","User","globalStorage")}getCursorDbPath(){return Ke.join(this.getCursorGlobalStorageDir(),"state.vscdb")}isCursorSessionFile(e){return oe(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=Ke.join(__dirname,"sql-wasm.wasm"),t;_e.existsSync(e)&&(t=_e.readFileSync(e));let s=await(0,Fl.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=Ke.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(Ke.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 Fo=P(require("fs")),mt=P(require("path"));var ms=P(require("fs"));function Ol(n){if(!(typeof window>"u"))return window[n]}var fp=Ol("__MODEL_PRICING__"),hp={};for(let[n,e]of Object.entries(fp?.pricing??{}))e.displayNames&&e.displayNames.length>0&&(hp[n]=e.displayNames[0]);var yp=[["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 Nl(n){let e=n.toLowerCase(),t=yp.find(([s])=>e.startsWith(s));return t?t[1]:"Other"}var _p=/\/partition-\d+\.jsonl$/,bp=["embeddings","index","cache","preferences","settings","config","workspacesessions","globalsessions","api.json"];function Ll(n){let e=n.toLowerCase();return bp.some(t=>e.includes(t))}function Eo(n){let e=fe(n);return e.includes("/.copilot/jb/")&&_p.test(e)}function Cp(n){return!n||typeof n!="string"?null:n.startsWith("toolu_")?"claude":n.startsWith("call_")?"gpt":null}function kp(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 Sp(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 wp(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+=J(n.data.content))}function Tp(n,e){let t=typeof n.data?.text=="string"&&n.data.text?n.data.text:typeof n.data?.content=="string"&&n.data.content?n.data.content:null;t&&(e.outputTokens+=J(t));let s=n.data?.thinking?.text;if(typeof s=="string"&&s&&(e.result.thinkingTokens+=J(s),e.hasThinking=!0,e.currentTurnId&&e.turnById.has(e.currentTurnId))){let o=e.turnById.get(e.currentTurnId);o.hasThinking=!0}if(typeof n.data?.messageId=="string"&&(e.currentMessageId=n.data.messageId,e.messageIds.push(n.data.messageId),e.currentTurnId&&e.turnById.has(e.currentTurnId))){let o=e.turnById.get(e.currentTurnId);o.messageId=n.data.messageId}if(typeof n.data?.iterationNumber=="number"&&(e.currentIterationNumber=n.data.iterationNumber,e.currentTurnId&&e.turnById.has(e.currentTurnId))){let o=e.turnById.get(e.currentTurnId);o.iterationNumber=n.data.iterationNumber}if(typeof n.timestamp=="string"&&(e.lastTurnTs=n.timestamp,e.currentTurnId&&e.turnById.has(e.currentTurnId))){let o=e.turnById.get(e.currentTurnId);o.endTimestamp||(o.endTimestamp=n.timestamp)}}function Mp(n,e){if(e.sawToolCall=!0,!e.modelFromToolCallId){let i=Cp(n.data?.toolCallId);i&&(e.modelFromToolCallId=i)}let t=typeof n.data?.toolName=="string"?n.data.toolName:"unknown",s={toolName:t};if(e.currentTurnId&&(s.turnId=e.currentTurnId,e.toolCallByTurnId.has(e.currentTurnId)||e.toolCallByTurnId.set(e.currentTurnId,[]),e.toolCallByTurnId.get(e.currentTurnId).push(n.data?.toolCallId||""),e.turnById.has(e.currentTurnId))){let i=e.turnById.get(e.currentTurnId);i.toolCallCount++}if(n.data?.toolCallId&&(s.toolCallId=n.data.toolCallId),n.data?.arguments!==void 0)try{s.arguments=JSON.stringify(n.data.arguments)}catch{}e.result.toolCalls.push(s),e.result.toolCounts[t]=(e.result.toolCounts[t]||0)+1;let o=n.data?.toolCallId;typeof o=="string"&&e.toolCallById.set(o,s)}function Pp(n,e){let t=n.data?.result?.result,s="";if(Array.isArray(t))for(let r of t)r&&typeof r.value=="string"&&(e.outputTokens+=J(r.value),s+=(s?`
|
|
53
|
-
|
|
54
|
-
`)?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 Op(n,e,t){for(let s of n)if(Array.isArray(s))for(let o of s)Fp(o,e,t)}function Np(n,e){if(!n.uri)return;let t=n.uri.path||JSON.stringify(n.uri);e.editedFilePaths.push(t);let s=cr(t),o=n;Array.isArray(o.edits)&&Op(o.edits,s,e)}function Lp(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"&&Np(t,e),t.kind==="codeblockUri"&&(e.codeBlocks++,t.isEdit===!0&&e.applies++));return e}function Gp(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 zl(n,e,t,s,o,i){let r=0,l=0,u=0,m=0,p={};for(let f of n){if(!f)continue;let y=Ip(f);y.timestamp!==void 0&&s.push(y.timestamp),y.timings&&o.push(y.timings),y.waitTime!==void 0&&i.push(y.waitTime);let _=Up(f);_.agentType!==null&&e[_.agentType]++;let C=Lp(f);for(let S of C.editedFilePaths)t.add(S);l+=C.codeBlocks,r+=C.applies,u+=C.linesAdded,m+=C.linesRemoved,Gp(p,C.languageUsage)}return{totalApplies:r,totalCodeBlocks:l,totalLinesAdded:u,totalLinesRemoved:m,languageUsage:p}}function jp(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";lr(o,e,t)}}}function Bp(n,e,t,s){e.requestId&&($l(t,s.modeUsage),e.agent?.id&&(s.toolCalls.total++,s.toolCalls.byTool[e.agent.id]=(s.toolCalls.byTool[e.agent.id]||0)+1),mr(e,s.contextReferences),jp(e,s,n.toolNameMap))}function qp(n,e,t){return n.modelId?n.modelId.replace(/^copilot\//,""):n.result?.metadata?.modelId?n.result.metadata.modelId.replace(/^copilot\//,""):n.result?.details?Mt(n,t):e}function $p(n){let e=0;for(let t=1;t<n.length;t++)n[t]!==n[t-1]&&e++;return e}function zp(n,e,t,s){let o=(e.selectedModel?.identifier||e.selectedModel?.metadata?.id||e.inputState?.selectedModel?.identifier||e.inputState?.selectedModel?.metadata?.id||"gpt-4o").replace(/^copilot\//,"");(e.selectedModel?.identifier||e.inputState?.selectedModel?.identifier||"").replace(/^copilot\//,"")==="auto"&&(s.modelSwitching.autoSessions=1);let r=[];for(let u of t){if(!u||!u.requestId)continue;let m=qp(u,o,n.modelPricing);r.push(m);let p=m.toLowerCase();p.includes("foundry")&&(p.includes("microsoft")||p.includes("aitk"))&&(s.modelSwitching.foundryWindowsSessions=1)}let l=[...new Set(r)];s.modelSwitching.uniqueModels=l,s.modelSwitching.modelCount=l.length,s.modelSwitching.totalRequests=r.length,s.modelSwitching.switchCount=$p(r),pe(n.modelPricing,l,r,s)}function Wp(n,e,t){let{effortByRequestId:s,defaultEffort:o,switchCount:i}=El(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 Hp(n,e,t,s){let o=e.inputState?.mode?Yn(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)Bp(n,r,o,s);zp(n,e,i,s),Wp(t,i,s),dr(s)}function Jp(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 Vp(n,e,t){if(n.kind==="toolInvocationSerialized"||n.kind==="prepareToolInvocation"){let s=n.toolId||n.toolName||n.invocationMessage?.toolName||"unknown";lr(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&&ur([n],e.contextReferences)}function Kp(n,e,t,s){let o=Jp(e,t);if(o==="agent"?s.modeUsage.agent++:o==="edit"?s.modeUsage.edit++:s.modeUsage.ask++,mr(e,s.contextReferences),e.response&&Array.isArray(e.response))for(let i of e.response)i&&Vp(i,s,n)}function Qp(n,e,t){if(!(!e.requests||!Array.isArray(e.requests)))for(let s of e.requests)Kp(n,s,e,t)}function Yp(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 jl(n,e){for(let t of e??[])n.includes(t)||n.push(t)}function Xp(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 Zp(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 eg(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),Yp(n,t),Xp(n,t),n.modelSwitching.autoSessions+=t.autoSessions||0,n.modelSwitching.foundryWindowsSessions+=t.foundryWindowsSessions||0,n.modelSwitching.unknownProviderSessions+=t.unknownProviderSessions||0,jl(n.modelSwitching.selectedModelExtensions,t.selectedModelExtensions),jl(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,Zp(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 sg=["file","selection","implicitSelection","symbol","codebase","workspace","terminal","vscode","terminalLastCommand","terminalSelection","clipboard","changes","outputPanel","problemsPanel","pullRequest","copilotInstructions","agentsMd"];function Bl(n,e){for(let[t,s]of Object.entries(e))n[t]=(n[t]||0)+s}function ng(n,e){let t=n.contextReferences,s=e.contextReferences;for(let o of sg)t[o]+=s[o]||0;t.codeContextLines=(t.codeContextLines||0)+(s.codeContextLines||0),Bl(t.byKind,s.byKind),Bl(t.byPath,s.byPath)}function og(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;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 Ys(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,ng(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;eg(n,e),og(n,e)}var ig=[[/#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 Wl(n,e){for(let[t,s]of ig){let o=n.match(t);o&&(e[s]+=o.length)}}function rg(n){let e=n.kind;return e==="reference"&&n.reference?n.reference:e==="inlineReference"&&n.inlineReference?n.inlineReference:null}function ag(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 lg(n,e,t){let s=n.fsPath||n.path;typeof s=="string"&&ag(s,oe(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 ur(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=rg(s);i&&lg(i,o,e)}}function cg(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 Hl(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"||cg(s,e)}function dr(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 ug(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 dg(n,e){if(n.kind!=="prompt")return;typeof n.slashPromptCommand?.command=="string"&&(e.byKind.prompt=(e.byKind.prompt||0)+1)}function mg(n,e){if(!n||typeof n!="object")return;let t=n;typeof t.text=="string"&&Wl(t.text,e),ug(t,e),dg(t,e)}function pg(n,e){typeof n.text=="string"&&Wl(n.text,e);let t=n.parts;if(Array.isArray(t))for(let s of t)mg(s,e)}function mr(n,e){if(!n||typeof n!="object")return;let t=n,s=t.message;s&&typeof s=="object"&&pg(s,e);let o=t.contentReferences;Array.isArray(o)&&ur(o,e);let i=t.variableData;i!==void 0&&Hl(i,e)}async function Xs(n){try{let t=(await ms.promises.readFile(n,"utf8")).trim().split(`
|
|
55
|
-
`),s=[];for(let o of t)if(o.trim())try{s.push(JSON.parse(o))}catch{}return s}catch{return[]}}function pe(n,e,t,s){let o=[],i=[],r=[];for(let S of e){let I=Wt(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=Hs(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=Wt(S,n);I==="standard"?m++:I==="premium"?p++:f++;let v=Hs(S,n);v==="low"?y++:v==="medium"?_++:v==="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 ir(n,e,t){let s=Wt(n,t);s==="standard"?e.standard++:s==="premium"?e.premium++:e.unknown++}function rr(n,e,t){let s=Hs(n,t);s==="low"?e.low++:s==="medium"?e.medium++:s==="high"?e.high++:e.unknown++}function Jl(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 Vl(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 gg(n,e){let t=[],s=[],o=[];for(let i of n){let r=Wt(i,e);r==="standard"?t.push(i):r==="premium"?s.push(i):o.push(i)}return{standard:t,premium:s,unknown:o}}function fg(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 Kl(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 hg(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=Mt(l,t);s&&u!==s&&o++,s=u,ir(u,i,t),rr(u,r,t),fg(l,e),Kl(l,e)}e.modelSwitching.switchCount=o,Jl(i,e),Vl(r,e)}function yg(n,e){Ht(n.selectedModel?.identifier||n.selectedModel?.metadata?.id,n.selectedModel,e),Ht(n.inputState?.selectedModel?.identifier||n.inputState?.selectedModel?.metadata?.id,n.inputState?.selectedModel,e)}function Ql(n){if(n.kind!==0)return null;let e=n.v,t=e?.selectedModel?.identifier||e?.selectedModel?.metadata?.id||e?.inputState?.selectedModel?.identifier||e?.inputState?.selectedModel?.metadata?.id;return t?t.replace(/^copilot\//,""):null}function Yl(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 _g(n,e){let t=Ql(n);if(t)return t;let s=Yl(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 bg(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?Mt(n,t):e}function Cg(n,e,t,s,o){if(n.type==="user.message"){let i=n.model||s;ir(i,e,o),rr(i,t,o);return}if(!(n.kind!==2||n.k?.[0]!=="requests"||!Array.isArray(n.v)))for(let i of n.v){let r=bg(i,s,o);ir(r,e,o),rr(r,t,o)}}function kg(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=_g(l,i),Rp(l,e),Cg(l,s,o,i,t)}catch{}Jl(s,e),Vl(o,e)}async function Xl(n,e,t,s,o){try{let i=await pr(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=gg(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=Hs(_,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 ms.promises.readFile(e,"utf8");if(cs(f))return;if(e.endsWith(".jsonl")||ut(f))kg(f.trim().split(`
|
|
56
|
-
`),t,n.modelPricing);else{let _=o!==void 0?o:JSON.parse(f);if(!Uo(_)){n.warn(`Unexpected session format in ${e}`);return}yg(_,t),hg(_,t,n.modelPricing)}}catch(i){n.warn(`Error calculating model switching for ${e}: ${i}`)}}function Zl(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 Sg(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=Ws(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=zl(s.requests||[],e.agentCounts,e.editedFiles,e.timestamps,e.timingsData,e.waitTimes);e.totalApplies=o.totalApplies,e.totalCodeBlocks=o.totalCodeBlocks,e.totalLinesAdded=o.totalLinesAdded,e.totalLinesRemoved=o.totalLinesRemoved,Zl(e.allLanguageUsage,o.languageUsage)}function wg(n,e,t,s){if(!Uo(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=zl(t.requests??[],s.agentCounts,s.editedFiles,s.timestamps,s.timingsData,s.waitTimes);return s.totalApplies=o.totalApplies,s.totalCodeBlocks=o.totalCodeBlocks,s.totalLinesAdded=o.totalLinesAdded,s.totalLinesRemoved=o.totalLinesRemoved,Zl(s.allLanguageUsage,o.languageUsage),!0}function Tg(n,e){let t=e.editedFiles.size>0?1:0;n.editScope={singleFileEdits:e.editedFiles.size===1?1:0,multiFileEdits:e.editedFiles.size>1?1:0,totalEditedFiles:e.editedFiles.size,avgFilesPerSession:t>0?e.editedFiles.size/t:0,linesAdded:e.totalLinesAdded,linesRemoved:e.totalLinesRemoved,...Object.keys(e.allLanguageUsage).length>0?{languageUsage:e.allLanguageUsage}:{}},n.applyUsage={totalApplies:e.totalApplies,totalCodeBlocks:e.totalCodeBlocks,applyRate:e.totalCodeBlocks>0?e.totalApplies/e.totalCodeBlocks*100:0};let s=e.timestamps.length>=2?Math.max(...e.timestamps)-Math.min(...e.timestamps):0,o=e.timingsData.length>0?e.timingsData.reduce((l,u)=>l+(u.firstProgress||0),0)/e.timingsData.length:0,i=e.timingsData.length>0?e.timingsData.reduce((l,u)=>l+(u.totalElapsed||0),0)/e.timingsData.length:0,r=e.waitTimes.length>0?e.waitTimes.reduce((l,u)=>l+u,0)/e.waitTimes.length:0;n.sessionDuration={totalDurationMs:s,avgDurationMs:s,avgFirstProgressMs:o,avgTotalElapsedMs:i,avgWaitTimeMs:r},dr(n),n.agentTypes=e.agentCounts}function ql(n){return n.length>0?(n.match(/\n/g)??[]).length+(n.endsWith(`
|
|
57
|
-
`)?0:1):0}function Mg(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 Pg(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=cr(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 vg(n,e){let t=new Map;for(let s of n)try{let o=JSON.parse(s);o.type==="tool.execution_start"?Mg(o,t):o.type==="tool.execution_complete"&&Pg(o,t,e)}catch{}}async function ar(n,e,t,s,o){try{let i=s??await ms.promises.readFile(e,"utf8");if(cs(i))return;let r=e.endsWith(".jsonl")||ut(i),l={totalApplies:0,totalCodeBlocks:0,totalLinesAdded:0,totalLinesRemoved:0,allLanguageUsage:{},editedFiles:new Set,timestamps:[],timingsData:[],waitTimes:[],agentCounts:{editsAgent:0,defaultAgent:0,workspaceAgent:0,other:0}};if(r){let u=i.trim().split(`
|
|
58
|
-
`).filter(m=>m.trim());Sg(u,l),ec(u)||vg(u,l)}else{let u=o!==void 0?o:JSON.parse(i);if(!wg(n,e,u,l))return}Tg(t,l)}catch(i){n.warn(`Error tracking enhanced metrics from ${e}: ${i}`)}}function le(){return{toolCalls:{total:0,byTool:{}},modeUsage:{ask:0,edit:0,agent:0,plan:0,customAgent:0,cli:0},contextReferences:X(),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 ec(n){if(n.length===0)return!1;try{let e=JSON.parse(n[0]);return e&&typeof e.kind=="number"}catch{return!1}}function Ag(n,e,t){let s={};for(let o of e)try{let i=JSON.parse(o);s=Ws(s,i)}catch{}Hp(n,s,e,t)}function tc(n,e){for(let t of n){let s=t;if(s&&(s.startLineNumber!==s.endLineNumber||s.startColumn!==s.endColumn)){e.implicitSelection++;break}}}function xg(n,e,t){n.kind!==0||!n.v?.inputState?.mode||(t.sessionMode=Yn(n.v.inputState.mode),Array.isArray(n.v?.inputState?.selections)&&tc(n.v.inputState.selections,e.contextReferences))}function Dg(n,e,t){n.kind===1&&(n.k?.includes("mode")&&n.v&&(t.sessionMode=Yn(n.v)),n.k?.includes("selections")&&Array.isArray(n.v)&&tc(n.v,e.contextReferences),n.k?.includes("contentReferences")&&Array.isArray(n.v)&&ur(n.v,e.contextReferences),n.k?.includes("variableData")&&n.v&&Hl(n.v,e.contextReferences))}function sc(n){return n.toolId||n.toolName||n.invocationMessage?.toolName||n.toolSpecificData?.kind||"unknown"}function Eg(n,e){for(let t of n)if(t&&(t.kind==="toolInvocationSerialized"||t.kind==="prepareToolInvocation")){e.toolCalls.total++;let s=sc(t);e.toolCalls.byTool[s]=(e.toolCalls.byTool[s]||0)+1}}function Rg(n,e){for(let t of n){let s=t;if(s&&s.kind==="toolInvocationSerialized"){e.toolCalls.total++;let o=sc(s);e.toolCalls.byTool[o]=(e.toolCalls.byTool[o]||0)+1}}}function Ig(n,e,t){n.requestId&&$l(t,e.modeUsage),n.agent?.id&&(e.toolCalls.total++,e.toolCalls.byTool[n.agent.id]=(e.toolCalls.byTool[n.agent.id]||0)+1),mr(n,e.contextReferences),n.response&&Array.isArray(n.response)&&Eg(n.response,e)}function Ug(n,e,t,s){if(n.kind===2){if(n.k?.[0]==="requests"&&Array.isArray(n.v))for(let o of n.v)Ig(o,e,t.sessionMode);n.k?.includes("response")&&Array.isArray(n.v)&&Rg(n.v,e)}}function Fg(n,e){typeof n.selectedModel=="string"&&(e.defaultModel=n.selectedModel),typeof n.reasoningEffort=="string"&&(e.defaultEffort=n.reasoningEffort)}function Og(n,e){n==="agent"?e.modeUsage.agent++:n==="ask"?e.modeUsage.ask++:e.modeUsage.cli++}function Ng(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 Lg(n,e,t,s){if(n.type==="session.start"&&n.data&&Fg(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),Ng(n.data?.attachments,t.contextReferences),Og(s,t)}}function Gg(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";lr(s,e,t)}function jg(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=Is(s);e.mcpTools.byTool[o]=(e.mcpTools.byTool[o]||0)+1}function Bg(n,e,t){Gg(n,e,t),jg(n,e)}function or(n){if(!n)return 0;let e=n.split(`
|
|
59
|
-
`);return e[e.length-1]===""&&e.pop(),e.length}function nc(n){n.editScope||(n.editScope={singleFileEdits:0,multiFileEdits:0,totalEditedFiles:0,avgFilesPerSession:0,linesAdded:0,linesRemoved:0})}function qg(n,e){let{toolCallId:t,toolName:s,arguments:o}=n.data??{};t&&s&&e.pendingToolCalls.set(t,{toolName:s,args:o??{}})}function $g(n,e,t){let s=n.toolName==="edit"?or(n.args.new_str??""):or(n.args.file_text??""),o=n.toolName==="edit"?or(n.args.old_str??""):0;nc(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=cr(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 zg(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 Wg(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")&&$g(r,e,t),!i?.content||Je(r.toolName)))return;let l=zg(i.content);if(!l)return;let u=J(l);t.toolCalls.outputTokensByTool||(t.toolCalls.outputTokensByTool={}),t.toolCalls.outputTokensByTool[r.toolName]=(t.toolCalls.outputTokensByTool[r.toolName]||0)+u}function Hg(n,e,t){n.type==="tool.execution_start"?qg(n,e):n.type==="tool.execution_complete"&&Wg(n,e,t)}function Jg(n,e){if(n.editedFilePaths.size===0)return;nc(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 Vg(n,e,t,s,o,i){xg(n,e,t),Dg(n,e,t),Ug(n,e,t,i),Lg(n,s,e,o),Bg(n,e,i),Hg(n,s,e)}function Kg(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 Qg(n,e,t,s,o){let i={sessionMode:"ask"},r={defaultModel:"unknown",defaultEffort:null,requestCount:0,effortByRequest:{},pendingToolCalls:new Map,editedFilePaths:new Set},u=Eo(e)?Gl(s):null;for(let m of t)if(m.trim())try{let p=JSON.parse(m);Vg(p,o,i,r,u,n.toolNameMap)}catch{}Jg(r,o),Kg(r,o),await Xl(n,e,o,s),await ar(n,e,o,s),dr(o)}async function oc(n,e,t,s){let o=le();try{let i=n.ecosystems.find(u=>u.handles(e));if(i&&Ka(i))return i.analyzeUsage(e,{modelPricing:n.modelPricing,toolNameMap:n.toolNameMap});if(e.startsWith("windsurf://"))return o;let r=t??await ms.promises.readFile(e,"utf8");if(e.endsWith(".jsonl")||ut(r)){let u=r.trim().split(`
|
|
60
|
-
`).filter(m=>m.trim());if(ec(u))return Ag(n,u,o),await ar(n,e,o,r),o;await Qg(n,e,u,r,o)}else{let u=s!==void 0?s:JSON.parse(r);if(!Uo(u))return n.warn(`Unexpected session format in ${e}`),o;Qp(n,u,o),await Xl(n,e,o,r,s),await ar(n,e,o,r,s)}}catch(i){n.warn(`Error analyzing session usage from ${e}: ${i}`)}return o}function ic(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 rc(n,e,t,s){for(let o of n){let i=as(o);if(i){let r=i.modelName||e;t[r]||(t[r]={inputTokens:0,outputTokens:0}),i.prompt&&(t[r].inputTokens+=J(i.prompt,r,s)),i.result&&(t[r].outputTokens+=J(i.result,r,s))}}}function Yg(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 Xg(n,e){for(let[t,s]of Object.entries(n))s?.usage&&Yg(t,s.usage,e)}function Zg(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+=J(n.data.content,e,o.tokenEstimators))}function ef(n,e){n.data?.modelMetrics&&(e.cliShutdownModelUsage||(e.cliShutdownModelUsage={}),Xg(n.data.modelMetrics,e.cliShutdownModelUsage))}function tf(n,e,t,s,o){if(n.type==="session.shutdown")ef(n,t);else if(n.type==="user.message"&&n.data?.content)s[e].inputTokens+=J(n.data.content,e,o.tokenEstimators);else if(n.type==="assistant.message")Zg(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+=J(String(i),e,o.tokenEstimators))}}function sf(n){return n.kind!==0?null:n.v?.selectedModel?.identifier||n.v?.selectedModel?.metadata?.id||n.v?.inputState?.selectedModel?.metadata?.id||null}function nf(n){return n.kind!==2||n.k?.[0]!=="selectedModel"?null:n.v?.identifier||n.v?.metadata?.id||null}function of(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=sf(n);t&&(e.defaultModel=t.replace(/^copilot\//,""));let s=nf(n);s&&(e.defaultModel=s.replace(/^copilot\//,""))}function rf(n,e,t,s){typeof n.kind=="number"&&(e.isDeltaBased=!0,e.sessionState=Ws(e.sessionState,n)),of(n,e);let o=n.data?.model||n.model||e.defaultModel;t[o]||(t[o]={inputTokens:0,outputTokens:0}),e.isDeltaBased||tf(n,o,e,t,s)}function af(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);rf(i,s,e,t)}catch{}return s}function lf(n,e,t,s){if(n.message?.text&&(t[e].inputTokens+=J(n.message.text,e,s.tokenEstimators)),n.response&&Array.isArray(n.response))for(let o of n.response){let{text:i}=ls(o);i&&(t[e].outputTokens+=J(i,e,s.tokenEstimators))}}function cf(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=Mt(n,s.modelPricing)),t[o]||(t[o]={inputTokens:0,outputTokens:0}),ic(n,o,t)||lf(n,o,t,s),n.response&&Array.isArray(n.response)&&rc(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&&cf(s,n.defaultModel,e,t)}function df(n,e,t){let s=er(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 mf(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 pf(n,e,t){let s=af(n,e,t);return!s.isDeltaBased&&s.cliShutdownModelUsage?s.cliShutdownModelUsage:!s.isDeltaBased&&s.cliRealOutputByModel?mf(s,e):(uf(s,e,t),df(n,s,e),null)}function gf(n,e,t,s){if(n.message?.parts)for(let o of n.message.parts)o.text&&(t[e].inputTokens+=J(o.text,e,s.tokenEstimators));if(n.response&&Array.isArray(n.response))for(let o of n.response){let{text:i}=ls(o);i&&(t[e].outputTokens+=J(i,e,s.tokenEstimators))}}function ff(n,e,t){let s=Mt(n,t.modelPricing);e[s]||(e[s]={inputTokens:0,outputTokens:0}),ic(n,s,e)||gf(n,s,e,t),n.response&&Array.isArray(n.response)&&rc(n.response,s,e,t.tokenEstimators)}function hf(n,e,t){if(!(!n.requests||!Array.isArray(n.requests)))for(let s of n.requests)ff(s,e,t)}async function pr(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 ms.promises.readFile(e,"utf8");if(cs(i))return o;if(e.endsWith(".jsonl")||ut(i)){let u=i.trim().split(`
|
|
61
|
-
`);return pf(u,o,n)??o}let l=s!==void 0?s:JSON.parse(i);if(!Uo(l))return n.warn(`Unexpected session format in ${e}`),o;hf(l,o,n)}catch(i){n.warn(`Error getting model usage from ${e}: ${i}`)}return o}var ac=P(require("fs"));async function dt(n){try{return await ac.promises.access(n),!0}catch{return!1}}var Zs=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)?mt.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):Lt(async()=>JSON.parse(await Fo.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=mt.join(o,"storage","session"),r=mt.join(o,"opencode.db");if(e(`\u{1F4C1} Checking OpenCode JSON path: ${i}`),e(`\u{1F4C1} Checking OpenCode DB path: ${r}`),await dt(i)){let m=async f=>{let y=[];try{y=await Fo.promises.readdir(f,{withFileTypes:!0})}catch(_){console.error(`[openCodeAdapter] Failed to read dir ${f}:`,_)}for(let _ of y)if(_.isDirectory())await m(mt.join(f,_.name));else if(_.name.startsWith("ses_")&&_.name.endsWith(".json")){let C=mt.join(f,_.name);try{(await Fo.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 dt(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(mt.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:mt.join(e,"storage","session"),source:"OpenCode (JSON)"},{path:mt.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(`
|
|
62
|
-
`),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:X(),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=le(),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,pe(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 lc=P(require("fs")),pt=P(require("path"));var en=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 pt.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=pt.join(l.data_dir,"crush.db");e(`\u{1F4C1} Checking Crush DB path: ${u}`);try{return await lc.promises.access(u),(await this.crush.discoverSessionsInDb(u)).map(p=>pt.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:pt.join(e,"projects.json"),source:"Crush (projects.json)"}],s=xi(()=>this.crush.readCrushProjects().map(o=>({path:pt.join(o.data_dir,"crush.db"),source:`Crush (${pt.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(`
|
|
63
|
-
`),{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:X(),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=le(),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),pe(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 cc=P(require("fs")),uc=P(require("path")),dc=P(Qi());var tn=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 oe(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 uc.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=cc.readFileSync(e),o=(t.length>=2?Array.from((0,dc.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:X(),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=le(),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,pe(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=tt(u,o.toolNameMap);t.mcpTools.byServer[m]=(t.mcpTools.byServer[m]||0)+1;let p=Is(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 gr=P(require("fs"));var sn=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 gr.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 gr.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=X();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=le(),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,pe(t.modelPricing,l,r,s),s}};var pc=P(require("fs"));var mc=P(require("fs"));var yf=new Set(["review","bug","think","compact","pr_comments"]);function fr(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(`
|
|
64
|
-
`)[0].trim().match(/^\/([a-z_]+)(?:\s|$)/i);if(!s)return null;let o=s[1].toLowerCase();return yf.has(o)?o:null}var nn=class{constructor(e,t=Je,s=tt,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 mc.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 Xs(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(`
|
|
65
|
-
`):"",{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:X(),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=Tt(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=le(),o=await Xs(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),pe(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=fr(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=Tt(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=tt(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 on=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 pc.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(`
|
|
66
|
-
`):"",{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:X(),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=le(),o=await Xs(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),pe(t.modelPricing,s.modelSwitching.uniqueModels,i,s),s}processDesktopUserEvent(e,t){t.modeUsage.ask++;let s=fr(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=Tt(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 gc=P(require("fs"));var rn=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 gc.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:X(),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=le(),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,pe(t.modelPricing,u,l,s),s}};var fc=P(require("fs"));var an=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 fc.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=le(),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),pe(t.modelPricing,s.modelSwitching.uniqueModels,i,s),s}processGeminiAssistantRecord(e,t,s){let o=Vs(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 hc=P(require("fs")),hr=P(require("inspector"));var ln=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 hc.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();hr.url()&&e(`\u{1F50D} [Antigravity] Checking brain dir: ${o}`);try{let i=await this.antigravity.getAntigravitySessionFiles();hr.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=le(),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 yc=P(require("fs"));var cn=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 yc.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:X(),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(`
|
|
67
|
-
`):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=le(),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,pe(t.modelPricing,o,e,s)}};var _c=P(require("fs")),bc=P(require("path"));var Oo=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 bc.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 _c.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(`
|
|
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 Lp(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 jp(n,e){n.type==="PLANNER_RESPONSE"?Np(n,e):n.type==="SEARCH_WEB"&&n.content&&Lp(n,e)}function Gp(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"&&jp(o,t)}return t}var No=class{getAntigravityDataDir(){return rt.join(Ql.homedir(),".gemini","antigravity")}getAntigravityBrainDir(){return rt.join(this.getAntigravityDataDir(),"brain")}isAntigravitySessionFile(e){let t=K(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 rt.basename(rt.dirname(rt.dirname(rt.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 Oo.promises.readdir(e,{withFileTypes:!0})}catch{return[]}for(let o of s){if(!o.isDirectory())continue;let i=rt.join(e,o.name,".system_generated","logs","transcript.jsonl");try{(await Oo.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 Oo.promises.readFile(e,"utf8")}catch{return{sessionId:t,userEntries:s,modelEntries:o,allEntries:i}}let a=r.split(`
|
|
54
|
+
`).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 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 a of s.userEntries)o+=t(br(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 u=t.userEntries[0].content??"",m=br(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:br(t.content??""),assistantResponse:s,model:null,toolCalls:o,contextReferences:H(),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:u,toolCalls:m}=Gp(s,r+1);o.push(this._batCreateChatTurn(i,a,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 Lo=P(require("fs")),ze=P(require("path")),Yl=P(require("os"));var jo=class{getConfigDir(){return ze.join(Yl.homedir(),".pi","agent","sessions")}isPiSessionFile(e){let t=ye(e);return t.includes("/.pi/agent/sessions/")&&t.endsWith(".jsonl")}async discoverSessions(){let e=this.getConfigDir(),t=[];try{let s=await Lo.promises.readdir(e,{withFileTypes:!0});for(let o of s)o.isDirectory()&&await this.collectSessionFilesInDir(ze.join(e,o.name),t,4)}catch{}return t}async collectSessionFilesInDir(e,t,s){if(!(s<=0))try{let o=await Lo.promises.readdir(e,{withFileTypes:!0});for(let i of o)i.isFile()&&i.name.endsWith(".jsonl")?t.push(ze.join(e,i.name)):i.isDirectory()&&await this.collectSessionFilesInDir(ze.join(e,i.name),t,s-1)}catch{}}async readLines(e){try{let t=await Lo.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(ze.basename(e)!=="session.jsonl")return null;let t=ze.dirname(ze.dirname(ze.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(u=>u.type==="session"),o=s?.cwd,i=o?ze.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,u=s>0?a/s:0;o[i]={inputTokens:r.inputTokens,outputTokens:r.outputTokens,interactions:Math.round(t*u)}}return o}};var be=P(require("fs")),Ye=P(require("path")),xt=P(require("os")),Xl=P(Bs());var Go=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=xt.platform();if(e==="win32"){let s=process.env.APPDATA||Ye.join(xt.homedir(),"AppData","Roaming");return Ye.join(s,"Cursor","User","globalStorage")}if(e==="darwin")return Ye.join(xt.homedir(),"Library","Application Support","Cursor","User","globalStorage");let t=process.env.XDG_CONFIG_HOME||Ye.join(xt.homedir(),".config");return Ye.join(t,"Cursor","User","globalStorage")}getCursorDbPath(){return Ye.join(this.getCursorGlobalStorageDir(),"state.vscdb")}isCursorSessionFile(e){return K(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=Ye.join(__dirname,"sql-wasm.wasm"),t;be.existsSync(e)&&(t=be.readFileSync(e));let s=await(0,Xl.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 be.statSync(e+"-wal").mtimeMs}catch{return 0}}statDb(e){try{return be.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=be.statSync(t).size}catch{return null}if(s===0)return null;try{let{DatabaseSync:o}=require("node:sqlite"),i=xt.tmpdir(),r=Ye.join(i,`cursor-wal-${Date.now()}.db`),a=r+"-wal",u=r+"-shm",m=e+"-shm";be.copyFileSync(e,r),be.copyFileSync(t,a),be.existsSync(m)&&be.copyFileSync(m,u);let p=new o(r);p.exec("PRAGMA wal_checkpoint(TRUNCATE);"),p.close();let f=be.readFileSync(r);for(let y of[r,a,u])try{be.unlinkSync(y)}catch{}return f}catch{return null}}async refreshDb(e,t){let s=this.getWalMtimeMs(e),o;try{let a=await this.initSqlJs(),m=await this.tryReadDbWithWal(e)??be.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(","),u=t.map(p=>`bubbleId:${o}:${p}`),m=i.exec(`SELECT key, value FROM cursorDiskKV WHERE key IN (${a})`,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 be.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,u=this.extractWorkspacePath(t);return{title:s,firstInteraction:r,lastInteraction:a?a.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(Ye.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 pt=P(require("fs")),fe=P(require("path")),ys=P(require("os")),Zl=P(require("crypto"));var Bp=new Set(["intentClassification","model","say"]),Bo=class{getKiroAppDataDir(){let e=ys.platform();if(e==="win32"){let t=process.env.APPDATA||fe.join(ys.homedir(),"AppData","Roaming");return fe.join(t,"Kiro")}return e==="darwin"?fe.join(ys.homedir(),"Library","Application Support","Kiro"):fe.join(ys.homedir(),".config","Kiro")}getKiroAgentDir(){return fe.join(this.getKiroAppDataDir(),"User","globalStorage","kiro.kiroagent")}getKiroWorkspaceSessionsDir(){return fe.join(this.getKiroAgentDir(),"workspace-sessions")}isKiroSessionFile(e){let t=K(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 pt.promises.readdir(e,{withFileTypes:!0})}catch{return[]}let s=[];for(let o of t){if(!o.isDirectory())continue;let i=fe.join(e,o.name);try{let r=await pt.promises.readdir(i);for(let a of r)a.endsWith(".json")&&a!=="sessions.json"&&s.push(fe.join(i,a))}catch{}}return s}async readSessionFile(e){try{let t=await pt.promises.readFile(e,"utf8");return JSON.parse(t)}catch{return null}}_executionRecordCache=new Map;getWorkspaceExecutionDir(e){let t=Zl.createHash("sha256").update(e).digest("hex").slice(0,32);return fe.join(this.getKiroAgentDir(),t)}async readExecutionRecordsForSession(e){let t=fe.basename(e,".json"),s=this.decodeWorkspaceDirName(fe.basename(fe.dirname(e)));if(!s)return[];let o=this.getWorkspaceExecutionDir(s),i=await this.collectExecutionFiles(o,0),r=[];for(let a of i){let u=await this.readExecutionFile(a);u?.executionId&&u?.chatSessionId===t&&r.push(this.toExecutionRecord(u))}return r.sort((a,u)=>(a.startTimeMs??0)-(u.startTimeMs??0)),r}async collectExecutionFiles(e,t){if(t>3)return[];let s;try{s=await pt.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=fe.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 pt.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 pt.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 u of o?t.slice(0,-1):t)i+=this.estimateTokens(this.extractContextMessageText(u));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(`
|
|
56
|
+
`)}extractActionToolCalls(e){let t=[];for(let s of Array.isArray(e?.actions)?e.actions:[]){let o=typeof s?.actionType=="string"?s.actionType:"";!o||Bp.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=fe.join(fe.dirname(e),"sessions.json"),s=fe.basename(e,".json");try{let o=JSON.parse(await pt.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 pt.promises.stat(e);i=a.mtime.toISOString(),o||(o=a.birthtime.toISOString())}catch{}let r=s?.workspaceDirectory??this.decodeWorkspaceDirName(fe.basename(fe.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)?ee(new Date(a)):ee(new Date)]:1}}let o=new Map;for(let r of t){let a=r.startTimeMs!==null?ee(new Date(r.startTimeMs)):ee(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(`
|
|
57
|
+
`):""}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:u}=this.buildTurnFromHistory(s,i);o.push(a),i=u}let r=await this.readExecutionRecordsForSession(e);if(r.length>0){let a=new Map(r.map(u=>[u.executionId,u]));for(let u of o)this.enrichTurnWithExecutionRecords(u,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(`
|
|
68
58
|
|
|
69
|
-
`)}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:X(),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=le(),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 pe(t.modelPricing,[i],m,s),s}};var Ie=P(require("fs")),Z=P(require("path")),mn=P(require("os"));var un=["Code","Code - Insiders","Code - Exploration","VSCodium","Cursor"],Sc=new Set(["Public","Default","Default User","All Users"]);function yr(){return mn.platform()==="linux"&&(typeof process.env.WSL_DISTRO_NAME=="string"||typeof process.env.WSL_INTEROP=="string")}function Cc(){let n=mn.platform(),e=mn.homedir(),t=[];if(n==="win32"){let s=process.env.APPDATA||Z.join(e,"AppData","Roaming");for(let o of un)t.push(Z.join(s,o,"User"))}else if(n==="darwin")for(let s of un)t.push(Z.join(e,"Library","Application Support",s,"User"));else{let s=process.env.XDG_CONFIG_HOME||Z.join(e,".config");for(let o of un)t.push(Z.join(s,o,"User"))}return t.push(Z.join(e,".vscode-server","data","User"),Z.join(e,".vscode-server-insiders","data","User"),Z.join(e,".vscode-remote","data","User"),Z.join("/tmp",".vscode-server","data","User"),Z.join("/workspace",".vscode-server","data","User")),t}async function _f(){if(!yr())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;Sc.has(r)||r.startsWith(".")||e.includes(r)||e.push(r)}}catch{return[]}for(let o of e){let i=Z.join(s,o,"AppData","Roaming");for(let r of un)n.push(Z.join(i,r,"User"))}return n}function bf(){if(!yr())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(".")||Sc.has(s.name)))for(let o of un)n.push(Z.join(e,s.name,"AppData","Roaming",o,"User"))}catch{}return n}async function kc(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 wc(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=Z.join(n,o.name);if(o.isDirectory()){await wc(i,e,t);continue}if(!(!o.name.endsWith(".json")&&!o.name.endsWith(".jsonl"))&&!Ll(o.name))try{(await Ie.promises.stat(i)).size>0&&e.push(i)}catch{}}}var dn=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 cs(t)?{tokens:0,thinkingTokens:0,actualTokens:0}:e.endsWith(".jsonl")||ut(t)?To(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):Z.dirname(e)}getCandidatePaths(){let e=[];for(let t of Cc())e.push({path:t,source:"VS Code"});for(let t of bf())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=>dt(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 kc(r,async l=>{let u=Z.basename(Z.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=Cc();if(yr()){e("\u{1FA9F} WSL environment detected \u2014 probing Windows-side VS Code paths");let s=await _f();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=Z.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(_=>Z.join(f,_));y.length>0&&s.push(...y)}catch{}},p=0;await kc(r,async f=>{let y=Z.join(i,f),_;try{_=await Ie.promises.readdir(y)}catch{return}let C=new Set(_),S=s.length;C.has("chatSessions")&&await m(Z.join(y,"chatSessions"));for(let I of l)if(C.has(I))for(let v of u)await m(Z.join(y,I,v));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=Z.join(e,"globalStorage","emptyWindowChatSessions"),r=(await Ie.promises.readdir(i)).filter(l=>l.endsWith(".json")||l.endsWith(".jsonl")).map(l=>Z.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=Z.join(e,"globalStorage",i);try{await Ie.promises.access(r),await wc(r,s,o)}catch{}}}};var gn=P(require("fs")),Ue=P(require("path")),kr=P(require("os"));var pn=P(require("fs")),_r=P(require("path")),Tc=P(require("os")),Mc=P(Fs());function br(n){return n?n.replace(/\\/g,"/").toLowerCase().includes("/microsoft scout"):!1}function Cf(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 kf(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 No=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 pn.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 pn.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 _r.join(Tc.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 pn.promises.stat(this.getDbPathFromVirtual(e))}async initSqlJs(){return this._sqlJsModule?this._sqlJsModule:(this._sqlJsInitPromise||(this._sqlJsInitPromise=(async()=>{let e=_r.join(__dirname,"sql-wasm.wasm"),t;try{t=await pn.promises.readFile(e)}catch{}let s=await(0,Mc.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]}),Cf(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]}),kf(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 Cr(){return Ue.join(kr.homedir(),".copilot","session-state")}var fn=class{id="copilotcli";displayName="Copilot CLI";store=new No;_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):gn.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(kr.homedir(),".copilot"):Cr()}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:X(),mcpTools:[],inputTokensEstimate:0,outputTokensEstimate:0,thinkingTokensEstimate:0}))}:{turns:[]}}async analyzeUsage(e,t){let s=le();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 gn.promises.readFile(s,"utf8")).match(/^cwd:\s*(.+)$/m);i&&br(i[1].trim())&&this._scoutSessionIds.add(t)}catch{}}getCandidatePaths(){let e=[{path:Cr(),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=Cr(),i=new Set;try{if(await dt(o)){let r;try{r=await gn.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 gn.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)br(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 ps=P(require("fs")),Lo=P(require("path")),Pc=P(require("os"));function Sr(){return Lo.join(Pc.homedir(),".copilot","jb")}var hn=class{id="jetbrains";displayName="JetBrains IDE";handles(e){return!1}getBackingPath(e){return e}async stat(e){return ps.promises.stat(e)}async parsePartition(e){try{let t=await ps.promises.readFile(e,"utf8");return Ro(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 Sr()}getCandidatePaths(){return[{path:Sr(),source:"JetBrains IDE"}]}async discover(e){let t=this.getCandidatePaths(),s=[],o=Sr();try{if(!await dt(o))return{sessionFiles:s,candidatePaths:t};let i;try{i=await ps.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=Lo.join(o,u.name),p;try{p=await ps.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 _=Lo.join(m,y.name);try{(await ps.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 wr(n){return{openCode:new so(n),crush:new no(n),continue_:new oo,visualStudio:new _o,claudeCode:new Co,claudeDesktopCowork:new So,mistralVibe:new wo,geminiCli:new Mo,antigravity:new vo,pi:new xo,cursor:new Do(n)}}function Tr(n){return[new Zs(n.openCode),new en(n.crush),new tn(n.visualStudio,n.estimateTokens),new sn(n.continue_),new on(n.claudeDesktopCowork,n.isMcpTool,n.extractMcpServerName,n.estimateTokens),new nn(n.claudeCode,n.isMcpTool,n.extractMcpServerName,n.estimateTokens),new rn(n.mistralVibe),new ln(n.antigravity,n.estimateTokens),new an(n.geminiCli),new cn(n.pi),new Oo(n.cursor),new dn,new fn,new hn]}function yn(n,e){try{return JSON.parse(n)}catch(t){console.error(`[${e}] JSON parse error:`,t);return}}function $e(n){return typeof n=="object"&&n!==null}function vc(n){return typeof n!="string"?!1:!["__proto__","prototype","constructor","hasOwnProperty"].includes(n)&&!n.startsWith("__")}function gs(n){return/^\d+$/.test(n)}function Mr(n,e){if(typeof n!="string")return e;let t=n.trim();return t?t.startsWith("copilot/")?t.substring(8):t:e}function Sf(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)&&gs(i)){let l=Number(i),u=s[l],m;$e(u)?m=u:(m=gs(r)?[]:Object.create(null),s[l]=m),s=m;continue}if(!$e(s))return null;s=t(s,i,r)}return{root:n,current:s}}function wf(n,e,t,s){return Array.isArray(e)&&gs(t)?(e[Number(t)]=s,n):($e(e)&&Object.defineProperty(e,t,{value:s,writable:!0,enumerable:!0,configurable:!0}),n)}function Tf(n,e,t,s){let o;if(Array.isArray(e)&&gs(t)){let i=Number(t);Array.isArray(e[i])||(e[i]=[]),o=e[i]}else $e(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 Mf(n,e){if(!$e(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(!vc(y))return n;let r=$e(n)?n:Object.create(null),u=Sf(r,i,(y,_,C)=>{let S=y[_];if(!$e(S)){let I=gs(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?wf(m,p,f,o):t===2?Tf(m,p,f,o):m}function Pf(n){if(!Array.isArray(n))return{responseText:"",thinkingText:""};let e="",t="";for(let s of n){let{text:o,isThinking:i}=ls(s);o&&(i?t+=o:e+=o)}return{responseText:e,thinkingText:t}}var Pr=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 vf(n,e,t){let s=n.modelId??n.selectedModel?.identifier??n.model,o=Mr(s,t);if(typeof s=="string"&&s.trim())return o;let i=e?e(n):void 0;return Mr(i,"")||o}function Af(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 xf(n,e,t,s){let o=n.modelName||e;n.prompt&&t(o,n.prompt),n.result&&s(o,n.result)}function Df(n,e,t,s){let o=as(n);if(o){xf(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 Ef(n,e,t,s){for(let o of n)Df(o,e,t,s)}function Rf(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 If(n){return Array.isArray(n.requests)?n.requests:Array.isArray(n.history)?n.history:[]}function Uf(n){return n.trim().length>0}function Ac(n,e,t,s,o,i,r){if(n==null||typeof n!="object")return;let l=n,u=vf(l,o,i);Af(l,u,t);let{responseText:m,thinkingText:p}=Pf(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:[];Ef(f,u,t,s),e.actualTokens+=Rf(l.result)}function Ff(n){if(!$e(n))return!1;let e=n.message;return $e(e)&&typeof e.text=="string"&&!!e.text.trim()}function Of(n){if(n.length===0)return null;let e=yn(n[0],"sessionParser");if(!e||typeof e.kind!="number")return null;let t=Object.create(null);for(let o of n){let i=yn(o,"sessionParser");i!==void 0&&(t=Mf(t,i))}let s=$e(t)?t:null;return s&&Array.isArray(s.requests)?s.requests:[]}function xc(n,e,t,s){let o,i="unknown",r=new Pr(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(Uf),C=Of(_);if(C!==null){let S=C.filter(Ff).length;for(let I of C)Ac(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=yn(e.trim(),"sessionParser"),o===void 0)return{tokens:0,interactions:0,modelUsage:{},thinkingTokens:0,actualTokens:0}}if(!o&&(o=yn(e,"sessionParser"),o===void 0))return{tokens:0,interactions:0,modelUsage:{},thinkingTokens:0,actualTokens:0};if(!$e(o)||Array.isArray(o))return{tokens:0,interactions:0,modelUsage:{},thinkingTokens:0,actualTokens:0};let f=If(o),y=f.length;for(let _ of f)Ac(_,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 vr=class{extractCounts(e){let t={},s={},o=e.trim().split(`
|
|
70
|
-
`);for(let i of o)if(i.trim())try{let r=JSON.parse(i);if(r.type==="user.message"){fs(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)fs(s.timestamp??s.ts,t)}processKind2Event(e,t,s,o){if(Array.isArray(t))for(let i of t)fs(i.timestamp??i.ts,o);else if(t&&typeof t=="object"){let i=t.timestamp??t.ts;i!==void 0&&fs(i,o),typeof e[1]=="number"&&(s[e[1]]=i)}}processKind1Event(e,t,s,o){let i=e[1];s[i]===void 0&&fs(t,o),s[i]=t}},Ar=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;fs(i,t)}}catch{}return t}};function Nf(n){if(n==null)return null;let e=new Date(n);return isNaN(e.getTime())?null:e}function fs(n,e){let t=Nf(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 Dc(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 vr:new Ar).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 vt=P(require("fs")),Dr=P(require("path")),Ec=P(require("os"));var Go=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 Rc=5,Lf=2e3,Ic=Dr.join(Ec.homedir(),".copilot-token-tracker"),xr=Dr.join(Ic,"cli-cache.json"),gt=new Map,hs=!0,Uc=!1,Fc=new Go(Lf);function Er(){hs=!1,gt.clear()}function Rr(){if(hs)try{if(!vt.existsSync(xr))return;let n=vt.readFileSync(xr,"utf-8"),e=JSON.parse(n);if(e.version!==Rc){gt.clear();return}gt=new Map(Object.entries(e.entries))}catch{gt.clear()}}function Ir(){if(!(!hs||!Uc))try{Fc.evict(gt),vt.mkdirSync(Ic,{recursive:!0});let n={version:Rc,entries:Object.fromEntries(gt)};vt.writeFileSync(xr,JSON.stringify(n),"utf-8")}catch{}}function Oc(n,e,t){if(!hs)return null;let s=gt.get(n);return!s||!Fc.isValid(s,e,t)?null:{...s.data,lastModified:new Date(s.data.lastModified)}}function Ur(n,e,t,s){hs&&(Uc=!0,gt.set(n,{mtime:e,size:t,data:{...s,lastModified:s.lastModified.toISOString()}}))}function Fr(){return{entries:gt.size,enabled:hs}}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 Nc={$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-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,"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}};var jo={$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-06-21",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.09/M input, $0.18/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:"Public preview",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:.09,outputCostPerMillion:.18,cachedInputCostPerMillion:.018,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)"]}}};var Lc={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"};var qf=jo.pricing;function Qe(n){return n?n.actualTokens>0?n.actualTokens:n.tokens:0}function Or(n){let e=oe(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 Nr(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 _n(){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 bn(n,e,t){let s=Math.round(Qe(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 Cn(){return{sessions:0,toolCalls:{total:0,byTool:{}},modeUsage:{ask:0,edit:0,agent:0,plan:0,customAgent:0,cli:0},contextReferences:X(),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},conversationPatterns:{multiTurnSessions:0,singleTurnSessions:0,avgTurnsPerSession:0,maxTurnsInSession:0},agentTypes:{editsAgent:0,defaultAgent:0,workspaceAgent:0,other:0}}}var Bo=[{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 kn(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(Q=>Q.entry),O=A.map(Q=>Q.label),se=D.map(Q=>Q.tokens),ie=D.map(Q=>Q.sessions),Y=new Set;D.forEach(Q=>Object.keys(Q.modelUsage).forEach(we=>Y.add(we)));let _s=Array.from(Y).map((Q,we)=>{let yt=Bo[we%Bo.length];return{label:Q,data:D.map(Kt=>{let Cs=Kt.modelUsage[Q];return Cs?Cs.inputTokens+Cs.outputTokens:0}),backgroundColor:yt.bg,borderColor:yt.border,borderWidth:1}}),Vt=new Set;D.forEach(Q=>Object.keys(Q.editorUsage).forEach(we=>Vt.add(we)));let De=Array.from(Vt).map((Q,we)=>{let yt=Bo[we%Bo.length];return{label:Q,data:D.map(Kt=>Kt.editorUsage[Q]?.tokens||0),backgroundColor:yt.bg,borderColor:yt.border,borderWidth:1}}),bs=se.reduce((Q,we)=>Q+we,0),ht=ie.reduce((Q,we)=>Q+we,0),it=A.length,Tn=D.map(Q=>Js(Q.modelUsage,qf,"copilot")),Mn=Tn.reduce((Q,we)=>Q+we,0),oi=it>0?Mn/it:0;return{labels:O,tokensData:se,sessionsData:ie,modelDatasets:_s,editorDatasets:De,repositoryDatasets:[],periodCount:it,totalTokens:bs,totalSessions:ht,avgPerPeriod:it>0?Math.round(bs/it):0,costData:Tn,totalCost:Mn,avgCostPerPeriod:oi}},i=(A,D)=>{A.tokens+=D.tokens,A.sessions+=D.sessions;for(let[O,se]of Object.entries(D.modelUsage))A.modelUsage[O]||(A.modelUsage[O]={inputTokens:0,outputTokens:0}),A.modelUsage[O].inputTokens+=se.inputTokens,A.modelUsage[O].outputTokens+=se.outputTokens,se.cachedReadTokens!==void 0&&(A.modelUsage[O].cachedReadTokens=(A.modelUsage[O].cachedReadTokens??0)+se.cachedReadTokens),se.cacheCreationTokens!==void 0&&(A.modelUsage[O].cacheCreationTokens=(A.modelUsage[O].cacheCreationTokens??0)+se.cacheCreationTokens);for(let[O,se]of Object.entries(D.editorUsage))A.editorUsage[O]||(A.editorUsage[O]={tokens:0,sessions:0}),A.editorUsage[O].tokens+=se.tokens,A.editorUsage[O].sessions+=se.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")),se=_.get(s(O));se&&i(se.entry,D)}let S=Array.from(_.values()),I=o(S),v=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")}`,se=D.toLocaleDateString("en-US",{month:"short",year:"numeric"});v.set(O,{label:se,entry:r()})}for(let[A,D]of C.entries()){let O=A.slice(0,7),se=v.get(O);se&&i(se.entry,D)}let U=Array.from(v.values()),ee=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:ee}}}function W(n){return n==null||!Number.isFinite(n)?"0":Math.round(n).toLocaleString("en-US")}function de(n){return n==null||!Number.isFinite(n)||n<0?"0":n>=1e9?`${(n/1e9).toFixed(1)}B`:n>=1e6?`${(n/1e6).toFixed(1)}M`:n>=1e3?`${(n/1e3).toFixed(1)}K`:n.toString()}var $o=Nc.estimators,Jt=jo.pricing,$f=Lc,zf=n=>{},Lr=n=>{},jc=(n,e)=>{let t=e instanceof Error?e.message:e!==void 0?String(e):"";console.error(w.red(n),t)};async function Wf(n){try{let e=await ft.promises.readFile(n,"utf-8");return JSON.parse(e)}catch(e){return e?.code!=="ENOENT"&&jc(`[readJsonFile] Failed to read or parse JSON at ${n}:`,e),null}}var qo=null;function Sn(){if(qo)return qo;let n=Jn.file(__dirname);return qo=Tr({...wr(n),estimateTokens:(e,t)=>J(e,t??"gpt-4",$o),isMcpTool:Je,extractMcpServerName:tt}),qo}function Bc(){return new Xn({log:zf,warn:Lr,error:jc,ecosystems:Sn()})}async function ye(){return Bc().getCopilotSessionFiles()}async function zo(n){let e=new Set,t=Se.join(Gc.homedir(),".claude","projects");for(let o of n){if(o.startsWith(t+Se.sep)||o.startsWith(t+"/")){let f=await Lt(()=>ft.promises.readFile(o,"utf-8"),null,`buildCustomizationMatrix readFile(${o})`);if(f!==null){let y=f.split(`
|
|
71
|
-
|
|
72
|
-
|
|
59
|
+
`)),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?`
|
|
60
|
+
|
|
61
|
+
`:"")+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 tn=P(require("fs")),qo=P(require("path")),ec=P(require("os"));var zo=class{getKiroCliDataDir(){return qo.join(ec.homedir(),".kiro")}getKiroCliSessionsDir(){return qo.join(this.getKiroCliDataDir(),"sessions","cli")}isKiroCliSessionFile(e){let t=K(e);return t.includes("/.kiro/sessions/cli/")&&t.endsWith(".json")}async getKiroCliSessionFiles(){let e=this.getKiroCliSessionsDir();try{await tn.promises.access(e)}catch{return[]}try{return(await tn.promises.readdir(e)).filter(s=>s.endsWith(".json")).map(s=>qo.join(e,s))}catch{return[]}}getMessageLogPath(e){return e.replace(/\.json$/,".jsonl")}async readSessionMetadata(e){let t;try{t=JSON.parse(await tn.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 tn.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 u;try{u=JSON.parse(a)}catch{continue}let m=this.parseMessageRecord(u,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?`
|
|
62
|
+
`:"")+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(`
|
|
63
|
+
`)}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=>ee(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)?ee(new Date(a)):ee(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?`
|
|
64
|
+
|
|
65
|
+
`:"")+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 Vo=P(require("fs")),ft=P(require("path"));var _s=P(require("fs"));function tc(n){let e=globalThis.window;return e?e[n]:void 0}var qp=tc("__MODEL_PRICING__"),zp={};for(let[n,e]of Object.entries(qp?.pricing??{}))e.displayNames&&e.displayNames.length>0&&(zp[n]=e.displayNames[0]);var $p=[["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 sc(n){let e=n.toLowerCase(),t=$p.find(([s])=>e.startsWith(s));return t?t[1]:"Other"}var Wp=/\/partition-\d+\.jsonl$/,Hp=["embeddings","index","cache","preferences","settings","config","workspacesessions","globalsessions","api.json"];function nc(n){let e=n.toLowerCase();return Hp.some(t=>e.includes(t))}function $o(n){let e=ye(n);return e.includes("/.copilot/jb/")&&Wp.test(e)}function Jp(n){return!n||typeof n!="string"?null:n.startsWith("toolu_")?"claude":n.startsWith("call_")?"gpt":null}function Vp(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 Kp(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 Qp(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 sn(n,e){if(!n.currentTurnId)return;let t=n.turnById.get(n.currentTurnId);t&&e(t)}function Yp(n){return typeof n?.text=="string"&&n.text?n.text:typeof n?.content=="string"&&n.content?n.content:null}function Xp(n,e){let t=Yp(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,sn(e,o=>{o.hasThinking=!0})),typeof n.data?.messageId=="string"&&(e.currentMessageId=n.data.messageId,e.messageIds.push(n.data.messageId),sn(e,o=>{o.messageId=n.data.messageId})),typeof n.data?.iterationNumber=="number"&&(e.currentIterationNumber=n.data.iterationNumber,sn(e,o=>{o.iterationNumber=n.data.iterationNumber})),typeof n.timestamp=="string"&&(e.lastTurnTs=n.timestamp,sn(e,o=>{o.endTimestamp||(o.endTimestamp=n.timestamp)}))}function Zp(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||""),sn(e,s=>{s.toolCallCount++}))}function eg(n,e){e.sawToolCall=!0;let t=n.data,s=t?.toolCallId;if(!e.modelFromToolCallId){let r=Jp(s);r&&(e.modelFromToolCallId=r)}let o=typeof t?.toolName=="string"?t.toolName:"unknown",i={toolName:o};if(Zp(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 tg(n,e){let t="";for(let s of n){let o=s;o&&typeof o.value=="string"&&(e.outputTokens+=W(o.value),t+=(t?`
|
|
66
|
+
`:"")+o.value)}return t}function sg(n,e){let t=n.data?.result?.result,s=Array.isArray(t)?tg(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 ng(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 og(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 ig(n,e){switch(n.type){case"partition.created":Kp(n,e.result);break;case"user.message":Qp(n,e);break;case"user.message_rendered":typeof n.data?.renderedMessage=="string"&&(e.inputTokens+=W(n.data.renderedMessage));break;case"assistant.turn_start":ng(n,e);break;case"assistant.message":Xp(n,e);break;case"tool.execution_start":eg(n,e);break;case"tool.execution_complete":sg(n,e);break;case"assistant.turn_end":og(n,e);break}}function rg(){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 ag(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 lg(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 Wo(n){let e=rg(),{parsed:t,renderedTurnIds:s}=Vp(n.split(/\r?\n/)),o=ag(e,s);for(let i of t)ig(i,o);return lg(e,o),e}function oc(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 on(n){return n==null}function cg(n){if(typeof n!="object"||n===null||Array.isArray(n))return!1;let e=n;return on(e.id)||typeof e.id=="string"}function Jo(n){if(n===null||typeof n!="object"||Array.isArray(n))return!1;let e=n;return!(!on(e.requests)&&!Array.isArray(e.requests)||!on(e.mode)&&!cg(e.mode)||!on(e.creationDate)&&typeof e.creationDate!="number"||!on(e.lastMessageDate)&&typeof e.lastMessageDate!="number")}function Ho(n){return typeof n=="string"?n.trim().toLowerCase():""}function nn(n){let e=n.v;return e?.selectedModel??e?.inputState?.selectedModel}function ug(n,e){return n==="auto"||e==="auto"||e.includes("auto")||n.includes("/auto")}function dg(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 mg(n){let e=n?.metadata,t=e?.extension;return{family:Ho(e?.family),vendor:Ho(e?.vendor),extension:Ho(t?.value),category:Ho(e?.modelPickerCategory?.label),rawExtension:t?.value}}function Kt(n,e,t){let s=(n??"").replace(/^copilot\//,"");if(!s)return;let{family:o,vendor:i,extension:r,category:a,rawExtension:u}=mg(e);ug(s,o)&&(t.modelSwitching.autoSessions=1),dg(s,i,o,r,a)&&(t.modelSwitching.foundryWindowsSessions=1),sc(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 pg(n,e){if(n.type==="session.start"&&typeof n.data?.selectedModel=="string"){Kt(n.data.selectedModel,nn(n),e);return}if(n.type==="session.model_change"&&typeof n.data?.newModel=="string"){Kt(n.data.newModel,nn(n),e);return}let t=fc(n);if(t){Kt(t,nn(n),e);return}let s=hc(n);if(s){Kt(s,nn(n),e);return}typeof n.model=="string"&&(Kt(n.model,nn(n),e),gc(n,e))}function lc(n,e){n==="agent"?e.agent++:n==="edit"?e.edit++:n==="plan"?e.plan++:n==="customAgent"?e.customAgent++:e.ask++}function Tr(n,e,t){if(Ve(n)){e.mcpTools.total++;let s=nt(n,t);e.mcpTools.byServer[s]=(e.mcpTools.byServer[s]||0)+1;let o=js(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 Mr(n){let e=n.split("/").pop()?.split("\\").pop()??"",t=e.lastIndexOf(".");return t<=0?e.toLowerCase()||"unknown":e.slice(t+1).toLowerCase()}function gg(n){return{timestamp:n.timestamp,timings:n.result?.timings,waitTime:n.timeSpentWaiting}}function fg(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 hg(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(`
|
|
67
|
+
`)?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 yg(n,e,t){for(let s of n)if(Array.isArray(s))for(let o of s)hg(o,e,t)}function _g(n,e){if(!n.uri)return;let t=n.uri.path||JSON.stringify(n.uri);e.editedFilePaths.push(t);let s=Mr(t),o=n;Array.isArray(o.edits)&&yg(o.edits,s,e)}function bg(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"&&_g(t,e),t.kind==="codeblockUri"&&(e.codeBlocks++,t.isEdit===!0&&e.applies++));return e}function Cg(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 kg(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 cc(n,e,t,s,o,i,r){let a=0,u=0,m=0,p=0,f={};for(let y of n){if(!y)continue;kg(gg(y),s,o,i,r);let _=fg(y);_.agentType!==null&&e[_.agentType]++;let C=bg(y);for(let S of C.editedFilePaths)t.add(S);u+=C.codeBlocks,a+=C.applies,m+=C.linesAdded,p+=C.linesRemoved,Cg(f,C.languageUsage)}return{totalApplies:a,totalCodeBlocks:u,totalLinesAdded:m,totalLinesRemoved:p,languageUsage:f}}function Sg(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";Tr(o,e,t)}}}function wg(n,e,t,s){e.requestId&&(lc(t,s.modeUsage),e.agent?.id&&(s.toolCalls.total++,s.toolCalls.byTool[e.agent.id]=(s.toolCalls.byTool[e.agent.id]||0)+1),Ar(e,s.contextReferences),Sg(e,s,n.toolNameMap))}function Tg(n,e,t){return n.modelId?n.modelId.replace(/^copilot\//,""):n.result?.metadata?.modelId?n.result.metadata.modelId.replace(/^copilot\//,""):n.result?.details?Pt(n,t):e}function Mg(n){let e=0;for(let t=1;t<n.length;t++)n[t]!==n[t-1]&&e++;return e}function Pg(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 vg(n,e,t,s){let o=Pg(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=Tg(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=Mg(u),ie(n.modelPricing,m,u,s)}function Ag(n,e,t){let{effortByRequestId:s,defaultEffort:o,switchCount:i}=Sl(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 xg(n,e,t,s){let o=e.inputState?.mode?ro(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)wg(n,r,o,s);vg(n,e,i,s),Ag(t,i,s),vr(s)}function Dg(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 Eg(n,e,t){if(n.kind==="toolInvocationSerialized"||n.kind==="prepareToolInvocation"){let s=n.toolId||n.toolName||n.invocationMessage?.toolName||"unknown";Tr(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&&Pr([n],e.contextReferences)}function Rg(n,e,t,s){let o=Dg(e,t);if(o==="agent"?s.modeUsage.agent++:o==="edit"?s.modeUsage.edit++:s.modeUsage.ask++,Ar(e,s.contextReferences),e.response&&Array.isArray(e.response))for(let i of e.response)i&&Eg(i,s,n)}function Ig(n,e,t){if(!(!e.requests||!Array.isArray(e.requests)))for(let s of e.requests)Rg(n,s,e,t)}function Ug(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 Fg(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 Og(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 Ng(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),Ug(n,t),Fg(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,Og(n)}function Lg(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 jg=["file","selection","implicitSelection","symbol","codebase","workspace","terminal","vscode","terminalLastCommand","terminalSelection","clipboard","changes","outputPanel","problemsPanel","pullRequest","copilotInstructions","agentsMd"];function rc(n,e){for(let[t,s]of Object.entries(e))n[t]=(n[t]||0)+s}function Gg(n,e){let t=n.contextReferences,s=e.contextReferences;for(let o of jg)t[o]+=s[o]||0;t.codeContextLines=(t.codeContextLines||0)+(s.codeContextLines||0),rc(t.byKind,s.byKind),rc(t.byPath,s.byPath)}function Bg(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),Lg(n,e)}function rn(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,Gg(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;Ng(n,e),Bg(n,e)}var qg=[[/#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 uc(n,e){for(let[t,s]of qg){let o=n.match(t);o&&(e[s]+=o.length)}}function zg(n){let e=n.kind;return e==="reference"&&n.reference?n.reference:e==="inlineReference"&&n.inlineReference?n.inlineReference:null}function $g(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 Wg(n,e,t){let s=n.fsPath||n.path;typeof s=="string"&&$g(s,K(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 Pr(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=zg(s);i&&Wg(i,o,e)}}function Hg(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 dc(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"||Hg(s,e)}function vr(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 Jg(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 Vg(n,e){if(n.kind!=="prompt")return;typeof n.slashPromptCommand?.command=="string"&&(e.byKind.prompt=(e.byKind.prompt||0)+1)}function Kg(n,e){if(!n||typeof n!="object")return;let t=n;typeof t.text=="string"&&uc(t.text,e),Jg(t,e),Vg(t,e)}function Qg(n,e){typeof n.text=="string"&&uc(n.text,e);let t=n.parts;if(Array.isArray(t))for(let s of t)Kg(s,e)}function Ar(n,e){if(!n||typeof n!="object")return;let t=n,s=t.message;s&&typeof s=="object"&&Qg(s,e);let o=t.contentReferences;Array.isArray(o)&&Pr(o,e);let i=t.variableData;i!==void 0&&dc(i,e)}async function an(n){try{let t=(await _s.promises.readFile(n,"utf8")).trim().split(`
|
|
68
|
+
`),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 I=Wt(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 a={low:[],medium:[],high:[],unknown:[]};for(let S of e){let I=Ws(S,n);I==="low"?a.low.push(S):I==="medium"?a.medium.push(S):I==="high"?a.high.push(S):a.unknown.push(S)}s.modelSwitching.costBuckets=a;let u=[a.low,a.medium,a.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=Wt(S,n);I==="standard"?m++:I==="premium"?p++:f++;let v=Ws(S,n);v==="low"?y++:v==="medium"?_++:v==="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 kr(n,e,t){let s=Wt(n,t);s==="standard"?e.standard++:s==="premium"?e.premium++:e.unknown++}function Sr(n,e,t){let s=Ws(n,t);s==="low"?e.low++:s==="medium"?e.medium++:s==="high"?e.high++:e.unknown++}function mc(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 pc(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 Yg(n,e){let t=[],s=[],o=[];for(let i of n){let r=Wt(i,e);r==="standard"?t.push(i):r==="premium"?s.push(i):o.push(i)}return{standard:t,premium:s,unknown:o}}function Xg(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 gc(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 Zg(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 u=Pt(a,t);s&&u!==s&&o++,s=u,kr(u,i,t),Sr(u,r,t),Xg(a,e),gc(a,e)}e.modelSwitching.switchCount=o,mc(i,e),pc(r,e)}function ef(n,e){Kt(n.selectedModel?.identifier||n.selectedModel?.metadata?.id,n.selectedModel,e),Kt(n.inputState?.selectedModel?.identifier||n.inputState?.selectedModel?.metadata?.id,n.inputState?.selectedModel,e)}function fc(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 hc(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 tf(n,e){let t=fc(n);if(t)return t;let s=hc(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 sf(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?Pt(n,t):e}function nf(n,e,t,s,o){if(n.type==="user.message"){let i=n.model||s;kr(i,e,o),Sr(i,t,o);return}if(!(n.kind!==2||n.k?.[0]!=="requests"||!Array.isArray(n.v)))for(let i of n.v){let r=sf(i,s,o);kr(r,e,o),Sr(r,t,o)}}function of(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=tf(a,i),pg(a,e),nf(a,s,o,i,t)}catch{}mc(s,e),pc(o,e)}async function yc(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 u=Yg(a,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 a){let C=Ws(_,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 _s.promises.readFile(e,"utf8");if(us(f))return;if(e.endsWith(".jsonl")||ct(f))of(f.trim().split(`
|
|
69
|
+
`),t,n.modelPricing);else{let _=o!==void 0?o:JSON.parse(f);if(!Jo(_)){n.warn(`Unexpected session format in ${e}`);return}ef(_,t),Zg(_,t,n.modelPricing)}}catch(i){n.warn(`Error calculating model switching for ${e}: ${i}`)}}function rf(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 _c(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 af(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=$s(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=cc(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,_c(e.allLanguageUsage,o.languageUsage)}function lf(n,e,t,s){if(!Jo(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=cc(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,_c(s.allLanguageUsage,o.languageUsage),!0}function cf(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,a=rf(e.activeIntervals);n.sessionDuration={totalDurationMs:s,avgDurationMs:s,avgFirstProgressMs:o,avgTotalElapsedMs:i,avgWaitTimeMs:r,activeDurationMs:a},vr(n),n.agentTypes=e.agentCounts}function ac(n){return n.length>0?(n.match(/\n/g)??[]).length+(n.endsWith(`
|
|
70
|
+
`)?0:1):0}function uf(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,u=typeof r=="string"?r:"",m=typeof a=="string"?a:"";e.set(o,{filePath:i,added:ac(u),removed:ac(m)})}function df(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=Mr(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 mf(n,e){let t=new Map;for(let s of n)try{let o=JSON.parse(s);o.type==="tool.execution_start"?uf(o,t):o.type==="tool.execution_complete"&&df(o,t,e)}catch{}}async function wr(n,e,t,s,o){try{let i=s??await _s.promises.readFile(e,"utf8");if(us(i))return;let r=e.endsWith(".jsonl")||ct(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 u=i.trim().split(`
|
|
71
|
+
`).filter(m=>m.trim());af(u,a),bc(u)||mf(u,a)}else{let u=o!==void 0?o:JSON.parse(i);if(!lf(n,e,u,a))return}cf(t,a)}catch(i){n.warn(`Error tracking enhanced metrics from ${e}: ${i}`)}}function Q(){return{toolCalls:{total:0,byTool:{}},modeUsage:{ask:0,edit:0,agent:0,plan:0,customAgent:0,cli:0},contextReferences:H(),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 bc(n){if(n.length===0)return!1;try{let e=JSON.parse(n[0]);return e&&typeof e.kind=="number"}catch{return!1}}function pf(n,e,t){let s={};for(let o of e)try{let i=JSON.parse(o);s=$s(s,i)}catch{}xg(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 gf(n,e,t){n.kind!==0||!n.v?.inputState?.mode||(t.sessionMode=ro(n.v.inputState.mode),Array.isArray(n.v?.inputState?.selections)&&Cc(n.v.inputState.selections,e.contextReferences))}function ff(n,e,t){n.kind===1&&(n.k?.includes("mode")&&n.v&&(t.sessionMode=ro(n.v)),n.k?.includes("selections")&&Array.isArray(n.v)&&Cc(n.v,e.contextReferences),n.k?.includes("contentReferences")&&Array.isArray(n.v)&&Pr(n.v,e.contextReferences),n.k?.includes("variableData")&&n.v&&dc(n.v,e.contextReferences))}function kc(n){return n.toolId||n.toolName||n.invocationMessage?.toolName||n.toolSpecificData?.kind||"unknown"}function hf(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 yf(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 _f(n,e,t){n.requestId&&lc(t,e.modeUsage),n.agent?.id&&(e.toolCalls.total++,e.toolCalls.byTool[n.agent.id]=(e.toolCalls.byTool[n.agent.id]||0)+1),Ar(n,e.contextReferences),n.response&&Array.isArray(n.response)&&hf(n.response,e)}function bf(n,e,t,s){if(n.kind===2){if(n.k?.[0]==="requests"&&Array.isArray(n.v))for(let o of n.v)_f(o,e,t.sessionMode);n.k?.includes("response")&&Array.isArray(n.v)&&yf(n.v,e)}}function Cf(n,e){typeof n.selectedModel=="string"&&(e.defaultModel=n.selectedModel),typeof n.reasoningEffort=="string"&&(e.defaultEffort=n.reasoningEffort)}function kf(n,e){n==="agent"?e.modeUsage.agent++:n==="ask"?e.modeUsage.ask++:e.modeUsage.cli++}function Sf(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 wf(n,e,t,s){if(n.type==="session.start"&&n.data&&Cf(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),Sf(n.data?.attachments,t.contextReferences),kf(s,t)}}function Tf(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";Tr(s,e,t)}function Mf(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=js(s);e.mcpTools.byTool[o]=(e.mcpTools.byTool[o]||0)+1}function Pf(n,e,t){Tf(n,e,t),Mf(n,e)}function Cr(n){if(!n)return 0;let e=n.split(`
|
|
72
|
+
`);return e[e.length-1]===""&&e.pop(),e.length}function Sc(n){n.editScope||(n.editScope={singleFileEdits:0,multiFileEdits:0,totalEditedFiles:0,avgFilesPerSession:0,linesAdded:0,linesRemoved:0})}function vf(n,e){let{toolCallId:t,toolName:s,arguments:o}=n.data??{};t&&s&&e.pendingToolCalls.set(t,{toolName:s,args:o??{}})}function Af(n,e,t){let s=n.toolName==="edit"?Cr(n.args.new_str??""):Cr(n.args.file_text??""),o=n.toolName==="edit"?Cr(n.args.old_str??""):0;Sc(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=Mr(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 xf(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 Df(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")&&Af(r,e,t),!i?.content||Ve(r.toolName)))return;let a=xf(i.content);if(!a)return;let u=W(a);t.toolCalls.outputTokensByTool||(t.toolCalls.outputTokensByTool={}),t.toolCalls.outputTokensByTool[r.toolName]=(t.toolCalls.outputTokensByTool[r.toolName]||0)+u}function Ef(n,e,t){n.type==="tool.execution_start"?vf(n,e):n.type==="tool.execution_complete"&&Df(n,e,t)}function Rf(n,e){if(n.editedFilePaths.size===0)return;Sc(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 If(n,e,t,s,o,i){gf(n,e,t),ff(n,e,t),bf(n,e,t,i),wf(n,s,e,o),Pf(n,e,i),Ef(n,s,e)}function Uf(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 Ff(n,e,t,s,o){let i={sessionMode:"ask"},r={defaultModel:"unknown",defaultEffort:null,requestCount:0,effortByRequest:{},pendingToolCalls:new Map,editedFilePaths:new Set},u=$o(e)?oc(s):null;for(let m of t)if(m.trim())try{let p=JSON.parse(m);If(p,o,i,r,u,n.toolNameMap)}catch{}Rf(r,o),Uf(r,o),await yc(n,e,o,s),await wr(n,e,o,s),vr(o)}async function wc(n,e,t,s){let o=Q();try{let i=n.ecosystems.find(u=>u.handles(e));if(i&&dl(i))return i.analyzeUsage(e,{modelPricing:n.modelPricing,toolNameMap:n.toolNameMap});if(e.startsWith("windsurf://"))return o;let r=t??await _s.promises.readFile(e,"utf8");if(e.endsWith(".jsonl")||ct(r)){let u=r.trim().split(`
|
|
73
|
+
`).filter(m=>m.trim());if(bc(u))return pf(n,u,o),await wr(n,e,o,r),o;await Ff(n,e,u,r,o)}else{let u=s!==void 0?s:JSON.parse(r);if(!Jo(u))return n.warn(`Unexpected session format in ${e}`),o;Ig(n,u,o),await yc(n,e,o,r,s),await wr(n,e,o,r,s)}}catch(i){n.warn(`Error analyzing session usage from ${e}: ${i}`)}return o}function Tc(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 Mc(n,e,t,s){for(let o of n){let i=ls(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 Of(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 Nf(n,e){for(let[t,s]of Object.entries(n))s?.usage&&Of(t,s.usage,e)}function Lf(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 jf(n,e){n.data?.modelMetrics&&(e.cliShutdownModelUsage||(e.cliShutdownModelUsage={}),Nf(n.data.modelMetrics,e.cliShutdownModelUsage))}function Gf(n,e,t,s,o){if(n.type==="session.shutdown")jf(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")Lf(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 Bf(n){return n.kind!==0?null:n.v?.selectedModel?.identifier||n.v?.selectedModel?.metadata?.id||n.v?.inputState?.selectedModel?.metadata?.id||null}function qf(n){return n.kind!==2||n.k?.[0]!=="selectedModel"?null:n.v?.identifier||n.v?.metadata?.id||null}function zf(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=Bf(n);t&&(e.defaultModel=t.replace(/^copilot\//,""));let s=qf(n);s&&(e.defaultModel=s.replace(/^copilot\//,""))}function $f(n,e,t,s){typeof n.kind=="number"&&(e.isDeltaBased=!0,e.sessionState=$s(e.sessionState,n)),zf(n,e);let o=n.data?.model||n.model||e.defaultModel;t[o]||(t[o]={inputTokens:0,outputTokens:0}),e.isDeltaBased||Gf(n,o,e,t,s)}function Wf(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);$f(i,s,e,t)}catch{}return s}function Hf(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}=cs(o);i&&(t[e].outputTokens+=W(i,e,s.tokenEstimators))}}function Jf(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=Pt(n,s.modelPricing)),t[o]||(t[o]={inputTokens:0,outputTokens:0}),Tc(n,o,t)||Hf(n,o,t,s),n.response&&Array.isArray(n.response)&&Mc(n.response,o,t,s.tokenEstimators)}function Vf(n,e,t){if(!(!n.isDeltaBased||!n.sessionState.requests||!Array.isArray(n.sessionState.requests)))for(let s of n.sessionState.requests)s&&Jf(s,n.defaultModel,e,t)}function Kf(n,e,t){let s=Ji(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 Qf(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 Yf(n,e,t){let s=Wf(n,e,t);return!s.isDeltaBased&&s.cliShutdownModelUsage?s.cliShutdownModelUsage:!s.isDeltaBased&&s.cliRealOutputByModel?Qf(s,e):(Vf(s,e,t),Kf(n,s,e),null)}function Xf(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}=cs(o);i&&(t[e].outputTokens+=W(i,e,s.tokenEstimators))}}function Zf(n,e,t){let s=Pt(n,t.modelPricing);e[s]||(e[s]={inputTokens:0,outputTokens:0}),Tc(n,s,e)||Xf(n,s,e,t),n.response&&Array.isArray(n.response)&&Mc(n.response,s,e,t.tokenEstimators)}function eh(n,e,t){if(!(!n.requests||!Array.isArray(n.requests)))for(let s of n.requests)Zf(s,e,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://"))return o;try{let i=t??await _s.promises.readFile(e,"utf8");if(us(i))return o;if(e.endsWith(".jsonl")||ct(i)){let u=i.trim().split(`
|
|
74
|
+
`);return Yf(u,o,n)??o}let a=s!==void 0?s:JSON.parse(i);if(!Jo(a))return n.warn(`Unexpected session format in ${e}`),o;eh(a,o,n)}catch(i){n.warn(`Error getting model usage from ${e}: ${i}`)}return o}var Pc=P(require("fs"));async function gt(n){try{return await Pc.promises.access(n),!0}catch{return!1}}var ln=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)?ft.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,u)=>a-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):Bt(async()=>JSON.parse(await Vo.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=ft.join(o,"storage","session"),r=ft.join(o,"opencode.db");if(e(`\u{1F4C1} Checking OpenCode JSON path: ${i}`),e(`\u{1F4C1} Checking OpenCode DB path: ${r}`),await gt(i)){let m=async f=>{let y=[];try{y=await Vo.promises.readdir(f,{withFileTypes:!0})}catch(_){console.error(`[openCodeAdapter] Failed to read dir ${f}:`,_)}for(let _ of y)if(_.isDirectory())await m(ft.join(f,_.name));else if(_.name.startsWith("ses_")&&_.name.endsWith(".json")){let C=ft.join(f,_.name);try{(await Vo.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 gt(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(ft.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:ft.join(e,"storage","session"),source:"OpenCode (JSON)"},{path:ft.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 u=s.filter((_,C)=>C>r&&_.role==="assistant"&&_.parentID===a.id),p=(await this.openCode.getOpenCodePartsForMessage(a.id)).filter(_=>_.type==="text").map(_=>_.text||"").join(`
|
|
75
|
+
`),f=await this.processOpenCodeAssistantMessages(u,o),y=Math.max(0,f.turnCumulativeTotal-o-f.turnOutputAndThinking);t.push({turnNumber:i,timestamp:a.time?.created?new Date(a.time.created).toISOString():null,mode:"cli",userMessage:p,assistantResponse:f.assistantText,model:f.model,toolCalls:f.toolCalls,contextReferences:H(),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,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 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:a,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=Q(),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 u=1;u<i.length;u++)i[u]!==i[u-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 vc=P(require("fs")),ht=P(require("path"));var cn=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 ht.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 u=ht.join(a.data_dir,"crush.db");e(`\u{1F4C1} Checking Crush DB path: ${u}`);try{return await vc.promises.access(u),(await this.crush.discoverSessionsInDb(u)).map(p=>ht.join(a.data_dir,`crush.db#${p}`))}catch(m){e(`Could not read Crush database for ${a.path}: ${m}`)}return[]})),r=i.reduce((a,u)=>a+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:ht.join(e,"projects.json"),source:"Crush (projects.json)"}],s=$i(()=>this.crush.readCrushProjects().map(o=>({path:ht.join(o.data_dir,"crush.db"),source:`Crush (${ht.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 u=s[a];if(u.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(u,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(`
|
|
76
|
+
`),{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:a,assistantResponse:u,model:p,toolCalls:m,contextReferences:H(),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=Q(),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 Ac=P(require("fs")),xc=P(require("path")),Dc=P(fr());var un=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 K(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 xc.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=Ac.readFileSync(e),o=(t.length>=2?Array.from((0,Dc.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||[]):"",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(a,u??"gpt-4"):0;return{turnNumber:s,timestamp:o?.Timestamp?new Date(o.Timestamp).toISOString():null,mode:"ask",userMessage:r,assistantResponse:a,model:u,toolCalls:this.extractVSToolCalls(i),contextReferences:H(),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=Q(),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 a=0;for(let u=1;u<i.length;u++)i[u]!==i[u-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 u=String(a.Function.Name||a.Function.Description||"tool");if(Ve(u)){t.mcpTools.total++;let m=nt(u,o.toolNameMap);t.mcpTools.byServer[m]=(t.mcpTools.byServer[m]||0)+1;let p=js(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 Dr=P(require("fs"));var dn=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 Dr.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 Dr.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=H();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=Q(),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 u=0;for(let m=1;m<r.length;m++)r[m]!==r[m-1]&&u++;return s.modelSwitching.switchCount=u,ie(t.modelPricing,a,r,s),s}};var Ic=P(require("fs")),Qo=P(require("path"));function Ec(n){switch((n||"").toLowerCase()){case"agent":return"agent";case"edit":return"edit";case"plan":return"plan";case"ask":return"ask";default:return"ask"}}function Rc(n){if(!n)return null;let e=Date.parse(n);return Number.isNaN(e)?null:new Date(e).toISOString()}var Ko=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 Ic.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:Rc(t?.creationDate),lastInteraction:Rc(t?.lastMessageDate)}}getEditorRoot(e){return Qo.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:Qo.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=H();for(let i of s)t.push({turnNumber:t.length+1,timestamp:i.timestamp,mode:Ec(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=Q(),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 a=0;for(let u=1;u<i.length;u++)i[u]!==i[u-1]&&a++;return s.modelSwitching.switchCount=a,ie(t.modelPricing,r,i,s),s}tallyMode(e,t){let s=Ec(t);s==="agent"?e.modeUsage.agent++:s==="edit"?e.modeUsage.edit++:e.modeUsage.ask++}};var Fc=P(require("fs"));var Uc=P(require("fs"));var th=new Set(["review","bug","think","compact","pr_comments"]);function Er(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(`
|
|
77
|
+
`)[0].trim().match(/^\/([a-z_]+)(?:\s|$)/i);if(!s)return null;let o=s[1].toLowerCase();return th.has(o)?o:null}var mn=class{constructor(e,t=Ve,s=nt,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 Uc.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 an(e),o=null,i=[];for(let a of s)if(a.type==="user"&&!a.isSidechain&&a.message?.role==="user"&&this.isRealUserMessage(a)){let u=this.buildTurnFromEvents(o,i,t.length+1);u&&t.push(u),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(`
|
|
78
|
+
`):"",{assistantText:r,model:a,actualInputTokens:u,actualOutputTokens:m,toolCalls:p,mcpTools:f}=this.processAssistantEventsForTurn(t),y=a||"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:H(),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=[],a=[],u=new Set;for(let m of e){let p=m.message;!i&&p?.model&&(i=At(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,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=Q(),o=await an(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=Er(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=At(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 u=String(a.name||"tool");if(Ve(u)){let m=nt(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 pn=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 Fc.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 u=this.buildTurnFromEvents(o,i,t.length+1);u&&t.push(u),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(`
|
|
79
|
+
`):"",{assistantText:r,model:a,actualInputTokens:u,actualOutputTokens:m,toolCalls:p,mcpTools:f}=this.processAssistantEventsForTurn(t),y=a||"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:H(),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=[],a=[],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,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=Q(),o=await an(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=Er(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=At(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 Oc=P(require("fs"));var gn=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 Oc.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 u=0;u<a.length;u++){let m=a[u],p=u+1<a.length?a[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 a=e[t],u=typeof a.content=="string"?a.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:H(),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 u=i[i.length-1];u&&(u.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=Q(),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 f=String(p.function?.name||p.name||"tool");s.toolCalls.byTool[f]=(s.toolCalls.byTool[f]||0)+1}let u=[...new Set(a)];return s.modelSwitching.uniqueModels=u,s.modelSwitching.modelCount=u.length,s.modelSwitching.totalRequests=a.length,s.modelSwitching.switchCount=0,ie(t.modelPricing,u,a,s),s}};var Nc=P(require("fs"));var fn=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 Nc.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=Q(),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=en(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 Lc=P(require("fs")),Rr=P(require("inspector"));var hn=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 Lc.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();Rr.url()&&e(`\u{1F50D} [Antigravity] Checking brain dir: ${o}`);try{let i=await this.antigravity.getAntigravitySessionFiles();Rr.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=Q(),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 jc=P(require("fs"));var yn=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 jc.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: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: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:a,model:m,toolCalls:u,contextReferences:H(),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(`
|
|
80
|
+
`):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=Q(),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 Gc=P(require("fs")),Bc=P(require("path"));var Yo=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 Bc.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 Gc.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(`
|
|
81
|
+
|
|
82
|
+
`)}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),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?a.get(f.bubbleId):void 0;u.push({turnNumber:m,timestamp:y?.createdAt??null,mode:"agent",userMessage:y?.text??"",assistantResponse:this.collectAssistantText(s,p+1,a),model:i,toolCalls:[],contextReferences:H(),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=Q(),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,u=r.filter(p=>p.type===2).length;s.modeUsage.agent+=a,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 ie(t.modelPricing,[i],m,s),s}};var Ue=P(require("fs")),se=P(require("path")),Cn=P(require("os"));var _n=["Code","Code - Insiders","Code - Exploration","VSCodium","Cursor"],$c=new Set(["Public","Default","Default User","All Users"]);function Ir(){return Cn.platform()==="linux"&&(typeof process.env.WSL_DISTRO_NAME=="string"||typeof process.env.WSL_INTEROP=="string")}function qc(){let n=Cn.platform(),e=Cn.homedir(),t=[];if(n==="win32"){let s=process.env.APPDATA||se.join(e,"AppData","Roaming");for(let o of _n)t.push(se.join(s,o,"User"))}else if(n==="darwin")for(let s of _n)t.push(se.join(e,"Library","Application Support",s,"User"));else{let s=process.env.XDG_CONFIG_HOME||se.join(e,".config");for(let o of _n)t.push(se.join(s,o,"User"))}return t.push(se.join(e,".vscode-server","data","User"),se.join(e,".vscode-server-insiders","data","User"),se.join(e,".vscode-remote","data","User"),se.join("/tmp",".vscode-server","data","User"),se.join("/workspace",".vscode-server","data","User")),t}async function sh(){if(!Ir())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 Ue.promises.readdir(s,{withFileTypes:!0});for(let i of o){if(!i.isDirectory())continue;let r=i.name;$c.has(r)||r.startsWith(".")||e.includes(r)||e.push(r)}}catch{return[]}for(let o of e){let i=se.join(s,o,"AppData","Roaming");for(let r of _n)n.push(se.join(i,r,"User"))}return n}function nh(){if(!Ir())return[];let n=[],e="/mnt/c/Users";try{let t=Ue.readdirSync(e,{withFileTypes:!0});for(let s of t)if(!(!s.isDirectory()||s.name.startsWith(".")||$c.has(s.name)))for(let o of _n)n.push(se.join(e,s.name,"AppData","Roaming",o,"User"))}catch{}return n}async function zc(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 Wc(n,e,t){let s;try{s=await Ue.promises.readdir(n,{withFileTypes:!0})}catch(o){t(`Could not scan directory ${n}: ${o}`);return}for(let o of s){let i=se.join(n,o.name);if(o.isDirectory()){await Wc(i,e,t);continue}if(!(!o.name.endsWith(".json")&&!o.name.endsWith(".jsonl"))&&!nc(o.name))try{(await Ue.promises.stat(i)).size>0&&e.push(i)}catch{}}}var bn=class{id="copilotchat";displayName="GitHub Copilot Chat";handles(e){return!1}getBackingPath(e){return e}async stat(e){return Ue.promises.stat(e)}async getTokens(e){try{let t=await Ue.promises.readFile(e,"utf8");return us(t)?{tokens:0,thinkingTokens:0,actualTokens:0}:e.endsWith(".jsonl")||ct(t)?fo(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=ye(e),s=t.lastIndexOf("/User/");return s>=0?t.substring(0,s+5):se.dirname(e)}getCandidatePaths(){let e=[];for(let t of qc())e.push({path:t,source:"VS Code"});for(let t of nh())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=>gt(a).catch(()=>!1))),r=o.filter((a,u)=>i[u]);return e(`\u2705 Found ${r.length} of ${o.length} VS Code paths exist on disk`),await zc(r,async a=>{let u=se.basename(se.dirname(a));await this.scanWorkspaceStorage(a,u,s,e),await this.scanGlobalStorage(a,u,s,e)},4,(a,u,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=qc();if(Ir()){e("\u{1FA9F} WSL environment detected \u2014 probing Windows-side VS Code paths");let s=await sh();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=se.join(e,"workspaceStorage"),r;try{r=await Ue.promises.readdir(i)}catch{return}let a=["GitHub.copilot-chat","github.copilot-chat","GitHub.copilot","github.copilot"],u=["chatSessions","debug-logs","transcripts"],m=async f=>{try{let y=(await Ue.promises.readdir(f)).filter(_=>_.endsWith(".json")||_.endsWith(".jsonl")).map(_=>se.join(f,_));y.length>0&&s.push(...y)}catch{}},p=0;await zc(r,async f=>{let y=se.join(i,f),_;try{_=await Ue.promises.readdir(y)}catch{return}let C=new Set(_),S=s.length;C.has("chatSessions")&&await m(se.join(y,"chatSessions"));for(let I of a)if(C.has(I))for(let v of u)await m(se.join(y,I,v));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=se.join(e,"globalStorage","emptyWindowChatSessions"),r=(await Ue.promises.readdir(i)).filter(a=>a.endsWith(".json")||a.endsWith(".jsonl")).map(a=>se.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=se.join(e,"globalStorage",i);try{await Ue.promises.access(r),await Wc(r,s,o)}catch{}}}};var Sn=P(require("fs")),Fe=P(require("path")),Nr=P(require("os"));var kn=P(require("fs")),Ur=P(require("path")),Hc=P(require("os")),Jc=P(Bs());function Fr(n){return n?n.replace(/\\/g,"/").toLowerCase().includes("/microsoft scout"):!1}function oh(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 ih(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 Xo=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 kn.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 kn.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 Ur.join(Hc.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 kn.promises.stat(this.getDbPathFromVirtual(e))}async initSqlJs(){return this._sqlJsModule?this._sqlJsModule:(this._sqlJsInitPromise||(this._sqlJsInitPromise=(async()=>{let e=Ur.join(__dirname,"sql-wasm.wasm"),t;try{t=await kn.promises.readFile(e)}catch{}let s=await(0,Jc.default)(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);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,a=i[0].values[0],u={};return r.forEach((m,p)=>{u[m]=a[p]}),oh(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,a=[];for(let u of i[0].values){let m={};r.forEach((p,f)=>{m[p]=u[f]}),ih(m)&&a.push(m)}return a}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 a=ee(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?ee(new Date(r.updated_at)):ee(new Date)]:1}}let i={};for(let[r,a]of Object.entries(s))i[r]=a/o;return i}};function Or(){return Fe.join(Nr.homedir(),".copilot","session-state")}var wn=class{id="copilotcli";displayName="Copilot CLI";store=new Xo;_scoutSessionIds=new Set;getDisplayName(e){let t=this.store.getSessionId(e);if(t&&this._scoutSessionIds.has(t))return"MS Scout (Copilot CLI)";let s=Fe.basename(Fe.dirname(e));return s&&this._scoutSessionIds.has(s)?"MS Scout (Copilot CLI)":"Copilot CLI"}getDisplayNameForDiscoveredPath(e){let t=Fe.basename(Fe.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):Sn.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)?Fe.join(Nr.homedir(),".copilot"):Or()}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:H(),mcpTools:[],inputTokensEstimate:0,outputTokensEstimate:0,thinkingTokensEstimate:0}))}:{turns:[]}}async analyzeUsage(e,t){let s=Q();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=Fe.join(e,"workspace.yaml");try{let i=(await Sn.promises.readFile(s,"utf8")).match(/^cwd:\s*(.+)$/m);i&&Fr(i[1].trim())&&this._scoutSessionIds.add(t)}catch{}}getCandidatePaths(){let e=[{path:Or(),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=Or(),i=new Set;try{if(await gt(o)){let r;try{r=await Sn.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=>Fe.join(o,p.name));a.length>0&&(e(`\u{1F4C4} Found ${a.length} session files in Copilot CLI directory`),s.push(...a));let u=r.filter(p=>p.isDirectory()),m=(await Promise.all(u.map(async p=>{let f=Fe.join(o,p.name),y=Fe.join(f,"events.jsonl");try{if((await Sn.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:a,cwd:u}of r)Fr(u)&&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 bs=P(require("fs")),Zo=P(require("path")),Vc=P(require("os"));function Lr(){return Zo.join(Vc.homedir(),".copilot","jb")}var Tn=class{id="jetbrains";displayName="JetBrains IDE";handles(e){return!1}getBackingPath(e){return e}async stat(e){return bs.promises.stat(e)}async parsePartition(e){try{let t=await bs.promises.readFile(e,"utf8");return Wo(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 Lr()}getCandidatePaths(){return[{path:Lr(),source:"JetBrains IDE"}]}async discover(e){let t=this.getCandidatePaths(),s=[],o=Lr();try{if(!await gt(o))return{sessionFiles:s,candidatePaths:t};let i;try{i=await bs.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()),a=(await Promise.all(r.map(async u=>{let m=Zo.join(o,u.name),p;try{p=await bs.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 _=Zo.join(m,y.name);try{(await bs.promises.stat(_)).size>0&&f.push(_)}catch{}}return f}))).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 Kc=P(require("fs"));var Mn=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 Kc.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=H();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=Q(),o=await this.kiro.buildKiroTurns(e),i=[];for(let u of o){s.modeUsage.agent++,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 a=0;for(let u=1;u<i.length;u++)i[u]!==i[u-1]&&a++;return s.modelSwitching.switchCount=a,ie(t.modelPricing,r,i,s),s}};var Qc=P(require("fs"));var Pn=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 Qc.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=H(),i=(await this.kiroCli.readSessionMetadata(e))?.modelId||null;return{turns:t.map((a,u)=>({turnNumber:u+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=Q(),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 u=[...new Set(a)];return s.modelSwitching.uniqueModels=u,s.modelSwitching.modelCount=u.length,s.modelSwitching.totalRequests=a.length,s.modelSwitching.switchCount=0,ie(t.modelPricing,u,a,s),s}};function jr(n){return{openCode:new mo(n),crush:new po(n),continue_:new go,eclipse:new ho,visualStudio:new xo,claudeCode:new Eo,claudeDesktopCowork:new Io,mistralVibe:new Uo,geminiCli:new Fo,antigravity:new No,pi:new jo,cursor:new Go(n),kiro:new Bo,kiroCli:new zo}}function Gr(n){return[new ln(n.openCode),new cn(n.crush),new un(n.visualStudio,n.estimateTokens),new dn(n.continue_),new Ko(n.eclipse),new pn(n.claudeDesktopCowork,n.isMcpTool,n.extractMcpServerName,n.estimateTokens),new mn(n.claudeCode,n.isMcpTool,n.extractMcpServerName,n.estimateTokens),new gn(n.mistralVibe),new hn(n.antigravity,n.estimateTokens),new fn(n.geminiCli),new yn(n.pi),new Yo(n.cursor),new Mn(n.kiro),new Pn(n.kiroCli),new bn,new wn,new Tn]}function vn(n,e){try{return JSON.parse(n)}catch(t){console.error(`[${e}] JSON parse error:`,t);return}}function $e(n){return typeof n=="object"&&n!==null}function Yc(n){return typeof n!="string"?!1:!["__proto__","prototype","constructor","hasOwnProperty"].includes(n)&&!n.startsWith("__")}function Cs(n){return/^\d+$/.test(n)}function Br(n,e){if(typeof n!="string")return e;let t=n.trim();return t?t.startsWith("copilot/")?t.substring(8):t:e}function rh(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)&&Cs(i)){let a=Number(i),u=s[a],m;$e(u)?m=u:(m=Cs(r)?[]:Object.create(null),s[a]=m),s=m;continue}if(!$e(s))return null;s=t(s,i,r)}return{root:n,current:s}}function ah(n,e,t,s){return Array.isArray(e)&&Cs(t)?(e[Number(t)]=s,n):($e(e)&&Object.defineProperty(e,t,{value:s,writable:!0,enumerable:!0,configurable:!0}),n)}function lh(n,e,t,s){let o;if(Array.isArray(e)&&Cs(t)){let i=Number(t);Array.isArray(e[i])||(e[i]=[]),o=e[i]}else $e(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 ch(n,e){if(!$e(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(!Yc(y))return n;let r=$e(n)?n:Object.create(null),u=rh(r,i,(y,_,C)=>{let S=y[_];if(!$e(S)){let I=Cs(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?ah(m,p,f,o):t===2?lh(m,p,f,o):m}function uh(n){if(!Array.isArray(n))return{responseText:"",thinkingText:""};let e="",t="";for(let s of n){let{text:o,isThinking:i}=cs(s);o&&(i?t+=o:e+=o)}return{responseText:e,thinkingText:t}}var qr=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 dh(n,e,t){let s=n.modelId??n.selectedModel?.identifier??n.model,o=Br(s,t);if(typeof s=="string"&&s.trim())return o;let i=e?e(n):void 0;return Br(i,"")||o}function mh(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 ph(n,e,t,s){let o=n.modelName||e;n.prompt&&t(o,n.prompt),n.result&&s(o,n.result)}function gh(n,e,t,s){let o=ls(n);if(o){ph(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 fh(n,e,t,s){for(let o of n)gh(o,e,t,s)}function hh(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 yh(n){return Array.isArray(n.requests)?n.requests:Array.isArray(n.history)?n.history:[]}function _h(n){return n.trim().length>0}function Xc(n,e,t,s,o,i,r){if(n==null||typeof n!="object")return;let a=n,u=dh(a,o,i);mh(a,u,t);let{responseText:m,thinkingText:p}=uh(a.response);m&&s(u,m),p&&(e.thinkingTokens+=r(p,u));let f=Array.isArray(a.response)?a.response:Array.isArray(a.responses)?a.responses:[];fh(f,u,t,s),e.actualTokens+=hh(a.result)}function bh(n){if(!$e(n))return!1;let e=n.message;return $e(e)&&typeof e.text=="string"&&!!e.text.trim()}function Ch(n){if(n.length===0)return null;let e=vn(n[0],"sessionParser");if(!e||typeof e.kind!="number")return null;let t=Object.create(null);for(let o of n){let i=vn(o,"sessionParser");i!==void 0&&(t=ch(t,i))}let s=$e(t)?t:null;return s&&Array.isArray(s.requests)?s.requests:[]}function Zc(n,e,t,s){let o,i="unknown",r=new qr(i,t),{modelUsage:a}=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(_h),C=Ch(_);if(C!==null){let S=C.filter(bh).length;for(let I of C)Xc(I,p,u,m,s,i,t);return{tokens:r.totalInputTokens+r.totalOutputTokens+p.thinkingTokens,interactions:S,modelUsage:a,thinkingTokens:p.thinkingTokens,actualTokens:0}}if(o=vn(e.trim(),"sessionParser"),o===void 0)return{tokens:0,interactions:0,modelUsage:{},thinkingTokens:0,actualTokens:0}}if(!o&&(o=vn(e,"sessionParser"),o===void 0))return{tokens:0,interactions:0,modelUsage:{},thinkingTokens:0,actualTokens:0};if(!$e(o)||Array.isArray(o))return{tokens:0,interactions:0,modelUsage:{},thinkingTokens:0,actualTokens:0};let f=yh(o),y=f.length;for(let _ of f)Xc(_,p,u,m,s,i,t);return{tokens:r.totalInputTokens+r.totalOutputTokens+p.thinkingTokens,interactions:y,modelUsage:a,thinkingTokens:p.thinkingTokens,actualTokens:p.actualTokens}}var zr=class{extractCounts(e){let t={},s={},o=e.trim().split(`
|
|
83
|
+
`);for(let i of o)if(i.trim())try{let r=JSON.parse(i);if(r.type==="user.message"){ks(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)ks(s.timestamp??s.ts,t)}processKind2Event(e,t,s,o){if(Array.isArray(t))for(let i of t)ks(i.timestamp??i.ts,o);else if(t&&typeof t=="object"){let i=t.timestamp??t.ts;i!==void 0&&ks(i,o),typeof e[1]=="number"&&(s[e[1]]=i)}}processKind1Event(e,t,s,o){let i=e[1];s[i]===void 0&&ks(t,o),s[i]=t}},$r=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;ks(i,t)}}catch{}return t}};function kh(n){if(n==null)return null;let e=new Date(n);return isNaN(e.getTime())?null:e}function ks(n,e){let t=kh(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 eu(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 zr:new $r).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 Dt=P(require("fs")),Hr=P(require("path")),tu=P(require("os"));var ei=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 su=5,Sh=2e3,nu=Hr.join(tu.homedir(),".copilot-token-tracker"),Wr=Hr.join(nu,"cli-cache.json"),yt=new Map,Ss=!0,ou=!1,iu=new ei(Sh);function Jr(){Ss=!1,yt.clear()}function Vr(){if(Ss)try{if(!Dt.existsSync(Wr))return;let n=Dt.readFileSync(Wr,"utf-8"),e=JSON.parse(n);if(e.version!==su){yt.clear();return}yt=new Map(Object.entries(e.entries))}catch{yt.clear()}}function Kr(){if(!(!Ss||!ou))try{iu.evict(yt),Dt.mkdirSync(nu,{recursive:!0});let n={version:su,entries:Object.fromEntries(yt)};Dt.writeFileSync(Wr,JSON.stringify(n),"utf-8")}catch{}}function ru(n,e,t){if(!Ss)return null;let s=yt.get(n);return!s||!iu.isValid(s,e,t)?null:{...s.data,lastModified:new Date(s.data.lastModified)}}function Qr(n,e,t,s){Ss&&(ou=!0,yt.set(n,{mtime:e,size:t,data:{...s,lastModified:s.lastModified.toISOString()}}))}function Yr(){return{entries:yt.size,enabled:Ss}}var Oe={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 au={$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 ti={$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 lu={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",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"};var Ph=ti.pricing;function Xe(n){return n?n.actualTokens>0?n.actualTokens:n.tokens:0}function Xr(n){let e=K(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/")?"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 Zr(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 An(){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 xn(n,e,t){let s=Math.round(Xe(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),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 Qt(){return{sessions:0,toolCalls:{total:0,byTool:{}},modeUsage:{ask:0,edit:0,agent:0,plan:0,customAgent:0,cli:0},contextReferences:H(),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,autoSessions:0,foundryWindowsSessions:0,unknownProviderSessions:0,selectedModelExtensions:[],unknownProviderModels:[]},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 si=[{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 Dn(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(Z=>Z.entry),O=A.map(Z=>Z.label),re=D.map(Z=>Z.tokens),le=D.map(Z=>Z.sessions),te=new Set;D.forEach(Z=>Object.keys(Z.modelUsage).forEach(Te=>te.add(Te)));let Ts=Array.from(te).map((Z,Te)=>{let Ct=si[Te%si.length];return{label:Z,data:D.map(Zt=>{let Ps=Zt.modelUsage[Z];return Ps?Ps.inputTokens+Ps.outputTokens:0}),backgroundColor:Ct.bg,borderColor:Ct.border,borderWidth:1}}),Xt=new Set;D.forEach(Z=>Object.keys(Z.editorUsage).forEach(Te=>Xt.add(Te)));let Ee=Array.from(Xt).map((Z,Te)=>{let Ct=si[Te%si.length];return{label:Z,data:D.map(Zt=>Zt.editorUsage[Z]?.tokens||0),backgroundColor:Ct.bg,borderColor:Ct.border,borderWidth:1}}),Ms=re.reduce((Z,Te)=>Z+Te,0),bt=le.reduce((Z,Te)=>Z+Te,0),at=A.length,In=D.map(Z=>Hs(Z.modelUsage,Ph,"copilot")),Un=In.reduce((Z,Te)=>Z+Te,0),bi=at>0?Un/at:0;return{labels:O,tokensData:re,sessionsData:le,modelDatasets:Ts,editorDatasets:Ee,repositoryDatasets:[],periodCount:at,totalTokens:Ms,totalSessions:bt,avgPerPeriod:at>0?Math.round(Ms/at):0,costData:In,totalCost:Un,avgCostPerPeriod:bi}},i=(A,D)=>{A.tokens+=D.tokens,A.sessions+=D.sessions;for(let[O,re]of Object.entries(D.modelUsage))A.modelUsage[O]||(A.modelUsage[O]={inputTokens:0,outputTokens:0}),A.modelUsage[O].inputTokens+=re.inputTokens,A.modelUsage[O].outputTokens+=re.outputTokens,re.cachedReadTokens!==void 0&&(A.modelUsage[O].cachedReadTokens=(A.modelUsage[O].cachedReadTokens??0)+re.cachedReadTokens),re.cacheCreationTokens!==void 0&&(A.modelUsage[O].cacheCreationTokens=(A.modelUsage[O].cacheCreationTokens??0)+re.cacheCreationTokens);for(let[O,re]of Object.entries(D.editorUsage))A.editorUsage[O]||(A.editorUsage[O]={tokens:0,sessions:0}),A.editorUsage[O].tokens+=re.tokens,A.editorUsage[O].sessions+=re.sessions},r=()=>({tokens:0,sessions:0,modelUsage:{},editorUsage:{}}),a=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(a),_=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")),re=_.get(s(O));re&&i(re.entry,D)}let S=Array.from(_.values()),I=o(S),v=new Map;for(let A=11;A>=0;A--){let D=new Date(a.getFullYear(),a.getMonth()-A,1),O=`${D.getFullYear()}-${String(D.getMonth()+1).padStart(2,"0")}`,re=D.toLocaleDateString("en-US",{month:"short",year:"numeric"});v.set(O,{label:re,entry:r()})}for(let[A,D]of C.entries()){let O=A.slice(0,7),re=v.get(O);re&&i(re.entry,D)}let U=Array.from(v.values()),ne=o(U),G={};return e.forEach(A=>{Object.entries(A.editorUsage).forEach(([D,O])=>{G[D]=(G[D]||0)+O.tokens})}),{labels:m.labels,tokensData:m.tokensData,sessionsData:m.sessionsData,modelDatasets:m.modelDatasets,editorDatasets:m.editorDatasets,editorTotalsMap:G,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:ne}}}function J(n){return n==null||!Number.isFinite(n)?"0":Math.round(n).toLocaleString("en-US")}function pe(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 oi=au.estimators,Yt=ti.pricing,vh=lu,Ah=n=>{},ea=n=>{},uu=(n,e)=>{let t=e instanceof Error?e.message:e!==void 0?String(e):"";console.error(w.red(n),t)};async function xh(n){try{let e=await _t.promises.readFile(n,"utf-8");return JSON.parse(e)}catch(e){return e?.code!=="ENOENT"&&uu(`[readJsonFile] Failed to read or parse JSON at ${n}:`,e),null}}var ni=null;function En(){if(ni)return ni;let n=so.file(__dirname);return ni=Gr({...jr(n),estimateTokens:(e,t)=>W(e,t??"gpt-4",oi),isMcpTool:Ve,extractMcpServerName:nt}),ni}function du(){return new ao({log:Ah,warn:ea,error:uu,ecosystems:En()})}async function _e(){return du().getCopilotSessionFiles()}async function ii(n){let e=new Set,t=we.join(cu.homedir(),".claude","projects");for(let o of n){if(o.startsWith(t+we.sep)||o.startsWith(t+"/")){let f=await Bt(()=>_t.promises.readFile(o,"utf-8"),null,`buildCustomizationMatrix readFile(${o})`);if(f!==null){let y=f.split(`
|
|
84
|
+
`).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=we.dirname(o);if(we.basename(i)!=="chatSessions")continue;let r=we.dirname(i),a=we.join(r,"workspace.json"),u=await xh(a);if(!u)continue;let m=u.folder;if(!m||!m.startsWith("file://"))continue;let p=no(m);p&&e.add(p)}if(e.size===0)return;let s=0;for(let o of e)await Bt(async()=>{let[r,a,u]=await Promise.all([_t.promises.access(we.join(o,".github","copilot-instructions.md")).then(()=>!0).catch(()=>!1),_t.promises.access(we.join(o,"agents.md")).then(()=>!0).catch(()=>!1),_t.promises.access(we.join(o,"CLAUDE.md")).then(()=>!0).catch(()=>!1)]);return!r&&!a&&!u},!0,`buildCustomizationMatrix workspace check(${o})`)&&s++;return{customizationTypes:[],workspaces:[],totalWorkspaces:e.size,workspacesWithIssues:s}}function ri(){return du().getDiagnosticCandidatePaths()}function Dh(n,e){return W(n,e||"gpt-4",oi)}function Eh(n){return Pt(n,Yt)}async function mu(n){let e=En().find(t=>t.handles(n));return e?e.stat(n):_t.promises.stat(n)}async function Rh(n,e=!1){let t=we.basename(n,we.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 u of a){let m=we.join(r,u,"debug-logs",t,"main.jsonl");try{let p=await _t.promises.readFile(m,"utf8"),f=Cl(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 ws(n,e=!1){try{let t=await mu(n),s=ru(n,t.mtimeMs,t.size);if(s)return s;let o=En().find(S=>S.handles(n));if(o){let[S,I,v]=await Promise.all([o.getTokens(n),o.countInteractions(n),o.getModelUsage(n)]),U=ee(t.mtime),ne={file:n,tokens:S.actualTokens>0?S.actualTokens:S.tokens,thinkingTokens:S.thinkingTokens,actualTokens:S.actualTokens,interactions:I,modelUsage:v,lastModified:t.mtime,editorSource:Xr(n),dailyFractions:await o.getDailyFractions?.(n)??{[U]:1}};return Qr(n,t.mtimeMs,t.size,ne),ne}let i=await _t.promises.readFile(n,"utf-8");if(!i.trim())return null;let r=n.endsWith(".jsonl")||ct(i),a=0,u=0,m=0,p=0,f={};if(r){let S=fo(i);if(a=S.actualTokens>0?S.actualTokens:S.tokens,u=S.thinkingTokens,m=S.actualTokens,f=await xr({warn:ea,tokenEstimators:oi,modelPricing:Yt,ecosystems:En()},n,i),Object.keys(f).length===0&&$o(n)){let v=Wo(i);Object.keys(v.modelUsage).length>0?f=v.modelUsage:v.tokens>0&&(f={[v.modelHint&&v.modelHint!=="unknown"?v.modelHint:"unknown"]:{inputTokens:v.tokens,outputTokens:0}})}let I=i.trim().split(`
|
|
85
|
+
`);for(let v of I)try{let U=JSON.parse(v);(U.type==="user.message"||U.kind===2&&U.k?.[0]==="requests")&&p++}catch{}}else{let S=Zc(n,i,Dh,Eh);a=S.tokens,u=S.thinkingTokens,m=S.actualTokens,p=S.interactions,f=S.modelUsage}let y=eu(i,r,t.mtime),_=await Rh(n,e);if(_&&_.inputTokens+_.outputTokens>0&&(a=_.inputTokens+_.outputTokens,m=a,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:a,thinkingTokens:u,actualTokens:m,interactions:p,modelUsage:f,lastModified:t.mtime,editorSource:Xr(n),dailyFractions:y};return Qr(n,t.mtimeMs,t.size,C),C}catch{return null}}async function Et(n,e){let t=new Date,s=ee(t),o=t.getFullYear(),i=t.getMonth(),r=ee(new Date(o,i,1)),a=new Date(o,i,0),u=ee(new Date(a.getFullYear(),a.getMonth(),1)),m=new Date(o,i,t.getDate()-30),p=ee(m),f={today:An(),month:An(),lastMonth:An(),last30Days:An()},y=0,_=await Zr(n,async C=>{let S=await ws(C);return e&&e(++y,n.length),S});for(let C of _){if(!C||C.tokens===0||!Object.keys(C.dailyFractions).some(G=>G>=u))continue;let I=0,v=0,U=0,ne=0;for(let[G,A]of Object.entries(C.dailyFractions))G===s&&(I+=A),G>=r&&(v+=A),G>=u&&G<r&&(U+=A),G>=p&&(ne+=A);I>0&&xn(f.today,C,I),v>0&&xn(f.month,C,v),U>0&&xn(f.lastMonth,C,U),ne>0&&xn(f.last30Days,C,ne)}for(let C of Object.values(f))C.sessions>0&&(C.avgTokensPerSession=Math.round(C.tokens/C.sessions)),C.co2=C.tokens/1e3*Oe.CO2_PER_1K_TOKENS,C.treesEquivalent=C.co2/Oe.CO2_ABSORPTION_PER_TREE_PER_YEAR,C.waterUsage=C.tokens/1e3*Oe.WATER_USAGE_PER_1K_TOKENS,C.estimatedCost=Hs(C.modelUsage,Yt),C.estimatedCostCopilot=Hs(C.modelUsage,Yt,"copilot");return{...f,lastUpdated:t}}async function Rt(n){let e={warn:ea,tokenEstimators:oi,modelPricing:Yt,toolNameMap:vh,ecosystems:En()},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,u=Qt(),m=Qt(),p=Qt(),f=Qt();for(let y of n)try{let C=(await mu(y)).mtime;if(C<a)continue;let S=await wc(e,y);C>=o&&(rn(m,S),m.sessions++),C>=i&&(rn(p,S),p.sessions++),C>=s&&(rn(u,S),u.sessions++),C>=r&&C<i&&(rn(f,S),f.sessions++)}catch{}return{today:u,last30Days:m,month:p,lastMonth:f,lastUpdated:t}}async function ai(n,e=!1){let t=new Date,s=new Date(t.getFullYear(),t.getMonth(),t.getDate()-30),o=ee(s),i=ee(t),r=new Map,a=new Date(s);for(;ee(a)<=i;){let y=ee(a);r.set(y,{tokens:0,sessions:0,modelUsage:{},editorUsage:{}}),a.setDate(a.getDate()+1)}let u=new Map,m=await Zr(n,async y=>ws(y,e));for(let y of m){if(!y||y.tokens===0||y.interactions===0)continue;let _=Xe(y);for(let[C,S]of Object.entries(y.dailyFractions)){let I=Math.round(_*S),v=r.get(C);if(v){v.tokens+=I,v.sessions++;for(let[A,D]of Object.entries(y.modelUsage))v.modelUsage[A]||(v.modelUsage[A]={inputTokens:0,outputTokens:0}),v.modelUsage[A].inputTokens+=Math.round(D.inputTokens*S),v.modelUsage[A].outputTokens+=Math.round(D.outputTokens*S),D.cachedReadTokens!==void 0&&(v.modelUsage[A].cachedReadTokens=(v.modelUsage[A].cachedReadTokens??0)+Math.round(D.cachedReadTokens*S)),D.cacheCreationTokens!==void 0&&(v.modelUsage[A].cacheCreationTokens=(v.modelUsage[A].cacheCreationTokens??0)+Math.round(D.cacheCreationTokens*S));let G=y.editorSource;v.editorUsage[G]||(v.editorUsage[G]={tokens:0,sessions:0}),v.editorUsage[G].tokens+=I,v.editorUsage[G].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[G,A]of Object.entries(y.modelUsage))U.modelUsage[G]||(U.modelUsage[G]={inputTokens:0,outputTokens:0}),U.modelUsage[G].inputTokens+=Math.round(A.inputTokens*S),U.modelUsage[G].outputTokens+=Math.round(A.outputTokens*S),A.cachedReadTokens!==void 0&&(U.modelUsage[G].cachedReadTokens=(U.modelUsage[G].cachedReadTokens??0)+Math.round(A.cachedReadTokens*S)),A.cacheCreationTokens!==void 0&&(U.modelUsage[G].cacheCreationTokens=(U.modelUsage[G].cacheCreationTokens??0)+Math.round(A.cacheCreationTokens*S));let ne=y.editorSource;U.editorUsage[ne]||(U.editorUsage[ne]={tokens:0,sessions:0}),U.editorUsage[ne].tokens+=I,U.editorUsage[ne].sessions++}}let p=Array.from(r.keys()).sort(),f=p.map(y=>r.get(y));return{labels:p,days:f,allDaysMap:u}}var Ih=50;function pu(n=Ih){process.stdout.write("\r"+" ".repeat(Math.max(0,n))+"\r")}function ta(n){process.stdout.write(w.dim(n))}var Uh=80,Ne=class{silent;constructor(e=!1){this.silent=e}show(e){this.silent||ta(e)}update(e){this.silent||(process.stdout.write("\r"),ta(e))}done(){this.silent||pu(Uh)}};function ke(n){return n.json===!0}var gu=new ae("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=ke(n);if(e||console.log(w.bold.cyan(`
|
|
73
86
|
\u{1F50D} Copilot Token Tracker - Session Statistics
|
|
74
|
-
`)),n.verbose&&!e){let _=
|
|
75
|
-
`));let o=0,i=0,r=0,
|
|
87
|
+
`)),n.verbose&&!e){let _=ri();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 Ne(e);t.show("Scanning for session files...");let s=await _e();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(J(s.length))} session file(s)
|
|
88
|
+
`));let o=0,i=0,r=0,a=0,u=0,m={},p={};for(let _=0;_<s.length;_++){let C=await ws(s[_]);if(!C||C.tokens===0){u++;continue}if(a++,o+=Xe(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+=Xe(C),m[C.editorSource].interactions+=C.interactions,n.verbose){let S=Oh(s[_]);p[S]||(p[S]={files:0,tokens:0}),p[S].files++,p[S].tokens+=Xe(C)}((_+1)%50===0||_===s.length-1)&&t.update(`Processing: ${_+1}/${s.length}`)}if(t.done(),e){let _={totalFiles:s.length,processedFiles:a,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(J(a))}`),u>0&&console.log(` Empty/skipped files: ${w.dim(J(u))}`),console.log(` Total chat turns: ${w.bold(J(r))}`),console.log(` Total tokens: ${w.bold.yellow(pe(o))}`),i>0&&console.log(` Thinking tokens (included): ${w.dim(pe(i))}`);let f=Yr();f.enabled&&f.entries>0&&console.log(w.dim(` Cache: ${J(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=Fh(_);console.log(` ${S.padEnd(25)} ${J(C.files).padStart(5)} files ${pe(C.tokens).padStart(8)} tokens ${J(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)} ${J(S.files).padStart(5)} files ${pe(S.tokens).padStart(8)} tokens`);_.length>20&&console.log(w.dim(` ... and ${_.length-20} more folders`)),console.log()}});function Fh(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 Oh(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 fu(n=new Date){return{today:{},month:{},lastMonth:{},last30Days:{},lastUpdated:n.toISOString(),backendConfigured:!1}}function li(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 ci(n=new Date){return{today:{},last30Days:{},month:{},lastMonth:{},locale:Intl.DateTimeFormat().resolvedOptions().locale,lastUpdated:n.toISOString(),backendConfigured:!1}}function hu(){return{}}function ui(n){return{today:n.today,month:n.month,lastMonth:n.lastMonth,last30Days:n.last30Days,lastUpdated:n.lastUpdated.toISOString(),backendConfigured:!1}}function di(n,e=new Date){return{...n,locale:Intl.DateTimeFormat().resolvedOptions().locale,lastUpdated:e.toISOString(),backendConfigured:!1}}function mi(n){return{overallStage:n.overallStage,overallLabel:n.overallLabel,categories:n.categories,period:n.period,lastUpdated:n.lastUpdated,backendConfigured:!1}}var yu=new ae("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 Nh(n);if(!e)return;let t=await Lh(e,n);if(ke(n)){process.stdout.write(JSON.stringify(ui(t)));return}console.log(w.bold.cyan(`
|
|
76
89
|
\u{1F4CA} Copilot Token Tracker - Usage Report
|
|
77
|
-
`));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)
|
|
78
|
-
`))});async function
|
|
90
|
+
`));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)jh(o.label,o.emoji,o.stats,n);console.log(w.dim(`Last updated: ${t.lastUpdated.toLocaleString()}
|
|
91
|
+
`))});async function Nh(n){let e=ke(n),t=new Ne(e);t.show("Scanning for session files...");let s=await _e();return t.done(),s.length===0?(e?process.stdout.write("{}"):console.log(w.yellow("\u26A0\uFE0F No session files found.")),null):s}async function Lh(n,e){let t=ke(e),s=new Ne(t);s.show("Calculating token usage...");let o=await Et(n,(i,r)=>{s.update(`Processing: ${i}/${r} files`)});return s.done(),o}function jh(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(J(t.sessions))}`),console.log(` Avg interactions/sess: ${w.bold(t.avgInteractionsPerSession.toFixed(1))}`),console.log(` Total tokens: ${w.bold.yellow(pe(t.tokens))}`),t.thinkingTokens>0&&console.log(` Thinking tokens: ${w.dim(pe(t.thinkingTokens))} (included in total)`),console.log(` Avg tokens/session: ${w.bold(pe(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,u=Wt(i,Yt),m=u==="premium"?w.yellow(" \u2B50"):u==="standard"?w.dim(" \u25CB"):"";console.log(` ${(i+m).padEnd(35)} ${pe(r.inputTokens).padStart(8)} in ${pe(r.outputTokens).padStart(8)} out ${pe(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)} ${J(r.sessions).padStart(5)} sessions ${pe(r.tokens).padStart(8)} tokens`)}console.log()}var _u=new ae("environmental").alias("env").description("Show environmental impact of your Copilot usage (CO2, water, trees)").action(async()=>{console.log(w.bold.cyan(`
|
|
79
92
|
\u{1F30D} Copilot Token Tracker - Environmental Impact
|
|
80
|
-
`));let n=new
|
|
81
|
-
`));for(let i of s)
|
|
82
|
-
`))});function Kc(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 sh(n,e,t){if(console.log(w.bold(`${e} ${n}`)),console.log(w.dim("\u2500".repeat(55))),!t||t.sessions===0){console.log(w.dim(" No activity in this period")),console.log();return}if(console.log(` Tokens used: ${w.bold.yellow(de(t.tokens))}`),console.log(` CO\u2082 emissions: ${w.bold(Kc(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 Qc=["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 oh=new Set(Qc.map(n=>n.toLowerCase()));function G(n){return n.toLocaleString("en-US")}function me(n,e){return Math.max(n,e)}var ih={1:"Stage 1: AI Skeptic",2:"Stage 2: AI Explorer",3:"Stage 3: AI Collaborator",4:"Stage 4: AI Strategist"},Ye={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 rh(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 ah=["explain","fix","tests","doc","generate","optimize","new","newNotebook","search","fixTestFailure","setupTests"],lh=["review","bug","think","compact","pr_comments"];function ch(n){return[...ah.filter(e=>(n[e]??0)>0),...lh.filter(e=>(n[`__slash__${e}`]??0)>0)]}function Yc(n){return Object.keys(n).filter(e=>!oh.has(e.toLowerCase())&&!e.startsWith("__slash__")).length}function uh(n,e,t){return n>0||e>0||t>0}function dh(n,e){return n>0||e>0}function mh(n,e,t){let s=Ye.promptEngineering;return n>=s.stage3MinInteractions&&(e.length>=s.stage3MinSlashCommands||t)}function ph(n,e,t,s){let o=Ye.promptEngineering;return n>=o.stage4MinInteractions&&e&&(t||s.length>=o.stage4MinSlashCommands)}function gh(n,e,t,s,o){let i=Ye.promptEngineering,r=[];return n<2&&r.push("Try asking Copilot a question using the Chat panel"),n<3&&(e||r.push("Try [agent mode](https://code.visualstudio.com/docs/copilot/agents/overview) for multi-file changes"),s.length<i.stage3MinSlashCommands&&r.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")),n<4&&(e||r.push("Try [agent mode](https://code.visualstudio.com/docs/copilot/agents/overview) for autonomous, multi-step coding tasks"),t||r.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"),o===0?r.push("Try the Auto model for cost-sensitive tasks so Copilot can pick the most efficient model for you"):o<.5&&r.push("Use the Auto model more often when you want Copilot to balance quality and cost for you"),s.length<i.stage4MinSlashCommands&&e&&t&&r.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")),r}function fh(n,e,t){if(!n.conversationPatterns)return t;let s=Ye.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=me(t,2)),n.conversationPatterns.avgTurnsPerSession>=s.stage3MinAvgTurns&&(t=me(t,3)),t}function hh(n){let{stage:e,evidence:t,usedSlashCommands:s,hasModelSwitching:o,hasAgentMode:i,autoUsageRatio:r}=kh(n);return{stage:e,evidence:t,tips:gh(e,i,o,s,r)}}function yh(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 bh(n,e,t){let s=n;return e>0&&(s=me(s,2)),e>=.5&&(s=me(s,3)),e>=.8&&t>=5&&(s=4),s}function Ch(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)?me(n,3):n):n}function kh(n){let e=[],t=Ye.promptEngineering;yh(e,n);let s=n.modeUsage.ask+n.modeUsage.edit+n.modeUsage.agent+n.modeUsage.cli,o=fh(n,e,1);s>=t.stage2MinInteractions&&(o=2);let i=ch(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=dh(n.modeUsage.agent,n.modeUsage.cli),u=n.modelSwitching.totalSessions>0?n.modelSwitching.autoSessions/n.modelSwitching.totalSessions:0;return _h(e,n,u),mh(s,i,l)&&(o=3),ph(s,l,r,i)&&(o=4),o=bh(o,u,n.sessions),o=Ch(o,r,n,e),{stage:o,evidence:e,usedSlashCommands:i,hasModelSwitching:r,hasAgentMode:l,autoUsageRatio:u}}function Sh(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 wh(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 Th(n,e,t){let s=Ye.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`),Sh(m,u)}return wh(r,"[specialized context variables](https://code.visualstudio.com/docs/copilot/chat/copilot-chat#_add-context-to-your-prompts)")}function Mh(n,e,t){e>0&&n.push(`${G(e)} ${t}`)}function Ph(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)Mh(e,s,o);return e}function vh(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 Ah(n,e,t){let s=n.byKind["copilot.image"]||0;return s>0&&(e.push(`${G(s)} image references (vision)`),t=me(t,3)),(n.byKind.promptFile||0)>0&&(t=me(t,3)),t}function xh(n){let e=1,t=Ye.contextEngineering,s=n.contextReferences,o=s.file+s.selection+s.symbol+s.codebase+s.workspace,i=vh(s),r=Ph(s);o>=t.stage2MinTotalRefs&&(e=2),i>=t.stage3MinRefTypes&&o>=t.stage3MinTotalRefs&&(e=3),i>=t.stage4MinRefTypes&&o>=t.stage4MinTotalRefs&&(e=4),e=Ah(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=Th(s,i,o);u&&l.push(u)}return{stage:e,evidence:r,tips:l}}function Dh(n,e,t){return n>=t.stage3MinAgentInteractions&&e>=t.stage3MinNonAutoTools}function Eh(n,e,t){return n>=t.stage4MinAgentInteractions&&e>=t.stage4MinNonAutoTools}function Rh(n,e){return!!n&&n.multiFileEdits>=e.stage4MinMultiFileEdits&&n.avgFilesPerSession>=e.stage3MinAvgFilesPerSession}function Ih(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=me(t,3),n>=e.stage4MinMultiAgentParents&&(t=me(t,4)),t}function Uh(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"),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"),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 Fh(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=me(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 Oh(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=me(o,2)),e.editScope.avgFilesPerSession>=s.stage3MinAvgFilesPerSession&&(n.push(`Avg ${e.editScope.avgFilesPerSession.toFixed(1)} files per edit session`),o=me(o,3)),o}function Nh(n,e,t,s){let o=n;e.agentTypes?.editsAgent&&(s.push(`${G(e.agentTypes.editsAgent)} edits agent sessions`),o=me(o,2));let i=Yc(e.toolCalls.byTool),r=e.modeUsage.agent+e.modeUsage.cli;return Dh(r,i,t)&&(o=3),Eh(r,i,t)&&(o=4),Rh(e.editScope,t)&&(o=me(o,4)),o=Ih(e.multiAgentParentSessions??0,t,o,s),o}function Lh(n){let e=[],t=1,s=Ye.agentic;return t=Fh(e,n,t),t=Oh(e,n,t,s),t=Nh(t,n,s,e),{stage:t,evidence:e,tips:Uh(t)}}function Gh(n,e){let t=[];return n<2&&t.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"),n<3&&(e.length===0?t.push("Set up [MCP servers](https://code.visualstudio.com/docs/copilot/customization/mcp-servers) to connect Copilot to external tools (databases, APIs, cloud services)"):t.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?t.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"):e.length===0?t.push("Explore the [VS Code MCP registry](https://code.visualstudio.com/docs/copilot/customization/mcp-servers) for tools that integrate with your workflow"):t.push("You're using multiple MCP servers - keep exploring advanced tool combinations")),t}function jh(n,e,t){let s=Object.keys(e.toolCalls.byTool).length,o=Yc(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 Bh(n,e,t){return e.agentTypes?.workspaceAgent>0?(n.push(`${G(e.agentTypes.workspaceAgent)} @workspace agent sessions`),me(t,3)):t}function qh(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=me(r,3))),r}function $h(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=me(i,3),o.length>=s.stage4MinMcpServers&&(i=4)),{stage:i,mcpServers:o}}function zh(n){let e=[],t=1,s=Ye.toolUsage;t=jh(e,n,t),t=Bh(e,n,t),t=qh(e,n,t,s);let{stage:o,mcpServers:i}=$h(e,n,t,s);return{stage:o,evidence:e,tips:Gh(o,i)}}function Wh(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(`
|
|
93
|
+
`));let n=new Ne;n.show("Scanning for session files...");let e=await _e();if(n.done(),e.length===0){console.log(w.yellow("\u26A0\uFE0F No session files found."));return}n.show("Calculating usage...");let t=await Et(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: ${Oe.CO2_PER_1K_TOKENS} gCO\u2082e per 1K tokens`)),console.log(w.dim(` Water: ${Oe.WATER_USAGE_PER_1K_TOKENS} L per 1K tokens`)),console.log(w.dim(` Tree absorption: ${bu(Oe.CO2_ABSORPTION_PER_TREE_PER_YEAR)} CO\u2082/year
|
|
94
|
+
`));for(let i of s)Gh(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/Oe.CO2_PER_KM_DRIVING;console.log(` \u{1F697} Equivalent to driving: ${a.toFixed(3)} km`);let u=i/Oe.CO2_PER_PHONE_CHARGE;console.log(` \u{1F4F1} Smartphone charges: ${u.toFixed(1)}`);let m=r/Oe.WATER_PER_COFFEE_CUP;console.log(` \u2615 Cups of coffee (water): ${m.toFixed(4)}`);let p=i/Oe.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()}
|
|
95
|
+
`))});function bu(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 Gh(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(pe(t.tokens))}`),console.log(` CO\u2082 emissions: ${w.bold(bu(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 Cu=["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 qh=new Set(Cu.map(n=>n.toLowerCase()));function j(n){return n.toLocaleString("en-US")}function ge(n,e){return Math.max(n,e)}var zh={1:"Stage 1: AI Skeptic",2:"Stage 2: AI Explorer",3:"Stage 3: AI Collaborator",4:"Stage 4: AI Strategist"},Ze={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 $h(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 Wh=["explain","fix","tests","doc","generate","optimize","new","newNotebook","search","fixTestFailure","setupTests"],Hh=["review","bug","think","compact","pr_comments"];function Jh(n){return[...Wh.filter(e=>(n[e]??0)>0),...Hh.filter(e=>(n[`__slash__${e}`]??0)>0)]}function Su(n){return Object.keys(n).filter(e=>!qh.has(e.toLowerCase())&&!e.startsWith("__slash__")).length}function Vh(n,e,t){return n>0||e>0||t>0}function Kh(n,e){return n>0||e>0}function Qh(n,e,t){let s=Ze.promptEngineering;return n>=s.stage3MinInteractions&&(e.length>=s.stage3MinSlashCommands||t)}function Yh(n,e,t,s){let o=Ze.promptEngineering;return n>=o.stage4MinInteractions&&e&&(t||s.length>=o.stage4MinSlashCommands)}function Xh(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 Zh(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 ey(n,e,t,s,o){let i=Ze.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(...Xh(e,s,i)),n<4&&r.push(...Zh(e,t,s,o,i)),r}function ty(n,e,t){if(!n.conversationPatterns)return t;let s=Ze.promptEngineering,o=Math.round(n.conversationPatterns.multiTurnSessions/Math.max(1,n.sessions)*100);return n.conversationPatterns.multiTurnSessions>0&&e.push(`${j(n.conversationPatterns.multiTurnSessions)} multi-turn sessions (${o}%)`),n.conversationPatterns.avgTurnsPerSession>=s.stage2MinAvgTurns&&(e.push(`Avg ${n.conversationPatterns.avgTurnsPerSession.toFixed(1)} exchanges per session`),t=ge(t,2)),n.conversationPatterns.avgTurnsPerSession>=s.stage3MinAvgTurns&&(t=ge(t,3)),t}function sy(n){let{stage:e,evidence:t,usedSlashCommands:s,hasModelSwitching:o,hasAgentMode:i,autoUsageRatio:r}=ay(n);return{stage:e,evidence:t,tips:ey(e,i,o,s,r)}}function ny(n,e){let t=e.modeUsage.ask+e.modeUsage.edit+e.modeUsage.agent+e.modeUsage.cli;t>0&&n.push(`${j(t)} total interactions`),e.modeUsage.ask>0&&n.push(`${j(e.modeUsage.ask)} ask-mode conversations`),e.modeUsage.agent>0&&n.push(`${j(e.modeUsage.agent)} agent-mode interactions`),e.modeUsage.cli>0&&n.push(`${j(e.modeUsage.cli)} CLI interactions`)}function oy(n,e,t){e.modelSwitching.autoSessions>0&&n.push(`Auto model used in ${j(e.modelSwitching.autoSessions)} session${e.modelSwitching.autoSessions===1?"":"s"} (${Math.round(t*100)}%)`)}function iy(n,e,t){let s=n;return e>0&&(s=ge(s,2)),e>=.5&&(s=ge(s,3)),e>=.8&&t>=5&&(s=4),s}function ry(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)?ge(n,3):n):n}function ay(n){let e=[],t=Ze.promptEngineering;ny(e,n);let s=n.modeUsage.ask+n.modeUsage.edit+n.modeUsage.agent+n.modeUsage.cli,o=ty(n,e,1);s>=t.stage2MinInteractions&&(o=2);let i=Jh(n.toolCalls.byTool);i.length>0&&e.push(`Used slash commands: /${i.join(", /")}`);let r=Vh(n.modelSwitching.mixedTierSessions,n.modelSwitching.mixedCostSessions,n.modelSwitching.switchingFrequency),a=Kh(n.modeUsage.agent,n.modeUsage.cli),u=n.modelSwitching.totalSessions>0?n.modelSwitching.autoSessions/n.modelSwitching.totalSessions:0;return oy(e,n,u),Qh(s,i,a)&&(o=3),Yh(s,a,r,i)&&(o=4),o=iy(o,u,n.sessions),o=ry(o,r,n,e),{stage:o,evidence:e,usedSlashCommands:i,hasModelSwitching:r,hasAgentMode:a,autoUsageRatio:u}}function ly(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 cy(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 uy(n,e,t){let s=Ze.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(`${j(e)} of ${s.stage4MinRefTypes} different reference types used`),i>0&&m.push(`${j(t)} of ${s.stage4MinTotalRefs} total references`),ly(m,u)}return cy(r,"[specialized context variables](https://code.visualstudio.com/docs/copilot/chat/copilot-chat#_add-context-to-your-prompts)")}function dy(n,e,t){e>0&&n.push(`${j(e)} ${t}`)}function my(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)dy(e,s,o);return e}function py(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 gy(n,e,t){let s=n.byKind["copilot.image"]||0;return s>0&&(e.push(`${j(s)} image references (vision)`),t=ge(t,3)),(n.byKind.promptFile||0)>0&&(t=ge(t,3)),t}function fy(n){let e=1,t=Ze.contextEngineering,s=n.contextReferences,o=s.file+s.selection+s.symbol+s.codebase+s.workspace,i=py(s),r=my(s);o>=t.stage2MinTotalRefs&&(e=2),i>=t.stage3MinRefTypes&&o>=t.stage3MinTotalRefs&&(e=3),i>=t.stage4MinRefTypes&&o>=t.stage4MinTotalRefs&&(e=4),e=gy(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 u=uy(s,i,o);u&&a.push(u)}return{stage:e,evidence:r,tips:a}}function hy(n,e,t){return n>=t.stage3MinAgentInteractions&&e>=t.stage3MinNonAutoTools}function yy(n,e,t){return n>=t.stage4MinAgentInteractions&&e>=t.stage4MinNonAutoTools}function _y(n,e){return!!n&&n.multiFileEdits>=e.stage4MinMultiFileEdits&&n.avgFilesPerSession>=e.stage3MinAvgFilesPerSession}function by(n,e,t,s){if(n<e.stage3MinMultiAgentParents)return t;let o=n===1?"1 session":`${j(n)} sessions`;return s.push(`${o} with child workspaces (multi-agent orchestration)`),t=ge(t,3),n>=e.stage4MinMultiAgentParents&&(t=ge(t,4)),t}function Cy(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 ky(n,e,t){let s=t;return e.modeUsage.agent>0&&(n.push(`${j(e.modeUsage.agent)} agent-mode interactions`),s=2),e.modeUsage.cli>0&&(n.push(`${j(e.modeUsage.cli)} CLI interactions`),s=ge(s,2)),e.toolCalls.total>0&&n.push(`${j(e.toolCalls.total)} tool calls executed`),e.modeUsage.edit>0&&n.push(`${j(e.modeUsage.edit)} edit-mode interactions`),s}function Sy(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(`${j(e.editScope.multiFileEdits)} multi-file edit sessions (${r}%)`),o=ge(o,2)),e.editScope.avgFilesPerSession>=s.stage3MinAvgFilesPerSession&&(n.push(`Avg ${e.editScope.avgFilesPerSession.toFixed(1)} files per edit session`),o=ge(o,3)),o}function wy(n,e,t,s){let o=n;e.agentTypes?.editsAgent&&(s.push(`${j(e.agentTypes.editsAgent)} edits agent sessions`),o=ge(o,2));let i=Su(e.toolCalls.byTool),r=e.modeUsage.agent+e.modeUsage.cli;return hy(r,i,t)&&(o=3),yy(r,i,t)&&(o=4),_y(e.editScope,t)&&(o=ge(o,4)),o=by(e.multiAgentParentSessions??0,t,o,s),o}function Ty(n){let e=[],t=1,s=Ze.agentic;return t=ky(e,n,t),t=Sy(e,n,t,s),t=wy(t,n,s,e),{stage:t,evidence:e,tips:Cy(t)}}function ku(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 My(n,e,t){let s=Object.keys(e.toolCalls.byTool).length,o=Su(e.toolCalls.byTool),i=t;if(o>0){let r=s-o,a=r>0?` (+ ${j(r)} automatic)`:"";n.push(`${j(o)} intentional tools used${a}`),i=2}else s>0&&n.push(`${j(s)} tools used (all automatic \u2014 agent reads/searches)`);return i}function Py(n,e,t){return e.agentTypes?.workspaceAgent>0?(n.push(`${j(e.agentTypes.workspaceAgent)} @workspace agent sessions`),ge(t,3)):t}function vy(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=ge(r,3))),r}function Ay(n,e,t,s){let o=Object.keys(e.mcpTools.byServer),i=t;return e.mcpTools.total>0&&(n.push(`${j(e.mcpTools.total)} MCP tool calls across ${o.length} server(s)`),i=ge(i,3),o.length>=s.stage4MinMcpServers&&(i=4)),{stage:i,mcpServers:o}}function xy(n,e){let t=[],s=1,o=Ze.toolUsage;s=My(t,n,s),s=Py(t,n,s),s=vy(t,n,s,o);let i=e===!1;if(!i){let{stage:r,mcpServers:a}=Ay(t,n,s,o);return s=r,{stage:s,evidence:t,tips:ku(s,a)}}return{stage:s,evidence:t,tips:ku(s,[],i)}}function Dy(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=`${j(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(u=>u==="\u274C")).filter(a=>!a.workspacePath.startsWith("<unresolved:")).sort((a,u)=>u.interactionCount!==a.interactionCount?u.interactionCount-a.interactionCount:u.sessionCount-a.sessionCount).slice(0,3);if(i.length===0)return o;let r=i.map(a=>`${a.workspaceName} (${j(a.interactionCount)} interaction${a.interactionCount===1?"":"s"})`).join(`
|
|
83
96
|
`);return`${o}
|
|
84
97
|
|
|
85
98
|
Top repos to customize first:
|
|
86
|
-
${r}`}function
|
|
99
|
+
${r}`}function Ey(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=ge(o,3)),t>=s.stage4MinUniqueModels&&e>=s.stage4MinCustomizedRepos&&(o=4),o}function Ry(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(`${j(t)} of ${j(e)} repos have customization \u2014 add [instructions and agents.md](https://code.visualstudio.com/docs/copilot/customization/custom-instructions) to the remaining ${j(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 Iy(n){return[...new Set([...n.modelSwitching.standardModels,...n.modelSwitching.premiumModels,...n.modelSwitching.lowCostModels,...n.modelSwitching.mediumCostModels,...n.modelSwitching.highCostModels])]}function Uy(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 Fy(n,e,t){let s=n;return e.modelSwitching.foundryWindowsSessions>0&&(s=ge(s,2),t.push(`Used Microsoft Foundry / local models in ${j(e.modelSwitching.foundryWindowsSessions)} session${e.modelSwitching.foundryWindowsSessions===1?"":"s"}`)),e.modelSwitching.unknownProviderSessions>0&&(s=ge(s,2),t.push(`Used models from unknown providers in ${j(e.modelSwitching.unknownProviderSessions)} session${e.modelSwitching.unknownProviderSessions===1?"":"s"}`)),s}function Oy(n,e,t,s,o){e>=4?n.push(`${j(t)} of ${j(s)} repos customized (${o.stage4MinCustomizationRate*100}%+ with ${o.stage4MinCustomizedRepos}+ repos \u2192 Stage 4)`):e>=3?n.push(`${j(t)} of ${j(s)} repos customized (${o.stage3MinCustomizationRate*100}%+ with ${o.stage3MinCustomizedRepos}+ repos \u2192 Stage 3)`):t>0&&n.push(`${j(t)} of ${j(s)} repos with custom instructions or agents.md`)}function Ny(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(Dy(o,i,r)),a}function Ly(n,e){let t=[],s=Ze.customization,o=e,i=o?.totalWorkspaces??0,r=i-(o?.workspacesWithIssues??0),a=i>0?r/i:0,u=Iy(n),m=Ey(a,r,u.length,s);Uy(t,i,u,s),m=Fy(m,n,t),Oy(t,m,r,i,s);let p=Ry(m,i,r);return p=Ny(p,m,n,u,o,i,r),{stage:m,evidence:t,tips:p}}function jy(n,e,t,s){return n>=s.stage4MinSessions&&e>=s.stage3MinModesUsed&&t>=s.stage3MinContextRefs}function Gy(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 By(n){return n.contextReferences.file+n.contextReferences.selection+n.contextReferences.symbol+n.contextReferences.codebase+n.contextReferences.workspace}function qy(n){return[n.modeUsage.ask>0,n.modeUsage.agent>0,n.modeUsage.cli>0].filter(Boolean).length}function zy(n,e,t,s){return e.sessions>=s.stage2MinSessions?(n.push(`${j(e.sessions)} sessions in the last 30 days`),2):t}function $y(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 (${j(e.applyUsage.totalApplies)}/${j(e.applyUsage.totalCodeBlocks)})`),o>=s.stage2MinApplyRatePct?ge(t,2):t}function Wy(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 Hy(n,e,t,s,o){let i=e;return t>=o.stage3MinModesUsed&&(n.push(`Uses ${t} modes (ask/agent/cli)`),i=ge(i,3)),s>=o.hasExplicitContextMinRefs&&(n.push(`${j(s)} explicit context references`),s>=o.stage3MinContextRefs&&(i=ge(i,3))),i}function Jy(n,e,t,s,o,i){return jy(e.sessions,t,s,o)?(i.push("Deep integration: regular usage with multi-mode and explicit context"),4):n}function Vy(n){let e=[],t=1,s=Ze.workflowIntegration;t=zy(e,n,t,s),t=$y(e,n,t,s),Wy(e,n);let o=By(n),i=qy(n);return t=Hy(e,t,i,o,s),t=Jy(t,n,i,o,s,e),{stage:t,evidence:e,tips:Gy(t,i,o,s)}}async function pi(n,e,t=!0,s){let o=await e(t),i=o.last30Days,r=sy(i),a=fy(i),u=Ty(i),m=xy(i,s),p=Ly(i,n),f=Vy(i),y=$h([r.stage,a.stage,u.stage,m.stage,p.stage,f.stage]);return{overallStage:y,overallLabel:zh[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:a.stage,evidence:a.evidence,tips:a.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 wu=new ae("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=ke(n);e||console.log(w.bold.cyan(`
|
|
87
100
|
\u{1F3AF} Copilot Token Tracker - Fluency Score
|
|
88
|
-
`));let t=new
|
|
89
|
-
`))});function
|
|
101
|
+
`));let t=new Ne(e);t.show("Scanning for session files...");let s=await _e();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 Rt(s);t.done();let i=await ii(s),r=await pi(i,async()=>o,!1);if(e){process.stdout.write(JSON.stringify(mi(r)));return}let a={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=a[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=a[_.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(J(p.sessions))}`);let f=p.modeUsage.ask+p.modeUsage.edit+p.modeUsage.agent+p.modeUsage.cli;console.log(` Total interactions: ${w.bold(J(f))}`),p.modeUsage.ask>0&&console.log(` Ask mode: ${J(p.modeUsage.ask)}`),p.modeUsage.edit>0&&console.log(` Edit mode: ${J(p.modeUsage.edit)}`),p.modeUsage.agent>0&&console.log(` Agent mode: ${J(p.modeUsage.agent)}`),p.modeUsage.cli>0&&console.log(` CLI: ${J(p.modeUsage.cli)}`),p.toolCalls.total>0&&console.log(` Tool calls: ${J(p.toolCalls.total)}`),p.mcpTools.total>0&&console.log(` MCP tool calls: ${J(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: ${J(y)}`),console.log(),console.log(w.dim(`Last updated: ${r.lastUpdated}
|
|
102
|
+
`))});function Ky(n,e){let t=oo(n),s=t.includes("opencode.db#")?t.split("#")[0]:t,o=null,i=0;for(let r of e){let a=oo(r.path);s.startsWith(a)&&a.length>i&&(o={path:r.path,source:r.source},i=a.length)}return o}function sa(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 Tu(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,u)=>{let m=a.padEnd(t[u]);return u===0?w.dim(m):m}).join(w.dim(" \u2502 "));console.log(" "+r)}console.log(" "+s)}var Mu=new ae("diagnostics").description("Show session file search locations and per-location usage stats").action(async()=>{console.log(w.bold.cyan(`
|
|
90
103
|
\u{1F52C} Copilot Token Tracker - Diagnostics
|
|
91
|
-
`));let n=
|
|
104
|
+
`));let n=ri(),e=n.filter(v=>v.exists),t=n.filter(v=>!v.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(v=>[v.source,v.exists?w.green("yes"):w.dim("no"),sa(v.path,55)]);if(Tu(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 Ne;r.show("Scanning for session files...");let a=await _e();if(r.done(),a.length===0){console.log(w.yellow("\u26A0\uFE0F No session files found in any search path."));return}let u=new Map;for(let v of e)u.set(v.path,{label:sa(v.path,45),source:v.source,files:0,sessions:0,interactions:0,tokens:0});let m=0,p=0,f=0,y=0;for(let v=0;v<a.length;v++){((v+1)%25===0||v===a.length-1)&&r.update(`Processing: ${v+1}/${a.length} files...`);let U=Ky(a[v],n),ne=U?U.path:"__unknown__";u.has(ne)||u.set(ne,{label:U?sa(U.path,45):"(unknown)",source:U?U.source:"unknown",files:0,sessions:0,interactions:0,tokens:0});let G=u.get(ne);G.files++,m++;let A=await ws(a[v]);A&&A.tokens>0&&(G.sessions++,G.interactions+=A.interactions,G.tokens+=Xe(A),p++,f+=A.interactions,y+=Xe(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(v=>v.files>0).sort((v,U)=>U.tokens-v.tokens||v.source.localeCompare(U.source));for(let v of I)S.push([v.source,J(v.files),J(v.sessions),J(v.interactions),pe(v.tokens)]);S.length===0?console.log(w.dim(" No session data found in any location.")):Tu(_,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(J(m))}`),console.log(` Files with data: ${w.bold(J(p))}`),console.log(` Total chat turns: ${w.bold(J(f))}`),console.log(` Total tokens: ${w.bold.yellow(pe(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 ae("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 _e();if(e.length===0){ke(n)?process.stdout.write(JSON.stringify(li())):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=Dn(s,o,i);if(ke(n)){process.stdout.write(JSON.stringify(r));return}console.log(w.bold.cyan(`
|
|
92
105
|
\u{1F4CA} Token Usage Summary
|
|
93
|
-
`));let
|
|
94
|
-
`);return}let e=await
|
|
95
|
-
`)}return i?i.replace(/^["']|["']$/g,""):void 0}}function
|
|
96
|
-
`);return}let
|
|
97
|
-
Tool Curation Report (last ${
|
|
106
|
+
`));let a=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=a[m];if(!f)continue;console.log(w.bold(p)),console.log(w.dim("\u2500".repeat(60)));let y=(f.labels||[]).map((U,ne)=>{let G=f.tokensData?.[ne]??0,A=f.costData?.[ne]??0;return{Period:U,Tokens:J(G),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,v=S>0?C/S:0;console.log(w.bold("Totals:")),console.log(` Total Tokens: ${J(_)}`),console.log(` Total Cost: $${C.toFixed(2)}`),console.log(` Avg per Period: ${J(I)} tokens, $${v.toFixed(2)} cost`),console.log()}});var vu=new ae("usage-analysis").description("Output usage analysis stats for the usage analysis webview").option("--json","Output raw JSON (for machine consumption)").action(async n=>{if(!ke(n)){process.stderr.write(`Use --json flag for usage analysis data output
|
|
107
|
+
`);return}let e=await _e(),t=new Date;if(e.length===0){process.stdout.write(JSON.stringify(ci(t)));return}let s=await Rt(e),o=di(s,t);process.stdout.write(JSON.stringify(o))});var Pe=P(require("fs")),$=P(require("path")),xu=require("url");var Qy=4,Du=1;function Yy(n){try{if(!Pe.existsSync(n))return[];let e=Pe.readFileSync(n,"utf-8"),s=JSON.parse(e)?.servers;return!s||typeof s!="object"?[]:Object.keys(s)}catch{return[]}}function Xy(n){return[$.join(n,".vscode","mcp.json"),$.join(n,".mcp.json"),$.join(n,".vs","mcp.json"),$.join(n,".cursor","mcp.json")]}function Zy(){let n=process.env.USERPROFILE??process.env.HOME??"";return n?[$.join(n,".mcp.json")]:[]}function fi(n){let e=[],t=new Map,s=new Set,o=[...n.flatMap(Xy),...Zy()];for(let i of o)for(let r of Yy(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 e_(n,e){try{let t=Pe.readFileSync(n,"utf-8"),s=t_(t);if(s)return s}catch{}return e}function t_(n){let e=s_(n);if(e!==void 0){let o=o_(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 s_(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 n_(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 o_(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=n_(e,t+1,o);return a.length===0?void 0:r[1]===">"?a.join(" "):a.join(`
|
|
108
|
+
`)}return i?i.replace(/^["']|["']$/g,""):void 0}}function na(n){try{if(!Pe.existsSync(n))return;let e=Pe.readFileSync(n,"utf-8");return JSON.parse(e)}catch{return}}function gi(n,e,t,s){let o;try{o=Pe.readdirSync(e,{withFileTypes:!0})}catch{return[]}let i=[];for(let r of o){if(!r.isDirectory())continue;let a=$.join(e,r.name,"SKILL.md");if(!Pe.existsSync(a)||t.has(a))continue;t.add(a);let u=e_(a,`Skill: ${r.name}`),m=$.relative(n,a).replace(/\\/g,"/"),p={name:r.name,description:u,source:"skill",skillPath:m,configFiles:[a]};s&&(p.pluginName=s),i.push(p)}return i}var i_=new Set([".git","node_modules","dist","out","build",".next",".venv","venv","target",".idea",".vscode"]),r_=4,a_=400;function l_(n,e=r_){let t=[],s=new Set,o=0,i=(r,a)=>{if(a>e||s.has(r)||o>=a_)return;s.add(r),o++;let u;try{u=Pe.readdirSync(r,{withFileTypes:!0})}catch{return}for(let m of u){if(!m.isDirectory()||i_.has(m.name))continue;let p=$.join(r,m.name);if(m.name==="skills"){t.push(p);continue}i(p,a+1)}};return i(n,0),t}function Au(n,e,t){if(!Pe.existsSync(e))return[];let s=[];s.push(...gi(n,e,t));for(let o of l_(e))s.push(...gi(n,o,t));return s}function Eu(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 c_(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 u_(n){let e=new Set;for(let t of c_(n)){let o=na(t)?.["chat.agentSkillsLocations"];if(Array.isArray(o))for(let i of o){if(typeof i!="string")continue;let r=Eu(i,n);r&&e.add(r)}}return[...e]}var d_=[".github/skills",".claude/skills",".agents/skills"];function m_(){let n=process.env.USERPROFILE??process.env.HOME??"";return n?[$.join(n,".copilot","skills"),$.join(n,".claude","skills"),$.join(n,".agents","skills")]:[]}function p_(n){try{let e=new URL(n);return e.protocol!=="file:"?void 0:$.normalize((0,xu.fileURLToPath)(e))}catch{return}}function g_(n){let e=na($.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=>Pe.existsSync(s))}function f_(n){let e=na($.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=p_(i);if(!r||!Pe.existsSync(r))continue;let a=typeof o.name=="string"&&o.name?o.name:$.basename(r);for(let u of g_(r))t.push({dir:u,pluginName:a})}return t}function h_(){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(...f_(s));return t}function hi(n,e){let t=[],s=new Set;for(let a of n)for(let u of d_){let m=$.join(a,...u.split("/"));Pe.existsSync(m)&&t.push(...gi(a,m,s))}let o=process.env.USERPROFILE??process.env.HOME??"";for(let a of m_())t.push(...Au(o,a,s));for(let{dir:a,pluginName:u}of h_())t.push(...gi(o,a,s,u));let i=Array.isArray(e?.additionalSkillDirs)?e.additionalSkillDirs:[],r=[...u_(o),...i.filter(a=>typeof a=="string").map(a=>Eu(a,o)).filter(Boolean)];for(let a of r)t.push(...Au(o,a,s));return t}function Ru(n){return Math.round(n.reduce((e,t)=>e+(t.name.length+t.description.length+10),0)/Qy)}function y_(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 __(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)>=Du:e.has(y.name)),a=[...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:a.length>0?a:void 0,extensionId:m,enabled:p,extensionActive:f}}).filter(o=>o.enabled!==!1)}function b_(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]=Ru(o);return{totalTokens:Object.values(t).reduce((s,o)=>s+o,0),byServer:t}}function C_(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:Ru(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 k_(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 yi(n,e,t){let s=y_(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)<Du:!i.has(f.name):!i.has(f.name)),a=__(n,i,e),u=k_(n,i),m=b_(r),p=C_(a,r,t);return{windowDays:t,availableTools:n,usedTools:o,unusedTools:r,underusedMcpServers:a,underusedAgentPlugins:u,estimatedPromptBloat:m,recommendations:p}}var Rn=30,Iu=new ae("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: ${Rn})`,String(Rn)).action(async n=>{let e=Math.max(1,parseInt(n.window??String(Rn),10)||Rn),t=process.cwd(),s=await _e(),i=(s.length>0?await Rt(s):null)?.last30Days,r=[t],a=fi(r),u=hi(r),m=[...a,...u];if(m.length===0&&!i){ke(n)?process.stdout.write(JSON.stringify(_i(e))):process.stderr.write(`No MCP servers or skills found in the current directory, and no session data available.
|
|
109
|
+
`);return}let p=yi(m,i??Qt(),e);ke(n)?process.stdout.write(JSON.stringify(p)):S_(p)});function _i(n=Rn){return{windowDays:n,availableTools:[],usedTools:[],unusedTools:[],underusedMcpServers:[],underusedAgentPlugins:[],estimatedPromptBloat:{totalTokens:0,byServer:{}},recommendations:[]}}function S_(n){let{availableTools:e,usedTools:t,unusedTools:s,underusedMcpServers:o,estimatedPromptBloat:i,recommendations:r,windowDays:a}=n;if(process.stdout.write(`
|
|
110
|
+
Tool Curation Report (last ${a} days)
|
|
98
111
|
`),process.stdout.write("=".repeat(50)+`
|
|
99
112
|
|
|
100
113
|
`),process.stdout.write(`Available tools: ${e.length}
|
|
@@ -111,8 +124,8 @@ Tool Curation Report (last ${l} days)
|
|
|
111
124
|
`)}if(r.length>0){process.stdout.write(`Recommendations:
|
|
112
125
|
`);for(let m of r){let p=m.estimatedTokenSavings?` (saves ~${m.estimatedTokenSavings.toLocaleString()} tokens/interaction)`:"";process.stdout.write(` \u2192 ${m.reason}${p}
|
|
113
126
|
`)}process.stdout.write(`
|
|
114
|
-
`)}if(t.length>0){process.stdout.write(`Top Used Tools (last ${
|
|
127
|
+
`)}if(t.length>0){process.stdout.write(`Top Used Tools (last ${a}d):
|
|
115
128
|
`);for(let m of t.slice(0,10))process.stdout.write(` ${String(m.count).padStart(5)}x ${m.name}
|
|
116
129
|
`);process.stdout.write(`
|
|
117
|
-
`)}}var
|
|
118
|
-
`);return}let e=new Date,t=await
|
|
130
|
+
`)}}var Uu=new ae("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(!ke(n)){process.stderr.write(`Use --json flag for all data output
|
|
131
|
+
`);return}let e=new Date,t=await _e();if(t.length===0){let G={details:fu(e),chart:li(e),usage:ci(e),fluency:hu(),curation:_i()};process.stdout.write(JSON.stringify(G));return}let[s,{labels:o,days:i,allDaysMap:r},a]=await Promise.all([Et(t),ai(t),Rt(t)]),u=Dn(o,i,r),m=ui(s),p=di(a,e),f=await ii(t),y=await pi(f,async()=>a,!1),_=mi(y),C=process.cwd(),S=fi([C]),I=hi([C]),v=[...S,...I],U=v.length>0?yi(v,a.last30Days,30):_i(),ne={details:m,chart:u,usage:p,fluency:_,curation:U};process.stdout.write(JSON.stringify(ne))});var It=P(require("fs")),ra=P(require("path")),Ou=P(require("os"));var Nu=ra.join(Ou.homedir(),".copilot-token-tracker"),ia=ra.join(Nu,"omp-segment-cache.json"),oa=5;function w_(n){try{if(!It.existsSync(ia))return null;let e=JSON.parse(It.readFileSync(ia,"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 Fu(n){try{It.mkdirSync(Nu,{recursive:!0}),It.writeFileSync(ia,JSON.stringify(n),"utf-8")}catch{}}var Lu=new ae("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: ${oa})`,`${oa}`).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:oa;if(!n.refresh){let u=w_(t);if(u){if(n.hideZero&&u.todayTokens===0&&u.last30DaysTokens===0)return;process.stdout.write(u.formatted);return}}let s=await _e(),o=0,i=0,r=0;if(s.length>0){let u=await Et(s);o=u.today.tokens,i=u.month.tokens,r=u.last30Days.tokens}if(n.hideZero&&o===0&&r===0){Fu({updatedAt:new Date().toISOString(),formatted:"",todayTokens:o,thisMonthTokens:i,last30DaysTokens:r});return}let a=`${pe(o)} today \xB7 ${pe(i)} month \xB7 ${pe(r)} 30d`;Fu({updatedAt:new Date().toISOString(),formatted:a,todayTokens:o,thisMonthTokens:i,last30DaysTokens:r}),process.stdout.write(a)});var M_=ju(),ve=new ae;ve.name("copilot-token-tracker").description("Analyze GitHub Copilot token usage from local session files").version(M_.version).option("--no-cache","Bypass the session file cache and re-parse everything");ve.hook("preAction",()=>{ve.opts().cache===!1?Jr():Vr()});ve.hook("postAction",()=>{Kr()});ve.addCommand(gu);ve.addCommand(yu);ve.addCommand(_u);ve.addCommand(wu);ve.addCommand(Mu);ve.addCommand(Pu);ve.addCommand(vu);ve.addCommand(Uu);ve.addCommand(Lu);ve.addCommand(Iu);ve.parse();
|