docuvia 1.15.0 → 1.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -146,7 +146,7 @@ ${n}
146
146
  `).length-1,i=r.lastIndexOf(`
147
147
  `);return{line:n,column:e-i-1}}function VP(t){if(t.length<2)return{interpolated:!1};let e=t[0];if((e==="'"||e==='"')&&t.at(-1)===e)return{literalPrefix:t.slice(1,-1),interpolated:!1};if(e!=="`"||t.at(-1)!=="`")return{interpolated:!1};let r=t.slice(1,-1),n=r.indexOf("${");if(n<0)return{literalPrefix:r,interpolated:!1};let i=r.lastIndexOf("}");return{literalPrefix:r.slice(0,n),literalSuffix:i>=n?r.slice(i+1):void 0,interpolated:!0}}function zP(t,e){return!t.startsWith("import",e)||h_(t[e-1])?!1:!h_(t[e+6])}function JP(t,e){if(!zP(t,e))return;let r=e+6;for(;/\s/.test(t[r]??"");)r++;if(t[r]!=="(")return;let n=WP(t,r);if(n===void 0)return;let i=t.slice(r+1,n),s=i.length-i.trimStart().length,o=i.trim();if(o.length===0)return;let a=r+1+s,l=jP(t,a);return{item:{expression:o,startLine:l.line,startColumn:l.column,...VP(o)},nextIndex:n+1}}function qP(t){let e=[],r=0;for(;r<t.length;){let n=__(t,r);if(n!==void 0){r=n;continue}let i=JP(t,r);if(i){e.push(i.item),r=i.nextIndex;continue}r++}return e}function Cn(t){return t.replaceAll("\\","/")}function QP(t){let e=Nn.posix.extname(t);return E_.has(e)?t.slice(0,-e.length):t}function XP(t){let e=QP(t),r=BP[Nn.posix.extname(t)];return r?[e,`${e}${r}`]:[e]}function S_(t,e){if(!e?.startsWith("."))return;let r=Nn.posix.dirname(Cn(t)),n=Nn.posix.normalize(Nn.posix.join(r,Cn(e)));return e.endsWith("/")&&!n.endsWith("/")?`${n}/`:n}function T_(t,e,r){let n=S_(t,e.literalPrefix);if(!n)return!e.literalPrefix;let i=Cn(r),s=XP(i);if(!e.interpolated)return i===n||s.includes(n);let o=e.literalSuffix??"";return s.some(a=>a.startsWith(n)&&a.endsWith(o))}function A_(t,e,r){if(!S_(t,e.literalPrefix))return{status:dr.UNRESOLVED,candidatePaths:[],reason:e.literalPrefix?"non-local-dynamic-specifier":"unbounded-runtime-expression"};let i=r.filter(s=>T_(t,e,s)).sort((s,o)=>s.localeCompare(o));return i.length===0?{status:dr.UNRESOLVED,candidatePaths:[],reason:"no-known-local-candidate"}:i.length>m_?{status:dr.UNRESOLVED,candidatePaths:[],reason:`candidate-set-exceeds-${m_}`}:{status:dr.BOUNDED,candidatePaths:i,reason:e.interpolated?"bounded-local-pattern":"literal-dynamic-import"}}function R_(t){return{expression:t.expression,startLine:t.startLine,startColumn:t.startColumn,literalPrefix:t.literalPrefix,literalSuffix:t.literalSuffix,interpolated:t.expression.startsWith("`")&&t.expression.endsWith("`")&&t.expression.includes("${")}}function y_(t){return t.sort((e,r)=>e.sourceFile.localeCompare(r.sourceFile)||e.startLine-r.startLine||e.startColumn-r.startColumn||e.expression.localeCompare(r.expression))}var ZP=new Set(Object.values(dr)),eD=["sourceFile","kind","expression","reason"],tD=["startLine","startColumn"],rD=["literalPrefix","literalSuffix"];function nD(t){return Array.isArray(t)&&t.every(e=>typeof e=="string")}function iD(t){if(typeof t!="object"||t===null)return!1;let e=t;return eD.every(r=>typeof e[r]=="string")&&tD.every(r=>typeof e[r]=="number")&&rD.every(r=>e[r]===void 0||typeof e[r]=="string")&&ZP.has(e.status)&&nD(e.candidatePaths)}function sD(t){return E_.has(Nn.posix.extname(t))}function Ls(t){return{state:ut.UNAVAILABLE,reason:t}}function oD(t){let e;try{e=JSON.parse(t)}catch{return Ls(Dr.CORRUPT_JSON)}return typeof e=="object"&&e!==null&&e.state===ut.UNAVAILABLE&&e.reason===Dr.INCOMPLETE_SCAN?Ls(Dr.INCOMPLETE_SCAN):Array.isArray(e)?e.every(iD)?{state:ut.AVAILABLE,items:y_(e)}:Ls(Dr.INVALID_RECORD):Ls(Dr.NOT_ARRAY)}function Bd(t,e){let r=t.meta.get(Hd(e));return r!==void 0?oD(r):t.files.getAllHashes().some(({filePath:i})=>sD(Cn(i)))?Ls(Dr.MISSING):{state:ut.AVAILABLE,items:[]}}function aD(t,e){let r=Bd(t,e);return r.state===ut.AVAILABLE?r.items:[]}function I_(t){let e=t.projects.getFirst()?.id;if(!e)return{state:ut.AVAILABLE};let r=Bd(t,e);return r.state===ut.AVAILABLE?{state:ut.AVAILABLE}:r}function lD(t,e,r){let n=xd(t,e);return n.status===qr.MISSING?{items:[],incomplete:!1}:n.status!==qr.READABLE?{items:[],incomplete:!0}:{incomplete:!1,items:qP(n.source).map(i=>({sourceFile:Cn(e),kind:tg.DYNAMIC_IMPORT,expression:i.expression,startLine:i.startLine,startColumn:i.startColumn,...i.literalPrefix!==void 0?{literalPrefix:i.literalPrefix}:{},...i.literalSuffix!==void 0?{literalSuffix:i.literalSuffix}:{},...A_(e,i,r)}))}}function O_(t,e,r,n){let i=Bd(t,r),s=t.files.getAllHashes().map(({filePath:d})=>Cn(d)).sort((d,f)=>d.localeCompare(f)),o=i.state===ut.AVAILABLE?n.map(d=>d.file):s,a=new Set(o),l=new Set(s),c=i.state===ut.AVAILABLE?i.items.filter(d=>!a.has(d.sourceFile)&&l.has(d.sourceFile)).map(d=>({...d,...A_(d.sourceFile,R_(d),s)})):[],u=[],p=!1;for(let d of o){if(!/\.[cm]?[jt]sx?$/.test(d))continue;let f=lD(e,d,s);p||=f.incomplete,u.push(...f.items)}if(p){t.meta.set(Hd(r),JSON.stringify({state:ut.UNAVAILABLE,reason:Dr.INCOMPLETE_SCAN}));return}t.meta.set(Hd(r),JSON.stringify(y_([...c,...u])))}function L_(t,e){let r=t.projects.getFirst()?.id,n=t.graph.findNodeByName(e);if(!r||!n?.filePath)return[];let i=Cn(n.filePath);return aD(t,r).filter(s=>s.candidatePaths.includes(i)?!0:s.status!==dr.UNRESOLVED?!1:T_(s.sourceFile,R_(s),i))}var _a=class{base=new Ea;async persist(e){let r=await this.base.persist(e);return await e.store.withWriteLock(()=>e.store.withTransaction(()=>{O_(e.store,e.workspaceRoot,e.projectId,e.parsedResults)})),r}};import Ti from"fs/promises";import Ps from"path";import{tracingChannel as cD,channel as uD}from"diagnostics_channel";var je=uD("lru-cache:metrics"),Ns=cD("lru-cache"),dD=typeof performance=="object"&&performance&&typeof performance.now=="function"?performance:Date,Kd=()=>je.hasSubscribers||Ns.hasSubscribers,C_=new Set,N_=typeof process=="object"&&process?process:{},pD=(t,e,r,n)=>{typeof N_.emitWarning=="function"?N_.emitWarning(t,e,r,n):console.error(`[${r}] ${e}: ${t}`)},gD=t=>!C_.has(t),Qr=t=>!!t&&t===Math.floor(t)&&t>0&&isFinite(t),P_=t=>Qr(t)?t<=Math.pow(2,8)?Uint8Array:t<=Math.pow(2,16)?Uint16Array:t<=Math.pow(2,32)?Uint32Array:t<=Number.MAX_SAFE_INTEGER?Sa:null:null,Sa=class extends Array{constructor(t){super(t),this.fill(0)}},fD=class Cs{heap;length;static#t=!1;static create(e){let r=P_(e);if(!r)return[];Cs.#t=!0;let n=new Cs(e,r);return Cs.#t=!1,n}constructor(e,r){if(!Cs.#t)throw new TypeError("instantiate Stack using Stack.create(n)");this.heap=new r(e),this.length=0}push(e){this.heap[this.length++]=e}pop(){return this.heap[--this.length]}},D_=class v_{#t;#s;#c;#P;#E;#M;#k;#_;get perf(){return this.#_}ttl;ttlResolution;ttlAutopurge;updateAgeOnGet;updateAgeOnHas;allowStale;noDisposeOnSet;noUpdateTTL;maxEntrySize;sizeCalculation;noDeleteOnFetchRejection;noDeleteOnStaleGet;allowStaleOnFetchAbort;allowStaleOnFetchRejection;ignoreFetchAbort;backgroundFetchSize;#o;#S;#i;#n;#e;#d;#g;#u;#a;#T;#l;#A;#R;#f;#m;#y;#G;#p;#D;static unsafeExposeInternals(e){return{starts:e.#R,ttls:e.#f,autopurgeTimers:e.#m,sizes:e.#A,keyMap:e.#i,keyList:e.#n,valList:e.#e,next:e.#d,prev:e.#g,get head(){return e.#u},get tail(){return e.#a},free:e.#T,isBackgroundFetch:r=>e.#r(r),backgroundFetch:(r,n,i,s)=>e.#H(r,n,i,s),moveToTail:r=>e.#F(r),indexes:r=>e.#I(r),rindexes:r=>e.#O(r),isStale:r=>e.#h(r)}}get max(){return this.#t}get maxSize(){return this.#s}get calculatedSize(){return this.#S}get size(){return this.#o}get fetchMethod(){return this.#M}get memoMethod(){return this.#k}get dispose(){return this.#c}get onInsert(){return this.#P}get disposeAfter(){return this.#E}constructor(e){let{max:r=0,ttl:n,ttlResolution:i=1,ttlAutopurge:s,updateAgeOnGet:o,updateAgeOnHas:a,allowStale:l,dispose:c,onInsert:u,disposeAfter:p,noDisposeOnSet:d,noUpdateTTL:f,maxSize:m=0,maxEntrySize:_=0,sizeCalculation:O,fetchMethod:C,memoMethod:w,noDeleteOnFetchRejection:L,noDeleteOnStaleGet:$,allowStaleOnFetchRejection:Q,allowStaleOnFetchAbort:z,ignoreFetchAbort:te,backgroundFetchSize:M=1,perf:ne}=e;if(this.backgroundFetchSize=M,ne!==void 0&&typeof ne?.now!="function")throw new TypeError("perf option must have a now() method if specified");if(this.#_=ne??dD,r!==0&&!Qr(r))throw new TypeError("max option must be a nonnegative integer");let pe=r?P_(r):Array;if(!pe)throw new Error("invalid max value: "+r);if(this.#t=r,this.#s=m,this.maxEntrySize=_||this.#s,this.sizeCalculation=O,this.sizeCalculation){if(!this.#s&&!this.maxEntrySize)throw new TypeError("cannot set sizeCalculation without setting maxSize or maxEntrySize");if(typeof this.sizeCalculation!="function")throw new TypeError("sizeCalculation set to non-function")}if(w!==void 0&&typeof w!="function")throw new TypeError("memoMethod must be a function if defined");if(this.#k=w,C!==void 0&&typeof C!="function")throw new TypeError("fetchMethod must be a function if specified");if(this.#M=C,this.#G=!!C,this.#i=new Map,this.#n=Array.from({length:r}).fill(void 0),this.#e=Array.from({length:r}).fill(void 0),this.#d=new pe(r),this.#g=new pe(r),this.#u=0,this.#a=0,this.#T=fD.create(r),this.#o=0,this.#S=0,typeof c=="function"&&(this.#c=c),typeof u=="function"&&(this.#P=u),typeof p=="function"?(this.#E=p,this.#l=[]):(this.#E=void 0,this.#l=void 0),this.#y=!!this.#c,this.#D=!!this.#P,this.#p=!!this.#E,this.noDisposeOnSet=!!d,this.noUpdateTTL=!!f,this.noDeleteOnFetchRejection=!!L,this.allowStaleOnFetchRejection=!!Q,this.allowStaleOnFetchAbort=!!z,this.ignoreFetchAbort=!!te,this.maxEntrySize!==0){if(this.#s!==0&&!Qr(this.#s))throw new TypeError("maxSize must be a positive integer if specified");if(!Qr(this.maxEntrySize))throw new TypeError("maxEntrySize must be a positive integer if specified");this.#z()}if(this.allowStale=!!l,this.noDeleteOnStaleGet=!!$,this.updateAgeOnGet=!!o,this.updateAgeOnHas=!!a,this.ttlResolution=Qr(i)||i===0?i:1,this.ttlAutopurge=!!s,this.ttl=n||0,this.ttl){if(!Qr(this.ttl))throw new TypeError("ttl must be a positive integer if specified");this.#B()}if(this.#t===0&&this.ttl===0&&this.#s===0)throw new TypeError("At least one of max, maxSize, or ttl is required");if(!this.ttlAutopurge&&!this.#t&&!this.#s){let P="LRU_CACHE_UNBOUNDED";gD(P)&&(C_.add(P),pD("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.","UnboundedCacheWarning",P,v_))}}getRemainingTTL(e){return this.#i.has(e)?1/0:0}#B(){let e=new Sa(this.#t),r=new Sa(this.#t);this.#f=e,this.#R=r;let n=this.ttlAutopurge?Array.from({length:this.#t}):void 0;this.#m=n,this.#K=(l,c,u=this.#_.now())=>{r[l]=c!==0?u:0,e[l]=c,i(l,c)},this.#v=l=>{r[l]=e[l]!==0?this.#_.now():0,i(l,e[l])};let i=this.ttlAutopurge?(l,c)=>{if(n?.[l]&&(clearTimeout(n[l]),n[l]=void 0),c&&c!==0&&n){let u=setTimeout(()=>{this.#h(l)?(this.#L(this.#n[l],"expire"),n[l]=void 0):i(l,a(l))},c+1);u.unref&&u.unref(),n[l]=u}}:()=>{};this.#N=(l,c)=>{if(e[c]){let u=e[c],p=r[c];if(!u||!p)return;l.ttl=u,l.start=p,l.now=s||o();let d=l.now-p;l.remainingTTL=u-d}};let s=0,o=()=>{let l=this.#_.now();if(this.ttlResolution>0){s=l;let c=setTimeout(()=>s=0,this.ttlResolution);c.unref&&c.unref()}return l};this.getRemainingTTL=l=>{let c=this.#i.get(l);return c===void 0?0:a(c)};let a=l=>{let c=e[l],u=r[l];if(!c||!u)return 1/0;let p=(s||o())-u;return c-p};this.#h=l=>{let c=r[l],u=e[l];return!!u&&!!c&&(s||o())-c>u}}#v=()=>{};#N=()=>{};#K=()=>{};#h=()=>!1;#z(){let e=new Sa(this.#t);this.#S=0,this.#A=e,this.#b=r=>{this.#S-=e[r],e[r]=0},this.#$=(r,n,i,s)=>{if(!Qr(i)){if(this.#r(n))return this.backgroundFetchSize;if(s){if(typeof s!="function")throw new TypeError("sizeCalculation must be a function");if(i=s(n,r),!Qr(i))throw new TypeError("sizeCalculation return invalid (expect positive integer)")}else throw new TypeError("invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set.")}return i},this.#x=(r,n,i)=>{if(e[r]=n,this.#s){let s=this.#s-e[r];for(;this.#S>s;)this.#U(!0)}this.#S+=e[r],i&&(i.entrySize=n,i.totalCalculatedSize=this.#S)}}#b=e=>{};#x=(e,r,n)=>{};#$=(e,r,n,i)=>{if(n||i)throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache");return 0};*#I({allowStale:e=this.allowStale}={}){if(this.#o)for(let r=this.#a;this.#Y(r)&&((e||!this.#h(r))&&(yield r),r!==this.#u);)r=this.#g[r]}*#O({allowStale:e=this.allowStale}={}){if(this.#o)for(let r=this.#u;this.#Y(r)&&((e||!this.#h(r))&&(yield r),r!==this.#a);)r=this.#d[r]}#Y(e){return e!==void 0&&this.#i.get(this.#n[e])===e}*entries(){for(let e of this.#I())this.#e[e]!==void 0&&this.#n[e]!==void 0&&!this.#r(this.#e[e])&&(yield[this.#n[e],this.#e[e]])}*rentries(){for(let e of this.#O())this.#e[e]!==void 0&&this.#n[e]!==void 0&&!this.#r(this.#e[e])&&(yield[this.#n[e],this.#e[e]])}*keys(){for(let e of this.#I()){let r=this.#n[e];r!==void 0&&!this.#r(this.#e[e])&&(yield r)}}*rkeys(){for(let e of this.#O()){let r=this.#n[e];r!==void 0&&!this.#r(this.#e[e])&&(yield r)}}*values(){for(let e of this.#I())this.#e[e]!==void 0&&!this.#r(this.#e[e])&&(yield this.#e[e])}*rvalues(){for(let e of this.#O())this.#e[e]!==void 0&&!this.#r(this.#e[e])&&(yield this.#e[e])}[Symbol.iterator](){return this.entries()}[Symbol.toStringTag]="LRUCache";find(e,r={}){for(let n of this.#I()){let i=this.#e[n],s=this.#r(i)?i.__staleWhileFetching:i;if(s!==void 0&&e(s,this.#n[n],this))return this.#w(this.#n[n],r)}}forEach(e,r=this){for(let n of this.#I()){let i=this.#e[n],s=this.#r(i)?i.__staleWhileFetching:i;s!==void 0&&e.call(r,s,this.#n[n],this)}}rforEach(e,r=this){for(let n of this.#O()){let i=this.#e[n],s=this.#r(i)?i.__staleWhileFetching:i;s!==void 0&&e.call(r,s,this.#n[n],this)}}purgeStale(){let e=!1;for(let r of this.#O({allowStale:!0}))this.#h(r)&&(this.#L(this.#n[r],"expire"),e=!0);return e}info(e){let r=this.#i.get(e);if(r===void 0)return;let n=this.#e[r],i=this.#r(n)?n.__staleWhileFetching:n;if(i===void 0)return;let s={value:i};if(this.#f&&this.#R){let o=this.#f[r],a=this.#R[r];if(o&&a){let l=o-(this.#_.now()-a);s.ttl=l,s.start=Date.now()}}return this.#A&&(s.size=this.#A[r]),s}dump(){let e=[];for(let r of this.#I({allowStale:!0})){let n=this.#n[r],i=this.#e[r],s=this.#r(i)?i.__staleWhileFetching:i;if(s===void 0||n===void 0)continue;let o={value:s};if(this.#f&&this.#R){o.ttl=this.#f[r];let a=this.#_.now()-this.#R[r];o.start=Math.floor(Date.now()-a)}this.#A&&(o.size=this.#A[r]),e.unshift([n,o])}return e}load(e){this.clear();for(let[r,n]of e){if(n.start){let i=Date.now()-n.start;n.start=this.#_.now()-i}this.#C(r,n.value,n)}}set(e,r,n={}){let{status:i=je.hasSubscribers?{}:void 0}=n;n.status=i,i&&(i.op="set",i.key=e,r!==void 0&&(i.value=r),i.cache=this);let s=this.#C(e,r,n);return i&&je.hasSubscribers&&je.publish(i),s}#C(e,r,n,i){let{ttl:s=this.ttl,start:o,noDisposeOnSet:a=this.noDisposeOnSet,sizeCalculation:l=this.sizeCalculation,status:c}=n,u=this.#r(r);if(r===void 0)return c&&(c.set="deleted"),this.delete(e),this;let{noUpdateTTL:p=this.noUpdateTTL}=n;c&&!u&&(c.value=r);let d=this.#$(e,r,n.size||0,l,c);if(this.maxEntrySize&&d>this.maxEntrySize)return this.#L(e,"set"),c&&(c.set="miss",c.maxEntrySizeExceeded=!0),this;let f=this.#o===0?void 0:this.#i.get(e);if(f===void 0)f=this.#o===0?this.#a:this.#T.length!==0?this.#T.pop():this.#o===this.#t?this.#U(!1):this.#o,this.#n[f]=e,this.#e[f]=r,this.#i.set(e,f),this.#d[this.#a]=f,this.#g[f]=this.#a,this.#a=f,this.#o++,this.#x(f,d,c),c&&(c.set="add"),p=!1,this.#D&&!u&&this.#P?.(r,e,"add");else{this.#F(f);let m=this.#e[f];if(r!==m){if(!a)if(this.#r(m)){m!==i&&m.__abortController.abort(new Error("replaced"));let{__staleWhileFetching:_}=m;_!==void 0&&_!==r&&(this.#y&&this.#c?.(_,e,"set"),this.#p&&this.#l?.push([_,e,"set"]))}else this.#y&&this.#c?.(m,e,"set"),this.#p&&this.#l?.push([m,e,"set"]);if(this.#b(f),this.#x(f,d,c),this.#e[f]=r,!u){let _=m&&this.#r(m)?m.__staleWhileFetching:m,O=_===void 0?"add":r!==_?"replace":"update";c&&(c.set=O,_!==void 0&&(c.oldValue=_)),this.#D&&this.onInsert?.(r,e,O)}}else u||(c&&(c.set="update"),this.#D&&this.onInsert?.(r,e,"update"))}if(s!==0&&!this.#f&&this.#B(),this.#f&&(p||this.#K(f,s,o),c&&this.#N(c,f)),!a&&this.#p&&this.#l){let m=this.#l,_;for(;_=m?.shift();)this.#E?.(..._)}return this}pop(){try{for(;this.#o;){let e=this.#e[this.#u];if(this.#U(!0),this.#r(e)){if(e.__staleWhileFetching)return e.__staleWhileFetching}else if(e!==void 0)return e}}finally{if(this.#p&&this.#l){let e=this.#l,r;for(;r=e?.shift();)this.#E?.(...r)}}}#U(e){let r=this.#u,n=this.#n[r],i=this.#e[r],s=this.#r(i);s&&i.__abortController.abort(new Error("evicted"));let o=s?i.__staleWhileFetching:i;return(this.#y||this.#p)&&o!==void 0&&(this.#y&&this.#c?.(o,n,"evict"),this.#p&&this.#l?.push([o,n,"evict"])),this.#b(r),this.#m?.[r]&&(clearTimeout(this.#m[r]),this.#m[r]=void 0),e&&(this.#n[r]=void 0,this.#e[r]=void 0,this.#T.push(r)),this.#o===1?(this.#u=this.#a=0,this.#T.length=0):this.#u=this.#d[r],this.#i.delete(n),this.#o--,r}has(e,r={}){let{status:n=je.hasSubscribers?{}:void 0}=r;r.status=n,n&&(n.op="has",n.key=e,n.cache=this);let i=this.#J(e,r);return je.hasSubscribers&&je.publish(n),i}#J(e,r={}){let{updateAgeOnHas:n=this.updateAgeOnHas,status:i}=r,s=this.#i.get(e);if(s!==void 0){let o=this.#e[s];if(this.#r(o)&&o.__staleWhileFetching===void 0)return!1;if(this.#h(s))i&&(i.has="stale",this.#N(i,s));else return n&&this.#v(s),i&&(i.has="hit",this.#N(i,s)),!0}else i&&(i.has="miss");return!1}peek(e,r={}){let{status:n=Kd()?{}:void 0}=r;n&&(n.op="peek",n.key=e,n.cache=this),r.status=n;let i=this.#q(e,r);return je.hasSubscribers&&je.publish(n),i}#q(e,r){let{status:n,allowStale:i=this.allowStale}=r,s=this.#i.get(e);if(s===void 0||!i&&this.#h(s)){n&&(n.peek=s===void 0?"miss":"stale");return}let o=this.#e[s],a=this.#r(o)?o.__staleWhileFetching:o;return n&&(a!==void 0?(n.peek="hit",n.value=a):n.peek="miss"),a}#H(e,r,n,i){let s=r===void 0?void 0:this.#e[r];if(this.#r(s))return s;let o=new AbortController,{signal:a}=n;a?.addEventListener("abort",()=>o.abort(a.reason),{signal:o.signal});let l={signal:o.signal,options:n,context:i},c=(_,O=!1)=>{let{aborted:C}=o.signal,w=n.ignoreFetchAbort&&_!==void 0,L=n.ignoreFetchAbort||!!(n.allowStaleOnFetchAbort&&_!==void 0);if(n.status&&(C&&!O?(n.status.fetchAborted=!0,n.status.fetchError=o.signal.reason,w&&(n.status.fetchAbortIgnored=!0)):n.status.fetchResolved=!0),C&&!w&&!O)return p(o.signal.reason,L);let $=f,Q=this.#e[r];return(Q===f||Q===void 0&&w&&O)&&(_===void 0?$.__staleWhileFetching!==void 0?this.#e[r]=$.__staleWhileFetching:this.#L(e,"fetch"):(n.status&&(n.status.fetchUpdated=!0),this.#C(e,_,l.options,$))),_},u=_=>(n.status&&(n.status.fetchRejected=!0,n.status.fetchError=_),p(_,!1)),p=(_,O)=>{let{aborted:C}=o.signal,w=C&&n.allowStaleOnFetchAbort,L=w||n.allowStaleOnFetchRejection,$=L||n.noDeleteOnFetchRejection,Q=f;if(this.#e[r]===f&&(!$||!O&&Q.__staleWhileFetching===void 0?this.#L(e,"fetch"):w||(this.#e[r]=Q.__staleWhileFetching)),L)return n.status&&Q.__staleWhileFetching!==void 0&&(n.status.returnedStale=!0),Q.__staleWhileFetching;if(Q.__returned===Q)throw _},d=(_,O)=>{let C=this.#M?.(e,s,l);o.signal.addEventListener("abort",()=>{(!n.ignoreFetchAbort||n.allowStaleOnFetchAbort)&&(_(void 0),n.allowStaleOnFetchAbort&&(_=w=>c(w,!0)))}),C&&C instanceof Promise?C.then(w=>_(w===void 0?void 0:w),O):C!==void 0&&_(C)};n.status&&(n.status.fetchDispatched=!0);let f=new Promise(d).then(c,u),m=Object.assign(f,{__abortController:o,__staleWhileFetching:s,__returned:void 0});return r===void 0?(this.#C(e,m,{...l.options,status:void 0}),r=this.#i.get(e)):this.#e[r]=m,m}#r(e){if(!this.#G)return!1;let r=e;return!!r&&r instanceof Promise&&r.hasOwnProperty("__staleWhileFetching")&&r.__abortController instanceof AbortController}fetch(e,r={}){let n=Ns.hasSubscribers,{status:i=Kd()?{}:void 0}=r;r.status=i,i&&r.context&&(i.context=r.context);let s=this.#W(e,r);return i&&n&&(i.trace=!0,Ns.tracePromise(()=>s,i).catch(()=>{})),s}async#W(e,r={}){let{allowStale:n=this.allowStale,updateAgeOnGet:i=this.updateAgeOnGet,noDeleteOnStaleGet:s=this.noDeleteOnStaleGet,ttl:o=this.ttl,noDisposeOnSet:a=this.noDisposeOnSet,size:l=0,sizeCalculation:c=this.sizeCalculation,noUpdateTTL:u=this.noUpdateTTL,noDeleteOnFetchRejection:p=this.noDeleteOnFetchRejection,allowStaleOnFetchRejection:d=this.allowStaleOnFetchRejection,ignoreFetchAbort:f=this.ignoreFetchAbort,allowStaleOnFetchAbort:m=this.allowStaleOnFetchAbort,context:_,forceRefresh:O=!1,status:C,signal:w}=r;if(C&&(C.op="fetch",C.key=e,O&&(C.forceRefresh=!0),C.cache=this),!this.#G)return C&&(C.fetch="get"),this.#w(e,{allowStale:n,updateAgeOnGet:i,noDeleteOnStaleGet:s,status:C});let L={allowStale:n,updateAgeOnGet:i,noDeleteOnStaleGet:s,ttl:o,noDisposeOnSet:a,size:l,sizeCalculation:c,noUpdateTTL:u,noDeleteOnFetchRejection:p,allowStaleOnFetchRejection:d,allowStaleOnFetchAbort:m,ignoreFetchAbort:f,status:C,signal:w},$=this.#i.get(e);if($===void 0){C&&(C.fetch="miss");let Q=this.#H(e,$,L,_);return Q.__returned=Q}else{let Q=this.#e[$];if(this.#r(Q)){let ne=n&&Q.__staleWhileFetching!==void 0;return C&&(C.fetch="inflight",ne&&(C.returnedStale=!0)),ne?Q.__staleWhileFetching:Q.__returned=Q}let z=this.#h($);if(!O&&!z)return C&&(C.fetch="hit"),this.#F($),i&&this.#v($),C&&this.#N(C,$),Q;let te=this.#H(e,$,L,_),M=te.__staleWhileFetching!==void 0&&n;return C&&(C.fetch=z?"stale":"refresh",M&&z&&(C.returnedStale=!0)),M?te.__staleWhileFetching:te.__returned=te}}forceFetch(e,r={}){let n=Ns.hasSubscribers,{status:i=Kd()?{}:void 0}=r;r.status=i,i&&r.context&&(i.context=r.context);let s=this.#Q(e,r);return i&&n&&(i.trace=!0,Ns.tracePromise(()=>s,i).catch(()=>{})),s}async#Q(e,r={}){let n=await this.#W(e,r);if(n===void 0)throw new Error("fetch() returned undefined");return n}memo(e,r={}){let{status:n=je.hasSubscribers?{}:void 0}=r;r.status=n,n&&(n.op="memo",n.key=e,r.context&&(n.context=r.context),n.cache=this);let i=this.#X(e,r);return n&&(n.value=i),je.hasSubscribers&&je.publish(n),i}#X(e,r={}){let n=this.#k;if(!n)throw new Error("no memoMethod provided to constructor");let{context:i,status:s,forceRefresh:o,...a}=r;s&&o&&(s.forceRefresh=!0);let l=this.#w(e,a),c=o||l===void 0;if(s&&(s.memo=c?"miss":"hit",c||(s.value=l)),!c)return l;let u=n(e,l,{options:a,context:i});return s&&(s.value=u),this.#C(e,u,a),u}get(e,r={}){let{status:n=je.hasSubscribers?{}:void 0}=r;r.status=n,n&&(n.op="get",n.key=e,n.cache=this);let i=this.#w(e,r);return n&&(i!==void 0&&(n.value=i),je.hasSubscribers&&je.publish(n)),i}#w(e,r={}){let{allowStale:n=this.allowStale,updateAgeOnGet:i=this.updateAgeOnGet,noDeleteOnStaleGet:s=this.noDeleteOnStaleGet,status:o}=r,a=this.#i.get(e);if(a===void 0){o&&(o.get="miss");return}let l=this.#e[a],c=this.#r(l);return o&&this.#N(o,a),this.#h(a)?c?(o&&(o.get="stale-fetching"),n&&l.__staleWhileFetching!==void 0?(o&&(o.returnedStale=!0),l.__staleWhileFetching):void 0):(s||this.#L(e,"expire"),o&&(o.get="stale"),n?(o&&(o.returnedStale=!0),l):void 0):(o&&(o.get=c?"fetching":"hit"),this.#F(a),i&&this.#v(a),c?l.__staleWhileFetching:l)}#j(e,r){this.#g[r]=e,this.#d[e]=r}#F(e){e!==this.#a&&(e===this.#u?this.#u=this.#d[e]:this.#j(this.#g[e],this.#d[e]),this.#j(this.#a,e),this.#a=e)}delete(e){return this.#L(e,"delete")}#L(e,r){je.hasSubscribers&&je.publish({op:"delete",delete:r,key:e,cache:this});let n=!1;if(this.#o!==0){let i=this.#i.get(e);if(i!==void 0)if(this.#m?.[i]&&(clearTimeout(this.#m[i]),this.#m[i]=void 0),n=!0,this.#o===1)this.#V(r);else{this.#b(i);let s=this.#e[i];if(this.#r(s)?s.__abortController.abort(new Error("deleted")):(this.#y||this.#p)&&(this.#y&&this.#c?.(s,e,r),this.#p&&this.#l?.push([s,e,r])),this.#i.delete(e),this.#n[i]=void 0,this.#e[i]=void 0,i===this.#a)this.#a=this.#g[i];else if(i===this.#u)this.#u=this.#d[i];else{let o=this.#g[i];this.#d[o]=this.#d[i];let a=this.#d[i];this.#g[a]=this.#g[i]}this.#o--,this.#T.push(i)}}if(this.#p&&this.#l?.length){let i=this.#l,s;for(;s=i?.shift();)this.#E?.(...s)}return n}clear(){return this.#V("delete")}#V(e){for(let r of this.#O({allowStale:!0})){let n=this.#e[r];if(this.#r(n))n.__abortController.abort(new Error("deleted"));else{let i=this.#n[r];this.#y&&this.#c?.(n,i,e),this.#p&&this.#l?.push([n,i,e])}}if(this.#i.clear(),this.#e.fill(void 0),this.#n.fill(void 0),this.#f&&this.#R){this.#f.fill(0),this.#R.fill(0);for(let r of this.#m??[])r!==void 0&&clearTimeout(r);this.#m?.fill(void 0)}if(this.#A&&this.#A.fill(0),this.#u=0,this.#a=0,this.#T.length=0,this.#S=0,this.#o=0,this.#p&&this.#l){let r=this.#l,n;for(;n=r?.shift();)this.#E?.(...n)}}};var mD="tmp",Rr={INITIALIZED:"TempFileManager initialized",INIT_FAILED:"Failed to initialize TempFileManager",FILE_TRACKED:"File tracked",TRACK_FAILED:"Failed to track file",ACCESS_FAILED:"Failed to access file",FILE_REMOVED:"File removed",CLEANUP_FAILED:"Cleanup failed",CLEANUP_COMPLETED:"Temp directory cleanup completed",CLEANUP_ERROR:"Cleanup error"},Ta=class{constructor(e,r=me(),n=1024*1024*1024,i=14400*1e3,s=1800*1e3){this.logger=r;let o=Ps.resolve(e);this.tempDir=Ps.join(o,he,mD),this.ttlMs=i,this.lruCache=new D_({max:1e4,maxSize:n,sizeCalculation:a=>a.sizeBytes,ttl:i,allowStale:!1})}logger;tempDir;lruCache;cleanupInterval=null;concurrencyLimit=hn(5);ttlMs;async initialize(){try{await Ti.mkdir(this.tempDir,{recursive:!0});let e=Ps.dirname(Ps.dirname(this.tempDir)),[r,n]=await Promise.all([Ti.realpath(e),Ti.realpath(this.tempDir)]);if(!n.startsWith(r+Ps.sep))throw new E(T.FS_PATH_TRAVERSAL,`Resolved temp directory "${n}" escapes workspace root "${r}" \u2014 possible path traversal via symlink`);this.logger.info(Rr.INITIALIZED,{tempDir:this.tempDir}),this.startCleanupSchedule(1800*1e3)}catch(e){throw e instanceof E||this.logger.error(Rr.INIT_FAILED,{error:e instanceof Error?e.message:String(e)}),e}}async trackFile(e){return this.concurrencyLimit(async()=>{try{let r=await Ti.stat(e),n={filePath:e,createdAt:Date.now(),lastAccessedAt:Date.now(),sizeBytes:r.size};this.lruCache.set(e,n),this.logger.debug(Rr.FILE_TRACKED,{filePath:e,sizeBytes:r.size})}catch(r){this.logger.warn(Rr.TRACK_FAILED,{filePath:e,error:r instanceof Error?r.message:String(r)})}})}async accessFile(e){return this.concurrencyLimit(async()=>{try{let r=this.lruCache.get(e);return r&&(r.lastAccessedAt=Date.now(),this.lruCache.set(e,r)),await Ti.readFile(e,H)}catch(r){return this.logger.warn(Rr.ACCESS_FAILED,{filePath:e,error:r instanceof Error?r.message:String(r)}),null}})}async removeFileSync(e){try{await Ti.unlink(e),this.logger.debug(Rr.FILE_REMOVED,{filePath:e})}catch(r){if(r?.code!==Zs)throw r}}startCleanupSchedule(e){this.cleanupInterval=setInterval(()=>{this.cleanup().catch(r=>{this.logger.error(Rr.CLEANUP_FAILED,{error:r instanceof Error?r.message:String(r)})})},e),this.cleanupInterval.unref()}async cleanup(){return this.concurrencyLimit(async()=>{try{let e=Date.now(),r=[];for(let[n,i]of this.lruCache.entries())e-i.lastAccessedAt>this.ttlMs&&r.push(n);for(let n of r)this.lruCache.delete(n),await this.removeFileSync(n);this.logger.info(Rr.CLEANUP_COMPLETED,{removedCount:r.length,cacheSize:this.lruCache.size})}catch(e){this.logger.error(Rr.CLEANUP_ERROR,{error:e instanceof Error?e.message:String(e)})}})}stopCleanup(){this.cleanupInterval&&(clearInterval(this.cleanupInterval),this.cleanupInterval=null)}getTempDirPath(){return this.tempDir}getCacheSize(){return this.lruCache.size}getTotalSize(){let e=0;for(let r of this.lruCache.values())e+=r.sizeBytes;return e}};var Aa={INVALID_LIMIT_FALLBACK:"Ignoring invalid query limit, falling back to default",SEARCHED_LOCAL_KNOWLEDGE_GRAPH:"Searched local knowledge graph",GET_CONTEXT_FAILED:"getContext() failed during query(), falling back to null context",linkedTo:t=>`Linked to ${t}`},hD=new Set(["a","an","and","are","can","do","does","for","from","how","i","in","is","it","me","of","on","or","show","that","the","this","to","what","when","where","which","who","why","with"]),ED=5,_D=25;function SD(t){return Math.max(t*ED,_D)}function b_(t,e){return e.length<=1?t:t.map(r=>({row:r,coverage:e.reduce((n,i)=>i.has(r.id)?n+1:n,0)})).sort((r,n)=>n.coverage-r.coverage).map(({row:r})=>r)}var Ra=class{constructor(e=me()){this.logger=e}logger;extractKeywords(e){let r=e.split(/[^\w./-]+/).map(n=>n.trim()).filter(n=>n.length>0&&!hD.has(n.toLowerCase()));return Array.from(new Set(r))}getContext(e,r){let n=e.graph.findNodeByName(r);if(!n)return null;let i=e.graph.getIncomingRelations(n.id).filter(a=>a.linkType!==ce.CONTAINS).map(({name:a,linkType:l})=>({name:a,linkType:l})),s=e.graph.getOutgoingRelations(n.id).filter(a=>a.linkType!==ce.CONTAINS).map(({name:a,linkType:l})=>({name:a,linkType:l})),o=qi(e,n.filePath,i.length===0,s.length===0);return{incoming:i,outgoing:s,...o?{tierBCoverage:o}:{}}}search(e,r,n=10){n!==void 0&&(!Number.isInteger(n)||n<=0)&&(this.logger.warn(Aa.INVALID_LIMIT_FALLBACK,{target:r,invalidLimit:n,fallback:10}),n=10);let i=new Map,s=l=>{let c=`${l.layer}:${l.id}`,u=i.get(c);(!u||l.score>u.score)&&i.set(c,l)},o=this.extractKeywords(r);if(o.length>0){let l=SD(n),c=()=>o.map(f=>new Set(e.fts.searchL2Nodes([f],l).map(m=>m.id))),u=()=>o.map(f=>new Set(e.fts.searchL3Nodes([f],l).map(m=>m.id)));b_(e.fts.searchL2Nodes(o,l),o.length>1?c():[]).slice(0,n).forEach((f,m)=>s({layer:gn.L2,id:f.id,title:f.name,content:f.description,score:.9-m*.01,matchType:"keyword"})),b_(e.fts.searchL3Nodes(o,l),o.length>1?u():[]).slice(0,n).forEach((f,m)=>s({layer:gn.L3,id:f.id,title:f.title,content:f.content,score:.85-m*.01,matchType:"keyword"}))}let a=r.trim();if(a){let l=e.graph.findNodeByName(a);l&&(s({layer:gn.L2,id:l.id,title:l.name,content:null,score:.95,matchType:"exact"}),[...e.graph.getOutgoingEdges(l.id),...e.graph.getIncomingEdges(l.id)].slice(0,n).forEach((u,p)=>s({layer:gn.L2,id:u.id,title:u.name,content:Aa.linkedTo(l.name),score:.7-p*.01,matchType:"neighbor"})))}return this.logger.debug(Aa.SEARCHED_LOCAL_KNOWLEDGE_GRAPH,{target:r,resultCount:i.size}),Array.from(i.values()).sort((l,c)=>c.score-l.score).slice(0,n).map(({score:l,...c})=>c)}query(e,r,n=10){let i=this.search(e,r,n),s=i.find(c=>c.layer===gn.L2),o=i.filter(c=>c.layer===gn.L3),a=null;try{a=this.getContext(e,r)}catch(c){this.logger.debug(Aa.GET_CONTEXT_FAILED,{target:r,error:c instanceof Error?c.message:String(c)}),a=null}let l=s?e.graph.findNodeByName(s.title):void 0;return{l2:s?{name:s.title,type:l?.type??"",filePath:l?.filePath,matchType:s.matchType}:null,l3:o.map(c=>this.toL3Entry(e,c)),context:a}}toL3Entry(e,r){let n=e.l3.getById(r.id);return n?{title:r.title,content:r.content,id:n.id,nodeType:n.node_type,source:n.source,confidence:n.confidence,commitHash:n.commit_hash,validityStatus:n.validity_status,createdAt:n.created_at}:{title:r.title,content:r.content}}};var ya=class extends ai{getBlastRadius(e,r){let n=super.getBlastRadius(e,r);if(!n)return;let i=e.graph.findNodeByName(r);if(!i)return n;let s=new Set(n.map(o=>o.name));for(let o of e.graph.getIncomingRelations(i.id).filter(a=>a.linkType===ce.CONTAINS))for(let a of e.graph.getIncomingRelations(o.id))a.linkType!==ce.CONTAINS&&(s.has(a.name)||(n.push(this.buildFileDependencyEntry(e,a)),s.add(a.name)));return n}buildFileDependencyEntry(e,r){let n=e.l3.getByL2NodeId(r.id),i=n.length>0?n.map(s=>({title:s.title,content:s.content})):void 0;return i?{name:r.name,type:r.type,why:i}:{name:r.name,type:r.type}}};var Ia=class extends ya{getBlastRadius(e,r){let n=super.getBlastRadius(e,r);if(!n)return;let i=e.graph.findNodeByName(r)?.filePath;if(!i)return n;let s=new Set(n.map(o=>o.name));return n.push(...this.resolveDynamicCandidateEntries(e,r,i,s)),n}getDynamicEvidence(e,r){return L_(e,r)}getDynamicEvidenceAvailability(e){return I_(e)}resolveDynamicCandidateEntries(e,r,n,i){let s=[];for(let o of this.getDynamicEvidence(e,r)){let a=this.buildDynamicCandidateEntry(e,o,n,i);a&&(s.push(a),i.add(a.name))}return s}buildDynamicCandidateEntry(e,r,n,i){if(!this.isCandidateForTarget(r,n)||r.sourceFile===n||i.has(r.sourceFile))return;let s=e.graph.findNodeByName(r.sourceFile);if(!s||s.name!==r.sourceFile)return;let o=e.l3.getByL2NodeId(s.id),a=o.length>0?o.map(l=>({title:l.title,content:l.content})):void 0;return{name:s.name,type:s.type,edgeSource:jn.DYNAMIC_CANDIDATE,dynamicEvidence:r,...a?{why:a}:{}}}isCandidateForTarget(e,r){return e.status===dr.BOUNDED&&e.candidatePaths.includes(r)}};var RD=2e3,yD="(ungrouped)",ID=".",Oa=class{build(e,r={}){let n=e.l2Rows.map(L=>({id:L.id,name:L.name,filePath:FD(L.path_patterns),type:L.type})),i=e.linkRows.map(L=>({sourceNodeId:L.source_node_id,targetNodeId:L.target_node_id,linkType:L.link_type,commitSha:L.commit_sha??void 0,diffSummary:L.diff_summary??void 0})),s=e.l3Rows.map(L=>({id:L.id,l2NodeId:L.l2_node_id,title:L.title,content:L.content??void 0,nodeType:L.node_type,confidence:L.confidence??void 0,validityStatus:L.validity_status,sourceCommits:MD(L.source_commits)})),o=e.tagRows,a=OD(n),l=LD(i),c=ND(o),u=r.maxNodes??RD,p=n.length+s.length,d=CD(r,p,u),f=d?bD(n,i,s,l,a):vD(n,i,s,l,a),m=f.nodes,_=f.links,O=new Set(m.map(L=>L.id)),C=_.filter(L=>O.has(L.source)&&O.has(L.target)),w=PD(m,c);return DD(m,C),{topologyVersion:2,generatedAt:new Date().toISOString(),workspaceRoot:e.workspaceRoot,collapsed:d,nodes:m,links:C,groups:w,stats:{nodeCount:m.length,linkCount:C.length,groupCount:w.length,foldedLinkCount:f.foldedLinkCount??0}}}};function OD(t){let e=new Map;for(let r of t)e.set(String(r.id),r.filePath);return e}function LD(t){let e=new Map;for(let r of t)r.linkType===ce.CONTAINS&&e.set(String(r.targetNodeId),String(r.sourceNodeId));return e}function ND(t){let e=new Map;for(let r of t){let n=String(r.l2NodeId),i=e.get(n);i?i.push(r.name):e.set(n,[r.name])}return e}function CD(t,e,r){return t.collapse===mc.FILE||t.collapse!==mc.SYMBOL&&e>r}function PD(t,e){let r=new Map,n=[];for(let i of t){let s=wD(i.filePath),o=r.get(s);if(o===void 0&&(o=n.length,r.set(s,o),n.push({id:o,label:s,source:rg.DIRECTORY,count:0})),i.group=o,n[o].count++,i.kind===Ut.FILE){let a=e.get(i.id.slice("l2:".length));a&&a.length&&(i.tags=a)}}return n}function DD(t,e){let r=new Map;for(let n of e)r.set(n.source,(r.get(n.source)??0)+1),r.set(n.target,(r.get(n.target)??0)+1);for(let n of t)n.degree=r.get(n.id)??0}function vD(t,e,r,n,i){let s=t.map(a=>({id:Pt(a.id),label:a.name,kind:n.has(String(a.id))?Ut.SYMBOL:Ut.FILE,group:0,filePath:i.get(String(a.id)),degree:0,l2Type:a.type})),o=e.map(a=>({source:Pt(a.sourceNodeId),target:Pt(a.targetNodeId),linkType:a.linkType,confidence:1,commitSha:a.commitSha,diffSummary:a.diffSummary}));return w_(s,o,r,i),{nodes:s,links:o,foldedLinkCount:0}}function bD(t,e,r,n,i){let s=u=>{let p=String(u),d=new Set([p]);for(;;){let f=n.get(p);if(f===void 0||d.has(f))return p;d.add(f),p=f}},o=t.filter(u=>!n.has(String(u.id))).map(u=>({id:Pt(u.id),label:u.name,kind:Ut.FILE,group:0,filePath:i.get(String(u.id)),degree:0,l2Type:u.type})),a=[],l=new Set,c=0;for(let u of e){if(u.linkType===ce.CONTAINS)continue;let p=s(u.sourceNodeId),d=s(u.targetNodeId);if(p===d){c++;continue}let f=p+"|"+d+"|"+u.linkType;l.has(f)||(l.add(f),a.push({source:Pt(p),target:Pt(d),linkType:u.linkType,confidence:1,commitSha:u.commitSha,diffSummary:u.diffSummary}))}return w_(o,a,r,i),{nodes:o,links:a,foldedLinkCount:c}}function w_(t,e,r,n){let i=new Set(t.map(s=>s.id));for(let s of r){let o=Pt(s.l2NodeId);i.has(o)&&(t.push({id:Gc(s.id),label:s.title,kind:Ut.DECISION,group:0,filePath:n.get(String(s.l2NodeId)),parent:o,degree:0,decisionType:s.nodeType,content:s.content,confidence:s.confidence,validityStatus:s.validityStatus,sourceCommits:s.sourceCommits}),e.push({source:Gc(s.id),target:o,linkType:ce.DECISION,confidence:1}))}}function wD(t){if(!t)return yD;let r=t.split("\\").join("/").split("/").filter(Boolean);return r.length<=1?ID:r.slice(0,Math.min(2,r.length-1)).join("/")}function FD(t){if(!(typeof t!="string"||t.length===0)){try{let e=JSON.parse(t);if(Array.isArray(e)&&e.length>0)return String(e[0])}catch(e){}return t}}function MD(t){if(!(typeof t!="string"||t.length===0))try{let e=JSON.parse(t);if(Array.isArray(e)&&e.length>0)return e.map(String)}catch(e){}}import*as M_ from"path";import*as k_ from"fs";import{Parser as F_,Language as kD}from"web-tree-sitter";var La={DETECTOR_FAILED:"SemanticDiffDetector failed; treating file as unclassified for Tier B",NO_GRAMMAR_AVAILABLE:"No tree-sitter grammar available for semantic-diff classification; changed file will still be re-parsed",GRAMMAR_LOAD_FAILED:"Failed to load tree-sitter grammar for semantic-diff classification"};var Na=class{constructor(e=me()){this.logger=e}logger;registryPromise;parserInitPromise;detectors=new Map;async analyzeFile(e){let{filePath:r,oldContent:n,newContent:i,changedLineRanges:s}=e;if(s.length===0)return[];let o=await this.getDetectorForFile(r);if(!o)return[];try{return o.analyze(n,i,s).map(l=>({nodeId:l.nodeId,nodeType:l.nodeType,pruningLevel:l.pruningLevel===1?1:0,newRange:l.newRange}))}catch(a){return this.logger.warn(La.DETECTOR_FAILED,{filePath:r,error:a instanceof Error?a.message:String(a)}),[]}}async getDetectorForFile(e){let r=await this.getRegistry(),n=M_.extname(e),i=r.getProviderForExtension(n);if(!i)return;let s=this.detectors.get(i.wasm_file);if(s!==void 0)return s??void 0;this.parserInitPromise??=F_.init(),await this.parserInitPromise;let{wasmPath:o,attemptedPaths:a}=Lg(i.wasm_file);if(!k_.existsSync(o)){this.logger.debug(La.NO_GRAMMAR_AVAILABLE,{filePath:e,wasmFile:i.wasm_file,attemptedPaths:a}),this.detectors.set(i.wasm_file,null);return}try{let l=await kD.load(o),c=new F_,u=new Og(c,l);return this.detectors.set(i.wasm_file,u),u}catch(l){this.logger.warn(La.GRAMMAR_LOAD_FAILED,{filePath:e,wasmFile:i.wasm_file,error:l instanceof Error?l.message:String(l)}),this.detectors.set(i.wasm_file,null);return}}getRegistry(){return this.registryPromise??=Ig(),this.registryPromise}};import U_ from"fs";import Ca from"path";import{execFile as GD}from"child_process";import{promisify as xD}from"util";var Yd=xD(GD),UD=[".cmd",".CMD",".exe",""];function $d(t,e){return e?{...t,env:e}:t}function HD(t,e){let r=Ca.join(t,dt,".bin"),n=process.platform===br?UD.map(i=>`${e}${i}`):[e];for(let i of n){let s=Ca.join(r,i);if(U_.existsSync(s))return s}}function sr(t,e,r){let n=e.buildEnv?.();if(r?.binary)return $d({command:r.binary,args:r.args??e.defaultArgs,locallyResolved:!0,fromUserOverride:!0},n);let i=e.binaryName??e.packageName,s=HD(t,i);if(s)return $d({command:s,args:e.defaultArgs,locallyResolved:!0},n);let o=i===e.packageName?["--no-install",e.packageName,...e.defaultArgs]:["--no-install","--package",e.packageName,i,...e.defaultArgs];return $d({command:"npx",args:o,locallyResolved:!1},n)}var G_=5e3,BD=5e3;async function KD(t){try{if(process.platform===br){let{stdout:n}=await Yd("where",[t],{timeout:G_});return n.split(/\r?\n/).map(i=>i.trim()).find(i=>i.length>0)}let{stdout:e}=await Yd("sh",["-c",`command -v ${t}`],{timeout:G_}),r=e.trim();return r.length>0?r:void 0}catch{return}}function $D(t,e){if(!e)return;let r=process.platform===br?[`${t}.exe`,t]:[t];for(let n of e)for(let i of r){let s=Ca.join(n,i);if(U_.existsSync(s))return s}}async function Ce(t,e){if(e?.binary)return{command:e.binary,args:e.args??t.defaultArgs,locallyResolved:!0,fromUserOverride:!0};let r=await KD(t.binaryName);if(r)return{command:r,args:t.defaultArgs,locallyResolved:!0};let n=$D(t.binaryName,t.extraCandidateDirs);return n?{command:n,args:t.defaultArgs,locallyResolved:!0}:{command:t.binaryName,args:t.defaultArgs,locallyResolved:!1}}function x_(t){let e=t.trim().replace(/\\/g,"/");return Ca.posix.basename(e).replace(/\.exe$/i,"").toLowerCase()}async function H_(t,e=BD,r){if(r&&!r.some(n=>x_(n)===x_(t)))return!1;try{return await Yd(t,["--version"],{timeout:e}),!0}catch{return!1}}var wt={PACKAGE_NAME:"typescript-language-server",NPX_COMMAND:"npx",NPX_NO_INSTALL_FLAG:"--no-install",STDIO_ARG:"--stdio",VERSION_FLAG:"--version"},Pa=8192,Ai={binaryUnresolvable:"typescript-language-server is not resolvable (no local node_modules/.bin copy and `npx --no-install` cannot find it) -- install it as a project devDependency to enable LSP-precision cross-file edges",nodeModulesMissing:"node_modules is missing -- run the project's package manager install first",tsconfigMissing:"no tsconfig.json/jsconfig.json found at the workspace root"};var YD=["PATH","HOME","USERPROFILE","PATHEXT","SYSTEMROOT","COMSPEC","LANG","LC_ALL","TERM"];function Da(t=process.env){let e={};for(let r of YD){let n=t[r];n!==void 0&&(e[r]=n)}return e}var va=class{get env(){return{...process.env}}get version(){return process.version}get platform(){return process.platform}get argv(){return process.argv}cwd(){return process.cwd()}};var or=new va;function WD(t){let e=Da(t.env),r=t.env.NODE_OPTIONS??"";if(r.includes("--max-old-space-size"))return e.NODE_OPTIONS=r,e;let n=`--max-old-space-size=${Pa}`;return e.NODE_OPTIONS=r?`${r} ${n}`:n,e}function ba(t,e,r=or){return sr(t,{packageName:wt.PACKAGE_NAME,defaultArgs:[wt.STDIO_ARG],buildEnv:()=>WD(r)},e)}import wa from"fs";import Fa from"path";import{execFile as ZD}from"child_process";import{promisify as ev}from"util";import jD from"path";import{execFile as VD}from"child_process";import{promisify as zD}from"util";var JD=zD(VD),qD=new Set([".cmd",".bat",".ps1"]),B_=new Set(["npx"]);function Xr(t){return process.platform!=="win32"?!1:qD.has(jD.extname(t).toLowerCase())||B_.has(t.toLowerCase())}var QD=/[%!"\r\n]/;function Wd(t){let e=t.match(QD);if(e)throw new Error(`Unsafe character ${JSON.stringify(e[0])} in Windows shell-wrapped LSP token`);return`"${t}"`}var XD=5e3;async function jd(t,e){try{let{stdout:r}=await JD("where",[t],{timeout:XD,env:e});return r.split(/\r?\n/).map(i=>i.trim()).find(i=>i.length>0)??t}catch{return t}}function Vd(t){return B_.has(t.toLowerCase())}async function Ri(t,e,r){return[Vd(t)?await jd(t,r):t,...e].map(Wd).join(" ")}var K_=ev(ZD),$_=5e3,tv=[oe.TSCONFIG_JSON,oe.JSCONFIG_JSON];function rv(t){return wa.existsSync(Fa.join(t,dt))}function nv(t){return!!(tv.some(r=>wa.existsSync(Fa.join(t,r)))||wa.existsSync(Fa.join(t,"tsconfig.base.json"))||wa.existsSync(Fa.join(t,"src",oe.TSCONFIG_JSON)))}async function iv(t){let e=[wt.NPX_NO_INSTALL_FLAG,wt.PACKAGE_NAME,wt.VERSION_FLAG];try{if(Xr(wt.NPX_COMMAND)){let r=await Ri(wt.NPX_COMMAND,e,void 0);await K_(r,[],{cwd:t,timeout:$_,shell:!0})}else await K_(wt.NPX_COMMAND,e,{cwd:t,timeout:$_});return!0}catch{return!1}}async function Y_(t,e){let r=rv(t),n=nv(t);if(!r)return{nodeModulesPresent:r,tsconfigResolvable:n,lspBinaryResolvable:!1,ready:!1,reason:Ai.nodeModulesMissing};if(!n)return{nodeModulesPresent:r,tsconfigResolvable:n,lspBinaryResolvable:!1,ready:!1,reason:Ai.tsconfigMissing};let s=ba(t,e).locallyResolved?!0:await iv(t);return s?{nodeModulesPresent:r,tsconfigResolvable:n,lspBinaryResolvable:s,ready:!0}:{nodeModulesPresent:r,tsconfigResolvable:n,lspBinaryResolvable:s,ready:!1,reason:Ai.binaryUnresolvable}}import Av from"fs/promises";import qd from"os";import yi from"path";import{pathToFileURL as X_,fileURLToPath as Z_}from"url";import{spawn as W_}from"child_process";var Pn={CONTENT_LENGTH_HEADER_PREFIX:"Content-Length: ",HEADER_BODY_SEPARATOR:`\r
148
148
  \r
149
- `,JSON_RPC_VERSION:"2.0"},zd={CONTENT_MODIFIED:-32801,SERVER_CANCELLED:-32802},Jd={MAX_ATTEMPTS:3,BACKOFF_MS:25},Yt={INITIALIZE:"initialize",INITIALIZED:"initialized",SHUTDOWN:"shutdown",EXIT:"exit",DID_OPEN:"textDocument/didOpen",DID_CLOSE:"textDocument/didClose",DOCUMENT_SYMBOL:"textDocument/documentSymbol",REFERENCES:"textDocument/references",DEFINITION:"textDocument/definition"},yr={NAMESPACE:3,CLASS:5,METHOD:6,CONSTRUCTOR:9,FUNCTION:12,OBJECT:19},$e={clientNotRunning:t=>`LSP request "${t}" attempted after the client stopped running`,clientStoppedBeforeResponse:"LSP client stopped before the server responded to the request",requestTimedOut:(t,e)=>`LSP request "${t}" timed out after ${e}ms`,serverExited:(t,e)=>`LSP server process exited (code=${String(t)}) before responding`+(e?` -- stderr: ${e}`:""),spawnFailed:(t,e)=>`Failed to spawn LSP server "${t}": ${e}`,initializeFailed:t=>`LSP server exited before completing its initialize handshake: ${t}`,batchTimedOut:t=>`Tier B LSP batch exceeded its ${t}ms timeout and was aborted`,resolutionFailedForFile:t=>`Tier B LSP resolution failed for ${t}`,skippedMultiLocationDefinition:t=>`Tier B forward resolution: first definition result for ${t} resolved outside the workspace; falling through to the next in-workspace result`,concurrencyClamped:(t,e)=>`Tier B LSP batch: maxConcurrentFiles=${t} clamped to ${e} (bounded by file count and maxOpenFiles)`,processShardsClamped:(t,e)=>`Tier B LSP batch: maxProcesses=${t} clamped to ${e} (bounded by file count)`,processShardsMemoryClamped:(t,e,r,n)=>`Tier B LSP batch: maxProcesses=${t} clamped to ${e} by memory (${r}MiB budget / ${n}MiB per shard)`};function j_(){return["pipe","pipe","pipe"]}var Ma=class extends Error{constructor(r,n){super(n);this.code=r;this.name="LspJsonRpcError"}code},sv=new Set([zd.CONTENT_MODIFIED,zd.SERVER_CANCELLED]);function ov(t){return t instanceof Ma&&t.code!==void 0&&sv.has(t.code)}var av=4e3,ka=class{child;buffer=Buffer.alloc(0);nextId=1;pending=new Map;stopped=!1;stderrTail="";async start(e){let r=Xr(e.command),n=e.env??Da(),i=r&&Vd(e.command)?await jd(e.command,e.env):e.command,s=r?W_([i,...e.args].map(Wd).join(" "),{cwd:e.cwd,stdio:j_(),shell:!0,env:n}):W_(e.command,e.args,{cwd:e.cwd,stdio:j_(),env:n});this.child=s,s.stdout.on("data",o=>this.onData(o)),s.stderr.on("data",o=>this.onStderr(o)),s.on("exit",o=>this.onExit(o)),s.on("error",o=>this.onError(o));try{await new Promise((o,a)=>{let l=()=>{s.removeListener("error",c),o()},c=u=>{s.removeListener("spawn",l),a(u)};s.once("spawn",l),s.once("error",c)})}catch(o){throw await this.stop(),o}}request(e,r,n){return!this.child||this.stopped?Promise.reject(new Error($e.clientNotRunning(e))):new Promise((i,s)=>{let o=n>0?Date.now()+n:void 0,a=0,l,c,u,p=!1,d=()=>{c&&clearTimeout(c),u&&clearTimeout(u),c=void 0,u=void 0},f=O=>{p||(p=!0,d(),l!==void 0&&this.pending.delete(l),l=void 0,O())},m=()=>{f(()=>s(new Error($e.requestTimedOut(e,n))))},_=()=>{if(p)return;if(!this.child||this.stopped){f(()=>s(new Error($e.clientNotRunning(e))));return}if(o!==void 0&&Date.now()>=o){m();return}a+=1;let O=this.nextId++;l=O,this.pending.set(O,{resolve:C=>f(()=>i(C)),reject:C=>{if(!ov(C)||a>=Jd.MAX_ATTEMPTS){f(()=>s(C));return}let w=o===void 0?1/0:o-Date.now();if(w<=0){m();return}u=setTimeout(()=>{if(u=void 0,!p){if(o!==void 0&&Date.now()>=o){m();return}this.pending.delete(O),l=void 0,_()}},Math.min(Jd.BACKOFF_MS,w))}}),this.write({jsonrpc:Pn.JSON_RPC_VERSION,id:O,method:e,params:r})};c=n>0?setTimeout(m,n):void 0,_()})}notify(e,r){!this.child||this.stopped||this.write({jsonrpc:Pn.JSON_RPC_VERSION,method:e,params:r})}async stop(){if(!this.child)return;this.stopped=!0;let e=this.child;this.child=void 0,this.rejectAllPending(new Error($e.clientStoppedBeforeResponse)),this.buffer=Buffer.alloc(0),this.stderrTail="",e.stdout.removeAllListeners("data"),e.stderr.removeAllListeners("data"),e.removeAllListeners("exit"),e.removeAllListeners("error"),e.removeAllListeners("spawn"),e.on("error",()=>{});try{e.stdin.end()}catch{}try{e.stdin.destroy(),e.stdout.destroy(),e.stderr.destroy()}catch{}try{e.kill()}catch{}try{e.unref()}catch{}}write(e){let r=JSON.stringify(e),n=`${Pn.CONTENT_LENGTH_HEADER_PREFIX}${Buffer.byteLength(r,H)}`+Pn.HEADER_BODY_SEPARATOR;this.child.stdin.write(n+r,H)}onData(e){for(this.buffer=Buffer.concat([this.buffer,e]);;)if(!this.tryConsumeOneMessage())return}tryConsumeOneMessage(){let e=this.buffer.indexOf(Pn.HEADER_BODY_SEPARATOR);if(e===-1)return!1;let r=this.buffer.subarray(0,e).toString(H),n=/Content-Length:\s*(\d+)/i.exec(r),i=e+Pn.HEADER_BODY_SEPARATOR.length;if(!n)return this.buffer=this.buffer.subarray(i),this.buffer.length>0;let s=Number(n[1]);if(this.buffer.length<i+s)return!1;let o=this.buffer.subarray(i,i+s).toString(H);return this.buffer=this.buffer.subarray(i+s),this.handleMessage(o),!0}handleMessage(e){let r;try{r=JSON.parse(e)}catch{return}if(r.id===void 0)return;let n=this.pending.get(r.id);n&&(r.error?n.reject(new Ma(typeof r.error.code=="number"?r.error.code:void 0,r.error.message??"")):n.resolve(r.result))}onStderr(e){this.stderrTail=(this.stderrTail+e.toString(H)).slice(-av)}onExit(e){this.stopped=!0,this.rejectAllPending(new Error($e.serverExited(e,this.stderrTail||void 0)))}onError(e){this.stopped=!0,this.rejectAllPending(e)}rejectAllPending(e){for(let r of this.pending.values())r.reject(e);this.pending.clear()}};import vn from"fs";import Ve from"path";var lv=[{languageId:B.RUST,basenames:[oe.CARGO_TOML],suffixes:[]},{languageId:B.GO,basenames:[oe.GO_MOD],suffixes:[]},{languageId:B.TYPESCRIPT,basenames:[oe.PACKAGE_JSON,oe.TSCONFIG_JSON,oe.JSCONFIG_JSON],suffixes:[]},{languageId:B.PYTHON,basenames:[oe.PYPROJECT_TOML,"setup.py","setup.cfg"],suffixes:[]},{languageId:B.CSHARP,basenames:[],suffixes:[".csproj",".sln",".slnx"]},{languageId:B.JAVA,basenames:["pom.xml","build.gradle","build.gradle.kts"],suffixes:[]},{languageId:B.CPP,basenames:["CMakeLists.txt","meson.build","BUILD","Makefile"],suffixes:[]},{languageId:B.PHP,basenames:["composer.json"],suffixes:[]},{languageId:B.RUBY,basenames:["Gemfile"],suffixes:[".gemspec"]}];function cv(t,e,r){let n=r.get(t);if(n!==void 0)return n;let i=!1;if(e.basenames.length>0&&(i=e.basenames.some(s=>vn.existsSync(Ve.join(t,s)))),!i&&e.suffixes.length>0)try{i=vn.readdirSync(t).some(s=>e.suffixes.some(o=>s.endsWith(o)))}catch{i=!1}return r.set(t,i),i}function uv(t,e,r,n){let i=Ve.dirname(Ve.join(t,e));for(;;){if(cv(i,r,n))return i;if(i===t)return t;let s=Ve.dirname(i);if(s===i)return t;i=s}}function V_(t,e){let r=Ve.relative(Ve.resolve(t),e);return r===""||r!==".."&&!r.startsWith(`..${Ve.sep}`)&&!Ve.isAbsolute(r)}function Dn(t,e,r,n){let i=Ve.resolve(t),s=Ve.normalize(Ve.resolve(r,n));if(V_(i,s))try{let o=vn.realpathSync(s);return V_(e,o)?s:void 0}catch{return}}function z_(t,e,r,n){return n.map(i=>Dn(t,e,r,i)).filter(i=>i!==void 0)}function dv(t,e,r){let n=Ga(t,oe.CARGO_TOML);if(n===void 0)return[];let i=[],s="";for(let o of n.split(/\r?\n/)){let a=o.trim(),l=a.match(/^\[(.+)\]$/);if(l){s=l[1].trim().toLowerCase();continue}if(s==="workspace"){for(let c of a.matchAll(/"([^"]+)"/g))i.push(c[1]);continue}if(s.includes("dependencies")||s.startsWith("patch")||s.startsWith("replace"))for(let c of a.matchAll(/path\s*=\s*"([^"]+)"/g))i.push(c[1])}return z_(e,r,t,i)}function pv(t,e,r){let n=Ga(t,oe.GO_MOD);if(n===void 0)return[];let i=[];for(let s of n.split(/\r?\n/)){let o=s.trim().match(/^replace\s+\S+\s+=>\s+(\S+)\s*$/);if(!o)continue;let a=o[1];!a.startsWith(".")&&!Ve.isAbsolute(a)||i.push(a)}return z_(e,r,t,i)}function gv(t,e,r){return[...mv(t,e,r),...hv(t,e,r)]}function fv(t,e,r,n){if(!n.includes("*")){let o=Dn(e,r,t,n);return o?[o]:[]}let i=Dn(e,r,t,Ve.dirname(n));if(!i)return[];let s=Ve.basename(n);try{return vn.readdirSync(i).filter(o=>s==="*"||o.includes(s.slice(0,s.indexOf("*")))).map(o=>Dn(e,r,i,o)).filter(o=>o!==void 0)}catch{return[]}}function mv(t,e,r){let n=J_(t,oe.PACKAGE_JSON);if(n===void 0)return[];let i=n.workspaces,s=Array.isArray(i)?i:typeof i=="object"&&i!==null&&Array.isArray(i.packages)?i.packages:[],o=[];for(let a of s)typeof a=="string"&&o.push(...fv(t,e,r,a));return o}function hv(t,e,r){let n=J_(t,oe.TSCONFIG_JSON);if(n===void 0)return[];let i=[],s=n.references;if(Array.isArray(s))for(let a of s){if(typeof a!="object"||a===null)continue;let l=a.path;if(typeof l!="string")continue;let c=Dn(e,r,t,l);c&&i.push(c)}let o=n.extends;if(typeof o=="string"){let a=Dn(e,r,t,o);a&&i.push(a)}return i}function Ev(t,e,r){let n=[],i=[];try{i=vn.readdirSync(t)}catch{return n}for(let s of i){if(!s.endsWith(".csproj"))continue;let o=Ga(t,s);if(o!==void 0)for(let a of o.matchAll(/<ProjectReference[^>]*Include\s*=\s*"([^"]+)"/g)){let l=a[1].split("\\").join("/"),c=Dn(e,r,t,l);c&&n.push(Ve.dirname(c))}}return n}function Ga(t,e){try{return vn.readFileSync(Ve.join(t,e),"utf8")}catch{return}}function J_(t,e){let r=Ga(t,e);if(r!==void 0)try{let n=JSON.parse(r);return typeof n=="object"&&n!==null&&!Array.isArray(n)?n:void 0}catch{return}}function _v(t,e,r,n){switch(e){case B.RUST:return dv(t,r,n);case B.GO:return pv(t,r,n);case B.TYPESCRIPT:return gv(t,r,n);case B.CSHARP:return Ev(t,r,n);default:return[]}}function Sv(t){let e=new Map(t.map((l,c)=>[l.root,c])),r=new Map,n=new Map;for(let l of t){let c=[...new Set(l.deps.filter(u=>u!==l.root))].filter(u=>e.has(u)).sort();n.set(l.root,c.length);for(let u of c){let p=r.get(u)??[];p.push(l.root),r.set(u,p)}}let i=t.filter(l=>n.get(l.root)===0).map(l=>l.root).sort(),s=[],o=new Set;for(;i.length>0;){let l=i.shift();if(!o.has(l)){o.add(l),s.push(t[e.get(l)]);for(let c of(r.get(l)??[]).sort())o.has(c)||(n.set(c,n.get(c)-1),n.get(c)===0&&i.push(c));i.sort()}}let a=t.filter(l=>!o.has(l.root)).sort((l,c)=>l.root.localeCompare(c.root));return[...s,...a]}function q_(t){let e=Ve.resolve(t.workspaceRoot),r;try{r=vn.realpathSync(e)}catch{r=void 0}let n=lv.find(l=>l.languageId===t.languageId)??null,i=new Map,s=new Map,o=new Map;for(let l of t.files){let c=n?uv(e,l,n,i):e;o.set(l,c);let u=s.get(c);u?u.push(l):s.set(c,[l])}let a=[];for(let[l,c]of s)a.push({root:l,files:c,deps:n&&r?_v(l,t.languageId,e,r):[]});return{groups:Sv(a),fileToProjectRoot:o}}var Tv="LSP file path resolves outside the configured workspace root";function Q_(t,e){let r=On(t,e);if(!r)throw new E(T.FS_PATH_TRAVERSAL,Tv);return r}var Rv=12e4,yv=3e4,Iv=200,Ov=512,Lv=.25,xa=new Set([yr.FUNCTION,yr.METHOD,yr.CONSTRUCTOR,yr.CLASS]),Nv=new Set([yr.CLASS]);function eS(t,e){return e.has(t)}function Ii(t){return t.split("\\").join("/")}var Ba=class extends Error{};function Cv(t){return"location"in t}function Pv(t){return t?t.map(e=>Cv(e)?{name:e.name,kind:e.kind,range:e.location.range,selectionRange:e.location.range}:e):[]}function Qd(t,e){return e.normalizeSymbolName?e.normalizeSymbolName(t):t}function Dv(t,e){let r=e.line>t.start.line||e.line===t.start.line&&e.character>=t.start.character,n=e.line<t.end.line||e.line===t.end.line&&e.character<=t.end.character;return r&&n}function Ua(t,e,r,n){for(let i of t){if(!Dv(i.range,e))continue;let s=eS(i.kind,r)?i.name:n;return(i.children?Ua(i.children,e,r,s):void 0)??{symbol:i,containerName:n}}}function Ha(t,e,r){let n=[];for(let i of t)if(xa.has(i.kind)&&n.push({symbol:i,containerName:r}),i.children){let s=eS(i.kind,e)?i.name:r;n.push(...Ha(i.children,e,s))}return n}var Ge=class{name;config={};logger;createClient;languageConfig;containmentKinds;constructor(e,r,n=()=>new ka){this.languageConfig=e,this.name=e.name,this.logger=r??me(),this.createClient=n,this.containmentKinds=e.containmentSymbolKinds??Nv}configure(e){this.config=e}get requestTimeoutMs(){return this.config.timeoutMs??yv}get maxOpenFiles(){return this.config.maxOpenFiles??Iv}get maxConcurrentFiles(){return this.config.maxConcurrentFiles??1}get maxProcesses(){if(this.config.maxProcesses!==void 0)return this.config.maxProcesses;let e=Math.floor(this.maxProcessMemoryMb()/this.processMemoryEstimateMb());return Math.max(1,Math.min(qd.availableParallelism(),e))}processMemoryEstimateMb(){return this.config.processMemoryEstimateMb??this.languageConfig.processMemoryEstimateMb??Ov}maxProcessMemoryMb(){return this.config.maxProcessMemoryMb!==void 0?this.config.maxProcessMemoryMb:Math.max(Math.round(qd.totalmem()/1024/1024*Lv),this.processMemoryEstimateMb())}effectiveConcurrency(e){let r=this.maxConcurrentFiles,n=Math.max(1,Math.min(r,e,this.maxOpenFiles-1));return n!==r&&this.logger.debug($e.concurrencyClamped(r,n)),n}effectiveProcesses(e){let r=this.maxProcesses,n=Math.floor(this.maxProcessMemoryMb()/this.processMemoryEstimateMb()),i=qd.availableParallelism(),s=Math.max(1,Math.min(r,e,i,n));return s!==r&&(this.logger.debug($e.processShardsClamped(r,s)),s<r&&n<Math.min(r,e,i)&&this.logger.debug($e.processShardsMemoryClamped(r,s,this.maxProcessMemoryMb(),this.processMemoryEstimateMb()))),s}async checkAvailability(e){let r=await this.languageConfig.checkPreflight(e,{binary:this.config.binaryOverride,args:this.config.argsOverride});return r.ready?{available:!0}:{available:!1,reason:r.reason}}async resolveEdges(e){if(e.files.length===0)return{edges:[],filesProcessed:[],filesFailed:[]};let r=this.config.timeoutMs??Rv,n=this.effectiveProcesses(e.files.length);if(n<=1){let o=this.createClient();return this.runBatch(o,e,r)}let i=this.buildProjectShards(e,n),s=await Promise.all(i.map(o=>{let a=this.createClient();return this.runBatch(a,o,r)}));return this.mergeShardOutcomes(s,e.files)}languageIdFor(e){return this.languageConfig.languageIdByExtension[yi.extname(e)]??this.languageConfig.defaultLanguageId}buildProjectShards(e,r){let i=q_({workspaceRoot:e.workspaceRoot,languageId:this.languageConfig.tierBLanguageId,files:e.files}).groups,s=(d,f)=>{let m={};for(let _ of f){let O=e.callsByFile?.[_];O&&(m[_]=O)}return{workspaceRoot:e.workspaceRoot,serverRoot:d,files:f,callsByFile:m}};if(i.length<=r)return i.map(d=>s(d.root,d.files));let o=[...i].sort((d,f)=>d.files.length-f.files.length||d.root.localeCompare(f.root)),a=r-1,l=new Set(o.slice(-a).map(d=>d.root)),c=[],u=[];for(let d of i)l.has(d.root)?c.push(s(d.root,d.files)):u.push(...d.files);let p=[...c];return u.length>0&&p.push(s(e.workspaceRoot,u)),p}mergeShardOutcomes(e,r){let n=[],i=new Set,s=new Map,o=0;for(let u=0;u<e.length;u++){let p=e[u];for(let d of p.edges)n.push(d);for(let d of p.filesProcessed)i.add(d);for(let d of p.filesFailed)s.set(d.file,d);p.unavailableReason&&o++}n.sort((u,p)=>(u.sourceNodeKey+"->"+u.targetNodeKey).localeCompare(p.sourceNodeKey+"->"+p.targetNodeKey));let{filesProcessed:a,filesFailed:l}=this.reorderFiles(r,i,s),c={edges:n,filesProcessed:a,filesFailed:l};return o===e.length&&e.length>0&&(c.unavailableReason=e.find(u=>u.unavailableReason)?.unavailableReason),c}reorderFiles(e,r,n){let i=[],s=[];for(let o of e)r.has(o)?i.push(o):n.has(o)&&s.push(n.get(o));return{filesProcessed:i,filesFailed:s}}async runBatch(e,r,n){let{workspaceRoot:i,files:s,callsByFile:o}=r,a=r.serverRoot??i,l=await this.languageConfig.resolveBinary(i,{binary:this.config.binaryOverride,args:this.config.argsOverride});try{await e.start({command:l.command,args:l.args,cwd:a,env:l.env})}catch(u){return{edges:[],filesProcessed:[],filesFailed:[],unavailableReason:$e.spawnFailed(l.command,u instanceof Error?u.message:String(u))}}try{await this.initializeSession(e,a)}catch(u){let p=u instanceof Error?u.message:String(u);await this.shutdownSession(e);let d=this.languageConfig.unavailableReasonForUnresolvableBinary;return!l.locallyResolved&&d?(this.logger.debug($e.initializeFailed(p)),{edges:[],filesProcessed:[],filesFailed:[],unavailableReason:d}):{edges:[],filesProcessed:[],filesFailed:[],unavailableReason:$e.initializeFailed(p)}}await this.waitForColdStart(e,i,s);let c=n>0?Date.now()+n:void 0;try{return await this.processAllFiles(e,i,s,o,c,n)}finally{await this.shutdownSession(e)}}async settleColdStart(){let e=this.config.coldStartSettleMs??this.languageConfig.coldStartSettleMs??0;e>0&&await new Promise(r=>setTimeout(r,e))}async waitForColdStart(e,r,n){await this.settleColdStart(),(this.config.coldStartSettleMs??this.languageConfig.coldStartSettleMs??0)>0&&await this.waitForServerReady(e,r,n)}async waitForServerReady(e,r,n){let i=this.config.coldStartPollMs??5e3,s=this.config.coldStartMaxWaitMs??12e4,o=Date.now();for(;;){if(await this.probeServerReady(e,r,n)||Date.now()-o>=s)return;await new Promise(c=>setTimeout(c,i))}}async probeServerReady(e,r,n){let s={openFileCache:new Map,inFlightOpens:new Map,pinnedPaths:new Set,usedNodeKeysByFile:new Map};try{let o=!1;for(let a=0;a<Math.min(n.length,12);a++){let l=await this.openAndGetSymbols(e,r,n[a],s),c=Ha(l.symbols,this.containmentKinds);if(c.length===0)continue;if(o=!0,(await Promise.all(c.map(({symbol:p})=>e.request(Yt.REFERENCES,{textDocument:{uri:l.uri},position:p.selectionRange.start,context:{includeDeclaration:!1}},this.requestTimeoutMs)))).some(p=>(p?.length??0)>0))return!0}return o?!1:n.length<=12}finally{for(let o of[...s.openFileCache.values()])this.closeOpenFile(e,o,s.openFileCache)}}async initializeSession(e,r){let n=X_(r).toString();await e.request(Yt.INITIALIZE,{processId:process.pid,rootUri:n,capabilities:{textDocument:{documentSymbol:{hierarchicalDocumentSymbolSupport:!0}}},workspaceFolders:[{uri:n,name:yi.basename(r)}],...this.languageConfig.initializationOptions?{initializationOptions:this.languageConfig.initializationOptions}:{}},this.requestTimeoutMs),e.notify(Yt.INITIALIZED,{})}async shutdownSession(e){try{await e.request(Yt.SHUTDOWN,null,this.requestTimeoutMs),e.notify(Yt.EXIT,{})}catch{}finally{await e.stop()}}async processAllFiles(e,r,n,i,s,o){let a={openFileCache:new Map,inFlightOpens:new Map,pinnedPaths:new Set,usedNodeKeysByFile:new Map},l=new Array(n.length),c=0,u=!1,p=async()=>{for(;;){if(u)return;let C=s!==void 0?s-Date.now():void 0;if(C!==void 0&&C<=0){u=!0;return}let w=c++;if(w>=n.length)return;let L=n[w];a.pinnedPaths.add(L);try{let $=await this.runOneSlot(e,r,L,i,a,C,o);l[w]=$,!$.ok&&$.deadlineExceeded&&(u=!0)}finally{a.pinnedPaths.delete(L)}}},d=this.effectiveConcurrency(n.length);await Promise.allSettled(Array.from({length:d},()=>p()));let f=[],m=new Set,_=[],O=[];for(let C=0;C<n.length;C++){let w=l[C];if(w)if(w.ok){_.push(n[C]);for(let L of w.edges){let $=`${L.sourceNodeKey}->${L.targetNodeKey}`;m.has($)||(m.add($),f.push(L))}}else O.push({file:n[C],reason:w.reason,retryable:w.deadlineExceeded,...w.notApplicable?{notApplicable:!0}:{}})}return u&&this.markUnreachedFilesFailed(n,_,O,o),{edges:f,filesProcessed:_,filesFailed:O,...u?{unavailableReason:$e.batchTimedOut(o)}:{}}}raceAgainstDeadline(e,r){return new Promise((n,i)=>{let s=setTimeout(()=>i(new Ba),r);s.unref?.(),e.then(o=>{clearTimeout(s),n(o)},o=>{clearTimeout(s),i(o)})})}async runOneSlot(e,r,n,i,s,o,a){try{let l=o!==void 0?await this.raceAgainstDeadline(this.processOneFile(e,r,n,i,s),o):await this.processOneFile(e,r,n,i,s);return this.closeAndEvict(e,n,s),{ok:!0,edges:l}}catch(l){if(l instanceof Ba)return{ok:!1,deadlineExceeded:!0,reason:$e.batchTimedOut(a)};let c=l instanceof Error?l.message:String(l),u=this.languageConfig.isNotApplicableFileError?.(c)===!0;return u||this.logger.warn($e.resolutionFailedForFile(n),{error:c}),this.closeAndEvict(e,n,s),{ok:!1,deadlineExceeded:!1,reason:c,...u?{notApplicable:!0}:{}}}}closeOpenFile(e,r,n){n.delete(r.relativePath),e.notify(Yt.DID_CLOSE,{textDocument:{uri:r.uri}})}closeAndEvict(e,r,n){let i=n.openFileCache.get(r);i&&this.closeOpenFile(e,i,n.openFileCache)}markUnreachedFilesFailed(e,r,n,i){let s=new Set([...r,...n.map(o=>o.file)]);for(let o of e)s.has(o)||n.push({file:o,reason:$e.batchTimedOut(i),retryable:!0})}qualifiedContainerName(e){if(!(!this.languageConfig.supportsQualifiedContainment||!e))return Qd(e,this.languageConfig)}resolveNodeKeyForFile(e,r,n,i,s,o){let a=e.usedNodeKeysByFile.get(r);if(!a){a={used:new Set([r]),resolved:new Map},e.usedNodeKeysByFile.set(r,a);let p=[...Ha(n,this.containmentKinds)].sort((d,f)=>d.symbol.selectionRange.start.line-f.symbol.selectionRange.start.line);for(let{symbol:d,containerName:f}of p){let m=`${d.name}@${d.selectionRange.start.line}`;if(a.resolved.has(m))continue;let _=Ln(a.used,Is(r,Qd(d.name,this.languageConfig),this.qualifiedContainerName(f)),d.selectionRange.start.line);a.used.add(_),a.resolved.set(m,_)}}let l=`${i}@${s}`,c=a.resolved.get(l);if(c)return c;let u=Ln(a.used,Is(r,Qd(i,this.languageConfig),this.qualifiedContainerName(o)),s);return a.used.add(u),a.resolved.set(l,u),u}async processOneFile(e,r,n,i,s){let o=i?.[n];return this.languageConfig.definitionResolution==="forward"&&o&&o.length>0?this.processOneFileForward(e,r,n,o,s):this.processOneFileReverse(e,r,n,s)}async processOneFileReverse(e,r,n,i){let s=await this.openAndGetSymbols(e,r,n,i),o=Ha(s.symbols,this.containmentKinds),a=await Promise.all(o.map(({symbol:c})=>e.request(Yt.REFERENCES,{textDocument:{uri:s.uri},position:c.selectionRange.start,context:{includeDeclaration:!1}},this.requestTimeoutMs))),l=[];for(let c=0;c<o.length;c++){let{symbol:u,containerName:p}=o[c],d=a[c]??[],f=Ii(this.resolveNodeKeyForFile(i,n,s.symbols,u.name,u.selectionRange.start.line,p));for(let m of d){let _=await this.resolveReferenceEdge(e,r,m,f,n,i);_&&l.push(_)}}return l}async processOneFileForward(e,r,n,i,s){let o=await this.openAndGetSymbols(e,r,n,s),a=[],l=await Promise.all(i.map(({startLine:c,startColumn:u})=>e.request(Yt.DEFINITION,{textDocument:{uri:o.uri},position:{line:c,character:u}},this.requestTimeoutMs)));for(let c=0;c<i.length;c++){let{startLine:u,startColumn:p}=i[c],d=await this.resolveFirstDefinitionTarget(e,r,n,l[c],s);if(d===void 0)continue;let f=Ua(o.symbols,{line:u,character:p},this.containmentKinds),m=f&&xa.has(f.symbol.kind)?Ii(this.resolveNodeKeyForFile(s,n,o.symbols,f.symbol.name,f.symbol.selectionRange.start.line,f.containerName)):n;m!==d&&a.push({sourceNodeKey:m,targetNodeKey:d,source:dc.LSP})}return a}async resolveFirstDefinitionTarget(e,r,n,i,s){if(!i)return;let o=Array.isArray(i)?i:[i];for(let a=0;a<o.length;a++){let l=await this.resolveTargetNodeKey(e,r,n,o[a],s);if(l!==void 0)return a>0&&this.logger.debug($e.skippedMultiLocationDefinition(n)),l}}async resolveTargetNodeKey(e,r,n,i,s){let o=yi.relative(r,Z_(i.uri));if(yi.isAbsolute(o)||o.startsWith(".."))return;let a=Ii(o);if(a===n)return;let l=await this.openAndGetSymbols(e,r,a,s),c=Ua(l.symbols,i.range.start,this.containmentKinds);return c&&xa.has(c.symbol.kind)?Ii(this.resolveNodeKeyForFile(s,a,l.symbols,c.symbol.name,c.symbol.selectionRange.start.line,c.containerName)):a}async resolveReferenceEdge(e,r,n,i,s,o){let a=yi.relative(r,Z_(n.uri));if(yi.isAbsolute(a)||a.startsWith(".."))return;let l=Ii(a);if(l===s)return;let c=await this.openAndGetSymbols(e,r,l,o),u=Ua(c.symbols,n.range.start,this.containmentKinds);return{sourceNodeKey:u&&xa.has(u.symbol.kind)?Ii(this.resolveNodeKeyForFile(o,l,c.symbols,u.symbol.name,u.symbol.selectionRange.start.line,u.containerName)):l,targetNodeKey:i,source:dc.LSP}}async openAndGetSymbols(e,r,n,i){let s=i.openFileCache,o=s.get(n);if(o)return s.delete(n),s.set(n,o),o;let a=i.inFlightOpens.get(n);if(a)return a;let l=this.doOpenAndGetSymbols(e,r,n,i).finally(()=>i.inFlightOpens.delete(n));return i.inFlightOpens.set(n,l),l}pickEvictionVictim(e){for(let[r,n]of e.openFileCache)if(!e.pinnedPaths.has(r))return n}async doOpenAndGetSymbols(e,r,n,i){for(;i.openFileCache.size+i.inFlightOpens.size>=this.maxOpenFiles;){let p=this.pickEvictionVictim(i);if(!p)break;this.closeOpenFile(e,p,i.openFileCache)}let s=Q_(r,n),o=await Av.readFile(s,H),a=X_(s).toString();e.notify(Yt.DID_OPEN,{textDocument:{uri:a,languageId:this.languageIdFor(n),version:1,text:o}});let l=await e.request(Yt.DOCUMENT_SYMBOL,{textDocument:{uri:a}},this.requestTimeoutMs),c=Pv(l),u={relativePath:n,uri:a,symbols:c};return i.openFileCache.set(n,u),u}};var Ka="typescript",vv={".ts":Ka,".mts":Ka,".cts":Ka,".tsx":"typescriptreact",".js":"javascript",".mjs":"javascript",".cjs":"javascript",".jsx":"javascriptreact"},bv=/(?:^|\r?\n)Could not find source file:\s*['"][^'"\r\n]+['"]\.?\s*(?:\r?\n|$)/i,wv={name:wt.PACKAGE_NAME,tierBLanguageId:B.TYPESCRIPT,languageIdByExtension:vv,defaultLanguageId:Ka,resolveBinary:ba,checkPreflight:Y_,isNotApplicableFileError:t=>bv.test(t),supportsQualifiedContainment:!0,initializationOptions:{maxTsServerMemory:Pa},definitionResolution:"forward",unavailableReasonForUnresolvableBinary:Ai.binaryUnresolvable},$a=class extends Ge{constructor(e,r){super(wv,e,r)}};import Fv from"fs";import Mv from"path";import{execFile as kv}from"child_process";import{promisify as Gv}from"util";var ot={PACKAGE_NAME:"pyright",BINARY_NAME:"pyright-langserver",NPX_COMMAND:"npx",NPX_NO_INSTALL_FLAG:"--no-install",STDIO_ARG:"--stdio",VERSION_FLAG:"--version"},Ds={binaryUnresolvable:"pyright-langserver is not resolvable (no local node_modules/.bin copy and `npx --no-install` cannot find pyright) -- install pyright as a project devDependency (`npm install -D pyright`) to enable LSP-precision cross-file edges for Python",markerFileMissing:"no pyproject.toml/requirements.txt found at the workspace root"};var tS=Gv(kv),rS=5e3,xv=[oe.PYPROJECT_TOML,oe.REQUIREMENTS_TXT];function Uv(t){return xv.some(e=>Fv.existsSync(Mv.join(t,e)))}async function Hv(t){let e=[ot.NPX_NO_INSTALL_FLAG,ot.PACKAGE_NAME,ot.VERSION_FLAG];try{if(Xr(ot.NPX_COMMAND)){let r=await Ri(ot.NPX_COMMAND,e,void 0);await tS(r,[],{cwd:t,timeout:rS,shell:!0})}else await tS(ot.NPX_COMMAND,e,{cwd:t,timeout:rS});return!0}catch{return!1}}async function nS(t,e){let r=Uv(t),i=sr(t,{packageName:ot.PACKAGE_NAME,binaryName:ot.BINARY_NAME,defaultArgs:[ot.STDIO_ARG]},e).locallyResolved?!0:await Hv(t);return r?i?{markerFileResolvable:r,lspBinaryResolvable:i,ready:!0}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:Ds.binaryUnresolvable}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:Ds.markerFileMissing}}var iS="python",Bv={".py":iS},Kv={name:ot.PACKAGE_NAME,tierBLanguageId:B.PYTHON,languageIdByExtension:Bv,defaultLanguageId:iS,resolveBinary:(t,e)=>sr(t,{packageName:ot.PACKAGE_NAME,binaryName:ot.BINARY_NAME,defaultArgs:[ot.STDIO_ARG]},e),checkPreflight:nS,supportsQualifiedContainment:!0,definitionResolution:"reverse",unavailableReasonForUnresolvableBinary:Ds.binaryUnresolvable},Ya=class extends Ge{constructor(e,r){super(Kv,e,r)}};import $v from"fs";import Zd from"path";import Yv from"os";var bn={BINARY_NAME:"gopls",DEFAULT_ARGS:[]};function sS(t){let e=/^\((\*?)([^(]*)\)\.(.+)$/.exec(t);if(!e)return t;let[,,r,n]=e;return`${r}.${n}`}var Xd={binaryUnresolvable:"gopls is not resolvable (not found on PATH, $GOBIN, $GOPATH/bin, or ~/go/bin) -- install gopls to enable LSP-precision cross-file edges for Go",markerFileMissing:"no go.mod found at the workspace root"};function Wv(t){return $v.existsSync(Zd.join(t,oe.GO_MOD))}function jv(t){let e=[];return t.env.GOBIN&&e.push(t.env.GOBIN),t.env.GOPATH&&e.push(Zd.join(t.env.GOPATH,"bin")),e.push(Zd.join(Yv.homedir(),"go","bin")),e}async function oS(t,e,r=or){let n=Wv(t),s=(await Ce({binaryName:bn.BINARY_NAME,defaultArgs:bn.DEFAULT_ARGS,extraCandidateDirs:jv(r)},e)).locallyResolved;return n?s?{markerFileResolvable:n,lspBinaryResolvable:s,ready:!0}:{markerFileResolvable:n,lspBinaryResolvable:s,ready:!1,reason:Xd.binaryUnresolvable}:{markerFileResolvable:n,lspBinaryResolvable:s,ready:!1,reason:Xd.markerFileMissing}}var aS="go",Vv={".go":aS},zv={name:bn.BINARY_NAME,tierBLanguageId:B.GO,languageIdByExtension:Vv,defaultLanguageId:aS,resolveBinary:(t,e)=>Ce({binaryName:bn.BINARY_NAME,defaultArgs:bn.DEFAULT_ARGS},e),checkPreflight:oS,supportsQualifiedContainment:!1,normalizeSymbolName:sS,definitionResolution:"reverse"},Wa=class extends Ge{constructor(e,r){super(zv,e,r)}};import tb from"path";import rb from"os";import Jv from"fs";import ep from"path";import qv from"os";var Zr={BINARY_NAME:"rust-analyzer",DEFAULT_ARGS:[]},ja={binaryUnresolvable:"rust-analyzer is not resolvable (not found on PATH, $CARGO_HOME/bin, or ~/.cargo/bin) -- install rust-analyzer to enable LSP-precision cross-file edges for Rust",binaryNotSpawnable:"rust-analyzer resolves on PATH but cannot be spawned -- usually a rustup proxy for a component that isn't installed; run `rustup component add rust-analyzer` (or install rust-analyzer) to enable LSP-precision cross-file edges for Rust",markerFileMissing:"no Cargo.toml found at the workspace root"};function lS(t){return t.startsWith("impl ")?t.slice(5):t}function Qv(t){return Jv.existsSync(ep.join(t,oe.CARGO_TOML))}function Xv(t){return ep.join(t.env.CARGO_HOME??ep.join(qv.homedir(),".cargo"),"bin")}var Zv=5e3;async function eb(t,e){return H_(t,Zv,e)}async function cS(t,e,r=or){let n=Qv(t),i=await Ce({binaryName:Zr.BINARY_NAME,defaultArgs:Zr.DEFAULT_ARGS,extraCandidateDirs:[Xv(r)]},e),s=i.locallyResolved,o=!s||await eb(i.command,i.fromUserOverride?void 0:[Zr.BINARY_NAME]);return n?s?o?{markerFileResolvable:n,lspBinaryResolvable:s,lspBinarySpawnable:o,ready:!0}:{markerFileResolvable:n,lspBinaryResolvable:s,lspBinarySpawnable:o,ready:!1,reason:ja.binaryNotSpawnable}:{markerFileResolvable:n,lspBinaryResolvable:s,lspBinarySpawnable:o,ready:!1,reason:ja.binaryUnresolvable}:{markerFileResolvable:n,lspBinaryResolvable:s,lspBinarySpawnable:o,ready:!1,reason:ja.markerFileMissing}}var uS="rust",nb={".rs":uS};function ib(){return tb.join(rb.homedir(),".cargo","bin")}var sb={name:Zr.BINARY_NAME,tierBLanguageId:B.RUST,languageIdByExtension:nb,defaultLanguageId:uS,resolveBinary:(t,e)=>Ce({binaryName:Zr.BINARY_NAME,defaultArgs:Zr.DEFAULT_ARGS,extraCandidateDirs:[ib()]},e),checkPreflight:cS,supportsQualifiedContainment:!0,containmentSymbolKinds:new Set([yr.CLASS,yr.OBJECT]),normalizeSymbolName:lS,definitionResolution:"reverse",coldStartSettleMs:8e3,processMemoryEstimateMb:2048},Va=class extends Ge{constructor(e,r){super(sb,e,r)}};import ob from"fs";import dS from"path";var wn={BINARY_NAME:"clangd",DEFAULT_ARGS:[]},tp={binaryUnresolvable:"clangd is not resolvable (not found on PATH or common LLVM install locations) -- install clangd to enable LSP-precision cross-file edges for C/C++",markerFileMissing:"no compile_commands.json/CMakeLists.txt found at the workspace root"};var ab=["compile_commands.json","CMakeLists.txt"];function lb(t){return ab.some(e=>ob.existsSync(dS.join(t,e)))}function cb(t){return t.platform===br?[dS.join(t.env.ProgramFiles??"C:\\Program Files","LLVM","bin")]:t.platform==="darwin"?["/opt/homebrew/opt/llvm/bin","/usr/local/opt/llvm/bin"]:["/usr/lib/llvm/bin","/usr/local/bin"]}async function pS(t,e,r=or){let n=lb(t),s=(await Ce({binaryName:wn.BINARY_NAME,defaultArgs:wn.DEFAULT_ARGS,extraCandidateDirs:cb(r)},e)).locallyResolved;return n?s?{markerFileResolvable:n,lspBinaryResolvable:s,ready:!0}:{markerFileResolvable:n,lspBinaryResolvable:s,ready:!1,reason:tp.binaryUnresolvable}:{markerFileResolvable:n,lspBinaryResolvable:s,ready:!1,reason:tp.markerFileMissing}}var Ir="cpp",ub={".c":"c",".h":"c",".cpp":Ir,".cxx":Ir,".cc":Ir,".hpp":Ir,".hxx":Ir,".hh":Ir,".cu":Ir,".cuh":Ir},db={name:wn.BINARY_NAME,tierBLanguageId:B.CPP,languageIdByExtension:ub,defaultLanguageId:Ir,resolveBinary:(t,e)=>Ce({binaryName:wn.BINARY_NAME,defaultArgs:wn.DEFAULT_ARGS},e),checkPreflight:pS,supportsQualifiedContainment:!1,definitionResolution:"reverse"},za=class extends Ge{constructor(e,r){super(db,e,r)}};import pb from"fs";import Ja from"path";import gS from"os";var Fn={BINARY_NAME:"jdtls",DEFAULT_ARGS:[]},rp={binaryUnresolvable:"jdtls is not resolvable (not found on PATH or common install locations) -- install jdtls to enable LSP-precision cross-file edges for Java",markerFileMissing:"no pom.xml/build.gradle found at the workspace root"};var gb=["pom.xml","build.gradle"];function fb(t){return gb.some(e=>pb.existsSync(Ja.join(t,e)))}function mb(t){return t.platform===br?[Ja.join(gS.homedir(),"scoop","shims"),Ja.join(t.env.ChocolateyInstall??"C:\\ProgramData\\chocolatey","bin")]:t.platform==="darwin"?["/opt/homebrew/bin","/usr/local/bin"]:["/usr/local/bin","/usr/bin",Ja.join(gS.homedir(),".local","share","jdtls","bin")]}async function fS(t,e,r=or){let n=fb(t),s=(await Ce({binaryName:Fn.BINARY_NAME,defaultArgs:Fn.DEFAULT_ARGS,extraCandidateDirs:mb(r)},e)).locallyResolved;return n?s?{markerFileResolvable:n,lspBinaryResolvable:s,ready:!0}:{markerFileResolvable:n,lspBinaryResolvable:s,ready:!1,reason:rp.binaryUnresolvable}:{markerFileResolvable:n,lspBinaryResolvable:s,ready:!1,reason:rp.markerFileMissing}}var mS="java",hb={".java":mS},Eb={name:Fn.BINARY_NAME,tierBLanguageId:B.JAVA,languageIdByExtension:hb,defaultLanguageId:mS,resolveBinary:(t,e)=>Ce({binaryName:Fn.BINARY_NAME,defaultArgs:Fn.DEFAULT_ARGS},e),checkPreflight:fS,supportsQualifiedContainment:!0,definitionResolution:"reverse"},qa=class extends Ge{constructor(e,r){super(Eb,e,r)}};import _b from"fs";import Sb from"path";import Tb from"os";var Mn={BINARY_NAME:"csharp-ls",DEFAULT_ARGS:[]},np={binaryUnresolvable:"csharp-ls is not resolvable (not found on PATH or ~/.dotnet/tools) -- install it with `dotnet tool install --global csharp-ls` to enable LSP-precision cross-file edges for C#",markerFileMissing:"no solution (.sln/.slnx) or project file (*.csproj) found at the workspace root"};function Ab(){return Sb.join(Tb.homedir(),".dotnet","tools")}function Rb(t){try{return _b.readdirSync(t).some(r=>r.endsWith(".sln")||r.endsWith(".slnx")||r.endsWith(".csproj"))}catch{return!1}}async function hS(t,e){let r=Rb(t),i=(await Ce({binaryName:Mn.BINARY_NAME,defaultArgs:Mn.DEFAULT_ARGS,extraCandidateDirs:[Ab()]},e)).locallyResolved;return r?i?{markerFileResolvable:r,lspBinaryResolvable:i,ready:!0}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:np.binaryUnresolvable}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:np.markerFileMissing}}var ES="csharp",yb={".cs":ES},Ib={name:Mn.BINARY_NAME,tierBLanguageId:B.CSHARP,languageIdByExtension:yb,defaultLanguageId:ES,resolveBinary:(t,e)=>Ce({binaryName:Mn.BINARY_NAME,defaultArgs:Mn.DEFAULT_ARGS},e),checkPreflight:hS,supportsQualifiedContainment:!0,definitionResolution:"reverse"},Qa=class extends Ge{constructor(e,r){super(Ib,e,r)}};import Ob from"fs";import Lb from"path";import{execFile as Nb}from"child_process";import{promisify as Cb}from"util";var Ot={PACKAGE_NAME:"intelephense",NPX_COMMAND:"npx",NPX_NO_INSTALL_FLAG:"--no-install",STDIO_ARG:"--stdio",VERSION_FLAG:"--version"},vs={binaryUnresolvable:"intelephense is not resolvable (no local node_modules/.bin copy and `npx --no-install` cannot find intelephense) -- install intelephense as a project devDependency (`npm install -D intelephense`) to enable LSP-precision cross-file edges for PHP",markerFileMissing:"no composer.json found at the workspace root"};var _S=Cb(Nb),SS=5e3;function Pb(t){return Ob.existsSync(Lb.join(t,"composer.json"))}async function Db(t){let e=[Ot.NPX_NO_INSTALL_FLAG,Ot.PACKAGE_NAME,Ot.VERSION_FLAG];try{if(Xr(Ot.NPX_COMMAND)){let r=await Ri(Ot.NPX_COMMAND,e,void 0);await _S(r,[],{cwd:t,timeout:SS,shell:!0})}else await _S(Ot.NPX_COMMAND,e,{cwd:t,timeout:SS});return!0}catch{return!1}}async function TS(t,e){let r=Pb(t),i=sr(t,{packageName:Ot.PACKAGE_NAME,defaultArgs:[Ot.STDIO_ARG]},e).locallyResolved?!0:await Db(t);return r?i?{markerFileResolvable:r,lspBinaryResolvable:i,ready:!0}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:vs.binaryUnresolvable}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:vs.markerFileMissing}}var kn="php",vb={".php":kn,".phtml":kn,".php3":kn,".php4":kn,".php5":kn,".phps":kn},bb={name:Ot.PACKAGE_NAME,tierBLanguageId:B.PHP,languageIdByExtension:vb,defaultLanguageId:kn,resolveBinary:(t,e)=>sr(t,{packageName:Ot.PACKAGE_NAME,defaultArgs:[Ot.STDIO_ARG]},e),checkPreflight:TS,supportsQualifiedContainment:!0,definitionResolution:"reverse",unavailableReasonForUnresolvableBinary:vs.binaryUnresolvable},Xa=class extends Ge{constructor(e,r){super(bb,e,r)}};import wb from"fs";import sp from"path";import Fb from"os";var Gn={BINARY_NAME:"ruby-lsp",DEFAULT_ARGS:[]},ip={binaryUnresolvable:"ruby-lsp is not resolvable (not found on PATH, ~/.rbenv/shims, or ~/.rvm/bin) -- install ruby-lsp to enable LSP-precision cross-file edges for Ruby",markerFileMissing:"no Gemfile or Gemfile.lock found at the workspace root"};var Mb=["Gemfile","Gemfile.lock"];function kb(t){return Mb.some(e=>wb.existsSync(sp.join(t,e)))}function Gb(){if(process.platform==="win32")return[];let t=Fb.homedir();return[sp.join(t,".rbenv","shims"),sp.join(t,".rvm","bin")]}async function AS(t,e){let r=kb(t),i=(await Ce({binaryName:Gn.BINARY_NAME,defaultArgs:Gn.DEFAULT_ARGS,extraCandidateDirs:Gb()},e)).locallyResolved;return r?i?{markerFileResolvable:r,lspBinaryResolvable:i,ready:!0}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:ip.binaryUnresolvable}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:ip.markerFileMissing}}var Za="ruby",xb={".rb":Za,".rake":Za,".gemspec":Za},Ub={name:Gn.BINARY_NAME,tierBLanguageId:B.RUBY,languageIdByExtension:xb,defaultLanguageId:Za,resolveBinary:(t,e)=>Ce({binaryName:Gn.BINARY_NAME,defaultArgs:Gn.DEFAULT_ARGS},e),checkPreflight:AS,supportsQualifiedContainment:!0,definitionResolution:"reverse"},el=class extends Ge{constructor(e,r){super(Ub,e,r)}};function Hb(t){return t===null?!0:typeof t=="number"?Number.isFinite(t):typeof t=="string"||typeof t=="boolean"}function RS(t,e=[]){return!st(t)||!yt(t,["text",...e],["attributes"])||typeof t.text!="string"?!1:Object.hasOwn(t,"attributes")?st(t.attributes)&&Reflect.ownKeys(t.attributes).every(r=>typeof r=="string"&&Hb(t.attributes[r])):!0}function Bb(t){return!RS(t,["id","kind"])||!qe(t.id)?!1:Object.values(dn).some(e=>e===t.kind)}function Kb(t,e){if(!Array.from(t).every(Bb))return!1;let r=t,n=i=>r.filter(s=>s.kind===i).length;return new Set(r.map(i=>i.id)).size!==r.length||n(dn.UNKNOWN)!==1||n(dn.VERIFY)>1?!1:e!==pc.NEEDS_VERIFICATION||n(dn.CANDIDATE)===0&&n(dn.VERIFY)===1}function $b(t){if(t.length>Wn.MAX_OPTIONS)throw new E(T.SEMANTIC_INPUT_LIMIT_EXCEEDED,"Semantic option limit exceeded");if(!Er(t))throw new E(T.SEMANTIC_INVALID_REQUEST,"Semantic options must be a dense data array");if(t.filter(r=>st(r)&&r.kind===dn.CANDIDATE).length>Wn.MAX_CANDIDATES)throw new E(T.SEMANTIC_INPUT_LIMIT_EXCEEDED,"Semantic option limit exceeded")}function Yb(t){return!st(t)||!yt(t,[...cs,"task","language","relation","context","options"])||!bc(t)||!qe(t.language)||!qe(t.relation)||!Object.values(pc).some(e=>e===t.task)?!1:RS(t.context)&&Array.isArray(t.options)&&Kb(t.options,t.task)}function yS(t){if(st(t)&&Array.isArray(t.options)&&$b(t.options),!Yb(t))throw new E(T.SEMANTIC_INVALID_REQUEST,"Invalid semantic decision request");let e=JSON.stringify(t);if(Buffer.byteLength(e,"utf8")>Wn.MAX_INPUT_BYTES)throw new E(T.SEMANTIC_INPUT_LIMIT_EXCEEDED,"Semantic request UTF-8 byte limit exceeded");return JSON.parse(e)}function Wb(t){let e=["provider","modelId","modelVersion","artifactHash"];return st(t)&&yt(t,e)&&e.every(r=>qe(t[r]))}function jb(t){return t.scoreKind===gc.RAW?t.calibrationVersion===null:t.scoreKind===gc.CALIBRATED&&qe(t.calibrationVersion)}function Vb(t,e){return st(t)&&yt(t,["optionId","probability"])&&t.optionId===e&&Lf(t.probability)}function zb(t,e){if(!yt(e,[...cs,"status","scores","model","scoreKind","calibrationVersion"])||!Wb(e.model)||!jb(e))return!1;let r=e.scores;return Array.isArray(r)&&r.length===t.options.length&&Er(r)&&t.options.every((n,i)=>Vb(r[i],n.id))}function Jb(t){return yt(t,[...cs,"status","scores","unavailableCode","unavailableReason"])?Array.isArray(t.scores)&&t.scores.length===0&&Er(t.scores)&&qe(t.unavailableReason)&&Object.values(Js).some(e=>e===t.unavailableCode):!1}function qb(t,e){return!st(e)||!Nf(t,e)?!1:e.status===Wi.SCORED?zb(t,e):e.status===Wi.UNAVAILABLE&&Jb(e)}function IS(t,e){if(!qb(t,e))throw new E(T.SEMANTIC_INVALID_RESPONSE,"Invalid semantic decision response");return JSON.parse(JSON.stringify(e))}var tl=class{validateRequest(e){return yS(e)}validateOutcome(e,r){return IS(this.validateRequest(e),r)}};import Oi from"fs/promises";var Qb={maxWaitMs:1e4,retryIntervalMs:100,heartbeatIntervalMs:1e4,staleAfterMs:3e4};function Xb(t){return new Promise(e=>setTimeout(e,t))}function Zb(t){try{return process.kill(t,0),!0}catch(e){return e.code===fn}}async function ew(t){try{let e=Number.parseInt(await Oi.readFile(t,H),10);return Number.isFinite(e)?e:void 0}catch{return}}async function tw(t,e){let r=await Oi.stat(t).catch(()=>{});if(!r||Date.now()-r.mtimeMs<=e)return!1;let n=await ew(t);return n!==void 0&&Zb(n)?!1:(await Oi.rm(t,{force:!0}).catch(()=>{}),!0)}function rw(t){let e=t.code;return e===zn||e===fn||e===Jn||e===qn}async function nw(t){try{let e=await Oi.open(t,"wx");return await e.writeFile(String(process.pid)),await e.close(),!0}catch(e){if(!rw(e))throw e;return!1}}async function OS(t,e={}){let r={...Qb,...e},n=Date.now()+r.maxWaitMs,i=!1;for(;!await nw(t);)if(i||(i=!0,e.onWaiting?.()),!await tw(t,r.staleAfterMs)){if(Date.now()>n)throw new eo(t);await Xb(r.retryIntervalMs)}let s=setInterval(()=>{let a=new Date;Oi.utimes(t,a,a).catch(()=>{})},r.heartbeatIntervalMs);s.unref?.();let o=!1;return{async release(){o||(o=!0,clearInterval(s),await Oi.rm(t,{force:!0}).catch(()=>{}))}}}function iw(t=y,e={}){let r=e.createAstWorkerPool??(()=>new ua);t.register(A.KnowledgeGitService,(i,s)=>new Ao(i.resolve(A.GitProvider),s?.logger,s?.gitNetworkTimeoutMs)),t.register(A.FileDiscovery,(i,s)=>new ia(i.resolve(A.GitProvider),s?.logger)),t.register(A.ConfigScanner,(i,s)=>new oa(s?.logger)),t.register(A.VcsScanner,(i,s)=>new la(i.resolve(A.GitProvider),s?.logger));let n;t.register(A.AstProcessor,(i,s)=>(n??=r(),new da(n,s?.logger))),t.register(A.GraphPersister,()=>new _a),t.register(A.TempFileManager,()=>(i,s)=>new Ta(i,s)),t.register(A.ProcessLock,()=>OS),t.register(A.SemanticCorpusService,()=>new To),t.register(A.SemanticDecisionValidator,()=>new tl),t.register(A.QueryService,(i,s)=>new Ra(s?.logger)),t.register(A.TierBCoverageHintProvider,()=>({resolve:qi})),t.register(A.ImpactService,(i,s)=>new Ia(s?.logger)),t.register(A.ChangeDetectionService,(i,s)=>new yo(i.resolve(A.ImpactService,s),s?.logger)),t.register(A.TopologyBuilder,()=>new Oa),t.register(A.SnapshotRenderer,()=>new Ro),t.register(A.HydrationService,(i,s)=>new Io(i.resolve(A.GitProvider),s?.logger)),t.register(A.SemanticDiffAnalyzer,(i,s)=>new Na(s?.logger)),t.register(A.EdgeResolutionProviders,(i,s)=>({typescript:()=>new $a(s?.logger),python:()=>new Ya(s?.logger),go:()=>new Wa(s?.logger),rust:()=>new Va(s?.logger),cpp:()=>new za(s?.logger),java:()=>new qa(s?.logger),csharp:()=>new Qa(s?.logger),php:()=>new Xa(s?.logger),ruby:()=>new el(s?.logger)}))}iw();var en={METHOD_POST:"POST",HEADER_AUTHORIZATION:"Authorization",HEADER_CONTENT_TYPE:"Content-Type",CONTENT_TYPE_JSON:"application/json",bearerAuth:t=>`Bearer ${t}`};var ar={CLIENT_USED_BEFORE_INITIALIZE:"FetchRemoteSyncClient used before initialize() was called",FETCH_L2_NODES_FAILED:"Failed to fetch remote L2 nodes",fetchL2NodesFailedWithReason:t=>`Failed to fetch remote L2 nodes: ${t}`,FETCH_L2_NODES_INVALID_JSON:"Failed to fetch remote L2 nodes: response body was not valid JSON",FETCH_L2_NODES_INVALID_RESPONSE:"Failed to fetch remote L2 nodes: response body did not match the remote-node contract",SYNC_PUSH_FAILED:"Sync push failed",syncPushFailedWithReason:t=>`Sync push failed: ${t}`,SYNC_PUSH_INVALID_JSON:"Sync push failed: response body was not valid JSON",SYNC_PUSH_INVALID_RESPONSE:"Sync push failed: response body did not match the sync-push contract"};var op={l2Nodes:t=>`/projects/${t}/l2-nodes`,SYNC_PUSH:"/sync/push"};function LS(t,e){if(typeof t!="object"||t===null||Array.isArray(t))throw new TypeError(`${e} must be an object`);return t}function NS(t,e){if(typeof t!="number"||!Number.isFinite(t))throw new TypeError(`${e} must be a finite number`);return t}function CS(t){if(!Array.isArray(t))throw new TypeError("response must be an array");for(let[e,r]of t.entries()){let n=LS(r,`response[${e}]`);if(NS(n.id,`response[${e}].id`),typeof n.name!="string")throw new TypeError(`response[${e}].name must be a string`)}return t}function PS(t){let e=LS(t,"response");if(typeof e.success!="boolean")throw new TypeError("response.success must be a boolean");return NS(e.processed,"response.processed"),t}var DS=3e4,bs=class{config;initialize(e){this.config=e}getConfig(){if(!this.config)throw new E(T.SYNC_FETCH_FAILED,ar.CLIENT_USED_BEFORE_INITIALIZE);return this.config}async parseErrorBody(e){try{return(await e.json()).error??e.statusText}catch{return e.statusText}}async fetchRemoteL2Nodes(e){let{apiUrl:r,pat:n}=this.getConfig(),i;try{i=await fetch(`${r}${op.l2Nodes(e)}`,{headers:{[en.HEADER_AUTHORIZATION]:en.bearerAuth(n)},signal:AbortSignal.timeout(DS)})}catch(o){throw E.wrap(T.SYNC_FETCH_FAILED,ar.FETCH_L2_NODES_FAILED,o)}if(!i.ok){let o=await this.parseErrorBody(i);throw new E(T.SYNC_FETCH_FAILED,ar.fetchL2NodesFailedWithReason(o))}let s;try{s=await i.json()}catch(o){throw E.wrap(T.SYNC_FETCH_FAILED,ar.FETCH_L2_NODES_INVALID_JSON,o)}try{return CS(s)}catch(o){throw E.wrap(T.SYNC_FETCH_FAILED,ar.FETCH_L2_NODES_INVALID_RESPONSE,o)}}async pushSyncEvents(e,r){let{apiUrl:n,pat:i}=this.getConfig(),s;try{s=await fetch(`${n}${op.SYNC_PUSH}`,{method:en.METHOD_POST,headers:{[en.HEADER_CONTENT_TYPE]:en.CONTENT_TYPE_JSON,[en.HEADER_AUTHORIZATION]:en.bearerAuth(i)},body:JSON.stringify({projectId:Number(e),events:r}),signal:AbortSignal.timeout(DS)})}catch(a){throw E.wrap(T.SYNC_PUSH_FAILED,ar.SYNC_PUSH_FAILED,a)}if(!s.ok){let a=await this.parseErrorBody(s);throw new E(T.SYNC_PUSH_FAILED,ar.syncPushFailedWithReason(a))}let o;try{o=await s.json()}catch(a){throw E.wrap(T.SYNC_PUSH_FAILED,ar.SYNC_PUSH_INVALID_JSON,a)}try{return PS(o)}catch(a){throw E.wrap(T.SYNC_PUSH_FAILED,ar.SYNC_PUSH_INVALID_RESPONSE,a)}}};y.register(A.RemoteSyncClient,()=>()=>new bs);var at={METHOD_POST:"POST",METHOD_GET:"GET",HEADER_CONTENT_TYPE:"Content-Type",HEADER_AUTHORIZATION:"Authorization",CONTENT_TYPE_JSON:"application/json",CONTENT_TYPE_EVENT_STREAM:"text/event-stream",SSE_DATA_PREFIX:"data: ",SSE_DONE_SENTINEL:"[DONE]",SSE_BLOCK_SEPARATOR:`
149
+ `,JSON_RPC_VERSION:"2.0"},zd={CONTENT_MODIFIED:-32801,SERVER_CANCELLED:-32802},Jd={MAX_ATTEMPTS:3,BACKOFF_MS:25},Yt={INITIALIZE:"initialize",INITIALIZED:"initialized",SHUTDOWN:"shutdown",EXIT:"exit",DID_OPEN:"textDocument/didOpen",DID_CLOSE:"textDocument/didClose",DOCUMENT_SYMBOL:"textDocument/documentSymbol",REFERENCES:"textDocument/references",DEFINITION:"textDocument/definition"},yr={NAMESPACE:3,CLASS:5,METHOD:6,CONSTRUCTOR:9,FUNCTION:12,OBJECT:19},$e={clientNotRunning:t=>`LSP request "${t}" attempted after the client stopped running`,clientStoppedBeforeResponse:"LSP client stopped before the server responded to the request",requestTimedOut:(t,e)=>`LSP request "${t}" timed out after ${e}ms`,serverExited:(t,e)=>`LSP server process exited (code=${String(t)}) before responding`+(e?` -- stderr: ${e}`:""),spawnFailed:(t,e)=>`Failed to spawn LSP server "${t}": ${e}`,initializeFailed:t=>`LSP server exited before completing its initialize handshake: ${t}`,batchTimedOut:t=>`Tier B LSP batch exceeded its ${t}ms timeout and was aborted`,resolutionFailedForFile:t=>`Tier B LSP resolution failed for ${t}`,skippedMultiLocationDefinition:t=>`Tier B forward resolution: first definition result for ${t} resolved outside the workspace; falling through to the next in-workspace result`,concurrencyClamped:(t,e)=>`Tier B LSP batch: maxConcurrentFiles=${t} clamped to ${e} (bounded by file count and maxOpenFiles)`,processShardsClamped:(t,e)=>`Tier B LSP batch: maxProcesses=${t} clamped to ${e} (bounded by file count)`,processShardsMemoryClamped:(t,e,r,n)=>`Tier B LSP batch: maxProcesses=${t} clamped to ${e} by memory (${r}MiB budget / ${n}MiB per shard)`};function j_(){return["pipe","pipe","pipe"]}var Ma=class extends Error{constructor(r,n){super(n);this.code=r;this.name="LspJsonRpcError"}code},sv=new Set([zd.CONTENT_MODIFIED,zd.SERVER_CANCELLED]);function ov(t){return t instanceof Ma&&t.code!==void 0&&sv.has(t.code)}var av=4e3,ka=class{child;buffer=Buffer.alloc(0);nextId=1;pending=new Map;stopped=!1;stderrTail="";async start(e){let r=Xr(e.command),n=e.env??Da(),i=r&&Vd(e.command)?await jd(e.command,e.env):e.command,s=r?W_([i,...e.args].map(Wd).join(" "),{cwd:e.cwd,stdio:j_(),shell:!0,env:n}):W_(e.command,e.args,{cwd:e.cwd,stdio:j_(),env:n});this.child=s,s.stdout.on("data",o=>this.onData(o)),s.stderr.on("data",o=>this.onStderr(o)),s.on("exit",o=>this.onExit(o)),s.on("error",o=>this.onError(o));try{await new Promise((o,a)=>{let l=()=>{s.removeListener("error",c),o()},c=u=>{s.removeListener("spawn",l),a(u)};s.once("spawn",l),s.once("error",c)})}catch(o){throw await this.stop(),o}}request(e,r,n){return!this.child||this.stopped?Promise.reject(new Error($e.clientNotRunning(e))):new Promise((i,s)=>{let o=n>0?Date.now()+n:void 0,a=0,l,c,u,p=!1,d=()=>{c&&clearTimeout(c),u&&clearTimeout(u),c=void 0,u=void 0},f=O=>{p||(p=!0,d(),l!==void 0&&this.pending.delete(l),l=void 0,O())},m=()=>{f(()=>s(new Error($e.requestTimedOut(e,n))))},_=()=>{if(p)return;if(!this.child||this.stopped){f(()=>s(new Error($e.clientNotRunning(e))));return}if(o!==void 0&&Date.now()>=o){m();return}a+=1;let O=this.nextId++;l=O,this.pending.set(O,{resolve:C=>f(()=>i(C)),reject:C=>{if(!ov(C)||a>=Jd.MAX_ATTEMPTS){f(()=>s(C));return}let w=o===void 0?1/0:o-Date.now();if(w<=0){m();return}u=setTimeout(()=>{if(u=void 0,!p){if(o!==void 0&&Date.now()>=o){m();return}this.pending.delete(O),l=void 0,_()}},Math.min(Jd.BACKOFF_MS,w))}}),this.write({jsonrpc:Pn.JSON_RPC_VERSION,id:O,method:e,params:r})};c=n>0?setTimeout(m,n):void 0,_()})}notify(e,r){!this.child||this.stopped||this.write({jsonrpc:Pn.JSON_RPC_VERSION,method:e,params:r})}async stop(){if(!this.child)return;this.stopped=!0;let e=this.child;this.child=void 0,this.rejectAllPending(new Error($e.clientStoppedBeforeResponse)),this.buffer=Buffer.alloc(0),this.stderrTail="",e.stdout.removeAllListeners("data"),e.stderr.removeAllListeners("data"),e.removeAllListeners("exit"),e.removeAllListeners("error"),e.removeAllListeners("spawn"),e.on("error",()=>{});try{e.stdin.end()}catch{}try{e.stdin.destroy(),e.stdout.destroy(),e.stderr.destroy()}catch{}try{e.kill()}catch{}try{e.unref()}catch{}}write(e){let r=JSON.stringify(e),n=`${Pn.CONTENT_LENGTH_HEADER_PREFIX}${Buffer.byteLength(r,H)}`+Pn.HEADER_BODY_SEPARATOR;this.child.stdin.write(n+r,H)}onData(e){for(this.buffer=Buffer.concat([this.buffer,e]);;)if(!this.tryConsumeOneMessage())return}tryConsumeOneMessage(){let e=this.buffer.indexOf(Pn.HEADER_BODY_SEPARATOR);if(e===-1)return!1;let r=this.buffer.subarray(0,e).toString(H),n=/Content-Length:\s*(\d+)/i.exec(r),i=e+Pn.HEADER_BODY_SEPARATOR.length;if(!n)return this.buffer=this.buffer.subarray(i),this.buffer.length>0;let s=Number(n[1]);if(this.buffer.length<i+s)return!1;let o=this.buffer.subarray(i,i+s).toString(H);return this.buffer=this.buffer.subarray(i+s),this.handleMessage(o),!0}handleMessage(e){let r;try{r=JSON.parse(e)}catch{return}if(r.id===void 0)return;let n=this.pending.get(r.id);n&&(r.error?n.reject(new Ma(typeof r.error.code=="number"?r.error.code:void 0,r.error.message??"")):n.resolve(r.result))}onStderr(e){this.stderrTail=(this.stderrTail+e.toString(H)).slice(-av)}onExit(e){this.stopped=!0,this.rejectAllPending(new Error($e.serverExited(e,this.stderrTail||void 0)))}onError(e){this.stopped=!0,this.rejectAllPending(e)}rejectAllPending(e){for(let r of this.pending.values())r.reject(e);this.pending.clear()}};import vn from"fs";import Ve from"path";var lv=[{languageId:B.RUST,basenames:[oe.CARGO_TOML],suffixes:[]},{languageId:B.GO,basenames:[oe.GO_MOD],suffixes:[]},{languageId:B.TYPESCRIPT,basenames:[oe.PACKAGE_JSON,oe.TSCONFIG_JSON,oe.JSCONFIG_JSON],suffixes:[]},{languageId:B.PYTHON,basenames:[oe.PYPROJECT_TOML,"setup.py","setup.cfg"],suffixes:[]},{languageId:B.CSHARP,basenames:[],suffixes:[".csproj",".sln",".slnx"]},{languageId:B.JAVA,basenames:["pom.xml","build.gradle","build.gradle.kts"],suffixes:[]},{languageId:B.CPP,basenames:["CMakeLists.txt","meson.build","BUILD","Makefile"],suffixes:[]},{languageId:B.PHP,basenames:["composer.json"],suffixes:[]},{languageId:B.RUBY,basenames:["Gemfile"],suffixes:[".gemspec"]}];function cv(t,e,r){let n=r.get(t);if(n!==void 0)return n;let i=!1;if(e.basenames.length>0&&(i=e.basenames.some(s=>vn.existsSync(Ve.join(t,s)))),!i&&e.suffixes.length>0)try{i=vn.readdirSync(t).some(s=>e.suffixes.some(o=>s.endsWith(o)))}catch{i=!1}return r.set(t,i),i}function uv(t,e,r,n){let i=Ve.dirname(Ve.join(t,e));for(;;){if(cv(i,r,n))return i;if(i===t)return t;let s=Ve.dirname(i);if(s===i)return t;i=s}}function V_(t,e){let r=Ve.relative(Ve.resolve(t),e);return r===""||r!==".."&&!r.startsWith(`..${Ve.sep}`)&&!Ve.isAbsolute(r)}function Dn(t,e,r,n){let i=Ve.resolve(t),s=Ve.normalize(Ve.resolve(r,n));if(V_(i,s))try{let o=vn.realpathSync(s);return V_(e,o)?s:void 0}catch{return}}function z_(t,e,r,n){return n.map(i=>Dn(t,e,r,i)).filter(i=>i!==void 0)}function dv(t,e,r){let n=Ga(t,oe.CARGO_TOML);if(n===void 0)return[];let i=[],s="";for(let o of n.split(/\r?\n/)){let a=o.trim(),l=a.match(/^\[(.+)\]$/);if(l){s=l[1].trim().toLowerCase();continue}if(s==="workspace"){for(let c of a.matchAll(/"([^"]+)"/g))i.push(c[1]);continue}if(s.includes("dependencies")||s.startsWith("patch")||s.startsWith("replace"))for(let c of a.matchAll(/path\s*=\s*"([^"]+)"/g))i.push(c[1])}return z_(e,r,t,i)}function pv(t,e,r){let n=Ga(t,oe.GO_MOD);if(n===void 0)return[];let i=[];for(let s of n.split(/\r?\n/)){let o=s.trim().match(/^replace\s+\S+\s+=>\s+(\S+)\s*$/);if(!o)continue;let a=o[1];!a.startsWith(".")&&!Ve.isAbsolute(a)||i.push(a)}return z_(e,r,t,i)}function gv(t,e,r){return[...mv(t,e,r),...hv(t,e,r)]}function fv(t,e,r,n){if(!n.includes("*")){let o=Dn(e,r,t,n);return o?[o]:[]}let i=Dn(e,r,t,Ve.dirname(n));if(!i)return[];let s=Ve.basename(n);try{return vn.readdirSync(i).filter(o=>s==="*"||o.includes(s.slice(0,s.indexOf("*")))).map(o=>Dn(e,r,i,o)).filter(o=>o!==void 0)}catch{return[]}}function mv(t,e,r){let n=J_(t,oe.PACKAGE_JSON);if(n===void 0)return[];let i=n.workspaces,s=Array.isArray(i)?i:typeof i=="object"&&i!==null&&Array.isArray(i.packages)?i.packages:[],o=[];for(let a of s)typeof a=="string"&&o.push(...fv(t,e,r,a));return o}function hv(t,e,r){let n=J_(t,oe.TSCONFIG_JSON);if(n===void 0)return[];let i=[],s=n.references;if(Array.isArray(s))for(let a of s){if(typeof a!="object"||a===null)continue;let l=a.path;if(typeof l!="string")continue;let c=Dn(e,r,t,l);c&&i.push(c)}let o=n.extends;if(typeof o=="string"){let a=Dn(e,r,t,o);a&&i.push(a)}return i}function Ev(t,e,r){let n=[],i=[];try{i=vn.readdirSync(t)}catch{return n}for(let s of i){if(!s.endsWith(".csproj"))continue;let o=Ga(t,s);if(o!==void 0)for(let a of o.matchAll(/<ProjectReference[^>]*Include\s*=\s*"([^"]+)"/g)){let l=a[1].split("\\").join("/"),c=Dn(e,r,t,l);c&&n.push(Ve.dirname(c))}}return n}function Ga(t,e){try{return vn.readFileSync(Ve.join(t,e),"utf8")}catch{return}}function J_(t,e){let r=Ga(t,e);if(r!==void 0)try{let n=JSON.parse(r);return typeof n=="object"&&n!==null&&!Array.isArray(n)?n:void 0}catch{return}}function _v(t,e,r,n){switch(e){case B.RUST:return dv(t,r,n);case B.GO:return pv(t,r,n);case B.TYPESCRIPT:return gv(t,r,n);case B.CSHARP:return Ev(t,r,n);default:return[]}}function Sv(t){let e=new Map(t.map((l,c)=>[l.root,c])),r=new Map,n=new Map;for(let l of t){let c=[...new Set(l.deps.filter(u=>u!==l.root))].filter(u=>e.has(u)).sort();n.set(l.root,c.length);for(let u of c){let p=r.get(u)??[];p.push(l.root),r.set(u,p)}}let i=t.filter(l=>n.get(l.root)===0).map(l=>l.root).sort(),s=[],o=new Set;for(;i.length>0;){let l=i.shift();if(!o.has(l)){o.add(l),s.push(t[e.get(l)]);for(let c of(r.get(l)??[]).sort())o.has(c)||(n.set(c,n.get(c)-1),n.get(c)===0&&i.push(c));i.sort()}}let a=t.filter(l=>!o.has(l.root)).sort((l,c)=>l.root.localeCompare(c.root));return[...s,...a]}function q_(t){let e=Ve.resolve(t.workspaceRoot),r;try{r=vn.realpathSync(e)}catch{r=void 0}let n=lv.find(l=>l.languageId===t.languageId)??null,i=new Map,s=new Map,o=new Map;for(let l of t.files){let c=n?uv(e,l,n,i):e;o.set(l,c);let u=s.get(c);u?u.push(l):s.set(c,[l])}let a=[];for(let[l,c]of s)a.push({root:l,files:c,deps:n&&r?_v(l,t.languageId,e,r):[]});return{groups:Sv(a),fileToProjectRoot:o}}var Tv="LSP file path resolves outside the configured workspace root";function Q_(t,e){let r=On(t,e);if(!r)throw new E(T.FS_PATH_TRAVERSAL,Tv);return r}var Rv=12e4,yv=3e4,Iv=200,Ov=512,Lv=.25,xa=new Set([yr.FUNCTION,yr.METHOD,yr.CONSTRUCTOR,yr.CLASS]),Nv=new Set([yr.CLASS]);function eS(t,e){return e.has(t)}function Ii(t){return t.split("\\").join("/")}var Ba=class extends Error{};function Cv(t){return"location"in t}function Pv(t){return t?t.map(e=>Cv(e)?{name:e.name,kind:e.kind,range:e.location.range,selectionRange:e.location.range}:e):[]}function Qd(t,e){return e.normalizeSymbolName?e.normalizeSymbolName(t):t}function Dv(t,e){let r=e.line>t.start.line||e.line===t.start.line&&e.character>=t.start.character,n=e.line<t.end.line||e.line===t.end.line&&e.character<=t.end.character;return r&&n}function Ua(t,e,r,n){for(let i of t){if(!Dv(i.range,e))continue;let s=eS(i.kind,r)?i.name:n;return(i.children?Ua(i.children,e,r,s):void 0)??{symbol:i,containerName:n}}}function Ha(t,e,r){let n=[];for(let i of t)if(xa.has(i.kind)&&n.push({symbol:i,containerName:r}),i.children){let s=eS(i.kind,e)?i.name:r;n.push(...Ha(i.children,e,s))}return n}var Ge=class{name;config={};logger;createClient;languageConfig;containmentKinds;constructor(e,r,n=()=>new ka){this.languageConfig=e,this.name=e.name,this.logger=r??me(),this.createClient=n,this.containmentKinds=e.containmentSymbolKinds??Nv}configure(e){this.config=e}get requestTimeoutMs(){return this.config.timeoutMs??yv}get maxOpenFiles(){return this.config.maxOpenFiles??Iv}get maxConcurrentFiles(){return this.config.maxConcurrentFiles??1}get maxProcesses(){if(this.config.maxProcesses!==void 0)return this.config.maxProcesses;let e=Math.floor(this.maxProcessMemoryMb()/this.processMemoryEstimateMb());return Math.max(1,Math.min(qd.availableParallelism(),e))}processMemoryEstimateMb(){return this.config.processMemoryEstimateMb??this.languageConfig.processMemoryEstimateMb??Ov}maxProcessMemoryMb(){return this.config.maxProcessMemoryMb!==void 0?this.config.maxProcessMemoryMb:Math.max(Math.round(qd.totalmem()/1024/1024*Lv),this.processMemoryEstimateMb())}effectiveConcurrency(e){let r=this.maxConcurrentFiles,n=Math.max(1,Math.min(r,e,this.maxOpenFiles-1));return n!==r&&this.logger.debug($e.concurrencyClamped(r,n)),n}effectiveProcesses(e){let r=this.maxProcesses,n=Math.floor(this.maxProcessMemoryMb()/this.processMemoryEstimateMb()),i=qd.availableParallelism(),s=Math.max(1,Math.min(r,e,i,n));return s!==r&&(this.logger.debug($e.processShardsClamped(r,s)),s<r&&n<Math.min(r,e,i)&&this.logger.debug($e.processShardsMemoryClamped(r,s,this.maxProcessMemoryMb(),this.processMemoryEstimateMb()))),s}async checkAvailability(e){let r=await this.languageConfig.checkPreflight(e,{binary:this.config.binaryOverride,args:this.config.argsOverride});return r.ready?{available:!0}:{available:!1,reason:r.reason}}async resolveEdges(e){if(e.files.length===0)return{edges:[],filesProcessed:[],filesFailed:[]};let r=this.config.timeoutMs??Rv,n=this.effectiveProcesses(e.files.length);if(n<=1){let o=this.createClient();return this.runBatch(o,e,r)}let i=this.buildProjectShards(e,n),s=await Promise.all(i.map(o=>{let a=this.createClient();return this.runBatch(a,o,r)}));return this.mergeShardOutcomes(s,e.files)}languageIdFor(e){return this.languageConfig.languageIdByExtension[yi.extname(e)]??this.languageConfig.defaultLanguageId}buildProjectShards(e,r){let i=q_({workspaceRoot:e.workspaceRoot,languageId:this.languageConfig.tierBLanguageId,files:e.files}).groups,s=(d,f)=>{let m={};for(let _ of f){let O=e.callsByFile?.[_];O&&(m[_]=O)}return{workspaceRoot:e.workspaceRoot,serverRoot:d,files:f,callsByFile:m}};if(i.length<=r)return i.map(d=>s(d.root,d.files));let o=[...i].sort((d,f)=>d.files.length-f.files.length||d.root.localeCompare(f.root)),a=r-1,l=new Set(o.slice(-a).map(d=>d.root)),c=[],u=[];for(let d of i)l.has(d.root)?c.push(s(d.root,d.files)):u.push(...d.files);let p=[...c];return u.length>0&&p.push(s(e.workspaceRoot,u)),p}mergeShardOutcomes(e,r){let n=[],i=new Set,s=new Map,o=0;for(let u=0;u<e.length;u++){let p=e[u];for(let d of p.edges)n.push(d);for(let d of p.filesProcessed)i.add(d);for(let d of p.filesFailed)s.set(d.file,d);p.unavailableReason&&o++}n.sort((u,p)=>(u.sourceNodeKey+"->"+u.targetNodeKey).localeCompare(p.sourceNodeKey+"->"+p.targetNodeKey));let{filesProcessed:a,filesFailed:l}=this.reorderFiles(r,i,s),c={edges:n,filesProcessed:a,filesFailed:l};return o===e.length&&e.length>0&&(c.unavailableReason=e.find(u=>u.unavailableReason)?.unavailableReason),c}reorderFiles(e,r,n){let i=[],s=[];for(let o of e)r.has(o)?i.push(o):n.has(o)&&s.push(n.get(o));return{filesProcessed:i,filesFailed:s}}async runBatch(e,r,n){let{workspaceRoot:i,files:s,callsByFile:o}=r,a=r.serverRoot??i,l=await this.languageConfig.resolveBinary(i,{binary:this.config.binaryOverride,args:this.config.argsOverride});try{await e.start({command:l.command,args:l.args,cwd:a,env:l.env})}catch(u){return{edges:[],filesProcessed:[],filesFailed:[],unavailableReason:$e.spawnFailed(l.command,u instanceof Error?u.message:String(u))}}try{await this.initializeSession(e,a)}catch(u){let p=u instanceof Error?u.message:String(u);await this.shutdownSession(e);let d=this.languageConfig.unavailableReasonForUnresolvableBinary;return!l.locallyResolved&&d?(this.logger.debug($e.initializeFailed(p)),{edges:[],filesProcessed:[],filesFailed:[],unavailableReason:d}):{edges:[],filesProcessed:[],filesFailed:[],unavailableReason:$e.initializeFailed(p)}}await this.waitForColdStart(e,i,s);let c=n>0?Date.now()+n:void 0;try{return await this.processAllFiles(e,i,s,o,c,n)}finally{await this.shutdownSession(e)}}async settleColdStart(){let e=this.config.coldStartSettleMs??this.languageConfig.coldStartSettleMs??0;e>0&&await new Promise(r=>setTimeout(r,e))}async waitForColdStart(e,r,n){await this.settleColdStart(),(this.config.coldStartSettleMs??this.languageConfig.coldStartSettleMs??0)>0&&await this.waitForServerReady(e,r,n)}async waitForServerReady(e,r,n){let i=this.config.coldStartPollMs??5e3,s=this.config.coldStartMaxWaitMs??12e4,o=Date.now();for(;;){if(await this.probeServerReady(e,r,n)||Date.now()-o>=s)return;await new Promise(c=>setTimeout(c,i))}}async probeServerReady(e,r,n){let s={openFileCache:new Map,inFlightOpens:new Map,pinnedPaths:new Set,usedNodeKeysByFile:new Map};try{let o=!1;for(let a=0;a<Math.min(n.length,12);a++){let l=await this.openAndGetSymbols(e,r,n[a],s),c=Ha(l.symbols,this.containmentKinds);if(c.length===0)continue;if(o=!0,(await Promise.all(c.map(({symbol:p})=>e.request(Yt.REFERENCES,{textDocument:{uri:l.uri},position:p.selectionRange.start,context:{includeDeclaration:!1}},this.requestTimeoutMs)))).some(p=>(p?.length??0)>0))return!0}return o?!1:n.length<=12}finally{for(let o of[...s.openFileCache.values()])this.closeOpenFile(e,o,s.openFileCache)}}async initializeSession(e,r){let n=X_(r).toString();await e.request(Yt.INITIALIZE,{processId:process.pid,rootUri:n,capabilities:{textDocument:{documentSymbol:{hierarchicalDocumentSymbolSupport:!0}}},workspaceFolders:[{uri:n,name:yi.basename(r)}],...this.languageConfig.initializationOptions?{initializationOptions:this.languageConfig.initializationOptions}:{}},this.requestTimeoutMs),e.notify(Yt.INITIALIZED,{})}async shutdownSession(e){try{await e.request(Yt.SHUTDOWN,null,this.requestTimeoutMs),e.notify(Yt.EXIT,{})}catch{}finally{await e.stop()}}async processAllFiles(e,r,n,i,s,o){let a={openFileCache:new Map,inFlightOpens:new Map,pinnedPaths:new Set,usedNodeKeysByFile:new Map},l=new Array(n.length),c=0,u=!1,p=async()=>{for(;;){if(u)return;let C=s!==void 0?s-Date.now():void 0;if(C!==void 0&&C<=0){u=!0;return}let w=c++;if(w>=n.length)return;let L=n[w];a.pinnedPaths.add(L);try{let $=await this.runOneSlot(e,r,L,i,a,C,o);l[w]=$,!$.ok&&$.deadlineExceeded&&(u=!0)}finally{a.pinnedPaths.delete(L)}}},d=this.effectiveConcurrency(n.length);await Promise.allSettled(Array.from({length:d},()=>p()));let f=[],m=new Set,_=[],O=[];for(let C=0;C<n.length;C++){let w=l[C];if(w)if(w.ok){_.push(n[C]);for(let L of w.edges){let $=`${L.sourceNodeKey}->${L.targetNodeKey}`;m.has($)||(m.add($),f.push(L))}}else O.push({file:n[C],reason:w.reason,retryable:w.deadlineExceeded,...w.notApplicable?{notApplicable:!0}:{}})}return u&&this.markUnreachedFilesFailed(n,_,O,o),{edges:f,filesProcessed:_,filesFailed:O,...u?{unavailableReason:$e.batchTimedOut(o)}:{}}}raceAgainstDeadline(e,r){return new Promise((n,i)=>{let s=setTimeout(()=>i(new Ba),r);s.unref?.(),e.then(o=>{clearTimeout(s),n(o)},o=>{clearTimeout(s),i(o)})})}async runOneSlot(e,r,n,i,s,o,a){try{let l=o!==void 0?await this.raceAgainstDeadline(this.processOneFile(e,r,n,i,s),o):await this.processOneFile(e,r,n,i,s);return this.closeAndEvict(e,n,s),{ok:!0,edges:l}}catch(l){if(l instanceof Ba)return{ok:!1,deadlineExceeded:!0,reason:$e.batchTimedOut(a)};let c=l instanceof Error?l.message:String(l),u=this.languageConfig.isNotApplicableFileError?.(c)===!0;return u||this.logger.warn($e.resolutionFailedForFile(n),{error:c}),this.closeAndEvict(e,n,s),{ok:!1,deadlineExceeded:!1,reason:c,...u?{notApplicable:!0}:{}}}}closeOpenFile(e,r,n){n.delete(r.relativePath),e.notify(Yt.DID_CLOSE,{textDocument:{uri:r.uri}})}closeAndEvict(e,r,n){let i=n.openFileCache.get(r);i&&this.closeOpenFile(e,i,n.openFileCache)}markUnreachedFilesFailed(e,r,n,i){let s=new Set([...r,...n.map(o=>o.file)]);for(let o of e)s.has(o)||n.push({file:o,reason:$e.batchTimedOut(i),retryable:!0})}qualifiedContainerName(e){if(!(!this.languageConfig.supportsQualifiedContainment||!e))return Qd(e,this.languageConfig)}resolveNodeKeyForFile(e,r,n,i,s,o){let a=e.usedNodeKeysByFile.get(r);if(!a){a={used:new Set([r]),resolved:new Map},e.usedNodeKeysByFile.set(r,a);let p=[...Ha(n,this.containmentKinds)].sort((d,f)=>d.symbol.selectionRange.start.line-f.symbol.selectionRange.start.line);for(let{symbol:d,containerName:f}of p){let m=`${d.name}@${d.selectionRange.start.line}`;if(a.resolved.has(m))continue;let _=Ln(a.used,Is(r,Qd(d.name,this.languageConfig),this.qualifiedContainerName(f)),d.selectionRange.start.line);a.used.add(_),a.resolved.set(m,_)}}let l=`${i}@${s}`,c=a.resolved.get(l);if(c)return c;let u=Ln(a.used,Is(r,Qd(i,this.languageConfig),this.qualifiedContainerName(o)),s);return a.used.add(u),a.resolved.set(l,u),u}async processOneFile(e,r,n,i,s){let o=i?.[n];return this.languageConfig.definitionResolution==="forward"&&o&&o.length>0?this.processOneFileForward(e,r,n,o,s):this.processOneFileReverse(e,r,n,s)}async processOneFileReverse(e,r,n,i){let s=await this.openAndGetSymbols(e,r,n,i),o=Ha(s.symbols,this.containmentKinds),a=await Promise.all(o.map(({symbol:c})=>e.request(Yt.REFERENCES,{textDocument:{uri:s.uri},position:c.selectionRange.start,context:{includeDeclaration:!1}},this.requestTimeoutMs))),l=[];for(let c=0;c<o.length;c++){let{symbol:u,containerName:p}=o[c],d=a[c]??[],f=Ii(this.resolveNodeKeyForFile(i,n,s.symbols,u.name,u.selectionRange.start.line,p));for(let m of d){let _=await this.resolveReferenceEdge(e,r,m,f,n,i);_&&l.push(_)}}return l}async processOneFileForward(e,r,n,i,s){let o=await this.openAndGetSymbols(e,r,n,s),a=[],l=await Promise.all(i.map(({startLine:c,startColumn:u})=>e.request(Yt.DEFINITION,{textDocument:{uri:o.uri},position:{line:c,character:u}},this.requestTimeoutMs)));for(let c=0;c<i.length;c++){let{startLine:u,startColumn:p}=i[c],d=await this.resolveFirstDefinitionTarget(e,r,n,l[c],s);if(d===void 0)continue;let f=Ua(o.symbols,{line:u,character:p},this.containmentKinds),m=f&&xa.has(f.symbol.kind)?Ii(this.resolveNodeKeyForFile(s,n,o.symbols,f.symbol.name,f.symbol.selectionRange.start.line,f.containerName)):n;m!==d&&a.push({sourceNodeKey:m,targetNodeKey:d,source:dc.LSP})}return a}async resolveFirstDefinitionTarget(e,r,n,i,s){if(!i)return;let o=Array.isArray(i)?i:[i];for(let a=0;a<o.length;a++){let l=await this.resolveTargetNodeKey(e,r,n,o[a],s);if(l!==void 0)return a>0&&this.logger.debug($e.skippedMultiLocationDefinition(n)),l}}async resolveTargetNodeKey(e,r,n,i,s){let o=yi.relative(r,Z_(i.uri));if(yi.isAbsolute(o)||o.startsWith(".."))return;let a=Ii(o);if(a===n)return;let l=await this.openAndGetSymbols(e,r,a,s),c=Ua(l.symbols,i.range.start,this.containmentKinds);return c&&xa.has(c.symbol.kind)?Ii(this.resolveNodeKeyForFile(s,a,l.symbols,c.symbol.name,c.symbol.selectionRange.start.line,c.containerName)):a}async resolveReferenceEdge(e,r,n,i,s,o){let a=yi.relative(r,Z_(n.uri));if(yi.isAbsolute(a)||a.startsWith(".."))return;let l=Ii(a);if(l===s)return;let c=await this.openAndGetSymbols(e,r,l,o),u=Ua(c.symbols,n.range.start,this.containmentKinds);return{sourceNodeKey:u&&xa.has(u.symbol.kind)?Ii(this.resolveNodeKeyForFile(o,l,c.symbols,u.symbol.name,u.symbol.selectionRange.start.line,u.containerName)):l,targetNodeKey:i,source:dc.LSP}}async openAndGetSymbols(e,r,n,i){let s=i.openFileCache,o=s.get(n);if(o)return s.delete(n),s.set(n,o),o;let a=i.inFlightOpens.get(n);if(a)return a;let l=this.doOpenAndGetSymbols(e,r,n,i).finally(()=>i.inFlightOpens.delete(n));return i.inFlightOpens.set(n,l),l}pickEvictionVictim(e){for(let[r,n]of e.openFileCache)if(!e.pinnedPaths.has(r))return n}async doOpenAndGetSymbols(e,r,n,i){for(;i.openFileCache.size+i.inFlightOpens.size>=this.maxOpenFiles;){let p=this.pickEvictionVictim(i);if(!p)break;this.closeOpenFile(e,p,i.openFileCache)}let s=Q_(r,n),o=await Av.readFile(s,H),a=X_(s).toString();e.notify(Yt.DID_OPEN,{textDocument:{uri:a,languageId:this.languageIdFor(n),version:1,text:o}});let l=await e.request(Yt.DOCUMENT_SYMBOL,{textDocument:{uri:a}},this.requestTimeoutMs),c=Pv(l),u={relativePath:n,uri:a,symbols:c};return i.openFileCache.set(n,u),u}};var Ka="typescript",vv={".ts":Ka,".mts":Ka,".cts":Ka,".tsx":"typescriptreact",".js":"javascript",".mjs":"javascript",".cjs":"javascript",".jsx":"javascriptreact"},bv=/(?:^|\r?\n)Could not find source file:\s*['"][^'"\r\n]+['"]\.?\s*(?:\r?\n|$)/i,wv={name:wt.PACKAGE_NAME,tierBLanguageId:B.TYPESCRIPT,languageIdByExtension:vv,defaultLanguageId:Ka,resolveBinary:ba,checkPreflight:Y_,isNotApplicableFileError:t=>bv.test(t),supportsQualifiedContainment:!0,initializationOptions:{maxTsServerMemory:Pa,tsserver:{useSyntaxServer:"never"}},definitionResolution:"forward",unavailableReasonForUnresolvableBinary:Ai.binaryUnresolvable},$a=class extends Ge{constructor(e,r){super(wv,e,r)}};import Fv from"fs";import Mv from"path";import{execFile as kv}from"child_process";import{promisify as Gv}from"util";var ot={PACKAGE_NAME:"pyright",BINARY_NAME:"pyright-langserver",NPX_COMMAND:"npx",NPX_NO_INSTALL_FLAG:"--no-install",STDIO_ARG:"--stdio",VERSION_FLAG:"--version"},Ds={binaryUnresolvable:"pyright-langserver is not resolvable (no local node_modules/.bin copy and `npx --no-install` cannot find pyright) -- install pyright as a project devDependency (`npm install -D pyright`) to enable LSP-precision cross-file edges for Python",markerFileMissing:"no pyproject.toml/requirements.txt found at the workspace root"};var tS=Gv(kv),rS=5e3,xv=[oe.PYPROJECT_TOML,oe.REQUIREMENTS_TXT];function Uv(t){return xv.some(e=>Fv.existsSync(Mv.join(t,e)))}async function Hv(t){let e=[ot.NPX_NO_INSTALL_FLAG,ot.PACKAGE_NAME,ot.VERSION_FLAG];try{if(Xr(ot.NPX_COMMAND)){let r=await Ri(ot.NPX_COMMAND,e,void 0);await tS(r,[],{cwd:t,timeout:rS,shell:!0})}else await tS(ot.NPX_COMMAND,e,{cwd:t,timeout:rS});return!0}catch{return!1}}async function nS(t,e){let r=Uv(t),i=sr(t,{packageName:ot.PACKAGE_NAME,binaryName:ot.BINARY_NAME,defaultArgs:[ot.STDIO_ARG]},e).locallyResolved?!0:await Hv(t);return r?i?{markerFileResolvable:r,lspBinaryResolvable:i,ready:!0}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:Ds.binaryUnresolvable}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:Ds.markerFileMissing}}var iS="python",Bv={".py":iS},Kv={name:ot.PACKAGE_NAME,tierBLanguageId:B.PYTHON,languageIdByExtension:Bv,defaultLanguageId:iS,resolveBinary:(t,e)=>sr(t,{packageName:ot.PACKAGE_NAME,binaryName:ot.BINARY_NAME,defaultArgs:[ot.STDIO_ARG]},e),checkPreflight:nS,supportsQualifiedContainment:!0,definitionResolution:"reverse",unavailableReasonForUnresolvableBinary:Ds.binaryUnresolvable},Ya=class extends Ge{constructor(e,r){super(Kv,e,r)}};import $v from"fs";import Zd from"path";import Yv from"os";var bn={BINARY_NAME:"gopls",DEFAULT_ARGS:[]};function sS(t){let e=/^\((\*?)([^(]*)\)\.(.+)$/.exec(t);if(!e)return t;let[,,r,n]=e;return`${r}.${n}`}var Xd={binaryUnresolvable:"gopls is not resolvable (not found on PATH, $GOBIN, $GOPATH/bin, or ~/go/bin) -- install gopls to enable LSP-precision cross-file edges for Go",markerFileMissing:"no go.mod found at the workspace root"};function Wv(t){return $v.existsSync(Zd.join(t,oe.GO_MOD))}function jv(t){let e=[];return t.env.GOBIN&&e.push(t.env.GOBIN),t.env.GOPATH&&e.push(Zd.join(t.env.GOPATH,"bin")),e.push(Zd.join(Yv.homedir(),"go","bin")),e}async function oS(t,e,r=or){let n=Wv(t),s=(await Ce({binaryName:bn.BINARY_NAME,defaultArgs:bn.DEFAULT_ARGS,extraCandidateDirs:jv(r)},e)).locallyResolved;return n?s?{markerFileResolvable:n,lspBinaryResolvable:s,ready:!0}:{markerFileResolvable:n,lspBinaryResolvable:s,ready:!1,reason:Xd.binaryUnresolvable}:{markerFileResolvable:n,lspBinaryResolvable:s,ready:!1,reason:Xd.markerFileMissing}}var aS="go",Vv={".go":aS},zv={name:bn.BINARY_NAME,tierBLanguageId:B.GO,languageIdByExtension:Vv,defaultLanguageId:aS,resolveBinary:(t,e)=>Ce({binaryName:bn.BINARY_NAME,defaultArgs:bn.DEFAULT_ARGS},e),checkPreflight:oS,supportsQualifiedContainment:!1,normalizeSymbolName:sS,definitionResolution:"reverse"},Wa=class extends Ge{constructor(e,r){super(zv,e,r)}};import tb from"path";import rb from"os";import Jv from"fs";import ep from"path";import qv from"os";var Zr={BINARY_NAME:"rust-analyzer",DEFAULT_ARGS:[]},ja={binaryUnresolvable:"rust-analyzer is not resolvable (not found on PATH, $CARGO_HOME/bin, or ~/.cargo/bin) -- install rust-analyzer to enable LSP-precision cross-file edges for Rust",binaryNotSpawnable:"rust-analyzer resolves on PATH but cannot be spawned -- usually a rustup proxy for a component that isn't installed; run `rustup component add rust-analyzer` (or install rust-analyzer) to enable LSP-precision cross-file edges for Rust",markerFileMissing:"no Cargo.toml found at the workspace root"};function lS(t){return t.startsWith("impl ")?t.slice(5):t}function Qv(t){return Jv.existsSync(ep.join(t,oe.CARGO_TOML))}function Xv(t){return ep.join(t.env.CARGO_HOME??ep.join(qv.homedir(),".cargo"),"bin")}var Zv=5e3;async function eb(t,e){return H_(t,Zv,e)}async function cS(t,e,r=or){let n=Qv(t),i=await Ce({binaryName:Zr.BINARY_NAME,defaultArgs:Zr.DEFAULT_ARGS,extraCandidateDirs:[Xv(r)]},e),s=i.locallyResolved,o=!s||await eb(i.command,i.fromUserOverride?void 0:[Zr.BINARY_NAME]);return n?s?o?{markerFileResolvable:n,lspBinaryResolvable:s,lspBinarySpawnable:o,ready:!0}:{markerFileResolvable:n,lspBinaryResolvable:s,lspBinarySpawnable:o,ready:!1,reason:ja.binaryNotSpawnable}:{markerFileResolvable:n,lspBinaryResolvable:s,lspBinarySpawnable:o,ready:!1,reason:ja.binaryUnresolvable}:{markerFileResolvable:n,lspBinaryResolvable:s,lspBinarySpawnable:o,ready:!1,reason:ja.markerFileMissing}}var uS="rust",nb={".rs":uS};function ib(){return tb.join(rb.homedir(),".cargo","bin")}var sb={name:Zr.BINARY_NAME,tierBLanguageId:B.RUST,languageIdByExtension:nb,defaultLanguageId:uS,resolveBinary:(t,e)=>Ce({binaryName:Zr.BINARY_NAME,defaultArgs:Zr.DEFAULT_ARGS,extraCandidateDirs:[ib()]},e),checkPreflight:cS,supportsQualifiedContainment:!0,containmentSymbolKinds:new Set([yr.CLASS,yr.OBJECT]),normalizeSymbolName:lS,definitionResolution:"reverse",coldStartSettleMs:8e3,processMemoryEstimateMb:2048},Va=class extends Ge{constructor(e,r){super(sb,e,r)}};import ob from"fs";import dS from"path";var wn={BINARY_NAME:"clangd",DEFAULT_ARGS:[]},tp={binaryUnresolvable:"clangd is not resolvable (not found on PATH or common LLVM install locations) -- install clangd to enable LSP-precision cross-file edges for C/C++",markerFileMissing:"no compile_commands.json/CMakeLists.txt found at the workspace root"};var ab=["compile_commands.json","CMakeLists.txt"];function lb(t){return ab.some(e=>ob.existsSync(dS.join(t,e)))}function cb(t){return t.platform===br?[dS.join(t.env.ProgramFiles??"C:\\Program Files","LLVM","bin")]:t.platform==="darwin"?["/opt/homebrew/opt/llvm/bin","/usr/local/opt/llvm/bin"]:["/usr/lib/llvm/bin","/usr/local/bin"]}async function pS(t,e,r=or){let n=lb(t),s=(await Ce({binaryName:wn.BINARY_NAME,defaultArgs:wn.DEFAULT_ARGS,extraCandidateDirs:cb(r)},e)).locallyResolved;return n?s?{markerFileResolvable:n,lspBinaryResolvable:s,ready:!0}:{markerFileResolvable:n,lspBinaryResolvable:s,ready:!1,reason:tp.binaryUnresolvable}:{markerFileResolvable:n,lspBinaryResolvable:s,ready:!1,reason:tp.markerFileMissing}}var Ir="cpp",ub={".c":"c",".h":"c",".cpp":Ir,".cxx":Ir,".cc":Ir,".hpp":Ir,".hxx":Ir,".hh":Ir,".cu":Ir,".cuh":Ir},db={name:wn.BINARY_NAME,tierBLanguageId:B.CPP,languageIdByExtension:ub,defaultLanguageId:Ir,resolveBinary:(t,e)=>Ce({binaryName:wn.BINARY_NAME,defaultArgs:wn.DEFAULT_ARGS},e),checkPreflight:pS,supportsQualifiedContainment:!1,definitionResolution:"reverse"},za=class extends Ge{constructor(e,r){super(db,e,r)}};import pb from"fs";import Ja from"path";import gS from"os";var Fn={BINARY_NAME:"jdtls",DEFAULT_ARGS:[]},rp={binaryUnresolvable:"jdtls is not resolvable (not found on PATH or common install locations) -- install jdtls to enable LSP-precision cross-file edges for Java",markerFileMissing:"no pom.xml/build.gradle found at the workspace root"};var gb=["pom.xml","build.gradle"];function fb(t){return gb.some(e=>pb.existsSync(Ja.join(t,e)))}function mb(t){return t.platform===br?[Ja.join(gS.homedir(),"scoop","shims"),Ja.join(t.env.ChocolateyInstall??"C:\\ProgramData\\chocolatey","bin")]:t.platform==="darwin"?["/opt/homebrew/bin","/usr/local/bin"]:["/usr/local/bin","/usr/bin",Ja.join(gS.homedir(),".local","share","jdtls","bin")]}async function fS(t,e,r=or){let n=fb(t),s=(await Ce({binaryName:Fn.BINARY_NAME,defaultArgs:Fn.DEFAULT_ARGS,extraCandidateDirs:mb(r)},e)).locallyResolved;return n?s?{markerFileResolvable:n,lspBinaryResolvable:s,ready:!0}:{markerFileResolvable:n,lspBinaryResolvable:s,ready:!1,reason:rp.binaryUnresolvable}:{markerFileResolvable:n,lspBinaryResolvable:s,ready:!1,reason:rp.markerFileMissing}}var mS="java",hb={".java":mS},Eb={name:Fn.BINARY_NAME,tierBLanguageId:B.JAVA,languageIdByExtension:hb,defaultLanguageId:mS,resolveBinary:(t,e)=>Ce({binaryName:Fn.BINARY_NAME,defaultArgs:Fn.DEFAULT_ARGS},e),checkPreflight:fS,supportsQualifiedContainment:!0,definitionResolution:"reverse"},qa=class extends Ge{constructor(e,r){super(Eb,e,r)}};import _b from"fs";import Sb from"path";import Tb from"os";var Mn={BINARY_NAME:"csharp-ls",DEFAULT_ARGS:[]},np={binaryUnresolvable:"csharp-ls is not resolvable (not found on PATH or ~/.dotnet/tools) -- install it with `dotnet tool install --global csharp-ls` to enable LSP-precision cross-file edges for C#",markerFileMissing:"no solution (.sln/.slnx) or project file (*.csproj) found at the workspace root"};function Ab(){return Sb.join(Tb.homedir(),".dotnet","tools")}function Rb(t){try{return _b.readdirSync(t).some(r=>r.endsWith(".sln")||r.endsWith(".slnx")||r.endsWith(".csproj"))}catch{return!1}}async function hS(t,e){let r=Rb(t),i=(await Ce({binaryName:Mn.BINARY_NAME,defaultArgs:Mn.DEFAULT_ARGS,extraCandidateDirs:[Ab()]},e)).locallyResolved;return r?i?{markerFileResolvable:r,lspBinaryResolvable:i,ready:!0}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:np.binaryUnresolvable}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:np.markerFileMissing}}var ES="csharp",yb={".cs":ES},Ib={name:Mn.BINARY_NAME,tierBLanguageId:B.CSHARP,languageIdByExtension:yb,defaultLanguageId:ES,resolveBinary:(t,e)=>Ce({binaryName:Mn.BINARY_NAME,defaultArgs:Mn.DEFAULT_ARGS},e),checkPreflight:hS,supportsQualifiedContainment:!0,definitionResolution:"reverse"},Qa=class extends Ge{constructor(e,r){super(Ib,e,r)}};import Ob from"fs";import Lb from"path";import{execFile as Nb}from"child_process";import{promisify as Cb}from"util";var Ot={PACKAGE_NAME:"intelephense",NPX_COMMAND:"npx",NPX_NO_INSTALL_FLAG:"--no-install",STDIO_ARG:"--stdio",VERSION_FLAG:"--version"},vs={binaryUnresolvable:"intelephense is not resolvable (no local node_modules/.bin copy and `npx --no-install` cannot find intelephense) -- install intelephense as a project devDependency (`npm install -D intelephense`) to enable LSP-precision cross-file edges for PHP",markerFileMissing:"no composer.json found at the workspace root"};var _S=Cb(Nb),SS=5e3;function Pb(t){return Ob.existsSync(Lb.join(t,"composer.json"))}async function Db(t){let e=[Ot.NPX_NO_INSTALL_FLAG,Ot.PACKAGE_NAME,Ot.VERSION_FLAG];try{if(Xr(Ot.NPX_COMMAND)){let r=await Ri(Ot.NPX_COMMAND,e,void 0);await _S(r,[],{cwd:t,timeout:SS,shell:!0})}else await _S(Ot.NPX_COMMAND,e,{cwd:t,timeout:SS});return!0}catch{return!1}}async function TS(t,e){let r=Pb(t),i=sr(t,{packageName:Ot.PACKAGE_NAME,defaultArgs:[Ot.STDIO_ARG]},e).locallyResolved?!0:await Db(t);return r?i?{markerFileResolvable:r,lspBinaryResolvable:i,ready:!0}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:vs.binaryUnresolvable}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:vs.markerFileMissing}}var kn="php",vb={".php":kn,".phtml":kn,".php3":kn,".php4":kn,".php5":kn,".phps":kn},bb={name:Ot.PACKAGE_NAME,tierBLanguageId:B.PHP,languageIdByExtension:vb,defaultLanguageId:kn,resolveBinary:(t,e)=>sr(t,{packageName:Ot.PACKAGE_NAME,defaultArgs:[Ot.STDIO_ARG]},e),checkPreflight:TS,supportsQualifiedContainment:!0,definitionResolution:"reverse",unavailableReasonForUnresolvableBinary:vs.binaryUnresolvable},Xa=class extends Ge{constructor(e,r){super(bb,e,r)}};import wb from"fs";import sp from"path";import Fb from"os";var Gn={BINARY_NAME:"ruby-lsp",DEFAULT_ARGS:[]},ip={binaryUnresolvable:"ruby-lsp is not resolvable (not found on PATH, ~/.rbenv/shims, or ~/.rvm/bin) -- install ruby-lsp to enable LSP-precision cross-file edges for Ruby",markerFileMissing:"no Gemfile or Gemfile.lock found at the workspace root"};var Mb=["Gemfile","Gemfile.lock"];function kb(t){return Mb.some(e=>wb.existsSync(sp.join(t,e)))}function Gb(){if(process.platform==="win32")return[];let t=Fb.homedir();return[sp.join(t,".rbenv","shims"),sp.join(t,".rvm","bin")]}async function AS(t,e){let r=kb(t),i=(await Ce({binaryName:Gn.BINARY_NAME,defaultArgs:Gn.DEFAULT_ARGS,extraCandidateDirs:Gb()},e)).locallyResolved;return r?i?{markerFileResolvable:r,lspBinaryResolvable:i,ready:!0}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:ip.binaryUnresolvable}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:ip.markerFileMissing}}var Za="ruby",xb={".rb":Za,".rake":Za,".gemspec":Za},Ub={name:Gn.BINARY_NAME,tierBLanguageId:B.RUBY,languageIdByExtension:xb,defaultLanguageId:Za,resolveBinary:(t,e)=>Ce({binaryName:Gn.BINARY_NAME,defaultArgs:Gn.DEFAULT_ARGS},e),checkPreflight:AS,supportsQualifiedContainment:!0,definitionResolution:"reverse"},el=class extends Ge{constructor(e,r){super(Ub,e,r)}};function Hb(t){return t===null?!0:typeof t=="number"?Number.isFinite(t):typeof t=="string"||typeof t=="boolean"}function RS(t,e=[]){return!st(t)||!yt(t,["text",...e],["attributes"])||typeof t.text!="string"?!1:Object.hasOwn(t,"attributes")?st(t.attributes)&&Reflect.ownKeys(t.attributes).every(r=>typeof r=="string"&&Hb(t.attributes[r])):!0}function Bb(t){return!RS(t,["id","kind"])||!qe(t.id)?!1:Object.values(dn).some(e=>e===t.kind)}function Kb(t,e){if(!Array.from(t).every(Bb))return!1;let r=t,n=i=>r.filter(s=>s.kind===i).length;return new Set(r.map(i=>i.id)).size!==r.length||n(dn.UNKNOWN)!==1||n(dn.VERIFY)>1?!1:e!==pc.NEEDS_VERIFICATION||n(dn.CANDIDATE)===0&&n(dn.VERIFY)===1}function $b(t){if(t.length>Wn.MAX_OPTIONS)throw new E(T.SEMANTIC_INPUT_LIMIT_EXCEEDED,"Semantic option limit exceeded");if(!Er(t))throw new E(T.SEMANTIC_INVALID_REQUEST,"Semantic options must be a dense data array");if(t.filter(r=>st(r)&&r.kind===dn.CANDIDATE).length>Wn.MAX_CANDIDATES)throw new E(T.SEMANTIC_INPUT_LIMIT_EXCEEDED,"Semantic option limit exceeded")}function Yb(t){return!st(t)||!yt(t,[...cs,"task","language","relation","context","options"])||!bc(t)||!qe(t.language)||!qe(t.relation)||!Object.values(pc).some(e=>e===t.task)?!1:RS(t.context)&&Array.isArray(t.options)&&Kb(t.options,t.task)}function yS(t){if(st(t)&&Array.isArray(t.options)&&$b(t.options),!Yb(t))throw new E(T.SEMANTIC_INVALID_REQUEST,"Invalid semantic decision request");let e=JSON.stringify(t);if(Buffer.byteLength(e,"utf8")>Wn.MAX_INPUT_BYTES)throw new E(T.SEMANTIC_INPUT_LIMIT_EXCEEDED,"Semantic request UTF-8 byte limit exceeded");return JSON.parse(e)}function Wb(t){let e=["provider","modelId","modelVersion","artifactHash"];return st(t)&&yt(t,e)&&e.every(r=>qe(t[r]))}function jb(t){return t.scoreKind===gc.RAW?t.calibrationVersion===null:t.scoreKind===gc.CALIBRATED&&qe(t.calibrationVersion)}function Vb(t,e){return st(t)&&yt(t,["optionId","probability"])&&t.optionId===e&&Lf(t.probability)}function zb(t,e){if(!yt(e,[...cs,"status","scores","model","scoreKind","calibrationVersion"])||!Wb(e.model)||!jb(e))return!1;let r=e.scores;return Array.isArray(r)&&r.length===t.options.length&&Er(r)&&t.options.every((n,i)=>Vb(r[i],n.id))}function Jb(t){return yt(t,[...cs,"status","scores","unavailableCode","unavailableReason"])?Array.isArray(t.scores)&&t.scores.length===0&&Er(t.scores)&&qe(t.unavailableReason)&&Object.values(Js).some(e=>e===t.unavailableCode):!1}function qb(t,e){return!st(e)||!Nf(t,e)?!1:e.status===Wi.SCORED?zb(t,e):e.status===Wi.UNAVAILABLE&&Jb(e)}function IS(t,e){if(!qb(t,e))throw new E(T.SEMANTIC_INVALID_RESPONSE,"Invalid semantic decision response");return JSON.parse(JSON.stringify(e))}var tl=class{validateRequest(e){return yS(e)}validateOutcome(e,r){return IS(this.validateRequest(e),r)}};import Oi from"fs/promises";var Qb={maxWaitMs:1e4,retryIntervalMs:100,heartbeatIntervalMs:1e4,staleAfterMs:3e4};function Xb(t){return new Promise(e=>setTimeout(e,t))}function Zb(t){try{return process.kill(t,0),!0}catch(e){return e.code===fn}}async function ew(t){try{let e=Number.parseInt(await Oi.readFile(t,H),10);return Number.isFinite(e)?e:void 0}catch{return}}async function tw(t,e){let r=await Oi.stat(t).catch(()=>{});if(!r||Date.now()-r.mtimeMs<=e)return!1;let n=await ew(t);return n!==void 0&&Zb(n)?!1:(await Oi.rm(t,{force:!0}).catch(()=>{}),!0)}function rw(t){let e=t.code;return e===zn||e===fn||e===Jn||e===qn}async function nw(t){try{let e=await Oi.open(t,"wx");return await e.writeFile(String(process.pid)),await e.close(),!0}catch(e){if(!rw(e))throw e;return!1}}async function OS(t,e={}){let r={...Qb,...e},n=Date.now()+r.maxWaitMs,i=!1;for(;!await nw(t);)if(i||(i=!0,e.onWaiting?.()),!await tw(t,r.staleAfterMs)){if(Date.now()>n)throw new eo(t);await Xb(r.retryIntervalMs)}let s=setInterval(()=>{let a=new Date;Oi.utimes(t,a,a).catch(()=>{})},r.heartbeatIntervalMs);s.unref?.();let o=!1;return{async release(){o||(o=!0,clearInterval(s),await Oi.rm(t,{force:!0}).catch(()=>{}))}}}function iw(t=y,e={}){let r=e.createAstWorkerPool??(()=>new ua);t.register(A.KnowledgeGitService,(i,s)=>new Ao(i.resolve(A.GitProvider),s?.logger,s?.gitNetworkTimeoutMs)),t.register(A.FileDiscovery,(i,s)=>new ia(i.resolve(A.GitProvider),s?.logger)),t.register(A.ConfigScanner,(i,s)=>new oa(s?.logger)),t.register(A.VcsScanner,(i,s)=>new la(i.resolve(A.GitProvider),s?.logger));let n;t.register(A.AstProcessor,(i,s)=>(n??=r(),new da(n,s?.logger))),t.register(A.GraphPersister,()=>new _a),t.register(A.TempFileManager,()=>(i,s)=>new Ta(i,s)),t.register(A.ProcessLock,()=>OS),t.register(A.SemanticCorpusService,()=>new To),t.register(A.SemanticDecisionValidator,()=>new tl),t.register(A.QueryService,(i,s)=>new Ra(s?.logger)),t.register(A.TierBCoverageHintProvider,()=>({resolve:qi})),t.register(A.ImpactService,(i,s)=>new Ia(s?.logger)),t.register(A.ChangeDetectionService,(i,s)=>new yo(i.resolve(A.ImpactService,s),s?.logger)),t.register(A.TopologyBuilder,()=>new Oa),t.register(A.SnapshotRenderer,()=>new Ro),t.register(A.HydrationService,(i,s)=>new Io(i.resolve(A.GitProvider),s?.logger)),t.register(A.SemanticDiffAnalyzer,(i,s)=>new Na(s?.logger)),t.register(A.EdgeResolutionProviders,(i,s)=>({typescript:()=>new $a(s?.logger),python:()=>new Ya(s?.logger),go:()=>new Wa(s?.logger),rust:()=>new Va(s?.logger),cpp:()=>new za(s?.logger),java:()=>new qa(s?.logger),csharp:()=>new Qa(s?.logger),php:()=>new Xa(s?.logger),ruby:()=>new el(s?.logger)}))}iw();var en={METHOD_POST:"POST",HEADER_AUTHORIZATION:"Authorization",HEADER_CONTENT_TYPE:"Content-Type",CONTENT_TYPE_JSON:"application/json",bearerAuth:t=>`Bearer ${t}`};var ar={CLIENT_USED_BEFORE_INITIALIZE:"FetchRemoteSyncClient used before initialize() was called",FETCH_L2_NODES_FAILED:"Failed to fetch remote L2 nodes",fetchL2NodesFailedWithReason:t=>`Failed to fetch remote L2 nodes: ${t}`,FETCH_L2_NODES_INVALID_JSON:"Failed to fetch remote L2 nodes: response body was not valid JSON",FETCH_L2_NODES_INVALID_RESPONSE:"Failed to fetch remote L2 nodes: response body did not match the remote-node contract",SYNC_PUSH_FAILED:"Sync push failed",syncPushFailedWithReason:t=>`Sync push failed: ${t}`,SYNC_PUSH_INVALID_JSON:"Sync push failed: response body was not valid JSON",SYNC_PUSH_INVALID_RESPONSE:"Sync push failed: response body did not match the sync-push contract"};var op={l2Nodes:t=>`/projects/${t}/l2-nodes`,SYNC_PUSH:"/sync/push"};function LS(t,e){if(typeof t!="object"||t===null||Array.isArray(t))throw new TypeError(`${e} must be an object`);return t}function NS(t,e){if(typeof t!="number"||!Number.isFinite(t))throw new TypeError(`${e} must be a finite number`);return t}function CS(t){if(!Array.isArray(t))throw new TypeError("response must be an array");for(let[e,r]of t.entries()){let n=LS(r,`response[${e}]`);if(NS(n.id,`response[${e}].id`),typeof n.name!="string")throw new TypeError(`response[${e}].name must be a string`)}return t}function PS(t){let e=LS(t,"response");if(typeof e.success!="boolean")throw new TypeError("response.success must be a boolean");return NS(e.processed,"response.processed"),t}var DS=3e4,bs=class{config;initialize(e){this.config=e}getConfig(){if(!this.config)throw new E(T.SYNC_FETCH_FAILED,ar.CLIENT_USED_BEFORE_INITIALIZE);return this.config}async parseErrorBody(e){try{return(await e.json()).error??e.statusText}catch{return e.statusText}}async fetchRemoteL2Nodes(e){let{apiUrl:r,pat:n}=this.getConfig(),i;try{i=await fetch(`${r}${op.l2Nodes(e)}`,{headers:{[en.HEADER_AUTHORIZATION]:en.bearerAuth(n)},signal:AbortSignal.timeout(DS)})}catch(o){throw E.wrap(T.SYNC_FETCH_FAILED,ar.FETCH_L2_NODES_FAILED,o)}if(!i.ok){let o=await this.parseErrorBody(i);throw new E(T.SYNC_FETCH_FAILED,ar.fetchL2NodesFailedWithReason(o))}let s;try{s=await i.json()}catch(o){throw E.wrap(T.SYNC_FETCH_FAILED,ar.FETCH_L2_NODES_INVALID_JSON,o)}try{return CS(s)}catch(o){throw E.wrap(T.SYNC_FETCH_FAILED,ar.FETCH_L2_NODES_INVALID_RESPONSE,o)}}async pushSyncEvents(e,r){let{apiUrl:n,pat:i}=this.getConfig(),s;try{s=await fetch(`${n}${op.SYNC_PUSH}`,{method:en.METHOD_POST,headers:{[en.HEADER_CONTENT_TYPE]:en.CONTENT_TYPE_JSON,[en.HEADER_AUTHORIZATION]:en.bearerAuth(i)},body:JSON.stringify({projectId:Number(e),events:r}),signal:AbortSignal.timeout(DS)})}catch(a){throw E.wrap(T.SYNC_PUSH_FAILED,ar.SYNC_PUSH_FAILED,a)}if(!s.ok){let a=await this.parseErrorBody(s);throw new E(T.SYNC_PUSH_FAILED,ar.syncPushFailedWithReason(a))}let o;try{o=await s.json()}catch(a){throw E.wrap(T.SYNC_PUSH_FAILED,ar.SYNC_PUSH_INVALID_JSON,a)}try{return PS(o)}catch(a){throw E.wrap(T.SYNC_PUSH_FAILED,ar.SYNC_PUSH_INVALID_RESPONSE,a)}}};y.register(A.RemoteSyncClient,()=>()=>new bs);var at={METHOD_POST:"POST",METHOD_GET:"GET",HEADER_CONTENT_TYPE:"Content-Type",HEADER_AUTHORIZATION:"Authorization",CONTENT_TYPE_JSON:"application/json",CONTENT_TYPE_EVENT_STREAM:"text/event-stream",SSE_DATA_PREFIX:"data: ",SSE_DONE_SENTINEL:"[DONE]",SSE_BLOCK_SEPARATOR:`
150
150
 
151
151
  `,bearerAuth:t=>`Bearer ${t}`};var lt={CLIENT_USED_BEFORE_INITIALIZE:"FetchLlmClient used before initialize() was called",CHAT_COMPLETION_FAILED:"Chat completion failed",chatCompletionFailedWithReason:t=>`Chat completion failed: ${t}`,CHAT_COMPLETION_INVALID_JSON:"Chat completion failed: response body was not valid JSON",CHAT_COMPLETION_INVALID_RESPONSE:"Chat completion failed: response body did not match the chat-completion contract",CHAT_COMPLETION_STREAM_FAILED:"Chat completion stream failed",chatCompletionStreamFailedWithReason:t=>`Chat completion stream failed: ${t}`,CHAT_COMPLETION_STREAM_INVALID_JSON:"Chat completion stream failed: chunk was not valid JSON",CHAT_COMPLETION_STREAM_INVALID_RESPONSE:"Chat completion stream failed: chunk did not match the chat-completion contract",AVAILABILITY_CHECK_FAILED:"Reachability check failed",availabilityCheckFailedWithReason:t=>`Reachability check failed: ${t}`,BRIDGE_PROBE_FAILED:"Tier C bridge probe failed",bridgeProbeFailedWithReason:t=>`Tier C bridge probe failed: ${t}`,bridgeProbeRejectedWithReason:(t,e)=>`Tier C bridge rejected the probe (HTTP ${t}): ${e}`};var vS={CHAT_COMPLETIONS:"/v1/chat/completions"};var sw=new Set(Object.values(Xt));function tn(t,e){if(typeof t!="object"||t===null||Array.isArray(t))throw new TypeError(`${e} must be an object`);return t}function ap(t,e){if(!Array.isArray(t))throw new TypeError(`${e} must be an array`);return t}function Ft(t,e){if(typeof t!="string")throw new TypeError(`${e} must be a string`);return t}function bS(t,e){if(typeof t!="number"||!Number.isFinite(t))throw new TypeError(`${e} must be a finite number`);return t}function lp(t,e){return t===null?null:Ft(t,e)}function wS(t,e){let r=Ft(t,e);if(!sw.has(r))throw new TypeError(`${e} must be a supported chat role`);return r}function FS(t,e){for(let[r,n]of ap(t,e).entries()){let i=tn(n,`${e}[${r}]`);if(Ft(i.id,`${e}[${r}].id`),i.type!==fc)throw new TypeError(`${e}[${r}].type must be ${fc}`);let s=tn(i.function,`${e}[${r}].function`);Ft(s.name,`${e}[${r}].function.name`),Ft(s.arguments,`${e}[${r}].function.arguments`)}}function ow(t,e){let r=tn(t,e);wS(r.role,`${e}.role`),lp(r.content,`${e}.content`),r.name!==void 0&&Ft(r.name,`${e}.name`),r.tool_call_id!==void 0&&Ft(r.tool_call_id,`${e}.tool_call_id`),r.tool_calls!==void 0&&FS(r.tool_calls,`${e}.tool_calls`)}function MS(t){let e=tn(t,"response");Ft(e.id,"response.id"),Ft(e.model,"response.model");for(let[r,n]of ap(e.choices,"response.choices").entries()){let i=tn(n,`response.choices[${r}]`);bS(i.index,`response.choices[${r}].index`),ow(i.message,`response.choices[${r}].message`),lp(i.finish_reason,`response.choices[${r}].finish_reason`)}return t}function kS(t){let e=tn(t,"chunk");Ft(e.id,"chunk.id"),Ft(e.model,"chunk.model");for(let[r,n]of ap(e.choices,"chunk.choices").entries()){let i=tn(n,`chunk.choices[${r}]`);bS(i.index,`chunk.choices[${r}].index`);let s=tn(i.delta,`chunk.choices[${r}].delta`);s.role!==void 0&&wS(s.role,`chunk.choices[${r}].delta.role`),s.content!==void 0&&Ft(s.content,`chunk.choices[${r}].delta.content`),s.tool_calls!==void 0&&FS(s.tool_calls,`chunk.choices[${r}].delta.tool_calls`),lp(i.finish_reason,`chunk.choices[${r}].finish_reason`)}return t}var xS=3e4,GS=4e3,ws=class{config;initialize(e){this.config=e}getConfig(){if(!this.config)throw new E(T.LLM_NOT_INITIALIZED,lt.CLIENT_USED_BEFORE_INITIALIZE);return this.config}async parseErrorBody(e){try{return(await e.json()).error??e.statusText}catch{return e.statusText}}buildCompletionsUrl(e){let r=e.endsWith("/")?e.slice(0,-1):e;return`${r.endsWith("/v1")?r.slice(0,-3):r}${vS.CHAT_COMPLETIONS}`}buildHeaders(e,r){let n={[at.HEADER_CONTENT_TYPE]:at.CONTENT_TYPE_JSON};return r&&(n.Accept=r),e.apiKey&&(n[at.HEADER_AUTHORIZATION]=at.bearerAuth(e.apiKey)),n}toWireToolCalls(e){if(e)return e.map(r=>({id:r.id,type:r.type,function:r.function}))}toWireMessage(e){return{role:e.role,content:e.content,...e.name!==void 0?{name:e.name}:{},...e.toolCallId!==void 0?{tool_call_id:e.toolCallId}:{},...e.toolCalls!==void 0?{tool_calls:this.toWireToolCalls(e.toolCalls)}:{}}}buildRequestBody(e,r){return{model:e.model,messages:e.messages.map(n=>this.toWireMessage(n)),...e.tools!==void 0?{tools:e.tools}:{},...e.toolChoice!==void 0?{tool_choice:e.toolChoice}:{},...e.temperature!==void 0?{temperature:e.temperature}:{},...e.maxTokens!==void 0?{max_tokens:e.maxTokens}:{},stream:r}}fromWireToolCalls(e){if(e)return e.map(r=>({id:r.id,type:r.type,function:r.function}))}fromWireMessage(e){return{role:e.role,content:e.content,...e.name!==void 0?{name:e.name}:{},...e.tool_call_id!==void 0?{toolCallId:e.tool_call_id}:{},...e.tool_calls!==void 0?{toolCalls:this.fromWireToolCalls(e.tool_calls)}:{}}}fromWireResult(e){return{id:e.id,model:e.model,choices:e.choices.map(r=>({index:r.index,message:this.fromWireMessage(r.message),finishReason:r.finish_reason}))}}fromWireChunk(e){return{id:e.id,model:e.model,choices:e.choices.map(r=>({index:r.index,delta:{...r.delta.role!==void 0?{role:r.delta.role}:{},...r.delta.content!==void 0?{content:r.delta.content}:{},...r.delta.tool_calls!==void 0?{toolCalls:this.fromWireToolCalls(r.delta.tool_calls)}:{}},finishReason:r.finish_reason}))}}async checkAvailability(){try{let e=this.getConfig();return await fetch(e.baseUrl,{method:at.METHOD_GET,signal:AbortSignal.timeout(GS)}),{available:!0}}catch(e){let r=e instanceof Error?e.message:String(e);return{available:!1,reason:lt.availabilityCheckFailedWithReason(r)}}}async checkBridgeReachability(e){try{let r=this.getConfig(),n=await fetch(this.buildCompletionsUrl(r.baseUrl),{method:at.METHOD_POST,headers:this.buildHeaders(r),body:JSON.stringify({model:e,messages:[{role:Xt.USER,content:"ping"}],max_tokens:1,stream:!1}),signal:AbortSignal.timeout(GS)});if(!n.ok){let i=await this.parseErrorBody(n);return{available:!1,reason:lt.bridgeProbeRejectedWithReason(n.status,i)}}return{available:!0}}catch(r){let n=r instanceof Error?r.message:String(r);return{available:!1,reason:lt.bridgeProbeFailedWithReason(n)}}}async chatCompletion(e){let r=this.getConfig(),n;try{n=await fetch(this.buildCompletionsUrl(r.baseUrl),{method:at.METHOD_POST,headers:this.buildHeaders(r),body:JSON.stringify(this.buildRequestBody(e,!1)),signal:AbortSignal.timeout(xS)})}catch(s){throw E.wrap(T.LLM_CHAT_COMPLETION_FAILED,lt.CHAT_COMPLETION_FAILED,s)}if(!n.ok){let s=await this.parseErrorBody(n);throw n.status===429?new E(T.LLM_RATE_LIMITED,lt.chatCompletionFailedWithReason(s)):n.status===401||n.status===403?new E(T.LLM_AUTH_FAILED,lt.chatCompletionFailedWithReason(s)):new E(T.LLM_HTTP_FAILED,lt.chatCompletionFailedWithReason(s))}let i;try{i=await n.json()}catch(s){throw E.wrap(T.LLM_INVALID_RESPONSE,lt.CHAT_COMPLETION_INVALID_JSON,s)}try{return this.fromWireResult(MS(i))}catch(s){throw E.wrap(T.LLM_INVALID_RESPONSE,lt.CHAT_COMPLETION_INVALID_RESPONSE,s)}}streamChatCompletion(e){let r=this.getConfig(),n=this.buildHeaders(r,at.CONTENT_TYPE_EVENT_STREAM),i=JSON.stringify(this.buildRequestBody(e,!0)),s=this.buildCompletionsUrl(r.baseUrl),o=this.parseErrorBody.bind(this),a=this.fromWireChunk.bind(this);async function*l(){let c=await aw(s,n,i,o);if(!c.body)return;let u=c.body.getReader(),p=new TextDecoder,d="";for(;;){let{done:f,value:m}=await u.read();if(f)break;d+=p.decode(m,{stream:!0});let _;for(;(_=d.indexOf(at.SSE_BLOCK_SEPARATOR))!==-1;){let O=d.slice(0,_);d=d.slice(_+at.SSE_BLOCK_SEPARATOR.length);let C=lw(O,a);if(C.kind==="done")return;C.kind==="chunk"&&(yield C.chunk)}}}return l()}};async function aw(t,e,r,n){let i;try{i=await fetch(t,{method:at.METHOD_POST,headers:e,body:r,signal:AbortSignal.timeout(xS)})}catch(s){throw E.wrap(T.LLM_CHAT_COMPLETION_FAILED,lt.CHAT_COMPLETION_STREAM_FAILED,s)}if(!i.ok){let s=await n(i);throw new E(T.LLM_CHAT_COMPLETION_FAILED,lt.chatCompletionStreamFailedWithReason(s))}return i}function lw(t,e){let r=t.trim();if(!r)return{kind:"skip"};let n=r.startsWith(at.SSE_DATA_PREFIX)?r.slice(at.SSE_DATA_PREFIX.length):r;if(n===at.SSE_DONE_SENTINEL)return{kind:"done"};let i;try{i=JSON.parse(n)}catch(s){throw E.wrap(T.LLM_STREAM_FAILED,lt.CHAT_COMPLETION_STREAM_INVALID_JSON,s)}try{return{kind:"chunk",chunk:e(kS(i))}}catch(s){throw E.wrap(T.LLM_STREAM_FAILED,lt.CHAT_COMPLETION_STREAM_INVALID_RESPONSE,s)}}y.register(A.LlmClient,()=>()=>new ws);function cw(t){return t===void 0||typeof t=="number"&&Number.isSafeInteger(t)&&t>=0}function uw(t){if(t===null||typeof t!="object"||Array.isArray(t))return!1;let e=t;return Reflect.ownKeys(e).every(r=>r==="deadlineUnixMs"||r==="signal")?cw(e.deadlineUnixMs)&&(e.signal===void 0||e.signal instanceof AbortSignal):!1}function US(t){if(t!==void 0){if(!uw(t))throw new E(T.SEMANTIC_INVALID_REQUEST,"Invalid semantic decision call controls");if(t.signal?.aborted)throw new E(T.SEMANTIC_CANCELLED,"Semantic decision call cancelled");if(t.deadlineUnixMs!==void 0&&t.deadlineUnixMs<=Date.now())throw new E(T.SEMANTIC_DEADLINE_EXCEEDED,"Semantic decision deadline exceeded")}}var HS="semantic decision model is not installed in this foundation slice",rl=class{name="local-semantic-decision";async checkAvailability(){return{available:!1,reason:HS,capabilities:[]}}async score(e,r){return US(r),{status:Wi.UNAVAILABLE,scores:[],unavailableCode:Js.MODEL_NOT_INSTALLED,unavailableReason:HS,schemaVersion:e.schemaVersion,requestId:e.requestId,featureSchemaVersion:e.featureSchemaVersion,evidence:{...e.evidence}}}};function dw(t=y){t.register(A.SemanticDecisionProvider,()=>new rl)}dw();y.register(A.HostEnvironment,()=>Object.freeze({...pw.env}));import Xl from"process";import tk from"crypto";import{z as wp}from"zod";var BS={MISSING_MEMORY_KEY:(t,e)=>`docuviaApi: no "${t}" set in memory scope "${e}"`};var Pe={INITIALIZING:t=>`Initializing project in ${t}...`,INSTALLING_HOOK:"Installing post-commit hook...",INSTALLING_PRE_PUSH_HOOK:"Installing pre-push hook...",SCANNING_WORKSPACE:"Scanning workspace files...",PARSING_AST:"Parsing source files via AST...",INITIALIZING_TEMP_FILES:"Initializing temp file manager...",PERSISTING_GRAPH:"Persisting knowledge graph...",SNAPSHOTTING_KNOWLEDGE_BRANCH:"Packing initial knowledge graph onto the knowledge branch...",SNAPSHOT_AFTER_INIT_FAILED:"Failed to pack the knowledge graph onto the knowledge branch (non-fatal -- the local graph is intact; run `docuvia snapshot` manually or push to retry)",SUCCESS:"Project initialized successfully",ALREADY_INITIALIZED:"Project already initialized \u2014 skipped re-ingestion; run `docuvia analyze` to pick up new changes, or delete .docuvia/ to force a full re-init",PARTIAL_SUCCESS:(t,e)=>`Project initialized \u2014 ${t} of ${e} files failed to parse (see .docuvia/logs/init.log)`,SUCCESS_WITH_SKIPPED_OVERSIZED:t=>`Project initialized successfully \u2014 ${t} oversized file(s) skipped (see .docuvia/logs/init.log)`,OPEN_DB_FAILED:"Failed to open the local database",TEMP_FILE_MANAGER_INITIALIZED:"Temp file manager initialized",TEMP_FILE_MANAGER_INIT_FAILED:"Failed to initialize temp file manager (non-fatal)",CLEANING_UP_TEMP_FILES:"Cleaning up temp files on shutdown...",TEMP_FILE_CLEANUP_FAILED:"Temp file cleanup on shutdown failed",PARSE_FAILURES_OR_SKIPPED:"init completed with parse failures or skipped files"},rn={START:"init.start",SUMMARY:"init.summary",PARSE_FAILURE:"init.parse_failure",FILE_SKIPPED_OVERSIZED:"init.file_skipped_oversized",SNAPSHOT_AFTER_INIT_FAILED:"init.snapshot_after_init_failed",ALREADY_INITIALIZED:"init.already_initialized"};import KS from"fs/promises";import $S from"path";async function De(t,e,r){let n=$S.join(t,he,vr,e);await KS.mkdir($S.dirname(n),{recursive:!0}),await KS.appendFile(n,JSON.stringify({ts:new Date().toISOString(),...r})+`
152
152
  `,H)}async function Li(t,e){await De(t,ng,e)}async function YS(t,e){await Li(t,{event:rn.SUMMARY,...e})}async function WS(t,e,r){let{created:n}=await t.ensureKnowledgeBranch(e);r.info(Pe.INSTALLING_HOOK);let{installed:i}=await t.installPostCommitHook(e);r.info(Pe.INSTALLING_PRE_PUSH_HOOK);let{installed:s}=await t.installPrePushHook(e);return{branchCreated:n,hookInstalled:i,prePushHookInstalled:s}}import jS from"path";import{pathToFileURL as gw}from"url";async function Ni(t,e,r){let n=t.getFirst();if(n)return n;let s=await e.getRemoteUrl(r)??gw(jS.resolve(r)).href;return t.getOrInsert({name:jS.basename(r),repoUrl:s})}async function nl(t){let[e,r,n]=await Promise.all([t.configScanner.scanConfigs(t.workspaceRoot),t.vcsScanner.extractHotspotTags(t.workspaceRoot),t.fileDiscovery.discoverFiles(t.workspaceRoot,t.filesRepo)]),i=new Set([...e.tags,...r]);return{filesToParse:n.filesToParse,skippedOversized:n.skippedOversized,tags:i,projectType:e.projectType}}async function Ci(t){let{astProcessor:e,graphPersister:r,store:n,workspaceRoot:i,projectId:s,filesToParse:o,skippedOversized:a,appendLogLine:l,logEvents:c}=t,{parsed:u,failures:p}=await e.processFiles(i,o),d=new Set(t.tags);for(let m of u)m.language&&d.add(m.language);for(let m of p)await l(i,{event:c.parseFailure,...m});for(let m of a)await l(i,{event:c.fileSkippedOversized,...m});let f=await r.persist({store:n,workspaceRoot:i,projectId:s,parsedResults:u,tags:Array.from(d)});return{parsedResults:u,failures:p,tags:d,callResolutionByFile:f.callResolutionByFile}}function Fs(t){let e=t.meta.get(S.META_KEY_TIER_B_QUEUE);if(!e)return[];try{let r=JSON.parse(e);return Array.isArray(r)?r.filter(n=>n&&typeof n.file=="string"&&typeof n.commitSha=="string"):[]}catch{return[]}}function Pi(t,e){if(e.length===0)return;let r=Fs(t),n=new Map(r.map(i=>[i.file,i]));for(let i of e)n.set(i.file,i);t.meta.set(S.META_KEY_TIER_B_QUEUE,JSON.stringify(Array.from(n.values())))}async function il(t){let{store:e,git:r,workspaceRoot:n,parsedResults:i}=t,s=await r.getHeadSha(n);if(!s)return;let o=i.map(a=>({file:a.file,commitSha:s}));await e.withWriteLock(()=>{e.meta.set(S.META_KEY_LAST_INGESTED_SOURCE_SHA,s),e.meta.set(S.META_KEY_NODE_KEY_FORMAT_VERSION,"2"),o.length>0&&Pi(e,o)})}function fw(t){return JSON.stringify({byFile:t})}function sl(t){let e=t.meta.get(S.META_KEY_CALL_RESOLUTION_STATS);if(!e)return{};try{return JSON.parse(e).byFile??{}}catch{return{}}}function VS(t,e){t.meta.set(S.META_KEY_CALL_RESOLUTION_STATS,fw(e))}function ol(t,e){Object.keys(e).length!==0&&VS(t,e)}function zS(t,e,r,n){let i=sl(t);for(let s of r)delete i[s];for(let s of n)delete i[s];for(let[s,o]of Object.entries(e))i[s]=o;VS(t,i)}function JS(t){let e=sl(t);return{byFile:e,total:wr(e)}}async function qS(t,e,r){try{let n=t(e,r);return await n.initialize(),r.info(Pe.TEMP_FILE_MANAGER_INITIALIZED,{tempDir:n.getTempDirPath()}),{tempFileManager:n,stop:()=>n.stopCleanup()}}catch(n){r.warn(Pe.TEMP_FILE_MANAGER_INIT_FAILED,{error:n?.message??String(n)});return}}function QS(t){let{filesRequested:e,filesParsed:r,filesFailed:n,failures:i,filesSkippedOversized:s}=t,o=n>0?Pe.PARTIAL_SUCCESS(n,e):s>0?Pe.SUCCESS_WITH_SKIPPED_OVERSIZED(s):Pe.SUCCESS;return{success:!0,partialFailure:n>0,message:o,filesRequested:e,filesParsed:r,filesFailed:n,failures:i,filesSkippedOversized:s,skippedExistingGraph:!1}}function XS(){return{success:!0,partialFailure:!1,message:Pe.ALREADY_INITIALIZED,filesRequested:0,filesParsed:0,filesFailed:0,failures:[],filesSkippedOversized:0,skippedExistingGraph:!0}}import mw from"path";function ie(t){return mw.join(t,he,Ji)}import eT from"fs/promises";import hw from"os";import Ew from"path";var al={SNAPSHOTTING:"Packing knowledge graph snapshot...",DB_NOT_FOUND:'Local database not found. Please run "docuvia init".'},Di={START:"snapshot.start",ERROR:"snapshot.error",SUMMARY:"snapshot.summary",TIER_B_FINALIZED:"snapshot.tierB.finalized"},ZS="docuvia-snapshot-";async function vi(t,e,r){let n=y.resolve(A.SnapshotRenderer),i=e.graph.getAllNodes(),s=e.graph.getAllLinks(),o=e.projects.getFirst(),a=e.files.getAllSnapshotMetadata(),l=await eT.mkdtemp(Ew.join(hw.tmpdir(),ZS));try{let c=await n.render({outDir:l,l2Rows:i,linkRows:s,l3Rows:e.l3.getAllExportable(),metadata:{project:o?{name:o.name,repoUrl:o.repo_url}:void 0,files:a,lastIngestedSourceSha:e.meta.get(S.META_KEY_LAST_INGESTED_SOURCE_SHA)}});return await e.withWriteLock(()=>{e.meta.set(S.META_KEY_KNOWLEDGE_PACK_PENDING,"true")}),await r.packSnapshotToKnowledgeBranch(t,l),await e.withWriteLock(()=>{e.meta.set(S.META_KEY_KNOWLEDGE_PACK_PENDING,"")}),c}finally{await eT.rm(l,{recursive:!0,force:!0})}}var tT=["SIGTERM","SIGINT"],ll=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(){let{workspaceRoot:e,logger:r}=this;r.info(Pe.INITIALIZING(e)),await Li(e,{event:rn.START,workspaceRoot:e});let n=y.resolve(A.GitProvider),i=y.resolve(A.KnowledgeGitService,{logger:r}),s=y.resolve(A.FileDiscovery,{logger:r}),o=y.resolve(A.ConfigScanner,{logger:r}),a=y.resolve(A.VcsScanner,{logger:r}),l=y.resolve(A.AstProcessor,{logger:r}),c=y.resolve(A.GraphPersister),u=y.resolve(A.TempFileManager),p=y.resolve(A.GraphStoreOpener),d;try{d=await p({dbPath:ie(e)})}catch(f){throw E.wrap(T.INIT_WORKFLOW_FAILED,Pe.OPEN_DB_FAILED,f)}try{let f=d.projects.getFirst(),{l2Nodes:m}=d.graph.count(),_=f!==void 0&&m>0;if(await WS(i,e,r),_)return r.info(Pe.ALREADY_INITIALIZED),await Li(e,{event:rn.ALREADY_INITIALIZED,workspaceRoot:e}),XS();let O=await Ni(d.projects,n,e);r.info(Pe.SCANNING_WORKSPACE);let C=await nl({configScanner:o,vcsScanner:a,fileDiscovery:s,filesRepo:d.files,workspaceRoot:e});r.info(Pe.PARSING_AST);let{parsedResults:w,failures:L,callResolutionByFile:$}=await Ci({astProcessor:l,graphPersister:c,store:d,workspaceRoot:e,projectId:O.id,filesToParse:C.filesToParse,skippedOversized:C.skippedOversized,tags:C.tags,appendLogLine:Li,logEvents:{parseFailure:rn.PARSE_FAILURE,fileSkippedOversized:rn.FILE_SKIPPED_OVERSIZED}});r.info(Pe.PERSISTING_GRAPH),ol(d,$??{}),await il({store:d,git:n,workspaceRoot:e,parsedResults:w}),r.info(Pe.SNAPSHOTTING_KNOWLEDGE_BRANCH);let Q=y.resolve(A.HydrationService,{logger:r});try{await vi(e,d,i),await Q.markSynced(e,d)}catch(M){r.warn(Pe.SNAPSHOT_AFTER_INIT_FAILED,{error:M instanceof Error?M.message:String(M)}),await Li(e,{event:rn.SNAPSHOT_AFTER_INIT_FAILED,message:M instanceof Error?M.message:String(M)})}r.info(Pe.INITIALIZING_TEMP_FILES);let z=await qS(u,e,r),te=Sw(z,r);try{let M=C.filesToParse.length,ne=w.length,pe=L.length,P=C.skippedOversized.length;(pe>0||P>0)&&r.warn(Pe.PARSE_FAILURES_OR_SKIPPED,{filesRequested:M,filesParsed:ne,filesFailed:pe,filesSkippedOversized:P});let Ae=QS({filesRequested:M,filesParsed:ne,filesFailed:pe,failures:L,filesSkippedOversized:P});return await YS(e,{filesRequested:M,filesParsed:ne,filesFailed:pe,failures:L,filesSkippedOversized:P}),Ae}finally{_w(z,te)}}finally{await d.close()}}};function _w(t,e){try{t?.stop()}finally{e()}}function Sw(t,e){if(!t)return()=>{};let r=()=>{e.info(Pe.CLEANING_UP_TEMP_FILES),t.tempFileManager.cleanup().catch(n=>e.error(Pe.TEMP_FILE_CLEANUP_FAILED,{error:String(n)})).finally(()=>t.stop())};for(let n of tT)process.on(n,r);return()=>{for(let n of tT)process.removeListener(n,r)}}import rT from"fs/promises";var xn={CLEANING:t=>`Cleaning ${t}...`,DELETED:"Cleaned .docuvia/local.db database.",NOT_FOUND:"No local database found to clean.",DELETE_FAILED:t=>`Failed to delete database at ${t}`,PATH_ESCAPES_WORKSPACE:(t,e)=>`Refusing to delete database at ${t}: resolved outside workspace ${e}`,DELETED_AT:t=>`Deleted local database at ${t}`},cl={START:"clean.start",SUMMARY:"clean.summary"};async function cp(t,e){await De(t,ig,e)}async function up(t,e){await cp(t,{event:cl.SUMMARY,...e})}import dp from"fs";import Ms from"path";function bi(t,e){let r=Ms.resolve(e),n=Ms.resolve(t);return n===r||n.startsWith(`${r}${Ms.sep}`)}function ul(t,e){let r=Ms.resolve(e),n=Ms.resolve(r,t);if(!bi(n,r))return{status:"outside"};if(!dp.existsSync(n))return{status:"missing"};try{let i=dp.realpathSync(r),s=dp.realpathSync(n);if(!bi(s,i))return{status:"outside"}}catch{return{status:"missing"}}return{status:"ok",resolvedPath:n}}var dl=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(){let{workspaceRoot:e,logger:r}=this,n=ie(e);if(!bi(n,e))throw new E(T.CLEAN_WORKFLOW_FAILED,xn.PATH_ESCAPES_WORKSPACE(n,e));r.info(xn.CLEANING(n)),await cp(e,{event:cl.START});let i=!0;try{await rT.access(n)}catch{i=!1}if(!i){let o={deleted:!1,message:xn.NOT_FOUND};return await up(e,o),o}try{await rT.unlink(n)}catch(o){throw E.wrap(T.CLEAN_WORKFLOW_FAILED,xn.DELETE_FAILED(n),o)}r.info(xn.DELETED_AT(n));let s={deleted:!0,message:xn.DELETED};return await up(e,s),s}};var pl={GETTING_STATUS:"Getting status...",DB_NOT_FOUND:'Local database not found. Please run "docuvia init".'},gl={START:"status.start",ERROR:"status.error",SUMMARY:"status.summary"};async function fl(t,e){await De(t,sg,e)}var Tw="ensureHydrated: automatic hydration refused; local.db left untouched (see reason)";async function nn(t,e){let r=y.resolve(A.GraphStoreOpener),n;try{n=await r({dbPath:ie(t),readonly:!1})}catch{return}try{let i=y.resolve(A.HydrationService,{logger:e});if(await i.isStale(t,n)){let s=await i.hydrate(t,n);s.refused&&e.warn(Tw,{refusalReason:s.refusalReason})}}finally{await n.close()}}var wi={FRESH:"fresh",STALE:"stale",UNKNOWN:"unknown"},ml={state:wi.UNKNOWN};async function hl(t,e){try{if(!y.has(A.GitProvider))return ml;let n=await y.resolve(A.GitProvider).getHeadSha(t);if(!n)return ml;let i=e.meta.get(S.META_KEY_LAST_INGESTED_SOURCE_SHA);return i?{state:i===n?wi.FRESH:wi.STALE,graphSourceSha:i,headSha:n}:ml}catch{return ml}}var Un={COMMIT_MESSAGE:"commitMessage",CONTRACT_SYMBOL:"contractSymbol"};function lr(t){let e=t.meta.get(S.META_KEY_TIER_C_QUEUE);if(!e)return[];try{let r=JSON.parse(e);return Array.isArray(r)?r.filter(Aw):[]}catch{return[]}}function Aw(t){if(!t||typeof t!="object")return!1;let e=t;return(e.kind===Un.COMMIT_MESSAGE||e.kind===Un.CONTRACT_SYMBOL)&&typeof e.target=="string"&&typeof e.commitSha=="string"}function nT(t,e){if(e.length===0)return;let r=lr(t),n=new Map(r.map(i=>[i.target,i]));for(let i of e)n.set(i.target,i);t.meta.set(S.META_KEY_TIER_C_QUEUE,JSON.stringify(Array.from(n.values())))}function iT(t,e){if(e.length===0)return;let r=new Set(e),n=lr(t).filter(i=>!r.has(i.target));t.meta.set(S.META_KEY_TIER_C_QUEUE,JSON.stringify(n))}function sT(t,e,r){let n=lr(t),i=n.findIndex(a=>a.target===e);if(i===-1)return{evicted:!1,failCount:0};let s=(n[i].failCount??0)+1;if(s>=r){let a=n.filter((l,c)=>c!==i);return t.meta.set(S.META_KEY_TIER_C_QUEUE,JSON.stringify(a)),{evicted:!0,failCount:s}}let o=n.slice();return o[i]={...o[i],failCount:s},t.meta.set(S.META_KEY_TIER_C_QUEUE,JSON.stringify(o)),{evicted:!1,failCount:s}}var El=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(){let{workspaceRoot:e,logger:r}=this;r.info(pl.GETTING_STATUS),await fl(e,{event:gl.START}),await nn(e,r);let n=y.resolve(A.GraphStoreOpener),i;try{i=await n({dbPath:ie(e),readonly:!0})}catch(s){if(s instanceof E&&s.code===T.DB_NOT_FOUND){let o=new E(T.DB_NOT_FOUND,pl.DB_NOT_FOUND,s);throw await fl(e,{event:gl.ERROR,message:pl.DB_NOT_FOUND}),o}throw s}try{let{l2Nodes:s,l3Nodes:o}=i.graph.count(),{totalFiles:a,processedFiles:l}=i.files.getTierBCoverage(),c={projects:i.projects.count(),l2Nodes:s,l3Nodes:o,tierBFilesProcessed:l,tierBFilesTotal:a,tierCQueued:lr(i).length,graphFreshness:(await hl(e,i)).state};return await fl(e,{event:gl.SUMMARY,...c}),c}finally{await i.close()}}};var Hn={STARTING:t=>`Starting sync for project ${t}...`,DB_NOT_FOUND:'Local database not found. Please run "docuvia init".',NOTHING_TO_SYNC:"Nothing to sync: no changed files detected.",NOTHING_NEW:t=>`Nothing new to sync (${t} module(s) skipped, no remote match).`,SYNCED:(t,e)=>`Synced ${t} decision(s), ${e} module(s) skipped.`},Bn={START:"sync.start",ERROR:"sync.error",SUMMARY:"sync.summary"};async function Kn(t,e){await De(t,og,e)}import _l from"fs/promises";import pp from"path";function gp(t){return pp.join(t,he,vr,hg)}var Rw=1e4,yw=100,Iw=6e4,Ow=".lock",Lw={TIMED_OUT_WAITING:t=>`Timed out waiting for the sync-state lock at ${t} \u2014 another docuvia publish may be stuck`};async function Nw(t,e){let r=`${t}${Ow}`;await _l.mkdir(pp.dirname(r),{recursive:!0});try{return await e(r,{maxWaitMs:Rw,retryIntervalMs:yw,staleAfterMs:Iw})}catch(n){throw n instanceof eo?E.wrap(T.DB_LOCKED,Lw.TIMED_OUT_WAITING(r),n):n}}async function oT(t,e,r){let n=await Nw(gp(t),e);try{return await r()}finally{await n.release()}}async function aT(t){try{let e=await _l.readFile(gp(t),H);return JSON.parse(e)}catch{return{}}}async function lT(t,e){let r=gp(t);await _l.mkdir(pp.dirname(r),{recursive:!0}),await _l.writeFile(r,JSON.stringify(e,null,2),H)}var Sl=class{constructor(e,r,n,i){this.workspaceRoot=e;this.logger=r;this.apiUrl=n;this.pat=i}workspaceRoot;logger;apiUrl;pat;async execute(e){let{workspaceRoot:r,logger:n}=this,{projectId:i,commitSha:s}=e;n.info(Hn.STARTING(i)),await Kn(r,{event:Bn.START,projectId:i,commitSha:s??null});let o=y.resolve(A.GitProvider),a=s?await o.getFilesChangedByCommit(r,s):[...await o.listModifiedFiles(r),...await o.listUntrackedFiles(r)],l=new Set(a.filter(Boolean));if(l.size===0){let p={synced:0,skipped:0,message:Hn.NOTHING_TO_SYNC};return await Kn(r,{event:Bn.SUMMARY,projectId:i,...p}),p}let c=y.resolve(A.GraphStoreOpener),u;try{u=await c({dbPath:ie(r),readonly:!0})}catch(p){throw p instanceof E&&p.code===T.DB_NOT_FOUND?(await Kn(r,{event:Bn.ERROR,projectId:i,message:Hn.DB_NOT_FOUND}),new E(T.DB_NOT_FOUND,Hn.DB_NOT_FOUND,p)):p}try{let d=y.resolve(A.RemoteSyncClient)();d.initialize({apiUrl:this.apiUrl,pat:this.pat});let f;try{f=await d.fetchRemoteL2Nodes(i)}catch(w){let L=w instanceof Error?w.message:String(w);throw await Kn(r,{event:Bn.ERROR,projectId:i,message:L}),w}let m=new Map(f.map(w=>[w.name,w.id])),_=u.graph.findNodesForChangedFiles(Array.from(l)),O=y.resolve(A.ProcessLock),C=await oT(r,O,async()=>{let w=await aT(r),L=w[i]??{syncedContentHashes:[]},$=new Set(L.syncedContentHashes),{events:Q,newlySyncedHashes:z,skippedL2Count:te}=this.buildSyncPushEvents(_,m,$);if(Q.length===0)return{synced:0,skipped:te,message:Hn.NOTHING_NEW(te)};let M;try{M=await d.pushSyncEvents(i,Q)}catch(pe){let P=pe instanceof Error?pe.message:String(pe);throw await Kn(r,{event:Bn.ERROR,projectId:i,message:P}),pe}L.syncedContentHashes=Array.from(new Set([...$,...z])),w[i]=L,await lT(r,w);let ne=M.processed??Q.length;return{synced:ne,skipped:te,message:Hn.SYNCED(ne,te)}});return await Kn(r,{event:Bn.SUMMARY,projectId:i,...C}),C}finally{await u.close()}}buildSyncPushEvents(e,r,n){let i=[],s=[],o=0;for(let{l2Node:a,l3Nodes:l}of e){let c=r.get(a.name);if(c===void 0){o++;continue}for(let u of l)u.content_hash&&n.has(u.content_hash)||(i.push(this.buildL3PushEvent(c,u)),u.content_hash&&s.push(u.content_hash))}return{events:i,newlySyncedHashes:s,skippedL2Count:o}}buildL3PushEvent(e,r){return{type:eg.CREATE_L3,payload:{l2NodeId:e,title:r.title,content:r.content,nodeType:r.node_type,confidence:r.confidence,sourceCommits:r.source_commits?JSON.parse(r.source_commits):void 0,contentHash:r.content_hash}}}};import ZF from"fs";import eM from"path";var J={ANALYZING:"Analyzing project...",AUTO_ANALYZING:"Checking knowledge graph freshness...",AUTO_FULL_INGESTION:"No existing knowledge graph found \u2014 running full ingestion...",SNAPSHOT_AFTER_FULL_INGESTION_FAILED:"Failed to pack the knowledge graph onto the knowledge branch (non-fatal -- the local graph is intact; run `docuvia snapshot` manually or push to retry)",AUTO_DELTA_INGESTION:"Re-parsing changed files since the last analysis...",NODE_KEY_FORMAT_STALE:"Knowledge graph predates the current node_key format -- running a full re-ingestion instead of a delta to avoid mixing old and new formats...",HEAD_NOT_DESCENDANT_OF_LAST_INGESTED:"HEAD has moved backward relative to the last-ingested commit (e.g. a soft reset, undone amend, or aborted rebase) -- running a full re-ingestion instead of a delta to avoid misclassifying still-present files as deleted...",AUTO_NOOP:"Knowledge graph already up to date with HEAD.",AUTO_NOOP_DIRTY_WORKTREE:"Knowledge graph already up to date with HEAD -- but the working tree has uncommitted changes that won't be reflected until they're committed (analyze's fast-path only tracks HEAD, not the filesystem).",TIER_B_CAP_NUDGE:"Changed code since the last Tier B batch has exceeded the cap -- push, or run `docuvia analyze --escalate-to-lsp && docuvia snapshot`, to trigger it.",EXTRACTING:t=>`Extracting decisions from ${t}...`,FILES_DROPPED:t=>`Dropped ${t} file(s) from decision extraction (file-count/byte cap)`,NO_GRAPH_TO_ATTACH:"run `docuvia init` first \u2014 decisions need a graph to attach to",AGENT_AUTHORED_ANCHOR_UNRESOLVABLE:t=>`cannot anchor a decision to ${t}: it is not a parseable source file, so it can never have an L2 node. Write the decision against a source file this change touched (e.g. a .ts/.py/.go file) instead`,PATH_NOT_FOUND:t=>`Path does not exist: ${t}`,LLM_NON_JSON_OUTPUT:"LLM returned non-JSON output for decision extraction",FILE_READ_FAILED:"Failed to read file for decision extraction",TIER_B_STARTING:"Running the Tier B LSP escalation batch...",TIER_B_FULL_RESYNC_QUEUED:t=>`Full resync (--full): queued ${t} tracked file(s) for Tier B re-processing`,TIER_B_EMPTY_QUEUE:"Tier B queue is empty -- nothing to escalate.",TIER_B_DEGRADED:t=>`LSP unavailable -- AST-level edges left untouched (${t})`,TIER_B_SUMMARY:(t,e,r,n)=>`Tier B batch complete: ${t} file(s) processed, ${e} corrected edge(s) applied`+(n>0?`, ${n} file(s) not applicable to their LSP project (kept at Tier A)`:"")+(r>0?`, ${r} file(s) permanently failed (dropped from the re-try queue)`:""),TIER_B_FORWARD_SEEDED:(t,e,r,n)=>`Tier B forward resolution seeded ${e}/${r} ${t} file(s) (staleness-skipped: ${n})`,TIER_C_SKIPPED:t=>`Tier C drain skipped this run (${t})`,TIER_C_ITEM_EVICTED:(t,e,r)=>`Tier C candidate permanently failed after ${r} attempt(s), evicted from queue (${t}: ${e})`,TIER_C_SUMMARY:(t,e)=>`Tier C drain complete: ${t} candidate(s) processed, ${e} decision(s) persisted`,FLUSH_STAGED_L3_DISABLED:"commit-l3-write is disabled -- skipping the staged-L3 flush",FLUSH_STAGED_L3_EMPTY:"No staged L3 decisions to flush.",FLUSH_STAGED_L3_SUMMARY:(t,e)=>`Flushed ${t} staged L3 decision(s)`+(e>0?`, ${e} left staged for a future commit.`:"."),FLUSH_STAGED_L3_FILE_DELETED:t=>`Staged L3 decision(s) for ${t} dropped -- the file was deleted by this commit`,FLUSH_STAGED_L3_ERROR:t=>`Flush of staged L3 decisions failed: ${t} -- the staging file was left untouched for the next flush to retry`,L3_ANCHOR_CONTRADICTION:(t,e,r)=>`Staged decision "${t}" conflicts with an existing ${e} decision on the same anchor`+(r?` (written at commit ${r})`:"")+" with divergent content -- verify which rationale is correct before building on either"},Y={AUTO_START:"analyze.auto.start",AUTO_ERROR:"analyze.auto.error",DELTA_NOOP:"analyze.delta.noop",DELTA_NO_HEAD:"analyze.delta.no_head",TIER_B_COMMIT_CAP_NUDGE:"analyze.auto.tier_b_cap_nudge",FULL_START:"analyze.full.start",FULL_SUMMARY:"analyze.full.summary",FULL_PARSE_FAILURE:"analyze.full.parse_failure",FULL_FILE_SKIPPED_OVERSIZED:"analyze.full.file_skipped_oversized",FULL_SNAPSHOT_FAILED:"analyze.full.snapshot_failed",FULL_CALL_RESOLUTION:"analyze.full.call_resolution",DELTA_START:"analyze.delta.start",DELTA_NODE_KEY_FORMAT_STALE:"analyze.delta.node_key_format_stale",DELTA_HEAD_NOT_DESCENDANT:"analyze.delta.head_not_descendant",DELTA_SUMMARY:"analyze.delta.summary",DELTA_FILE_SKIPPED_OVERSIZED:"analyze.delta.file_skipped_oversized",DELTA_PARSE_FAILURE:"analyze.delta.parse_failure",DELTA_CALL_RESOLUTION:"analyze.delta.call_resolution",FOCUSED_START:"analyze.focused.start",FOCUSED_ERROR:"analyze.focused.error",FOCUSED_SUMMARY:"analyze.focused.summary",FOCUSED_PERSISTED:"analyze.focused.persisted",FOCUSED_PERSIST_SKIPPED:"analyze.focused.persist_skipped",TIER_B_START:"analyze.tierB.start",TIER_B_FULL_RESYNC_QUEUED:"analyze.tierB.full_resync_queued",TIER_B_EMPTY_QUEUE:"analyze.tierB.empty_queue",TIER_B_FILE_DROPPED_DELETED:"analyze.tierB.file_dropped_deleted",TIER_B_FILE_SKIPPED_LANGUAGE:"analyze.tierB.file_skipped_language",TIER_B_FILE_SKIPPED_NOT_APPLICABLE:"analyze.tierB.file_skipped_not_applicable",TIER_B_DEGRADED:"analyze.tierB.degraded",TIER_B_FILE_FAILED:"analyze.tierB.file_failed",TIER_B_SUMMARY:"analyze.tierB.summary",TIER_B_ERROR:"analyze.tierB.error",TIER_B_FORWARD_SEEDED:"analyze.tierB.forward_seeded",TIER_C_START:"analyze.tierC.start",TIER_C_EMPTY_QUEUE:"analyze.tierC.empty_queue",TIER_C_SKIPPED:"analyze.tierC.skipped",TIER_C_LOAD_NOTE:"analyze.tierC.load_note",TIER_C_ITEM_SUCCESS:"analyze.tierC.item_success",TIER_C_ITEM_FAILED:"analyze.tierC.item_failed",TIER_C_ITEM_EVICTED:"analyze.tierC.item_evicted",TIER_C_SUMMARY:"analyze.tierC.summary",FLUSH_STAGED_L3_DISABLED:"analyze.flushStagedL3.disabled",FLUSH_STAGED_L3_SUMMARY:"analyze.flushStagedL3.summary"},cT=`You are an expert software architect reviewing source code directly (not commit history).