docuvia 1.13.2 → 1.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -1,25 +1,25 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
3
- import{a as ug,b as dg,d as We,f as pg,g as gg,h as fg}from"./chunk-BMDPUIOC.js";import{A as bg,B as wg,C as Fg,D as Mg,E as hc,F as Ec,G as kg,H as Xs,I as Gg,J as xg,K as Zs,L as Ug,M as eo,N as Ht,O as fn,P as kr,a as hg,b as pc,c as qn,d as Qs,e as gc,f as fc,g as Qn,h as Eg,i as _g,j as Sg,k as At,l as Mr,m as Tg,n as Ag,o as Rg,p as yg,q as Og,r as mc,s as Ig,t as ji,u as Lg,v as Cg,w as Ng,x as Pg,y as Dg,z as vg}from"./chunk-UNIVCYR6.js";import{a as mg,b as dc,c as h,d as g,e as Nt,g as Gr}from"./chunk-N4A7IONA.js";import{$ as Zp,A as dn,B as Te,C as Kp,D as Xt,Da as cc,E as ac,Ea as Vs,F as Ye,Fa as zs,G as Ws,Ga as uc,H as Pr,Ha as Yn,I as $p,Ia as Wn,J as $n,Ja as Js,K as pn,Ka as gn,L as Ut,La as jn,M as lc,Ma as Vn,N as Yp,Na as vr,O as dr,Oa as qs,P as Ki,Pa as gr,Q as Ee,Qa as Wi,R as Dr,Ra as br,S as Wp,Sa as cg,T as jp,Ta as K,U as Vp,Ua as zn,V as zp,Va as Jn,W as $i,Wa as wr,X as Jp,Xa as Fr,Y as qp,Z as Qp,_ as Xp,a as Oe,aa as eg,b as Up,ba as tg,c as he,ca as ct,da as Yi,e as Hp,ea as rg,f as T,fa as ng,g as E,ga as ig,h as O,ha as sg,i as R,ia as og,j as y,ja as pr,k as A,ka as Tt,l as Ct,la as ag,m as ic,ma as se,n as B,na as H,o as sc,oa as Zt,p as un,pa as js,q as Bp,qa as S,r as Kn,ra as lg,s as Bi,t as oc,u as Ys,v as qe,w as Nr,x as de,y as ur,z as xt}from"./chunk-TFGHINEH.js";import{a as be,b as U,c as nc}from"./chunk-KVOCOCYJ.js";var xf=U(si=>{"use strict";Object.defineProperty(si,"__esModule",{value:!0});si.splitWhen=si.flatten=void 0;function gO(t){return t.reduce((e,r)=>[].concat(e,r),[])}si.flatten=gO;function fO(t,e){let r=[[]],n=0;for(let i of t)e(i)?(n++,r[n]=[]):r[n].push(i);return r}si.splitWhen=fO});var Uf=U(Ao=>{"use strict";Object.defineProperty(Ao,"__esModule",{value:!0});Ao.isEnoentCodeError=void 0;function mO(t){return t.code==="ENOENT"}Ao.isEnoentCodeError=mO});var Hf=U(Ro=>{"use strict";Object.defineProperty(Ro,"__esModule",{value:!0});Ro.createDirentFromStats=void 0;var Gc=class{constructor(e,r){this.name=e,this.isBlockDevice=r.isBlockDevice.bind(r),this.isCharacterDevice=r.isCharacterDevice.bind(r),this.isDirectory=r.isDirectory.bind(r),this.isFIFO=r.isFIFO.bind(r),this.isFile=r.isFile.bind(r),this.isSocket=r.isSocket.bind(r),this.isSymbolicLink=r.isSymbolicLink.bind(r)}};function hO(t,e){return new Gc(t,e)}Ro.createDirentFromStats=hO});var Yf=U(ke=>{"use strict";Object.defineProperty(ke,"__esModule",{value:!0});ke.convertPosixPathToPattern=ke.convertWindowsPathToPattern=ke.convertPathToPattern=ke.escapePosixPath=ke.escapeWindowsPath=ke.escape=ke.removeLeadingDotSegment=ke.makeAbsolute=ke.unixify=void 0;var EO=be("os"),_O=be("path"),Bf=EO.platform()==="win32",SO=2,TO=/(\\?)([()*?[\]{|}]|^!|[!+@](?=\()|\\(?![!()*+?@[\]{|}]))/g,AO=/(\\?)([()[\]{}]|^!|[!+@](?=\())/g,RO=/^\\\\([.?])/,yO=/\\(?![!()+@[\]{}])/g;function OO(t){return t.replace(/\\/g,"/")}ke.unixify=OO;function IO(t,e){return _O.resolve(t,e)}ke.makeAbsolute=IO;function LO(t){if(t.charAt(0)==="."){let e=t.charAt(1);if(e==="/"||e==="\\")return t.slice(SO)}return t}ke.removeLeadingDotSegment=LO;ke.escape=Bf?xc:Uc;function xc(t){return t.replace(AO,"\\$2")}ke.escapeWindowsPath=xc;function Uc(t){return t.replace(TO,"\\$2")}ke.escapePosixPath=Uc;ke.convertPathToPattern=Bf?Kf:$f;function Kf(t){return xc(t).replace(RO,"//$1").replace(yO,"/")}ke.convertWindowsPathToPattern=Kf;function $f(t){return Uc(t)}ke.convertPosixPathToPattern=$f});var jf=U((kB,Wf)=>{"use strict";Wf.exports=function(e){if(typeof e!="string"||e==="")return!1;for(var r;r=/(\\).|([@?!+*]\(.*\))/g.exec(e);){if(r[2])return!0;e=e.slice(r.index+r[0].length)}return!1}});var Jf=U((GB,zf)=>{"use strict";var CO=jf(),Vf={"{":"}","(":")","[":"]"},NO=function(t){if(t[0]==="!")return!0;for(var e=0,r=-2,n=-2,i=-2,s=-2,o=-2;e<t.length;){if(t[e]==="*"||t[e+1]==="?"&&/[\].+)]/.test(t[e])||n!==-1&&t[e]==="["&&t[e+1]!=="]"&&(n<e&&(n=t.indexOf("]",e)),n>e&&(o===-1||o>n||(o=t.indexOf("\\",e),o===-1||o>n)))||i!==-1&&t[e]==="{"&&t[e+1]!=="}"&&(i=t.indexOf("}",e),i>e&&(o=t.indexOf("\\",e),o===-1||o>i))||s!==-1&&t[e]==="("&&t[e+1]==="?"&&/[:!=]/.test(t[e+2])&&t[e+3]!==")"&&(s=t.indexOf(")",e),s>e&&(o=t.indexOf("\\",e),o===-1||o>s))||r!==-1&&t[e]==="("&&t[e+1]!=="|"&&(r<e&&(r=t.indexOf("|",e)),r!==-1&&t[r+1]!==")"&&(s=t.indexOf(")",r),s>r&&(o=t.indexOf("\\",r),o===-1||o>s))))return!0;if(t[e]==="\\"){var a=t[e+1];e+=2;var l=Vf[a];if(l){var c=t.indexOf(l,e);c!==-1&&(e=c+1)}if(t[e]==="!")return!0}else e++}return!1},PO=function(t){if(t[0]==="!")return!0;for(var e=0;e<t.length;){if(/[*?{}()[\]]/.test(t[e]))return!0;if(t[e]==="\\"){var r=t[e+1];e+=2;var n=Vf[r];if(n){var i=t.indexOf(n,e);i!==-1&&(e=i+1)}if(t[e]==="!")return!0}else e++}return!1};zf.exports=function(e,r){if(typeof e!="string"||e==="")return!1;if(CO(e))return!0;var n=NO;return r&&r.strict===!1&&(n=PO),n(e)}});var Qf=U((xB,qf)=>{"use strict";var DO=Jf(),vO=be("path").posix.dirname,bO=be("os").platform()==="win32",Hc="/",wO=/\\/g,FO=/[\{\[].*[\}\]]$/,MO=/(^|[^\\])([\{\[]|\([^\)]+$)/,kO=/\\([\!\*\?\|\[\]\(\)\{\}])/g;qf.exports=function(e,r){var n=Object.assign({flipBackslashes:!0},r);n.flipBackslashes&&bO&&e.indexOf(Hc)<0&&(e=e.replace(wO,Hc)),FO.test(e)&&(e+=Hc),e+="a";do e=vO(e);while(DO(e)||MO.test(e));return e.replace(kO,"$1")}});var yo=U(Dt=>{"use strict";Dt.isInteger=t=>typeof t=="number"?Number.isInteger(t):typeof t=="string"&&t.trim()!==""?Number.isInteger(Number(t)):!1;Dt.find=(t,e)=>t.nodes.find(r=>r.type===e);Dt.exceedsLimit=(t,e,r=1,n)=>n===!1||!Dt.isInteger(t)||!Dt.isInteger(e)?!1:(Number(e)-Number(t))/Number(r)>=n;Dt.escapeNode=(t,e=0,r)=>{let n=t.nodes[e];n&&(r&&n.type===r||n.type==="open"||n.type==="close")&&n.escaped!==!0&&(n.value="\\"+n.value,n.escaped=!0)};Dt.encloseBrace=t=>t.type!=="brace"?!1:t.commas>>0+t.ranges>>0===0?(t.invalid=!0,!0):!1;Dt.isInvalidBrace=t=>t.type!=="brace"?!1:t.invalid===!0||t.dollar?!0:t.commas>>0+t.ranges>>0===0||t.open!==!0||t.close!==!0?(t.invalid=!0,!0):!1;Dt.isOpenOrClose=t=>t.type==="open"||t.type==="close"?!0:t.open===!0||t.close===!0;Dt.reduce=t=>t.reduce((e,r)=>(r.type==="text"&&e.push(r.value),r.type==="range"&&(r.type="text"),e),[]);Dt.flatten=(...t)=>{let e=[],r=n=>{for(let i=0;i<n.length;i++){let s=n[i];if(Array.isArray(s)){r(s);continue}s!==void 0&&e.push(s)}return e};return r(t),e}});var Oo=U((HB,Zf)=>{"use strict";var Xf=yo();Zf.exports=(t,e={})=>{let r=(n,i={})=>{let s=e.escapeInvalid&&Xf.isInvalidBrace(i),o=n.invalid===!0&&e.escapeInvalid===!0,a="";if(n.value)return(s||o)&&Xf.isOpenOrClose(n)?"\\"+n.value:n.value;if(n.value)return n.value;if(n.nodes)for(let l of n.nodes)a+=r(l);return a};return r(t)}});var tm=U((BB,em)=>{"use strict";em.exports=function(t){return typeof t=="number"?t-t===0:typeof t=="string"&&t.trim()!==""?Number.isFinite?Number.isFinite(+t):isFinite(+t):!1}});var um=U((KB,cm)=>{"use strict";var rm=tm(),An=(t,e,r)=>{if(rm(t)===!1)throw new TypeError("toRegexRange: expected the first argument to be a number");if(e===void 0||t===e)return String(t);if(rm(e)===!1)throw new TypeError("toRegexRange: expected the second argument to be a number.");let n={relaxZeros:!0,...r};typeof n.strictZeros=="boolean"&&(n.relaxZeros=n.strictZeros===!1);let i=String(n.relaxZeros),s=String(n.shorthand),o=String(n.capture),a=String(n.wrap),l=t+":"+e+"="+i+s+o+a;if(An.cache.hasOwnProperty(l))return An.cache[l].result;let c=Math.min(t,e),u=Math.max(t,e);if(Math.abs(c-u)===1){let _=t+"|"+e;return n.capture?`(${_})`:n.wrap===!1?_:`(?:${_})`}let p=lm(t)||lm(e),d={min:t,max:e,a:c,b:u},f=[],m=[];if(p&&(d.isPadded=p,d.maxLen=String(d.max).length),c<0){let _=u<0?Math.abs(u):1;m=nm(_,Math.abs(c),d,n),c=d.a=0}return u>=0&&(f=nm(c,u,d,n)),d.negatives=m,d.positives=f,d.result=GO(m,f,n),n.capture===!0?d.result=`(${d.result})`:n.wrap!==!1&&f.length+m.length>1&&(d.result=`(?:${d.result})`),An.cache[l]=d,d.result};function GO(t,e,r){let n=Bc(t,e,"-",!1,r)||[],i=Bc(e,t,"",!1,r)||[],s=Bc(t,e,"-?",!0,r)||[];return n.concat(s).concat(i).join("|")}function xO(t,e){let r=1,n=1,i=sm(t,r),s=new Set([e]);for(;t<=i&&i<=e;)s.add(i),r+=1,i=sm(t,r);for(i=om(e+1,n)-1;t<i&&i<=e;)s.add(i),n+=1,i=om(e+1,n)-1;return s=[...s],s.sort(BO),s}function UO(t,e,r){if(t===e)return{pattern:t,count:[],digits:0};let n=HO(t,e),i=n.length,s="",o=0;for(let a=0;a<i;a++){let[l,c]=n[a];l===c?s+=l:l!=="0"||c!=="9"?s+=KO(l,c,r):o++}return o&&(s+=r.shorthand===!0?"\\d":"[0-9]"),{pattern:s,count:[o],digits:i}}function nm(t,e,r,n){let i=xO(t,e),s=[],o=t,a;for(let l=0;l<i.length;l++){let c=i[l],u=UO(String(o),String(c),n),p="";if(!r.isPadded&&a&&a.pattern===u.pattern){a.count.length>1&&a.count.pop(),a.count.push(u.count[0]),a.string=a.pattern+am(a.count),o=c+1;continue}r.isPadded&&(p=$O(c,r,n)),u.string=p+u.pattern+am(u.count),s.push(u),o=c+1,a=u}return s}function Bc(t,e,r,n,i){let s=[];for(let o of t){let{string:a}=o;!n&&!im(e,"string",a)&&s.push(r+a),n&&im(e,"string",a)&&s.push(r+a)}return s}function HO(t,e){let r=[];for(let n=0;n<t.length;n++)r.push([t[n],e[n]]);return r}function BO(t,e){return t>e?1:e>t?-1:0}function im(t,e,r){return t.some(n=>n[e]===r)}function sm(t,e){return Number(String(t).slice(0,-e)+"9".repeat(e))}function om(t,e){return t-t%Math.pow(10,e)}function am(t){let[e=0,r=""]=t;return r||e>1?`{${e+(r?","+r:"")}}`:""}function KO(t,e,r){return`[${t}${e-t===1?"":"-"}${e}]`}function lm(t){return/^-?(0+)\d/.test(t)}function $O(t,e,r){if(!e.isPadded)return t;let n=Math.abs(e.maxLen-String(t).length),i=r.relaxZeros!==!1;switch(n){case 0:return"";case 1:return i?"0?":"0";case 2:return i?"0{0,2}":"00";default:return i?`0{0,${n}}`:`0{${n}}`}}An.cache={};An.clearCache=()=>An.cache={};cm.exports=An});var Yc=U(($B,Em)=>{"use strict";var YO=be("util"),pm=um(),dm=t=>t!==null&&typeof t=="object"&&!Array.isArray(t),WO=t=>e=>t===!0?Number(e):String(e),Kc=t=>typeof t=="number"||typeof t=="string"&&t!=="",as=t=>Number.isInteger(+t),$c=t=>{let e=`${t}`,r=-1;if(e[0]==="-"&&(e=e.slice(1)),e==="0")return!1;for(;e[++r]==="0";);return r>0},jO=(t,e,r)=>typeof t=="string"||typeof e=="string"?!0:r.stringify===!0,VO=(t,e,r)=>{if(e>0){let n=t[0]==="-"?"-":"";n&&(t=t.slice(1)),t=n+t.padStart(n?e-1:e,"0")}return r===!1?String(t):t},Lo=(t,e)=>{let r=t[0]==="-"?"-":"";for(r&&(t=t.slice(1),e--);t.length<e;)t="0"+t;return r?"-"+t:t},zO=(t,e,r)=>{t.negatives.sort((a,l)=>a<l?-1:a>l?1:0),t.positives.sort((a,l)=>a<l?-1:a>l?1:0);let n=e.capture?"":"?:",i="",s="",o;return t.positives.length&&(i=t.positives.map(a=>Lo(String(a),r)).join("|")),t.negatives.length&&(s=`-(${n}${t.negatives.map(a=>Lo(String(a),r)).join("|")})`),i&&s?o=`${i}|${s}`:o=i||s,e.wrap?`(${n}${o})`:o},gm=(t,e,r,n)=>{if(r)return pm(t,e,{wrap:!1,...n});let i=String.fromCharCode(t);if(t===e)return i;let s=String.fromCharCode(e);return`[${i}-${s}]`},fm=(t,e,r)=>{if(Array.isArray(t)){let n=r.wrap===!0,i=r.capture?"":"?:";return n?`(${i}${t.join("|")})`:t.join("|")}return pm(t,e,r)},mm=(...t)=>new RangeError("Invalid range arguments: "+YO.inspect(...t)),hm=(t,e,r)=>{if(r.strictRanges===!0)throw mm([t,e]);return[]},JO=(t,e)=>{if(e.strictRanges===!0)throw new TypeError(`Expected step "${t}" to be a number`);return[]},qO=(t,e,r=1,n={})=>{let i=Number(t),s=Number(e);if(!Number.isInteger(i)||!Number.isInteger(s)){if(n.strictRanges===!0)throw mm([t,e]);return[]}i===0&&(i=0),s===0&&(s=0);let o=i>s,a=String(t),l=String(e),c=String(r);r=Math.max(Math.abs(r),1);let u=$c(a)||$c(l)||$c(c),p=u?Math.max(a.length,l.length,c.length):0,d=u===!1&&jO(t,e,n)===!1,f=n.transform||WO(d);if(n.toRegex&&r===1)return gm(Lo(t,p),Lo(e,p),!0,n);let m={negatives:[],positives:[]},_=F=>m[F<0?"negatives":"positives"].push(Math.abs(F)),L=[],C=0;for(;o?i>=s:i<=s;)n.toRegex===!0&&r>1?_(i):L.push(VO(f(i,C),p,d)),i=o?i-r:i+r,C++;return n.toRegex===!0?r>1?zO(m,n,p):fm(L,null,{wrap:!1,...n}):L},QO=(t,e,r=1,n={})=>{if(!as(t)&&t.length>1||!as(e)&&e.length>1)return hm(t,e,n);let i=n.transform||(d=>String.fromCharCode(d)),s=`${t}`.charCodeAt(0),o=`${e}`.charCodeAt(0),a=s>o,l=Math.min(s,o),c=Math.max(s,o);if(n.toRegex&&r===1)return gm(l,c,!1,n);let u=[],p=0;for(;a?s>=o:s<=o;)u.push(i(s,p)),s=a?s-r:s+r,p++;return n.toRegex===!0?fm(u,null,{wrap:!1,options:n}):u},Io=(t,e,r,n={})=>{if(e==null&&Kc(t))return[t];if(!Kc(t)||!Kc(e))return hm(t,e,n);if(typeof r=="function")return Io(t,e,1,{transform:r});if(dm(r))return Io(t,e,0,r);let i={...n};return i.capture===!0&&(i.wrap=!0),r=r||i.step||1,as(r)?as(t)&&as(e)?qO(t,e,r,i):QO(t,e,Math.max(Math.abs(r),1),i):r!=null&&!dm(r)?JO(r,i):Io(t,e,1,r)};Em.exports=Io});var Tm=U((YB,Sm)=>{"use strict";var XO=Yc(),_m=yo(),ZO=(t,e={})=>{let r=(n,i={})=>{let s=_m.isInvalidBrace(i),o=n.invalid===!0&&e.escapeInvalid===!0,a=s===!0||o===!0,l=e.escapeInvalid===!0?"\\":"",c="";if(n.isOpen===!0)return l+n.value;if(n.isClose===!0)return console.log("node.isClose",l,n.value),l+n.value;if(n.type==="open")return a?l+n.value:"(";if(n.type==="close")return a?l+n.value:")";if(n.type==="comma")return n.prev.type==="comma"?"":a?n.value:"|";if(n.value)return n.value;if(n.nodes&&n.ranges>0){let u=_m.reduce(n.nodes),p=XO(...u,{...e,wrap:!1,toRegex:!0,strictZeros:!0});if(p.length!==0)return u.length>1&&p.length>1?`(${p})`:p}if(n.nodes)for(let u of n.nodes)c+=r(u,n);return c};return r(t)};Sm.exports=ZO});var ym=U((WB,Rm)=>{"use strict";var eI=Yc(),Am=Oo(),oi=yo(),Rn=(t="",e="",r=!1)=>{let n=[];if(t=[].concat(t),e=[].concat(e),!e.length)return t;if(!t.length)return r?oi.flatten(e).map(i=>`{${i}}`):e;for(let i of t)if(Array.isArray(i))for(let s of i)n.push(Rn(s,e,r));else for(let s of e)r===!0&&typeof s=="string"&&(s=`{${s}}`),n.push(Array.isArray(s)?Rn(i,s,r):i+s);return oi.flatten(n)},tI=(t,e={})=>{let r=e.rangeLimit===void 0?1e3:e.rangeLimit,n=(i,s={})=>{i.queue=[];let o=s,a=s.queue;for(;o.type!=="brace"&&o.type!=="root"&&o.parent;)o=o.parent,a=o.queue;if(i.invalid||i.dollar){a.push(Rn(a.pop(),Am(i,e)));return}if(i.type==="brace"&&i.invalid!==!0&&i.nodes.length===2){a.push(Rn(a.pop(),["{}"]));return}if(i.nodes&&i.ranges>0){let p=oi.reduce(i.nodes);if(oi.exceedsLimit(...p,e.step,r))throw new RangeError("expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.");let d=eI(...p,e);d.length===0&&(d=Am(i,e)),a.push(Rn(a.pop(),d)),i.nodes=[];return}let l=oi.encloseBrace(i),c=i.queue,u=i;for(;u.type!=="brace"&&u.type!=="root"&&u.parent;)u=u.parent,c=u.queue;for(let p=0;p<i.nodes.length;p++){let d=i.nodes[p];if(d.type==="comma"&&i.type==="brace"){p===1&&c.push(""),c.push("");continue}if(d.type==="close"){a.push(Rn(a.pop(),c,l));continue}if(d.value&&d.type!=="open"){c.push(Rn(c.pop(),d.value));continue}d.nodes&&n(d,i)}return c};return oi.flatten(n(t))};Rm.exports=tI});var Im=U((jB,Om)=>{"use strict";Om.exports={MAX_LENGTH:1e4,CHAR_0:"0",CHAR_9:"9",CHAR_UPPERCASE_A:"A",CHAR_LOWERCASE_A:"a",CHAR_UPPERCASE_Z:"Z",CHAR_LOWERCASE_Z:"z",CHAR_LEFT_PARENTHESES:"(",CHAR_RIGHT_PARENTHESES:")",CHAR_ASTERISK:"*",CHAR_AMPERSAND:"&",CHAR_AT:"@",CHAR_BACKSLASH:"\\",CHAR_BACKTICK:"`",CHAR_CARRIAGE_RETURN:"\r",CHAR_CIRCUMFLEX_ACCENT:"^",CHAR_COLON:":",CHAR_COMMA:",",CHAR_DOLLAR:"$",CHAR_DOT:".",CHAR_DOUBLE_QUOTE:'"',CHAR_EQUAL:"=",CHAR_EXCLAMATION_MARK:"!",CHAR_FORM_FEED:"\f",CHAR_FORWARD_SLASH:"/",CHAR_HASH:"#",CHAR_HYPHEN_MINUS:"-",CHAR_LEFT_ANGLE_BRACKET:"<",CHAR_LEFT_CURLY_BRACE:"{",CHAR_LEFT_SQUARE_BRACKET:"[",CHAR_LINE_FEED:`
4
- `,CHAR_NO_BREAK_SPACE:"\xA0",CHAR_PERCENT:"%",CHAR_PLUS:"+",CHAR_QUESTION_MARK:"?",CHAR_RIGHT_ANGLE_BRACKET:">",CHAR_RIGHT_CURLY_BRACE:"}",CHAR_RIGHT_SQUARE_BRACKET:"]",CHAR_SEMICOLON:";",CHAR_SINGLE_QUOTE:"'",CHAR_SPACE:" ",CHAR_TAB:" ",CHAR_UNDERSCORE:"_",CHAR_VERTICAL_LINE:"|",CHAR_ZERO_WIDTH_NOBREAK_SPACE:"\uFEFF"}});var Dm=U((VB,Pm)=>{"use strict";var rI=Oo(),{MAX_LENGTH:Lm,CHAR_BACKSLASH:Wc,CHAR_BACKTICK:nI,CHAR_COMMA:iI,CHAR_DOT:sI,CHAR_LEFT_PARENTHESES:oI,CHAR_RIGHT_PARENTHESES:aI,CHAR_LEFT_CURLY_BRACE:lI,CHAR_RIGHT_CURLY_BRACE:cI,CHAR_LEFT_SQUARE_BRACKET:Cm,CHAR_RIGHT_SQUARE_BRACKET:Nm,CHAR_DOUBLE_QUOTE:uI,CHAR_SINGLE_QUOTE:dI,CHAR_NO_BREAK_SPACE:pI,CHAR_ZERO_WIDTH_NOBREAK_SPACE:gI}=Im(),fI=(t,e={})=>{if(typeof t!="string")throw new TypeError("Expected a string");let r=e||{},n=typeof r.maxLength=="number"?Math.min(Lm,r.maxLength):Lm;if(t.length>n)throw new SyntaxError(`Input length (${t.length}), exceeds max characters (${n})`);let i={type:"root",input:t,nodes:[]},s=[i],o=i,a=i,l=0,c=t.length,u=0,p=0,d,f=()=>t[u++],m=_=>{if(_.type==="text"&&a.type==="dot"&&(a.type="text"),a&&a.type==="text"&&_.type==="text"){a.value+=_.value;return}return o.nodes.push(_),_.parent=o,_.prev=a,a=_,_};for(m({type:"bos"});u<c;)if(o=s[s.length-1],d=f(),!(d===gI||d===pI)){if(d===Wc){m({type:"text",value:(e.keepEscaping?d:"")+f()});continue}if(d===Nm){m({type:"text",value:"\\"+d});continue}if(d===Cm){l++;let _;for(;u<c&&(_=f());){if(d+=_,_===Cm){l++;continue}if(_===Wc){d+=f();continue}if(_===Nm&&(l--,l===0))break}m({type:"text",value:d});continue}if(d===oI){o=m({type:"paren",nodes:[]}),s.push(o),m({type:"text",value:d});continue}if(d===aI){if(o.type!=="paren"){m({type:"text",value:d});continue}o=s.pop(),m({type:"text",value:d}),o=s[s.length-1];continue}if(d===uI||d===dI||d===nI){let _=d,L;for(e.keepQuotes!==!0&&(d="");u<c&&(L=f());){if(L===Wc){d+=L+f();continue}if(L===_){e.keepQuotes===!0&&(d+=L);break}d+=L}m({type:"text",value:d});continue}if(d===lI){p++;let L={type:"brace",open:!0,close:!1,dollar:a.value&&a.value.slice(-1)==="$"||o.dollar===!0,depth:p,commas:0,ranges:0,nodes:[]};o=m(L),s.push(o),m({type:"open",value:d});continue}if(d===cI){if(o.type!=="brace"){m({type:"text",value:d});continue}let _="close";o=s.pop(),o.close=!0,m({type:_,value:d}),p--,o=s[s.length-1];continue}if(d===iI&&p>0){if(o.ranges>0){o.ranges=0;let _=o.nodes.shift();o.nodes=[_,{type:"text",value:rI(o)}]}m({type:"comma",value:d}),o.commas++;continue}if(d===sI&&p>0&&o.commas===0){let _=o.nodes;if(p===0||_.length===0){m({type:"text",value:d});continue}if(a.type==="dot"){if(o.range=[],a.value+=d,a.type="range",o.nodes.length!==3&&o.nodes.length!==5){o.invalid=!0,o.ranges=0,a.type="text";continue}o.ranges++,o.args=[];continue}if(a.type==="range"){_.pop();let L=_[_.length-1];L.value+=a.value+d,a=L,o.ranges--;continue}m({type:"dot",value:d});continue}m({type:"text",value:d})}do if(o=s.pop(),o.type!=="root"){o.nodes.forEach(C=>{C.nodes||(C.type==="open"&&(C.isOpen=!0),C.type==="close"&&(C.isClose=!0),C.nodes||(C.type="text"),C.invalid=!0)});let _=s[s.length-1],L=_.nodes.indexOf(o);_.nodes.splice(L,1,...o.nodes)}while(s.length>0);return m({type:"eos"}),i};Pm.exports=fI});var wm=U((zB,bm)=>{"use strict";var vm=Oo(),mI=Tm(),hI=ym(),EI=Dm(),yt=(t,e={})=>{let r=[];if(Array.isArray(t))for(let n of t){let i=yt.create(n,e);Array.isArray(i)?r.push(...i):r.push(i)}else r=[].concat(yt.create(t,e));return e&&e.expand===!0&&e.nodupes===!0&&(r=[...new Set(r)]),r};yt.parse=(t,e={})=>EI(t,e);yt.stringify=(t,e={})=>vm(typeof t=="string"?yt.parse(t,e):t,e);yt.compile=(t,e={})=>(typeof t=="string"&&(t=yt.parse(t,e)),mI(t,e));yt.expand=(t,e={})=>{typeof t=="string"&&(t=yt.parse(t,e));let r=hI(t,e);return e.noempty===!0&&(r=r.filter(Boolean)),e.nodupes===!0&&(r=[...new Set(r)]),r};yt.create=(t,e={})=>t===""||t.length<3?[t]:e.expand!==!0?yt.compile(t,e):yt.expand(t,e);bm.exports=yt});var ls=U((JB,xm)=>{"use strict";var _I=be("path"),tr="\\\\/",Fm=`[^${tr}]`,SI=0,_r="\\.",TI="\\+",AI="\\?",Co="\\/",RI="(?=.)",Mm="[^/]",jc=`(?:${Co}|$)`,km=`(?:^|${Co})`,Vc=`${_r}{1,2}${jc}`,yI=`(?!${_r})`,OI=`(?!${km}${Vc})`,II=`(?!${_r}{0,1}${jc})`,LI=`(?!${Vc})`,CI=`[^.${Co}]`,NI=`${Mm}*?`,Gm={DOT_LITERAL:_r,PLUS_LITERAL:TI,QMARK_LITERAL:AI,SLASH_LITERAL:Co,ONE_CHAR:RI,QMARK:Mm,END_ANCHOR:jc,DOTS_SLASH:Vc,NO_DOT:yI,NO_DOTS:OI,NO_DOT_SLASH:II,NO_DOTS_SLASH:LI,QMARK_NO_DOT:CI,STAR:NI,START_ANCHOR:km},PI={...Gm,SLASH_LITERAL:`[${tr}]`,QMARK:Fm,STAR:`${Fm}*?`,DOTS_SLASH:`${_r}{1,2}(?:[${tr}]|$)`,NO_DOT:`(?!${_r})`,NO_DOTS:`(?!(?:^|[${tr}])${_r}{1,2}(?:[${tr}]|$))`,NO_DOT_SLASH:`(?!${_r}{0,1}(?:[${tr}]|$))`,NO_DOTS_SLASH:`(?!${_r}{1,2}(?:[${tr}]|$))`,QMARK_NO_DOT:`[^.${tr}]`,START_ANCHOR:`(?:^|[${tr}])`,END_ANCHOR:`(?:[${tr}]|$)`},DI={__proto__:null,alnum:"a-zA-Z0-9",alpha:"a-zA-Z",ascii:"\\x00-\\x7F",blank:" \\t",cntrl:"\\x00-\\x1F\\x7F",digit:"0-9",graph:"\\x21-\\x7E",lower:"a-z",print:"\\x20-\\x7E ",punct:"\\-!\"#$%&'()\\*+,./:;<=>?@[\\]^_`{|}~",space:" \\t\\r\\n\\v\\f",upper:"A-Z",word:"A-Za-z0-9_",xdigit:"A-Fa-f0-9"};xm.exports={DEFAULT_MAX_EXTGLOB_RECURSION:SI,MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:DI,REGEX_BACKSLASH:/\\(?![*+?^${}(|)[\]])/g,REGEX_NON_SPECIAL_CHARS:/^[^@![\].,$*+?^{}()|\\/]+/,REGEX_SPECIAL_CHARS:/[-*+?.^${}(|)[\]]/,REGEX_SPECIAL_CHARS_BACKREF:/(\\?)((\W)(\3*))/g,REGEX_SPECIAL_CHARS_GLOBAL:/([-*+?.^${}(|)[\]])/g,REGEX_REMOVE_BACKSLASH:/(?:\[.*?[^\\]\]|\\(?=.))/g,REPLACEMENTS:{__proto__:null,"***":"*","**/**":"**","**/**/**":"**"},CHAR_0:48,CHAR_9:57,CHAR_UPPERCASE_A:65,CHAR_LOWERCASE_A:97,CHAR_UPPERCASE_Z:90,CHAR_LOWERCASE_Z:122,CHAR_LEFT_PARENTHESES:40,CHAR_RIGHT_PARENTHESES:41,CHAR_ASTERISK:42,CHAR_AMPERSAND:38,CHAR_AT:64,CHAR_BACKWARD_SLASH:92,CHAR_CARRIAGE_RETURN:13,CHAR_CIRCUMFLEX_ACCENT:94,CHAR_COLON:58,CHAR_COMMA:44,CHAR_DOT:46,CHAR_DOUBLE_QUOTE:34,CHAR_EQUAL:61,CHAR_EXCLAMATION_MARK:33,CHAR_FORM_FEED:12,CHAR_FORWARD_SLASH:47,CHAR_GRAVE_ACCENT:96,CHAR_HASH:35,CHAR_HYPHEN_MINUS:45,CHAR_LEFT_ANGLE_BRACKET:60,CHAR_LEFT_CURLY_BRACE:123,CHAR_LEFT_SQUARE_BRACKET:91,CHAR_LINE_FEED:10,CHAR_NO_BREAK_SPACE:160,CHAR_PERCENT:37,CHAR_PLUS:43,CHAR_QUESTION_MARK:63,CHAR_RIGHT_ANGLE_BRACKET:62,CHAR_RIGHT_CURLY_BRACE:125,CHAR_RIGHT_SQUARE_BRACKET:93,CHAR_SEMICOLON:59,CHAR_SINGLE_QUOTE:39,CHAR_SPACE:32,CHAR_TAB:9,CHAR_UNDERSCORE:95,CHAR_VERTICAL_LINE:124,CHAR_ZERO_WIDTH_NOBREAK_SPACE:65279,SEP:_I.sep,extglobChars(t){return{"!":{type:"negate",open:"(?:(?!(?:",close:`))${t.STAR})`},"?":{type:"qmark",open:"(?:",close:")?"},"+":{type:"plus",open:"(?:",close:")+"},"*":{type:"star",open:"(?:",close:")*"},"@":{type:"at",open:"(?:",close:")"}}},globChars(t){return t===!0?PI:Gm}}});var cs=U(mt=>{"use strict";var vI=be("path"),bI=process.platform==="win32",{REGEX_BACKSLASH:wI,REGEX_REMOVE_BACKSLASH:FI,REGEX_SPECIAL_CHARS:MI,REGEX_SPECIAL_CHARS_GLOBAL:kI}=ls();mt.isObject=t=>t!==null&&typeof t=="object"&&!Array.isArray(t);mt.hasRegexChars=t=>MI.test(t);mt.isRegexChar=t=>t.length===1&&mt.hasRegexChars(t);mt.escapeRegex=t=>t.replace(kI,"\\$1");mt.toPosixSlashes=t=>t.replace(wI,"/");mt.removeBackslashes=t=>t.replace(FI,e=>e==="\\"?"":e);mt.supportsLookbehinds=()=>{let t=process.version.slice(1).split(".").map(Number);return t.length===3&&t[0]>=9||t[0]===8&&t[1]>=10};mt.isWindows=t=>t&&typeof t.windows=="boolean"?t.windows:bI===!0||vI.sep==="\\";mt.escapeLast=(t,e,r)=>{let n=t.lastIndexOf(e,r);return n===-1?t:t[n-1]==="\\"?mt.escapeLast(t,e,n-1):`${t.slice(0,n)}\\${t.slice(n)}`};mt.removePrefix=(t,e={})=>{let r=t;return r.startsWith("./")&&(r=r.slice(2),e.prefix="./"),r};mt.wrapOutput=(t,e={},r={})=>{let n=r.contains?"":"^",i=r.contains?"":"$",s=`${n}(?:${t})${i}`;return e.negated===!0&&(s=`(?:^(?!${s}).*$)`),s}});var jm=U((QB,Wm)=>{"use strict";var Um=cs(),{CHAR_ASTERISK:zc,CHAR_AT:GI,CHAR_BACKWARD_SLASH:us,CHAR_COMMA:xI,CHAR_DOT:Jc,CHAR_EXCLAMATION_MARK:qc,CHAR_FORWARD_SLASH:Ym,CHAR_LEFT_CURLY_BRACE:Qc,CHAR_LEFT_PARENTHESES:Xc,CHAR_LEFT_SQUARE_BRACKET:UI,CHAR_PLUS:HI,CHAR_QUESTION_MARK:Hm,CHAR_RIGHT_CURLY_BRACE:BI,CHAR_RIGHT_PARENTHESES:Bm,CHAR_RIGHT_SQUARE_BRACKET:KI}=ls(),Km=t=>t===Ym||t===us,$m=t=>{t.isPrefix!==!0&&(t.depth=t.isGlobstar?1/0:1)},$I=(t,e)=>{let r=e||{},n=t.length-1,i=r.parts===!0||r.scanToEnd===!0,s=[],o=[],a=[],l=t,c=-1,u=0,p=0,d=!1,f=!1,m=!1,_=!1,L=!1,C=!1,F=!1,I=!1,$=!1,Q=!1,z=0,te,M,ne={value:"",depth:0,isGlob:!1},pe=()=>c>=n,N=()=>l.charCodeAt(c+1),Re=()=>(te=M,l.charCodeAt(++c));for(;c<n;){M=Re();let it;if(M===us){F=ne.backslashes=!0,M=Re(),M===Qc&&(C=!0);continue}if(C===!0||M===Qc){for(z++;pe()!==!0&&(M=Re());){if(M===us){F=ne.backslashes=!0,Re();continue}if(M===Qc){z++;continue}if(C!==!0&&M===Jc&&(M=Re())===Jc){if(d=ne.isBrace=!0,m=ne.isGlob=!0,Q=!0,i===!0)continue;break}if(C!==!0&&M===xI){if(d=ne.isBrace=!0,m=ne.isGlob=!0,Q=!0,i===!0)continue;break}if(M===BI&&(z--,z===0)){C=!1,d=ne.isBrace=!0,Q=!0;break}}if(i===!0)continue;break}if(M===Ym){if(s.push(c),o.push(ne),ne={value:"",depth:0,isGlob:!1},Q===!0)continue;if(te===Jc&&c===u+1){u+=2;continue}p=c+1;continue}if(r.noext!==!0&&(M===HI||M===GI||M===zc||M===Hm||M===qc)===!0&&N()===Xc){if(m=ne.isGlob=!0,_=ne.isExtglob=!0,Q=!0,M===qc&&c===u&&($=!0),i===!0){for(;pe()!==!0&&(M=Re());){if(M===us){F=ne.backslashes=!0,M=Re();continue}if(M===Bm){m=ne.isGlob=!0,Q=!0;break}}continue}break}if(M===zc){if(te===zc&&(L=ne.isGlobstar=!0),m=ne.isGlob=!0,Q=!0,i===!0)continue;break}if(M===Hm){if(m=ne.isGlob=!0,Q=!0,i===!0)continue;break}if(M===UI){for(;pe()!==!0&&(it=Re());){if(it===us){F=ne.backslashes=!0,Re();continue}if(it===KI){f=ne.isBracket=!0,m=ne.isGlob=!0,Q=!0;break}}if(i===!0)continue;break}if(r.nonegate!==!0&&M===qc&&c===u){I=ne.negated=!0,u++;continue}if(r.noparen!==!0&&M===Xc){if(m=ne.isGlob=!0,i===!0){for(;pe()!==!0&&(M=Re());){if(M===Xc){F=ne.backslashes=!0,M=Re();continue}if(M===Bm){Q=!0;break}}continue}break}if(m===!0){if(Q=!0,i===!0)continue;break}}r.noext===!0&&(_=!1,m=!1);let Ie=l,Lr="",D="";u>0&&(Lr=l.slice(0,u),l=l.slice(u),p-=u),Ie&&m===!0&&p>0?(Ie=l.slice(0,p),D=l.slice(p)):m===!0?(Ie="",D=l):Ie=l,Ie&&Ie!==""&&Ie!=="/"&&Ie!==l&&Km(Ie.charCodeAt(Ie.length-1))&&(Ie=Ie.slice(0,-1)),r.unescape===!0&&(D&&(D=Um.removeBackslashes(D)),Ie&&F===!0&&(Ie=Um.removeBackslashes(Ie)));let v={prefix:Lr,input:t,start:u,base:Ie,glob:D,isBrace:d,isBracket:f,isGlob:m,isExtglob:_,isGlobstar:L,negated:I,negatedExtglob:$};if(r.tokens===!0&&(v.maxDepth=0,Km(M)||o.push(ne),v.tokens=o),r.parts===!0||r.tokens===!0){let it;for(let me=0;me<s.length;me++){let zt=it?it+1:u,Jt=s[me],St=t.slice(zt,Jt);r.tokens&&(me===0&&u!==0?(o[me].isPrefix=!0,o[me].value=Lr):o[me].value=St,$m(o[me]),v.maxDepth+=o[me].depth),(me!==0||St!=="")&&a.push(St),it=Jt}if(it&&it+1<t.length){let me=t.slice(it+1);a.push(me),r.tokens&&(o[o.length-1].value=me,$m(o[o.length-1]),v.maxDepth+=o[o.length-1].depth)}v.slashes=s,v.parts=a}return v};Wm.exports=$I});var Qm=U((XB,qm)=>{"use strict";var ds=ls(),Xe=cs(),{MAX_LENGTH:No,POSIX_REGEX_SOURCE:YI,REGEX_NON_SPECIAL_CHARS:WI,REGEX_SPECIAL_CHARS_BACKREF:jI,REPLACEMENTS:Vm}=ds,VI=(t,e)=>{if(typeof e.expandRange=="function")return e.expandRange(...t,e);t.sort();let r=`[${t.join("-")}]`;try{new RegExp(r)}catch{return t.map(i=>Xe.escapeRegex(i)).join("..")}return r},ai=(t,e)=>`Missing ${t}: "${e}" - use "\\\\${e}" to match literal characters`,zm=t=>{let e=[],r=0,n=0,i=0,s="",o=!1;for(let a of t){if(o===!0){s+=a,o=!1;continue}if(a==="\\"){s+=a,o=!0;continue}if(a==='"'){i=i===1?0:1,s+=a;continue}if(i===0){if(a==="[")r++;else if(a==="]"&&r>0)r--;else if(r===0){if(a==="(")n++;else if(a===")"&&n>0)n--;else if(a==="|"&&n===0){e.push(s),s="";continue}}}s+=a}return e.push(s),e},zI=t=>{let e=!1;for(let r of t){if(e===!0){e=!1;continue}if(r==="\\"){e=!0;continue}if(/[?*+@!()[\]{}]/.test(r))return!1}return!0},Jm=t=>{let e=t.trim(),r=!0;for(;r===!0;)r=!1,/^@\([^\\()[\]{}|]+\)$/.test(e)&&(e=e.slice(2,-1),r=!0);if(zI(e))return e.replace(/\\(.)/g,"$1")},JI=t=>{let e=t.map(Jm).filter(Boolean);for(let r=0;r<e.length;r++)for(let n=r+1;n<e.length;n++){let i=e[r],s=e[n],o=i[0];if(!(!o||i!==o.repeat(i.length)||s!==o.repeat(s.length))&&(i===s||i.startsWith(s)||s.startsWith(i)))return!0}return!1},Zc=(t,e=!0)=>{if(t[0]!=="+"&&t[0]!=="*"||t[1]!=="(")return;let r=0,n=0,i=0,s=!1;for(let o=1;o<t.length;o++){let a=t[o];if(s===!0){s=!1;continue}if(a==="\\"){s=!0;continue}if(a==='"'){i=i===1?0:1;continue}if(i!==1){if(a==="["){r++;continue}if(a==="]"&&r>0){r--;continue}if(!(r>0)){if(a==="("){n++;continue}if(a===")"&&(n--,n===0))return e===!0&&o!==t.length-1?void 0:{type:t[0],body:t.slice(2,o),end:o}}}}},qI=t=>{let e=0,r=[];for(;e<t.length;){let i=Zc(t.slice(e),!1);if(!i||i.type!=="*")return;let s=zm(i.body).map(a=>a.trim());if(s.length!==1)return;let o=Jm(s[0]);if(!o||o.length!==1)return;r.push(o),e+=i.end+1}return r.length<1?void 0:`${r.length===1?Xe.escapeRegex(r[0]):`[${r.map(i=>Xe.escapeRegex(i)).join("")}]`}*`},QI=t=>{let e=0,r=t.trim(),n=Zc(r);for(;n;)e++,r=n.body.trim(),n=Zc(r);return e},XI=(t,e)=>{if(e.maxExtglobRecursion===!1)return{risky:!1};let r=typeof e.maxExtglobRecursion=="number"?e.maxExtglobRecursion:ds.DEFAULT_MAX_EXTGLOB_RECURSION,n=zm(t).map(i=>i.trim());if(n.length>1&&(n.some(i=>i==="")||n.some(i=>/^[*?]+$/.test(i))||JI(n)))return{risky:!0};for(let i of n){let s=qI(i);if(s)return{risky:!0,safeOutput:s};if(QI(i)>r)return{risky:!0}}return{risky:!1}},eu=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");t=Vm[t]||t;let r={...e},n=typeof r.maxLength=="number"?Math.min(No,r.maxLength):No,i=t.length;if(i>n)throw new SyntaxError(`Input length: ${i}, exceeds maximum allowed length: ${n}`);let s={type:"bos",value:"",output:r.prepend||""},o=[s],a=r.capture?"":"?:",l=Xe.isWindows(e),c=ds.globChars(l),u=ds.extglobChars(c),{DOT_LITERAL:p,PLUS_LITERAL:d,SLASH_LITERAL:f,ONE_CHAR:m,DOTS_SLASH:_,NO_DOT:L,NO_DOT_SLASH:C,NO_DOTS_SLASH:F,QMARK:I,QMARK_NO_DOT:$,STAR:Q,START_ANCHOR:z}=c,te=x=>`(${a}(?:(?!${z}${x.dot?_:p}).)*?)`,M=r.dot?"":L,ne=r.dot?I:$,pe=r.bash===!0?te(r):Q;r.capture&&(pe=`(${pe})`),typeof r.noext=="boolean"&&(r.noextglob=r.noext);let N={input:t,index:-1,start:0,dot:r.dot===!0,consumed:"",output:"",prefix:"",backtrack:!1,negated:!1,brackets:0,braces:0,parens:0,quotes:0,globstar:!1,tokens:o};t=Xe.removePrefix(t,N),i=t.length;let Re=[],Ie=[],Lr=[],D=s,v,it=()=>N.index===i-1,me=N.peek=(x=1)=>t[N.index+x],zt=N.advance=()=>t[++N.index]||"",Jt=()=>t.slice(N.index+1),St=(x="",Ne=0)=>{N.consumed+=x,N.index+=Ne},Bs=x=>{N.output+=x.output!=null?x.output:x.value,St(x.value)},ER=()=>{let x=1;for(;me()==="!"&&(me(2)!=="("||me(3)==="?");)zt(),N.start++,x++;return x%2===0?!1:(N.negated=!0,N.start++,!0)},Ks=x=>{N[x]++,Lr.push(x)},Cr=x=>{N[x]--,Lr.pop()},le=x=>{if(D.type==="globstar"){let Ne=N.braces>0&&(x.type==="comma"||x.type==="brace"),G=x.extglob===!0||Re.length&&(x.type==="pipe"||x.type==="paren");x.type!=="slash"&&x.type!=="paren"&&!Ne&&!G&&(N.output=N.output.slice(0,-D.output.length),D.type="star",D.value="*",D.output=pe,N.output+=D.output)}if(Re.length&&x.type!=="paren"&&(Re[Re.length-1].inner+=x.value),(x.value||x.output)&&Bs(x),D&&D.type==="text"&&x.type==="text"){D.value+=x.value,D.output=(D.output||"")+x.value;return}x.prev=D,o.push(x),D=x},$s=(x,Ne)=>{let G={...u[Ne],conditions:1,inner:""};G.prev=D,G.parens=N.parens,G.output=N.output,G.startIndex=N.index,G.tokensIndex=o.length;let ae=(r.capture?"(":"")+G.open;Ks("parens"),le({type:x,value:Ne,output:N.output?"":m}),le({type:"paren",extglob:!0,value:zt(),output:ae}),Re.push(G)},_R=x=>{let Ne=t.slice(x.startIndex,N.index+1),G=t.slice(x.startIndex+2,N.index),ae=XI(G,r);if((x.type==="plus"||x.type==="star")&&ae.risky){let ye=ae.safeOutput?(x.output?"":m)+(r.capture?`(${ae.safeOutput})`:ae.safeOutput):void 0,qt=o[x.tokensIndex];qt.type="text",qt.value=Ne,qt.output=ye||Xe.escapeRegex(Ne);for(let Qt=x.tokensIndex+1;Qt<o.length;Qt++)o[Qt].value="",o[Qt].output="",delete o[Qt].suffix;N.output=x.output+qt.output,N.backtrack=!0,le({type:"paren",extglob:!0,value:v,output:""}),Cr("parens");return}let Le=x.close+(r.capture?")":""),He;if(x.type==="negate"){let ye=pe;if(x.inner&&x.inner.length>1&&x.inner.includes("/")&&(ye=te(r)),(ye!==pe||it()||/^\)+$/.test(Jt()))&&(Le=x.close=`)$))${ye}`),x.inner.includes("*")&&(He=Jt())&&/^\.[^\\/.]+$/.test(He)){let qt=eu(He,{...e,fastpaths:!1}).output;Le=x.close=`)${qt})${ye})`}x.prev.type==="bos"&&(N.negatedExtglob=!0)}le({type:"paren",extglob:!0,value:v,output:Le}),Cr("parens")};if(r.fastpaths!==!1&&!/(^[*!]|[/()[\]{}"])/.test(t)){let x=!1,Ne=t.replace(jI,(G,ae,Le,He,ye,qt)=>He==="\\"?(x=!0,G):He==="?"?ae?ae+He+(ye?I.repeat(ye.length):""):qt===0?ne+(ye?I.repeat(ye.length):""):I.repeat(Le.length):He==="."?p.repeat(Le.length):He==="*"?ae?ae+He+(ye?pe:""):pe:ae?G:`\\${G}`);return x===!0&&(r.unescape===!0?Ne=Ne.replace(/\\/g,""):Ne=Ne.replace(/\\+/g,G=>G.length%2===0?"\\\\":G?"\\":"")),Ne===t&&r.contains===!0?(N.output=t,N):(N.output=Xe.wrapOutput(Ne,N,e),N)}for(;!it();){if(v=zt(),v==="\0")continue;if(v==="\\"){let G=me();if(G==="/"&&r.bash!==!0||G==="."||G===";")continue;if(!G){v+="\\",le({type:"text",value:v});continue}let ae=/^\\+/.exec(Jt()),Le=0;if(ae&&ae[0].length>2&&(Le=ae[0].length,N.index+=Le,Le%2!==0&&(v+="\\")),r.unescape===!0?v=zt():v+=zt(),N.brackets===0){le({type:"text",value:v});continue}}if(N.brackets>0&&(v!=="]"||D.value==="["||D.value==="[^")){if(r.posix!==!1&&v===":"){let G=D.value.slice(1);if(G.includes("[")&&(D.posix=!0,G.includes(":"))){let ae=D.value.lastIndexOf("["),Le=D.value.slice(0,ae),He=D.value.slice(ae+2),ye=YI[He];if(ye){D.value=Le+ye,N.backtrack=!0,zt(),!s.output&&o.indexOf(D)===1&&(s.output=m);continue}}}(v==="["&&me()!==":"||v==="-"&&me()==="]")&&(v=`\\${v}`),v==="]"&&(D.value==="["||D.value==="[^")&&(v=`\\${v}`),r.posix===!0&&v==="!"&&D.value==="["&&(v="^"),D.value+=v,Bs({value:v});continue}if(N.quotes===1&&v!=='"'){v=Xe.escapeRegex(v),D.value+=v,Bs({value:v});continue}if(v==='"'){N.quotes=N.quotes===1?0:1,r.keepQuotes===!0&&le({type:"text",value:v});continue}if(v==="("){Ks("parens"),le({type:"paren",value:v});continue}if(v===")"){if(N.parens===0&&r.strictBrackets===!0)throw new SyntaxError(ai("opening","("));let G=Re[Re.length-1];if(G&&N.parens===G.parens+1){_R(Re.pop());continue}le({type:"paren",value:v,output:N.parens?")":"\\)"}),Cr("parens");continue}if(v==="["){if(r.nobracket===!0||!Jt().includes("]")){if(r.nobracket!==!0&&r.strictBrackets===!0)throw new SyntaxError(ai("closing","]"));v=`\\${v}`}else Ks("brackets");le({type:"bracket",value:v});continue}if(v==="]"){if(r.nobracket===!0||D&&D.type==="bracket"&&D.value.length===1){le({type:"text",value:v,output:`\\${v}`});continue}if(N.brackets===0){if(r.strictBrackets===!0)throw new SyntaxError(ai("opening","["));le({type:"text",value:v,output:`\\${v}`});continue}Cr("brackets");let G=D.value.slice(1);if(D.posix!==!0&&G[0]==="^"&&!G.includes("/")&&(v=`/${v}`),D.value+=v,Bs({value:v}),r.literalBrackets===!1||Xe.hasRegexChars(G))continue;let ae=Xe.escapeRegex(D.value);if(N.output=N.output.slice(0,-D.value.length),r.literalBrackets===!0){N.output+=ae,D.value=ae;continue}D.value=`(${a}${ae}|${D.value})`,N.output+=D.value;continue}if(v==="{"&&r.nobrace!==!0){Ks("braces");let G={type:"brace",value:v,output:"(",outputIndex:N.output.length,tokensIndex:N.tokens.length};Ie.push(G),le(G);continue}if(v==="}"){let G=Ie[Ie.length-1];if(r.nobrace===!0||!G){le({type:"text",value:v,output:v});continue}let ae=")";if(G.dots===!0){let Le=o.slice(),He=[];for(let ye=Le.length-1;ye>=0&&(o.pop(),Le[ye].type!=="brace");ye--)Le[ye].type!=="dots"&&He.unshift(Le[ye].value);ae=VI(He,r),N.backtrack=!0}if(G.comma!==!0&&G.dots!==!0){let Le=N.output.slice(0,G.outputIndex),He=N.tokens.slice(G.tokensIndex);G.value=G.output="\\{",v=ae="\\}",N.output=Le;for(let ye of He)N.output+=ye.output||ye.value}le({type:"brace",value:v,output:ae}),Cr("braces"),Ie.pop();continue}if(v==="|"){Re.length>0&&Re[Re.length-1].conditions++,le({type:"text",value:v});continue}if(v===","){let G=v,ae=Ie[Ie.length-1];ae&&Lr[Lr.length-1]==="braces"&&(ae.comma=!0,G="|"),le({type:"comma",value:v,output:G});continue}if(v==="/"){if(D.type==="dot"&&N.index===N.start+1){N.start=N.index+1,N.consumed="",N.output="",o.pop(),D=s;continue}le({type:"slash",value:v,output:f});continue}if(v==="."){if(N.braces>0&&D.type==="dot"){D.value==="."&&(D.output=p);let G=Ie[Ie.length-1];D.type="dots",D.output+=v,D.value+=v,G.dots=!0;continue}if(N.braces+N.parens===0&&D.type!=="bos"&&D.type!=="slash"){le({type:"text",value:v,output:p});continue}le({type:"dot",value:v,output:p});continue}if(v==="?"){if(!(D&&D.value==="(")&&r.noextglob!==!0&&me()==="("&&me(2)!=="?"){$s("qmark",v);continue}if(D&&D.type==="paren"){let ae=me(),Le=v;if(ae==="<"&&!Xe.supportsLookbehinds())throw new Error("Node.js v10 or higher is required for regex lookbehinds");(D.value==="("&&!/[!=<:]/.test(ae)||ae==="<"&&!/<([!=]|\w+>)/.test(Jt()))&&(Le=`\\${v}`),le({type:"text",value:v,output:Le});continue}if(r.dot!==!0&&(D.type==="slash"||D.type==="bos")){le({type:"qmark",value:v,output:$});continue}le({type:"qmark",value:v,output:I});continue}if(v==="!"){if(r.noextglob!==!0&&me()==="("&&(me(2)!=="?"||!/[!=<:]/.test(me(3)))){$s("negate",v);continue}if(r.nonegate!==!0&&N.index===0){ER();continue}}if(v==="+"){if(r.noextglob!==!0&&me()==="("&&me(2)!=="?"){$s("plus",v);continue}if(D&&D.value==="("||r.regex===!1){le({type:"plus",value:v,output:d});continue}if(D&&(D.type==="bracket"||D.type==="paren"||D.type==="brace")||N.parens>0){le({type:"plus",value:v});continue}le({type:"plus",value:d});continue}if(v==="@"){if(r.noextglob!==!0&&me()==="("&&me(2)!=="?"){le({type:"at",extglob:!0,value:v,output:""});continue}le({type:"text",value:v});continue}if(v!=="*"){(v==="$"||v==="^")&&(v=`\\${v}`);let G=WI.exec(Jt());G&&(v+=G[0],N.index+=G[0].length),le({type:"text",value:v});continue}if(D&&(D.type==="globstar"||D.star===!0)){D.type="star",D.star=!0,D.value+=v,D.output=pe,N.backtrack=!0,N.globstar=!0,St(v);continue}let x=Jt();if(r.noextglob!==!0&&/^\([^?]/.test(x)){$s("star",v);continue}if(D.type==="star"){if(r.noglobstar===!0){St(v);continue}let G=D.prev,ae=G.prev,Le=G.type==="slash"||G.type==="bos",He=ae&&(ae.type==="star"||ae.type==="globstar");if(r.bash===!0&&(!Le||x[0]&&x[0]!=="/")){le({type:"star",value:v,output:""});continue}let ye=N.braces>0&&(G.type==="comma"||G.type==="brace"),qt=Re.length&&(G.type==="pipe"||G.type==="paren");if(!Le&&G.type!=="paren"&&!ye&&!qt){le({type:"star",value:v,output:""});continue}for(;x.slice(0,3)==="/**";){let Qt=t[N.index+4];if(Qt&&Qt!=="/")break;x=x.slice(3),St("/**",3)}if(G.type==="bos"&&it()){D.type="globstar",D.value+=v,D.output=te(r),N.output=D.output,N.globstar=!0,St(v);continue}if(G.type==="slash"&&G.prev.type!=="bos"&&!He&&it()){N.output=N.output.slice(0,-(G.output+D.output).length),G.output=`(?:${G.output}`,D.type="globstar",D.output=te(r)+(r.strictSlashes?")":"|$)"),D.value+=v,N.globstar=!0,N.output+=G.output+D.output,St(v);continue}if(G.type==="slash"&&G.prev.type!=="bos"&&x[0]==="/"){let Qt=x[1]!==void 0?"|$":"";N.output=N.output.slice(0,-(G.output+D.output).length),G.output=`(?:${G.output}`,D.type="globstar",D.output=`${te(r)}${f}|${f}${Qt})`,D.value+=v,N.output+=G.output+D.output,N.globstar=!0,St(v+zt()),le({type:"slash",value:"/",output:""});continue}if(G.type==="bos"&&x[0]==="/"){D.type="globstar",D.value+=v,D.output=`(?:^|${f}|${te(r)}${f})`,N.output=D.output,N.globstar=!0,St(v+zt()),le({type:"slash",value:"/",output:""});continue}N.output=N.output.slice(0,-D.output.length),D.type="globstar",D.output=te(r),D.value+=v,N.output+=D.output,N.globstar=!0,St(v);continue}let Ne={type:"star",value:v,output:pe};if(r.bash===!0){Ne.output=".*?",(D.type==="bos"||D.type==="slash")&&(Ne.output=M+Ne.output),le(Ne);continue}if(D&&(D.type==="bracket"||D.type==="paren")&&r.regex===!0){Ne.output=v,le(Ne);continue}(N.index===N.start||D.type==="slash"||D.type==="dot")&&(D.type==="dot"?(N.output+=C,D.output+=C):r.dot===!0?(N.output+=F,D.output+=F):(N.output+=M,D.output+=M),me()!=="*"&&(N.output+=m,D.output+=m)),le(Ne)}for(;N.brackets>0;){if(r.strictBrackets===!0)throw new SyntaxError(ai("closing","]"));N.output=Xe.escapeLast(N.output,"["),Cr("brackets")}for(;N.parens>0;){if(r.strictBrackets===!0)throw new SyntaxError(ai("closing",")"));N.output=Xe.escapeLast(N.output,"("),Cr("parens")}for(;N.braces>0;){if(r.strictBrackets===!0)throw new SyntaxError(ai("closing","}"));N.output=Xe.escapeLast(N.output,"{"),Cr("braces")}if(r.strictSlashes!==!0&&(D.type==="star"||D.type==="bracket")&&le({type:"maybe_slash",value:"",output:`${f}?`}),N.backtrack===!0){N.output="";for(let x of N.tokens)N.output+=x.output!=null?x.output:x.value,x.suffix&&(N.output+=x.suffix)}return N};eu.fastpaths=(t,e)=>{let r={...e},n=typeof r.maxLength=="number"?Math.min(No,r.maxLength):No,i=t.length;if(i>n)throw new SyntaxError(`Input length: ${i}, exceeds maximum allowed length: ${n}`);t=Vm[t]||t;let s=Xe.isWindows(e),{DOT_LITERAL:o,SLASH_LITERAL:a,ONE_CHAR:l,DOTS_SLASH:c,NO_DOT:u,NO_DOTS:p,NO_DOTS_SLASH:d,STAR:f,START_ANCHOR:m}=ds.globChars(s),_=r.dot?p:u,L=r.dot?d:u,C=r.capture?"":"?:",F={negated:!1,prefix:""},I=r.bash===!0?".*?":f;r.capture&&(I=`(${I})`);let $=M=>M.noglobstar===!0?I:`(${C}(?:(?!${m}${M.dot?c:o}).)*?)`,Q=M=>{switch(M){case"*":return`${_}${l}${I}`;case".*":return`${o}${l}${I}`;case"*.*":return`${_}${I}${o}${l}${I}`;case"*/*":return`${_}${I}${a}${l}${L}${I}`;case"**":return _+$(r);case"**/*":return`(?:${_}${$(r)}${a})?${L}${l}${I}`;case"**/*.*":return`(?:${_}${$(r)}${a})?${L}${I}${o}${l}${I}`;case"**/.*":return`(?:${_}${$(r)}${a})?${o}${l}${I}`;default:{let ne=/^(.*?)\.(\w+)$/.exec(M);if(!ne)return;let pe=Q(ne[1]);return pe?pe+o+ne[2]:void 0}}},z=Xe.removePrefix(t,F),te=Q(z);return te&&r.strictSlashes!==!0&&(te+=`${a}?`),te};qm.exports=eu});var Zm=U((ZB,Xm)=>{"use strict";var ZI=be("path"),eL=jm(),tu=Qm(),ru=cs(),tL=ls(),rL=t=>t&&typeof t=="object"&&!Array.isArray(t),Me=(t,e,r=!1)=>{if(Array.isArray(t)){let u=t.map(d=>Me(d,e,r));return d=>{for(let f of u){let m=f(d);if(m)return m}return!1}}let n=rL(t)&&t.tokens&&t.input;if(t===""||typeof t!="string"&&!n)throw new TypeError("Expected pattern to be a non-empty string");let i=e||{},s=ru.isWindows(e),o=n?Me.compileRe(t,e):Me.makeRe(t,e,!1,!0),a=o.state;delete o.state;let l=()=>!1;if(i.ignore){let u={...e,ignore:null,onMatch:null,onResult:null};l=Me(i.ignore,u,r)}let c=(u,p=!1)=>{let{isMatch:d,match:f,output:m}=Me.test(u,o,e,{glob:t,posix:s}),_={glob:t,state:a,regex:o,posix:s,input:u,output:m,match:f,isMatch:d};return typeof i.onResult=="function"&&i.onResult(_),d===!1?(_.isMatch=!1,p?_:!1):l(u)?(typeof i.onIgnore=="function"&&i.onIgnore(_),_.isMatch=!1,p?_:!1):(typeof i.onMatch=="function"&&i.onMatch(_),p?_:!0)};return r&&(c.state=a),c};Me.test=(t,e,r,{glob:n,posix:i}={})=>{if(typeof t!="string")throw new TypeError("Expected input to be a string");if(t==="")return{isMatch:!1,output:""};let s=r||{},o=s.format||(i?ru.toPosixSlashes:null),a=t===n,l=a&&o?o(t):t;return a===!1&&(l=o?o(t):t,a=l===n),(a===!1||s.capture===!0)&&(s.matchBase===!0||s.basename===!0?a=Me.matchBase(t,e,r,i):a=e.exec(l)),{isMatch:!!a,match:a,output:l}};Me.matchBase=(t,e,r,n=ru.isWindows(r))=>(e instanceof RegExp?e:Me.makeRe(e,r)).test(ZI.basename(t));Me.isMatch=(t,e,r)=>Me(e,r)(t);Me.parse=(t,e)=>Array.isArray(t)?t.map(r=>Me.parse(r,e)):tu(t,{...e,fastpaths:!1});Me.scan=(t,e)=>eL(t,e);Me.compileRe=(t,e,r=!1,n=!1)=>{if(r===!0)return t.output;let i=e||{},s=i.contains?"":"^",o=i.contains?"":"$",a=`${s}(?:${t.output})${o}`;t&&t.negated===!0&&(a=`^(?!${a}).*$`);let l=Me.toRegex(a,e);return n===!0&&(l.state=t),l};Me.makeRe=(t,e={},r=!1,n=!1)=>{if(!t||typeof t!="string")throw new TypeError("Expected a non-empty string");let i={negated:!1,fastpaths:!0};return e.fastpaths!==!1&&(t[0]==="."||t[0]==="*")&&(i.output=tu.fastpaths(t,e)),i.output||(i=tu(t,e)),Me.compileRe(i,e,r,n)};Me.toRegex=(t,e)=>{try{let r=e||{};return new RegExp(t,r.flags||(r.nocase?"i":""))}catch(r){if(e&&e.debug===!0)throw r;return/$^/}};Me.constants=tL;Xm.exports=Me});var th=U((e0,eh)=>{"use strict";eh.exports=Zm()});var ah=U((t0,oh)=>{"use strict";var nh=be("util"),ih=wm(),rr=th(),nu=cs(),rh=t=>t===""||t==="./",sh=t=>{let e=t.indexOf("{");return e>-1&&t.indexOf("}",e)>-1},Ce=(t,e,r)=>{e=[].concat(e),t=[].concat(t);let n=new Set,i=new Set,s=new Set,o=0,a=u=>{s.add(u.output),r&&r.onResult&&r.onResult(u)};for(let u=0;u<e.length;u++){let p=rr(String(e[u]),{...r,onResult:a},!0),d=p.state.negated||p.state.negatedExtglob;d&&o++;for(let f of t){let m=p(f,!0);(d?!m.isMatch:m.isMatch)&&(d?n.add(m.output):(n.delete(m.output),i.add(m.output)))}}let c=(o===e.length?[...s]:[...i]).filter(u=>!n.has(u));if(r&&c.length===0){if(r.failglob===!0)throw new Error(`No matches found for "${e.join(", ")}"`);if(r.nonull===!0||r.nullglob===!0)return r.unescape?e.map(u=>u.replace(/\\/g,"")):e}return c};Ce.match=Ce;Ce.matcher=(t,e)=>rr(t,e);Ce.isMatch=(t,e,r)=>rr(e,r)(t);Ce.any=Ce.isMatch;Ce.not=(t,e,r={})=>{e=[].concat(e).map(String);let n=new Set,i=[],s=a=>{r.onResult&&r.onResult(a),i.push(a.output)},o=new Set(Ce(t,e,{...r,onResult:s}));for(let a of i)o.has(a)||n.add(a);return[...n]};Ce.contains=(t,e,r)=>{if(typeof t!="string")throw new TypeError(`Expected a string: "${nh.inspect(t)}"`);if(Array.isArray(e))return e.some(n=>Ce.contains(t,n,r));if(typeof e=="string"){if(rh(t)||rh(e))return!1;if(t.includes(e)||t.startsWith("./")&&t.slice(2).includes(e))return!0}return Ce.isMatch(t,e,{...r,contains:!0})};Ce.matchKeys=(t,e,r)=>{if(!nu.isObject(t))throw new TypeError("Expected the first argument to be an object");let n=Ce(Object.keys(t),e,r),i={};for(let s of n)i[s]=t[s];return i};Ce.some=(t,e,r)=>{let n=[].concat(t);for(let i of[].concat(e)){let s=rr(String(i),r);if(n.some(o=>s(o)))return!0}return!1};Ce.every=(t,e,r)=>{let n=[].concat(t);for(let i of[].concat(e)){let s=rr(String(i),r);if(!n.every(o=>s(o)))return!1}return!0};Ce.all=(t,e,r)=>{if(typeof t!="string")throw new TypeError(`Expected a string: "${nh.inspect(t)}"`);return[].concat(e).every(n=>rr(n,r)(t))};Ce.capture=(t,e,r)=>{let n=nu.isWindows(r),s=rr.makeRe(String(t),{...r,capture:!0}).exec(n?nu.toPosixSlashes(e):e);if(s)return s.slice(1).map(o=>o===void 0?"":o)};Ce.makeRe=(...t)=>rr.makeRe(...t);Ce.scan=(...t)=>rr.scan(...t);Ce.parse=(t,e)=>{let r=[];for(let n of[].concat(t||[]))for(let i of ih(String(n),e))r.push(rr.parse(i,e));return r};Ce.braces=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");return e&&e.nobrace===!0||!sh(t)?[t]:ih(t,e)};Ce.braceExpand=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");return Ce.braces(t,{...e,expand:!0})};Ce.hasBraces=sh;oh.exports=Ce});var Eh=U(Z=>{"use strict";Object.defineProperty(Z,"__esModule",{value:!0});Z.isAbsolute=Z.partitionAbsoluteAndRelative=Z.removeDuplicateSlashes=Z.matchAny=Z.convertPatternsToRe=Z.makeRe=Z.getPatternParts=Z.expandBraceExpansion=Z.expandPatternsWithBraceExpansion=Z.isAffectDepthOfReadingPattern=Z.endsWithSlashGlobStar=Z.hasGlobStar=Z.getBaseDirectory=Z.isPatternRelatedToParentDirectory=Z.getPatternsOutsideCurrentDirectory=Z.getPatternsInsideCurrentDirectory=Z.getPositivePatterns=Z.getNegativePatterns=Z.isPositivePattern=Z.isNegativePattern=Z.convertToNegativePattern=Z.convertToPositivePattern=Z.isDynamicPattern=Z.isStaticPattern=void 0;var lh=be("path"),nL=Qf(),iu=ah(),ch="**",iL="\\",sL=/[*?]|^!/,oL=/\[[^[]*]/,aL=/(?:^|[^!*+?@])\([^(]*\|[^|]*\)/,lL=/[!*+?@]\([^(]*\)/,cL=/,|\.\./,uL=/(?!^)\/{2,}/g;function uh(t,e={}){return!dh(t,e)}Z.isStaticPattern=uh;function dh(t,e={}){return t===""?!1:!!(e.caseSensitiveMatch===!1||t.includes(iL)||sL.test(t)||oL.test(t)||aL.test(t)||e.extglob!==!1&&lL.test(t)||e.braceExpansion!==!1&&dL(t))}Z.isDynamicPattern=dh;function dL(t){let e=t.indexOf("{");if(e===-1)return!1;let r=t.indexOf("}",e+1);if(r===-1)return!1;let n=t.slice(e,r);return cL.test(n)}function pL(t){return Po(t)?t.slice(1):t}Z.convertToPositivePattern=pL;function gL(t){return"!"+t}Z.convertToNegativePattern=gL;function Po(t){return t.startsWith("!")&&t[1]!=="("}Z.isNegativePattern=Po;function ph(t){return!Po(t)}Z.isPositivePattern=ph;function fL(t){return t.filter(Po)}Z.getNegativePatterns=fL;function mL(t){return t.filter(ph)}Z.getPositivePatterns=mL;function hL(t){return t.filter(e=>!su(e))}Z.getPatternsInsideCurrentDirectory=hL;function EL(t){return t.filter(su)}Z.getPatternsOutsideCurrentDirectory=EL;function su(t){return t.startsWith("..")||t.startsWith("./..")}Z.isPatternRelatedToParentDirectory=su;function _L(t){return nL(t,{flipBackslashes:!1})}Z.getBaseDirectory=_L;function SL(t){return t.includes(ch)}Z.hasGlobStar=SL;function gh(t){return t.endsWith("/"+ch)}Z.endsWithSlashGlobStar=gh;function TL(t){let e=lh.basename(t);return gh(t)||uh(e)}Z.isAffectDepthOfReadingPattern=TL;function AL(t){return t.reduce((e,r)=>e.concat(fh(r)),[])}Z.expandPatternsWithBraceExpansion=AL;function fh(t){let e=iu.braces(t,{expand:!0,nodupes:!0,keepEscaping:!0});return e.sort((r,n)=>r.length-n.length),e.filter(r=>r!=="")}Z.expandBraceExpansion=fh;function RL(t,e){let{parts:r}=iu.scan(t,Object.assign(Object.assign({},e),{parts:!0}));return r.length===0&&(r=[t]),r[0].startsWith("/")&&(r[0]=r[0].slice(1),r.unshift("")),r}Z.getPatternParts=RL;function mh(t,e){return iu.makeRe(t,e)}Z.makeRe=mh;function yL(t,e){return t.map(r=>mh(r,e))}Z.convertPatternsToRe=yL;function OL(t,e){return e.some(r=>r.test(t))}Z.matchAny=OL;function IL(t){return t.replace(uL,"/")}Z.removeDuplicateSlashes=IL;function LL(t){let e=[],r=[];for(let n of t)hh(n)?e.push(n):r.push(n);return[e,r]}Z.partitionAbsoluteAndRelative=LL;function hh(t){return lh.isAbsolute(t)}Z.isAbsolute=hh});var Ah=U((n0,Th)=>{"use strict";var CL=be("stream"),_h=CL.PassThrough,NL=Array.prototype.slice;Th.exports=PL;function PL(){let t=[],e=NL.call(arguments),r=!1,n=e[e.length-1];n&&!Array.isArray(n)&&n.pipe==null?e.pop():n={};let i=n.end!==!1,s=n.pipeError===!0;n.objectMode==null&&(n.objectMode=!0),n.highWaterMark==null&&(n.highWaterMark=64*1024);let o=_h(n);function a(){for(let u=0,p=arguments.length;u<p;u++)t.push(Sh(arguments[u],n));return l(),this}function l(){if(r)return;r=!0;let u=t.shift();if(!u){process.nextTick(c);return}Array.isArray(u)||(u=[u]);let p=u.length+1;function d(){--p>0||(r=!1,l())}function f(m){function _(){m.removeListener("merge2UnpipeEnd",_),m.removeListener("end",_),s&&m.removeListener("error",L),d()}function L(C){o.emit("error",C)}if(m._readableState.endEmitted)return d();m.on("merge2UnpipeEnd",_),m.on("end",_),s&&m.on("error",L),m.pipe(o,{end:!1}),m.resume()}for(let m=0;m<u.length;m++)f(u[m]);d()}function c(){r=!1,o.emit("queueDrain"),i&&o.end()}return o.setMaxListeners(0),o.add=a,o.on("unpipe",function(u){u.emit("merge2UnpipeEnd")}),e.length&&a.apply(null,e),o}function Sh(t,e){if(Array.isArray(t))for(let r=0,n=t.length;r<n;r++)t[r]=Sh(t[r],e);else{if(!t._readableState&&t.pipe&&(t=t.pipe(_h(e))),!t._readableState||!t.pause||!t.pipe)throw new Error("Only readable stream can be merged.");t.pause()}return t}});var yh=U(Do=>{"use strict";Object.defineProperty(Do,"__esModule",{value:!0});Do.merge=void 0;var DL=Ah();function vL(t){let e=DL(t);return t.forEach(r=>{r.once("error",n=>e.emit("error",n))}),e.once("close",()=>Rh(t)),e.once("end",()=>Rh(t)),e}Do.merge=vL;function Rh(t){t.forEach(e=>e.emit("close"))}});var Oh=U(li=>{"use strict";Object.defineProperty(li,"__esModule",{value:!0});li.isEmpty=li.isString=void 0;function bL(t){return typeof t=="string"}li.isString=bL;function wL(t){return t===""}li.isEmpty=wL});var Sr=U(Ze=>{"use strict";Object.defineProperty(Ze,"__esModule",{value:!0});Ze.string=Ze.stream=Ze.pattern=Ze.path=Ze.fs=Ze.errno=Ze.array=void 0;var FL=xf();Ze.array=FL;var ML=Uf();Ze.errno=ML;var kL=Hf();Ze.fs=kL;var GL=Yf();Ze.path=GL;var xL=Eh();Ze.pattern=xL;var UL=yh();Ze.stream=UL;var HL=Oh();Ze.string=HL});var Nh=U(et=>{"use strict";Object.defineProperty(et,"__esModule",{value:!0});et.convertPatternGroupToTask=et.convertPatternGroupsToTasks=et.groupPatternsByBaseDirectory=et.getNegativePatternsAsPositive=et.getPositivePatterns=et.convertPatternsToTasks=et.generate=void 0;var Bt=Sr();function BL(t,e){let r=Ih(t,e),n=Ih(e.ignore,e),i=Lh(r),s=Ch(r,n),o=i.filter(u=>Bt.pattern.isStaticPattern(u,e)),a=i.filter(u=>Bt.pattern.isDynamicPattern(u,e)),l=ou(o,s,!1),c=ou(a,s,!0);return l.concat(c)}et.generate=BL;function Ih(t,e){let r=t;return e.braceExpansion&&(r=Bt.pattern.expandPatternsWithBraceExpansion(r)),e.baseNameMatch&&(r=r.map(n=>n.includes("/")?n:`**/${n}`)),r.map(n=>Bt.pattern.removeDuplicateSlashes(n))}function ou(t,e,r){let n=[],i=Bt.pattern.getPatternsOutsideCurrentDirectory(t),s=Bt.pattern.getPatternsInsideCurrentDirectory(t),o=au(i),a=au(s);return n.push(...lu(o,e,r)),"."in a?n.push(cu(".",s,e,r)):n.push(...lu(a,e,r)),n}et.convertPatternsToTasks=ou;function Lh(t){return Bt.pattern.getPositivePatterns(t)}et.getPositivePatterns=Lh;function Ch(t,e){return Bt.pattern.getNegativePatterns(t).concat(e).map(Bt.pattern.convertToPositivePattern)}et.getNegativePatternsAsPositive=Ch;function au(t){let e={};return t.reduce((r,n)=>{let i=Bt.pattern.getBaseDirectory(n);return i in r?r[i].push(n):r[i]=[n],r},e)}et.groupPatternsByBaseDirectory=au;function lu(t,e,r){return Object.keys(t).map(n=>cu(n,t[n],e,r))}et.convertPatternGroupsToTasks=lu;function cu(t,e,r,n){return{dynamic:n,positive:e,negative:r,base:t,patterns:[].concat(e,r.map(Bt.pattern.convertToNegativePattern))}}et.convertPatternGroupToTask=cu});var Dh=U(vo=>{"use strict";Object.defineProperty(vo,"__esModule",{value:!0});vo.read=void 0;function KL(t,e,r){e.fs.lstat(t,(n,i)=>{if(n!==null){Ph(r,n);return}if(!i.isSymbolicLink()||!e.followSymbolicLink){uu(r,i);return}e.fs.stat(t,(s,o)=>{if(s!==null){if(e.throwErrorOnBrokenSymbolicLink){Ph(r,s);return}uu(r,i);return}e.markSymbolicLink&&(o.isSymbolicLink=()=>!0),uu(r,o)})})}vo.read=KL;function Ph(t,e){t(e)}function uu(t,e){t(null,e)}});var vh=U(bo=>{"use strict";Object.defineProperty(bo,"__esModule",{value:!0});bo.read=void 0;function $L(t,e){let r=e.fs.lstatSync(t);if(!r.isSymbolicLink()||!e.followSymbolicLink)return r;try{let n=e.fs.statSync(t);return e.markSymbolicLink&&(n.isSymbolicLink=()=>!0),n}catch(n){if(!e.throwErrorOnBrokenSymbolicLink)return r;throw n}}bo.read=$L});var bh=U(Hr=>{"use strict";Object.defineProperty(Hr,"__esModule",{value:!0});Hr.createFileSystemAdapter=Hr.FILE_SYSTEM_ADAPTER=void 0;var wo=be("fs");Hr.FILE_SYSTEM_ADAPTER={lstat:wo.lstat,stat:wo.stat,lstatSync:wo.lstatSync,statSync:wo.statSync};function YL(t){return t===void 0?Hr.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},Hr.FILE_SYSTEM_ADAPTER),t)}Hr.createFileSystemAdapter=YL});var wh=U(pu=>{"use strict";Object.defineProperty(pu,"__esModule",{value:!0});var WL=bh(),du=class{constructor(e={}){this._options=e,this.followSymbolicLink=this._getValue(this._options.followSymbolicLink,!0),this.fs=WL.createFileSystemAdapter(this._options.fs),this.markSymbolicLink=this._getValue(this._options.markSymbolicLink,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0)}_getValue(e,r){return e??r}};pu.default=du});var yn=U(Br=>{"use strict";Object.defineProperty(Br,"__esModule",{value:!0});Br.statSync=Br.stat=Br.Settings=void 0;var Fh=Dh(),jL=vh(),gu=wh();Br.Settings=gu.default;function VL(t,e,r){if(typeof e=="function"){Fh.read(t,fu(),e);return}Fh.read(t,fu(e),r)}Br.stat=VL;function zL(t,e){let r=fu(e);return jL.read(t,r)}Br.statSync=zL;function fu(t={}){return t instanceof gu.default?t:new gu.default(t)}});var Gh=U((g0,kh)=>{"use strict";var Mh;kh.exports=typeof queueMicrotask=="function"?queueMicrotask.bind(typeof window<"u"?window:global):t=>(Mh||(Mh=Promise.resolve())).then(t).catch(e=>setTimeout(()=>{throw e},0))});var Uh=U((f0,xh)=>{"use strict";xh.exports=qL;var JL=Gh();function qL(t,e){let r,n,i,s=!0;Array.isArray(t)?(r=[],n=t.length):(i=Object.keys(t),r={},n=i.length);function o(l){function c(){e&&e(l,r),e=null}s?JL(c):c()}function a(l,c,u){r[l]=u,(--n===0||c)&&o(c)}n?i?i.forEach(function(l){t[l](function(c,u){a(l,c,u)})}):t.forEach(function(l,c){l(function(u,p){a(c,u,p)})}):o(null),s=!1}});var mu=U(Mo=>{"use strict";Object.defineProperty(Mo,"__esModule",{value:!0});Mo.IS_SUPPORT_READDIR_WITH_FILE_TYPES=void 0;var Fo=process.versions.node.split(".");if(Fo[0]===void 0||Fo[1]===void 0)throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);var Hh=Number.parseInt(Fo[0],10),QL=Number.parseInt(Fo[1],10),Bh=10,XL=10,ZL=Hh>Bh,eC=Hh===Bh&&QL>=XL;Mo.IS_SUPPORT_READDIR_WITH_FILE_TYPES=ZL||eC});var Kh=U(ko=>{"use strict";Object.defineProperty(ko,"__esModule",{value:!0});ko.createDirentFromStats=void 0;var hu=class{constructor(e,r){this.name=e,this.isBlockDevice=r.isBlockDevice.bind(r),this.isCharacterDevice=r.isCharacterDevice.bind(r),this.isDirectory=r.isDirectory.bind(r),this.isFIFO=r.isFIFO.bind(r),this.isFile=r.isFile.bind(r),this.isSocket=r.isSocket.bind(r),this.isSymbolicLink=r.isSymbolicLink.bind(r)}};function tC(t,e){return new hu(t,e)}ko.createDirentFromStats=tC});var Eu=U(Go=>{"use strict";Object.defineProperty(Go,"__esModule",{value:!0});Go.fs=void 0;var rC=Kh();Go.fs=rC});var _u=U(xo=>{"use strict";Object.defineProperty(xo,"__esModule",{value:!0});xo.joinPathSegments=void 0;function nC(t,e,r){return t.endsWith(r)?t+e:t+r+e}xo.joinPathSegments=nC});var zh=U(Kr=>{"use strict";Object.defineProperty(Kr,"__esModule",{value:!0});Kr.readdir=Kr.readdirWithFileTypes=Kr.read=void 0;var iC=yn(),$h=Uh(),sC=mu(),Yh=Eu(),Wh=_u();function oC(t,e,r){if(!e.stats&&sC.IS_SUPPORT_READDIR_WITH_FILE_TYPES){jh(t,e,r);return}Vh(t,e,r)}Kr.read=oC;function jh(t,e,r){e.fs.readdir(t,{withFileTypes:!0},(n,i)=>{if(n!==null){Uo(r,n);return}let s=i.map(a=>({dirent:a,name:a.name,path:Wh.joinPathSegments(t,a.name,e.pathSegmentSeparator)}));if(!e.followSymbolicLinks){Su(r,s);return}let o=s.map(a=>aC(a,e));$h(o,(a,l)=>{if(a!==null){Uo(r,a);return}Su(r,l)})})}Kr.readdirWithFileTypes=jh;function aC(t,e){return r=>{if(!t.dirent.isSymbolicLink()){r(null,t);return}e.fs.stat(t.path,(n,i)=>{if(n!==null){if(e.throwErrorOnBrokenSymbolicLink){r(n);return}r(null,t);return}t.dirent=Yh.fs.createDirentFromStats(t.name,i),r(null,t)})}}function Vh(t,e,r){e.fs.readdir(t,(n,i)=>{if(n!==null){Uo(r,n);return}let s=i.map(o=>{let a=Wh.joinPathSegments(t,o,e.pathSegmentSeparator);return l=>{iC.stat(a,e.fsStatSettings,(c,u)=>{if(c!==null){l(c);return}let p={name:o,path:a,dirent:Yh.fs.createDirentFromStats(o,u)};e.stats&&(p.stats=u),l(null,p)})}});$h(s,(o,a)=>{if(o!==null){Uo(r,o);return}Su(r,a)})})}Kr.readdir=Vh;function Uo(t,e){t(e)}function Su(t,e){t(null,e)}});var Zh=U($r=>{"use strict";Object.defineProperty($r,"__esModule",{value:!0});$r.readdir=$r.readdirWithFileTypes=$r.read=void 0;var lC=yn(),cC=mu(),Jh=Eu(),qh=_u();function uC(t,e){return!e.stats&&cC.IS_SUPPORT_READDIR_WITH_FILE_TYPES?Qh(t,e):Xh(t,e)}$r.read=uC;function Qh(t,e){return e.fs.readdirSync(t,{withFileTypes:!0}).map(n=>{let i={dirent:n,name:n.name,path:qh.joinPathSegments(t,n.name,e.pathSegmentSeparator)};if(i.dirent.isSymbolicLink()&&e.followSymbolicLinks)try{let s=e.fs.statSync(i.path);i.dirent=Jh.fs.createDirentFromStats(i.name,s)}catch(s){if(e.throwErrorOnBrokenSymbolicLink)throw s}return i})}$r.readdirWithFileTypes=Qh;function Xh(t,e){return e.fs.readdirSync(t).map(n=>{let i=qh.joinPathSegments(t,n,e.pathSegmentSeparator),s=lC.statSync(i,e.fsStatSettings),o={name:n,path:i,dirent:Jh.fs.createDirentFromStats(n,s)};return e.stats&&(o.stats=s),o})}$r.readdir=Xh});var eE=U(Yr=>{"use strict";Object.defineProperty(Yr,"__esModule",{value:!0});Yr.createFileSystemAdapter=Yr.FILE_SYSTEM_ADAPTER=void 0;var ci=be("fs");Yr.FILE_SYSTEM_ADAPTER={lstat:ci.lstat,stat:ci.stat,lstatSync:ci.lstatSync,statSync:ci.statSync,readdir:ci.readdir,readdirSync:ci.readdirSync};function dC(t){return t===void 0?Yr.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},Yr.FILE_SYSTEM_ADAPTER),t)}Yr.createFileSystemAdapter=dC});var tE=U(Au=>{"use strict";Object.defineProperty(Au,"__esModule",{value:!0});var pC=be("path"),gC=yn(),fC=eE(),Tu=class{constructor(e={}){this._options=e,this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!1),this.fs=fC.createFileSystemAdapter(this._options.fs),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,pC.sep),this.stats=this._getValue(this._options.stats,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0),this.fsStatSettings=new gC.Settings({followSymbolicLink:this.followSymbolicLinks,fs:this.fs,throwErrorOnBrokenSymbolicLink:this.throwErrorOnBrokenSymbolicLink})}_getValue(e,r){return e??r}};Au.default=Tu});var Ho=U(Wr=>{"use strict";Object.defineProperty(Wr,"__esModule",{value:!0});Wr.Settings=Wr.scandirSync=Wr.scandir=void 0;var rE=zh(),mC=Zh(),Ru=tE();Wr.Settings=Ru.default;function hC(t,e,r){if(typeof e=="function"){rE.read(t,yu(),e);return}rE.read(t,yu(e),r)}Wr.scandir=hC;function EC(t,e){let r=yu(e);return mC.read(t,r)}Wr.scandirSync=EC;function yu(t={}){return t instanceof Ru.default?t:new Ru.default(t)}});var iE=U((O0,nE)=>{"use strict";function _C(t){var e=new t,r=e;function n(){var s=e;return s.next?e=s.next:(e=new t,r=e),s.next=null,s}function i(s){r.next=s,r=s}return{get:n,release:i}}nE.exports=_C});var oE=U((I0,Ou)=>{"use strict";var SC=iE();function sE(t,e,r){if(typeof t=="function"&&(r=e,e=t,t=null),!(r>=1))throw new Error("fastqueue concurrency must be equal to or greater than 1");var n=SC(TC),i=null,s=null,o=0,a=null,l={push:_,drain:ht,saturated:ht,pause:u,paused:!1,get concurrency(){return r},set concurrency(z){if(!(z>=1))throw new Error("fastqueue concurrency must be equal to or greater than 1");if(r=z,!l.paused)for(;i&&o<r;)o++,C()},running:c,resume:f,idle:m,length:p,getQueue:d,unshift:L,empty:ht,kill:F,killAndDrain:I,error:Q,abort:$};return l;function c(){return o}function u(){l.paused=!0}function p(){for(var z=i,te=0;z;)z=z.next,te++;return te}function d(){for(var z=i,te=[];z;)te.push(z.value),z=z.next;return te}function f(){if(l.paused){if(l.paused=!1,i===null){o++,C();return}for(;i&&o<r;)o++,C()}}function m(){return o===0&&l.length()===0}function _(z,te){var M=n.get();M.context=t,M.release=C,M.value=z,M.callback=te||ht,M.errorHandler=a,o>=r||l.paused?s?(s.next=M,s=M):(i=M,s=M,l.saturated()):(o++,e.call(t,M.value,M.worked))}function L(z,te){var M=n.get();M.context=t,M.release=C,M.value=z,M.callback=te||ht,M.errorHandler=a,o>=r||l.paused?i?(M.next=i,i=M):(i=M,s=M,l.saturated()):(o++,e.call(t,M.value,M.worked))}function C(z){z&&n.release(z);var te=i;te&&o<=r?l.paused?o--:(s===i&&(s=null),i=te.next,te.next=null,e.call(t,te.value,te.worked),s===null&&l.empty()):--o===0&&l.drain()}function F(){i=null,s=null,l.drain=ht}function I(){i=null,s=null,l.drain(),l.drain=ht}function $(){var z=i;for(i=null,s=null;z;){var te=z.next,M=z.callback,ne=z.errorHandler,pe=z.value,N=z.context;z.value=null,z.callback=ht,z.errorHandler=null,ne&&ne(new Error("abort"),pe),M.call(N,new Error("abort")),z.release(z),z=te}l.drain=ht}function Q(z){a=z}}function ht(){}function TC(){this.value=null,this.callback=ht,this.next=null,this.release=ht,this.context=null,this.errorHandler=null;var t=this;this.worked=function(r,n){var i=t.callback,s=t.errorHandler,o=t.value;t.value=null,t.callback=ht,t.errorHandler&&s(r,o),i.call(t.context,r,n),t.release(t)}}function AC(t,e,r){typeof t=="function"&&(r=e,e=t,t=null);function n(u,p){e.call(this,u).then(function(d){p(null,d)},p)}var i=sE(t,n,r),s=i.push,o=i.unshift;return i.push=a,i.unshift=l,i.drained=c,i;function a(u){var p=new Promise(function(d,f){s(u,function(m,_){if(m){f(m);return}d(_)})});return p.catch(ht),p}function l(u){var p=new Promise(function(d,f){o(u,function(m,_){if(m){f(m);return}d(_)})});return p.catch(ht),p}function c(){var u=new Promise(function(p){process.nextTick(function(){if(i.idle())p();else{var d=i.drain;i.drain=function(){typeof d=="function"&&d(),p(),i.drain=d}}})});return u}}Ou.exports=sE;Ou.exports.promise=AC});var Bo=U(nr=>{"use strict";Object.defineProperty(nr,"__esModule",{value:!0});nr.joinPathSegments=nr.replacePathSegmentSeparator=nr.isAppliedFilter=nr.isFatalError=void 0;function RC(t,e){return t.errorFilter===null?!0:!t.errorFilter(e)}nr.isFatalError=RC;function yC(t,e){return t===null||t(e)}nr.isAppliedFilter=yC;function OC(t,e){return t.split(/[/\\]/).join(e)}nr.replacePathSegmentSeparator=OC;function IC(t,e,r){return t===""?e:t.endsWith(r)?t+e:t+r+e}nr.joinPathSegments=IC});var Cu=U(Lu=>{"use strict";Object.defineProperty(Lu,"__esModule",{value:!0});var LC=Bo(),Iu=class{constructor(e,r){this._root=e,this._settings=r,this._root=LC.replacePathSegmentSeparator(e,r.pathSegmentSeparator)}};Lu.default=Iu});var Du=U(Pu=>{"use strict";Object.defineProperty(Pu,"__esModule",{value:!0});var CC=be("events"),NC=Ho(),PC=oE(),Ko=Bo(),DC=Cu(),Nu=class extends DC.default{constructor(e,r){super(e,r),this._settings=r,this._scandir=NC.scandir,this._emitter=new CC.EventEmitter,this._queue=PC(this._worker.bind(this),this._settings.concurrency),this._isFatalError=!1,this._isDestroyed=!1,this._queue.drain=()=>{this._isFatalError||this._emitter.emit("end")}}read(){return this._isFatalError=!1,this._isDestroyed=!1,setImmediate(()=>{this._pushToQueue(this._root,this._settings.basePath)}),this._emitter}get isDestroyed(){return this._isDestroyed}destroy(){if(this._isDestroyed)throw new Error("The reader is already destroyed");this._isDestroyed=!0,this._queue.killAndDrain()}onEntry(e){this._emitter.on("entry",e)}onError(e){this._emitter.once("error",e)}onEnd(e){this._emitter.once("end",e)}_pushToQueue(e,r){let n={directory:e,base:r};this._queue.push(n,i=>{i!==null&&this._handleError(i)})}_worker(e,r){this._scandir(e.directory,this._settings.fsScandirSettings,(n,i)=>{if(n!==null){r(n,void 0);return}for(let s of i)this._handleEntry(s,e.base);r(null,void 0)})}_handleError(e){this._isDestroyed||!Ko.isFatalError(this._settings,e)||(this._isFatalError=!0,this._isDestroyed=!0,this._emitter.emit("error",e))}_handleEntry(e,r){if(this._isDestroyed||this._isFatalError)return;let n=e.path;r!==void 0&&(e.path=Ko.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),Ko.isAppliedFilter(this._settings.entryFilter,e)&&this._emitEntry(e),e.dirent.isDirectory()&&Ko.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(n,r===void 0?void 0:e.path)}_emitEntry(e){this._emitter.emit("entry",e)}};Pu.default=Nu});var aE=U(bu=>{"use strict";Object.defineProperty(bu,"__esModule",{value:!0});var vC=Du(),vu=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new vC.default(this._root,this._settings),this._storage=[]}read(e){this._reader.onError(r=>{bC(e,r)}),this._reader.onEntry(r=>{this._storage.push(r)}),this._reader.onEnd(()=>{wC(e,this._storage)}),this._reader.read()}};bu.default=vu;function bC(t,e){t(e)}function wC(t,e){t(null,e)}});var lE=U(Fu=>{"use strict";Object.defineProperty(Fu,"__esModule",{value:!0});var FC=be("stream"),MC=Du(),wu=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new MC.default(this._root,this._settings),this._stream=new FC.Readable({objectMode:!0,read:()=>{},destroy:()=>{this._reader.isDestroyed||this._reader.destroy()}})}read(){return this._reader.onError(e=>{this._stream.emit("error",e)}),this._reader.onEntry(e=>{this._stream.push(e)}),this._reader.onEnd(()=>{this._stream.push(null)}),this._reader.read(),this._stream}};Fu.default=wu});var cE=U(ku=>{"use strict";Object.defineProperty(ku,"__esModule",{value:!0});var kC=Ho(),$o=Bo(),GC=Cu(),Mu=class extends GC.default{constructor(){super(...arguments),this._scandir=kC.scandirSync,this._storage=[],this._queue=new Set}read(){return this._pushToQueue(this._root,this._settings.basePath),this._handleQueue(),this._storage}_pushToQueue(e,r){this._queue.add({directory:e,base:r})}_handleQueue(){for(let e of this._queue.values())this._handleDirectory(e.directory,e.base)}_handleDirectory(e,r){try{let n=this._scandir(e,this._settings.fsScandirSettings);for(let i of n)this._handleEntry(i,r)}catch(n){this._handleError(n)}}_handleError(e){if($o.isFatalError(this._settings,e))throw e}_handleEntry(e,r){let n=e.path;r!==void 0&&(e.path=$o.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),$o.isAppliedFilter(this._settings.entryFilter,e)&&this._pushToStorage(e),e.dirent.isDirectory()&&$o.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(n,r===void 0?void 0:e.path)}_pushToStorage(e){this._storage.push(e)}};ku.default=Mu});var uE=U(xu=>{"use strict";Object.defineProperty(xu,"__esModule",{value:!0});var xC=cE(),Gu=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new xC.default(this._root,this._settings)}read(){return this._reader.read()}};xu.default=Gu});var dE=U(Hu=>{"use strict";Object.defineProperty(Hu,"__esModule",{value:!0});var UC=be("path"),HC=Ho(),Uu=class{constructor(e={}){this._options=e,this.basePath=this._getValue(this._options.basePath,void 0),this.concurrency=this._getValue(this._options.concurrency,Number.POSITIVE_INFINITY),this.deepFilter=this._getValue(this._options.deepFilter,null),this.entryFilter=this._getValue(this._options.entryFilter,null),this.errorFilter=this._getValue(this._options.errorFilter,null),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,UC.sep),this.fsScandirSettings=new HC.Settings({followSymbolicLinks:this._options.followSymbolicLinks,fs:this._options.fs,pathSegmentSeparator:this._options.pathSegmentSeparator,stats:this._options.stats,throwErrorOnBrokenSymbolicLink:this._options.throwErrorOnBrokenSymbolicLink})}_getValue(e,r){return e??r}};Hu.default=Uu});var Wo=U(ir=>{"use strict";Object.defineProperty(ir,"__esModule",{value:!0});ir.Settings=ir.walkStream=ir.walkSync=ir.walk=void 0;var pE=aE(),BC=lE(),KC=uE(),Bu=dE();ir.Settings=Bu.default;function $C(t,e,r){if(typeof e=="function"){new pE.default(t,Yo()).read(e);return}new pE.default(t,Yo(e)).read(r)}ir.walk=$C;function YC(t,e){let r=Yo(e);return new KC.default(t,r).read()}ir.walkSync=YC;function WC(t,e){let r=Yo(e);return new BC.default(t,r).read()}ir.walkStream=WC;function Yo(t={}){return t instanceof Bu.default?t:new Bu.default(t)}});var jo=U($u=>{"use strict";Object.defineProperty($u,"__esModule",{value:!0});var jC=be("path"),VC=yn(),gE=Sr(),Ku=class{constructor(e){this._settings=e,this._fsStatSettings=new VC.Settings({followSymbolicLink:this._settings.followSymbolicLinks,fs:this._settings.fs,throwErrorOnBrokenSymbolicLink:this._settings.followSymbolicLinks})}_getFullEntryPath(e){return jC.resolve(this._settings.cwd,e)}_makeEntry(e,r){let n={name:r,path:r,dirent:gE.fs.createDirentFromStats(r,e)};return this._settings.stats&&(n.stats=e),n}_isFatalError(e){return!gE.errno.isEnoentCodeError(e)&&!this._settings.suppressErrors}};$u.default=Ku});var ju=U(Wu=>{"use strict";Object.defineProperty(Wu,"__esModule",{value:!0});var zC=be("stream"),JC=yn(),qC=Wo(),QC=jo(),Yu=class extends QC.default{constructor(){super(...arguments),this._walkStream=qC.walkStream,this._stat=JC.stat}dynamic(e,r){return this._walkStream(e,r)}static(e,r){let n=e.map(this._getFullEntryPath,this),i=new zC.PassThrough({objectMode:!0});i._write=(s,o,a)=>this._getEntry(n[s],e[s],r).then(l=>{l!==null&&r.entryFilter(l)&&i.push(l),s===n.length-1&&i.end(),a()}).catch(a);for(let s=0;s<n.length;s++)i.write(s);return i}_getEntry(e,r,n){return this._getStat(e).then(i=>this._makeEntry(i,r)).catch(i=>{if(n.errorFilter(i))return null;throw i})}_getStat(e){return new Promise((r,n)=>{this._stat(e,this._fsStatSettings,(i,s)=>i===null?r(s):n(i))})}};Wu.default=Yu});var fE=U(zu=>{"use strict";Object.defineProperty(zu,"__esModule",{value:!0});var XC=Wo(),ZC=jo(),eN=ju(),Vu=class extends ZC.default{constructor(){super(...arguments),this._walkAsync=XC.walk,this._readerStream=new eN.default(this._settings)}dynamic(e,r){return new Promise((n,i)=>{this._walkAsync(e,r,(s,o)=>{s===null?n(o):i(s)})})}async static(e,r){let n=[],i=this._readerStream.static(e,r);return new Promise((s,o)=>{i.once("error",o),i.on("data",a=>n.push(a)),i.once("end",()=>s(n))})}};zu.default=Vu});var mE=U(qu=>{"use strict";Object.defineProperty(qu,"__esModule",{value:!0});var ps=Sr(),Ju=class{constructor(e,r,n){this._patterns=e,this._settings=r,this._micromatchOptions=n,this._storage=[],this._fillStorage()}_fillStorage(){for(let e of this._patterns){let r=this._getPatternSegments(e),n=this._splitSegmentsIntoSections(r);this._storage.push({complete:n.length<=1,pattern:e,segments:r,sections:n})}}_getPatternSegments(e){return ps.pattern.getPatternParts(e,this._micromatchOptions).map(n=>ps.pattern.isDynamicPattern(n,this._settings)?{dynamic:!0,pattern:n,patternRe:ps.pattern.makeRe(n,this._micromatchOptions)}:{dynamic:!1,pattern:n})}_splitSegmentsIntoSections(e){return ps.array.splitWhen(e,r=>r.dynamic&&ps.pattern.hasGlobStar(r.pattern))}};qu.default=Ju});var hE=U(Xu=>{"use strict";Object.defineProperty(Xu,"__esModule",{value:!0});var tN=mE(),Qu=class extends tN.default{match(e){let r=e.split("/"),n=r.length,i=this._storage.filter(s=>!s.complete||s.segments.length>n);for(let s of i){let o=s.sections[0];if(!s.complete&&n>o.length||r.every((l,c)=>{let u=s.segments[c];return!!(u.dynamic&&u.patternRe.test(l)||!u.dynamic&&u.pattern===l)}))return!0}return!1}};Xu.default=Qu});var EE=U(ed=>{"use strict";Object.defineProperty(ed,"__esModule",{value:!0});var Vo=Sr(),rN=hE(),Zu=class{constructor(e,r){this._settings=e,this._micromatchOptions=r}getFilter(e,r,n){let i=this._getMatcher(r),s=this._getNegativePatternsRe(n);return o=>this._filter(e,o,i,s)}_getMatcher(e){return new rN.default(e,this._settings,this._micromatchOptions)}_getNegativePatternsRe(e){let r=e.filter(Vo.pattern.isAffectDepthOfReadingPattern);return Vo.pattern.convertPatternsToRe(r,this._micromatchOptions)}_filter(e,r,n,i){if(this._isSkippedByDeep(e,r.path)||this._isSkippedSymbolicLink(r))return!1;let s=Vo.path.removeLeadingDotSegment(r.path);return this._isSkippedByPositivePatterns(s,n)?!1:this._isSkippedByNegativePatterns(s,i)}_isSkippedByDeep(e,r){return this._settings.deep===1/0?!1:this._getEntryLevel(e,r)>=this._settings.deep}_getEntryLevel(e,r){let n=r.split("/").length;if(e==="")return n;let i=e.split("/").length;return n-i}_isSkippedSymbolicLink(e){return!this._settings.followSymbolicLinks&&e.dirent.isSymbolicLink()}_isSkippedByPositivePatterns(e,r){return!this._settings.baseNameMatch&&!r.match(e)}_isSkippedByNegativePatterns(e,r){return!Vo.pattern.matchAny(e,r)}};ed.default=Zu});var _E=U(rd=>{"use strict";Object.defineProperty(rd,"__esModule",{value:!0});var jr=Sr(),td=class{constructor(e,r){this._settings=e,this._micromatchOptions=r,this.index=new Map}getFilter(e,r){let[n,i]=jr.pattern.partitionAbsoluteAndRelative(r),s={positive:{all:jr.pattern.convertPatternsToRe(e,this._micromatchOptions)},negative:{absolute:jr.pattern.convertPatternsToRe(n,Object.assign(Object.assign({},this._micromatchOptions),{dot:!0})),relative:jr.pattern.convertPatternsToRe(i,Object.assign(Object.assign({},this._micromatchOptions),{dot:!0}))}};return o=>this._filter(o,s)}_filter(e,r){let n=jr.path.removeLeadingDotSegment(e.path);if(this._settings.unique&&this._isDuplicateEntry(n)||this._onlyFileFilter(e)||this._onlyDirectoryFilter(e))return!1;let i=this._isMatchToPatternsSet(n,r,e.dirent.isDirectory());return this._settings.unique&&i&&this._createIndexRecord(n),i}_isDuplicateEntry(e){return this.index.has(e)}_createIndexRecord(e){this.index.set(e,void 0)}_onlyFileFilter(e){return this._settings.onlyFiles&&!e.dirent.isFile()}_onlyDirectoryFilter(e){return this._settings.onlyDirectories&&!e.dirent.isDirectory()}_isMatchToPatternsSet(e,r,n){return!(!this._isMatchToPatterns(e,r.positive.all,n)||this._isMatchToPatterns(e,r.negative.relative,n)||this._isMatchToAbsoluteNegative(e,r.negative.absolute,n))}_isMatchToAbsoluteNegative(e,r,n){if(r.length===0)return!1;let i=jr.path.makeAbsolute(this._settings.cwd,e);return this._isMatchToPatterns(i,r,n)}_isMatchToPatterns(e,r,n){if(r.length===0)return!1;let i=jr.pattern.matchAny(e,r);return!i&&n?jr.pattern.matchAny(e+"/",r):i}};rd.default=td});var SE=U(id=>{"use strict";Object.defineProperty(id,"__esModule",{value:!0});var nN=Sr(),nd=class{constructor(e){this._settings=e}getFilter(){return e=>this._isNonFatalError(e)}_isNonFatalError(e){return nN.errno.isEnoentCodeError(e)||this._settings.suppressErrors}};id.default=nd});var AE=U(od=>{"use strict";Object.defineProperty(od,"__esModule",{value:!0});var TE=Sr(),sd=class{constructor(e){this._settings=e}getTransformer(){return e=>this._transform(e)}_transform(e){let r=e.path;return this._settings.absolute&&(r=TE.path.makeAbsolute(this._settings.cwd,r),r=TE.path.unixify(r)),this._settings.markDirectories&&e.dirent.isDirectory()&&(r+="/"),this._settings.objectMode?Object.assign(Object.assign({},e),{path:r}):r}};od.default=sd});var zo=U(ld=>{"use strict";Object.defineProperty(ld,"__esModule",{value:!0});var iN=be("path"),sN=EE(),oN=_E(),aN=SE(),lN=AE(),ad=class{constructor(e){this._settings=e,this.errorFilter=new aN.default(this._settings),this.entryFilter=new oN.default(this._settings,this._getMicromatchOptions()),this.deepFilter=new sN.default(this._settings,this._getMicromatchOptions()),this.entryTransformer=new lN.default(this._settings)}_getRootDirectory(e){return iN.resolve(this._settings.cwd,e.base)}_getReaderOptions(e){let r=e.base==="."?"":e.base;return{basePath:r,pathSegmentSeparator:"/",concurrency:this._settings.concurrency,deepFilter:this.deepFilter.getFilter(r,e.positive,e.negative),entryFilter:this.entryFilter.getFilter(e.positive,e.negative),errorFilter:this.errorFilter.getFilter(),followSymbolicLinks:this._settings.followSymbolicLinks,fs:this._settings.fs,stats:this._settings.stats,throwErrorOnBrokenSymbolicLink:this._settings.throwErrorOnBrokenSymbolicLink,transform:this.entryTransformer.getTransformer()}}_getMicromatchOptions(){return{dot:this._settings.dot,matchBase:this._settings.baseNameMatch,nobrace:!this._settings.braceExpansion,nocase:!this._settings.caseSensitiveMatch,noext:!this._settings.extglob,noglobstar:!this._settings.globstar,posix:!0,strictSlashes:!1}}};ld.default=ad});var RE=U(ud=>{"use strict";Object.defineProperty(ud,"__esModule",{value:!0});var cN=fE(),uN=zo(),cd=class extends uN.default{constructor(){super(...arguments),this._reader=new cN.default(this._settings)}async read(e){let r=this._getRootDirectory(e),n=this._getReaderOptions(e);return(await this.api(r,e,n)).map(s=>n.transform(s))}api(e,r,n){return r.dynamic?this._reader.dynamic(e,n):this._reader.static(r.patterns,n)}};ud.default=cd});var yE=U(pd=>{"use strict";Object.defineProperty(pd,"__esModule",{value:!0});var dN=be("stream"),pN=ju(),gN=zo(),dd=class extends gN.default{constructor(){super(...arguments),this._reader=new pN.default(this._settings)}read(e){let r=this._getRootDirectory(e),n=this._getReaderOptions(e),i=this.api(r,e,n),s=new dN.Readable({objectMode:!0,read:()=>{}});return i.once("error",o=>s.emit("error",o)).on("data",o=>s.emit("data",n.transform(o))).once("end",()=>s.emit("end")),s.once("close",()=>i.destroy()),s}api(e,r,n){return r.dynamic?this._reader.dynamic(e,n):this._reader.static(r.patterns,n)}};pd.default=dd});var OE=U(fd=>{"use strict";Object.defineProperty(fd,"__esModule",{value:!0});var fN=yn(),mN=Wo(),hN=jo(),gd=class extends hN.default{constructor(){super(...arguments),this._walkSync=mN.walkSync,this._statSync=fN.statSync}dynamic(e,r){return this._walkSync(e,r)}static(e,r){let n=[];for(let i of e){let s=this._getFullEntryPath(i),o=this._getEntry(s,i,r);o===null||!r.entryFilter(o)||n.push(o)}return n}_getEntry(e,r,n){try{let i=this._getStat(e);return this._makeEntry(i,r)}catch(i){if(n.errorFilter(i))return null;throw i}}_getStat(e){return this._statSync(e,this._fsStatSettings)}};fd.default=gd});var IE=U(hd=>{"use strict";Object.defineProperty(hd,"__esModule",{value:!0});var EN=OE(),_N=zo(),md=class extends _N.default{constructor(){super(...arguments),this._reader=new EN.default(this._settings)}read(e){let r=this._getRootDirectory(e),n=this._getReaderOptions(e);return this.api(r,e,n).map(n.transform)}api(e,r,n){return r.dynamic?this._reader.dynamic(e,n):this._reader.static(r.patterns,n)}};hd.default=md});var LE=U(di=>{"use strict";Object.defineProperty(di,"__esModule",{value:!0});di.DEFAULT_FILE_SYSTEM_ADAPTER=void 0;var ui=be("fs"),SN=be("os"),TN=Math.max(SN.cpus().length,1);di.DEFAULT_FILE_SYSTEM_ADAPTER={lstat:ui.lstat,lstatSync:ui.lstatSync,stat:ui.stat,statSync:ui.statSync,readdir:ui.readdir,readdirSync:ui.readdirSync};var Ed=class{constructor(e={}){this._options=e,this.absolute=this._getValue(this._options.absolute,!1),this.baseNameMatch=this._getValue(this._options.baseNameMatch,!1),this.braceExpansion=this._getValue(this._options.braceExpansion,!0),this.caseSensitiveMatch=this._getValue(this._options.caseSensitiveMatch,!0),this.concurrency=this._getValue(this._options.concurrency,TN),this.cwd=this._getValue(this._options.cwd,process.cwd()),this.deep=this._getValue(this._options.deep,1/0),this.dot=this._getValue(this._options.dot,!1),this.extglob=this._getValue(this._options.extglob,!0),this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!0),this.fs=this._getFileSystemMethods(this._options.fs),this.globstar=this._getValue(this._options.globstar,!0),this.ignore=this._getValue(this._options.ignore,[]),this.markDirectories=this._getValue(this._options.markDirectories,!1),this.objectMode=this._getValue(this._options.objectMode,!1),this.onlyDirectories=this._getValue(this._options.onlyDirectories,!1),this.onlyFiles=this._getValue(this._options.onlyFiles,!0),this.stats=this._getValue(this._options.stats,!1),this.suppressErrors=this._getValue(this._options.suppressErrors,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!1),this.unique=this._getValue(this._options.unique,!0),this.onlyDirectories&&(this.onlyFiles=!1),this.stats&&(this.objectMode=!0),this.ignore=[].concat(this.ignore)}_getValue(e,r){return e===void 0?r:e}_getFileSystemMethods(e={}){return Object.assign(Object.assign({},di.DEFAULT_FILE_SYSTEM_ADAPTER),e)}};di.default=Ed});var Ad=U((q0,NE)=>{"use strict";var CE=Nh(),AN=RE(),RN=yE(),yN=IE(),_d=LE(),vt=Sr();async function Sd(t,e){Kt(t);let r=Td(t,AN.default,e),n=await Promise.all(r);return vt.array.flatten(n)}(function(t){t.glob=t,t.globSync=e,t.globStream=r,t.async=t;function e(c,u){Kt(c);let p=Td(c,yN.default,u);return vt.array.flatten(p)}t.sync=e;function r(c,u){Kt(c);let p=Td(c,RN.default,u);return vt.stream.merge(p)}t.stream=r;function n(c,u){Kt(c);let p=[].concat(c),d=new _d.default(u);return CE.generate(p,d)}t.generateTasks=n;function i(c,u){Kt(c);let p=new _d.default(u);return vt.pattern.isDynamicPattern(c,p)}t.isDynamicPattern=i;function s(c){return Kt(c),vt.path.escape(c)}t.escapePath=s;function o(c){return Kt(c),vt.path.convertPathToPattern(c)}t.convertPathToPattern=o;let a;(function(c){function u(d){return Kt(d),vt.path.escapePosixPath(d)}c.escapePath=u;function p(d){return Kt(d),vt.path.convertPosixPathToPattern(d)}c.convertPathToPattern=p})(a=t.posix||(t.posix={}));let l;(function(c){function u(d){return Kt(d),vt.path.escapeWindowsPath(d)}c.escapePath=u;function p(d){return Kt(d),vt.path.convertWindowsPathToPattern(d)}c.convertPathToPattern=p})(l=t.win32||(t.win32={}))})(Sd||(Sd={}));function Td(t,e,r){let n=[].concat(t),i=new _d.default(r),s=CE.generate(n,i),o=new e(i);return s.map(o.read,o)}function Kt(t){if(![].concat(t).every(n=>vt.string.isString(n)&&!vt.string.isEmpty(n)))throw new TypeError("Patterns must be a string (non empty) or an array of strings")}NE.exports=Sd});var GE=U((Q0,Qo)=>{"use strict";function vE(t){return Array.isArray(t)?t:[t]}var ON=void 0,yd="",PE=" ",Rd="\\",IN=/^\s+$/,LN=/(?:[^\\]|^)\\$/,CN=/^\\!/,NN=/^\\#/,PN=/\r?\n/g,DN=/^\.{0,2}\/|^\.{1,2}$/,vN=/\/$/,pi="/",bE="node-ignore";typeof Symbol<"u"&&(bE=Symbol.for("node-ignore"));var wE=bE,gi=(t,e,r)=>(Object.defineProperty(t,e,{value:r}),r),bN=/([0-z])-([0-z])/g,FE=()=>!1,wN=t=>t.replace(bN,(e,r,n)=>r.charCodeAt(0)<=n.charCodeAt(0)?e:yd),FN=t=>t.startsWith("!")||t.startsWith("\\^")?`^${t.slice(t[0]==="!"?1:2)}`:t,MN=t=>{let{length:e}=t;return t.slice(0,e-e%2)},kN=[[/^\uFEFF/,()=>yd],[/((?:\\\\)*?)(\\?\s+)$/,(t,e,r)=>e+(r.indexOf("\\")===0?PE:yd)],[/(\\+?)\s/g,(t,e)=>{let{length:r}=e;return e.slice(0,r-r%2)+PE}],[/[\\$.|*+(){^]/g,t=>`\\${t}`],[/(?!\\)\?/g,()=>"[^/]"],[/^\//,()=>"^"],[/\//g,()=>"\\/"],[/^\^*(?:\\\*\\\*\\\/)+/,()=>"^(?:.*\\/)?"],[/^(?=[^^])/,function(){return/\/(?!$)/.test(this)?"^":"(?:^|\\/)"}],[/\\\/\\\*\\\*(?=\\\/|$)/g,(t,e,r)=>e+6<r.length?"(?:\\/[^\\/]+)*":"\\/.+"],[/(^|[^\\]+)(\\\*)+(?=.+)/g,(t,e,r)=>{let n=r.replace(/\\\*/g,"[^\\/]*");return e+n}],[/\\\\\\(?=[$.|*+(){^])/g,()=>Rd],[/\\\\/g,()=>Rd],[/(\\)?\[([^\]/]*?)(\\*)($|\])/g,(t,e,r,n,i)=>e===Rd?`\\[${r}${MN(n)}${i}`:i==="]"&&n.length%2===0?`[${FN(wN(r))}${n}]`:"[]"],[/(?:[^*])$/,t=>/\/$/.test(t)?`${t}$`:`${t}(?=$|\\/$)`]],GN=/(^|\\\/)?\\\*$/,gs="regex",Jo="checkRegex",DE="_",xN={[gs](t,e){return`${e?`${e}[^/]+`:"[^/]*"}(?=$|\\/$)`},[Jo](t,e){return`${e?`${e}[^/]*`:"[^/]*"}(?=$|\\/$)`}},UN=t=>kN.reduce((e,[r,n])=>e.replace(r,n.bind(t)),t),qo=t=>typeof t=="string",HN=t=>t&&qo(t)&&!IN.test(t)&&!LN.test(t)&&t.indexOf("#")!==0,BN=t=>t.split(PN).filter(Boolean),Od=class{constructor(e,r,n,i,s,o){this.pattern=e,this.mark=r,this.negative=s,gi(this,"body",n),gi(this,"ignoreCase",i),gi(this,"regexPrefix",o)}get regex(){let e=DE+gs;return this[e]?this[e]:this._make(gs,e)}get checkRegex(){let e=DE+Jo;return this[e]?this[e]:this._make(Jo,e)}_make(e,r){let n=this.regexPrefix.replace(GN,xN[e]),i=this.ignoreCase?new RegExp(n,"i"):new RegExp(n);return gi(this,r,i)}},KN=({pattern:t,mark:e},r)=>{let n=!1,i=t;i.indexOf("!")===0&&(n=!0,i=i.substr(1)),i=i.replace(CN,"!").replace(NN,"#");let s=UN(i);return new Od(t,e,i,r,n,s)},Id=class{constructor(e){this._ignoreCase=e,this._rules=[]}_add(e){if(e&&e[wE]){this._rules=this._rules.concat(e._rules._rules),this._added=!0;return}if(qo(e)&&(e={pattern:e}),HN(e.pattern)){let r=KN(e,this._ignoreCase);this._added=!0,this._rules.push(r)}}add(e){return this._added=!1,vE(qo(e)?BN(e):e).forEach(this._add,this),this._added}test(e,r,n){let i=!1,s=!1,o;this._rules.forEach(l=>{let{negative:c}=l;s===c&&i!==s||c&&!i&&!s&&!r||!l[n].test(e)||(i=!c,s=c,o=c?ON:l)});let a={ignored:i,unignored:s};return o&&(a.rule=o),a}},$N=(t,e)=>{throw new e(t)},Tr=(t,e,r)=>qo(t)?t?Tr.isNotRelative(t)?r(`path should be a \`path.relative()\`d string, but got "${e}"`,RangeError):!0:r("path must not be empty",TypeError):r(`path must be a string, but got \`${e}\``,TypeError),ME=t=>DN.test(t);Tr.isNotRelative=ME;Tr.convert=t=>t;var Ld=class{constructor({ignorecase:e=!0,ignoreCase:r=e,allowRelativePaths:n=!1}={}){gi(this,wE,!0),this._rules=new Id(r),this._strictPathCheck=!n,this._initCache()}_initCache(){this._ignoreCache=Object.create(null),this._testCache=Object.create(null)}add(e){return this._rules.add(e)&&this._initCache(),this}addPattern(e){return this.add(e)}_test(e,r,n,i){let s=e&&Tr.convert(e);return Tr(s,e,this._strictPathCheck?$N:FE),this._t(s,r,n,i)}checkIgnore(e){if(!vN.test(e))return this.test(e);let r=e.split(pi).filter(Boolean);if(r.pop(),r.length){let n=this._t(r.join(pi)+pi,this._testCache,!0,r);if(n.ignored)return n}return this._rules.test(e,!1,Jo)}_t(e,r,n,i){if(e in r)return r[e];if(i||(i=e.split(pi).filter(Boolean)),i.pop(),!i.length)return r[e]=this._rules.test(e,n,gs);let s=this._t(i.join(pi)+pi,r,n,i);return r[e]=s.ignored?s:this._rules.test(e,n,gs)}ignores(e){return this._test(e,this._ignoreCache,!1).ignored}createFilter(){return e=>!this.ignores(e)}filter(e){return vE(e).filter(this.createFilter())}test(e){return this._test(e,this._testCache,!0)}},Cd=t=>new Ld(t),YN=t=>Tr(t&&Tr.convert(t),t,FE),kE=()=>{let t=r=>/^\\\\\?\\/.test(r)||/["<>|\u0000-\u001F]+/u.test(r)?r:r.replace(/\\/g,"/");Tr.convert=t;let e=/^[a-z]:\//i;Tr.isNotRelative=r=>e.test(r)||ME(r)};typeof process<"u"&&process.platform==="win32"&&kE();Qo.exports=Cd;Cd.default=Cd;Qo.exports.isPathValid=YN;gi(Qo.exports,Symbol.for("setupWindows"),kE)});import*as fR from"dotenv";import Vt from"process";import{execFile as FR}from"child_process";import{promisify as MR}from"util";import fr from"fs/promises";import ut from"path";import{spawn as SR}from"child_process";import Bg from"fs/promises";import _n from"path";import TR from"os";var _c=class{value;next;constructor(e){this.value=e}},Vi=class{#t;#s;#c;constructor(){this.clear()}enqueue(e){let r=new _c(e);this.#t?(this.#s.next=r,this.#s=r):(this.#t=r,this.#s=r),this.#c++}dequeue(){let e=this.#t;if(e)return this.#t=this.#t.next,this.#c--,this.#t||(this.#s=void 0),e.value}peek(){if(this.#t)return this.#t.value}clear(){this.#t=void 0,this.#s=void 0,this.#c=0}get size(){return this.#c}*[Symbol.iterator](){let e=this.#t;for(;e;)yield e.value,e=e.next}*drain(){for(;this.#t;)yield this.dequeue()}};function mn(t){let e=!1;if(typeof t=="object"&&({concurrency:t,rejectOnClear:e=!1}=t),Hg(t),typeof e!="boolean")throw new TypeError("Expected `rejectOnClear` to be a boolean");let r=new Vi,n=0,i=()=>{n<t&&r.size>0&&(n++,r.dequeue().run())},s=()=>{n--,i()},o=async(c,u,p)=>{let d=(async()=>c(...p))();u(d);try{await d}catch{}s()},a=(c,u,p,d)=>{let f={reject:p};new Promise(m=>{f.run=m,r.enqueue(f)}).then(o.bind(void 0,c,u,d)),n<t&&i()},l=(c,...u)=>new Promise((p,d)=>{a(c,p,d,u)});return Object.defineProperties(l,{activeCount:{get:()=>n},pendingCount:{get:()=>r.size},clearQueue:{value(){if(!e){r.clear();return}let c=AbortSignal.abort().reason;for(;r.size>0;)r.dequeue().reject(c)}},concurrency:{get:()=>t,set(c){Hg(c),t=c,queueMicrotask(()=>{for(;n<t&&r.size>0;)i()})}},map:{async value(c,u){let p=Array.from(c,(d,f)=>this(u,d,f));return Promise.all(p)}}}),l}function Hg(t){if(!((Number.isInteger(t)||t===Number.POSITIVE_INFINITY)&&t>0))throw new TypeError("Expected `concurrency` to be a number from 1 and up")}var xr={NAME:"Docuvia",EMAIL:"docuvia@localhost"};var hn="refs/heads/",Sc="HEAD";var AR="fast-import",RR="--quiet",Tc={PIPE:"pipe",IGNORE:"ignore"},to={DATA:"data",ERROR:"error",CLOSE:"close"},En={COMMIT:"commit",COMMITTER:"committer",DATA:"data",FROM:"from",DELETE_ALL:"deleteall",MODIFY:"M"},yR="100644",OR="inline",IR="+0000",LR="stdin write failed: ",CR=(t,e,r)=>{let n=[e,r?`${LR}${r.message}`:""].filter(Boolean).join("; ");return`git fast-import exited with code ${t}${n?": "+n:""}`},NR=300*1e3,Kg="SIGTERM",PR=t=>`git fast-import timed out after ${t}ms and was terminated`,DR=TR.cpus().length*4;async function $g(t,e){let r=_n.resolve(t),n=e?_n.resolve(e):r;if(!r.startsWith(n+_n.sep)&&r!==n)throw new E(T.FS_PATH_TRAVERSAL,`sourceDir "${t}" escapes allowed root "${n}"`);let i=new Map,s=mn(DR),o=async a=>{let l=await Bg.readdir(a,{withFileTypes:!0});await Promise.all(l.map(async c=>{let u=_n.join(a,c.name);if(c.isDirectory())await o(u);else if(c.isFile()){let p=_n.relative(t,u),d=await s(()=>Bg.readFile(u,H));i.set(p,d)}}))};return await o(t),i}function Yg(t,e,r,n,i){let s=[];s.push(`${En.COMMIT} ${hn}${t}`),s.push(`${En.COMMITTER} ${xr.NAME} <${xr.EMAIL}> ${r} ${IR}`),s.push(`${En.DATA} ${Buffer.byteLength(n,H)}`),s.push(n),i&&s.push(`${En.FROM} ${i}`),s.push(En.DELETE_ALL);for(let[o,a]of e){let l=Buffer.from(a,H),c=o.split(_n.sep).join(_n.posix.sep);s.push(`${En.MODIFY} ${yR} ${OR} ${c}`),s.push(`${En.DATA} ${l.length}`),s.push(a)}return s.push(""),s.join(`
5
- `)}function Wg(t,e,r=NR){return new Promise((n,i)=>{let s=SR("git",[AR,RR],{cwd:t,stdio:[Tc.PIPE,Tc.IGNORE,Tc.PIPE]}),o=setTimeout(()=>{s.kill(Kg),i(new Error(PR(r)))},r);o.unref();let a=[],l;s.stderr.on(to.DATA,c=>a.push(c)),s.on(to.ERROR,i),s.on(to.CLOSE,c=>{if(clearTimeout(o),c===0)return n();let u=Buffer.concat(a).toString(H).trim();i(new Error(CR(c,u,l)))}),s.stdin.on(to.ERROR,c=>{l=c});try{s.stdin.end(e,H)}catch(c){s.kill(Kg),clearTimeout(o),i(c instanceof Error?c:new Error(String(c)));return}})}import Xn from"path";var vR="Git hook name must be a basename contained by the resolved hooks directory";function bR(t){return t.length===0||t==="."||t===".."||t.includes("/")||t.includes("\\")||Xn.isAbsolute(t)}function wR(t){return t.length===0||t===".."||t.startsWith(`..${Xn.sep}`)||Xn.isAbsolute(t)}function jg(){throw new E(T.FS_PATH_TRAVERSAL,vR)}function zi(t,e){bR(e)&&jg();let r=Xn.resolve(t),n=Xn.resolve(r,e),i=Xn.relative(r,n);return wR(i)&&jg(),n}var kR=MR(FR),GR={LC_ALL:"C",LANG:"C",LC_MESSAGES:"C"},ge=(t,e,r={})=>kR(t,e,{...r,encoding:"utf8",env:{...process.env,...r.env??{},...GR}}),fe={REV_PARSE:"rev-parse",BRANCH:"branch",COMMIT_TREE:"commit-tree",UPDATE_REF:"update-ref",LS_FILES:"ls-files",LS_TREE:"ls-tree",DIFF:"diff",DIFF_TREE:"diff-tree",CAT_FILE:"cat-file",SHOW:"show",LOG:"log",REV_LIST:"rev-list",REMOTE:"remote",STATUS:"status",FETCH:"fetch",PUSH:"push",MERGE_BASE:"merge-base",WORKTREE:"worktree",BLAME:"blame"},re={IS_INSIDE_WORK_TREE:"--is-inside-work-tree",LIST:"--list",DELETE_FORCE:"-D",MESSAGE_FLAG:"-m",STAGED:"-s",OTHERS:"--others",EXCLUDE_STANDARD:"--exclude-standard",NAME_ONLY:"--name-only",BLOB:"blob",MAX_COUNT_FLAG:"-n",LOG_FORMAT_SHA_AND_BODY:"--format=%H%x01%B%x00",GET_URL:"get-url",EMPTY_FORMAT:"--format=",WORKTREE_LIST:"list",PORCELAIN:"--porcelain",NAME_STATUS:"--name-status",END_OF_OPTIONS:"--end-of-options",NO_COMMIT_ID:"--no-commit-id",RECURSIVE:"-r",VERIFY:"--verify",QUIET:"--quiet",IS_ANCESTOR:"--is-ancestor",TREE_SUFFIX:"^{tree}",SUPPRESS_DIFF:"-s",COMMIT_TIMESTAMP_FORMAT:"--format=%ct",PARENT_FLAG:"-p",UNIFIED_ZERO:"--unified=0",NO_COLOR:"--no-color",PATHSPEC_SEPARATOR:"--",GIT_DIR_FLAG:"--git-dir",GIT_COMMON_DIR_FLAG:"--git-common-dir",GIT_PATH_FLAG:"--git-path",NO_VERIFY:"--no-verify"},ro={PATH:"worktree ",BRANCH:"branch "},xR="\0",UR="",Ac={RENAMED:"R",ADDED:"A",DELETED:"D"},HR="4b825dc642cb6eb9a060e54bf8d69288fbee4904",Vg=".git",zg="hooks",BR="_",Jg="docuvia-knowledge.lock",KR=1e4,$R=100,YR=6e4,qg="object",Qg="code",Fe={BRANCH_LIST_FAILED:"git branch --list failed",BRANCH_DELETE_FAILED:"git branch -D failed",COMMIT_TREE_FAILED:"git commit-tree failed",UPDATE_REF_FAILED:"git update-ref failed",HOOK_FILE_WRITE_FAILED:"Writing hook file failed",HOOK_FILE_CHMOD_FAILED:"chmod on hook file failed",LS_FILES_STAGED_FAILED:"git ls-files -s failed",LS_FILES_OTHERS_FAILED:"git ls-files --others failed",DIFF_NAME_ONLY_FAILED:"git diff --name-only failed",CAT_FILE_BLOB_FAILED:"git cat-file blob failed",STATUS_PORCELAIN_FAILED:"git status --porcelain failed",DIFF_TREE_FAILED:"git diff-tree failed",FAST_IMPORT_FAILED:"git fast-import failed",FETCH_FAILED:"git fetch failed",PUSH_FAILED:"git push failed",MERGE_BASE_IS_ANCESTOR_FAILED:"git merge-base --is-ancestor failed",REV_PARSE_TREE_FAILED:"git rev-parse ^{tree} failed",SHOW_COMMIT_TIMESTAMP_FAILED:"git show --format=%ct failed",COMMIT_TREE_MERGE_FAILED:"git commit-tree (merge) failed",KNOWLEDGE_LOCK_ACQUIRE_FAILED:"Failed to acquire knowledge lock",KNOWLEDGE_LOCK_TIMED_OUT:t=>`Timed out waiting for the knowledge branch lock at ${t} \u2014 another Docuvia process may be stuck`},Zn=class{async getGitDir(e){try{let{stdout:r}=await ge("git",[fe.REV_PARSE,re.GIT_DIR_FLAG],{cwd:e});return ut.resolve(e,r.trim())}catch{return ut.join(e,Vg)}}async getGitCommonDir(e){try{let{stdout:r}=await ge("git",[fe.REV_PARSE,re.GIT_COMMON_DIR_FLAG],{cwd:e});return ut.resolve(e,r.trim())}catch{return ut.join(e,Vg)}}async resolveHooksDir(e){let r;try{let{stdout:n}=await ge("git",[fe.REV_PARSE,re.GIT_PATH_FLAG,zg],{cwd:e});r=ut.resolve(e,n.trim())}catch{let n=await this.getGitCommonDir(e);r=ut.join(n,zg)}return ut.basename(r)===BR?ut.dirname(r):r}async isGitRepository(e){try{return await ge("git",[fe.REV_PARSE,re.IS_INSIDE_WORK_TREE],{cwd:e}),!0}catch{return!1}}async branchExists(e,r){try{let{stdout:n}=await ge("git",[fe.BRANCH,re.LIST,r],{cwd:e});return n.trim().length>0}catch(n){throw E.wrap(T.GIT_COMMAND_FAILED,Fe.BRANCH_LIST_FAILED,n)}}async deleteBranch(e,r){try{await ge("git",[fe.BRANCH,re.DELETE_FORCE,r],{cwd:e})}catch(n){throw E.wrap(T.GIT_COMMAND_FAILED,Fe.BRANCH_DELETE_FAILED,n)}}async commitEmptyTree(e,r){try{let{stdout:n}=await ge("git",[fe.COMMIT_TREE,HR,re.MESSAGE_FLAG,r],{cwd:e});return n.trim()}catch(n){throw E.wrap(T.GIT_BRANCH_CREATE_FAILED,Fe.COMMIT_TREE_FAILED,n)}}async updateBranchRef(e,r,n){try{await ge("git",[fe.UPDATE_REF,`${hn}${r}`,n],{cwd:e})}catch(i){throw E.wrap(T.GIT_BRANCH_CREATE_FAILED,Fe.UPDATE_REF_FAILED,i)}}async hooksDirExists(e){try{let r=await this.resolveHooksDir(e);return await fr.access(r),!0}catch{return!1}}async readHookFile(e,r){let n=await this.resolveHooksDir(e),i=zi(n,r);try{return await fr.readFile(i,H)}catch{return}}async appendHookFile(e,r,n){try{let i=await this.resolveHooksDir(e),s=zi(i,r);await fr.appendFile(s,n)}catch(i){throw E.wrap(T.GIT_HOOK_INSTALL_FAILED,Fe.HOOK_FILE_WRITE_FAILED,i)}}async writeHookFile(e,r,n){try{let i=await this.resolveHooksDir(e),s=zi(i,r);await fr.writeFile(s,n)}catch(i){throw E.wrap(T.GIT_HOOK_INSTALL_FAILED,Fe.HOOK_FILE_WRITE_FAILED,i)}}async makeHookExecutable(e,r){try{let n=await this.resolveHooksDir(e),i=zi(n,r);await fr.chmod(i,493)}catch(n){throw E.wrap(T.GIT_HOOK_INSTALL_FAILED,Fe.HOOK_FILE_CHMOD_FAILED,n)}}async listTrackedFilesWithBlobHash(e){let r=new Map;try{let{stdout:n}=await ge("git",[fe.LS_FILES,re.STAGED],{cwd:e,maxBuffer:67108864});for(let i of n.split(`
6
- `)){if(!i.trim())continue;let[s,o]=i.split(" "),a=s.split(" ")[1];o&&a&&r.set(o,a)}return r}catch(n){throw E.wrap(T.GIT_COMMAND_FAILED,Fe.LS_FILES_STAGED_FAILED,n)}}async listUntrackedFiles(e){try{let{stdout:r}=await ge("git",[fe.LS_FILES,re.OTHERS,re.EXCLUDE_STANDARD],{cwd:e,maxBuffer:67108864});return r.split(`
7
- `).map(n=>n.trim()).filter(Boolean)}catch(r){throw E.wrap(T.GIT_COMMAND_FAILED,Fe.LS_FILES_OTHERS_FAILED,r)}}async listModifiedFiles(e){try{let{stdout:r}=await ge("git",[fe.DIFF,re.NAME_ONLY],{cwd:e});return r.split(`
8
- `).map(n=>n.trim()).filter(Boolean)}catch(r){throw E.wrap(T.GIT_COMMAND_FAILED,Fe.DIFF_NAME_ONLY_FAILED,r)}}async readBlobContent(e,r){try{let{stdout:n}=await ge("git",[fe.CAT_FILE,re.BLOB,r],{cwd:e,maxBuffer:10485760});return n}catch(n){throw E.wrap(T.GIT_COMMAND_FAILED,Fe.CAT_FILE_BLOB_FAILED,n)}}async readFileAtRef(e,r,n){try{let i=n.split(ut.sep).join(ut.posix.sep),{stdout:s}=await ge("git",[fe.SHOW,`${r}:${i}`],{cwd:e,maxBuffer:64*1024*1024});return s}catch{return}}async listFilesAtRef(e,r,n){try{let i=n.split(ut.sep).join(ut.posix.sep),s=i.endsWith("/")?i:`${i}/`,{stdout:o}=await ge("git",[fe.LS_TREE,re.NAME_ONLY,r,re.PATHSPEC_SEPARATOR,s],{cwd:e});return o.split(`
9
- `).map(a=>a.trim()).filter(Boolean)}catch{return[]}}async getCommitLog(e,r,n=1e3){try{let{stdout:i}=await ge("git",[fe.LOG,r,re.MAX_COUNT_FLAG,String(n),re.LOG_FORMAT_SHA_AND_BODY],{cwd:e,maxBuffer:67108864});return i.split(xR).map(s=>s.trim()).filter(Boolean).map(s=>{let o=s.indexOf(UR);return{sha:s.slice(0,o),message:s.slice(o+1)}})}catch{return[]}}async getCommitAncestry(e,r,n=1e3){try{let{stdout:i}=await ge("git",[fe.REV_LIST,r,re.MAX_COUNT_FLAG,String(n)],{cwd:e});return i.split(`
10
- `).map(s=>s.trim()).filter(Boolean)}catch{return[]}}async getRemoteUrl(e){try{let{stdout:r}=await ge("git",[fe.REMOTE,re.GET_URL,js],{cwd:e}),n=r.trim();return n.length>0?n:void 0}catch{return}}async getRecentChangedFilePaths(e,r=100){try{let{stdout:n}=await ge("git",[fe.LOG,re.MAX_COUNT_FLAG,String(r),re.NAME_ONLY,re.EMPTY_FORMAT],{cwd:e});return n.split(`
11
- `).map(i=>i.trim()).filter(Boolean)}catch{return[]}}async hasUncommittedChanges(e){try{let{stdout:r}=await ge("git",[fe.STATUS,re.PORCELAIN],{cwd:e});return r.trim().length>0}catch(r){throw E.wrap(T.GIT_COMMAND_FAILED,Fe.STATUS_PORCELAIN_FAILED,r)}}async getChangedFilesSince(e,r,n){let i=[],s=new Set;try{let o=[fe.DIFF,re.NAME_STATUS,re.END_OF_OPTIONS,r??Sc,...n?[n]:[]],{stdout:a}=await ge("git",o,{cwd:e});this.collectNameStatusEntries(a,i,s)}catch{}return!r&&!n&&await this.mergeUntrackedFiles(e,i,s),i}collectNameStatusEntries(e,r,n){for(let i of e.split(`
12
- `)){let s=i.trim();if(!s)continue;let o=s.split(" "),a=o[0]??"",{file:l,status:c,oldFile:u}=this.parseNameStatusLine(a,o);l&&!n.has(l)&&(n.add(l),r.push(u!==void 0?{file:l,status:c,oldFile:u}:{file:l,status:c}))}}parseNameStatusLine(e,r){return e.startsWith(Ac.RENAMED)?{status:Ct.RENAMED,file:r[2]??r[1],oldFile:r[1]}:e.startsWith(Ac.ADDED)?{status:Ct.ADDED,file:r[1]}:e.startsWith(Ac.DELETED)?{status:Ct.DELETED,file:r[1]}:{status:Ct.MODIFIED,file:r[1]}}async mergeUntrackedFiles(e,r,n){let i=await this.listUntrackedFiles(e);for(let s of i)n.has(s)||(n.add(s),r.push({file:s,status:Ct.ADDED}))}async getChangedLineRanges(e,r,n,i){let s=[];try{let{stdout:o}=await ge("git",[fe.DIFF,re.UNIFIED_ZERO,re.NO_COLOR,re.END_OF_OPTIONS,r,n,re.PATHSPEC_SEPARATOR,i],{cwd:e}),a=/^@@ -\d+(?:,\d+)? \+(\d+)(?:,(\d+))? @@/;for(let l of o.split(`
13
- `)){let c=a.exec(l);if(!c)continue;let u=Number(c[1]),p=c[2]===void 0?1:Number(c[2]);if(p===0){let d=Math.max(u-1,0);s.push({startRow:d,endRow:d})}else s.push({startRow:u-1,endRow:u-1+p-1})}}catch{}return s}async getFilesChangedByCommit(e,r){try{let{stdout:n}=await ge("git",[fe.DIFF_TREE,re.NO_COMMIT_ID,re.NAME_ONLY,re.RECURSIVE,re.END_OF_OPTIONS,r],{cwd:e});return n.split(`
14
- `).map(i=>i.trim()).filter(Boolean)}catch(n){throw E.wrap(T.GIT_COMMAND_FAILED,Fe.DIFF_TREE_FAILED,n)}}async getHeadSha(e){try{let{stdout:r}=await ge("git",[fe.REV_PARSE,Sc],{cwd:e}),n=r.trim();return n.length>0?n:void 0}catch{return}}async listWorktrees(e){let r;try{r=(await ge("git",[fe.WORKTREE,re.WORKTREE_LIST,re.PORCELAIN],{cwd:e})).stdout}catch{return[]}let n=[];for(let i of r.split(`
3
+ import{a as cg,b as ug,d as Ye,f as dg,g as pg,h as gg}from"./chunk-6X7DTONU.js";import{A as vg,B as bg,C as wg,D as Fg,E as mc,F as hc,G as Mg,H as Qs,I as kg,J as Gg,K as Xs,L as xg,M as Zs,N as Ut,O as gn,P as Mr,a as mg,b as dc,c as Jn,d as qs,e as pc,f as gc,g as qn,h as hg,i as Eg,j as _g,k as Tt,l as Fr,m as Sg,n as Tg,o as Ag,p as Rg,q as yg,r as fc,s as Og,t as Wi,u as Ig,v as Lg,w as Cg,x as Ng,y as Pg,z as Dg}from"./chunk-74TDWVFF.js";import{a as fg,b as uc,c as h,d as g,e as Ct,g as kr}from"./chunk-NW5BTEUZ.js";import{$ as Xp,A as un,B as Se,C as Bp,D as Qt,Da as lc,E as oc,Ea as js,F as $e,Fa as Vs,G as Ys,Ga as cc,H as Nr,Ha as $n,I as Kp,Ia as Yn,J as Kn,Ja as zs,K as dn,Ka as pn,L as xt,La as Wn,M as ac,Ma as jn,N as $p,Na as Dr,O as ur,Oa as Js,P as Bi,Pa as pr,Q as he,Qa as Yi,R as Pr,Ra as vr,S as Yp,Sa as lg,T as Wp,Ta as K,U as jp,Ua as Vn,V as Vp,Va as zn,W as Ki,Wa as br,X as zp,Xa as wr,Y as Jp,Z as qp,_ as Qp,a as ye,aa as Zp,b as xp,ba as eg,c as me,ca as lt,da as $i,e as Up,ea as tg,f as T,fa as rg,g as E,ga as ng,h as O,ha as ig,i as R,ia as sg,j as y,ja as dr,k as A,ka as St,l as Lt,la as og,m as nc,ma as se,n as B,na as H,o as ic,oa as Xt,p as cn,pa as Ws,q as Hp,qa as S,r as Bn,ra as ag,s as Hi,t as sc,u as $s,v as Je,w as Cr,x as de,y as cr,z as Gt}from"./chunk-VCFMQYZY.js";import{a as ve,b as U,c as rc}from"./chunk-KVOCOCYJ.js";var xf=U(ii=>{"use strict";Object.defineProperty(ii,"__esModule",{value:!0});ii.splitWhen=ii.flatten=void 0;function gO(t){return t.reduce((e,r)=>[].concat(e,r),[])}ii.flatten=gO;function fO(t,e){let r=[[]],n=0;for(let i of t)e(i)?(n++,r[n]=[]):r[n].push(i);return r}ii.splitWhen=fO});var Uf=U(To=>{"use strict";Object.defineProperty(To,"__esModule",{value:!0});To.isEnoentCodeError=void 0;function mO(t){return t.code==="ENOENT"}To.isEnoentCodeError=mO});var Hf=U(Ao=>{"use strict";Object.defineProperty(Ao,"__esModule",{value:!0});Ao.createDirentFromStats=void 0;var kc=class{constructor(e,r){this.name=e,this.isBlockDevice=r.isBlockDevice.bind(r),this.isCharacterDevice=r.isCharacterDevice.bind(r),this.isDirectory=r.isDirectory.bind(r),this.isFIFO=r.isFIFO.bind(r),this.isFile=r.isFile.bind(r),this.isSocket=r.isSocket.bind(r),this.isSymbolicLink=r.isSymbolicLink.bind(r)}};function hO(t,e){return new kc(t,e)}Ao.createDirentFromStats=hO});var Yf=U(Me=>{"use strict";Object.defineProperty(Me,"__esModule",{value:!0});Me.convertPosixPathToPattern=Me.convertWindowsPathToPattern=Me.convertPathToPattern=Me.escapePosixPath=Me.escapeWindowsPath=Me.escape=Me.removeLeadingDotSegment=Me.makeAbsolute=Me.unixify=void 0;var EO=ve("os"),_O=ve("path"),Bf=EO.platform()==="win32",SO=2,TO=/(\\?)([()*?[\]{|}]|^!|[!+@](?=\()|\\(?![!()*+?@[\]{|}]))/g,AO=/(\\?)([()[\]{}]|^!|[!+@](?=\())/g,RO=/^\\\\([.?])/,yO=/\\(?![!()+@[\]{}])/g;function OO(t){return t.replace(/\\/g,"/")}Me.unixify=OO;function IO(t,e){return _O.resolve(t,e)}Me.makeAbsolute=IO;function LO(t){if(t.charAt(0)==="."){let e=t.charAt(1);if(e==="/"||e==="\\")return t.slice(SO)}return t}Me.removeLeadingDotSegment=LO;Me.escape=Bf?Gc:xc;function Gc(t){return t.replace(AO,"\\$2")}Me.escapeWindowsPath=Gc;function xc(t){return t.replace(TO,"\\$2")}Me.escapePosixPath=xc;Me.convertPathToPattern=Bf?Kf:$f;function Kf(t){return Gc(t).replace(RO,"//$1").replace(yO,"/")}Me.convertWindowsPathToPattern=Kf;function $f(t){return xc(t)}Me.convertPosixPathToPattern=$f});var jf=U((GB,Wf)=>{"use strict";Wf.exports=function(e){if(typeof e!="string"||e==="")return!1;for(var r;r=/(\\).|([@?!+*]\(.*\))/g.exec(e);){if(r[2])return!0;e=e.slice(r.index+r[0].length)}return!1}});var Jf=U((xB,zf)=>{"use strict";var CO=jf(),Vf={"{":"}","(":")","[":"]"},NO=function(t){if(t[0]==="!")return!0;for(var e=0,r=-2,n=-2,i=-2,s=-2,o=-2;e<t.length;){if(t[e]==="*"||t[e+1]==="?"&&/[\].+)]/.test(t[e])||n!==-1&&t[e]==="["&&t[e+1]!=="]"&&(n<e&&(n=t.indexOf("]",e)),n>e&&(o===-1||o>n||(o=t.indexOf("\\",e),o===-1||o>n)))||i!==-1&&t[e]==="{"&&t[e+1]!=="}"&&(i=t.indexOf("}",e),i>e&&(o=t.indexOf("\\",e),o===-1||o>i))||s!==-1&&t[e]==="("&&t[e+1]==="?"&&/[:!=]/.test(t[e+2])&&t[e+3]!==")"&&(s=t.indexOf(")",e),s>e&&(o=t.indexOf("\\",e),o===-1||o>s))||r!==-1&&t[e]==="("&&t[e+1]!=="|"&&(r<e&&(r=t.indexOf("|",e)),r!==-1&&t[r+1]!==")"&&(s=t.indexOf(")",r),s>r&&(o=t.indexOf("\\",r),o===-1||o>s))))return!0;if(t[e]==="\\"){var a=t[e+1];e+=2;var l=Vf[a];if(l){var c=t.indexOf(l,e);c!==-1&&(e=c+1)}if(t[e]==="!")return!0}else e++}return!1},PO=function(t){if(t[0]==="!")return!0;for(var e=0;e<t.length;){if(/[*?{}()[\]]/.test(t[e]))return!0;if(t[e]==="\\"){var r=t[e+1];e+=2;var n=Vf[r];if(n){var i=t.indexOf(n,e);i!==-1&&(e=i+1)}if(t[e]==="!")return!0}else e++}return!1};zf.exports=function(e,r){if(typeof e!="string"||e==="")return!1;if(CO(e))return!0;var n=NO;return r&&r.strict===!1&&(n=PO),n(e)}});var Qf=U((UB,qf)=>{"use strict";var DO=Jf(),vO=ve("path").posix.dirname,bO=ve("os").platform()==="win32",Uc="/",wO=/\\/g,FO=/[\{\[].*[\}\]]$/,MO=/(^|[^\\])([\{\[]|\([^\)]+$)/,kO=/\\([\!\*\?\|\[\]\(\)\{\}])/g;qf.exports=function(e,r){var n=Object.assign({flipBackslashes:!0},r);n.flipBackslashes&&bO&&e.indexOf(Uc)<0&&(e=e.replace(wO,Uc)),FO.test(e)&&(e+=Uc),e+="a";do e=vO(e);while(DO(e)||MO.test(e));return e.replace(kO,"$1")}});var Ro=U(Pt=>{"use strict";Pt.isInteger=t=>typeof t=="number"?Number.isInteger(t):typeof t=="string"&&t.trim()!==""?Number.isInteger(Number(t)):!1;Pt.find=(t,e)=>t.nodes.find(r=>r.type===e);Pt.exceedsLimit=(t,e,r=1,n)=>n===!1||!Pt.isInteger(t)||!Pt.isInteger(e)?!1:(Number(e)-Number(t))/Number(r)>=n;Pt.escapeNode=(t,e=0,r)=>{let n=t.nodes[e];n&&(r&&n.type===r||n.type==="open"||n.type==="close")&&n.escaped!==!0&&(n.value="\\"+n.value,n.escaped=!0)};Pt.encloseBrace=t=>t.type!=="brace"?!1:t.commas>>0+t.ranges>>0===0?(t.invalid=!0,!0):!1;Pt.isInvalidBrace=t=>t.type!=="brace"?!1:t.invalid===!0||t.dollar?!0:t.commas>>0+t.ranges>>0===0||t.open!==!0||t.close!==!0?(t.invalid=!0,!0):!1;Pt.isOpenOrClose=t=>t.type==="open"||t.type==="close"?!0:t.open===!0||t.close===!0;Pt.reduce=t=>t.reduce((e,r)=>(r.type==="text"&&e.push(r.value),r.type==="range"&&(r.type="text"),e),[]);Pt.flatten=(...t)=>{let e=[],r=n=>{for(let i=0;i<n.length;i++){let s=n[i];if(Array.isArray(s)){r(s);continue}s!==void 0&&e.push(s)}return e};return r(t),e}});var yo=U((BB,Zf)=>{"use strict";var Xf=Ro();Zf.exports=(t,e={})=>{let r=(n,i={})=>{let s=e.escapeInvalid&&Xf.isInvalidBrace(i),o=n.invalid===!0&&e.escapeInvalid===!0,a="";if(n.value)return(s||o)&&Xf.isOpenOrClose(n)?"\\"+n.value:n.value;if(n.value)return n.value;if(n.nodes)for(let l of n.nodes)a+=r(l);return a};return r(t)}});var tm=U((KB,em)=>{"use strict";em.exports=function(t){return typeof t=="number"?t-t===0:typeof t=="string"&&t.trim()!==""?Number.isFinite?Number.isFinite(+t):isFinite(+t):!1}});var um=U(($B,cm)=>{"use strict";var rm=tm(),Tn=(t,e,r)=>{if(rm(t)===!1)throw new TypeError("toRegexRange: expected the first argument to be a number");if(e===void 0||t===e)return String(t);if(rm(e)===!1)throw new TypeError("toRegexRange: expected the second argument to be a number.");let n={relaxZeros:!0,...r};typeof n.strictZeros=="boolean"&&(n.relaxZeros=n.strictZeros===!1);let i=String(n.relaxZeros),s=String(n.shorthand),o=String(n.capture),a=String(n.wrap),l=t+":"+e+"="+i+s+o+a;if(Tn.cache.hasOwnProperty(l))return Tn.cache[l].result;let c=Math.min(t,e),u=Math.max(t,e);if(Math.abs(c-u)===1){let _=t+"|"+e;return n.capture?`(${_})`:n.wrap===!1?_:`(?:${_})`}let p=lm(t)||lm(e),d={min:t,max:e,a:c,b:u},f=[],m=[];if(p&&(d.isPadded=p,d.maxLen=String(d.max).length),c<0){let _=u<0?Math.abs(u):1;m=nm(_,Math.abs(c),d,n),c=d.a=0}return u>=0&&(f=nm(c,u,d,n)),d.negatives=m,d.positives=f,d.result=GO(m,f,n),n.capture===!0?d.result=`(${d.result})`:n.wrap!==!1&&f.length+m.length>1&&(d.result=`(?:${d.result})`),Tn.cache[l]=d,d.result};function GO(t,e,r){let n=Hc(t,e,"-",!1,r)||[],i=Hc(e,t,"",!1,r)||[],s=Hc(t,e,"-?",!0,r)||[];return n.concat(s).concat(i).join("|")}function xO(t,e){let r=1,n=1,i=sm(t,r),s=new Set([e]);for(;t<=i&&i<=e;)s.add(i),r+=1,i=sm(t,r);for(i=om(e+1,n)-1;t<i&&i<=e;)s.add(i),n+=1,i=om(e+1,n)-1;return s=[...s],s.sort(BO),s}function UO(t,e,r){if(t===e)return{pattern:t,count:[],digits:0};let n=HO(t,e),i=n.length,s="",o=0;for(let a=0;a<i;a++){let[l,c]=n[a];l===c?s+=l:l!=="0"||c!=="9"?s+=KO(l,c,r):o++}return o&&(s+=r.shorthand===!0?"\\d":"[0-9]"),{pattern:s,count:[o],digits:i}}function nm(t,e,r,n){let i=xO(t,e),s=[],o=t,a;for(let l=0;l<i.length;l++){let c=i[l],u=UO(String(o),String(c),n),p="";if(!r.isPadded&&a&&a.pattern===u.pattern){a.count.length>1&&a.count.pop(),a.count.push(u.count[0]),a.string=a.pattern+am(a.count),o=c+1;continue}r.isPadded&&(p=$O(c,r,n)),u.string=p+u.pattern+am(u.count),s.push(u),o=c+1,a=u}return s}function Hc(t,e,r,n,i){let s=[];for(let o of t){let{string:a}=o;!n&&!im(e,"string",a)&&s.push(r+a),n&&im(e,"string",a)&&s.push(r+a)}return s}function HO(t,e){let r=[];for(let n=0;n<t.length;n++)r.push([t[n],e[n]]);return r}function BO(t,e){return t>e?1:e>t?-1:0}function im(t,e,r){return t.some(n=>n[e]===r)}function sm(t,e){return Number(String(t).slice(0,-e)+"9".repeat(e))}function om(t,e){return t-t%Math.pow(10,e)}function am(t){let[e=0,r=""]=t;return r||e>1?`{${e+(r?","+r:"")}}`:""}function KO(t,e,r){return`[${t}${e-t===1?"":"-"}${e}]`}function lm(t){return/^-?(0+)\d/.test(t)}function $O(t,e,r){if(!e.isPadded)return t;let n=Math.abs(e.maxLen-String(t).length),i=r.relaxZeros!==!1;switch(n){case 0:return"";case 1:return i?"0?":"0";case 2:return i?"0{0,2}":"00";default:return i?`0{0,${n}}`:`0{${n}}`}}Tn.cache={};Tn.clearCache=()=>Tn.cache={};cm.exports=Tn});var $c=U((YB,Em)=>{"use strict";var YO=ve("util"),pm=um(),dm=t=>t!==null&&typeof t=="object"&&!Array.isArray(t),WO=t=>e=>t===!0?Number(e):String(e),Bc=t=>typeof t=="number"||typeof t=="string"&&t!=="",os=t=>Number.isInteger(+t),Kc=t=>{let e=`${t}`,r=-1;if(e[0]==="-"&&(e=e.slice(1)),e==="0")return!1;for(;e[++r]==="0";);return r>0},jO=(t,e,r)=>typeof t=="string"||typeof e=="string"?!0:r.stringify===!0,VO=(t,e,r)=>{if(e>0){let n=t[0]==="-"?"-":"";n&&(t=t.slice(1)),t=n+t.padStart(n?e-1:e,"0")}return r===!1?String(t):t},Io=(t,e)=>{let r=t[0]==="-"?"-":"";for(r&&(t=t.slice(1),e--);t.length<e;)t="0"+t;return r?"-"+t:t},zO=(t,e,r)=>{t.negatives.sort((a,l)=>a<l?-1:a>l?1:0),t.positives.sort((a,l)=>a<l?-1:a>l?1:0);let n=e.capture?"":"?:",i="",s="",o;return t.positives.length&&(i=t.positives.map(a=>Io(String(a),r)).join("|")),t.negatives.length&&(s=`-(${n}${t.negatives.map(a=>Io(String(a),r)).join("|")})`),i&&s?o=`${i}|${s}`:o=i||s,e.wrap?`(${n}${o})`:o},gm=(t,e,r,n)=>{if(r)return pm(t,e,{wrap:!1,...n});let i=String.fromCharCode(t);if(t===e)return i;let s=String.fromCharCode(e);return`[${i}-${s}]`},fm=(t,e,r)=>{if(Array.isArray(t)){let n=r.wrap===!0,i=r.capture?"":"?:";return n?`(${i}${t.join("|")})`:t.join("|")}return pm(t,e,r)},mm=(...t)=>new RangeError("Invalid range arguments: "+YO.inspect(...t)),hm=(t,e,r)=>{if(r.strictRanges===!0)throw mm([t,e]);return[]},JO=(t,e)=>{if(e.strictRanges===!0)throw new TypeError(`Expected step "${t}" to be a number`);return[]},qO=(t,e,r=1,n={})=>{let i=Number(t),s=Number(e);if(!Number.isInteger(i)||!Number.isInteger(s)){if(n.strictRanges===!0)throw mm([t,e]);return[]}i===0&&(i=0),s===0&&(s=0);let o=i>s,a=String(t),l=String(e),c=String(r);r=Math.max(Math.abs(r),1);let u=Kc(a)||Kc(l)||Kc(c),p=u?Math.max(a.length,l.length,c.length):0,d=u===!1&&jO(t,e,n)===!1,f=n.transform||WO(d);if(n.toRegex&&r===1)return gm(Io(t,p),Io(e,p),!0,n);let m={negatives:[],positives:[]},_=F=>m[F<0?"negatives":"positives"].push(Math.abs(F)),L=[],C=0;for(;o?i>=s:i<=s;)n.toRegex===!0&&r>1?_(i):L.push(VO(f(i,C),p,d)),i=o?i-r:i+r,C++;return n.toRegex===!0?r>1?zO(m,n,p):fm(L,null,{wrap:!1,...n}):L},QO=(t,e,r=1,n={})=>{if(!os(t)&&t.length>1||!os(e)&&e.length>1)return hm(t,e,n);let i=n.transform||(d=>String.fromCharCode(d)),s=`${t}`.charCodeAt(0),o=`${e}`.charCodeAt(0),a=s>o,l=Math.min(s,o),c=Math.max(s,o);if(n.toRegex&&r===1)return gm(l,c,!1,n);let u=[],p=0;for(;a?s>=o:s<=o;)u.push(i(s,p)),s=a?s-r:s+r,p++;return n.toRegex===!0?fm(u,null,{wrap:!1,options:n}):u},Oo=(t,e,r,n={})=>{if(e==null&&Bc(t))return[t];if(!Bc(t)||!Bc(e))return hm(t,e,n);if(typeof r=="function")return Oo(t,e,1,{transform:r});if(dm(r))return Oo(t,e,0,r);let i={...n};return i.capture===!0&&(i.wrap=!0),r=r||i.step||1,os(r)?os(t)&&os(e)?qO(t,e,r,i):QO(t,e,Math.max(Math.abs(r),1),i):r!=null&&!dm(r)?JO(r,i):Oo(t,e,1,r)};Em.exports=Oo});var Tm=U((WB,Sm)=>{"use strict";var XO=$c(),_m=Ro(),ZO=(t,e={})=>{let r=(n,i={})=>{let s=_m.isInvalidBrace(i),o=n.invalid===!0&&e.escapeInvalid===!0,a=s===!0||o===!0,l=e.escapeInvalid===!0?"\\":"",c="";if(n.isOpen===!0)return l+n.value;if(n.isClose===!0)return console.log("node.isClose",l,n.value),l+n.value;if(n.type==="open")return a?l+n.value:"(";if(n.type==="close")return a?l+n.value:")";if(n.type==="comma")return n.prev.type==="comma"?"":a?n.value:"|";if(n.value)return n.value;if(n.nodes&&n.ranges>0){let u=_m.reduce(n.nodes),p=XO(...u,{...e,wrap:!1,toRegex:!0,strictZeros:!0});if(p.length!==0)return u.length>1&&p.length>1?`(${p})`:p}if(n.nodes)for(let u of n.nodes)c+=r(u,n);return c};return r(t)};Sm.exports=ZO});var ym=U((jB,Rm)=>{"use strict";var eI=$c(),Am=yo(),si=Ro(),An=(t="",e="",r=!1)=>{let n=[];if(t=[].concat(t),e=[].concat(e),!e.length)return t;if(!t.length)return r?si.flatten(e).map(i=>`{${i}}`):e;for(let i of t)if(Array.isArray(i))for(let s of i)n.push(An(s,e,r));else for(let s of e)r===!0&&typeof s=="string"&&(s=`{${s}}`),n.push(Array.isArray(s)?An(i,s,r):i+s);return si.flatten(n)},tI=(t,e={})=>{let r=e.rangeLimit===void 0?1e3:e.rangeLimit,n=(i,s={})=>{i.queue=[];let o=s,a=s.queue;for(;o.type!=="brace"&&o.type!=="root"&&o.parent;)o=o.parent,a=o.queue;if(i.invalid||i.dollar){a.push(An(a.pop(),Am(i,e)));return}if(i.type==="brace"&&i.invalid!==!0&&i.nodes.length===2){a.push(An(a.pop(),["{}"]));return}if(i.nodes&&i.ranges>0){let p=si.reduce(i.nodes);if(si.exceedsLimit(...p,e.step,r))throw new RangeError("expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.");let d=eI(...p,e);d.length===0&&(d=Am(i,e)),a.push(An(a.pop(),d)),i.nodes=[];return}let l=si.encloseBrace(i),c=i.queue,u=i;for(;u.type!=="brace"&&u.type!=="root"&&u.parent;)u=u.parent,c=u.queue;for(let p=0;p<i.nodes.length;p++){let d=i.nodes[p];if(d.type==="comma"&&i.type==="brace"){p===1&&c.push(""),c.push("");continue}if(d.type==="close"){a.push(An(a.pop(),c,l));continue}if(d.value&&d.type!=="open"){c.push(An(c.pop(),d.value));continue}d.nodes&&n(d,i)}return c};return si.flatten(n(t))};Rm.exports=tI});var Im=U((VB,Om)=>{"use strict";Om.exports={MAX_LENGTH:1e4,CHAR_0:"0",CHAR_9:"9",CHAR_UPPERCASE_A:"A",CHAR_LOWERCASE_A:"a",CHAR_UPPERCASE_Z:"Z",CHAR_LOWERCASE_Z:"z",CHAR_LEFT_PARENTHESES:"(",CHAR_RIGHT_PARENTHESES:")",CHAR_ASTERISK:"*",CHAR_AMPERSAND:"&",CHAR_AT:"@",CHAR_BACKSLASH:"\\",CHAR_BACKTICK:"`",CHAR_CARRIAGE_RETURN:"\r",CHAR_CIRCUMFLEX_ACCENT:"^",CHAR_COLON:":",CHAR_COMMA:",",CHAR_DOLLAR:"$",CHAR_DOT:".",CHAR_DOUBLE_QUOTE:'"',CHAR_EQUAL:"=",CHAR_EXCLAMATION_MARK:"!",CHAR_FORM_FEED:"\f",CHAR_FORWARD_SLASH:"/",CHAR_HASH:"#",CHAR_HYPHEN_MINUS:"-",CHAR_LEFT_ANGLE_BRACKET:"<",CHAR_LEFT_CURLY_BRACE:"{",CHAR_LEFT_SQUARE_BRACKET:"[",CHAR_LINE_FEED:`
4
+ `,CHAR_NO_BREAK_SPACE:"\xA0",CHAR_PERCENT:"%",CHAR_PLUS:"+",CHAR_QUESTION_MARK:"?",CHAR_RIGHT_ANGLE_BRACKET:">",CHAR_RIGHT_CURLY_BRACE:"}",CHAR_RIGHT_SQUARE_BRACKET:"]",CHAR_SEMICOLON:";",CHAR_SINGLE_QUOTE:"'",CHAR_SPACE:" ",CHAR_TAB:" ",CHAR_UNDERSCORE:"_",CHAR_VERTICAL_LINE:"|",CHAR_ZERO_WIDTH_NOBREAK_SPACE:"\uFEFF"}});var Dm=U((zB,Pm)=>{"use strict";var rI=yo(),{MAX_LENGTH:Lm,CHAR_BACKSLASH:Yc,CHAR_BACKTICK:nI,CHAR_COMMA:iI,CHAR_DOT:sI,CHAR_LEFT_PARENTHESES:oI,CHAR_RIGHT_PARENTHESES:aI,CHAR_LEFT_CURLY_BRACE:lI,CHAR_RIGHT_CURLY_BRACE:cI,CHAR_LEFT_SQUARE_BRACKET:Cm,CHAR_RIGHT_SQUARE_BRACKET:Nm,CHAR_DOUBLE_QUOTE:uI,CHAR_SINGLE_QUOTE:dI,CHAR_NO_BREAK_SPACE:pI,CHAR_ZERO_WIDTH_NOBREAK_SPACE:gI}=Im(),fI=(t,e={})=>{if(typeof t!="string")throw new TypeError("Expected a string");let r=e||{},n=typeof r.maxLength=="number"?Math.min(Lm,r.maxLength):Lm;if(t.length>n)throw new SyntaxError(`Input length (${t.length}), exceeds max characters (${n})`);let i={type:"root",input:t,nodes:[]},s=[i],o=i,a=i,l=0,c=t.length,u=0,p=0,d,f=()=>t[u++],m=_=>{if(_.type==="text"&&a.type==="dot"&&(a.type="text"),a&&a.type==="text"&&_.type==="text"){a.value+=_.value;return}return o.nodes.push(_),_.parent=o,_.prev=a,a=_,_};for(m({type:"bos"});u<c;)if(o=s[s.length-1],d=f(),!(d===gI||d===pI)){if(d===Yc){m({type:"text",value:(e.keepEscaping?d:"")+f()});continue}if(d===Nm){m({type:"text",value:"\\"+d});continue}if(d===Cm){l++;let _;for(;u<c&&(_=f());){if(d+=_,_===Cm){l++;continue}if(_===Yc){d+=f();continue}if(_===Nm&&(l--,l===0))break}m({type:"text",value:d});continue}if(d===oI){o=m({type:"paren",nodes:[]}),s.push(o),m({type:"text",value:d});continue}if(d===aI){if(o.type!=="paren"){m({type:"text",value:d});continue}o=s.pop(),m({type:"text",value:d}),o=s[s.length-1];continue}if(d===uI||d===dI||d===nI){let _=d,L;for(e.keepQuotes!==!0&&(d="");u<c&&(L=f());){if(L===Yc){d+=L+f();continue}if(L===_){e.keepQuotes===!0&&(d+=L);break}d+=L}m({type:"text",value:d});continue}if(d===lI){p++;let L={type:"brace",open:!0,close:!1,dollar:a.value&&a.value.slice(-1)==="$"||o.dollar===!0,depth:p,commas:0,ranges:0,nodes:[]};o=m(L),s.push(o),m({type:"open",value:d});continue}if(d===cI){if(o.type!=="brace"){m({type:"text",value:d});continue}let _="close";o=s.pop(),o.close=!0,m({type:_,value:d}),p--,o=s[s.length-1];continue}if(d===iI&&p>0){if(o.ranges>0){o.ranges=0;let _=o.nodes.shift();o.nodes=[_,{type:"text",value:rI(o)}]}m({type:"comma",value:d}),o.commas++;continue}if(d===sI&&p>0&&o.commas===0){let _=o.nodes;if(p===0||_.length===0){m({type:"text",value:d});continue}if(a.type==="dot"){if(o.range=[],a.value+=d,a.type="range",o.nodes.length!==3&&o.nodes.length!==5){o.invalid=!0,o.ranges=0,a.type="text";continue}o.ranges++,o.args=[];continue}if(a.type==="range"){_.pop();let L=_[_.length-1];L.value+=a.value+d,a=L,o.ranges--;continue}m({type:"dot",value:d});continue}m({type:"text",value:d})}do if(o=s.pop(),o.type!=="root"){o.nodes.forEach(C=>{C.nodes||(C.type==="open"&&(C.isOpen=!0),C.type==="close"&&(C.isClose=!0),C.nodes||(C.type="text"),C.invalid=!0)});let _=s[s.length-1],L=_.nodes.indexOf(o);_.nodes.splice(L,1,...o.nodes)}while(s.length>0);return m({type:"eos"}),i};Pm.exports=fI});var wm=U((JB,bm)=>{"use strict";var vm=yo(),mI=Tm(),hI=ym(),EI=Dm(),Rt=(t,e={})=>{let r=[];if(Array.isArray(t))for(let n of t){let i=Rt.create(n,e);Array.isArray(i)?r.push(...i):r.push(i)}else r=[].concat(Rt.create(t,e));return e&&e.expand===!0&&e.nodupes===!0&&(r=[...new Set(r)]),r};Rt.parse=(t,e={})=>EI(t,e);Rt.stringify=(t,e={})=>vm(typeof t=="string"?Rt.parse(t,e):t,e);Rt.compile=(t,e={})=>(typeof t=="string"&&(t=Rt.parse(t,e)),mI(t,e));Rt.expand=(t,e={})=>{typeof t=="string"&&(t=Rt.parse(t,e));let r=hI(t,e);return e.noempty===!0&&(r=r.filter(Boolean)),e.nodupes===!0&&(r=[...new Set(r)]),r};Rt.create=(t,e={})=>t===""||t.length<3?[t]:e.expand!==!0?Rt.compile(t,e):Rt.expand(t,e);bm.exports=Rt});var as=U((qB,xm)=>{"use strict";var _I=ve("path"),er="\\\\/",Fm=`[^${er}]`,SI=0,Er="\\.",TI="\\+",AI="\\?",Lo="\\/",RI="(?=.)",Mm="[^/]",Wc=`(?:${Lo}|$)`,km=`(?:^|${Lo})`,jc=`${Er}{1,2}${Wc}`,yI=`(?!${Er})`,OI=`(?!${km}${jc})`,II=`(?!${Er}{0,1}${Wc})`,LI=`(?!${jc})`,CI=`[^.${Lo}]`,NI=`${Mm}*?`,Gm={DOT_LITERAL:Er,PLUS_LITERAL:TI,QMARK_LITERAL:AI,SLASH_LITERAL:Lo,ONE_CHAR:RI,QMARK:Mm,END_ANCHOR:Wc,DOTS_SLASH:jc,NO_DOT:yI,NO_DOTS:OI,NO_DOT_SLASH:II,NO_DOTS_SLASH:LI,QMARK_NO_DOT:CI,STAR:NI,START_ANCHOR:km},PI={...Gm,SLASH_LITERAL:`[${er}]`,QMARK:Fm,STAR:`${Fm}*?`,DOTS_SLASH:`${Er}{1,2}(?:[${er}]|$)`,NO_DOT:`(?!${Er})`,NO_DOTS:`(?!(?:^|[${er}])${Er}{1,2}(?:[${er}]|$))`,NO_DOT_SLASH:`(?!${Er}{0,1}(?:[${er}]|$))`,NO_DOTS_SLASH:`(?!${Er}{1,2}(?:[${er}]|$))`,QMARK_NO_DOT:`[^.${er}]`,START_ANCHOR:`(?:^|[${er}])`,END_ANCHOR:`(?:[${er}]|$)`},DI={__proto__:null,alnum:"a-zA-Z0-9",alpha:"a-zA-Z",ascii:"\\x00-\\x7F",blank:" \\t",cntrl:"\\x00-\\x1F\\x7F",digit:"0-9",graph:"\\x21-\\x7E",lower:"a-z",print:"\\x20-\\x7E ",punct:"\\-!\"#$%&'()\\*+,./:;<=>?@[\\]^_`{|}~",space:" \\t\\r\\n\\v\\f",upper:"A-Z",word:"A-Za-z0-9_",xdigit:"A-Fa-f0-9"};xm.exports={DEFAULT_MAX_EXTGLOB_RECURSION:SI,MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:DI,REGEX_BACKSLASH:/\\(?![*+?^${}(|)[\]])/g,REGEX_NON_SPECIAL_CHARS:/^[^@![\].,$*+?^{}()|\\/]+/,REGEX_SPECIAL_CHARS:/[-*+?.^${}(|)[\]]/,REGEX_SPECIAL_CHARS_BACKREF:/(\\?)((\W)(\3*))/g,REGEX_SPECIAL_CHARS_GLOBAL:/([-*+?.^${}(|)[\]])/g,REGEX_REMOVE_BACKSLASH:/(?:\[.*?[^\\]\]|\\(?=.))/g,REPLACEMENTS:{__proto__:null,"***":"*","**/**":"**","**/**/**":"**"},CHAR_0:48,CHAR_9:57,CHAR_UPPERCASE_A:65,CHAR_LOWERCASE_A:97,CHAR_UPPERCASE_Z:90,CHAR_LOWERCASE_Z:122,CHAR_LEFT_PARENTHESES:40,CHAR_RIGHT_PARENTHESES:41,CHAR_ASTERISK:42,CHAR_AMPERSAND:38,CHAR_AT:64,CHAR_BACKWARD_SLASH:92,CHAR_CARRIAGE_RETURN:13,CHAR_CIRCUMFLEX_ACCENT:94,CHAR_COLON:58,CHAR_COMMA:44,CHAR_DOT:46,CHAR_DOUBLE_QUOTE:34,CHAR_EQUAL:61,CHAR_EXCLAMATION_MARK:33,CHAR_FORM_FEED:12,CHAR_FORWARD_SLASH:47,CHAR_GRAVE_ACCENT:96,CHAR_HASH:35,CHAR_HYPHEN_MINUS:45,CHAR_LEFT_ANGLE_BRACKET:60,CHAR_LEFT_CURLY_BRACE:123,CHAR_LEFT_SQUARE_BRACKET:91,CHAR_LINE_FEED:10,CHAR_NO_BREAK_SPACE:160,CHAR_PERCENT:37,CHAR_PLUS:43,CHAR_QUESTION_MARK:63,CHAR_RIGHT_ANGLE_BRACKET:62,CHAR_RIGHT_CURLY_BRACE:125,CHAR_RIGHT_SQUARE_BRACKET:93,CHAR_SEMICOLON:59,CHAR_SINGLE_QUOTE:39,CHAR_SPACE:32,CHAR_TAB:9,CHAR_UNDERSCORE:95,CHAR_VERTICAL_LINE:124,CHAR_ZERO_WIDTH_NOBREAK_SPACE:65279,SEP:_I.sep,extglobChars(t){return{"!":{type:"negate",open:"(?:(?!(?:",close:`))${t.STAR})`},"?":{type:"qmark",open:"(?:",close:")?"},"+":{type:"plus",open:"(?:",close:")+"},"*":{type:"star",open:"(?:",close:")*"},"@":{type:"at",open:"(?:",close:")"}}},globChars(t){return t===!0?PI:Gm}}});var ls=U(ft=>{"use strict";var vI=ve("path"),bI=process.platform==="win32",{REGEX_BACKSLASH:wI,REGEX_REMOVE_BACKSLASH:FI,REGEX_SPECIAL_CHARS:MI,REGEX_SPECIAL_CHARS_GLOBAL:kI}=as();ft.isObject=t=>t!==null&&typeof t=="object"&&!Array.isArray(t);ft.hasRegexChars=t=>MI.test(t);ft.isRegexChar=t=>t.length===1&&ft.hasRegexChars(t);ft.escapeRegex=t=>t.replace(kI,"\\$1");ft.toPosixSlashes=t=>t.replace(wI,"/");ft.removeBackslashes=t=>t.replace(FI,e=>e==="\\"?"":e);ft.supportsLookbehinds=()=>{let t=process.version.slice(1).split(".").map(Number);return t.length===3&&t[0]>=9||t[0]===8&&t[1]>=10};ft.isWindows=t=>t&&typeof t.windows=="boolean"?t.windows:bI===!0||vI.sep==="\\";ft.escapeLast=(t,e,r)=>{let n=t.lastIndexOf(e,r);return n===-1?t:t[n-1]==="\\"?ft.escapeLast(t,e,n-1):`${t.slice(0,n)}\\${t.slice(n)}`};ft.removePrefix=(t,e={})=>{let r=t;return r.startsWith("./")&&(r=r.slice(2),e.prefix="./"),r};ft.wrapOutput=(t,e={},r={})=>{let n=r.contains?"":"^",i=r.contains?"":"$",s=`${n}(?:${t})${i}`;return e.negated===!0&&(s=`(?:^(?!${s}).*$)`),s}});var jm=U((XB,Wm)=>{"use strict";var Um=ls(),{CHAR_ASTERISK:Vc,CHAR_AT:GI,CHAR_BACKWARD_SLASH:cs,CHAR_COMMA:xI,CHAR_DOT:zc,CHAR_EXCLAMATION_MARK:Jc,CHAR_FORWARD_SLASH:Ym,CHAR_LEFT_CURLY_BRACE:qc,CHAR_LEFT_PARENTHESES:Qc,CHAR_LEFT_SQUARE_BRACKET:UI,CHAR_PLUS:HI,CHAR_QUESTION_MARK:Hm,CHAR_RIGHT_CURLY_BRACE:BI,CHAR_RIGHT_PARENTHESES:Bm,CHAR_RIGHT_SQUARE_BRACKET:KI}=as(),Km=t=>t===Ym||t===cs,$m=t=>{t.isPrefix!==!0&&(t.depth=t.isGlobstar?1/0:1)},$I=(t,e)=>{let r=e||{},n=t.length-1,i=r.parts===!0||r.scanToEnd===!0,s=[],o=[],a=[],l=t,c=-1,u=0,p=0,d=!1,f=!1,m=!1,_=!1,L=!1,C=!1,F=!1,I=!1,$=!1,Q=!1,z=0,te,M,ne={value:"",depth:0,isGlob:!1},pe=()=>c>=n,N=()=>l.charCodeAt(c+1),Ae=()=>(te=M,l.charCodeAt(++c));for(;c<n;){M=Ae();let nt;if(M===cs){F=ne.backslashes=!0,M=Ae(),M===qc&&(C=!0);continue}if(C===!0||M===qc){for(z++;pe()!==!0&&(M=Ae());){if(M===cs){F=ne.backslashes=!0,Ae();continue}if(M===qc){z++;continue}if(C!==!0&&M===zc&&(M=Ae())===zc){if(d=ne.isBrace=!0,m=ne.isGlob=!0,Q=!0,i===!0)continue;break}if(C!==!0&&M===xI){if(d=ne.isBrace=!0,m=ne.isGlob=!0,Q=!0,i===!0)continue;break}if(M===BI&&(z--,z===0)){C=!1,d=ne.isBrace=!0,Q=!0;break}}if(i===!0)continue;break}if(M===Ym){if(s.push(c),o.push(ne),ne={value:"",depth:0,isGlob:!1},Q===!0)continue;if(te===zc&&c===u+1){u+=2;continue}p=c+1;continue}if(r.noext!==!0&&(M===HI||M===GI||M===Vc||M===Hm||M===Jc)===!0&&N()===Qc){if(m=ne.isGlob=!0,_=ne.isExtglob=!0,Q=!0,M===Jc&&c===u&&($=!0),i===!0){for(;pe()!==!0&&(M=Ae());){if(M===cs){F=ne.backslashes=!0,M=Ae();continue}if(M===Bm){m=ne.isGlob=!0,Q=!0;break}}continue}break}if(M===Vc){if(te===Vc&&(L=ne.isGlobstar=!0),m=ne.isGlob=!0,Q=!0,i===!0)continue;break}if(M===Hm){if(m=ne.isGlob=!0,Q=!0,i===!0)continue;break}if(M===UI){for(;pe()!==!0&&(nt=Ae());){if(nt===cs){F=ne.backslashes=!0,Ae();continue}if(nt===KI){f=ne.isBracket=!0,m=ne.isGlob=!0,Q=!0;break}}if(i===!0)continue;break}if(r.nonegate!==!0&&M===Jc&&c===u){I=ne.negated=!0,u++;continue}if(r.noparen!==!0&&M===Qc){if(m=ne.isGlob=!0,i===!0){for(;pe()!==!0&&(M=Ae());){if(M===Qc){F=ne.backslashes=!0,M=Ae();continue}if(M===Bm){Q=!0;break}}continue}break}if(m===!0){if(Q=!0,i===!0)continue;break}}r.noext===!0&&(_=!1,m=!1);let Oe=l,Ir="",D="";u>0&&(Ir=l.slice(0,u),l=l.slice(u),p-=u),Oe&&m===!0&&p>0?(Oe=l.slice(0,p),D=l.slice(p)):m===!0?(Oe="",D=l):Oe=l,Oe&&Oe!==""&&Oe!=="/"&&Oe!==l&&Km(Oe.charCodeAt(Oe.length-1))&&(Oe=Oe.slice(0,-1)),r.unescape===!0&&(D&&(D=Um.removeBackslashes(D)),Oe&&F===!0&&(Oe=Um.removeBackslashes(Oe)));let v={prefix:Ir,input:t,start:u,base:Oe,glob:D,isBrace:d,isBracket:f,isGlob:m,isExtglob:_,isGlobstar:L,negated:I,negatedExtglob:$};if(r.tokens===!0&&(v.maxDepth=0,Km(M)||o.push(ne),v.tokens=o),r.parts===!0||r.tokens===!0){let nt;for(let fe=0;fe<s.length;fe++){let Vt=nt?nt+1:u,zt=s[fe],_t=t.slice(Vt,zt);r.tokens&&(fe===0&&u!==0?(o[fe].isPrefix=!0,o[fe].value=Ir):o[fe].value=_t,$m(o[fe]),v.maxDepth+=o[fe].depth),(fe!==0||_t!=="")&&a.push(_t),nt=zt}if(nt&&nt+1<t.length){let fe=t.slice(nt+1);a.push(fe),r.tokens&&(o[o.length-1].value=fe,$m(o[o.length-1]),v.maxDepth+=o[o.length-1].depth)}v.slashes=s,v.parts=a}return v};Wm.exports=$I});var Qm=U((ZB,qm)=>{"use strict";var us=as(),Qe=ls(),{MAX_LENGTH:Co,POSIX_REGEX_SOURCE:YI,REGEX_NON_SPECIAL_CHARS:WI,REGEX_SPECIAL_CHARS_BACKREF:jI,REPLACEMENTS:Vm}=us,VI=(t,e)=>{if(typeof e.expandRange=="function")return e.expandRange(...t,e);t.sort();let r=`[${t.join("-")}]`;try{new RegExp(r)}catch{return t.map(i=>Qe.escapeRegex(i)).join("..")}return r},oi=(t,e)=>`Missing ${t}: "${e}" - use "\\\\${e}" to match literal characters`,zm=t=>{let e=[],r=0,n=0,i=0,s="",o=!1;for(let a of t){if(o===!0){s+=a,o=!1;continue}if(a==="\\"){s+=a,o=!0;continue}if(a==='"'){i=i===1?0:1,s+=a;continue}if(i===0){if(a==="[")r++;else if(a==="]"&&r>0)r--;else if(r===0){if(a==="(")n++;else if(a===")"&&n>0)n--;else if(a==="|"&&n===0){e.push(s),s="";continue}}}s+=a}return e.push(s),e},zI=t=>{let e=!1;for(let r of t){if(e===!0){e=!1;continue}if(r==="\\"){e=!0;continue}if(/[?*+@!()[\]{}]/.test(r))return!1}return!0},Jm=t=>{let e=t.trim(),r=!0;for(;r===!0;)r=!1,/^@\([^\\()[\]{}|]+\)$/.test(e)&&(e=e.slice(2,-1),r=!0);if(zI(e))return e.replace(/\\(.)/g,"$1")},JI=t=>{let e=t.map(Jm).filter(Boolean);for(let r=0;r<e.length;r++)for(let n=r+1;n<e.length;n++){let i=e[r],s=e[n],o=i[0];if(!(!o||i!==o.repeat(i.length)||s!==o.repeat(s.length))&&(i===s||i.startsWith(s)||s.startsWith(i)))return!0}return!1},Xc=(t,e=!0)=>{if(t[0]!=="+"&&t[0]!=="*"||t[1]!=="(")return;let r=0,n=0,i=0,s=!1;for(let o=1;o<t.length;o++){let a=t[o];if(s===!0){s=!1;continue}if(a==="\\"){s=!0;continue}if(a==='"'){i=i===1?0:1;continue}if(i!==1){if(a==="["){r++;continue}if(a==="]"&&r>0){r--;continue}if(!(r>0)){if(a==="("){n++;continue}if(a===")"&&(n--,n===0))return e===!0&&o!==t.length-1?void 0:{type:t[0],body:t.slice(2,o),end:o}}}}},qI=t=>{let e=0,r=[];for(;e<t.length;){let i=Xc(t.slice(e),!1);if(!i||i.type!=="*")return;let s=zm(i.body).map(a=>a.trim());if(s.length!==1)return;let o=Jm(s[0]);if(!o||o.length!==1)return;r.push(o),e+=i.end+1}return r.length<1?void 0:`${r.length===1?Qe.escapeRegex(r[0]):`[${r.map(i=>Qe.escapeRegex(i)).join("")}]`}*`},QI=t=>{let e=0,r=t.trim(),n=Xc(r);for(;n;)e++,r=n.body.trim(),n=Xc(r);return e},XI=(t,e)=>{if(e.maxExtglobRecursion===!1)return{risky:!1};let r=typeof e.maxExtglobRecursion=="number"?e.maxExtglobRecursion:us.DEFAULT_MAX_EXTGLOB_RECURSION,n=zm(t).map(i=>i.trim());if(n.length>1&&(n.some(i=>i==="")||n.some(i=>/^[*?]+$/.test(i))||JI(n)))return{risky:!0};for(let i of n){let s=qI(i);if(s)return{risky:!0,safeOutput:s};if(QI(i)>r)return{risky:!0}}return{risky:!1}},Zc=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");t=Vm[t]||t;let r={...e},n=typeof r.maxLength=="number"?Math.min(Co,r.maxLength):Co,i=t.length;if(i>n)throw new SyntaxError(`Input length: ${i}, exceeds maximum allowed length: ${n}`);let s={type:"bos",value:"",output:r.prepend||""},o=[s],a=r.capture?"":"?:",l=Qe.isWindows(e),c=us.globChars(l),u=us.extglobChars(c),{DOT_LITERAL:p,PLUS_LITERAL:d,SLASH_LITERAL:f,ONE_CHAR:m,DOTS_SLASH:_,NO_DOT:L,NO_DOT_SLASH:C,NO_DOTS_SLASH:F,QMARK:I,QMARK_NO_DOT:$,STAR:Q,START_ANCHOR:z}=c,te=x=>`(${a}(?:(?!${z}${x.dot?_:p}).)*?)`,M=r.dot?"":L,ne=r.dot?I:$,pe=r.bash===!0?te(r):Q;r.capture&&(pe=`(${pe})`),typeof r.noext=="boolean"&&(r.noextglob=r.noext);let N={input:t,index:-1,start:0,dot:r.dot===!0,consumed:"",output:"",prefix:"",backtrack:!1,negated:!1,brackets:0,braces:0,parens:0,quotes:0,globstar:!1,tokens:o};t=Qe.removePrefix(t,N),i=t.length;let Ae=[],Oe=[],Ir=[],D=s,v,nt=()=>N.index===i-1,fe=N.peek=(x=1)=>t[N.index+x],Vt=N.advance=()=>t[++N.index]||"",zt=()=>t.slice(N.index+1),_t=(x="",Ce=0)=>{N.consumed+=x,N.index+=Ce},Hs=x=>{N.output+=x.output!=null?x.output:x.value,_t(x.value)},ER=()=>{let x=1;for(;fe()==="!"&&(fe(2)!=="("||fe(3)==="?");)Vt(),N.start++,x++;return x%2===0?!1:(N.negated=!0,N.start++,!0)},Bs=x=>{N[x]++,Ir.push(x)},Lr=x=>{N[x]--,Ir.pop()},le=x=>{if(D.type==="globstar"){let Ce=N.braces>0&&(x.type==="comma"||x.type==="brace"),G=x.extglob===!0||Ae.length&&(x.type==="pipe"||x.type==="paren");x.type!=="slash"&&x.type!=="paren"&&!Ce&&!G&&(N.output=N.output.slice(0,-D.output.length),D.type="star",D.value="*",D.output=pe,N.output+=D.output)}if(Ae.length&&x.type!=="paren"&&(Ae[Ae.length-1].inner+=x.value),(x.value||x.output)&&Hs(x),D&&D.type==="text"&&x.type==="text"){D.value+=x.value,D.output=(D.output||"")+x.value;return}x.prev=D,o.push(x),D=x},Ks=(x,Ce)=>{let G={...u[Ce],conditions:1,inner:""};G.prev=D,G.parens=N.parens,G.output=N.output,G.startIndex=N.index,G.tokensIndex=o.length;let ae=(r.capture?"(":"")+G.open;Bs("parens"),le({type:x,value:Ce,output:N.output?"":m}),le({type:"paren",extglob:!0,value:Vt(),output:ae}),Ae.push(G)},_R=x=>{let Ce=t.slice(x.startIndex,N.index+1),G=t.slice(x.startIndex+2,N.index),ae=XI(G,r);if((x.type==="plus"||x.type==="star")&&ae.risky){let Re=ae.safeOutput?(x.output?"":m)+(r.capture?`(${ae.safeOutput})`:ae.safeOutput):void 0,Jt=o[x.tokensIndex];Jt.type="text",Jt.value=Ce,Jt.output=Re||Qe.escapeRegex(Ce);for(let qt=x.tokensIndex+1;qt<o.length;qt++)o[qt].value="",o[qt].output="",delete o[qt].suffix;N.output=x.output+Jt.output,N.backtrack=!0,le({type:"paren",extglob:!0,value:v,output:""}),Lr("parens");return}let Ie=x.close+(r.capture?")":""),Ue;if(x.type==="negate"){let Re=pe;if(x.inner&&x.inner.length>1&&x.inner.includes("/")&&(Re=te(r)),(Re!==pe||nt()||/^\)+$/.test(zt()))&&(Ie=x.close=`)$))${Re}`),x.inner.includes("*")&&(Ue=zt())&&/^\.[^\\/.]+$/.test(Ue)){let Jt=Zc(Ue,{...e,fastpaths:!1}).output;Ie=x.close=`)${Jt})${Re})`}x.prev.type==="bos"&&(N.negatedExtglob=!0)}le({type:"paren",extglob:!0,value:v,output:Ie}),Lr("parens")};if(r.fastpaths!==!1&&!/(^[*!]|[/()[\]{}"])/.test(t)){let x=!1,Ce=t.replace(jI,(G,ae,Ie,Ue,Re,Jt)=>Ue==="\\"?(x=!0,G):Ue==="?"?ae?ae+Ue+(Re?I.repeat(Re.length):""):Jt===0?ne+(Re?I.repeat(Re.length):""):I.repeat(Ie.length):Ue==="."?p.repeat(Ie.length):Ue==="*"?ae?ae+Ue+(Re?pe:""):pe:ae?G:`\\${G}`);return x===!0&&(r.unescape===!0?Ce=Ce.replace(/\\/g,""):Ce=Ce.replace(/\\+/g,G=>G.length%2===0?"\\\\":G?"\\":"")),Ce===t&&r.contains===!0?(N.output=t,N):(N.output=Qe.wrapOutput(Ce,N,e),N)}for(;!nt();){if(v=Vt(),v==="\0")continue;if(v==="\\"){let G=fe();if(G==="/"&&r.bash!==!0||G==="."||G===";")continue;if(!G){v+="\\",le({type:"text",value:v});continue}let ae=/^\\+/.exec(zt()),Ie=0;if(ae&&ae[0].length>2&&(Ie=ae[0].length,N.index+=Ie,Ie%2!==0&&(v+="\\")),r.unescape===!0?v=Vt():v+=Vt(),N.brackets===0){le({type:"text",value:v});continue}}if(N.brackets>0&&(v!=="]"||D.value==="["||D.value==="[^")){if(r.posix!==!1&&v===":"){let G=D.value.slice(1);if(G.includes("[")&&(D.posix=!0,G.includes(":"))){let ae=D.value.lastIndexOf("["),Ie=D.value.slice(0,ae),Ue=D.value.slice(ae+2),Re=YI[Ue];if(Re){D.value=Ie+Re,N.backtrack=!0,Vt(),!s.output&&o.indexOf(D)===1&&(s.output=m);continue}}}(v==="["&&fe()!==":"||v==="-"&&fe()==="]")&&(v=`\\${v}`),v==="]"&&(D.value==="["||D.value==="[^")&&(v=`\\${v}`),r.posix===!0&&v==="!"&&D.value==="["&&(v="^"),D.value+=v,Hs({value:v});continue}if(N.quotes===1&&v!=='"'){v=Qe.escapeRegex(v),D.value+=v,Hs({value:v});continue}if(v==='"'){N.quotes=N.quotes===1?0:1,r.keepQuotes===!0&&le({type:"text",value:v});continue}if(v==="("){Bs("parens"),le({type:"paren",value:v});continue}if(v===")"){if(N.parens===0&&r.strictBrackets===!0)throw new SyntaxError(oi("opening","("));let G=Ae[Ae.length-1];if(G&&N.parens===G.parens+1){_R(Ae.pop());continue}le({type:"paren",value:v,output:N.parens?")":"\\)"}),Lr("parens");continue}if(v==="["){if(r.nobracket===!0||!zt().includes("]")){if(r.nobracket!==!0&&r.strictBrackets===!0)throw new SyntaxError(oi("closing","]"));v=`\\${v}`}else Bs("brackets");le({type:"bracket",value:v});continue}if(v==="]"){if(r.nobracket===!0||D&&D.type==="bracket"&&D.value.length===1){le({type:"text",value:v,output:`\\${v}`});continue}if(N.brackets===0){if(r.strictBrackets===!0)throw new SyntaxError(oi("opening","["));le({type:"text",value:v,output:`\\${v}`});continue}Lr("brackets");let G=D.value.slice(1);if(D.posix!==!0&&G[0]==="^"&&!G.includes("/")&&(v=`/${v}`),D.value+=v,Hs({value:v}),r.literalBrackets===!1||Qe.hasRegexChars(G))continue;let ae=Qe.escapeRegex(D.value);if(N.output=N.output.slice(0,-D.value.length),r.literalBrackets===!0){N.output+=ae,D.value=ae;continue}D.value=`(${a}${ae}|${D.value})`,N.output+=D.value;continue}if(v==="{"&&r.nobrace!==!0){Bs("braces");let G={type:"brace",value:v,output:"(",outputIndex:N.output.length,tokensIndex:N.tokens.length};Oe.push(G),le(G);continue}if(v==="}"){let G=Oe[Oe.length-1];if(r.nobrace===!0||!G){le({type:"text",value:v,output:v});continue}let ae=")";if(G.dots===!0){let Ie=o.slice(),Ue=[];for(let Re=Ie.length-1;Re>=0&&(o.pop(),Ie[Re].type!=="brace");Re--)Ie[Re].type!=="dots"&&Ue.unshift(Ie[Re].value);ae=VI(Ue,r),N.backtrack=!0}if(G.comma!==!0&&G.dots!==!0){let Ie=N.output.slice(0,G.outputIndex),Ue=N.tokens.slice(G.tokensIndex);G.value=G.output="\\{",v=ae="\\}",N.output=Ie;for(let Re of Ue)N.output+=Re.output||Re.value}le({type:"brace",value:v,output:ae}),Lr("braces"),Oe.pop();continue}if(v==="|"){Ae.length>0&&Ae[Ae.length-1].conditions++,le({type:"text",value:v});continue}if(v===","){let G=v,ae=Oe[Oe.length-1];ae&&Ir[Ir.length-1]==="braces"&&(ae.comma=!0,G="|"),le({type:"comma",value:v,output:G});continue}if(v==="/"){if(D.type==="dot"&&N.index===N.start+1){N.start=N.index+1,N.consumed="",N.output="",o.pop(),D=s;continue}le({type:"slash",value:v,output:f});continue}if(v==="."){if(N.braces>0&&D.type==="dot"){D.value==="."&&(D.output=p);let G=Oe[Oe.length-1];D.type="dots",D.output+=v,D.value+=v,G.dots=!0;continue}if(N.braces+N.parens===0&&D.type!=="bos"&&D.type!=="slash"){le({type:"text",value:v,output:p});continue}le({type:"dot",value:v,output:p});continue}if(v==="?"){if(!(D&&D.value==="(")&&r.noextglob!==!0&&fe()==="("&&fe(2)!=="?"){Ks("qmark",v);continue}if(D&&D.type==="paren"){let ae=fe(),Ie=v;if(ae==="<"&&!Qe.supportsLookbehinds())throw new Error("Node.js v10 or higher is required for regex lookbehinds");(D.value==="("&&!/[!=<:]/.test(ae)||ae==="<"&&!/<([!=]|\w+>)/.test(zt()))&&(Ie=`\\${v}`),le({type:"text",value:v,output:Ie});continue}if(r.dot!==!0&&(D.type==="slash"||D.type==="bos")){le({type:"qmark",value:v,output:$});continue}le({type:"qmark",value:v,output:I});continue}if(v==="!"){if(r.noextglob!==!0&&fe()==="("&&(fe(2)!=="?"||!/[!=<:]/.test(fe(3)))){Ks("negate",v);continue}if(r.nonegate!==!0&&N.index===0){ER();continue}}if(v==="+"){if(r.noextglob!==!0&&fe()==="("&&fe(2)!=="?"){Ks("plus",v);continue}if(D&&D.value==="("||r.regex===!1){le({type:"plus",value:v,output:d});continue}if(D&&(D.type==="bracket"||D.type==="paren"||D.type==="brace")||N.parens>0){le({type:"plus",value:v});continue}le({type:"plus",value:d});continue}if(v==="@"){if(r.noextglob!==!0&&fe()==="("&&fe(2)!=="?"){le({type:"at",extglob:!0,value:v,output:""});continue}le({type:"text",value:v});continue}if(v!=="*"){(v==="$"||v==="^")&&(v=`\\${v}`);let G=WI.exec(zt());G&&(v+=G[0],N.index+=G[0].length),le({type:"text",value:v});continue}if(D&&(D.type==="globstar"||D.star===!0)){D.type="star",D.star=!0,D.value+=v,D.output=pe,N.backtrack=!0,N.globstar=!0,_t(v);continue}let x=zt();if(r.noextglob!==!0&&/^\([^?]/.test(x)){Ks("star",v);continue}if(D.type==="star"){if(r.noglobstar===!0){_t(v);continue}let G=D.prev,ae=G.prev,Ie=G.type==="slash"||G.type==="bos",Ue=ae&&(ae.type==="star"||ae.type==="globstar");if(r.bash===!0&&(!Ie||x[0]&&x[0]!=="/")){le({type:"star",value:v,output:""});continue}let Re=N.braces>0&&(G.type==="comma"||G.type==="brace"),Jt=Ae.length&&(G.type==="pipe"||G.type==="paren");if(!Ie&&G.type!=="paren"&&!Re&&!Jt){le({type:"star",value:v,output:""});continue}for(;x.slice(0,3)==="/**";){let qt=t[N.index+4];if(qt&&qt!=="/")break;x=x.slice(3),_t("/**",3)}if(G.type==="bos"&&nt()){D.type="globstar",D.value+=v,D.output=te(r),N.output=D.output,N.globstar=!0,_t(v);continue}if(G.type==="slash"&&G.prev.type!=="bos"&&!Ue&&nt()){N.output=N.output.slice(0,-(G.output+D.output).length),G.output=`(?:${G.output}`,D.type="globstar",D.output=te(r)+(r.strictSlashes?")":"|$)"),D.value+=v,N.globstar=!0,N.output+=G.output+D.output,_t(v);continue}if(G.type==="slash"&&G.prev.type!=="bos"&&x[0]==="/"){let qt=x[1]!==void 0?"|$":"";N.output=N.output.slice(0,-(G.output+D.output).length),G.output=`(?:${G.output}`,D.type="globstar",D.output=`${te(r)}${f}|${f}${qt})`,D.value+=v,N.output+=G.output+D.output,N.globstar=!0,_t(v+Vt()),le({type:"slash",value:"/",output:""});continue}if(G.type==="bos"&&x[0]==="/"){D.type="globstar",D.value+=v,D.output=`(?:^|${f}|${te(r)}${f})`,N.output=D.output,N.globstar=!0,_t(v+Vt()),le({type:"slash",value:"/",output:""});continue}N.output=N.output.slice(0,-D.output.length),D.type="globstar",D.output=te(r),D.value+=v,N.output+=D.output,N.globstar=!0,_t(v);continue}let Ce={type:"star",value:v,output:pe};if(r.bash===!0){Ce.output=".*?",(D.type==="bos"||D.type==="slash")&&(Ce.output=M+Ce.output),le(Ce);continue}if(D&&(D.type==="bracket"||D.type==="paren")&&r.regex===!0){Ce.output=v,le(Ce);continue}(N.index===N.start||D.type==="slash"||D.type==="dot")&&(D.type==="dot"?(N.output+=C,D.output+=C):r.dot===!0?(N.output+=F,D.output+=F):(N.output+=M,D.output+=M),fe()!=="*"&&(N.output+=m,D.output+=m)),le(Ce)}for(;N.brackets>0;){if(r.strictBrackets===!0)throw new SyntaxError(oi("closing","]"));N.output=Qe.escapeLast(N.output,"["),Lr("brackets")}for(;N.parens>0;){if(r.strictBrackets===!0)throw new SyntaxError(oi("closing",")"));N.output=Qe.escapeLast(N.output,"("),Lr("parens")}for(;N.braces>0;){if(r.strictBrackets===!0)throw new SyntaxError(oi("closing","}"));N.output=Qe.escapeLast(N.output,"{"),Lr("braces")}if(r.strictSlashes!==!0&&(D.type==="star"||D.type==="bracket")&&le({type:"maybe_slash",value:"",output:`${f}?`}),N.backtrack===!0){N.output="";for(let x of N.tokens)N.output+=x.output!=null?x.output:x.value,x.suffix&&(N.output+=x.suffix)}return N};Zc.fastpaths=(t,e)=>{let r={...e},n=typeof r.maxLength=="number"?Math.min(Co,r.maxLength):Co,i=t.length;if(i>n)throw new SyntaxError(`Input length: ${i}, exceeds maximum allowed length: ${n}`);t=Vm[t]||t;let s=Qe.isWindows(e),{DOT_LITERAL:o,SLASH_LITERAL:a,ONE_CHAR:l,DOTS_SLASH:c,NO_DOT:u,NO_DOTS:p,NO_DOTS_SLASH:d,STAR:f,START_ANCHOR:m}=us.globChars(s),_=r.dot?p:u,L=r.dot?d:u,C=r.capture?"":"?:",F={negated:!1,prefix:""},I=r.bash===!0?".*?":f;r.capture&&(I=`(${I})`);let $=M=>M.noglobstar===!0?I:`(${C}(?:(?!${m}${M.dot?c:o}).)*?)`,Q=M=>{switch(M){case"*":return`${_}${l}${I}`;case".*":return`${o}${l}${I}`;case"*.*":return`${_}${I}${o}${l}${I}`;case"*/*":return`${_}${I}${a}${l}${L}${I}`;case"**":return _+$(r);case"**/*":return`(?:${_}${$(r)}${a})?${L}${l}${I}`;case"**/*.*":return`(?:${_}${$(r)}${a})?${L}${I}${o}${l}${I}`;case"**/.*":return`(?:${_}${$(r)}${a})?${o}${l}${I}`;default:{let ne=/^(.*?)\.(\w+)$/.exec(M);if(!ne)return;let pe=Q(ne[1]);return pe?pe+o+ne[2]:void 0}}},z=Qe.removePrefix(t,F),te=Q(z);return te&&r.strictSlashes!==!0&&(te+=`${a}?`),te};qm.exports=Zc});var Zm=U((e0,Xm)=>{"use strict";var ZI=ve("path"),eL=jm(),eu=Qm(),tu=ls(),tL=as(),rL=t=>t&&typeof t=="object"&&!Array.isArray(t),Fe=(t,e,r=!1)=>{if(Array.isArray(t)){let u=t.map(d=>Fe(d,e,r));return d=>{for(let f of u){let m=f(d);if(m)return m}return!1}}let n=rL(t)&&t.tokens&&t.input;if(t===""||typeof t!="string"&&!n)throw new TypeError("Expected pattern to be a non-empty string");let i=e||{},s=tu.isWindows(e),o=n?Fe.compileRe(t,e):Fe.makeRe(t,e,!1,!0),a=o.state;delete o.state;let l=()=>!1;if(i.ignore){let u={...e,ignore:null,onMatch:null,onResult:null};l=Fe(i.ignore,u,r)}let c=(u,p=!1)=>{let{isMatch:d,match:f,output:m}=Fe.test(u,o,e,{glob:t,posix:s}),_={glob:t,state:a,regex:o,posix:s,input:u,output:m,match:f,isMatch:d};return typeof i.onResult=="function"&&i.onResult(_),d===!1?(_.isMatch=!1,p?_:!1):l(u)?(typeof i.onIgnore=="function"&&i.onIgnore(_),_.isMatch=!1,p?_:!1):(typeof i.onMatch=="function"&&i.onMatch(_),p?_:!0)};return r&&(c.state=a),c};Fe.test=(t,e,r,{glob:n,posix:i}={})=>{if(typeof t!="string")throw new TypeError("Expected input to be a string");if(t==="")return{isMatch:!1,output:""};let s=r||{},o=s.format||(i?tu.toPosixSlashes:null),a=t===n,l=a&&o?o(t):t;return a===!1&&(l=o?o(t):t,a=l===n),(a===!1||s.capture===!0)&&(s.matchBase===!0||s.basename===!0?a=Fe.matchBase(t,e,r,i):a=e.exec(l)),{isMatch:!!a,match:a,output:l}};Fe.matchBase=(t,e,r,n=tu.isWindows(r))=>(e instanceof RegExp?e:Fe.makeRe(e,r)).test(ZI.basename(t));Fe.isMatch=(t,e,r)=>Fe(e,r)(t);Fe.parse=(t,e)=>Array.isArray(t)?t.map(r=>Fe.parse(r,e)):eu(t,{...e,fastpaths:!1});Fe.scan=(t,e)=>eL(t,e);Fe.compileRe=(t,e,r=!1,n=!1)=>{if(r===!0)return t.output;let i=e||{},s=i.contains?"":"^",o=i.contains?"":"$",a=`${s}(?:${t.output})${o}`;t&&t.negated===!0&&(a=`^(?!${a}).*$`);let l=Fe.toRegex(a,e);return n===!0&&(l.state=t),l};Fe.makeRe=(t,e={},r=!1,n=!1)=>{if(!t||typeof t!="string")throw new TypeError("Expected a non-empty string");let i={negated:!1,fastpaths:!0};return e.fastpaths!==!1&&(t[0]==="."||t[0]==="*")&&(i.output=eu.fastpaths(t,e)),i.output||(i=eu(t,e)),Fe.compileRe(i,e,r,n)};Fe.toRegex=(t,e)=>{try{let r=e||{};return new RegExp(t,r.flags||(r.nocase?"i":""))}catch(r){if(e&&e.debug===!0)throw r;return/$^/}};Fe.constants=tL;Xm.exports=Fe});var th=U((t0,eh)=>{"use strict";eh.exports=Zm()});var ah=U((r0,oh)=>{"use strict";var nh=ve("util"),ih=wm(),tr=th(),ru=ls(),rh=t=>t===""||t==="./",sh=t=>{let e=t.indexOf("{");return e>-1&&t.indexOf("}",e)>-1},Le=(t,e,r)=>{e=[].concat(e),t=[].concat(t);let n=new Set,i=new Set,s=new Set,o=0,a=u=>{s.add(u.output),r&&r.onResult&&r.onResult(u)};for(let u=0;u<e.length;u++){let p=tr(String(e[u]),{...r,onResult:a},!0),d=p.state.negated||p.state.negatedExtglob;d&&o++;for(let f of t){let m=p(f,!0);(d?!m.isMatch:m.isMatch)&&(d?n.add(m.output):(n.delete(m.output),i.add(m.output)))}}let c=(o===e.length?[...s]:[...i]).filter(u=>!n.has(u));if(r&&c.length===0){if(r.failglob===!0)throw new Error(`No matches found for "${e.join(", ")}"`);if(r.nonull===!0||r.nullglob===!0)return r.unescape?e.map(u=>u.replace(/\\/g,"")):e}return c};Le.match=Le;Le.matcher=(t,e)=>tr(t,e);Le.isMatch=(t,e,r)=>tr(e,r)(t);Le.any=Le.isMatch;Le.not=(t,e,r={})=>{e=[].concat(e).map(String);let n=new Set,i=[],s=a=>{r.onResult&&r.onResult(a),i.push(a.output)},o=new Set(Le(t,e,{...r,onResult:s}));for(let a of i)o.has(a)||n.add(a);return[...n]};Le.contains=(t,e,r)=>{if(typeof t!="string")throw new TypeError(`Expected a string: "${nh.inspect(t)}"`);if(Array.isArray(e))return e.some(n=>Le.contains(t,n,r));if(typeof e=="string"){if(rh(t)||rh(e))return!1;if(t.includes(e)||t.startsWith("./")&&t.slice(2).includes(e))return!0}return Le.isMatch(t,e,{...r,contains:!0})};Le.matchKeys=(t,e,r)=>{if(!ru.isObject(t))throw new TypeError("Expected the first argument to be an object");let n=Le(Object.keys(t),e,r),i={};for(let s of n)i[s]=t[s];return i};Le.some=(t,e,r)=>{let n=[].concat(t);for(let i of[].concat(e)){let s=tr(String(i),r);if(n.some(o=>s(o)))return!0}return!1};Le.every=(t,e,r)=>{let n=[].concat(t);for(let i of[].concat(e)){let s=tr(String(i),r);if(!n.every(o=>s(o)))return!1}return!0};Le.all=(t,e,r)=>{if(typeof t!="string")throw new TypeError(`Expected a string: "${nh.inspect(t)}"`);return[].concat(e).every(n=>tr(n,r)(t))};Le.capture=(t,e,r)=>{let n=ru.isWindows(r),s=tr.makeRe(String(t),{...r,capture:!0}).exec(n?ru.toPosixSlashes(e):e);if(s)return s.slice(1).map(o=>o===void 0?"":o)};Le.makeRe=(...t)=>tr.makeRe(...t);Le.scan=(...t)=>tr.scan(...t);Le.parse=(t,e)=>{let r=[];for(let n of[].concat(t||[]))for(let i of ih(String(n),e))r.push(tr.parse(i,e));return r};Le.braces=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");return e&&e.nobrace===!0||!sh(t)?[t]:ih(t,e)};Le.braceExpand=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");return Le.braces(t,{...e,expand:!0})};Le.hasBraces=sh;oh.exports=Le});var Eh=U(Z=>{"use strict";Object.defineProperty(Z,"__esModule",{value:!0});Z.isAbsolute=Z.partitionAbsoluteAndRelative=Z.removeDuplicateSlashes=Z.matchAny=Z.convertPatternsToRe=Z.makeRe=Z.getPatternParts=Z.expandBraceExpansion=Z.expandPatternsWithBraceExpansion=Z.isAffectDepthOfReadingPattern=Z.endsWithSlashGlobStar=Z.hasGlobStar=Z.getBaseDirectory=Z.isPatternRelatedToParentDirectory=Z.getPatternsOutsideCurrentDirectory=Z.getPatternsInsideCurrentDirectory=Z.getPositivePatterns=Z.getNegativePatterns=Z.isPositivePattern=Z.isNegativePattern=Z.convertToNegativePattern=Z.convertToPositivePattern=Z.isDynamicPattern=Z.isStaticPattern=void 0;var lh=ve("path"),nL=Qf(),nu=ah(),ch="**",iL="\\",sL=/[*?]|^!/,oL=/\[[^[]*]/,aL=/(?:^|[^!*+?@])\([^(]*\|[^|]*\)/,lL=/[!*+?@]\([^(]*\)/,cL=/,|\.\./,uL=/(?!^)\/{2,}/g;function uh(t,e={}){return!dh(t,e)}Z.isStaticPattern=uh;function dh(t,e={}){return t===""?!1:!!(e.caseSensitiveMatch===!1||t.includes(iL)||sL.test(t)||oL.test(t)||aL.test(t)||e.extglob!==!1&&lL.test(t)||e.braceExpansion!==!1&&dL(t))}Z.isDynamicPattern=dh;function dL(t){let e=t.indexOf("{");if(e===-1)return!1;let r=t.indexOf("}",e+1);if(r===-1)return!1;let n=t.slice(e,r);return cL.test(n)}function pL(t){return No(t)?t.slice(1):t}Z.convertToPositivePattern=pL;function gL(t){return"!"+t}Z.convertToNegativePattern=gL;function No(t){return t.startsWith("!")&&t[1]!=="("}Z.isNegativePattern=No;function ph(t){return!No(t)}Z.isPositivePattern=ph;function fL(t){return t.filter(No)}Z.getNegativePatterns=fL;function mL(t){return t.filter(ph)}Z.getPositivePatterns=mL;function hL(t){return t.filter(e=>!iu(e))}Z.getPatternsInsideCurrentDirectory=hL;function EL(t){return t.filter(iu)}Z.getPatternsOutsideCurrentDirectory=EL;function iu(t){return t.startsWith("..")||t.startsWith("./..")}Z.isPatternRelatedToParentDirectory=iu;function _L(t){return nL(t,{flipBackslashes:!1})}Z.getBaseDirectory=_L;function SL(t){return t.includes(ch)}Z.hasGlobStar=SL;function gh(t){return t.endsWith("/"+ch)}Z.endsWithSlashGlobStar=gh;function TL(t){let e=lh.basename(t);return gh(t)||uh(e)}Z.isAffectDepthOfReadingPattern=TL;function AL(t){return t.reduce((e,r)=>e.concat(fh(r)),[])}Z.expandPatternsWithBraceExpansion=AL;function fh(t){let e=nu.braces(t,{expand:!0,nodupes:!0,keepEscaping:!0});return e.sort((r,n)=>r.length-n.length),e.filter(r=>r!=="")}Z.expandBraceExpansion=fh;function RL(t,e){let{parts:r}=nu.scan(t,Object.assign(Object.assign({},e),{parts:!0}));return r.length===0&&(r=[t]),r[0].startsWith("/")&&(r[0]=r[0].slice(1),r.unshift("")),r}Z.getPatternParts=RL;function mh(t,e){return nu.makeRe(t,e)}Z.makeRe=mh;function yL(t,e){return t.map(r=>mh(r,e))}Z.convertPatternsToRe=yL;function OL(t,e){return e.some(r=>r.test(t))}Z.matchAny=OL;function IL(t){return t.replace(uL,"/")}Z.removeDuplicateSlashes=IL;function LL(t){let e=[],r=[];for(let n of t)hh(n)?e.push(n):r.push(n);return[e,r]}Z.partitionAbsoluteAndRelative=LL;function hh(t){return lh.isAbsolute(t)}Z.isAbsolute=hh});var Ah=U((i0,Th)=>{"use strict";var CL=ve("stream"),_h=CL.PassThrough,NL=Array.prototype.slice;Th.exports=PL;function PL(){let t=[],e=NL.call(arguments),r=!1,n=e[e.length-1];n&&!Array.isArray(n)&&n.pipe==null?e.pop():n={};let i=n.end!==!1,s=n.pipeError===!0;n.objectMode==null&&(n.objectMode=!0),n.highWaterMark==null&&(n.highWaterMark=64*1024);let o=_h(n);function a(){for(let u=0,p=arguments.length;u<p;u++)t.push(Sh(arguments[u],n));return l(),this}function l(){if(r)return;r=!0;let u=t.shift();if(!u){process.nextTick(c);return}Array.isArray(u)||(u=[u]);let p=u.length+1;function d(){--p>0||(r=!1,l())}function f(m){function _(){m.removeListener("merge2UnpipeEnd",_),m.removeListener("end",_),s&&m.removeListener("error",L),d()}function L(C){o.emit("error",C)}if(m._readableState.endEmitted)return d();m.on("merge2UnpipeEnd",_),m.on("end",_),s&&m.on("error",L),m.pipe(o,{end:!1}),m.resume()}for(let m=0;m<u.length;m++)f(u[m]);d()}function c(){r=!1,o.emit("queueDrain"),i&&o.end()}return o.setMaxListeners(0),o.add=a,o.on("unpipe",function(u){u.emit("merge2UnpipeEnd")}),e.length&&a.apply(null,e),o}function Sh(t,e){if(Array.isArray(t))for(let r=0,n=t.length;r<n;r++)t[r]=Sh(t[r],e);else{if(!t._readableState&&t.pipe&&(t=t.pipe(_h(e))),!t._readableState||!t.pause||!t.pipe)throw new Error("Only readable stream can be merged.");t.pause()}return t}});var yh=U(Po=>{"use strict";Object.defineProperty(Po,"__esModule",{value:!0});Po.merge=void 0;var DL=Ah();function vL(t){let e=DL(t);return t.forEach(r=>{r.once("error",n=>e.emit("error",n))}),e.once("close",()=>Rh(t)),e.once("end",()=>Rh(t)),e}Po.merge=vL;function Rh(t){t.forEach(e=>e.emit("close"))}});var Oh=U(ai=>{"use strict";Object.defineProperty(ai,"__esModule",{value:!0});ai.isEmpty=ai.isString=void 0;function bL(t){return typeof t=="string"}ai.isString=bL;function wL(t){return t===""}ai.isEmpty=wL});var _r=U(Xe=>{"use strict";Object.defineProperty(Xe,"__esModule",{value:!0});Xe.string=Xe.stream=Xe.pattern=Xe.path=Xe.fs=Xe.errno=Xe.array=void 0;var FL=xf();Xe.array=FL;var ML=Uf();Xe.errno=ML;var kL=Hf();Xe.fs=kL;var GL=Yf();Xe.path=GL;var xL=Eh();Xe.pattern=xL;var UL=yh();Xe.stream=UL;var HL=Oh();Xe.string=HL});var Nh=U(Ze=>{"use strict";Object.defineProperty(Ze,"__esModule",{value:!0});Ze.convertPatternGroupToTask=Ze.convertPatternGroupsToTasks=Ze.groupPatternsByBaseDirectory=Ze.getNegativePatternsAsPositive=Ze.getPositivePatterns=Ze.convertPatternsToTasks=Ze.generate=void 0;var Ht=_r();function BL(t,e){let r=Ih(t,e),n=Ih(e.ignore,e),i=Lh(r),s=Ch(r,n),o=i.filter(u=>Ht.pattern.isStaticPattern(u,e)),a=i.filter(u=>Ht.pattern.isDynamicPattern(u,e)),l=su(o,s,!1),c=su(a,s,!0);return l.concat(c)}Ze.generate=BL;function Ih(t,e){let r=t;return e.braceExpansion&&(r=Ht.pattern.expandPatternsWithBraceExpansion(r)),e.baseNameMatch&&(r=r.map(n=>n.includes("/")?n:`**/${n}`)),r.map(n=>Ht.pattern.removeDuplicateSlashes(n))}function su(t,e,r){let n=[],i=Ht.pattern.getPatternsOutsideCurrentDirectory(t),s=Ht.pattern.getPatternsInsideCurrentDirectory(t),o=ou(i),a=ou(s);return n.push(...au(o,e,r)),"."in a?n.push(lu(".",s,e,r)):n.push(...au(a,e,r)),n}Ze.convertPatternsToTasks=su;function Lh(t){return Ht.pattern.getPositivePatterns(t)}Ze.getPositivePatterns=Lh;function Ch(t,e){return Ht.pattern.getNegativePatterns(t).concat(e).map(Ht.pattern.convertToPositivePattern)}Ze.getNegativePatternsAsPositive=Ch;function ou(t){let e={};return t.reduce((r,n)=>{let i=Ht.pattern.getBaseDirectory(n);return i in r?r[i].push(n):r[i]=[n],r},e)}Ze.groupPatternsByBaseDirectory=ou;function au(t,e,r){return Object.keys(t).map(n=>lu(n,t[n],e,r))}Ze.convertPatternGroupsToTasks=au;function lu(t,e,r,n){return{dynamic:n,positive:e,negative:r,base:t,patterns:[].concat(e,r.map(Ht.pattern.convertToNegativePattern))}}Ze.convertPatternGroupToTask=lu});var Dh=U(Do=>{"use strict";Object.defineProperty(Do,"__esModule",{value:!0});Do.read=void 0;function KL(t,e,r){e.fs.lstat(t,(n,i)=>{if(n!==null){Ph(r,n);return}if(!i.isSymbolicLink()||!e.followSymbolicLink){cu(r,i);return}e.fs.stat(t,(s,o)=>{if(s!==null){if(e.throwErrorOnBrokenSymbolicLink){Ph(r,s);return}cu(r,i);return}e.markSymbolicLink&&(o.isSymbolicLink=()=>!0),cu(r,o)})})}Do.read=KL;function Ph(t,e){t(e)}function cu(t,e){t(null,e)}});var vh=U(vo=>{"use strict";Object.defineProperty(vo,"__esModule",{value:!0});vo.read=void 0;function $L(t,e){let r=e.fs.lstatSync(t);if(!r.isSymbolicLink()||!e.followSymbolicLink)return r;try{let n=e.fs.statSync(t);return e.markSymbolicLink&&(n.isSymbolicLink=()=>!0),n}catch(n){if(!e.throwErrorOnBrokenSymbolicLink)return r;throw n}}vo.read=$L});var bh=U(Ur=>{"use strict";Object.defineProperty(Ur,"__esModule",{value:!0});Ur.createFileSystemAdapter=Ur.FILE_SYSTEM_ADAPTER=void 0;var bo=ve("fs");Ur.FILE_SYSTEM_ADAPTER={lstat:bo.lstat,stat:bo.stat,lstatSync:bo.lstatSync,statSync:bo.statSync};function YL(t){return t===void 0?Ur.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},Ur.FILE_SYSTEM_ADAPTER),t)}Ur.createFileSystemAdapter=YL});var wh=U(du=>{"use strict";Object.defineProperty(du,"__esModule",{value:!0});var WL=bh(),uu=class{constructor(e={}){this._options=e,this.followSymbolicLink=this._getValue(this._options.followSymbolicLink,!0),this.fs=WL.createFileSystemAdapter(this._options.fs),this.markSymbolicLink=this._getValue(this._options.markSymbolicLink,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0)}_getValue(e,r){return e??r}};du.default=uu});var Rn=U(Hr=>{"use strict";Object.defineProperty(Hr,"__esModule",{value:!0});Hr.statSync=Hr.stat=Hr.Settings=void 0;var Fh=Dh(),jL=vh(),pu=wh();Hr.Settings=pu.default;function VL(t,e,r){if(typeof e=="function"){Fh.read(t,gu(),e);return}Fh.read(t,gu(e),r)}Hr.stat=VL;function zL(t,e){let r=gu(e);return jL.read(t,r)}Hr.statSync=zL;function gu(t={}){return t instanceof pu.default?t:new pu.default(t)}});var Gh=U((f0,kh)=>{"use strict";var Mh;kh.exports=typeof queueMicrotask=="function"?queueMicrotask.bind(typeof window<"u"?window:global):t=>(Mh||(Mh=Promise.resolve())).then(t).catch(e=>setTimeout(()=>{throw e},0))});var Uh=U((m0,xh)=>{"use strict";xh.exports=qL;var JL=Gh();function qL(t,e){let r,n,i,s=!0;Array.isArray(t)?(r=[],n=t.length):(i=Object.keys(t),r={},n=i.length);function o(l){function c(){e&&e(l,r),e=null}s?JL(c):c()}function a(l,c,u){r[l]=u,(--n===0||c)&&o(c)}n?i?i.forEach(function(l){t[l](function(c,u){a(l,c,u)})}):t.forEach(function(l,c){l(function(u,p){a(c,u,p)})}):o(null),s=!1}});var fu=U(Fo=>{"use strict";Object.defineProperty(Fo,"__esModule",{value:!0});Fo.IS_SUPPORT_READDIR_WITH_FILE_TYPES=void 0;var wo=process.versions.node.split(".");if(wo[0]===void 0||wo[1]===void 0)throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);var Hh=Number.parseInt(wo[0],10),QL=Number.parseInt(wo[1],10),Bh=10,XL=10,ZL=Hh>Bh,eC=Hh===Bh&&QL>=XL;Fo.IS_SUPPORT_READDIR_WITH_FILE_TYPES=ZL||eC});var Kh=U(Mo=>{"use strict";Object.defineProperty(Mo,"__esModule",{value:!0});Mo.createDirentFromStats=void 0;var mu=class{constructor(e,r){this.name=e,this.isBlockDevice=r.isBlockDevice.bind(r),this.isCharacterDevice=r.isCharacterDevice.bind(r),this.isDirectory=r.isDirectory.bind(r),this.isFIFO=r.isFIFO.bind(r),this.isFile=r.isFile.bind(r),this.isSocket=r.isSocket.bind(r),this.isSymbolicLink=r.isSymbolicLink.bind(r)}};function tC(t,e){return new mu(t,e)}Mo.createDirentFromStats=tC});var hu=U(ko=>{"use strict";Object.defineProperty(ko,"__esModule",{value:!0});ko.fs=void 0;var rC=Kh();ko.fs=rC});var Eu=U(Go=>{"use strict";Object.defineProperty(Go,"__esModule",{value:!0});Go.joinPathSegments=void 0;function nC(t,e,r){return t.endsWith(r)?t+e:t+r+e}Go.joinPathSegments=nC});var zh=U(Br=>{"use strict";Object.defineProperty(Br,"__esModule",{value:!0});Br.readdir=Br.readdirWithFileTypes=Br.read=void 0;var iC=Rn(),$h=Uh(),sC=fu(),Yh=hu(),Wh=Eu();function oC(t,e,r){if(!e.stats&&sC.IS_SUPPORT_READDIR_WITH_FILE_TYPES){jh(t,e,r);return}Vh(t,e,r)}Br.read=oC;function jh(t,e,r){e.fs.readdir(t,{withFileTypes:!0},(n,i)=>{if(n!==null){xo(r,n);return}let s=i.map(a=>({dirent:a,name:a.name,path:Wh.joinPathSegments(t,a.name,e.pathSegmentSeparator)}));if(!e.followSymbolicLinks){_u(r,s);return}let o=s.map(a=>aC(a,e));$h(o,(a,l)=>{if(a!==null){xo(r,a);return}_u(r,l)})})}Br.readdirWithFileTypes=jh;function aC(t,e){return r=>{if(!t.dirent.isSymbolicLink()){r(null,t);return}e.fs.stat(t.path,(n,i)=>{if(n!==null){if(e.throwErrorOnBrokenSymbolicLink){r(n);return}r(null,t);return}t.dirent=Yh.fs.createDirentFromStats(t.name,i),r(null,t)})}}function Vh(t,e,r){e.fs.readdir(t,(n,i)=>{if(n!==null){xo(r,n);return}let s=i.map(o=>{let a=Wh.joinPathSegments(t,o,e.pathSegmentSeparator);return l=>{iC.stat(a,e.fsStatSettings,(c,u)=>{if(c!==null){l(c);return}let p={name:o,path:a,dirent:Yh.fs.createDirentFromStats(o,u)};e.stats&&(p.stats=u),l(null,p)})}});$h(s,(o,a)=>{if(o!==null){xo(r,o);return}_u(r,a)})})}Br.readdir=Vh;function xo(t,e){t(e)}function _u(t,e){t(null,e)}});var Zh=U(Kr=>{"use strict";Object.defineProperty(Kr,"__esModule",{value:!0});Kr.readdir=Kr.readdirWithFileTypes=Kr.read=void 0;var lC=Rn(),cC=fu(),Jh=hu(),qh=Eu();function uC(t,e){return!e.stats&&cC.IS_SUPPORT_READDIR_WITH_FILE_TYPES?Qh(t,e):Xh(t,e)}Kr.read=uC;function Qh(t,e){return e.fs.readdirSync(t,{withFileTypes:!0}).map(n=>{let i={dirent:n,name:n.name,path:qh.joinPathSegments(t,n.name,e.pathSegmentSeparator)};if(i.dirent.isSymbolicLink()&&e.followSymbolicLinks)try{let s=e.fs.statSync(i.path);i.dirent=Jh.fs.createDirentFromStats(i.name,s)}catch(s){if(e.throwErrorOnBrokenSymbolicLink)throw s}return i})}Kr.readdirWithFileTypes=Qh;function Xh(t,e){return e.fs.readdirSync(t).map(n=>{let i=qh.joinPathSegments(t,n,e.pathSegmentSeparator),s=lC.statSync(i,e.fsStatSettings),o={name:n,path:i,dirent:Jh.fs.createDirentFromStats(n,s)};return e.stats&&(o.stats=s),o})}Kr.readdir=Xh});var eE=U($r=>{"use strict";Object.defineProperty($r,"__esModule",{value:!0});$r.createFileSystemAdapter=$r.FILE_SYSTEM_ADAPTER=void 0;var li=ve("fs");$r.FILE_SYSTEM_ADAPTER={lstat:li.lstat,stat:li.stat,lstatSync:li.lstatSync,statSync:li.statSync,readdir:li.readdir,readdirSync:li.readdirSync};function dC(t){return t===void 0?$r.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},$r.FILE_SYSTEM_ADAPTER),t)}$r.createFileSystemAdapter=dC});var tE=U(Tu=>{"use strict";Object.defineProperty(Tu,"__esModule",{value:!0});var pC=ve("path"),gC=Rn(),fC=eE(),Su=class{constructor(e={}){this._options=e,this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!1),this.fs=fC.createFileSystemAdapter(this._options.fs),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,pC.sep),this.stats=this._getValue(this._options.stats,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0),this.fsStatSettings=new gC.Settings({followSymbolicLink:this.followSymbolicLinks,fs:this.fs,throwErrorOnBrokenSymbolicLink:this.throwErrorOnBrokenSymbolicLink})}_getValue(e,r){return e??r}};Tu.default=Su});var Uo=U(Yr=>{"use strict";Object.defineProperty(Yr,"__esModule",{value:!0});Yr.Settings=Yr.scandirSync=Yr.scandir=void 0;var rE=zh(),mC=Zh(),Au=tE();Yr.Settings=Au.default;function hC(t,e,r){if(typeof e=="function"){rE.read(t,Ru(),e);return}rE.read(t,Ru(e),r)}Yr.scandir=hC;function EC(t,e){let r=Ru(e);return mC.read(t,r)}Yr.scandirSync=EC;function Ru(t={}){return t instanceof Au.default?t:new Au.default(t)}});var iE=U((I0,nE)=>{"use strict";function _C(t){var e=new t,r=e;function n(){var s=e;return s.next?e=s.next:(e=new t,r=e),s.next=null,s}function i(s){r.next=s,r=s}return{get:n,release:i}}nE.exports=_C});var oE=U((L0,yu)=>{"use strict";var SC=iE();function sE(t,e,r){if(typeof t=="function"&&(r=e,e=t,t=null),!(r>=1))throw new Error("fastqueue concurrency must be equal to or greater than 1");var n=SC(TC),i=null,s=null,o=0,a=null,l={push:_,drain:mt,saturated:mt,pause:u,paused:!1,get concurrency(){return r},set concurrency(z){if(!(z>=1))throw new Error("fastqueue concurrency must be equal to or greater than 1");if(r=z,!l.paused)for(;i&&o<r;)o++,C()},running:c,resume:f,idle:m,length:p,getQueue:d,unshift:L,empty:mt,kill:F,killAndDrain:I,error:Q,abort:$};return l;function c(){return o}function u(){l.paused=!0}function p(){for(var z=i,te=0;z;)z=z.next,te++;return te}function d(){for(var z=i,te=[];z;)te.push(z.value),z=z.next;return te}function f(){if(l.paused){if(l.paused=!1,i===null){o++,C();return}for(;i&&o<r;)o++,C()}}function m(){return o===0&&l.length()===0}function _(z,te){var M=n.get();M.context=t,M.release=C,M.value=z,M.callback=te||mt,M.errorHandler=a,o>=r||l.paused?s?(s.next=M,s=M):(i=M,s=M,l.saturated()):(o++,e.call(t,M.value,M.worked))}function L(z,te){var M=n.get();M.context=t,M.release=C,M.value=z,M.callback=te||mt,M.errorHandler=a,o>=r||l.paused?i?(M.next=i,i=M):(i=M,s=M,l.saturated()):(o++,e.call(t,M.value,M.worked))}function C(z){z&&n.release(z);var te=i;te&&o<=r?l.paused?o--:(s===i&&(s=null),i=te.next,te.next=null,e.call(t,te.value,te.worked),s===null&&l.empty()):--o===0&&l.drain()}function F(){i=null,s=null,l.drain=mt}function I(){i=null,s=null,l.drain(),l.drain=mt}function $(){var z=i;for(i=null,s=null;z;){var te=z.next,M=z.callback,ne=z.errorHandler,pe=z.value,N=z.context;z.value=null,z.callback=mt,z.errorHandler=null,ne&&ne(new Error("abort"),pe),M.call(N,new Error("abort")),z.release(z),z=te}l.drain=mt}function Q(z){a=z}}function mt(){}function TC(){this.value=null,this.callback=mt,this.next=null,this.release=mt,this.context=null,this.errorHandler=null;var t=this;this.worked=function(r,n){var i=t.callback,s=t.errorHandler,o=t.value;t.value=null,t.callback=mt,t.errorHandler&&s(r,o),i.call(t.context,r,n),t.release(t)}}function AC(t,e,r){typeof t=="function"&&(r=e,e=t,t=null);function n(u,p){e.call(this,u).then(function(d){p(null,d)},p)}var i=sE(t,n,r),s=i.push,o=i.unshift;return i.push=a,i.unshift=l,i.drained=c,i;function a(u){var p=new Promise(function(d,f){s(u,function(m,_){if(m){f(m);return}d(_)})});return p.catch(mt),p}function l(u){var p=new Promise(function(d,f){o(u,function(m,_){if(m){f(m);return}d(_)})});return p.catch(mt),p}function c(){var u=new Promise(function(p){process.nextTick(function(){if(i.idle())p();else{var d=i.drain;i.drain=function(){typeof d=="function"&&d(),p(),i.drain=d}}})});return u}}yu.exports=sE;yu.exports.promise=AC});var Ho=U(rr=>{"use strict";Object.defineProperty(rr,"__esModule",{value:!0});rr.joinPathSegments=rr.replacePathSegmentSeparator=rr.isAppliedFilter=rr.isFatalError=void 0;function RC(t,e){return t.errorFilter===null?!0:!t.errorFilter(e)}rr.isFatalError=RC;function yC(t,e){return t===null||t(e)}rr.isAppliedFilter=yC;function OC(t,e){return t.split(/[/\\]/).join(e)}rr.replacePathSegmentSeparator=OC;function IC(t,e,r){return t===""?e:t.endsWith(r)?t+e:t+r+e}rr.joinPathSegments=IC});var Lu=U(Iu=>{"use strict";Object.defineProperty(Iu,"__esModule",{value:!0});var LC=Ho(),Ou=class{constructor(e,r){this._root=e,this._settings=r,this._root=LC.replacePathSegmentSeparator(e,r.pathSegmentSeparator)}};Iu.default=Ou});var Pu=U(Nu=>{"use strict";Object.defineProperty(Nu,"__esModule",{value:!0});var CC=ve("events"),NC=Uo(),PC=oE(),Bo=Ho(),DC=Lu(),Cu=class extends DC.default{constructor(e,r){super(e,r),this._settings=r,this._scandir=NC.scandir,this._emitter=new CC.EventEmitter,this._queue=PC(this._worker.bind(this),this._settings.concurrency),this._isFatalError=!1,this._isDestroyed=!1,this._queue.drain=()=>{this._isFatalError||this._emitter.emit("end")}}read(){return this._isFatalError=!1,this._isDestroyed=!1,setImmediate(()=>{this._pushToQueue(this._root,this._settings.basePath)}),this._emitter}get isDestroyed(){return this._isDestroyed}destroy(){if(this._isDestroyed)throw new Error("The reader is already destroyed");this._isDestroyed=!0,this._queue.killAndDrain()}onEntry(e){this._emitter.on("entry",e)}onError(e){this._emitter.once("error",e)}onEnd(e){this._emitter.once("end",e)}_pushToQueue(e,r){let n={directory:e,base:r};this._queue.push(n,i=>{i!==null&&this._handleError(i)})}_worker(e,r){this._scandir(e.directory,this._settings.fsScandirSettings,(n,i)=>{if(n!==null){r(n,void 0);return}for(let s of i)this._handleEntry(s,e.base);r(null,void 0)})}_handleError(e){this._isDestroyed||!Bo.isFatalError(this._settings,e)||(this._isFatalError=!0,this._isDestroyed=!0,this._emitter.emit("error",e))}_handleEntry(e,r){if(this._isDestroyed||this._isFatalError)return;let n=e.path;r!==void 0&&(e.path=Bo.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),Bo.isAppliedFilter(this._settings.entryFilter,e)&&this._emitEntry(e),e.dirent.isDirectory()&&Bo.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(n,r===void 0?void 0:e.path)}_emitEntry(e){this._emitter.emit("entry",e)}};Nu.default=Cu});var aE=U(vu=>{"use strict";Object.defineProperty(vu,"__esModule",{value:!0});var vC=Pu(),Du=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new vC.default(this._root,this._settings),this._storage=[]}read(e){this._reader.onError(r=>{bC(e,r)}),this._reader.onEntry(r=>{this._storage.push(r)}),this._reader.onEnd(()=>{wC(e,this._storage)}),this._reader.read()}};vu.default=Du;function bC(t,e){t(e)}function wC(t,e){t(null,e)}});var lE=U(wu=>{"use strict";Object.defineProperty(wu,"__esModule",{value:!0});var FC=ve("stream"),MC=Pu(),bu=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new MC.default(this._root,this._settings),this._stream=new FC.Readable({objectMode:!0,read:()=>{},destroy:()=>{this._reader.isDestroyed||this._reader.destroy()}})}read(){return this._reader.onError(e=>{this._stream.emit("error",e)}),this._reader.onEntry(e=>{this._stream.push(e)}),this._reader.onEnd(()=>{this._stream.push(null)}),this._reader.read(),this._stream}};wu.default=bu});var cE=U(Mu=>{"use strict";Object.defineProperty(Mu,"__esModule",{value:!0});var kC=Uo(),Ko=Ho(),GC=Lu(),Fu=class extends GC.default{constructor(){super(...arguments),this._scandir=kC.scandirSync,this._storage=[],this._queue=new Set}read(){return this._pushToQueue(this._root,this._settings.basePath),this._handleQueue(),this._storage}_pushToQueue(e,r){this._queue.add({directory:e,base:r})}_handleQueue(){for(let e of this._queue.values())this._handleDirectory(e.directory,e.base)}_handleDirectory(e,r){try{let n=this._scandir(e,this._settings.fsScandirSettings);for(let i of n)this._handleEntry(i,r)}catch(n){this._handleError(n)}}_handleError(e){if(Ko.isFatalError(this._settings,e))throw e}_handleEntry(e,r){let n=e.path;r!==void 0&&(e.path=Ko.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),Ko.isAppliedFilter(this._settings.entryFilter,e)&&this._pushToStorage(e),e.dirent.isDirectory()&&Ko.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(n,r===void 0?void 0:e.path)}_pushToStorage(e){this._storage.push(e)}};Mu.default=Fu});var uE=U(Gu=>{"use strict";Object.defineProperty(Gu,"__esModule",{value:!0});var xC=cE(),ku=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new xC.default(this._root,this._settings)}read(){return this._reader.read()}};Gu.default=ku});var dE=U(Uu=>{"use strict";Object.defineProperty(Uu,"__esModule",{value:!0});var UC=ve("path"),HC=Uo(),xu=class{constructor(e={}){this._options=e,this.basePath=this._getValue(this._options.basePath,void 0),this.concurrency=this._getValue(this._options.concurrency,Number.POSITIVE_INFINITY),this.deepFilter=this._getValue(this._options.deepFilter,null),this.entryFilter=this._getValue(this._options.entryFilter,null),this.errorFilter=this._getValue(this._options.errorFilter,null),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,UC.sep),this.fsScandirSettings=new HC.Settings({followSymbolicLinks:this._options.followSymbolicLinks,fs:this._options.fs,pathSegmentSeparator:this._options.pathSegmentSeparator,stats:this._options.stats,throwErrorOnBrokenSymbolicLink:this._options.throwErrorOnBrokenSymbolicLink})}_getValue(e,r){return e??r}};Uu.default=xu});var Yo=U(nr=>{"use strict";Object.defineProperty(nr,"__esModule",{value:!0});nr.Settings=nr.walkStream=nr.walkSync=nr.walk=void 0;var pE=aE(),BC=lE(),KC=uE(),Hu=dE();nr.Settings=Hu.default;function $C(t,e,r){if(typeof e=="function"){new pE.default(t,$o()).read(e);return}new pE.default(t,$o(e)).read(r)}nr.walk=$C;function YC(t,e){let r=$o(e);return new KC.default(t,r).read()}nr.walkSync=YC;function WC(t,e){let r=$o(e);return new BC.default(t,r).read()}nr.walkStream=WC;function $o(t={}){return t instanceof Hu.default?t:new Hu.default(t)}});var Wo=U(Ku=>{"use strict";Object.defineProperty(Ku,"__esModule",{value:!0});var jC=ve("path"),VC=Rn(),gE=_r(),Bu=class{constructor(e){this._settings=e,this._fsStatSettings=new VC.Settings({followSymbolicLink:this._settings.followSymbolicLinks,fs:this._settings.fs,throwErrorOnBrokenSymbolicLink:this._settings.followSymbolicLinks})}_getFullEntryPath(e){return jC.resolve(this._settings.cwd,e)}_makeEntry(e,r){let n={name:r,path:r,dirent:gE.fs.createDirentFromStats(r,e)};return this._settings.stats&&(n.stats=e),n}_isFatalError(e){return!gE.errno.isEnoentCodeError(e)&&!this._settings.suppressErrors}};Ku.default=Bu});var Wu=U(Yu=>{"use strict";Object.defineProperty(Yu,"__esModule",{value:!0});var zC=ve("stream"),JC=Rn(),qC=Yo(),QC=Wo(),$u=class extends QC.default{constructor(){super(...arguments),this._walkStream=qC.walkStream,this._stat=JC.stat}dynamic(e,r){return this._walkStream(e,r)}static(e,r){let n=e.map(this._getFullEntryPath,this),i=new zC.PassThrough({objectMode:!0});i._write=(s,o,a)=>this._getEntry(n[s],e[s],r).then(l=>{l!==null&&r.entryFilter(l)&&i.push(l),s===n.length-1&&i.end(),a()}).catch(a);for(let s=0;s<n.length;s++)i.write(s);return i}_getEntry(e,r,n){return this._getStat(e).then(i=>this._makeEntry(i,r)).catch(i=>{if(n.errorFilter(i))return null;throw i})}_getStat(e){return new Promise((r,n)=>{this._stat(e,this._fsStatSettings,(i,s)=>i===null?r(s):n(i))})}};Yu.default=$u});var fE=U(Vu=>{"use strict";Object.defineProperty(Vu,"__esModule",{value:!0});var XC=Yo(),ZC=Wo(),eN=Wu(),ju=class extends ZC.default{constructor(){super(...arguments),this._walkAsync=XC.walk,this._readerStream=new eN.default(this._settings)}dynamic(e,r){return new Promise((n,i)=>{this._walkAsync(e,r,(s,o)=>{s===null?n(o):i(s)})})}async static(e,r){let n=[],i=this._readerStream.static(e,r);return new Promise((s,o)=>{i.once("error",o),i.on("data",a=>n.push(a)),i.once("end",()=>s(n))})}};Vu.default=ju});var mE=U(Ju=>{"use strict";Object.defineProperty(Ju,"__esModule",{value:!0});var ds=_r(),zu=class{constructor(e,r,n){this._patterns=e,this._settings=r,this._micromatchOptions=n,this._storage=[],this._fillStorage()}_fillStorage(){for(let e of this._patterns){let r=this._getPatternSegments(e),n=this._splitSegmentsIntoSections(r);this._storage.push({complete:n.length<=1,pattern:e,segments:r,sections:n})}}_getPatternSegments(e){return ds.pattern.getPatternParts(e,this._micromatchOptions).map(n=>ds.pattern.isDynamicPattern(n,this._settings)?{dynamic:!0,pattern:n,patternRe:ds.pattern.makeRe(n,this._micromatchOptions)}:{dynamic:!1,pattern:n})}_splitSegmentsIntoSections(e){return ds.array.splitWhen(e,r=>r.dynamic&&ds.pattern.hasGlobStar(r.pattern))}};Ju.default=zu});var hE=U(Qu=>{"use strict";Object.defineProperty(Qu,"__esModule",{value:!0});var tN=mE(),qu=class extends tN.default{match(e){let r=e.split("/"),n=r.length,i=this._storage.filter(s=>!s.complete||s.segments.length>n);for(let s of i){let o=s.sections[0];if(!s.complete&&n>o.length||r.every((l,c)=>{let u=s.segments[c];return!!(u.dynamic&&u.patternRe.test(l)||!u.dynamic&&u.pattern===l)}))return!0}return!1}};Qu.default=qu});var EE=U(Zu=>{"use strict";Object.defineProperty(Zu,"__esModule",{value:!0});var jo=_r(),rN=hE(),Xu=class{constructor(e,r){this._settings=e,this._micromatchOptions=r}getFilter(e,r,n){let i=this._getMatcher(r),s=this._getNegativePatternsRe(n);return o=>this._filter(e,o,i,s)}_getMatcher(e){return new rN.default(e,this._settings,this._micromatchOptions)}_getNegativePatternsRe(e){let r=e.filter(jo.pattern.isAffectDepthOfReadingPattern);return jo.pattern.convertPatternsToRe(r,this._micromatchOptions)}_filter(e,r,n,i){if(this._isSkippedByDeep(e,r.path)||this._isSkippedSymbolicLink(r))return!1;let s=jo.path.removeLeadingDotSegment(r.path);return this._isSkippedByPositivePatterns(s,n)?!1:this._isSkippedByNegativePatterns(s,i)}_isSkippedByDeep(e,r){return this._settings.deep===1/0?!1:this._getEntryLevel(e,r)>=this._settings.deep}_getEntryLevel(e,r){let n=r.split("/").length;if(e==="")return n;let i=e.split("/").length;return n-i}_isSkippedSymbolicLink(e){return!this._settings.followSymbolicLinks&&e.dirent.isSymbolicLink()}_isSkippedByPositivePatterns(e,r){return!this._settings.baseNameMatch&&!r.match(e)}_isSkippedByNegativePatterns(e,r){return!jo.pattern.matchAny(e,r)}};Zu.default=Xu});var _E=U(td=>{"use strict";Object.defineProperty(td,"__esModule",{value:!0});var Wr=_r(),ed=class{constructor(e,r){this._settings=e,this._micromatchOptions=r,this.index=new Map}getFilter(e,r){let[n,i]=Wr.pattern.partitionAbsoluteAndRelative(r),s={positive:{all:Wr.pattern.convertPatternsToRe(e,this._micromatchOptions)},negative:{absolute:Wr.pattern.convertPatternsToRe(n,Object.assign(Object.assign({},this._micromatchOptions),{dot:!0})),relative:Wr.pattern.convertPatternsToRe(i,Object.assign(Object.assign({},this._micromatchOptions),{dot:!0}))}};return o=>this._filter(o,s)}_filter(e,r){let n=Wr.path.removeLeadingDotSegment(e.path);if(this._settings.unique&&this._isDuplicateEntry(n)||this._onlyFileFilter(e)||this._onlyDirectoryFilter(e))return!1;let i=this._isMatchToPatternsSet(n,r,e.dirent.isDirectory());return this._settings.unique&&i&&this._createIndexRecord(n),i}_isDuplicateEntry(e){return this.index.has(e)}_createIndexRecord(e){this.index.set(e,void 0)}_onlyFileFilter(e){return this._settings.onlyFiles&&!e.dirent.isFile()}_onlyDirectoryFilter(e){return this._settings.onlyDirectories&&!e.dirent.isDirectory()}_isMatchToPatternsSet(e,r,n){return!(!this._isMatchToPatterns(e,r.positive.all,n)||this._isMatchToPatterns(e,r.negative.relative,n)||this._isMatchToAbsoluteNegative(e,r.negative.absolute,n))}_isMatchToAbsoluteNegative(e,r,n){if(r.length===0)return!1;let i=Wr.path.makeAbsolute(this._settings.cwd,e);return this._isMatchToPatterns(i,r,n)}_isMatchToPatterns(e,r,n){if(r.length===0)return!1;let i=Wr.pattern.matchAny(e,r);return!i&&n?Wr.pattern.matchAny(e+"/",r):i}};td.default=ed});var SE=U(nd=>{"use strict";Object.defineProperty(nd,"__esModule",{value:!0});var nN=_r(),rd=class{constructor(e){this._settings=e}getFilter(){return e=>this._isNonFatalError(e)}_isNonFatalError(e){return nN.errno.isEnoentCodeError(e)||this._settings.suppressErrors}};nd.default=rd});var AE=U(sd=>{"use strict";Object.defineProperty(sd,"__esModule",{value:!0});var TE=_r(),id=class{constructor(e){this._settings=e}getTransformer(){return e=>this._transform(e)}_transform(e){let r=e.path;return this._settings.absolute&&(r=TE.path.makeAbsolute(this._settings.cwd,r),r=TE.path.unixify(r)),this._settings.markDirectories&&e.dirent.isDirectory()&&(r+="/"),this._settings.objectMode?Object.assign(Object.assign({},e),{path:r}):r}};sd.default=id});var Vo=U(ad=>{"use strict";Object.defineProperty(ad,"__esModule",{value:!0});var iN=ve("path"),sN=EE(),oN=_E(),aN=SE(),lN=AE(),od=class{constructor(e){this._settings=e,this.errorFilter=new aN.default(this._settings),this.entryFilter=new oN.default(this._settings,this._getMicromatchOptions()),this.deepFilter=new sN.default(this._settings,this._getMicromatchOptions()),this.entryTransformer=new lN.default(this._settings)}_getRootDirectory(e){return iN.resolve(this._settings.cwd,e.base)}_getReaderOptions(e){let r=e.base==="."?"":e.base;return{basePath:r,pathSegmentSeparator:"/",concurrency:this._settings.concurrency,deepFilter:this.deepFilter.getFilter(r,e.positive,e.negative),entryFilter:this.entryFilter.getFilter(e.positive,e.negative),errorFilter:this.errorFilter.getFilter(),followSymbolicLinks:this._settings.followSymbolicLinks,fs:this._settings.fs,stats:this._settings.stats,throwErrorOnBrokenSymbolicLink:this._settings.throwErrorOnBrokenSymbolicLink,transform:this.entryTransformer.getTransformer()}}_getMicromatchOptions(){return{dot:this._settings.dot,matchBase:this._settings.baseNameMatch,nobrace:!this._settings.braceExpansion,nocase:!this._settings.caseSensitiveMatch,noext:!this._settings.extglob,noglobstar:!this._settings.globstar,posix:!0,strictSlashes:!1}}};ad.default=od});var RE=U(cd=>{"use strict";Object.defineProperty(cd,"__esModule",{value:!0});var cN=fE(),uN=Vo(),ld=class extends uN.default{constructor(){super(...arguments),this._reader=new cN.default(this._settings)}async read(e){let r=this._getRootDirectory(e),n=this._getReaderOptions(e);return(await this.api(r,e,n)).map(s=>n.transform(s))}api(e,r,n){return r.dynamic?this._reader.dynamic(e,n):this._reader.static(r.patterns,n)}};cd.default=ld});var yE=U(dd=>{"use strict";Object.defineProperty(dd,"__esModule",{value:!0});var dN=ve("stream"),pN=Wu(),gN=Vo(),ud=class extends gN.default{constructor(){super(...arguments),this._reader=new pN.default(this._settings)}read(e){let r=this._getRootDirectory(e),n=this._getReaderOptions(e),i=this.api(r,e,n),s=new dN.Readable({objectMode:!0,read:()=>{}});return i.once("error",o=>s.emit("error",o)).on("data",o=>s.emit("data",n.transform(o))).once("end",()=>s.emit("end")),s.once("close",()=>i.destroy()),s}api(e,r,n){return r.dynamic?this._reader.dynamic(e,n):this._reader.static(r.patterns,n)}};dd.default=ud});var OE=U(gd=>{"use strict";Object.defineProperty(gd,"__esModule",{value:!0});var fN=Rn(),mN=Yo(),hN=Wo(),pd=class extends hN.default{constructor(){super(...arguments),this._walkSync=mN.walkSync,this._statSync=fN.statSync}dynamic(e,r){return this._walkSync(e,r)}static(e,r){let n=[];for(let i of e){let s=this._getFullEntryPath(i),o=this._getEntry(s,i,r);o===null||!r.entryFilter(o)||n.push(o)}return n}_getEntry(e,r,n){try{let i=this._getStat(e);return this._makeEntry(i,r)}catch(i){if(n.errorFilter(i))return null;throw i}}_getStat(e){return this._statSync(e,this._fsStatSettings)}};gd.default=pd});var IE=U(md=>{"use strict";Object.defineProperty(md,"__esModule",{value:!0});var EN=OE(),_N=Vo(),fd=class extends _N.default{constructor(){super(...arguments),this._reader=new EN.default(this._settings)}read(e){let r=this._getRootDirectory(e),n=this._getReaderOptions(e);return this.api(r,e,n).map(n.transform)}api(e,r,n){return r.dynamic?this._reader.dynamic(e,n):this._reader.static(r.patterns,n)}};md.default=fd});var LE=U(ui=>{"use strict";Object.defineProperty(ui,"__esModule",{value:!0});ui.DEFAULT_FILE_SYSTEM_ADAPTER=void 0;var ci=ve("fs"),SN=ve("os"),TN=Math.max(SN.cpus().length,1);ui.DEFAULT_FILE_SYSTEM_ADAPTER={lstat:ci.lstat,lstatSync:ci.lstatSync,stat:ci.stat,statSync:ci.statSync,readdir:ci.readdir,readdirSync:ci.readdirSync};var hd=class{constructor(e={}){this._options=e,this.absolute=this._getValue(this._options.absolute,!1),this.baseNameMatch=this._getValue(this._options.baseNameMatch,!1),this.braceExpansion=this._getValue(this._options.braceExpansion,!0),this.caseSensitiveMatch=this._getValue(this._options.caseSensitiveMatch,!0),this.concurrency=this._getValue(this._options.concurrency,TN),this.cwd=this._getValue(this._options.cwd,process.cwd()),this.deep=this._getValue(this._options.deep,1/0),this.dot=this._getValue(this._options.dot,!1),this.extglob=this._getValue(this._options.extglob,!0),this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!0),this.fs=this._getFileSystemMethods(this._options.fs),this.globstar=this._getValue(this._options.globstar,!0),this.ignore=this._getValue(this._options.ignore,[]),this.markDirectories=this._getValue(this._options.markDirectories,!1),this.objectMode=this._getValue(this._options.objectMode,!1),this.onlyDirectories=this._getValue(this._options.onlyDirectories,!1),this.onlyFiles=this._getValue(this._options.onlyFiles,!0),this.stats=this._getValue(this._options.stats,!1),this.suppressErrors=this._getValue(this._options.suppressErrors,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!1),this.unique=this._getValue(this._options.unique,!0),this.onlyDirectories&&(this.onlyFiles=!1),this.stats&&(this.objectMode=!0),this.ignore=[].concat(this.ignore)}_getValue(e,r){return e===void 0?r:e}_getFileSystemMethods(e={}){return Object.assign(Object.assign({},ui.DEFAULT_FILE_SYSTEM_ADAPTER),e)}};ui.default=hd});var Td=U((Q0,NE)=>{"use strict";var CE=Nh(),AN=RE(),RN=yE(),yN=IE(),Ed=LE(),Dt=_r();async function _d(t,e){Bt(t);let r=Sd(t,AN.default,e),n=await Promise.all(r);return Dt.array.flatten(n)}(function(t){t.glob=t,t.globSync=e,t.globStream=r,t.async=t;function e(c,u){Bt(c);let p=Sd(c,yN.default,u);return Dt.array.flatten(p)}t.sync=e;function r(c,u){Bt(c);let p=Sd(c,RN.default,u);return Dt.stream.merge(p)}t.stream=r;function n(c,u){Bt(c);let p=[].concat(c),d=new Ed.default(u);return CE.generate(p,d)}t.generateTasks=n;function i(c,u){Bt(c);let p=new Ed.default(u);return Dt.pattern.isDynamicPattern(c,p)}t.isDynamicPattern=i;function s(c){return Bt(c),Dt.path.escape(c)}t.escapePath=s;function o(c){return Bt(c),Dt.path.convertPathToPattern(c)}t.convertPathToPattern=o;let a;(function(c){function u(d){return Bt(d),Dt.path.escapePosixPath(d)}c.escapePath=u;function p(d){return Bt(d),Dt.path.convertPosixPathToPattern(d)}c.convertPathToPattern=p})(a=t.posix||(t.posix={}));let l;(function(c){function u(d){return Bt(d),Dt.path.escapeWindowsPath(d)}c.escapePath=u;function p(d){return Bt(d),Dt.path.convertWindowsPathToPattern(d)}c.convertPathToPattern=p})(l=t.win32||(t.win32={}))})(_d||(_d={}));function Sd(t,e,r){let n=[].concat(t),i=new Ed.default(r),s=CE.generate(n,i),o=new e(i);return s.map(o.read,o)}function Bt(t){if(![].concat(t).every(n=>Dt.string.isString(n)&&!Dt.string.isEmpty(n)))throw new TypeError("Patterns must be a string (non empty) or an array of strings")}NE.exports=_d});var GE=U((X0,qo)=>{"use strict";function vE(t){return Array.isArray(t)?t:[t]}var ON=void 0,Rd="",PE=" ",Ad="\\",IN=/^\s+$/,LN=/(?:[^\\]|^)\\$/,CN=/^\\!/,NN=/^\\#/,PN=/\r?\n/g,DN=/^\.{0,2}\/|^\.{1,2}$/,vN=/\/$/,di="/",bE="node-ignore";typeof Symbol<"u"&&(bE=Symbol.for("node-ignore"));var wE=bE,pi=(t,e,r)=>(Object.defineProperty(t,e,{value:r}),r),bN=/([0-z])-([0-z])/g,FE=()=>!1,wN=t=>t.replace(bN,(e,r,n)=>r.charCodeAt(0)<=n.charCodeAt(0)?e:Rd),FN=t=>t.startsWith("!")||t.startsWith("\\^")?`^${t.slice(t[0]==="!"?1:2)}`:t,MN=t=>{let{length:e}=t;return t.slice(0,e-e%2)},kN=[[/^\uFEFF/,()=>Rd],[/((?:\\\\)*?)(\\?\s+)$/,(t,e,r)=>e+(r.indexOf("\\")===0?PE:Rd)],[/(\\+?)\s/g,(t,e)=>{let{length:r}=e;return e.slice(0,r-r%2)+PE}],[/[\\$.|*+(){^]/g,t=>`\\${t}`],[/(?!\\)\?/g,()=>"[^/]"],[/^\//,()=>"^"],[/\//g,()=>"\\/"],[/^\^*(?:\\\*\\\*\\\/)+/,()=>"^(?:.*\\/)?"],[/^(?=[^^])/,function(){return/\/(?!$)/.test(this)?"^":"(?:^|\\/)"}],[/\\\/\\\*\\\*(?=\\\/|$)/g,(t,e,r)=>e+6<r.length?"(?:\\/[^\\/]+)*":"\\/.+"],[/(^|[^\\]+)(\\\*)+(?=.+)/g,(t,e,r)=>{let n=r.replace(/\\\*/g,"[^\\/]*");return e+n}],[/\\\\\\(?=[$.|*+(){^])/g,()=>Ad],[/\\\\/g,()=>Ad],[/(\\)?\[([^\]/]*?)(\\*)($|\])/g,(t,e,r,n,i)=>e===Ad?`\\[${r}${MN(n)}${i}`:i==="]"&&n.length%2===0?`[${FN(wN(r))}${n}]`:"[]"],[/(?:[^*])$/,t=>/\/$/.test(t)?`${t}$`:`${t}(?=$|\\/$)`]],GN=/(^|\\\/)?\\\*$/,ps="regex",zo="checkRegex",DE="_",xN={[ps](t,e){return`${e?`${e}[^/]+`:"[^/]*"}(?=$|\\/$)`},[zo](t,e){return`${e?`${e}[^/]*`:"[^/]*"}(?=$|\\/$)`}},UN=t=>kN.reduce((e,[r,n])=>e.replace(r,n.bind(t)),t),Jo=t=>typeof t=="string",HN=t=>t&&Jo(t)&&!IN.test(t)&&!LN.test(t)&&t.indexOf("#")!==0,BN=t=>t.split(PN).filter(Boolean),yd=class{constructor(e,r,n,i,s,o){this.pattern=e,this.mark=r,this.negative=s,pi(this,"body",n),pi(this,"ignoreCase",i),pi(this,"regexPrefix",o)}get regex(){let e=DE+ps;return this[e]?this[e]:this._make(ps,e)}get checkRegex(){let e=DE+zo;return this[e]?this[e]:this._make(zo,e)}_make(e,r){let n=this.regexPrefix.replace(GN,xN[e]),i=this.ignoreCase?new RegExp(n,"i"):new RegExp(n);return pi(this,r,i)}},KN=({pattern:t,mark:e},r)=>{let n=!1,i=t;i.indexOf("!")===0&&(n=!0,i=i.substr(1)),i=i.replace(CN,"!").replace(NN,"#");let s=UN(i);return new yd(t,e,i,r,n,s)},Od=class{constructor(e){this._ignoreCase=e,this._rules=[]}_add(e){if(e&&e[wE]){this._rules=this._rules.concat(e._rules._rules),this._added=!0;return}if(Jo(e)&&(e={pattern:e}),HN(e.pattern)){let r=KN(e,this._ignoreCase);this._added=!0,this._rules.push(r)}}add(e){return this._added=!1,vE(Jo(e)?BN(e):e).forEach(this._add,this),this._added}test(e,r,n){let i=!1,s=!1,o;this._rules.forEach(l=>{let{negative:c}=l;s===c&&i!==s||c&&!i&&!s&&!r||!l[n].test(e)||(i=!c,s=c,o=c?ON:l)});let a={ignored:i,unignored:s};return o&&(a.rule=o),a}},$N=(t,e)=>{throw new e(t)},Sr=(t,e,r)=>Jo(t)?t?Sr.isNotRelative(t)?r(`path should be a \`path.relative()\`d string, but got "${e}"`,RangeError):!0:r("path must not be empty",TypeError):r(`path must be a string, but got \`${e}\``,TypeError),ME=t=>DN.test(t);Sr.isNotRelative=ME;Sr.convert=t=>t;var Id=class{constructor({ignorecase:e=!0,ignoreCase:r=e,allowRelativePaths:n=!1}={}){pi(this,wE,!0),this._rules=new Od(r),this._strictPathCheck=!n,this._initCache()}_initCache(){this._ignoreCache=Object.create(null),this._testCache=Object.create(null)}add(e){return this._rules.add(e)&&this._initCache(),this}addPattern(e){return this.add(e)}_test(e,r,n,i){let s=e&&Sr.convert(e);return Sr(s,e,this._strictPathCheck?$N:FE),this._t(s,r,n,i)}checkIgnore(e){if(!vN.test(e))return this.test(e);let r=e.split(di).filter(Boolean);if(r.pop(),r.length){let n=this._t(r.join(di)+di,this._testCache,!0,r);if(n.ignored)return n}return this._rules.test(e,!1,zo)}_t(e,r,n,i){if(e in r)return r[e];if(i||(i=e.split(di).filter(Boolean)),i.pop(),!i.length)return r[e]=this._rules.test(e,n,ps);let s=this._t(i.join(di)+di,r,n,i);return r[e]=s.ignored?s:this._rules.test(e,n,ps)}ignores(e){return this._test(e,this._ignoreCache,!1).ignored}createFilter(){return e=>!this.ignores(e)}filter(e){return vE(e).filter(this.createFilter())}test(e){return this._test(e,this._testCache,!0)}},Ld=t=>new Id(t),YN=t=>Sr(t&&Sr.convert(t),t,FE),kE=()=>{let t=r=>/^\\\\\?\\/.test(r)||/["<>|\u0000-\u001F]+/u.test(r)?r:r.replace(/\\/g,"/");Sr.convert=t;let e=/^[a-z]:\//i;Sr.isNotRelative=r=>e.test(r)||ME(r)};typeof process<"u"&&process.platform==="win32"&&kE();qo.exports=Ld;Ld.default=Ld;qo.exports.isPathValid=YN;pi(qo.exports,Symbol.for("setupWindows"),kE)});import*as fR from"dotenv";import jt from"process";import Gb from"process";import{execFile as FR}from"child_process";import{promisify as MR}from"util";import gr from"fs/promises";import ct from"path";import{spawn as SR}from"child_process";import Hg from"fs/promises";import En from"path";import TR from"os";var Ec=class{value;next;constructor(e){this.value=e}},ji=class{#t;#s;#c;constructor(){this.clear()}enqueue(e){let r=new Ec(e);this.#t?(this.#s.next=r,this.#s=r):(this.#t=r,this.#s=r),this.#c++}dequeue(){let e=this.#t;if(e)return this.#t=this.#t.next,this.#c--,this.#t||(this.#s=void 0),e.value}peek(){if(this.#t)return this.#t.value}clear(){this.#t=void 0,this.#s=void 0,this.#c=0}get size(){return this.#c}*[Symbol.iterator](){let e=this.#t;for(;e;)yield e.value,e=e.next}*drain(){for(;this.#t;)yield this.dequeue()}};function fn(t){let e=!1;if(typeof t=="object"&&({concurrency:t,rejectOnClear:e=!1}=t),Ug(t),typeof e!="boolean")throw new TypeError("Expected `rejectOnClear` to be a boolean");let r=new ji,n=0,i=()=>{n<t&&r.size>0&&(n++,r.dequeue().run())},s=()=>{n--,i()},o=async(c,u,p)=>{let d=(async()=>c(...p))();u(d);try{await d}catch{}s()},a=(c,u,p,d)=>{let f={reject:p};new Promise(m=>{f.run=m,r.enqueue(f)}).then(o.bind(void 0,c,u,d)),n<t&&i()},l=(c,...u)=>new Promise((p,d)=>{a(c,p,d,u)});return Object.defineProperties(l,{activeCount:{get:()=>n},pendingCount:{get:()=>r.size},clearQueue:{value(){if(!e){r.clear();return}let c=AbortSignal.abort().reason;for(;r.size>0;)r.dequeue().reject(c)}},concurrency:{get:()=>t,set(c){Ug(c),t=c,queueMicrotask(()=>{for(;n<t&&r.size>0;)i()})}},map:{async value(c,u){let p=Array.from(c,(d,f)=>this(u,d,f));return Promise.all(p)}}}),l}function Ug(t){if(!((Number.isInteger(t)||t===Number.POSITIVE_INFINITY)&&t>0))throw new TypeError("Expected `concurrency` to be a number from 1 and up")}var Gr={NAME:"Docuvia",EMAIL:"docuvia@localhost"};var mn="refs/heads/",_c="HEAD";var AR="fast-import",RR="--quiet",Sc={PIPE:"pipe",IGNORE:"ignore"},eo={DATA:"data",ERROR:"error",CLOSE:"close"},hn={COMMIT:"commit",COMMITTER:"committer",DATA:"data",FROM:"from",DELETE_ALL:"deleteall",MODIFY:"M"},yR="100644",OR="inline",IR="+0000",LR="stdin write failed: ",CR=(t,e,r)=>{let n=[e,r?`${LR}${r.message}`:""].filter(Boolean).join("; ");return`git fast-import exited with code ${t}${n?": "+n:""}`},NR=300*1e3,Bg="SIGTERM",PR=t=>`git fast-import timed out after ${t}ms and was terminated`,DR=TR.cpus().length*4;async function Kg(t,e){let r=En.resolve(t),n=e?En.resolve(e):r;if(!r.startsWith(n+En.sep)&&r!==n)throw new E(T.FS_PATH_TRAVERSAL,`sourceDir "${t}" escapes allowed root "${n}"`);let i=new Map,s=fn(DR),o=async a=>{let l=await Hg.readdir(a,{withFileTypes:!0});await Promise.all(l.map(async c=>{let u=En.join(a,c.name);if(c.isDirectory())await o(u);else if(c.isFile()){let p=En.relative(t,u),d=await s(()=>Hg.readFile(u,H));i.set(p,d)}}))};return await o(t),i}function $g(t,e,r,n,i){let s=[];s.push(`${hn.COMMIT} ${mn}${t}`),s.push(`${hn.COMMITTER} ${Gr.NAME} <${Gr.EMAIL}> ${r} ${IR}`),s.push(`${hn.DATA} ${Buffer.byteLength(n,H)}`),s.push(n),i&&s.push(`${hn.FROM} ${i}`),s.push(hn.DELETE_ALL);for(let[o,a]of e){let l=Buffer.from(a,H),c=o.split(En.sep).join(En.posix.sep);s.push(`${hn.MODIFY} ${yR} ${OR} ${c}`),s.push(`${hn.DATA} ${l.length}`),s.push(a)}return s.push(""),s.join(`
5
+ `)}function Yg(t,e,r,n=NR){return new Promise((i,s)=>{let o=SR("git",[AR,RR],{cwd:t,env:r,stdio:[Sc.PIPE,Sc.IGNORE,Sc.PIPE]}),a=setTimeout(()=>{o.kill(Bg),s(new Error(PR(n)))},n);a.unref();let l=[],c;o.stderr.on(eo.DATA,u=>l.push(u)),o.on(eo.ERROR,s),o.on(eo.CLOSE,u=>{if(clearTimeout(a),u===0)return i();let p=Buffer.concat(l).toString(H).trim();s(new Error(CR(u,p,c)))}),o.stdin.on(eo.ERROR,u=>{c=u});try{o.stdin.end(e,H)}catch(u){o.kill(Bg),clearTimeout(a),s(u instanceof Error?u:new Error(String(u)));return}})}import Qn from"path";var vR="Git hook name must be a basename contained by the resolved hooks directory";function bR(t){return t.length===0||t==="."||t===".."||t.includes("/")||t.includes("\\")||Qn.isAbsolute(t)}function wR(t){return t.length===0||t===".."||t.startsWith(`..${Qn.sep}`)||Qn.isAbsolute(t)}function Wg(){throw new E(T.FS_PATH_TRAVERSAL,vR)}function Vi(t,e){bR(e)&&Wg();let r=Qn.resolve(t),n=Qn.resolve(r,e),i=Qn.relative(r,n);return wR(i)&&Wg(),n}var kR=MR(FR),GR={LC_ALL:"C",LANG:"C",LC_MESSAGES:"C"};function jg(t,e){return{...t,...e??{},...GR}}var ge={REV_PARSE:"rev-parse",BRANCH:"branch",COMMIT_TREE:"commit-tree",UPDATE_REF:"update-ref",LS_FILES:"ls-files",LS_TREE:"ls-tree",DIFF:"diff",DIFF_TREE:"diff-tree",CAT_FILE:"cat-file",SHOW:"show",LOG:"log",REV_LIST:"rev-list",REMOTE:"remote",STATUS:"status",FETCH:"fetch",PUSH:"push",MERGE_BASE:"merge-base",WORKTREE:"worktree",BLAME:"blame"},re={IS_INSIDE_WORK_TREE:"--is-inside-work-tree",LIST:"--list",DELETE_FORCE:"-D",MESSAGE_FLAG:"-m",STAGED:"-s",OTHERS:"--others",EXCLUDE_STANDARD:"--exclude-standard",NAME_ONLY:"--name-only",BLOB:"blob",MAX_COUNT_FLAG:"-n",LOG_FORMAT_SHA_AND_BODY:"--format=%H%x01%B%x00",GET_URL:"get-url",EMPTY_FORMAT:"--format=",WORKTREE_LIST:"list",PORCELAIN:"--porcelain",NAME_STATUS:"--name-status",END_OF_OPTIONS:"--end-of-options",NO_COMMIT_ID:"--no-commit-id",RECURSIVE:"-r",VERIFY:"--verify",QUIET:"--quiet",IS_ANCESTOR:"--is-ancestor",TREE_SUFFIX:"^{tree}",SUPPRESS_DIFF:"-s",COMMIT_TIMESTAMP_FORMAT:"--format=%ct",PARENT_FLAG:"-p",UNIFIED_ZERO:"--unified=0",NO_COLOR:"--no-color",PATHSPEC_SEPARATOR:"--",GIT_DIR_FLAG:"--git-dir",GIT_COMMON_DIR_FLAG:"--git-common-dir",GIT_PATH_FLAG:"--git-path",NO_VERIFY:"--no-verify"},to={PATH:"worktree ",BRANCH:"branch "},xR="\0",UR="",Tc={RENAMED:"R",ADDED:"A",DELETED:"D"},HR="4b825dc642cb6eb9a060e54bf8d69288fbee4904",Vg=".git",zg="hooks",BR="_",Jg="docuvia-knowledge.lock",KR=1e4,$R=100,YR=6e4,qg="object",Qg="code",be={BRANCH_LIST_FAILED:"git branch --list failed",BRANCH_DELETE_FAILED:"git branch -D failed",COMMIT_TREE_FAILED:"git commit-tree failed",UPDATE_REF_FAILED:"git update-ref failed",HOOK_FILE_WRITE_FAILED:"Writing hook file failed",HOOK_FILE_CHMOD_FAILED:"chmod on hook file failed",LS_FILES_STAGED_FAILED:"git ls-files -s failed",LS_FILES_OTHERS_FAILED:"git ls-files --others failed",DIFF_NAME_ONLY_FAILED:"git diff --name-only failed",CAT_FILE_BLOB_FAILED:"git cat-file blob failed",STATUS_PORCELAIN_FAILED:"git status --porcelain failed",DIFF_TREE_FAILED:"git diff-tree failed",FAST_IMPORT_FAILED:"git fast-import failed",FETCH_FAILED:"git fetch failed",PUSH_FAILED:"git push failed",MERGE_BASE_IS_ANCESTOR_FAILED:"git merge-base --is-ancestor failed",REV_PARSE_TREE_FAILED:"git rev-parse ^{tree} failed",SHOW_COMMIT_TIMESTAMP_FAILED:"git show --format=%ct failed",COMMIT_TREE_MERGE_FAILED:"git commit-tree (merge) failed",KNOWLEDGE_LOCK_ACQUIRE_FAILED:"Failed to acquire knowledge lock",HOST_ENVIRONMENT_MISSING:"GitLocalProvider requires a host environment snapshot (resolve TOKENS.HostEnvironment)",KNOWLEDGE_LOCK_TIMED_OUT:t=>`Timed out waiting for the knowledge branch lock at ${t} \u2014 another Docuvia process may be stuck`},Xn=class{hostEnvironment;constructor(e){if(typeof e!="object"||e===null)throw new E(T.INVALID_INPUT,be.HOST_ENVIRONMENT_MISSING);this.hostEnvironment=Object.freeze({...e})}async execFileAsync(e,r,n={}){return kR(e,r,{...n,encoding:"utf8",env:jg(this.hostEnvironment,n.env)})}async getGitDir(e){try{let{stdout:r}=await this.execFileAsync("git",[ge.REV_PARSE,re.GIT_DIR_FLAG],{cwd:e});return ct.resolve(e,r.trim())}catch{return ct.join(e,Vg)}}async getGitCommonDir(e){try{let{stdout:r}=await this.execFileAsync("git",[ge.REV_PARSE,re.GIT_COMMON_DIR_FLAG],{cwd:e});return ct.resolve(e,r.trim())}catch{return ct.join(e,Vg)}}async resolveHooksDir(e){let r;try{let{stdout:n}=await this.execFileAsync("git",[ge.REV_PARSE,re.GIT_PATH_FLAG,zg],{cwd:e});r=ct.resolve(e,n.trim())}catch{let n=await this.getGitCommonDir(e);r=ct.join(n,zg)}return ct.basename(r)===BR?ct.dirname(r):r}async isGitRepository(e){try{return await this.execFileAsync("git",[ge.REV_PARSE,re.IS_INSIDE_WORK_TREE],{cwd:e}),!0}catch{return!1}}async branchExists(e,r){try{let{stdout:n}=await this.execFileAsync("git",[ge.BRANCH,re.LIST,r],{cwd:e});return n.trim().length>0}catch(n){throw E.wrap(T.GIT_COMMAND_FAILED,be.BRANCH_LIST_FAILED,n)}}async deleteBranch(e,r){try{await this.execFileAsync("git",[ge.BRANCH,re.DELETE_FORCE,r],{cwd:e})}catch(n){throw E.wrap(T.GIT_COMMAND_FAILED,be.BRANCH_DELETE_FAILED,n)}}async commitEmptyTree(e,r){try{let{stdout:n}=await this.execFileAsync("git",[ge.COMMIT_TREE,HR,re.MESSAGE_FLAG,r],{cwd:e});return n.trim()}catch(n){throw E.wrap(T.GIT_BRANCH_CREATE_FAILED,be.COMMIT_TREE_FAILED,n)}}async updateBranchRef(e,r,n){try{await this.execFileAsync("git",[ge.UPDATE_REF,`${mn}${r}`,n],{cwd:e})}catch(i){throw E.wrap(T.GIT_BRANCH_CREATE_FAILED,be.UPDATE_REF_FAILED,i)}}async hooksDirExists(e){try{let r=await this.resolveHooksDir(e);return await gr.access(r),!0}catch{return!1}}async readHookFile(e,r){let n=await this.resolveHooksDir(e),i=Vi(n,r);try{return await gr.readFile(i,H)}catch{return}}async appendHookFile(e,r,n){try{let i=await this.resolveHooksDir(e),s=Vi(i,r);await gr.appendFile(s,n)}catch(i){throw E.wrap(T.GIT_HOOK_INSTALL_FAILED,be.HOOK_FILE_WRITE_FAILED,i)}}async writeHookFile(e,r,n){try{let i=await this.resolveHooksDir(e),s=Vi(i,r);await gr.writeFile(s,n)}catch(i){throw E.wrap(T.GIT_HOOK_INSTALL_FAILED,be.HOOK_FILE_WRITE_FAILED,i)}}async makeHookExecutable(e,r){try{let n=await this.resolveHooksDir(e),i=Vi(n,r);await gr.chmod(i,493)}catch(n){throw E.wrap(T.GIT_HOOK_INSTALL_FAILED,be.HOOK_FILE_CHMOD_FAILED,n)}}async listTrackedFilesWithBlobHash(e){let r=new Map;try{let{stdout:n}=await this.execFileAsync("git",[ge.LS_FILES,re.STAGED],{cwd:e,maxBuffer:67108864});for(let i of n.split(`
6
+ `)){if(!i.trim())continue;let[s,o]=i.split(" "),a=s.split(" ")[1];o&&a&&r.set(o,a)}return r}catch(n){throw E.wrap(T.GIT_COMMAND_FAILED,be.LS_FILES_STAGED_FAILED,n)}}async listUntrackedFiles(e){try{let{stdout:r}=await this.execFileAsync("git",[ge.LS_FILES,re.OTHERS,re.EXCLUDE_STANDARD],{cwd:e,maxBuffer:67108864});return r.split(`
7
+ `).map(n=>n.trim()).filter(Boolean)}catch(r){throw E.wrap(T.GIT_COMMAND_FAILED,be.LS_FILES_OTHERS_FAILED,r)}}async listModifiedFiles(e){try{let{stdout:r}=await this.execFileAsync("git",[ge.DIFF,re.NAME_ONLY],{cwd:e});return r.split(`
8
+ `).map(n=>n.trim()).filter(Boolean)}catch(r){throw E.wrap(T.GIT_COMMAND_FAILED,be.DIFF_NAME_ONLY_FAILED,r)}}async readBlobContent(e,r){try{let{stdout:n}=await this.execFileAsync("git",[ge.CAT_FILE,re.BLOB,r],{cwd:e,maxBuffer:10485760});return n}catch(n){throw E.wrap(T.GIT_COMMAND_FAILED,be.CAT_FILE_BLOB_FAILED,n)}}async readFileAtRef(e,r,n){try{let i=n.split(ct.sep).join(ct.posix.sep),{stdout:s}=await this.execFileAsync("git",[ge.SHOW,`${r}:${i}`],{cwd:e,maxBuffer:64*1024*1024});return s}catch{return}}async listFilesAtRef(e,r,n){try{let i=n.split(ct.sep).join(ct.posix.sep),s=i.endsWith("/")?i:`${i}/`,{stdout:o}=await this.execFileAsync("git",[ge.LS_TREE,re.NAME_ONLY,r,re.PATHSPEC_SEPARATOR,s],{cwd:e});return o.split(`
9
+ `).map(a=>a.trim()).filter(Boolean)}catch{return[]}}async getCommitLog(e,r,n=1e3){try{let{stdout:i}=await this.execFileAsync("git",[ge.LOG,r,re.MAX_COUNT_FLAG,String(n),re.LOG_FORMAT_SHA_AND_BODY],{cwd:e,maxBuffer:67108864});return i.split(xR).map(s=>s.trim()).filter(Boolean).map(s=>{let o=s.indexOf(UR);return{sha:s.slice(0,o),message:s.slice(o+1)}})}catch{return[]}}async getCommitAncestry(e,r,n=1e3){try{let{stdout:i}=await this.execFileAsync("git",[ge.REV_LIST,r,re.MAX_COUNT_FLAG,String(n)],{cwd:e});return i.split(`
10
+ `).map(s=>s.trim()).filter(Boolean)}catch{return[]}}async getRemoteUrl(e){try{let{stdout:r}=await this.execFileAsync("git",[ge.REMOTE,re.GET_URL,Ws],{cwd:e}),n=r.trim();return n.length>0?n:void 0}catch{return}}async getRecentChangedFilePaths(e,r=100){try{let{stdout:n}=await this.execFileAsync("git",[ge.LOG,re.MAX_COUNT_FLAG,String(r),re.NAME_ONLY,re.EMPTY_FORMAT],{cwd:e});return n.split(`
11
+ `).map(i=>i.trim()).filter(Boolean)}catch{return[]}}async hasUncommittedChanges(e){try{let{stdout:r}=await this.execFileAsync("git",[ge.STATUS,re.PORCELAIN],{cwd:e});return r.trim().length>0}catch(r){throw E.wrap(T.GIT_COMMAND_FAILED,be.STATUS_PORCELAIN_FAILED,r)}}async getChangedFilesSince(e,r,n){let i=[],s=new Set;try{let o=[ge.DIFF,re.NAME_STATUS,re.END_OF_OPTIONS,r??_c,...n?[n]:[]],{stdout:a}=await this.execFileAsync("git",o,{cwd:e});this.collectNameStatusEntries(a,i,s)}catch{}return!r&&!n&&await this.mergeUntrackedFiles(e,i,s),i}collectNameStatusEntries(e,r,n){for(let i of e.split(`
12
+ `)){let s=i.trim();if(!s)continue;let o=s.split(" "),a=o[0]??"",{file:l,status:c,oldFile:u}=this.parseNameStatusLine(a,o);l&&!n.has(l)&&(n.add(l),r.push(u!==void 0?{file:l,status:c,oldFile:u}:{file:l,status:c}))}}parseNameStatusLine(e,r){return e.startsWith(Tc.RENAMED)?{status:Lt.RENAMED,file:r[2]??r[1],oldFile:r[1]}:e.startsWith(Tc.ADDED)?{status:Lt.ADDED,file:r[1]}:e.startsWith(Tc.DELETED)?{status:Lt.DELETED,file:r[1]}:{status:Lt.MODIFIED,file:r[1]}}async mergeUntrackedFiles(e,r,n){let i=await this.listUntrackedFiles(e);for(let s of i)n.has(s)||(n.add(s),r.push({file:s,status:Lt.ADDED}))}async getChangedLineRanges(e,r,n,i){let s=[];try{let{stdout:o}=await this.execFileAsync("git",[ge.DIFF,re.UNIFIED_ZERO,re.NO_COLOR,re.END_OF_OPTIONS,r,n,re.PATHSPEC_SEPARATOR,i],{cwd:e}),a=/^@@ -\d+(?:,\d+)? \+(\d+)(?:,(\d+))? @@/;for(let l of o.split(`
13
+ `)){let c=a.exec(l);if(!c)continue;let u=Number(c[1]),p=c[2]===void 0?1:Number(c[2]);if(p===0){let d=Math.max(u-1,0);s.push({startRow:d,endRow:d})}else s.push({startRow:u-1,endRow:u-1+p-1})}}catch{}return s}async getFilesChangedByCommit(e,r){try{let{stdout:n}=await this.execFileAsync("git",[ge.DIFF_TREE,re.NO_COMMIT_ID,re.NAME_ONLY,re.RECURSIVE,re.END_OF_OPTIONS,r],{cwd:e});return n.split(`
14
+ `).map(i=>i.trim()).filter(Boolean)}catch(n){throw E.wrap(T.GIT_COMMAND_FAILED,be.DIFF_TREE_FAILED,n)}}async getHeadSha(e){try{let{stdout:r}=await this.execFileAsync("git",[ge.REV_PARSE,_c],{cwd:e}),n=r.trim();return n.length>0?n:void 0}catch{return}}async listWorktrees(e){let r;try{r=(await this.execFileAsync("git",[ge.WORKTREE,re.WORKTREE_LIST,re.PORCELAIN],{cwd:e})).stdout}catch{return[]}let n=[];for(let i of r.split(`
15
15
 
16
16
  `)){let s=i.split(`
17
- `).filter(l=>l.trim().length>0);if(s.length===0)continue;let o=s.find(l=>l.startsWith(ro.PATH));if(!o)continue;let a=s.find(l=>l.startsWith(ro.BRANCH));n.push({path:o.slice(ro.PATH.length),branch:a?a.slice(ro.BRANCH.length).replace(hn,""):void 0})}return n}async getBranchTipSha(e,r){try{let{stdout:n}=await ge("git",[fe.REV_PARSE,re.VERIFY,re.QUIET,`${hn}${r}`],{cwd:e}),i=n.trim();return i.length>0?i:void 0}catch{return}}async packDirectoryToBranch(e,r,n,i,s,o=!1){try{let a=await $g(r,o?void 0:e),l=s!==void 0?s:Math.floor(Date.now()/1e3),c=await this.getBranchTipSha(e,n),u=Yg(n,a,l,i,c);await Wg(e,u)}catch(a){throw E.wrap(T.GIT_FAST_IMPORT_FAILED,Fe.FAST_IMPORT_FAILED,a)}}async fetchRef(e,r,n,i){try{await ge("git",[fe.FETCH,r,n],{cwd:e,...i!==void 0?{timeout:i}:{}})}catch(s){throw this.wrapNetworkOperationError(s,Fe.FETCH_FAILED)}}async pushRef(e,r,n,i){try{let s=`${hn}${n}`;await ge("git",[fe.PUSH,re.NO_VERIFY,r,`${s}:${s}`],{cwd:e,...i!==void 0?{timeout:i}:{}})}catch(s){throw this.wrapNetworkOperationError(s,Fe.PUSH_FAILED)}}wrapNetworkOperationError(e,r){let n=typeof e===qg&&e!==null&&e.killed?T.GIT_NETWORK_TIMEOUT:T.GIT_COMMAND_FAILED;return E.wrap(n,r,e)}async getRefSha(e,r){try{let{stdout:n}=await ge("git",[fe.REV_PARSE,re.VERIFY,re.QUIET,r],{cwd:e}),i=n.trim();return i.length>0?i:void 0}catch{return}}async isAncestor(e,r,n){try{return await ge("git",[fe.MERGE_BASE,re.IS_ANCESTOR,r,n],{cwd:e}),!0}catch(i){if(i&&typeof i===qg&&Qg in i&&i[Qg]===1)return!1;throw E.wrap(T.GIT_COMMAND_FAILED,Fe.MERGE_BASE_IS_ANCESTOR_FAILED,i)}}async getTreeSha(e,r){try{let{stdout:n}=await ge("git",[fe.REV_PARSE,`${r}${re.TREE_SUFFIX}`],{cwd:e});return n.trim()}catch(n){throw E.wrap(T.GIT_COMMAND_FAILED,Fe.REV_PARSE_TREE_FAILED,n)}}async getCommitTimestamp(e,r){try{let{stdout:n}=await ge("git",[fe.SHOW,re.SUPPRESS_DIFF,re.COMMIT_TIMESTAMP_FORMAT,r],{cwd:e});return Number(n.trim())}catch(n){throw E.wrap(T.GIT_COMMAND_FAILED,Fe.SHOW_COMMIT_TIMESTAMP_FAILED,n)}}async createMergeCommit(e,r,n,i){try{let s=n.flatMap(a=>[re.PARENT_FLAG,a]),{stdout:o}=await ge("git",[fe.COMMIT_TREE,r,...s,re.MESSAGE_FLAG,i],{cwd:e,env:{...process.env,GIT_AUTHOR_NAME:xr.NAME,GIT_AUTHOR_EMAIL:xr.EMAIL,GIT_COMMITTER_NAME:xr.NAME,GIT_COMMITTER_EMAIL:xr.EMAIL}});return o.trim()}catch(s){throw E.wrap(T.GIT_COMMAND_FAILED,Fe.COMMIT_TREE_MERGE_FAILED,s)}}async acquireKnowledgeLock(e){let r=await this.getGitDir(e),n=ut.join(r,Jg),i=Date.now()+KR;for(;;)try{await(await fr.open(n,"wx")).close();return}catch(s){let o=s.code;if(o!==Wn&&o!==gn&&o!==jn&&o!==Vn)throw E.wrap(T.GIT_COMMAND_FAILED,Fe.KNOWLEDGE_LOCK_ACQUIRE_FAILED,s);let a=await fr.stat(n).catch(()=>{});if(a&&Date.now()-a.mtimeMs>YR){await fr.rm(n,{force:!0});continue}if(Date.now()>i)throw new E(T.GIT_COMMAND_FAILED,Fe.KNOWLEDGE_LOCK_TIMED_OUT(n));await new Promise(l=>setTimeout(l,$R))}}async releaseKnowledgeLock(e){let r=await this.getGitDir(e),n=ut.join(r,Jg);await fr.rm(n,{force:!0})}async getBlameLineOwners(e,r){let n=new Map;try{let{stdout:i}=await ge("git",[fe.BLAME,re.PORCELAIN,re.PATHSPEC_SEPARATOR,r],{cwd:e}),s=/^\^?([0-9a-f]{40}) (\d+) (\d+)(?: (\d+))?$/;for(let o of i.split(`
18
- `)){let a=s.exec(o);if(!a)continue;let l=a[1],c=Number(a[3]),u=a[4]===void 0?1:Number(a[4]);n.has(c)||n.set(c,l);for(let p=c+1;p<c+u;p++)n.has(p)||n.set(p,l)}}catch{}return n}};import{exec as WR}from"child_process";import{promisify as jR}from"util";var VR=jR(WR),zR="git_network",Xg={REMOTE_REACHABLE:"Git remote is reachable",REMOTE_REACHABILITY_CHECK_FAILED:"Git remote reachability check failed"},JR="ls-remote",qR="--heads",QR=`${"git"} ${JR} ${qR} ${js}`,XR=5e3,no=class{async checkHealth(e){let r={};try{let{stdout:n}=await VR(QR,{cwd:e,timeout:XR});r[zR]={status:K.PASS,message:Xg.REMOTE_REACHABLE}}catch(n){let i=n.killed?T.GIT_NETWORK_TIMEOUT:T.GIT_COMMAND_FAILED;throw E.wrap(i,Xg.REMOTE_REACHABILITY_CHECK_FAILED,n)}return r}};y.register(A.GitProvider,()=>new Zn);y.register(A.LineBlameProvider,()=>new Zn);y.register(A.DiagnosticRunnerGit,()=>new no);import lf from"fs";import lo from"fs/promises";import cy from"path";import cf from"better-sqlite3";import Zg from"fs";import ZR from"path";var Sn={BUSY_TIMEOUT_MS:1e4,JOURNAL_MODE:"WAL",SYNCHRONOUS:"NORMAL",WAL_FILE_SUFFIX:"-wal"},ei={BUSY_TIMEOUT:"busy_timeout",JOURNAL_MODE:"journal_mode",SYNCHRONOUS:"synchronous",INTEGRITY_CHECK:"integrity_check"},b={PROJECTS:"projects",PROJECT_FILES:"project_files",L1_TAGS:"l1_tags",L2_NODES:"l2_nodes",L2_NODES_FTS:"l2_nodes_fts",L2_NODE_L1_TAGS:"l2_node_l1_tags",NODE_LINKS:"node_links",L3_NODES:"l3_nodes",L3_NODES_FTS:"l3_nodes_fts",DOCUVIA_META:"docuvia_meta",SCHEMA_MIGRATIONS:"schema_migrations",AST_CALL_SITES:"ast_call_sites"},P={PROJECT_ID:"project_id",FILE_PATH:"file_path",CONTENT_HASH:"content_hash",PATH_PATTERNS:"path_patterns",NODE_KEY:"node_key",SOURCE_NODE_ID:"source_node_id",TARGET_NODE_ID:"target_node_id",LINK_TYPE:"link_type",L2_NODE_ID:"l2_node_id",L1_TAG_ID:"l1_tag_id",FILENAME:"filename",TARGET_FUNCTION:"target_function",START_LINE:"start_line",START_COLUMN:"start_column",CALLEE_NAME:"callee_name",RECEIVER_TEXT:"receiver_text",CALLEE_KIND:"callee_kind"};var ey=".sql";function Rc(t,e){t.exec(`CREATE TABLE IF NOT EXISTS ${b.SCHEMA_MIGRATIONS} (
17
+ `).filter(l=>l.trim().length>0);if(s.length===0)continue;let o=s.find(l=>l.startsWith(to.PATH));if(!o)continue;let a=s.find(l=>l.startsWith(to.BRANCH));n.push({path:o.slice(to.PATH.length),branch:a?a.slice(to.BRANCH.length).replace(mn,""):void 0})}return n}async getBranchTipSha(e,r){try{let{stdout:n}=await this.execFileAsync("git",[ge.REV_PARSE,re.VERIFY,re.QUIET,`${mn}${r}`],{cwd:e}),i=n.trim();return i.length>0?i:void 0}catch{return}}async packDirectoryToBranch(e,r,n,i,s,o=!1){try{let a=await Kg(r,o?void 0:e),l=s!==void 0?s:Math.floor(Date.now()/1e3),c=await this.getBranchTipSha(e,n),u=$g(n,a,l,i,c);await Yg(e,u,jg(this.hostEnvironment,void 0))}catch(a){throw E.wrap(T.GIT_FAST_IMPORT_FAILED,be.FAST_IMPORT_FAILED,a)}}async fetchRef(e,r,n,i){try{await this.execFileAsync("git",[ge.FETCH,r,n],{cwd:e,...i!==void 0?{timeout:i}:{}})}catch(s){throw this.wrapNetworkOperationError(s,be.FETCH_FAILED)}}async pushRef(e,r,n,i){try{let s=`${mn}${n}`;await this.execFileAsync("git",[ge.PUSH,re.NO_VERIFY,r,`${s}:${s}`],{cwd:e,...i!==void 0?{timeout:i}:{}})}catch(s){throw this.wrapNetworkOperationError(s,be.PUSH_FAILED)}}wrapNetworkOperationError(e,r){let n=typeof e===qg&&e!==null&&e.killed?T.GIT_NETWORK_TIMEOUT:T.GIT_COMMAND_FAILED;return E.wrap(n,r,e)}async getRefSha(e,r){try{let{stdout:n}=await this.execFileAsync("git",[ge.REV_PARSE,re.VERIFY,re.QUIET,r],{cwd:e}),i=n.trim();return i.length>0?i:void 0}catch{return}}async isAncestor(e,r,n){try{return await this.execFileAsync("git",[ge.MERGE_BASE,re.IS_ANCESTOR,r,n],{cwd:e}),!0}catch(i){if(i&&typeof i===qg&&Qg in i&&i[Qg]===1)return!1;throw E.wrap(T.GIT_COMMAND_FAILED,be.MERGE_BASE_IS_ANCESTOR_FAILED,i)}}async getTreeSha(e,r){try{let{stdout:n}=await this.execFileAsync("git",[ge.REV_PARSE,`${r}${re.TREE_SUFFIX}`],{cwd:e});return n.trim()}catch(n){throw E.wrap(T.GIT_COMMAND_FAILED,be.REV_PARSE_TREE_FAILED,n)}}async getCommitTimestamp(e,r){try{let{stdout:n}=await this.execFileAsync("git",[ge.SHOW,re.SUPPRESS_DIFF,re.COMMIT_TIMESTAMP_FORMAT,r],{cwd:e});return Number(n.trim())}catch(n){throw E.wrap(T.GIT_COMMAND_FAILED,be.SHOW_COMMIT_TIMESTAMP_FAILED,n)}}async createMergeCommit(e,r,n,i){try{let s=n.flatMap(a=>[re.PARENT_FLAG,a]),{stdout:o}=await this.execFileAsync("git",[ge.COMMIT_TREE,r,...s,re.MESSAGE_FLAG,i],{cwd:e,env:{GIT_AUTHOR_NAME:Gr.NAME,GIT_AUTHOR_EMAIL:Gr.EMAIL,GIT_COMMITTER_NAME:Gr.NAME,GIT_COMMITTER_EMAIL:Gr.EMAIL}});return o.trim()}catch(s){throw E.wrap(T.GIT_COMMAND_FAILED,be.COMMIT_TREE_MERGE_FAILED,s)}}async acquireKnowledgeLock(e){let r=await this.getGitDir(e),n=ct.join(r,Jg),i=Date.now()+KR;for(;;)try{await(await gr.open(n,"wx")).close();return}catch(s){let o=s.code;if(o!==Yn&&o!==pn&&o!==Wn&&o!==jn)throw E.wrap(T.GIT_COMMAND_FAILED,be.KNOWLEDGE_LOCK_ACQUIRE_FAILED,s);let a=await gr.stat(n).catch(()=>{});if(a&&Date.now()-a.mtimeMs>YR){await gr.rm(n,{force:!0});continue}if(Date.now()>i)throw new E(T.GIT_COMMAND_FAILED,be.KNOWLEDGE_LOCK_TIMED_OUT(n));await new Promise(l=>setTimeout(l,$R))}}async releaseKnowledgeLock(e){let r=await this.getGitDir(e),n=ct.join(r,Jg);await gr.rm(n,{force:!0})}async getBlameLineOwners(e,r){let n=new Map;try{let{stdout:i}=await this.execFileAsync("git",[ge.BLAME,re.PORCELAIN,re.PATHSPEC_SEPARATOR,r],{cwd:e}),s=/^\^?([0-9a-f]{40}) (\d+) (\d+)(?: (\d+))?$/;for(let o of i.split(`
18
+ `)){let a=s.exec(o);if(!a)continue;let l=a[1],c=Number(a[3]),u=a[4]===void 0?1:Number(a[4]);n.has(c)||n.set(c,l);for(let p=c+1;p<c+u;p++)n.has(p)||n.set(p,l)}}catch{}return n}};import{exec as WR}from"child_process";import{promisify as jR}from"util";var VR=jR(WR),zR="git_network",Xg={REMOTE_REACHABLE:"Git remote is reachable",REMOTE_REACHABILITY_CHECK_FAILED:"Git remote reachability check failed"},JR="ls-remote",qR="--heads",QR=`${"git"} ${JR} ${qR} ${Ws}`,XR=5e3,ro=class{async checkHealth(e){let r={};try{let{stdout:n}=await VR(QR,{cwd:e,timeout:XR});r[zR]={status:K.PASS,message:Xg.REMOTE_REACHABLE}}catch(n){let i=n.killed?T.GIT_NETWORK_TIMEOUT:T.GIT_COMMAND_FAILED;throw E.wrap(i,Xg.REMOTE_REACHABILITY_CHECK_FAILED,n)}return r}};y.register(A.GitProvider,t=>new Xn(t.resolve(A.HostEnvironment)));y.register(A.LineBlameProvider,t=>new Xn(t.resolve(A.HostEnvironment)));y.register(A.DiagnosticRunnerGit,()=>new ro);import lf from"fs";import ao from"fs/promises";import cy from"path";import cf from"better-sqlite3";import Zg from"fs";import ZR from"path";var _n={BUSY_TIMEOUT_MS:1e4,JOURNAL_MODE:"WAL",SYNCHRONOUS:"NORMAL",WAL_FILE_SUFFIX:"-wal"},Zn={BUSY_TIMEOUT:"busy_timeout",JOURNAL_MODE:"journal_mode",SYNCHRONOUS:"synchronous",INTEGRITY_CHECK:"integrity_check"},b={PROJECTS:"projects",PROJECT_FILES:"project_files",L1_TAGS:"l1_tags",L2_NODES:"l2_nodes",L2_NODES_FTS:"l2_nodes_fts",L2_NODE_L1_TAGS:"l2_node_l1_tags",NODE_LINKS:"node_links",L3_NODES:"l3_nodes",L3_NODES_FTS:"l3_nodes_fts",DOCUVIA_META:"docuvia_meta",SCHEMA_MIGRATIONS:"schema_migrations",AST_CALL_SITES:"ast_call_sites"},P={PROJECT_ID:"project_id",FILE_PATH:"file_path",CONTENT_HASH:"content_hash",PATH_PATTERNS:"path_patterns",NODE_KEY:"node_key",SOURCE_NODE_ID:"source_node_id",TARGET_NODE_ID:"target_node_id",LINK_TYPE:"link_type",L2_NODE_ID:"l2_node_id",L1_TAG_ID:"l1_tag_id",FILENAME:"filename",TARGET_FUNCTION:"target_function",START_LINE:"start_line",START_COLUMN:"start_column",CALLEE_NAME:"callee_name",RECEIVER_TEXT:"receiver_text",CALLEE_KIND:"callee_kind"};var ey=".sql";function Ac(t,e){t.exec(`CREATE TABLE IF NOT EXISTS ${b.SCHEMA_MIGRATIONS} (
19
19
  id INTEGER PRIMARY KEY AUTOINCREMENT,
20
20
  ${P.FILENAME} TEXT NOT NULL UNIQUE,
21
21
  applied_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP
22
- )`);let r=Zg.readdirSync(e).filter(s=>s.endsWith(ey)).sort(),n=t.prepare(`INSERT INTO ${b.SCHEMA_MIGRATIONS} (${P.FILENAME}) VALUES (?)`);t.transaction(()=>{let s=new Set(t.prepare(`SELECT ${P.FILENAME} FROM ${b.SCHEMA_MIGRATIONS}`).all().map(o=>o.filename));for(let o of r){if(s.has(o))continue;let a=Zg.readFileSync(ZR.join(e,o),H);t.exec(a),n.run(o)}}).immediate()}import{fileURLToPath as ty}from"url";import ef from"path";var ry=ef.dirname(ty(import.meta.url)),yc=ef.join(ry,"migrations");var io={READ:"read",WRITE:"write"},so=class{activeReaders=0;writerActive=!1;queue=[];async runRead(e){await this.acquireRead();try{return await e()}finally{this.releaseRead()}}async runWrite(e){await this.acquireWrite();try{return await e()}finally{this.releaseWrite()}}acquireRead(){return!this.writerActive&&!this.queue.some(e=>e.kind===io.WRITE)?(this.activeReaders++,Promise.resolve()):new Promise(e=>{this.queue.push({kind:io.READ,grant:e})})}releaseRead(){this.activeReaders--,this.dispatch()}acquireWrite(){return!this.writerActive&&this.activeReaders===0&&this.queue.length===0?(this.writerActive=!0,Promise.resolve()):new Promise(e=>{this.queue.push({kind:io.WRITE,grant:e})})}releaseWrite(){this.writerActive=!1,this.dispatch()}dispatch(){if(!this.writerActive)for(;this.queue.length>0;){let e=this.queue[0];if(e.kind===io.WRITE){this.activeReaders===0&&(this.queue.shift(),this.writerActive=!0,e.grant());return}this.queue.shift(),this.activeReaders++,e.grant()}}};var ny="Failed to count projects",qi=class{constructor(e){this.db=e}db;getFirst(){return this.db.prepare(`SELECT * FROM ${b.PROJECTS} LIMIT 1`).get()}insert(e){let r=this.db.prepare(`INSERT INTO ${b.PROJECTS} (name, repo_url) VALUES (?, ?)`).run(e.name,e.repoUrl);return this.db.prepare(`SELECT * FROM ${b.PROJECTS} WHERE id = ?`).get(r.lastInsertRowid)}getOrInsert(e){return this.db.transaction(()=>{let n=this.getFirst();return n||this.insert(e)}).immediate()}count(){try{return this.db.prepare(`SELECT COUNT(*) as c FROM ${b.PROJECTS}`).get().c}catch(e){throw E.wrap(T.DB_QUERY_FAILED,ny,e)}}};var Qi=class{constructor(e){this.db=e}db;getAllHashes(){return this.db.prepare(`SELECT ${P.FILE_PATH}, ${P.CONTENT_HASH} FROM ${b.PROJECT_FILES}`).all().map(r=>({filePath:r.file_path,contentHash:r.content_hash}))}getAllSnapshotMetadata(){return this.db.prepare(`SELECT ${P.FILE_PATH}, ${P.CONTENT_HASH},
22
+ )`);let r=Zg.readdirSync(e).filter(s=>s.endsWith(ey)).sort(),n=t.prepare(`INSERT INTO ${b.SCHEMA_MIGRATIONS} (${P.FILENAME}) VALUES (?)`);t.transaction(()=>{let s=new Set(t.prepare(`SELECT ${P.FILENAME} FROM ${b.SCHEMA_MIGRATIONS}`).all().map(o=>o.filename));for(let o of r){if(s.has(o))continue;let a=Zg.readFileSync(ZR.join(e,o),H);t.exec(a),n.run(o)}}).immediate()}import{fileURLToPath as ty}from"url";import ef from"path";var ry=ef.dirname(ty(import.meta.url)),Rc=ef.join(ry,"migrations");var no={READ:"read",WRITE:"write"},io=class{activeReaders=0;writerActive=!1;queue=[];async runRead(e){await this.acquireRead();try{return await e()}finally{this.releaseRead()}}async runWrite(e){await this.acquireWrite();try{return await e()}finally{this.releaseWrite()}}acquireRead(){return!this.writerActive&&!this.queue.some(e=>e.kind===no.WRITE)?(this.activeReaders++,Promise.resolve()):new Promise(e=>{this.queue.push({kind:no.READ,grant:e})})}releaseRead(){this.activeReaders--,this.dispatch()}acquireWrite(){return!this.writerActive&&this.activeReaders===0&&this.queue.length===0?(this.writerActive=!0,Promise.resolve()):new Promise(e=>{this.queue.push({kind:no.WRITE,grant:e})})}releaseWrite(){this.writerActive=!1,this.dispatch()}dispatch(){if(!this.writerActive)for(;this.queue.length>0;){let e=this.queue[0];if(e.kind===no.WRITE){this.activeReaders===0&&(this.queue.shift(),this.writerActive=!0,e.grant());return}this.queue.shift(),this.activeReaders++,e.grant()}}};var ny="Failed to count projects",Ji=class{constructor(e){this.db=e}db;getFirst(){return this.db.prepare(`SELECT * FROM ${b.PROJECTS} LIMIT 1`).get()}insert(e){let r=this.db.prepare(`INSERT INTO ${b.PROJECTS} (name, repo_url) VALUES (?, ?)`).run(e.name,e.repoUrl);return this.db.prepare(`SELECT * FROM ${b.PROJECTS} WHERE id = ?`).get(r.lastInsertRowid)}getOrInsert(e){return this.db.transaction(()=>{let n=this.getFirst();return n||this.insert(e)}).immediate()}count(){try{return this.db.prepare(`SELECT COUNT(*) as c FROM ${b.PROJECTS}`).get().c}catch(e){throw E.wrap(T.DB_QUERY_FAILED,ny,e)}}};var qi=class{constructor(e){this.db=e}db;getAllHashes(){return this.db.prepare(`SELECT ${P.FILE_PATH}, ${P.CONTENT_HASH} FROM ${b.PROJECT_FILES}`).all().map(r=>({filePath:r.file_path,contentHash:r.content_hash}))}getAllSnapshotMetadata(){return this.db.prepare(`SELECT ${P.FILE_PATH}, ${P.CONTENT_HASH},
23
23
  last_tier_b_processed_at, last_tier_b_commit_sha
24
24
  FROM ${b.PROJECT_FILES}
25
25
  ORDER BY ${P.FILE_PATH}`).all().map(r=>({filePath:r.file_path,contentHash:r.content_hash,lastTierBProcessedAt:r.last_tier_b_processed_at,lastTierBCommitSha:r.last_tier_b_commit_sha}))}upsertFile(e){this.db.prepare(`INSERT INTO ${b.PROJECT_FILES} (${P.PROJECT_ID}, ${P.FILE_PATH}, ${P.CONTENT_HASH}, last_parsed_at)
@@ -28,48 +28,48 @@ import{a as ug,b as dg,d as We,f as pg,g as gg,h as fg}from"./chunk-BMDPUIOC.js"
28
28
  DO UPDATE SET ${P.CONTENT_HASH} = excluded.${P.CONTENT_HASH}, last_parsed_at = CURRENT_TIMESTAMP`).run(e.projectId,e.filePath,e.contentHash)}markTierBProcessed(e){this.db.prepare(`INSERT INTO ${b.PROJECT_FILES} (${P.PROJECT_ID}, ${P.FILE_PATH}, last_tier_b_processed_at, last_tier_b_commit_sha)
29
29
  VALUES (?, ?, COALESCE(?, CURRENT_TIMESTAMP), ?)
30
30
  ON CONFLICT(${P.PROJECT_ID}, ${P.FILE_PATH})
31
- DO UPDATE SET last_tier_b_processed_at = excluded.last_tier_b_processed_at, last_tier_b_commit_sha = excluded.last_tier_b_commit_sha`).run(e.projectId,e.filePath,e.processedAt??null,e.commitSha)}getTierBFileStatus(e){let r=this.db.prepare(`SELECT last_tier_b_processed_at, last_tier_b_commit_sha FROM ${b.PROJECT_FILES} WHERE ${P.FILE_PATH} = ? LIMIT 1`).get(e);if(r)return{lastProcessedAt:r.last_tier_b_processed_at,lastProcessedCommitSha:r.last_tier_b_commit_sha}}getTierBCoverage(){let e=this.db.prepare(`SELECT COUNT(*) as total, SUM(CASE WHEN last_tier_b_processed_at IS NOT NULL THEN 1 ELSE 0 END) as processed FROM ${b.PROJECT_FILES}`).get();return{totalFiles:e.total,processedFiles:e.processed??0}}};var tf={AUTO_DETECTED_TAG_DESCRIPTION:t=>`Auto-detected tag: ${t}`,GET_ALL_TAG_LINKS_FAILED:"Failed to get all tag links"},Xi=class{constructor(e){this.db=e}db;upsertTag(e){this.db.prepare(`INSERT INTO ${b.L1_TAGS} (name, slug, description)
31
+ DO UPDATE SET last_tier_b_processed_at = excluded.last_tier_b_processed_at, last_tier_b_commit_sha = excluded.last_tier_b_commit_sha`).run(e.projectId,e.filePath,e.processedAt??null,e.commitSha)}getTierBFileStatus(e){let r=this.db.prepare(`SELECT last_tier_b_processed_at, last_tier_b_commit_sha FROM ${b.PROJECT_FILES} WHERE ${P.FILE_PATH} = ? LIMIT 1`).get(e);if(r)return{lastProcessedAt:r.last_tier_b_processed_at,lastProcessedCommitSha:r.last_tier_b_commit_sha}}getTierBCoverage(){let e=this.db.prepare(`SELECT COUNT(*) as total, SUM(CASE WHEN last_tier_b_processed_at IS NOT NULL THEN 1 ELSE 0 END) as processed FROM ${b.PROJECT_FILES}`).get();return{totalFiles:e.total,processedFiles:e.processed??0}}};var tf={AUTO_DETECTED_TAG_DESCRIPTION:t=>`Auto-detected tag: ${t}`,GET_ALL_TAG_LINKS_FAILED:"Failed to get all tag links"},Qi=class{constructor(e){this.db=e}db;upsertTag(e){this.db.prepare(`INSERT INTO ${b.L1_TAGS} (name, slug, description)
32
32
  VALUES (?, ?, ?)
33
33
  ON CONFLICT(name) DO NOTHING`).run(e,e,tf.AUTO_DETECTED_TAG_DESCRIPTION(e))}getIdByName(e){return this.db.prepare(`SELECT id FROM ${b.L1_TAGS} WHERE name = ?`).get(e)?.id}linkNodeToTag(e,r){this.db.prepare(`INSERT INTO ${b.L2_NODE_L1_TAGS} (${P.L2_NODE_ID}, ${P.L1_TAG_ID}) VALUES (?, ?)`).run(e,r)}getAllTagLinks(){try{return this.db.prepare(`SELECT lt.${P.L2_NODE_ID} as ${P.L2_NODE_ID}, t.name as name
34
34
  FROM ${b.L2_NODE_L1_TAGS} lt
35
- JOIN ${b.L1_TAGS} t ON t.id = lt.${P.L1_TAG_ID}`).all().map(r=>({l2NodeId:r.l2_node_id,name:r.name}))}catch(e){throw E.wrap(T.DB_QUERY_FAILED,tf.GET_ALL_TAG_LINKS_FAILED,e)}}};var dt={COUNT_FAILED:"Failed to count l2/l3 nodes",SEMANTIC_COVERAGE_FAILED:"Failed to compute L2 semantic coverage",FIND_NODES_FOR_CHANGED_FILES_FAILED:"Failed to find nodes for changed files",FIND_NODE_BY_NAME_FAILED:t=>`Failed to find node by name: ${t}`,INCOMING_EDGES_FAILED:t=>`Failed to get incoming edges for node ${t}`,OUTGOING_EDGES_FAILED:t=>`Failed to get outgoing edges for node ${t}`,ALL_NODES_FAILED:"Failed to get all l2 nodes",ALL_LINKS_FAILED:"Failed to get all node links",BULK_LOAD_FAILED:"Failed to bulk-load graph",PRUNE_ORPHANED_LINKS_FAILED:"Failed to prune orphaned node_links",FIND_NODE_BY_NODE_KEY_FAILED:t=>`Failed to find node by node_key: ${t}`,INCOMING_RELATIONS_FAILED:t=>`Failed to get incoming relations for node ${t}`,OUTGOING_RELATIONS_FAILED:t=>`Failed to get outgoing relations for node ${t}`};function rf(t){return{id:t.id,name:t.name,type:t.type,filePath:iy(t.path_patterns)}}function iy(t){if(t)try{let e=JSON.parse(t);if(Array.isArray(e)&&e.length>0)return String(e[0])}catch{}}var ti={L2_NODES_FTS_AFTER_INSERT:"l2_nodes_fts_ai",L2_NODES_FTS_AFTER_DELETE:"l2_nodes_fts_ad",L2_NODES_FTS_AFTER_UPDATE:"l2_nodes_fts_au"};function sy(t,e){let r=t[0];return r?r===e?r:`${r}#${e}`:e}var Zi=class{constructor(e){this.db=e}db;deleteNodesForPath(e){let r=JSON.stringify([e]),i=this.db.prepare(`SELECT id FROM ${b.L2_NODES} WHERE ${P.PATH_PATTERNS} = ?`).all(r).map(o=>o.id);if(i.length===0)return i;let s=i.map(()=>"?").join(",");return this.db.prepare(`DELETE FROM ${b.L2_NODE_L1_TAGS} WHERE ${P.L2_NODE_ID} IN (${s})`).run(...i),this.db.prepare(`DELETE FROM ${b.NODE_LINKS} WHERE ${P.SOURCE_NODE_ID} IN (${s})`).run(...i),this.db.prepare(`DELETE FROM ${b.L2_NODES} WHERE id IN (${s})`).run(...i),i}insertNode(e){let r=e.nodeKey??sy(e.pathPatterns,e.name),n=this.db.prepare(`INSERT INTO ${b.L2_NODES} (${P.PROJECT_ID}, name, type, description, ${P.PATH_PATTERNS}, ${P.NODE_KEY}, ${P.CONTENT_HASH})
36
- VALUES (?, ?, ?, ?, ?, ?, ?)`).run(e.projectId,e.name,e.type??Nr.MODULE,e.description??"",JSON.stringify(e.pathPatterns),r,e.contentHash??null);return Number(n.lastInsertRowid)}insertLink(e){this.db.prepare(`INSERT INTO ${b.NODE_LINKS} (${P.SOURCE_NODE_ID}, ${P.TARGET_NODE_ID}, ${P.LINK_TYPE}) VALUES (?, ?, ?)`).run(e.sourceNodeId,e.targetNodeId,e.linkType)}findNodeIdByName(e,r){let n=JSON.stringify([e]);return this.db.prepare(`SELECT id FROM ${b.L2_NODES} WHERE ${P.PATH_PATTERNS} = ? AND name = ?`).get(n,r)?.id}count(){try{let e=this.db.prepare(`SELECT COUNT(*) as c FROM ${b.L2_NODES}`).get().c,r=this.db.prepare(`SELECT COUNT(*) as c FROM ${b.L3_NODES}`).get().c;return{l2Nodes:e,l3Nodes:r}}catch(e){throw E.wrap(T.DB_QUERY_FAILED,dt.COUNT_FAILED,e)}}getSemanticCoverage(){try{let e=this.db.prepare(`SELECT COUNT(*) as total, SUM(CASE WHEN description IS NOT NULL AND description != '' THEN 1 ELSE 0 END) as described FROM ${b.L2_NODES}`).get();return{totalNodes:e.total,describedNodes:e.described??0}}catch(e){throw E.wrap(T.DB_QUERY_FAILED,dt.SEMANTIC_COVERAGE_FAILED,e)}}getCanarySample(e){try{return this.db.prepare(`SELECT name FROM ${b.L2_NODES} WHERE name != '' ORDER BY id LIMIT ?`).all(e)}catch(r){throw E.wrap(T.DB_QUERY_FAILED,dt.COUNT_FAILED,r)}}findNodesForChangedFiles(e){try{let r=new Set(e),i=this.db.prepare(`SELECT * FROM ${b.L2_NODES}`).all().filter(o=>{if(!o.path_patterns)return!1;try{return JSON.parse(o.path_patterns).some(l=>r.has(l))}catch{return!1}}),s=this.db.prepare(`SELECT * FROM ${b.L3_NODES} WHERE ${P.L2_NODE_ID} = ?`);return i.map(o=>({l2Node:o,l3Nodes:s.all(o.id)}))}catch(r){throw E.wrap(T.DB_QUERY_FAILED,dt.FIND_NODES_FOR_CHANGED_FILES_FAILED,r)}}findNodeByName(e){try{let r=this.db.prepare(`SELECT id, name, type, ${P.PATH_PATTERNS} FROM ${b.L2_NODES} WHERE name = ? ORDER BY (${P.PATH_PATTERNS} LIKE '%test%' OR ${P.PATH_PATTERNS} LIKE '%spec%') ASC, (SELECT COUNT(*) FROM ${b.NODE_LINKS} WHERE ${P.SOURCE_NODE_ID} = ${b.L2_NODES}.id OR ${P.TARGET_NODE_ID} = ${b.L2_NODES}.id) DESC LIMIT 1`).get(e);if(r)return rf(r);let n=e.replace(/[\\%_]/g,s=>`\\${s}`),i=this.db.prepare(`SELECT id, name, type, ${P.PATH_PATTERNS} FROM ${b.L2_NODES} WHERE name LIKE ? ESCAPE '\\' ORDER BY (${P.PATH_PATTERNS} LIKE '%test%' OR ${P.PATH_PATTERNS} LIKE '%spec%') ASC, (SELECT COUNT(*) FROM ${b.NODE_LINKS} WHERE ${P.SOURCE_NODE_ID} = ${b.L2_NODES}.id OR ${P.TARGET_NODE_ID} = ${b.L2_NODES}.id) DESC LIMIT 1`).get(`%${n}%`);return i?rf(i):void 0}catch(r){throw E.wrap(T.DB_QUERY_FAILED,dt.FIND_NODE_BY_NAME_FAILED(e),r)}}findNodeIdByNodeKey(e){try{return this.db.prepare(`SELECT id FROM ${b.L2_NODES} WHERE ${P.NODE_KEY} = ?`).get(e)?.id}catch(r){throw E.wrap(T.DB_QUERY_FAILED,dt.FIND_NODE_BY_NODE_KEY_FAILED(e),r)}}getIncomingEdges(e){try{return this.db.prepare(`SELECT DISTINCT n.id as id, n.name as name, n.type as type
35
+ JOIN ${b.L1_TAGS} t ON t.id = lt.${P.L1_TAG_ID}`).all().map(r=>({l2NodeId:r.l2_node_id,name:r.name}))}catch(e){throw E.wrap(T.DB_QUERY_FAILED,tf.GET_ALL_TAG_LINKS_FAILED,e)}}};var ut={COUNT_FAILED:"Failed to count l2/l3 nodes",SEMANTIC_COVERAGE_FAILED:"Failed to compute L2 semantic coverage",FIND_NODES_FOR_CHANGED_FILES_FAILED:"Failed to find nodes for changed files",FIND_NODE_BY_NAME_FAILED:t=>`Failed to find node by name: ${t}`,INCOMING_EDGES_FAILED:t=>`Failed to get incoming edges for node ${t}`,OUTGOING_EDGES_FAILED:t=>`Failed to get outgoing edges for node ${t}`,ALL_NODES_FAILED:"Failed to get all l2 nodes",ALL_LINKS_FAILED:"Failed to get all node links",BULK_LOAD_FAILED:"Failed to bulk-load graph",PRUNE_ORPHANED_LINKS_FAILED:"Failed to prune orphaned node_links",FIND_NODE_BY_NODE_KEY_FAILED:t=>`Failed to find node by node_key: ${t}`,INCOMING_RELATIONS_FAILED:t=>`Failed to get incoming relations for node ${t}`,OUTGOING_RELATIONS_FAILED:t=>`Failed to get outgoing relations for node ${t}`};function rf(t){return{id:t.id,name:t.name,type:t.type,filePath:iy(t.path_patterns)}}function iy(t){if(t)try{let e=JSON.parse(t);if(Array.isArray(e)&&e.length>0)return String(e[0])}catch{}}var ei={L2_NODES_FTS_AFTER_INSERT:"l2_nodes_fts_ai",L2_NODES_FTS_AFTER_DELETE:"l2_nodes_fts_ad",L2_NODES_FTS_AFTER_UPDATE:"l2_nodes_fts_au"};function sy(t,e){let r=t[0];return r?r===e?r:`${r}#${e}`:e}var Xi=class{constructor(e){this.db=e}db;deleteNodesForPath(e){let r=JSON.stringify([e]),i=this.db.prepare(`SELECT id FROM ${b.L2_NODES} WHERE ${P.PATH_PATTERNS} = ?`).all(r).map(o=>o.id);if(i.length===0)return i;let s=i.map(()=>"?").join(",");return this.db.prepare(`DELETE FROM ${b.L2_NODE_L1_TAGS} WHERE ${P.L2_NODE_ID} IN (${s})`).run(...i),this.db.prepare(`DELETE FROM ${b.NODE_LINKS} WHERE ${P.SOURCE_NODE_ID} IN (${s})`).run(...i),this.db.prepare(`DELETE FROM ${b.L2_NODES} WHERE id IN (${s})`).run(...i),i}insertNode(e){let r=e.nodeKey??sy(e.pathPatterns,e.name),n=this.db.prepare(`INSERT INTO ${b.L2_NODES} (${P.PROJECT_ID}, name, type, description, ${P.PATH_PATTERNS}, ${P.NODE_KEY}, ${P.CONTENT_HASH})
36
+ VALUES (?, ?, ?, ?, ?, ?, ?)`).run(e.projectId,e.name,e.type??Cr.MODULE,e.description??"",JSON.stringify(e.pathPatterns),r,e.contentHash??null);return Number(n.lastInsertRowid)}insertLink(e){this.db.prepare(`INSERT INTO ${b.NODE_LINKS} (${P.SOURCE_NODE_ID}, ${P.TARGET_NODE_ID}, ${P.LINK_TYPE}) VALUES (?, ?, ?)`).run(e.sourceNodeId,e.targetNodeId,e.linkType)}findNodeIdByName(e,r){let n=JSON.stringify([e]);return this.db.prepare(`SELECT id FROM ${b.L2_NODES} WHERE ${P.PATH_PATTERNS} = ? AND name = ?`).get(n,r)?.id}count(){try{let e=this.db.prepare(`SELECT COUNT(*) as c FROM ${b.L2_NODES}`).get().c,r=this.db.prepare(`SELECT COUNT(*) as c FROM ${b.L3_NODES}`).get().c;return{l2Nodes:e,l3Nodes:r}}catch(e){throw E.wrap(T.DB_QUERY_FAILED,ut.COUNT_FAILED,e)}}getSemanticCoverage(){try{let e=this.db.prepare(`SELECT COUNT(*) as total, SUM(CASE WHEN description IS NOT NULL AND description != '' THEN 1 ELSE 0 END) as described FROM ${b.L2_NODES}`).get();return{totalNodes:e.total,describedNodes:e.described??0}}catch(e){throw E.wrap(T.DB_QUERY_FAILED,ut.SEMANTIC_COVERAGE_FAILED,e)}}getCanarySample(e){try{return this.db.prepare(`SELECT name FROM ${b.L2_NODES} WHERE name != '' ORDER BY id LIMIT ?`).all(e)}catch(r){throw E.wrap(T.DB_QUERY_FAILED,ut.COUNT_FAILED,r)}}findNodesForChangedFiles(e){try{let r=new Set(e),i=this.db.prepare(`SELECT * FROM ${b.L2_NODES}`).all().filter(o=>{if(!o.path_patterns)return!1;try{return JSON.parse(o.path_patterns).some(l=>r.has(l))}catch{return!1}}),s=this.db.prepare(`SELECT * FROM ${b.L3_NODES} WHERE ${P.L2_NODE_ID} = ?`);return i.map(o=>({l2Node:o,l3Nodes:s.all(o.id)}))}catch(r){throw E.wrap(T.DB_QUERY_FAILED,ut.FIND_NODES_FOR_CHANGED_FILES_FAILED,r)}}findNodeByName(e){try{let r=this.db.prepare(`SELECT id, name, type, ${P.PATH_PATTERNS} FROM ${b.L2_NODES} WHERE name = ? ORDER BY (${P.PATH_PATTERNS} LIKE '%test%' OR ${P.PATH_PATTERNS} LIKE '%spec%') ASC, (SELECT COUNT(*) FROM ${b.NODE_LINKS} WHERE ${P.SOURCE_NODE_ID} = ${b.L2_NODES}.id OR ${P.TARGET_NODE_ID} = ${b.L2_NODES}.id) DESC LIMIT 1`).get(e);if(r)return rf(r);let n=e.replace(/[\\%_]/g,s=>`\\${s}`),i=this.db.prepare(`SELECT id, name, type, ${P.PATH_PATTERNS} FROM ${b.L2_NODES} WHERE name LIKE ? ESCAPE '\\' ORDER BY (${P.PATH_PATTERNS} LIKE '%test%' OR ${P.PATH_PATTERNS} LIKE '%spec%') ASC, (SELECT COUNT(*) FROM ${b.NODE_LINKS} WHERE ${P.SOURCE_NODE_ID} = ${b.L2_NODES}.id OR ${P.TARGET_NODE_ID} = ${b.L2_NODES}.id) DESC LIMIT 1`).get(`%${n}%`);return i?rf(i):void 0}catch(r){throw E.wrap(T.DB_QUERY_FAILED,ut.FIND_NODE_BY_NAME_FAILED(e),r)}}findNodeIdByNodeKey(e){try{return this.db.prepare(`SELECT id FROM ${b.L2_NODES} WHERE ${P.NODE_KEY} = ?`).get(e)?.id}catch(r){throw E.wrap(T.DB_QUERY_FAILED,ut.FIND_NODE_BY_NODE_KEY_FAILED(e),r)}}getIncomingEdges(e){try{return this.db.prepare(`SELECT DISTINCT n.id as id, n.name as name, n.type as type
37
37
  FROM ${b.NODE_LINKS} l
38
38
  JOIN ${b.L2_NODES} n ON n.id = l.${P.SOURCE_NODE_ID}
39
- WHERE l.${P.TARGET_NODE_ID} = ?`).all(e)}catch(r){throw E.wrap(T.DB_QUERY_FAILED,dt.INCOMING_EDGES_FAILED(e),r)}}getOutgoingEdges(e){try{return this.db.prepare(`SELECT DISTINCT n.id as id, n.name as name, n.type as type
39
+ WHERE l.${P.TARGET_NODE_ID} = ?`).all(e)}catch(r){throw E.wrap(T.DB_QUERY_FAILED,ut.INCOMING_EDGES_FAILED(e),r)}}getOutgoingEdges(e){try{return this.db.prepare(`SELECT DISTINCT n.id as id, n.name as name, n.type as type
40
40
  FROM ${b.NODE_LINKS} l
41
41
  JOIN ${b.L2_NODES} n ON n.id = l.${P.TARGET_NODE_ID}
42
- WHERE l.${P.SOURCE_NODE_ID} = ?`).all(e)}catch(r){throw E.wrap(T.DB_QUERY_FAILED,dt.OUTGOING_EDGES_FAILED(e),r)}}getIncomingRelations(e){try{return this.db.prepare(`SELECT DISTINCT n.id as id, n.name as name, n.type as type, l.${P.LINK_TYPE} as linkType
42
+ WHERE l.${P.SOURCE_NODE_ID} = ?`).all(e)}catch(r){throw E.wrap(T.DB_QUERY_FAILED,ut.OUTGOING_EDGES_FAILED(e),r)}}getIncomingRelations(e){try{return this.db.prepare(`SELECT DISTINCT n.id as id, n.name as name, n.type as type, l.${P.LINK_TYPE} as linkType
43
43
  FROM ${b.NODE_LINKS} l
44
44
  JOIN ${b.L2_NODES} n ON n.id = l.${P.SOURCE_NODE_ID}
45
- WHERE l.${P.TARGET_NODE_ID} = ?`).all(e)}catch(r){throw E.wrap(T.DB_QUERY_FAILED,dt.INCOMING_RELATIONS_FAILED(e),r)}}getOutgoingRelations(e){try{return this.db.prepare(`SELECT DISTINCT n.id as id, n.name as name, n.type as type, l.${P.LINK_TYPE} as linkType
45
+ WHERE l.${P.TARGET_NODE_ID} = ?`).all(e)}catch(r){throw E.wrap(T.DB_QUERY_FAILED,ut.INCOMING_RELATIONS_FAILED(e),r)}}getOutgoingRelations(e){try{return this.db.prepare(`SELECT DISTINCT n.id as id, n.name as name, n.type as type, l.${P.LINK_TYPE} as linkType
46
46
  FROM ${b.NODE_LINKS} l
47
47
  JOIN ${b.L2_NODES} n ON n.id = l.${P.TARGET_NODE_ID}
48
- WHERE l.${P.SOURCE_NODE_ID} = ?`).all(e)}catch(r){throw E.wrap(T.DB_QUERY_FAILED,dt.OUTGOING_RELATIONS_FAILED(e),r)}}getAllNodes(){try{return this.db.prepare(`SELECT * FROM ${b.L2_NODES}`).all()}catch(e){throw E.wrap(T.DB_QUERY_FAILED,dt.ALL_NODES_FAILED,e)}}getAllLinks(){try{return this.db.prepare(`SELECT * FROM ${b.NODE_LINKS}`).all()}catch(e){throw E.wrap(T.DB_QUERY_FAILED,dt.ALL_LINKS_FAILED,e)}}withFtsSyncSuspended(e){this.db.exec(nf);let r=e();return this.db.exec(`INSERT INTO ${b.L2_NODES_FTS}(${b.L2_NODES_FTS}) VALUES('rebuild')`),this.db.exec(sf),r}bulkLoadGraph(e){try{return this.db.transaction(()=>{this.db.exec(nf),this.db.exec(`DELETE FROM ${b.NODE_LINKS}`),this.db.exec(`DELETE FROM ${b.L2_NODE_L1_TAGS}`),this.db.exec(`DELETE FROM ${b.L2_NODES}`);let n=this.db.prepare(`INSERT INTO ${b.L2_NODES} (${P.PROJECT_ID}, name, type, description, ${P.PATH_PATTERNS}, ${P.NODE_KEY})
49
- VALUES (?, ?, ?, '', ?, ?)`),i=new Map;for(let l of e.nodes){let c=n.run(e.projectId,l.name,Nr.MODULE,JSON.stringify(l.filePath?[l.filePath]:[]),l.nodeKey);i.set(l.nodeKey,Number(c.lastInsertRowid))}let s=this.db.prepare(`INSERT INTO ${b.NODE_LINKS} (${P.SOURCE_NODE_ID}, ${P.TARGET_NODE_ID}, ${P.LINK_TYPE}) VALUES (?, ?, ?)`),o=0,a=0;for(let l of e.edges){let c=i.get(l.source),u=i.get(l.target);if(c===void 0||u===void 0){a++;continue}s.run(c,u,l.type),o++}return this.db.exec(`INSERT INTO ${b.L2_NODES_FTS}(${b.L2_NODES_FTS}) VALUES('rebuild')`),this.db.exec(sf),{nodesLoaded:e.nodes.length,edgesLoaded:o,edgesDropped:a}})()}catch(r){throw E.wrap(T.DB_QUERY_FAILED,dt.BULK_LOAD_FAILED,r)}}pruneOrphanedLinks(){try{return this.db.prepare(`DELETE FROM ${b.NODE_LINKS}
48
+ WHERE l.${P.SOURCE_NODE_ID} = ?`).all(e)}catch(r){throw E.wrap(T.DB_QUERY_FAILED,ut.OUTGOING_RELATIONS_FAILED(e),r)}}getAllNodes(){try{return this.db.prepare(`SELECT * FROM ${b.L2_NODES}`).all()}catch(e){throw E.wrap(T.DB_QUERY_FAILED,ut.ALL_NODES_FAILED,e)}}getAllLinks(){try{return this.db.prepare(`SELECT * FROM ${b.NODE_LINKS}`).all()}catch(e){throw E.wrap(T.DB_QUERY_FAILED,ut.ALL_LINKS_FAILED,e)}}withFtsSyncSuspended(e){this.db.exec(nf);let r=e();return this.db.exec(`INSERT INTO ${b.L2_NODES_FTS}(${b.L2_NODES_FTS}) VALUES('rebuild')`),this.db.exec(sf),r}bulkLoadGraph(e){try{return this.db.transaction(()=>{this.db.exec(nf),this.db.exec(`DELETE FROM ${b.NODE_LINKS}`),this.db.exec(`DELETE FROM ${b.L2_NODE_L1_TAGS}`),this.db.exec(`DELETE FROM ${b.L2_NODES}`);let n=this.db.prepare(`INSERT INTO ${b.L2_NODES} (${P.PROJECT_ID}, name, type, description, ${P.PATH_PATTERNS}, ${P.NODE_KEY})
49
+ VALUES (?, ?, ?, '', ?, ?)`),i=new Map;for(let l of e.nodes){let c=n.run(e.projectId,l.name,Cr.MODULE,JSON.stringify(l.filePath?[l.filePath]:[]),l.nodeKey);i.set(l.nodeKey,Number(c.lastInsertRowid))}let s=this.db.prepare(`INSERT INTO ${b.NODE_LINKS} (${P.SOURCE_NODE_ID}, ${P.TARGET_NODE_ID}, ${P.LINK_TYPE}) VALUES (?, ?, ?)`),o=0,a=0;for(let l of e.edges){let c=i.get(l.source),u=i.get(l.target);if(c===void 0||u===void 0){a++;continue}s.run(c,u,l.type),o++}return this.db.exec(`INSERT INTO ${b.L2_NODES_FTS}(${b.L2_NODES_FTS}) VALUES('rebuild')`),this.db.exec(sf),{nodesLoaded:e.nodes.length,edgesLoaded:o,edgesDropped:a}})()}catch(r){throw E.wrap(T.DB_QUERY_FAILED,ut.BULK_LOAD_FAILED,r)}}pruneOrphanedLinks(){try{return this.db.prepare(`DELETE FROM ${b.NODE_LINKS}
50
50
  WHERE ${P.SOURCE_NODE_ID} NOT IN (SELECT id FROM ${b.L2_NODES})
51
- OR ${P.TARGET_NODE_ID} NOT IN (SELECT id FROM ${b.L2_NODES})`).run().changes}catch(e){throw E.wrap(T.DB_QUERY_FAILED,dt.PRUNE_ORPHANED_LINKS_FAILED,e)}}},nf=`
52
- DROP TRIGGER IF EXISTS ${ti.L2_NODES_FTS_AFTER_INSERT};
53
- DROP TRIGGER IF EXISTS ${ti.L2_NODES_FTS_AFTER_DELETE};
54
- DROP TRIGGER IF EXISTS ${ti.L2_NODES_FTS_AFTER_UPDATE};
51
+ OR ${P.TARGET_NODE_ID} NOT IN (SELECT id FROM ${b.L2_NODES})`).run().changes}catch(e){throw E.wrap(T.DB_QUERY_FAILED,ut.PRUNE_ORPHANED_LINKS_FAILED,e)}}},nf=`
52
+ DROP TRIGGER IF EXISTS ${ei.L2_NODES_FTS_AFTER_INSERT};
53
+ DROP TRIGGER IF EXISTS ${ei.L2_NODES_FTS_AFTER_DELETE};
54
+ DROP TRIGGER IF EXISTS ${ei.L2_NODES_FTS_AFTER_UPDATE};
55
55
  `,sf=`
56
- CREATE TRIGGER IF NOT EXISTS ${ti.L2_NODES_FTS_AFTER_INSERT} AFTER INSERT ON ${b.L2_NODES} BEGIN
56
+ CREATE TRIGGER IF NOT EXISTS ${ei.L2_NODES_FTS_AFTER_INSERT} AFTER INSERT ON ${b.L2_NODES} BEGIN
57
57
  INSERT INTO ${b.L2_NODES_FTS}(rowid, name, description, ${P.PATH_PATTERNS})
58
58
  VALUES (new.id, new.name, new.description, new.${P.PATH_PATTERNS});
59
59
  END;
60
- CREATE TRIGGER IF NOT EXISTS ${ti.L2_NODES_FTS_AFTER_DELETE} AFTER DELETE ON ${b.L2_NODES} BEGIN
60
+ CREATE TRIGGER IF NOT EXISTS ${ei.L2_NODES_FTS_AFTER_DELETE} AFTER DELETE ON ${b.L2_NODES} BEGIN
61
61
  INSERT INTO ${b.L2_NODES_FTS}(${b.L2_NODES_FTS}, rowid, name, description, ${P.PATH_PATTERNS})
62
62
  VALUES ('delete', old.id, old.name, old.description, old.${P.PATH_PATTERNS});
63
63
  END;
64
- CREATE TRIGGER IF NOT EXISTS ${ti.L2_NODES_FTS_AFTER_UPDATE} AFTER UPDATE ON ${b.L2_NODES} BEGIN
64
+ CREATE TRIGGER IF NOT EXISTS ${ei.L2_NODES_FTS_AFTER_UPDATE} AFTER UPDATE ON ${b.L2_NODES} BEGIN
65
65
  INSERT INTO ${b.L2_NODES_FTS}(${b.L2_NODES_FTS}, rowid, name, description, ${P.PATH_PATTERNS})
66
66
  VALUES ('delete', old.id, old.name, old.description, old.${P.PATH_PATTERNS});
67
67
  INSERT INTO ${b.L2_NODES_FTS}(rowid, name, description, ${P.PATH_PATTERNS})
68
68
  VALUES (new.id, new.name, new.description, new.${P.PATH_PATTERNS});
69
69
  END;
70
- `;import oy from"crypto";var ri={GET_BY_ID_FAILED:t=>`Failed to get l3 node by id ${t}`,GET_ALL_EXPORTABLE_FAILED:"Failed to get all exportable l3 nodes",GET_BY_L2_NODE_ID_FAILED:t=>`Failed to get l3 nodes for l2_node_id ${t}`,UPSERT_DECISION_FAILED:"Failed to upsert l3 decision",IMPORT_CARD_FAILED:"Failed to import l3 card",UPDATE_VALIDITY_STATUS_FAILED:t=>`Failed to update validity status for l3 node ${t}`},ay="git-import";function ly(t,e,r){return oy.createHash(Zt).update(`${t}
70
+ `;import oy from"crypto";var ti={GET_BY_ID_FAILED:t=>`Failed to get l3 node by id ${t}`,GET_ALL_EXPORTABLE_FAILED:"Failed to get all exportable l3 nodes",GET_BY_L2_NODE_ID_FAILED:t=>`Failed to get l3 nodes for l2_node_id ${t}`,UPSERT_DECISION_FAILED:"Failed to upsert l3 decision",IMPORT_CARD_FAILED:"Failed to import l3 card",UPDATE_VALIDITY_STATUS_FAILED:t=>`Failed to update validity status for l3 node ${t}`},ay="git-import";function ly(t,e,r){return oy.createHash(Xt).update(`${t}
71
71
  ${e}
72
- ${r}`).digest("hex")}var es=class{constructor(e){this.db=e}db;getById(e){try{return this.db.prepare(`SELECT * FROM ${b.L3_NODES} WHERE id = ?`).get(e)}catch(r){throw E.wrap(T.DB_QUERY_FAILED,ri.GET_BY_ID_FAILED(e),r)}}getAllExportable(){try{return this.db.prepare(`SELECT * FROM ${b.L3_NODES} WHERE validity_status != '${ur.GARBAGE}'`).all()}catch(e){throw E.wrap(T.DB_QUERY_FAILED,ri.GET_ALL_EXPORTABLE_FAILED,e)}}getByL2NodeId(e){try{return this.db.prepare(`SELECT * FROM ${b.L3_NODES} WHERE ${P.L2_NODE_ID} = ?`).all(e)}catch(r){throw E.wrap(T.DB_QUERY_FAILED,ri.GET_BY_L2_NODE_ID_FAILED(e),r)}}upsertDecision(e){try{let r=ly(e.nodeType,e.title,e.content);return this.db.transaction(()=>{let i=this.db.prepare(`SELECT l3.* FROM ${b.L3_NODES} l3
72
+ ${r}`).digest("hex")}var Zi=class{constructor(e){this.db=e}db;getById(e){try{return this.db.prepare(`SELECT * FROM ${b.L3_NODES} WHERE id = ?`).get(e)}catch(r){throw E.wrap(T.DB_QUERY_FAILED,ti.GET_BY_ID_FAILED(e),r)}}getAllExportable(){try{return this.db.prepare(`SELECT * FROM ${b.L3_NODES} WHERE validity_status != '${cr.GARBAGE}'`).all()}catch(e){throw E.wrap(T.DB_QUERY_FAILED,ti.GET_ALL_EXPORTABLE_FAILED,e)}}getByL2NodeId(e){try{return this.db.prepare(`SELECT * FROM ${b.L3_NODES} WHERE ${P.L2_NODE_ID} = ?`).all(e)}catch(r){throw E.wrap(T.DB_QUERY_FAILED,ti.GET_BY_L2_NODE_ID_FAILED(e),r)}}upsertDecision(e){try{let r=ly(e.nodeType,e.title,e.content);return this.db.transaction(()=>{let i=this.db.prepare(`SELECT l3.* FROM ${b.L3_NODES} l3
73
73
  JOIN ${b.L2_NODES} l2 ON l2.id = l3.${P.L2_NODE_ID}
74
74
  WHERE l2.${P.PROJECT_ID} = ? AND l3.${P.CONTENT_HASH} = ?
75
75
  LIMIT 1`).get(e.projectId,r);if(i){let l=i.source_commits?JSON.parse(i.source_commits):[];return e.commitSha&&!l.includes(e.commitSha)&&l.push(e.commitSha),this.db.prepare(`UPDATE ${b.L3_NODES}
@@ -80,7 +80,7 @@ ${r}`).digest("hex")}var es=class{constructor(e){this.db=e}db;getById(e){try{ret
80
80
  (${P.L2_NODE_ID}, title, content, node_type, source_commits,
81
81
  initial_source_commits, commit_hash, ai_generated, confidence, source,
82
82
  ${P.CONTENT_HASH}, extraction_model, source_files, anchor_ranges)
83
- VALUES (?, ?, ?, ?, ?, ?, ?, 1, ?, ?, ?, ?, ?, ?)`).run(e.l2NodeId,e.title,e.content,e.nodeType,s,s,e.commitSha,e.confidence,e.source??xt.ANALYZE,r,e.extractionModel,JSON.stringify(e.sourceFiles),o);return this.db.prepare(`INSERT INTO ${b.DOCUVIA_META} (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value`).run("tierCProcessedThisRun","true"),{id:Number(a.lastInsertRowid),deduped:!1}}).immediate()}catch(r){throw E.wrap(T.DB_QUERY_FAILED,ri.UPSERT_DECISION_FAILED,r)}}importCard(e){try{return this.db.transaction(()=>{let n=this.db.prepare(`SELECT l3.* FROM ${b.L3_NODES} l3
83
+ VALUES (?, ?, ?, ?, ?, ?, ?, 1, ?, ?, ?, ?, ?, ?)`).run(e.l2NodeId,e.title,e.content,e.nodeType,s,s,e.commitSha,e.confidence,e.source??Gt.ANALYZE,r,e.extractionModel,JSON.stringify(e.sourceFiles),o);return this.db.prepare(`INSERT INTO ${b.DOCUVIA_META} (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value`).run("tierCProcessedThisRun","true"),{id:Number(a.lastInsertRowid),deduped:!1}}).immediate()}catch(r){throw E.wrap(T.DB_QUERY_FAILED,ti.UPSERT_DECISION_FAILED,r)}}importCard(e){try{return this.db.transaction(()=>{let n=this.db.prepare(`SELECT l3.* FROM ${b.L3_NODES} l3
84
84
  JOIN ${b.L2_NODES} l2 ON l2.id = l3.${P.L2_NODE_ID}
85
85
  WHERE l2.${P.PROJECT_ID} = (
86
86
  SELECT ${P.PROJECT_ID} FROM ${b.L2_NODES} WHERE id = ?
@@ -89,7 +89,7 @@ ${r}`).digest("hex")}var es=class{constructor(e){this.db=e}db;getById(e){try{ret
89
89
  (${P.L2_NODE_ID}, title, content, node_type, source_commits,
90
90
  initial_source_commits, ai_generated, source, ${P.CONTENT_HASH},
91
91
  extraction_model, source_files, created_at)
92
- VALUES (?, ?, ?, ?, ?, ?, 1, '${ay}', ?, ?, ?, ?)`).run(e.l2NodeId,e.title,e.content,e.nodeType,i,i,e.contentHash,e.extractionModel,JSON.stringify(e.sourceFiles),e.createdAt);return this.db.prepare(`INSERT INTO ${b.DOCUVIA_META} (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value`).run("tierCProcessedThisRun","true"),{id:Number(s.lastInsertRowid),imported:!0}}).immediate()}catch(r){throw E.wrap(T.DB_QUERY_FAILED,ri.IMPORT_CARD_FAILED,r)}}updateValidityStatus(e,r){try{this.db.prepare(`UPDATE ${b.L3_NODES} SET validity_status = ? WHERE id = ? AND validity_status != ?`).run(r,e,r)}catch(n){throw E.wrap(T.DB_QUERY_FAILED,ri.UPDATE_VALIDITY_STATUS_FAILED(e),n)}}};var of={SEARCH_L2_FAILED:"Failed to search l2 nodes via FTS",SEARCH_L3_FAILED:"Failed to search l3 nodes via FTS"},ts=class{constructor(e){this.db=e}db;searchL2Nodes(e,r){try{let n=oo(e,"AND");if(n){let s=this.runL2Match(n,r);if(s.length>0)return s}let i=oo(e,"OR");return i?this.runL2Match(i,r):[]}catch(n){throw E.wrap(T.DB_QUERY_FAILED,of.SEARCH_L2_FAILED,n)}}searchL3Nodes(e,r){try{let n=oo(e,"AND");if(n){let s=this.runL3Match(n,r);if(s.length>0)return s}let i=oo(e,"OR");return i?this.runL3Match(i,r):[]}catch(n){throw E.wrap(T.DB_QUERY_FAILED,of.SEARCH_L3_FAILED,n)}}runL2Match(e,r){return this.db.prepare(`SELECT n.*
92
+ VALUES (?, ?, ?, ?, ?, ?, 1, '${ay}', ?, ?, ?, ?)`).run(e.l2NodeId,e.title,e.content,e.nodeType,i,i,e.contentHash,e.extractionModel,JSON.stringify(e.sourceFiles),e.createdAt);return this.db.prepare(`INSERT INTO ${b.DOCUVIA_META} (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value`).run("tierCProcessedThisRun","true"),{id:Number(s.lastInsertRowid),imported:!0}}).immediate()}catch(r){throw E.wrap(T.DB_QUERY_FAILED,ti.IMPORT_CARD_FAILED,r)}}updateValidityStatus(e,r){try{this.db.prepare(`UPDATE ${b.L3_NODES} SET validity_status = ? WHERE id = ? AND validity_status != ?`).run(r,e,r)}catch(n){throw E.wrap(T.DB_QUERY_FAILED,ti.UPDATE_VALIDITY_STATUS_FAILED(e),n)}}};var of={SEARCH_L2_FAILED:"Failed to search l2 nodes via FTS",SEARCH_L3_FAILED:"Failed to search l3 nodes via FTS"},es=class{constructor(e){this.db=e}db;searchL2Nodes(e,r){try{let n=so(e,"AND");if(n){let s=this.runL2Match(n,r);if(s.length>0)return s}let i=so(e,"OR");return i?this.runL2Match(i,r):[]}catch(n){throw E.wrap(T.DB_QUERY_FAILED,of.SEARCH_L2_FAILED,n)}}searchL3Nodes(e,r){try{let n=so(e,"AND");if(n){let s=this.runL3Match(n,r);if(s.length>0)return s}let i=so(e,"OR");return i?this.runL3Match(i,r):[]}catch(n){throw E.wrap(T.DB_QUERY_FAILED,of.SEARCH_L3_FAILED,n)}}runL2Match(e,r){return this.db.prepare(`SELECT n.*
93
93
  FROM ${b.L2_NODES_FTS} f
94
94
  JOIN ${b.L2_NODES} n ON n.id = f.rowid
95
95
  WHERE ${b.L2_NODES_FTS} MATCH ?
@@ -99,12 +99,12 @@ ${r}`).digest("hex")}var es=class{constructor(e){this.db=e}db;getById(e){try{ret
99
99
  JOIN ${b.L3_NODES} n ON n.id = f.rowid
100
100
  WHERE ${b.L3_NODES_FTS} MATCH ?
101
101
  ORDER BY rank
102
- LIMIT ?`).all(e,r)}};function oo(t,e){let r=t.map(n=>n.replace(/"/g,"").trim()).filter(n=>n.length>0).map(n=>`"${n}"`);return r.length>0?r.join(` ${e} `):null}var af={READ_FAILED:t=>`Failed to read meta key "${t}"`,WRITE_FAILED:t=>`Failed to write meta key "${t}"`},ao=class{constructor(e){this.db=e}db;get(e){try{return this.db.prepare(`SELECT value FROM ${b.DOCUVIA_META} WHERE key = ?`).get(e)?.value}catch(r){throw E.wrap(T.DB_QUERY_FAILED,af.READ_FAILED(e),r)}}set(e,r){try{this.db.prepare(`INSERT INTO ${b.DOCUVIA_META} (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value`).run(e,r)}catch(n){throw E.wrap(T.DB_QUERY_FAILED,af.WRITE_FAILED(e),n)}}};var rs=class{constructor(e){this.db=e}db;deleteForFile(e,r){this.db.prepare(`DELETE FROM ${b.AST_CALL_SITES} WHERE ${P.PROJECT_ID} = ? AND ${P.FILE_PATH} = ?`).run(e,r)}insertMany(e,r,n){if(n.length===0)return;let i=this.db.prepare(`INSERT INTO ${b.AST_CALL_SITES} (${P.PROJECT_ID}, ${P.FILE_PATH}, ${P.TARGET_FUNCTION}, ${P.START_LINE}, ${P.START_COLUMN}, ${P.CALLEE_NAME}, ${P.RECEIVER_TEXT}, ${P.CALLEE_KIND})
102
+ LIMIT ?`).all(e,r)}};function so(t,e){let r=t.map(n=>n.replace(/"/g,"").trim()).filter(n=>n.length>0).map(n=>`"${n}"`);return r.length>0?r.join(` ${e} `):null}var af={READ_FAILED:t=>`Failed to read meta key "${t}"`,WRITE_FAILED:t=>`Failed to write meta key "${t}"`},oo=class{constructor(e){this.db=e}db;get(e){try{return this.db.prepare(`SELECT value FROM ${b.DOCUVIA_META} WHERE key = ?`).get(e)?.value}catch(r){throw E.wrap(T.DB_QUERY_FAILED,af.READ_FAILED(e),r)}}set(e,r){try{this.db.prepare(`INSERT INTO ${b.DOCUVIA_META} (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value`).run(e,r)}catch(n){throw E.wrap(T.DB_QUERY_FAILED,af.WRITE_FAILED(e),n)}}};var ts=class{constructor(e){this.db=e}db;deleteForFile(e,r){this.db.prepare(`DELETE FROM ${b.AST_CALL_SITES} WHERE ${P.PROJECT_ID} = ? AND ${P.FILE_PATH} = ?`).run(e,r)}insertMany(e,r,n){if(n.length===0)return;let i=this.db.prepare(`INSERT INTO ${b.AST_CALL_SITES} (${P.PROJECT_ID}, ${P.FILE_PATH}, ${P.TARGET_FUNCTION}, ${P.START_LINE}, ${P.START_COLUMN}, ${P.CALLEE_NAME}, ${P.RECEIVER_TEXT}, ${P.CALLEE_KIND})
103
103
  VALUES (?, ?, ?, ?, ?, ?, ?, ?)`);for(let s of n)i.run(e,r,s.targetFunction,s.startLine,s.startColumn,s.calleeName??null,s.receiverText??null,s.calleeKind??null)}getForFiles(e,r){let n=new Map;if(r.length===0)return n;let i=r.map(()=>"?").join(","),s=this.db.prepare(`SELECT ${P.FILE_PATH}, ${P.TARGET_FUNCTION}, ${P.START_LINE}, ${P.START_COLUMN}
104
104
  FROM ${b.AST_CALL_SITES}
105
105
  WHERE ${P.PROJECT_ID} = ? AND ${P.FILE_PATH} IN (${i})`).all(e,...r);for(let o of s){let a={targetFunction:o.target_function,startLine:o.start_line,startColumn:o.start_column},l=n.get(o.file_path);l?l.push(a):n.set(o.file_path,[a])}return n}getByTargetFunctions(e,r){let n=new Map;if(r.length===0)return n;let i=r.map(()=>"?").join(","),s=this.db.prepare(`SELECT ${P.FILE_PATH}, ${P.START_LINE}, ${P.START_COLUMN}
106
106
  FROM ${b.AST_CALL_SITES}
107
- WHERE ${P.PROJECT_ID} = ? AND (${P.TARGET_FUNCTION} IN (${i}) OR ${P.CALLEE_NAME} IN (${i}))`).all(e,...r,...r);for(let o of s){let a={startLine:o.start_line,startColumn:o.start_column},l=n.get(o.file_path);l?l.push(a):n.set(o.file_path,[a])}return n}};var uy=1e4,dy=100,py=6e4,gy=".init-lock",Ur={INIT_LOCK_ACQUIRE_FAILED:"Failed to acquire database init lock",INIT_LOCK_TIMED_OUT:t=>`Timed out waiting for the database init lock at ${t} \u2014 another Docuvia process may be stuck`,OPEN_FAILED:t=>`Failed to open database at ${t}`,INVALID_DB_PATH:"Invalid database path: dbPath must be a non-empty string without NUL bytes",NOT_FOUND:t=>`Local database not found at ${t}. Please run "docuvia init".`,MIGRATIONS_FAILED:"Failed to apply migrations",PRUNE_MISSING_FILES_FAILED:"Failed to prune missing files"};function fy(t){if(!(!(t instanceof Error)||!("code"in t)))return t.code}function my(t){if(typeof t!="string"||t.length===0||t.includes("\0"))throw new E(T.INVALID_INPUT,Ur.INVALID_DB_PATH)}async function hy(t){let e=`${t}${gy}`,r=Date.now()+uy;for(;;)try{return await(await lo.open(e,"wx")).close(),e}catch(n){let i=fy(n);if(i!==Wn&&i!==gn&&i!==jn&&i!==Vn)throw E.wrap(T.DB_LOCKED,Ur.INIT_LOCK_ACQUIRE_FAILED,n);let s=await lo.stat(e).catch(()=>{});if(s&&Date.now()-s.mtimeMs>py){await lo.rm(e,{force:!0});continue}if(Date.now()>r)throw new E(T.DB_LOCKED,Ur.INIT_LOCK_TIMED_OUT(e));await new Promise(o=>setTimeout(o,dy))}}async function Ey(t){await lo.rm(t,{force:!0})}var ns=class t{constructor(e){this.db=e;this.projectsRepo=new qi(e),this.filesRepo=new Qi(e),this.tagsRepo=new Xi(e),this.graphRepo=new Zi(e),this.l3Repo=new es(e),this.ftsRepo=new ts(e),this.metaRepo=new ao(e),this.callSitesRepo=new rs(e)}db;lock=new so;projectsRepo;filesRepo;tagsRepo;graphRepo;l3Repo;ftsRepo;metaRepo;callSitesRepo;static async open(e){if(my(e.dbPath),lf.mkdirSync(cy.dirname(e.dbPath),{recursive:!0}),e.readonly&&!lf.existsSync(e.dbPath))throw new E(T.DB_NOT_FOUND,Ur.NOT_FOUND(e.dbPath));let r=e.readonly?void 0:await hy(e.dbPath).catch(n=>{throw E.wrap(T.DB_OPEN_FAILED,Ur.OPEN_FAILED(e.dbPath),n)});try{let n=e.readonly?new cf(e.dbPath,{readonly:!0,fileMustExist:!0}):new cf(e.dbPath);if(n.pragma(`${ei.BUSY_TIMEOUT} = ${Sn.BUSY_TIMEOUT_MS}`),!e.readonly){n.pragma(`${ei.JOURNAL_MODE} = ${Sn.JOURNAL_MODE}`),n.pragma(`${ei.SYNCHRONOUS} = ${Sn.SYNCHRONOUS}`);try{Rc(n,yc)}catch(i){throw new E(T.DB_MIGRATION_FAILED,Ur.MIGRATIONS_FAILED,i)}}return new t(n)}catch(n){throw E.wrap(T.DB_OPEN_FAILED,Ur.OPEN_FAILED(e.dbPath),n)}finally{r&&await Ey(r)}}async close(){this.db.close()}get projects(){return this.projectsRepo}get files(){return this.filesRepo}get tags(){return this.tagsRepo}get graph(){return this.graphRepo}get l3(){return this.l3Repo}get fts(){return this.ftsRepo}get meta(){return this.metaRepo}get callSites(){return this.callSitesRepo}async withWriteLock(e){return this.lock.runWrite(e)}async withReadLock(e){return this.lock.runRead(e)}withTransaction(e){return this.db.transaction(e).immediate()}pruneMissingFiles(e){try{let r=new Set(e),n=this.db.prepare(`SELECT id, ${P.PATH_PATTERNS} FROM ${b.L2_NODES}`).all().filter(o=>{let a;try{a=o.path_patterns?JSON.parse(o.path_patterns):[]}catch{a=[]}return a.length===0||a.every(l=>!r.has(l))}).map(o=>o.id);return{prunedFiles:this.db.transaction(o=>{if(o.length>0){let c=o.map(()=>"?").join(",");this.db.prepare(`DELETE FROM ${b.L2_NODE_L1_TAGS} WHERE ${P.L2_NODE_ID} IN (${c})`).run(...o),this.db.prepare(`DELETE FROM ${b.NODE_LINKS} WHERE ${P.SOURCE_NODE_ID} IN (${c}) OR ${P.TARGET_NODE_ID} IN (${c})`).run(...o,...o),this.db.prepare(`DELETE FROM ${b.L2_NODES} WHERE id IN (${c})`).run(...o)}let l=this.db.prepare(`SELECT ${P.FILE_PATH} FROM ${b.PROJECT_FILES}`).all().filter(c=>!r.has(c.file_path));for(let{file_path:c}of l)this.db.prepare(`DELETE FROM ${b.PROJECT_FILES} WHERE ${P.FILE_PATH} = ?`).run(c);return l.length})(n),prunedNodes:n.length}}catch(r){throw E.wrap(T.DB_QUERY_FAILED,Ur.PRUNE_MISSING_FILES_FAILED,r)}}};import _y from"fs/promises";import Sy from"better-sqlite3";var Tn={CONNECTION:"sqlite_connection",INTEGRITY:"sqlite_integrity",WAL_BLOAT:"sqlite_wal_bloat",ABI_MISMATCH:"sqlite_abi_mismatch"},Ty="NODE_MODULE_VERSION",uf="ok",pt={CONNECTION_FAILED:"Failed to open SQLite database",CONNECTION_SUGGESTION:"Ensure you have read/write permissions for the .docuvia directory, or try running 'docuvia init' again.",INTEGRITY_PASSED:"Database integrity check passed",INTEGRITY_FAILED:"Database integrity check failed",INTEGRITY_CHECK_ERRORED:"Error running integrity check",CORRUPTION_SUGGESTION:"The database file might be corrupted. Consider running 'docuvia clean' and 'docuvia hydrate' to rebuild it.",WAL_TOO_LARGE:"WAL file is too large (>100MB)",WAL_SIZE_DETAILS:t=>`Size: ${t} MB`,WAL_BLOAT_SUGGESTION:"SQLite Write-Ahead Log has bloated. You can run 'docuvia clean' and re-initialize, or restart the agent to force a checkpoint.",WAL_SIZE_NORMAL:"WAL file size is normal",ABI_MISMATCH:"The better-sqlite3 native module was compiled for a different Node.js version than the one running this command (NODE_MODULE_VERSION drift).",ABI_MISMATCH_SUGGESTION:"Run `pnpm install --force` (or `pnpm rebuild better-sqlite3`) using the SAME Node.js version the CLI will resolve at runtime, or switch to a single pinned Node.js version (e.g. via nvm) so the native binding is rebuilt against the version you actually use."},Ay=100*1024*1024,co=class{async checkHealth(e){let r={},n;try{n=new Sy(e,{readonly:!0,fileMustExist:!0})}catch(i){return this.failConnection(r,String(i)),r}return await this.runHealthChecks(n,e,r),n.close(),r}failConnection(e,r){let n=r.includes(Ty);n&&(e[Tn.ABI_MISMATCH]={status:K.FAIL,message:pt.ABI_MISMATCH,details:r,suggestion:pt.ABI_MISMATCH_SUGGESTION}),e[Tn.CONNECTION]={status:K.FAIL,message:pt.CONNECTION_FAILED,details:r,suggestion:n?pt.ABI_MISMATCH_SUGGESTION:pt.CONNECTION_SUGGESTION}}async runHealthChecks(e,r,n){try{let i=e.pragma(ei.INTEGRITY_CHECK,{simple:!0});i===uf||Array.isArray(i)&&i[0]?.integrity_check===uf?n[Tn.INTEGRITY]={status:K.PASS,message:pt.INTEGRITY_PASSED}:n[Tn.INTEGRITY]={status:K.FAIL,message:pt.INTEGRITY_FAILED,details:JSON.stringify(i),suggestion:pt.CORRUPTION_SUGGESTION}}catch(i){n[Tn.INTEGRITY]={status:K.FAIL,message:pt.INTEGRITY_CHECK_ERRORED,details:String(i),suggestion:pt.CORRUPTION_SUGGESTION}}try{let i=r+Sn.WAL_FILE_SUFFIX,s=await _y.stat(i).catch(()=>null);s&&s.size>Ay?n[Tn.WAL_BLOAT]={status:K.FAIL,message:pt.WAL_TOO_LARGE,details:pt.WAL_SIZE_DETAILS((s.size/1024/1024).toFixed(2)),suggestion:pt.WAL_BLOAT_SUGGESTION}:n[Tn.WAL_BLOAT]={status:K.PASS,message:pt.WAL_SIZE_NORMAL}}catch{}}};y.register(A.GraphStoreOpener,()=>ns.open);y.register(A.DiagnosticRunnerDb,()=>new co);function st(t){if(t===null||typeof t!="object"||Array.isArray(t))return!1;let e=Object.getPrototypeOf(t);return(e===Object.prototype||e===null)&&Reflect.ownKeys(t).every(r=>df(t,r))}function df(t,e){let r=Object.getOwnPropertyDescriptor(t,e);return r?.enumerable===!0&&Object.hasOwn(r,"value")}function hr(t){if(!Array.isArray(t)||Object.getPrototypeOf(t)!==Array.prototype||Reflect.ownKeys(t).length!==t.length+1)return!1;for(let e=0;e<t.length;e++)if(!df(t,String(e)))return!1;return!0}function Rt(t,e,r=[]){let n=new Set([...e,...r]);return e.every(i=>Object.hasOwn(t,i))&&Reflect.ownKeys(t).every(i=>typeof i=="string"&&n.has(i))}function Qe(t){return typeof t=="string"&&t.trim().length>0}function pf(t){return typeof t=="number"&&Number.isFinite(t)&&t>=0&&t<=1}var is=["schemaVersion","requestId","featureSchemaVersion","evidence"],Oc=["repoId","worktreeId","projectId","snapshotHash","candidateSetHash","truncated"];function Ic(t){if(t.schemaVersion!==Bp||!Qe(t.requestId)||!Qe(t.featureSchemaVersion))return!1;let e=t.evidence;return st(e)&&Rt(e,Oc)&&Oc.filter(r=>r!=="truncated").every(r=>Qe(e[r]))&&e.truncated===!1}function gf(t,e){if(!Ic(e))return!1;let r=e.evidence;return e.schemaVersion===t.schemaVersion&&e.requestId===t.requestId&&e.featureSchemaVersion===t.featureSchemaVersion&&Oc.every(n=>r[n]===t.evidence[n])}var Ry=128*1024,yy=256,Oy=/^[a-f0-9]{64}$/;function gt(t){throw new E(T.SEMANTIC_CORPUS_INVALID,t)}function os(t,e){return(!st(t)||!Rt(t,e))&&gt("Invalid corpus record shape"),t}function po(t,e){e.every(r=>Qe(t[r]))||gt("Corpus identity must be nonblank")}function ss(t,e){(typeof t!="string"||!e.includes(t))&&gt("Unsupported corpus enum value")}function uo(t){(typeof t!="string"||!Oy.test(t))&&gt("Corpus hash must be lowercase SHA-256")}function ff(t,e=yy){return(!Array.isArray(t)||t.length>e||!hr(t))&&gt("Invalid or oversized corpus array"),t}function ni(t){let e=ff(t);return(!e.every(Qe)||new Set(e).size!==e.length)&&gt("Corpus references must be nonblank and unique"),e}function Iy(t){let e=["repoId","repoFamily","revision","projectId","callSiteId","snapshotHash","duplicateGroup","license","language","relation"],r=os(t,[...e,"usage","origin","split"]);po(r,e),uo(r.snapshotHash),ss(r.usage,["evaluation-only","training-and-evaluation"]),ss(r.origin,["real","synthetic"]),ss(r.split,["train","calibration","test","temporal"])}function Ly(t){let e=os(t,["status","server","version","configHash","snapshotHash","targetIds"]);po(e,["server","version"]),uo(e.configHash),uo(e.snapshotHash),ss(e.status,["resolved","timeout","empty","not-ready","unsupported","error"]),ni(e.targetIds)}function Cy(t){let e=os(t,["status","snapshotHash","positiveTargetIds","negativeTargetIds","evidenceRefs"]);uo(e.snapshotHash),ss(e.status,["confirmed","unreviewed","conflict","out-of-scope"]),ni(e.positiveTargetIds),ni(e.negativeTargetIds);let r=ni(e.evidenceRefs);e.status==="confirmed"&&r.length===0&&gt("Confirmed gold requires independent evidence")}function Ny(t){let e=ff(t,Kn.MAX_CANDIDATES),r=[],n=[];for(let i of e){let s=os(i,["id","targetId"]);po(s,["id","targetId"]),r.push(s.id),n.push(s.targetId)}ni(r),ni(n)}function go(t){try{let e=os(t,["schemaVersion","sampleId","source","candidates","truncated","oracle","review"]);(e.schemaVersion!==1||typeof e.truncated!="boolean")&&gt("Invalid corpus version or truncation flag"),po(e,["sampleId"]),Iy(e.source),Ny(e.candidates),Ly(e.oracle),Cy(e.review);let r=JSON.stringify(e);return Buffer.byteLength(r,"utf8")>Ry&&gt("Corpus record exceeds 128 KiB"),JSON.parse(r)}catch(e){throw E.wrap(T.SEMANTIC_CORPUS_INVALID,"Invalid corpus sample",e)}}function Py(t){let{oracle:e,review:r}=t;return r.status==="conflict"?!0:r.status!=="confirmed"?!1:r.positiveTargetIds.some(n=>r.negativeTargetIds.includes(n))?!0:e.status!=="resolved"||e.targetIds.length===0?!1:e.targetIds.length!==r.positiveTargetIds.length||e.targetIds.some(n=>!r.positiveTargetIds.includes(n))}function Dy(t){return t.source.language!=="typescript"||t.source.relation!=="cross-file-call"||t.review.status==="out-of-scope"}function vy(t){let{source:e,oracle:r,review:n}=t;return e.snapshotHash!==r.snapshotHash||e.snapshotHash!==n.snapshotHash?"freshness-mismatch":Py(t)?"label-conflict":Dy(t)?"out-of-scope":r.status!=="resolved"||r.targetIds.length===0?"oracle-failure":n.status!=="confirmed"?"unreviewed":t.truncated?"input-truncated":"ready"}function by(t,e,r){return e==="out-of-scope"?"out-of-scope":e!=="ready"?"unresolved":r.review.positiveTargetIds.includes(t)?"confirmed-positive":r.review.negativeTargetIds.includes(t)?"confirmed-negative":"unresolved"}function fo(t){let e=vy(t),r=new Set(t.candidates.map(i=>i.targetId)),n=e==="ready"?[...t.review.positiveTargetIds]:[];return{sampleId:t.sampleId,reason:e,labels:t.candidates.map(i=>({candidateId:i.id,targetId:i.targetId,label:by(i.targetId,e,t)})),goldTargetIds:n,missingTargetIds:n.filter(i=>!r.has(i))}}var wy=1e5;function mf(t,e){new Set(t).size!==t.length&&gt(e)}function Lc(t,e,r,n){if(t.has(e)&&t.get(e)!==r)throw new E(n?T.SEMANTIC_CORPUS_LEAKAGE:T.SEMANTIC_CORPUS_INVALID,n?"Corpus group crosses splits":"Repository has inconsistent family identity");t.set(e,r)}function Fy(t){mf(t.map(i=>i.sampleId),"Duplicate corpus sample ID"),mf(t.map(i=>JSON.stringify([i.source.repoId,i.source.projectId,i.source.callSiteId,i.source.snapshotHash])),"Duplicate corpus call-site snapshot");let e=new Map,r=new Map,n=new Map;for(let{source:i}of t)if(Lc(e,i.repoId,i.repoFamily,!1),Lc(r,i.repoFamily,i.split==="temporal"?"test":i.split,!0),Lc(n,i.duplicateGroup,i.split,!0),i.usage==="evaluation-only"&&i.split==="train")throw new E(T.SEMANTIC_CORPUS_LEAKAGE,"Evaluation-only source cannot enter training split")}function hf(t){try{(!st(t)||!Rt(t,["schemaVersion","corpusId","corpusVersion","splitSeed","samples"]))&&gt("Invalid corpus manifest shape"),(t.schemaVersion!==1||![t.corpusId,t.corpusVersion,t.splitSeed].every(Qe))&&gt("Invalid corpus manifest identity");let e=t.samples;(!Array.isArray(e)||e.length>wy||!hr(e))&&gt("Invalid or oversized corpus sample list");let r=e.map(go).sort((n,i)=>n.sampleId<i.sampleId?-1:n.sampleId>i.sampleId?1:0);return Fy(r),{schemaVersion:1,corpusId:t.corpusId,corpusVersion:t.corpusVersion,splitSeed:t.splitSeed,samples:r}}catch(e){throw E.wrap(T.SEMANTIC_CORPUS_INVALID,"Invalid corpus manifest",e)}}import{createHash as My}from"crypto";var Cc=["train","calibration","test","temporal"],Ef=["real","synthetic"];function mo(t,e){let r=0,n=0,i=0,s=0;for(let o of t){let a=e.get(o.sampleId).reason;if(a!=="ready"&&a!=="input-truncated")continue;let l=o.review.positiveTargetIds,c=new Set(o.candidates.map(p=>p.targetId)),u=l.filter(p=>c.has(p)).length;r++,n+=l.length,i+=u,u===l.length&&s++}return{requests:t.length,trustedGoldRequests:r,goldTargets:n,coveredTargets:i,fullyCoveredRequests:s,candidateRecall:n===0?null:i/n,setCoverage:r===0?null:s/r}}function Nc(t,e,r){let n={train:0,calibration:0,test:0,temporal:0};for(let i of Cc){let s=t.filter(o=>o.source.origin==="real"&&o.source.split===i&&e.get(o.sampleId).reason==="ready");n[i]=new Set(s.map(o=>o.source[r])).size}return n}function _f(t,e){return e.train>=4&&e.calibration>=2&&e.test>=2&&t.train+t.calibration+t.test>=1e4&&t.test>=2e3&&t.temporal>=1}function Pc(t){if(Array.isArray(t))return`[${t.map(Pc).join(",")}]`;if(t!==null&&typeof t=="object"){let e=t;return`{${Object.keys(e).sort().map(r=>`${JSON.stringify(r)}:${Pc(e[r])}`).join(",")}}`}return JSON.stringify(t)}function ky(t){return t===null?"insufficient-evidence":t>=.99?"pass":"fail"}function Sf(t){let{samples:e,...r}=t,n=e.map(fo),i=new Map(n.map(d=>[d.sampleId,d])),s={ready:0,"freshness-mismatch":0,"label-conflict":0,"out-of-scope":0,"oracle-failure":0,unreviewed:0,"input-truncated":0};for(let d of n)s[d.reason]++;let o=mo(e.filter(d=>d.source.origin==="real"),i),a=mo(e.filter(d=>d.source.origin==="synthetic"),i),l=Nc(e,i,"duplicateGroup"),c=Nc(e,i,"repoFamily"),u=Ef.flatMap(d=>Cc.map(f=>({origin:d,split:f,metrics:mo(e.filter(m=>m.source.origin===d&&m.source.split===f),i)}))),p=u.find(d=>d.origin==="real"&&d.split==="test").metrics.candidateRecall;return{...r,datasetHash:My("sha256").update(Pc(t),"utf8").digest("hex"),results:n,reasons:s,real:o,synthetic:a,slices:u,independentReadyRealRequests:l,readyRealFamilies:c,gates:{sampleSize:_f(l,c)?"pass":"insufficient-evidence",candidateRecall:ky(p)}}}var ho=class{label(e){return fo(go(e))}audit(e){return Sf(hf(e))}};import Tf from"fs/promises";import Gy from"os";import xy from"path";var j={DETECTED_CHANGES:"Detected changes",WORKING_TREE_HEAD:"working tree (HEAD)",NO_LOCAL_GRAPH_IMPACT:"No local graph impact detected for the changed files.",TOP_AFFECTED_FILES:"Top affected files:",analysisBase:t=>`Base: ${t}`,analysisFilesChanged:t=>`Files changed: ${t}`,analysisRiskLevel:t=>`Risk level: ${t}`,analysisImpactedNodes:(t,e)=>`Impacted nodes: ${t} across ${e} changed file(s).`,analysisAffectedFileLine:(t,e,r)=>` - ${t}: ${e} dependent(s) [${r}]`,KNOWLEDGE_BRANCH_ALREADY_EXISTS:"Knowledge branch already exists",CONCURRENT_INITIAL_COMMIT_SKIPPED:"Knowledge branch was created by a concurrent process; skipping duplicate initial commit",CREATED_KNOWLEDGE_BRANCH:"Created hidden knowledge branch",NO_GIT_HOOKS_DIR:"No .git/hooks directory; skipping post-commit hook install",POST_COMMIT_HOOK_ALREADY_INSTALLED:"Post-commit hook already installed",CONCURRENT_HOOK_INSTALL_SKIPPED:"Post-commit hook was installed by a concurrent process; skipping duplicate append",FAILED_TO_INSTALL_HOOK:"Failed to install post-commit hook",INSTALLED_POST_COMMIT_HOOK:"Installed post-commit hook",UPGRADED_LEGACY_POST_COMMIT_HOOK:"Upgraded legacy post-commit hook (docuvia snapshot -> docuvia analyze)",UPGRADED_POST_COMMIT_HOOK_FLUSH_L3:"Upgraded post-commit hook (added flush-staged-l3 step, issue #42)",UPGRADED_POST_COMMIT_HOOK_NOHUP:"Upgraded post-commit hook (nohup + log redirect, issue #58)",PRE_PUSH_HOOK_ALREADY_INSTALLED:"Pre-push hook already installed",CONCURRENT_PRE_PUSH_HOOK_INSTALL_SKIPPED:"Pre-push hook was installed by a concurrent process; skipping duplicate append",FAILED_TO_INSTALL_PRE_PUSH_HOOK:"Failed to install pre-push hook",INSTALLED_PRE_PUSH_HOOK:"Installed pre-push hook",UPGRADED_LEGACY_PRE_PUSH_HOOK:"Upgraded legacy pre-push hook (added sync-knowledge step)",REMOVED_POST_COMMIT_HOOK:"Removed post-commit hook",REMOVED_PRE_PUSH_HOOK:"Removed pre-push hook",NO_POST_COMMIT_HOOK_TO_REMOVE:"No Docuvia post-commit hook to remove",NO_PRE_PUSH_HOOK_TO_REMOVE:"No Docuvia pre-push hook to remove",FAILED_TO_REMOVE_POST_COMMIT_HOOK:"Failed to remove post-commit hook",FAILED_TO_REMOVE_PRE_PUSH_HOOK:"Failed to remove pre-push hook",NO_KNOWLEDGE_BRANCH_TO_DELETE:"No knowledge branch to delete",DELETED_KNOWLEDGE_BRANCH:"Deleted hidden knowledge branch",FAILED_TO_DELETE_KNOWLEDGE_BRANCH:"Failed to delete knowledge branch",REPAIRED_DUPLICATE_POST_COMMIT_HOOK:"Repaired duplicate post-commit hook block",NOTHING_TO_REPAIR:"Nothing to repair -- post-commit hook is not duplicated",PACKED_SNAPSHOT_ONTO_BRANCH:"Packed snapshot onto knowledge branch",NO_REMOTE_SKIP_RECONCILIATION:"No remote configured; skipping knowledge branch reconciliation",FAILED_TO_FETCH_CONTINUING_OFFLINE:"Failed to fetch knowledge branch from remote; continuing offline",REMOTE_REF_NOT_FOUND_TEXT:"couldn't find remote ref",REMOTE_KNOWLEDGE_BRANCH_NOT_YET_ON_REMOTE:"Knowledge branch does not exist on remote yet; treating as first-ever push",ADOPTED_REMOTE_BRANCH:"Adopted remote knowledge branch (no local copy existed)",FAST_FORWARDED_LOCAL_BRANCH:"Fast-forwarded local knowledge branch to remote",MERGED_DIVERGED_BRANCH:"Merged diverged knowledge branch",FAILED_TO_PUSH_WILL_RETRY:"Failed to push knowledge branch to remote; will retry on next sync",SNAPSHOT_UNKNOWN:"Snapshot [unknown]",MERGE_WINNER_LOCAL:"local",MERGE_WINNER_REMOTE:"remote",mergeCommitMessage:t=>`Merge knowledge branch (${t?"local":"remote"} wins)`,snapshotCommitMessage:t=>`Snapshot [${t.slice(0,7)}]
107
+ WHERE ${P.PROJECT_ID} = ? AND (${P.TARGET_FUNCTION} IN (${i}) OR ${P.CALLEE_NAME} IN (${i}))`).all(e,...r,...r);for(let o of s){let a={startLine:o.start_line,startColumn:o.start_column},l=n.get(o.file_path);l?l.push(a):n.set(o.file_path,[a])}return n}};var uy=1e4,dy=100,py=6e4,gy=".init-lock",xr={INIT_LOCK_ACQUIRE_FAILED:"Failed to acquire database init lock",INIT_LOCK_TIMED_OUT:t=>`Timed out waiting for the database init lock at ${t} \u2014 another Docuvia process may be stuck`,OPEN_FAILED:t=>`Failed to open database at ${t}`,INVALID_DB_PATH:"Invalid database path: dbPath must be a non-empty string without NUL bytes",NOT_FOUND:t=>`Local database not found at ${t}. Please run "docuvia init".`,MIGRATIONS_FAILED:"Failed to apply migrations",PRUNE_MISSING_FILES_FAILED:"Failed to prune missing files"};function fy(t){if(!(!(t instanceof Error)||!("code"in t)))return t.code}function my(t){if(typeof t!="string"||t.length===0||t.includes("\0"))throw new E(T.INVALID_INPUT,xr.INVALID_DB_PATH)}async function hy(t){let e=`${t}${gy}`,r=Date.now()+uy;for(;;)try{return await(await ao.open(e,"wx")).close(),e}catch(n){let i=fy(n);if(i!==Yn&&i!==pn&&i!==Wn&&i!==jn)throw E.wrap(T.DB_LOCKED,xr.INIT_LOCK_ACQUIRE_FAILED,n);let s=await ao.stat(e).catch(()=>{});if(s&&Date.now()-s.mtimeMs>py){await ao.rm(e,{force:!0});continue}if(Date.now()>r)throw new E(T.DB_LOCKED,xr.INIT_LOCK_TIMED_OUT(e));await new Promise(o=>setTimeout(o,dy))}}async function Ey(t){await ao.rm(t,{force:!0})}var rs=class t{constructor(e){this.db=e;this.projectsRepo=new Ji(e),this.filesRepo=new qi(e),this.tagsRepo=new Qi(e),this.graphRepo=new Xi(e),this.l3Repo=new Zi(e),this.ftsRepo=new es(e),this.metaRepo=new oo(e),this.callSitesRepo=new ts(e)}db;lock=new io;projectsRepo;filesRepo;tagsRepo;graphRepo;l3Repo;ftsRepo;metaRepo;callSitesRepo;static async open(e){if(my(e.dbPath),lf.mkdirSync(cy.dirname(e.dbPath),{recursive:!0}),e.readonly&&!lf.existsSync(e.dbPath))throw new E(T.DB_NOT_FOUND,xr.NOT_FOUND(e.dbPath));let r=e.readonly?void 0:await hy(e.dbPath).catch(n=>{throw E.wrap(T.DB_OPEN_FAILED,xr.OPEN_FAILED(e.dbPath),n)});try{let n=e.readonly?new cf(e.dbPath,{readonly:!0,fileMustExist:!0}):new cf(e.dbPath);if(n.pragma(`${Zn.BUSY_TIMEOUT} = ${_n.BUSY_TIMEOUT_MS}`),!e.readonly){n.pragma(`${Zn.JOURNAL_MODE} = ${_n.JOURNAL_MODE}`),n.pragma(`${Zn.SYNCHRONOUS} = ${_n.SYNCHRONOUS}`);try{Ac(n,Rc)}catch(i){throw new E(T.DB_MIGRATION_FAILED,xr.MIGRATIONS_FAILED,i)}}return new t(n)}catch(n){throw E.wrap(T.DB_OPEN_FAILED,xr.OPEN_FAILED(e.dbPath),n)}finally{r&&await Ey(r)}}async close(){this.db.close()}get projects(){return this.projectsRepo}get files(){return this.filesRepo}get tags(){return this.tagsRepo}get graph(){return this.graphRepo}get l3(){return this.l3Repo}get fts(){return this.ftsRepo}get meta(){return this.metaRepo}get callSites(){return this.callSitesRepo}async withWriteLock(e){return this.lock.runWrite(e)}async withReadLock(e){return this.lock.runRead(e)}withTransaction(e){return this.db.transaction(e).immediate()}pruneMissingFiles(e){try{let r=new Set(e),n=this.db.prepare(`SELECT id, ${P.PATH_PATTERNS} FROM ${b.L2_NODES}`).all().filter(o=>{let a;try{a=o.path_patterns?JSON.parse(o.path_patterns):[]}catch{a=[]}return a.length===0||a.every(l=>!r.has(l))}).map(o=>o.id);return{prunedFiles:this.db.transaction(o=>{if(o.length>0){let c=o.map(()=>"?").join(",");this.db.prepare(`DELETE FROM ${b.L2_NODE_L1_TAGS} WHERE ${P.L2_NODE_ID} IN (${c})`).run(...o),this.db.prepare(`DELETE FROM ${b.NODE_LINKS} WHERE ${P.SOURCE_NODE_ID} IN (${c}) OR ${P.TARGET_NODE_ID} IN (${c})`).run(...o,...o),this.db.prepare(`DELETE FROM ${b.L2_NODES} WHERE id IN (${c})`).run(...o)}let l=this.db.prepare(`SELECT ${P.FILE_PATH} FROM ${b.PROJECT_FILES}`).all().filter(c=>!r.has(c.file_path));for(let{file_path:c}of l)this.db.prepare(`DELETE FROM ${b.PROJECT_FILES} WHERE ${P.FILE_PATH} = ?`).run(c);return l.length})(n),prunedNodes:n.length}}catch(r){throw E.wrap(T.DB_QUERY_FAILED,xr.PRUNE_MISSING_FILES_FAILED,r)}}};import _y from"fs/promises";import Sy from"better-sqlite3";var Sn={CONNECTION:"sqlite_connection",INTEGRITY:"sqlite_integrity",WAL_BLOAT:"sqlite_wal_bloat",ABI_MISMATCH:"sqlite_abi_mismatch"},Ty="NODE_MODULE_VERSION",uf="ok",dt={CONNECTION_FAILED:"Failed to open SQLite database",CONNECTION_SUGGESTION:"Ensure you have read/write permissions for the .docuvia directory, or try running 'docuvia init' again.",INTEGRITY_PASSED:"Database integrity check passed",INTEGRITY_FAILED:"Database integrity check failed",INTEGRITY_CHECK_ERRORED:"Error running integrity check",CORRUPTION_SUGGESTION:"The database file might be corrupted. Consider running 'docuvia clean' and 'docuvia hydrate' to rebuild it.",WAL_TOO_LARGE:"WAL file is too large (>100MB)",WAL_SIZE_DETAILS:t=>`Size: ${t} MB`,WAL_BLOAT_SUGGESTION:"SQLite Write-Ahead Log has bloated. You can run 'docuvia clean' and re-initialize, or restart the agent to force a checkpoint.",WAL_SIZE_NORMAL:"WAL file size is normal",ABI_MISMATCH:"The better-sqlite3 native module was compiled for a different Node.js version than the one running this command (NODE_MODULE_VERSION drift).",ABI_MISMATCH_SUGGESTION:"Run `pnpm install --force` (or `pnpm rebuild better-sqlite3`) using the SAME Node.js version the CLI will resolve at runtime, or switch to a single pinned Node.js version (e.g. via nvm) so the native binding is rebuilt against the version you actually use."},Ay=100*1024*1024,lo=class{async checkHealth(e){let r={},n;try{n=new Sy(e,{readonly:!0,fileMustExist:!0})}catch(i){return this.failConnection(r,String(i)),r}return await this.runHealthChecks(n,e,r),n.close(),r}failConnection(e,r){let n=r.includes(Ty);n&&(e[Sn.ABI_MISMATCH]={status:K.FAIL,message:dt.ABI_MISMATCH,details:r,suggestion:dt.ABI_MISMATCH_SUGGESTION}),e[Sn.CONNECTION]={status:K.FAIL,message:dt.CONNECTION_FAILED,details:r,suggestion:n?dt.ABI_MISMATCH_SUGGESTION:dt.CONNECTION_SUGGESTION}}async runHealthChecks(e,r,n){try{let i=e.pragma(Zn.INTEGRITY_CHECK,{simple:!0});i===uf||Array.isArray(i)&&i[0]?.integrity_check===uf?n[Sn.INTEGRITY]={status:K.PASS,message:dt.INTEGRITY_PASSED}:n[Sn.INTEGRITY]={status:K.FAIL,message:dt.INTEGRITY_FAILED,details:JSON.stringify(i),suggestion:dt.CORRUPTION_SUGGESTION}}catch(i){n[Sn.INTEGRITY]={status:K.FAIL,message:dt.INTEGRITY_CHECK_ERRORED,details:String(i),suggestion:dt.CORRUPTION_SUGGESTION}}try{let i=r+_n.WAL_FILE_SUFFIX,s=await _y.stat(i).catch(()=>null);s&&s.size>Ay?n[Sn.WAL_BLOAT]={status:K.FAIL,message:dt.WAL_TOO_LARGE,details:dt.WAL_SIZE_DETAILS((s.size/1024/1024).toFixed(2)),suggestion:dt.WAL_BLOAT_SUGGESTION}:n[Sn.WAL_BLOAT]={status:K.PASS,message:dt.WAL_SIZE_NORMAL}}catch{}}};y.register(A.GraphStoreOpener,()=>rs.open);y.register(A.DiagnosticRunnerDb,()=>new lo);function it(t){if(t===null||typeof t!="object"||Array.isArray(t))return!1;let e=Object.getPrototypeOf(t);return(e===Object.prototype||e===null)&&Reflect.ownKeys(t).every(r=>df(t,r))}function df(t,e){let r=Object.getOwnPropertyDescriptor(t,e);return r?.enumerable===!0&&Object.hasOwn(r,"value")}function mr(t){if(!Array.isArray(t)||Object.getPrototypeOf(t)!==Array.prototype||Reflect.ownKeys(t).length!==t.length+1)return!1;for(let e=0;e<t.length;e++)if(!df(t,String(e)))return!1;return!0}function At(t,e,r=[]){let n=new Set([...e,...r]);return e.every(i=>Object.hasOwn(t,i))&&Reflect.ownKeys(t).every(i=>typeof i=="string"&&n.has(i))}function qe(t){return typeof t=="string"&&t.trim().length>0}function pf(t){return typeof t=="number"&&Number.isFinite(t)&&t>=0&&t<=1}var ns=["schemaVersion","requestId","featureSchemaVersion","evidence"],yc=["repoId","worktreeId","projectId","snapshotHash","candidateSetHash","truncated"];function Oc(t){if(t.schemaVersion!==Hp||!qe(t.requestId)||!qe(t.featureSchemaVersion))return!1;let e=t.evidence;return it(e)&&At(e,yc)&&yc.filter(r=>r!=="truncated").every(r=>qe(e[r]))&&e.truncated===!1}function gf(t,e){if(!Oc(e))return!1;let r=e.evidence;return e.schemaVersion===t.schemaVersion&&e.requestId===t.requestId&&e.featureSchemaVersion===t.featureSchemaVersion&&yc.every(n=>r[n]===t.evidence[n])}var Ry=128*1024,yy=256,Oy=/^[a-f0-9]{64}$/;function pt(t){throw new E(T.SEMANTIC_CORPUS_INVALID,t)}function ss(t,e){return(!it(t)||!At(t,e))&&pt("Invalid corpus record shape"),t}function uo(t,e){e.every(r=>qe(t[r]))||pt("Corpus identity must be nonblank")}function is(t,e){(typeof t!="string"||!e.includes(t))&&pt("Unsupported corpus enum value")}function co(t){(typeof t!="string"||!Oy.test(t))&&pt("Corpus hash must be lowercase SHA-256")}function ff(t,e=yy){return(!Array.isArray(t)||t.length>e||!mr(t))&&pt("Invalid or oversized corpus array"),t}function ri(t){let e=ff(t);return(!e.every(qe)||new Set(e).size!==e.length)&&pt("Corpus references must be nonblank and unique"),e}function Iy(t){let e=["repoId","repoFamily","revision","projectId","callSiteId","snapshotHash","duplicateGroup","license","language","relation"],r=ss(t,[...e,"usage","origin","split"]);uo(r,e),co(r.snapshotHash),is(r.usage,["evaluation-only","training-and-evaluation"]),is(r.origin,["real","synthetic"]),is(r.split,["train","calibration","test","temporal"])}function Ly(t){let e=ss(t,["status","server","version","configHash","snapshotHash","targetIds"]);uo(e,["server","version"]),co(e.configHash),co(e.snapshotHash),is(e.status,["resolved","timeout","empty","not-ready","unsupported","error"]),ri(e.targetIds)}function Cy(t){let e=ss(t,["status","snapshotHash","positiveTargetIds","negativeTargetIds","evidenceRefs"]);co(e.snapshotHash),is(e.status,["confirmed","unreviewed","conflict","out-of-scope"]),ri(e.positiveTargetIds),ri(e.negativeTargetIds);let r=ri(e.evidenceRefs);e.status==="confirmed"&&r.length===0&&pt("Confirmed gold requires independent evidence")}function Ny(t){let e=ff(t,Bn.MAX_CANDIDATES),r=[],n=[];for(let i of e){let s=ss(i,["id","targetId"]);uo(s,["id","targetId"]),r.push(s.id),n.push(s.targetId)}ri(r),ri(n)}function po(t){try{let e=ss(t,["schemaVersion","sampleId","source","candidates","truncated","oracle","review"]);(e.schemaVersion!==1||typeof e.truncated!="boolean")&&pt("Invalid corpus version or truncation flag"),uo(e,["sampleId"]),Iy(e.source),Ny(e.candidates),Ly(e.oracle),Cy(e.review);let r=JSON.stringify(e);return Buffer.byteLength(r,"utf8")>Ry&&pt("Corpus record exceeds 128 KiB"),JSON.parse(r)}catch(e){throw E.wrap(T.SEMANTIC_CORPUS_INVALID,"Invalid corpus sample",e)}}function Py(t){let{oracle:e,review:r}=t;return r.status==="conflict"?!0:r.status!=="confirmed"?!1:r.positiveTargetIds.some(n=>r.negativeTargetIds.includes(n))?!0:e.status!=="resolved"||e.targetIds.length===0?!1:e.targetIds.length!==r.positiveTargetIds.length||e.targetIds.some(n=>!r.positiveTargetIds.includes(n))}function Dy(t){return t.source.language!=="typescript"||t.source.relation!=="cross-file-call"||t.review.status==="out-of-scope"}function vy(t){let{source:e,oracle:r,review:n}=t;return e.snapshotHash!==r.snapshotHash||e.snapshotHash!==n.snapshotHash?"freshness-mismatch":Py(t)?"label-conflict":Dy(t)?"out-of-scope":r.status!=="resolved"||r.targetIds.length===0?"oracle-failure":n.status!=="confirmed"?"unreviewed":t.truncated?"input-truncated":"ready"}function by(t,e,r){return e==="out-of-scope"?"out-of-scope":e!=="ready"?"unresolved":r.review.positiveTargetIds.includes(t)?"confirmed-positive":r.review.negativeTargetIds.includes(t)?"confirmed-negative":"unresolved"}function go(t){let e=vy(t),r=new Set(t.candidates.map(i=>i.targetId)),n=e==="ready"?[...t.review.positiveTargetIds]:[];return{sampleId:t.sampleId,reason:e,labels:t.candidates.map(i=>({candidateId:i.id,targetId:i.targetId,label:by(i.targetId,e,t)})),goldTargetIds:n,missingTargetIds:n.filter(i=>!r.has(i))}}var wy=1e5;function mf(t,e){new Set(t).size!==t.length&&pt(e)}function Ic(t,e,r,n){if(t.has(e)&&t.get(e)!==r)throw new E(n?T.SEMANTIC_CORPUS_LEAKAGE:T.SEMANTIC_CORPUS_INVALID,n?"Corpus group crosses splits":"Repository has inconsistent family identity");t.set(e,r)}function Fy(t){mf(t.map(i=>i.sampleId),"Duplicate corpus sample ID"),mf(t.map(i=>JSON.stringify([i.source.repoId,i.source.projectId,i.source.callSiteId,i.source.snapshotHash])),"Duplicate corpus call-site snapshot");let e=new Map,r=new Map,n=new Map;for(let{source:i}of t)if(Ic(e,i.repoId,i.repoFamily,!1),Ic(r,i.repoFamily,i.split==="temporal"?"test":i.split,!0),Ic(n,i.duplicateGroup,i.split,!0),i.usage==="evaluation-only"&&i.split==="train")throw new E(T.SEMANTIC_CORPUS_LEAKAGE,"Evaluation-only source cannot enter training split")}function hf(t){try{(!it(t)||!At(t,["schemaVersion","corpusId","corpusVersion","splitSeed","samples"]))&&pt("Invalid corpus manifest shape"),(t.schemaVersion!==1||![t.corpusId,t.corpusVersion,t.splitSeed].every(qe))&&pt("Invalid corpus manifest identity");let e=t.samples;(!Array.isArray(e)||e.length>wy||!mr(e))&&pt("Invalid or oversized corpus sample list");let r=e.map(po).sort((n,i)=>n.sampleId<i.sampleId?-1:n.sampleId>i.sampleId?1:0);return Fy(r),{schemaVersion:1,corpusId:t.corpusId,corpusVersion:t.corpusVersion,splitSeed:t.splitSeed,samples:r}}catch(e){throw E.wrap(T.SEMANTIC_CORPUS_INVALID,"Invalid corpus manifest",e)}}import{createHash as My}from"crypto";var Lc=["train","calibration","test","temporal"],Ef=["real","synthetic"];function fo(t,e){let r=0,n=0,i=0,s=0;for(let o of t){let a=e.get(o.sampleId).reason;if(a!=="ready"&&a!=="input-truncated")continue;let l=o.review.positiveTargetIds,c=new Set(o.candidates.map(p=>p.targetId)),u=l.filter(p=>c.has(p)).length;r++,n+=l.length,i+=u,u===l.length&&s++}return{requests:t.length,trustedGoldRequests:r,goldTargets:n,coveredTargets:i,fullyCoveredRequests:s,candidateRecall:n===0?null:i/n,setCoverage:r===0?null:s/r}}function Cc(t,e,r){let n={train:0,calibration:0,test:0,temporal:0};for(let i of Lc){let s=t.filter(o=>o.source.origin==="real"&&o.source.split===i&&e.get(o.sampleId).reason==="ready");n[i]=new Set(s.map(o=>o.source[r])).size}return n}function _f(t,e){return e.train>=4&&e.calibration>=2&&e.test>=2&&t.train+t.calibration+t.test>=1e4&&t.test>=2e3&&t.temporal>=1}function Nc(t){if(Array.isArray(t))return`[${t.map(Nc).join(",")}]`;if(t!==null&&typeof t=="object"){let e=t;return`{${Object.keys(e).sort().map(r=>`${JSON.stringify(r)}:${Nc(e[r])}`).join(",")}}`}return JSON.stringify(t)}function ky(t){return t===null?"insufficient-evidence":t>=.99?"pass":"fail"}function Sf(t){let{samples:e,...r}=t,n=e.map(go),i=new Map(n.map(d=>[d.sampleId,d])),s={ready:0,"freshness-mismatch":0,"label-conflict":0,"out-of-scope":0,"oracle-failure":0,unreviewed:0,"input-truncated":0};for(let d of n)s[d.reason]++;let o=fo(e.filter(d=>d.source.origin==="real"),i),a=fo(e.filter(d=>d.source.origin==="synthetic"),i),l=Cc(e,i,"duplicateGroup"),c=Cc(e,i,"repoFamily"),u=Ef.flatMap(d=>Lc.map(f=>({origin:d,split:f,metrics:fo(e.filter(m=>m.source.origin===d&&m.source.split===f),i)}))),p=u.find(d=>d.origin==="real"&&d.split==="test").metrics.candidateRecall;return{...r,datasetHash:My("sha256").update(Nc(t),"utf8").digest("hex"),results:n,reasons:s,real:o,synthetic:a,slices:u,independentReadyRealRequests:l,readyRealFamilies:c,gates:{sampleSize:_f(l,c)?"pass":"insufficient-evidence",candidateRecall:ky(p)}}}var mo=class{label(e){return go(po(e))}audit(e){return Sf(hf(e))}};import Tf from"fs/promises";import Gy from"os";import xy from"path";var j={DETECTED_CHANGES:"Detected changes",WORKING_TREE_HEAD:"working tree (HEAD)",NO_LOCAL_GRAPH_IMPACT:"No local graph impact detected for the changed files.",TOP_AFFECTED_FILES:"Top affected files:",analysisBase:t=>`Base: ${t}`,analysisFilesChanged:t=>`Files changed: ${t}`,analysisRiskLevel:t=>`Risk level: ${t}`,analysisImpactedNodes:(t,e)=>`Impacted nodes: ${t} across ${e} changed file(s).`,analysisAffectedFileLine:(t,e,r)=>` - ${t}: ${e} dependent(s) [${r}]`,KNOWLEDGE_BRANCH_ALREADY_EXISTS:"Knowledge branch already exists",CONCURRENT_INITIAL_COMMIT_SKIPPED:"Knowledge branch was created by a concurrent process; skipping duplicate initial commit",CREATED_KNOWLEDGE_BRANCH:"Created hidden knowledge branch",NO_GIT_HOOKS_DIR:"No .git/hooks directory; skipping post-commit hook install",POST_COMMIT_HOOK_ALREADY_INSTALLED:"Post-commit hook already installed",CONCURRENT_HOOK_INSTALL_SKIPPED:"Post-commit hook was installed by a concurrent process; skipping duplicate append",FAILED_TO_INSTALL_HOOK:"Failed to install post-commit hook",INSTALLED_POST_COMMIT_HOOK:"Installed post-commit hook",UPGRADED_LEGACY_POST_COMMIT_HOOK:"Upgraded legacy post-commit hook (docuvia snapshot -> docuvia analyze)",UPGRADED_POST_COMMIT_HOOK_FLUSH_L3:"Upgraded post-commit hook (added flush-staged-l3 step, issue #42)",UPGRADED_POST_COMMIT_HOOK_NOHUP:"Upgraded post-commit hook (nohup + log redirect, issue #58)",PRE_PUSH_HOOK_ALREADY_INSTALLED:"Pre-push hook already installed",CONCURRENT_PRE_PUSH_HOOK_INSTALL_SKIPPED:"Pre-push hook was installed by a concurrent process; skipping duplicate append",FAILED_TO_INSTALL_PRE_PUSH_HOOK:"Failed to install pre-push hook",INSTALLED_PRE_PUSH_HOOK:"Installed pre-push hook",UPGRADED_LEGACY_PRE_PUSH_HOOK:"Upgraded legacy pre-push hook (added sync-knowledge step)",REMOVED_POST_COMMIT_HOOK:"Removed post-commit hook",REMOVED_PRE_PUSH_HOOK:"Removed pre-push hook",NO_POST_COMMIT_HOOK_TO_REMOVE:"No Docuvia post-commit hook to remove",NO_PRE_PUSH_HOOK_TO_REMOVE:"No Docuvia pre-push hook to remove",FAILED_TO_REMOVE_POST_COMMIT_HOOK:"Failed to remove post-commit hook",FAILED_TO_REMOVE_PRE_PUSH_HOOK:"Failed to remove pre-push hook",NO_KNOWLEDGE_BRANCH_TO_DELETE:"No knowledge branch to delete",DELETED_KNOWLEDGE_BRANCH:"Deleted hidden knowledge branch",FAILED_TO_DELETE_KNOWLEDGE_BRANCH:"Failed to delete knowledge branch",REPAIRED_DUPLICATE_POST_COMMIT_HOOK:"Repaired duplicate post-commit hook block",NOTHING_TO_REPAIR:"Nothing to repair -- post-commit hook is not duplicated",PACKED_SNAPSHOT_ONTO_BRANCH:"Packed snapshot onto knowledge branch",NO_REMOTE_SKIP_RECONCILIATION:"No remote configured; skipping knowledge branch reconciliation",FAILED_TO_FETCH_CONTINUING_OFFLINE:"Failed to fetch knowledge branch from remote; continuing offline",REMOTE_REF_NOT_FOUND_TEXT:"couldn't find remote ref",REMOTE_KNOWLEDGE_BRANCH_NOT_YET_ON_REMOTE:"Knowledge branch does not exist on remote yet; treating as first-ever push",ADOPTED_REMOTE_BRANCH:"Adopted remote knowledge branch (no local copy existed)",FAST_FORWARDED_LOCAL_BRANCH:"Fast-forwarded local knowledge branch to remote",MERGED_DIVERGED_BRANCH:"Merged diverged knowledge branch",FAILED_TO_PUSH_WILL_RETRY:"Failed to push knowledge branch to remote; will retry on next sync",SNAPSHOT_UNKNOWN:"Snapshot [unknown]",MERGE_WINNER_LOCAL:"local",MERGE_WINNER_REMOTE:"remote",mergeCommitMessage:t=>`Merge knowledge branch (${t?"local":"remote"} wins)`,snapshotCommitMessage:t=>`Snapshot [${t.slice(0,7)}]
108
108
 
109
109
  ${S.SOURCE_COMMIT_TRAILER_KEY}: ${t}`,NOTHING_TO_HYDRATE:"Nothing to hydrate from yet \u2014 knowledge branch doesn't exist",HYDRATED_KNOWLEDGE_GRAPH:"Hydrated knowledge graph from git",HYDRATE_REFUSED_PENDING_WRITE:"Refused automatic hydration: a knowledge-branch write from this workspace has not been confirmed yet (its pack attempt is pending or failed); local.db was left untouched",hydrateRefusedCatastrophicShrink:(t,e)=>`Refused automatic hydration: the resolved knowledge commit has ${e} node(s), a catastrophic reduction from local.db's current ${t}; local.db was left untouched`,IMPORTED_L3_CARDS:"Imported L3 decision cards from knowledge branch",failedToWriteMarkdown:(t,e,r)=>`Failed to write markdown for node ${t} (${e}): ${r}`,sanitizedPathEscapesKnowledgeDir:t=>`Sanitized markdown path escapes knowledge directory: ${t}`,markdownFrontmatter:(t,e,r,n)=>`---
110
110
  id: ${t}
@@ -118,31 +118,31 @@ Path: \`${e??t}\`
118
118
  `,markdownSymbolBody:(t,e)=>`# Symbol: ${t}
119
119
 
120
120
  File: \`${e??""}\`
121
- `};async function er(t,e,r){await t.acquireKnowledgeLock(e);try{return await r()}finally{await t.releaseKnowledgeLock(e)}}function Uy(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var Hy=new RegExp(`(?:^#!.*\\n)?${Uy(S.DOCUVIA_HOOK_HEADER_COMMENT)}[\\s\\S]*?^fi$\\n?`,"gm"),Eo=class{constructor(e,r=he(),n=void 0){this.git=e;this.logger=r;this.gitNetworkTimeoutMs=n}git;logger;gitNetworkTimeoutMs;async ensureKnowledgeBranch(e,r=S.KNOWLEDGE_ROOT){return await this.git.branchExists(e,r)?(this.logger.debug(j.KNOWLEDGE_BRANCH_ALREADY_EXISTS,{branchName:r}),{created:!1}):er(this.git,e,async()=>{if(await this.git.branchExists(e,r))return this.logger.warn(j.CONCURRENT_INITIAL_COMMIT_SKIPPED,{branchName:r}),{created:!1};let n=await Tf.mkdtemp(xy.join(Gy.tmpdir(),S.EMPTY_KNOWLEDGE_TEMP_DIR_PREFIX));try{await this.packSnapshotToKnowledgeBranchLocked(e,n,r)}finally{await Tf.rm(n,{recursive:!0,force:!0})}return this.logger.info(j.CREATED_KNOWLEDGE_BRANCH,{branchName:r}),{created:!0}})}async deleteKnowledgeBranch(e,r=S.KNOWLEDGE_ROOT){if(!await this.git.branchExists(e,r))return this.logger.debug(j.NO_KNOWLEDGE_BRANCH_TO_DELETE,{branchName:r}),{deleted:!1};try{await this.git.deleteBranch(e,r)}catch(n){return this.logger.warn(j.FAILED_TO_DELETE_KNOWLEDGE_BRANCH,{branchName:r,error:n instanceof Error?n.message:String(n)}),{deleted:!1}}return this.logger.info(j.DELETED_KNOWLEDGE_BRANCH,{branchName:r}),{deleted:!0}}hasCurrentPostCommitHook(e){return!!e?.includes(S.POST_COMMIT_HOOK_MARKER)&&!!e?.includes(S.POST_COMMIT_FLUSH_L3_MARKER)&&!!e?.includes(S.POST_COMMIT_NOHUP_MARKER)}resolvePostCommitUpgradeSource(e){if(e?.includes(S.LEGACY_POST_COMMIT_HOOK_MARKER))return S.LEGACY_POST_COMMIT_HOOK_CONTENT;if(e?.includes(S.POST_COMMIT_HOOK_MARKER))return e.includes(S.POST_COMMIT_FLUSH_L3_MARKER)?S.PRE_NOHUP_POST_COMMIT_HOOK_CONTENT:S.PRE_FLUSH_L3_POST_COMMIT_HOOK_CONTENT}async installPostCommitHook(e){let r=S.POST_COMMIT_HOOK_NAME;if(!await this.git.hooksDirExists(e))return this.logger.debug(j.NO_GIT_HOOKS_DIR),{installed:!1};let n=await this.git.readHookFile(e,r);return this.hasCurrentPostCommitHook(n)?(this.logger.debug(j.POST_COMMIT_HOOK_ALREADY_INSTALLED),{installed:!1}):er(this.git,e,async()=>{let i=await this.git.readHookFile(e,r);if(this.hasCurrentPostCommitHook(i))return this.logger.warn(j.CONCURRENT_HOOK_INSTALL_SKIPPED),{installed:!1};let s=this.resolvePostCommitUpgradeSource(i);try{if(s){let o=i.split(s).join("")+S.POST_COMMIT_HOOK_CONTENT;await this.git.writeHookFile(e,r,o)}else await this.git.appendHookFile(e,r,S.POST_COMMIT_HOOK_CONTENT);await this.git.makeHookExecutable(e,r)}catch(o){return this.logger.warn(j.FAILED_TO_INSTALL_HOOK,{error:o instanceof Error?o.message:String(o)}),{installed:!1}}return this.logger.info(s===S.LEGACY_POST_COMMIT_HOOK_CONTENT?j.UPGRADED_LEGACY_POST_COMMIT_HOOK:s===S.PRE_FLUSH_L3_POST_COMMIT_HOOK_CONTENT?j.UPGRADED_POST_COMMIT_HOOK_FLUSH_L3:s===S.PRE_NOHUP_POST_COMMIT_HOOK_CONTENT?j.UPGRADED_POST_COMMIT_HOOK_NOHUP:j.INSTALLED_POST_COMMIT_HOOK),{installed:!0}})}async installPrePushHook(e){let r=S.PRE_PUSH_HOOK_NAME;if(!await this.git.hooksDirExists(e))return this.logger.debug(j.NO_GIT_HOOKS_DIR),{installed:!1};let n=await this.git.readHookFile(e,r);return this.hasCurrentPrePushHook(n)?(this.logger.debug(j.PRE_PUSH_HOOK_ALREADY_INSTALLED),{installed:!1}):er(this.git,e,async()=>{let i=await this.git.readHookFile(e,r);if(this.hasCurrentPrePushHook(i))return this.logger.warn(j.CONCURRENT_PRE_PUSH_HOOK_INSTALL_SKIPPED),{installed:!1};let s=this.resolvePrePushUpgradeSource(i);try{if(s){let o=i.split(s).join("")+S.PRE_PUSH_HOOK_CONTENT;await this.git.writeHookFile(e,r,o)}else await this.git.appendHookFile(e,r,S.PRE_PUSH_HOOK_CONTENT);await this.git.makeHookExecutable(e,r)}catch(o){return this.logger.warn(j.FAILED_TO_INSTALL_PRE_PUSH_HOOK,{error:o instanceof Error?o.message:String(o)}),{installed:!1}}return this.logger.info(s?j.UPGRADED_LEGACY_PRE_PUSH_HOOK:j.INSTALLED_PRE_PUSH_HOOK),{installed:!0}})}hasCurrentPrePushHook(e){return!!e?.includes(S.PRE_PUSH_HOOK_MARKER)&&!!e?.includes(S.PRE_PUSH_SYNC_KNOWLEDGE_MARKER)&&!!e?.includes(S.PRE_PUSH_ENV_GATE_MARKER)&&!!e?.includes(S.PRE_PUSH_HOOKS_CHECK_MARKER)&&!!e?.includes(S.PRE_PUSH_FAILURE_HINT_MARKER)}resolvePrePushUpgradeSource(e){if(e?.includes(S.PRE_PUSH_HOOK_MARKER))return e.includes(S.PRE_PUSH_SYNC_KNOWLEDGE_MARKER)?e.includes(S.PRE_PUSH_ENV_GATE_MARKER)?e.includes(S.PRE_PUSH_HOOKS_CHECK_MARKER)?S.HOOKS_CHECK_PRE_PUSH_HOOK_CONTENT:S.ENV_GATE_PRE_PUSH_HOOK_CONTENT:S.SYNC_KNOWLEDGE_PRE_PUSH_HOOK_CONTENT:S.LEGACY_PRE_PUSH_HOOK_CONTENT}async removePostCommitHook(e){let r=S.POST_COMMIT_HOOK_NAME,n=await this.git.readHookFile(e,r);return this.hasAnyPostCommitMarker(n)?er(this.git,e,async()=>{let i=await this.git.readHookFile(e,r);if(!this.hasAnyPostCommitMarker(i))return{removed:!1};try{let s=i;for(let o of[S.POST_COMMIT_HOOK_CONTENT,S.PRE_FLUSH_L3_POST_COMMIT_HOOK_CONTENT,S.LEGACY_POST_COMMIT_HOOK_CONTENT])s.includes(o)&&(s=s.split(o).join(""));await this.git.writeHookFile(e,r,s)}catch(s){return this.logger.warn(j.FAILED_TO_REMOVE_POST_COMMIT_HOOK,{error:s instanceof Error?s.message:String(s)}),{removed:!1}}return this.logger.info(j.REMOVED_POST_COMMIT_HOOK),{removed:!0}}):(this.logger.debug(j.NO_POST_COMMIT_HOOK_TO_REMOVE),{removed:!1})}hasAnyPostCommitMarker(e){return!!e?.includes(S.POST_COMMIT_HOOK_MARKER)||!!e?.includes(S.LEGACY_POST_COMMIT_HOOK_MARKER)}async removePrePushHook(e){let r=S.PRE_PUSH_HOOK_NAME;return(await this.git.readHookFile(e,r))?.includes(S.PRE_PUSH_HOOK_MARKER)?er(this.git,e,async()=>{let i=await this.git.readHookFile(e,r);if(!i?.includes(S.PRE_PUSH_HOOK_MARKER))return{removed:!1};try{let s=i;for(let o of[S.PRE_PUSH_HOOK_CONTENT,S.HOOKS_CHECK_PRE_PUSH_HOOK_CONTENT,S.ENV_GATE_PRE_PUSH_HOOK_CONTENT,S.SYNC_KNOWLEDGE_PRE_PUSH_HOOK_CONTENT,S.LEGACY_PRE_PUSH_HOOK_CONTENT])s.includes(o)&&(s=s.split(o).join(""));await this.git.writeHookFile(e,r,s)}catch(s){return this.logger.warn(j.FAILED_TO_REMOVE_PRE_PUSH_HOOK,{error:s instanceof Error?s.message:String(s)}),{removed:!1}}return this.logger.info(j.REMOVED_PRE_PUSH_HOOK),{removed:!0}}):(this.logger.debug(j.NO_PRE_PUSH_HOOK_TO_REMOVE),{removed:!1})}async repairDuplicatePostCommitHook(e){let r=S.POST_COMMIT_HOOK_NAME;return er(this.git,e,async()=>{let n=await this.git.readHookFile(e,r),i=n?.includes(S.POST_COMMIT_HOOK_MARKER)&&n?.includes(S.LEGACY_POST_COMMIT_HOOK_MARKER);if(!n||!i)return this.logger.debug(j.NOTHING_TO_REPAIR),{repaired:!1};try{let o=n.replace(Hy,"")+S.POST_COMMIT_HOOK_CONTENT;await this.git.writeHookFile(e,r,o)}catch(s){return this.logger.warn(j.FAILED_TO_INSTALL_HOOK,{error:s instanceof Error?s.message:String(s)}),{repaired:!1}}return this.logger.info(j.REPAIRED_DUPLICATE_POST_COMMIT_HOOK),{repaired:!0}})}async packSnapshotToKnowledgeBranch(e,r,n=S.KNOWLEDGE_ROOT,i=!0){await er(this.git,e,()=>this.packSnapshotToKnowledgeBranchLocked(e,r,n,i))}async packSnapshotToKnowledgeBranchLocked(e,r,n,i=!0){let s=await this.buildSnapshotCommitMessage(e),o=await this.git.getHeadSha(e),a;if(o)try{a=await this.git.getCommitTimestamp(e,o)}catch{}await this.git.packDirectoryToBranch(e,r,n,s,a,i),this.logger.info(j.PACKED_SNAPSHOT_ONTO_BRANCH,{branchName:n})}async syncKnowledgeBranch(e,r=S.KNOWLEDGE_ROOT,n=S.DEFAULT_REMOTE_NAME){return er(this.git,e,()=>this.reconcile(e,r,n))}async reconcile(e,r,n){if(!await this.git.getRemoteUrl(e))return this.logger.debug(j.NO_REMOTE_SKIP_RECONCILIATION,{branchName:r}),{status:qe.NO_REMOTE};if(!await this.tryFetchRemoteBranch(e,r,n))return{status:qe.NO_REMOTE};let o=await this.git.getRefSha(e,`${S.REMOTE_REF_PREFIX}${n}/${r}`),a=await this.git.getBranchTipSha(e,r);return this.resolveBranchSyncOutcome(e,r,n,a,o)}async tryFetchRemoteBranch(e,r,n){try{return await this.git.fetchRef(e,n,r,this.gitNetworkTimeoutMs),!0}catch(i){return this.isRemoteRefMissingError(i)?(this.logger.info(j.REMOTE_KNOWLEDGE_BRANCH_NOT_YET_ON_REMOTE,{branchName:r}),!0):(this.logger.warn(j.FAILED_TO_FETCH_CONTINUING_OFFLINE,{branchName:r,error:i instanceof Error?i.message:String(i)}),!1)}}isRemoteRefMissingError(e){return(e instanceof Error?e.message:String(e)).includes(j.REMOTE_REF_NOT_FOUND_TEXT)}async resolveBranchSyncOutcome(e,r,n,i,s){let o=await this.resolveMissingShaOutcome(e,r,n,i,s);if("resolved"in o)return o.resolved;let{localSha:a,remoteSha:l}=o;if(a===l)return{status:qe.UP_TO_DATE,branchTipSha:a};let c=await this.resolveFastForwardOutcome(e,r,n,a,l);return c||this.mergeDivergedBranches(e,r,n,a,l)}async resolveMissingShaOutcome(e,r,n,i,s){return s?i?{localSha:i,remoteSha:s}:(await this.git.updateBranchRef(e,r,s),this.logger.info(j.ADOPTED_REMOTE_BRANCH,{branchName:r}),{resolved:{status:qe.FAST_FORWARDED_LOCAL,branchTipSha:s}}):(i&&await this.pushQuietly(e,n,r),{resolved:{status:qe.PUSHED_LOCAL,branchTipSha:i}})}async resolveFastForwardOutcome(e,r,n,i,s){if(await this.git.isAncestor(e,i,s))return await this.git.updateBranchRef(e,r,s),this.logger.info(j.FAST_FORWARDED_LOCAL_BRANCH,{branchName:r,remoteSha:s}),{status:qe.FAST_FORWARDED_LOCAL,branchTipSha:s};if(await this.git.isAncestor(e,s,i))return await this.pushQuietly(e,n,r),{status:qe.PUSHED_LOCAL,branchTipSha:i}}async mergeDivergedBranches(e,r,n,i,s){let o=await this.resolveMergeWinner(e,i,s),a=await this.git.getTreeSha(e,o),l=j.mergeCommitMessage(o===i),c=await this.git.createMergeCommit(e,a,[i,s],l);return await this.git.updateBranchRef(e,r,c),await this.pushQuietly(e,n,r),this.logger.info(j.MERGED_DIVERGED_BRANCH,{branchName:r,winner:o===i?j.MERGE_WINNER_LOCAL:j.MERGE_WINNER_REMOTE,mergeSha:c}),{status:qe.MERGED,branchTipSha:c}}async pushQuietly(e,r,n){try{await this.git.pushRef(e,r,n,this.gitNetworkTimeoutMs)}catch(i){this.logger.warn(j.FAILED_TO_PUSH_WILL_RETRY,{branchName:n,error:i instanceof Error?i.message:String(i)})}}async resolveMergeWinner(e,r,n){let[i,s]=await Promise.all([this.git.getCommitLog(e,r,1),this.git.getCommitLog(e,n,1)]),o=i[0]?gr(i[0].message):void 0,a=s[0]?gr(s[0].message):void 0;if(o&&a)try{if(await this.git.isAncestor(e,o,a))return n;if(await this.git.isAncestor(e,a,o))return r}catch{}let[l,c]=await Promise.all([this.git.getCommitTimestamp(e,r),this.git.getCommitTimestamp(e,n)]);return l>=c?r:n}async resolveNewestSourceTrailerSha(e,r=S.KNOWLEDGE_ROOT){let n=await this.git.getCommitLog(e,r,S.KNOWLEDGE_LOG_SCAN_LIMIT);for(let i of n){let s=gr(i.message);if(s)return s}}async resolveKnowledgeCommitForSource(e,r,n=S.KNOWLEDGE_ROOT){let i=await this.git.getCommitLog(e,n,S.KNOWLEDGE_LOG_SCAN_LIMIT);for(let s of i)if(gr(s.message)===r)return s.sha}async hasSourceCommitInHistory(e,r,n=S.KNOWLEDGE_ROOT){return await this.resolveKnowledgeCommitForSource(e,r,n)!==void 0}async runUnderKnowledgeLock(e,r){return er(this.git,e,r)}async buildSnapshotCommitMessage(e){let r=await this.git.getHeadSha(e);return r?j.snapshotCommitMessage(r):j.SNAPSHOT_UNKNOWN}};import Er from"fs/promises";import ft from"path";import Jy from"os";var Af=".md",By=/[<>:"/\\|?*\x00-\x1f\s]/g,Ky=".",$y="..",Yy=new Set(["con","prn","aux","nul","com0","com1","com2","com3","com4","com5","com6","com7","com8","com9","lpt0","lpt1","lpt2","lpt3","lpt4","lpt5","lpt6","lpt7","lpt8","lpt9"]),Rf="_";function Of(t){let e=t.replace(By,"_");e.length>100&&(e=e.slice(0,100));let r=e.indexOf("."),n=r===-1?e:e.slice(0,r);return Yy.has(n.toLowerCase())?r===-1?`${n}${Rf}`:`${n}${Rf}${e.slice(r)}`:e}function Wy(t){return t.split(/[\\/]+/).filter(e=>e.length>0&&e!==Ky&&e!==$y).map(Of).join("/")}function jy(t){let e=t.lastIndexOf("/"),r=e===-1?"":t.slice(0,e),n=e===-1?t:t.slice(e+1),i=n.lastIndexOf("."),s=i<=0?n:n.slice(0,i);return{dir:r,base:s}}function If(t,e){if(!t.filePath)return;let r=Wy(t.filePath);if(!e)return`${S.KNOWLEDGE_DIR_NAME}/${r}${Af}`;let{dir:n,base:i}=jy(r),s=Of(t.name),o=n?`${n}/${i}`:i;return`${S.KNOWLEDGE_DIR_NAME}/${o}/${s}${Af}`}function Vy(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 Lf(t,e){let r=new Map;for(let s of t)r.set(s.id,Vy(s.path_patterns));let n=new Map;for(let s of e)s.link_type===de.CONTAINS&&n.set(s.target_node_id,s.source_node_id);let i=new Map;for(let s of t){let o=n.get(s.id),a=o!==void 0?r.get(o):r.get(s.id),l=If({name:s.name,filePath:a},o!==void 0);l&&i.set(s.id,l)}return i}function Cf(t,e){let r=new Map;for(let i of e)i.type===de.CONTAINS&&r.set(i.target,i.source);let n=new Map;for(let i of t){let s=r.has(i.nodeKey),o=If({name:i.name,filePath:i.filePath},s);o&&n.set(i.nodeKey,o)}return n}function yf(t){if(!t)return[];try{let e=JSON.parse(t);return Array.isArray(e)?e.map(String):[]}catch{return[]}}function Nf(t,e){let r={content_hash:t.content_hash??"",node_type:t.node_type,title:t.title,l2_path:e,source_commits:yf(t.initial_source_commits??t.source_commits),extraction_model:t.extraction_model,source_files:yf(t.source_files),created_at:t.created_at},n=t.content??"";return`---
121
+ `};async function Zt(t,e,r){await t.acquireKnowledgeLock(e);try{return await r()}finally{await t.releaseKnowledgeLock(e)}}function Uy(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var Hy=new RegExp(`(?:^#!.*\\n)?${Uy(S.DOCUVIA_HOOK_HEADER_COMMENT)}[\\s\\S]*?^fi$\\n?`,"gm"),ho=class{constructor(e,r=me(),n=void 0){this.git=e;this.logger=r;this.gitNetworkTimeoutMs=n}git;logger;gitNetworkTimeoutMs;async ensureKnowledgeBranch(e,r=S.KNOWLEDGE_ROOT){return await this.git.branchExists(e,r)?(this.logger.debug(j.KNOWLEDGE_BRANCH_ALREADY_EXISTS,{branchName:r}),{created:!1}):Zt(this.git,e,async()=>{if(await this.git.branchExists(e,r))return this.logger.warn(j.CONCURRENT_INITIAL_COMMIT_SKIPPED,{branchName:r}),{created:!1};let n=await Tf.mkdtemp(xy.join(Gy.tmpdir(),S.EMPTY_KNOWLEDGE_TEMP_DIR_PREFIX));try{await this.packSnapshotToKnowledgeBranchLocked(e,n,r)}finally{await Tf.rm(n,{recursive:!0,force:!0})}return this.logger.info(j.CREATED_KNOWLEDGE_BRANCH,{branchName:r}),{created:!0}})}async deleteKnowledgeBranch(e,r=S.KNOWLEDGE_ROOT){if(!await this.git.branchExists(e,r))return this.logger.debug(j.NO_KNOWLEDGE_BRANCH_TO_DELETE,{branchName:r}),{deleted:!1};try{await this.git.deleteBranch(e,r)}catch(n){return this.logger.warn(j.FAILED_TO_DELETE_KNOWLEDGE_BRANCH,{branchName:r,error:n instanceof Error?n.message:String(n)}),{deleted:!1}}return this.logger.info(j.DELETED_KNOWLEDGE_BRANCH,{branchName:r}),{deleted:!0}}hasCurrentPostCommitHook(e){return!!e?.includes(S.POST_COMMIT_HOOK_MARKER)&&!!e?.includes(S.POST_COMMIT_FLUSH_L3_MARKER)&&!!e?.includes(S.POST_COMMIT_NOHUP_MARKER)}resolvePostCommitUpgradeSource(e){if(e?.includes(S.LEGACY_POST_COMMIT_HOOK_MARKER))return S.LEGACY_POST_COMMIT_HOOK_CONTENT;if(e?.includes(S.POST_COMMIT_HOOK_MARKER))return e.includes(S.POST_COMMIT_FLUSH_L3_MARKER)?S.PRE_NOHUP_POST_COMMIT_HOOK_CONTENT:S.PRE_FLUSH_L3_POST_COMMIT_HOOK_CONTENT}async installPostCommitHook(e){let r=S.POST_COMMIT_HOOK_NAME;if(!await this.git.hooksDirExists(e))return this.logger.debug(j.NO_GIT_HOOKS_DIR),{installed:!1};let n=await this.git.readHookFile(e,r);return this.hasCurrentPostCommitHook(n)?(this.logger.debug(j.POST_COMMIT_HOOK_ALREADY_INSTALLED),{installed:!1}):Zt(this.git,e,async()=>{let i=await this.git.readHookFile(e,r);if(this.hasCurrentPostCommitHook(i))return this.logger.warn(j.CONCURRENT_HOOK_INSTALL_SKIPPED),{installed:!1};let s=this.resolvePostCommitUpgradeSource(i);try{if(s){let o=i.split(s).join("")+S.POST_COMMIT_HOOK_CONTENT;await this.git.writeHookFile(e,r,o)}else await this.git.appendHookFile(e,r,S.POST_COMMIT_HOOK_CONTENT);await this.git.makeHookExecutable(e,r)}catch(o){return this.logger.warn(j.FAILED_TO_INSTALL_HOOK,{error:o instanceof Error?o.message:String(o)}),{installed:!1}}return this.logger.info(s===S.LEGACY_POST_COMMIT_HOOK_CONTENT?j.UPGRADED_LEGACY_POST_COMMIT_HOOK:s===S.PRE_FLUSH_L3_POST_COMMIT_HOOK_CONTENT?j.UPGRADED_POST_COMMIT_HOOK_FLUSH_L3:s===S.PRE_NOHUP_POST_COMMIT_HOOK_CONTENT?j.UPGRADED_POST_COMMIT_HOOK_NOHUP:j.INSTALLED_POST_COMMIT_HOOK),{installed:!0}})}async installPrePushHook(e){let r=S.PRE_PUSH_HOOK_NAME;if(!await this.git.hooksDirExists(e))return this.logger.debug(j.NO_GIT_HOOKS_DIR),{installed:!1};let n=await this.git.readHookFile(e,r);return this.hasCurrentPrePushHook(n)?(this.logger.debug(j.PRE_PUSH_HOOK_ALREADY_INSTALLED),{installed:!1}):Zt(this.git,e,async()=>{let i=await this.git.readHookFile(e,r);if(this.hasCurrentPrePushHook(i))return this.logger.warn(j.CONCURRENT_PRE_PUSH_HOOK_INSTALL_SKIPPED),{installed:!1};let s=this.resolvePrePushUpgradeSource(i);try{if(s){let o=i.split(s).join("")+S.PRE_PUSH_HOOK_CONTENT;await this.git.writeHookFile(e,r,o)}else await this.git.appendHookFile(e,r,S.PRE_PUSH_HOOK_CONTENT);await this.git.makeHookExecutable(e,r)}catch(o){return this.logger.warn(j.FAILED_TO_INSTALL_PRE_PUSH_HOOK,{error:o instanceof Error?o.message:String(o)}),{installed:!1}}return this.logger.info(s?j.UPGRADED_LEGACY_PRE_PUSH_HOOK:j.INSTALLED_PRE_PUSH_HOOK),{installed:!0}})}hasCurrentPrePushHook(e){return!!e?.includes(S.PRE_PUSH_HOOK_MARKER)&&!!e?.includes(S.PRE_PUSH_SYNC_KNOWLEDGE_MARKER)&&!!e?.includes(S.PRE_PUSH_ENV_GATE_MARKER)&&!!e?.includes(S.PRE_PUSH_HOOKS_CHECK_MARKER)&&!!e?.includes(S.PRE_PUSH_FAILURE_HINT_MARKER)}resolvePrePushUpgradeSource(e){if(e?.includes(S.PRE_PUSH_HOOK_MARKER))return e.includes(S.PRE_PUSH_SYNC_KNOWLEDGE_MARKER)?e.includes(S.PRE_PUSH_ENV_GATE_MARKER)?e.includes(S.PRE_PUSH_HOOKS_CHECK_MARKER)?S.HOOKS_CHECK_PRE_PUSH_HOOK_CONTENT:S.ENV_GATE_PRE_PUSH_HOOK_CONTENT:S.SYNC_KNOWLEDGE_PRE_PUSH_HOOK_CONTENT:S.LEGACY_PRE_PUSH_HOOK_CONTENT}async removePostCommitHook(e){let r=S.POST_COMMIT_HOOK_NAME,n=await this.git.readHookFile(e,r);return this.hasAnyPostCommitMarker(n)?Zt(this.git,e,async()=>{let i=await this.git.readHookFile(e,r);if(!this.hasAnyPostCommitMarker(i))return{removed:!1};try{let s=i;for(let o of[S.POST_COMMIT_HOOK_CONTENT,S.PRE_FLUSH_L3_POST_COMMIT_HOOK_CONTENT,S.LEGACY_POST_COMMIT_HOOK_CONTENT])s.includes(o)&&(s=s.split(o).join(""));await this.git.writeHookFile(e,r,s)}catch(s){return this.logger.warn(j.FAILED_TO_REMOVE_POST_COMMIT_HOOK,{error:s instanceof Error?s.message:String(s)}),{removed:!1}}return this.logger.info(j.REMOVED_POST_COMMIT_HOOK),{removed:!0}}):(this.logger.debug(j.NO_POST_COMMIT_HOOK_TO_REMOVE),{removed:!1})}hasAnyPostCommitMarker(e){return!!e?.includes(S.POST_COMMIT_HOOK_MARKER)||!!e?.includes(S.LEGACY_POST_COMMIT_HOOK_MARKER)}async removePrePushHook(e){let r=S.PRE_PUSH_HOOK_NAME;return(await this.git.readHookFile(e,r))?.includes(S.PRE_PUSH_HOOK_MARKER)?Zt(this.git,e,async()=>{let i=await this.git.readHookFile(e,r);if(!i?.includes(S.PRE_PUSH_HOOK_MARKER))return{removed:!1};try{let s=i;for(let o of[S.PRE_PUSH_HOOK_CONTENT,S.HOOKS_CHECK_PRE_PUSH_HOOK_CONTENT,S.ENV_GATE_PRE_PUSH_HOOK_CONTENT,S.SYNC_KNOWLEDGE_PRE_PUSH_HOOK_CONTENT,S.LEGACY_PRE_PUSH_HOOK_CONTENT])s.includes(o)&&(s=s.split(o).join(""));await this.git.writeHookFile(e,r,s)}catch(s){return this.logger.warn(j.FAILED_TO_REMOVE_PRE_PUSH_HOOK,{error:s instanceof Error?s.message:String(s)}),{removed:!1}}return this.logger.info(j.REMOVED_PRE_PUSH_HOOK),{removed:!0}}):(this.logger.debug(j.NO_PRE_PUSH_HOOK_TO_REMOVE),{removed:!1})}async repairDuplicatePostCommitHook(e){let r=S.POST_COMMIT_HOOK_NAME;return Zt(this.git,e,async()=>{let n=await this.git.readHookFile(e,r),i=n?.includes(S.POST_COMMIT_HOOK_MARKER)&&n?.includes(S.LEGACY_POST_COMMIT_HOOK_MARKER);if(!n||!i)return this.logger.debug(j.NOTHING_TO_REPAIR),{repaired:!1};try{let o=n.replace(Hy,"")+S.POST_COMMIT_HOOK_CONTENT;await this.git.writeHookFile(e,r,o)}catch(s){return this.logger.warn(j.FAILED_TO_INSTALL_HOOK,{error:s instanceof Error?s.message:String(s)}),{repaired:!1}}return this.logger.info(j.REPAIRED_DUPLICATE_POST_COMMIT_HOOK),{repaired:!0}})}async packSnapshotToKnowledgeBranch(e,r,n=S.KNOWLEDGE_ROOT,i=!0){await Zt(this.git,e,()=>this.packSnapshotToKnowledgeBranchLocked(e,r,n,i))}async packSnapshotToKnowledgeBranchLocked(e,r,n,i=!0){let s=await this.buildSnapshotCommitMessage(e),o=await this.git.getHeadSha(e),a;if(o)try{a=await this.git.getCommitTimestamp(e,o)}catch{}await this.git.packDirectoryToBranch(e,r,n,s,a,i),this.logger.info(j.PACKED_SNAPSHOT_ONTO_BRANCH,{branchName:n})}async syncKnowledgeBranch(e,r=S.KNOWLEDGE_ROOT,n=S.DEFAULT_REMOTE_NAME){return Zt(this.git,e,()=>this.reconcile(e,r,n))}async reconcile(e,r,n){if(!await this.git.getRemoteUrl(e))return this.logger.debug(j.NO_REMOTE_SKIP_RECONCILIATION,{branchName:r}),{status:Je.NO_REMOTE};if(!await this.tryFetchRemoteBranch(e,r,n))return{status:Je.NO_REMOTE};let o=await this.git.getRefSha(e,`${S.REMOTE_REF_PREFIX}${n}/${r}`),a=await this.git.getBranchTipSha(e,r);return this.resolveBranchSyncOutcome(e,r,n,a,o)}async tryFetchRemoteBranch(e,r,n){try{return await this.git.fetchRef(e,n,r,this.gitNetworkTimeoutMs),!0}catch(i){return this.isRemoteRefMissingError(i)?(this.logger.info(j.REMOTE_KNOWLEDGE_BRANCH_NOT_YET_ON_REMOTE,{branchName:r}),!0):(this.logger.warn(j.FAILED_TO_FETCH_CONTINUING_OFFLINE,{branchName:r,error:i instanceof Error?i.message:String(i)}),!1)}}isRemoteRefMissingError(e){return(e instanceof Error?e.message:String(e)).includes(j.REMOTE_REF_NOT_FOUND_TEXT)}async resolveBranchSyncOutcome(e,r,n,i,s){let o=await this.resolveMissingShaOutcome(e,r,n,i,s);if("resolved"in o)return o.resolved;let{localSha:a,remoteSha:l}=o;if(a===l)return{status:Je.UP_TO_DATE,branchTipSha:a};let c=await this.resolveFastForwardOutcome(e,r,n,a,l);return c||this.mergeDivergedBranches(e,r,n,a,l)}async resolveMissingShaOutcome(e,r,n,i,s){return s?i?{localSha:i,remoteSha:s}:(await this.git.updateBranchRef(e,r,s),this.logger.info(j.ADOPTED_REMOTE_BRANCH,{branchName:r}),{resolved:{status:Je.FAST_FORWARDED_LOCAL,branchTipSha:s}}):(i&&await this.pushQuietly(e,n,r),{resolved:{status:Je.PUSHED_LOCAL,branchTipSha:i}})}async resolveFastForwardOutcome(e,r,n,i,s){if(await this.git.isAncestor(e,i,s))return await this.git.updateBranchRef(e,r,s),this.logger.info(j.FAST_FORWARDED_LOCAL_BRANCH,{branchName:r,remoteSha:s}),{status:Je.FAST_FORWARDED_LOCAL,branchTipSha:s};if(await this.git.isAncestor(e,s,i))return await this.pushQuietly(e,n,r),{status:Je.PUSHED_LOCAL,branchTipSha:i}}async mergeDivergedBranches(e,r,n,i,s){let o=await this.resolveMergeWinner(e,i,s),a=await this.git.getTreeSha(e,o),l=j.mergeCommitMessage(o===i),c=await this.git.createMergeCommit(e,a,[i,s],l);return await this.git.updateBranchRef(e,r,c),await this.pushQuietly(e,n,r),this.logger.info(j.MERGED_DIVERGED_BRANCH,{branchName:r,winner:o===i?j.MERGE_WINNER_LOCAL:j.MERGE_WINNER_REMOTE,mergeSha:c}),{status:Je.MERGED,branchTipSha:c}}async pushQuietly(e,r,n){try{await this.git.pushRef(e,r,n,this.gitNetworkTimeoutMs)}catch(i){this.logger.warn(j.FAILED_TO_PUSH_WILL_RETRY,{branchName:n,error:i instanceof Error?i.message:String(i)})}}async resolveMergeWinner(e,r,n){let[i,s]=await Promise.all([this.git.getCommitLog(e,r,1),this.git.getCommitLog(e,n,1)]),o=i[0]?pr(i[0].message):void 0,a=s[0]?pr(s[0].message):void 0;if(o&&a)try{if(await this.git.isAncestor(e,o,a))return n;if(await this.git.isAncestor(e,a,o))return r}catch{}let[l,c]=await Promise.all([this.git.getCommitTimestamp(e,r),this.git.getCommitTimestamp(e,n)]);return l>=c?r:n}async resolveNewestSourceTrailerSha(e,r=S.KNOWLEDGE_ROOT){let n=await this.git.getCommitLog(e,r,S.KNOWLEDGE_LOG_SCAN_LIMIT);for(let i of n){let s=pr(i.message);if(s)return s}}async resolveKnowledgeCommitForSource(e,r,n=S.KNOWLEDGE_ROOT){let i=await this.git.getCommitLog(e,n,S.KNOWLEDGE_LOG_SCAN_LIMIT);for(let s of i)if(pr(s.message)===r)return s.sha}async hasSourceCommitInHistory(e,r,n=S.KNOWLEDGE_ROOT){return await this.resolveKnowledgeCommitForSource(e,r,n)!==void 0}async runUnderKnowledgeLock(e,r){return Zt(this.git,e,r)}async buildSnapshotCommitMessage(e){let r=await this.git.getHeadSha(e);return r?j.snapshotCommitMessage(r):j.SNAPSHOT_UNKNOWN}};import hr from"fs/promises";import gt from"path";import Jy from"os";var Af=".md",By=/[<>:"/\\|?*\x00-\x1f\s]/g,Ky=".",$y="..",Yy=new Set(["con","prn","aux","nul","com0","com1","com2","com3","com4","com5","com6","com7","com8","com9","lpt0","lpt1","lpt2","lpt3","lpt4","lpt5","lpt6","lpt7","lpt8","lpt9"]),Rf="_";function Of(t){let e=t.replace(By,"_");e.length>100&&(e=e.slice(0,100));let r=e.indexOf("."),n=r===-1?e:e.slice(0,r);return Yy.has(n.toLowerCase())?r===-1?`${n}${Rf}`:`${n}${Rf}${e.slice(r)}`:e}function Wy(t){return t.split(/[\\/]+/).filter(e=>e.length>0&&e!==Ky&&e!==$y).map(Of).join("/")}function jy(t){let e=t.lastIndexOf("/"),r=e===-1?"":t.slice(0,e),n=e===-1?t:t.slice(e+1),i=n.lastIndexOf("."),s=i<=0?n:n.slice(0,i);return{dir:r,base:s}}function If(t,e){if(!t.filePath)return;let r=Wy(t.filePath);if(!e)return`${S.KNOWLEDGE_DIR_NAME}/${r}${Af}`;let{dir:n,base:i}=jy(r),s=Of(t.name),o=n?`${n}/${i}`:i;return`${S.KNOWLEDGE_DIR_NAME}/${o}/${s}${Af}`}function Vy(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 Lf(t,e){let r=new Map;for(let s of t)r.set(s.id,Vy(s.path_patterns));let n=new Map;for(let s of e)s.link_type===de.CONTAINS&&n.set(s.target_node_id,s.source_node_id);let i=new Map;for(let s of t){let o=n.get(s.id),a=o!==void 0?r.get(o):r.get(s.id),l=If({name:s.name,filePath:a},o!==void 0);l&&i.set(s.id,l)}return i}function Cf(t,e){let r=new Map;for(let i of e)i.type===de.CONTAINS&&r.set(i.target,i.source);let n=new Map;for(let i of t){let s=r.has(i.nodeKey),o=If({name:i.name,filePath:i.filePath},s);o&&n.set(i.nodeKey,o)}return n}function yf(t){if(!t)return[];try{let e=JSON.parse(t);return Array.isArray(e)?e.map(String):[]}catch{return[]}}function Nf(t,e){let r={content_hash:t.content_hash??"",node_type:t.node_type,title:t.title,l2_path:e,source_commits:yf(t.initial_source_commits??t.source_commits),extraction_model:t.extraction_model,source_files:yf(t.source_files),created_at:t.created_at},n=t.content??"";return`---
122
122
  ${JSON.stringify(r,null,2)}
123
123
  ---
124
124
 
125
125
  ${n}
126
126
  `}var zy=/^---\n([\s\S]*?)\n---\n\n?([\s\S]*)$/;function Pf(t){let e=zy.exec(t);if(e)try{let r=JSON.parse(e[1]);if(typeof r.content_hash!="string"||typeof r.l2_path!="string")return;let n=e[2].endsWith(`
127
- `)?e[2].slice(0,-1):e[2];return{...r,content:n}}catch{return}}function Pt(t){return`l2:${t}`}function Dc(t){return`l3:${t}`}var qy=Jy.cpus().length*4,_o=class{async render(e){let{outDir:r,l2Rows:n,linkRows:i,l3Rows:s,metadata:o}=e,a=ft.join(r,S.GRAPH_DIR_NAME),l=ft.join(r,S.KNOWLEDGE_DIR_NAME);await Er.mkdir(a,{recursive:!0}),await Er.mkdir(l,{recursive:!0});let c=new Map;for(let I of n)c.set(I.id,rO(I.path_patterns));let u=new Map;for(let I of i)I.link_type===de.CONTAINS&&u.set(I.target_node_id,I.source_node_id);let p=new Map;for(let I of n)p.set(I.id,I.node_key??Pt(I.id));let d=n.map(I=>{let $=u.get(I.id);return{id:p.get(I.id),kind:$!==void 0?Ut.SYMBOL:Ut.FILE,name:I.name,type:I.type,filePath:$!==void 0?c.get($):c.get(I.id)}}).sort((I,$)=>I.id.localeCompare($.id)),f=d.map(I=>JSON.stringify({id:I.id,type:I.kind,name:I.name,filePath:I.filePath})),_=i.map(I=>({source:p.get(I.source_node_id)??Pt(I.source_node_id),target:p.get(I.target_node_id)??Pt(I.target_node_id),type:I.link_type})).sort((I,$)=>I.source.localeCompare($.source)||I.target.localeCompare($.target)||I.type.localeCompare($.type)).map(I=>JSON.stringify(I));f.length>0&&await Er.writeFile(ft.join(a,S.NODES_JSONL_NAME),f.join(`
127
+ `)?e[2].slice(0,-1):e[2];return{...r,content:n}}catch{return}}function Nt(t){return`l2:${t}`}function Pc(t){return`l3:${t}`}var qy=Jy.cpus().length*4,Eo=class{async render(e){let{outDir:r,l2Rows:n,linkRows:i,l3Rows:s,metadata:o}=e,a=gt.join(r,S.GRAPH_DIR_NAME),l=gt.join(r,S.KNOWLEDGE_DIR_NAME);await hr.mkdir(a,{recursive:!0}),await hr.mkdir(l,{recursive:!0});let c=new Map;for(let I of n)c.set(I.id,rO(I.path_patterns));let u=new Map;for(let I of i)I.link_type===de.CONTAINS&&u.set(I.target_node_id,I.source_node_id);let p=new Map;for(let I of n)p.set(I.id,I.node_key??Nt(I.id));let d=n.map(I=>{let $=u.get(I.id);return{id:p.get(I.id),kind:$!==void 0?xt.SYMBOL:xt.FILE,name:I.name,type:I.type,filePath:$!==void 0?c.get($):c.get(I.id)}}).sort((I,$)=>I.id.localeCompare($.id)),f=d.map(I=>JSON.stringify({id:I.id,type:I.kind,name:I.name,filePath:I.filePath})),_=i.map(I=>({source:p.get(I.source_node_id)??Nt(I.source_node_id),target:p.get(I.target_node_id)??Nt(I.target_node_id),type:I.link_type})).sort((I,$)=>I.source.localeCompare($.source)||I.target.localeCompare($.target)||I.type.localeCompare($.type)).map(I=>JSON.stringify(I));f.length>0&&await hr.writeFile(gt.join(a,S.NODES_JSONL_NAME),f.join(`
128
128
  `)+`
129
- `,H),_.length>0&&await Er.writeFile(ft.join(a,S.EDGES_JSONL_NAME),_.join(`
129
+ `,H),_.length>0&&await hr.writeFile(gt.join(a,S.EDGES_JSONL_NAME),_.join(`
130
130
  `)+`
131
- `,H),await this.writeSnapshotMetadata(a,o);let L=mn(qy),C=0,F=[];return await Promise.all(d.map(I=>L(async()=>{try{let $=tO(l,I);if(!$)return;await this.writeMarkdown($,I),C++}catch($){F.push(j.failedToWriteMarkdown(I.id,I.name,$ instanceof Error?$.message:String($)))}}))),s&&s.length>0&&await this.writeL3Cards(r,s,n,i),{nodesWritten:f.length,edgesWritten:_.length,markdownFilesWritten:C,errors:F}}async writeSnapshotMetadata(e,r){if(!r)return;let n={...r.project?{project:{name:r.project.name,repoUrl:r.project.repoUrl}}:{},files:[...r.files].sort((i,s)=>i.filePath.localeCompare(s.filePath)).map(i=>({filePath:i.filePath,contentHash:i.contentHash,lastTierBProcessedAt:i.lastTierBProcessedAt,lastTierBCommitSha:i.lastTierBCommitSha})),...r.lastIngestedSourceSha?{lastIngestedSourceSha:r.lastIngestedSourceSha}:{}};await Er.writeFile(ft.join(e,S.METADATA_JSON_NAME),JSON.stringify(n,null,2)+`
132
- `,H)}async writeL3Cards(e,r,n,i){let s=Lf(n,i),o=ft.join(e,S.KNOWLEDGE_DIR_NAME,S.L3_DIR_NAME);await Er.mkdir(o,{recursive:!0}),await Promise.all(r.map(async a=>{if(!a.content_hash)return;let l=s.get(a.l2_node_id);l&&await Er.writeFile(ft.join(o,`${a.content_hash}.md`),Nf(a,l),H)}))}async writeMarkdown(e,r){await Er.mkdir(ft.dirname(e),{recursive:!0});let n=j.markdownFrontmatter(r.id,r.kind,r.name,r.filePath),i=r.kind===Ut.FILE?j.markdownFileBody(r.name,r.filePath):j.markdownSymbolBody(r.name,r.filePath);await Er.writeFile(e,n+i,H)}},Qy=/[<>:"/\\|?*\x00-\x1f\s]/g,Xy=".",Zy="..",Df=".md",eO=new Set(["con","prn","aux","nul","com0","com1","com2","com3","com4","com5","com6","com7","com8","com9","lpt0","lpt1","lpt2","lpt3","lpt4","lpt5","lpt6","lpt7","lpt8","lpt9"]),vf="_";function Ff(t){let e=t.replace(Qy,"_");e.length>100&&(e=e.slice(0,100));let r=e.indexOf("."),n=r===-1?e:e.slice(0,r);return eO.has(n.toLowerCase())?r===-1?`${n}${vf}`:`${n}${vf}${e.slice(r)}`:e}function bf(t){return t.split(/[\\/]+/).filter(e=>e.length>0&&e!==Xy&&e!==Zy).map(Ff).join(ft.sep)}function wf(t,e){let r=ft.resolve(t),n=ft.resolve(r,e);if(n!==r&&!n.startsWith(r+ft.sep))throw new E(T.INVALID_INPUT,j.sanitizedPathEscapesKnowledgeDir(e));return n}function tO(t,e){if(e.kind===Ut.FILE)return e.filePath?wf(t,`${bf(e.filePath)}${Df}`):void 0;if(!e.filePath)return;let r=ft.parse(bf(e.filePath)),n=Ff(e.name);return wf(t,ft.join(r.dir,r.name,`${n}${Df}`))}function rO(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}}var vc={NO_NODE_RESOLVED:"No node resolved for impact target",RESOLVED_BLAST_RADIUS:"Resolved blast radius",LSP_FALLBACK_APPLIED:"Applied ast_call_sites fallback for blast radius"},Mf={HIGH_MIN:6,CRITICAL_MIN:21},kf=16e3;function Gf(t,e){if(e<=kf)return t;let r=Math.sqrt(e/kf);return Math.max(t,Math.round(t*r))}function nO(t,e){let r=Gf(Mf.CRITICAL_MIN,e),n=Gf(Mf.HIGH_MIN,e);return t>=r?Ye.CRITICAL:t>=n?Ye.HIGH:t>=1?Ye.MEDIUM:Ye.LOW}var ii=class{constructor(e=he()){this.logger=e}logger;computeRiskLevel(e,r){let{l2Nodes:n}=e.graph.count();return nO(r,n)}getBlastRadius(e,r){let n=e.graph.findNodeByName(r);if(!n){this.logger.debug(vc.NO_NODE_RESOLVED,{target:r});return}let i=e.graph.getIncomingEdges(n.id),s=i.map(({id:o,name:a,type:l})=>this.buildEntry(e,o,a,l));if(this.isFileNode(n)&&s.push(...this.resolveContainedSymbolDependents(e,n.id,new Set(i.map(({id:o})=>o)))),!this.isFileNode(n)&&!this.hasStaticCallerEdge(e,n.id)){let o=new Set(s.map(l=>l.name)),a=this.resolveCallSiteFallback(e,n,o);a.length>0&&this.logger.debug(vc.LSP_FALLBACK_APPLIED,{target:r,count:a.length}),s.push(...a)}return this.logger.debug(vc.RESOLVED_BLAST_RADIUS,{target:r,count:s.length}),s}isFileNode(e){return e.filePath!==void 0&&e.name===e.filePath}resolveContainedSymbolDependents(e,r,n){let i=[],s=new Set(n),o=e.graph.getOutgoingRelations(r).filter(({linkType:a})=>a===de.CONTAINS);for(let a of o)for(let l of e.graph.getIncomingRelations(a.id)){if(l.linkType===de.CONTAINS)continue;let c=this.resolveContainingFile(e,l);c.id===r||s.has(c.id)||(s.add(c.id),i.push(this.buildEntry(e,c.id,c.name,c.type)))}return i}resolveContainingFile(e,r){return e.graph.getIncomingRelations(r.id).find(({linkType:i})=>i===de.CONTAINS)??r}hasStaticCallerEdge(e,r){return e.graph.getIncomingRelations(r).some(n=>n.linkType!==de.CONTAINS)}resolveCallSiteFallback(e,r,n){let i=e.projects.getFirst()?.id;if(!i)return[];let s=e.callSites.getByTargetFunctions(i,[r.name]),o=[];for(let a of s.keys()){if(a===r.filePath||n.has(a))continue;let l=e.graph.findNodeByName(a);!l||l.name!==a||o.push({...this.buildEntry(e,l.id,l.name,l.type),edgeSource:$n.LSP_FALLBACK})}return o}buildEntry(e,r,n,i){let s=e.l3.getByL2NodeId(r),o=s.length>0?s.map(a=>({title:a.title,content:a.content})):void 0;return o?{name:n,type:i,why:o}:{name:n,type:i}}};var iO=10,So=class{constructor(e=new ii,r=he()){this.impactService=e;this.logger=r}impactService;logger;detectChanges(e){let{store:r,baseRef:n,filesChanged:i}=e,s=[],o=0;for(let{file:c}of i){let u=this.impactService.getBlastRadius(r,c);u&&u.length>0&&(s.push({file:c,impactedBy:u}),o+=u.length)}let a=this.impactService.computeRiskLevel(r,o);a===Ye.LOW&&i.length>iO&&(a=Ye.MEDIUM);let l=this.buildAnalysis(n,i,s,a,o);return this.logger.debug(j.DETECTED_CHANGES,{baseRef:n,filesChanged:i.length,affectedNodes:s.length,riskLevel:a}),{baseRef:n,filesChanged:i,affectedNodes:s,riskLevel:a,analysis:l}}buildAnalysis(e,r,n,i,s){let o=[];if(o.push(j.analysisBase(e??j.WORKING_TREE_HEAD)),o.push(j.analysisFilesChanged(r.length)),o.push(j.analysisRiskLevel(i)),n.length===0)o.push(j.NO_LOCAL_GRAPH_IMPACT);else{o.push(j.analysisImpactedNodes(s,n.length)),o.push(j.TOP_AFFECTED_FILES);let a=[...n].sort((l,c)=>c.impactedBy.length-l.impactedBy.length).slice(0,5);for(let l of a){let c=l.impactedBy.slice(0,5).map(u=>`${u.name} (${u.type})`).join(", ");o.push(j.analysisAffectedFileLine(l.file,l.impactedBy.length,c))}}return o.join(`
133
- `)}};import Fc from"path";import bc from"path";function sO(t){return t?t.split(`
131
+ `,H),await this.writeSnapshotMetadata(a,o);let L=fn(qy),C=0,F=[];return await Promise.all(d.map(I=>L(async()=>{try{let $=tO(l,I);if(!$)return;await this.writeMarkdown($,I),C++}catch($){F.push(j.failedToWriteMarkdown(I.id,I.name,$ instanceof Error?$.message:String($)))}}))),s&&s.length>0&&await this.writeL3Cards(r,s,n,i),{nodesWritten:f.length,edgesWritten:_.length,markdownFilesWritten:C,errors:F}}async writeSnapshotMetadata(e,r){if(!r)return;let n={...r.project?{project:{name:r.project.name,repoUrl:r.project.repoUrl}}:{},files:[...r.files].sort((i,s)=>i.filePath.localeCompare(s.filePath)).map(i=>({filePath:i.filePath,contentHash:i.contentHash,lastTierBProcessedAt:i.lastTierBProcessedAt,lastTierBCommitSha:i.lastTierBCommitSha})),...r.lastIngestedSourceSha?{lastIngestedSourceSha:r.lastIngestedSourceSha}:{}};await hr.writeFile(gt.join(e,S.METADATA_JSON_NAME),JSON.stringify(n,null,2)+`
132
+ `,H)}async writeL3Cards(e,r,n,i){let s=Lf(n,i),o=gt.join(e,S.KNOWLEDGE_DIR_NAME,S.L3_DIR_NAME);await hr.mkdir(o,{recursive:!0}),await Promise.all(r.map(async a=>{if(!a.content_hash)return;let l=s.get(a.l2_node_id);l&&await hr.writeFile(gt.join(o,`${a.content_hash}.md`),Nf(a,l),H)}))}async writeMarkdown(e,r){await hr.mkdir(gt.dirname(e),{recursive:!0});let n=j.markdownFrontmatter(r.id,r.kind,r.name,r.filePath),i=r.kind===xt.FILE?j.markdownFileBody(r.name,r.filePath):j.markdownSymbolBody(r.name,r.filePath);await hr.writeFile(e,n+i,H)}},Qy=/[<>:"/\\|?*\x00-\x1f\s]/g,Xy=".",Zy="..",Df=".md",eO=new Set(["con","prn","aux","nul","com0","com1","com2","com3","com4","com5","com6","com7","com8","com9","lpt0","lpt1","lpt2","lpt3","lpt4","lpt5","lpt6","lpt7","lpt8","lpt9"]),vf="_";function Ff(t){let e=t.replace(Qy,"_");e.length>100&&(e=e.slice(0,100));let r=e.indexOf("."),n=r===-1?e:e.slice(0,r);return eO.has(n.toLowerCase())?r===-1?`${n}${vf}`:`${n}${vf}${e.slice(r)}`:e}function bf(t){return t.split(/[\\/]+/).filter(e=>e.length>0&&e!==Xy&&e!==Zy).map(Ff).join(gt.sep)}function wf(t,e){let r=gt.resolve(t),n=gt.resolve(r,e);if(n!==r&&!n.startsWith(r+gt.sep))throw new E(T.INVALID_INPUT,j.sanitizedPathEscapesKnowledgeDir(e));return n}function tO(t,e){if(e.kind===xt.FILE)return e.filePath?wf(t,`${bf(e.filePath)}${Df}`):void 0;if(!e.filePath)return;let r=gt.parse(bf(e.filePath)),n=Ff(e.name);return wf(t,gt.join(r.dir,r.name,`${n}${Df}`))}function rO(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}}var Dc={NO_NODE_RESOLVED:"No node resolved for impact target",RESOLVED_BLAST_RADIUS:"Resolved blast radius",LSP_FALLBACK_APPLIED:"Applied ast_call_sites fallback for blast radius"},Mf={HIGH_MIN:6,CRITICAL_MIN:21},kf=16e3;function Gf(t,e){if(e<=kf)return t;let r=Math.sqrt(e/kf);return Math.max(t,Math.round(t*r))}function nO(t,e){let r=Gf(Mf.CRITICAL_MIN,e),n=Gf(Mf.HIGH_MIN,e);return t>=r?$e.CRITICAL:t>=n?$e.HIGH:t>=1?$e.MEDIUM:$e.LOW}var ni=class{constructor(e=me()){this.logger=e}logger;computeRiskLevel(e,r){let{l2Nodes:n}=e.graph.count();return nO(r,n)}getBlastRadius(e,r){let n=e.graph.findNodeByName(r);if(!n){this.logger.debug(Dc.NO_NODE_RESOLVED,{target:r});return}let i=e.graph.getIncomingEdges(n.id),s=i.map(({id:o,name:a,type:l})=>this.buildEntry(e,o,a,l));if(this.isFileNode(n)&&s.push(...this.resolveContainedSymbolDependents(e,n.id,new Set(i.map(({id:o})=>o)))),!this.isFileNode(n)&&!this.hasStaticCallerEdge(e,n.id)){let o=new Set(s.map(l=>l.name)),a=this.resolveCallSiteFallback(e,n,o);a.length>0&&this.logger.debug(Dc.LSP_FALLBACK_APPLIED,{target:r,count:a.length}),s.push(...a)}return this.logger.debug(Dc.RESOLVED_BLAST_RADIUS,{target:r,count:s.length}),s}isFileNode(e){return e.filePath!==void 0&&e.name===e.filePath}resolveContainedSymbolDependents(e,r,n){let i=[],s=new Set(n),o=e.graph.getOutgoingRelations(r).filter(({linkType:a})=>a===de.CONTAINS);for(let a of o)for(let l of e.graph.getIncomingRelations(a.id)){if(l.linkType===de.CONTAINS)continue;let c=this.resolveContainingFile(e,l);c.id===r||s.has(c.id)||(s.add(c.id),i.push(this.buildEntry(e,c.id,c.name,c.type)))}return i}resolveContainingFile(e,r){return e.graph.getIncomingRelations(r.id).find(({linkType:i})=>i===de.CONTAINS)??r}hasStaticCallerEdge(e,r){return e.graph.getIncomingRelations(r).some(n=>n.linkType!==de.CONTAINS)}resolveCallSiteFallback(e,r,n){let i=e.projects.getFirst()?.id;if(!i)return[];let s=e.callSites.getByTargetFunctions(i,[r.name]),o=[];for(let a of s.keys()){if(a===r.filePath||n.has(a))continue;let l=e.graph.findNodeByName(a);!l||l.name!==a||o.push({...this.buildEntry(e,l.id,l.name,l.type),edgeSource:Kn.LSP_FALLBACK})}return o}buildEntry(e,r,n,i){let s=e.l3.getByL2NodeId(r),o=s.length>0?s.map(a=>({title:a.title,content:a.content})):void 0;return o?{name:n,type:i,why:o}:{name:n,type:i}}};var iO=10,_o=class{constructor(e=new ni,r=me()){this.impactService=e;this.logger=r}impactService;logger;detectChanges(e){let{store:r,baseRef:n,filesChanged:i}=e,s=[],o=0;for(let{file:c}of i){let u=this.impactService.getBlastRadius(r,c);u&&u.length>0&&(s.push({file:c,impactedBy:u}),o+=u.length)}let a=this.impactService.computeRiskLevel(r,o);a===$e.LOW&&i.length>iO&&(a=$e.MEDIUM);let l=this.buildAnalysis(n,i,s,a,o);return this.logger.debug(j.DETECTED_CHANGES,{baseRef:n,filesChanged:i.length,affectedNodes:s.length,riskLevel:a}),{baseRef:n,filesChanged:i,affectedNodes:s,riskLevel:a,analysis:l}}buildAnalysis(e,r,n,i,s){let o=[];if(o.push(j.analysisBase(e??j.WORKING_TREE_HEAD)),o.push(j.analysisFilesChanged(r.length)),o.push(j.analysisRiskLevel(i)),n.length===0)o.push(j.NO_LOCAL_GRAPH_IMPACT);else{o.push(j.analysisImpactedNodes(s,n.length)),o.push(j.TOP_AFFECTED_FILES);let a=[...n].sort((l,c)=>c.impactedBy.length-l.impactedBy.length).slice(0,5);for(let l of a){let c=l.impactedBy.slice(0,5).map(u=>`${u.name} (${u.type})`).join(", ");o.push(j.analysisAffectedFileLine(l.file,l.impactedBy.length,c))}}return o.join(`
133
+ `)}};import wc from"path";import vc from"path";function sO(t){return t?t.split(`
134
134
  `).map(e=>e.trim()).filter(Boolean).map(e=>{let r=JSON.parse(e);return{nodeKey:r.id,name:r.name,filePath:r.filePath}}):[]}function oO(t){return t?t.split(`
135
- `).map(e=>e.trim()).filter(Boolean).map(e=>JSON.parse(e)):[]}async function wc(t,e,r,n,i=he()){let s=bc.posix.join(S.KNOWLEDGE_DIR_NAME,S.L3_DIR_NAME),o=await t.listFilesAtRef(e,r,s);if(o.length===0)return{cardsFound:0,imported:0};let[a,l]=await Promise.all([t.readFileAtRef(e,r,bc.posix.join(S.GRAPH_DIR_NAME,S.NODES_JSONL_NAME)),t.readFileAtRef(e,r,bc.posix.join(S.GRAPH_DIR_NAME,S.EDGES_JSONL_NAME))]),c=sO(a),u=oO(l),p=new Map;for(let[f,m]of Cf(c,u))p.set(m,f);let d=0;for(let f of o){let m=await t.readFileAtRef(e,r,f);if(!m)continue;let _=Pf(m);if(!_)continue;let L=p.get(_.l2_path);if(!L)continue;let C=n.graph.findNodeIdByNodeKey(L);if(C===void 0)continue;n.l3.importCard({l2NodeId:C,contentHash:_.content_hash,title:_.title,content:_.content,nodeType:_.node_type,sourceCommits:_.source_commits,extractionModel:_.extraction_model,sourceFiles:_.source_files,createdAt:_.created_at}).imported&&d++}return i.info(j.IMPORTED_L3_CARDS,{cardsFound:o.length,imported:d}),{cardsFound:o.length,imported:d}}var aO=2e3,lO=50,cO=.5;function uO(t){return t?t.split(`
135
+ `).map(e=>e.trim()).filter(Boolean).map(e=>JSON.parse(e)):[]}async function bc(t,e,r,n,i=me()){let s=vc.posix.join(S.KNOWLEDGE_DIR_NAME,S.L3_DIR_NAME),o=await t.listFilesAtRef(e,r,s);if(o.length===0)return{cardsFound:0,imported:0};let[a,l]=await Promise.all([t.readFileAtRef(e,r,vc.posix.join(S.GRAPH_DIR_NAME,S.NODES_JSONL_NAME)),t.readFileAtRef(e,r,vc.posix.join(S.GRAPH_DIR_NAME,S.EDGES_JSONL_NAME))]),c=sO(a),u=oO(l),p=new Map;for(let[f,m]of Cf(c,u))p.set(m,f);let d=0;for(let f of o){let m=await t.readFileAtRef(e,r,f);if(!m)continue;let _=Pf(m);if(!_)continue;let L=p.get(_.l2_path);if(!L)continue;let C=n.graph.findNodeIdByNodeKey(L);if(C===void 0)continue;n.l3.importCard({l2NodeId:C,contentHash:_.content_hash,title:_.title,content:_.content,nodeType:_.node_type,sourceCommits:_.source_commits,extractionModel:_.extraction_model,sourceFiles:_.source_files,createdAt:_.created_at}).imported&&d++}return i.info(j.IMPORTED_L3_CARDS,{cardsFound:o.length,imported:d}),{cardsFound:o.length,imported:d}}var aO=2e3,lO=50,cO=.5;function uO(t){return t?t.split(`
136
136
  `).map(e=>e.trim()).filter(Boolean).map(e=>{let r=JSON.parse(e);return{nodeKey:r.id,name:r.name,filePath:r.filePath}}):[]}function dO(t){return t?t.split(`
137
- `).map(e=>e.trim()).filter(Boolean).map(e=>JSON.parse(e)):[]}function Mc(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function kc(t){return typeof t=="string"?t:null}function pO(t){if(!t)return;let e;try{e=JSON.parse(t)}catch{return}if(!Mc(e))return{files:[]};let r=e.project,n=Mc(r)&&typeof r.name=="string"&&typeof r.repoUrl=="string"?{name:r.name,repoUrl:r.repoUrl}:void 0,i=Array.isArray(e.files)?e.files.flatMap(s=>!Mc(s)||typeof s.filePath!="string"?[]:[{filePath:s.filePath,contentHash:kc(s.contentHash),lastTierBProcessedAt:kc(s.lastTierBProcessedAt),lastTierBCommitSha:kc(s.lastTierBCommitSha)}]):[];return{project:n,files:i,lastIngestedSourceSha:typeof e.lastIngestedSourceSha=="string"?e.lastIngestedSourceSha:void 0}}var To=class{constructor(e,r=he()){this.git=e;this.logger=r}git;logger;async resolveHydrationCommit(e,r=S.KNOWLEDGE_ROOT){let n=await this.git.getBranchTipSha(e,r);if(!n)return;let i=await this.git.getCommitLog(e,r,S.KNOWLEDGE_LOG_SCAN_LIMIT),s=new Map;for(let a of i){let l=gr(a.message);l&&!s.has(l)&&s.set(l,a.sha)}if(s.size===0)return n;let o=await this.git.getCommitAncestry(e,S.HEAD_REF,aO);for(let a of o){let l=s.get(a);if(l)return l}return n}async hydrate(e,r,n=S.KNOWLEDGE_ROOT,i){let s=await this.resolveHydrationCommit(e,n);if(!s)return this.logger.debug(j.NOTHING_TO_HYDRATE,{branchName:n}),{hydrated:!1,nodesLoaded:0,edgesLoaded:0,edgesDropped:0};let[o,a,l]=await Promise.all([this.git.readFileAtRef(e,s,Fc.posix.join(S.GRAPH_DIR_NAME,S.NODES_JSONL_NAME)),this.git.readFileAtRef(e,s,Fc.posix.join(S.GRAPH_DIR_NAME,S.EDGES_JSONL_NAME)),this.git.readFileAtRef(e,s,Fc.posix.join(S.GRAPH_DIR_NAME,S.METADATA_JSON_NAME))]),c=uO(o),u=dO(a),p=pO(l);if(!(i?.force??!1)){let m=this.checkDestructiveRebuildGuard(r,c.length);if(m)return this.logger.warn(m.message,{knowledgeSha:s,incomingNodes:c.length}),{hydrated:!1,refused:!0,refusalReason:m.reason,nodesLoaded:0,edgesLoaded:0,edgesDropped:0}}let f=await r.withWriteLock(async()=>{let m=this.restoreSnapshotMetadata(r,p),_=r.graph.bulkLoadGraph({projectId:m,nodes:c,edges:u});return await wc(this.git,e,s,r,this.logger),r.meta.set(S.META_KEY_KNOWLEDGE_TIP_SHA,s),_});return this.logger.info(j.HYDRATED_KNOWLEDGE_GRAPH,{knowledgeSha:s,...f}),{hydrated:!0,knowledgeSha:s,...f}}restoreSnapshotMetadata(e,r){let n=this.resolveHydratedProjectId(e,r?.project);for(let i of r?.files??[])this.restoreFileMetadata(e,n,i);return r?.lastIngestedSourceSha&&e.meta.set(S.META_KEY_LAST_INGESTED_SOURCE_SHA,r.lastIngestedSourceSha),n}resolveHydratedProjectId(e,r){return r?e.projects.getOrInsert({name:r.name,repoUrl:r.repoUrl}).id:e.projects.getFirst()?.id??S.DEFAULT_LOCAL_PROJECT_ID}restoreFileMetadata(e,r,n){e.files.upsertFile({projectId:r,filePath:n.filePath,contentHash:n.contentHash}),n.lastTierBProcessedAt!==null&&e.files.markTierBProcessed({projectId:r,filePath:n.filePath,commitSha:n.lastTierBCommitSha,processedAt:n.lastTierBProcessedAt})}checkDestructiveRebuildGuard(e,r){if(e.meta.get(S.META_KEY_KNOWLEDGE_PACK_PENDING))return{reason:"pending-local-write",message:j.HYDRATE_REFUSED_PENDING_WRITE};let n=e.graph.count().l2Nodes;if(n>=lO&&r<n*cO)return{reason:"catastrophic-shrink",message:j.hydrateRefusedCatastrophicShrink(n,r)}}async isStale(e,r,n=S.KNOWLEDGE_ROOT){let i=await this.resolveHydrationCommit(e,n);return i?r.meta.get(S.META_KEY_KNOWLEDGE_TIP_SHA)!==i:!1}async markSynced(e,r,n=S.KNOWLEDGE_ROOT){let i=await this.resolveHydrationCommit(e,n);i&&await r.withWriteLock(()=>{r.meta.set(S.META_KEY_KNOWLEDGE_TIP_SHA,i)})}async importL3Cards(e,r,n){return n.withWriteLock(()=>wc(this.git,e,r,n,this.logger))}};var Nd=nc(Ad(),1),KE=nc(GE(),1);import HE from"path";import BE from"fs/promises";import WN from"crypto";var Ae={PACKAGE_JSON_TYPESCRIPT:"package.json:typescript",PACKAGE_JSON_REACT:"package.json:react",PACKAGE_JSON_VUE:"package.json:vue",PACKAGE_JSON_NEXT:"package.json:next",PACKAGE_JSON_EXPRESS:"package.json:express",PACKAGE_JSON_DRIZZLE_ORM:"package.json:drizzle-orm",PACKAGE_JSON_TAILWINDCSS:"package.json:tailwindcss",PACKAGE_JSON_JEST:"package.json:jest",PACKAGE_JSON_VITEST:"package.json:vitest",PACKAGE_JSON_PG:"package.json:pg",PACKAGE_JSON_WORKSPACES:"package.json:workspaces",CARGO_BASE:"cargo:base",CARGO_TOKIO:"cargo:tokio",CARGO_ACTIX:"cargo:actix",CARGO_SERDE:"cargo:serde",CARGO_TAURI:"cargo:tauri",PYTHON_BASE:"python:base",PYTHON_DJANGO:"python:django",PYTHON_FASTAPI:"python:fastapi",PYTHON_PANDAS:"python:pandas",GO_BASE:"go:base",GO_GIN:"go:gin",TSCONFIG_STRICT:"tsconfig:strict",VITE_PRESENCE:"vite:presence",DRIZZLE_PRESENCE:"drizzle:presence",TAURI_PRESENCE:"tauri:presence"},oe={PACKAGE_JSON:"package.json",CARGO_TOML:"Cargo.toml",PYPROJECT_TOML:"pyproject.toml",REQUIREMENTS_TXT:"requirements.txt",GO_MOD:"go.mod",TSCONFIG_JSON:"tsconfig.json",JSCONFIG_JSON:"jsconfig.json"},Vr={VITE_CONFIG:"vite.config",DRIZZLE_CONFIG:"drizzle.config",TAURI_CONF:"tauri.conf",WEBPACK_CONFIG:"webpack.config"},Ge={PACKAGE_JSON_TYPESCRIPT:'"typescript"',PACKAGE_JSON_REACT:'"react"',PACKAGE_JSON_VUE:'"vue"',PACKAGE_JSON_NEXT:'"next"',PACKAGE_JSON_EXPRESS:'"express"',PACKAGE_JSON_DRIZZLE_ORM:'"drizzle-orm"',PACKAGE_JSON_TAILWINDCSS:'"tailwindcss"',PACKAGE_JSON_JEST:'"jest"',PACKAGE_JSON_VITEST:'"vitest"',PACKAGE_JSON_PG:'"pg"',PACKAGE_JSON_WORKSPACES:'"workspaces"',CARGO_TOKIO:"tokio",CARGO_ACTIX:"actix",CARGO_SERDE:"serde",CARGO_TAURI:"tauri",PYTHON_DJANGO:"django",PYTHON_FASTAPI:"fastapi",PYTHON_PANDAS:"pandas",GO_GIN:"gin-gonic"},bt={CONFIG_SCAN_FAILED:"Config scanning failed",STARTING_GIT_BLOB_SCAN:"Starting global AST scan using Git-native blob hashing",GIT_OPS_FAILED_FALLBACK:"Git operations failed during discovery, falling back to manual globbing",GIT_UNAVAILABLE_FALLBACK:"Git unavailable or no .git repository found; falling back to fast-glob + manual sha256 hashing",NO_GITIGNORE_FOUND:"No .gitignore found, proceeding without it",DISCOVERED_SOURCE_FILES:"Discovered source files",SKIPPING_OVERSIZED_FILE:"Skipping oversized file",GIT_HASH_DELTA_CHECK_COMPLETE:"Git hash delta check complete",VCS_HOTSPOT_DOMAINS_EXTRACTED:"VCS hotspot analysis extracted functional domains"},Zo=[`${ct}/**`,".git/**","dist/**","build/**"],xE=[ct,"dist","build","docs","test","tests","scripts"],fs="src",UE=[fs,"lib","app"];var jN=".gitignore",ea=class{constructor(e,r=he()){this.git=e;this.logger=r}git;logger;async discoverFiles(e,r,n={}){let{onlyIndexed:i=!1}=n,s=new Map,o=new Set,{allFiles:a,usingGit:l}=await this.resolveCandidateFiles(e,i,s,o),c=this.buildExistingHashesMap(r),u={workspaceRoot:e,onlyIndexed:i,usingGit:l,gitBlobHashes:s,dirtyFiles:o,existingHashes:c},{filesToParse:p,skippedOversized:d,skippedCount:f}=await this.categorizeFiles(a,u);return this.logger.debug(bt.GIT_HASH_DELTA_CHECK_COMPLETE,{filesToParse:p.length,skipped:f,skippedOversized:d.length}),{filesToParse:p,existingHashes:c,skippedCount:f,skippedOversized:d}}async resolveCandidateFiles(e,r,n,i){let s=await this.git.isGitRepository(e),o=[];if(s){this.logger.debug(bt.STARTING_GIT_BLOB_SCAN);let a=await this.scanGitTrackedFiles(e,r,n,i);a?o=a:s=!1}return s||(o=await this.discoverViaGlobFallback(e,i)),o=o.filter(a=>Yn(a)),this.logger.debug(bt.DISCOVERED_SOURCE_FILES,{count:o.length}),{allFiles:o,usingGit:s}}async scanGitTrackedFiles(e,r,n,i){try{let s=await this.git.listTrackedFilesWithBlobHash(e);for(let[l,c]of s)n.set(l,c);let o=await this.git.listUntrackedFiles(e),a=await this.git.listModifiedFiles(e);return r?[...n.keys()]:([...o,...a].forEach(l=>{l.trim()&&i.add(l.trim())}),[...n.keys(),...o])}catch(s){return this.logger.warn(bt.GIT_OPS_FAILED_FALLBACK,{error:s instanceof Error?s.message:String(s)}),null}}async discoverViaGlobFallback(e,r){this.logger.debug(bt.GIT_UNAVAILABLE_FALLBACK);let n=(0,KE.default)();try{let c=await BE.readFile(HE.join(e,jN),H);n.add(c)}catch{this.logger.debug(bt.NO_GITIGNORE_FOUND)}let i=[...Zo,`${Ee}/**`],[s,o]=await Promise.all([(0,Nd.default)(`**/*.{${uc().join(",")}}`,{cwd:e,ignore:i,absolute:!1}),(0,Nd.default)(`**/{${Array.from(cc).join(",")}}`,{cwd:e,ignore:i,absolute:!1})]),a=[...s,...o],l=n.filter(a);return l.forEach(c=>r.add(c)),l}buildExistingHashesMap(e){let r=new Map;for(let{filePath:n,contentHash:i}of e.getAllHashes())i!==null&&r.set(n,i);return r}async categorizeFiles(e,r){let n=[],i=[],s=0;for(let o of e){let a=await this.resolveFileOutcome(o,r);switch(a.kind){case"parse":n.push(a.entry);break;case"oversized":i.push({file:a.file,sizeBytes:a.sizeBytes});break;case"skip":s++;break;case"unreadable":break}}return{filesToParse:n,skippedOversized:i,skippedCount:s}}async resolveFileOutcome(e,r){let n=this.resolveKnownBlobHash(e,r);if(n&&r.existingHashes.get(e)===n)return{kind:"skip"};let i=await this.readFileForHashing(e,n,r);if(!i)return{kind:"unreadable"};if(r.existingHashes.get(e)===i.hash)return{kind:"skip"};let s=Buffer.byteLength(i.code);return s>512e3?(this.logger.warn(bt.SKIPPING_OVERSIZED_FILE,{file:e,sizeBytes:s}),{kind:"oversized",file:e,sizeBytes:s}):{kind:"parse",entry:{file:e,hash:i.hash,code:i.code}}}resolveKnownBlobHash(e,r){let n=r.dirtyFiles.has(e),i="";return!n&&r.gitBlobHashes.has(e)&&(i=r.gitBlobHashes.get(e)),r.onlyIndexed&&r.usingGit&&r.gitBlobHashes.has(e)&&(i=r.gitBlobHashes.get(e)),i}async readFileForHashing(e,r,n){try{let i;if(n.onlyIndexed&&n.usingGit&&n.gitBlobHashes.has(e)){let o=n.gitBlobHashes.get(e);i=await this.git.readBlobContent(n.workspaceRoot,o)}else i=await BE.readFile(HE.join(n.workspaceRoot,e),H);let s=r||WN.createHash(Zt).update(i).digest("hex");return{code:i,hash:s}}catch{return null}}};var YE=nc(Ad(),1);import VN from"path";import zN from"fs/promises";function na(t){return e=>e===t}function Pd(t){return e=>e.startsWith(t)}function Be(t,e,r,n){return{id:t,matchesFile:e,detect:i=>i.includes(r)?{tags:n}:null}}function fi(t,e,r){return{id:t,matchesFile:e,detect:()=>r}}var $t=na(oe.PACKAGE_JSON),ms=na(oe.CARGO_TOML),ta=t=>t===oe.PYPROJECT_TOML||t===oe.REQUIREMENTS_TXT,$E=na(oe.GO_MOD),JN=na(oe.TSCONFIG_JSON),qN=[Be(Ae.PACKAGE_JSON_TYPESCRIPT,$t,Ge.PACKAGE_JSON_TYPESCRIPT,[pr.TYPESCRIPT]),Be(Ae.PACKAGE_JSON_REACT,$t,Ge.PACKAGE_JSON_REACT,[pr.REACT,se.FRONTEND]),Be(Ae.PACKAGE_JSON_VUE,$t,Ge.PACKAGE_JSON_VUE,[pr.VUE,se.FRONTEND]),Be(Ae.PACKAGE_JSON_NEXT,$t,Ge.PACKAGE_JSON_NEXT,[se.NEXTJS,se.FRONTEND,se.SSR]),Be(Ae.PACKAGE_JSON_EXPRESS,$t,Ge.PACKAGE_JSON_EXPRESS,[pr.EXPRESS,se.BACKEND]),Be(Ae.PACKAGE_JSON_DRIZZLE_ORM,$t,Ge.PACKAGE_JSON_DRIZZLE_ORM,[se.DRIZZLE,se.DATABASE]),Be(Ae.PACKAGE_JSON_TAILWINDCSS,$t,Ge.PACKAGE_JSON_TAILWINDCSS,[se.TAILWINDCSS,se.CSS]),Be(Ae.PACKAGE_JSON_JEST,$t,Ge.PACKAGE_JSON_JEST,[se.JEST,se.TESTING]),Be(Ae.PACKAGE_JSON_VITEST,$t,Ge.PACKAGE_JSON_VITEST,[se.VITEST,se.TESTING]),Be(Ae.PACKAGE_JSON_PG,$t,Ge.PACKAGE_JSON_PG,[se.POSTGRES,se.DATABASE]),Be(Ae.PACKAGE_JSON_WORKSPACES,$t,Ge.PACKAGE_JSON_WORKSPACES,[se.MONOREPO]),fi(Ae.CARGO_BASE,ms,{projectType:Tt.RUST,tags:[Tt.RUST]}),Be(Ae.CARGO_TOKIO,ms,Ge.CARGO_TOKIO,[se.TOKIO,se.ASYNC]),Be(Ae.CARGO_ACTIX,ms,Ge.CARGO_ACTIX,[se.ACTIX,se.BACKEND]),Be(Ae.CARGO_SERDE,ms,Ge.CARGO_SERDE,[se.SERDE]),Be(Ae.CARGO_TAURI,ms,Ge.CARGO_TAURI,[se.TAURI,se.DESKTOP]),fi(Ae.PYTHON_BASE,ta,{projectType:Tt.PYTHON,tags:[Tt.PYTHON]}),Be(Ae.PYTHON_DJANGO,ta,Ge.PYTHON_DJANGO,[se.DJANGO,se.BACKEND]),Be(Ae.PYTHON_FASTAPI,ta,Ge.PYTHON_FASTAPI,[se.FASTAPI,se.BACKEND]),Be(Ae.PYTHON_PANDAS,ta,Ge.PYTHON_PANDAS,[se.PANDAS,se.DATA]),fi(Ae.GO_BASE,$E,{projectType:Tt.GO,tags:[Tt.GO]}),Be(Ae.GO_GIN,$E,Ge.GO_GIN,[se.GIN,se.BACKEND]),{id:Ae.TSCONFIG_STRICT,matchesFile:JN,detect:t=>/"strict"\s*:\s*true/.test(t)?{tags:[se.STRICT_TS]}:null},fi(Ae.VITE_PRESENCE,Pd(Vr.VITE_CONFIG),{tags:[se.VITE,se.BUILD_TOOL]}),fi(Ae.DRIZZLE_PRESENCE,Pd(Vr.DRIZZLE_CONFIG),{tags:[se.DRIZZLE,se.DATABASE]}),fi(Ae.TAURI_PRESENCE,Pd(Vr.TAURI_CONF),{tags:[se.TAURI,se.DESKTOP]})],QN=[`**/${oe.PACKAGE_JSON}`,`**/${oe.CARGO_TOML}`,`**/${oe.PYPROJECT_TOML}`,`**/${oe.REQUIREMENTS_TXT}`,`**/${oe.GO_MOD}`,`**/${oe.TSCONFIG_JSON}`,`**/${Vr.VITE_CONFIG}.*`,`**/${Vr.DRIZZLE_CONFIG}.*`,`**/${Vr.WEBPACK_CONFIG}.*`,`**/${Vr.TAURI_CONF}.*`],XN=[...Zo,"target/**","venv/**",".venv/**","**/fixtures/**","**/__fixtures__/**","**/test-data/**"],ra=class{constructor(e=he()){this.logger=e}logger;async scanConfigs(e){let r=Tt.UNKNOWN,n=new Set;try{let i=await(0,YE.default)(QN,{cwd:e,ignore:XN,absolute:!0,deep:3});r=await this.scanAllConfigFiles(i,n),r=this.resolveJavascriptFallback(r,n)}catch(i){this.logger.warn(bt.CONFIG_SCAN_FAILED,{error:i?.message??String(i)})}return r===Tt.UNKNOWN&&(r=Tt.GENERIC),n.size===0&&n.add(ag),{projectType:r,tags:Array.from(n)}}async scanAllConfigFiles(e,r){let n=Tt.UNKNOWN;for(let i of e){let s=await this.readConfigFileContent(i);if(s===null)continue;let o=VN.basename(i),a=this.applyDetectionRules(o,s,r);a&&(n=a)}return n}async readConfigFileContent(e){try{return await zN.readFile(e,H)}catch{return null}}applyDetectionRules(e,r,n){let i;for(let s of qN){if(!s.matchesFile(e))continue;let o=s.detect(r);if(o){o.projectType&&(i=o.projectType);for(let a of o.tags)n.add(a)}}return i}resolveJavascriptFallback(e,r){return(r.has(pr.TYPESCRIPT)||r.has(pr.REACT)||r.has(pr.EXPRESS)||r.has(pr.VUE))&&e===Tt.UNKNOWN?Tt.JAVASCRIPT:e}};var Dd=".",ZN=["packages","artifacts","crates"],eP="domain:";function tP(t){return t[0]===fs&&t.length>1||t.length>3&&ZN.includes(t[0])&&t[2]===fs?t[1]:(t.length>2&&t[1]===fs,t[0])}function rP(t){let e=t.split("/");if(e.length<=1||e[0].startsWith(Dd)||xE.includes(e[0]))return null;let r=tP(e);return r.includes(Dd)||r.startsWith(Dd)||UE.includes(r)?null:r}var ia=class{constructor(e,r=he()){this.git=e;this.logger=r}git;logger;async extractHotspotTags(e){let r=new Set;try{if(!await this.git.isGitRepository(e))return[];let i=await this.git.getRecentChangedFilePaths(e,100),s=this.countChangedPathDomains(i),o=this.selectTopDomains(s);for(let a of o)a.length>2&&r.add(`${eP}${a}`);o.length>0&&this.logger.debug(bt.VCS_HOTSPOT_DOMAINS_EXTRACTED,{domains:o})}catch{}return Array.from(r)}countChangedPathDomains(e){let r=new Map;for(let n of e){let i=n.trim();if(!i)continue;let s=rP(i);s&&r.set(s,(r.get(s)||0)+1)}return r}selectTopDomains(e){return Array.from(e.entries()).sort((r,n)=>n[1]-r[1]).slice(0,5).map(r=>r[0])}};import cP from"os";import{Worker as nP}from"worker_threads";import*as Es from"path";import*as zr from"fs";import{fileURLToPath as iP}from"url";import sP from"crypto";var oP=iP(import.meta.url),WE=Es.dirname(oP),sa={FORMAT:"esm",PLATFORM:"node",TARGET:"node20",EXTERNAL_TREE_SITTER:"web-tree-sitter"},hs={EVAL:"--eval",PRINT:"--print",IMPORT:"--import",TSX_LOADER:"tsx"};async function aP(t,e){let r=await import("esbuild"),n=`${e}.${process.pid}.tmp`;await r.build({entryPoints:[t],outfile:n,bundle:!0,format:sa.FORMAT,platform:sa.PLATFORM,target:sa.TARGET,external:[sa.EXTERNAL_TREE_SITTER]}),zr.renameSync(n,e)}function lP(t,e){return zr.existsSync(e)?zr.existsSync(t)?zr.statSync(t).mtimeMs>zr.statSync(e).mtimeMs:!1:!0}var _s=class extends Error{constructor(r,n){super(We.workerCrashWhileParsing(r??We.UNKNOWN_FILE)+(n instanceof Error?n.message:String(n)));this.filePath=r;this.cause=n;this.name=dg}filePath;cause},oa=class{constructor(e=he(),r=3e4,n,i){this.logger=e;this.taskTimeoutMs=r;this.cache=n;this.workerScriptPathOverride=i;this.ipcLogRouter=new Hp(this.logger)}logger;taskTimeoutMs;cache;workerScriptPathOverride;workers=[];workerTasks=new Map;workerOptions={};wPath="";workerQueue=[];spawnChain=Promise.resolve();taskQueue=[];taskCounter=0;pendingTasks=new Map;taskTimeouts=new Map;taskFilePaths=new Map;timedOutWorkers=new WeakSet;shuttingDown=!1;ipcLogRouter;batchChain=Promise.resolve();enqueueSpawn(){return this.spawnChain=this.spawnChain.then(async()=>{this.spawnWorker(),await new Promise(e=>setImmediate(e))}),this.spawnChain}spawnWorker(){let e=new nP(this.wPath,this.workerOptions);e.on("message",n=>{if(this.ipcLogRouter.handleMessage(n))return;this.workerTasks.delete(e);let i=this.taskTimeouts.get(n.taskId);i&&(clearTimeout(i),this.taskTimeouts.delete(n.taskId));let s=this.pendingTasks.get(n.taskId);s&&(this.pendingTasks.delete(n.taskId),this.taskFilePaths.delete(n.taskId),s.resolve(n)),this.workerQueue.push(e),this.processQueue()});let r=n=>{let i=this.timedOutWorkers.delete(e),s=this.workerTasks.get(e),o=s?this.taskFilePaths.get(s):void 0;if(this.shuttingDown?this.logger.debug(We.WORKER_EXITED_DURING_SHUTDOWN,{taskId:s,filePath:o}):this.logger.error(We.WORKER_CRASHED_EXITED,{taskId:s,filePath:o,hadInFlightTask:!!s,error:n instanceof Error?{message:n.message,name:n.name}:n}),s){let a=this.taskTimeouts.get(s);a&&(clearTimeout(a),this.taskTimeouts.delete(s));let l=this.pendingTasks.get(s);l&&(l.reject(new _s(o,i?new Error(We.taskTimedOutAfterMs(s,this.taskTimeoutMs)):n||new Error(We.WORKER_EXITED_UNEXPECTEDLY))),this.pendingTasks.delete(s)),this.workerTasks.delete(e),this.taskFilePaths.delete(s)}this.workers=this.workers.filter(a=>a!==e),this.workerQueue=this.workerQueue.filter(a=>a!==e),this.shuttingDown||this.enqueueSpawn()};return e.on("error",r),e.on("exit",n=>{n!==0&&r(new Error(We.workerExitedWithCode(n)))}),this.workers.push(e),this.workerQueue.push(e),this.processQueue(),e}async initialize(e=2){if(this.workers.length>0)return;if(this.shuttingDown=!1,this.workerScriptPathOverride){this.wPath=this.workerScriptPathOverride,this.workerOptions.execArgv=process.execArgv.filter(n=>!n.includes(hs.EVAL)&&!n.includes(hs.PRINT)),this.workerOptions.execArgv.some(n=>n.includes(hs.TSX_LOADER))||this.workerOptions.execArgv.push(hs.IMPORT,hs.TSX_LOADER);for(let n=0;n<e;n++)await this.enqueueSpawn();return}this.wPath=Es.resolve(WE,"./ast-worker.js");let r=Es.resolve(WE,"./ast-worker.ts");lP(r,this.wPath)&&await aP(r,this.wPath),this.workerOptions.execArgv=[];for(let n=0;n<e;n++)await this.enqueueSpawn()}parse(e){return new Promise((r,n)=>{let i;if(this.cache){i=sP.createHash(Zt).update(e.code).digest("hex");let o=performance.now(),a=this.cache.get(i),l=performance.now()-o;if(a){this.logger.debug(We.PARSE_CACHE_HIT,{contentHash:i,cacheLookupTimeMs:Number(l.toFixed(2))}),r(a);return}}let s=Date.now();this.taskQueue.push({request:e,resolve:o=>{if(this.cache){this.cache.set(i,o);let a=this.cache.metrics;if(a.hits+a.misses>0&&(a.hits+a.misses)%100===0){let l=a.hits/(a.hits+a.misses)*100,c=Date.now()-s;this.logger.info(We.CACHE_METRICS_AND_QUEUE_PERFORMANCE,{hitRate:Number(l.toFixed(2)),queueWaitTimeMs:c,...a})}}r(o)},reject:n}),this.processQueue()})}processQueue(){for(;this.taskQueue.length>0&&this.workerQueue.length>0;){let e=this.taskQueue.shift(),r=this.workerQueue.shift(),n=String(++this.taskCounter);this.pendingTasks.set(n,{resolve:e.resolve,reject:e.reject}),this.workerTasks.set(r,n),this.taskFilePaths.set(n,e.request.filePath);let i=setTimeout(()=>{this.taskTimeouts.delete(n),this.timedOutWorkers.add(r),this.logger.error(We.TASK_TIMED_OUT_TERMINATING,{taskId:n,filePath:this.taskFilePaths.get(n),taskTimeoutMs:this.taskTimeoutMs}),r.terminate().catch(s=>{this.logger.warn(We.WORKER_TERMINATE_FAILED,{taskId:n,filePath:this.taskFilePaths.get(n),error:s instanceof Error?{message:s.message,name:s.name}:s})})},this.taskTimeoutMs);this.taskTimeouts.set(n,i),r.postMessage({...e.request,taskId:n})}}async terminate(){this.shuttingDown=!0;let e=new Error(We.POOL_TERMINATED);for(let n of this.taskTimeouts.values())clearTimeout(n);this.taskTimeouts.clear();for(let n of this.pendingTasks.values())n.reject(e);this.pendingTasks.clear();for(let n of this.taskQueue)n.reject(e);this.taskQueue=[],this.workerTasks.clear(),this.taskFilePaths.clear(),this.workerQueue=[];let r=this.workers;this.workers=[],await Promise.all(r.map(n=>n.terminate()))}async serializeBatch(e){let r=this.batchChain.then(e);return this.batchChain=r.then(()=>{},()=>{}),r}};var aa=class{constructor(e,r=he()){this.workerPool=e;this.logger=r}workerPool;logger;async processFiles(e,r){return this.workerPool.serializeBatch(()=>this.runBatch(e,r))}async runBatch(e,r){let n=this.workerPool,i=Math.max(1,(cP.cpus().length||4)-1);await n.initialize(i);let s=u=>Vs(u)??lg.TYPESCRIPT,o=[],a=[],l=new Array(r.length),c=r.map(async(u,p)=>{try{let d=await n.parse({filePath:u.file,code:u.code,language:s(u.file)});if(d.success&&d.data)l[p]={outcome:"parsed",result:{file:u.file,hash:u.hash,data:d.data,language:Vs(u.file)}};else{let f=d.error??We.PARSE_FAILURE_NO_DETAIL;this.logger.warn(We.PARSE_FAILURE_RESULT,{file:u.file,error:f}),l[p]={outcome:"failed",failure:{file:u.file,hash:u.hash,error:f}}}}catch(d){let f=d instanceof _s||d instanceof Error?d.message:String(d);this.logger.error(We.PARSE_THREW,{file:u.file,error:f}),l[p]={outcome:"failed",failure:{file:u.file,hash:u.hash,error:f}}}});await Promise.all(c);for(let u of l)u.outcome==="parsed"?o.push(u.result):a.push(u.failure);return await n.terminate(),{parsed:o,failures:a}}};import*as Ts from"path";import*as tt from"path";import*as Et from"fs";import*as ca from"fs";import la from"path";function On(t,e){let r=la.resolve(t),n=la.resolve(r,e),i=r.endsWith(la.sep)?r:r+la.sep;return n===r||n.startsWith(i)?n:null}function Jr(t,e){let r=On(t,e);if(!r||!ca.existsSync(r))return null;try{return ca.readFileSync(r,H)}catch{return null}}function jE(t){return t.replace(/\\"|"(?:\\"|[^"])*"|(\/\/.*|\/\*[\s\S]*?\*\/)/g,(e,r)=>r?"":e)}var uP="tsconfig.base.json",dP="pnpm-workspace.yaml",pP="index.js",gP="src",fP="index",ua="*",VE=".",zE=[".ts",".js",".tsx",".jsx",".py",".rs",".go",".java",".cpp",".cc",".c",".h",".hpp"],mP=["/index.ts","/index.js"],JE=".go",qE={TSCONFIG_PARSE_FAILED:"Failed to JSON-parse tsconfig.json",TSCONFIG_FILES_READ_FAILED:"Failed to read or parse tsconfig files"},vd="*",hP="node:",EP=/^(@[^/]+\/[^/]+|[^/]+)/,mi=class t{constructor(e,r=he()){this.workspaceRoot=e;this.logger=r;this.loadTsConfigPaths()}workspaceRoot;logger;exportsByFile=new Map;importsByFile=new Map;localsByFile=new Map;tsConfigPaths={};goFilesByDirectory=new Map;loadTsConfigPaths(){try{this.mergeProjectTsConfigPaths(),this.mergeBaseTsConfigPaths()}catch(e){this.logger.debug(qE.TSCONFIG_FILES_READ_FAILED,{error:e?.message??String(e)})}}mergeProjectTsConfigPaths(){let e=tt.join(this.workspaceRoot,oe.TSCONFIG_JSON);if(!Et.existsSync(e))return;let r=Et.readFileSync(e,H),n=jE(r);try{let i=JSON.parse(n);i.compilerOptions&&i.compilerOptions.paths&&(this.tsConfigPaths={...this.tsConfigPaths,...i.compilerOptions.paths})}catch(i){this.logger.debug(qE.TSCONFIG_PARSE_FAILED,{error:i instanceof Error?i.message:String(i)})}}mergeBaseTsConfigPaths(){let e=tt.join(this.workspaceRoot,uP);if(!Et.existsSync(e))return;let r=Et.readFileSync(e,H),n=jE(r),i=JSON.parse(n);i.compilerOptions&&i.compilerOptions.paths&&(this.tsConfigPaths={...i.compilerOptions.paths,...this.tsConfigPaths})}registerFile(e,r,n,i){let s=e.replace(/\\/g,"/");if(this.importsByFile.set(s,r),this.exportsByFile.set(s,new Set(n)),this.localsByFile.set(s,new Set(i)),s.endsWith(JE)){let o=tt.posix.dirname(s),a=this.goFilesByDirectory.get(o);a||(a=new Set,this.goFilesByDirectory.set(o,a)),a.add(s)}}resolveCall(e,r){let n=e.replace(/\\/g,"/"),i=this.localsByFile.get(n);if(i&&i.has(r))return{targetFile:n,targetSymbol:r};let s=this.importsByFile.get(n)||[];for(let o of s){if(o.localName!==r)continue;let a=this.resolveImportedBinding(n,o,r);if(a)return a}if(n.endsWith(JE)){let o=this.resolveGoSamePackageCall(n,r);if(o)return o}return null}resolveImportedBinding(e,r,n){let i=this.resolveModulePath(e,r.modulePath);if(!i)return null;let s=r.originalName===vd?n:r.originalName;return this.resolveReexportTarget(e,i,s)??{targetFile:i,targetSymbol:s}}resolveMemberCall(e,r,n){let i=e.replace(/\\/g,"/");if(r==="this"||r==="super")return this.localsByFile.get(i)?.has(n)?{targetFile:i,targetSymbol:n}:null;let s=this.resolveImportReceiverMethod(i,r,n);return s||(this.localsByFile.get(i)?.has(n)?{targetFile:i,targetSymbol:n}:null)}resolveImportReceiverMethod(e,r,n){let i=this.importsByFile.get(e)||[];for(let s of i){if(s.localName!==r)continue;let o=this.resolveModulePath(e,s.modulePath);if(!o)continue;let a=this.resolveReexportTarget(e,o,n);if(a)return a;if(this.localsByFile.get(o)?.has(n))return{targetFile:o,targetSymbol:n};let l=this.resolveMethodAtReceiverDeclaration(e,s,r,n,o);if(l)return l}return null}resolveMethodAtReceiverDeclaration(e,r,n,i,s){let o=r.originalName===vd?n:r.originalName,a=this.resolveReexportTarget(e,s,o);return!a||!this.localsByFile.get(a.targetFile)?.has(i)?null:{targetFile:a.targetFile,targetSymbol:i}}isExternalBinding(e,r){let n=e.replace(/\\/g,"/");return(this.importsByFile.get(n)||[]).some(s=>s.localName===r&&this.isExternalSpecifier(n,s.modulePath))}hasBinding(e,r){return(this.importsByFile.get(e.replace(/\\/g,"/"))??[]).some(n=>n.localName===r)}declaresLocal(e,r){return this.localsByFile.get(e.replace(/\\/g,"/"))?.has(r)??!1}isExternalSpecifier(e,r){if(r.startsWith(hP))return!0;if(r.startsWith(VE))return!1;let n=EP.exec(r)?.[1];if(n&&this.getWorkspacePackageDirs().has(n)||this.matchesTsConfigAlias(r))return!1;let i=this.resolveModulePath(e,r);return i?i.startsWith(`${ct}/`)||i.includes(`/${ct}/`):!0}matchesTsConfigAlias(e){return Object.keys(this.tsConfigPaths).some(r=>e.startsWith(r.replace(ua,"")))}resolveReexportTarget(e,r,n){let i=r,s=n,o=new Set([e]);for(;!o.has(i);){if(o.add(i),this.localsByFile.get(i)?.has(s))return{targetFile:i,targetSymbol:s};let a=this.importsByFile.get(i)?.find(c=>c.localName===s);if(!a)return null;let l=this.resolveModulePath(i,a.modulePath);if(!l)return null;i=l,s=a.originalName===vd?s:a.originalName}return null}resolveGoSamePackageCall(e,r){let n=tt.posix.dirname(e),i=this.goFilesByDirectory.get(n);if(!i)return null;for(let s of i)if(s!==e&&this.localsByFile.get(s)?.has(r))return{targetFile:s,targetSymbol:r};return null}resolveWorkerSpawnPath(e,r){let n=tt.posix.dirname(e.replace(/\\/g,"/")),i=tt.posix.join(n,r.replace(/\.jsx?$/,""));return this.findFileWithExtension(i)}resolveModulePath(e,r){if(r.startsWith(VE)){let n=tt.posix.dirname(e),i=tt.posix.join(n,r);return this.findFileWithExtension(i)}for(let[n,i]of Object.entries(this.tsConfigPaths)){let s=n.replace(ua,"");if(r.startsWith(s)){let o=r.slice(s.length);for(let a of i){let l=a.replace(ua,o),c=this.findFileWithExtension(l);if(c)return c}}}return this.resolveBareImport(r)}packageDirCache=null;getWorkspacePackageDirs(){if(this.packageDirCache)return this.packageDirCache;let e=new Map;for(let r of this.getWorkspaceGlobs())this.collectPackageDirsForGlob(r,e);return this.packageDirCache=e,e}collectPackageDirsForGlob(e,r){let n=e.indexOf(ua),i=(n>=0?e.slice(0,n):e).replace(/\/$/,""),s=On(this.workspaceRoot,i);if(!s||!Et.existsSync(s))return;let o;try{o=Et.readdirSync(s,{withFileTypes:!0})}catch{return}for(let a of o)this.registerPackageDirEntry(i,s,a,r)}registerPackageDirEntry(e,r,n,i){if(!n.isDirectory())return;let s=tt.join(r,n.name,oe.PACKAGE_JSON);if(Et.existsSync(s))try{let o=JSON.parse(Et.readFileSync(s,H));o.name&&i.set(o.name,tt.posix.join(e,n.name))}catch{}}getWorkspaceGlobs(){try{let e=Jr(this.workspaceRoot,dP);if(e){let n=/packages:\s*\n((?:\s*-\s+.+\n?)+)/.exec(e);if(n){let i=[...n[1].matchAll(/^\s*-\s+["']?([^"'\n#]+?)["']?\s*$/gm)].map(s=>s[1].trim());if(i.length>0)return i}}let r=Jr(this.workspaceRoot,oe.PACKAGE_JSON);if(r){let n=JSON.parse(r);if(Array.isArray(n.workspaces))return n.workspaces;if(Array.isArray(n.workspaces?.packages))return n.workspaces.packages}}catch{}return[]}resolveBareImport(e){let r=/^(@[^/]+\/[^/]+|[^/]+)(\/.*)?$/.exec(e);if(!r)return null;let n=r[1],i=r[2]?.slice(1),s=this.resolveWorkspaceSiblingImport(n,i);return s||this.resolveNodeModulesImport(n,i)}resolveWorkspaceSiblingImport(e,r){let n=this.getWorkspacePackageDirs().get(e);if(!n)return null;let i=r?tt.posix.join(n,r):tt.posix.join(n,gP,fP),s=this.findFileWithExtension(i);return s||this.findFileWithExtension(n)}resolveNodeModulesImport(e,r){try{let n=Jr(this.workspaceRoot,tt.join(ct,e,oe.PACKAGE_JSON));if(!n)return null;let i=JSON.parse(n),s=r||i.module||i.main||pP,o=tt.posix.join(ct,e,s);return On(this.workspaceRoot,o)?o:null}catch{return null}}static COMPILED_JS_EXTENSION_PATTERN=/\.(m|c)?jsx?$/;firstExisting(e,r=!1){for(let n of e){let i=On(this.workspaceRoot,n);if(!(!i||!Et.existsSync(i))&&!(r&&!Et.statSync(i).isFile()))return n}return null}findFileWithExtension(e){let r=this.firstExisting([e],!0);if(r)return r;let n=this.firstExisting(zE.map(i=>e+i));if(n)return n;if(t.COMPILED_JS_EXTENSION_PATTERN.test(e)){let i=e.replace(t.COMPILED_JS_EXTENSION_PATTERN,""),s=this.firstExisting(zE.map(o=>i+o));if(s)return s}return this.firstExisting(mP.map(i=>e+i))}};function In(t,e,r){if(!t.has(e))return e;let n=`${e}@L${r}`;if(!t.has(n))return n;let i=2;for(;t.has(`${n}#${i}`);)i++;return`${n}#${i}`}function Ss(t,e,r){return r?`${t}#${r}.${e}`:`${t}#${e}`}function _P(){return{total:0,resolved:0,selfDiscarded:0,unresolvable:0,external:0,unknownReceiver:0}}function SP(t){return{total:t.total,resolved:t.resolved,selfDiscarded:t.selfDiscarded,unresolvable:t.unresolvable,external:t.external,unknownReceiver:t.unknownReceiver,unresolved:t.total-t.resolved-t.selfDiscarded-t.unresolvable-t.external-t.unknownReceiver}}var pa=class{async persist(e){let{store:r,workspaceRoot:n,projectId:i,parsedResults:s,tags:o}=e;return r.withWriteLock(()=>this.persistLocked(r,n,i,s,o))}persistLocked(e,r,n,i,s){return e.withTransaction(()=>{let o=new mi(r);this.registerResolverFiles(o,i);let a=new Map,l=new Map,c={};this.upsertTags(e,s),e.graph.withFtsSyncSuspended(()=>{this.persistFileAndSymbolNodes(e,n,i,s,a,l)});let u=this.linkParsedResults(e,o,n,i,a,l,c),d=Object.keys(c).length>0?br(c):void 0;return{updatedCount:u,callResolution:d,callResolutionByFile:c}})}registerResolverFiles(e,r){for(let n of r){let i=[];n.data.functions&&i.push(...n.data.functions.map(s=>s.name)),n.data.classes&&i.push(...n.data.classes.map(s=>s.name)),n.data.variables&&i.push(...n.data.variables.map(s=>s.name)),e.registerFile(n.file,n.data.imports||[],[],i)}}upsertTags(e,r){for(let n of r)e.tags.upsertTag(n)}persistFileAndSymbolNodes(e,r,n,i,s,o){for(let a of n){e.graph.deleteNodesForPath(a.file),e.callSites.deleteForFile(r,a.file),e.callSites.insertMany(r,a.file,(a.data.calls??[]).map(p=>({targetFunction:p.targetFunction,startLine:p.startLine,startColumn:p.startColumn,calleeName:p.calleeName,receiverText:p.receiverText,calleeKind:p.calleeKind})));let l=e.graph.insertNode({projectId:r,name:a.file,type:Nr.MODULE,description:"",pathPatterns:[a.file],nodeKey:a.file,contentHash:a.hash});s.set(a.file,l);let c=new Map;o.set(a.file,c),this.linkFileToTags(e,l,i);let u=new Set([a.file]);this.insertFunctionNodes(e,r,a,l,c,u),this.insertClassNodes(e,r,a,l,c,u),this.insertVariableNodes(e,r,a,l,c,u)}}linkFileToTags(e,r,n){for(let i of n){let s=e.tags.getIdByName(i);s!==void 0&&e.tags.linkNodeToTag(r,s)}}insertFunctionNodes(e,r,n,i,s,o){for(let a of n.data.functions??[]){let l=In(o,Ss(n.file,a.name,a.containerName),a.startLine);o.add(l);let c=e.graph.insertNode({projectId:r,name:a.name,type:Nr.MODULE,description:"",pathPatterns:[n.file],nodeKey:l,contentHash:a.contentHash});s.set(a.name,c),e.graph.insertLink({sourceNodeId:i,targetNodeId:c,linkType:de.CONTAINS})}}insertClassNodes(e,r,n,i,s,o){for(let a of n.data.classes??[]){let l=In(o,`${n.file}#${a.name}`,a.startLine);o.add(l);let c=e.graph.insertNode({projectId:r,name:a.name,type:Nr.MODULE,description:"",pathPatterns:[n.file],nodeKey:l,contentHash:a.contentHash});s.set(a.name,c),e.graph.insertLink({sourceNodeId:i,targetNodeId:c,linkType:de.CONTAINS})}}insertVariableNodes(e,r,n,i,s,o){for(let a of n.data.variables??[]){let l=In(o,`${n.file}#${a.name}`,a.startLine);o.add(l);let c=e.graph.insertNode({projectId:r,name:a.name,type:Nr.MODULE,description:"",pathPatterns:[n.file],nodeKey:l,contentHash:a.contentHash});s.set(a.name,c),e.graph.insertLink({sourceNodeId:i,targetNodeId:c,linkType:de.CONTAINS})}}linkParsedResults(e,r,n,i,s,o,a){let l=0;for(let c of i){let u=s.get(c.file);if(!u)continue;let p=_P();this.linkParsedResultRelations(e,r,c,u,s,o,p),p.total>0&&(a[c.file]=SP(p)),e.files.upsertFile({projectId:n,filePath:c.file,contentHash:c.hash}),l++}return l}linkParsedResultRelations(e,r,n,i,s,o,a){let l=o.get(n.file);for(let c of n.data.calls??[])this.linkSymbolReference(e,r,n.file,i,l,s,o,c.sourceFunction,c.targetFunction,de.CALLS,!1,a,{calleeName:c.calleeName,receiverText:c.receiverText,calleeKind:c.calleeKind});for(let c of n.data.implements??[])this.linkSymbolReference(e,r,n.file,i,l,s,o,c.sourceClass,c.targetInterface,de.IMPLEMENTS,!0);for(let c of n.data.extends??[])this.linkSymbolReference(e,r,n.file,i,l,s,o,c.sourceClass,c.targetClass,de.EXTENDS,!0);for(let c of n.data.workerSpawns??[])this.linkWorkerSpawn(e,r,n.file,i,l,s,o,c.sourceFunction,c.targetPath);this.linkReexports(e,r,n,i,s,o)}linkReexports(e,r,n,i,s,o){for(let a of n.data.imports??[])a.viaReexport&&this.linkReexport(e,r,n.file,i,s,o,a.localName)}linkReexport(e,r,n,i,s,o,a){let l=r.resolveCall(n,a);if(!l)return;let c=this.resolveTargetNodeId(e,s,o,l.targetFile,l.targetSymbol);!c||c===i||e.graph.insertLink({sourceNodeId:i,targetNodeId:c,linkType:de.DEPENDS_ON})}linkWorkerSpawn(e,r,n,i,s,o,a,l,c){let u=r.resolveWorkerSpawnPath(n,c);if(!u)return;let p=this.resolveTargetNodeId(e,o,a,u,u);if(!p)return;let d=this.resolveSourceNodeId(s,l,i);p!==d&&e.graph.insertLink({sourceNodeId:d,targetNodeId:p,linkType:de.DEPENDS_ON})}isUnresolvableCallShape(e,r){let n=r?.calleeKind;return n==="arg-chain"||n==="computed"||!n&&e.includes("(")}resolveCallTarget(e,r,n,i){let s=i?.calleeKind;return(s==="member"||s==="this")&&i?.calleeName&&i.receiverText?e.resolveMemberCall(r,i.receiverText,i.calleeName):e.resolveCall(r,n)}classifyUnresolvedCall(e,r,n,i){let s=i?.calleeKind==="member"?i.receiverText:void 0;return e.isExternalBinding(r,s??n)?"external":s?this.classifyUnresolvedReceiver(e,r,s):i?.calleeKind!=="bare"?null:this.classifyUnresolvedBareCallee(e,r,n)}classifyUnresolvedReceiver(e,r,n){return e.hasBinding(r,n)||e.declaresLocal(r,n)?null:"unknownReceiver"}classifyUnresolvedBareCallee(e,r,n){return e.hasBinding(r,n)||e.declaresLocal(r,n)?null:"external"}linkSymbolReference(e,r,n,i,s,o,a,l,c,u,p=!1,d,f){if(d&&d.total++,this.isUnresolvableCallShape(c,f)){d&&d.unresolvable++;return}let m=this.resolveCallTarget(r,n,c,f),_=this.insertResolvedLink(e,m,c,p,s,l,i,o,a,u);if(!d)return;if(_==="linked"){d.resolved++;return}if(_==="self-discarded"){d.selfDiscarded++;return}let L=this.classifyUnresolvedCall(r,n,c,f);L==="external"?d.external++:L==="unknownReceiver"&&d.unknownReceiver++}insertResolvedLink(e,r,n,i,s,o,a,l,c,u){let p=r?this.resolveTargetNodeId(e,l,c,r.targetFile,r.targetSymbol):i?e.graph.findNodeByName(n)?.id:void 0;if(!p)return"no-target";let d=this.resolveSourceNodeId(s,o,a);return p===d?"self-discarded":(e.graph.insertLink({sourceNodeId:d,targetNodeId:p,linkType:u}),"linked")}resolveTargetNodeId(e,r,n,i,s){return n.get(i)?.get(s)??e.graph.findNodeIdByName(i,s)??r.get(i)??e.graph.findNodeIdByName(i,i)}resolveSourceNodeId(e,r,n){return(r&&r!==ug?e?.get(r):void 0)??n}};var TP=new Set(["child_process","node:child_process"]),QE=new Set(["execFile","execFileSync","spawn","spawnSync","fork"]),XE=[".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs"],ZE=/\.(?:js|jsx|mjs|cjs)$/,e_="*";function AP(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function RP(t){return[...(t.data.functions??[]).map(e=>e.name),...(t.data.classes??[]).map(e=>e.name),...(t.data.variables??[]).map(e=>e.name)]}var ga=class{base=new pa;async persist(e){let r=await this.base.persist(e);return await e.store.withWriteLock(()=>e.store.withTransaction(()=>{this.linkValueImports(e.store,e.workspaceRoot,e.parsedResults),this.linkLiteralChildProcesses(e.store,e.workspaceRoot,e.parsedResults)})),r}linkValueImports(e,r,n){let i=this.createScopeResolver(r,n);for(let s of n)this.linkValueImportsForFile(e,i,s)}createScopeResolver(e,r){let n=new mi(e);for(let i of r)n.registerFile(i.file,i.data.imports??[],[],RP(i));return n}linkValueImportsForFile(e,r,n){let i=e.graph.findNodeIdByName(n.file,n.file);if(i)for(let s of n.data.imports??[])this.linkValueImport(e,r,n,i,s)}linkValueImport(e,r,n,i,s){if(s.viaReexport||this.hasStrongerSymbolRelationship(n,s.localName))return;let o=r.resolveCall(n.file,s.localName);if(!o)return;let a=e.graph.findNodeIdByName(o.targetFile,o.targetSymbol)??e.graph.findNodeIdByName(o.targetFile,o.targetFile);!a||a===i||this.insertLinkOnce(e,i,a,de.IMPORTS)}hasStrongerSymbolRelationship(e,r){return(e.data.calls??[]).some(n=>n.calleeName===r||n.targetFunction===r)||(e.data.implements??[]).some(n=>n.targetInterface===r)||(e.data.extends??[]).some(n=>n.targetClass===r)}linkLiteralChildProcesses(e,r,n){let i=new Set(n.map(s=>s.file));for(let s of n)this.linkLiteralChildProcessesForFile(e,r,i,s)}linkLiteralChildProcessesForFile(e,r,n,i){let s=Jr(r,i.file);if(!s)return;let o=e.graph.findNodeIdByName(i.file,i.file);if(o)for(let a of i.data.imports??[])TP.has(a.modulePath)&&this.linkChildProcessDescriptor(e,n,i.file,o,s,a)}linkChildProcessDescriptor(e,r,n,i,s,o){for(let a of this.childProcessInvocations(o)){let l=this.extractLiteralProcessTargets(s,a.localExpression,a.api);for(let c of l)this.linkResolvedProcessTarget(e,r,n,i,c)}}linkResolvedProcessTarget(e,r,n,i,s){let o=this.resolveProjectFile(n,s,r);if(!o)return;let a=e.graph.findNodeIdByName(o,o);!a||a===i||this.insertLinkOnce(e,i,a,de.DEPENDS_ON)}childProcessInvocations(e){return QE.has(e.originalName)&&e.originalName!==e_?[{api:e.originalName,localExpression:e.localName}]:e.originalName===e_?[...QE].map(r=>({api:r,localExpression:`${e.localName}.${r}`})):[]}extractLiteralProcessTargets(e,r,n){let i=AP(r),s=n==="fork"?new RegExp(`\\b${i}\\s*\\(\\s*["']([^"']+)["']`,"g"):new RegExp(`\\b${i}\\s*\\(\\s*(?:["']node(?:\\.exe)?["']|process\\.execPath)\\s*,\\s*\\[\\s*["']([^"']+)["']`,"g");return[...e.matchAll(s)].map(o=>o[1])}resolveProjectFile(e,r,n){let i=r.replace(/\\/g,"/"),s=new Set;(i.startsWith("./")||i.startsWith("../"))&&s.add(Ts.posix.normalize(Ts.posix.join(Ts.posix.dirname(e),i))),s.add(Ts.posix.normalize(i.replace(/^\//,"")));for(let o of s){if(n.has(o))return o;if(ZE.test(o)){let a=o.replace(ZE,"");for(let l of XE){let c=`${a}${l}`;if(n.has(c))return c}}else for(let a of XE){let l=`${o}${a}`;if(n.has(l))return l}}}insertLinkOnce(e,r,n,i){e.graph.getOutgoingRelations(r).some(o=>o.id===n&&o.linkType===i)||e.graph.insertLink({sourceNodeId:r,targetNodeId:n,linkType:i})}};import*as As from"path";var yP="impact.dynamic-dependencies.v1",t_=64,OP=new Set([".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs"]);function n_(t){return`${yP}:${t}`}function r_(t){return t!==void 0&&/[A-Za-z0-9_$]/.test(t)}function IP(t,e,r){let n=e+1;for(;n<t.length;){if(t[n]==="\\"){n+=2;continue}if(t[n]===r)return n+1;n++}return t.length}function LP(t,e){let r=t.indexOf(`
137
+ `).map(e=>e.trim()).filter(Boolean).map(e=>JSON.parse(e)):[]}function Fc(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Mc(t){return typeof t=="string"?t:null}function pO(t){if(!t)return;let e;try{e=JSON.parse(t)}catch{return}if(!Fc(e))return{files:[]};let r=e.project,n=Fc(r)&&typeof r.name=="string"&&typeof r.repoUrl=="string"?{name:r.name,repoUrl:r.repoUrl}:void 0,i=Array.isArray(e.files)?e.files.flatMap(s=>!Fc(s)||typeof s.filePath!="string"?[]:[{filePath:s.filePath,contentHash:Mc(s.contentHash),lastTierBProcessedAt:Mc(s.lastTierBProcessedAt),lastTierBCommitSha:Mc(s.lastTierBCommitSha)}]):[];return{project:n,files:i,lastIngestedSourceSha:typeof e.lastIngestedSourceSha=="string"?e.lastIngestedSourceSha:void 0}}var So=class{constructor(e,r=me()){this.git=e;this.logger=r}git;logger;async resolveHydrationCommit(e,r=S.KNOWLEDGE_ROOT){let n=await this.git.getBranchTipSha(e,r);if(!n)return;let i=await this.git.getCommitLog(e,r,S.KNOWLEDGE_LOG_SCAN_LIMIT),s=new Map;for(let a of i){let l=pr(a.message);l&&!s.has(l)&&s.set(l,a.sha)}if(s.size===0)return n;let o=await this.git.getCommitAncestry(e,S.HEAD_REF,aO);for(let a of o){let l=s.get(a);if(l)return l}return n}async hydrate(e,r,n=S.KNOWLEDGE_ROOT,i){let s=await this.resolveHydrationCommit(e,n);if(!s)return this.logger.debug(j.NOTHING_TO_HYDRATE,{branchName:n}),{hydrated:!1,nodesLoaded:0,edgesLoaded:0,edgesDropped:0};let[o,a,l]=await Promise.all([this.git.readFileAtRef(e,s,wc.posix.join(S.GRAPH_DIR_NAME,S.NODES_JSONL_NAME)),this.git.readFileAtRef(e,s,wc.posix.join(S.GRAPH_DIR_NAME,S.EDGES_JSONL_NAME)),this.git.readFileAtRef(e,s,wc.posix.join(S.GRAPH_DIR_NAME,S.METADATA_JSON_NAME))]),c=uO(o),u=dO(a),p=pO(l);if(!(i?.force??!1)){let m=this.checkDestructiveRebuildGuard(r,c.length);if(m)return this.logger.warn(m.message,{knowledgeSha:s,incomingNodes:c.length}),{hydrated:!1,refused:!0,refusalReason:m.reason,nodesLoaded:0,edgesLoaded:0,edgesDropped:0}}let f=await r.withWriteLock(async()=>{let m=this.restoreSnapshotMetadata(r,p),_=r.graph.bulkLoadGraph({projectId:m,nodes:c,edges:u});return await bc(this.git,e,s,r,this.logger),r.meta.set(S.META_KEY_KNOWLEDGE_TIP_SHA,s),_});return this.logger.info(j.HYDRATED_KNOWLEDGE_GRAPH,{knowledgeSha:s,...f}),{hydrated:!0,knowledgeSha:s,...f}}restoreSnapshotMetadata(e,r){let n=this.resolveHydratedProjectId(e,r?.project);for(let i of r?.files??[])this.restoreFileMetadata(e,n,i);return r?.lastIngestedSourceSha&&e.meta.set(S.META_KEY_LAST_INGESTED_SOURCE_SHA,r.lastIngestedSourceSha),n}resolveHydratedProjectId(e,r){return r?e.projects.getOrInsert({name:r.name,repoUrl:r.repoUrl}).id:e.projects.getFirst()?.id??S.DEFAULT_LOCAL_PROJECT_ID}restoreFileMetadata(e,r,n){e.files.upsertFile({projectId:r,filePath:n.filePath,contentHash:n.contentHash}),n.lastTierBProcessedAt!==null&&e.files.markTierBProcessed({projectId:r,filePath:n.filePath,commitSha:n.lastTierBCommitSha,processedAt:n.lastTierBProcessedAt})}checkDestructiveRebuildGuard(e,r){if(e.meta.get(S.META_KEY_KNOWLEDGE_PACK_PENDING))return{reason:"pending-local-write",message:j.HYDRATE_REFUSED_PENDING_WRITE};let n=e.graph.count().l2Nodes;if(n>=lO&&r<n*cO)return{reason:"catastrophic-shrink",message:j.hydrateRefusedCatastrophicShrink(n,r)}}async isStale(e,r,n=S.KNOWLEDGE_ROOT){let i=await this.resolveHydrationCommit(e,n);return i?r.meta.get(S.META_KEY_KNOWLEDGE_TIP_SHA)!==i:!1}async markSynced(e,r,n=S.KNOWLEDGE_ROOT){let i=await this.resolveHydrationCommit(e,n);i&&await r.withWriteLock(()=>{r.meta.set(S.META_KEY_KNOWLEDGE_TIP_SHA,i)})}async importL3Cards(e,r,n){return n.withWriteLock(()=>bc(this.git,e,r,n,this.logger))}};var Cd=rc(Td(),1),KE=rc(GE(),1);import HE from"path";import BE from"fs/promises";import WN from"crypto";var Te={PACKAGE_JSON_TYPESCRIPT:"package.json:typescript",PACKAGE_JSON_REACT:"package.json:react",PACKAGE_JSON_VUE:"package.json:vue",PACKAGE_JSON_NEXT:"package.json:next",PACKAGE_JSON_EXPRESS:"package.json:express",PACKAGE_JSON_DRIZZLE_ORM:"package.json:drizzle-orm",PACKAGE_JSON_TAILWINDCSS:"package.json:tailwindcss",PACKAGE_JSON_JEST:"package.json:jest",PACKAGE_JSON_VITEST:"package.json:vitest",PACKAGE_JSON_PG:"package.json:pg",PACKAGE_JSON_WORKSPACES:"package.json:workspaces",CARGO_BASE:"cargo:base",CARGO_TOKIO:"cargo:tokio",CARGO_ACTIX:"cargo:actix",CARGO_SERDE:"cargo:serde",CARGO_TAURI:"cargo:tauri",PYTHON_BASE:"python:base",PYTHON_DJANGO:"python:django",PYTHON_FASTAPI:"python:fastapi",PYTHON_PANDAS:"python:pandas",GO_BASE:"go:base",GO_GIN:"go:gin",TSCONFIG_STRICT:"tsconfig:strict",VITE_PRESENCE:"vite:presence",DRIZZLE_PRESENCE:"drizzle:presence",TAURI_PRESENCE:"tauri:presence"},oe={PACKAGE_JSON:"package.json",CARGO_TOML:"Cargo.toml",PYPROJECT_TOML:"pyproject.toml",REQUIREMENTS_TXT:"requirements.txt",GO_MOD:"go.mod",TSCONFIG_JSON:"tsconfig.json",JSCONFIG_JSON:"jsconfig.json"},jr={VITE_CONFIG:"vite.config",DRIZZLE_CONFIG:"drizzle.config",TAURI_CONF:"tauri.conf",WEBPACK_CONFIG:"webpack.config"},ke={PACKAGE_JSON_TYPESCRIPT:'"typescript"',PACKAGE_JSON_REACT:'"react"',PACKAGE_JSON_VUE:'"vue"',PACKAGE_JSON_NEXT:'"next"',PACKAGE_JSON_EXPRESS:'"express"',PACKAGE_JSON_DRIZZLE_ORM:'"drizzle-orm"',PACKAGE_JSON_TAILWINDCSS:'"tailwindcss"',PACKAGE_JSON_JEST:'"jest"',PACKAGE_JSON_VITEST:'"vitest"',PACKAGE_JSON_PG:'"pg"',PACKAGE_JSON_WORKSPACES:'"workspaces"',CARGO_TOKIO:"tokio",CARGO_ACTIX:"actix",CARGO_SERDE:"serde",CARGO_TAURI:"tauri",PYTHON_DJANGO:"django",PYTHON_FASTAPI:"fastapi",PYTHON_PANDAS:"pandas",GO_GIN:"gin-gonic"},vt={CONFIG_SCAN_FAILED:"Config scanning failed",STARTING_GIT_BLOB_SCAN:"Starting global AST scan using Git-native blob hashing",GIT_OPS_FAILED_FALLBACK:"Git operations failed during discovery, falling back to manual globbing",GIT_UNAVAILABLE_FALLBACK:"Git unavailable or no .git repository found; falling back to fast-glob + manual sha256 hashing",NO_GITIGNORE_FOUND:"No .gitignore found, proceeding without it",DISCOVERED_SOURCE_FILES:"Discovered source files",SKIPPING_OVERSIZED_FILE:"Skipping oversized file",GIT_HASH_DELTA_CHECK_COMPLETE:"Git hash delta check complete",VCS_HOTSPOT_DOMAINS_EXTRACTED:"VCS hotspot analysis extracted functional domains"},Xo=[`${lt}/**`,".git/**","dist/**","build/**"],xE=[lt,"dist","build","docs","test","tests","scripts"],gs="src",UE=[gs,"lib","app"];var jN=".gitignore",Zo=class{constructor(e,r=me()){this.git=e;this.logger=r}git;logger;async discoverFiles(e,r,n={}){let{onlyIndexed:i=!1}=n,s=new Map,o=new Set,{allFiles:a,usingGit:l}=await this.resolveCandidateFiles(e,i,s,o),c=this.buildExistingHashesMap(r),u={workspaceRoot:e,onlyIndexed:i,usingGit:l,gitBlobHashes:s,dirtyFiles:o,existingHashes:c},{filesToParse:p,skippedOversized:d,skippedCount:f}=await this.categorizeFiles(a,u);return this.logger.debug(vt.GIT_HASH_DELTA_CHECK_COMPLETE,{filesToParse:p.length,skipped:f,skippedOversized:d.length}),{filesToParse:p,existingHashes:c,skippedCount:f,skippedOversized:d}}async resolveCandidateFiles(e,r,n,i){let s=await this.git.isGitRepository(e),o=[];if(s){this.logger.debug(vt.STARTING_GIT_BLOB_SCAN);let a=await this.scanGitTrackedFiles(e,r,n,i);a?o=a:s=!1}return s||(o=await this.discoverViaGlobFallback(e,i)),o=o.filter(a=>$n(a)),this.logger.debug(vt.DISCOVERED_SOURCE_FILES,{count:o.length}),{allFiles:o,usingGit:s}}async scanGitTrackedFiles(e,r,n,i){try{let s=await this.git.listTrackedFilesWithBlobHash(e);for(let[l,c]of s)n.set(l,c);let o=await this.git.listUntrackedFiles(e),a=await this.git.listModifiedFiles(e);return r?[...n.keys()]:([...o,...a].forEach(l=>{l.trim()&&i.add(l.trim())}),[...n.keys(),...o])}catch(s){return this.logger.warn(vt.GIT_OPS_FAILED_FALLBACK,{error:s instanceof Error?s.message:String(s)}),null}}async discoverViaGlobFallback(e,r){this.logger.debug(vt.GIT_UNAVAILABLE_FALLBACK);let n=(0,KE.default)();try{let c=await BE.readFile(HE.join(e,jN),H);n.add(c)}catch{this.logger.debug(vt.NO_GITIGNORE_FOUND)}let i=[...Xo,`${he}/**`],[s,o]=await Promise.all([(0,Cd.default)(`**/*.{${cc().join(",")}}`,{cwd:e,ignore:i,absolute:!1}),(0,Cd.default)(`**/{${Array.from(lc).join(",")}}`,{cwd:e,ignore:i,absolute:!1})]),a=[...s,...o],l=n.filter(a);return l.forEach(c=>r.add(c)),l}buildExistingHashesMap(e){let r=new Map;for(let{filePath:n,contentHash:i}of e.getAllHashes())i!==null&&r.set(n,i);return r}async categorizeFiles(e,r){let n=[],i=[],s=0;for(let o of e){let a=await this.resolveFileOutcome(o,r);switch(a.kind){case"parse":n.push(a.entry);break;case"oversized":i.push({file:a.file,sizeBytes:a.sizeBytes});break;case"skip":s++;break;case"unreadable":break}}return{filesToParse:n,skippedOversized:i,skippedCount:s}}async resolveFileOutcome(e,r){let n=this.resolveKnownBlobHash(e,r);if(n&&r.existingHashes.get(e)===n)return{kind:"skip"};let i=await this.readFileForHashing(e,n,r);if(!i)return{kind:"unreadable"};if(r.existingHashes.get(e)===i.hash)return{kind:"skip"};let s=Buffer.byteLength(i.code);return s>512e3?(this.logger.warn(vt.SKIPPING_OVERSIZED_FILE,{file:e,sizeBytes:s}),{kind:"oversized",file:e,sizeBytes:s}):{kind:"parse",entry:{file:e,hash:i.hash,code:i.code}}}resolveKnownBlobHash(e,r){let n=r.dirtyFiles.has(e),i="";return!n&&r.gitBlobHashes.has(e)&&(i=r.gitBlobHashes.get(e)),r.onlyIndexed&&r.usingGit&&r.gitBlobHashes.has(e)&&(i=r.gitBlobHashes.get(e)),i}async readFileForHashing(e,r,n){try{let i;if(n.onlyIndexed&&n.usingGit&&n.gitBlobHashes.has(e)){let o=n.gitBlobHashes.get(e);i=await this.git.readBlobContent(n.workspaceRoot,o)}else i=await BE.readFile(HE.join(n.workspaceRoot,e),H);let s=r||WN.createHash(Xt).update(i).digest("hex");return{code:i,hash:s}}catch{return null}}};var YE=rc(Td(),1);import VN from"path";import zN from"fs/promises";function ra(t){return e=>e===t}function Nd(t){return e=>e.startsWith(t)}function He(t,e,r,n){return{id:t,matchesFile:e,detect:i=>i.includes(r)?{tags:n}:null}}function gi(t,e,r){return{id:t,matchesFile:e,detect:()=>r}}var Kt=ra(oe.PACKAGE_JSON),fs=ra(oe.CARGO_TOML),ea=t=>t===oe.PYPROJECT_TOML||t===oe.REQUIREMENTS_TXT,$E=ra(oe.GO_MOD),JN=ra(oe.TSCONFIG_JSON),qN=[He(Te.PACKAGE_JSON_TYPESCRIPT,Kt,ke.PACKAGE_JSON_TYPESCRIPT,[dr.TYPESCRIPT]),He(Te.PACKAGE_JSON_REACT,Kt,ke.PACKAGE_JSON_REACT,[dr.REACT,se.FRONTEND]),He(Te.PACKAGE_JSON_VUE,Kt,ke.PACKAGE_JSON_VUE,[dr.VUE,se.FRONTEND]),He(Te.PACKAGE_JSON_NEXT,Kt,ke.PACKAGE_JSON_NEXT,[se.NEXTJS,se.FRONTEND,se.SSR]),He(Te.PACKAGE_JSON_EXPRESS,Kt,ke.PACKAGE_JSON_EXPRESS,[dr.EXPRESS,se.BACKEND]),He(Te.PACKAGE_JSON_DRIZZLE_ORM,Kt,ke.PACKAGE_JSON_DRIZZLE_ORM,[se.DRIZZLE,se.DATABASE]),He(Te.PACKAGE_JSON_TAILWINDCSS,Kt,ke.PACKAGE_JSON_TAILWINDCSS,[se.TAILWINDCSS,se.CSS]),He(Te.PACKAGE_JSON_JEST,Kt,ke.PACKAGE_JSON_JEST,[se.JEST,se.TESTING]),He(Te.PACKAGE_JSON_VITEST,Kt,ke.PACKAGE_JSON_VITEST,[se.VITEST,se.TESTING]),He(Te.PACKAGE_JSON_PG,Kt,ke.PACKAGE_JSON_PG,[se.POSTGRES,se.DATABASE]),He(Te.PACKAGE_JSON_WORKSPACES,Kt,ke.PACKAGE_JSON_WORKSPACES,[se.MONOREPO]),gi(Te.CARGO_BASE,fs,{projectType:St.RUST,tags:[St.RUST]}),He(Te.CARGO_TOKIO,fs,ke.CARGO_TOKIO,[se.TOKIO,se.ASYNC]),He(Te.CARGO_ACTIX,fs,ke.CARGO_ACTIX,[se.ACTIX,se.BACKEND]),He(Te.CARGO_SERDE,fs,ke.CARGO_SERDE,[se.SERDE]),He(Te.CARGO_TAURI,fs,ke.CARGO_TAURI,[se.TAURI,se.DESKTOP]),gi(Te.PYTHON_BASE,ea,{projectType:St.PYTHON,tags:[St.PYTHON]}),He(Te.PYTHON_DJANGO,ea,ke.PYTHON_DJANGO,[se.DJANGO,se.BACKEND]),He(Te.PYTHON_FASTAPI,ea,ke.PYTHON_FASTAPI,[se.FASTAPI,se.BACKEND]),He(Te.PYTHON_PANDAS,ea,ke.PYTHON_PANDAS,[se.PANDAS,se.DATA]),gi(Te.GO_BASE,$E,{projectType:St.GO,tags:[St.GO]}),He(Te.GO_GIN,$E,ke.GO_GIN,[se.GIN,se.BACKEND]),{id:Te.TSCONFIG_STRICT,matchesFile:JN,detect:t=>/"strict"\s*:\s*true/.test(t)?{tags:[se.STRICT_TS]}:null},gi(Te.VITE_PRESENCE,Nd(jr.VITE_CONFIG),{tags:[se.VITE,se.BUILD_TOOL]}),gi(Te.DRIZZLE_PRESENCE,Nd(jr.DRIZZLE_CONFIG),{tags:[se.DRIZZLE,se.DATABASE]}),gi(Te.TAURI_PRESENCE,Nd(jr.TAURI_CONF),{tags:[se.TAURI,se.DESKTOP]})],QN=[`**/${oe.PACKAGE_JSON}`,`**/${oe.CARGO_TOML}`,`**/${oe.PYPROJECT_TOML}`,`**/${oe.REQUIREMENTS_TXT}`,`**/${oe.GO_MOD}`,`**/${oe.TSCONFIG_JSON}`,`**/${jr.VITE_CONFIG}.*`,`**/${jr.DRIZZLE_CONFIG}.*`,`**/${jr.WEBPACK_CONFIG}.*`,`**/${jr.TAURI_CONF}.*`],XN=[...Xo,"target/**","venv/**",".venv/**","**/fixtures/**","**/__fixtures__/**","**/test-data/**"],ta=class{constructor(e=me()){this.logger=e}logger;async scanConfigs(e){let r=St.UNKNOWN,n=new Set;try{let i=await(0,YE.default)(QN,{cwd:e,ignore:XN,absolute:!0,deep:3});r=await this.scanAllConfigFiles(i,n),r=this.resolveJavascriptFallback(r,n)}catch(i){this.logger.warn(vt.CONFIG_SCAN_FAILED,{error:i?.message??String(i)})}return r===St.UNKNOWN&&(r=St.GENERIC),n.size===0&&n.add(og),{projectType:r,tags:Array.from(n)}}async scanAllConfigFiles(e,r){let n=St.UNKNOWN;for(let i of e){let s=await this.readConfigFileContent(i);if(s===null)continue;let o=VN.basename(i),a=this.applyDetectionRules(o,s,r);a&&(n=a)}return n}async readConfigFileContent(e){try{return await zN.readFile(e,H)}catch{return null}}applyDetectionRules(e,r,n){let i;for(let s of qN){if(!s.matchesFile(e))continue;let o=s.detect(r);if(o){o.projectType&&(i=o.projectType);for(let a of o.tags)n.add(a)}}return i}resolveJavascriptFallback(e,r){return(r.has(dr.TYPESCRIPT)||r.has(dr.REACT)||r.has(dr.EXPRESS)||r.has(dr.VUE))&&e===St.UNKNOWN?St.JAVASCRIPT:e}};var Pd=".",ZN=["packages","artifacts","crates"],eP="domain:";function tP(t){return t[0]===gs&&t.length>1||t.length>3&&ZN.includes(t[0])&&t[2]===gs?t[1]:(t.length>2&&t[1]===gs,t[0])}function rP(t){let e=t.split("/");if(e.length<=1||e[0].startsWith(Pd)||xE.includes(e[0]))return null;let r=tP(e);return r.includes(Pd)||r.startsWith(Pd)||UE.includes(r)?null:r}var na=class{constructor(e,r=me()){this.git=e;this.logger=r}git;logger;async extractHotspotTags(e){let r=new Set;try{if(!await this.git.isGitRepository(e))return[];let i=await this.git.getRecentChangedFilePaths(e,100),s=this.countChangedPathDomains(i),o=this.selectTopDomains(s);for(let a of o)a.length>2&&r.add(`${eP}${a}`);o.length>0&&this.logger.debug(vt.VCS_HOTSPOT_DOMAINS_EXTRACTED,{domains:o})}catch{}return Array.from(r)}countChangedPathDomains(e){let r=new Map;for(let n of e){let i=n.trim();if(!i)continue;let s=rP(i);s&&r.set(s,(r.get(s)||0)+1)}return r}selectTopDomains(e){return Array.from(e.entries()).sort((r,n)=>n[1]-r[1]).slice(0,5).map(r=>r[0])}};import cP from"os";import{Worker as nP}from"worker_threads";import*as hs from"path";import*as Vr from"fs";import{fileURLToPath as iP}from"url";import sP from"crypto";var oP=iP(import.meta.url),WE=hs.dirname(oP),ia={FORMAT:"esm",PLATFORM:"node",TARGET:"node20",EXTERNAL_TREE_SITTER:"web-tree-sitter"},ms={EVAL:"--eval",PRINT:"--print",IMPORT:"--import",TSX_LOADER:"tsx"};async function aP(t,e){let r=await import("esbuild"),n=`${e}.${process.pid}.tmp`;await r.build({entryPoints:[t],outfile:n,bundle:!0,format:ia.FORMAT,platform:ia.PLATFORM,target:ia.TARGET,external:[ia.EXTERNAL_TREE_SITTER]}),Vr.renameSync(n,e)}function lP(t,e){return Vr.existsSync(e)?Vr.existsSync(t)?Vr.statSync(t).mtimeMs>Vr.statSync(e).mtimeMs:!1:!0}var Es=class extends Error{constructor(r,n){super(Ye.workerCrashWhileParsing(r??Ye.UNKNOWN_FILE)+(n instanceof Error?n.message:String(n)));this.filePath=r;this.cause=n;this.name=ug}filePath;cause},sa=class{constructor(e=me(),r=3e4,n,i){this.logger=e;this.taskTimeoutMs=r;this.cache=n;this.workerScriptPathOverride=i;this.ipcLogRouter=new Up(this.logger)}logger;taskTimeoutMs;cache;workerScriptPathOverride;workers=[];workerTasks=new Map;workerOptions={};wPath="";workerQueue=[];spawnChain=Promise.resolve();taskQueue=[];taskCounter=0;pendingTasks=new Map;taskTimeouts=new Map;taskFilePaths=new Map;timedOutWorkers=new WeakSet;shuttingDown=!1;ipcLogRouter;batchChain=Promise.resolve();enqueueSpawn(){return this.spawnChain=this.spawnChain.then(async()=>{this.spawnWorker(),await new Promise(e=>setImmediate(e))}),this.spawnChain}spawnWorker(){let e=new nP(this.wPath,this.workerOptions);e.on("message",n=>{if(this.ipcLogRouter.handleMessage(n))return;this.workerTasks.delete(e);let i=this.taskTimeouts.get(n.taskId);i&&(clearTimeout(i),this.taskTimeouts.delete(n.taskId));let s=this.pendingTasks.get(n.taskId);s&&(this.pendingTasks.delete(n.taskId),this.taskFilePaths.delete(n.taskId),s.resolve(n)),this.workerQueue.push(e),this.processQueue()});let r=n=>{let i=this.timedOutWorkers.delete(e),s=this.workerTasks.get(e),o=s?this.taskFilePaths.get(s):void 0;if(this.shuttingDown?this.logger.debug(Ye.WORKER_EXITED_DURING_SHUTDOWN,{taskId:s,filePath:o}):this.logger.error(Ye.WORKER_CRASHED_EXITED,{taskId:s,filePath:o,hadInFlightTask:!!s,error:n instanceof Error?{message:n.message,name:n.name}:n}),s){let a=this.taskTimeouts.get(s);a&&(clearTimeout(a),this.taskTimeouts.delete(s));let l=this.pendingTasks.get(s);l&&(l.reject(new Es(o,i?new Error(Ye.taskTimedOutAfterMs(s,this.taskTimeoutMs)):n||new Error(Ye.WORKER_EXITED_UNEXPECTEDLY))),this.pendingTasks.delete(s)),this.workerTasks.delete(e),this.taskFilePaths.delete(s)}this.workers=this.workers.filter(a=>a!==e),this.workerQueue=this.workerQueue.filter(a=>a!==e),this.shuttingDown||this.enqueueSpawn()};return e.on("error",r),e.on("exit",n=>{n!==0&&r(new Error(Ye.workerExitedWithCode(n)))}),this.workers.push(e),this.workerQueue.push(e),this.processQueue(),e}async initialize(e=2){if(this.workers.length>0)return;if(this.shuttingDown=!1,this.workerScriptPathOverride){this.wPath=this.workerScriptPathOverride,this.workerOptions.execArgv=process.execArgv.filter(n=>!n.includes(ms.EVAL)&&!n.includes(ms.PRINT)),this.workerOptions.execArgv.some(n=>n.includes(ms.TSX_LOADER))||this.workerOptions.execArgv.push(ms.IMPORT,ms.TSX_LOADER);for(let n=0;n<e;n++)await this.enqueueSpawn();return}this.wPath=hs.resolve(WE,"./ast-worker.js");let r=hs.resolve(WE,"./ast-worker.ts");lP(r,this.wPath)&&await aP(r,this.wPath),this.workerOptions.execArgv=[];for(let n=0;n<e;n++)await this.enqueueSpawn()}parse(e){return new Promise((r,n)=>{let i;if(this.cache){i=sP.createHash(Xt).update(e.code).digest("hex");let o=performance.now(),a=this.cache.get(i),l=performance.now()-o;if(a){this.logger.debug(Ye.PARSE_CACHE_HIT,{contentHash:i,cacheLookupTimeMs:Number(l.toFixed(2))}),r(a);return}}let s=Date.now();this.taskQueue.push({request:e,resolve:o=>{if(this.cache){this.cache.set(i,o);let a=this.cache.metrics;if(a.hits+a.misses>0&&(a.hits+a.misses)%100===0){let l=a.hits/(a.hits+a.misses)*100,c=Date.now()-s;this.logger.info(Ye.CACHE_METRICS_AND_QUEUE_PERFORMANCE,{hitRate:Number(l.toFixed(2)),queueWaitTimeMs:c,...a})}}r(o)},reject:n}),this.processQueue()})}processQueue(){for(;this.taskQueue.length>0&&this.workerQueue.length>0;){let e=this.taskQueue.shift(),r=this.workerQueue.shift(),n=String(++this.taskCounter);this.pendingTasks.set(n,{resolve:e.resolve,reject:e.reject}),this.workerTasks.set(r,n),this.taskFilePaths.set(n,e.request.filePath);let i=setTimeout(()=>{this.taskTimeouts.delete(n),this.timedOutWorkers.add(r),this.logger.error(Ye.TASK_TIMED_OUT_TERMINATING,{taskId:n,filePath:this.taskFilePaths.get(n),taskTimeoutMs:this.taskTimeoutMs}),r.terminate().catch(s=>{this.logger.warn(Ye.WORKER_TERMINATE_FAILED,{taskId:n,filePath:this.taskFilePaths.get(n),error:s instanceof Error?{message:s.message,name:s.name}:s})})},this.taskTimeoutMs);this.taskTimeouts.set(n,i),r.postMessage({...e.request,taskId:n})}}async terminate(){this.shuttingDown=!0;let e=new Error(Ye.POOL_TERMINATED);for(let n of this.taskTimeouts.values())clearTimeout(n);this.taskTimeouts.clear();for(let n of this.pendingTasks.values())n.reject(e);this.pendingTasks.clear();for(let n of this.taskQueue)n.reject(e);this.taskQueue=[],this.workerTasks.clear(),this.taskFilePaths.clear(),this.workerQueue=[];let r=this.workers;this.workers=[],await Promise.all(r.map(n=>n.terminate()))}async serializeBatch(e){let r=this.batchChain.then(e);return this.batchChain=r.then(()=>{},()=>{}),r}};var oa=class{constructor(e,r=me()){this.workerPool=e;this.logger=r}workerPool;logger;async processFiles(e,r){return this.workerPool.serializeBatch(()=>this.runBatch(e,r))}async runBatch(e,r){let n=this.workerPool,i=Math.max(1,(cP.cpus().length||4)-1);await n.initialize(i);let s=u=>js(u)??ag.TYPESCRIPT,o=[],a=[],l=new Array(r.length),c=r.map(async(u,p)=>{try{let d=await n.parse({filePath:u.file,code:u.code,language:s(u.file)});if(d.success&&d.data)l[p]={outcome:"parsed",result:{file:u.file,hash:u.hash,data:d.data,language:js(u.file)}};else{let f=d.error??Ye.PARSE_FAILURE_NO_DETAIL;this.logger.warn(Ye.PARSE_FAILURE_RESULT,{file:u.file,error:f}),l[p]={outcome:"failed",failure:{file:u.file,hash:u.hash,error:f}}}}catch(d){let f=d instanceof Es||d instanceof Error?d.message:String(d);this.logger.error(Ye.PARSE_THREW,{file:u.file,error:f}),l[p]={outcome:"failed",failure:{file:u.file,hash:u.hash,error:f}}}});await Promise.all(c);for(let u of l)u.outcome==="parsed"?o.push(u.result):a.push(u.failure);return await n.terminate(),{parsed:o,failures:a}}};import*as Ss from"path";import*as et from"path";import*as ht from"fs";import*as la from"fs";import aa from"path";function yn(t,e){let r=aa.resolve(t),n=aa.resolve(r,e),i=r.endsWith(aa.sep)?r:r+aa.sep;return n===r||n.startsWith(i)?n:null}function zr(t,e){let r=yn(t,e);if(!r||!la.existsSync(r))return null;try{return la.readFileSync(r,H)}catch{return null}}function jE(t){return t.replace(/\\"|"(?:\\"|[^"])*"|(\/\/.*|\/\*[\s\S]*?\*\/)/g,(e,r)=>r?"":e)}var uP="tsconfig.base.json",dP="pnpm-workspace.yaml",pP="index.js",gP="src",fP="index",ca="*",VE=".",zE=[".ts",".js",".tsx",".jsx",".py",".rs",".go",".java",".cpp",".cc",".c",".h",".hpp"],mP=["/index.ts","/index.js"],JE=".go",qE={TSCONFIG_PARSE_FAILED:"Failed to JSON-parse tsconfig.json",TSCONFIG_FILES_READ_FAILED:"Failed to read or parse tsconfig files"},Dd="*",hP="node:",EP=/^(@[^/]+\/[^/]+|[^/]+)/,fi=class t{constructor(e,r=me()){this.workspaceRoot=e;this.logger=r;this.loadTsConfigPaths()}workspaceRoot;logger;exportsByFile=new Map;importsByFile=new Map;localsByFile=new Map;tsConfigPaths={};goFilesByDirectory=new Map;loadTsConfigPaths(){try{this.mergeProjectTsConfigPaths(),this.mergeBaseTsConfigPaths()}catch(e){this.logger.debug(qE.TSCONFIG_FILES_READ_FAILED,{error:e?.message??String(e)})}}mergeProjectTsConfigPaths(){let e=et.join(this.workspaceRoot,oe.TSCONFIG_JSON);if(!ht.existsSync(e))return;let r=ht.readFileSync(e,H),n=jE(r);try{let i=JSON.parse(n);i.compilerOptions&&i.compilerOptions.paths&&(this.tsConfigPaths={...this.tsConfigPaths,...i.compilerOptions.paths})}catch(i){this.logger.debug(qE.TSCONFIG_PARSE_FAILED,{error:i instanceof Error?i.message:String(i)})}}mergeBaseTsConfigPaths(){let e=et.join(this.workspaceRoot,uP);if(!ht.existsSync(e))return;let r=ht.readFileSync(e,H),n=jE(r),i=JSON.parse(n);i.compilerOptions&&i.compilerOptions.paths&&(this.tsConfigPaths={...i.compilerOptions.paths,...this.tsConfigPaths})}registerFile(e,r,n,i){let s=e.replace(/\\/g,"/");if(this.importsByFile.set(s,r),this.exportsByFile.set(s,new Set(n)),this.localsByFile.set(s,new Set(i)),s.endsWith(JE)){let o=et.posix.dirname(s),a=this.goFilesByDirectory.get(o);a||(a=new Set,this.goFilesByDirectory.set(o,a)),a.add(s)}}resolveCall(e,r){let n=e.replace(/\\/g,"/"),i=this.localsByFile.get(n);if(i&&i.has(r))return{targetFile:n,targetSymbol:r};let s=this.importsByFile.get(n)||[];for(let o of s){if(o.localName!==r)continue;let a=this.resolveImportedBinding(n,o,r);if(a)return a}if(n.endsWith(JE)){let o=this.resolveGoSamePackageCall(n,r);if(o)return o}return null}resolveImportedBinding(e,r,n){let i=this.resolveModulePath(e,r.modulePath);if(!i)return null;let s=r.originalName===Dd?n:r.originalName;return this.resolveReexportTarget(e,i,s)??{targetFile:i,targetSymbol:s}}resolveMemberCall(e,r,n){let i=e.replace(/\\/g,"/");if(r==="this"||r==="super")return this.localsByFile.get(i)?.has(n)?{targetFile:i,targetSymbol:n}:null;let s=this.resolveImportReceiverMethod(i,r,n);return s||(this.localsByFile.get(i)?.has(n)?{targetFile:i,targetSymbol:n}:null)}resolveImportReceiverMethod(e,r,n){let i=this.importsByFile.get(e)||[];for(let s of i){if(s.localName!==r)continue;let o=this.resolveModulePath(e,s.modulePath);if(!o)continue;let a=this.resolveReexportTarget(e,o,n);if(a)return a;if(this.localsByFile.get(o)?.has(n))return{targetFile:o,targetSymbol:n};let l=this.resolveMethodAtReceiverDeclaration(e,s,r,n,o);if(l)return l}return null}resolveMethodAtReceiverDeclaration(e,r,n,i,s){let o=r.originalName===Dd?n:r.originalName,a=this.resolveReexportTarget(e,s,o);return!a||!this.localsByFile.get(a.targetFile)?.has(i)?null:{targetFile:a.targetFile,targetSymbol:i}}isExternalBinding(e,r){let n=e.replace(/\\/g,"/");return(this.importsByFile.get(n)||[]).some(s=>s.localName===r&&this.isExternalSpecifier(n,s.modulePath))}hasBinding(e,r){return(this.importsByFile.get(e.replace(/\\/g,"/"))??[]).some(n=>n.localName===r)}declaresLocal(e,r){return this.localsByFile.get(e.replace(/\\/g,"/"))?.has(r)??!1}isExternalSpecifier(e,r){if(r.startsWith(hP))return!0;if(r.startsWith(VE))return!1;let n=EP.exec(r)?.[1];if(n&&this.getWorkspacePackageDirs().has(n)||this.matchesTsConfigAlias(r))return!1;let i=this.resolveModulePath(e,r);return i?i.startsWith(`${lt}/`)||i.includes(`/${lt}/`):!0}matchesTsConfigAlias(e){return Object.keys(this.tsConfigPaths).some(r=>e.startsWith(r.replace(ca,"")))}resolveReexportTarget(e,r,n){let i=r,s=n,o=new Set([e]);for(;!o.has(i);){if(o.add(i),this.localsByFile.get(i)?.has(s))return{targetFile:i,targetSymbol:s};let a=this.importsByFile.get(i)?.find(c=>c.localName===s);if(!a)return null;let l=this.resolveModulePath(i,a.modulePath);if(!l)return null;i=l,s=a.originalName===Dd?s:a.originalName}return null}resolveGoSamePackageCall(e,r){let n=et.posix.dirname(e),i=this.goFilesByDirectory.get(n);if(!i)return null;for(let s of i)if(s!==e&&this.localsByFile.get(s)?.has(r))return{targetFile:s,targetSymbol:r};return null}resolveWorkerSpawnPath(e,r){let n=et.posix.dirname(e.replace(/\\/g,"/")),i=et.posix.join(n,r.replace(/\.jsx?$/,""));return this.findFileWithExtension(i)}resolveModulePath(e,r){if(r.startsWith(VE)){let n=et.posix.dirname(e),i=et.posix.join(n,r);return this.findFileWithExtension(i)}for(let[n,i]of Object.entries(this.tsConfigPaths)){let s=n.replace(ca,"");if(r.startsWith(s)){let o=r.slice(s.length);for(let a of i){let l=a.replace(ca,o),c=this.findFileWithExtension(l);if(c)return c}}}return this.resolveBareImport(r)}packageDirCache=null;getWorkspacePackageDirs(){if(this.packageDirCache)return this.packageDirCache;let e=new Map;for(let r of this.getWorkspaceGlobs())this.collectPackageDirsForGlob(r,e);return this.packageDirCache=e,e}collectPackageDirsForGlob(e,r){let n=e.indexOf(ca),i=(n>=0?e.slice(0,n):e).replace(/\/$/,""),s=yn(this.workspaceRoot,i);if(!s||!ht.existsSync(s))return;let o;try{o=ht.readdirSync(s,{withFileTypes:!0})}catch{return}for(let a of o)this.registerPackageDirEntry(i,s,a,r)}registerPackageDirEntry(e,r,n,i){if(!n.isDirectory())return;let s=et.join(r,n.name,oe.PACKAGE_JSON);if(ht.existsSync(s))try{let o=JSON.parse(ht.readFileSync(s,H));o.name&&i.set(o.name,et.posix.join(e,n.name))}catch{}}getWorkspaceGlobs(){try{let e=zr(this.workspaceRoot,dP);if(e){let n=/packages:\s*\n((?:\s*-\s+.+\n?)+)/.exec(e);if(n){let i=[...n[1].matchAll(/^\s*-\s+["']?([^"'\n#]+?)["']?\s*$/gm)].map(s=>s[1].trim());if(i.length>0)return i}}let r=zr(this.workspaceRoot,oe.PACKAGE_JSON);if(r){let n=JSON.parse(r);if(Array.isArray(n.workspaces))return n.workspaces;if(Array.isArray(n.workspaces?.packages))return n.workspaces.packages}}catch{}return[]}resolveBareImport(e){let r=/^(@[^/]+\/[^/]+|[^/]+)(\/.*)?$/.exec(e);if(!r)return null;let n=r[1],i=r[2]?.slice(1),s=this.resolveWorkspaceSiblingImport(n,i);return s||this.resolveNodeModulesImport(n,i)}resolveWorkspaceSiblingImport(e,r){let n=this.getWorkspacePackageDirs().get(e);if(!n)return null;let i=r?et.posix.join(n,r):et.posix.join(n,gP,fP),s=this.findFileWithExtension(i);return s||this.findFileWithExtension(n)}resolveNodeModulesImport(e,r){try{let n=zr(this.workspaceRoot,et.join(lt,e,oe.PACKAGE_JSON));if(!n)return null;let i=JSON.parse(n),s=r||i.module||i.main||pP,o=et.posix.join(lt,e,s);return yn(this.workspaceRoot,o)?o:null}catch{return null}}static COMPILED_JS_EXTENSION_PATTERN=/\.(m|c)?jsx?$/;firstExisting(e,r=!1){for(let n of e){let i=yn(this.workspaceRoot,n);if(!(!i||!ht.existsSync(i))&&!(r&&!ht.statSync(i).isFile()))return n}return null}findFileWithExtension(e){let r=this.firstExisting([e],!0);if(r)return r;let n=this.firstExisting(zE.map(i=>e+i));if(n)return n;if(t.COMPILED_JS_EXTENSION_PATTERN.test(e)){let i=e.replace(t.COMPILED_JS_EXTENSION_PATTERN,""),s=this.firstExisting(zE.map(o=>i+o));if(s)return s}return this.firstExisting(mP.map(i=>e+i))}};function On(t,e,r){if(!t.has(e))return e;let n=`${e}@L${r}`;if(!t.has(n))return n;let i=2;for(;t.has(`${n}#${i}`);)i++;return`${n}#${i}`}function _s(t,e,r){return r?`${t}#${r}.${e}`:`${t}#${e}`}function _P(){return{total:0,resolved:0,selfDiscarded:0,unresolvable:0,external:0,unknownReceiver:0}}function SP(t){return{total:t.total,resolved:t.resolved,selfDiscarded:t.selfDiscarded,unresolvable:t.unresolvable,external:t.external,unknownReceiver:t.unknownReceiver,unresolved:t.total-t.resolved-t.selfDiscarded-t.unresolvable-t.external-t.unknownReceiver}}var da=class{async persist(e){let{store:r,workspaceRoot:n,projectId:i,parsedResults:s,tags:o}=e;return r.withWriteLock(()=>this.persistLocked(r,n,i,s,o))}persistLocked(e,r,n,i,s){return e.withTransaction(()=>{let o=new fi(r);this.registerResolverFiles(o,i);let a=new Map,l=new Map,c={};this.upsertTags(e,s),e.graph.withFtsSyncSuspended(()=>{this.persistFileAndSymbolNodes(e,n,i,s,a,l)});let u=this.linkParsedResults(e,o,n,i,a,l,c),d=Object.keys(c).length>0?vr(c):void 0;return{updatedCount:u,callResolution:d,callResolutionByFile:c}})}registerResolverFiles(e,r){for(let n of r){let i=[];n.data.functions&&i.push(...n.data.functions.map(s=>s.name)),n.data.classes&&i.push(...n.data.classes.map(s=>s.name)),n.data.variables&&i.push(...n.data.variables.map(s=>s.name)),e.registerFile(n.file,n.data.imports||[],[],i)}}upsertTags(e,r){for(let n of r)e.tags.upsertTag(n)}persistFileAndSymbolNodes(e,r,n,i,s,o){for(let a of n){e.graph.deleteNodesForPath(a.file),e.callSites.deleteForFile(r,a.file),e.callSites.insertMany(r,a.file,(a.data.calls??[]).map(p=>({targetFunction:p.targetFunction,startLine:p.startLine,startColumn:p.startColumn,calleeName:p.calleeName,receiverText:p.receiverText,calleeKind:p.calleeKind})));let l=e.graph.insertNode({projectId:r,name:a.file,type:Cr.MODULE,description:"",pathPatterns:[a.file],nodeKey:a.file,contentHash:a.hash});s.set(a.file,l);let c=new Map;o.set(a.file,c),this.linkFileToTags(e,l,i);let u=new Set([a.file]);this.insertFunctionNodes(e,r,a,l,c,u),this.insertClassNodes(e,r,a,l,c,u),this.insertVariableNodes(e,r,a,l,c,u)}}linkFileToTags(e,r,n){for(let i of n){let s=e.tags.getIdByName(i);s!==void 0&&e.tags.linkNodeToTag(r,s)}}insertFunctionNodes(e,r,n,i,s,o){for(let a of n.data.functions??[]){let l=On(o,_s(n.file,a.name,a.containerName),a.startLine);o.add(l);let c=e.graph.insertNode({projectId:r,name:a.name,type:Cr.MODULE,description:"",pathPatterns:[n.file],nodeKey:l,contentHash:a.contentHash});s.set(a.name,c),e.graph.insertLink({sourceNodeId:i,targetNodeId:c,linkType:de.CONTAINS})}}insertClassNodes(e,r,n,i,s,o){for(let a of n.data.classes??[]){let l=On(o,`${n.file}#${a.name}`,a.startLine);o.add(l);let c=e.graph.insertNode({projectId:r,name:a.name,type:Cr.MODULE,description:"",pathPatterns:[n.file],nodeKey:l,contentHash:a.contentHash});s.set(a.name,c),e.graph.insertLink({sourceNodeId:i,targetNodeId:c,linkType:de.CONTAINS})}}insertVariableNodes(e,r,n,i,s,o){for(let a of n.data.variables??[]){let l=On(o,`${n.file}#${a.name}`,a.startLine);o.add(l);let c=e.graph.insertNode({projectId:r,name:a.name,type:Cr.MODULE,description:"",pathPatterns:[n.file],nodeKey:l,contentHash:a.contentHash});s.set(a.name,c),e.graph.insertLink({sourceNodeId:i,targetNodeId:c,linkType:de.CONTAINS})}}linkParsedResults(e,r,n,i,s,o,a){let l=0;for(let c of i){let u=s.get(c.file);if(!u)continue;let p=_P();this.linkParsedResultRelations(e,r,c,u,s,o,p),p.total>0&&(a[c.file]=SP(p)),e.files.upsertFile({projectId:n,filePath:c.file,contentHash:c.hash}),l++}return l}linkParsedResultRelations(e,r,n,i,s,o,a){let l=o.get(n.file);for(let c of n.data.calls??[])this.linkSymbolReference(e,r,n.file,i,l,s,o,c.sourceFunction,c.targetFunction,de.CALLS,!1,a,{calleeName:c.calleeName,receiverText:c.receiverText,calleeKind:c.calleeKind});for(let c of n.data.implements??[])this.linkSymbolReference(e,r,n.file,i,l,s,o,c.sourceClass,c.targetInterface,de.IMPLEMENTS,!0);for(let c of n.data.extends??[])this.linkSymbolReference(e,r,n.file,i,l,s,o,c.sourceClass,c.targetClass,de.EXTENDS,!0);for(let c of n.data.workerSpawns??[])this.linkWorkerSpawn(e,r,n.file,i,l,s,o,c.sourceFunction,c.targetPath);this.linkReexports(e,r,n,i,s,o)}linkReexports(e,r,n,i,s,o){for(let a of n.data.imports??[])a.viaReexport&&this.linkReexport(e,r,n.file,i,s,o,a.localName)}linkReexport(e,r,n,i,s,o,a){let l=r.resolveCall(n,a);if(!l)return;let c=this.resolveTargetNodeId(e,s,o,l.targetFile,l.targetSymbol);!c||c===i||e.graph.insertLink({sourceNodeId:i,targetNodeId:c,linkType:de.DEPENDS_ON})}linkWorkerSpawn(e,r,n,i,s,o,a,l,c){let u=r.resolveWorkerSpawnPath(n,c);if(!u)return;let p=this.resolveTargetNodeId(e,o,a,u,u);if(!p)return;let d=this.resolveSourceNodeId(s,l,i);p!==d&&e.graph.insertLink({sourceNodeId:d,targetNodeId:p,linkType:de.DEPENDS_ON})}isUnresolvableCallShape(e,r){let n=r?.calleeKind;return n==="arg-chain"||n==="computed"||!n&&e.includes("(")}resolveCallTarget(e,r,n,i){let s=i?.calleeKind;return(s==="member"||s==="this")&&i?.calleeName&&i.receiverText?e.resolveMemberCall(r,i.receiverText,i.calleeName):e.resolveCall(r,n)}classifyUnresolvedCall(e,r,n,i){let s=i?.calleeKind==="member"?i.receiverText:void 0;return e.isExternalBinding(r,s??n)?"external":s?this.classifyUnresolvedReceiver(e,r,s):i?.calleeKind!=="bare"?null:this.classifyUnresolvedBareCallee(e,r,n)}classifyUnresolvedReceiver(e,r,n){return e.hasBinding(r,n)||e.declaresLocal(r,n)?null:"unknownReceiver"}classifyUnresolvedBareCallee(e,r,n){return e.hasBinding(r,n)||e.declaresLocal(r,n)?null:"external"}linkSymbolReference(e,r,n,i,s,o,a,l,c,u,p=!1,d,f){if(d&&d.total++,this.isUnresolvableCallShape(c,f)){d&&d.unresolvable++;return}let m=this.resolveCallTarget(r,n,c,f),_=this.insertResolvedLink(e,m,c,p,s,l,i,o,a,u);if(!d)return;if(_==="linked"){d.resolved++;return}if(_==="self-discarded"){d.selfDiscarded++;return}let L=this.classifyUnresolvedCall(r,n,c,f);L==="external"?d.external++:L==="unknownReceiver"&&d.unknownReceiver++}insertResolvedLink(e,r,n,i,s,o,a,l,c,u){let p=r?this.resolveTargetNodeId(e,l,c,r.targetFile,r.targetSymbol):i?e.graph.findNodeByName(n)?.id:void 0;if(!p)return"no-target";let d=this.resolveSourceNodeId(s,o,a);return p===d?"self-discarded":(e.graph.insertLink({sourceNodeId:d,targetNodeId:p,linkType:u}),"linked")}resolveTargetNodeId(e,r,n,i,s){return n.get(i)?.get(s)??e.graph.findNodeIdByName(i,s)??r.get(i)??e.graph.findNodeIdByName(i,i)}resolveSourceNodeId(e,r,n){return(r&&r!==cg?e?.get(r):void 0)??n}};var TP=new Set(["child_process","node:child_process"]),QE=new Set(["execFile","execFileSync","spawn","spawnSync","fork"]),XE=[".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs"],ZE=/\.(?:js|jsx|mjs|cjs)$/,e_="*";function AP(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function RP(t){return[...(t.data.functions??[]).map(e=>e.name),...(t.data.classes??[]).map(e=>e.name),...(t.data.variables??[]).map(e=>e.name)]}var pa=class{base=new da;async persist(e){let r=await this.base.persist(e);return await e.store.withWriteLock(()=>e.store.withTransaction(()=>{this.linkValueImports(e.store,e.workspaceRoot,e.parsedResults),this.linkLiteralChildProcesses(e.store,e.workspaceRoot,e.parsedResults)})),r}linkValueImports(e,r,n){let i=this.createScopeResolver(r,n);for(let s of n)this.linkValueImportsForFile(e,i,s)}createScopeResolver(e,r){let n=new fi(e);for(let i of r)n.registerFile(i.file,i.data.imports??[],[],RP(i));return n}linkValueImportsForFile(e,r,n){let i=e.graph.findNodeIdByName(n.file,n.file);if(i)for(let s of n.data.imports??[])this.linkValueImport(e,r,n,i,s)}linkValueImport(e,r,n,i,s){if(s.viaReexport||this.hasStrongerSymbolRelationship(n,s.localName))return;let o=r.resolveCall(n.file,s.localName);if(!o)return;let a=e.graph.findNodeIdByName(o.targetFile,o.targetSymbol)??e.graph.findNodeIdByName(o.targetFile,o.targetFile);!a||a===i||this.insertLinkOnce(e,i,a,de.IMPORTS)}hasStrongerSymbolRelationship(e,r){return(e.data.calls??[]).some(n=>n.calleeName===r||n.targetFunction===r)||(e.data.implements??[]).some(n=>n.targetInterface===r)||(e.data.extends??[]).some(n=>n.targetClass===r)}linkLiteralChildProcesses(e,r,n){let i=new Set(n.map(s=>s.file));for(let s of n)this.linkLiteralChildProcessesForFile(e,r,i,s)}linkLiteralChildProcessesForFile(e,r,n,i){let s=zr(r,i.file);if(!s)return;let o=e.graph.findNodeIdByName(i.file,i.file);if(o)for(let a of i.data.imports??[])TP.has(a.modulePath)&&this.linkChildProcessDescriptor(e,n,i.file,o,s,a)}linkChildProcessDescriptor(e,r,n,i,s,o){for(let a of this.childProcessInvocations(o)){let l=this.extractLiteralProcessTargets(s,a.localExpression,a.api);for(let c of l)this.linkResolvedProcessTarget(e,r,n,i,c)}}linkResolvedProcessTarget(e,r,n,i,s){let o=this.resolveProjectFile(n,s,r);if(!o)return;let a=e.graph.findNodeIdByName(o,o);!a||a===i||this.insertLinkOnce(e,i,a,de.DEPENDS_ON)}childProcessInvocations(e){return QE.has(e.originalName)&&e.originalName!==e_?[{api:e.originalName,localExpression:e.localName}]:e.originalName===e_?[...QE].map(r=>({api:r,localExpression:`${e.localName}.${r}`})):[]}extractLiteralProcessTargets(e,r,n){let i=AP(r),s=n==="fork"?new RegExp(`\\b${i}\\s*\\(\\s*["']([^"']+)["']`,"g"):new RegExp(`\\b${i}\\s*\\(\\s*(?:["']node(?:\\.exe)?["']|process\\.execPath)\\s*,\\s*\\[\\s*["']([^"']+)["']`,"g");return[...e.matchAll(s)].map(o=>o[1])}resolveProjectFile(e,r,n){let i=r.replace(/\\/g,"/"),s=new Set;(i.startsWith("./")||i.startsWith("../"))&&s.add(Ss.posix.normalize(Ss.posix.join(Ss.posix.dirname(e),i))),s.add(Ss.posix.normalize(i.replace(/^\//,"")));for(let o of s){if(n.has(o))return o;if(ZE.test(o)){let a=o.replace(ZE,"");for(let l of XE){let c=`${a}${l}`;if(n.has(c))return c}}else for(let a of XE){let l=`${o}${a}`;if(n.has(l))return l}}}insertLinkOnce(e,r,n,i){e.graph.getOutgoingRelations(r).some(o=>o.id===n&&o.linkType===i)||e.graph.insertLink({sourceNodeId:r,targetNodeId:n,linkType:i})}};import*as Ts from"path";var yP="impact.dynamic-dependencies.v1",t_=64,OP=new Set([".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs"]);function n_(t){return`${yP}:${t}`}function r_(t){return t!==void 0&&/[A-Za-z0-9_$]/.test(t)}function IP(t,e,r){let n=e+1;for(;n<t.length;){if(t[n]==="\\"){n+=2;continue}if(t[n]===r)return n+1;n++}return t.length}function LP(t,e){let r=t.indexOf(`
138
138
  `,e+2);return r===-1?t.length:r+1}function CP(t,e){let r=t.indexOf("*/",e+2);return r===-1?t.length:r+2}function i_(t,e){let r=t[e],n=t[e+1];if(r==="/"&&n==="/")return LP(t,e);if(r==="/"&&n==="*")return CP(t,e);if(r==="'"||r==='"'||r==="`")return IP(t,e,r)}function NP(t,e){let r=1,n=e+1;for(;n<t.length;){let i=i_(t,n);if(i!==void 0){n=i;continue}if(t[n]==="("&&r++,t[n]===")"&&(r--,r===0))return n;n++}}function PP(t,e){let r=t.slice(0,e),n=r.split(`
139
139
  `).length-1,i=r.lastIndexOf(`
140
- `);return{line:n,column:e-i-1}}function DP(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 vP(t,e){return!t.startsWith("import",e)||r_(t[e-1])?!1:!r_(t[e+6])}function bP(t,e){if(!vP(t,e))return;let r=e+6;for(;/\s/.test(t[r]??"");)r++;if(t[r]!=="(")return;let n=NP(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=PP(t,a);return{item:{expression:o,startLine:l.line,startColumn:l.column,...DP(o)},nextIndex:n+1}}function wP(t){let e=[],r=0;for(;r<t.length;){let n=i_(t,r);if(n!==void 0){r=n;continue}let i=bP(t,r);if(i){e.push(i.item),r=i.nextIndex;continue}r++}return e}function hi(t){return t.replaceAll("\\","/")}function FP(t){let e=As.posix.extname(t);return OP.has(e)?t.slice(0,-e.length):t}function s_(t,e){if(!e?.startsWith("."))return;let r=As.posix.dirname(hi(t)),n=As.posix.normalize(As.posix.join(r,hi(e)));return e.endsWith("/")&&!n.endsWith("/")?`${n}/`:n}function o_(t,e,r){let n=s_(t,e.literalPrefix);if(!n)return!e.literalPrefix;let i=hi(r),s=FP(i);return e.interpolated?s.startsWith(n)&&s.endsWith(e.literalSuffix??""):i===n||s===n}function MP(t,e,r){if(!s_(t,e.literalPrefix))return{status:Pr.UNRESOLVED,candidatePaths:[],reason:e.literalPrefix?"non-local-dynamic-specifier":"unbounded-runtime-expression"};let i=r.filter(s=>o_(t,e,s)).sort((s,o)=>s.localeCompare(o));return i.length===0?{status:Pr.UNRESOLVED,candidatePaths:[],reason:"no-known-local-candidate"}:i.length>t_?{status:Pr.UNRESOLVED,candidatePaths:[],reason:`candidate-set-exceeds-${t_}`}:{status:Pr.BOUNDED,candidatePaths:i,reason:e.interpolated?"bounded-local-pattern":"literal-dynamic-import"}}function a_(t){return t.sort((e,r)=>e.sourceFile.localeCompare(r.sourceFile)||e.startLine-r.startLine||e.startColumn-r.startColumn||e.expression.localeCompare(r.expression))}function l_(t,e){let r=t.meta.get(n_(e));if(!r)return[];try{let n=JSON.parse(r);return Array.isArray(n)?a_(n):[]}catch{return[]}}function c_(t,e,r,n){let i=new Set(n.map(l=>l.file)),s=l_(t,r).filter(l=>!i.has(l.sourceFile)),o=t.files.getAllHashes().map(({filePath:l})=>hi(l)).sort((l,c)=>l.localeCompare(c)),a=[];for(let l of n){if(!/\.[cm]?[jt]sx?$/.test(l.file))continue;let c=Jr(e,l.file);if(c!==null)for(let u of wP(c))a.push({sourceFile:hi(l.file),kind:$p.DYNAMIC_IMPORT,expression:u.expression,startLine:u.startLine,startColumn:u.startColumn,...u.literalPrefix!==void 0?{literalPrefix:u.literalPrefix}:{},...u.literalSuffix!==void 0?{literalSuffix:u.literalSuffix}:{},...MP(l.file,u,o)})}t.meta.set(n_(r),JSON.stringify(a_([...s,...a])))}function u_(t,e){let r=t.projects.getFirst()?.id,n=t.graph.findNodeByName(e);if(!r||!n?.filePath)return[];let i=hi(n.filePath);return l_(t,r).filter(s=>s.candidatePaths.includes(i)?!0:s.status!==Pr.UNRESOLVED?!1:o_(s.sourceFile,{literalPrefix:s.literalPrefix,literalSuffix:s.literalSuffix,interpolated:s.expression.startsWith("`")&&s.expression.includes("${")},i))}var fa=class{base=new ga;async persist(e){let r=await this.base.persist(e);return await e.store.withWriteLock(()=>e.store.withTransaction(()=>{c_(e.store,e.workspaceRoot,e.projectId,e.parsedResults)})),r}};import Ei from"fs/promises";import Os from"path";import{tracingChannel as kP,channel as GP}from"diagnostics_channel";var je=GP("lru-cache:metrics"),Rs=kP("lru-cache"),xP=typeof performance=="object"&&performance&&typeof performance.now=="function"?performance:Date,bd=()=>je.hasSubscribers||Rs.hasSubscribers,p_=new Set,d_=typeof process=="object"&&process?process:{},UP=(t,e,r,n)=>{typeof d_.emitWarning=="function"?d_.emitWarning(t,e,r,n):console.error(`[${r}] ${e}: ${t}`)},HP=t=>!p_.has(t),qr=t=>!!t&&t===Math.floor(t)&&t>0&&isFinite(t),g_=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?ma:null:null,ma=class extends Array{constructor(t){super(t),this.fill(0)}},BP=class ys{heap;length;static#t=!1;static create(e){let r=g_(e);if(!r)return[];ys.#t=!0;let n=new ys(e,r);return ys.#t=!1,n}constructor(e,r){if(!ys.#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]}},f_=class m_{#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.#O(r),rindexes:r=>e.#I(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:L,fetchMethod:C,memoMethod:F,noDeleteOnFetchRejection:I,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??xP,r!==0&&!qr(r))throw new TypeError("max option must be a nonnegative integer");let pe=r?g_(r):Array;if(!pe)throw new Error("invalid max value: "+r);if(this.#t=r,this.#s=m,this.maxEntrySize=_||this.#s,this.sizeCalculation=L,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(F!==void 0&&typeof F!="function")throw new TypeError("memoMethod must be a function if defined");if(this.#k=F,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=BP.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=!!I,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 N="LRU_CACHE_UNBOUNDED";HP(N)&&(p_.add(N),UP("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.","UnboundedCacheWarning",N,m_))}}getRemainingTTL(e){return this.#i.has(e)?1/0:0}#B(){let e=new ma(this.#t),r=new ma(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.#C=(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=()=>{};#C=()=>{};#K=()=>{};#h=()=>!1;#z(){let e=new ma(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};*#O({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]}*#I({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.#O())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.#I())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.#O()){let r=this.#n[e];r!==void 0&&!this.#r(this.#e[e])&&(yield r)}}*rkeys(){for(let e of this.#I()){let r=this.#n[e];r!==void 0&&!this.#r(this.#e[e])&&(yield r)}}*values(){for(let e of this.#O())this.#e[e]!==void 0&&!this.#r(this.#e[e])&&(yield this.#e[e])}*rvalues(){for(let e of this.#I())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.#O()){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.#O()){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.#I()){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.#I({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.#O({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.#N(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.#N(e,r,n);return i&&je.hasSubscribers&&je.publish(i),s}#N(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,L=_===void 0?"add":r!==_?"replace":"update";c&&(c.set=L,_!==void 0&&(c.oldValue=_)),this.#D&&this.onInsert?.(r,e,L)}}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.#C(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.#C(i,s));else return n&&this.#v(s),i&&(i.has="hit",this.#C(i,s)),!0}else i&&(i.has="miss");return!1}peek(e,r={}){let{status:n=bd()?{}: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=(_,L=!1)=>{let{aborted:C}=o.signal,F=n.ignoreFetchAbort&&_!==void 0,I=n.ignoreFetchAbort||!!(n.allowStaleOnFetchAbort&&_!==void 0);if(n.status&&(C&&!L?(n.status.fetchAborted=!0,n.status.fetchError=o.signal.reason,F&&(n.status.fetchAbortIgnored=!0)):n.status.fetchResolved=!0),C&&!F&&!L)return p(o.signal.reason,I);let $=f,Q=this.#e[r];return(Q===f||Q===void 0&&F&&L)&&(_===void 0?$.__staleWhileFetching!==void 0?this.#e[r]=$.__staleWhileFetching:this.#L(e,"fetch"):(n.status&&(n.status.fetchUpdated=!0),this.#N(e,_,l.options,$))),_},u=_=>(n.status&&(n.status.fetchRejected=!0,n.status.fetchError=_),p(_,!1)),p=(_,L)=>{let{aborted:C}=o.signal,F=C&&n.allowStaleOnFetchAbort,I=F||n.allowStaleOnFetchRejection,$=I||n.noDeleteOnFetchRejection,Q=f;if(this.#e[r]===f&&(!$||!L&&Q.__staleWhileFetching===void 0?this.#L(e,"fetch"):F||(this.#e[r]=Q.__staleWhileFetching)),I)return n.status&&Q.__staleWhileFetching!==void 0&&(n.status.returnedStale=!0),Q.__staleWhileFetching;if(Q.__returned===Q)throw _},d=(_,L)=>{let C=this.#M?.(e,s,l);o.signal.addEventListener("abort",()=>{(!n.ignoreFetchAbort||n.allowStaleOnFetchAbort)&&(_(void 0),n.allowStaleOnFetchAbort&&(_=F=>c(F,!0)))}),C&&C instanceof Promise?C.then(F=>_(F===void 0?void 0:F),L):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.#N(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=Rs.hasSubscribers,{status:i=bd()?{}: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,Rs.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:L=!1,status:C,signal:F}=r;if(C&&(C.op="fetch",C.key=e,L&&(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 I={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:F},$=this.#i.get(e);if($===void 0){C&&(C.fetch="miss");let Q=this.#H(e,$,I,_);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(!L&&!z)return C&&(C.fetch="hit"),this.#F($),i&&this.#v($),C&&this.#C(C,$),Q;let te=this.#H(e,$,I,_),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=Rs.hasSubscribers,{status:i=bd()?{}: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,Rs.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.#N(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.#C(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.#I({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 KP="tmp",Ar={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"},ha=class{constructor(e,r=he(),n=1024*1024*1024,i=14400*1e3,s=1800*1e3){this.logger=r;let o=Os.resolve(e);this.tempDir=Os.join(o,Ee,KP),this.ttlMs=i,this.lruCache=new f_({max:1e4,maxSize:n,sizeCalculation:a=>a.sizeBytes,ttl:i,allowStale:!1})}logger;tempDir;lruCache;cleanupInterval=null;concurrencyLimit=mn(5);ttlMs;async initialize(){try{await Ei.mkdir(this.tempDir,{recursive:!0});let e=Os.dirname(Os.dirname(this.tempDir)),[r,n]=await Promise.all([Ei.realpath(e),Ei.realpath(this.tempDir)]);if(!n.startsWith(r+Os.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(Ar.INITIALIZED,{tempDir:this.tempDir}),this.startCleanupSchedule(1800*1e3)}catch(e){throw e instanceof E||this.logger.error(Ar.INIT_FAILED,{error:e instanceof Error?e.message:String(e)}),e}}async trackFile(e){return this.concurrencyLimit(async()=>{try{let r=await Ei.stat(e),n={filePath:e,createdAt:Date.now(),lastAccessedAt:Date.now(),sizeBytes:r.size};this.lruCache.set(e,n),this.logger.debug(Ar.FILE_TRACKED,{filePath:e,sizeBytes:r.size})}catch(r){this.logger.warn(Ar.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 Ei.readFile(e,H)}catch(r){return this.logger.warn(Ar.ACCESS_FAILED,{filePath:e,error:r instanceof Error?r.message:String(r)}),null}})}async removeFileSync(e){try{await Ei.unlink(e),this.logger.debug(Ar.FILE_REMOVED,{filePath:e})}catch(r){if(r?.code!==Js)throw r}}startCleanupSchedule(e){this.cleanupInterval=setInterval(()=>{this.cleanup().catch(r=>{this.logger.error(Ar.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(Ar.CLEANUP_COMPLETED,{removedCount:r.length,cacheSize:this.lruCache.size})}catch(e){this.logger.error(Ar.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 Ea={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}`},$P=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"]),YP=5,WP=25;function jP(t){return Math.max(t*YP,WP)}function h_(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 _a=class{constructor(e=he()){this.logger=e}logger;extractKeywords(e){let r=e.split(/[^\w./-]+/).map(n=>n.trim()).filter(n=>n.length>0&&!$P.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!==de.CONTAINS).map(({name:a,linkType:l})=>({name:a,linkType:l})),s=e.graph.getOutgoingRelations(n.id).filter(a=>a.linkType!==de.CONTAINS).map(({name:a,linkType:l})=>({name:a,linkType:l})),o=Wi(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(Ea.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=jP(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)));h_(e.fts.searchL2Nodes(o,l),o.length>1?c():[]).slice(0,n).forEach((f,m)=>s({layer:pn.L2,id:f.id,title:f.name,content:f.description,score:.9-m*.01,matchType:"keyword"})),h_(e.fts.searchL3Nodes(o,l),o.length>1?u():[]).slice(0,n).forEach((f,m)=>s({layer:pn.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:pn.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:pn.L2,id:u.id,title:u.name,content:Ea.linkedTo(l.name),score:.7-p*.01,matchType:"neighbor"})))}return this.logger.debug(Ea.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===pn.L2),o=i.filter(c=>c.layer===pn.L3),a=null;try{a=this.getContext(e,r)}catch(c){this.logger.debug(Ea.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 Sa=class extends ii{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===de.CONTAINS))for(let a of e.graph.getIncomingRelations(o.id))a.linkType!==de.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 Ta=class extends Sa{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 u_(e,r)}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:$n.DYNAMIC_CANDIDATE,dynamicEvidence:r,...a?{why:a}:{}}}isCandidateForTarget(e,r){return e.status===Pr.BOUNDED&&e.candidatePaths.includes(r)}};var JP=2e3,qP="(ungrouped)",QP=".",Aa=class{build(e,r={}){let n=e.l2Rows.map(I=>({id:I.id,name:I.name,filePath:aD(I.path_patterns),type:I.type})),i=e.linkRows.map(I=>({sourceNodeId:I.source_node_id,targetNodeId:I.target_node_id,linkType:I.link_type,commitSha:I.commit_sha??void 0,diffSummary:I.diff_summary??void 0})),s=e.l3Rows.map(I=>({id:I.id,l2NodeId:I.l2_node_id,title:I.title,content:I.content??void 0,nodeType:I.node_type,confidence:I.confidence??void 0,validityStatus:I.validity_status,sourceCommits:lD(I.source_commits)})),o=e.tagRows,a=XP(n),l=ZP(i),c=eD(o),u=r.maxNodes??JP,p=n.length+s.length,d=tD(r,p,u),f=d?sD(n,i,s,l,a):iD(n,i,s,l,a),m=f.nodes,_=f.links,L=new Set(m.map(I=>I.id)),C=_.filter(I=>L.has(I.source)&&L.has(I.target)),F=rD(m,c);return nD(m,C),{topologyVersion:2,generatedAt:new Date().toISOString(),workspaceRoot:e.workspaceRoot,collapsed:d,nodes:m,links:C,groups:F,stats:{nodeCount:m.length,linkCount:C.length,groupCount:F.length,foldedLinkCount:f.foldedLinkCount??0}}}};function XP(t){let e=new Map;for(let r of t)e.set(String(r.id),r.filePath);return e}function ZP(t){let e=new Map;for(let r of t)r.linkType===de.CONTAINS&&e.set(String(r.targetNodeId),String(r.sourceNodeId));return e}function eD(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 tD(t,e,r){return t.collapse===lc.FILE||t.collapse!==lc.SYMBOL&&e>r}function rD(t,e){let r=new Map,n=[];for(let i of t){let s=oD(i.filePath),o=r.get(s);if(o===void 0&&(o=n.length,r.set(s,o),n.push({id:o,label:s,source:Yp.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 nD(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 iD(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 E_(s,o,r,i),{nodes:s,links:o,foldedLinkCount:0}}function sD(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===de.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 E_(o,a,r,i),{nodes:o,links:a,foldedLinkCount:c}}function E_(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:Dc(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:Dc(s.id),target:o,linkType:de.DECISION,confidence:1}))}}function oD(t){if(!t)return qP;let r=t.split("\\").join("/").split("/").filter(Boolean);return r.length<=1?QP:r.slice(0,Math.min(2,r.length-1)).join("/")}function aD(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 lD(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 S_ from"path";import*as T_ from"fs";import{Parser as __,Language as cD}from"web-tree-sitter";var Ra={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 ya=class{constructor(e=he()){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(Ra.DETECTOR_FAILED,{filePath:r,error:a instanceof Error?a.message:String(a)}),[]}}async getDetectorForFile(e){let r=await this.getRegistry(),n=S_.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??=__.init(),await this.parserInitPromise;let{wasmPath:o,attemptedPaths:a}=fg(i.wasm_file);if(!T_.existsSync(o)){this.logger.debug(Ra.NO_GRAMMAR_AVAILABLE,{filePath:e,wasmFile:i.wasm_file,attemptedPaths:a}),this.detectors.set(i.wasm_file,null);return}try{let l=await cD.load(o),c=new __,u=new gg(c,l);return this.detectors.set(i.wasm_file,u),u}catch(l){this.logger.warn(Ra.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??=pg(),this.registryPromise}};import y_ from"fs";import Oa from"path";import{execFile as uD}from"child_process";import{promisify as dD}from"util";var Fd=dD(uD),pD=[".cmd",".CMD",".exe",""];function wd(t,e){return e?{...t,env:e}:t}function gD(t,e){let r=Oa.join(t,ct,".bin"),n=process.platform===vr?pD.map(i=>`${e}${i}`):[e];for(let i of n){let s=Oa.join(r,i);if(y_.existsSync(s))return s}}function sr(t,e,r){let n=e.buildEnv?.();if(r?.binary)return wd({command:r.binary,args:r.args??e.defaultArgs,locallyResolved:!0,fromUserOverride:!0},n);let i=e.binaryName??e.packageName,s=gD(t,i);if(s)return wd({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 wd({command:"npx",args:o,locallyResolved:!1},n)}var A_=5e3,fD=5e3;async function mD(t){try{if(process.platform===vr){let{stdout:n}=await Fd("where",[t],{timeout:A_});return n.split(/\r?\n/).map(i=>i.trim()).find(i=>i.length>0)}let{stdout:e}=await Fd("sh",["-c",`command -v ${t}`],{timeout:A_}),r=e.trim();return r.length>0?r:void 0}catch{return}}function hD(t,e){if(!e)return;let r=process.platform===vr?[`${t}.exe`,t]:[t];for(let n of e)for(let i of r){let s=Oa.join(n,i);if(y_.existsSync(s))return s}}async function Pe(t,e){if(e?.binary)return{command:e.binary,args:e.args??t.defaultArgs,locallyResolved:!0,fromUserOverride:!0};let r=await mD(t.binaryName);if(r)return{command:r,args:t.defaultArgs,locallyResolved:!0};let n=hD(t.binaryName,t.extraCandidateDirs);return n?{command:n,args:t.defaultArgs,locallyResolved:!0}:{command:t.binaryName,args:t.defaultArgs,locallyResolved:!1}}function R_(t){let e=t.trim().replace(/\\/g,"/");return Oa.posix.basename(e).replace(/\.exe$/i,"").toLowerCase()}async function O_(t,e=fD,r){if(r&&!r.some(n=>R_(n)===R_(t)))return!1;try{return await Fd(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"},Ia=8192,_i={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 ED=["PATH","HOME","USERPROFILE","PATHEXT","SYSTEMROOT","COMSPEC","LANG","LC_ALL","TERM"];function La(t=process.env){let e={};for(let r of ED){let n=t[r];n!==void 0&&(e[r]=n)}return e}var Ca=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 Ca;function _D(t){let e=La(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=${Ia}`;return e.NODE_OPTIONS=r?`${r} ${n}`:n,e}function Na(t,e,r=or){return sr(t,{packageName:wt.PACKAGE_NAME,defaultArgs:[wt.STDIO_ARG],buildEnv:()=>_D(r)},e)}import Pa from"fs";import Da from"path";import{execFile as LD}from"child_process";import{promisify as CD}from"util";import SD from"path";import{execFile as TD}from"child_process";import{promisify as AD}from"util";var RD=AD(TD),yD=new Set([".cmd",".bat",".ps1"]),I_=new Set(["npx"]);function Qr(t){return process.platform!=="win32"?!1:yD.has(SD.extname(t).toLowerCase())||I_.has(t.toLowerCase())}var OD=/[%!"\r\n]/;function Md(t){let e=t.match(OD);if(e)throw new Error(`Unsafe character ${JSON.stringify(e[0])} in Windows shell-wrapped LSP token`);return`"${t}"`}var ID=5e3;async function kd(t,e){try{let{stdout:r}=await RD("where",[t],{timeout:ID,env:e});return r.split(/\r?\n/).map(i=>i.trim()).find(i=>i.length>0)??t}catch{return t}}function Gd(t){return I_.has(t.toLowerCase())}async function Si(t,e,r){return[Gd(t)?await kd(t,r):t,...e].map(Md).join(" ")}var L_=CD(LD),C_=5e3,ND=[oe.TSCONFIG_JSON,oe.JSCONFIG_JSON];function PD(t){return Pa.existsSync(Da.join(t,ct))}function DD(t){return!!(ND.some(r=>Pa.existsSync(Da.join(t,r)))||Pa.existsSync(Da.join(t,"tsconfig.base.json"))||Pa.existsSync(Da.join(t,"src",oe.TSCONFIG_JSON)))}async function vD(t){let e=[wt.NPX_NO_INSTALL_FLAG,wt.PACKAGE_NAME,wt.VERSION_FLAG];try{if(Qr(wt.NPX_COMMAND)){let r=await Si(wt.NPX_COMMAND,e,void 0);await L_(r,[],{cwd:t,timeout:C_,shell:!0})}else await L_(wt.NPX_COMMAND,e,{cwd:t,timeout:C_});return!0}catch{return!1}}async function N_(t,e){let r=PD(t),n=DD(t);if(!r)return{nodeModulesPresent:r,tsconfigResolvable:n,lspBinaryResolvable:!1,ready:!1,reason:_i.nodeModulesMissing};if(!n)return{nodeModulesPresent:r,tsconfigResolvable:n,lspBinaryResolvable:!1,ready:!1,reason:_i.tsconfigMissing};let s=Na(t,e).locallyResolved?!0:await vD(t);return s?{nodeModulesPresent:r,tsconfigResolvable:n,lspBinaryResolvable:s,ready:!0}:{nodeModulesPresent:r,tsconfigResolvable:n,lspBinaryResolvable:s,ready:!1,reason:_i.binaryUnresolvable}}import jD from"fs/promises";import xd from"os";import Ti from"path";import{pathToFileURL as k_,fileURLToPath as G_}from"url";import{spawn as P_}from"child_process";var Ln={CONTENT_LENGTH_HEADER_PREFIX:"Content-Length: ",HEADER_BODY_SEPARATOR:`\r
140
+ `);return{line:n,column:e-i-1}}function DP(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 vP(t,e){return!t.startsWith("import",e)||r_(t[e-1])?!1:!r_(t[e+6])}function bP(t,e){if(!vP(t,e))return;let r=e+6;for(;/\s/.test(t[r]??"");)r++;if(t[r]!=="(")return;let n=NP(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=PP(t,a);return{item:{expression:o,startLine:l.line,startColumn:l.column,...DP(o)},nextIndex:n+1}}function wP(t){let e=[],r=0;for(;r<t.length;){let n=i_(t,r);if(n!==void 0){r=n;continue}let i=bP(t,r);if(i){e.push(i.item),r=i.nextIndex;continue}r++}return e}function mi(t){return t.replaceAll("\\","/")}function FP(t){let e=Ts.posix.extname(t);return OP.has(e)?t.slice(0,-e.length):t}function s_(t,e){if(!e?.startsWith("."))return;let r=Ts.posix.dirname(mi(t)),n=Ts.posix.normalize(Ts.posix.join(r,mi(e)));return e.endsWith("/")&&!n.endsWith("/")?`${n}/`:n}function o_(t,e,r){let n=s_(t,e.literalPrefix);if(!n)return!e.literalPrefix;let i=mi(r),s=FP(i);return e.interpolated?s.startsWith(n)&&s.endsWith(e.literalSuffix??""):i===n||s===n}function MP(t,e,r){if(!s_(t,e.literalPrefix))return{status:Nr.UNRESOLVED,candidatePaths:[],reason:e.literalPrefix?"non-local-dynamic-specifier":"unbounded-runtime-expression"};let i=r.filter(s=>o_(t,e,s)).sort((s,o)=>s.localeCompare(o));return i.length===0?{status:Nr.UNRESOLVED,candidatePaths:[],reason:"no-known-local-candidate"}:i.length>t_?{status:Nr.UNRESOLVED,candidatePaths:[],reason:`candidate-set-exceeds-${t_}`}:{status:Nr.BOUNDED,candidatePaths:i,reason:e.interpolated?"bounded-local-pattern":"literal-dynamic-import"}}function a_(t){return t.sort((e,r)=>e.sourceFile.localeCompare(r.sourceFile)||e.startLine-r.startLine||e.startColumn-r.startColumn||e.expression.localeCompare(r.expression))}function l_(t,e){let r=t.meta.get(n_(e));if(!r)return[];try{let n=JSON.parse(r);return Array.isArray(n)?a_(n):[]}catch{return[]}}function c_(t,e,r,n){let i=new Set(n.map(l=>l.file)),s=l_(t,r).filter(l=>!i.has(l.sourceFile)),o=t.files.getAllHashes().map(({filePath:l})=>mi(l)).sort((l,c)=>l.localeCompare(c)),a=[];for(let l of n){if(!/\.[cm]?[jt]sx?$/.test(l.file))continue;let c=zr(e,l.file);if(c!==null)for(let u of wP(c))a.push({sourceFile:mi(l.file),kind:Kp.DYNAMIC_IMPORT,expression:u.expression,startLine:u.startLine,startColumn:u.startColumn,...u.literalPrefix!==void 0?{literalPrefix:u.literalPrefix}:{},...u.literalSuffix!==void 0?{literalSuffix:u.literalSuffix}:{},...MP(l.file,u,o)})}t.meta.set(n_(r),JSON.stringify(a_([...s,...a])))}function u_(t,e){let r=t.projects.getFirst()?.id,n=t.graph.findNodeByName(e);if(!r||!n?.filePath)return[];let i=mi(n.filePath);return l_(t,r).filter(s=>s.candidatePaths.includes(i)?!0:s.status!==Nr.UNRESOLVED?!1:o_(s.sourceFile,{literalPrefix:s.literalPrefix,literalSuffix:s.literalSuffix,interpolated:s.expression.startsWith("`")&&s.expression.includes("${")},i))}var ga=class{base=new pa;async persist(e){let r=await this.base.persist(e);return await e.store.withWriteLock(()=>e.store.withTransaction(()=>{c_(e.store,e.workspaceRoot,e.projectId,e.parsedResults)})),r}};import hi from"fs/promises";import ys from"path";import{tracingChannel as kP,channel as GP}from"diagnostics_channel";var We=GP("lru-cache:metrics"),As=kP("lru-cache"),xP=typeof performance=="object"&&performance&&typeof performance.now=="function"?performance:Date,vd=()=>We.hasSubscribers||As.hasSubscribers,p_=new Set,d_=typeof process=="object"&&process?process:{},UP=(t,e,r,n)=>{typeof d_.emitWarning=="function"?d_.emitWarning(t,e,r,n):console.error(`[${r}] ${e}: ${t}`)},HP=t=>!p_.has(t),Jr=t=>!!t&&t===Math.floor(t)&&t>0&&isFinite(t),g_=t=>Jr(t)?t<=Math.pow(2,8)?Uint8Array:t<=Math.pow(2,16)?Uint16Array:t<=Math.pow(2,32)?Uint32Array:t<=Number.MAX_SAFE_INTEGER?fa:null:null,fa=class extends Array{constructor(t){super(t),this.fill(0)}},BP=class Rs{heap;length;static#t=!1;static create(e){let r=g_(e);if(!r)return[];Rs.#t=!0;let n=new Rs(e,r);return Rs.#t=!1,n}constructor(e,r){if(!Rs.#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]}},f_=class m_{#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.#O(r),rindexes:r=>e.#I(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:L,fetchMethod:C,memoMethod:F,noDeleteOnFetchRejection:I,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??xP,r!==0&&!Jr(r))throw new TypeError("max option must be a nonnegative integer");let pe=r?g_(r):Array;if(!pe)throw new Error("invalid max value: "+r);if(this.#t=r,this.#s=m,this.maxEntrySize=_||this.#s,this.sizeCalculation=L,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(F!==void 0&&typeof F!="function")throw new TypeError("memoMethod must be a function if defined");if(this.#k=F,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=BP.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=!!I,this.allowStaleOnFetchRejection=!!Q,this.allowStaleOnFetchAbort=!!z,this.ignoreFetchAbort=!!te,this.maxEntrySize!==0){if(this.#s!==0&&!Jr(this.#s))throw new TypeError("maxSize must be a positive integer if specified");if(!Jr(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=Jr(i)||i===0?i:1,this.ttlAutopurge=!!s,this.ttl=n||0,this.ttl){if(!Jr(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 N="LRU_CACHE_UNBOUNDED";HP(N)&&(p_.add(N),UP("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.","UnboundedCacheWarning",N,m_))}}getRemainingTTL(e){return this.#i.has(e)?1/0:0}#B(){let e=new fa(this.#t),r=new fa(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.#C=(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=()=>{};#C=()=>{};#K=()=>{};#h=()=>!1;#z(){let e=new fa(this.#t);this.#S=0,this.#A=e,this.#b=r=>{this.#S-=e[r],e[r]=0},this.#$=(r,n,i,s)=>{if(!Jr(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),!Jr(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};*#O({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]}*#I({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.#O())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.#I())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.#O()){let r=this.#n[e];r!==void 0&&!this.#r(this.#e[e])&&(yield r)}}*rkeys(){for(let e of this.#I()){let r=this.#n[e];r!==void 0&&!this.#r(this.#e[e])&&(yield r)}}*values(){for(let e of this.#O())this.#e[e]!==void 0&&!this.#r(this.#e[e])&&(yield this.#e[e])}*rvalues(){for(let e of this.#I())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.#O()){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.#O()){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.#I()){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.#I({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.#O({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.#N(r,n.value,n)}}set(e,r,n={}){let{status:i=We.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.#N(e,r,n);return i&&We.hasSubscribers&&We.publish(i),s}#N(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,L=_===void 0?"add":r!==_?"replace":"update";c&&(c.set=L,_!==void 0&&(c.oldValue=_)),this.#D&&this.onInsert?.(r,e,L)}}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.#C(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=We.hasSubscribers?{}:void 0}=r;r.status=n,n&&(n.op="has",n.key=e,n.cache=this);let i=this.#J(e,r);return We.hasSubscribers&&We.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.#C(i,s));else return n&&this.#v(s),i&&(i.has="hit",this.#C(i,s)),!0}else i&&(i.has="miss");return!1}peek(e,r={}){let{status:n=vd()?{}:void 0}=r;n&&(n.op="peek",n.key=e,n.cache=this),r.status=n;let i=this.#q(e,r);return We.hasSubscribers&&We.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=(_,L=!1)=>{let{aborted:C}=o.signal,F=n.ignoreFetchAbort&&_!==void 0,I=n.ignoreFetchAbort||!!(n.allowStaleOnFetchAbort&&_!==void 0);if(n.status&&(C&&!L?(n.status.fetchAborted=!0,n.status.fetchError=o.signal.reason,F&&(n.status.fetchAbortIgnored=!0)):n.status.fetchResolved=!0),C&&!F&&!L)return p(o.signal.reason,I);let $=f,Q=this.#e[r];return(Q===f||Q===void 0&&F&&L)&&(_===void 0?$.__staleWhileFetching!==void 0?this.#e[r]=$.__staleWhileFetching:this.#L(e,"fetch"):(n.status&&(n.status.fetchUpdated=!0),this.#N(e,_,l.options,$))),_},u=_=>(n.status&&(n.status.fetchRejected=!0,n.status.fetchError=_),p(_,!1)),p=(_,L)=>{let{aborted:C}=o.signal,F=C&&n.allowStaleOnFetchAbort,I=F||n.allowStaleOnFetchRejection,$=I||n.noDeleteOnFetchRejection,Q=f;if(this.#e[r]===f&&(!$||!L&&Q.__staleWhileFetching===void 0?this.#L(e,"fetch"):F||(this.#e[r]=Q.__staleWhileFetching)),I)return n.status&&Q.__staleWhileFetching!==void 0&&(n.status.returnedStale=!0),Q.__staleWhileFetching;if(Q.__returned===Q)throw _},d=(_,L)=>{let C=this.#M?.(e,s,l);o.signal.addEventListener("abort",()=>{(!n.ignoreFetchAbort||n.allowStaleOnFetchAbort)&&(_(void 0),n.allowStaleOnFetchAbort&&(_=F=>c(F,!0)))}),C&&C instanceof Promise?C.then(F=>_(F===void 0?void 0:F),L):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.#N(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=As.hasSubscribers,{status:i=vd()?{}: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,As.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:L=!1,status:C,signal:F}=r;if(C&&(C.op="fetch",C.key=e,L&&(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 I={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:F},$=this.#i.get(e);if($===void 0){C&&(C.fetch="miss");let Q=this.#H(e,$,I,_);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(!L&&!z)return C&&(C.fetch="hit"),this.#F($),i&&this.#v($),C&&this.#C(C,$),Q;let te=this.#H(e,$,I,_),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=As.hasSubscribers,{status:i=vd()?{}: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,As.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=We.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),We.hasSubscribers&&We.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.#N(e,u,a),u}get(e,r={}){let{status:n=We.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),We.hasSubscribers&&We.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.#C(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){We.hasSubscribers&&We.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.#I({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 KP="tmp",Tr={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"},ma=class{constructor(e,r=me(),n=1024*1024*1024,i=14400*1e3,s=1800*1e3){this.logger=r;let o=ys.resolve(e);this.tempDir=ys.join(o,he,KP),this.ttlMs=i,this.lruCache=new f_({max:1e4,maxSize:n,sizeCalculation:a=>a.sizeBytes,ttl:i,allowStale:!1})}logger;tempDir;lruCache;cleanupInterval=null;concurrencyLimit=fn(5);ttlMs;async initialize(){try{await hi.mkdir(this.tempDir,{recursive:!0});let e=ys.dirname(ys.dirname(this.tempDir)),[r,n]=await Promise.all([hi.realpath(e),hi.realpath(this.tempDir)]);if(!n.startsWith(r+ys.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(Tr.INITIALIZED,{tempDir:this.tempDir}),this.startCleanupSchedule(1800*1e3)}catch(e){throw e instanceof E||this.logger.error(Tr.INIT_FAILED,{error:e instanceof Error?e.message:String(e)}),e}}async trackFile(e){return this.concurrencyLimit(async()=>{try{let r=await hi.stat(e),n={filePath:e,createdAt:Date.now(),lastAccessedAt:Date.now(),sizeBytes:r.size};this.lruCache.set(e,n),this.logger.debug(Tr.FILE_TRACKED,{filePath:e,sizeBytes:r.size})}catch(r){this.logger.warn(Tr.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 hi.readFile(e,H)}catch(r){return this.logger.warn(Tr.ACCESS_FAILED,{filePath:e,error:r instanceof Error?r.message:String(r)}),null}})}async removeFileSync(e){try{await hi.unlink(e),this.logger.debug(Tr.FILE_REMOVED,{filePath:e})}catch(r){if(r?.code!==zs)throw r}}startCleanupSchedule(e){this.cleanupInterval=setInterval(()=>{this.cleanup().catch(r=>{this.logger.error(Tr.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(Tr.CLEANUP_COMPLETED,{removedCount:r.length,cacheSize:this.lruCache.size})}catch(e){this.logger.error(Tr.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 ha={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}`},$P=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"]),YP=5,WP=25;function jP(t){return Math.max(t*YP,WP)}function h_(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 Ea=class{constructor(e=me()){this.logger=e}logger;extractKeywords(e){let r=e.split(/[^\w./-]+/).map(n=>n.trim()).filter(n=>n.length>0&&!$P.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!==de.CONTAINS).map(({name:a,linkType:l})=>({name:a,linkType:l})),s=e.graph.getOutgoingRelations(n.id).filter(a=>a.linkType!==de.CONTAINS).map(({name:a,linkType:l})=>({name:a,linkType:l})),o=Yi(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(ha.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=jP(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)));h_(e.fts.searchL2Nodes(o,l),o.length>1?c():[]).slice(0,n).forEach((f,m)=>s({layer:dn.L2,id:f.id,title:f.name,content:f.description,score:.9-m*.01,matchType:"keyword"})),h_(e.fts.searchL3Nodes(o,l),o.length>1?u():[]).slice(0,n).forEach((f,m)=>s({layer:dn.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:dn.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:dn.L2,id:u.id,title:u.name,content:ha.linkedTo(l.name),score:.7-p*.01,matchType:"neighbor"})))}return this.logger.debug(ha.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===dn.L2),o=i.filter(c=>c.layer===dn.L3),a=null;try{a=this.getContext(e,r)}catch(c){this.logger.debug(ha.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 _a=class extends ni{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===de.CONTAINS))for(let a of e.graph.getIncomingRelations(o.id))a.linkType!==de.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 Sa=class extends _a{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 u_(e,r)}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:Kn.DYNAMIC_CANDIDATE,dynamicEvidence:r,...a?{why:a}:{}}}isCandidateForTarget(e,r){return e.status===Nr.BOUNDED&&e.candidatePaths.includes(r)}};var JP=2e3,qP="(ungrouped)",QP=".",Ta=class{build(e,r={}){let n=e.l2Rows.map(I=>({id:I.id,name:I.name,filePath:aD(I.path_patterns),type:I.type})),i=e.linkRows.map(I=>({sourceNodeId:I.source_node_id,targetNodeId:I.target_node_id,linkType:I.link_type,commitSha:I.commit_sha??void 0,diffSummary:I.diff_summary??void 0})),s=e.l3Rows.map(I=>({id:I.id,l2NodeId:I.l2_node_id,title:I.title,content:I.content??void 0,nodeType:I.node_type,confidence:I.confidence??void 0,validityStatus:I.validity_status,sourceCommits:lD(I.source_commits)})),o=e.tagRows,a=XP(n),l=ZP(i),c=eD(o),u=r.maxNodes??JP,p=n.length+s.length,d=tD(r,p,u),f=d?sD(n,i,s,l,a):iD(n,i,s,l,a),m=f.nodes,_=f.links,L=new Set(m.map(I=>I.id)),C=_.filter(I=>L.has(I.source)&&L.has(I.target)),F=rD(m,c);return nD(m,C),{topologyVersion:2,generatedAt:new Date().toISOString(),workspaceRoot:e.workspaceRoot,collapsed:d,nodes:m,links:C,groups:F,stats:{nodeCount:m.length,linkCount:C.length,groupCount:F.length,foldedLinkCount:f.foldedLinkCount??0}}}};function XP(t){let e=new Map;for(let r of t)e.set(String(r.id),r.filePath);return e}function ZP(t){let e=new Map;for(let r of t)r.linkType===de.CONTAINS&&e.set(String(r.targetNodeId),String(r.sourceNodeId));return e}function eD(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 tD(t,e,r){return t.collapse===ac.FILE||t.collapse!==ac.SYMBOL&&e>r}function rD(t,e){let r=new Map,n=[];for(let i of t){let s=oD(i.filePath),o=r.get(s);if(o===void 0&&(o=n.length,r.set(s,o),n.push({id:o,label:s,source:$p.DIRECTORY,count:0})),i.group=o,n[o].count++,i.kind===xt.FILE){let a=e.get(i.id.slice("l2:".length));a&&a.length&&(i.tags=a)}}return n}function nD(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 iD(t,e,r,n,i){let s=t.map(a=>({id:Nt(a.id),label:a.name,kind:n.has(String(a.id))?xt.SYMBOL:xt.FILE,group:0,filePath:i.get(String(a.id)),degree:0,l2Type:a.type})),o=e.map(a=>({source:Nt(a.sourceNodeId),target:Nt(a.targetNodeId),linkType:a.linkType,confidence:1,commitSha:a.commitSha,diffSummary:a.diffSummary}));return E_(s,o,r,i),{nodes:s,links:o,foldedLinkCount:0}}function sD(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:Nt(u.id),label:u.name,kind:xt.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===de.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:Nt(p),target:Nt(d),linkType:u.linkType,confidence:1,commitSha:u.commitSha,diffSummary:u.diffSummary}))}return E_(o,a,r,i),{nodes:o,links:a,foldedLinkCount:c}}function E_(t,e,r,n){let i=new Set(t.map(s=>s.id));for(let s of r){let o=Nt(s.l2NodeId);i.has(o)&&(t.push({id:Pc(s.id),label:s.title,kind:xt.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:Pc(s.id),target:o,linkType:de.DECISION,confidence:1}))}}function oD(t){if(!t)return qP;let r=t.split("\\").join("/").split("/").filter(Boolean);return r.length<=1?QP:r.slice(0,Math.min(2,r.length-1)).join("/")}function aD(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 lD(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 S_ from"path";import*as T_ from"fs";import{Parser as __,Language as cD}from"web-tree-sitter";var Aa={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 Ra=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(Aa.DETECTOR_FAILED,{filePath:r,error:a instanceof Error?a.message:String(a)}),[]}}async getDetectorForFile(e){let r=await this.getRegistry(),n=S_.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??=__.init(),await this.parserInitPromise;let{wasmPath:o,attemptedPaths:a}=gg(i.wasm_file);if(!T_.existsSync(o)){this.logger.debug(Aa.NO_GRAMMAR_AVAILABLE,{filePath:e,wasmFile:i.wasm_file,attemptedPaths:a}),this.detectors.set(i.wasm_file,null);return}try{let l=await cD.load(o),c=new __,u=new pg(c,l);return this.detectors.set(i.wasm_file,u),u}catch(l){this.logger.warn(Aa.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??=dg(),this.registryPromise}};import y_ from"fs";import ya from"path";import{execFile as uD}from"child_process";import{promisify as dD}from"util";var wd=dD(uD),pD=[".cmd",".CMD",".exe",""];function bd(t,e){return e?{...t,env:e}:t}function gD(t,e){let r=ya.join(t,lt,".bin"),n=process.platform===Dr?pD.map(i=>`${e}${i}`):[e];for(let i of n){let s=ya.join(r,i);if(y_.existsSync(s))return s}}function ir(t,e,r){let n=e.buildEnv?.();if(r?.binary)return bd({command:r.binary,args:r.args??e.defaultArgs,locallyResolved:!0,fromUserOverride:!0},n);let i=e.binaryName??e.packageName,s=gD(t,i);if(s)return bd({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 bd({command:"npx",args:o,locallyResolved:!1},n)}var A_=5e3,fD=5e3;async function mD(t){try{if(process.platform===Dr){let{stdout:n}=await wd("where",[t],{timeout:A_});return n.split(/\r?\n/).map(i=>i.trim()).find(i=>i.length>0)}let{stdout:e}=await wd("sh",["-c",`command -v ${t}`],{timeout:A_}),r=e.trim();return r.length>0?r:void 0}catch{return}}function hD(t,e){if(!e)return;let r=process.platform===Dr?[`${t}.exe`,t]:[t];for(let n of e)for(let i of r){let s=ya.join(n,i);if(y_.existsSync(s))return s}}async function Ne(t,e){if(e?.binary)return{command:e.binary,args:e.args??t.defaultArgs,locallyResolved:!0,fromUserOverride:!0};let r=await mD(t.binaryName);if(r)return{command:r,args:t.defaultArgs,locallyResolved:!0};let n=hD(t.binaryName,t.extraCandidateDirs);return n?{command:n,args:t.defaultArgs,locallyResolved:!0}:{command:t.binaryName,args:t.defaultArgs,locallyResolved:!1}}function R_(t){let e=t.trim().replace(/\\/g,"/");return ya.posix.basename(e).replace(/\.exe$/i,"").toLowerCase()}async function O_(t,e=fD,r){if(r&&!r.some(n=>R_(n)===R_(t)))return!1;try{return await wd(t,["--version"],{timeout:e}),!0}catch{return!1}}var bt={PACKAGE_NAME:"typescript-language-server",NPX_COMMAND:"npx",NPX_NO_INSTALL_FLAG:"--no-install",STDIO_ARG:"--stdio",VERSION_FLAG:"--version"},Oa=8192,Ei={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 ED=["PATH","HOME","USERPROFILE","PATHEXT","SYSTEMROOT","COMSPEC","LANG","LC_ALL","TERM"];function Ia(t=process.env){let e={};for(let r of ED){let n=t[r];n!==void 0&&(e[r]=n)}return e}var La=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 sr=new La;function _D(t){let e=Ia(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=${Oa}`;return e.NODE_OPTIONS=r?`${r} ${n}`:n,e}function Ca(t,e,r=sr){return ir(t,{packageName:bt.PACKAGE_NAME,defaultArgs:[bt.STDIO_ARG],buildEnv:()=>_D(r)},e)}import Na from"fs";import Pa from"path";import{execFile as LD}from"child_process";import{promisify as CD}from"util";import SD from"path";import{execFile as TD}from"child_process";import{promisify as AD}from"util";var RD=AD(TD),yD=new Set([".cmd",".bat",".ps1"]),I_=new Set(["npx"]);function qr(t){return process.platform!=="win32"?!1:yD.has(SD.extname(t).toLowerCase())||I_.has(t.toLowerCase())}var OD=/[%!"\r\n]/;function Fd(t){let e=t.match(OD);if(e)throw new Error(`Unsafe character ${JSON.stringify(e[0])} in Windows shell-wrapped LSP token`);return`"${t}"`}var ID=5e3;async function Md(t,e){try{let{stdout:r}=await RD("where",[t],{timeout:ID,env:e});return r.split(/\r?\n/).map(i=>i.trim()).find(i=>i.length>0)??t}catch{return t}}function kd(t){return I_.has(t.toLowerCase())}async function _i(t,e,r){return[kd(t)?await Md(t,r):t,...e].map(Fd).join(" ")}var L_=CD(LD),C_=5e3,ND=[oe.TSCONFIG_JSON,oe.JSCONFIG_JSON];function PD(t){return Na.existsSync(Pa.join(t,lt))}function DD(t){return!!(ND.some(r=>Na.existsSync(Pa.join(t,r)))||Na.existsSync(Pa.join(t,"tsconfig.base.json"))||Na.existsSync(Pa.join(t,"src",oe.TSCONFIG_JSON)))}async function vD(t){let e=[bt.NPX_NO_INSTALL_FLAG,bt.PACKAGE_NAME,bt.VERSION_FLAG];try{if(qr(bt.NPX_COMMAND)){let r=await _i(bt.NPX_COMMAND,e,void 0);await L_(r,[],{cwd:t,timeout:C_,shell:!0})}else await L_(bt.NPX_COMMAND,e,{cwd:t,timeout:C_});return!0}catch{return!1}}async function N_(t,e){let r=PD(t),n=DD(t);if(!r)return{nodeModulesPresent:r,tsconfigResolvable:n,lspBinaryResolvable:!1,ready:!1,reason:Ei.nodeModulesMissing};if(!n)return{nodeModulesPresent:r,tsconfigResolvable:n,lspBinaryResolvable:!1,ready:!1,reason:Ei.tsconfigMissing};let s=Ca(t,e).locallyResolved?!0:await vD(t);return s?{nodeModulesPresent:r,tsconfigResolvable:n,lspBinaryResolvable:s,ready:!0}:{nodeModulesPresent:r,tsconfigResolvable:n,lspBinaryResolvable:s,ready:!1,reason:Ei.binaryUnresolvable}}import jD from"fs/promises";import Gd from"os";import Si from"path";import{pathToFileURL as k_,fileURLToPath as G_}from"url";import{spawn as P_}from"child_process";var In={CONTENT_LENGTH_HEADER_PREFIX:"Content-Length: ",HEADER_BODY_SEPARATOR:`\r
141
141
  \r
142
- `,JSON_RPC_VERSION:"2.0"},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"},Rr={NAMESPACE:3,CLASS:5,METHOD:6,CONSTRUCTOR:9,FUNCTION:12,OBJECT:19},Ve={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 D_(){return["pipe","pipe","pipe"]}var bD=4e3,va=class{child;buffer=Buffer.alloc(0);nextId=1;pending=new Map;stopped=!1;stderrTail="";async start(e){let r=Qr(e.command),n=e.env??La(),i=r&&Gd(e.command)?await kd(e.command,e.env):e.command,s=r?P_([i,...e.args].map(Md).join(" "),{cwd:e.cwd,stdio:D_(),shell:!0,env:n}):P_(e.command,e.args,{cwd:e.cwd,stdio:D_(),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){if(!this.child||this.stopped)return Promise.reject(new Error(Ve.clientNotRunning(e)));let i=this.nextId++;return new Promise((s,o)=>{let a=n>0?setTimeout(()=>{this.pending.delete(i),o(new Error(Ve.requestTimedOut(e,n)))},n):void 0;this.pending.set(i,{resolve:l=>{a&&clearTimeout(a),s(l)},reject:l=>{a&&clearTimeout(a),o(l)}}),this.write({jsonrpc:Ln.JSON_RPC_VERSION,id:i,method:e,params:r})})}notify(e,r){!this.child||this.stopped||this.write({jsonrpc:Ln.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(Ve.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=`${Ln.CONTENT_LENGTH_HEADER_PREFIX}${Buffer.byteLength(r,H)}`+Ln.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(Ln.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+Ln.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&&(this.pending.delete(r.id),r.error?n.reject(new Error(r.error.message)):n.resolve(r.result))}onStderr(e){this.stderrTail=(this.stderrTail+e.toString(H)).slice(-bD)}onExit(e){this.stopped=!0,this.rejectAllPending(new Error(Ve.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 Nn from"fs";import ze from"path";var wD=[{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 FD(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=>Nn.existsSync(ze.join(t,s)))),!i&&e.suffixes.length>0)try{i=Nn.readdirSync(t).some(s=>e.suffixes.some(o=>s.endsWith(o)))}catch{i=!1}return r.set(t,i),i}function MD(t,e,r,n){let i=ze.dirname(ze.join(t,e));for(;;){if(FD(i,r,n))return i;if(i===t)return t;let s=ze.dirname(i);if(s===i)return t;i=s}}function v_(t,e){let r=ze.relative(ze.resolve(t),e);return r===""||r!==".."&&!r.startsWith(`..${ze.sep}`)&&!ze.isAbsolute(r)}function Cn(t,e,r,n){let i=ze.resolve(t),s=ze.normalize(ze.resolve(r,n));if(v_(i,s))try{let o=Nn.realpathSync(s);return v_(e,o)?s:void 0}catch{return}}function b_(t,e,r,n){return n.map(i=>Cn(t,e,r,i)).filter(i=>i!==void 0)}function kD(t,e,r){let n=ba(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 b_(e,r,t,i)}function GD(t,e,r){let n=ba(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(".")&&!ze.isAbsolute(a)||i.push(a)}return b_(e,r,t,i)}function xD(t,e,r){return[...HD(t,e,r),...BD(t,e,r)]}function UD(t,e,r,n){if(!n.includes("*")){let o=Cn(e,r,t,n);return o?[o]:[]}let i=Cn(e,r,t,ze.dirname(n));if(!i)return[];let s=ze.basename(n);try{return Nn.readdirSync(i).filter(o=>s==="*"||o.includes(s.slice(0,s.indexOf("*")))).map(o=>Cn(e,r,i,o)).filter(o=>o!==void 0)}catch{return[]}}function HD(t,e,r){let n=w_(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(...UD(t,e,r,a));return o}function BD(t,e,r){let n=w_(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=Cn(e,r,t,l);c&&i.push(c)}let o=n.extends;if(typeof o=="string"){let a=Cn(e,r,t,o);a&&i.push(a)}return i}function KD(t,e,r){let n=[],i=[];try{i=Nn.readdirSync(t)}catch{return n}for(let s of i){if(!s.endsWith(".csproj"))continue;let o=ba(t,s);if(o!==void 0)for(let a of o.matchAll(/<ProjectReference[^>]*Include\s*=\s*"([^"]+)"/g)){let l=a[1].split("\\").join("/"),c=Cn(e,r,t,l);c&&n.push(ze.dirname(c))}}return n}function ba(t,e){try{return Nn.readFileSync(ze.join(t,e),"utf8")}catch{return}}function w_(t,e){let r=ba(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 $D(t,e,r,n){switch(e){case B.RUST:return kD(t,r,n);case B.GO:return GD(t,r,n);case B.TYPESCRIPT:return xD(t,r,n);case B.CSHARP:return KD(t,r,n);default:return[]}}function YD(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 F_(t){let e=ze.resolve(t.workspaceRoot),r;try{r=Nn.realpathSync(e)}catch{r=void 0}let n=wD.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?MD(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?$D(l,t.languageId,e,r):[]});return{groups:YD(a),fileToProjectRoot:o}}var WD="LSP file path resolves outside the configured workspace root";function M_(t,e){let r=On(t,e);if(!r)throw new E(T.FS_PATH_TRAVERSAL,WD);return r}var VD=12e4,zD=3e4,JD=200,qD=512,QD=.25,wa=new Set([Rr.FUNCTION,Rr.METHOD,Rr.CONSTRUCTOR,Rr.CLASS]),XD=new Set([Rr.CLASS]);function x_(t,e){return e.has(t)}function Ai(t){return t.split("\\").join("/")}var ka=class extends Error{};function ZD(t){return"location"in t}function ev(t){return t?t.map(e=>ZD(e)?{name:e.name,kind:e.kind,range:e.location.range,selectionRange:e.location.range}:e):[]}function Ud(t,e){return e.normalizeSymbolName?e.normalizeSymbolName(t):t}function tv(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 Fa(t,e,r,n){for(let i of t){if(!tv(i.range,e))continue;let s=x_(i.kind,r)?i.name:n;return(i.children?Fa(i.children,e,r,s):void 0)??{symbol:i,containerName:n}}}function Ma(t,e,r){let n=[];for(let i of t)if(wa.has(i.kind)&&n.push({symbol:i,containerName:r}),i.children){let s=x_(i.kind,e)?i.name:r;n.push(...Ma(i.children,e,s))}return n}var xe=class{name;config={};logger;createClient;languageConfig;containmentKinds;constructor(e,r,n=()=>new va){this.languageConfig=e,this.name=e.name,this.logger=r??he(),this.createClient=n,this.containmentKinds=e.containmentSymbolKinds??XD}configure(e){this.config=e}get requestTimeoutMs(){return this.config.timeoutMs??zD}get maxOpenFiles(){return this.config.maxOpenFiles??JD}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(xd.availableParallelism(),e))}processMemoryEstimateMb(){return this.config.processMemoryEstimateMb??this.languageConfig.processMemoryEstimateMb??qD}maxProcessMemoryMb(){return this.config.maxProcessMemoryMb!==void 0?this.config.maxProcessMemoryMb:Math.max(Math.round(xd.totalmem()/1024/1024*QD),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(Ve.concurrencyClamped(r,n)),n}effectiveProcesses(e){let r=this.maxProcesses,n=Math.floor(this.maxProcessMemoryMb()/this.processMemoryEstimateMb()),i=xd.availableParallelism(),s=Math.max(1,Math.min(r,e,i,n));return s!==r&&(this.logger.debug(Ve.processShardsClamped(r,s)),s<r&&n<Math.min(r,e,i)&&this.logger.debug(Ve.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??VD,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[Ti.extname(e)]??this.languageConfig.defaultLanguageId}buildProjectShards(e,r){let i=F_({workspaceRoot:e.workspaceRoot,languageId:this.languageConfig.tierBLanguageId,files:e.files}).groups,s=(d,f)=>{let m={};for(let _ of f){let L=e.callsByFile?.[_];L&&(m[_]=L)}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:Ve.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(Ve.initializeFailed(p)),{edges:[],filesProcessed:[],filesFailed:[],unavailableReason:d}):{edges:[],filesProcessed:[],filesFailed:[],unavailableReason:Ve.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=Ma(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=k_(r).toString();await e.request(Yt.INITIALIZE,{processId:process.pid,rootUri:n,capabilities:{textDocument:{documentSymbol:{hierarchicalDocumentSymbolSupport:!0}}},workspaceFolders:[{uri:n,name:Ti.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 F=c++;if(F>=n.length)return;let I=n[F];a.pinnedPaths.add(I);try{let $=await this.runOneSlot(e,r,I,i,a,C,o);l[F]=$,!$.ok&&$.deadlineExceeded&&(u=!0)}finally{a.pinnedPaths.delete(I)}}},d=this.effectiveConcurrency(n.length);await Promise.allSettled(Array.from({length:d},()=>p()));let f=[],m=new Set,_=[],L=[];for(let C=0;C<n.length;C++){let F=l[C];if(F)if(F.ok){_.push(n[C]);for(let I of F.edges){let $=`${I.sourceNodeKey}->${I.targetNodeKey}`;m.has($)||(m.add($),f.push(I))}}else L.push({file:n[C],reason:F.reason,retryable:F.deadlineExceeded,...F.notApplicable?{notApplicable:!0}:{}})}return u&&this.markUnreachedFilesFailed(n,_,L,o),{edges:f,filesProcessed:_,filesFailed:L,...u?{unavailableReason:Ve.batchTimedOut(o)}:{}}}raceAgainstDeadline(e,r){return new Promise((n,i)=>{let s=setTimeout(()=>i(new ka),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 ka)return{ok:!1,deadlineExceeded:!0,reason:Ve.batchTimedOut(a)};let c=l instanceof Error?l.message:String(l),u=this.languageConfig.isNotApplicableFileError?.(c)===!0;return u||this.logger.warn(Ve.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:Ve.batchTimedOut(i),retryable:!0})}qualifiedContainerName(e){if(!(!this.languageConfig.supportsQualifiedContainment||!e))return Ud(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=[...Ma(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 _=In(a.used,Ss(r,Ud(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=In(a.used,Ss(r,Ud(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=Ma(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=Ai(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=Fa(o.symbols,{line:u,character:p},this.containmentKinds),m=f&&wa.has(f.symbol.kind)?Ai(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:ic.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(Ve.skippedMultiLocationDefinition(n)),l}}async resolveTargetNodeKey(e,r,n,i,s){let o=Ti.relative(r,G_(i.uri));if(Ti.isAbsolute(o)||o.startsWith(".."))return;let a=Ai(o);if(a===n)return;let l=await this.openAndGetSymbols(e,r,a,s),c=Fa(l.symbols,i.range.start,this.containmentKinds);return c&&wa.has(c.symbol.kind)?Ai(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=Ti.relative(r,G_(n.uri));if(Ti.isAbsolute(a)||a.startsWith(".."))return;let l=Ai(a);if(l===s)return;let c=await this.openAndGetSymbols(e,r,l,o),u=Fa(c.symbols,n.range.start,this.containmentKinds);return{sourceNodeKey:u&&wa.has(u.symbol.kind)?Ai(this.resolveNodeKeyForFile(o,l,c.symbols,u.symbol.name,u.symbol.selectionRange.start.line,u.containerName)):l,targetNodeKey:i,source:ic.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=M_(r,n),o=await jD.readFile(s,H),a=k_(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=ev(l),u={relativePath:n,uri:a,symbols:c};return i.openFileCache.set(n,u),u}};var Ga="typescript",rv={".ts":Ga,".mts":Ga,".cts":Ga,".tsx":"typescriptreact",".js":"javascript",".mjs":"javascript",".cjs":"javascript",".jsx":"javascriptreact"},nv=/(?:^|\r?\n)Could not find source file:\s*['"][^'"\r\n]+['"]\.?\s*(?:\r?\n|$)/i,iv={name:wt.PACKAGE_NAME,tierBLanguageId:B.TYPESCRIPT,languageIdByExtension:rv,defaultLanguageId:Ga,resolveBinary:Na,checkPreflight:N_,isNotApplicableFileError:t=>nv.test(t),supportsQualifiedContainment:!0,initializationOptions:{maxTsServerMemory:Ia},definitionResolution:"forward",unavailableReasonForUnresolvableBinary:_i.binaryUnresolvable},xa=class extends xe{constructor(e,r){super(iv,e,r)}};import sv from"fs";import ov from"path";import{execFile as av}from"child_process";import{promisify as lv}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"},Is={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 U_=lv(av),H_=5e3,cv=[oe.PYPROJECT_TOML,oe.REQUIREMENTS_TXT];function uv(t){return cv.some(e=>sv.existsSync(ov.join(t,e)))}async function dv(t){let e=[ot.NPX_NO_INSTALL_FLAG,ot.PACKAGE_NAME,ot.VERSION_FLAG];try{if(Qr(ot.NPX_COMMAND)){let r=await Si(ot.NPX_COMMAND,e,void 0);await U_(r,[],{cwd:t,timeout:H_,shell:!0})}else await U_(ot.NPX_COMMAND,e,{cwd:t,timeout:H_});return!0}catch{return!1}}async function B_(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 dv(t);return r?i?{markerFileResolvable:r,lspBinaryResolvable:i,ready:!0}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:Is.binaryUnresolvable}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:Is.markerFileMissing}}var K_="python",pv={".py":K_},gv={name:ot.PACKAGE_NAME,tierBLanguageId:B.PYTHON,languageIdByExtension:pv,defaultLanguageId:K_,resolveBinary:(t,e)=>sr(t,{packageName:ot.PACKAGE_NAME,binaryName:ot.BINARY_NAME,defaultArgs:[ot.STDIO_ARG]},e),checkPreflight:B_,supportsQualifiedContainment:!0,definitionResolution:"reverse",unavailableReasonForUnresolvableBinary:Is.binaryUnresolvable},Ua=class extends xe{constructor(e,r){super(gv,e,r)}};import fv from"fs";import Bd from"path";import mv from"os";var Pn={BINARY_NAME:"gopls",DEFAULT_ARGS:[]};function $_(t){let e=/^\((\*?)([^(]*)\)\.(.+)$/.exec(t);if(!e)return t;let[,,r,n]=e;return`${r}.${n}`}var Hd={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 hv(t){return fv.existsSync(Bd.join(t,oe.GO_MOD))}function Ev(t){let e=[];return t.env.GOBIN&&e.push(t.env.GOBIN),t.env.GOPATH&&e.push(Bd.join(t.env.GOPATH,"bin")),e.push(Bd.join(mv.homedir(),"go","bin")),e}async function Y_(t,e,r=or){let n=hv(t),s=(await Pe({binaryName:Pn.BINARY_NAME,defaultArgs:Pn.DEFAULT_ARGS,extraCandidateDirs:Ev(r)},e)).locallyResolved;return n?s?{markerFileResolvable:n,lspBinaryResolvable:s,ready:!0}:{markerFileResolvable:n,lspBinaryResolvable:s,ready:!1,reason:Hd.binaryUnresolvable}:{markerFileResolvable:n,lspBinaryResolvable:s,ready:!1,reason:Hd.markerFileMissing}}var W_="go",_v={".go":W_},Sv={name:Pn.BINARY_NAME,tierBLanguageId:B.GO,languageIdByExtension:_v,defaultLanguageId:W_,resolveBinary:(t,e)=>Pe({binaryName:Pn.BINARY_NAME,defaultArgs:Pn.DEFAULT_ARGS},e),checkPreflight:Y_,supportsQualifiedContainment:!1,normalizeSymbolName:$_,definitionResolution:"reverse"},Ha=class extends xe{constructor(e,r){super(Sv,e,r)}};import Lv from"path";import Cv from"os";import Tv from"fs";import Kd from"path";import Av from"os";var Xr={BINARY_NAME:"rust-analyzer",DEFAULT_ARGS:[]},Ba={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 j_(t){return t.startsWith("impl ")?t.slice(5):t}function Rv(t){return Tv.existsSync(Kd.join(t,oe.CARGO_TOML))}function yv(t){return Kd.join(t.env.CARGO_HOME??Kd.join(Av.homedir(),".cargo"),"bin")}var Ov=5e3;async function Iv(t,e){return O_(t,Ov,e)}async function V_(t,e,r=or){let n=Rv(t),i=await Pe({binaryName:Xr.BINARY_NAME,defaultArgs:Xr.DEFAULT_ARGS,extraCandidateDirs:[yv(r)]},e),s=i.locallyResolved,o=!s||await Iv(i.command,i.fromUserOverride?void 0:[Xr.BINARY_NAME]);return n?s?o?{markerFileResolvable:n,lspBinaryResolvable:s,lspBinarySpawnable:o,ready:!0}:{markerFileResolvable:n,lspBinaryResolvable:s,lspBinarySpawnable:o,ready:!1,reason:Ba.binaryNotSpawnable}:{markerFileResolvable:n,lspBinaryResolvable:s,lspBinarySpawnable:o,ready:!1,reason:Ba.binaryUnresolvable}:{markerFileResolvable:n,lspBinaryResolvable:s,lspBinarySpawnable:o,ready:!1,reason:Ba.markerFileMissing}}var z_="rust",Nv={".rs":z_};function Pv(){return Lv.join(Cv.homedir(),".cargo","bin")}var Dv={name:Xr.BINARY_NAME,tierBLanguageId:B.RUST,languageIdByExtension:Nv,defaultLanguageId:z_,resolveBinary:(t,e)=>Pe({binaryName:Xr.BINARY_NAME,defaultArgs:Xr.DEFAULT_ARGS,extraCandidateDirs:[Pv()]},e),checkPreflight:V_,supportsQualifiedContainment:!0,containmentSymbolKinds:new Set([Rr.CLASS,Rr.OBJECT]),normalizeSymbolName:j_,definitionResolution:"reverse",coldStartSettleMs:8e3,processMemoryEstimateMb:2048},Ka=class extends xe{constructor(e,r){super(Dv,e,r)}};import vv from"fs";import J_ from"path";var Dn={BINARY_NAME:"clangd",DEFAULT_ARGS:[]},$d={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 bv=["compile_commands.json","CMakeLists.txt"];function wv(t){return bv.some(e=>vv.existsSync(J_.join(t,e)))}function Fv(t){return t.platform===vr?[J_.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 q_(t,e,r=or){let n=wv(t),s=(await Pe({binaryName:Dn.BINARY_NAME,defaultArgs:Dn.DEFAULT_ARGS,extraCandidateDirs:Fv(r)},e)).locallyResolved;return n?s?{markerFileResolvable:n,lspBinaryResolvable:s,ready:!0}:{markerFileResolvable:n,lspBinaryResolvable:s,ready:!1,reason:$d.binaryUnresolvable}:{markerFileResolvable:n,lspBinaryResolvable:s,ready:!1,reason:$d.markerFileMissing}}var yr="cpp",Mv={".c":"c",".h":"c",".cpp":yr,".cxx":yr,".cc":yr,".hpp":yr,".hxx":yr,".hh":yr,".cu":yr,".cuh":yr},kv={name:Dn.BINARY_NAME,tierBLanguageId:B.CPP,languageIdByExtension:Mv,defaultLanguageId:yr,resolveBinary:(t,e)=>Pe({binaryName:Dn.BINARY_NAME,defaultArgs:Dn.DEFAULT_ARGS},e),checkPreflight:q_,supportsQualifiedContainment:!1,definitionResolution:"reverse"},$a=class extends xe{constructor(e,r){super(kv,e,r)}};import Gv from"fs";import Ya from"path";import Q_ from"os";var vn={BINARY_NAME:"jdtls",DEFAULT_ARGS:[]},Yd={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 xv=["pom.xml","build.gradle"];function Uv(t){return xv.some(e=>Gv.existsSync(Ya.join(t,e)))}function Hv(t){return t.platform===vr?[Ya.join(Q_.homedir(),"scoop","shims"),Ya.join(t.env.ChocolateyInstall??"C:\\ProgramData\\chocolatey","bin")]:t.platform==="darwin"?["/opt/homebrew/bin","/usr/local/bin"]:["/usr/local/bin","/usr/bin",Ya.join(Q_.homedir(),".local","share","jdtls","bin")]}async function X_(t,e,r=or){let n=Uv(t),s=(await Pe({binaryName:vn.BINARY_NAME,defaultArgs:vn.DEFAULT_ARGS,extraCandidateDirs:Hv(r)},e)).locallyResolved;return n?s?{markerFileResolvable:n,lspBinaryResolvable:s,ready:!0}:{markerFileResolvable:n,lspBinaryResolvable:s,ready:!1,reason:Yd.binaryUnresolvable}:{markerFileResolvable:n,lspBinaryResolvable:s,ready:!1,reason:Yd.markerFileMissing}}var Z_="java",Bv={".java":Z_},Kv={name:vn.BINARY_NAME,tierBLanguageId:B.JAVA,languageIdByExtension:Bv,defaultLanguageId:Z_,resolveBinary:(t,e)=>Pe({binaryName:vn.BINARY_NAME,defaultArgs:vn.DEFAULT_ARGS},e),checkPreflight:X_,supportsQualifiedContainment:!0,definitionResolution:"reverse"},Wa=class extends xe{constructor(e,r){super(Kv,e,r)}};import $v from"fs";import Yv from"path";import Wv from"os";var bn={BINARY_NAME:"csharp-ls",DEFAULT_ARGS:[]},Wd={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 jv(){return Yv.join(Wv.homedir(),".dotnet","tools")}function Vv(t){try{return $v.readdirSync(t).some(r=>r.endsWith(".sln")||r.endsWith(".slnx")||r.endsWith(".csproj"))}catch{return!1}}async function eS(t,e){let r=Vv(t),i=(await Pe({binaryName:bn.BINARY_NAME,defaultArgs:bn.DEFAULT_ARGS,extraCandidateDirs:[jv()]},e)).locallyResolved;return r?i?{markerFileResolvable:r,lspBinaryResolvable:i,ready:!0}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:Wd.binaryUnresolvable}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:Wd.markerFileMissing}}var tS="csharp",zv={".cs":tS},Jv={name:bn.BINARY_NAME,tierBLanguageId:B.CSHARP,languageIdByExtension:zv,defaultLanguageId:tS,resolveBinary:(t,e)=>Pe({binaryName:bn.BINARY_NAME,defaultArgs:bn.DEFAULT_ARGS},e),checkPreflight:eS,supportsQualifiedContainment:!0,definitionResolution:"reverse"},ja=class extends xe{constructor(e,r){super(Jv,e,r)}};import qv from"fs";import Qv from"path";import{execFile as Xv}from"child_process";import{promisify as Zv}from"util";var Ot={PACKAGE_NAME:"intelephense",NPX_COMMAND:"npx",NPX_NO_INSTALL_FLAG:"--no-install",STDIO_ARG:"--stdio",VERSION_FLAG:"--version"},Ls={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 rS=Zv(Xv),nS=5e3;function eb(t){return qv.existsSync(Qv.join(t,"composer.json"))}async function tb(t){let e=[Ot.NPX_NO_INSTALL_FLAG,Ot.PACKAGE_NAME,Ot.VERSION_FLAG];try{if(Qr(Ot.NPX_COMMAND)){let r=await Si(Ot.NPX_COMMAND,e,void 0);await rS(r,[],{cwd:t,timeout:nS,shell:!0})}else await rS(Ot.NPX_COMMAND,e,{cwd:t,timeout:nS});return!0}catch{return!1}}async function iS(t,e){let r=eb(t),i=sr(t,{packageName:Ot.PACKAGE_NAME,defaultArgs:[Ot.STDIO_ARG]},e).locallyResolved?!0:await tb(t);return r?i?{markerFileResolvable:r,lspBinaryResolvable:i,ready:!0}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:Ls.binaryUnresolvable}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:Ls.markerFileMissing}}var wn="php",rb={".php":wn,".phtml":wn,".php3":wn,".php4":wn,".php5":wn,".phps":wn},nb={name:Ot.PACKAGE_NAME,tierBLanguageId:B.PHP,languageIdByExtension:rb,defaultLanguageId:wn,resolveBinary:(t,e)=>sr(t,{packageName:Ot.PACKAGE_NAME,defaultArgs:[Ot.STDIO_ARG]},e),checkPreflight:iS,supportsQualifiedContainment:!0,definitionResolution:"reverse",unavailableReasonForUnresolvableBinary:Ls.binaryUnresolvable},Va=class extends xe{constructor(e,r){super(nb,e,r)}};import ib from"fs";import Vd from"path";import sb from"os";var Fn={BINARY_NAME:"ruby-lsp",DEFAULT_ARGS:[]},jd={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 ob=["Gemfile","Gemfile.lock"];function ab(t){return ob.some(e=>ib.existsSync(Vd.join(t,e)))}function lb(){if(process.platform==="win32")return[];let t=sb.homedir();return[Vd.join(t,".rbenv","shims"),Vd.join(t,".rvm","bin")]}async function sS(t,e){let r=ab(t),i=(await Pe({binaryName:Fn.BINARY_NAME,defaultArgs:Fn.DEFAULT_ARGS,extraCandidateDirs:lb()},e)).locallyResolved;return r?i?{markerFileResolvable:r,lspBinaryResolvable:i,ready:!0}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:jd.binaryUnresolvable}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:jd.markerFileMissing}}var za="ruby",cb={".rb":za,".rake":za,".gemspec":za},ub={name:Fn.BINARY_NAME,tierBLanguageId:B.RUBY,languageIdByExtension:cb,defaultLanguageId:za,resolveBinary:(t,e)=>Pe({binaryName:Fn.BINARY_NAME,defaultArgs:Fn.DEFAULT_ARGS},e),checkPreflight:sS,supportsQualifiedContainment:!0,definitionResolution:"reverse"},Ja=class extends xe{constructor(e,r){super(ub,e,r)}};function db(t){return t===null?!0:typeof t=="number"?Number.isFinite(t):typeof t=="string"||typeof t=="boolean"}function oS(t,e=[]){return!st(t)||!Rt(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"&&db(t.attributes[r])):!0}function pb(t){return!oS(t,["id","kind"])||!Qe(t.id)?!1:Object.values(un).some(e=>e===t.kind)}function gb(t,e){if(!Array.from(t).every(pb))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(un.UNKNOWN)!==1||n(un.VERIFY)>1?!1:e!==sc.NEEDS_VERIFICATION||n(un.CANDIDATE)===0&&n(un.VERIFY)===1}function fb(t){if(t.length>Kn.MAX_OPTIONS)throw new E(T.SEMANTIC_INPUT_LIMIT_EXCEEDED,"Semantic option limit exceeded");if(!hr(t))throw new E(T.SEMANTIC_INVALID_REQUEST,"Semantic options must be a dense data array");if(t.filter(r=>st(r)&&r.kind===un.CANDIDATE).length>Kn.MAX_CANDIDATES)throw new E(T.SEMANTIC_INPUT_LIMIT_EXCEEDED,"Semantic option limit exceeded")}function mb(t){return!st(t)||!Rt(t,[...is,"task","language","relation","context","options"])||!Ic(t)||!Qe(t.language)||!Qe(t.relation)||!Object.values(sc).some(e=>e===t.task)?!1:oS(t.context)&&Array.isArray(t.options)&&gb(t.options,t.task)}function aS(t){if(st(t)&&Array.isArray(t.options)&&fb(t.options),!mb(t))throw new E(T.SEMANTIC_INVALID_REQUEST,"Invalid semantic decision request");let e=JSON.stringify(t);if(Buffer.byteLength(e,"utf8")>Kn.MAX_INPUT_BYTES)throw new E(T.SEMANTIC_INPUT_LIMIT_EXCEEDED,"Semantic request UTF-8 byte limit exceeded");return JSON.parse(e)}function hb(t){let e=["provider","modelId","modelVersion","artifactHash"];return st(t)&&Rt(t,e)&&e.every(r=>Qe(t[r]))}function Eb(t){return t.scoreKind===oc.RAW?t.calibrationVersion===null:t.scoreKind===oc.CALIBRATED&&Qe(t.calibrationVersion)}function _b(t,e){return st(t)&&Rt(t,["optionId","probability"])&&t.optionId===e&&pf(t.probability)}function Sb(t,e){if(!Rt(e,[...is,"status","scores","model","scoreKind","calibrationVersion"])||!hb(e.model)||!Eb(e))return!1;let r=e.scores;return Array.isArray(r)&&r.length===t.options.length&&hr(r)&&t.options.every((n,i)=>_b(r[i],n.id))}function Tb(t){return Rt(t,[...is,"status","scores","unavailableCode","unavailableReason"])?Array.isArray(t.scores)&&t.scores.length===0&&hr(t.scores)&&Qe(t.unavailableReason)&&Object.values(Ys).some(e=>e===t.unavailableCode):!1}function Ab(t,e){return!st(e)||!gf(t,e)?!1:e.status===Bi.SCORED?Sb(t,e):e.status===Bi.UNAVAILABLE&&Tb(e)}function lS(t,e){if(!Ab(t,e))throw new E(T.SEMANTIC_INVALID_RESPONSE,"Invalid semantic decision response");return JSON.parse(JSON.stringify(e))}var qa=class{validateRequest(e){return aS(e)}validateOutcome(e,r){return lS(this.validateRequest(e),r)}};import Ri from"fs/promises";var Rb={maxWaitMs:1e4,retryIntervalMs:100,heartbeatIntervalMs:1e4,staleAfterMs:3e4};function yb(t){return new Promise(e=>setTimeout(e,t))}function Ob(t){try{return process.kill(t,0),!0}catch(e){return e.code===gn}}async function Ib(t){try{let e=Number.parseInt(await Ri.readFile(t,H),10);return Number.isFinite(e)?e:void 0}catch{return}}async function Lb(t,e){let r=await Ri.stat(t).catch(()=>{});if(!r||Date.now()-r.mtimeMs<=e)return!1;let n=await Ib(t);return n!==void 0&&Ob(n)?!1:(await Ri.rm(t,{force:!0}).catch(()=>{}),!0)}function Cb(t){let e=t.code;return e===Wn||e===gn||e===jn||e===Vn}async function Nb(t){try{let e=await Ri.open(t,"wx");return await e.writeFile(String(process.pid)),await e.close(),!0}catch(e){if(!Cb(e))throw e;return!1}}async function cS(t,e={}){let r={...Rb,...e},n=Date.now()+r.maxWaitMs,i=!1;for(;!await Nb(t);)if(i||(i=!0,e.onWaiting?.()),!await Lb(t,r.staleAfterMs)){if(Date.now()>n)throw new qs(t);await yb(r.retryIntervalMs)}let s=setInterval(()=>{let a=new Date;Ri.utimes(t,a,a).catch(()=>{})},r.heartbeatIntervalMs);s.unref?.();let o=!1;return{async release(){o||(o=!0,clearInterval(s),await Ri.rm(t,{force:!0}).catch(()=>{}))}}}function Pb(t=y,e={}){let r=e.createAstWorkerPool??(()=>new oa);t.register(A.KnowledgeGitService,(i,s)=>new Eo(i.resolve(A.GitProvider),s?.logger,s?.gitNetworkTimeoutMs)),t.register(A.FileDiscovery,(i,s)=>new ea(i.resolve(A.GitProvider),s?.logger)),t.register(A.ConfigScanner,(i,s)=>new ra(s?.logger)),t.register(A.VcsScanner,(i,s)=>new ia(i.resolve(A.GitProvider),s?.logger));let n;t.register(A.AstProcessor,(i,s)=>(n??=r(),new aa(n,s?.logger))),t.register(A.GraphPersister,()=>new fa),t.register(A.TempFileManager,()=>(i,s)=>new ha(i,s)),t.register(A.ProcessLock,()=>cS),t.register(A.SemanticCorpusService,()=>new ho),t.register(A.SemanticDecisionValidator,()=>new qa),t.register(A.QueryService,(i,s)=>new _a(s?.logger)),t.register(A.TierBCoverageHintProvider,()=>({resolve:Wi})),t.register(A.ImpactService,(i,s)=>new Ta(s?.logger)),t.register(A.ChangeDetectionService,(i,s)=>new So(i.resolve(A.ImpactService,s),s?.logger)),t.register(A.TopologyBuilder,()=>new Aa),t.register(A.SnapshotRenderer,()=>new _o),t.register(A.HydrationService,(i,s)=>new To(i.resolve(A.GitProvider),s?.logger)),t.register(A.SemanticDiffAnalyzer,(i,s)=>new ya(s?.logger)),t.register(A.EdgeResolutionProviders,(i,s)=>({typescript:()=>new xa(s?.logger),python:()=>new Ua(s?.logger),go:()=>new Ha(s?.logger),rust:()=>new Ka(s?.logger),cpp:()=>new $a(s?.logger),java:()=>new Wa(s?.logger),csharp:()=>new ja(s?.logger),php:()=>new Va(s?.logger),ruby:()=>new Ja(s?.logger)}))}Pb();var Zr={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 zd={l2Nodes:t=>`/projects/${t}/l2-nodes`,SYNC_PUSH:"/sync/push"};function uS(t,e){if(typeof t!="object"||t===null||Array.isArray(t))throw new TypeError(`${e} must be an object`);return t}function dS(t,e){if(typeof t!="number"||!Number.isFinite(t))throw new TypeError(`${e} must be a finite number`);return t}function pS(t){if(!Array.isArray(t))throw new TypeError("response must be an array");for(let[e,r]of t.entries()){let n=uS(r,`response[${e}]`);if(dS(n.id,`response[${e}].id`),typeof n.name!="string")throw new TypeError(`response[${e}].name must be a string`)}return t}function gS(t){let e=uS(t,"response");if(typeof e.success!="boolean")throw new TypeError("response.success must be a boolean");return dS(e.processed,"response.processed"),t}var fS=3e4,Cs=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}${zd.l2Nodes(e)}`,{headers:{[Zr.HEADER_AUTHORIZATION]:Zr.bearerAuth(n)},signal:AbortSignal.timeout(fS)})}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 pS(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}${zd.SYNC_PUSH}`,{method:Zr.METHOD_POST,headers:{[Zr.HEADER_CONTENT_TYPE]:Zr.CONTENT_TYPE_JSON,[Zr.HEADER_AUTHORIZATION]:Zr.bearerAuth(i)},body:JSON.stringify({projectId:Number(e),events:r}),signal:AbortSignal.timeout(fS)})}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 gS(o)}catch(a){throw E.wrap(T.SYNC_PUSH_FAILED,ar.SYNC_PUSH_INVALID_RESPONSE,a)}}};y.register(A.RemoteSyncClient,()=>()=>new Cs);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:`
142
+ `,JSON_RPC_VERSION:"2.0"},$t={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"},Ar={NAMESPACE:3,CLASS:5,METHOD:6,CONSTRUCTOR:9,FUNCTION:12,OBJECT:19},je={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 D_(){return["pipe","pipe","pipe"]}var bD=4e3,Da=class{child;buffer=Buffer.alloc(0);nextId=1;pending=new Map;stopped=!1;stderrTail="";async start(e){let r=qr(e.command),n=e.env??Ia(),i=r&&kd(e.command)?await Md(e.command,e.env):e.command,s=r?P_([i,...e.args].map(Fd).join(" "),{cwd:e.cwd,stdio:D_(),shell:!0,env:n}):P_(e.command,e.args,{cwd:e.cwd,stdio:D_(),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){if(!this.child||this.stopped)return Promise.reject(new Error(je.clientNotRunning(e)));let i=this.nextId++;return new Promise((s,o)=>{let a=n>0?setTimeout(()=>{this.pending.delete(i),o(new Error(je.requestTimedOut(e,n)))},n):void 0;this.pending.set(i,{resolve:l=>{a&&clearTimeout(a),s(l)},reject:l=>{a&&clearTimeout(a),o(l)}}),this.write({jsonrpc:In.JSON_RPC_VERSION,id:i,method:e,params:r})})}notify(e,r){!this.child||this.stopped||this.write({jsonrpc:In.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(je.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=`${In.CONTENT_LENGTH_HEADER_PREFIX}${Buffer.byteLength(r,H)}`+In.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(In.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+In.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&&(this.pending.delete(r.id),r.error?n.reject(new Error(r.error.message)):n.resolve(r.result))}onStderr(e){this.stderrTail=(this.stderrTail+e.toString(H)).slice(-bD)}onExit(e){this.stopped=!0,this.rejectAllPending(new Error(je.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 Cn from"fs";import Ve from"path";var wD=[{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 FD(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=>Cn.existsSync(Ve.join(t,s)))),!i&&e.suffixes.length>0)try{i=Cn.readdirSync(t).some(s=>e.suffixes.some(o=>s.endsWith(o)))}catch{i=!1}return r.set(t,i),i}function MD(t,e,r,n){let i=Ve.dirname(Ve.join(t,e));for(;;){if(FD(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 Ln(t,e,r,n){let i=Ve.resolve(t),s=Ve.normalize(Ve.resolve(r,n));if(v_(i,s))try{let o=Cn.realpathSync(s);return v_(e,o)?s:void 0}catch{return}}function b_(t,e,r,n){return n.map(i=>Ln(t,e,r,i)).filter(i=>i!==void 0)}function kD(t,e,r){let n=va(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 b_(e,r,t,i)}function GD(t,e,r){let n=va(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 b_(e,r,t,i)}function xD(t,e,r){return[...HD(t,e,r),...BD(t,e,r)]}function UD(t,e,r,n){if(!n.includes("*")){let o=Ln(e,r,t,n);return o?[o]:[]}let i=Ln(e,r,t,Ve.dirname(n));if(!i)return[];let s=Ve.basename(n);try{return Cn.readdirSync(i).filter(o=>s==="*"||o.includes(s.slice(0,s.indexOf("*")))).map(o=>Ln(e,r,i,o)).filter(o=>o!==void 0)}catch{return[]}}function HD(t,e,r){let n=w_(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(...UD(t,e,r,a));return o}function BD(t,e,r){let n=w_(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=Ln(e,r,t,l);c&&i.push(c)}let o=n.extends;if(typeof o=="string"){let a=Ln(e,r,t,o);a&&i.push(a)}return i}function KD(t,e,r){let n=[],i=[];try{i=Cn.readdirSync(t)}catch{return n}for(let s of i){if(!s.endsWith(".csproj"))continue;let o=va(t,s);if(o!==void 0)for(let a of o.matchAll(/<ProjectReference[^>]*Include\s*=\s*"([^"]+)"/g)){let l=a[1].split("\\").join("/"),c=Ln(e,r,t,l);c&&n.push(Ve.dirname(c))}}return n}function va(t,e){try{return Cn.readFileSync(Ve.join(t,e),"utf8")}catch{return}}function w_(t,e){let r=va(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 $D(t,e,r,n){switch(e){case B.RUST:return kD(t,r,n);case B.GO:return GD(t,r,n);case B.TYPESCRIPT:return xD(t,r,n);case B.CSHARP:return KD(t,r,n);default:return[]}}function YD(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 F_(t){let e=Ve.resolve(t.workspaceRoot),r;try{r=Cn.realpathSync(e)}catch{r=void 0}let n=wD.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?MD(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?$D(l,t.languageId,e,r):[]});return{groups:YD(a),fileToProjectRoot:o}}var WD="LSP file path resolves outside the configured workspace root";function M_(t,e){let r=yn(t,e);if(!r)throw new E(T.FS_PATH_TRAVERSAL,WD);return r}var VD=12e4,zD=3e4,JD=200,qD=512,QD=.25,ba=new Set([Ar.FUNCTION,Ar.METHOD,Ar.CONSTRUCTOR,Ar.CLASS]),XD=new Set([Ar.CLASS]);function x_(t,e){return e.has(t)}function Ti(t){return t.split("\\").join("/")}var Ma=class extends Error{};function ZD(t){return"location"in t}function ev(t){return t?t.map(e=>ZD(e)?{name:e.name,kind:e.kind,range:e.location.range,selectionRange:e.location.range}:e):[]}function xd(t,e){return e.normalizeSymbolName?e.normalizeSymbolName(t):t}function tv(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 wa(t,e,r,n){for(let i of t){if(!tv(i.range,e))continue;let s=x_(i.kind,r)?i.name:n;return(i.children?wa(i.children,e,r,s):void 0)??{symbol:i,containerName:n}}}function Fa(t,e,r){let n=[];for(let i of t)if(ba.has(i.kind)&&n.push({symbol:i,containerName:r}),i.children){let s=x_(i.kind,e)?i.name:r;n.push(...Fa(i.children,e,s))}return n}var Ge=class{name;config={};logger;createClient;languageConfig;containmentKinds;constructor(e,r,n=()=>new Da){this.languageConfig=e,this.name=e.name,this.logger=r??me(),this.createClient=n,this.containmentKinds=e.containmentSymbolKinds??XD}configure(e){this.config=e}get requestTimeoutMs(){return this.config.timeoutMs??zD}get maxOpenFiles(){return this.config.maxOpenFiles??JD}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(Gd.availableParallelism(),e))}processMemoryEstimateMb(){return this.config.processMemoryEstimateMb??this.languageConfig.processMemoryEstimateMb??qD}maxProcessMemoryMb(){return this.config.maxProcessMemoryMb!==void 0?this.config.maxProcessMemoryMb:Math.max(Math.round(Gd.totalmem()/1024/1024*QD),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(je.concurrencyClamped(r,n)),n}effectiveProcesses(e){let r=this.maxProcesses,n=Math.floor(this.maxProcessMemoryMb()/this.processMemoryEstimateMb()),i=Gd.availableParallelism(),s=Math.max(1,Math.min(r,e,i,n));return s!==r&&(this.logger.debug(je.processShardsClamped(r,s)),s<r&&n<Math.min(r,e,i)&&this.logger.debug(je.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??VD,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[Si.extname(e)]??this.languageConfig.defaultLanguageId}buildProjectShards(e,r){let i=F_({workspaceRoot:e.workspaceRoot,languageId:this.languageConfig.tierBLanguageId,files:e.files}).groups,s=(d,f)=>{let m={};for(let _ of f){let L=e.callsByFile?.[_];L&&(m[_]=L)}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:je.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(je.initializeFailed(p)),{edges:[],filesProcessed:[],filesFailed:[],unavailableReason:d}):{edges:[],filesProcessed:[],filesFailed:[],unavailableReason:je.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=Fa(l.symbols,this.containmentKinds);if(c.length===0)continue;if(o=!0,(await Promise.all(c.map(({symbol:p})=>e.request($t.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=k_(r).toString();await e.request($t.INITIALIZE,{processId:process.pid,rootUri:n,capabilities:{textDocument:{documentSymbol:{hierarchicalDocumentSymbolSupport:!0}}},workspaceFolders:[{uri:n,name:Si.basename(r)}],...this.languageConfig.initializationOptions?{initializationOptions:this.languageConfig.initializationOptions}:{}},this.requestTimeoutMs),e.notify($t.INITIALIZED,{})}async shutdownSession(e){try{await e.request($t.SHUTDOWN,null,this.requestTimeoutMs),e.notify($t.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 F=c++;if(F>=n.length)return;let I=n[F];a.pinnedPaths.add(I);try{let $=await this.runOneSlot(e,r,I,i,a,C,o);l[F]=$,!$.ok&&$.deadlineExceeded&&(u=!0)}finally{a.pinnedPaths.delete(I)}}},d=this.effectiveConcurrency(n.length);await Promise.allSettled(Array.from({length:d},()=>p()));let f=[],m=new Set,_=[],L=[];for(let C=0;C<n.length;C++){let F=l[C];if(F)if(F.ok){_.push(n[C]);for(let I of F.edges){let $=`${I.sourceNodeKey}->${I.targetNodeKey}`;m.has($)||(m.add($),f.push(I))}}else L.push({file:n[C],reason:F.reason,retryable:F.deadlineExceeded,...F.notApplicable?{notApplicable:!0}:{}})}return u&&this.markUnreachedFilesFailed(n,_,L,o),{edges:f,filesProcessed:_,filesFailed:L,...u?{unavailableReason:je.batchTimedOut(o)}:{}}}raceAgainstDeadline(e,r){return new Promise((n,i)=>{let s=setTimeout(()=>i(new Ma),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 Ma)return{ok:!1,deadlineExceeded:!0,reason:je.batchTimedOut(a)};let c=l instanceof Error?l.message:String(l),u=this.languageConfig.isNotApplicableFileError?.(c)===!0;return u||this.logger.warn(je.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($t.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:je.batchTimedOut(i),retryable:!0})}qualifiedContainerName(e){if(!(!this.languageConfig.supportsQualifiedContainment||!e))return xd(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=[...Fa(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 _=On(a.used,_s(r,xd(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=On(a.used,_s(r,xd(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=Fa(s.symbols,this.containmentKinds),a=await Promise.all(o.map(({symbol:c})=>e.request($t.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=Ti(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($t.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=wa(o.symbols,{line:u,character:p},this.containmentKinds),m=f&&ba.has(f.symbol.kind)?Ti(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:nc.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(je.skippedMultiLocationDefinition(n)),l}}async resolveTargetNodeKey(e,r,n,i,s){let o=Si.relative(r,G_(i.uri));if(Si.isAbsolute(o)||o.startsWith(".."))return;let a=Ti(o);if(a===n)return;let l=await this.openAndGetSymbols(e,r,a,s),c=wa(l.symbols,i.range.start,this.containmentKinds);return c&&ba.has(c.symbol.kind)?Ti(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=Si.relative(r,G_(n.uri));if(Si.isAbsolute(a)||a.startsWith(".."))return;let l=Ti(a);if(l===s)return;let c=await this.openAndGetSymbols(e,r,l,o),u=wa(c.symbols,n.range.start,this.containmentKinds);return{sourceNodeKey:u&&ba.has(u.symbol.kind)?Ti(this.resolveNodeKeyForFile(o,l,c.symbols,u.symbol.name,u.symbol.selectionRange.start.line,u.containerName)):l,targetNodeKey:i,source:nc.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=M_(r,n),o=await jD.readFile(s,H),a=k_(s).toString();e.notify($t.DID_OPEN,{textDocument:{uri:a,languageId:this.languageIdFor(n),version:1,text:o}});let l=await e.request($t.DOCUMENT_SYMBOL,{textDocument:{uri:a}},this.requestTimeoutMs),c=ev(l),u={relativePath:n,uri:a,symbols:c};return i.openFileCache.set(n,u),u}};var ka="typescript",rv={".ts":ka,".mts":ka,".cts":ka,".tsx":"typescriptreact",".js":"javascript",".mjs":"javascript",".cjs":"javascript",".jsx":"javascriptreact"},nv=/(?:^|\r?\n)Could not find source file:\s*['"][^'"\r\n]+['"]\.?\s*(?:\r?\n|$)/i,iv={name:bt.PACKAGE_NAME,tierBLanguageId:B.TYPESCRIPT,languageIdByExtension:rv,defaultLanguageId:ka,resolveBinary:Ca,checkPreflight:N_,isNotApplicableFileError:t=>nv.test(t),supportsQualifiedContainment:!0,initializationOptions:{maxTsServerMemory:Oa},definitionResolution:"forward",unavailableReasonForUnresolvableBinary:Ei.binaryUnresolvable},Ga=class extends Ge{constructor(e,r){super(iv,e,r)}};import sv from"fs";import ov from"path";import{execFile as av}from"child_process";import{promisify as lv}from"util";var st={PACKAGE_NAME:"pyright",BINARY_NAME:"pyright-langserver",NPX_COMMAND:"npx",NPX_NO_INSTALL_FLAG:"--no-install",STDIO_ARG:"--stdio",VERSION_FLAG:"--version"},Os={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 U_=lv(av),H_=5e3,cv=[oe.PYPROJECT_TOML,oe.REQUIREMENTS_TXT];function uv(t){return cv.some(e=>sv.existsSync(ov.join(t,e)))}async function dv(t){let e=[st.NPX_NO_INSTALL_FLAG,st.PACKAGE_NAME,st.VERSION_FLAG];try{if(qr(st.NPX_COMMAND)){let r=await _i(st.NPX_COMMAND,e,void 0);await U_(r,[],{cwd:t,timeout:H_,shell:!0})}else await U_(st.NPX_COMMAND,e,{cwd:t,timeout:H_});return!0}catch{return!1}}async function B_(t,e){let r=uv(t),i=ir(t,{packageName:st.PACKAGE_NAME,binaryName:st.BINARY_NAME,defaultArgs:[st.STDIO_ARG]},e).locallyResolved?!0:await dv(t);return r?i?{markerFileResolvable:r,lspBinaryResolvable:i,ready:!0}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:Os.binaryUnresolvable}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:Os.markerFileMissing}}var K_="python",pv={".py":K_},gv={name:st.PACKAGE_NAME,tierBLanguageId:B.PYTHON,languageIdByExtension:pv,defaultLanguageId:K_,resolveBinary:(t,e)=>ir(t,{packageName:st.PACKAGE_NAME,binaryName:st.BINARY_NAME,defaultArgs:[st.STDIO_ARG]},e),checkPreflight:B_,supportsQualifiedContainment:!0,definitionResolution:"reverse",unavailableReasonForUnresolvableBinary:Os.binaryUnresolvable},xa=class extends Ge{constructor(e,r){super(gv,e,r)}};import fv from"fs";import Hd from"path";import mv from"os";var Nn={BINARY_NAME:"gopls",DEFAULT_ARGS:[]};function $_(t){let e=/^\((\*?)([^(]*)\)\.(.+)$/.exec(t);if(!e)return t;let[,,r,n]=e;return`${r}.${n}`}var Ud={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 hv(t){return fv.existsSync(Hd.join(t,oe.GO_MOD))}function Ev(t){let e=[];return t.env.GOBIN&&e.push(t.env.GOBIN),t.env.GOPATH&&e.push(Hd.join(t.env.GOPATH,"bin")),e.push(Hd.join(mv.homedir(),"go","bin")),e}async function Y_(t,e,r=sr){let n=hv(t),s=(await Ne({binaryName:Nn.BINARY_NAME,defaultArgs:Nn.DEFAULT_ARGS,extraCandidateDirs:Ev(r)},e)).locallyResolved;return n?s?{markerFileResolvable:n,lspBinaryResolvable:s,ready:!0}:{markerFileResolvable:n,lspBinaryResolvable:s,ready:!1,reason:Ud.binaryUnresolvable}:{markerFileResolvable:n,lspBinaryResolvable:s,ready:!1,reason:Ud.markerFileMissing}}var W_="go",_v={".go":W_},Sv={name:Nn.BINARY_NAME,tierBLanguageId:B.GO,languageIdByExtension:_v,defaultLanguageId:W_,resolveBinary:(t,e)=>Ne({binaryName:Nn.BINARY_NAME,defaultArgs:Nn.DEFAULT_ARGS},e),checkPreflight:Y_,supportsQualifiedContainment:!1,normalizeSymbolName:$_,definitionResolution:"reverse"},Ua=class extends Ge{constructor(e,r){super(Sv,e,r)}};import Lv from"path";import Cv from"os";import Tv from"fs";import Bd from"path";import Av from"os";var Qr={BINARY_NAME:"rust-analyzer",DEFAULT_ARGS:[]},Ha={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 j_(t){return t.startsWith("impl ")?t.slice(5):t}function Rv(t){return Tv.existsSync(Bd.join(t,oe.CARGO_TOML))}function yv(t){return Bd.join(t.env.CARGO_HOME??Bd.join(Av.homedir(),".cargo"),"bin")}var Ov=5e3;async function Iv(t,e){return O_(t,Ov,e)}async function V_(t,e,r=sr){let n=Rv(t),i=await Ne({binaryName:Qr.BINARY_NAME,defaultArgs:Qr.DEFAULT_ARGS,extraCandidateDirs:[yv(r)]},e),s=i.locallyResolved,o=!s||await Iv(i.command,i.fromUserOverride?void 0:[Qr.BINARY_NAME]);return n?s?o?{markerFileResolvable:n,lspBinaryResolvable:s,lspBinarySpawnable:o,ready:!0}:{markerFileResolvable:n,lspBinaryResolvable:s,lspBinarySpawnable:o,ready:!1,reason:Ha.binaryNotSpawnable}:{markerFileResolvable:n,lspBinaryResolvable:s,lspBinarySpawnable:o,ready:!1,reason:Ha.binaryUnresolvable}:{markerFileResolvable:n,lspBinaryResolvable:s,lspBinarySpawnable:o,ready:!1,reason:Ha.markerFileMissing}}var z_="rust",Nv={".rs":z_};function Pv(){return Lv.join(Cv.homedir(),".cargo","bin")}var Dv={name:Qr.BINARY_NAME,tierBLanguageId:B.RUST,languageIdByExtension:Nv,defaultLanguageId:z_,resolveBinary:(t,e)=>Ne({binaryName:Qr.BINARY_NAME,defaultArgs:Qr.DEFAULT_ARGS,extraCandidateDirs:[Pv()]},e),checkPreflight:V_,supportsQualifiedContainment:!0,containmentSymbolKinds:new Set([Ar.CLASS,Ar.OBJECT]),normalizeSymbolName:j_,definitionResolution:"reverse",coldStartSettleMs:8e3,processMemoryEstimateMb:2048},Ba=class extends Ge{constructor(e,r){super(Dv,e,r)}};import vv from"fs";import J_ from"path";var Pn={BINARY_NAME:"clangd",DEFAULT_ARGS:[]},Kd={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 bv=["compile_commands.json","CMakeLists.txt"];function wv(t){return bv.some(e=>vv.existsSync(J_.join(t,e)))}function Fv(t){return t.platform===Dr?[J_.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 q_(t,e,r=sr){let n=wv(t),s=(await Ne({binaryName:Pn.BINARY_NAME,defaultArgs:Pn.DEFAULT_ARGS,extraCandidateDirs:Fv(r)},e)).locallyResolved;return n?s?{markerFileResolvable:n,lspBinaryResolvable:s,ready:!0}:{markerFileResolvable:n,lspBinaryResolvable:s,ready:!1,reason:Kd.binaryUnresolvable}:{markerFileResolvable:n,lspBinaryResolvable:s,ready:!1,reason:Kd.markerFileMissing}}var Rr="cpp",Mv={".c":"c",".h":"c",".cpp":Rr,".cxx":Rr,".cc":Rr,".hpp":Rr,".hxx":Rr,".hh":Rr,".cu":Rr,".cuh":Rr},kv={name:Pn.BINARY_NAME,tierBLanguageId:B.CPP,languageIdByExtension:Mv,defaultLanguageId:Rr,resolveBinary:(t,e)=>Ne({binaryName:Pn.BINARY_NAME,defaultArgs:Pn.DEFAULT_ARGS},e),checkPreflight:q_,supportsQualifiedContainment:!1,definitionResolution:"reverse"},Ka=class extends Ge{constructor(e,r){super(kv,e,r)}};import Gv from"fs";import $a from"path";import Q_ from"os";var Dn={BINARY_NAME:"jdtls",DEFAULT_ARGS:[]},$d={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 xv=["pom.xml","build.gradle"];function Uv(t){return xv.some(e=>Gv.existsSync($a.join(t,e)))}function Hv(t){return t.platform===Dr?[$a.join(Q_.homedir(),"scoop","shims"),$a.join(t.env.ChocolateyInstall??"C:\\ProgramData\\chocolatey","bin")]:t.platform==="darwin"?["/opt/homebrew/bin","/usr/local/bin"]:["/usr/local/bin","/usr/bin",$a.join(Q_.homedir(),".local","share","jdtls","bin")]}async function X_(t,e,r=sr){let n=Uv(t),s=(await Ne({binaryName:Dn.BINARY_NAME,defaultArgs:Dn.DEFAULT_ARGS,extraCandidateDirs:Hv(r)},e)).locallyResolved;return n?s?{markerFileResolvable:n,lspBinaryResolvable:s,ready:!0}:{markerFileResolvable:n,lspBinaryResolvable:s,ready:!1,reason:$d.binaryUnresolvable}:{markerFileResolvable:n,lspBinaryResolvable:s,ready:!1,reason:$d.markerFileMissing}}var Z_="java",Bv={".java":Z_},Kv={name:Dn.BINARY_NAME,tierBLanguageId:B.JAVA,languageIdByExtension:Bv,defaultLanguageId:Z_,resolveBinary:(t,e)=>Ne({binaryName:Dn.BINARY_NAME,defaultArgs:Dn.DEFAULT_ARGS},e),checkPreflight:X_,supportsQualifiedContainment:!0,definitionResolution:"reverse"},Ya=class extends Ge{constructor(e,r){super(Kv,e,r)}};import $v from"fs";import Yv from"path";import Wv from"os";var vn={BINARY_NAME:"csharp-ls",DEFAULT_ARGS:[]},Yd={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 jv(){return Yv.join(Wv.homedir(),".dotnet","tools")}function Vv(t){try{return $v.readdirSync(t).some(r=>r.endsWith(".sln")||r.endsWith(".slnx")||r.endsWith(".csproj"))}catch{return!1}}async function eS(t,e){let r=Vv(t),i=(await Ne({binaryName:vn.BINARY_NAME,defaultArgs:vn.DEFAULT_ARGS,extraCandidateDirs:[jv()]},e)).locallyResolved;return r?i?{markerFileResolvable:r,lspBinaryResolvable:i,ready:!0}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:Yd.binaryUnresolvable}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:Yd.markerFileMissing}}var tS="csharp",zv={".cs":tS},Jv={name:vn.BINARY_NAME,tierBLanguageId:B.CSHARP,languageIdByExtension:zv,defaultLanguageId:tS,resolveBinary:(t,e)=>Ne({binaryName:vn.BINARY_NAME,defaultArgs:vn.DEFAULT_ARGS},e),checkPreflight:eS,supportsQualifiedContainment:!0,definitionResolution:"reverse"},Wa=class extends Ge{constructor(e,r){super(Jv,e,r)}};import qv from"fs";import Qv from"path";import{execFile as Xv}from"child_process";import{promisify as Zv}from"util";var yt={PACKAGE_NAME:"intelephense",NPX_COMMAND:"npx",NPX_NO_INSTALL_FLAG:"--no-install",STDIO_ARG:"--stdio",VERSION_FLAG:"--version"},Is={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 rS=Zv(Xv),nS=5e3;function eb(t){return qv.existsSync(Qv.join(t,"composer.json"))}async function tb(t){let e=[yt.NPX_NO_INSTALL_FLAG,yt.PACKAGE_NAME,yt.VERSION_FLAG];try{if(qr(yt.NPX_COMMAND)){let r=await _i(yt.NPX_COMMAND,e,void 0);await rS(r,[],{cwd:t,timeout:nS,shell:!0})}else await rS(yt.NPX_COMMAND,e,{cwd:t,timeout:nS});return!0}catch{return!1}}async function iS(t,e){let r=eb(t),i=ir(t,{packageName:yt.PACKAGE_NAME,defaultArgs:[yt.STDIO_ARG]},e).locallyResolved?!0:await tb(t);return r?i?{markerFileResolvable:r,lspBinaryResolvable:i,ready:!0}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:Is.binaryUnresolvable}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:Is.markerFileMissing}}var bn="php",rb={".php":bn,".phtml":bn,".php3":bn,".php4":bn,".php5":bn,".phps":bn},nb={name:yt.PACKAGE_NAME,tierBLanguageId:B.PHP,languageIdByExtension:rb,defaultLanguageId:bn,resolveBinary:(t,e)=>ir(t,{packageName:yt.PACKAGE_NAME,defaultArgs:[yt.STDIO_ARG]},e),checkPreflight:iS,supportsQualifiedContainment:!0,definitionResolution:"reverse",unavailableReasonForUnresolvableBinary:Is.binaryUnresolvable},ja=class extends Ge{constructor(e,r){super(nb,e,r)}};import ib from"fs";import jd from"path";import sb from"os";var wn={BINARY_NAME:"ruby-lsp",DEFAULT_ARGS:[]},Wd={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 ob=["Gemfile","Gemfile.lock"];function ab(t){return ob.some(e=>ib.existsSync(jd.join(t,e)))}function lb(){if(process.platform==="win32")return[];let t=sb.homedir();return[jd.join(t,".rbenv","shims"),jd.join(t,".rvm","bin")]}async function sS(t,e){let r=ab(t),i=(await Ne({binaryName:wn.BINARY_NAME,defaultArgs:wn.DEFAULT_ARGS,extraCandidateDirs:lb()},e)).locallyResolved;return r?i?{markerFileResolvable:r,lspBinaryResolvable:i,ready:!0}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:Wd.binaryUnresolvable}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:Wd.markerFileMissing}}var Va="ruby",cb={".rb":Va,".rake":Va,".gemspec":Va},ub={name:wn.BINARY_NAME,tierBLanguageId:B.RUBY,languageIdByExtension:cb,defaultLanguageId:Va,resolveBinary:(t,e)=>Ne({binaryName:wn.BINARY_NAME,defaultArgs:wn.DEFAULT_ARGS},e),checkPreflight:sS,supportsQualifiedContainment:!0,definitionResolution:"reverse"},za=class extends Ge{constructor(e,r){super(ub,e,r)}};function db(t){return t===null?!0:typeof t=="number"?Number.isFinite(t):typeof t=="string"||typeof t=="boolean"}function oS(t,e=[]){return!it(t)||!At(t,["text",...e],["attributes"])||typeof t.text!="string"?!1:Object.hasOwn(t,"attributes")?it(t.attributes)&&Reflect.ownKeys(t.attributes).every(r=>typeof r=="string"&&db(t.attributes[r])):!0}function pb(t){return!oS(t,["id","kind"])||!qe(t.id)?!1:Object.values(cn).some(e=>e===t.kind)}function gb(t,e){if(!Array.from(t).every(pb))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(cn.UNKNOWN)!==1||n(cn.VERIFY)>1?!1:e!==ic.NEEDS_VERIFICATION||n(cn.CANDIDATE)===0&&n(cn.VERIFY)===1}function fb(t){if(t.length>Bn.MAX_OPTIONS)throw new E(T.SEMANTIC_INPUT_LIMIT_EXCEEDED,"Semantic option limit exceeded");if(!mr(t))throw new E(T.SEMANTIC_INVALID_REQUEST,"Semantic options must be a dense data array");if(t.filter(r=>it(r)&&r.kind===cn.CANDIDATE).length>Bn.MAX_CANDIDATES)throw new E(T.SEMANTIC_INPUT_LIMIT_EXCEEDED,"Semantic option limit exceeded")}function mb(t){return!it(t)||!At(t,[...ns,"task","language","relation","context","options"])||!Oc(t)||!qe(t.language)||!qe(t.relation)||!Object.values(ic).some(e=>e===t.task)?!1:oS(t.context)&&Array.isArray(t.options)&&gb(t.options,t.task)}function aS(t){if(it(t)&&Array.isArray(t.options)&&fb(t.options),!mb(t))throw new E(T.SEMANTIC_INVALID_REQUEST,"Invalid semantic decision request");let e=JSON.stringify(t);if(Buffer.byteLength(e,"utf8")>Bn.MAX_INPUT_BYTES)throw new E(T.SEMANTIC_INPUT_LIMIT_EXCEEDED,"Semantic request UTF-8 byte limit exceeded");return JSON.parse(e)}function hb(t){let e=["provider","modelId","modelVersion","artifactHash"];return it(t)&&At(t,e)&&e.every(r=>qe(t[r]))}function Eb(t){return t.scoreKind===sc.RAW?t.calibrationVersion===null:t.scoreKind===sc.CALIBRATED&&qe(t.calibrationVersion)}function _b(t,e){return it(t)&&At(t,["optionId","probability"])&&t.optionId===e&&pf(t.probability)}function Sb(t,e){if(!At(e,[...ns,"status","scores","model","scoreKind","calibrationVersion"])||!hb(e.model)||!Eb(e))return!1;let r=e.scores;return Array.isArray(r)&&r.length===t.options.length&&mr(r)&&t.options.every((n,i)=>_b(r[i],n.id))}function Tb(t){return At(t,[...ns,"status","scores","unavailableCode","unavailableReason"])?Array.isArray(t.scores)&&t.scores.length===0&&mr(t.scores)&&qe(t.unavailableReason)&&Object.values($s).some(e=>e===t.unavailableCode):!1}function Ab(t,e){return!it(e)||!gf(t,e)?!1:e.status===Hi.SCORED?Sb(t,e):e.status===Hi.UNAVAILABLE&&Tb(e)}function lS(t,e){if(!Ab(t,e))throw new E(T.SEMANTIC_INVALID_RESPONSE,"Invalid semantic decision response");return JSON.parse(JSON.stringify(e))}var Ja=class{validateRequest(e){return aS(e)}validateOutcome(e,r){return lS(this.validateRequest(e),r)}};import Ai from"fs/promises";var Rb={maxWaitMs:1e4,retryIntervalMs:100,heartbeatIntervalMs:1e4,staleAfterMs:3e4};function yb(t){return new Promise(e=>setTimeout(e,t))}function Ob(t){try{return process.kill(t,0),!0}catch(e){return e.code===pn}}async function Ib(t){try{let e=Number.parseInt(await Ai.readFile(t,H),10);return Number.isFinite(e)?e:void 0}catch{return}}async function Lb(t,e){let r=await Ai.stat(t).catch(()=>{});if(!r||Date.now()-r.mtimeMs<=e)return!1;let n=await Ib(t);return n!==void 0&&Ob(n)?!1:(await Ai.rm(t,{force:!0}).catch(()=>{}),!0)}function Cb(t){let e=t.code;return e===Yn||e===pn||e===Wn||e===jn}async function Nb(t){try{let e=await Ai.open(t,"wx");return await e.writeFile(String(process.pid)),await e.close(),!0}catch(e){if(!Cb(e))throw e;return!1}}async function cS(t,e={}){let r={...Rb,...e},n=Date.now()+r.maxWaitMs,i=!1;for(;!await Nb(t);)if(i||(i=!0,e.onWaiting?.()),!await Lb(t,r.staleAfterMs)){if(Date.now()>n)throw new Js(t);await yb(r.retryIntervalMs)}let s=setInterval(()=>{let a=new Date;Ai.utimes(t,a,a).catch(()=>{})},r.heartbeatIntervalMs);s.unref?.();let o=!1;return{async release(){o||(o=!0,clearInterval(s),await Ai.rm(t,{force:!0}).catch(()=>{}))}}}function Pb(t=y,e={}){let r=e.createAstWorkerPool??(()=>new sa);t.register(A.KnowledgeGitService,(i,s)=>new ho(i.resolve(A.GitProvider),s?.logger,s?.gitNetworkTimeoutMs)),t.register(A.FileDiscovery,(i,s)=>new Zo(i.resolve(A.GitProvider),s?.logger)),t.register(A.ConfigScanner,(i,s)=>new ta(s?.logger)),t.register(A.VcsScanner,(i,s)=>new na(i.resolve(A.GitProvider),s?.logger));let n;t.register(A.AstProcessor,(i,s)=>(n??=r(),new oa(n,s?.logger))),t.register(A.GraphPersister,()=>new ga),t.register(A.TempFileManager,()=>(i,s)=>new ma(i,s)),t.register(A.ProcessLock,()=>cS),t.register(A.SemanticCorpusService,()=>new mo),t.register(A.SemanticDecisionValidator,()=>new Ja),t.register(A.QueryService,(i,s)=>new Ea(s?.logger)),t.register(A.TierBCoverageHintProvider,()=>({resolve:Yi})),t.register(A.ImpactService,(i,s)=>new Sa(s?.logger)),t.register(A.ChangeDetectionService,(i,s)=>new _o(i.resolve(A.ImpactService,s),s?.logger)),t.register(A.TopologyBuilder,()=>new Ta),t.register(A.SnapshotRenderer,()=>new Eo),t.register(A.HydrationService,(i,s)=>new So(i.resolve(A.GitProvider),s?.logger)),t.register(A.SemanticDiffAnalyzer,(i,s)=>new Ra(s?.logger)),t.register(A.EdgeResolutionProviders,(i,s)=>({typescript:()=>new Ga(s?.logger),python:()=>new xa(s?.logger),go:()=>new Ua(s?.logger),rust:()=>new Ba(s?.logger),cpp:()=>new Ka(s?.logger),java:()=>new Ya(s?.logger),csharp:()=>new Wa(s?.logger),php:()=>new ja(s?.logger),ruby:()=>new za(s?.logger)}))}Pb();var Xr={METHOD_POST:"POST",HEADER_AUTHORIZATION:"Authorization",HEADER_CONTENT_TYPE:"Content-Type",CONTENT_TYPE_JSON:"application/json",bearerAuth:t=>`Bearer ${t}`};var or={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 Vd={l2Nodes:t=>`/projects/${t}/l2-nodes`,SYNC_PUSH:"/sync/push"};function uS(t,e){if(typeof t!="object"||t===null||Array.isArray(t))throw new TypeError(`${e} must be an object`);return t}function dS(t,e){if(typeof t!="number"||!Number.isFinite(t))throw new TypeError(`${e} must be a finite number`);return t}function pS(t){if(!Array.isArray(t))throw new TypeError("response must be an array");for(let[e,r]of t.entries()){let n=uS(r,`response[${e}]`);if(dS(n.id,`response[${e}].id`),typeof n.name!="string")throw new TypeError(`response[${e}].name must be a string`)}return t}function gS(t){let e=uS(t,"response");if(typeof e.success!="boolean")throw new TypeError("response.success must be a boolean");return dS(e.processed,"response.processed"),t}var fS=3e4,Ls=class{config;initialize(e){this.config=e}getConfig(){if(!this.config)throw new E(T.SYNC_FETCH_FAILED,or.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}${Vd.l2Nodes(e)}`,{headers:{[Xr.HEADER_AUTHORIZATION]:Xr.bearerAuth(n)},signal:AbortSignal.timeout(fS)})}catch(o){throw E.wrap(T.SYNC_FETCH_FAILED,or.FETCH_L2_NODES_FAILED,o)}if(!i.ok){let o=await this.parseErrorBody(i);throw new E(T.SYNC_FETCH_FAILED,or.fetchL2NodesFailedWithReason(o))}let s;try{s=await i.json()}catch(o){throw E.wrap(T.SYNC_FETCH_FAILED,or.FETCH_L2_NODES_INVALID_JSON,o)}try{return pS(s)}catch(o){throw E.wrap(T.SYNC_FETCH_FAILED,or.FETCH_L2_NODES_INVALID_RESPONSE,o)}}async pushSyncEvents(e,r){let{apiUrl:n,pat:i}=this.getConfig(),s;try{s=await fetch(`${n}${Vd.SYNC_PUSH}`,{method:Xr.METHOD_POST,headers:{[Xr.HEADER_CONTENT_TYPE]:Xr.CONTENT_TYPE_JSON,[Xr.HEADER_AUTHORIZATION]:Xr.bearerAuth(i)},body:JSON.stringify({projectId:Number(e),events:r}),signal:AbortSignal.timeout(fS)})}catch(a){throw E.wrap(T.SYNC_PUSH_FAILED,or.SYNC_PUSH_FAILED,a)}if(!s.ok){let a=await this.parseErrorBody(s);throw new E(T.SYNC_PUSH_FAILED,or.syncPushFailedWithReason(a))}let o;try{o=await s.json()}catch(a){throw E.wrap(T.SYNC_PUSH_FAILED,or.SYNC_PUSH_INVALID_JSON,a)}try{return gS(o)}catch(a){throw E.wrap(T.SYNC_PUSH_FAILED,or.SYNC_PUSH_INVALID_RESPONSE,a)}}};y.register(A.RemoteSyncClient,()=>()=>new Ls);var ot={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:`
143
143
 
144
- `,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 mS={CHAT_COMPLETIONS:"/v1/chat/completions"};var Db=new Set(Object.values(Xt));function en(t,e){if(typeof t!="object"||t===null||Array.isArray(t))throw new TypeError(`${e} must be an object`);return t}function Jd(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 hS(t,e){if(typeof t!="number"||!Number.isFinite(t))throw new TypeError(`${e} must be a finite number`);return t}function qd(t,e){return t===null?null:Ft(t,e)}function ES(t,e){let r=Ft(t,e);if(!Db.has(r))throw new TypeError(`${e} must be a supported chat role`);return r}function _S(t,e){for(let[r,n]of Jd(t,e).entries()){let i=en(n,`${e}[${r}]`);if(Ft(i.id,`${e}[${r}].id`),i.type!==ac)throw new TypeError(`${e}[${r}].type must be ${ac}`);let s=en(i.function,`${e}[${r}].function`);Ft(s.name,`${e}[${r}].function.name`),Ft(s.arguments,`${e}[${r}].function.arguments`)}}function vb(t,e){let r=en(t,e);ES(r.role,`${e}.role`),qd(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&&_S(r.tool_calls,`${e}.tool_calls`)}function SS(t){let e=en(t,"response");Ft(e.id,"response.id"),Ft(e.model,"response.model");for(let[r,n]of Jd(e.choices,"response.choices").entries()){let i=en(n,`response.choices[${r}]`);hS(i.index,`response.choices[${r}].index`),vb(i.message,`response.choices[${r}].message`),qd(i.finish_reason,`response.choices[${r}].finish_reason`)}return t}function TS(t){let e=en(t,"chunk");Ft(e.id,"chunk.id"),Ft(e.model,"chunk.model");for(let[r,n]of Jd(e.choices,"chunk.choices").entries()){let i=en(n,`chunk.choices[${r}]`);hS(i.index,`chunk.choices[${r}].index`);let s=en(i.delta,`chunk.choices[${r}].delta`);s.role!==void 0&&ES(s.role,`chunk.choices[${r}].delta.role`),s.content!==void 0&&Ft(s.content,`chunk.choices[${r}].delta.content`),s.tool_calls!==void 0&&_S(s.tool_calls,`chunk.choices[${r}].delta.tool_calls`),qd(i.finish_reason,`chunk.choices[${r}].finish_reason`)}return t}var RS=3e4,AS=4e3,Ns=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}${mS.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(AS)}),{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(AS)});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(RS)})}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(SS(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 bb(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 L=d.slice(0,_);d=d.slice(_+at.SSE_BLOCK_SEPARATOR.length);let C=wb(L,a);if(C.kind==="done")return;C.kind==="chunk"&&(yield C.chunk)}}}return l()}};async function bb(t,e,r,n){let i;try{i=await fetch(t,{method:at.METHOD_POST,headers:e,body:r,signal:AbortSignal.timeout(RS)})}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 wb(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(TS(i))}}catch(s){throw E.wrap(T.LLM_STREAM_FAILED,lt.CHAT_COMPLETION_STREAM_INVALID_RESPONSE,s)}}y.register(A.LlmClient,()=>()=>new Ns);function Fb(t){return t===void 0||typeof t=="number"&&Number.isSafeInteger(t)&&t>=0}function Mb(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")?Fb(e.deadlineUnixMs)&&(e.signal===void 0||e.signal instanceof AbortSignal):!1}function yS(t){if(t!==void 0){if(!Mb(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 OS="semantic decision model is not installed in this foundation slice",Qa=class{name="local-semantic-decision";async checkAvailability(){return{available:!1,reason:OS,capabilities:[]}}async score(e,r){return yS(r),{status:Bi.UNAVAILABLE,scores:[],unavailableCode:Ys.MODEL_NOT_INSTALLED,unavailableReason:OS,schemaVersion:e.schemaVersion,requestId:e.requestId,featureSchemaVersion:e.featureSchemaVersion,evidence:{...e.evidence}}}};function kb(t=y){t.register(A.SemanticDecisionProvider,()=>new Qa)}kb();import Wl from"process";import AM from"crypto";import{z as Ap}from"zod";var IS={MISSING_MEMORY_KEY:(t,e)=>`docuviaApi: no "${t}" set in memory scope "${e}"`};var De={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"},tn={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 LS from"fs/promises";import CS from"path";async function ve(t,e,r){let n=CS.join(t,Ee,Dr,e);await LS.mkdir(CS.dirname(n),{recursive:!0}),await LS.appendFile(n,JSON.stringify({ts:new Date().toISOString(),...r})+`
145
- `,H)}async function yi(t,e){await ve(t,Wp,e)}async function NS(t,e){await yi(t,{event:tn.SUMMARY,...e})}async function PS(t,e,r){let{created:n}=await t.ensureKnowledgeBranch(e);r.info(De.INSTALLING_HOOK);let{installed:i}=await t.installPostCommitHook(e);r.info(De.INSTALLING_PRE_PUSH_HOOK);let{installed:s}=await t.installPrePushHook(e);return{branchCreated:n,hookInstalled:i,prePushHookInstalled:s}}import DS from"path";import{pathToFileURL as Gb}from"url";async function Oi(t,e,r){let n=t.getFirst();if(n)return n;let s=await e.getRemoteUrl(r)??Gb(DS.resolve(r)).href;return t.getOrInsert({name:DS.basename(r),repoUrl:s})}async function Xa(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 Ii(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 Ps(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 Li(t,e){if(e.length===0)return;let r=Ps(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 Za(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&&Li(e,o)})}function xb(t){return JSON.stringify({byFile:t})}function el(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){Object.keys(e).length!==0&&t.meta.set(S.META_KEY_CALL_RESOLUTION_STATS,xb(e))}function tl(t,e){Object.keys(e).length!==0&&vS(t,e)}function bS(t,e,r){let n=el(t);for(let i of r)delete n[i];for(let[i,s]of Object.entries(e))n[i]=s;vS(t,n)}function wS(t){let e=el(t);return{byFile:e,total:br(e)}}async function FS(t,e,r){try{let n=t(e,r);return await n.initialize(),r.info(De.TEMP_FILE_MANAGER_INITIALIZED,{tempDir:n.getTempDirPath()}),{tempFileManager:n,stop:()=>n.stopCleanup()}}catch(n){r.warn(De.TEMP_FILE_MANAGER_INIT_FAILED,{error:n?.message??String(n)});return}}function MS(t){let{filesRequested:e,filesParsed:r,filesFailed:n,failures:i,filesSkippedOversized:s}=t,o=n>0?De.PARTIAL_SUCCESS(n,e):s>0?De.SUCCESS_WITH_SKIPPED_OVERSIZED(s):De.SUCCESS;return{success:!0,partialFailure:n>0,message:o,filesRequested:e,filesParsed:r,filesFailed:n,failures:i,filesSkippedOversized:s,skippedExistingGraph:!1}}function kS(){return{success:!0,partialFailure:!1,message:De.ALREADY_INITIALIZED,filesRequested:0,filesParsed:0,filesFailed:0,failures:[],filesSkippedOversized:0,skippedExistingGraph:!0}}import Ub from"path";function ie(t){return Ub.join(t,Ee,Yi)}import xS from"fs/promises";import Hb from"os";import Bb from"path";var rl={SNAPSHOTTING:"Packing knowledge graph snapshot...",DB_NOT_FOUND:'Local database not found. Please run "docuvia init".'},Ci={START:"snapshot.start",ERROR:"snapshot.error",SUMMARY:"snapshot.summary",TIER_B_FINALIZED:"snapshot.tierB.finalized"},GS="docuvia-snapshot-";async function Ni(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 xS.mkdtemp(Bb.join(Hb.tmpdir(),GS));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 xS.rm(l,{recursive:!0,force:!0})}}var US=["SIGTERM","SIGINT"],nl=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(){let{workspaceRoot:e,logger:r}=this;r.info(De.INITIALIZING(e)),await yi(e,{event:tn.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,De.OPEN_DB_FAILED,f)}try{let f=d.projects.getFirst(),{l2Nodes:m}=d.graph.count(),_=f!==void 0&&m>0;if(await PS(i,e,r),_)return r.info(De.ALREADY_INITIALIZED),await yi(e,{event:tn.ALREADY_INITIALIZED,workspaceRoot:e}),kS();let L=await Oi(d.projects,n,e);r.info(De.SCANNING_WORKSPACE);let C=await Xa({configScanner:o,vcsScanner:a,fileDiscovery:s,filesRepo:d.files,workspaceRoot:e});r.info(De.PARSING_AST);let{parsedResults:F,failures:I,callResolutionByFile:$}=await Ii({astProcessor:l,graphPersister:c,store:d,workspaceRoot:e,projectId:L.id,filesToParse:C.filesToParse,skippedOversized:C.skippedOversized,tags:C.tags,appendLogLine:yi,logEvents:{parseFailure:tn.PARSE_FAILURE,fileSkippedOversized:tn.FILE_SKIPPED_OVERSIZED}});r.info(De.PERSISTING_GRAPH),tl(d,$??{}),await Za({store:d,git:n,workspaceRoot:e,parsedResults:F}),r.info(De.SNAPSHOTTING_KNOWLEDGE_BRANCH);let Q=y.resolve(A.HydrationService,{logger:r});try{await Ni(e,d,i),await Q.markSynced(e,d)}catch(M){r.warn(De.SNAPSHOT_AFTER_INIT_FAILED,{error:M instanceof Error?M.message:String(M)}),await yi(e,{event:tn.SNAPSHOT_AFTER_INIT_FAILED,message:M instanceof Error?M.message:String(M)})}r.info(De.INITIALIZING_TEMP_FILES);let z=await FS(u,e,r),te=$b(z,r);try{let M=C.filesToParse.length,ne=F.length,pe=I.length,N=C.skippedOversized.length;(pe>0||N>0)&&r.warn(De.PARSE_FAILURES_OR_SKIPPED,{filesRequested:M,filesParsed:ne,filesFailed:pe,filesSkippedOversized:N});let Re=MS({filesRequested:M,filesParsed:ne,filesFailed:pe,failures:I,filesSkippedOversized:N});return await NS(e,{filesRequested:M,filesParsed:ne,filesFailed:pe,failures:I,filesSkippedOversized:N}),Re}finally{Kb(z,te)}}finally{await d.close()}}};function Kb(t,e){try{t?.stop()}finally{e()}}function $b(t,e){if(!t)return()=>{};let r=()=>{e.info(De.CLEANING_UP_TEMP_FILES),t.tempFileManager.cleanup().catch(n=>e.error(De.TEMP_FILE_CLEANUP_FAILED,{error:String(n)})).finally(()=>t.stop())};for(let n of US)process.on(n,r);return()=>{for(let n of US)process.removeListener(n,r)}}import HS from"fs/promises";var Mn={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}`},il={START:"clean.start",SUMMARY:"clean.summary"};async function Qd(t,e){await ve(t,jp,e)}async function Xd(t,e){await Qd(t,{event:il.SUMMARY,...e})}import Zd from"fs";import Ds from"path";function Pi(t,e){let r=Ds.resolve(e),n=Ds.resolve(t);return n===r||n.startsWith(`${r}${Ds.sep}`)}function sl(t,e){let r=Ds.resolve(e),n=Ds.resolve(r,t);if(!Pi(n,r))return{status:"outside"};if(!Zd.existsSync(n))return{status:"missing"};try{let i=Zd.realpathSync(r),s=Zd.realpathSync(n);if(!Pi(s,i))return{status:"outside"}}catch{return{status:"missing"}}return{status:"ok",resolvedPath:n}}var ol=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(){let{workspaceRoot:e,logger:r}=this,n=ie(e);if(!Pi(n,e))throw new E(T.CLEAN_WORKFLOW_FAILED,Mn.PATH_ESCAPES_WORKSPACE(n,e));r.info(Mn.CLEANING(n)),await Qd(e,{event:il.START});let i=!0;try{await HS.access(n)}catch{i=!1}if(!i){let o={deleted:!1,message:Mn.NOT_FOUND};return await Xd(e,o),o}try{await HS.unlink(n)}catch(o){throw E.wrap(T.CLEAN_WORKFLOW_FAILED,Mn.DELETE_FAILED(n),o)}r.info(Mn.DELETED_AT(n));let s={deleted:!0,message:Mn.DELETED};return await Xd(e,s),s}};var al={GETTING_STATUS:"Getting status...",DB_NOT_FOUND:'Local database not found. Please run "docuvia init".'},ll={START:"status.start",ERROR:"status.error",SUMMARY:"status.summary"};async function cl(t,e){await ve(t,Vp,e)}var Yb="ensureHydrated: automatic hydration refused; local.db left untouched (see reason)";async function rn(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(Yb,{refusalReason:s.refusalReason})}}finally{await n.close()}}var kn={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(Wb):[]}catch{return[]}}function Wb(t){if(!t||typeof t!="object")return!1;let e=t;return(e.kind===kn.COMMIT_MESSAGE||e.kind===kn.CONTRACT_SYMBOL)&&typeof e.target=="string"&&typeof e.commitSha=="string"}function BS(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 KS(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 $S(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 ul=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(){let{workspaceRoot:e,logger:r}=this;r.info(al.GETTING_STATUS),await cl(e,{event:ll.START}),await rn(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,al.DB_NOT_FOUND,s);throw await cl(e,{event:ll.ERROR,message:al.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 this.resolveGraphFreshness(i)};return await cl(e,{event:ll.SUMMARY,...c}),c}finally{await i.close()}}async resolveGraphFreshness(e){try{if(!y.has(A.GitProvider))return"unknown";let n=await y.resolve(A.GitProvider).getHeadSha(this.workspaceRoot);if(!n)return"unknown";let i=e.meta.get(S.META_KEY_LAST_INGESTED_SOURCE_SHA);return i?i===n?"fresh":"stale":"unknown"}catch{return"unknown"}}};var Gn={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.`},xn={START:"sync.start",ERROR:"sync.error",SUMMARY:"sync.summary"};async function Un(t,e){await ve(t,zp,e)}import dl from"fs/promises";import ep from"path";function tp(t){return ep.join(t,Ee,Dr,ig)}var jb=1e4,Vb=100,zb=6e4,Jb=".lock",qb={TIMED_OUT_WAITING:t=>`Timed out waiting for the sync-state lock at ${t} \u2014 another docuvia publish may be stuck`};async function Qb(t,e){let r=`${t}${Jb}`;await dl.mkdir(ep.dirname(r),{recursive:!0});try{return await e(r,{maxWaitMs:jb,retryIntervalMs:Vb,staleAfterMs:zb})}catch(n){throw n instanceof qs?E.wrap(T.DB_LOCKED,qb.TIMED_OUT_WAITING(r),n):n}}async function YS(t,e,r){let n=await Qb(tp(t),e);try{return await r()}finally{await n.release()}}async function WS(t){try{let e=await dl.readFile(tp(t),H);return JSON.parse(e)}catch{return{}}}async function jS(t,e){let r=tp(t);await dl.mkdir(ep.dirname(r),{recursive:!0}),await dl.writeFile(r,JSON.stringify(e,null,2),H)}var pl=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(Gn.STARTING(i)),await Un(r,{event:xn.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:Gn.NOTHING_TO_SYNC};return await Un(r,{event:xn.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 Un(r,{event:xn.ERROR,projectId:i,message:Gn.DB_NOT_FOUND}),new E(T.DB_NOT_FOUND,Gn.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(F){let I=F instanceof Error?F.message:String(F);throw await Un(r,{event:xn.ERROR,projectId:i,message:I}),F}let m=new Map(f.map(F=>[F.name,F.id])),_=u.graph.findNodesForChangedFiles(Array.from(l)),L=y.resolve(A.ProcessLock),C=await YS(r,L,async()=>{let F=await WS(r),I=F[i]??{syncedContentHashes:[]},$=new Set(I.syncedContentHashes),{events:Q,newlySyncedHashes:z,skippedL2Count:te}=this.buildSyncPushEvents(_,m,$);if(Q.length===0)return{synced:0,skipped:te,message:Gn.NOTHING_NEW(te)};let M;try{M=await d.pushSyncEvents(i,Q)}catch(pe){let N=pe instanceof Error?pe.message:String(pe);throw await Un(r,{event:xn.ERROR,projectId:i,message:N}),pe}I.syncedContentHashes=Array.from(new Set([...$,...z])),F[i]=I,await jS(r,F);let ne=M.processed??Q.length;return{synced:ne,skipped:te,message:Gn.SYNCED(ne,te)}});return await Un(r,{event:xn.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:Kp.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 RF from"fs";import yF 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"},VS=`You are an expert software architect reviewing source code directly (not commit history).
144
+ `,bearerAuth:t=>`Bearer ${t}`};var at={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 mS={CHAT_COMPLETIONS:"/v1/chat/completions"};var Db=new Set(Object.values(Qt));function Zr(t,e){if(typeof t!="object"||t===null||Array.isArray(t))throw new TypeError(`${e} must be an object`);return t}function zd(t,e){if(!Array.isArray(t))throw new TypeError(`${e} must be an array`);return t}function wt(t,e){if(typeof t!="string")throw new TypeError(`${e} must be a string`);return t}function hS(t,e){if(typeof t!="number"||!Number.isFinite(t))throw new TypeError(`${e} must be a finite number`);return t}function Jd(t,e){return t===null?null:wt(t,e)}function ES(t,e){let r=wt(t,e);if(!Db.has(r))throw new TypeError(`${e} must be a supported chat role`);return r}function _S(t,e){for(let[r,n]of zd(t,e).entries()){let i=Zr(n,`${e}[${r}]`);if(wt(i.id,`${e}[${r}].id`),i.type!==oc)throw new TypeError(`${e}[${r}].type must be ${oc}`);let s=Zr(i.function,`${e}[${r}].function`);wt(s.name,`${e}[${r}].function.name`),wt(s.arguments,`${e}[${r}].function.arguments`)}}function vb(t,e){let r=Zr(t,e);ES(r.role,`${e}.role`),Jd(r.content,`${e}.content`),r.name!==void 0&&wt(r.name,`${e}.name`),r.tool_call_id!==void 0&&wt(r.tool_call_id,`${e}.tool_call_id`),r.tool_calls!==void 0&&_S(r.tool_calls,`${e}.tool_calls`)}function SS(t){let e=Zr(t,"response");wt(e.id,"response.id"),wt(e.model,"response.model");for(let[r,n]of zd(e.choices,"response.choices").entries()){let i=Zr(n,`response.choices[${r}]`);hS(i.index,`response.choices[${r}].index`),vb(i.message,`response.choices[${r}].message`),Jd(i.finish_reason,`response.choices[${r}].finish_reason`)}return t}function TS(t){let e=Zr(t,"chunk");wt(e.id,"chunk.id"),wt(e.model,"chunk.model");for(let[r,n]of zd(e.choices,"chunk.choices").entries()){let i=Zr(n,`chunk.choices[${r}]`);hS(i.index,`chunk.choices[${r}].index`);let s=Zr(i.delta,`chunk.choices[${r}].delta`);s.role!==void 0&&ES(s.role,`chunk.choices[${r}].delta.role`),s.content!==void 0&&wt(s.content,`chunk.choices[${r}].delta.content`),s.tool_calls!==void 0&&_S(s.tool_calls,`chunk.choices[${r}].delta.tool_calls`),Jd(i.finish_reason,`chunk.choices[${r}].finish_reason`)}return t}var RS=3e4,AS=4e3,Cs=class{config;initialize(e){this.config=e}getConfig(){if(!this.config)throw new E(T.LLM_NOT_INITIALIZED,at.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}${mS.CHAT_COMPLETIONS}`}buildHeaders(e,r){let n={[ot.HEADER_CONTENT_TYPE]:ot.CONTENT_TYPE_JSON};return r&&(n.Accept=r),e.apiKey&&(n[ot.HEADER_AUTHORIZATION]=ot.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:ot.METHOD_GET,signal:AbortSignal.timeout(AS)}),{available:!0}}catch(e){let r=e instanceof Error?e.message:String(e);return{available:!1,reason:at.availabilityCheckFailedWithReason(r)}}}async checkBridgeReachability(e){try{let r=this.getConfig(),n=await fetch(this.buildCompletionsUrl(r.baseUrl),{method:ot.METHOD_POST,headers:this.buildHeaders(r),body:JSON.stringify({model:e,messages:[{role:Qt.USER,content:"ping"}],max_tokens:1,stream:!1}),signal:AbortSignal.timeout(AS)});if(!n.ok){let i=await this.parseErrorBody(n);return{available:!1,reason:at.bridgeProbeRejectedWithReason(n.status,i)}}return{available:!0}}catch(r){let n=r instanceof Error?r.message:String(r);return{available:!1,reason:at.bridgeProbeFailedWithReason(n)}}}async chatCompletion(e){let r=this.getConfig(),n;try{n=await fetch(this.buildCompletionsUrl(r.baseUrl),{method:ot.METHOD_POST,headers:this.buildHeaders(r),body:JSON.stringify(this.buildRequestBody(e,!1)),signal:AbortSignal.timeout(RS)})}catch(s){throw E.wrap(T.LLM_CHAT_COMPLETION_FAILED,at.CHAT_COMPLETION_FAILED,s)}if(!n.ok){let s=await this.parseErrorBody(n);throw n.status===429?new E(T.LLM_RATE_LIMITED,at.chatCompletionFailedWithReason(s)):n.status===401||n.status===403?new E(T.LLM_AUTH_FAILED,at.chatCompletionFailedWithReason(s)):new E(T.LLM_HTTP_FAILED,at.chatCompletionFailedWithReason(s))}let i;try{i=await n.json()}catch(s){throw E.wrap(T.LLM_INVALID_RESPONSE,at.CHAT_COMPLETION_INVALID_JSON,s)}try{return this.fromWireResult(SS(i))}catch(s){throw E.wrap(T.LLM_INVALID_RESPONSE,at.CHAT_COMPLETION_INVALID_RESPONSE,s)}}streamChatCompletion(e){let r=this.getConfig(),n=this.buildHeaders(r,ot.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 bb(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(ot.SSE_BLOCK_SEPARATOR))!==-1;){let L=d.slice(0,_);d=d.slice(_+ot.SSE_BLOCK_SEPARATOR.length);let C=wb(L,a);if(C.kind==="done")return;C.kind==="chunk"&&(yield C.chunk)}}}return l()}};async function bb(t,e,r,n){let i;try{i=await fetch(t,{method:ot.METHOD_POST,headers:e,body:r,signal:AbortSignal.timeout(RS)})}catch(s){throw E.wrap(T.LLM_CHAT_COMPLETION_FAILED,at.CHAT_COMPLETION_STREAM_FAILED,s)}if(!i.ok){let s=await n(i);throw new E(T.LLM_CHAT_COMPLETION_FAILED,at.chatCompletionStreamFailedWithReason(s))}return i}function wb(t,e){let r=t.trim();if(!r)return{kind:"skip"};let n=r.startsWith(ot.SSE_DATA_PREFIX)?r.slice(ot.SSE_DATA_PREFIX.length):r;if(n===ot.SSE_DONE_SENTINEL)return{kind:"done"};let i;try{i=JSON.parse(n)}catch(s){throw E.wrap(T.LLM_STREAM_FAILED,at.CHAT_COMPLETION_STREAM_INVALID_JSON,s)}try{return{kind:"chunk",chunk:e(TS(i))}}catch(s){throw E.wrap(T.LLM_STREAM_FAILED,at.CHAT_COMPLETION_STREAM_INVALID_RESPONSE,s)}}y.register(A.LlmClient,()=>()=>new Cs);function Fb(t){return t===void 0||typeof t=="number"&&Number.isSafeInteger(t)&&t>=0}function Mb(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")?Fb(e.deadlineUnixMs)&&(e.signal===void 0||e.signal instanceof AbortSignal):!1}function yS(t){if(t!==void 0){if(!Mb(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 OS="semantic decision model is not installed in this foundation slice",qa=class{name="local-semantic-decision";async checkAvailability(){return{available:!1,reason:OS,capabilities:[]}}async score(e,r){return yS(r),{status:Hi.UNAVAILABLE,scores:[],unavailableCode:$s.MODEL_NOT_INSTALLED,unavailableReason:OS,schemaVersion:e.schemaVersion,requestId:e.requestId,featureSchemaVersion:e.featureSchemaVersion,evidence:{...e.evidence}}}};function kb(t=y){t.register(A.SemanticDecisionProvider,()=>new qa)}kb();y.register(A.HostEnvironment,()=>Object.freeze({...Gb.env}));import Yl from"process";import RM from"crypto";import{z as Tp}from"zod";var IS={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"},en={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 LS from"fs/promises";import CS from"path";async function De(t,e,r){let n=CS.join(t,he,Pr,e);await LS.mkdir(CS.dirname(n),{recursive:!0}),await LS.appendFile(n,JSON.stringify({ts:new Date().toISOString(),...r})+`
145
+ `,H)}async function Ri(t,e){await De(t,Yp,e)}async function NS(t,e){await Ri(t,{event:en.SUMMARY,...e})}async function PS(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 DS from"path";import{pathToFileURL as xb}from"url";async function yi(t,e,r){let n=t.getFirst();if(n)return n;let s=await e.getRemoteUrl(r)??xb(DS.resolve(r)).href;return t.getOrInsert({name:DS.basename(r),repoUrl:s})}async function Qa(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 Oi(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 Ns(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 Ii(t,e){if(e.length===0)return;let r=Ns(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 Xa(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&&Ii(e,o)})}function Ub(t){return JSON.stringify({byFile:t})}function Za(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){Object.keys(e).length!==0&&t.meta.set(S.META_KEY_CALL_RESOLUTION_STATS,Ub(e))}function el(t,e){Object.keys(e).length!==0&&vS(t,e)}function bS(t,e,r){let n=Za(t);for(let i of r)delete n[i];for(let[i,s]of Object.entries(e))n[i]=s;vS(t,n)}function wS(t){let e=Za(t);return{byFile:e,total:vr(e)}}async function FS(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 MS(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 kS(){return{success:!0,partialFailure:!1,message:Pe.ALREADY_INITIALIZED,filesRequested:0,filesParsed:0,filesFailed:0,failures:[],filesSkippedOversized:0,skippedExistingGraph:!0}}import Hb from"path";function ie(t){return Hb.join(t,he,$i)}import xS from"fs/promises";import Bb from"os";import Kb from"path";var tl={SNAPSHOTTING:"Packing knowledge graph snapshot...",DB_NOT_FOUND:'Local database not found. Please run "docuvia init".'},Li={START:"snapshot.start",ERROR:"snapshot.error",SUMMARY:"snapshot.summary",TIER_B_FINALIZED:"snapshot.tierB.finalized"},GS="docuvia-snapshot-";async function Ci(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 xS.mkdtemp(Kb.join(Bb.tmpdir(),GS));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 xS.rm(l,{recursive:!0,force:!0})}}var US=["SIGTERM","SIGINT"],rl=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 Ri(e,{event:en.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 PS(i,e,r),_)return r.info(Pe.ALREADY_INITIALIZED),await Ri(e,{event:en.ALREADY_INITIALIZED,workspaceRoot:e}),kS();let L=await yi(d.projects,n,e);r.info(Pe.SCANNING_WORKSPACE);let C=await Qa({configScanner:o,vcsScanner:a,fileDiscovery:s,filesRepo:d.files,workspaceRoot:e});r.info(Pe.PARSING_AST);let{parsedResults:F,failures:I,callResolutionByFile:$}=await Oi({astProcessor:l,graphPersister:c,store:d,workspaceRoot:e,projectId:L.id,filesToParse:C.filesToParse,skippedOversized:C.skippedOversized,tags:C.tags,appendLogLine:Ri,logEvents:{parseFailure:en.PARSE_FAILURE,fileSkippedOversized:en.FILE_SKIPPED_OVERSIZED}});r.info(Pe.PERSISTING_GRAPH),el(d,$??{}),await Xa({store:d,git:n,workspaceRoot:e,parsedResults:F}),r.info(Pe.SNAPSHOTTING_KNOWLEDGE_BRANCH);let Q=y.resolve(A.HydrationService,{logger:r});try{await Ci(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 Ri(e,{event:en.SNAPSHOT_AFTER_INIT_FAILED,message:M instanceof Error?M.message:String(M)})}r.info(Pe.INITIALIZING_TEMP_FILES);let z=await FS(u,e,r),te=Yb(z,r);try{let M=C.filesToParse.length,ne=F.length,pe=I.length,N=C.skippedOversized.length;(pe>0||N>0)&&r.warn(Pe.PARSE_FAILURES_OR_SKIPPED,{filesRequested:M,filesParsed:ne,filesFailed:pe,filesSkippedOversized:N});let Ae=MS({filesRequested:M,filesParsed:ne,filesFailed:pe,failures:I,filesSkippedOversized:N});return await NS(e,{filesRequested:M,filesParsed:ne,filesFailed:pe,failures:I,filesSkippedOversized:N}),Ae}finally{$b(z,te)}}finally{await d.close()}}};function $b(t,e){try{t?.stop()}finally{e()}}function Yb(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 US)process.on(n,r);return()=>{for(let n of US)process.removeListener(n,r)}}import HS from"fs/promises";var Fn={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}`},nl={START:"clean.start",SUMMARY:"clean.summary"};async function qd(t,e){await De(t,Wp,e)}async function Qd(t,e){await qd(t,{event:nl.SUMMARY,...e})}import Xd from"fs";import Ps from"path";function Ni(t,e){let r=Ps.resolve(e),n=Ps.resolve(t);return n===r||n.startsWith(`${r}${Ps.sep}`)}function il(t,e){let r=Ps.resolve(e),n=Ps.resolve(r,t);if(!Ni(n,r))return{status:"outside"};if(!Xd.existsSync(n))return{status:"missing"};try{let i=Xd.realpathSync(r),s=Xd.realpathSync(n);if(!Ni(s,i))return{status:"outside"}}catch{return{status:"missing"}}return{status:"ok",resolvedPath:n}}var sl=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(){let{workspaceRoot:e,logger:r}=this,n=ie(e);if(!Ni(n,e))throw new E(T.CLEAN_WORKFLOW_FAILED,Fn.PATH_ESCAPES_WORKSPACE(n,e));r.info(Fn.CLEANING(n)),await qd(e,{event:nl.START});let i=!0;try{await HS.access(n)}catch{i=!1}if(!i){let o={deleted:!1,message:Fn.NOT_FOUND};return await Qd(e,o),o}try{await HS.unlink(n)}catch(o){throw E.wrap(T.CLEAN_WORKFLOW_FAILED,Fn.DELETE_FAILED(n),o)}r.info(Fn.DELETED_AT(n));let s={deleted:!0,message:Fn.DELETED};return await Qd(e,s),s}};var ol={GETTING_STATUS:"Getting status...",DB_NOT_FOUND:'Local database not found. Please run "docuvia init".'},al={START:"status.start",ERROR:"status.error",SUMMARY:"status.summary"};async function ll(t,e){await De(t,jp,e)}var Wb="ensureHydrated: automatic hydration refused; local.db left untouched (see reason)";async function tn(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(Wb,{refusalReason:s.refusalReason})}}finally{await n.close()}}var Mn={COMMIT_MESSAGE:"commitMessage",CONTRACT_SYMBOL:"contractSymbol"};function ar(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(jb):[]}catch{return[]}}function jb(t){if(!t||typeof t!="object")return!1;let e=t;return(e.kind===Mn.COMMIT_MESSAGE||e.kind===Mn.CONTRACT_SYMBOL)&&typeof e.target=="string"&&typeof e.commitSha=="string"}function BS(t,e){if(e.length===0)return;let r=ar(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 KS(t,e){if(e.length===0)return;let r=new Set(e),n=ar(t).filter(i=>!r.has(i.target));t.meta.set(S.META_KEY_TIER_C_QUEUE,JSON.stringify(n))}function $S(t,e,r){let n=ar(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 cl=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(){let{workspaceRoot:e,logger:r}=this;r.info(ol.GETTING_STATUS),await ll(e,{event:al.START}),await tn(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,ol.DB_NOT_FOUND,s);throw await ll(e,{event:al.ERROR,message:ol.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:ar(i).length,graphFreshness:await this.resolveGraphFreshness(i)};return await ll(e,{event:al.SUMMARY,...c}),c}finally{await i.close()}}async resolveGraphFreshness(e){try{if(!y.has(A.GitProvider))return"unknown";let n=await y.resolve(A.GitProvider).getHeadSha(this.workspaceRoot);if(!n)return"unknown";let i=e.meta.get(S.META_KEY_LAST_INGESTED_SOURCE_SHA);return i?i===n?"fresh":"stale":"unknown"}catch{return"unknown"}}};var kn={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.`},Gn={START:"sync.start",ERROR:"sync.error",SUMMARY:"sync.summary"};async function xn(t,e){await De(t,Vp,e)}import ul from"fs/promises";import Zd from"path";function ep(t){return Zd.join(t,he,Pr,ng)}var Vb=1e4,zb=100,Jb=6e4,qb=".lock",Qb={TIMED_OUT_WAITING:t=>`Timed out waiting for the sync-state lock at ${t} \u2014 another docuvia publish may be stuck`};async function Xb(t,e){let r=`${t}${qb}`;await ul.mkdir(Zd.dirname(r),{recursive:!0});try{return await e(r,{maxWaitMs:Vb,retryIntervalMs:zb,staleAfterMs:Jb})}catch(n){throw n instanceof Js?E.wrap(T.DB_LOCKED,Qb.TIMED_OUT_WAITING(r),n):n}}async function YS(t,e,r){let n=await Xb(ep(t),e);try{return await r()}finally{await n.release()}}async function WS(t){try{let e=await ul.readFile(ep(t),H);return JSON.parse(e)}catch{return{}}}async function jS(t,e){let r=ep(t);await ul.mkdir(Zd.dirname(r),{recursive:!0}),await ul.writeFile(r,JSON.stringify(e,null,2),H)}var dl=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(kn.STARTING(i)),await xn(r,{event:Gn.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:kn.NOTHING_TO_SYNC};return await xn(r,{event:Gn.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 xn(r,{event:Gn.ERROR,projectId:i,message:kn.DB_NOT_FOUND}),new E(T.DB_NOT_FOUND,kn.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(F){let I=F instanceof Error?F.message:String(F);throw await xn(r,{event:Gn.ERROR,projectId:i,message:I}),F}let m=new Map(f.map(F=>[F.name,F.id])),_=u.graph.findNodesForChangedFiles(Array.from(l)),L=y.resolve(A.ProcessLock),C=await YS(r,L,async()=>{let F=await WS(r),I=F[i]??{syncedContentHashes:[]},$=new Set(I.syncedContentHashes),{events:Q,newlySyncedHashes:z,skippedL2Count:te}=this.buildSyncPushEvents(_,m,$);if(Q.length===0)return{synced:0,skipped:te,message:kn.NOTHING_NEW(te)};let M;try{M=await d.pushSyncEvents(i,Q)}catch(pe){let N=pe instanceof Error?pe.message:String(pe);throw await xn(r,{event:Gn.ERROR,projectId:i,message:N}),pe}I.syncedContentHashes=Array.from(new Set([...$,...z])),F[i]=I,await jS(r,F);let ne=M.processed??Q.length;return{synced:ne,skipped:te,message:kn.SYNCED(ne,te)}});return await xn(r,{event:Gn.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:Bp.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 yF from"fs";import OF 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"},VS=`You are an expert software architect reviewing source code directly (not commit history).
146
146
  Extract concrete implementation decisions, architectural rules, notable constraints, and rationale that are evident from the code itself \u2014 not speculative commentary.
147
147
  Return ONLY a valid JSON array. Each item:
148
148
  { "title": "concise title", "nodeType": "change" | "rule" | "decision" | "context", "content": "detailed explanation grounded in what the code actually does", "confidence": 0.0 to 1.0 }
@@ -162,40 +162,40 @@ Return ONLY a valid JSON array. Each item:
162
162
  If the code contains no decision-worthy content, return an empty array \u2014 do not fabricate entries.
163
163
  OUTPUT MUST BE VALID JSON ONLY. NO MARKDOWN WRAPPERS. DO NOT OUTPUT \`\`\`json.`,XS=(t,e,r)=>`Focus on the symbol \`${t}\` in the following file (\`${e}\`):
164
164
 
165
- ${r}`;async function V(t,e){await ve(t,$i,e)}import Di from"fs";import rp from"path";var Xb=40,Zb=2e5,ew=".git",tw=new Set([ct,ew,Ee]);function eT(t){let e=[],r=Di.readdirSync(t,{withFileTypes:!0});for(let n of r){if(n.isDirectory()&&tw.has(n.name))continue;let i=rp.join(t,n.name);n.isDirectory()?e.push(...eT(i)):n.isFile()&&e.push(i)}return e}function ZS(t,e){return t.startsWith(e+rp.sep)||t===e}function rw(t,e){try{return Di.realpathSync(t)}catch{return e.warn(J.FILE_READ_FAILED,{filePath:t,error:"Failed to resolve symlinks for file path"}),null}}function nw(t,e){try{return Di.readFileSync(t,H)}catch(r){return e.warn(J.FILE_READ_FAILED,{filePath:t,error:r instanceof Error?r.message:String(r)}),null}}function nn(t,e,r){let n=Di.realpathSync(e),i=Di.realpathSync(t);if(!ZS(i,n))return r.warn(J.FILE_READ_FAILED,{filePath:t,error:`Resolved path ${i} is outside workspace root ${n}`}),{files:[],droppedFiles:[]};let o=Di.statSync(t).isDirectory()?eT(t):[t],a=[],l=[],c=0;for(let u of o){if(!zs(u))continue;let p=rw(u,r);if(p===null||!ZS(p,n))continue;let d=rp.relative(e,u);if(a.length>=Xb){l.push(d);continue}let f=nw(u,r);if(f!==null){if(c+f.length>Zb){l.push(d);continue}c+=f.length,a.push({relativePath:d,content:f})}}return{files:a,droppedFiles:l}}async function vi(t){let{workspaceRoot:e,logger:r,store:n,git:i}=t;r.info(J.AUTO_FULL_INGESTION),await V(e,{event:Y.FULL_START});let 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.HydrationService,{logger:r}),p=y.resolve(A.KnowledgeGitService,{logger:r}),d=await Oi(n.projects,i,e),f=await Xa({configScanner:o,vcsScanner:a,fileDiscovery:s,filesRepo:n.files,workspaceRoot:e}),{parsedResults:m,failures:_,callResolutionByFile:L}=await Ii({astProcessor:l,graphPersister:c,store:n,workspaceRoot:e,projectId:d.id,filesToParse:f.filesToParse,skippedOversized:f.skippedOversized,tags:f.tags,appendLogLine:V,logEvents:{parseFailure:Y.FULL_PARSE_FAILURE,fileSkippedOversized:Y.FULL_FILE_SKIPPED_OVERSIZED}});if(Object.keys(L??{}).length>0){tl(n,L??{});let Q=br(L??{});await V(e,{event:Y.FULL_CALL_RESOLUTION,...Q,files:Object.keys(L??{}).length})}await Za({store:n,git:i,workspaceRoot:e,parsedResults:m});try{await Ni(e,n,p),await u.markSynced(e,n)}catch(Q){let z=Q instanceof Error?Q.message:String(Q);r.warn(J.SNAPSHOT_AFTER_FULL_INGESTION_FAILED,{error:z}),await V(e,{event:Y.FULL_SNAPSHOT_FAILED,message:z})}let C=f.filesToParse.length,F=m.length,I=_.length,$=f.skippedOversized.length;return await V(e,{event:Y.FULL_SUMMARY,projectType:f.projectType,filesRequested:C,filesParsed:F,filesFailed:I,filesSkippedOversized:$}),{kind:Te.AUTO_FULL_INGESTION,projectType:f.projectType,suggestedTags:Array.from(f.tags),filesRequested:C,filesParsed:F,filesFailed:I,filesSkippedOversized:$}}import fw from"crypto";function tT(t){return t.meta.get(S.META_KEY_NODE_KEY_FORMAT_VERSION)!=="2"}import iw from"path";function Mt(t){return t.replace(/\\/g,"/")}function rT(t,e,r,n){let i=Mt(iw.relative(e,r)),s=t.graph.findNodeIdByNodeKey(i);if(s!==void 0)return s;for(let o of n){let a=t.graph.findNodeIdByNodeKey(Mt(o.relativePath));if(a!==void 0)return a}}var sw=new Set(["chore","style","ci","build","docs","test"]),ow=10,aw=/^(wip|fixup!|squash!|typo|lint|format|merge branch)/i,lw=/^([A-Za-z]+)(\([^)]*\))?!?:\s*(.*)$/;function cw(t){return t.split(`
166
- `)[0]?.trim()??""}function uw(t,e){let r=t?.[1]?.toLowerCase();return!!(r&&e.has(r))}function dw(t,e){return(e?e[3]:t).trim()}function nT(t,e={}){let r=e.denylistTypes??sw,n=e.minSubjectLength??ow,i=cw(t);if(aw.test(i))return!1;let s=i.match(lw);return uw(s,r)?!1:dw(i,s).length>=n}var pw=1,gw=500;async function iT(t,e,r,n,i){let s=await t.getCommitLog(e,n,gw),o=[];for(let{sha:a,message:l}of s){if(a===r)break;nT(l,i)&&o.push({kind:kn.COMMIT_MESSAGE,target:a,commitSha:a,message:l})}return o}function sT(t,e,r){return r.filter(n=>n.pruningLevel===pw).map(n=>({kind:kn.CONTRACT_SYMBOL,target:`${Mt(t)}#${n.nodeId}`,commitSha:e,file:t}))}async function np(t){let{workspaceRoot:e,logger:r,store:n,git:i,knowledgeGit:s,projectId:o,fromSha:a,headSha:l}=t;if(tT(n))return r.info(J.NODE_KEY_FORMAT_STALE),await V(e,{event:Y.DELTA_NODE_KEY_FORMAT_STALE}),vi({workspaceRoot:e,logger:r,store:n,git:i});if(!await i.isAncestor(e,a,l))return r.info(J.HEAD_NOT_DESCENDANT_OF_LAST_INGESTED),await V(e,{event:Y.DELTA_HEAD_NOT_DESCENDANT,fromSha:a,headSha:l}),vi({workspaceRoot:e,logger:r,store:n,git:i});r.info(J.AUTO_DELTA_INGESTION),await V(e,{event:Y.DELTA_START,fromSha:a,headSha:l});let c=await i.getChangedFilesSince(e,a,l),{toDelete:u,toReparse:p}=mw(c),{filesToParse:d,skippedOversized:f,tierBEntries:m,tierCSymbolEntries:_,changedBytes:L}=await hw(t,p),F=[...await iT(i,e,a,l),..._],I=[];await s.runUnderKnowledgeLock(e,async()=>{I=await _w(t,{toDelete:u,filesToParse:d,tierBEntries:m,tierCEntries:F,changedBytes:L})});let $=d.length-I.length;return await V(e,{event:Y.DELTA_SUMMARY,fromSha:a,headSha:l,filesReparsed:$,filesDeleted:u.size,filesFailed:I.length,filesSkippedOversized:f.length,tierBQueued:m.length,tierCQueued:F.length}),{kind:Te.AUTO_DELTA,fromSha:a,headSha:l,filesReparsed:$,filesDeleted:u.size,filesFailed:I.length,filesSkippedOversized:f.length,tierBQueued:m.length,tierCQueued:F.length}}function mw(t){let e=new Set,r=[];for(let n of t){if(n.status===Ct.DELETED){e.add(n.file);continue}n.status===Ct.RENAMED&&n.oldFile&&e.add(n.oldFile),Yn(n.file)&&r.push(n)}return{toDelete:e,toReparse:r}}async function hw(t,e){let{workspaceRoot:r,logger:n,git:i,headSha:s}=t,o=await i.listTrackedFilesWithBlobHash(r),a=y.resolve(A.SemanticDiffAnalyzer,{logger:n}),l=[],c=[],u=[],p=[],d=0;for(let f of e){let m=await i.readFileAtRef(r,s,f.file);if(m===void 0)continue;let _=Buffer.byteLength(m,H);if(_>512e3){c.push({file:f.file,sizeBytes:_}),await V(r,{event:Y.DELTA_FILE_SKIPPED_OVERSIZED,file:f.file,sizeBytes:_});continue}let L=o.get(f.file)??fw.createHash(Zt).update(m).digest("hex");l.push({file:f.file,hash:L,code:m}),d+=_;let{contractChanged:C,findings:F}=await Ew(t,a,f,m);C&&(u.push({file:f.file,commitSha:s}),p.push(...sT(f.file,s,F)))}return{filesToParse:l,skippedOversized:c,tierBEntries:u,tierCSymbolEntries:p,changedBytes:d}}async function Ew(t,e,r,n){let{workspaceRoot:i,git:s,fromSha:o,headSha:a}=t;if(r.status!==Ct.MODIFIED&&r.status!==Ct.ADDED)return{contractChanged:!1,findings:[]};let l=r.status===Ct.ADDED?"":await s.readFileAtRef(i,o,r.file);if(l===void 0)return{contractChanged:!1,findings:[]};let c=await s.getChangedLineRanges(i,o,a,r.file);if(c.length===0)return{contractChanged:!1,findings:[]};let u=await e.analyzeFile({filePath:r.file,oldContent:l,newContent:n,changedLineRanges:c});return{contractChanged:u.some(p=>p.pruningLevel===1),findings:u}}async function _w(t,e){let{workspaceRoot:r,logger:n,store:i,projectId:s,headSha:o}=t,{toDelete:a,filesToParse:l,tierBEntries:c,tierCEntries:u,changedBytes:p}=e;a.size>0&&await i.withWriteLock(()=>{for(let m of a)i.graph.deleteNodesForPath(m)});let d=[],f;if(l.length>0){let m=y.resolve(A.AstProcessor,{logger:n}),_=y.resolve(A.GraphPersister),L=await Ii({astProcessor:m,graphPersister:_,store:i,workspaceRoot:r,projectId:s,filesToParse:l,skippedOversized:[],tags:new Set,appendLogLine:V,logEvents:{parseFailure:Y.DELTA_PARSE_FAILURE,fileSkippedOversized:Y.DELTA_FILE_SKIPPED_OVERSIZED}});d=L.failures,f=L.callResolutionByFile}if(f&&Object.keys(f).length>0){bS(i,f,a);let m=br(f);await V(r,{event:Y.DELTA_CALL_RESOLUTION,...m,files:Object.keys(f).length})}return await i.withWriteLock(()=>{if(c.length>0&&Li(i,c),u.length>0&&BS(i,u),p>0){let m=Number(i.meta.get(S.META_KEY_TIER_B_CHANGED_BYTES)??0);i.meta.set(S.META_KEY_TIER_B_CHANGED_BYTES,String(m+p))}i.meta.set(S.META_KEY_LAST_INGESTED_SOURCE_SHA,o)}),d}import Qw from"fs";import Xw from"path";async function oT(t){let{workspaceRoot:e,store:r,git:n}=t,i=await n.getHeadSha(e);if(!i)return{filesQueued:0};let o=r.files.getAllHashes().map(a=>({file:a.filePath,commitSha:i}));return await r.withWriteLock(()=>{Li(r,o)}),{filesQueued:o.length}}import Sw from"path";var Tw={".ts":B.TYPESCRIPT,".tsx":B.TYPESCRIPT,".mts":B.TYPESCRIPT,".cts":B.TYPESCRIPT,".js":B.TYPESCRIPT,".jsx":B.TYPESCRIPT,".mjs":B.TYPESCRIPT,".cjs":B.TYPESCRIPT,".py":B.PYTHON,".go":B.GO,".rs":B.RUST,".c":B.CPP,".h":B.CPP,".cpp":B.CPP,".cxx":B.CPP,".cc":B.CPP,".hpp":B.CPP,".hxx":B.CPP,".hh":B.CPP,".cu":B.CPP,".cuh":B.CPP,".java":B.JAVA,".cs":B.CSHARP,".php":B.PHP,".phtml":B.PHP,".php3":B.PHP,".php4":B.PHP,".php5":B.PHP,".phps":B.PHP,".rb":B.RUBY,".rake":B.RUBY,".gemspec":B.RUBY};function ip(t){return Tw[Sw.extname(t)]}function aT(t){let e={},r=[];for(let n of t){let i=ip(n.file);if(!i){r.push(n);continue}(e[i]??=[]).push(n)}return{buckets:e,unsupported:r}}function bi(t,e=S.DEFAULT_TIER_B_COMMIT_CAP_BYTES){return Number(t.meta.get(S.META_KEY_TIER_B_CHANGED_BYTES)??0)>=e}var Aw=Object.values(dn),lT="```";function cT(t){let e=t.trim();if(!e.startsWith(lT)||!e.endsWith(lT))return t;let r=e.indexOf(`
167
- `);if(r===-1)return t;let n=e.slice(0,r);if(!/^```[A-Za-z0-9_-]*$/.test(n))return t;let i=e.slice(r+1);return i.slice(0,i.length-3).trim()}function gl(t){if(t==null)return;let e;try{e=JSON.parse(cT(t))}catch{return}if(Array.isArray(e))return e.map(r=>({title:String(r?.title??""),nodeType:Aw.includes(r?.nodeType)?r.nodeType:dn.CONTEXT,content:String(r?.content??""),confidence:typeof r?.confidence=="number"?r.confidence:0}))}function Rw(){return new Date().toISOString().slice(0,10)}function fl(t){return{date:t,calls:0,tokens:0}}function uT(t){let e=Rw(),r=t.meta.get(S.META_KEY_TIER_C_BUDGET);if(!r)return fl(e);try{let n=JSON.parse(r);return!n||typeof n.date!="string"||typeof n.calls!="number"||typeof n.tokens!="number"||n.date!==e?fl(e):n}catch{return fl(e)}}function dT(t,e){t.meta.set(S.META_KEY_TIER_C_BUDGET,JSON.stringify(e))}function sp(t,e,r){return t.calls>=e||t.tokens>=r}function pT(t){return Math.ceil(t.length/4)}import gT from"os";import yw from"fs/promises";import fT from"path";var Ow=200,Iw=5e3,Lw=3e4;async function mT(t){let e=fT.join(t,Ee,ng);try{return await yw.mkdir(fT.dirname(e),{recursive:!0}),await y.resolve(A.ProcessLock)(e,{maxWaitMs:Ow,retryIntervalMs:50,heartbeatIntervalMs:Iw,staleAfterMs:Lw})}catch{return}}function hT(t=S.DEFAULT_TIER_C_LOAD_THRESHOLD){if(process.platform==="win32")return{ok:!0,note:"os.loadavg() returns zeros on Windows -- system-load check is a documented no-op here"};let e=gT.cpus().length||1,r=gT.loadavg()[0]/e;return r>t?{ok:!1,note:`load ratio ${r.toFixed(2)} exceeds threshold ${t}`}:{ok:!0}}var bs={LLM_NOT_CONFIGURED:"llm-not-configured",LOCK_CONTENDED:"lock-contended",BUDGET_EXHAUSTED:"budget-exhausted",LOAD_HIGH:"load-high"},Or={NO_ANCHOR:"no-anchor",BRIDGE_UNREACHABLE:"bridge-unreachable",RATE_LIMITED:"rate-limited",AUTH_FAILED:"auth-failed",LLM_NON_JSON_OUTPUT:"llm-non-json-output",MISSING_FILE:"missing-file",FILE_UNREADABLE:"file-unreadable"};function op(t){return{tierCQueued:t.queued,tierCProcessed:t.processed,tierCPersisted:t.persisted,tierCDeduped:t.deduped,tierCFailed:t.failed,tierCSkipped:t.skipped,tierCSkippedReason:t.reason}}async function vs(t,e,r){return t.logger.info(J.TIER_C_SKIPPED(r)),await V(t.workspaceRoot,{event:Y.TIER_C_SKIPPED,reason:r,queued:e}),op({queued:e,processed:0,persisted:0,deduped:0,failed:0,skipped:!0,reason:r})}async function Cw(t,e,r){let n=!1,i=null;try{let s=y.resolve(A.KnowledgeGitService,{logger:t.logger});i=await t.git.getHeadSha(r)??null,n=!!(i&&typeof s.hasSourceCommitInHistory=="function"&&await s.hasSourceCommitInHistory(r,i))}catch{}return!!(n&&e.l3.getAllExportable().some(o=>o.commit_hash===i)&&!t.force)}async function ET(t){let{workspaceRoot:e,store:r}=t,n=lr(r);if(await V(e,{event:Y.TIER_C_START,queued:n.length}),n.length===0)return await V(e,{event:Y.TIER_C_EMPTY_QUEUE}),op({queued:0,processed:0,persisted:0,deduped:0,failed:0,skipped:!1});if(await Cw(t,r,e))return await vs(t,n.length,"already-snapshotted-with-tier-c");if(!t.llmBaseUrl||!t.llmModel)return await vs(t,n.length,bs.LLM_NOT_CONFIGURED);let s=await mT(e);if(!s)return await vs(t,n.length,bs.LOCK_CONTENDED);try{return await Nw(t,n)}finally{await s.release()}}async function Nw(t,e){let{workspaceRoot:r,store:n}=t,i=t.dailyCallCap??S.DEFAULT_TIER_C_DAILY_CALL_CAP,s=t.dailyTokenCap??S.DEFAULT_TIER_C_DAILY_TOKEN_CAP,o=uT(n);if(sp(o,i,s))return await vs(t,e.length,bs.BUDGET_EXHAUSTED);let a=hT(t.loadThreshold);return a.note&&await V(r,{event:Y.TIER_C_LOAD_NOTE,note:a.note}),a.ok?await Dw(t,e,o,i,s):await vs(t,e.length,bs.LOAD_HIGH)}function sn(t){return{success:!1,reason:t,persistedCount:0,dedupedCount:0,tokensUsed:0,callsUsed:0}}function Pw(t){return t.drainAll?{wallClockMs:Number.POSITIVE_INFINITY,itemCap:Number.POSITIVE_INFINITY}:{wallClockMs:t.wallClockMs??S.DEFAULT_TIER_C_WALL_CLOCK_MS,itemCap:t.itemCap??S.DEFAULT_TIER_C_ITEM_CAP}}async function Dw(t,e,r,n,i){let{store:s,workspaceRoot:o,logger:a}=t,{wallClockMs:l,itemCap:c}=Pw(t),u=Date.now()+l,d=y.resolve(A.LlmClient)();d.initialize({baseUrl:t.llmBaseUrl,apiKey:t.llmApiKey});let f=r,m={processed:0,persisted:0,deduped:0,failed:0};for(let _ of e){if(m.processed+m.failed>=c||Date.now()>=u)break;if(sp(f,n,i)){await V(o,{event:Y.TIER_C_SKIPPED,reason:bs.BUDGET_EXHAUSTED,queued:e.length,midRun:!0});break}let L=await Uw(t,d,_);if(f=await vw(s,f,L),await bw(t,_,L,m))break}return await V(o,{event:Y.TIER_C_SUMMARY,queued:e.length,...m}),a.info(J.TIER_C_SUMMARY(m.processed,m.persisted)),m.processed>0&&await s.withWriteLock(()=>{s.meta.set("tierCProcessedThisRun","true")}),op({queued:e.length,...m,skipped:!1})}async function vw(t,e,r){if(r.callsUsed===0&&r.tokensUsed===0)return e;let n={date:e.date,calls:e.calls+r.callsUsed,tokens:e.tokens+r.tokensUsed};return await t.withWriteLock(()=>dT(t,n)),n}async function bw(t,e,r,n){let{store:i,workspaceRoot:s}=t;if(r.success)return n.processed++,n.persisted+=r.persistedCount,n.deduped+=r.dedupedCount,await i.withWriteLock(()=>KS(i,[e.target])),await V(s,{event:Y.TIER_C_ITEM_SUCCESS,kind:e.kind,target:e.target,persisted:r.persistedCount,deduped:r.dedupedCount}),!1;n.failed++,await V(s,{event:Y.TIER_C_ITEM_FAILED,kind:e.kind,target:e.target,reason:r.reason});let o=t.itemFailureCap??S.DEFAULT_TIER_C_MAX_ITEM_FAILURES,{evicted:a,failCount:l}=await i.withWriteLock(()=>$S(i,e.target,o));return a&&(t.logger.warn(J.TIER_C_ITEM_EVICTED(e.kind,e.target,l)),await V(s,{event:Y.TIER_C_ITEM_EVICTED,kind:e.kind,target:e.target,failCount:l,reason:r.reason})),!1}function ww(t){return t instanceof E&&t.code===T.LLM_CHAT_COMPLETION_FAILED}function Fw(t){return t instanceof E&&t.code===T.LLM_RATE_LIMITED}function Mw(t){return t instanceof E&&t.code===T.LLM_AUTH_FAILED}function _T(t){return Fw(t)?Or.RATE_LIMITED:Mw(t)?Or.AUTH_FAILED:ww(t)?Or.BRIDGE_UNREACHABLE:kw(t)}function kw(t){return t instanceof Error?t.message:String(t)}function Gw(t){return t.replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F]/g,"").slice(0,JS)}async function ST(t,e,r,n){let s=(await t.chatCompletion({model:e,temperature:.2,messages:[{role:Xt.SYSTEM,content:r},{role:Xt.USER,content:n}]})).choices[0]?.message.content,o=gl(s),a=pT(r+n+(s??""));return{decisions:o,tokensUsed:a}}function xw(t,e){for(let r of e){let n=t.graph.findNodeIdByNodeKey(Mt(r));if(n!==void 0)return n}}function TT(t,e,r,n,i){let{store:s,llmModel:o}=t,a=s.projects.getFirst();if(!a)return{persisted:0,deduped:0};let l=r.map(Mt),c=0,u=0;for(let p of i)s.l3.upsertDecision({projectId:a.id,l2NodeId:e,title:p.title,content:p.content,nodeType:p.nodeType,confidence:p.confidence,commitSha:n,extractionModel:o??null,sourceFiles:l}).deduped?u++:c++;return{persisted:c,deduped:u}}async function Uw(t,e,r){return r.kind===kn.COMMIT_MESSAGE?Hw(t,e,r):Bw(t,e,r)}async function Hw(t,e,r){let{git:n,workspaceRoot:i,store:s,llmModel:o}=t,a=await n.getFilesChangedByCommit(i,r.commitSha),l=xw(s,a);if(l===void 0)return sn(Or.NO_ANCHOR);let c;try{c=await ST(e,o,zS,qS(Gw(r.message??"")))}catch(d){return{...sn(_T(d)),callsUsed:1}}if(c.decisions===void 0)return{...sn(Or.LLM_NON_JSON_OUTPUT),tokensUsed:c.tokensUsed,callsUsed:1};let{persisted:u,deduped:p}=TT(t,l,a,r.commitSha,c.decisions);return{success:!0,persistedCount:u,dedupedCount:p,tokensUsed:c.tokensUsed,callsUsed:1}}async function Bw(t,e,r){let{git:n,workspaceRoot:i,store:s,llmModel:o}=t,a=r.file;if(!a)return sn(Or.MISSING_FILE);let l=s.graph.findNodeIdByNodeKey(r.target)??s.graph.findNodeIdByNodeKey(Mt(a));if(l===void 0)return sn(Or.NO_ANCHOR);let c=await n.readFileAtRef(i,S.HEAD_REF,a);if(c===void 0)return sn(Or.FILE_UNREADABLE);let u=r.target.slice(r.target.indexOf("#")+1),p=XS(u,a,c),d;try{d=await ST(e,o,QS,p)}catch(_){return{...sn(_T(_)),callsUsed:1}}if(d.decisions===void 0)return{...sn(Or.LLM_NON_JSON_OUTPUT),tokensUsed:d.tokensUsed,callsUsed:1};let{persisted:f,deduped:m}=TT(t,l,[a],r.commitSha,d.decisions);return{success:!0,persistedCount:f,dedupedCount:m,tokensUsed:d.tokensUsed,callsUsed:1}}import Kw from"path";import $w from"crypto";import Yw from"fs/promises";function Ww(t,e,r,n){for(let i of t.edges)e.push(i);for(let i of t.filesProcessed)r.push(i);for(let i of t.filesFailed)n.push(i)}function jw(t,e){let r=new Set(e.map(a=>a.languageId)),n=Object.keys(t).filter(a=>(t[a]?.length??0)>0),i=n.length>0&&n.every(a=>r.has(a)),s=e.length>0&&!i;return s||e.length===0?{unavailableReason:void 0,fullyDegraded:i,strayLanguageDegraded:s}:{unavailableReason:e.length===1?e[0].reason:e.map(a=>`${a.languageId}: ${a.reason}`).join("; "),fullyDegraded:i,strayLanguageDegraded:s}}async function AT(t,e){let{workspaceRoot:r,logger:n,providerConfig:i,store:s,git:o}=e,a=y.resolve(A.EdgeResolutionProviders,{logger:n}),l=[],c=[],u=[],p=[];for(let _ of Object.keys(t)){let L=t[_];if(!L||L.length===0)continue;let C=a[_];if(!C){p.push({languageId:_,reason:`no LSP provider registered for language "${_}"`});continue}let F=C();i&&F.configure(i);let I=_===B.TYPESCRIPT?await qw(s,o,r,L,n):void 0,$=await F.resolveEdges({workspaceRoot:r,files:L.map(Q=>Q.file),callsByFile:I});Ww($,l,c,u),$.unavailableReason&&p.push({languageId:_,reason:$.unavailableReason})}let{unavailableReason:d,fullyDegraded:f,strayLanguageDegraded:m}=jw(t,p);return{edges:l,filesProcessed:c,filesFailed:u,unavailableReason:d,degradedLanguages:p,fullyDegraded:f,strayLanguageDegraded:m}}function Vw(t){return t.split("\\").join("/")}async function zw(t,e,r,n){let i=Vw(e);if(!r.has(i)&&n.has(i))return n.get(i);try{let s=await Yw.readFile(Kw.join(t,e),H);return $w.createHash(Zt).update(s).digest("hex")}catch{return}}async function Jw(t,e){try{let[r,n,i]=await Promise.all([t.listTrackedFilesWithBlobHash(e),t.listUntrackedFiles(e),t.listModifiedFiles(e)]);return{dirtyFiles:new Set([...n,...i]),blobHashes:r}}catch{return{dirtyFiles:new Set,blobHashes:new Map}}}async function qw(t,e,r,n,i){let s=t.projects.getFirst();if(!s)return;let o=n.map(_=>_.file),a=t.callSites.getForFiles(s.id,o),l=o.length;if(a.size===0){i.info(J.TIER_B_FORWARD_SEEDED(B.TYPESCRIPT,0,l,0)),await V(r,{event:Y.TIER_B_FORWARD_SEEDED,languageId:B.TYPESCRIPT,seeded:0,total:l,staleSkipped:0});return}let c=new Map(t.files.getAllHashes().map(_=>[_.filePath,_.contentHash])),{dirtyFiles:u,blobHashes:p}=await Jw(e,r),d={},f=0,m=0;for(let _ of o){let L=a.get(_);if(!L||L.length===0)continue;let C=c.get(_),F=await zw(r,_,u,p);if(!C||!F||C!==F){m++;continue}d[_]=L,f++}return i.info(J.TIER_B_FORWARD_SEEDED(B.TYPESCRIPT,f,l,m)),await V(r,{event:Y.TIER_B_FORWARD_SEEDED,languageId:B.TYPESCRIPT,seeded:f,total:l,staleSkipped:m}),f>0?d:void 0}var ap=50;async function yT(t){let e=await Zw(t),r=await ET({workspaceRoot:t.workspaceRoot,logger:t.logger,store:t.store,git:t.git,llmBaseUrl:t.llmBaseUrl,llmApiKey:t.llmApiKey,llmModel:t.llmModel,dailyCallCap:t.tierCDailyCallCap,dailyTokenCap:t.tierCDailyTokenCap,wallClockMs:t.tierCWallClockMs,itemCap:t.tierCItemCap,loadThreshold:t.tierCLoadThreshold,force:t.force,drainAll:t.tierCDrainAll});return{...e,...r}}async function Zw(t){let{workspaceRoot:e,logger:r,store:n,git:i,knowledgeGit:s}=t;r.info(J.TIER_B_STARTING),await V(e,{event:Y.TIER_B_START});let o=await i.getHeadSha(e)??null,a=bi(n,t.commitCap);if(t.full){let{filesQueued:z}=await oT({workspaceRoot:e,store:n,git:i});r.info(J.TIER_B_FULL_RESYNC_QUEUED(z)),await V(e,{event:Y.TIER_B_FULL_RESYNC_QUEUED,filesQueued:z})}let l=Ps(n);if(l.length===0)return r.info(J.TIER_B_EMPTY_QUEUE),await V(e,{event:Y.TIER_B_EMPTY_QUEUE}),rF(o,a);let{buckets:c,toProcess:u,droppedDeleted:p,skippedLanguage:d}=await nF(t,l);if(await oF(e,p,d),u.length===0)return await RT(t,{headSha:o,commitCapExceeded:a,queued:l.length,droppedDeleted:p.length,skippedLanguage:d.length,outcome:{edges:[],filesProcessed:[],filesFailed:[],degradedLanguages:[],fullyDegraded:!1,strayLanguageDegraded:!1},failedEntries:[],permanentFailed:[],skippedNotApplicable:[],edgesApplied:0,edgesPruned:0});let f=await aF(t,c);await iF(e,f.filesFailed),f.unavailableReason&&(await V(e,{event:Y.TIER_B_DEGRADED,level:ap,reason:f.unavailableReason,degradedLanguages:f.degradedLanguages}),r.info(J.TIER_B_DEGRADED(f.unavailableReason)));let{edgesApplied:m,edgesPruned:_}=await lF(t,f,o),L=new Set(f.filesProcessed),{failedEntries:C,permanentFailed:F,skippedNotApplicable:I}=sF(u,L,f.filesFailed),$=L.size>0||m>0||I.length>0,Q=eF(n,u,f,$,C,F,tF(c,f));return await RT(t,{headSha:o,commitCapExceeded:a,queued:l.length,droppedDeleted:p.length,skippedLanguage:d.length,outcome:f,failedEntries:C,permanentFailed:F,skippedNotApplicable:I,edgesApplied:m,edgesPruned:_,zeroProgressWatchdogTripped:Q,degradedReason:f.unavailableReason})}function eF(t,e,r,n,i,s,o){let a=S.META_KEY_TIER_B_ZERO_PROGRESS_BATCHES,l=t.meta.get(a),c=l&&parseInt(l,10)||0;if(e.length===0)return!1;if(n)return t.meta.set(a,"0"),!1;if(r.fullyDegraded)return!1;let u=i.filter(d=>!o.has(d.file));if(u.length===0)return!1;let p=c+1;if(p<S.DEFAULT_TIER_B_ZERO_PROGRESS_MAX_BATCHES)return t.meta.set(a,String(p)),!1;for(let d of u){s.push(d);let f=i.indexOf(d);f>=0&&i.splice(f,1)}return t.meta.set(a,"0"),!0}function tF(t,e){let r=new Set;if(e.degradedLanguages.length===0)return r;let n=new Set(e.degradedLanguages.map(i=>i.languageId));for(let[i,s]of Object.entries(t))if(!(!s||s.length===0||!n.has(i)))for(let o of s)r.add(o.file);return r}function rF(t,e){return{kind:Te.TIER_B_BATCH,headSha:t,filesQueued:0,filesDroppedDeleted:0,filesSkippedLanguage:0,filesSkippedNotApplicable:0,filesProcessed:0,filesFailed:0,filesFailedPermanent:0,edgesApplied:0,edgesPruned:0,degraded:!1,commitCapExceeded:e}}async function nF(t,e){let{workspaceRoot:r}=t,n=[],i=[];for(let a of e)Qw.existsSync(Xw.join(r,a.file))?n.push(a):i.push(a);let{buckets:s,unsupported:o}=aT(n);return{buckets:s,toProcess:Object.values(s).flatMap(a=>a??[]),droppedDeleted:i,skippedLanguage:o}}async function iF(t,e){for(let r of e)await V(t,{event:r.notApplicable?Y.TIER_B_FILE_SKIPPED_NOT_APPLICABLE:Y.TIER_B_FILE_FAILED,...r.notApplicable?{}:{level:ap},file:r.file,reason:r.reason,retryable:r.retryable})}function sF(t,e,r){let n=new Map(r.map(a=>[a.file,a])),i=[],s=[];return{failedEntries:t.filter(a=>{if(e.has(a.file))return!1;let l=n.get(a.file);return l?.notApplicable?(s.push(a),!1):l?.retryable===!1?(i.push(a),!1):!0}),permanentFailed:i,skippedNotApplicable:s}}async function oF(t,e,r){for(let n of e)await V(t,{event:Y.TIER_B_FILE_DROPPED_DELETED,file:n.file});for(let n of r)await V(t,{event:Y.TIER_B_FILE_SKIPPED_LANGUAGE,file:n.file})}async function aF(t,e){let{workspaceRoot:r,logger:n,providerConfig:i,store:s,git:o}=t;return AT(e,{workspaceRoot:r,logger:n,providerConfig:i,store:s,git:o})}async function lF(t,e,r){let{store:n,knowledgeGit:i,workspaceRoot:s}=t,o=0,a=0;return await i.runUnderKnowledgeLock(s,async()=>{await n.withWriteLock(()=>{let l=new Set(n.graph.getAllLinks().map(u=>`${u.source_node_id}->${u.target_node_id}->${u.link_type}`));for(let u of e.edges){let p=n.graph.findNodeIdByNodeKey(u.sourceNodeKey),d=n.graph.findNodeIdByNodeKey(u.targetNodeKey);if(p===void 0||d===void 0)continue;let f=`${p}->${d}->${de.CALLS}`;l.has(f)||(l.add(f),n.graph.insertLink({sourceNodeId:p,targetNodeId:d,linkType:de.CALLS}),o++)}a=n.graph.pruneOrphanedLinks();let c=n.projects.getFirst();if(c)for(let u of e.filesProcessed)n.files.markTierBProcessed({projectId:c.id,filePath:u,commitSha:r})})}),{edgesApplied:o,edgesPruned:a}}async function RT(t,e){let{workspaceRoot:r,logger:n,store:i,knowledgeGit:s}=t,{headSha:o,outcome:a,failedEntries:l,permanentFailed:c,skippedNotApplicable:u}=e,p=[...c,...u];if(o&&p.length>0){let f=i.projects.getFirst();if(f)for(let m of p)i.files.markTierBProcessed({projectId:f.id,filePath:m.file,commitSha:o})}if(o){let f={headSha:o,remainingQueue:l};await s.runUnderKnowledgeLock(r,async()=>{await i.withWriteLock(()=>{i.meta.set(S.META_KEY_TIER_B_BATCH_PENDING,JSON.stringify(f))})})}let d=a.filesProcessed.length;return await V(r,{event:Y.TIER_B_SUMMARY,...a.unavailableReason?{level:ap}:{},headSha:o,filesQueued:e.queued,filesDroppedDeleted:e.droppedDeleted,filesSkippedLanguage:e.skippedLanguage,filesSkippedNotApplicable:u.length,filesProcessed:d,filesFailed:l.length,filesFailedPermanent:c.length,edgesApplied:e.edgesApplied,edgesPruned:e.edgesPruned,degraded:!!a.unavailableReason,degradedLanguages:a.degradedLanguages,strayLanguageDegraded:a.strayLanguageDegraded,fullyDegraded:a.fullyDegraded,zeroProgressWatchdogTripped:e.zeroProgressWatchdogTripped,commitCapExceeded:e.commitCapExceeded}),n.info(J.TIER_B_SUMMARY(d,e.edgesApplied,c.length,u.length)),{kind:Te.TIER_B_BATCH,headSha:o,filesQueued:e.queued,filesDroppedDeleted:e.droppedDeleted,filesSkippedLanguage:e.skippedLanguage,filesSkippedNotApplicable:u.length,filesProcessed:d,filesFailed:l.length,filesFailedPermanent:c.length,edgesApplied:e.edgesApplied,edgesPruned:e.edgesPruned,degraded:!!a.unavailableReason,degradedReason:e.degradedReason,degradedLanguages:a.degradedLanguages.length>0?a.degradedLanguages:void 0,strayLanguageDegraded:a.strayLanguageDegraded,fullyDegraded:a.fullyDegraded,zeroProgressWatchdogTripped:e.zeroProgressWatchdogTripped,commitCapExceeded:e.commitCapExceeded}}function OT(t){return t.trim().replace(/\s+/g," ").toLowerCase()}function IT(t){return(t??"").trim().replace(/\s+/g," ")}function LT(t,e){let r=t.filter(i=>i.validity_status!==ur.GARBAGE),n=[];for(let i of e){let s=OT(i.title),o=IT(i.content);for(let a of r)OT(a.title)===s&&IT(a.content)!==o&&n.push({stagedTitle:i.title,existingId:a.id,existingTitle:a.title,existingSource:a.source,existingCommitHash:a.commit_hash})}return n}async function CT(t){let{git:e,workspaceRoot:r,commitSha:n,sourceFiles:i}=t;if(!n||i.length===0)return null;let s=`${n}^`,o=[];for(let a of i){let l=await e.getChangedLineRanges(r,s,n,a);for(let c of l)o.push({path:a,startRow:c.startRow,endRow:c.endRow})}return o}async function wi(t){let{workspaceRoot:e,logger:r,resolvedTargetPath:n,files:i,decisions:s,source:o,extractionModel:a,commitSha:l}=t;if(s.length===0)return{persisted:0,deduped:0,noGraphToAttach:!1};let c=await uF(e,r);if(c===null)return{persisted:0,deduped:0,noGraphToAttach:!0};try{let u=c.projects.getFirst();if(!u)return await lp(e,r),{persisted:0,deduped:0,noGraphToAttach:!0};let p=rT(c,e,n,i);if(p===void 0)return await lp(e,r),{persisted:0,deduped:0,noGraphToAttach:!0};t.writerEnhancements?.warnOnAnchorContradictions&&cF(c.l3.getByL2NodeId(p),s,r);let d=await dF({workspaceRoot:e,store:c,projectId:u.id,anchorL2NodeId:p,files:i,decisions:s,source:o,extractionModel:a,commitSha:l,captureAnchorRanges:t.writerEnhancements?.captureAnchorRanges===!0});return await V(e,{event:Y.FOCUSED_PERSISTED,persisted:d.persisted,deduped:d.deduped}),{...d,noGraphToAttach:!1}}finally{await c.close()}}function cF(t,e,r){for(let n of LT(t,e))r.warn(J.L3_ANCHOR_CONTRADICTION(n.stagedTitle,n.existingSource,n.existingCommitHash),{stagedTitle:n.stagedTitle,existingId:n.existingId,existingTitle:n.existingTitle,existingSource:n.existingSource,existingCommitHash:n.existingCommitHash})}async function uF(t,e){let r=y.resolve(A.GraphStoreOpener);try{return await r({dbPath:ie(t),readonly:!1})}catch(n){if(n instanceof E&&n.code===T.DB_OPEN_FAILED)return await lp(t,e),null;throw n}}async function dF(t){let{workspaceRoot:e,store:r,projectId:n,anchorL2NodeId:i,files:s,decisions:o,source:a,extractionModel:l}=t,c=t.commitSha??await y.resolve(A.GitProvider).getHeadSha(e)??null,u=s.map(m=>Mt(m.relativePath)),p=t.captureAnchorRanges?await CT({git:y.resolve(A.GitProvider),workspaceRoot:e,commitSha:c,sourceFiles:u}):null,d=0,f=0;for(let m of o)r.l3.upsertDecision({projectId:n,l2NodeId:i,title:m.title,content:m.content,nodeType:m.nodeType,confidence:m.confidence,commitSha:c,extractionModel:l,sourceFiles:u,source:a,...t.captureAnchorRanges?{anchorRanges:p}:{}}).deduped?f++:d++;return{persisted:d,deduped:f}}async function lp(t,e){e.warn(J.NO_GRAPH_TO_ATTACH),await V(t,{event:Y.FOCUSED_PERSIST_SKIPPED,message:J.NO_GRAPH_TO_ATTACH})}import NT from"fs";import ws from"path";function pF(t,e){let r=ws.relative(e,t);return r===""||r!==".."&&!r.startsWith(`..${ws.sep}`)&&!ws.isAbsolute(r)}async function PT(t){let{workspaceRoot:e,logger:r,targetPath:n,decisions:i}=t;r.info(J.EXTRACTING(n)),await V(e,{event:Y.FOCUSED_START,targetPath:n,source:xt.AGENT_AUTHORED});let s=ws.resolve(e),o=ws.resolve(s,n);if(!pF(o,s)){let p=J.PATH_NOT_FOUND(n);throw await V(e,{event:Y.FOCUSED_ERROR,targetPath:n,message:p}),new E(T.INVALID_INPUT,p)}if(!NT.existsSync(o)){let p=J.PATH_NOT_FOUND(n);throw await V(e,{event:Y.FOCUSED_ERROR,targetPath:n,message:p}),new E(T.FS_READ_FAILED,p)}if(i.length===0)return await V(e,{event:Y.FOCUSED_SUMMARY,targetPath:n,decisionsCount:0}),{kind:Te.DECISION_EXTRACTION,targetPath:n,decisions:[],persisted:0,deduped:0};let{files:a,droppedFiles:l}=nn(o,e,r);if(l.length>0&&r.warn(J.FILES_DROPPED(l.length),{droppedFiles:l,targetPath:n}),a.length===0&&!NT.statSync(o).isDirectory())throw new E(T.INVALID_INPUT,J.AGENT_AUTHORED_ANCHOR_UNRESOLVABLE(n));let{persisted:c,deduped:u}=await wi({workspaceRoot:e,logger:r,resolvedTargetPath:o,files:a,decisions:i,source:xt.AGENT_AUTHORED,extractionModel:null});return await V(e,{event:Y.FOCUSED_SUMMARY,targetPath:n,decisionsCount:i.length}),{kind:Te.DECISION_EXTRACTION,targetPath:n,decisions:i,persisted:c,deduped:u}}import hF from"fs";import EF from"path";import cp from"fs/promises";import{statSync as gF}from"fs";import up from"path";var DT={CORRUPT_FILE:t=>`Could not parse ${t} -- treating staged L3 decisions as empty`};function vT(t){return up.join(t,Ee,og)}function fF(t){return typeof t=="object"&&t!==null&&Array.isArray(t.decisions)}async function Fi(t,e){let r=vT(t),n;try{n=await cp.readFile(r,H)}catch{return[]}let i;try{i=JSON.parse(n)}catch{return e.warn(DT.CORRUPT_FILE(r)),[]}return fF(i)?i.decisions:(e.warn(DT.CORRUPT_FILE(r)),[])}async function bT(t,e,r,n){let i=sl(e,t);if(i.status==="outside")throw new E(T.INVALID_INPUT,J.PATH_NOT_FOUND(e));if(i.status==="missing")throw new E(T.FS_READ_FAILED,J.PATH_NOT_FOUND(e));let s=i.resolvedPath,o;try{o=gF(s).isDirectory()}catch{throw new E(T.FS_READ_FAILED,J.PATH_NOT_FOUND(e))}let{files:a}=nn(s,t,n);if(!o&&a.length===0)throw new E(T.INVALID_INPUT,J.AGENT_AUTHORED_ANCHOR_UNRESOLVABLE(e));let l=Mt(up.relative(t,s)),c=await Fi(t,n),u=new Date().toISOString(),p=r.map(d=>({filePath:l,title:d.title,content:d.content,nodeType:d.nodeType,confidence:d.confidence,stagedAt:u}));return await dp(t,[...c,...p]),{staged:p.length}}async function dp(t,e){await cp.mkdir(up.join(t,Ee),{recursive:!0}),await cp.writeFile(vT(t),`${JSON.stringify({decisions:e},null,2)}
168
- `,H)}import pp from"fs/promises";import FT from"path";var wT={CORRUPT_FILE:t=>`Could not parse ${t} -- falling back to the default hooks config`};function MT(t){return FT.join(t,Ee,sg)}function mF(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}async function Mi(t,e){let r=MT(t),n;try{n=await pp.readFile(r,H)}catch{return{...Ki}}let i;try{i=JSON.parse(n)}catch{return e.warn(wT.CORRUPT_FILE(r)),{...Ki}}if(!mF(i))return e.warn(wT.CORRUPT_FILE(r)),{...Ki};let s={...Ki};for(let o of Object.values(dr)){let a=i[o];typeof a=="boolean"&&(s[o]=a)}return s}async function kT(t,e,r,n){let s={...await Mi(t,n),[e]:r};await pp.mkdir(FT.join(t,Ee),{recursive:!0}),await pp.writeFile(MT(t),`${JSON.stringify(s,null,2)}
169
- `,H)}function Fs(t,e,r){return{kind:Te.FLUSH_STAGED_L3,skippedDisabled:t,flushed:0,deduped:0,stillPending:e,commitSha:r,noGraphToAttach:!1}}function _F(t){let e=new Map;for(let r of t){let n=e.get(r.filePath);n?n.push(r):e.set(r.filePath,[r])}return e}function SF(t,e){let r=[],n=[];for(let i of t)e.has(i.filePath)?r.push(i):n.push(i);return{toFlush:r,stillPending:n}}function TF(t){return t.map(e=>({title:e.title,content:e.content,nodeType:e.nodeType,confidence:e.confidence}))}async function AF(t,e,r,n,i){let s=EF.resolve(t,r);if(!hF.existsSync(s))return e.warn(J.FLUSH_STAGED_L3_FILE_DELETED(r),{droppedCount:n.length}),{persisted:0,deduped:0,dropped:n,retry:[],noGraphToAttach:!1};let{files:o,droppedFiles:a}=nn(s,t,e);a.length>0&&e.warn(J.FILES_DROPPED(a.length),{droppedFiles:a,filePath:r});let l=await wi({workspaceRoot:t,logger:e,resolvedTargetPath:s,files:o,decisions:TF(n),source:xt.AGENT_AUTHORED,extractionModel:null,commitSha:i,writerEnhancements:{warnOnAnchorContradictions:!0,captureAnchorRanges:!0}});return l.persisted+l.deduped===0?{persisted:0,deduped:0,dropped:[],retry:n,noGraphToAttach:l.noGraphToAttach}:{persisted:l.persisted,deduped:l.deduped,dropped:[],retry:[],noGraphToAttach:!1}}async function GT(t){let{workspaceRoot:e,logger:r}=t;if(!(await Mi(e,r))[dr.COMMIT_L3_WRITE])return r.info(J.FLUSH_STAGED_L3_DISABLED),await V(e,{event:Y.FLUSH_STAGED_L3_DISABLED}),Fs(!0,0,null);let i=await Fi(e,r);if(i.length===0)return r.info(J.FLUSH_STAGED_L3_EMPTY),Fs(!1,0,null);let s=y.resolve(A.GitProvider),o=await s.getHeadSha(e);if(!o)return Fs(!1,i.length,null);let a=new Set(await s.getFilesChangedByCommit(e,o)),{toFlush:l,stillPending:c}=SF(i,a);if(l.length===0)return await V(e,{event:Y.FLUSH_STAGED_L3_SUMMARY,flushed:0,stillPending:c.length,commitSha:o}),Fs(!1,c.length,o);let u=_F(l),p=0,d=0,f=0,m=0,_=[];try{for(let[C,F]of u){let I=await AF(e,r,C,F,o);p+=I.persisted,d+=I.deduped,f+=I.dropped.length,m+=Number(I.noGraphToAttach),_.push(...I.retry)}}catch(C){let F=C instanceof Error?C.message:String(C);return r.warn(J.FLUSH_STAGED_L3_ERROR(F)),await V(e,{event:Y.FLUSH_STAGED_L3_SUMMARY,error:F,commitSha:o}),Fs(!1,i.length,o)}let L=[...c,..._];return await dp(e,L),r.info(J.FLUSH_STAGED_L3_SUMMARY(p,L.length)),await V(e,{event:Y.FLUSH_STAGED_L3_SUMMARY,flushed:p,deduped:d,stillPending:L.length,droppedDeleted:f,commitSha:o}),{kind:Te.FLUSH_STAGED_L3,skippedDisabled:!1,flushed:p,deduped:d,stillPending:L.length,commitSha:o,noGraphToAttach:m>0}}var on=class{constructor(e,r,n){this.workspaceRoot=e;this.logger=r;this.options=n}workspaceRoot;logger;options;async execute(){return this.options?.flushStagedL3?GT({workspaceRoot:this.workspaceRoot,logger:this.logger}):this.options?.agentAuthoredDecisions?PT({workspaceRoot:this.workspaceRoot,logger:this.logger,targetPath:this.options.targetPath,decisions:this.options.agentAuthoredDecisions}):this.options?.targetPath?this.executeDecisionExtraction(this.options.targetPath):this.options?.escalateToLsp?this.executeTierBBatch():this.executeAutoMode()}async executeTierBBatch(){let{workspaceRoot:e,logger:r,options:n}=this,i;try{let s=y.resolve(A.GitProvider),o=y.resolve(A.KnowledgeGitService,{logger:r});return i=await y.resolve(A.GraphStoreOpener)({dbPath:ie(e),readonly:!1}),await yT(CF(e,r,i,s,o,n))}catch(s){let o=s instanceof Error?s.message:String(s);throw await V(e,{event:Y.TIER_B_ERROR,message:o}),s}finally{await i?.close()}}async executeAutoMode(){let{workspaceRoot:e,logger:r}=this;r.info(J.AUTO_ANALYZING),await V(e,{event:Y.AUTO_START});let n;try{let i=y.resolve(A.GitProvider),s=y.resolve(A.KnowledgeGitService,{logger:r});return n=await y.resolve(A.GraphStoreOpener)({dbPath:ie(e),readonly:!1}),await this.dispatchAutoMode(n,i,s)}catch(i){let s=i instanceof Error?i.message:String(i);throw await V(e,{event:Y.AUTO_ERROR,message:s}),i}finally{await n?.close()}}async dispatchAutoMode(e,r,n){let{workspaceRoot:i,logger:s}=this,o=await r.getHeadSha(i),a=e.meta.get(S.META_KEY_LAST_INGESTED_SOURCE_SHA);if(await this.maybeLogTierBCommitCapNudge(e),o&&a&&o===a){let p=await r.hasUncommittedChanges(i);return s.info(p?J.AUTO_NOOP_DIRTY_WORKTREE:J.AUTO_NOOP),await V(i,{event:Y.DELTA_NOOP,headSha:o,dirtyWorktree:p}),{kind:Te.AUTO_DELTA_NOOP,headSha:o,dirtyWorktree:p}}let l=e.projects.getFirst(),{l2Nodes:c}=e.graph.count();if(!l||c===0)return await this.dispatchEmptyGraph(e,r,n,o);if(!o)return await V(i,{event:Y.DELTA_NO_HEAD}),{kind:Te.AUTO_DELTA_NOOP,headSha:null,dirtyWorktree:!1};let u=a;return u||(u=await n.resolveNewestSourceTrailerSha(i)),u?await np({workspaceRoot:i,logger:s,store:e,git:r,knowledgeGit:n,projectId:l.id,fromSha:u,headSha:o}):await vi({workspaceRoot:i,logger:s,store:e,git:r})}async dispatchEmptyGraph(e,r,n,i){let{workspaceRoot:s,logger:o}=this,a=i?await this.tryHydrateThenDelta(e,r,n,i):void 0;return a||await vi({workspaceRoot:s,logger:o,store:e,git:r})}async tryHydrateThenDelta(e,r,n,i){let{workspaceRoot:s,logger:o}=this,a=y.resolve(A.HydrationService,{logger:o}),l=await a.resolveHydrationCommit(s);if(!l)return;let c=await OF(r,s,l);if(!c||!(await a.hydrate(s,e)).hydrated)return;let p=await Oi(e.projects,r,s);return await np({workspaceRoot:s,logger:o,store:e,git:r,knowledgeGit:n,projectId:p.id,fromSha:c,headSha:i})}async maybeLogTierBCommitCapNudge(e){let{workspaceRoot:r,logger:n}=this;try{if(!bi(e))return;n.info(J.TIER_B_CAP_NUDGE),await V(r,{event:Y.TIER_B_COMMIT_CAP_NUDGE})}catch{}}async executeDecisionExtraction(e){let{workspaceRoot:r,logger:n,options:i}=this;n.info(J.EXTRACTING(e)),await V(r,{event:Y.FOCUSED_START,targetPath:e});let s=yF.resolve(r,e);if(!RF.existsSync(s)){let L=J.PATH_NOT_FOUND(e);throw await V(r,{event:Y.FOCUSED_ERROR,targetPath:e,message:L}),new E(T.FS_READ_FAILED,L)}let{files:o,droppedFiles:a}=nn(s,r,n);if(a.length>0&&n.warn(J.FILES_DROPPED(a.length),{droppedFiles:a,targetPath:e}),o.length===0)return await V(r,{event:Y.FOCUSED_SUMMARY,targetPath:e,decisionsCount:0}),{kind:Te.DECISION_EXTRACTION,targetPath:e,decisions:[],persisted:0,deduped:0};let l=o.map(L=>`--- ${L.relativePath} ---
165
+ ${r}`;async function V(t,e){await De(t,Ki,e)}import Pi from"fs";import tp from"path";var Zb=40,ew=2e5,tw=".git",rw=new Set([lt,tw,he]);function eT(t){let e=[],r=Pi.readdirSync(t,{withFileTypes:!0});for(let n of r){if(n.isDirectory()&&rw.has(n.name))continue;let i=tp.join(t,n.name);n.isDirectory()?e.push(...eT(i)):n.isFile()&&e.push(i)}return e}function ZS(t,e){return t.startsWith(e+tp.sep)||t===e}function nw(t,e){try{return Pi.realpathSync(t)}catch{return e.warn(J.FILE_READ_FAILED,{filePath:t,error:"Failed to resolve symlinks for file path"}),null}}function iw(t,e){try{return Pi.readFileSync(t,H)}catch(r){return e.warn(J.FILE_READ_FAILED,{filePath:t,error:r instanceof Error?r.message:String(r)}),null}}function rn(t,e,r){let n=Pi.realpathSync(e),i=Pi.realpathSync(t);if(!ZS(i,n))return r.warn(J.FILE_READ_FAILED,{filePath:t,error:`Resolved path ${i} is outside workspace root ${n}`}),{files:[],droppedFiles:[]};let o=Pi.statSync(t).isDirectory()?eT(t):[t],a=[],l=[],c=0;for(let u of o){if(!Vs(u))continue;let p=nw(u,r);if(p===null||!ZS(p,n))continue;let d=tp.relative(e,u);if(a.length>=Zb){l.push(d);continue}let f=iw(u,r);if(f!==null){if(c+f.length>ew){l.push(d);continue}c+=f.length,a.push({relativePath:d,content:f})}}return{files:a,droppedFiles:l}}async function Di(t){let{workspaceRoot:e,logger:r,store:n,git:i}=t;r.info(J.AUTO_FULL_INGESTION),await V(e,{event:Y.FULL_START});let 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.HydrationService,{logger:r}),p=y.resolve(A.KnowledgeGitService,{logger:r}),d=await yi(n.projects,i,e),f=await Qa({configScanner:o,vcsScanner:a,fileDiscovery:s,filesRepo:n.files,workspaceRoot:e}),{parsedResults:m,failures:_,callResolutionByFile:L}=await Oi({astProcessor:l,graphPersister:c,store:n,workspaceRoot:e,projectId:d.id,filesToParse:f.filesToParse,skippedOversized:f.skippedOversized,tags:f.tags,appendLogLine:V,logEvents:{parseFailure:Y.FULL_PARSE_FAILURE,fileSkippedOversized:Y.FULL_FILE_SKIPPED_OVERSIZED}});if(Object.keys(L??{}).length>0){el(n,L??{});let Q=vr(L??{});await V(e,{event:Y.FULL_CALL_RESOLUTION,...Q,files:Object.keys(L??{}).length})}await Xa({store:n,git:i,workspaceRoot:e,parsedResults:m});try{await Ci(e,n,p),await u.markSynced(e,n)}catch(Q){let z=Q instanceof Error?Q.message:String(Q);r.warn(J.SNAPSHOT_AFTER_FULL_INGESTION_FAILED,{error:z}),await V(e,{event:Y.FULL_SNAPSHOT_FAILED,message:z})}let C=f.filesToParse.length,F=m.length,I=_.length,$=f.skippedOversized.length;return await V(e,{event:Y.FULL_SUMMARY,projectType:f.projectType,filesRequested:C,filesParsed:F,filesFailed:I,filesSkippedOversized:$}),{kind:Se.AUTO_FULL_INGESTION,projectType:f.projectType,suggestedTags:Array.from(f.tags),filesRequested:C,filesParsed:F,filesFailed:I,filesSkippedOversized:$}}import mw from"crypto";function tT(t){return t.meta.get(S.META_KEY_NODE_KEY_FORMAT_VERSION)!=="2"}import sw from"path";function Ft(t){return t.replace(/\\/g,"/")}function rT(t,e,r,n){let i=Ft(sw.relative(e,r)),s=t.graph.findNodeIdByNodeKey(i);if(s!==void 0)return s;for(let o of n){let a=t.graph.findNodeIdByNodeKey(Ft(o.relativePath));if(a!==void 0)return a}}var ow=new Set(["chore","style","ci","build","docs","test"]),aw=10,lw=/^(wip|fixup!|squash!|typo|lint|format|merge branch)/i,cw=/^([A-Za-z]+)(\([^)]*\))?!?:\s*(.*)$/;function uw(t){return t.split(`
166
+ `)[0]?.trim()??""}function dw(t,e){let r=t?.[1]?.toLowerCase();return!!(r&&e.has(r))}function pw(t,e){return(e?e[3]:t).trim()}function nT(t,e={}){let r=e.denylistTypes??ow,n=e.minSubjectLength??aw,i=uw(t);if(lw.test(i))return!1;let s=i.match(cw);return dw(s,r)?!1:pw(i,s).length>=n}var gw=1,fw=500;async function iT(t,e,r,n,i){let s=await t.getCommitLog(e,n,fw),o=[];for(let{sha:a,message:l}of s){if(a===r)break;nT(l,i)&&o.push({kind:Mn.COMMIT_MESSAGE,target:a,commitSha:a,message:l})}return o}function sT(t,e,r){return r.filter(n=>n.pruningLevel===gw).map(n=>({kind:Mn.CONTRACT_SYMBOL,target:`${Ft(t)}#${n.nodeId}`,commitSha:e,file:t}))}async function rp(t){let{workspaceRoot:e,logger:r,store:n,git:i,knowledgeGit:s,projectId:o,fromSha:a,headSha:l}=t;if(tT(n))return r.info(J.NODE_KEY_FORMAT_STALE),await V(e,{event:Y.DELTA_NODE_KEY_FORMAT_STALE}),Di({workspaceRoot:e,logger:r,store:n,git:i});if(!await i.isAncestor(e,a,l))return r.info(J.HEAD_NOT_DESCENDANT_OF_LAST_INGESTED),await V(e,{event:Y.DELTA_HEAD_NOT_DESCENDANT,fromSha:a,headSha:l}),Di({workspaceRoot:e,logger:r,store:n,git:i});r.info(J.AUTO_DELTA_INGESTION),await V(e,{event:Y.DELTA_START,fromSha:a,headSha:l});let c=await i.getChangedFilesSince(e,a,l),{toDelete:u,toReparse:p}=hw(c),{filesToParse:d,skippedOversized:f,tierBEntries:m,tierCSymbolEntries:_,changedBytes:L}=await Ew(t,p),F=[...await iT(i,e,a,l),..._],I=[];await s.runUnderKnowledgeLock(e,async()=>{I=await Sw(t,{toDelete:u,filesToParse:d,tierBEntries:m,tierCEntries:F,changedBytes:L})});let $=d.length-I.length;return await V(e,{event:Y.DELTA_SUMMARY,fromSha:a,headSha:l,filesReparsed:$,filesDeleted:u.size,filesFailed:I.length,filesSkippedOversized:f.length,tierBQueued:m.length,tierCQueued:F.length}),{kind:Se.AUTO_DELTA,fromSha:a,headSha:l,filesReparsed:$,filesDeleted:u.size,filesFailed:I.length,filesSkippedOversized:f.length,tierBQueued:m.length,tierCQueued:F.length}}function hw(t){let e=new Set,r=[];for(let n of t){if(n.status===Lt.DELETED){e.add(n.file);continue}n.status===Lt.RENAMED&&n.oldFile&&e.add(n.oldFile),$n(n.file)&&r.push(n)}return{toDelete:e,toReparse:r}}async function Ew(t,e){let{workspaceRoot:r,logger:n,git:i,headSha:s}=t,o=await i.listTrackedFilesWithBlobHash(r),a=y.resolve(A.SemanticDiffAnalyzer,{logger:n}),l=[],c=[],u=[],p=[],d=0;for(let f of e){let m=await i.readFileAtRef(r,s,f.file);if(m===void 0)continue;let _=Buffer.byteLength(m,H);if(_>512e3){c.push({file:f.file,sizeBytes:_}),await V(r,{event:Y.DELTA_FILE_SKIPPED_OVERSIZED,file:f.file,sizeBytes:_});continue}let L=o.get(f.file)??mw.createHash(Xt).update(m).digest("hex");l.push({file:f.file,hash:L,code:m}),d+=_;let{contractChanged:C,findings:F}=await _w(t,a,f,m);C&&(u.push({file:f.file,commitSha:s}),p.push(...sT(f.file,s,F)))}return{filesToParse:l,skippedOversized:c,tierBEntries:u,tierCSymbolEntries:p,changedBytes:d}}async function _w(t,e,r,n){let{workspaceRoot:i,git:s,fromSha:o,headSha:a}=t;if(r.status!==Lt.MODIFIED&&r.status!==Lt.ADDED)return{contractChanged:!1,findings:[]};let l=r.status===Lt.ADDED?"":await s.readFileAtRef(i,o,r.file);if(l===void 0)return{contractChanged:!1,findings:[]};let c=await s.getChangedLineRanges(i,o,a,r.file);if(c.length===0)return{contractChanged:!1,findings:[]};let u=await e.analyzeFile({filePath:r.file,oldContent:l,newContent:n,changedLineRanges:c});return{contractChanged:u.some(p=>p.pruningLevel===1),findings:u}}async function Sw(t,e){let{workspaceRoot:r,logger:n,store:i,projectId:s,headSha:o}=t,{toDelete:a,filesToParse:l,tierBEntries:c,tierCEntries:u,changedBytes:p}=e;a.size>0&&await i.withWriteLock(()=>{for(let m of a)i.graph.deleteNodesForPath(m)});let d=[],f;if(l.length>0){let m=y.resolve(A.AstProcessor,{logger:n}),_=y.resolve(A.GraphPersister),L=await Oi({astProcessor:m,graphPersister:_,store:i,workspaceRoot:r,projectId:s,filesToParse:l,skippedOversized:[],tags:new Set,appendLogLine:V,logEvents:{parseFailure:Y.DELTA_PARSE_FAILURE,fileSkippedOversized:Y.DELTA_FILE_SKIPPED_OVERSIZED}});d=L.failures,f=L.callResolutionByFile}if(f&&Object.keys(f).length>0){bS(i,f,a);let m=vr(f);await V(r,{event:Y.DELTA_CALL_RESOLUTION,...m,files:Object.keys(f).length})}return await i.withWriteLock(()=>{if(c.length>0&&Ii(i,c),u.length>0&&BS(i,u),p>0){let m=Number(i.meta.get(S.META_KEY_TIER_B_CHANGED_BYTES)??0);i.meta.set(S.META_KEY_TIER_B_CHANGED_BYTES,String(m+p))}i.meta.set(S.META_KEY_LAST_INGESTED_SOURCE_SHA,o)}),d}import Xw from"fs";import Zw from"path";async function oT(t){let{workspaceRoot:e,store:r,git:n}=t,i=await n.getHeadSha(e);if(!i)return{filesQueued:0};let o=r.files.getAllHashes().map(a=>({file:a.filePath,commitSha:i}));return await r.withWriteLock(()=>{Ii(r,o)}),{filesQueued:o.length}}import Tw from"path";var Aw={".ts":B.TYPESCRIPT,".tsx":B.TYPESCRIPT,".mts":B.TYPESCRIPT,".cts":B.TYPESCRIPT,".js":B.TYPESCRIPT,".jsx":B.TYPESCRIPT,".mjs":B.TYPESCRIPT,".cjs":B.TYPESCRIPT,".py":B.PYTHON,".go":B.GO,".rs":B.RUST,".c":B.CPP,".h":B.CPP,".cpp":B.CPP,".cxx":B.CPP,".cc":B.CPP,".hpp":B.CPP,".hxx":B.CPP,".hh":B.CPP,".cu":B.CPP,".cuh":B.CPP,".java":B.JAVA,".cs":B.CSHARP,".php":B.PHP,".phtml":B.PHP,".php3":B.PHP,".php4":B.PHP,".php5":B.PHP,".phps":B.PHP,".rb":B.RUBY,".rake":B.RUBY,".gemspec":B.RUBY};function np(t){return Aw[Tw.extname(t)]}function aT(t){let e={},r=[];for(let n of t){let i=np(n.file);if(!i){r.push(n);continue}(e[i]??=[]).push(n)}return{buckets:e,unsupported:r}}function vi(t,e=S.DEFAULT_TIER_B_COMMIT_CAP_BYTES){return Number(t.meta.get(S.META_KEY_TIER_B_CHANGED_BYTES)??0)>=e}var Rw=Object.values(un),lT="```";function cT(t){let e=t.trim();if(!e.startsWith(lT)||!e.endsWith(lT))return t;let r=e.indexOf(`
167
+ `);if(r===-1)return t;let n=e.slice(0,r);if(!/^```[A-Za-z0-9_-]*$/.test(n))return t;let i=e.slice(r+1);return i.slice(0,i.length-3).trim()}function pl(t){if(t==null)return;let e;try{e=JSON.parse(cT(t))}catch{return}if(Array.isArray(e))return e.map(r=>({title:String(r?.title??""),nodeType:Rw.includes(r?.nodeType)?r.nodeType:un.CONTEXT,content:String(r?.content??""),confidence:typeof r?.confidence=="number"?r.confidence:0}))}function yw(){return new Date().toISOString().slice(0,10)}function gl(t){return{date:t,calls:0,tokens:0}}function uT(t){let e=yw(),r=t.meta.get(S.META_KEY_TIER_C_BUDGET);if(!r)return gl(e);try{let n=JSON.parse(r);return!n||typeof n.date!="string"||typeof n.calls!="number"||typeof n.tokens!="number"||n.date!==e?gl(e):n}catch{return gl(e)}}function dT(t,e){t.meta.set(S.META_KEY_TIER_C_BUDGET,JSON.stringify(e))}function ip(t,e,r){return t.calls>=e||t.tokens>=r}function pT(t){return Math.ceil(t.length/4)}import gT from"os";import Ow from"fs/promises";import fT from"path";var Iw=200,Lw=5e3,Cw=3e4;async function mT(t){let e=fT.join(t,he,rg);try{return await Ow.mkdir(fT.dirname(e),{recursive:!0}),await y.resolve(A.ProcessLock)(e,{maxWaitMs:Iw,retryIntervalMs:50,heartbeatIntervalMs:Lw,staleAfterMs:Cw})}catch{return}}function hT(t=S.DEFAULT_TIER_C_LOAD_THRESHOLD){if(process.platform==="win32")return{ok:!0,note:"os.loadavg() returns zeros on Windows -- system-load check is a documented no-op here"};let e=gT.cpus().length||1,r=gT.loadavg()[0]/e;return r>t?{ok:!1,note:`load ratio ${r.toFixed(2)} exceeds threshold ${t}`}:{ok:!0}}var vs={LLM_NOT_CONFIGURED:"llm-not-configured",LOCK_CONTENDED:"lock-contended",BUDGET_EXHAUSTED:"budget-exhausted",LOAD_HIGH:"load-high"},yr={NO_ANCHOR:"no-anchor",BRIDGE_UNREACHABLE:"bridge-unreachable",RATE_LIMITED:"rate-limited",AUTH_FAILED:"auth-failed",LLM_NON_JSON_OUTPUT:"llm-non-json-output",MISSING_FILE:"missing-file",FILE_UNREADABLE:"file-unreadable"};function sp(t){return{tierCQueued:t.queued,tierCProcessed:t.processed,tierCPersisted:t.persisted,tierCDeduped:t.deduped,tierCFailed:t.failed,tierCSkipped:t.skipped,tierCSkippedReason:t.reason}}async function Ds(t,e,r){return t.logger.info(J.TIER_C_SKIPPED(r)),await V(t.workspaceRoot,{event:Y.TIER_C_SKIPPED,reason:r,queued:e}),sp({queued:e,processed:0,persisted:0,deduped:0,failed:0,skipped:!0,reason:r})}async function Nw(t,e,r){let n=!1,i=null;try{let s=y.resolve(A.KnowledgeGitService,{logger:t.logger});i=await t.git.getHeadSha(r)??null,n=!!(i&&typeof s.hasSourceCommitInHistory=="function"&&await s.hasSourceCommitInHistory(r,i))}catch{}return!!(n&&e.l3.getAllExportable().some(o=>o.commit_hash===i)&&!t.force)}async function ET(t){let{workspaceRoot:e,store:r}=t,n=ar(r);if(await V(e,{event:Y.TIER_C_START,queued:n.length}),n.length===0)return await V(e,{event:Y.TIER_C_EMPTY_QUEUE}),sp({queued:0,processed:0,persisted:0,deduped:0,failed:0,skipped:!1});if(await Nw(t,r,e))return await Ds(t,n.length,"already-snapshotted-with-tier-c");if(!t.llmBaseUrl||!t.llmModel)return await Ds(t,n.length,vs.LLM_NOT_CONFIGURED);let s=await mT(e);if(!s)return await Ds(t,n.length,vs.LOCK_CONTENDED);try{return await Pw(t,n)}finally{await s.release()}}async function Pw(t,e){let{workspaceRoot:r,store:n}=t,i=t.dailyCallCap??S.DEFAULT_TIER_C_DAILY_CALL_CAP,s=t.dailyTokenCap??S.DEFAULT_TIER_C_DAILY_TOKEN_CAP,o=uT(n);if(ip(o,i,s))return await Ds(t,e.length,vs.BUDGET_EXHAUSTED);let a=hT(t.loadThreshold);return a.note&&await V(r,{event:Y.TIER_C_LOAD_NOTE,note:a.note}),a.ok?await vw(t,e,o,i,s):await Ds(t,e.length,vs.LOAD_HIGH)}function nn(t){return{success:!1,reason:t,persistedCount:0,dedupedCount:0,tokensUsed:0,callsUsed:0}}function Dw(t){return t.drainAll?{wallClockMs:Number.POSITIVE_INFINITY,itemCap:Number.POSITIVE_INFINITY}:{wallClockMs:t.wallClockMs??S.DEFAULT_TIER_C_WALL_CLOCK_MS,itemCap:t.itemCap??S.DEFAULT_TIER_C_ITEM_CAP}}async function vw(t,e,r,n,i){let{store:s,workspaceRoot:o,logger:a}=t,{wallClockMs:l,itemCap:c}=Dw(t),u=Date.now()+l,d=y.resolve(A.LlmClient)();d.initialize({baseUrl:t.llmBaseUrl,apiKey:t.llmApiKey});let f=r,m={processed:0,persisted:0,deduped:0,failed:0};for(let _ of e){if(m.processed+m.failed>=c||Date.now()>=u)break;if(ip(f,n,i)){await V(o,{event:Y.TIER_C_SKIPPED,reason:vs.BUDGET_EXHAUSTED,queued:e.length,midRun:!0});break}let L=await Hw(t,d,_);if(f=await bw(s,f,L),await ww(t,_,L,m))break}return await V(o,{event:Y.TIER_C_SUMMARY,queued:e.length,...m}),a.info(J.TIER_C_SUMMARY(m.processed,m.persisted)),m.processed>0&&await s.withWriteLock(()=>{s.meta.set("tierCProcessedThisRun","true")}),sp({queued:e.length,...m,skipped:!1})}async function bw(t,e,r){if(r.callsUsed===0&&r.tokensUsed===0)return e;let n={date:e.date,calls:e.calls+r.callsUsed,tokens:e.tokens+r.tokensUsed};return await t.withWriteLock(()=>dT(t,n)),n}async function ww(t,e,r,n){let{store:i,workspaceRoot:s}=t;if(r.success)return n.processed++,n.persisted+=r.persistedCount,n.deduped+=r.dedupedCount,await i.withWriteLock(()=>KS(i,[e.target])),await V(s,{event:Y.TIER_C_ITEM_SUCCESS,kind:e.kind,target:e.target,persisted:r.persistedCount,deduped:r.dedupedCount}),!1;n.failed++,await V(s,{event:Y.TIER_C_ITEM_FAILED,kind:e.kind,target:e.target,reason:r.reason});let o=t.itemFailureCap??S.DEFAULT_TIER_C_MAX_ITEM_FAILURES,{evicted:a,failCount:l}=await i.withWriteLock(()=>$S(i,e.target,o));return a&&(t.logger.warn(J.TIER_C_ITEM_EVICTED(e.kind,e.target,l)),await V(s,{event:Y.TIER_C_ITEM_EVICTED,kind:e.kind,target:e.target,failCount:l,reason:r.reason})),!1}function Fw(t){return t instanceof E&&t.code===T.LLM_CHAT_COMPLETION_FAILED}function Mw(t){return t instanceof E&&t.code===T.LLM_RATE_LIMITED}function kw(t){return t instanceof E&&t.code===T.LLM_AUTH_FAILED}function _T(t){return Mw(t)?yr.RATE_LIMITED:kw(t)?yr.AUTH_FAILED:Fw(t)?yr.BRIDGE_UNREACHABLE:Gw(t)}function Gw(t){return t instanceof Error?t.message:String(t)}function xw(t){return t.replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F]/g,"").slice(0,JS)}async function ST(t,e,r,n){let s=(await t.chatCompletion({model:e,temperature:.2,messages:[{role:Qt.SYSTEM,content:r},{role:Qt.USER,content:n}]})).choices[0]?.message.content,o=pl(s),a=pT(r+n+(s??""));return{decisions:o,tokensUsed:a}}function Uw(t,e){for(let r of e){let n=t.graph.findNodeIdByNodeKey(Ft(r));if(n!==void 0)return n}}function TT(t,e,r,n,i){let{store:s,llmModel:o}=t,a=s.projects.getFirst();if(!a)return{persisted:0,deduped:0};let l=r.map(Ft),c=0,u=0;for(let p of i)s.l3.upsertDecision({projectId:a.id,l2NodeId:e,title:p.title,content:p.content,nodeType:p.nodeType,confidence:p.confidence,commitSha:n,extractionModel:o??null,sourceFiles:l}).deduped?u++:c++;return{persisted:c,deduped:u}}async function Hw(t,e,r){return r.kind===Mn.COMMIT_MESSAGE?Bw(t,e,r):Kw(t,e,r)}async function Bw(t,e,r){let{git:n,workspaceRoot:i,store:s,llmModel:o}=t,a=await n.getFilesChangedByCommit(i,r.commitSha),l=Uw(s,a);if(l===void 0)return nn(yr.NO_ANCHOR);let c;try{c=await ST(e,o,zS,qS(xw(r.message??"")))}catch(d){return{...nn(_T(d)),callsUsed:1}}if(c.decisions===void 0)return{...nn(yr.LLM_NON_JSON_OUTPUT),tokensUsed:c.tokensUsed,callsUsed:1};let{persisted:u,deduped:p}=TT(t,l,a,r.commitSha,c.decisions);return{success:!0,persistedCount:u,dedupedCount:p,tokensUsed:c.tokensUsed,callsUsed:1}}async function Kw(t,e,r){let{git:n,workspaceRoot:i,store:s,llmModel:o}=t,a=r.file;if(!a)return nn(yr.MISSING_FILE);let l=s.graph.findNodeIdByNodeKey(r.target)??s.graph.findNodeIdByNodeKey(Ft(a));if(l===void 0)return nn(yr.NO_ANCHOR);let c=await n.readFileAtRef(i,S.HEAD_REF,a);if(c===void 0)return nn(yr.FILE_UNREADABLE);let u=r.target.slice(r.target.indexOf("#")+1),p=XS(u,a,c),d;try{d=await ST(e,o,QS,p)}catch(_){return{...nn(_T(_)),callsUsed:1}}if(d.decisions===void 0)return{...nn(yr.LLM_NON_JSON_OUTPUT),tokensUsed:d.tokensUsed,callsUsed:1};let{persisted:f,deduped:m}=TT(t,l,[a],r.commitSha,d.decisions);return{success:!0,persistedCount:f,dedupedCount:m,tokensUsed:d.tokensUsed,callsUsed:1}}import $w from"path";import Yw from"crypto";import Ww from"fs/promises";function jw(t,e,r,n){for(let i of t.edges)e.push(i);for(let i of t.filesProcessed)r.push(i);for(let i of t.filesFailed)n.push(i)}function Vw(t,e){let r=new Set(e.map(a=>a.languageId)),n=Object.keys(t).filter(a=>(t[a]?.length??0)>0),i=n.length>0&&n.every(a=>r.has(a)),s=e.length>0&&!i;return s||e.length===0?{unavailableReason:void 0,fullyDegraded:i,strayLanguageDegraded:s}:{unavailableReason:e.length===1?e[0].reason:e.map(a=>`${a.languageId}: ${a.reason}`).join("; "),fullyDegraded:i,strayLanguageDegraded:s}}async function AT(t,e){let{workspaceRoot:r,logger:n,providerConfig:i,store:s,git:o}=e,a=y.resolve(A.EdgeResolutionProviders,{logger:n}),l=[],c=[],u=[],p=[];for(let _ of Object.keys(t)){let L=t[_];if(!L||L.length===0)continue;let C=a[_];if(!C){p.push({languageId:_,reason:`no LSP provider registered for language "${_}"`});continue}let F=C();i&&F.configure(i);let I=_===B.TYPESCRIPT?await Qw(s,o,r,L,n):void 0,$=await F.resolveEdges({workspaceRoot:r,files:L.map(Q=>Q.file),callsByFile:I});jw($,l,c,u),$.unavailableReason&&p.push({languageId:_,reason:$.unavailableReason})}let{unavailableReason:d,fullyDegraded:f,strayLanguageDegraded:m}=Vw(t,p);return{edges:l,filesProcessed:c,filesFailed:u,unavailableReason:d,degradedLanguages:p,fullyDegraded:f,strayLanguageDegraded:m}}function zw(t){return t.split("\\").join("/")}async function Jw(t,e,r,n){let i=zw(e);if(!r.has(i)&&n.has(i))return n.get(i);try{let s=await Ww.readFile($w.join(t,e),H);return Yw.createHash(Xt).update(s).digest("hex")}catch{return}}async function qw(t,e){try{let[r,n,i]=await Promise.all([t.listTrackedFilesWithBlobHash(e),t.listUntrackedFiles(e),t.listModifiedFiles(e)]);return{dirtyFiles:new Set([...n,...i]),blobHashes:r}}catch{return{dirtyFiles:new Set,blobHashes:new Map}}}async function Qw(t,e,r,n,i){let s=t.projects.getFirst();if(!s)return;let o=n.map(_=>_.file),a=t.callSites.getForFiles(s.id,o),l=o.length;if(a.size===0){i.info(J.TIER_B_FORWARD_SEEDED(B.TYPESCRIPT,0,l,0)),await V(r,{event:Y.TIER_B_FORWARD_SEEDED,languageId:B.TYPESCRIPT,seeded:0,total:l,staleSkipped:0});return}let c=new Map(t.files.getAllHashes().map(_=>[_.filePath,_.contentHash])),{dirtyFiles:u,blobHashes:p}=await qw(e,r),d={},f=0,m=0;for(let _ of o){let L=a.get(_);if(!L||L.length===0)continue;let C=c.get(_),F=await Jw(r,_,u,p);if(!C||!F||C!==F){m++;continue}d[_]=L,f++}return i.info(J.TIER_B_FORWARD_SEEDED(B.TYPESCRIPT,f,l,m)),await V(r,{event:Y.TIER_B_FORWARD_SEEDED,languageId:B.TYPESCRIPT,seeded:f,total:l,staleSkipped:m}),f>0?d:void 0}var op=50;async function yT(t){let e=await eF(t),r=await ET({workspaceRoot:t.workspaceRoot,logger:t.logger,store:t.store,git:t.git,llmBaseUrl:t.llmBaseUrl,llmApiKey:t.llmApiKey,llmModel:t.llmModel,dailyCallCap:t.tierCDailyCallCap,dailyTokenCap:t.tierCDailyTokenCap,wallClockMs:t.tierCWallClockMs,itemCap:t.tierCItemCap,loadThreshold:t.tierCLoadThreshold,force:t.force,drainAll:t.tierCDrainAll});return{...e,...r}}async function eF(t){let{workspaceRoot:e,logger:r,store:n,git:i,knowledgeGit:s}=t;r.info(J.TIER_B_STARTING),await V(e,{event:Y.TIER_B_START});let o=await i.getHeadSha(e)??null,a=vi(n,t.commitCap);if(t.full){let{filesQueued:z}=await oT({workspaceRoot:e,store:n,git:i});r.info(J.TIER_B_FULL_RESYNC_QUEUED(z)),await V(e,{event:Y.TIER_B_FULL_RESYNC_QUEUED,filesQueued:z})}let l=Ns(n);if(l.length===0)return r.info(J.TIER_B_EMPTY_QUEUE),await V(e,{event:Y.TIER_B_EMPTY_QUEUE}),nF(o,a);let{buckets:c,toProcess:u,droppedDeleted:p,skippedLanguage:d}=await iF(t,l);if(await aF(e,p,d),u.length===0)return await RT(t,{headSha:o,commitCapExceeded:a,queued:l.length,droppedDeleted:p.length,skippedLanguage:d.length,outcome:{edges:[],filesProcessed:[],filesFailed:[],degradedLanguages:[],fullyDegraded:!1,strayLanguageDegraded:!1},failedEntries:[],permanentFailed:[],skippedNotApplicable:[],edgesApplied:0,edgesPruned:0});let f=await lF(t,c);await sF(e,f.filesFailed),f.unavailableReason&&(await V(e,{event:Y.TIER_B_DEGRADED,level:op,reason:f.unavailableReason,degradedLanguages:f.degradedLanguages}),r.info(J.TIER_B_DEGRADED(f.unavailableReason)));let{edgesApplied:m,edgesPruned:_}=await cF(t,f,o),L=new Set(f.filesProcessed),{failedEntries:C,permanentFailed:F,skippedNotApplicable:I}=oF(u,L,f.filesFailed),$=L.size>0||m>0||I.length>0,Q=tF(n,u,f,$,C,F,rF(c,f));return await RT(t,{headSha:o,commitCapExceeded:a,queued:l.length,droppedDeleted:p.length,skippedLanguage:d.length,outcome:f,failedEntries:C,permanentFailed:F,skippedNotApplicable:I,edgesApplied:m,edgesPruned:_,zeroProgressWatchdogTripped:Q,degradedReason:f.unavailableReason})}function tF(t,e,r,n,i,s,o){let a=S.META_KEY_TIER_B_ZERO_PROGRESS_BATCHES,l=t.meta.get(a),c=l&&parseInt(l,10)||0;if(e.length===0)return!1;if(n)return t.meta.set(a,"0"),!1;if(r.fullyDegraded)return!1;let u=i.filter(d=>!o.has(d.file));if(u.length===0)return!1;let p=c+1;if(p<S.DEFAULT_TIER_B_ZERO_PROGRESS_MAX_BATCHES)return t.meta.set(a,String(p)),!1;for(let d of u){s.push(d);let f=i.indexOf(d);f>=0&&i.splice(f,1)}return t.meta.set(a,"0"),!0}function rF(t,e){let r=new Set;if(e.degradedLanguages.length===0)return r;let n=new Set(e.degradedLanguages.map(i=>i.languageId));for(let[i,s]of Object.entries(t))if(!(!s||s.length===0||!n.has(i)))for(let o of s)r.add(o.file);return r}function nF(t,e){return{kind:Se.TIER_B_BATCH,headSha:t,filesQueued:0,filesDroppedDeleted:0,filesSkippedLanguage:0,filesSkippedNotApplicable:0,filesProcessed:0,filesFailed:0,filesFailedPermanent:0,edgesApplied:0,edgesPruned:0,degraded:!1,commitCapExceeded:e}}async function iF(t,e){let{workspaceRoot:r}=t,n=[],i=[];for(let a of e)Xw.existsSync(Zw.join(r,a.file))?n.push(a):i.push(a);let{buckets:s,unsupported:o}=aT(n);return{buckets:s,toProcess:Object.values(s).flatMap(a=>a??[]),droppedDeleted:i,skippedLanguage:o}}async function sF(t,e){for(let r of e)await V(t,{event:r.notApplicable?Y.TIER_B_FILE_SKIPPED_NOT_APPLICABLE:Y.TIER_B_FILE_FAILED,...r.notApplicable?{}:{level:op},file:r.file,reason:r.reason,retryable:r.retryable})}function oF(t,e,r){let n=new Map(r.map(a=>[a.file,a])),i=[],s=[];return{failedEntries:t.filter(a=>{if(e.has(a.file))return!1;let l=n.get(a.file);return l?.notApplicable?(s.push(a),!1):l?.retryable===!1?(i.push(a),!1):!0}),permanentFailed:i,skippedNotApplicable:s}}async function aF(t,e,r){for(let n of e)await V(t,{event:Y.TIER_B_FILE_DROPPED_DELETED,file:n.file});for(let n of r)await V(t,{event:Y.TIER_B_FILE_SKIPPED_LANGUAGE,file:n.file})}async function lF(t,e){let{workspaceRoot:r,logger:n,providerConfig:i,store:s,git:o}=t;return AT(e,{workspaceRoot:r,logger:n,providerConfig:i,store:s,git:o})}async function cF(t,e,r){let{store:n,knowledgeGit:i,workspaceRoot:s}=t,o=0,a=0;return await i.runUnderKnowledgeLock(s,async()=>{await n.withWriteLock(()=>{let l=new Set(n.graph.getAllLinks().map(u=>`${u.source_node_id}->${u.target_node_id}->${u.link_type}`));for(let u of e.edges){let p=n.graph.findNodeIdByNodeKey(u.sourceNodeKey),d=n.graph.findNodeIdByNodeKey(u.targetNodeKey);if(p===void 0||d===void 0)continue;let f=`${p}->${d}->${de.CALLS}`;l.has(f)||(l.add(f),n.graph.insertLink({sourceNodeId:p,targetNodeId:d,linkType:de.CALLS}),o++)}a=n.graph.pruneOrphanedLinks();let c=n.projects.getFirst();if(c)for(let u of e.filesProcessed)n.files.markTierBProcessed({projectId:c.id,filePath:u,commitSha:r})})}),{edgesApplied:o,edgesPruned:a}}async function RT(t,e){let{workspaceRoot:r,logger:n,store:i,knowledgeGit:s}=t,{headSha:o,outcome:a,failedEntries:l,permanentFailed:c,skippedNotApplicable:u}=e,p=[...c,...u];if(o&&p.length>0){let f=i.projects.getFirst();if(f)for(let m of p)i.files.markTierBProcessed({projectId:f.id,filePath:m.file,commitSha:o})}if(o){let f={headSha:o,remainingQueue:l};await s.runUnderKnowledgeLock(r,async()=>{await i.withWriteLock(()=>{i.meta.set(S.META_KEY_TIER_B_BATCH_PENDING,JSON.stringify(f))})})}let d=a.filesProcessed.length;return await V(r,{event:Y.TIER_B_SUMMARY,...a.unavailableReason?{level:op}:{},headSha:o,filesQueued:e.queued,filesDroppedDeleted:e.droppedDeleted,filesSkippedLanguage:e.skippedLanguage,filesSkippedNotApplicable:u.length,filesProcessed:d,filesFailed:l.length,filesFailedPermanent:c.length,edgesApplied:e.edgesApplied,edgesPruned:e.edgesPruned,degraded:!!a.unavailableReason,degradedLanguages:a.degradedLanguages,strayLanguageDegraded:a.strayLanguageDegraded,fullyDegraded:a.fullyDegraded,zeroProgressWatchdogTripped:e.zeroProgressWatchdogTripped,commitCapExceeded:e.commitCapExceeded}),n.info(J.TIER_B_SUMMARY(d,e.edgesApplied,c.length,u.length)),{kind:Se.TIER_B_BATCH,headSha:o,filesQueued:e.queued,filesDroppedDeleted:e.droppedDeleted,filesSkippedLanguage:e.skippedLanguage,filesSkippedNotApplicable:u.length,filesProcessed:d,filesFailed:l.length,filesFailedPermanent:c.length,edgesApplied:e.edgesApplied,edgesPruned:e.edgesPruned,degraded:!!a.unavailableReason,degradedReason:e.degradedReason,degradedLanguages:a.degradedLanguages.length>0?a.degradedLanguages:void 0,strayLanguageDegraded:a.strayLanguageDegraded,fullyDegraded:a.fullyDegraded,zeroProgressWatchdogTripped:e.zeroProgressWatchdogTripped,commitCapExceeded:e.commitCapExceeded}}function OT(t){return t.trim().replace(/\s+/g," ").toLowerCase()}function IT(t){return(t??"").trim().replace(/\s+/g," ")}function LT(t,e){let r=t.filter(i=>i.validity_status!==cr.GARBAGE),n=[];for(let i of e){let s=OT(i.title),o=IT(i.content);for(let a of r)OT(a.title)===s&&IT(a.content)!==o&&n.push({stagedTitle:i.title,existingId:a.id,existingTitle:a.title,existingSource:a.source,existingCommitHash:a.commit_hash})}return n}async function CT(t){let{git:e,workspaceRoot:r,commitSha:n,sourceFiles:i}=t;if(!n||i.length===0)return null;let s=`${n}^`,o=[];for(let a of i){let l=await e.getChangedLineRanges(r,s,n,a);for(let c of l)o.push({path:a,startRow:c.startRow,endRow:c.endRow})}return o}async function bi(t){let{workspaceRoot:e,logger:r,resolvedTargetPath:n,files:i,decisions:s,source:o,extractionModel:a,commitSha:l}=t;if(s.length===0)return{persisted:0,deduped:0,noGraphToAttach:!1};let c=await dF(e,r);if(c===null)return{persisted:0,deduped:0,noGraphToAttach:!0};try{let u=c.projects.getFirst();if(!u)return await ap(e,r),{persisted:0,deduped:0,noGraphToAttach:!0};let p=rT(c,e,n,i);if(p===void 0)return await ap(e,r),{persisted:0,deduped:0,noGraphToAttach:!0};t.writerEnhancements?.warnOnAnchorContradictions&&uF(c.l3.getByL2NodeId(p),s,r);let d=await pF({workspaceRoot:e,store:c,projectId:u.id,anchorL2NodeId:p,files:i,decisions:s,source:o,extractionModel:a,commitSha:l,captureAnchorRanges:t.writerEnhancements?.captureAnchorRanges===!0});return await V(e,{event:Y.FOCUSED_PERSISTED,persisted:d.persisted,deduped:d.deduped}),{...d,noGraphToAttach:!1}}finally{await c.close()}}function uF(t,e,r){for(let n of LT(t,e))r.warn(J.L3_ANCHOR_CONTRADICTION(n.stagedTitle,n.existingSource,n.existingCommitHash),{stagedTitle:n.stagedTitle,existingId:n.existingId,existingTitle:n.existingTitle,existingSource:n.existingSource,existingCommitHash:n.existingCommitHash})}async function dF(t,e){let r=y.resolve(A.GraphStoreOpener);try{return await r({dbPath:ie(t),readonly:!1})}catch(n){if(n instanceof E&&n.code===T.DB_OPEN_FAILED)return await ap(t,e),null;throw n}}async function pF(t){let{workspaceRoot:e,store:r,projectId:n,anchorL2NodeId:i,files:s,decisions:o,source:a,extractionModel:l}=t,c=t.commitSha??await y.resolve(A.GitProvider).getHeadSha(e)??null,u=s.map(m=>Ft(m.relativePath)),p=t.captureAnchorRanges?await CT({git:y.resolve(A.GitProvider),workspaceRoot:e,commitSha:c,sourceFiles:u}):null,d=0,f=0;for(let m of o)r.l3.upsertDecision({projectId:n,l2NodeId:i,title:m.title,content:m.content,nodeType:m.nodeType,confidence:m.confidence,commitSha:c,extractionModel:l,sourceFiles:u,source:a,...t.captureAnchorRanges?{anchorRanges:p}:{}}).deduped?f++:d++;return{persisted:d,deduped:f}}async function ap(t,e){e.warn(J.NO_GRAPH_TO_ATTACH),await V(t,{event:Y.FOCUSED_PERSIST_SKIPPED,message:J.NO_GRAPH_TO_ATTACH})}import NT from"fs";import bs from"path";function gF(t,e){let r=bs.relative(e,t);return r===""||r!==".."&&!r.startsWith(`..${bs.sep}`)&&!bs.isAbsolute(r)}async function PT(t){let{workspaceRoot:e,logger:r,targetPath:n,decisions:i}=t;r.info(J.EXTRACTING(n)),await V(e,{event:Y.FOCUSED_START,targetPath:n,source:Gt.AGENT_AUTHORED});let s=bs.resolve(e),o=bs.resolve(s,n);if(!gF(o,s)){let p=J.PATH_NOT_FOUND(n);throw await V(e,{event:Y.FOCUSED_ERROR,targetPath:n,message:p}),new E(T.INVALID_INPUT,p)}if(!NT.existsSync(o)){let p=J.PATH_NOT_FOUND(n);throw await V(e,{event:Y.FOCUSED_ERROR,targetPath:n,message:p}),new E(T.FS_READ_FAILED,p)}if(i.length===0)return await V(e,{event:Y.FOCUSED_SUMMARY,targetPath:n,decisionsCount:0}),{kind:Se.DECISION_EXTRACTION,targetPath:n,decisions:[],persisted:0,deduped:0};let{files:a,droppedFiles:l}=rn(o,e,r);if(l.length>0&&r.warn(J.FILES_DROPPED(l.length),{droppedFiles:l,targetPath:n}),a.length===0&&!NT.statSync(o).isDirectory())throw new E(T.INVALID_INPUT,J.AGENT_AUTHORED_ANCHOR_UNRESOLVABLE(n));let{persisted:c,deduped:u}=await bi({workspaceRoot:e,logger:r,resolvedTargetPath:o,files:a,decisions:i,source:Gt.AGENT_AUTHORED,extractionModel:null});return await V(e,{event:Y.FOCUSED_SUMMARY,targetPath:n,decisionsCount:i.length}),{kind:Se.DECISION_EXTRACTION,targetPath:n,decisions:i,persisted:c,deduped:u}}import EF from"fs";import _F from"path";import lp from"fs/promises";import{statSync as fF}from"fs";import cp from"path";var DT={CORRUPT_FILE:t=>`Could not parse ${t} -- treating staged L3 decisions as empty`};function vT(t){return cp.join(t,he,sg)}function mF(t){return typeof t=="object"&&t!==null&&Array.isArray(t.decisions)}async function wi(t,e){let r=vT(t),n;try{n=await lp.readFile(r,H)}catch{return[]}let i;try{i=JSON.parse(n)}catch{return e.warn(DT.CORRUPT_FILE(r)),[]}return mF(i)?i.decisions:(e.warn(DT.CORRUPT_FILE(r)),[])}async function bT(t,e,r,n){let i=il(e,t);if(i.status==="outside")throw new E(T.INVALID_INPUT,J.PATH_NOT_FOUND(e));if(i.status==="missing")throw new E(T.FS_READ_FAILED,J.PATH_NOT_FOUND(e));let s=i.resolvedPath,o;try{o=fF(s).isDirectory()}catch{throw new E(T.FS_READ_FAILED,J.PATH_NOT_FOUND(e))}let{files:a}=rn(s,t,n);if(!o&&a.length===0)throw new E(T.INVALID_INPUT,J.AGENT_AUTHORED_ANCHOR_UNRESOLVABLE(e));let l=Ft(cp.relative(t,s)),c=await wi(t,n),u=new Date().toISOString(),p=r.map(d=>({filePath:l,title:d.title,content:d.content,nodeType:d.nodeType,confidence:d.confidence,stagedAt:u}));return await up(t,[...c,...p]),{staged:p.length}}async function up(t,e){await lp.mkdir(cp.join(t,he),{recursive:!0}),await lp.writeFile(vT(t),`${JSON.stringify({decisions:e},null,2)}
168
+ `,H)}import dp from"fs/promises";import FT from"path";var wT={CORRUPT_FILE:t=>`Could not parse ${t} -- falling back to the default hooks config`};function MT(t){return FT.join(t,he,ig)}function hF(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}async function Fi(t,e){let r=MT(t),n;try{n=await dp.readFile(r,H)}catch{return{...Bi}}let i;try{i=JSON.parse(n)}catch{return e.warn(wT.CORRUPT_FILE(r)),{...Bi}}if(!hF(i))return e.warn(wT.CORRUPT_FILE(r)),{...Bi};let s={...Bi};for(let o of Object.values(ur)){let a=i[o];typeof a=="boolean"&&(s[o]=a)}return s}async function kT(t,e,r,n){let s={...await Fi(t,n),[e]:r};await dp.mkdir(FT.join(t,he),{recursive:!0}),await dp.writeFile(MT(t),`${JSON.stringify(s,null,2)}
169
+ `,H)}function ws(t,e,r){return{kind:Se.FLUSH_STAGED_L3,skippedDisabled:t,flushed:0,deduped:0,stillPending:e,commitSha:r,noGraphToAttach:!1}}function SF(t){let e=new Map;for(let r of t){let n=e.get(r.filePath);n?n.push(r):e.set(r.filePath,[r])}return e}function TF(t,e){let r=[],n=[];for(let i of t)e.has(i.filePath)?r.push(i):n.push(i);return{toFlush:r,stillPending:n}}function AF(t){return t.map(e=>({title:e.title,content:e.content,nodeType:e.nodeType,confidence:e.confidence}))}async function RF(t,e,r,n,i){let s=_F.resolve(t,r);if(!EF.existsSync(s))return e.warn(J.FLUSH_STAGED_L3_FILE_DELETED(r),{droppedCount:n.length}),{persisted:0,deduped:0,dropped:n,retry:[],noGraphToAttach:!1};let{files:o,droppedFiles:a}=rn(s,t,e);a.length>0&&e.warn(J.FILES_DROPPED(a.length),{droppedFiles:a,filePath:r});let l=await bi({workspaceRoot:t,logger:e,resolvedTargetPath:s,files:o,decisions:AF(n),source:Gt.AGENT_AUTHORED,extractionModel:null,commitSha:i,writerEnhancements:{warnOnAnchorContradictions:!0,captureAnchorRanges:!0}});return l.persisted+l.deduped===0?{persisted:0,deduped:0,dropped:[],retry:n,noGraphToAttach:l.noGraphToAttach}:{persisted:l.persisted,deduped:l.deduped,dropped:[],retry:[],noGraphToAttach:!1}}async function GT(t){let{workspaceRoot:e,logger:r}=t;if(!(await Fi(e,r))[ur.COMMIT_L3_WRITE])return r.info(J.FLUSH_STAGED_L3_DISABLED),await V(e,{event:Y.FLUSH_STAGED_L3_DISABLED}),ws(!0,0,null);let i=await wi(e,r);if(i.length===0)return r.info(J.FLUSH_STAGED_L3_EMPTY),ws(!1,0,null);let s=y.resolve(A.GitProvider),o=await s.getHeadSha(e);if(!o)return ws(!1,i.length,null);let a=new Set(await s.getFilesChangedByCommit(e,o)),{toFlush:l,stillPending:c}=TF(i,a);if(l.length===0)return await V(e,{event:Y.FLUSH_STAGED_L3_SUMMARY,flushed:0,stillPending:c.length,commitSha:o}),ws(!1,c.length,o);let u=SF(l),p=0,d=0,f=0,m=0,_=[];try{for(let[C,F]of u){let I=await RF(e,r,C,F,o);p+=I.persisted,d+=I.deduped,f+=I.dropped.length,m+=Number(I.noGraphToAttach),_.push(...I.retry)}}catch(C){let F=C instanceof Error?C.message:String(C);return r.warn(J.FLUSH_STAGED_L3_ERROR(F)),await V(e,{event:Y.FLUSH_STAGED_L3_SUMMARY,error:F,commitSha:o}),ws(!1,i.length,o)}let L=[...c,..._];return await up(e,L),r.info(J.FLUSH_STAGED_L3_SUMMARY(p,L.length)),await V(e,{event:Y.FLUSH_STAGED_L3_SUMMARY,flushed:p,deduped:d,stillPending:L.length,droppedDeleted:f,commitSha:o}),{kind:Se.FLUSH_STAGED_L3,skippedDisabled:!1,flushed:p,deduped:d,stillPending:L.length,commitSha:o,noGraphToAttach:m>0}}var sn=class{constructor(e,r,n){this.workspaceRoot=e;this.logger=r;this.options=n}workspaceRoot;logger;options;async execute(){return this.options?.flushStagedL3?GT({workspaceRoot:this.workspaceRoot,logger:this.logger}):this.options?.agentAuthoredDecisions?PT({workspaceRoot:this.workspaceRoot,logger:this.logger,targetPath:this.options.targetPath,decisions:this.options.agentAuthoredDecisions}):this.options?.targetPath?this.executeDecisionExtraction(this.options.targetPath):this.options?.escalateToLsp?this.executeTierBBatch():this.executeAutoMode()}async executeTierBBatch(){let{workspaceRoot:e,logger:r,options:n}=this,i;try{let s=y.resolve(A.GitProvider),o=y.resolve(A.KnowledgeGitService,{logger:r});return i=await y.resolve(A.GraphStoreOpener)({dbPath:ie(e),readonly:!1}),await yT(NF(e,r,i,s,o,n))}catch(s){let o=s instanceof Error?s.message:String(s);throw await V(e,{event:Y.TIER_B_ERROR,message:o}),s}finally{await i?.close()}}async executeAutoMode(){let{workspaceRoot:e,logger:r}=this;r.info(J.AUTO_ANALYZING),await V(e,{event:Y.AUTO_START});let n;try{let i=y.resolve(A.GitProvider),s=y.resolve(A.KnowledgeGitService,{logger:r});return n=await y.resolve(A.GraphStoreOpener)({dbPath:ie(e),readonly:!1}),await this.dispatchAutoMode(n,i,s)}catch(i){let s=i instanceof Error?i.message:String(i);throw await V(e,{event:Y.AUTO_ERROR,message:s}),i}finally{await n?.close()}}async dispatchAutoMode(e,r,n){let{workspaceRoot:i,logger:s}=this,o=await r.getHeadSha(i),a=e.meta.get(S.META_KEY_LAST_INGESTED_SOURCE_SHA);if(await this.maybeLogTierBCommitCapNudge(e),o&&a&&o===a){let p=await r.hasUncommittedChanges(i);return s.info(p?J.AUTO_NOOP_DIRTY_WORKTREE:J.AUTO_NOOP),await V(i,{event:Y.DELTA_NOOP,headSha:o,dirtyWorktree:p}),{kind:Se.AUTO_DELTA_NOOP,headSha:o,dirtyWorktree:p}}let l=e.projects.getFirst(),{l2Nodes:c}=e.graph.count();if(!l||c===0)return await this.dispatchEmptyGraph(e,r,n,o);if(!o)return await V(i,{event:Y.DELTA_NO_HEAD}),{kind:Se.AUTO_DELTA_NOOP,headSha:null,dirtyWorktree:!1};let u=a;return u||(u=await n.resolveNewestSourceTrailerSha(i)),u?await rp({workspaceRoot:i,logger:s,store:e,git:r,knowledgeGit:n,projectId:l.id,fromSha:u,headSha:o}):await Di({workspaceRoot:i,logger:s,store:e,git:r})}async dispatchEmptyGraph(e,r,n,i){let{workspaceRoot:s,logger:o}=this,a=i?await this.tryHydrateThenDelta(e,r,n,i):void 0;return a||await Di({workspaceRoot:s,logger:o,store:e,git:r})}async tryHydrateThenDelta(e,r,n,i){let{workspaceRoot:s,logger:o}=this,a=y.resolve(A.HydrationService,{logger:o}),l=await a.resolveHydrationCommit(s);if(!l)return;let c=await IF(r,s,l);if(!c||!(await a.hydrate(s,e)).hydrated)return;let p=await yi(e.projects,r,s);return await rp({workspaceRoot:s,logger:o,store:e,git:r,knowledgeGit:n,projectId:p.id,fromSha:c,headSha:i})}async maybeLogTierBCommitCapNudge(e){let{workspaceRoot:r,logger:n}=this;try{if(!vi(e))return;n.info(J.TIER_B_CAP_NUDGE),await V(r,{event:Y.TIER_B_COMMIT_CAP_NUDGE})}catch{}}async executeDecisionExtraction(e){let{workspaceRoot:r,logger:n,options:i}=this;n.info(J.EXTRACTING(e)),await V(r,{event:Y.FOCUSED_START,targetPath:e});let s=OF.resolve(r,e);if(!yF.existsSync(s)){let L=J.PATH_NOT_FOUND(e);throw await V(r,{event:Y.FOCUSED_ERROR,targetPath:e,message:L}),new E(T.FS_READ_FAILED,L)}let{files:o,droppedFiles:a}=rn(s,r,n);if(a.length>0&&n.warn(J.FILES_DROPPED(a.length),{droppedFiles:a,targetPath:e}),o.length===0)return await V(r,{event:Y.FOCUSED_SUMMARY,targetPath:e,decisionsCount:0}),{kind:Se.DECISION_EXTRACTION,targetPath:e,decisions:[],persisted:0,deduped:0};let l=o.map(L=>`--- ${L.relativePath} ---
170
170
  ${L.content}`).join(`
171
171
 
172
- `),u=y.resolve(A.LlmClient)();u.initialize({baseUrl:i.llmBaseUrl,apiKey:i.llmApiKey});let p;try{p=await u.chatCompletion({model:i.llmModel,temperature:.2,messages:[{role:Xt.SYSTEM,content:VS},{role:Xt.USER,content:l}]})}catch(L){let C=L instanceof Error?L.message:String(L);throw await V(r,{event:Y.FOCUSED_ERROR,targetPath:e,message:C}),L}let d=p.choices[0]?.message.content,f=gl(d);if(f===void 0){let L=J.LLM_NON_JSON_OUTPUT;throw await V(r,{event:Y.FOCUSED_ERROR,targetPath:e,message:L}),new E(T.LLM_INVALID_RESPONSE,L)}let{persisted:m,deduped:_}=await this.persistDecisions(s,o,f);return await V(r,{event:Y.FOCUSED_SUMMARY,targetPath:e,decisionsCount:f.length}),{kind:Te.DECISION_EXTRACTION,targetPath:e,decisions:f,persisted:m,deduped:_}}async persistDecisions(e,r,n){let{workspaceRoot:i,logger:s,options:o}=this;return wi({workspaceRoot:i,logger:s,resolvedTargetPath:e,files:r,decisions:n,source:xt.ANALYZE,extractionModel:o?.llmModel??null})}};async function OF(t,e,r){let i=(await t.getCommitLog(e,S.KNOWLEDGE_ROOT,S.KNOWLEDGE_LOG_SCAN_LIMIT)).find(s=>s.sha===r);return i?gr(i.message):void 0}function IF(t){return{providerConfig:t?.lspProviderConfig,commitCap:t?.tierBCommitCap,llmBaseUrl:t?.llmBaseUrl,llmApiKey:t?.llmApiKey,llmModel:t?.llmModel,full:t?.full}}function LF(t){return{tierCDailyCallCap:t?.tierCDailyCallCap,tierCDailyTokenCap:t?.tierCDailyTokenCap,tierCWallClockMs:t?.tierCWallClockMs,tierCItemCap:t?.tierCItemCap,tierCLoadThreshold:t?.tierCLoadThreshold,tierCDrainAll:t?.tierCDrainAll}}function CF(t,e,r,n,i,s){return{workspaceRoot:t,logger:e,store:r,git:n,knowledgeGit:i,...IF(s),...LF(s),force:s?.force}}var ml={DETECTING_CHANGES:"Detecting changes...",DB_NOT_FOUND:'Local database not found. Please run "docuvia init".'},hl={START:"review.start",ERROR:"review.error",SUMMARY:"review.summary"};async function El(t,e){await ve(t,Jp,e)}var _l=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(e){let{workspaceRoot:r,logger:n}=this;n.info(ml.DETECTING_CHANGES),await El(r,{event:hl.START,baseRef:e??null});let o=(await y.resolve(A.GitProvider).getChangedFilesSince(r,e)).map(c=>({file:c.file,status:c.status}));await rn(r,n);let a=y.resolve(A.GraphStoreOpener),l;try{l=await a({dbPath:ie(r),readonly:!0})}catch(c){throw c instanceof E&&c.code===T.DB_NOT_FOUND?(await El(r,{event:hl.ERROR,message:ml.DB_NOT_FOUND}),new E(T.DB_NOT_FOUND,ml.DB_NOT_FOUND,c)):c}try{let u=y.resolve(A.ChangeDetectionService,{logger:n}).detectChanges({store:l,baseRef:e??null,filesChanged:o});return await El(r,{event:hl.SUMMARY,baseRef:e??null,riskLevel:u.riskLevel,filesChanged:u.filesChanged.length,affectedNodes:u.affectedNodes.length}),u}finally{await l.close()}}};var It={RESOLVING:"Resolving blast radius...",DB_NOT_FOUND:'Local database not found. Please run "docuvia init".',REGISTRY_MEDIATED_COVERAGE_NOTE:'This symbol is resolved through the docuviaFactory/TOKENS registry -- the static edge graph does not model registry-mediated dependencies, so a "no dependents" result may be incomplete.',RISK_NOTE_EMPTY_WITH_PARTIAL_COVERAGE:(t,e)=>`No dependents found, but only ${t} of ${e} workspace files have been analyzed -- this is UNKNOWN, not confirmed zero. Run "docuvia analyze" for fuller coverage.`,RISK_NOTE_DYNAMIC_DEPENDENCY:(t,e,r,n,i)=>`Observed ${t} target-relevant runtime dependency evidence record(s); e.g. ${e}:${r} uses import(${n}) [${i}]. Dynamic candidates are possible targets, not confirmed runtime edges, so this result is a lower bound.`,RISK_NOTE_EMPTY_STATIC_EDGES_ONLY:"No static dependents found. The edge graph models calls/extends/implements only -- runtime-variable imports, computed import() specifiers, and child_process spawns are invisible, so absence of edges is not evidence of no dependents.",RISK_NOTE_EMPTY_LOW_RESOLUTION:(t,e)=>`No static dependents found, but only ${t} of ${e} call sites in this symbol's own file resolved into edges during ingestion -- dependents calling it from here may be missing from the graph. Run "docuvia analyze --escalate-to-lsp --full" to recover them.`,RISK_NOTE_PARTIAL_COVERAGE_NON_EMPTY:(t,e)=>`Only ${t} of ${e} workspace files have been analyzed -- this result may be missing dependents from unprocessed files.`},Ms={START:"impact.start",ERROR:"impact.error",SUMMARY:"impact.summary"};async function ks(t,e){await ve(t,qp,e)}function xT(t,e){return t===void 0||e===void 0?!0:t<e}function UT(t){if(!t||t.length===0)return;let e=t[0];return It.RISK_NOTE_DYNAMIC_DEPENDENCY(t.length,e.sourceFile,e.startLine+1,e.expression,e.reason)}function NF(t){if(!(!t||t.applicable<S.DEFAULT_CALL_RESOLUTION_MIN_SAMPLE||t.resolved/t.applicable>=S.DEFAULT_CALL_RESOLUTION_NOTE_THRESHOLD))return It.RISK_NOTE_EMPTY_LOW_RESOLUTION(t.resolved,t.applicable)}function PF(t,e,r,n,i){if(xT(t,e))return It.RISK_NOTE_EMPTY_WITH_PARTIAL_COVERAGE(t??0,e??0);if(r)return It.REGISTRY_MEDIATED_COVERAGE_NOTE;let s=UT(i);if(s)return s;let o=NF(n);return o||It.RISK_NOTE_EMPTY_STATIC_EDGES_ONLY}function HT(t){let{blastRadiusCount:e,computedRiskLevel:r,workspaceFilesProcessed:n,workspaceFilesTotal:i,registryMediated:s}=t;if(e===0)return{riskLevel:Ye.UNKNOWN,epistemic:Ws.LOWER_BOUND,riskNote:PF(n,i,s,t.targetFileResolution,t.dynamicEvidence)};if(xT(n,i))return{riskLevel:r,epistemic:Ws.LOWER_BOUND,riskNote:It.RISK_NOTE_PARTIAL_COVERAGE_NON_EMPTY(n??0,i??0)};let o=UT(t.dynamicEvidence);return o?{riskLevel:r,epistemic:Ws.LOWER_BOUND,riskNote:o}:{riskLevel:r}}function BT(t,e){if(t)return e===It.REGISTRY_MEDIATED_COVERAGE_NOTE?void 0:It.REGISTRY_MEDIATED_COVERAGE_NOTE}import*as KT from"path";import*as $T from"fs/promises";var Sl=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(e){let{workspaceRoot:r,logger:n}=this;n.info(It.RESOLVING),await ks(r,{event:Ms.START,target:e}),await rn(r,n);let i=y.resolve(A.GraphStoreOpener),s;try{s=await i({dbPath:ie(r),readonly:!0})}catch(o){throw o instanceof E&&o.code===T.DB_NOT_FOUND?(await ks(r,{event:Ms.ERROR,target:e,message:It.DB_NOT_FOUND}),new E(T.DB_NOT_FOUND,It.DB_NOT_FOUND,o)):o}try{let o=y.resolve(A.ImpactService,{logger:n}),a=o.getBlastRadius(s,e);if(!a)return await ks(r,{event:Ms.SUMMARY,target:e,found:!1,blastRadiusCount:0,riskLevel:null}),null;let l=o.getDynamicEvidence?.(s,e)??[],c=a.filter(p=>p.edgeSource!==$n.DYNAMIC_CANDIDATE).length,u=o.computeRiskLevel(s,c);return await ks(r,{event:Ms.SUMMARY,target:e,found:!0,blastRadiusCount:a.length,riskLevel:u}),{blastRadius:a,...l.length>0?{dynamicEvidence:l}:{},...await this.resolveEpistemicFields(s,e,c,u,l)}}finally{await s.close()}}async resolveEpistemicFields(e,r,n,i,s){let{tierBCoverage:o,registryMediated:a,targetFileResolution:l}=await this.resolveTargetContext(e,r,n),c=e.files.getTierBCoverage(),u=HT({blastRadiusCount:n,computedRiskLevel:i,workspaceFilesProcessed:c?.processedFiles,workspaceFilesTotal:c?.totalFiles,registryMediated:a,targetFileResolution:l,dynamicEvidence:s}),p=c!=null&&c.totalFiles>0&&c.processedFiles<c.totalFiles,d=BT(a,u.riskNote);return{riskLevel:u.riskLevel,...u.epistemic?{epistemic:u.epistemic}:{},...u.riskNote?{riskNote:u.riskNote}:{},...d?{coverageNote:d}:{},...o?{tierBCoverage:o}:{},...p?{partialCoverage:!0}:{}}}async resolveTargetContext(e,r,n){let i=e.graph.findNodeByName(r),s=y.resolve(A.TierBCoverageHintProvider).resolve(e,i?.filePath,n===0,!1),o=n===0&&!!i?.filePath&&await this.fileUsesFactoryRegistry(i.filePath),a;if(i?.filePath){let l=el(e)[i.filePath];l&&(a={resolved:l.resolved,applicable:l.total-l.selfDiscarded})}return{tierBCoverage:s,registryMediated:o,targetFileResolution:a}}async fileUsesFactoryRegistry(e){let r;try{r=await $T.readFile(KT.join(this.workspaceRoot,e),H)}catch{return!1}return/docuviaFactory|TOKENS\./.test(r)}};var Tl={QUERYING:"Querying local knowledge graph...",DB_NOT_FOUND:'Local database not found. Please run "docuvia init".'},Al={START:"query.start",ERROR:"query.error",SUMMARY:"query.summary"};async function Rl(t,e){await ve(t,Qp,e)}var yl=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(e,r){let{workspaceRoot:n,logger:i}=this;i.info(Tl.QUERYING),await Rl(n,{event:Al.START,target:e}),await rn(n,i);let s=y.resolve(A.GraphStoreOpener),o;try{o=await s({dbPath:ie(n),readonly:!0})}catch(a){throw a instanceof E&&a.code===T.DB_NOT_FOUND?(await Rl(n,{event:Al.ERROR,target:e,message:Tl.DB_NOT_FOUND}),new E(T.DB_NOT_FOUND,Tl.DB_NOT_FOUND,a)):a}try{let l=y.resolve(A.QueryService,{logger:i}).query(o,e,r),c=!!l.l2||l.l3.length>0||!!l.context;return await Rl(n,{event:Al.SUMMARY,target:e,found:c}),l}finally{await o.close()}}};var Ol={EXPORTING:"Exporting topology...",DB_NOT_FOUND:'Local database not found. Please run "docuvia init".'},Il={START:"export-topology.start",ERROR:"export-topology.error",SUMMARY:"export-topology.summary"};async function Ll(t,e){await ve(t,Xp,e)}var Cl=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(e={}){let{workspaceRoot:r,logger:n}=this;n.info(Ol.EXPORTING),await Ll(r,{event:Il.START,collapse:e.collapse??null});let i=y.resolve(A.GraphStoreOpener),s;try{s=await i({dbPath:ie(r),readonly:!0})}catch(o){throw o instanceof E&&o.code===T.DB_NOT_FOUND?(await Ll(r,{event:Il.ERROR,message:Ol.DB_NOT_FOUND}),new E(T.DB_NOT_FOUND,Ol.DB_NOT_FOUND,o)):o}try{let a=y.resolve(A.TopologyBuilder,{logger:n}).build({workspaceRoot:r,l2Rows:s.graph.getAllNodes(),linkRows:s.graph.getAllLinks(),l3Rows:s.l3.getAllExportable(),tagRows:s.tags.getAllTagLinks()},e);return await Ll(r,{event:Il.SUMMARY,nodeCount:a.stats.nodeCount,linkCount:a.stats.linkCount,groupCount:a.stats.groupCount,collapsed:a.collapsed}),a}finally{await s.close()}}};async function Hn(t,e){await ve(t,Zp,e)}function DF(t){if(t)try{let e=JSON.parse(t);return typeof e.headSha!="string"||!Array.isArray(e.remainingQueue)?void 0:e}catch{return}}async function YT(t,e){let r=y.resolve(A.GraphStoreOpener),n=y.resolve(A.KnowledgeGitService,{logger:e}),i=await r({dbPath:ie(t),readonly:!1});try{i.meta.get("tierCProcessedThisRun")==="true"&&await i.withWriteLock(()=>{i.meta.set("tierCProcessedThisRun","")});let s=DF(i.meta.get(S.META_KEY_TIER_B_BATCH_PENDING));if(!s)return;await n.runUnderKnowledgeLock(t,async()=>{await i.withWriteLock(()=>{i.meta.set(S.META_KEY_TIER_B_QUEUE,JSON.stringify(s.remainingQueue)),i.meta.set(S.META_KEY_LAST_TIER_B_BATCH_SHA,s.headSha),i.meta.set(S.META_KEY_TIER_B_CHANGED_BYTES,"0"),i.meta.set(S.META_KEY_TIER_B_BATCH_PENDING,"")})}),await Hn(t,{event:Ci.TIER_B_FINALIZED,headSha:s.headSha,remainingQueueSize:s.remainingQueue.length})}finally{await i.close()}}var Nl=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async openStoreForSnapshot(e){try{return await e({dbPath:ie(this.workspaceRoot),readonly:!1})}catch(r){throw r instanceof E&&r.code===T.DB_NOT_FOUND?(await Hn(this.workspaceRoot,{event:Ci.ERROR,message:rl.DB_NOT_FOUND}),new E(T.DB_NOT_FOUND,rl.DB_NOT_FOUND,r)):r}}async shouldSkipSnapshot(e,r){let n=y.resolve(A.GitProvider),i=await n.getHeadSha(this.workspaceRoot)??null,s=i&&typeof e.resolveKnowledgeCommitForSource=="function"?await e.resolveKnowledgeCommitForSource(this.workspaceRoot,i):void 0,o=await this.hasRestoreMetadata(n,s),a=r.meta.get(S.META_KEY_TIER_B_BATCH_PENDING),l=r.meta.get(S.META_KEY_LAST_TIER_B_BATCH_SHA),c=r.meta.get("tierCProcessedThisRun")==="true";return{shouldSkip:!!(i&&s&&o&&l===i&&!a&&!c),headSha:i}}async hasRestoreMetadata(e,r){return r?await e.readFileAtRef(this.workspaceRoot,r,`${S.GRAPH_DIR_NAME}/${S.METADATA_JSON_NAME}`)!==void 0:!1}async execute(){let{workspaceRoot:e,logger:r}=this;r.info(rl.SNAPSHOTTING),await Hn(e,{event:Ci.START,workspaceRoot:e});let n=y.resolve(A.GraphStoreOpener),i=y.resolve(A.KnowledgeGitService,{logger:r}),s=await this.openStoreForSnapshot(n);try{let{shouldSkip:o,headSha:a}=await this.shouldSkipSnapshot(i,s);if(o)return r.info("Knowledge graph snapshot is already up to date with HEAD, skipping."),await Hn(e,{event:"snapshot.skipped",reason:"already-up-to-date",headSha:a}),{nodesWritten:0,edgesWritten:0,markdownFilesWritten:0};let l=await Ni(e,s,i);return await YT(e,r),await Hn(e,{event:Ci.SUMMARY,nodesWritten:l.nodesWritten,edgesWritten:l.edgesWritten,markdownFilesWritten:l.markdownFilesWritten}),l}finally{await s.close()}}};var gp={HYDRATING:"Hydrating local database from the knowledge branch...",NOTHING_TO_HYDRATE:'Nothing to hydrate from yet. Please run "docuvia init".'},Pl={START:"hydrate.start",SUMMARY:"hydrate.summary"};async function Dl(t,e){await ve(t,eg,e)}var vl=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(e){let{workspaceRoot:r,logger:n}=this;n.info(gp.HYDRATING),await Dl(r,{event:Pl.START,workspaceRoot:r});let s=await y.resolve(A.GraphStoreOpener)({dbPath:ie(r),readonly:!1});try{let a=await y.resolve(A.HydrationService,{logger:n}).hydrate(r,s,void 0,e);return a.hydrated?(await Dl(r,{event:Pl.SUMMARY,hydrated:!0,knowledgeSha:a.knowledgeSha,nodesLoaded:a.nodesLoaded,edgesLoaded:a.edgesLoaded,edgesDropped:a.edgesDropped}),a):(await Dl(r,{event:Pl.SUMMARY,hydrated:!1,message:gp.NOTHING_TO_HYDRATE}),a)}finally{await s.close()}}};var Gs={SYNCING:"Reconciling the knowledge branch with the remote...",VALIDITY_PASS_BASELINE:"L3 validity pass: first run -- stamped baseline cursor, judged nothing",VALIDITY_PASS_SUMMARY:(t,e)=>`L3 validity pass: ${t} decision(s) confirmed alive, ${e} demoted as dead/superseded`,VALIDITY_PASS_FAILED:t=>`L3 validity pass failed (retries on the next sync): ${t}`},xs={START:"sync-knowledge.start",SUMMARY:"sync-knowledge.summary",VALIDITY_PASS:"sync-knowledge.l3-validity-pass"};async function Us(t,e){await ve(t,tg,e)}var bl="l3ValidityJudgedSha";function vF(t){if(!t.anchor_ranges)return null;try{let e=JSON.parse(t.anchor_ranges);return!Array.isArray(e)||e.length===0?null:{ranges:e}}catch{return null}}function WT(t){if(!t)return[];try{let e=JSON.parse(t);return Array.isArray(e)?e:[]}catch{return[]}}function bF(t,e,r){let n=e.get(t.path);if(!n||n.size===0)return!0;for(let i=t.startRow+1;i<=t.endRow+1;i++){let s=n.get(i);if(s&&r.has(s))return!0}return!1}function wF(t,e,r,n){let i=0,s=0;for(let{row:o,anchors:a}of e){if(!a.ranges.some(p=>n.has(p.path)))continue;let l=new Set([...WT(o.source_commits),...WT(o.initial_source_commits),...o.commit_hash?[o.commit_hash]:[]]),c=a.ranges.every(p=>bF(p,r,l)),u=c?ur.ACTIVE:ur.GARBAGE;u!==o.validity_status&&(t.l3.updateValidityStatus(o.id,u),c?i++:s++)}return{activated:i,superseded:s}}async function jT(t){let{workspaceRoot:e,logger:r,store:n,git:i,blame:s}=t,o=await i.getHeadSha(e),a={activated:0,superseded:0,baseline:!1};if(!o)return a;let l=n.meta.get(bl);if(l===o)return a;if(!l)return n.meta.set(bl,o),a.baseline=!0,a;let c=n.l3.getAllExportable().map(L=>({row:L,anchors:vF(L)})).filter(L=>L.anchors!==null&&(L.row.validity_status===ur.PENDING||L.row.validity_status===ur.ACTIVE));if(c.length===0)return n.meta.set(bl,o),a;let u=new Set(c.flatMap(L=>L.anchors.ranges.map(C=>C.path))),p=new Set((await i.getChangedFilesSince(e,l,"HEAD")).map(L=>L.file)),d=[...u].filter(L=>p.has(L)),f=new Map;for(let L of d)f.set(L,await s.getBlameLineOwners(e,L));let m=new Set(d),_=wF(n,c,f,m);return a.activated=_.activated,a.superseded=_.superseded,n.meta.set(bl,o),a}var wl=class{constructor(e,r,n){this.workspaceRoot=e;this.logger=r;this.gitNetworkTimeoutMs=n}workspaceRoot;logger;gitNetworkTimeoutMs;async execute(){let{workspaceRoot:e,logger:r,gitNetworkTimeoutMs:n}=this;r.info(Gs.SYNCING),await Us(e,{event:xs.START,workspaceRoot:e});let i=y.resolve(A.KnowledgeGitService,{logger:r,gitNetworkTimeoutMs:n}),s=await i.syncKnowledgeBranch(e);s.branchTipSha&&await this.importL3Cards(i,s.branchTipSha);try{await this.runValidityPass()}catch(o){let a=o instanceof Error?o.message:String(o);r.warn(Gs.VALIDITY_PASS_FAILED(a)),await Us(e,{event:xs.VALIDITY_PASS,status:"error",error:a})}return await Us(e,{event:xs.SUMMARY,status:s.status,branchTipSha:s.branchTipSha??null}),s}async importL3Cards(e,r){let{workspaceRoot:n,logger:i}=this,s=y.resolve(A.HydrationService,{logger:i}),a=await y.resolve(A.GraphStoreOpener)({dbPath:ie(n),readonly:!1});try{await e.runUnderKnowledgeLock(n,()=>s.importL3Cards(n,r,a))}finally{await a.close()}}async runValidityPass(){let{workspaceRoot:e,logger:r}=this,i=await y.resolve(A.GraphStoreOpener)({dbPath:ie(e),readonly:!1});try{let s=await jT({workspaceRoot:e,logger:r,store:i,git:y.resolve(A.GitProvider),blame:y.resolve(A.LineBlameProvider)});s.baseline?r.info(Gs.VALIDITY_PASS_BASELINE):r.info(Gs.VALIDITY_PASS_SUMMARY(s.activated,s.superseded)),await Us(e,{event:xs.VALIDITY_PASS,status:"ok",activated:s.activated,superseded:s.superseded,baseline:s.baseline})}finally{await i.close()}}};var ue={DB_RUNNER:"db_runner",DB_FOUND:"db_found",GRAPH_EMPTY:"graph_empty",POST_COMMIT_INGESTION:"post_commit_ingestion",GIT_REACHABILITY:"git_reachability",GIT_RUNNER:"git_runner",LOGS:"logs",TIER_B_COMMIT_CAP:"tier_b_commit_cap",TIER_B_COVERAGE:"tier_b_coverage",GIT_HOOK:"git_hook",PRE_PUSH_HOOK:"pre_push_hook",LLM_REACHABILITY:"llm_reachability",LSP_BINARY:t=>`lsp_binary_${t}`,AGENT_HOOKS_CLAUDE:"agent_hooks_claude",AGENT_HOOKS_CURSOR:"agent_hooks_cursor",TIER_C_QUEUE:"tier_c_queue",STAGED_L3_DECISIONS:"staged_l3_decisions",L2_SEMANTIC_COVERAGE:"l2_semantic_coverage",WORKTREE_DIVERGENCE:"worktree_divergence",AGENT_AUTHED_ADOPTION:"agent_authored_adoption",CALL_GRAPH_RESOLUTION:"call_graph_resolution",CANARY_SELF_TEST:"canary_self_test"},VT=".log",fp={CLAUDE:"Claude",CURSOR:"Cursor"},k={DB_RUNNER_NOT_REGISTERED:"DiagnosticRunnerDb not registered",DB_NOT_FOUND_AT:t=>`Local database not found at ${t}`,GRAPH_EMPTY:"The knowledge graph is empty (nothing ingested yet) -- staged decisions have no L2 anchor to attach to.",GRAPH_EMPTY_SUGGESTION:"run `docuvia init` first \u2014 decisions need a graph to attach to",GRAPH_EMPTY_OK:t=>`Knowledge graph populated (${t} L2 node(s)).`,POST_COMMIT_INGESTION_OK:t=>`Knowledge graph is up to date with HEAD (Tier C queue: ${t} pending).`,POST_COMMIT_INGESTION_RECENT:(t,e)=>`Delta ingestion is behind HEAD (last ingested ${t?t.slice(0,7):"never"}) but ran recently -- likely still in flight from the post-commit hook (Tier C queue: ${e} pending).`,POST_COMMIT_INGESTION_STALE:t=>`The graph is behind HEAD and no analyze run has completed recently -- the post-commit hook's backgrounded ingestion may not be firing (Tier C queue: ${t} pending).`,POST_COMMIT_INGESTION_STALE_SUGGESTION:"run `docuvia analyze` manually to ingest the pending commits, and check `.docuvia/logs/post-commit-hook.log` for hook failures",GIT_RUNNER_NOT_REGISTERED:"DiagnosticRunnerGit not registered",GIT_NETWORK_TIMEOUT_SUGGESTION:"The Git remote operation timed out (5000ms). Check your internet connection or DNS settings.",GIT_NOT_A_REPO_SUGGESTION:"Ensure this workspace is a valid Git repository and the remote 'origin' is set correctly.",GIT_REMOTE_UNREADABLE_SUGGESTION:"Check your SSH keys, PAT, or Git credentials for the remote repository.",GIT_REACHABILITY_FAILED:t=>`Git remote reachability check failed: ${t}`,GIT_NOT_A_REPO_TEXT:"does not appear to be a git repository",GIT_REMOTE_UNREADABLE_TEXT:"Could not read from remote repository",LOGS_ERRORS_FOUND:t=>`Found ${t} critical errors in logs.`,LOGS_ERRORS_FOUND_SUGGESTION:"Check the files in .docuvia/logs/ for details.",LOGS_CHECKED_CLEAN:t=>`Checked ${t} log files, no critical errors found.`,LOGS_NOT_FOUND_AT:t=>`No logs found at ${t}`,TIER_B_CAP_OK:"Tier B commit-cap not yet reached.",TIER_B_CAP_EXCEEDED:"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.",TIER_B_COVERAGE_OK:(t,e)=>`Tier B coverage: ${t}/${e} files processed.`,TIER_B_COVERAGE_LOW:(t,e,r)=>`Only ${r.toFixed(1)}% of tracked files have ever been Tier B-processed (${t}/${e}) -- query results for the rest may show empty edges that mean "unprocessed", not "no relationships".`,TIER_B_COVERAGE_LOW_SUGGESTION:"Run `docuvia analyze --escalate-to-lsp --full` to resync.",GIT_HOOK_NOT_INSTALLED:"No Docuvia post-commit hook installed.",GIT_HOOK_DUPLICATE:"Duplicate hook blocks detected (both the legacy `docuvia snapshot` and current `docuvia analyze` blocks are present and will both fire on every commit).",GIT_HOOK_DUPLICATE_SUGGESTION:"run `docuvia doctor --fix` to repair",GIT_HOOK_LEGACY_ONLY:"The post-commit hook is still running the legacy `docuvia snapshot` command, which no longer performs Tier A delta ingestion.",GIT_HOOK_LEGACY_ONLY_SUGGESTION:"re-run `docuvia init` to upgrade the hook",GIT_HOOK_FLUSH_STALE:"The post-commit hook predates the commit-l3-write flush step -- staged agent-authored L3 decisions would never be flushed into the graph.",GIT_HOOK_FLUSH_STALE_SUGGESTION:"re-run `docuvia init` to upgrade the hook",GIT_HOOK_NOT_RESOLVABLE:"The post-commit hook is installed but `docuvia` is not resolvable from this workspace (the `npx --no-install` invocation would silently no-op on every commit).",GIT_HOOK_NOT_RESOLVABLE_SUGGESTION:"reinstall Docuvia as a project dependency, or check PATH",GIT_HOOK_RESOLVABLE:t=>`Post-commit hook is installed and \`docuvia\` resolves (${t}).`,GIT_HOOK_REPAIRED_NOTE:" Repaired via `doctor --fix` -- re-run `doctor` to confirm.",PRE_PUSH_HOOK_NOT_INSTALLED:"No Docuvia pre-push hook installed.",PRE_PUSH_HOOK_STALE:"The pre-push hook predates the `sync-knowledge` step -- pushes no longer reconcile the knowledge branch with origin.",PRE_PUSH_HOOK_STALE_SUGGESTION:"re-run `docuvia init` to upgrade the hook",PRE_PUSH_HOOK_ENV_GATE_STALE:"The pre-push hook predates the --fallback-ast env-gate flag -- its Tier B step will fail (skipping snapshot/sync-knowledge for that push) whenever the LSP environment isn't ready.",PRE_PUSH_HOOK_HOOKS_CHECK_STALE:"The pre-push hook predates the `hooks check` gate -- its Tier B/snapshot/sync-knowledge chain would run even when `tier-b-c-prepush` is disabled via `docuvia hooks disable`.",PRE_PUSH_HOOK_FAILURE_HINT_STALE:"The pre-push hook predates the Tier B/sync failure hint -- Tier B/C failures stay silent at push time (only in JSONL logs).",PRE_PUSH_HOOK_OK:t=>`Pre-push hook is installed and includes the sync-knowledge step (${t}).`,PRE_PUSH_HOOK_NOT_RESOLVABLE:"The pre-push hook is installed but `docuvia` is not resolvable from this workspace (the `npx --no-install` invocation would silently no-op on every push -- Tier B and sync-knowledge never actually run).",PRE_PUSH_HOOK_REPAIRED_NOTE:" Repaired via `doctor --fix` -- re-run `doctor` to confirm.",LLM_NOT_CONFIGURED:"Not configured -- Tier C is inactive (AI_DOCUVIA_INTEGRATIONS_OPENAI_BASE_URL or AI_DOCUVIA_MODEL not set).",LLM_REACHABLE:"Tier C LLM bridge is reachable and accepts the configured API key.",LLM_UNREACHABLE:t=>`Tier C LLM bridge is configured but unreachable or rejecting requests: ${t}`,LLM_UNREACHABLE_SUGGESTION:"Check that the CLIProxyAPI bridge is running, that its /v1/chat/completions route accepts the configured API key, and that AI_DOCUVIA_INTEGRATIONS_OPENAI_BASE_URL points at it.",TIER_C_QUEUE_OK:(t,e)=>`Tier C queue: ${t} pending, last drain processed ${e} item(s).`,TIER_C_QUEUE_STUCK:(t,e)=>`Tier C queue is stuck (${t} pending; last drain processed 0, reason: ${e}) -- the LLM bridge path analyze dials is not working, so L2 descriptions/validated edges will never be backfilled.`,TIER_C_QUEUE_STUCK_SUGGESTION:"Check that the CLIProxyAPI bridge is running and its /v1/chat/completions route accepts the configured API key, then run `docuvia analyze --escalate-to-lsp` to retry the drain",TIER_C_QUEUE_NEVER_DRAINED:t=>`Tier C queue has ${t} pending item(s) but no drain has ever completed -- either never enqueued-to-drained or permanently stuck from the start.`,TIER_C_QUEUE_NEVER_DRAINED_SUGGESTION:"Run `docuvia analyze --escalate-to-lsp` once so the drain path actually executes, and check `.docuvia/logs/analyze.log` for tierC events",STAGED_L3_OK:t=>t===0?"No agent-authored decisions waiting in the staging file.":`${t} staged agent-authored decision(s) waiting, none older than the staging window.`,STAGED_L3_STRANDED:(t,e,r)=>`${t} agent-authored decision(s) stranded in the staging file -- the oldest has waited ${e} day(s), anchored to \`${r}\`. \`--stage\` only flushes when a later commit's diff contains that exact file, so these will never land on their own.`,STAGED_L3_STRANDED_SUGGESTION:"Write them directly with `docuvia analyze <file> --agent-authored` (the default path -- it lands in one pass, no LLM call, no scheduling), then clear `.docuvia/pending-l3-decisions.json`",L2_SEMANTIC_COVERAGE_OK:(t,e)=>`L2 semantic coverage: ${t}/${e} node(s) carry a description.`,L2_SEMANTIC_COVERAGE_LOW:(t,e,r)=>`Only ${r.toFixed(1)}% of L2 nodes carry a description (${t}/${e}) -- the knowledge graph is structurally correct but semantically empty, so query/impact results surface little "why" content.`,L2_SEMANTIC_COVERAGE_LOW_SUGGESTION:"Run `docuvia analyze --escalate-to-lsp` (Tier C) so the LLM enrichment pass can backfill descriptions, or explicitly declare the graph structural-only",L2_SEMANTIC_COVERAGE_STRUCTURAL_ONLY:(t,e)=>`L2 semantic coverage: ${t}/${e} node(s) carry a description (structural-only graph -- Tier C LLM enrichment is not configured, so descriptions cannot be written yet).`,WORKTREE_DIVERGENCE_OK:t=>`${t} worktree(s) total; no sibling worktree carries its own .docuvia graph.`,WORKTREE_DIVERGENCE_FAIL:(t,e)=>`${t} sibling worktree(s) carry their own .docuvia/local.db -- ${e.join(", ")}: per-worktree knowledge graphs that never reconcile (decisions staged in one worktree never reach the others).`,WORKTREE_DIVERGENCE_SUGGESTION:"Point all worktrees at one graph via a shared DOCUVIA_DB_PATH (or a symlinked .docuvia), or run `docuvia sync-knowledge` from a canonical worktree before pushing",AGENT_AUTHED_ADOPTION_OK:(t,e,r,n)=>`Agent-authored decisions: ${n} flushed in graph, ${t} staged pending flush; ${r} of ${e} recently-changed file(s) carry no staged decision.`,AGENT_AUTHED_ADOPTION_SKIPPED:"No recently-changed files to evaluate for agent-authored staging.",LSP_BINARY_AVAILABLE:t=>`LSP-precision edges available (${t} resolved).`,LSP_BINARY_UNAVAILABLE:t=>`LSP-precision edges unavailable (${t}).`,LSP_BINARY_UNAVAILABLE_SUGGESTION:"Build/compile the project so the language server can resolve it (install dependencies, restore/build for compiled languages), then re-run `docuvia doctor`.",AGENT_HOOKS_FOUND:t=>`${t} hooks found.`,AGENT_HOOKS_NOT_FOUND:t=>`${t} hooks not found (run \`docuvia init\` to install).`,CALL_GRAPH_RESOLUTION_NO_DATA:"No call-site resolution data recorded yet (run `docuvia analyze` to populate it).",CALL_GRAPH_RESOLUTION_OK:(t,e,r)=>`Call-graph resolution: ${t}/${e} applicable call site(s) resolved into calls edges across ${r} ingested file(s).`,CALL_GRAPH_RESOLUTION_LOW:(t,e,r,n)=>`Call-graph resolution is low: only ${r.toFixed(1)}% of applicable call sites resolved into calls edges (${t}/${e} across ${n} file(s)) -- impact results in these areas may understate real dependents ("no dependents" can mean "unresolved", not "safe").`,CALL_GRAPH_RESOLUTION_LOW_SUGGESTION:"Run `docuvia analyze --escalate-to-lsp --full` to let Tier B LSP edge resolution recover the unresolved call sites.",CANARY_SELF_TEST_OK:t=>`Graph self-test passed: ${t} sampled node(s) resolved via exact-name lookup; the FTS index answered a known-present token.`,CANARY_SELF_TEST_LOOKUP_FAIL:(t,e)=>`Graph self-test FAILED: ${t} of ${e} sampled l2_nodes row(s) could not be resolved by exact-name lookup -- rows exist that query/impact can never find.`,CANARY_SELF_TEST_FTS_FAIL:t=>`Graph self-test FAILED: FTS search for known-indexed token "${t}" returned 0 rows while l2_nodes holds data -- the FTS index is out of sync with l2_nodes.`,CANARY_SELF_TEST_FAIL_SUGGESTION:"Run `docuvia analyze --full` to rebuild the local graph from the working tree (or `docuvia hydrate --force` to re-pull it from the knowledge branch)."};async function zT(t,e,r){let n=y.resolve(A.EdgeResolutionProviders,{logger:e}),i=await mp(t,n),s=[];for(let o of i){let a=n[o];if(!a)continue;let l=a();r&&l.configure(r);let c=await l.checkAvailability(t);c.available||s.push(c)}return s.length===0?{available:!0}:i.length>0&&s.length===i.length?s.length===1?s[0]:{available:!1,reason:s.map(o=>o.reason??"").join("; ")}:{available:!0}}async function mp(t,e){if(!y.has(A.GraphStoreOpener))return Object.keys(e);let r;try{r=await y.resolve(A.GraphStoreOpener)({dbPath:ie(t),readonly:!0});let i=Ps(r),s=new Set;for(let o of i){let a=ip(o.file);a&&s.add(a)}return Array.from(s)}catch{return Object.keys(e)}finally{await r?.close()}}import{existsSync as FF}from"fs";import*as hp from"path";import{execFile as MF}from"child_process";import{promisify as kF}from"util";var GF=kF(MF),xF=5e3,UF="npx",HF="--no-install",Ep="docuvia",BF=[".cmd",".CMD",".exe",""],JT="docuvia doctor";function KF(t){let e=hp.join(t,"node_modules",".bin");return(process.platform==="win32"?BF.map(n=>`${Ep}${n}`):[Ep]).some(n=>FF(hp.join(e,n)))}function qT(t){if(!t||typeof t!="object")return"";let{stdout:e,stderr:r}=t;return`${e??""}${r??""}`}async function $F(t){try{let e=await GF(UF,[HF,Ep],{cwd:t,timeout:xF});return qT(e).includes(JT)}catch(e){return qT(e).includes(JT)}}async function _p(t){return KF(t)?!0:$F(t)}import*as Lt from"path";import*as cr from"fs/promises";var Fl=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(e={}){let{skipDb:r=!1,skipGit:n=!1,skipLogs:i=!1,skipHooks:s=!1,skipLsp:o=!1,skipLlm:a=!1,fix:l=!1,llmBaseUrl:c,llmApiKey:u,llmModel:p}=e,d={},f=[await this.runOrSkip(r,()=>this.runDbDiagnostics(d)),await this.runOrSkip(n,()=>this.runGitDiagnostics(d)),await this.runOrSkip(i,()=>this.runLogsDiagnostics(d)),await this.runOrSkip(n,()=>this.runGitHookDiagnostic(d,l)),await this.runOrSkip(n,()=>this.runPrePushHookDiagnostic(d,l)),await this.runOrSkip(a,()=>this.runLlmReachabilityDiagnostic(d,c,u,p)),await this.runOrSkip(o,()=>this.runLspBinaryDiagnostic(d)),await this.runOrSkip(r,()=>this.runTierBCoverageDiagnostic(d)),await this.runOrSkip(r,()=>this.runGraphEmptyDiagnostic(d)),await this.runOrSkip(r||n,()=>this.runPostCommitIngestionDiagnostic(d)),...await this.runGraphHealthDiagnostics(d,r,n,c)];return await this.runOrSkip(r,()=>this.runTierBCommitCapDiagnostic(d)),await this.runOrSkip(s,()=>this.runAgentHooksDiagnostic(d)),{allPassed:f.every(Boolean),diagnostics:d}}async runOrSkip(e,r){if(e)return!0;let n=await r();return n===void 0?!0:!!n}async runGraphHealthDiagnostics(e,r,n,i){return[await this.runOrSkip(r,()=>this.runTierCQueueDiagnostic(e)),await this.runOrSkip(r,()=>this.runL2SemanticCoverageDiagnostic(e,i)),await this.runStagedL3Diagnostic(e),await this.runOrSkip(n,()=>this.runWorktreeDivergenceDiagnostic(e)),await this.runOrSkip(r||n,()=>this.runAgentAuthoredAdoptionDiagnostic(e)),await this.runOrSkip(r,()=>this.runCallGraphResolutionDiagnostic(e)),await this.runOrSkip(r,()=>this.runCanarySelfTestDiagnostic(e))]}async runCanarySelfTestDiagnostic(e){if(!y.has(A.GraphStoreOpener))return!0;let r;try{r=await y.resolve(A.GraphStoreOpener)({dbPath:ie(this.workspaceRoot),readonly:!0});let i=r.graph.getCanarySample(S.DEFAULT_CANARY_SAMPLE_SIZE);if(i.length===0)return!0;let s=i.filter(({name:a})=>!r?.graph.findNodeByName(a));if(s.length>0)return e[ue.CANARY_SELF_TEST]={status:K.FAIL,message:k.CANARY_SELF_TEST_LOOKUP_FAIL(s.length,i.length),suggestion:k.CANARY_SELF_TEST_FAIL_SUGGESTION},!1;let o;for(let{name:a}of i)if(o=a.split(/[^A-Za-z0-9]+/).filter(Boolean).reduce((c,u)=>u.length>=3&&u.length>c.length?u:c,""),o)break;return o&&r.fts.searchL2Nodes([o],10).length===0?(e[ue.CANARY_SELF_TEST]={status:K.FAIL,message:k.CANARY_SELF_TEST_FTS_FAIL(o),suggestion:k.CANARY_SELF_TEST_FAIL_SUGGESTION},!1):(e[ue.CANARY_SELF_TEST]={status:K.PASS,message:k.CANARY_SELF_TEST_OK(i.length)},!0)}catch{return!0}finally{await r?.close()}}async runGitHookDiagnostic(e,r){if(!y.has(A.GitProvider))return!0;try{let n=y.resolve(A.GitProvider),i=await n.readHookFile(this.workspaceRoot,S.POST_COMMIT_HOOK_NAME),s=!!i?.includes(S.POST_COMMIT_HOOK_MARKER),o=!!i?.includes(S.LEGACY_POST_COMMIT_HOOK_MARKER),a=!!i?.includes(S.POST_COMMIT_FLUSH_L3_MARKER),l=await this.classifyGitHookState(n,s,o,a);return l=await this.repairGitHookIfRequested(r,l,s,o,a),e[ue.GIT_HOOK]=l,l.status===K.PASS}catch{return!0}}async repairGitHookIfRequested(e,r,n,i,s){return e?n&&i?this.repairDuplicateGitHookIfRequested(r):r.status===K.FAIL&&!s?this.repairStaleGitHookIfRequested(r):r:r}async repairStaleGitHookIfRequested(e){if(!y.has(A.KnowledgeGitService))return e;let r=y.resolve(A.KnowledgeGitService,{logger:this.logger}),{installed:n}=await r.installPostCommitHook(this.workspaceRoot);return n?{...e,message:e.message+k.GIT_HOOK_REPAIRED_NOTE}:e}async classifyGitHookState(e,r,n,i){if(!r&&!n)return{status:K.PASS,message:k.GIT_HOOK_NOT_INSTALLED};if(r&&n)return{status:K.FAIL,message:k.GIT_HOOK_DUPLICATE,suggestion:k.GIT_HOOK_DUPLICATE_SUGGESTION};if(n)return{status:K.FAIL,message:k.GIT_HOOK_LEGACY_ONLY,suggestion:k.GIT_HOOK_LEGACY_ONLY_SUGGESTION};if(!i)return{status:K.FAIL,message:k.GIT_HOOK_FLUSH_STALE,suggestion:k.GIT_HOOK_FLUSH_STALE_SUGGESTION};if(!await _p(this.workspaceRoot))return{status:K.FAIL,message:k.GIT_HOOK_NOT_RESOLVABLE,suggestion:k.GIT_HOOK_NOT_RESOLVABLE_SUGGESTION};let o=await e.resolveHooksDir(this.workspaceRoot);return{status:K.PASS,message:k.GIT_HOOK_RESOLVABLE(Lt.join(o,S.POST_COMMIT_HOOK_NAME))}}async repairDuplicateGitHookIfRequested(e){if(!y.has(A.KnowledgeGitService))return e;let r=y.resolve(A.KnowledgeGitService,{logger:this.logger}),{repaired:n}=await r.repairDuplicatePostCommitHook(this.workspaceRoot);return n?{...e,message:e.message+k.GIT_HOOK_REPAIRED_NOTE}:e}async runPrePushHookDiagnostic(e,r){if(!y.has(A.GitProvider))return!0;try{let n=y.resolve(A.GitProvider),i=await n.readHookFile(this.workspaceRoot,S.PRE_PUSH_HOOK_NAME),s=!!i?.includes(S.PRE_PUSH_HOOK_MARKER),o=!!i?.includes(S.PRE_PUSH_SYNC_KNOWLEDGE_MARKER),a=!!i?.includes(S.PRE_PUSH_ENV_GATE_MARKER),l=!!i?.includes(S.PRE_PUSH_HOOKS_CHECK_MARKER),c=!!i?.includes(S.PRE_PUSH_FAILURE_HINT_MARKER),u=await this.classifyPrePushHookState(n,s,o,a,l,c);return u=await this.repairPrePushHookIfRequested(r,u,s,o,a,l,c),e[ue.PRE_PUSH_HOOK]=u,u.status===K.PASS}catch{return!0}}async repairPrePushHookIfRequested(e,r,n,i,s,o,a){return!e||!n||i&&s&&o&&a?r:this.repairStalePrePushHookIfRequested(r)}async repairStalePrePushHookIfRequested(e){if(!y.has(A.KnowledgeGitService))return e;let r=y.resolve(A.KnowledgeGitService,{logger:this.logger}),{installed:n}=await r.installPrePushHook(this.workspaceRoot);return n?{...e,message:e.message+k.PRE_PUSH_HOOK_REPAIRED_NOTE}:e}async classifyPrePushHookState(e,r,n,i,s,o){if(!r)return{status:K.PASS,message:k.PRE_PUSH_HOOK_NOT_INSTALLED};if(!n)return{status:K.FAIL,message:k.PRE_PUSH_HOOK_STALE,suggestion:k.PRE_PUSH_HOOK_STALE_SUGGESTION};if(!i)return{status:K.FAIL,message:k.PRE_PUSH_HOOK_ENV_GATE_STALE,suggestion:k.PRE_PUSH_HOOK_STALE_SUGGESTION};if(!s)return{status:K.FAIL,message:k.PRE_PUSH_HOOK_HOOKS_CHECK_STALE,suggestion:k.PRE_PUSH_HOOK_STALE_SUGGESTION};if(!o)return{status:K.FAIL,message:k.PRE_PUSH_HOOK_FAILURE_HINT_STALE,suggestion:k.PRE_PUSH_HOOK_STALE_SUGGESTION};if(!await _p(this.workspaceRoot))return{status:K.FAIL,message:k.PRE_PUSH_HOOK_NOT_RESOLVABLE,suggestion:k.GIT_HOOK_NOT_RESOLVABLE_SUGGESTION};let l=await e.resolveHooksDir(this.workspaceRoot);return{status:K.PASS,message:k.PRE_PUSH_HOOK_OK(Lt.join(l,S.PRE_PUSH_HOOK_NAME))}}async runLlmReachabilityDiagnostic(e,r,n,i){if(!r||!i)return e[ue.LLM_REACHABILITY]={status:K.PASS,message:k.LLM_NOT_CONFIGURED},!0;if(!y.has(A.LlmClient))return!0;try{let o=y.resolve(A.LlmClient)();o.initialize({baseUrl:r,apiKey:n});let a=await o.checkBridgeReachability(i);return a.available?(e[ue.LLM_REACHABILITY]={status:K.PASS,message:k.LLM_REACHABLE},!0):(e[ue.LLM_REACHABILITY]={status:K.FAIL,message:k.LLM_UNREACHABLE(a.reason??""),suggestion:k.LLM_UNREACHABLE_SUGGESTION},!1)}catch{return!0}}async runLspBinaryDiagnostic(e){if(!y.has(A.EdgeResolutionProviders))return!0;try{let r=y.resolve(A.EdgeResolutionProviders,{logger:this.logger}),n=await mp(this.workspaceRoot,r),i=!0;for(let s of n){let o=r[s];if(!o)continue;let a=o(),l=await a.checkAvailability(this.workspaceRoot);e[ue.LSP_BINARY(s)]=l.available?{status:K.PASS,message:k.LSP_BINARY_AVAILABLE(a.name)}:{status:K.FAIL,message:k.LSP_BINARY_UNAVAILABLE(l.reason??""),suggestion:k.LSP_BINARY_UNAVAILABLE_SUGGESTION},l.available||(i=!1)}return i}catch{return!0}}async runAgentHooksDiagnostic(e){let r=[{key:ue.AGENT_HOOKS_CLAUDE,dir:zn,filename:wr,platformName:fp.CLAUDE},{key:ue.AGENT_HOOKS_CURSOR,dir:Jn,filename:Fr,platformName:fp.CURSOR}];for(let{key:n,dir:i,filename:s,platformName:o}of r){let a=Lt.join(this.workspaceRoot,i,s),l;try{await cr.stat(a),l=!0}catch{l=!1}e[n]={status:K.PASS,message:l?k.AGENT_HOOKS_FOUND(o):k.AGENT_HOOKS_NOT_FOUND(o)}}}async runTierBCommitCapDiagnostic(e){if(!y.has(A.GraphStoreOpener))return;let r;try{r=await y.resolve(A.GraphStoreOpener)({dbPath:ie(this.workspaceRoot),readonly:!0});let i=bi(r);e[ue.TIER_B_COMMIT_CAP]={status:K.PASS,message:i?k.TIER_B_CAP_EXCEEDED:k.TIER_B_CAP_OK}}catch{}finally{await r?.close()}}async runTierBCoverageDiagnostic(e){if(!y.has(A.GraphStoreOpener))return!0;let r;try{r=await y.resolve(A.GraphStoreOpener)({dbPath:ie(this.workspaceRoot),readonly:!0});let{totalFiles:i,processedFiles:s}=r.files.getTierBCoverage(),o=i>0?s/i:1,a=o<S.DEFAULT_TIER_B_COVERAGE_FAIL_THRESHOLD;return e[ue.TIER_B_COVERAGE]=a?{status:K.FAIL,message:k.TIER_B_COVERAGE_LOW(s,i,o*100),suggestion:k.TIER_B_COVERAGE_LOW_SUGGESTION}:{status:K.PASS,message:k.TIER_B_COVERAGE_OK(s,i)},!a}catch{return!0}finally{await r?.close()}}async runGraphEmptyDiagnostic(e){if(!y.has(A.GraphStoreOpener))return!0;let r;try{r=await y.resolve(A.GraphStoreOpener)({dbPath:ie(this.workspaceRoot),readonly:!0});let i=r.projects.getFirst(),{l2Nodes:s}=r.graph.count(),o=!i||s===0;return e[ue.GRAPH_EMPTY]=o?{status:K.FAIL,message:k.GRAPH_EMPTY,suggestion:k.GRAPH_EMPTY_SUGGESTION}:{status:K.PASS,message:k.GRAPH_EMPTY_OK(s)},!o}catch{return!0}finally{await r?.close()}}async runPostCommitIngestionDiagnostic(e){if(!y.has(A.GraphStoreOpener)||!y.has(A.GitProvider))return!0;let r;try{let n=y.resolve(A.GitProvider);r=await y.resolve(A.GraphStoreOpener)({dbPath:ie(this.workspaceRoot),readonly:!0});let s=await n.getHeadSha(this.workspaceRoot);if(!s)return!0;let o=r.meta.get(S.META_KEY_LAST_INGESTED_SOURCE_SHA),a=lr(r).length;if(o===s)return e[ue.POST_COMMIT_INGESTION]={status:K.PASS,message:k.POST_COMMIT_INGESTION_OK(a)},!0;let l=await this.hasRecentAnalyzeActivity();return e[ue.POST_COMMIT_INGESTION]=l?{status:K.PASS,message:k.POST_COMMIT_INGESTION_RECENT(o,a)}:{status:K.FAIL,message:k.POST_COMMIT_INGESTION_STALE(a),suggestion:k.POST_COMMIT_INGESTION_STALE_SUGGESTION},l}catch{return!0}finally{await r?.close()}}async hasRecentAnalyzeActivity(){let e=Lt.join(this.workspaceRoot,Ee,Dr,$i),r;try{r=await cr.readFile(e,H)}catch{return!1}let n=S.DEFAULT_POST_COMMIT_INGESTION_GRACE_MS,i=Date.now(),s=r.split(`
173
- `).filter(o=>o.trim().length>0);for(let o of s)try{let a=JSON.parse(o);if(typeof a.ts=="string"){let l=Date.parse(a.ts);if(!Number.isNaN(l)&&i-l<=n)return!0}}catch{}return!1}async runTierCQueueDiagnostic(e){if(!y.has(A.GraphStoreOpener))return!0;let r;try{r=await y.resolve(A.GraphStoreOpener)({dbPath:ie(this.workspaceRoot),readonly:!0});let i=lr(r).length;if(i===0)return e[ue.TIER_C_QUEUE]={status:K.PASS,message:k.TIER_C_QUEUE_OK(0,0)},!0;let s=await this.readLastTierCDrainOutcome();return s?s.processed===0?(e[ue.TIER_C_QUEUE]={status:K.FAIL,message:k.TIER_C_QUEUE_STUCK(i,s.reason??"unknown"),suggestion:k.TIER_C_QUEUE_STUCK_SUGGESTION},!1):(e[ue.TIER_C_QUEUE]={status:K.PASS,message:k.TIER_C_QUEUE_OK(i,s.processed)},!0):(e[ue.TIER_C_QUEUE]={status:K.FAIL,message:k.TIER_C_QUEUE_NEVER_DRAINED(i),suggestion:k.TIER_C_QUEUE_NEVER_DRAINED_SUGGESTION},!1)}catch{return!0}finally{await r?.close()}}async runStagedL3Diagnostic(e){let r;try{r=await Fi(this.workspaceRoot,this.logger)}catch{return!0}let n=Date.now(),i=r.filter(a=>{let l=Date.parse(a.stagedAt);return Number.isFinite(l)&&n-l>=S.DEFAULT_STAGED_L3_STRANDED_AFTER_MS});if(i.length===0)return e[ue.STAGED_L3_DECISIONS]={status:K.PASS,message:k.STAGED_L3_OK(r.length)},!0;let s=i.reduce((a,l)=>Date.parse(a.stagedAt)<=Date.parse(l.stagedAt)?a:l),o=Math.floor((n-Date.parse(s.stagedAt))/S.DEFAULT_STAGED_L3_STRANDED_AFTER_MS);return e[ue.STAGED_L3_DECISIONS]={status:K.FAIL,message:k.STAGED_L3_STRANDED(i.length,o,s.filePath),suggestion:k.STAGED_L3_STRANDED_SUGGESTION},!1}async readLastTierCDrainOutcome(){let e=Lt.join(this.workspaceRoot,Ee,Dr,$i),r;try{r=await cr.readFile(e,H)}catch{return}let n,i;for(let s of r.split(`
174
- `))try{let o=JSON.parse(s);o.event===Y.TIER_C_SUMMARY?n={processed:Number(o.processed??0)}:o.event===Y.TIER_C_ITEM_FAILED&&typeof o.reason=="string"&&(i=o.reason)}catch{}if(n)return{processed:n.processed,reason:i}}async runL2SemanticCoverageDiagnostic(e,r){if(!y.has(A.GraphStoreOpener))return!0;let n;try{n=await y.resolve(A.GraphStoreOpener)({dbPath:ie(this.workspaceRoot),readonly:!0});let{totalNodes:s,describedNodes:o}=n.graph.getSemanticCoverage(),a=s>0?o/s:1,l=a<S.DEFAULT_L2_SEMANTIC_COVERAGE_FAIL_THRESHOLD,c=!!r;return e[ue.L2_SEMANTIC_COVERAGE]=l?c?{status:K.FAIL,message:k.L2_SEMANTIC_COVERAGE_LOW(o,s,a*100),suggestion:k.L2_SEMANTIC_COVERAGE_LOW_SUGGESTION}:{status:K.PASS,message:k.L2_SEMANTIC_COVERAGE_STRUCTURAL_ONLY(o,s)}:{status:K.PASS,message:k.L2_SEMANTIC_COVERAGE_OK(o,s)},!(l&&c)}catch{return!0}finally{await n?.close()}}async runWorktreeDivergenceDiagnostic(e){if(!y.has(A.GitProvider))return!0;try{let n=await y.resolve(A.GitProvider).listWorktrees(this.workspaceRoot),i=Lt.resolve(this.workspaceRoot),s=[];for(let o of n){if(Lt.resolve(o.path)===i)continue;let a=Lt.join(o.path,Ee,Yi);await cr.stat(a).catch(()=>null)&&s.push(o.path)}return e[ue.WORKTREE_DIVERGENCE]=s.length>0?{status:K.FAIL,message:k.WORKTREE_DIVERGENCE_FAIL(s.length,s),suggestion:k.WORKTREE_DIVERGENCE_SUGGESTION}:{status:K.PASS,message:k.WORKTREE_DIVERGENCE_OK(n.length)},s.length===0}catch{return!0}}async runAgentAuthoredAdoptionDiagnostic(e){if(!y.has(A.GraphStoreOpener)||!y.has(A.GitProvider))return!0;let r;try{let n=y.resolve(A.GitProvider);r=await y.resolve(A.GraphStoreOpener)({dbPath:ie(this.workspaceRoot),readonly:!0});let s=await n.getHeadSha(this.workspaceRoot),o=r.meta.get(S.META_KEY_LAST_INGESTED_SOURCE_SHA),a=o&&o!==s?await n.getChangedFilesSince(this.workspaceRoot,o):[];if(a.length===0)return e[ue.AGENT_AUTHED_ADOPTION]={status:K.PASS,message:k.AGENT_AUTHED_ADOPTION_SKIPPED},!0;let l=await Fi(this.workspaceRoot,this.logger),c=new Set(l.map(d=>d.filePath)),u=r.l3.getAllExportable().filter(d=>d.source===xt.AGENT_AUTHORED).length,p=a.filter(d=>!c.has(d.file)).length;return e[ue.AGENT_AUTHED_ADOPTION]={status:K.PASS,message:k.AGENT_AUTHED_ADOPTION_OK(l.length,a.length,p,u)},!0}catch{return!0}finally{await r?.close()}}async runCallGraphResolutionDiagnostic(e){if(!y.has(A.GraphStoreOpener))return!0;let r;try{r=await y.resolve(A.GraphStoreOpener)({dbPath:ie(this.workspaceRoot),readonly:!0});let{byFile:i,total:s}=wS(r),o=Object.keys(i).length;if(o===0||s.total===0)return e[ue.CALL_GRAPH_RESOLUTION]={status:K.PASS,message:k.CALL_GRAPH_RESOLUTION_NO_DATA},!0;let a=cg(s),l=a>0?s.resolved/a:1,c=l<S.DEFAULT_CALL_RESOLUTION_NOTE_THRESHOLD;return e[ue.CALL_GRAPH_RESOLUTION]=c?{status:K.PASS,message:k.CALL_GRAPH_RESOLUTION_LOW(s.resolved,a,l*100,o),suggestion:k.CALL_GRAPH_RESOLUTION_LOW_SUGGESTION}:{status:K.PASS,message:k.CALL_GRAPH_RESOLUTION_OK(s.resolved,a,o)},!0}catch{return!0}finally{await r?.close()}}async runDbDiagnostics(e){let r=Lt.join(this.workspaceRoot,Ee,Yi);if(!await cr.stat(r).catch(()=>null))return e[ue.DB_FOUND]={status:K.FAIL,message:k.DB_NOT_FOUND_AT(r)},!1;if(!y.has(A.DiagnosticRunnerDb))return e[ue.DB_RUNNER]={status:K.FAIL,message:k.DB_RUNNER_NOT_REGISTERED},!1;let s=await y.resolve(A.DiagnosticRunnerDb).checkHealth(r);return this.mergeDiagnosticResults(e,s)}async runGitDiagnostics(e){if(!y.has(A.DiagnosticRunnerGit))return e[ue.GIT_RUNNER]={status:K.FAIL,message:k.GIT_RUNNER_NOT_REGISTERED},!1;try{let n=await y.resolve(A.DiagnosticRunnerGit,{logger:this.logger}).checkHealth(this.workspaceRoot);return this.mergeDiagnosticResults(e,n)}catch(r){return e[ue.GIT_REACHABILITY]=this.buildGitReachabilityFailure(r),!1}}mergeDiagnosticResults(e,r){let n=!0;for(let[i,s]of Object.entries(r))e[i]=s,s.status===K.FAIL&&(n=!1);return n}buildGitReachabilityFailure(e){let r=e instanceof E||e instanceof Error?e.message:String(e),n;return e instanceof E&&(e.code===T.GIT_NETWORK_TIMEOUT?n=k.GIT_NETWORK_TIMEOUT_SUGGESTION:e.code===T.GIT_COMMAND_FAILED&&r.includes(k.GIT_NOT_A_REPO_TEXT)?n=k.GIT_NOT_A_REPO_SUGGESTION:e.code===T.GIT_COMMAND_FAILED&&r.includes(k.GIT_REMOTE_UNREADABLE_TEXT)&&(n=k.GIT_REMOTE_UNREADABLE_SUGGESTION)),{status:K.FAIL,message:k.GIT_REACHABILITY_FAILED(r),suggestion:n}}async runLogsDiagnostics(e){let r=Lt.join(this.workspaceRoot,Ee,Dr);try{let{errorsFound:n,logsChecked:i}=await this.scanLogFiles(r);return n>0?(e[ue.LOGS]={status:K.FAIL,message:k.LOGS_ERRORS_FOUND(n),suggestion:k.LOGS_ERRORS_FOUND_SUGGESTION},!1):(e[ue.LOGS]={status:K.PASS,message:k.LOGS_CHECKED_CLEAN(i)},!0)}catch{return e[ue.LOGS]={status:K.PASS,message:k.LOGS_NOT_FOUND_AT(r)},!0}}async scanLogFiles(e){let r=0,n=0,i=await cr.readdir(e);for(let s of i){if(!s.endsWith(VT))continue;n++;let a=(await cr.readFile(Lt.join(e,s),H)).split(`
175
- `).filter(l=>l.trim().length>0);for(let l of a)try{let c=JSON.parse(l);c.level&&c.level>=50&&r++}catch{}}return{errorsFound:r,logsChecked:n}}};var Ml=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(e=!1){let{workspaceRoot:r,logger:n}=this,i=y.resolve(A.KnowledgeGitService,{logger:n}),s=await this.removeHookSafely(()=>i.removePostCommitHook(r),S.POST_COMMIT_HOOK_NAME),o=await this.removeHookSafely(()=>i.removePrePushHook(r),S.PRE_PUSH_HOOK_NAME),a=!1;if(!e)try{({deleted:a}=await i.deleteKnowledgeBranch(r))}catch(l){this.logger.warn("Failed to delete the docuvia-knowledge git branch",{error:l instanceof Error?l.message:String(l)})}return{postCommitRemoved:s,prePushRemoved:o,knowledgeBranchDeleted:a}}async removeHookSafely(e,r){try{let{removed:n}=await e();return n}catch(n){return this.logger.warn(`Failed to remove the ${r} git hook`,{error:n instanceof Error?n.message:String(n)}),!1}}};import QT from"fs/promises";import YF from"path";var XT={REMOVED:"Removed .docuvia/ directory",NOT_FOUND:".docuvia/ directory not present; nothing to remove"};async function ZT(t,e){let r=YF.join(t,Ee);if(!Pi(r,t))throw new E(T.UNINSTALL_WORKFLOW_FAILED,`Refusing to remove directory at ${r}: resolved outside workspace ${t}`);let n=!0;try{await QT.access(r)}catch{n=!1}return n?(await QT.rm(r,{recursive:!0,force:!0}),e.info(XT.REMOVED),{removed:!0}):(e.debug(XT.NOT_FOUND),{removed:!1})}async function eA(t,e){return Mi(t,e)}async function tA(t,e,r,n){return await kT(t,e,r,n),Mi(t,n)}function Se(t,e){let r=R.get(t,e);if(r===void 0)throw new E(T.INVALID_INPUT,IS.MISSING_MEMORY_KEY(e,t));return r}function rA(t){let e=R.get(t,O.LSP_BINARY_OVERRIDE),r=R.get(t,O.LSP_ARGS_OVERRIDE),n=R.get(t,O.LSP_TIMEOUT_MS),i=R.get(t,O.LSP_MAX_PROCESSES);if(!(e===void 0&&r===void 0&&n===void 0&&i===void 0))return{binaryOverride:e,argsOverride:r,timeoutMs:n,maxProcesses:i}}var X={async init(t,e){let r=Se(t,O.WORKSPACE_ROOT);return new nl(r,e).execute()},async clean(t,e){let r=Se(t,O.WORKSPACE_ROOT);return new ol(r,e).execute()},async status(t,e){let r=Se(t,O.WORKSPACE_ROOT);return new ul(r,e).execute()},async sync(t,e,r){let n=Se(t,O.WORKSPACE_ROOT),i=Se(t,O.API_URL),s=Se(t,O.PROJECT_ID),o=R.get(t,O.COMMIT_SHA);return new pl(n,e,i,r).execute({projectId:s,commitSha:o})},async analyze(t,e,r){let n=Se(t,O.WORKSPACE_ROOT);if(R.get(t,O.FLUSH_STAGED_L3))return new on(n,e,{flushStagedL3:!0}).execute();let s=R.get(t,O.TARGET_PATH),o=R.get(t,O.AGENT_AUTHORED_DECISIONS);if(s&&o)return new on(n,e,{targetPath:s,agentAuthoredDecisions:o}).execute();if(s){let l=Se(t,O.LLM_BASE_URL),c=Se(t,O.LLM_MODEL);return new on(n,e,{targetPath:s,llmBaseUrl:l,llmApiKey:r,llmModel:c}).execute()}return R.get(t,O.ESCALATE_TO_LSP)?new on(n,e,{escalateToLsp:!0,lspProviderConfig:rA(t),tierBCommitCap:R.get(t,O.TIER_B_COMMIT_CAP),full:R.get(t,O.TIER_B_FULL_RESYNC),llmBaseUrl:R.get(t,O.LLM_BASE_URL),llmApiKey:r,llmModel:R.get(t,O.LLM_MODEL),tierCDailyCallCap:R.get(t,O.TIER_C_DAILY_CALL_CAP),tierCDailyTokenCap:R.get(t,O.TIER_C_DAILY_TOKEN_CAP),tierCWallClockMs:R.get(t,O.TIER_C_WALL_CLOCK_MS),tierCItemCap:R.get(t,O.TIER_C_ITEM_CAP),tierCLoadThreshold:R.get(t,O.TIER_C_LOAD_THRESHOLD),force:R.get(t,O.FORCE),tierCDrainAll:R.get(t,O.TIER_C_DRAIN_ALL)}).execute():new on(n,e).execute()},async stageAgentAuthoredDecisions(t,e){let r=Se(t,O.WORKSPACE_ROOT),n=Se(t,O.TARGET_PATH),i=Se(t,O.AGENT_AUTHORED_DECISIONS),s=sl(n,r);if(s.status==="outside")throw new E(T.INVALID_INPUT,J.PATH_NOT_FOUND(n));if(s.status==="missing")throw new E(T.FS_READ_FAILED,J.PATH_NOT_FOUND(n));return bT(r,n,i,e)},async review(t,e){let r=Se(t,O.WORKSPACE_ROOT),n=R.get(t,O.BASE_REF);return new _l(r,e).execute(n)},async impact(t,e){let r=Se(t,O.WORKSPACE_ROOT),n=Se(t,O.TARGET);return new Sl(r,e).execute(n)},async query(t,e){let r=Se(t,O.WORKSPACE_ROOT),n=Se(t,O.TARGET),i=R.get(t,O.LIMIT);return new yl(r,e).execute(n,i)},async exportTopology(t,e){let r=Se(t,O.WORKSPACE_ROOT),n=R.get(t,O.COLLAPSE);return new Cl(r,e).execute({collapse:n})},async snapshot(t,e){let r=Se(t,O.WORKSPACE_ROOT);return new Nl(r,e).execute()},async hydrate(t,e,r){let n=Se(t,O.WORKSPACE_ROOT);return new vl(n,e).execute(r)},async syncKnowledge(t,e){let r=Se(t,O.WORKSPACE_ROOT),n=R.get(t,O.GIT_NETWORK_TIMEOUT_MS);return new wl(r,e,n).execute()},async doctor(t,e,r){let n=Se(t,O.WORKSPACE_ROOT);return new Fl(n,e).execute(r)},async uninstallGitHooks(t,e){let r=Se(t,O.WORKSPACE_ROOT),n=R.get(t,O.KEEP_DB);return new Ml(r,e).execute(n)},async removeDocuviaDir(t,e){let r=Se(t,O.WORKSPACE_ROOT);return ZT(r,e)},async listHooks(t,e){let r=Se(t,O.WORKSPACE_ROOT);return eA(r,e)},async setHookEnabled(t,e){let r=Se(t,O.WORKSPACE_ROOT),n=Se(t,O.HOOK_NAME),i=Se(t,O.HOOK_ENABLED);return tA(r,n,i,e)},async checkTierBGate(t,e){let r=Se(t,O.WORKSPACE_ROOT);return zT(r,e,rA(t))}};import nA from"pino";import{createRequire as WF}from"module";var jF=WF(import.meta.url),Sp="pino-pretty",VF=`[docuvia] ${Sp} unavailable, falling back to plain JSON logs.
176
- `,zF=["req.headers.authorization","req.headers.Authorization","*.authorization","*.Authorization","*.*.authorization","*.*.Authorization","password","*.password","*.*.password","token","*.token","*.*.token","apiKey","*.apiKey","*.*.apiKey","OPENAI_API_KEY","*.OPENAI_API_KEY","*.*.OPENAI_API_KEY"],JF="[REDACTED]",qF="1";function QF(){if(process.env.DOCUVIA_PRETTY_LOGS===qF)try{return jF.resolve(Sp),{target:Sp,options:{colorize:!0,destination:2}}}catch{process.stderr.write(VF);return}}function ee(){let t=QF(),e=nA({level:process.env.LOG_LEVEL||Oe.INFO,redact:{paths:[...zF],censor:JF},transport:t},t?void 0:nA.destination(2)),r=new Up;return r.onLog(n=>{e[n.level](n.context??{},n.message)}),r}var an={UNKNOWN_OPTIONS:t=>`Unknown options provided: ${t}`,UNKNOWN_PLATFORMS:(t,e)=>`Unknown --platform value(s): ${t}. Available platforms: ${e}`,WORKSPACE_ROOT_EMPTY:"workspace root must not be empty",INVALID_FORMAT:(t,e)=>`Unknown --format value: ${t}. Available formats: ${e}`};var _t=class{};import*as rt from"fs/promises";import*as kt from"path";var iA=".js",sA=".cjs",kl=class extends _t{name=Ig;slug=Dg;async installHooks(e){await this.configureHooks(e),await this.configureMcpServer(e)}async configureHooks(e){let r=kt.join(e,Jn);await rt.mkdir(r,{recursive:!0}),await rt.writeFile(kt.join(r,Fr),eo,{mode:493});let n=fn.replace(/\${HOOKS_DIR}/g,Ec).replace(iA,sA);await Nt(kt.join(r,qn),n,Fr)}async configureMcpServer(e){let r=kt.join(e,gc);try{let n={mcpServers:{}};try{let i=await rt.readFile(r,H);n=JSON.parse(i)}catch{await rt.mkdir(kt.dirname(r),{recursive:!0})}n.mcpServers=n.mcpServers||{},n.mcpServers[Qn]={command:Xs,args:[xg,...Zs]},await rt.writeFile(r,JSON.stringify(n,null,2)),h.success(g.INIT_HOOKS_REGISTERED_MCP+r)}catch(n){let i=n instanceof Error?n.message:String(n);h.warn(g.INIT_HOOKS_FAIL_CURSOR_MCP+i)}}async uninstallHooks(e){let r=kt.join(e,Jn);try{await rt.unlink(kt.join(r,Fr)),h.success(`${g.UNINSTALL_REMOVED_FILE_PREFIX}${Fr}`)}catch{}let{removeBlock:n}=await import("./fs-utils-UY4EYC7B.js"),{CURSOR_RULES_FILENAME:i,AGENT_INSTRUCTIONS_MARKER:s,AGENT_INSTRUCTIONS_END_MARKER:o}=await import("./init-templates-CC5QOU4T.js"),a=kt.join(e,i);await n(a,`<!-- ${s} -->`,`<!-- ${o} -->`);let l=kt.join(r,qn),c=!1;try{(await rt.readFile(l,H)).trim()===fn.replace(/\$\{HOOKS_DIR\}/g,Ec).replace(iA,sA).trim()&&(await rt.unlink(l),c=!0)}catch{}if(c)try{await rt.rmdir(r)}catch{}let u=kt.join(e,gc);try{let p=await rt.readFile(u,H),d=JSON.parse(p);d?.mcpServers&&d.mcpServers[Qn]&&(delete d.mcpServers[Qn],await rt.writeFile(u,JSON.stringify(d,null,2)),h.success(`${g.UNINSTALL_REMOVED_MCP_SERVER_PREFIX}${u}`))}catch{}}};import*as Je from"fs/promises";import*as nt from"path";import Hs from"process";var XF="win32",ZF="darwin",eM="Library",tM="Application Support",rM=".config";async function nM(t){try{await Je.unlink(nt.join(t,wr)),h.success(`${g.UNINSTALL_REMOVED_FILE_PREFIX}${wr}`)}catch{}}async function iM(t){let e=nt.join(t,qn);try{if((await Je.readFile(e,H)).trim()===fn.replace(/\$\{HOOKS_DIR\}/g,hc).trim())return await Je.unlink(e),!0}catch{}return!1}async function sM(t){try{await Je.rmdir(t)}catch{}}function oA(){let t=fn.replace(/\${HOOKS_DIR}/g,kg);return JSON.parse(t)[Ht][0]}function lA(t){let e=t.hooks,r=Array.isArray(e)?e[0]?.command:void 0;return typeof r=="string"?r:""}function cA(t,e){let r=t?.hooks;return Array.isArray(r)&&r.some(n=>n?.command===e)}async function oM(t){try{let e=await Je.readFile(t,H);return{settings:JSON.parse(e),aborted:!1}}catch(e){return e?.code!==Js?(h.warn(`${g.FS_READ_ERROR}${t} (${e?.code??g.FS_READ_ERROR_UNKNOWN_CODE}); leaving it untouched`),{settings:{},aborted:!0}):{settings:{},aborted:!1}}}async function aM(t,e){let{settings:r,aborted:n}=await oM(t);if(n)return;if(r.hooks=r.hooks??{},r.hooks[Ht]!==void 0&&!Array.isArray(r.hooks[Ht])){h.warn(g.FS_UNEXPECTED_SHAPE(Ht,t));return}r.hooks[Ht]=r.hooks[Ht]??[];let i=r.hooks[Ht],s=lA(e);i.some(o=>cA(o,s))||(i.push(e),await Je.mkdir(nt.dirname(t),{recursive:!0}),await Je.writeFile(t,`${JSON.stringify(r,null,2)}
177
- `,H))}async function lM(t,e){let r;try{let s=await Je.readFile(t,H);r=JSON.parse(s)}catch{return}let n=r?.hooks?.[Ht];if(!Array.isArray(n))return;let i=n.filter(s=>!cA(s,e));if(i.length!==n.length){if(i.length===0?delete r.hooks[Ht]:r.hooks[Ht]=i,Object.keys(r.hooks).length===0&&delete r.hooks,Object.keys(r).length===0){await Je.unlink(t),h.success(g.UNINSTALL_REMOVED_FILE_PREFIX+Qs);return}await Je.writeFile(t,`${JSON.stringify(r,null,2)}
178
- `,H),h.success(g.UNINSTALL_REMOVED_HOOK_FROM_SETTINGS_PREFIX+t)}}function cM(t){let e=nt.join(t,fc);h.info(`${g.UNINSTALL_CLAUDE_MCP_MANUAL_REMINDER} (${e}).`)}function aA(){return Hs.platform===XF?nt.join(Hs.env.APPDATA||"",ji):Hs.platform===ZF?nt.join(Hs.env.HOME||"",eM,tM,ji):nt.join(Hs.env.HOME||"",rM,ji)}var Gl=class extends _t{name=ji;slug=vg;async installHooks(e){await this.configureHooks(e),this.printMcpServerSnippet(e)}printMcpServerSnippet(e){let r=aA();if(!r)return;let n=nt.join(r,fc),i=JSON.stringify({mcpServers:{[Qn]:{command:Xs,args:[Gg,...Zs],env:{[Ug]:e}}}},null,2);h.info(`${g.INIT_CLAUDE_MCP_MANUAL_SNIPPET} (${n}):
179
- ${i}`)}async configureHooks(e){let r=nt.join(e,zn);await Je.mkdir(r,{recursive:!0}),await Je.writeFile(nt.join(r,wr),eo,{mode:493});let n=fn.replace(/\${HOOKS_DIR}/g,hc);await Nt(nt.join(r,qn),n,wr),await aM(nt.join(e,pc,Qs),oA())}async uninstallHooks(e){let r=nt.join(e,zn);await nM(r),await iM(r)&&await sM(r);try{await lM(nt.join(e,pc,Qs),lA(oA()))}catch{}let i=aA();i&&cM(i)}};import*as uA from"path";var xl=class extends _t{name=Lg;slug=bg;instructionsPath(e){return uA.join(e,hg,Eg)}async installHooks(e){await Nt(this.instructionsPath(e),kr,At)}async uninstallHooks(e){await Gr(this.instructionsPath(e),`<!-- ${At} -->`,`<!-- ${Mr} -->`)}};import*as dA from"path";var Ul=class extends _t{name=Cg;slug=wg;agentsMdPath(e){return dA.join(e,Rg)}async installHooks(e){await Nt(this.agentsMdPath(e),kr,At)}async uninstallHooks(e){await Gr(this.agentsMdPath(e),`<!-- ${At} -->`,`<!-- ${Mr} -->`)}};import*as Bl from"fs/promises";import*as Tp from"path";var Hl=class extends _t{name=Ng;slug=Fg;rulesDir(e){return Tp.join(e,Og)}rulesFilePath(e){return Tp.join(this.rulesDir(e),mc)}async installHooks(e){await Nt(this.rulesFilePath(e),kr,At)}async uninstallHooks(e){try{await Bl.unlink(this.rulesFilePath(e)),h.success(`${g.UNINSTALL_REMOVED_FILE_PREFIX}${mc}`)}catch{return}try{await Bl.rmdir(this.rulesDir(e))}catch{}}};import*as pA from"path";var Kl=class extends _t{name=Pg;slug=Mg;hermesMdPath(e){return pA.join(e,yg)}async installHooks(e){await Nt(this.hermesMdPath(e),kr,At)}async uninstallHooks(e){await Gr(this.hermesMdPath(e),`<!-- ${At} -->`,`<!-- ${Mr} -->`)}};function uM(){return[new kl,new Gl,new xl,new Ul,new Hl,new Kl]}function dM(t){return t.split(",").map(e=>e.trim().toLowerCase()).filter(Boolean)}async function $l(t,e,r,n=uM()){if(e!==void 0){let i=dM(e),s=n.map(a=>a.slug),o=i.filter(a=>!s.includes(a));if(o.length>0)throw new Error(an.UNKNOWN_PLATFORMS(o.join(", "),s.join(", ")));return n.filter(a=>i.includes(a.slug))}if(r){let i=n.map(o=>({name:o.name,value:o.name,checked:!0})),s=await h.askCheckbox(t,i);return n.filter(o=>s.includes(o.name))}return n}import pM from"fs/promises";import gA from"path";var gM=30*6e4,fM=1e4,mM=3e4;async function Yl(t,e,r){let n=gA.join(t,Ee,rg);await pM.mkdir(gA.dirname(n),{recursive:!0});let s=await y.resolve(A.ProcessLock)(n,{maxWaitMs:gM,heartbeatIntervalMs:fM,staleAfterMs:mM,onWaiting:r});try{return await e()}finally{await s.release()}}import*as Wt from"fs";import*as ki from"path";var hM=["---","name: docuvia-exploring","description: >"," Use when exploring or navigating an unfamiliar codebase -- before reaching for"," Grep, Glob, or Read. Queries the local Docuvia knowledge graph for concepts,"," files, and symbols, and checks blast radius before editing. Falls back to raw"," file tools only when the graph returns nothing or the target is flagged unprocessed.","---","","# Explore the Codebase via Docuvia","","## When to use this skill","","You are exploring, navigating, or learning about a codebase. Before any Grep, Glob, or Read","call, query the knowledge graph first -- it is structurally aware and orders of magnitude","cheaper than raw file scanning.","","## Exploration workflow","","**Step 1 -- Query the graph for the concept.**","","Use the `docuvia_query` MCP tool (or CLI fallback):","```",'npx --no-install docuvia query "<concept_or_file>" --format=prompt',"```","","The result includes `match_type` (exact/keyword/neighbor) -- treat a non-`exact` match on","what should be a well-known symbol as a signal to cross-check with Grep/Glob.","","**Step 2 -- Check blast radius before editing.**","","Before modifying any file or symbol, run:","```","npx --no-install docuvia impact <symbolOrFile>","```","","This returns which other parts of the codebase would be affected, with a risk level","assessment. Stop and warn the user if it comes back HIGH or CRITICAL.","","**Step 3 -- Only fall back to raw file tools when:**","","- The graph returns empty results",'- The target is flagged `tier_b_status="unprocessed"` (unknown, not zero)',"- You need exact source text, formatting, or a diff","- `query` returns a non-`exact` `match_type` for what should be a well-known symbol","","## After making code changes","","If your change reflects a real architectural decision, rule, or notable rationale, stage it:","","```","npx --no-install docuvia analyze <file> --agent-authored --stage","```","","Pipe a JSON payload on stdin or pass `--decisions-file=<path>`. Staged decisions flush","into the knowledge graph automatically on the next commit touching that file."].join(`
180
- `),EM=["---","name: docuvia-impact-analysis","description: >"," Use before making any code change to analyze blast radius -- which other parts of"," the codebase would be affected, with a risk level assessment. Also use after"," receiving a code review or diff to understand downstream impact.","---","","# Impact Analysis with Docuvia","","## When to use this skill","","You are about to modify code, or you have received a review/diff and need to understand","downstream impact. Always run impact analysis before touching shared interfaces, constants,","or widely-imported modules.","","## Impact analysis workflow","","**Step 1 -- Run impact analysis on the target.**","","```","npx --no-install docuvia impact <symbolOrFile>","```","",'Or via MCP: `docuvia_impact` with `{ "target": "<symbolOrFile>" }`',"","The result includes:","- `blastRadius`: array of affected nodes with filePath, edgeType, and depth","- `riskLevel`: LOW / MEDIUM / HIGH / CRITICAL / UNKNOWN","- L3 decision context explaining *why* each dependent matters",'- Entries with `"edgeSource": "lsp-fallback"` were recovered from raw call sites, not',' resolved edges -- treat them as "a call to this name exists here" and verify before'," relying on them","","**Step 2 -- Assess the risk level.**","","- **LOW**: Safe to proceed -- changes are localized","- **MEDIUM**: Review the affected files -- some cross-cutting concern may exist","- **HIGH**: Stop and warn the user -- significant downstream impact detected","- **CRITICAL**: Do not proceed without explicit user confirmation","","**Step 3 -- Cross-reference with query if needed.**","","If impact returns unexpected results or you need more context on a specific dependent,","query the graph:","```",'npx --no-install docuvia query "<dependent_symbol>" --format=prompt',"```","","**Step 4 -- After changes, stage decisions.**","","If your change reflects architectural rationale, stage it for the knowledge graph:","```","npx --no-install docuvia analyze <file> --agent-authored --stage","```"].join(`
181
- `),_M=["---","name: docuvia-knowledge-graph","description: >"," Use when querying the Docuvia knowledge graph -- guides effective query construction,"," result interpretation (match types, L2/L3 data), and when to cross-check with raw"," file tools.","---","","# Querying the Knowledge Graph","","## When to use this skill","","You need to look up a concept, file, symbol, or architectural decision in the codebase.","The knowledge graph provides structural awareness that Grep/Glob/Read cannot match.","","## Query workflow","","**Step 1 -- Construct a targeted query.**","","Use the `docuvia_query` MCP tool (or CLI fallback):","```",'npx --no-install docuvia query "<target>" --format=prompt',"```","","Tips for effective queries:",'- Use exact symbol names for best results (`match_type: "exact"`)',"- Concept phrases work but may return `keyword` matches -- cross-check those","- File paths resolve to their containing module's structural data","- Use `--limit=N` to cap results when exploring broadly","","**Step 2 -- Interpret the result.**","","Each result includes:","- `matchType`: `exact` (high confidence) / `keyword` (medium) / `neighbor` (low)","- `node`: L2 structural data (type, filePath, key)","- `l3Decisions`: L3 rationale if available (why this code exists)","","**Step 3 -- Decide trust level.**","",'- `matchType: "exact"` on a well-known symbol -> trust it','- `matchType: "keyword"` or `"neighbor"` -> cross-check with Grep/Glob',"- Empty result -> fall back to raw file tools",'- `tier_b_status: "unprocessed"` -> graph has not seen this file yet, treat as unknown',"","**Step 4 -- Use impact for dependency analysis.**","","After finding a symbol, check who depends on it:","```","npx --no-install docuvia impact <symbolOrFile>","```"].join(`
182
- `),SM=["---","name: docuvia-agent-authored","description: >"," Use after making code changes that reflect architectural decisions, rules, or"," notable rationale -- stages L3 decisions into the knowledge graph for future"," query/impact context. Supports both MCP tool and CLI fallback.","---","","# Stage Agent-Authored L3 Decisions","","## When to use this skill","","You have just made (or are about to commit) a code change that reflects:","- An architectural decision (why this approach was chosen)","- A rule or constraint (what must not be changed)","- Context that future agents need (why this code exists this way)","","## Staging decisions","","**Option A -- MCP tool (preferred, when available):**","","Use `docuvia_apply_decision` with:","```json","{",' "targetPath": "src/path/to/file.ts",',' "decisions": ['," {",' "title": "Decision title",',' "content": "Detailed rationale",',' "nodeType": "decision",',' "confidence": 0.9'," }"," ]","}","```","","**Option B -- CLI fallback:**","","```","npx --no-install docuvia analyze <file> --agent-authored --stage","```","","Pipe JSON on stdin or use `--decisions-file=<path>`.","","**Option C -- CLI (direct write, no staging):**","","```","npx --no-install docuvia analyze <file> --agent-authored","```","","## Decision fields","","- `title`: Short description of the decision","- `content`: Detailed rationale -- why this approach was chosen","- `nodeType`: One of `change`, `rule`, `decision`, `context`","- `confidence`: 0.0 to 1.0 -- how certain you are about this rationale","","## How it works","","Staged decisions (Options A/B) are flushed into `l3_nodes` automatically on the next git","commit that touches the target file -- via the post-commit hook's `--flush-staged-l3` step.","No manual flush step needed.","","Direct writes (Option C) persist immediately to `l3_nodes` with `source='agent-authored'`."].join(`
183
- `),fA=[{dirName:"docuvia-exploring",content:hM},{dirName:"docuvia-impact-analysis",content:EM},{dirName:"docuvia-knowledge-graph",content:_M},{dirName:"docuvia-agent-authored",content:SM}];var mA=".claude/skills";function hA(t){let e=ki.join(t,mA),r=[],n=[];for(let i of fA)TM(e,i)==="installed"?r.push(i.dirName):n.push(i.dirName);return{installed:r,skipped:n}}function EA(t){let e=ki.join(t,mA),r=[];if(!Wt.existsSync(e))return r;let n=Wt.readdirSync(e,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()||!i.name.startsWith("docuvia-"))continue;let s=ki.join(e,i.name);Wt.rmSync(s,{recursive:!0,force:!0}),r.push(i.name)}return r}function TM(t,e){let r=ki.join(t,e.dirName),n=ki.join(r,"SKILL.md");return Wt.existsSync(n)?"skipped":(Wt.mkdirSync(r,{recursive:!0}),Wt.writeFileSync(n,e.content,"utf-8"),"installed")}var RM=Ap.object({cwd:Ap.string().min(1,an.WORKSPACE_ROOT_EMPTY),platformFilter:Ap.string().optional()});async function yM(t){let e=h.spinner(g.INIT_START).start(),r=AM.randomUUID(),n=ee();n.onLog(i=>{i.level===Oe.INFO&&(e.text=i.message)}),R.createScope(r),R.set(r,O.WORKSPACE_ROOT,t);try{let i=await X.init(r,n);i.partialFailure?e.warn(i.message):e.succeed(i.message)}catch(i){let s=i instanceof E||i instanceof Error?i.message:String(i);throw e.fail(g.INIT_FAILED+s),i}finally{R.deleteScope(r)}}async function OM(t,e,r){h.info(g.INIT_AGENT_HOOKS);let n=await $l(g.INIT_HOOKS_SELECT,e,r);if(n.length===0){h.info(g.INIT_HOOKS_NONE_SELECTED);return}for(let i of n)await i.installHooks(t);h.success(g.INIT_HOOKS_SUCCESS),h.info(g.INIT_HOOKS_SUPPORTED)}async function _A(t=Wl.cwd(),e,r=!1,n=!1){let i=RM.parse({cwd:t,platformFilter:e});h.header(g.INIT_HEADER),r&&(await h.askConfirm(g.INIT_CONFIRM,!0)||(h.warn(g.INIT_ABORTED),Wl.exit(0)));let s=!1,o;await Yl(i.cwd,async()=>{try{await yM(i.cwd)}catch{s=!0}if(!s)try{await OM(i.cwd,i.platformFilter,r)}catch(a){o=a}},()=>h.info(g.INIT_LOCK_WAITING)),s&&Wl.exit(1),o!==void 0&&(h.error(g.INIT_HOOKS_FAIL+o),Wl.exit(1)),n&&IM(t)}function IM(t){try{let e=hA(t);e.installed.length>0&&h.success(`Installed ${e.installed.length} skill(s): ${e.installed.join(", ")}`),e.skipped.length>0&&h.info(`Skipped ${e.skipped.length} existing skill(s): ${e.skipped.join(", ")}`)}catch(e){h.warn(`Skill installation failed: ${e instanceof Error?e.message:String(e)}`)}}import Rp from"process";import LM from"crypto";async function SA(t=Rp.cwd(),e=!1){h.header(g.CLEAN_HEADER),e&&(await h.askConfirm(g.CLEAN_CONFIRM,!1)||(h.warn(g.CLEAN_ABORTED),Rp.exit(0)));let r=h.spinner(g.CLEAN_START).start(),n=LM.randomUUID(),i=ee();i.onLog(s=>{s.level===Oe.INFO&&(r.text=s.message)}),R.createScope(n),R.set(n,O.WORKSPACE_ROOT,t);try{let s=await X.clean(n,i);r.succeed(g.CLEAN_SUCCESS+s.message)}catch(s){let o=s instanceof E||s instanceof Error?s.message:String(s);r.fail(g.CLEAN_FAIL+o),Rp.exitCode=1}finally{R.deleteScope(n)}}import TA from"process";import CM from"crypto";async function AA(t=TA.cwd()){let e=h.spinner(g.STATUS_START).start(),r=CM.randomUUID(),n=ee();n.onLog(i=>{i.level===Oe.INFO&&(e.text=i.message)}),R.createScope(r),R.set(r,O.WORKSPACE_ROOT,t);try{let i=await X.status(r,n);e.succeed(g.STATUS_SUCCESS),h.header(g.STATUS_HEADER);let s=i.tierBFilesTotal>0?(i.tierBFilesProcessed/i.tierBFilesTotal*100).toFixed(1):"0.0";h.table([{header:g.STATUS_COL_METRIC},{header:g.STATUS_COL_VALUE}],[[g.STATUS_METRIC_PROJECTS,String(i.projects)],[g.STATUS_METRIC_L2_NODES,String(i.l2Nodes)],[g.STATUS_METRIC_L3_DECISIONS,String(i.l3Nodes)],[g.STATUS_METRIC_TIER_B_COVERAGE,`${i.tierBFilesProcessed} / ${i.tierBFilesTotal} (${s}%)`],[g.STATUS_METRIC_TIER_C_QUEUE,String(i.tierCQueued)],[g.STATUS_METRIC_GRAPH_FRESHNESS,i.graphFreshness==="fresh"?g.STATUS_FRESHNESS_FRESH:i.graphFreshness==="stale"?g.STATUS_FRESHNESS_STALE:g.STATUS_FRESHNESS_UNKNOWN]])}catch(i){let s=i instanceof E||i instanceof Error?i.message:String(i);e.fail(g.STATUS_FAIL+s),TA.exitCode=1}finally{R.deleteScope(r)}}import Ir from"process";import DM from"crypto";var q={INDENT_TWO:" ",NEWLINE:`
184
- `,OPEN_PAREN:" (",CLOSE_PAREN:")",DOUBLE_QUOTE:'"',EMPTY:"",ELLIPSIS:"...",SHORT_SHA_LENGTH:7};import NM from"process";import{createInterface as PM}from"readline";async function jl(){let t=PM({input:NM.stdin}),e=[];try{for await(let r of t)e.push(r)}finally{t.close()}return e.join(`
185
- `).trim()}async function vM(t,e){if(t)return t;e||(h.error(g.PUBLISH_MISSING_PROJECT_ID),Ir.exit(1)),h.info(g.PUBLISH_NO_PROJECT_ID_PROVIDED);let r=await h.askInput(g.PUBLISH_PROMPT_PROJECT_ID);return r||(h.error(g.PUBLISH_PROJECT_ID_REQUIRED),Ir.exit(1)),r}function bM(){return!!Ir.env.DOCUVIA_API_URL&&!!Ir.env.MCP_PAT}async function wM(t){return t||(Ir.stdin.isTTY?void 0:jl())}async function FM(t,e,r,n){try{let i=await X.sync(t,e,n);r.succeed(g.PUBLISH_SUCCESS+" "+i.message)}catch(i){let s=i instanceof E||i instanceof Error?i.message:String(i);r.fail(g.PUBLISH_FAIL+s),Ir.exitCode=1}finally{R.deleteScope(t)}}async function RA(t,e=Ir.cwd(),r=!1){h.header(g.PUBLISH_HEADER);let n=await vM(t.projectId,r);if(!bM()){h.warn(g.PUBLISH_MISSING_ENV),h.warn(g.PUBLISH_SKIP);return}let i=await wM(t.commitSha),s=h.spinner(g.PUBLISH_START+n+q.ELLIPSIS).start(),o=DM.randomUUID(),a=ee();a.onLog(l=>{l.level===Oe.INFO&&(s.text=l.message)}),R.createScope(o),R.set(o,O.WORKSPACE_ROOT,e),R.set(o,O.API_URL,Ir.env.DOCUVIA_API_URL),R.set(o,O.PROJECT_ID,n),R.set(o,O.COMMIT_SHA,i||void 0),await FM(o,a,s,Ir.env.MCP_PAT)}import we from"process";import Vl from"crypto";import UM from"fs/promises";import{z as Bn}from"zod";function OA(t){if(!t)return;let e=t.trim();if(e.length!==0){if(e.startsWith("[")){let r;try{r=JSON.parse(e)}catch(n){throw new E(T.INVALID_INPUT,g.ANALYZE_LSP_ARGS_INVALID_JSON(String(n)))}if(!Array.isArray(r)||r.some(n=>typeof n!="string"))throw new E(T.INVALID_INPUT,g.ANALYZE_LSP_ARGS_INVALID_SHAPE);return r}return xM(e)}}function MM(t,e){return t==="\\"&&e!==void 0&&(e==='"'||e==="\\")}function kM(t){return t==='"'||t==="'"}function GM(t){return/\s/.test(t)}function yA(t,e){return e.length>0&&t.push(e),""}function xM(t){let e=[],r="",n=null;for(let i=0;i<t.length;i++){let s=t[i],o=t[i+1];if(n!==null){s===n?n=null:n==='"'&&MM(s,o)?(r+=o,i++):r+=s;continue}kM(s)?n=s:s==="\\"&&o!==void 0?(r+=o,i++):GM(s)?r=yA(e,r):r+=s}return yA(e,r),e}var HM=Bn.object({title:Bn.string().min(1),content:Bn.string(),nodeType:Bn.nativeEnum(dn),confidence:Bn.number().min(0).max(1)}),BM=Bn.object({decisions:Bn.array(HM)});function IA(){let t=we.env.AI_DOCUVIA_INTEGRATIONS_OPENAI_BASE_URL,e=we.env.AI_DOCUVIA_INTEGRATIONS_OPENAI_API_KEY,r=we.env.AI_DOCUVIA_MODEL||we.env.AI_DOCUVIA_FAST_MODEL;return!t||!r?null:{llmBaseUrl:t,llmApiKey:e,llmModel:r}}async function KM(t){let e=t?await UM.readFile(t,H):we.stdin.isTTY?void 0:await jl();if(!e)return;let r;try{r=JSON.parse(e)}catch(i){throw new E(T.INVALID_INPUT,g.ANALYZE_AGENT_AUTHORED_INVALID_JSON(String(i)))}let n=BM.safeParse(r);if(!n.success)throw new E(T.INVALID_INPUT,g.ANALYZE_AGENT_AUTHORED_INVALID_SHAPE(n.error.message));return n.data}function $M(){let t=we.env.DOCUVIA_TIER_C_DAILY_CALL_CAP,e=we.env.DOCUVIA_TIER_C_DAILY_TOKEN_CAP,r=we.env.DOCUVIA_TIER_C_WALL_CLOCK_MS,n=we.env.DOCUVIA_TIER_C_ITEM_CAP,i=we.env.DOCUVIA_TIER_C_LOAD_THRESHOLD;return{dailyCallCap:t?Number(t):void 0,dailyTokenCap:e?Number(e):void 0,wallClockMs:r?Number(r):void 0,itemCap:n?Number(n):void 0,loadThreshold:i?Number(i):void 0}}function YM(t,e){let r=we.env.DOCUVIA_LSP_ARGS,n=we.env.DOCUVIA_LSP_TIMEOUT_MS,i=we.env.DOCUVIA_LSP_MAX_PROCESSES,s=we.env.DOCUVIA_TIER_B_COMMIT_CAP,o=a=>{if(!a)return;let l=Number(a);if(!(Number.isNaN(l)||l<1||!Number.isInteger(l)))return l};return{lspBinaryOverride:we.env.DOCUVIA_LSP_BINARY,lspArgsOverride:OA(r),lspTimeoutMs:t??(n?Number(n):void 0),lspMaxProcesses:e??o(i),tierBCommitCap:s?Number(s):void 0}}function WM(t,e){e.succeed(g.ANALYZE_AUTO_FULL_SUCCESS),h.info(g.ANALYZE_PROJECT_TYPE+t.projectType),h.info(g.ANALYZE_SUGGESTED_TAGS+(t.suggestedTags.join(", ")||g.ANALYZE_NONE)),h.info(g.ANALYZE_AUTO_FULL_SUMMARY(t.filesParsed,t.filesRequested,t.filesFailed))}function jM(t,e){e.succeed(g.ANALYZE_AUTO_DELTA_SUCCESS),h.info(g.ANALYZE_AUTO_DELTA_SUMMARY(t.filesReparsed,t.filesDeleted,t.tierBQueued))}function VM(t,e){if(e.succeed(g.ANALYZE_FOCUSED_SUCCESS),t.decisions.length===0){h.info(g.ANALYZE_FOCUSED_NONE);return}for(let r of t.decisions)h.info(g.ANALYZE_DECISION_LINE(r.nodeType,r.title,r.confidence)),r.content&&h.log(g.ANALYZE_DECISION_CONTENT_PREFIX+r.content);h.info(g.ANALYZE_FOCUSED_PERSISTED(t.persisted,t.deduped))}function zM(t,e,r){t.degraded?(e.succeed(g.ANALYZE_TIER_B_DEGRADED(t.degradedReason??"")),r||(we.exitCode=1)):(e.succeed(g.ANALYZE_TIER_B_SUCCESS),h.info(g.ANALYZE_TIER_B_SUMMARY(t.filesProcessed,t.edgesApplied,t.filesFailed,t.filesFailedPermanent,t.filesSkippedNotApplicable??0,!!t.zeroProgressWatchdogTripped))),JM(t)}function JM(t){if(t.tierCQueued!==0){if(t.tierCSkipped){h.info(g.ANALYZE_TIER_C_SKIPPED(t.tierCSkippedReason??""));return}h.info(g.ANALYZE_TIER_C_SUMMARY(t.tierCProcessed,t.tierCPersisted,t.tierCFailed))}}function qM(t,e){if(t.skippedDisabled){e.succeed(g.ANALYZE_FLUSH_STAGED_L3_DISABLED_SUCCESS);return}e.succeed(g.ANALYZE_FLUSH_STAGED_L3_SUCCESS),h.info(g.ANALYZE_FLUSH_STAGED_L3_SUMMARY(t.flushed,t.deduped,t.stillPending)),t.noGraphToAttach&&h.warn(g.ANALYZE_FLUSH_STAGED_L3_NO_GRAPH_ADVICE)}function yp(t,e,r){switch(t.kind){case Te.AUTO_FULL_INGESTION:WM(t,e);break;case Te.AUTO_DELTA:jM(t,e);break;case Te.AUTO_DELTA_NOOP:e.succeed(t.dirtyWorktree?g.ANALYZE_AUTO_NOOP_DIRTY_WORKTREE_SUCCESS:g.ANALYZE_AUTO_NOOP_SUCCESS);break;case Te.DECISION_EXTRACTION:VM(t,e);break;case Te.TIER_B_BATCH:zM(t,e,r);break;case Te.FLUSH_STAGED_L3:qM(t,e);break}}function LA(t,e,r=!1){return h.header(r?g.ANALYZE_STAGE_HEADER:t?g.ANALYZE_FOCUSED_HEADER:e?g.ANALYZE_TIER_B_HEADER:g.ANALYZE_HEADER),h.spinner(r?g.ANALYZE_STAGE_START+t+q.ELLIPSIS:t?g.ANALYZE_FOCUSED_START+t+q.ELLIPSIS:e?g.ANALYZE_TIER_B_START:g.ANALYZE_START).start()}function QM(t,e,r,n,i,s,o,a,l,c){R.createScope(t),R.set(t,O.WORKSPACE_ROOT,e),s&&R.set(t,O.FORCE,!0),r&&n?(R.set(t,O.TARGET_PATH,r),R.set(t,O.LLM_BASE_URL,n.llmBaseUrl),R.set(t,O.LLM_MODEL,n.llmModel)):i&&(R.set(t,O.ESCALATE_TO_LSP,!0),l&&R.set(t,O.TIER_B_FULL_RESYNC,!0),c&&R.set(t,O.TIER_C_DRAIN_ALL,!0),CA(t,o,a),XM(t,n))}function XM(t,e){e&&(R.set(t,O.LLM_BASE_URL,e.llmBaseUrl),R.set(t,O.LLM_MODEL,e.llmModel));let r=$M();r.dailyCallCap!==void 0&&R.set(t,O.TIER_C_DAILY_CALL_CAP,r.dailyCallCap),r.dailyTokenCap!==void 0&&R.set(t,O.TIER_C_DAILY_TOKEN_CAP,r.dailyTokenCap),r.wallClockMs!==void 0&&R.set(t,O.TIER_C_WALL_CLOCK_MS,r.wallClockMs),r.itemCap!==void 0&&R.set(t,O.TIER_C_ITEM_CAP,r.itemCap),r.loadThreshold!==void 0&&R.set(t,O.TIER_C_LOAD_THRESHOLD,r.loadThreshold)}function CA(t,e,r){let n=YM(e,r);n.lspBinaryOverride!==void 0&&R.set(t,O.LSP_BINARY_OVERRIDE,n.lspBinaryOverride),n.lspArgsOverride!==void 0&&R.set(t,O.LSP_ARGS_OVERRIDE,n.lspArgsOverride),n.lspTimeoutMs!==void 0&&R.set(t,O.LSP_TIMEOUT_MS,n.lspTimeoutMs),n.lspMaxProcesses!==void 0&&R.set(t,O.LSP_MAX_PROCESSES,n.lspMaxProcesses),n.tierBCommitCap!==void 0&&R.set(t,O.TIER_B_COMMIT_CAP,n.tierBCommitCap)}function Op(t,e,r,n){let i=t instanceof E||t instanceof Error?t.message:String(t),s=e?g.ANALYZE_FOCUSED_FAIL:r?g.ANALYZE_TIER_B_FAIL:g.ANALYZE_FAIL;n.fail(s+i),we.exitCode=1}async function ZM(t,e,r){let n=Vl.randomUUID();R.createScope(n),R.set(n,O.WORKSPACE_ROOT,t),CA(n,r);try{let i=ee(),s=await X.checkTierBGate(n,i);if(s.available)return!0;if(!e)return h.error(g.ANALYZE_TIER_B_GATE_FAILED(s.reason??"")),we.exitCode=1,!1;h.warn(g.ANALYZE_TIER_B_GATE_NOT_READY(s.reason??""));let o=await h.askConfirm(g.ANALYZE_TIER_B_GATE_PROMPT,!0);return o||h.info(g.ANALYZE_TIER_B_GATE_DECLINED),o}finally{R.deleteScope(n)}}async function ek(t,e,r){let n;try{n=await KM(r.decisionsFile)}catch(a){let l=a instanceof E||a instanceof Error?a.message:String(a);h.error(l),we.exitCode=1;return}if(!n){h.error(g.ANALYZE_AGENT_AUTHORED_MISSING_PAYLOAD),we.exitCode=1;return}let i=LA(t,!1,r.stage),s=Vl.randomUUID(),o=ee();o.onLog(a=>{a.level===Oe.INFO&&(i.text=a.message)}),R.createScope(s),R.set(s,O.WORKSPACE_ROOT,e),R.set(s,O.TARGET_PATH,t),R.set(s,O.AGENT_AUTHORED_DECISIONS,n.decisions);try{if(r.stage){let a=await X.stageAgentAuthoredDecisions(s,o);i.succeed(g.ANALYZE_STAGE_SUCCESS),h.info(g.ANALYZE_STAGE_SUMMARY(a.staged))}else{let a=await X.analyze(s,o);yp(a,i,!1)}}catch(a){Op(a,t,!1,i)}finally{R.deleteScope(s)}}async function tk(t){h.header(g.ANALYZE_FLUSH_STAGED_L3_HEADER);let e=h.spinner(g.ANALYZE_FLUSH_STAGED_L3_START).start(),r=Vl.randomUUID(),n=ee();n.onLog(i=>{i.level===Oe.INFO&&(e.text=i.message)}),R.createScope(r),R.set(r,O.WORKSPACE_ROOT,t),R.set(r,O.FLUSH_STAGED_L3,!0);try{let i=await X.analyze(r,n);yp(i,e,!1)}catch(i){Op(i,void 0,!1,e)}finally{R.deleteScope(r)}}async function rk(t,e,r){return r.agentAuthored?t?(await ek(t,e,r),!0):(h.error(g.ANALYZE_AGENT_AUTHORED_MISSING_TARGET),we.exitCode=1,!0):!1}async function nk(t,e){return e.flushStagedL3?(await tk(t),!0):!1}async function NA(t,e=we.cwd(),r={}){await nk(e,r)||await rk(t,e,r)||await ik(t,e,r)}async function ik(t,e,r){let n,i=!t&&!!r.escalateToLsp;if(t){let l=IA();if(!l){h.error(g.ANALYZE_LLM_MISSING_ENV),we.exitCode=1;return}n=l}else if(i&&(n=IA()??void 0,!r.fallbackAst&&!await ZM(e,!!r.isInteractive,r.lspTimeoutMs)))return;let s=LA(t,i),o=Vl.randomUUID(),a=ee();a.onLog(l=>{l.level===Oe.INFO&&(s.text=l.message)}),QM(o,e,t,n,i,r.force,r.lspTimeoutMs,r.lspProcesses,r.full,r.tierCAll);try{let l=await X.analyze(o,a,n?.llmApiKey);yp(l,s,!!r.fallbackAst)}catch(l){Op(l,t,i,s)}finally{R.deleteScope(o)}}import PA from"process";import sk from"crypto";var w={COMMIT_SHA:"--commitSha=",BASE_REF:"--baseRef=",ESCALATE_TO_LSP:"--escalate-to-lsp",FORMAT:"--format=",LIMIT:"--limit=",OUT:"--out=",JSON_ONLY:"--json-only",COLLAPSE:"--collapse=",PLATFORM:"--platform=",KEEP_DB:"--keep-db",SKIP_DB:"--skip-db",SKIP_GIT:"--skip-git",SKIP_HOOKS:"--skip-hooks",SKIP_LOGS:"--skip-logs",SKIP_LSP:"--skip-lsp",SKIP_LLM:"--skip-llm",FALLBACK_AST:"--fallback-ast",LSP_TIMEOUT:"--lsp-timeout=",LSP_PROCESSES:"--lsp-processes=",FULL:"--full",FIX:"--fix",HELP:"--help",HELP_SHORT:"-h",VERSION:"--version",VERSION_SHORT:"-v",FORCE:"--force",FORCE_SHORT:"-f",INTERACTIVE:"--interactive",INTERACTIVE_SHORT:"-i",AGENT_AUTHORED:"--agent-authored",DECISIONS_FILE:"--decisions-file=",STAGE:"--stage",FLUSH_STAGED_L3:"--flush-staged-l3",TIER_C_ALL:"--tier-c-all",SKILLS:"--skills"},jt={HUMAN:"human",PROMPT:"prompt",JSON:"json"};function zl(t,e){t.onLog(r=>{r.level===Oe.INFO&&e&&(e.text=r.message)})}function Gi(t){return t instanceof E||t instanceof Error?t.message:String(t)}function ok(t){let e=q.INDENT_TWO+q.INDENT_TWO,r=e+q.INDENT_TWO,n=t.flatMap(i=>i.impactedBy.filter(s=>s.why&&s.why.length>0).map(s=>({file:i.file,entry:s})));if(n.length!==0){h.log(""),h.section(g.REVIEW_WHY_HEADER);for(let{file:i,entry:s}of n){h.log(q.INDENT_TWO+s.name+q.OPEN_PAREN+i+q.CLOSE_PAREN);for(let o of s.why??[])h.log(e+g.REVIEW_WHY_PREFIX+o.title),o.content&&h.log(r+o.content.split(q.NEWLINE).join(q.NEWLINE+r))}}}function ak(t,e,r){r.succeed(g.REVIEW_SUCCESS+(e?g.REVIEW_AGAINST+e:"")),h.log(""),h.log(g.REVIEW_FILES_CHANGED+t.filesChanged.length);let n=g.REVIEW_RISK_PREFIX+t.riskLevel;t.riskLevel===Ye.CRITICAL?h.error(n):t.riskLevel===Ye.HIGH?h.warn(n):h.log(n),h.log(""),h.log(t.analysis),ok(t.affectedNodes)}async function DA(t,e={},r=PA.cwd()){let n=e.format===jt.JSON;n||h.header(g.REVIEW_HEADER);let i=n?void 0:h.spinner(g.REVIEW_START).start(),s=sk.randomUUID(),o=ee();zl(o,i),R.createScope(s),R.set(s,O.WORKSPACE_ROOT,r),t&&R.set(s,O.BASE_REF,t);try{let a=await X.review(s,o);i?ak(a,t,i):h.log(JSON.stringify(a,null,2))}catch(a){let l=Gi(a);i?i.fail(g.REVIEW_FAIL+l):h.error(g.REVIEW_FAIL+l),PA.exitCode=1}finally{R.deleteScope(s)}}import Ip from"process";import lk from"crypto";function ck(t,e){if(!e||e.length===0)return;let r=q.INDENT_TWO,n=r+q.INDENT_TWO,i=n+q.INDENT_TWO;h.log(r+g.IMPACT_ENTRY_WHY_LABEL(t));for(let s of e)h.log(n+g.IMPACT_WHY_PREFIX+s.title),s.content&&h.log(i+s.content.split(q.NEWLINE).join(q.NEWLINE+i))}function uk(t){let e=t.some(r=>r.edgeSource!==void 0);h.table([{header:g.IMPACT_COL_NAME},{header:g.IMPACT_COL_TYPE},...e?[{header:g.IMPACT_COL_SOURCE}]:[]],t.map(r=>[r.name,r.type,...e?[r.edgeSource??g.IMPACT_EDGE_SOURCE_STATIC]:[]]))}function dk(t,e,r,n,i){if(h.header(g.IMPACT_BLAST_RADIUS_HEADER),t.length===0)h.warn(g.IMPACT_NO_DEPENDENTS),n&&h.warn(n),r&&r.workspaceFilesProcessed<r.workspaceFilesTotal&&h.warn(g.IMPACT_TIER_B_INCOMPLETE(r.workspaceFilesTotal-r.workspaceFilesProcessed,r.workspaceFilesTotal));else{uk(t),h.log(q.EMPTY);for(let o of t)ck(o.name,o.why)}i&&h.warn(g.IMPACT_RISK_NOTE_PREFIX+i),h.log(q.EMPTY);let s=g.IMPACT_RISK_PREFIX+e;e===Ye.CRITICAL?h.error(s):e===Ye.HIGH||e===Ye.UNKNOWN?h.warn(s):h.log(s),h.log(q.EMPTY)}function pk(t,e,r){r.succeed(g.IMPACT_SUCCESS+q.DOUBLE_QUOTE+e+q.DOUBLE_QUOTE),h.log(""),dk(t.blastRadius,t.riskLevel,t.tierBCoverage,t.coverageNote,t.riskNote)}function gk(t,e){if(t){t.warn(g.IMPACT_NOT_FOUND+q.DOUBLE_QUOTE+e+q.DOUBLE_QUOTE);return}h.log("null")}async function vA(t,e={},r=Ip.cwd()){let n=e.format===jt.JSON;if(n||h.header(g.IMPACT_HEADER),!t){h.error(g.IMPACT_MISSING_TARGET),Ip.exitCode=1;return}let i=n?void 0:h.spinner(g.IMPACT_START+q.DOUBLE_QUOTE+t+q.DOUBLE_QUOTE+q.ELLIPSIS).start(),s=lk.randomUUID(),o=ee();zl(o,i),R.createScope(s),R.set(s,O.WORKSPACE_ROOT,r),R.set(s,O.TARGET,t);try{let a=await X.impact(s,o);if(!a){gk(i,t);return}i?pk(a,t,i):h.log(JSON.stringify(a,null,2))}catch(a){let l=Gi(a);i?i.fail(g.IMPACT_FAIL+l):h.error(g.IMPACT_FAIL+l),Ip.exitCode=1}finally{R.deleteScope(s)}}import ql from"process";import Sk from"crypto";var _e={CONTEXT_START:"<docuvia_context>",CONTEXT_END:"</docuvia_context>",L2_START_PREFIX:' <l2_module name="',L2_TYPE_MID:'" type="',L2_FILE_MID:'" file="',L2_MATCH_TYPE_MID:'" match_type="',L2_START_SUFFIX:'">',L2_END:" </l2_module>",L3_START_PREFIX:' <l3_decision title="',L3_SOURCE_MID:'" source="',L3_CONFIDENCE_MID:'" confidence="',L3_COMMIT_MID:'" commit="',L3_CREATED_AT_MID:'" created_at="',L3_VALIDITY_MID:'" validity="',L3_START_SUFFIX:'">',L3_CONTENT_PREFIX:" ",L3_END:" </l3_decision>",INCOMING_START:" <incoming>",INCOMING_END:" </incoming>",CALLER_PREFIX:' <caller name="',CALLER_MID:'" relation="',CALLER_SUFFIX:'" />',OUTGOING_START:" <outgoing>",OUTGOING_END:" </outgoing>",CALLEE_PREFIX:' <callee name="',CALLEE_MID:'" relation="',CALLEE_SUFFIX:'" />',INCOMING_UNPROCESSED_PREFIX:' <incoming tier_b_status="unprocessed" note="',OUTGOING_UNPROCESSED_PREFIX:' <outgoing tier_b_status="unprocessed" note="',UNPROCESSED_SUFFIX:'" />'};function fk(t){let e=_e.L3_START_PREFIX+t.title;return t.source&&(e+=_e.L3_SOURCE_MID+t.source),t.confidence!==void 0&&t.confidence!==null&&(e+=_e.L3_CONFIDENCE_MID+String(t.confidence)),t.commitHash&&(e+=_e.L3_COMMIT_MID+t.commitHash),t.createdAt&&(e+=_e.L3_CREATED_AT_MID+t.createdAt),t.validityStatus&&(e+=_e.L3_VALIDITY_MID+t.validityStatus),e+_e.L3_START_SUFFIX}function mk(t){let e=[];if(t.l2){let r=_e.L2_START_PREFIX+t.l2.name;t.l2.type&&(r+=_e.L2_TYPE_MID+t.l2.type),t.l2.filePath&&(r+=_e.L2_FILE_MID+t.l2.filePath),r+=_e.L2_MATCH_TYPE_MID+t.l2.matchType,e.push(r+_e.L2_START_SUFFIX)}for(let r of t.l3)e.push(fk(r)),e.push(_e.L3_CONTENT_PREFIX+(r.content||q.EMPTY)),e.push(_e.L3_END);return t.l2&&e.push(_e.L2_END),e}function hk(t,e){if(t.length>0){let r=[_e.INCOMING_START];for(let n of t)r.push(_e.CALLER_PREFIX+n.name+_e.CALLER_MID+n.linkType+_e.CALLER_SUFFIX);return r.push(_e.INCOMING_END),r}return e&&e.workspaceFilesProcessed<e.workspaceFilesTotal?[_e.INCOMING_UNPROCESSED_PREFIX+g.QUERY_TIER_B_INCOMING_UNPROCESSED(e.workspaceFilesTotal-e.workspaceFilesProcessed,e.workspaceFilesTotal)+_e.UNPROCESSED_SUFFIX]:[]}function Ek(t,e){if(t.length>0){let r=[_e.OUTGOING_START];for(let n of t)r.push(_e.CALLEE_PREFIX+n.name+_e.CALLEE_MID+n.linkType+_e.CALLEE_SUFFIX);return r.push(_e.OUTGOING_END),r}return e&&e.ownFileLastProcessedAt===null?[_e.OUTGOING_UNPROCESSED_PREFIX+g.QUERY_TIER_B_OUTGOING_UNPROCESSED+_e.UNPROCESSED_SUFFIX]:[]}function _k(t){let e=t.context?.incoming??[],r=t.context?.outgoing??[],n=t.context?.tierBCoverage;return e.length===0&&r.length===0&&!n?[]:[...hk(e,n),...Ek(r,n)]}function Jl(t){return[_e.CONTEXT_START,...mk(t),..._k(t),_e.CONTEXT_END].join(q.NEWLINE)}var Tk={exact:g.QUERY_MATCH_TYPE_EXACT,keyword:g.QUERY_MATCH_TYPE_KEYWORD,neighbor:g.QUERY_MATCH_TYPE_NEIGHBOR};function Ak(t){if(t.l2){let e=g.QUERY_L2_PREFIX+t.l2.name;t.l2.filePath&&(e+=q.OPEN_PAREN+t.l2.filePath+q.CLOSE_PAREN),e+=Tk[t.l2.matchType],h.info(e)}else h.warn(g.QUERY_NO_L2)}function Rk(t){let e=[];return t.source&&e.push(`source=${t.source}`),t.commitHash&&e.push(`commit=${t.commitHash.slice(0,q.SHORT_SHA_LENGTH)}`),t.validityStatus&&e.push(`validity=${t.validityStatus}`),e}function yk(t){for(let e of t){let r=Rk(e);h.success(g.QUERY_L3_PREFIX+e.title+(r.length>0?g.QUERY_L3_PROVENANCE(r):"")),e.content&&h.log(q.INDENT_TWO+e.content.split(q.NEWLINE).join(q.NEWLINE+q.INDENT_TWO)),h.log(q.EMPTY)}}function bA(t,e,r){if(t.length===0){if(!r)return;h.section(e),h.warn(r),h.log(q.EMPTY);return}h.section(e),h.table([{header:g.QUERY_COL_NAME},{header:g.QUERY_COL_RELATION}],t.map(n=>[n.name,n.linkType])),h.log(q.EMPTY)}function Ok(t,e){if(!(!t||!e||e.workspaceFilesProcessed>=e.workspaceFilesTotal))return g.QUERY_TIER_B_INCOMING_UNPROCESSED(e.workspaceFilesTotal-e.workspaceFilesProcessed,e.workspaceFilesTotal)}function Ik(t,e){if(!(!t||!e||e.ownFileLastProcessedAt!==null))return g.QUERY_TIER_B_OUTGOING_UNPROCESSED}function Lk(t){h.header(g.QUERY_CONTEXT_HEADER),Ak(t),h.log(q.EMPTY),yk(t.l3);let e=t.context?.incoming??[],r=t.context?.outgoing??[],n=t.context?.tierBCoverage,i=Ok(e.length===0,n),s=Ik(r.length===0,n);bA(e,g.QUERY_INCOMING_HEADER,i),bA(r,g.QUERY_OUTGOING_HEADER,s),h.log(q.EMPTY)}async function Ck(t,e){if(t)return t;e||(h.error(g.QUERY_MISSING_TARGET),ql.exit(1)),h.header(g.QUERY_HEADER);let r=await h.askInput(g.QUERY_PROMPT_TARGET);return r||(h.error(g.QUERY_MISSING_TARGET_NON_TTY),ql.exit(1)),r}function Nk(t){if(t!==void 0&&(!Number.isInteger(t)||t<=0)){h.warn(g.QUERY_INVALID_LIMIT+t);return}return t}function Pk(t,e,r){if(t)return;let n=h.spinner(g.QUERY_START+q.DOUBLE_QUOTE+e+q.DOUBLE_QUOTE+q.ELLIPSIS).start();return r.onLog(i=>{i.level===Oe.INFO&&(n.text=i.message)}),n}async function Dk(t,e,r,n,i,s){R.createScope(t),R.set(t,O.WORKSPACE_ROOT,r),R.set(t,O.TARGET,n),i!==void 0&&R.set(t,O.LIMIT,i);try{let o=await X.query(t,e);return s&&(s.succeed(g.QUERY_FOUND+q.DOUBLE_QUOTE+n+q.DOUBLE_QUOTE),h.log("")),o}catch(o){let a=Gi(o);s?s.fail(g.QUERY_FAIL+a):h.error(g.QUERY_FAIL+a),ql.exitCode=1;return}finally{R.deleteScope(t)}}async function wA(t,e={},r=ql.cwd(),n=!1){let i=await Ck(t,n),s=e.format===jt.PROMPT||e.format===jt.JSON,o=Nk(e.limit),a=Sk.randomUUID(),l=ee(),c=Pk(s,i,l),u=await Dk(a,l,r,i,o,c);u&&(e.format===jt.JSON?h.log(JSON.stringify(u,null,2)):e.format===jt.PROMPT?h.log(Jl(u)):Lk(u))}import Lp from"fs/promises";import xi from"path";import GA from"process";import Bk from"crypto";function FA(t){let e=JSON.stringify(t).replace(/</g,"\\u003c"),r=`
186
- `,n=[];return n.push(vk(t)),n.push(bk()),n.push(wk(e)),n.push("</body>"),n.push("</html>"),n.join(r)+r}function vk(t){let e=[];return e.push("<!DOCTYPE html>"),e.push('<html lang="en">'),e.push("<head>"),e.push('<meta charset="UTF-8">'),e.push('<meta name="viewport" content="width=device-width, initial-scale=1">'),e.push("<title>Docuvia Topology - "+Hk(t.workspaceRoot)+"</title>"),e.push("<style>"),e.push("* { box-sizing: border-box; margin: 0; padding: 0; }"),e.push("body { background: #0f1420; color: #dbe2ef; font-family: sans-serif; display: flex; height: 100vh; overflow: hidden; }"),e.push("#graph { flex: 1; cursor: grab; }"),e.push("#graph.dragging { cursor: grabbing; }"),e.push("#sidebar { width: 360px; background: #161c2c; border-right: 1px solid #263048; display: flex; flex-direction: column; overflow: hidden; }"),e.push(".panel { padding: 12px; border-bottom: 1px solid #263048; }"),e.push(".panel h3 { font-size: 12px; color: #8b98b8; margin-bottom: 8px; text-transform: uppercase; }"),e.push("#search { width: 100%; background: #0f1420; border: 1px solid #33405f; color: #dbe2ef; padding: 7px 10px; border-radius: 6px; font-size: 13px; outline: none; }"),e.push("#search-results { max-height: 130px; overflow-y: auto; margin-top: 6px; }"),e.push(".search-item, .neighbor-item { padding: 4px 6px; cursor: pointer; border-radius: 4px; font-size: 12px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }"),e.push(".search-item:hover, .neighbor-item:hover { background: #263048; }"),e.push("#info { font-size: 13px; line-height: 1.65; min-height: 120px; }"),e.push("#info .muted { color: #5d6a8a; font-style: italic; }"),e.push("#info b { color: #f1f4fb; }"),e.push(".kind-badge { display: inline-block; padding: 1px 7px; border-radius: 9px; font-size: 11px; margin-left: 6px; }"),e.push(".kind-file { background: #2a4d7a; } .kind-symbol { background: #3a6b4f; } .kind-decision { background: #8a6d1f; }"),e.push("#neighbors { max-height: 150px; overflow-y: auto; margin-top: 4px; }"),e.push("#legend { flex: 1; overflow-y: auto; padding: 12px; }"),e.push(".legend-item { display: flex; align-items: center; gap: 8px; padding: 4px 2px; cursor: pointer; border-radius: 4px; font-size: 12px; }"),e.push(".legend-item:hover { background: #263048; }"),e.push(".legend-item.off { opacity: 0.3; }"),e.push(".legend-dot { width: 11px; height: 11px; border-radius: 50%; flex-shrink: 0; }"),e.push(".legend-label { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }"),e.push(".legend-count { color: #5d6a8a; font-size: 11px; }"),e.push("#stats { padding: 10px 12px; border-top: 1px solid #263048; font-size: 11px; color: #5d6a8a; }"),e.push("#controls { position: absolute; top: 16px; right: 16px; display: flex; gap: 8px; z-index: 10; }"),e.push(".btn { background: #161c2c; color: #dbe2ef; border: 1px solid #33405f; padding: 6px 10px; border-radius: 6px; cursor: pointer; font-size: 13px; font-weight: bold; outline: none; }"),e.push(".btn:hover { background: #263048; border-color: #5b8def; }"),e.push("</style>"),e.push("</head>"),e.join(`
187
- `)}function bk(){let t=[];return t.push("<body>"),t.push('<div id="controls">'),t.push('<button class="btn" id="btn-zoom-in" title="Zoom In">+</button>'),t.push('<button class="btn" id="btn-zoom-out" title="Zoom Out">-</button>'),t.push('<button class="btn" id="btn-fit" title="Fit View">Fit View</button>'),t.push("</div>"),t.push('<div id="sidebar">'),t.push('<div class="panel">'),t.push('<input id="search" type="text" placeholder="Search nodes..." autocomplete="off">'),t.push('<div id="search-results"></div>'),t.push("</div>"),t.push('<div class="panel">'),t.push("<h3>Node Info</h3>"),t.push('<div id="info"></div>'),t.push('<div id="neighbors"></div>'),t.push("</div>"),t.push('<div id="legend"><h3>Groups</h3><div id="legend-items"></div></div>'),t.push('<div id="stats"></div>'),t.push("</div>"),t.push('<canvas id="graph"></canvas>'),t.join(`
188
- `)}function wk(t){return["<script>",Fk(t),Mk(),kk(),Gk(),xk(),Uk(),"</script>"].join(`
189
- `)}function Fk(t){let e=[];return e.push('"use strict";'),e.push("var GRAPH = "+t+";"),e.push('var PALETTE = ["#4E79A7","#F28E2B","#E15759","#76B7B2","#59A14F","#EDC948","#B07AA1","#FF9DA7","#9C755F","#BAB0AC","#5B8DEF","#8CD17D"];'),e.push('var DECISION_COLOR = "#E8B931";'),e.push('var canvas = document.getElementById("graph");'),e.push('var ctx = canvas.getContext("2d");'),e.push("var nodes = GRAPH.nodes.map(function (n) { return Object.assign({ x: 0, y: 0, vx: 0, vy: 0 }, n); });"),e.push("var nodeById = {};"),e.push("nodes.forEach(function (n) { nodeById[n.id] = n; });"),e.push("var links = GRAPH.links.filter(function (l) { return nodeById[l.source] && nodeById[l.target]; });"),e.push("var incoming = {}, outgoing = {};"),e.push("links.forEach(function (l) {"),e.push(" (incoming[l.target] = incoming[l.target] || []).push(l);"),e.push(" (outgoing[l.source] = outgoing[l.source] || []).push(l);"),e.push("});"),e.push("var maxDeg = 1;"),e.push("nodes.forEach(function (n) { if (n.degree > maxDeg) maxDeg = n.degree; });"),e.push("var groupCenters = {};"),e.push("var R = 160 * Math.sqrt(Math.max(GRAPH.groups.length, 1));"),e.push("GRAPH.groups.forEach(function (g, i) {"),e.push(" var a = (2 * Math.PI * i) / Math.max(GRAPH.groups.length, 1);"),e.push(" groupCenters[g.id] = { x: R * Math.cos(a), y: R * Math.sin(a) };"),e.push("});"),e.push("nodes.forEach(function (n, i) {"),e.push(" var c = groupCenters[n.group] || { x: 0, y: 0 };"),e.push(" var a = i * 2.399963;"),e.push(" var r = 20 + 90 * Math.sqrt((i % 97) / 97);"),e.push(" n.x = c.x + r * Math.cos(a);"),e.push(" n.y = c.y + r * Math.sin(a);"),e.push("});"),e.join(`
190
- `)}function Mk(){let t=[];return t.push("var ticksLeft = 300;"),t.push("function tick() {"),t.push(" var i, j, n, m, dx, dy, d2, f;"),t.push(" for (i = 0; i < nodes.length; i++) {"),t.push(" n = nodes[i];"),t.push(" for (j = i + 1; j < nodes.length; j++) {"),t.push(" m = nodes[j];"),t.push(" dx = n.x - m.x; dy = n.y - m.y;"),t.push(" d2 = dx * dx + dy * dy;"),t.push(" if (d2 > 60000 || d2 === 0) continue;"),t.push(" f = 3000 / d2;"),t.push(" dx *= f; dy *= f;"),t.push(" n.vx += dx; n.vy += dy; m.vx -= dx; m.vy -= dy;"),t.push(" }"),t.push(" }"),t.push(" links.forEach(function (l) {"),t.push(" var a = nodeById[l.source], b = nodeById[l.target];"),t.push(" var ddx = b.x - a.x, ddy = b.y - a.y;"),t.push(" var dist = Math.sqrt(ddx * ddx + ddy * ddy) || 1;"),t.push(' var rest = l.linkType === "contains" || l.linkType === "decision" ? 60 : 140;'),t.push(" var s = 0.06 * (dist - rest) / dist;"),t.push(" ddx *= s; ddy *= s;"),t.push(" a.vx += ddx; a.vy += ddy; b.vx -= ddx; b.vy -= ddy;"),t.push(" });"),t.push(" nodes.forEach(function (p) {"),t.push(" var c = groupCenters[p.group] || { x: 0, y: 0 };"),t.push(" p.vx += (c.x - p.x) * 0.015 + (0 - p.x) * 0.002;"),t.push(" p.vy += (c.y - p.y) * 0.015 + (0 - p.y) * 0.002;"),t.push(" p.vx *= 0.8; p.vy *= 0.8;"),t.push(" p.x += p.vx; p.y += p.vy;"),t.push(" });"),t.push("}"),t.push("var scale = 1, ox = 0, oy = 0;"),t.push("function resize() {"),t.push(" canvas.width = canvas.clientWidth * devicePixelRatio;"),t.push(" canvas.height = canvas.clientHeight * devicePixelRatio;"),t.push(" draw();"),t.push("}"),t.push("function fitView() {"),t.push(" var minX = 1e9, minY = 1e9, maxX = -1e9, maxY = -1e9;"),t.push(" nodes.forEach(function (n) {"),t.push(" if (n.x < minX) minX = n.x; if (n.x > maxX) maxX = n.x;"),t.push(" if (n.y < minY) minY = n.y; if (n.y > maxY) maxY = n.y;"),t.push(" });"),t.push(" var w = canvas.clientWidth, h = canvas.clientHeight;"),t.push(" scale = Math.min(w / (maxX - minX + 200), h / (maxY - minY + 200), 2);"),t.push(" ox = w / 2 - scale * (minX + maxX) / 2;"),t.push(" oy = h / 2 - scale * (minY + maxY) / 2;"),t.push("}"),t.push("var selected = null, hiddenGroups = {}, blast = null;"),t.push("function computeBlast(id) {"),t.push(" var seen = {}; seen[id] = 0;"),t.push(" var frontier = [id], depth = 0;"),t.push(" while (frontier.length && depth < 3) {"),t.push(" var next = [];"),t.push(" frontier.forEach(function (nid) {"),t.push(" (incoming[nid] || []).forEach(function (l) {"),t.push(" if (!(l.source in seen)) { seen[l.source] = depth + 1; next.push(l.source); }"),t.push(" });"),t.push(" });"),t.push(" frontier = next; depth++;"),t.push(" }"),t.push(" return seen;"),t.push("}"),t.push("function nodeRadius(n) {"),t.push(' return n.kind === "decision" ? 6 : 6 + 14 * Math.sqrt(n.degree / maxDeg);'),t.push("}"),t.push("function nodeColor(n) {"),t.push(' if (n.kind === "decision") return DECISION_COLOR;'),t.push(" return PALETTE[n.group % PALETTE.length];"),t.push("}"),t.push("function convexHull(pts) {"),t.push(" if (pts.length < 3) return pts;"),t.push(" pts = pts.slice().sort(function (a, b) { return a.x - b.x || a.y - b.y; });"),t.push(" var cross = function (o, a, b) { return (a.x - o.x) * (b.y - o.y) - (a.y - o.y) * (b.x - o.x); };"),t.push(" var lower = [], upper = [], k;"),t.push(" for (k = 0; k < pts.length; k++) {"),t.push(" while (lower.length >= 2 && cross(lower[lower.length - 2], lower[lower.length - 1], pts[k]) <= 0) lower.pop();"),t.push(" lower.push(pts[k]);"),t.push(" }"),t.push(" for (k = pts.length - 1; k >= 0; k--) {"),t.push(" while (upper.length >= 2 && cross(upper[upper.length - 2], upper[upper.length - 1], pts[k]) <= 0) upper.pop();"),t.push(" upper.push(pts[k]);"),t.push(" }"),t.push(" lower.pop(); upper.pop();"),t.push(" return lower.concat(upper);"),t.push("}"),t.join(`
191
- `)}function kk(){let t=[];return t.push("function draw() {"),t.push(" ctx.setTransform(devicePixelRatio, 0, 0, devicePixelRatio, 0, 0);"),t.push(" ctx.clearRect(0, 0, canvas.clientWidth, canvas.clientHeight);"),t.push(" ctx.setTransform(devicePixelRatio * scale, 0, 0, devicePixelRatio * scale, devicePixelRatio * ox, devicePixelRatio * oy);"),t.push(" GRAPH.groups.forEach(function (g) {"),t.push(" if (hiddenGroups[g.id]) return;"),t.push(" var pts = nodes.filter(function (n) { return n.group === g.id; });"),t.push(" if (pts.length < 2) return;"),t.push(" var hull = convexHull(pts);"),t.push(" var cx = 0, cy = 0;"),t.push(" hull.forEach(function (p) { cx += p.x; cy += p.y; });"),t.push(" cx /= hull.length; cy /= hull.length;"),t.push(" var color = PALETTE[g.id % PALETTE.length];"),t.push(" ctx.beginPath();"),t.push(" hull.forEach(function (p, idx) {"),t.push(" var ex = cx + (p.x - cx) * 1.25, ey = cy + (p.y - cy) * 1.25;"),t.push(" if (idx === 0) ctx.moveTo(ex, ey); else ctx.lineTo(ex, ey);"),t.push(" });"),t.push(" ctx.closePath();"),t.push(" ctx.globalAlpha = 0.07; ctx.fillStyle = color; ctx.fill();"),t.push(" ctx.globalAlpha = 0.3; ctx.strokeStyle = color; ctx.lineWidth = 1.5 / scale; ctx.stroke();"),t.push(" ctx.globalAlpha = 0.75; ctx.fillStyle = color;"),t.push(' ctx.font = "bold " + (13 / scale) + "px sans-serif";'),t.push(" ctx.fillText(g.label, cx, cy - (10 / scale));"),t.push(" ctx.globalAlpha = 1;"),t.push(" });"),t.push(" links.forEach(function (l) {"),t.push(" var a = nodeById[l.source], b = nodeById[l.target];"),t.push(" if (hiddenGroups[a.group] || hiddenGroups[b.group]) return;"),t.push(" var inBlast = blast && l.target in blast && l.source in blast;"),t.push(" ctx.beginPath();"),t.push(" ctx.moveTo(a.x, a.y);"),t.push(" ctx.lineTo(b.x, b.y);"),t.push(" if (blast && !inBlast) { ctx.globalAlpha = 0.04; }"),t.push(' else if (l.linkType === "contains") { ctx.globalAlpha = 0.10; }'),t.push(' else if (l.linkType === "decision") { ctx.globalAlpha = 0.5; ctx.setLineDash([4 / scale, 3 / scale]); }'),t.push(" else { ctx.globalAlpha = inBlast ? 0.9 : 0.35; }"),t.push(' ctx.strokeStyle = inBlast ? "#ff6b6b" : (l.linkType === "decision" ? DECISION_COLOR : "#8b98b8");'),t.push(" ctx.lineWidth = (inBlast ? 2 : 1) / scale;"),t.push(" ctx.stroke();"),t.push(" ctx.setLineDash([]);"),t.push(" ctx.globalAlpha = 1;"),t.push(" });"),t.push(" nodes.forEach(function (n) {"),t.push(" if (hiddenGroups[n.group]) return;"),t.push(" var r = nodeRadius(n);"),t.push(" var dimmed = blast && !(n.id in blast);"),t.push(" ctx.globalAlpha = dimmed ? 0.12 : 1;"),t.push(" ctx.fillStyle = nodeColor(n);"),t.push(' if (n.kind === "decision") {'),t.push(" ctx.fillRect(n.x - r, n.y - r, r * 2, r * 2);"),t.push(" } else {"),t.push(" ctx.beginPath();"),t.push(" ctx.arc(n.x, n.y, r, 0, 2 * Math.PI);"),t.push(" ctx.fill();"),t.push(' if (n.kind === "file") {'),t.push(' ctx.strokeStyle = "#f1f4fb"; ctx.lineWidth = 1 / scale;'),t.push(" ctx.stroke();"),t.push(" }"),t.push(" }"),t.push(" if (selected && n.id === selected.id) {"),t.push(' ctx.strokeStyle = "#ffffff"; ctx.lineWidth = 2.5 / scale;'),t.push(" ctx.beginPath(); ctx.arc(n.x, n.y, r + 3 / scale, 0, 2 * Math.PI); ctx.stroke();"),t.push(" }"),t.push(" ctx.globalAlpha = 1;"),t.push(" });"),t.push(' ctx.fillStyle = "#dbe2ef";'),t.push(' ctx.font = (11 / scale) + "px sans-serif";'),t.push(" nodes.forEach(function (n) {"),t.push(" if (hiddenGroups[n.group]) return;"),t.push(" var show = n.degree >= maxDeg * 0.3 || (selected && n.id === selected.id) || (blast && n.id in blast && scale > 0.7);"),t.push(" if (!show) return;"),t.push(" if (blast && !(n.id in blast)) return;"),t.push(' ctx.fillText(n.label.length > 34 ? n.label.slice(0, 33) + "..." : n.label, n.x + nodeRadius(n) + 3 / scale, n.y + 4 / scale);'),t.push(" });"),t.push("}"),t.join(`
192
- `)}function Gk(){let t=[];return t.push("var dragging = false, moved = false, lastX = 0, lastY = 0;"),t.push('canvas.addEventListener("mousedown", function (e) { dragging = true; moved = false; lastX = e.clientX; lastY = e.clientY; canvas.classList.add("dragging"); });'),t.push('window.addEventListener("mousemove", function (e) {'),t.push(" if (!dragging) return;"),t.push(" var dx = e.clientX - lastX, dy = e.clientY - lastY;"),t.push(" if (Math.abs(dx) + Math.abs(dy) > 3) moved = true;"),t.push(" ox += dx; oy += dy; lastX = e.clientX; lastY = e.clientY;"),t.push(" draw();"),t.push("});"),t.push('window.addEventListener("mouseup", function (e) {'),t.push(' canvas.classList.remove("dragging");'),t.push(" if (dragging && !moved) handleClick(e);"),t.push(" dragging = false;"),t.push("});"),t.push('canvas.addEventListener("wheel", function (e) {'),t.push(" e.preventDefault();"),t.push(" var f = Math.exp(-e.deltaY * 0.0012);"),t.push(" var wx = (e.offsetX - ox) / scale, wy = (e.offsetY - oy) / scale;"),t.push(" scale = Math.min(Math.max(scale * f, 0.03), 10);"),t.push(" ox = e.offsetX - wx * scale; oy = e.offsetY - wy * scale;"),t.push(" draw();"),t.push("}, { passive: false });"),t.push('document.getElementById("btn-zoom-in").addEventListener("click", function() {'),t.push(" var w = canvas.clientWidth, h = canvas.clientHeight;"),t.push(" var wx = (w / 2 - ox) / scale, wy = (h / 2 - oy) / scale;"),t.push(" scale = Math.min(scale * 1.4, 10);"),t.push(" ox = w / 2 - wx * scale; oy = h / 2 - wy * scale;"),t.push(" draw();"),t.push("});"),t.push('document.getElementById("btn-zoom-out").addEventListener("click", function() {'),t.push(" var w = canvas.clientWidth, h = canvas.clientHeight;"),t.push(" var wx = (w / 2 - ox) / scale, wy = (h / 2 - oy) / scale;"),t.push(" scale = Math.max(scale / 1.4, 0.03);"),t.push(" ox = w / 2 - wx * scale; oy = h / 2 - wy * scale;"),t.push(" draw();"),t.push("});"),t.push('document.getElementById("btn-fit").addEventListener("click", function() { fitView(); draw(); });'),t.push("function handleClick(e) {"),t.push(" var rect = canvas.getBoundingClientRect();"),t.push(" var wx = (e.clientX - rect.left - ox) / scale, wy = (e.clientY - rect.top - oy) / scale;"),t.push(" var best = null, bestD = 12 / scale + 6;"),t.push(" nodes.forEach(function (n) {"),t.push(" if (hiddenGroups[n.group]) return;"),t.push(" var d = Math.hypot(n.x - wx, n.y - wy);"),t.push(" if (d < bestD + nodeRadius(n)) { best = n; bestD = d; }"),t.push(" });"),t.push(" if (!best) { selected = null; blast = null; renderInfo(); draw(); return; }"),t.push(" if (selected && selected.id === best.id) {"),t.push(" blast = blast ? null : computeBlast(best.id);"),t.push(" } else {"),t.push(" selected = best; blast = null;"),t.push(" }"),t.push(" renderInfo();"),t.push(" draw();"),t.push("}"),t.push("function selectNode(id) {"),t.push(" selected = nodeById[id]; blast = null;"),t.push(" ox = canvas.clientWidth / 2 - selected.x * scale;"),t.push(" oy = canvas.clientHeight / 2 - selected.y * scale;"),t.push(" renderInfo();"),t.push(" draw();"),t.push("}"),t.join(`
193
- `)}function xk(){let t=[];return t.push("function renderInfo() {"),t.push(' var info = document.getElementById("info");'),t.push(' var nb = document.getElementById("neighbors");'),t.push(' nb.textContent = "";'),t.push(' info.textContent = "";'),t.push(" if (!selected) {"),t.push(' var muted = document.createElement("span");'),t.push(' muted.className = "muted";'),t.push(' muted.textContent = "Click a node to inspect it. Click again to see its blast radius (upstream dependents).";'),t.push(" info.appendChild(muted);"),t.push(" return;"),t.push(" }"),t.push(" var n = selected;"),t.push(' var title = document.createElement("div");'),t.push(' var bold = document.createElement("b"); bold.textContent = n.label;'),t.push(' var badge = document.createElement("span"); badge.className = "kind-badge kind-" + n.kind; badge.textContent = n.kind;'),t.push(" title.appendChild(bold); title.appendChild(badge);"),t.push(" info.appendChild(title);"),t.push(" var addField = function (k, v) {"),t.push(" if (!v) return;"),t.push(' var d = document.createElement("div");'),t.push(' d.textContent = k + ": " + v;'),t.push(" info.appendChild(d);"),t.push(" };"),t.push(' addField("file", n.filePath);'),t.push(' addField("group", (GRAPH.groups[n.group] || {}).label);'),t.push(' addField("degree", String(n.degree));'),t.push(' addField("tags", (n.tags || []).join(", "));'),t.push(' addField("type", n.l2Type);'),t.push(' addField("decision type", n.decisionType);'),t.push(' addField("confidence", n.confidence != null ? String(n.confidence) : "");'),t.push(' addField("validity", n.validityStatus);'),t.push(' addField("source commits", (n.sourceCommits || []).join(", "));'),t.push(' addField("content", n.content);'),t.push(" if (blast) {"),t.push(" var count = Object.keys(blast).length - 1;"),t.push(' var d = document.createElement("div");'),t.push(' var b = document.createElement("b");'),t.push(' b.textContent = "blast radius: " + count + " upstream node" + (count === 1 ? "" : "s");'),t.push(" d.appendChild(b);"),t.push(" info.appendChild(d);"),t.push(" }"),t.push(" var neigh = {};"),t.push(' (incoming[n.id] || []).forEach(function (l) { neigh[l.source] = "in:" + l.linkType; });'),t.push(' (outgoing[n.id] || []).forEach(function (l) { neigh[l.target] = "out:" + l.linkType; });'),t.push(" Object.keys(neigh).slice(0, 25).forEach(function (id) {"),t.push(" var m = nodeById[id];"),t.push(' var item = document.createElement("div");'),t.push(' item.className = "neighbor-item";'),t.push(' item.textContent = neigh[id] + " - " + m.label;'),t.push(' item.addEventListener("click", function () { selectNode(id); });'),t.push(" nb.appendChild(item);"),t.push(" });"),t.push("}"),t.push('var searchInput = document.getElementById("search");'),t.push('var searchResults = document.getElementById("search-results");'),t.push('searchInput.addEventListener("input", function () {'),t.push(" var q = searchInput.value.trim().toLowerCase();"),t.push(' searchResults.textContent = "";'),t.push(" if (!q) return;"),t.push(" nodes.filter(function (n) { return n.label.toLowerCase().indexOf(q) >= 0; })"),t.push(" .slice(0, 20)"),t.push(" .forEach(function (n) {"),t.push(' var item = document.createElement("div");'),t.push(' item.className = "search-item";'),t.push(' item.textContent = n.label + " (" + n.kind + ")";'),t.push(' item.addEventListener("click", function () { selectNode(n.id); });'),t.push(" searchResults.appendChild(item);"),t.push(" });"),t.push("});"),t.push('var legendItems = document.getElementById("legend-items");'),t.push("GRAPH.groups.forEach(function (g) {"),t.push(' var item = document.createElement("div");'),t.push(' item.className = "legend-item";'),t.push(' var dot = document.createElement("span");'),t.push(' dot.className = "legend-dot";'),t.push(" dot.style.background = PALETTE[g.id % PALETTE.length];"),t.push(' var label = document.createElement("span");'),t.push(' label.className = "legend-label";'),t.push(" label.textContent = g.label;"),t.push(' var count = document.createElement("span");'),t.push(' count.className = "legend-count";'),t.push(" count.textContent = String(g.count);"),t.push(" item.appendChild(dot); item.appendChild(label); item.appendChild(count);"),t.push(' item.addEventListener("click", function () {'),t.push(" hiddenGroups[g.id] = !hiddenGroups[g.id];"),t.push(' item.classList.toggle("off", !!hiddenGroups[g.id]);'),t.push(" draw();"),t.push(" });"),t.push(" legendItems.appendChild(item);"),t.push("});"),t.join(`
194
- `)}function Uk(){let t=[];return t.push('document.getElementById("stats").textContent ='),t.push(' GRAPH.stats.nodeCount + " nodes, " + GRAPH.stats.linkCount + " links, " +'),t.push(' GRAPH.stats.groupCount + " groups" + (GRAPH.collapsed ? " (collapsed to file level)" : "") +'),t.push(' " - generated " + GRAPH.generatedAt.slice(0, 19).replace("T", " ");'),t.push('window.addEventListener("resize", resize);'),t.push("renderInfo();"),t.push("resize();"),t.push("function loop() {"),t.push(" if (ticksLeft > 0) {"),t.push(" for (var i = 0; i < 4 && ticksLeft > 0; i++) { tick(); ticksLeft--; }"),t.push(" if (ticksLeft === 260) fitView();"),t.push(" draw();"),t.push(" requestAnimationFrame(loop);"),t.push(" } else {"),t.push(" fitView();"),t.push(" draw();"),t.push(" }"),t.push("}"),t.push("loop();"),t.join(`
195
- `)}function Hk(t){return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}var MA="topology.json",kA="topology.html";function Kk(t,e){let r=t?xi.resolve(e,t):xi.join(e,Ee);if(!r.startsWith(e+xi.sep)&&r!==e)throw new E(T.FS_PATH_TRAVERSAL,`Resolved output directory "${r}" escapes workspace root "${e}" \u2014 possible path traversal via --out`);return r}function $k(t,e){h.info(g.EXPORT_STATS_LINE(t.stats.nodeCount,t.stats.linkCount,t.stats.groupCount)),t.collapsed&&h.info(g.EXPORT_COLLAPSED_LINE),t.stats.foldedLinkCount>0&&h.info(g.EXPORT_FOLDED_LINE(t.stats.foldedLinkCount)),e&&h.info(g.EXPORT_HTML_PATH_LINE(e))}async function xA(t={},e=GA.cwd()){h.header(g.EXPORT_HEADER);let r=h.spinner(g.EXPORT_START).start(),n=Bk.randomUUID(),i=ee();i.onLog(a=>{a.level===Oe.INFO&&(r.text=a.message)}),R.createScope(n),R.set(n,O.WORKSPACE_ROOT,e),t.collapse&&R.set(n,O.COLLAPSE,t.collapse);let s,o;try{s=Kk(t.out,xi.resolve(e)),o=await X.exportTopology(n,i),await Lp.mkdir(s,{recursive:!0});let a=xi.join(s,MA);await Lp.writeFile(a,JSON.stringify(o,null,2));let l;t.jsonOnly||(l=xi.join(s,kA),await Lp.writeFile(l,FA(o))),r.succeed(g.EXPORT_SUCCESS+a),$k(o,l)}catch(a){let l=a instanceof E||a instanceof Error?a.message:String(a);r.fail(g.EXPORT_FAIL+l),GA.exitCode=1}finally{R.deleteScope(n)}}import UA from"process";import Yk from"crypto";async function HA(t=UA.cwd()){h.header(g.SNAPSHOT_HEADER);let e=h.spinner(g.SNAPSHOT_START).start(),r=Yk.randomUUID(),n=ee();n.onLog(i=>{i.level===Oe.INFO&&(e.text=i.message)}),R.createScope(r),R.set(r,O.WORKSPACE_ROOT,t);try{let i=await X.snapshot(r,n);e.succeed(g.SNAPSHOT_SUCCESS),h.info(g.SNAPSHOT_NODES_WRITTEN_LINE(i.nodesWritten)),h.info(g.SNAPSHOT_EDGES_WRITTEN_LINE(i.edgesWritten)),h.info(g.SNAPSHOT_MARKDOWN_WRITTEN_LINE(i.markdownFilesWritten))}catch(i){let s=i instanceof E||i instanceof Error?i.message:String(i);e.fail(g.SNAPSHOT_FAIL+s),UA.exitCode=1}finally{R.deleteScope(r)}}import BA from"process";import Wk from"crypto";async function KA(t=BA.cwd(),e){h.header(g.HYDRATE_HEADER);let r=h.spinner(g.HYDRATE_START).start(),n=Wk.randomUUID(),i=ee();i.onLog(s=>{s.level===Oe.INFO&&(r.text=s.message)}),R.createScope(n),R.set(n,O.WORKSPACE_ROOT,t);try{let s=await X.hydrate(n,i,e);if(s.refused){r.warn(g.HYDRATE_REFUSED(s.refusalReason));return}if(!s.hydrated){r.warn(g.HYDRATE_NOTHING);return}r.succeed(g.HYDRATE_SUCCESS),h.info(g.HYDRATE_NODES_LOADED_LINE(s.nodesLoaded)),h.info(g.HYDRATE_EDGES_LOADED_LINE(s.edgesLoaded)),s.edgesDropped>0&&h.info(g.HYDRATE_EDGES_DROPPED_LINE(s.edgesDropped))}catch(s){let o=s instanceof E||s instanceof Error?s.message:String(s);r.fail(g.HYDRATE_FAIL+o),BA.exitCode=1}finally{R.deleteScope(n)}}import Cp from"process";import jk from"crypto";var $A={[qe.NO_REMOTE]:g.SYNC_KNOWLEDGE_NO_REMOTE,[qe.UP_TO_DATE]:g.SYNC_KNOWLEDGE_UP_TO_DATE,[qe.FAST_FORWARDED_LOCAL]:g.SYNC_KNOWLEDGE_FAST_FORWARDED,[qe.PUSHED_LOCAL]:g.SYNC_KNOWLEDGE_PUSHED,[qe.MERGED]:g.SYNC_KNOWLEDGE_MERGED};async function YA(t=Cp.cwd()){h.header(g.SYNC_KNOWLEDGE_HEADER);let e=h.spinner(g.SYNC_KNOWLEDGE_START).start(),r=jk.randomUUID(),n=ee();n.onLog(s=>{s.level===Oe.INFO&&(e.text=s.message)}),R.createScope(r),R.set(r,O.WORKSPACE_ROOT,t);let i=Cp.env.DOCUVIA_PUSH_TIMEOUT_MS;i&&R.set(r,O.GIT_NETWORK_TIMEOUT_MS,Number(i));try{let s=await X.syncKnowledge(r,n);if(s.status===qe.NO_REMOTE){e.warn($A[s.status]);return}e.succeed($A[s.status])}catch(s){let o=s instanceof E||s instanceof Error?s.message:String(s);e.fail(g.SYNC_KNOWLEDGE_FAIL+o),Cp.exitCode=1}finally{R.deleteScope(r)}}import Np from"crypto";import*as WA from"path";async function Vk(t){let e=[_g,Sg,Tg,Ag];for(let r of e)await Gr(WA.join(t,r),`<!-- ${At} -->`,`<!-- ${Mr} -->`)}async function zk(t,e,r){let n=[];for(let i of t)try{await i.uninstallHooks(e)}catch(s){let o=s instanceof Error?s.message:String(s);r.warn(`${g.UNINSTALL_HOOKS_FAIL_LOG}${q.DOUBLE_QUOTE}${i.name}${q.DOUBLE_QUOTE}`,{platform:i.name,error:o}),h.warn(g.UNINSTALL_PLATFORM_FAIL+i.name+g.UNINSTALL_PLATFORM_FAIL_MID+o),n.push(i.name)}return n}async function Jk(t,e,r){let n=Np.randomUUID();R.createScope(n),R.set(n,O.WORKSPACE_ROOT,t),R.set(n,O.KEEP_DB,e);try{let i=await X.uninstallGitHooks(n,r);return h.success(g.UNINSTALL_GIT_HOOKS_SUCCESS(i.postCommitRemoved,i.prePushRemoved)),i.knowledgeBranchDeleted&&h.success(g.UNINSTALL_KNOWLEDGE_BRANCH_DELETED),null}catch(i){let s=i instanceof E||i instanceof Error?i.message:String(i);return r.warn(g.UNINSTALL_GIT_HOOKS_FAIL_LOG,{error:s}),h.warn(g.UNINSTALL_GIT_HOOKS_FAIL+s),g.UNINSTALL_GIT_HOOKS_FAILURE_NAME}finally{R.deleteScope(n)}}async function qk(t,e,r){if(e)return null;let n=Np.randomUUID();R.createScope(n),R.set(n,O.WORKSPACE_ROOT,t);try{return(await X.removeDocuviaDir(n,r)).removed&&h.success(g.UNINSTALL_DOCUVIA_DIR_REMOVED),null}catch(i){let s=i instanceof E||i instanceof Error?i.message:String(i);return r.warn(g.UNINSTALL_DOCUVIA_DIR_FAIL_LOG,{error:s}),h.warn(g.UNINSTALL_DOCUVIA_DIR_FAIL+s),g.UNINSTALL_DOCUVIA_DIR_FAILURE_NAME}finally{R.deleteScope(n)}}async function Qk(t,e,r){if(e)return h.info(g.UNINSTALL_KEEP_DB),null;let n=Np.randomUUID();R.createScope(n),R.set(n,O.WORKSPACE_ROOT,t);try{let i=await X.clean(n,r);return h.success(g.UNINSTALL_SUCCESS_CLEAN+i.message),null}catch(i){let s=i instanceof E||i instanceof Error?i.message:String(i);return r.warn(g.UNINSTALL_DB_CLEANUP_FAIL_LOG,{error:s}),h.warn(g.UNINSTALL_FAIL_CLEAN+s),g.UNINSTALL_DB_CLEANUP_FAILURE_NAME}finally{R.deleteScope(n)}}function Xk(t){try{let e=EA(t);e.length>0?h.success(`Removed ${e.length} skill(s): ${e.join(", ")}`):h.info("No Docuvia skill files found to remove.")}catch(e){h.warn(`Skill removal failed: ${e instanceof Error?e.message:String(e)}`)}}async function Zk(t,e,r,n){let i=await zk(t,e,n);await Vk(e);let s=await Jk(e,r,n);s&&i.push(s);let o=await Qk(e,r,n);o&&i.push(o);let a=await qk(e,r,n);return a&&i.push(a),i}function eG(t){t.length>0?(h.warn(g.UNINSTALL_PARTIAL+t.join(", ")),process.exitCode=1):h.success(g.UNINSTALL_SUCCESS)}async function jA(t,e,r=!1,n=!1,i=!1){if(!t){h.error(g.UNINSTALL_INVALID_WORKSPACE_ROOT),process.exitCode=1;return}let s=ee();try{h.header(g.UNINSTALL_HEADER),h.info(g.UNINSTALL_START);let o=await $l(g.UNINSTALL_HOOKS_SELECT,e,n),a=await Zk(o,t,r,s);i&&Xk(t),eG(a)}catch(o){let a=o instanceof Error?o.message:String(o);s.error(g.UNINSTALL_FAIL_LOG,{error:a}),h.warn(g.UNINSTALL_FAIL+a),process.exitCode=1}}import Ui from"process";import nG from"crypto";var tG=[{category:g.DOCTOR_CATEGORY_DATABASE,test:t=>t.startsWith("sqlite_")||t==="db_runner"||t==="db_found"||t==="graph_empty"||t==="l2_semantic_coverage"||t==="call_graph_resolution"||t==="canary_self_test"},{category:g.DOCTOR_CATEGORY_GIT_HOOKS,test:t=>t==="git_hook"||t==="pre_push_hook"},{category:g.DOCTOR_CATEGORY_GIT,test:t=>t.startsWith("git_")||t==="worktree_divergence"},{category:g.DOCTOR_CATEGORY_LOGS,test:t=>t==="logs"},{category:g.DOCTOR_CATEGORY_TIER_B,test:t=>t==="tier_b_commit_cap"},{category:g.DOCTOR_CATEGORY_TIER_B_COVERAGE,test:t=>t==="tier_b_coverage"},{category:g.DOCTOR_CATEGORY_LLM,test:t=>t==="llm_reachability"||t==="tier_c_queue"},{category:g.DOCTOR_CATEGORY_LSP,test:t=>t.startsWith("lsp_binary")},{category:g.DOCTOR_CATEGORY_AGENT_HOOKS,test:t=>t.startsWith("agent_hooks_")},{category:g.DOCTOR_CATEGORY_AGENT_ADOPTION,test:t=>t==="agent_authored_adoption"}],VA=[g.DOCTOR_CATEGORY_DATABASE,g.DOCTOR_CATEGORY_GIT,g.DOCTOR_CATEGORY_GIT_HOOKS,g.DOCTOR_CATEGORY_LOGS,g.DOCTOR_CATEGORY_TIER_B,g.DOCTOR_CATEGORY_TIER_B_COVERAGE,g.DOCTOR_CATEGORY_LLM,g.DOCTOR_CATEGORY_LSP,g.DOCTOR_CATEGORY_AGENT_HOOKS,g.DOCTOR_CATEGORY_AGENT_ADOPTION,g.DOCTOR_CATEGORY_OTHER];function rG(t){return tG.find(e=>e.test(t))?.category??g.DOCTOR_CATEGORY_OTHER}function zA(t){let e=new Map;for(let[r,n]of Object.entries(t)){let i=rG(r),s=e.get(i)??[];s.push([r,n]),e.set(i,s)}return e}var JA=[{header:g.DOCTOR_COL_CHECK},{header:g.DOCTOR_COL_STATUS},{header:g.DOCTOR_COL_MESSAGE,maxWidth:70},{header:g.DOCTOR_COL_FIX,maxWidth:50}];function qA(t,e){let r=e.status===K.PASS?`${dc.PASS} ${g.DOCTOR_STATUS_PASS}`:`${dc.FAIL} ${g.DOCTOR_STATUS_FAIL}`,n=e.details?`${e.message}${q.OPEN_PAREN}${e.details}${q.CLOSE_PAREN}`:e.message;return[t,r,n,e.suggestion??q.EMPTY]}function QA(t){let e=Object.values(t);return{passed:e.filter(n=>n.status===K.PASS).length,total:e.length}}var iG=60;function sG(){return{llmBaseUrl:Ui.env.AI_DOCUVIA_INTEGRATIONS_OPENAI_BASE_URL,llmApiKey:Ui.env.AI_DOCUVIA_INTEGRATIONS_OPENAI_API_KEY,llmModel:Ui.env.AI_DOCUVIA_MODEL||Ui.env.AI_DOCUVIA_FAST_MODEL}}function oG(t){let e=zA(t);for(let r of VA){let n=e.get(r);!n||n.length===0||(h.section(r),h.table(JA,n.map(([i,s])=>qA(i,s))))}}function aG(t,e){let{passed:r,total:n}=QA(t);h.log(""),h.log(mg.HORIZONTAL.repeat(iG));let i=g.DOCTOR_SUMMARY_PASSED(r,n);if(e){h.success(i);return}h.error(i),h.info(g.DOCTOR_FIX_HINT)}async function lG(t,e,r,n){R.createScope(t),R.set(t,O.WORKSPACE_ROOT,r);try{let i=await X.doctor(t,e,{...n,...sG()});return oG(i.diagnostics),aG(i.diagnostics,i.allPassed),i.allPassed}catch(i){let s=i instanceof E||i instanceof Error?i.message:String(i);return h.error(g.DOCTOR_FAIL+s),!1}finally{R.deleteScope(t)}}function cG(t){let{skipDb:e=!1,skipGit:r=!1,skipHooks:n=!1,skipLogs:i=!1,skipLsp:s=!1,skipLlm:o=!1,fix:a=!1}=t;return{skipDb:e,skipGit:r,skipHooks:n,skipLogs:i,skipLsp:s,skipLlm:o,fix:a}}async function XA(t,e={}){try{h.header(g.DOCTOR_HEADER),h.info(g.DOCTOR_START);let r=nG.randomUUID(),n=ee();await lG(r,n,t,cG(e))||(Ui.exitCode=1)}catch(r){let n=r instanceof Error?r.message:String(r);h.error(g.DOCTOR_FAIL+n),Ui.exitCode=1}}import ln from"process";import Pp from"crypto";var Ql={LIST:"list",ENABLE:"enable",DISABLE:"disable",CHECK:"check"};function eR(t){return!!t&&Object.values(dr).includes(t)}async function uG(t){let e=Pp.randomUUID(),r=ee();R.createScope(e),R.set(e,O.WORKSPACE_ROOT,t);try{let n=await X.listHooks(e,r);h.header(g.HOOKS_HEADER),h.table([{header:g.HOOKS_COL_NAME},{header:g.HOOKS_COL_STATUS}],Object.values(dr).map(i=>[i,n[i]?g.HOOKS_STATUS_ENABLED:g.HOOKS_STATUS_DISABLED]))}catch(n){let i=n instanceof E||n instanceof Error?n.message:String(n);h.error(g.HOOKS_LIST_FAIL+i),ln.exitCode=1}finally{R.deleteScope(e)}}async function ZA(t,e,r){if(!eR(e)){h.error(g.HOOKS_INVALID_NAME(e,Object.values(dr))),ln.exitCode=1;return}let n=Pp.randomUUID(),i=ee();R.createScope(n),R.set(n,O.WORKSPACE_ROOT,t),R.set(n,O.HOOK_NAME,e),R.set(n,O.HOOK_ENABLED,r);try{let s=await X.setHookEnabled(n,i);h.success(r?g.HOOKS_ENABLED(e):g.HOOKS_DISABLED(e)),h.table([{header:g.HOOKS_COL_NAME},{header:g.HOOKS_COL_STATUS}],Object.values(dr).map(o=>[o,s[o]?g.HOOKS_STATUS_ENABLED:g.HOOKS_STATUS_DISABLED]))}catch(s){let o=s instanceof E||s instanceof Error?s.message:String(s);h.error(g.HOOKS_SET_FAIL+o),ln.exitCode=1}finally{R.deleteScope(n)}}async function dG(t,e){if(!eR(e)){ln.exitCode=1;return}let r=Pp.randomUUID();R.createScope(r),R.set(r,O.WORKSPACE_ROOT,t);try{let n=await X.listHooks(r,he());ln.exitCode=n[e]?0:1}catch{ln.exitCode=0}finally{R.deleteScope(r)}}async function tR(t,e,r=ln.cwd()){switch(t){case Ql.LIST:await uG(r);return;case Ql.ENABLE:await ZA(r,e,!0);return;case Ql.DISABLE:await ZA(r,e,!1);return;case Ql.CHECK:await dG(r,e);return;default:h.error(g.HOOKS_UNKNOWN_SUBCOMMAND(t)),ln.exitCode=1}}import{Server as BG}from"@modelcontextprotocol/sdk/server/index.js";import{StdioServerTransport as KG}from"@modelcontextprotocol/sdk/server/stdio.js";import{CallToolRequestSchema as $G,ListToolsRequestSchema as YG}from"@modelcontextprotocol/sdk/types.js";import hG from"crypto";import{z as EG}from"zod";import{createRequire as pG}from"module";import{existsSync as gG}from"fs";import{dirname as rR,join as fG}from"path";import{fileURLToPath as mG}from"url";var Xl;function Zl(){if(Xl!==void 0)return Xl;let t=rR(mG(import.meta.url));for(;;){let e=fG(t,"package.json");if(gG(e)){let n=pG(import.meta.url)(e);if(typeof n.version!="string")throw E.wrap(T.FS_READ_FAILED,`Package manifest at ${e} has no string "version" field`,void 0);return Xl=n.version,Xl}let r=rR(t);if(r===t)break;t=r}throw E.wrap(T.FS_READ_FAILED,"Could not locate the CLI package.json by walking up from the running module",void 0)}var nR="docuvia-local-mcp",iR=Zl(),sR=["Docuvia maintains a local knowledge graph of this workspace: modules, dependencies, blast radius, and recorded architectural decisions ('why' rationale).","Workflow:","1. Before exploring code structure with Grep/Glob/Read, call docuvia_query \u2014 it returns structural context those tools cannot.","2. Before editing or deleting a symbol/file, call docuvia_impact to see who depends on it.","3. After finishing edits, call docuvia_detect_changes as a pre-commit risk check.","4. If results look empty or suspicious, call docuvia_status \u2014 incomplete Tier B coverage means partial answers.","Treat non-'exact' match_type results and 'unprocessed'/incomplete-coverage flags as lower confidence \u2014 unknown, not zero; cross-check before relying on them."].join(`
196
- `),oR="Docuvia Local MCP Server running on stdio",aR=t=>`Tool not found: ${t}`,Ke="text";function Gt(t,e){return async r=>{try{return await e(r)}catch(n){return{content:[{type:Ke,text:`${t}: ${n.message}`}],isError:!0}}}}var Ue={ERROR_INITIALIZING:"Error initializing Docuvia",ERROR_QUERYING:"Error querying Docuvia knowledge graph",ERROR_ANALYZING_IMPACT:"Error analyzing impact",ERROR_APPLYING_DECISION:"Error applying decision",ERROR_GETTING_STATUS:"Error getting Docuvia status",ERROR_DETECTING_CHANGES:"Error detecting changes",QUERY_TOOL_DESCRIPTION:"Search the codebase knowledge graph (symbols, modules, architectural decisions, caller/callee context) BEFORE reaching for Grep/Glob/Read \u2014 it returns precomputed structural awareness those tools lack. Use it to locate where a concept lives, understand a module's role, or surface recorded 'why' decisions. Read match_type in the response: exact = confirmed symbol/file; keyword/neighbor = lower confidence, cross-check before relying on it. An empty result means unknown (not zero) \u2014 run docuvia_status; if Tier B coverage is incomplete, results may be partial.",IMPACT_TOOL_DESCRIPTION:"Compute the blast radius of a file or symbol: every module that depends on it upstream/downstream, with a risk level (low/medium/high/critical) and any recorded rationale ('why') per dependent. Call this BEFORE editing or deleting a symbol/file so you know who breaks. Returns null when the target isn't in the graph (unknown target, not confirmed-isolated); a non-null but empty blast radius with an incomplete-coverage note may also be incomplete rather than truly dependency-free.",STATUS_TOOL_DESCRIPTION:"Report knowledge-graph health: project/module/decision counts and Tier B (LSP cross-file) processing coverage. Call this when graph results look empty, stale, or suspiciously low-confidence \u2014 if Tier B coverage is below 100%, structural answers may be incomplete until 'docuvia analyze --escalate-to-lsp --full' runs.",DETECT_CHANGES_TOOL_DESCRIPTION:"Compare the current workspace against a git ref and report which tracked files changed, which graph nodes those changes touch, an overall risk level, and a natural-language analysis of what the diff puts at risk. Use it after finishing edits (or with baseRef set to your merge base) as a pre-commit safety check, instead of manually reading diffs.",QUERY_NEXT_STEP_HINT:"Next steps: before editing any file or symbol above, call docuvia_impact on it to see who depends on it.",IMPACT_NOT_FOUND_HINT:"The target was not found in the knowledge graph \u2014 this means unknown, not isolated. Verify the exact name with docuvia_query first; if it exists there but not here, the graph is likely stale or Tier B coverage is incomplete (see docuvia_status).",IMPACT_EMPTY_HINT:"No dependents found. If Tier B coverage below 100% is reported above, treat this as possibly incomplete \u2014 runtime/computed imports are invisible to static analysis \u2014 and cross-check with Grep before deleting.",REVIEW_NEXT_STEP_HINT:"Next steps: inspect the affected nodes above before committing; call docuvia_impact on any node you're about to change further."};var _G=EG.object({}).strict(),SG="docuvia_init",TG="Initialize the local Docuvia SQLite database in the current workspace.",AG="object",Dp={definition:{name:SG,description:TG,inputSchema:{type:AG,properties:{}}},handler:Gt(Ue.ERROR_INITIALIZING,async t=>{_G.parse(t??{});let e=hG.randomUUID(),r=ee();R.createScope(e),R.set(e,O.WORKSPACE_ROOT,process.cwd());try{let n=await Yl(process.cwd(),()=>X.init(e,r));return{content:[{type:Ke,text:n.message}]}}finally{R.deleteScope(e)}})};import RG from"crypto";import{z as vp}from"zod";var yG=vp.object({target:vp.string().min(1),limit:vp.number().int().positive().optional()}).strict(),OG="docuvia_query",bp={definition:{name:OG,description:Ue.QUERY_TOOL_DESCRIPTION,inputSchema:{type:"object",properties:{target:{type:"string",description:"Symbol name, file path, or concept phrase to search for."},limit:{type:"number",description:"Maximum number of L3 decisions to return."}},required:["target"]}},handler:Gt(Ue.ERROR_QUERYING,async t=>{let e=yG.parse(t??{}),r=RG.randomUUID(),n=ee();R.createScope(r),R.set(r,O.WORKSPACE_ROOT,process.cwd()),R.set(r,O.TARGET,e.target),e.limit!==void 0&&R.set(r,O.LIMIT,e.limit);try{let i=await X.query(r,n);return{content:[{type:Ke,text:Jl(i)},{type:Ke,text:Ue.QUERY_NEXT_STEP_HINT}]}}finally{R.deleteScope(r)}})};import IG from"crypto";import{z as lR}from"zod";var LG=lR.object({target:lR.string().min(1)}).strict(),CG="docuvia_impact",wp={definition:{name:CG,description:Ue.IMPACT_TOOL_DESCRIPTION,inputSchema:{type:"object",properties:{target:{type:"string",description:"Symbol name or file path whose dependents (blast radius) should be computed."}},required:["target"]}},handler:Gt(Ue.ERROR_ANALYZING_IMPACT,async t=>{let e=LG.parse(t??{}),r=IG.randomUUID(),n=ee();R.createScope(r),R.set(r,O.WORKSPACE_ROOT,process.cwd()),R.set(r,O.TARGET,e.target);try{let i=await X.impact(r,n);if(!i)return{content:[{type:Ke,text:"null"},{type:Ke,text:Ue.IMPACT_NOT_FOUND_HINT}]};let s=[{type:Ke,text:JSON.stringify(i,null,2)}];return i.blastRadius.length===0&&i.tierBCoverage&&i.tierBCoverage.workspaceFilesProcessed<i.tierBCoverage.workspaceFilesTotal&&s.push({type:Ke,text:Ue.IMPACT_EMPTY_HINT}),{content:s}}finally{R.deleteScope(r)}})};import NG from"crypto";import{z as PG}from"zod";var DG=PG.object({}).strict(),vG="docuvia_status",Fp={definition:{name:vG,description:Ue.STATUS_TOOL_DESCRIPTION,inputSchema:{type:"object",properties:{}}},handler:Gt(Ue.ERROR_GETTING_STATUS,async t=>{DG.parse(t??{});let e=NG.randomUUID(),r=ee();R.createScope(e),R.set(e,O.WORKSPACE_ROOT,process.cwd());try{let n=await X.status(e,r),i=n.tierBFilesTotal>0?Number((n.tierBFilesProcessed/n.tierBFilesTotal*100).toFixed(1)):0;return{content:[{type:Ke,text:JSON.stringify({...n,tierBCoveragePct:i},null,2)}]}}finally{R.deleteScope(e)}})};import bG from"crypto";import{z as cR}from"zod";var wG=cR.object({baseRef:cR.string().min(1).optional()}).strict(),FG="docuvia_detect_changes",Mp={definition:{name:FG,description:Ue.DETECT_CHANGES_TOOL_DESCRIPTION,inputSchema:{type:"object",properties:{baseRef:{type:"string",description:"Git ref to diff against (branch name, tag, or SHA). Defaults to the workspace's configured base branch."}}}},handler:Gt(Ue.ERROR_DETECTING_CHANGES,async t=>{let e=wG.parse(t??{}),r=bG.randomUUID(),n=ee();R.createScope(r),R.set(r,O.WORKSPACE_ROOT,process.cwd()),e.baseRef&&R.set(r,O.BASE_REF,e.baseRef);try{let i=await X.review(r,n);return{content:[{type:Ke,text:JSON.stringify(i,null,2)},{type:Ke,text:Ue.REVIEW_NEXT_STEP_HINT}]}}finally{R.deleteScope(r)}})};import MG from"crypto";import{z as cn}from"zod";var kG=cn.object({title:cn.string().min(1,"title is required"),content:cn.string().min(1,"content is required"),nodeType:cn.enum(["change","rule","decision","context"]),confidence:cn.number().min(0).max(1)}),GG=cn.object({targetPath:cn.string().min(1,"targetPath is required").describe("File path (relative to workspace root) these decisions apply to"),decisions:cn.array(kG).min(1,"at least one decision is required").describe("Array of L3 decisions to stage for this file")}).strict(),xG="docuvia_apply_decision",UG="Stage agent-authored L3 decisions for a file. Staged decisions are flushed into the knowledge graph automatically on the next git commit that touches the target file. Use this after making code changes that reflect architectural decisions, rules, or notable rationale.",HG="object",kp={definition:{name:xG,description:UG,inputSchema:{type:HG,properties:{targetPath:{type:"string",description:"File path (relative to workspace root) these decisions apply to"},decisions:{type:"array",description:"Array of L3 decisions to stage for this file",items:{type:"object",properties:{title:{type:"string",description:"Decision title"},content:{type:"string",description:"Decision content / rationale"},nodeType:{type:"string",enum:["change","rule","decision","context"],description:"Type of the L3 node"},confidence:{type:"number",description:"Confidence score between 0 and 1"}},required:["title","content","nodeType","confidence"]}}},required:["targetPath","decisions"]}},handler:Gt(Ue.ERROR_APPLYING_DECISION,async t=>{let e=GG.parse(t??{}),r=MG.randomUUID(),n=ee();R.createScope(r),R.set(r,O.WORKSPACE_ROOT,process.cwd()),R.set(r,O.TARGET_PATH,e.targetPath),R.set(r,O.AGENT_AUTHORED_DECISIONS,e.decisions);try{let i=await X.stageAgentAuthoredDecisions(r,n);return{content:[{type:Ke,text:`${i.staged} decision(s) staged \u2014 flushed automatically on the next commit that touches ${e.targetPath}.`}]}}finally{R.deleteScope(r)}})};var Gp={[Dp.definition.name]:Dp,[bp.definition.name]:bp,[wp.definition.name]:wp,[Fp.definition.name]:Fp,[Mp.definition.name]:Mp,[kp.definition.name]:kp},uR=Object.values(Gp).map(t=>t.definition);async function dR(){let t=new BG({name:nR,version:iR},{capabilities:{tools:{}},instructions:sR});t.setRequestHandler(YG,async()=>({tools:uR})),t.setRequestHandler($G,async n=>{let{name:i,arguments:s}=n.params,o=Gp[i];if(o)return o.handler(s);throw new Error(aR(i))});let e=new KG;await t.connect(e),ee().info(oR)}var W={INIT:"init",MCP:"mcp",CLEAN:"clean",STATUS:"status",PUBLISH:"publish",ANALYZE:"analyze",REVIEW:"review",IMPACT:"impact",QUERY:"query",EXPORT_TOPOLOGY:"export-topology",SNAPSHOT:"snapshot",HYDRATE:"hydrate",SYNC_KNOWLEDGE:"sync-knowledge",UNINSTALL:"uninstall",DOCTOR:"doctor",HOOKS:"hooks"},ec={[W.INIT]:"Initialize local project and agent hooks",[W.MCP]:"Start the local MCP stdio server",[W.CLEAN]:"Wipe the local Docuvia SQLite database",[W.STATUS]:"Show local knowledge graph row counts",[W.PUBLISH]:"Push locally-generated decisions to the remote backend",[W.ANALYZE]:"Detect project type/tags and run full AST ingestion into the knowledge graph",[W.REVIEW]:"Detect changed-file blast radius and risk level",[W.IMPACT]:"Show the blast radius/risk level for a symbol or module",[W.QUERY]:"Query the local knowledge graph (keyword + structural search)",[W.EXPORT_TOPOLOGY]:"Export the knowledge graph as topology.json/topology.html",[W.SNAPSHOT]:"Pack the local knowledge graph onto the hidden knowledge branch",[W.HYDRATE]:"Rebuild the local database from the hidden knowledge branch",[W.SYNC_KNOWLEDGE]:"Reconcile the hidden knowledge branch with the remote (fetch/merge/push)",[W.UNINSTALL]:"Uninstall Docuvia2 integrations and local DB",[W.DOCTOR]:"Run diagnostic checks on Docuvia2 setup",[W.HOOKS]:"List/enable/disable Docuvia's automation hooks (context-injection, commit-l3-write, tier-b-c-prepush)"},$e={[W.INIT]:[w.PLATFORM,w.INTERACTIVE,w.INTERACTIVE_SHORT,w.SKILLS],[W.MCP]:[],[W.CLEAN]:[w.INTERACTIVE,w.INTERACTIVE_SHORT],[W.STATUS]:[],[W.PUBLISH]:[w.COMMIT_SHA,w.INTERACTIVE,w.INTERACTIVE_SHORT],[W.ANALYZE]:[w.ESCALATE_TO_LSP,w.FALLBACK_AST,w.LSP_TIMEOUT,w.LSP_PROCESSES,w.FULL,w.INTERACTIVE,w.INTERACTIVE_SHORT,w.FORCE,w.FORCE_SHORT,w.AGENT_AUTHORED,w.DECISIONS_FILE,w.STAGE,w.FLUSH_STAGED_L3,w.TIER_C_ALL],[W.REVIEW]:[w.FORMAT],[W.IMPACT]:[w.FORMAT],[W.QUERY]:[w.FORMAT,w.LIMIT,w.INTERACTIVE,w.INTERACTIVE_SHORT],[W.EXPORT_TOPOLOGY]:[w.OUT,w.JSON_ONLY,w.COLLAPSE],[W.SNAPSHOT]:[],[W.HYDRATE]:[w.FORCE,w.FORCE_SHORT],[W.SYNC_KNOWLEDGE]:[],[W.UNINSTALL]:[w.PLATFORM,w.KEEP_DB,w.INTERACTIVE,w.INTERACTIVE_SHORT,w.SKILLS],[W.DOCTOR]:[w.SKIP_DB,w.SKIP_GIT,w.SKIP_HOOKS,w.SKIP_LOGS,w.SKIP_LSP,w.SKIP_LLM,w.FIX],[W.HOOKS]:[]};function xp(){return["Usage:",...Object.values(W).map(t=>` docuvia ${t.padEnd(40)} # ${ec[t]}`),"","Options:"," docuvia --help, -h # Show this help"," docuvia --version, -v # Show the installed version"," docuvia <command> --help, -h # Show flags for a specific command"," docuvia -i, --interactive # Launch the wizard menu (requires a real terminal)"," docuvia <command> -i, --interactive # Allow that command to prompt instead of using its non-interactive default"].join(`
197
- `)}function pR(t){let e=$e[t],r=[`docuvia ${t}`,` ${ec[t]}`];return e.length>0&&r.push("","Flags:",...e.map(n=>` ${n}`)),r.join(`
198
- `)}var tc=class{args;parsedFlags=new Map;positionals=[];constructor(e){this.args=e,this.parse()}parse(){for(let e=0;e<this.args.length;e++){let r=this.args[e];if(r.startsWith("--"))if(r.includes("=")){let[n,...i]=r.split("=");this.parsedFlags.set(n,i.join("="))}else e+1<this.args.length&&!this.args[e+1].startsWith("-")?(this.parsedFlags.set(r,this.args[e+1]),e++):this.parsedFlags.set(r,!0);else r.startsWith("-")?this.parsedFlags.set(r,!0):this.positionals.push(r)}}hasFlag(e){let r=e.endsWith("=")?e.slice(0,-1):e;return this.parsedFlags.has(r)}getFlagValue(e){let r=e.endsWith("=")?e.slice(0,-1):e,n=this.parsedFlags.get(r);return typeof n=="string"?n:void 0}getPositional(e){return this.positionals[e]}getAllPositionals(){return this.positionals}checkUnknownFlags(e){let r=e.map(i=>i.endsWith("=")?i.slice(0,-1):i),n=Array.from(this.parsedFlags.keys()).filter(i=>!r.includes(i));if(n.length>0)throw new Error(an.UNKNOWN_OPTIONS(n.join(", ")))}};function rc(t){if(t===void 0)return;let e=Object.values(jt);if(e.includes(t))return t;throw new Error(an.INVALID_FORMAT(t,e.join(", ")))}fR.config({quiet:!0});function mR(){h.error(xp())}function jG(){return Zl()}function VG(t){return t===w.HELP||t===w.HELP_SHORT}function zG(t){return t===w.VERSION||t===w.VERSION_SHORT}function hR(t){return t===w.INTERACTIVE||t===w.INTERACTIVE_SHORT}async function JG(t){t.parser.checkUnknownFlags($e[W.INIT]);let e=t.parser.getFlagValue(w.PLATFORM),r=t.parser.hasFlag(w.SKILLS);await _A(t.workspaceRoot,e,t.isInteractive,r)}async function qG(t){t.parser.checkUnknownFlags($e[W.MCP]),await dR()}async function QG(t){t.parser.checkUnknownFlags($e[W.CLEAN]),await SA(t.workspaceRoot,t.isInteractive)}async function XG(t){t.parser.checkUnknownFlags($e[W.STATUS]),await AA(t.workspaceRoot)}async function ZG(t){t.parser.checkUnknownFlags($e[W.PUBLISH]);let e=t.parser.getPositional(0),r=t.parser.getFlagValue(w.COMMIT_SHA);await RA({projectId:e,commitSha:r},t.workspaceRoot,t.isInteractive)}async function ex(t){t.parser.checkUnknownFlags($e[W.ANALYZE]);let e=t.parser.getPositional(0),r=t.parser.hasFlag(w.ESCALATE_TO_LSP),n=t.parser.hasFlag(w.FALLBACK_AST),i=t.parser.hasFlag(w.FULL),s=t.parser.hasFlag(w.FORCE)||t.parser.hasFlag(w.FORCE_SHORT),o=t.parser.getFlagValue(w.LSP_TIMEOUT),a=o!==void 0?Number(o):void 0,l=t.parser.getFlagValue(w.LSP_PROCESSES),c=l!==void 0?Number(l):void 0,u=t.parser.hasFlag(w.AGENT_AUTHORED),p=t.parser.getFlagValue(w.DECISIONS_FILE),d=t.parser.hasFlag(w.STAGE),f=t.parser.hasFlag(w.FLUSH_STAGED_L3),m=t.parser.hasFlag(w.TIER_C_ALL);await NA(e,t.workspaceRoot,{escalateToLsp:r,fallbackAst:n,isInteractive:t.isInteractive,force:s,lspTimeoutMs:a,lspProcesses:c,full:i,agentAuthored:u,decisionsFile:p,stage:d,flushStagedL3:f,tierCAll:m})}async function tx(t){t.parser.checkUnknownFlags($e[W.REVIEW]);let e=t.parser.getPositional(0),r=rc(t.parser.getFlagValue(w.FORMAT));await DA(e,{format:r},t.workspaceRoot)}async function rx(t){t.parser.checkUnknownFlags($e[W.IMPACT]);let e=t.parser.getPositional(0);if(!e){h.error(g.IMPACT_MISSING_TARGET),Vt.exitCode=1;return}let r=rc(t.parser.getFlagValue(w.FORMAT));await vA(e,{format:r},t.workspaceRoot)}async function nx(t){t.parser.checkUnknownFlags($e[W.QUERY]);let e=t.parser.getPositional(0),r=rc(t.parser.getFlagValue(w.FORMAT)),n=t.parser.getFlagValue(w.LIMIT),i=n?Number(n):void 0;await wA(e,{format:r,limit:i},t.workspaceRoot,t.isInteractive)}async function ix(t){t.parser.checkUnknownFlags($e[W.EXPORT_TOPOLOGY]);let e=t.parser.getFlagValue(w.OUT),r=t.parser.hasFlag(w.JSON_ONLY),n=t.parser.getFlagValue(w.COLLAPSE);await xA({out:e,jsonOnly:r,collapse:n},t.workspaceRoot)}async function sx(t){t.parser.checkUnknownFlags($e[W.SNAPSHOT]),await HA(t.workspaceRoot)}async function ox(t){t.parser.checkUnknownFlags($e[W.HYDRATE]);let e=t.parser.hasFlag(w.FORCE)||t.parser.hasFlag(w.FORCE_SHORT);await KA(t.workspaceRoot,{force:e})}async function ax(t){t.parser.checkUnknownFlags($e[W.UNINSTALL]);let e=t.parser.getFlagValue(w.PLATFORM),r=t.parser.hasFlag(w.KEEP_DB),n=t.parser.hasFlag(w.SKILLS);await jA(t.workspaceRoot,e,r,t.isInteractive,n)}async function lx(t){t.parser.checkUnknownFlags($e[W.DOCTOR]);let e=t.parser.hasFlag(w.SKIP_DB),r=t.parser.hasFlag(w.SKIP_GIT),n=t.parser.hasFlag(w.SKIP_HOOKS),i=t.parser.hasFlag(w.SKIP_LOGS),s=t.parser.hasFlag(w.SKIP_LSP),o=t.parser.hasFlag(w.SKIP_LLM),a=t.parser.hasFlag(w.FIX);await XA(t.workspaceRoot,{skipDb:e,skipGit:r,skipHooks:n,skipLogs:i,skipLsp:s,skipLlm:o,fix:a})}async function cx(t){t.parser.checkUnknownFlags($e[W.SYNC_KNOWLEDGE]),await YA(t.workspaceRoot)}async function ux(t){t.parser.checkUnknownFlags($e[W.HOOKS]);let e=t.parser.getPositional(0),r=t.parser.getPositional(1);await tR(e,r,t.workspaceRoot)}var dx={[W.INIT]:JG,[W.MCP]:qG,[W.CLEAN]:QG,[W.STATUS]:XG,[W.PUBLISH]:ZG,[W.ANALYZE]:ex,[W.REVIEW]:tx,[W.IMPACT]:rx,[W.QUERY]:nx,[W.EXPORT_TOPOLOGY]:ix,[W.SNAPSHOT]:sx,[W.HYDRATE]:ox,[W.SYNC_KNOWLEDGE]:cx,[W.UNINSTALL]:ax,[W.DOCTOR]:lx,[W.HOOKS]:ux};async function px(t,e,r){let n=hR(t)?void 0:t;if(n)return n;e||(mR(),Vt.exit(1)),r||(h.error(g.CLI_INTERACTIVE_NO_TTY),Vt.exit(1)),h.header(g.CLI_HEADER);let i=Object.values(W).filter(o=>o!==W.MCP).map(o=>({name:o,value:o,description:ec[o]}));return await h.askSelect(g.CLI_PROMPT_ACTION,i)}function gx(t){return VG(t)?(h.log(xp()),!0):zG(t)?(h.log(jG()),!0):!1}function fx(t,e){let r=hR(t)||e.hasFlag(w.INTERACTIVE)||e.hasFlag(w.INTERACTIVE_SHORT),n=r&&!!Vt.stdin.isTTY&&!Vt.env.CI;return{wantsInteractive:r,interactiveEligible:n}}async function mx(t,e,r,n,i,s){if(!t||!e){h.error(g.CLI_UNKNOWN_COMMAND+t),mR(),Vt.exit(1);return}if(r.hasFlag(w.HELP)||r.hasFlag(w.HELP_SHORT)){h.log(pR(t));return}n&&!i&&h.warn(g.CLI_INTERACTIVE_UNAVAILABLE),await e({parser:r,isInteractive:i,workspaceRoot:s})}async function hx(){let t=Vt.argv[2];if(gx(t))return;let e=Vt.argv.slice(3),r=new tc(e),n=Vt.cwd(),{wantsInteractive:i,interactiveEligible:s}=fx(t,r),o=await px(t,i,s),a=o?dx[o]:void 0;try{await mx(o,a,r,i,s,n)}catch(l){let c=l instanceof Error?l.message:String(l);h.error(g.CLI_FATAL_ERROR+c),Vt.exit(1)}}hx().catch(t=>{h.error(g.CLI_FATAL_ERROR+(t instanceof Error?t.message:String(t))),Vt.exit(1)});
172
+ `),u=y.resolve(A.LlmClient)();u.initialize({baseUrl:i.llmBaseUrl,apiKey:i.llmApiKey});let p;try{p=await u.chatCompletion({model:i.llmModel,temperature:.2,messages:[{role:Qt.SYSTEM,content:VS},{role:Qt.USER,content:l}]})}catch(L){let C=L instanceof Error?L.message:String(L);throw await V(r,{event:Y.FOCUSED_ERROR,targetPath:e,message:C}),L}let d=p.choices[0]?.message.content,f=pl(d);if(f===void 0){let L=J.LLM_NON_JSON_OUTPUT;throw await V(r,{event:Y.FOCUSED_ERROR,targetPath:e,message:L}),new E(T.LLM_INVALID_RESPONSE,L)}let{persisted:m,deduped:_}=await this.persistDecisions(s,o,f);return await V(r,{event:Y.FOCUSED_SUMMARY,targetPath:e,decisionsCount:f.length}),{kind:Se.DECISION_EXTRACTION,targetPath:e,decisions:f,persisted:m,deduped:_}}async persistDecisions(e,r,n){let{workspaceRoot:i,logger:s,options:o}=this;return bi({workspaceRoot:i,logger:s,resolvedTargetPath:e,files:r,decisions:n,source:Gt.ANALYZE,extractionModel:o?.llmModel??null})}};async function IF(t,e,r){let i=(await t.getCommitLog(e,S.KNOWLEDGE_ROOT,S.KNOWLEDGE_LOG_SCAN_LIMIT)).find(s=>s.sha===r);return i?pr(i.message):void 0}function LF(t){return{providerConfig:t?.lspProviderConfig,commitCap:t?.tierBCommitCap,llmBaseUrl:t?.llmBaseUrl,llmApiKey:t?.llmApiKey,llmModel:t?.llmModel,full:t?.full}}function CF(t){return{tierCDailyCallCap:t?.tierCDailyCallCap,tierCDailyTokenCap:t?.tierCDailyTokenCap,tierCWallClockMs:t?.tierCWallClockMs,tierCItemCap:t?.tierCItemCap,tierCLoadThreshold:t?.tierCLoadThreshold,tierCDrainAll:t?.tierCDrainAll}}function NF(t,e,r,n,i,s){return{workspaceRoot:t,logger:e,store:r,git:n,knowledgeGit:i,...LF(s),...CF(s),force:s?.force}}var fl={DETECTING_CHANGES:"Detecting changes...",DB_NOT_FOUND:'Local database not found. Please run "docuvia init".'},ml={START:"review.start",ERROR:"review.error",SUMMARY:"review.summary"};async function hl(t,e){await De(t,zp,e)}var El=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(e){let{workspaceRoot:r,logger:n}=this;n.info(fl.DETECTING_CHANGES),await hl(r,{event:ml.START,baseRef:e??null});let o=(await y.resolve(A.GitProvider).getChangedFilesSince(r,e)).map(c=>({file:c.file,status:c.status}));await tn(r,n);let a=y.resolve(A.GraphStoreOpener),l;try{l=await a({dbPath:ie(r),readonly:!0})}catch(c){throw c instanceof E&&c.code===T.DB_NOT_FOUND?(await hl(r,{event:ml.ERROR,message:fl.DB_NOT_FOUND}),new E(T.DB_NOT_FOUND,fl.DB_NOT_FOUND,c)):c}try{let u=y.resolve(A.ChangeDetectionService,{logger:n}).detectChanges({store:l,baseRef:e??null,filesChanged:o});return await hl(r,{event:ml.SUMMARY,baseRef:e??null,riskLevel:u.riskLevel,filesChanged:u.filesChanged.length,affectedNodes:u.affectedNodes.length}),u}finally{await l.close()}}};var Ot={RESOLVING:"Resolving blast radius...",DB_NOT_FOUND:'Local database not found. Please run "docuvia init".',REGISTRY_MEDIATED_COVERAGE_NOTE:'This symbol is resolved through the docuviaFactory/TOKENS registry -- the static edge graph does not model registry-mediated dependencies, so a "no dependents" result may be incomplete.',RISK_NOTE_EMPTY_WITH_PARTIAL_COVERAGE:(t,e)=>`No dependents found, but only ${t} of ${e} workspace files have been analyzed -- this is UNKNOWN, not confirmed zero. Run "docuvia analyze" for fuller coverage.`,RISK_NOTE_DYNAMIC_DEPENDENCY:(t,e,r,n,i)=>`Observed ${t} target-relevant runtime dependency evidence record(s); e.g. ${e}:${r} uses import(${n}) [${i}]. Dynamic candidates are possible targets, not confirmed runtime edges, so this result is a lower bound.`,RISK_NOTE_EMPTY_STATIC_EDGES_ONLY:"No static dependents found. The edge graph models calls/extends/implements only -- runtime-variable imports, computed import() specifiers, and child_process spawns are invisible, so absence of edges is not evidence of no dependents.",RISK_NOTE_EMPTY_LOW_RESOLUTION:(t,e)=>`No static dependents found, but only ${t} of ${e} call sites in this symbol's own file resolved into edges during ingestion -- dependents calling it from here may be missing from the graph. Run "docuvia analyze --escalate-to-lsp --full" to recover them.`,RISK_NOTE_PARTIAL_COVERAGE_NON_EMPTY:(t,e)=>`Only ${t} of ${e} workspace files have been analyzed -- this result may be missing dependents from unprocessed files.`},Fs={START:"impact.start",ERROR:"impact.error",SUMMARY:"impact.summary"};async function Ms(t,e){await De(t,Jp,e)}function xT(t,e){return t===void 0||e===void 0?!0:t<e}function UT(t){if(!t||t.length===0)return;let e=t[0];return Ot.RISK_NOTE_DYNAMIC_DEPENDENCY(t.length,e.sourceFile,e.startLine+1,e.expression,e.reason)}function PF(t){if(!(!t||t.applicable<S.DEFAULT_CALL_RESOLUTION_MIN_SAMPLE||t.resolved/t.applicable>=S.DEFAULT_CALL_RESOLUTION_NOTE_THRESHOLD))return Ot.RISK_NOTE_EMPTY_LOW_RESOLUTION(t.resolved,t.applicable)}function DF(t,e,r,n,i){if(xT(t,e))return Ot.RISK_NOTE_EMPTY_WITH_PARTIAL_COVERAGE(t??0,e??0);if(r)return Ot.REGISTRY_MEDIATED_COVERAGE_NOTE;let s=UT(i);if(s)return s;let o=PF(n);return o||Ot.RISK_NOTE_EMPTY_STATIC_EDGES_ONLY}function HT(t){let{blastRadiusCount:e,computedRiskLevel:r,workspaceFilesProcessed:n,workspaceFilesTotal:i,registryMediated:s}=t;if(e===0)return{riskLevel:$e.UNKNOWN,epistemic:Ys.LOWER_BOUND,riskNote:DF(n,i,s,t.targetFileResolution,t.dynamicEvidence)};if(xT(n,i))return{riskLevel:r,epistemic:Ys.LOWER_BOUND,riskNote:Ot.RISK_NOTE_PARTIAL_COVERAGE_NON_EMPTY(n??0,i??0)};let o=UT(t.dynamicEvidence);return o?{riskLevel:r,epistemic:Ys.LOWER_BOUND,riskNote:o}:{riskLevel:r}}function BT(t,e){if(t)return e===Ot.REGISTRY_MEDIATED_COVERAGE_NOTE?void 0:Ot.REGISTRY_MEDIATED_COVERAGE_NOTE}import*as KT from"path";import*as $T from"fs/promises";var _l=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(e){let{workspaceRoot:r,logger:n}=this;n.info(Ot.RESOLVING),await Ms(r,{event:Fs.START,target:e}),await tn(r,n);let i=y.resolve(A.GraphStoreOpener),s;try{s=await i({dbPath:ie(r),readonly:!0})}catch(o){throw o instanceof E&&o.code===T.DB_NOT_FOUND?(await Ms(r,{event:Fs.ERROR,target:e,message:Ot.DB_NOT_FOUND}),new E(T.DB_NOT_FOUND,Ot.DB_NOT_FOUND,o)):o}try{let o=y.resolve(A.ImpactService,{logger:n}),a=o.getBlastRadius(s,e);if(!a)return await Ms(r,{event:Fs.SUMMARY,target:e,found:!1,blastRadiusCount:0,riskLevel:null}),null;let l=o.getDynamicEvidence?.(s,e)??[],c=a.filter(p=>p.edgeSource!==Kn.DYNAMIC_CANDIDATE).length,u=o.computeRiskLevel(s,c);return await Ms(r,{event:Fs.SUMMARY,target:e,found:!0,blastRadiusCount:a.length,riskLevel:u}),{blastRadius:a,...l.length>0?{dynamicEvidence:l}:{},...await this.resolveEpistemicFields(s,e,c,u,l)}}finally{await s.close()}}async resolveEpistemicFields(e,r,n,i,s){let{tierBCoverage:o,registryMediated:a,targetFileResolution:l}=await this.resolveTargetContext(e,r,n),c=e.files.getTierBCoverage(),u=HT({blastRadiusCount:n,computedRiskLevel:i,workspaceFilesProcessed:c?.processedFiles,workspaceFilesTotal:c?.totalFiles,registryMediated:a,targetFileResolution:l,dynamicEvidence:s}),p=c!=null&&c.totalFiles>0&&c.processedFiles<c.totalFiles,d=BT(a,u.riskNote);return{riskLevel:u.riskLevel,...u.epistemic?{epistemic:u.epistemic}:{},...u.riskNote?{riskNote:u.riskNote}:{},...d?{coverageNote:d}:{},...o?{tierBCoverage:o}:{},...p?{partialCoverage:!0}:{}}}async resolveTargetContext(e,r,n){let i=e.graph.findNodeByName(r),s=y.resolve(A.TierBCoverageHintProvider).resolve(e,i?.filePath,n===0,!1),o=n===0&&!!i?.filePath&&await this.fileUsesFactoryRegistry(i.filePath),a;if(i?.filePath){let l=Za(e)[i.filePath];l&&(a={resolved:l.resolved,applicable:l.total-l.selfDiscarded})}return{tierBCoverage:s,registryMediated:o,targetFileResolution:a}}async fileUsesFactoryRegistry(e){let r;try{r=await $T.readFile(KT.join(this.workspaceRoot,e),H)}catch{return!1}return/docuviaFactory|TOKENS\./.test(r)}};var Sl={QUERYING:"Querying local knowledge graph...",DB_NOT_FOUND:'Local database not found. Please run "docuvia init".'},Tl={START:"query.start",ERROR:"query.error",SUMMARY:"query.summary"};async function Al(t,e){await De(t,qp,e)}var Rl=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(e,r){let{workspaceRoot:n,logger:i}=this;i.info(Sl.QUERYING),await Al(n,{event:Tl.START,target:e}),await tn(n,i);let s=y.resolve(A.GraphStoreOpener),o;try{o=await s({dbPath:ie(n),readonly:!0})}catch(a){throw a instanceof E&&a.code===T.DB_NOT_FOUND?(await Al(n,{event:Tl.ERROR,target:e,message:Sl.DB_NOT_FOUND}),new E(T.DB_NOT_FOUND,Sl.DB_NOT_FOUND,a)):a}try{let l=y.resolve(A.QueryService,{logger:i}).query(o,e,r),c=!!l.l2||l.l3.length>0||!!l.context;return await Al(n,{event:Tl.SUMMARY,target:e,found:c}),l}finally{await o.close()}}};var yl={EXPORTING:"Exporting topology...",DB_NOT_FOUND:'Local database not found. Please run "docuvia init".'},Ol={START:"export-topology.start",ERROR:"export-topology.error",SUMMARY:"export-topology.summary"};async function Il(t,e){await De(t,Qp,e)}var Ll=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(e={}){let{workspaceRoot:r,logger:n}=this;n.info(yl.EXPORTING),await Il(r,{event:Ol.START,collapse:e.collapse??null});let i=y.resolve(A.GraphStoreOpener),s;try{s=await i({dbPath:ie(r),readonly:!0})}catch(o){throw o instanceof E&&o.code===T.DB_NOT_FOUND?(await Il(r,{event:Ol.ERROR,message:yl.DB_NOT_FOUND}),new E(T.DB_NOT_FOUND,yl.DB_NOT_FOUND,o)):o}try{let a=y.resolve(A.TopologyBuilder,{logger:n}).build({workspaceRoot:r,l2Rows:s.graph.getAllNodes(),linkRows:s.graph.getAllLinks(),l3Rows:s.l3.getAllExportable(),tagRows:s.tags.getAllTagLinks()},e);return await Il(r,{event:Ol.SUMMARY,nodeCount:a.stats.nodeCount,linkCount:a.stats.linkCount,groupCount:a.stats.groupCount,collapsed:a.collapsed}),a}finally{await s.close()}}};async function Un(t,e){await De(t,Xp,e)}function vF(t){if(t)try{let e=JSON.parse(t);return typeof e.headSha!="string"||!Array.isArray(e.remainingQueue)?void 0:e}catch{return}}async function YT(t,e){let r=y.resolve(A.GraphStoreOpener),n=y.resolve(A.KnowledgeGitService,{logger:e}),i=await r({dbPath:ie(t),readonly:!1});try{i.meta.get("tierCProcessedThisRun")==="true"&&await i.withWriteLock(()=>{i.meta.set("tierCProcessedThisRun","")});let s=vF(i.meta.get(S.META_KEY_TIER_B_BATCH_PENDING));if(!s)return;await n.runUnderKnowledgeLock(t,async()=>{await i.withWriteLock(()=>{i.meta.set(S.META_KEY_TIER_B_QUEUE,JSON.stringify(s.remainingQueue)),i.meta.set(S.META_KEY_LAST_TIER_B_BATCH_SHA,s.headSha),i.meta.set(S.META_KEY_TIER_B_CHANGED_BYTES,"0"),i.meta.set(S.META_KEY_TIER_B_BATCH_PENDING,"")})}),await Un(t,{event:Li.TIER_B_FINALIZED,headSha:s.headSha,remainingQueueSize:s.remainingQueue.length})}finally{await i.close()}}var Cl=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async openStoreForSnapshot(e){try{return await e({dbPath:ie(this.workspaceRoot),readonly:!1})}catch(r){throw r instanceof E&&r.code===T.DB_NOT_FOUND?(await Un(this.workspaceRoot,{event:Li.ERROR,message:tl.DB_NOT_FOUND}),new E(T.DB_NOT_FOUND,tl.DB_NOT_FOUND,r)):r}}async shouldSkipSnapshot(e,r){let n=y.resolve(A.GitProvider),i=await n.getHeadSha(this.workspaceRoot)??null,s=i&&typeof e.resolveKnowledgeCommitForSource=="function"?await e.resolveKnowledgeCommitForSource(this.workspaceRoot,i):void 0,o=await this.hasRestoreMetadata(n,s),a=r.meta.get(S.META_KEY_TIER_B_BATCH_PENDING),l=r.meta.get(S.META_KEY_LAST_TIER_B_BATCH_SHA),c=r.meta.get("tierCProcessedThisRun")==="true";return{shouldSkip:!!(i&&s&&o&&l===i&&!a&&!c),headSha:i}}async hasRestoreMetadata(e,r){return r?await e.readFileAtRef(this.workspaceRoot,r,`${S.GRAPH_DIR_NAME}/${S.METADATA_JSON_NAME}`)!==void 0:!1}async execute(){let{workspaceRoot:e,logger:r}=this;r.info(tl.SNAPSHOTTING),await Un(e,{event:Li.START,workspaceRoot:e});let n=y.resolve(A.GraphStoreOpener),i=y.resolve(A.KnowledgeGitService,{logger:r}),s=await this.openStoreForSnapshot(n);try{let{shouldSkip:o,headSha:a}=await this.shouldSkipSnapshot(i,s);if(o)return r.info("Knowledge graph snapshot is already up to date with HEAD, skipping."),await Un(e,{event:"snapshot.skipped",reason:"already-up-to-date",headSha:a}),{nodesWritten:0,edgesWritten:0,markdownFilesWritten:0};let l=await Ci(e,s,i);return await YT(e,r),await Un(e,{event:Li.SUMMARY,nodesWritten:l.nodesWritten,edgesWritten:l.edgesWritten,markdownFilesWritten:l.markdownFilesWritten}),l}finally{await s.close()}}};var pp={HYDRATING:"Hydrating local database from the knowledge branch...",NOTHING_TO_HYDRATE:'Nothing to hydrate from yet. Please run "docuvia init".'},Nl={START:"hydrate.start",SUMMARY:"hydrate.summary"};async function Pl(t,e){await De(t,Zp,e)}var Dl=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(e){let{workspaceRoot:r,logger:n}=this;n.info(pp.HYDRATING),await Pl(r,{event:Nl.START,workspaceRoot:r});let s=await y.resolve(A.GraphStoreOpener)({dbPath:ie(r),readonly:!1});try{let a=await y.resolve(A.HydrationService,{logger:n}).hydrate(r,s,void 0,e);return a.hydrated?(await Pl(r,{event:Nl.SUMMARY,hydrated:!0,knowledgeSha:a.knowledgeSha,nodesLoaded:a.nodesLoaded,edgesLoaded:a.edgesLoaded,edgesDropped:a.edgesDropped}),a):(await Pl(r,{event:Nl.SUMMARY,hydrated:!1,message:pp.NOTHING_TO_HYDRATE}),a)}finally{await s.close()}}};var ks={SYNCING:"Reconciling the knowledge branch with the remote...",VALIDITY_PASS_BASELINE:"L3 validity pass: first run -- stamped baseline cursor, judged nothing",VALIDITY_PASS_SUMMARY:(t,e)=>`L3 validity pass: ${t} decision(s) confirmed alive, ${e} demoted as dead/superseded`,VALIDITY_PASS_FAILED:t=>`L3 validity pass failed (retries on the next sync): ${t}`},Gs={START:"sync-knowledge.start",SUMMARY:"sync-knowledge.summary",VALIDITY_PASS:"sync-knowledge.l3-validity-pass"};async function xs(t,e){await De(t,eg,e)}var vl="l3ValidityJudgedSha";function bF(t){if(!t.anchor_ranges)return null;try{let e=JSON.parse(t.anchor_ranges);return!Array.isArray(e)||e.length===0?null:{ranges:e}}catch{return null}}function WT(t){if(!t)return[];try{let e=JSON.parse(t);return Array.isArray(e)?e:[]}catch{return[]}}function wF(t,e,r){let n=e.get(t.path);if(!n||n.size===0)return!0;for(let i=t.startRow+1;i<=t.endRow+1;i++){let s=n.get(i);if(s&&r.has(s))return!0}return!1}function FF(t,e,r,n){let i=0,s=0;for(let{row:o,anchors:a}of e){if(!a.ranges.some(p=>n.has(p.path)))continue;let l=new Set([...WT(o.source_commits),...WT(o.initial_source_commits),...o.commit_hash?[o.commit_hash]:[]]),c=a.ranges.every(p=>wF(p,r,l)),u=c?cr.ACTIVE:cr.GARBAGE;u!==o.validity_status&&(t.l3.updateValidityStatus(o.id,u),c?i++:s++)}return{activated:i,superseded:s}}async function jT(t){let{workspaceRoot:e,logger:r,store:n,git:i,blame:s}=t,o=await i.getHeadSha(e),a={activated:0,superseded:0,baseline:!1};if(!o)return a;let l=n.meta.get(vl);if(l===o)return a;if(!l)return n.meta.set(vl,o),a.baseline=!0,a;let c=n.l3.getAllExportable().map(L=>({row:L,anchors:bF(L)})).filter(L=>L.anchors!==null&&(L.row.validity_status===cr.PENDING||L.row.validity_status===cr.ACTIVE));if(c.length===0)return n.meta.set(vl,o),a;let u=new Set(c.flatMap(L=>L.anchors.ranges.map(C=>C.path))),p=new Set((await i.getChangedFilesSince(e,l,"HEAD")).map(L=>L.file)),d=[...u].filter(L=>p.has(L)),f=new Map;for(let L of d)f.set(L,await s.getBlameLineOwners(e,L));let m=new Set(d),_=FF(n,c,f,m);return a.activated=_.activated,a.superseded=_.superseded,n.meta.set(vl,o),a}var bl=class{constructor(e,r,n){this.workspaceRoot=e;this.logger=r;this.gitNetworkTimeoutMs=n}workspaceRoot;logger;gitNetworkTimeoutMs;async execute(){let{workspaceRoot:e,logger:r,gitNetworkTimeoutMs:n}=this;r.info(ks.SYNCING),await xs(e,{event:Gs.START,workspaceRoot:e});let i=y.resolve(A.KnowledgeGitService,{logger:r,gitNetworkTimeoutMs:n}),s=await i.syncKnowledgeBranch(e);s.branchTipSha&&await this.importL3Cards(i,s.branchTipSha);try{await this.runValidityPass()}catch(o){let a=o instanceof Error?o.message:String(o);r.warn(ks.VALIDITY_PASS_FAILED(a)),await xs(e,{event:Gs.VALIDITY_PASS,status:"error",error:a})}return await xs(e,{event:Gs.SUMMARY,status:s.status,branchTipSha:s.branchTipSha??null}),s}async importL3Cards(e,r){let{workspaceRoot:n,logger:i}=this,s=y.resolve(A.HydrationService,{logger:i}),a=await y.resolve(A.GraphStoreOpener)({dbPath:ie(n),readonly:!1});try{await e.runUnderKnowledgeLock(n,()=>s.importL3Cards(n,r,a))}finally{await a.close()}}async runValidityPass(){let{workspaceRoot:e,logger:r}=this,i=await y.resolve(A.GraphStoreOpener)({dbPath:ie(e),readonly:!1});try{let s=await jT({workspaceRoot:e,logger:r,store:i,git:y.resolve(A.GitProvider),blame:y.resolve(A.LineBlameProvider)});s.baseline?r.info(ks.VALIDITY_PASS_BASELINE):r.info(ks.VALIDITY_PASS_SUMMARY(s.activated,s.superseded)),await xs(e,{event:Gs.VALIDITY_PASS,status:"ok",activated:s.activated,superseded:s.superseded,baseline:s.baseline})}finally{await i.close()}}};var ue={DB_RUNNER:"db_runner",DB_FOUND:"db_found",GRAPH_EMPTY:"graph_empty",POST_COMMIT_INGESTION:"post_commit_ingestion",GIT_REACHABILITY:"git_reachability",GIT_RUNNER:"git_runner",LOGS:"logs",TIER_B_COMMIT_CAP:"tier_b_commit_cap",TIER_B_COVERAGE:"tier_b_coverage",GIT_HOOK:"git_hook",PRE_PUSH_HOOK:"pre_push_hook",LLM_REACHABILITY:"llm_reachability",LSP_BINARY:t=>`lsp_binary_${t}`,AGENT_HOOKS_CLAUDE:"agent_hooks_claude",AGENT_HOOKS_CURSOR:"agent_hooks_cursor",TIER_C_QUEUE:"tier_c_queue",STAGED_L3_DECISIONS:"staged_l3_decisions",L2_SEMANTIC_COVERAGE:"l2_semantic_coverage",WORKTREE_DIVERGENCE:"worktree_divergence",AGENT_AUTHED_ADOPTION:"agent_authored_adoption",CALL_GRAPH_RESOLUTION:"call_graph_resolution",CANARY_SELF_TEST:"canary_self_test"},VT=".log",gp={CLAUDE:"Claude",CURSOR:"Cursor"},k={DB_RUNNER_NOT_REGISTERED:"DiagnosticRunnerDb not registered",DB_NOT_FOUND_AT:t=>`Local database not found at ${t}`,GRAPH_EMPTY:"The knowledge graph is empty (nothing ingested yet) -- staged decisions have no L2 anchor to attach to.",GRAPH_EMPTY_SUGGESTION:"run `docuvia init` first \u2014 decisions need a graph to attach to",GRAPH_EMPTY_OK:t=>`Knowledge graph populated (${t} L2 node(s)).`,POST_COMMIT_INGESTION_OK:t=>`Knowledge graph is up to date with HEAD (Tier C queue: ${t} pending).`,POST_COMMIT_INGESTION_RECENT:(t,e)=>`Delta ingestion is behind HEAD (last ingested ${t?t.slice(0,7):"never"}) but ran recently -- likely still in flight from the post-commit hook (Tier C queue: ${e} pending).`,POST_COMMIT_INGESTION_STALE:t=>`The graph is behind HEAD and no analyze run has completed recently -- the post-commit hook's backgrounded ingestion may not be firing (Tier C queue: ${t} pending).`,POST_COMMIT_INGESTION_STALE_SUGGESTION:"run `docuvia analyze` manually to ingest the pending commits, and check `.docuvia/logs/post-commit-hook.log` for hook failures",GIT_RUNNER_NOT_REGISTERED:"DiagnosticRunnerGit not registered",GIT_NETWORK_TIMEOUT_SUGGESTION:"The Git remote operation timed out (5000ms). Check your internet connection or DNS settings.",GIT_NOT_A_REPO_SUGGESTION:"Ensure this workspace is a valid Git repository and the remote 'origin' is set correctly.",GIT_REMOTE_UNREADABLE_SUGGESTION:"Check your SSH keys, PAT, or Git credentials for the remote repository.",GIT_REACHABILITY_FAILED:t=>`Git remote reachability check failed: ${t}`,GIT_NOT_A_REPO_TEXT:"does not appear to be a git repository",GIT_REMOTE_UNREADABLE_TEXT:"Could not read from remote repository",LOGS_ERRORS_FOUND:t=>`Found ${t} critical errors in logs.`,LOGS_ERRORS_FOUND_SUGGESTION:"Check the files in .docuvia/logs/ for details.",LOGS_CHECKED_CLEAN:t=>`Checked ${t} log files, no critical errors found.`,LOGS_NOT_FOUND_AT:t=>`No logs found at ${t}`,TIER_B_CAP_OK:"Tier B commit-cap not yet reached.",TIER_B_CAP_EXCEEDED:"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.",TIER_B_COVERAGE_OK:(t,e)=>`Tier B coverage: ${t}/${e} files processed.`,TIER_B_COVERAGE_LOW:(t,e,r)=>`Only ${r.toFixed(1)}% of tracked files have ever been Tier B-processed (${t}/${e}) -- query results for the rest may show empty edges that mean "unprocessed", not "no relationships".`,TIER_B_COVERAGE_LOW_SUGGESTION:"Run `docuvia analyze --escalate-to-lsp --full` to resync.",GIT_HOOK_NOT_INSTALLED:"No Docuvia post-commit hook installed.",GIT_HOOK_DUPLICATE:"Duplicate hook blocks detected (both the legacy `docuvia snapshot` and current `docuvia analyze` blocks are present and will both fire on every commit).",GIT_HOOK_DUPLICATE_SUGGESTION:"run `docuvia doctor --fix` to repair",GIT_HOOK_LEGACY_ONLY:"The post-commit hook is still running the legacy `docuvia snapshot` command, which no longer performs Tier A delta ingestion.",GIT_HOOK_LEGACY_ONLY_SUGGESTION:"re-run `docuvia init` to upgrade the hook",GIT_HOOK_FLUSH_STALE:"The post-commit hook predates the commit-l3-write flush step -- staged agent-authored L3 decisions would never be flushed into the graph.",GIT_HOOK_FLUSH_STALE_SUGGESTION:"re-run `docuvia init` to upgrade the hook",GIT_HOOK_NOT_RESOLVABLE:"The post-commit hook is installed but `docuvia` is not resolvable from this workspace (the `npx --no-install` invocation would silently no-op on every commit).",GIT_HOOK_NOT_RESOLVABLE_SUGGESTION:"reinstall Docuvia as a project dependency, or check PATH",GIT_HOOK_RESOLVABLE:t=>`Post-commit hook is installed and \`docuvia\` resolves (${t}).`,GIT_HOOK_REPAIRED_NOTE:" Repaired via `doctor --fix` -- re-run `doctor` to confirm.",PRE_PUSH_HOOK_NOT_INSTALLED:"No Docuvia pre-push hook installed.",PRE_PUSH_HOOK_STALE:"The pre-push hook predates the `sync-knowledge` step -- pushes no longer reconcile the knowledge branch with origin.",PRE_PUSH_HOOK_STALE_SUGGESTION:"re-run `docuvia init` to upgrade the hook",PRE_PUSH_HOOK_ENV_GATE_STALE:"The pre-push hook predates the --fallback-ast env-gate flag -- its Tier B step will fail (skipping snapshot/sync-knowledge for that push) whenever the LSP environment isn't ready.",PRE_PUSH_HOOK_HOOKS_CHECK_STALE:"The pre-push hook predates the `hooks check` gate -- its Tier B/snapshot/sync-knowledge chain would run even when `tier-b-c-prepush` is disabled via `docuvia hooks disable`.",PRE_PUSH_HOOK_FAILURE_HINT_STALE:"The pre-push hook predates the Tier B/sync failure hint -- Tier B/C failures stay silent at push time (only in JSONL logs).",PRE_PUSH_HOOK_OK:t=>`Pre-push hook is installed and includes the sync-knowledge step (${t}).`,PRE_PUSH_HOOK_NOT_RESOLVABLE:"The pre-push hook is installed but `docuvia` is not resolvable from this workspace (the `npx --no-install` invocation would silently no-op on every push -- Tier B and sync-knowledge never actually run).",PRE_PUSH_HOOK_REPAIRED_NOTE:" Repaired via `doctor --fix` -- re-run `doctor` to confirm.",LLM_NOT_CONFIGURED:"Not configured -- Tier C is inactive (AI_DOCUVIA_INTEGRATIONS_OPENAI_BASE_URL or AI_DOCUVIA_MODEL not set).",LLM_REACHABLE:"Tier C LLM bridge is reachable and accepts the configured API key.",LLM_UNREACHABLE:t=>`Tier C LLM bridge is configured but unreachable or rejecting requests: ${t}`,LLM_UNREACHABLE_SUGGESTION:"Check that the CLIProxyAPI bridge is running, that its /v1/chat/completions route accepts the configured API key, and that AI_DOCUVIA_INTEGRATIONS_OPENAI_BASE_URL points at it.",TIER_C_QUEUE_OK:(t,e)=>`Tier C queue: ${t} pending, last drain processed ${e} item(s).`,TIER_C_QUEUE_STUCK:(t,e)=>`Tier C queue is stuck (${t} pending; last drain processed 0, reason: ${e}) -- the LLM bridge path analyze dials is not working, so L2 descriptions/validated edges will never be backfilled.`,TIER_C_QUEUE_STUCK_SUGGESTION:"Check that the CLIProxyAPI bridge is running and its /v1/chat/completions route accepts the configured API key, then run `docuvia analyze --escalate-to-lsp` to retry the drain",TIER_C_QUEUE_NEVER_DRAINED:t=>`Tier C queue has ${t} pending item(s) but no drain has ever completed -- either never enqueued-to-drained or permanently stuck from the start.`,TIER_C_QUEUE_NEVER_DRAINED_SUGGESTION:"Run `docuvia analyze --escalate-to-lsp` once so the drain path actually executes, and check `.docuvia/logs/analyze.log` for tierC events",STAGED_L3_OK:t=>t===0?"No agent-authored decisions waiting in the staging file.":`${t} staged agent-authored decision(s) waiting, none older than the staging window.`,STAGED_L3_STRANDED:(t,e,r)=>`${t} agent-authored decision(s) stranded in the staging file -- the oldest has waited ${e} day(s), anchored to \`${r}\`. \`--stage\` only flushes when a later commit's diff contains that exact file, so these will never land on their own.`,STAGED_L3_STRANDED_SUGGESTION:"Write them directly with `docuvia analyze <file> --agent-authored` (the default path -- it lands in one pass, no LLM call, no scheduling), then clear `.docuvia/pending-l3-decisions.json`",L2_SEMANTIC_COVERAGE_OK:(t,e)=>`L2 semantic coverage: ${t}/${e} node(s) carry a description.`,L2_SEMANTIC_COVERAGE_LOW:(t,e,r)=>`Only ${r.toFixed(1)}% of L2 nodes carry a description (${t}/${e}) -- the knowledge graph is structurally correct but semantically empty, so query/impact results surface little "why" content.`,L2_SEMANTIC_COVERAGE_LOW_SUGGESTION:"Run `docuvia analyze --escalate-to-lsp` (Tier C) so the LLM enrichment pass can backfill descriptions, or explicitly declare the graph structural-only",L2_SEMANTIC_COVERAGE_STRUCTURAL_ONLY:(t,e)=>`L2 semantic coverage: ${t}/${e} node(s) carry a description (structural-only graph -- Tier C LLM enrichment is not configured, so descriptions cannot be written yet).`,WORKTREE_DIVERGENCE_OK:t=>`${t} worktree(s) total; no sibling worktree carries its own .docuvia graph.`,WORKTREE_DIVERGENCE_FAIL:(t,e)=>`${t} sibling worktree(s) carry their own .docuvia/local.db -- ${e.join(", ")}: per-worktree knowledge graphs that never reconcile (decisions staged in one worktree never reach the others).`,WORKTREE_DIVERGENCE_SUGGESTION:"Point all worktrees at one graph via a shared DOCUVIA_DB_PATH (or a symlinked .docuvia), or run `docuvia sync-knowledge` from a canonical worktree before pushing",AGENT_AUTHED_ADOPTION_OK:(t,e,r,n)=>`Agent-authored decisions: ${n} flushed in graph, ${t} staged pending flush; ${r} of ${e} recently-changed file(s) carry no staged decision.`,AGENT_AUTHED_ADOPTION_SKIPPED:"No recently-changed files to evaluate for agent-authored staging.",LSP_BINARY_AVAILABLE:t=>`LSP-precision edges available (${t} resolved).`,LSP_BINARY_UNAVAILABLE:t=>`LSP-precision edges unavailable (${t}).`,LSP_BINARY_UNAVAILABLE_SUGGESTION:"Build/compile the project so the language server can resolve it (install dependencies, restore/build for compiled languages), then re-run `docuvia doctor`.",AGENT_HOOKS_FOUND:t=>`${t} hooks found.`,AGENT_HOOKS_NOT_FOUND:t=>`${t} hooks not found (run \`docuvia init\` to install).`,CALL_GRAPH_RESOLUTION_NO_DATA:"No call-site resolution data recorded yet (run `docuvia analyze` to populate it).",CALL_GRAPH_RESOLUTION_OK:(t,e,r)=>`Call-graph resolution: ${t}/${e} applicable call site(s) resolved into calls edges across ${r} ingested file(s).`,CALL_GRAPH_RESOLUTION_LOW:(t,e,r,n)=>`Call-graph resolution is low: only ${r.toFixed(1)}% of applicable call sites resolved into calls edges (${t}/${e} across ${n} file(s)) -- impact results in these areas may understate real dependents ("no dependents" can mean "unresolved", not "safe").`,CALL_GRAPH_RESOLUTION_LOW_SUGGESTION:"Run `docuvia analyze --escalate-to-lsp --full` to let Tier B LSP edge resolution recover the unresolved call sites.",CANARY_SELF_TEST_OK:t=>`Graph self-test passed: ${t} sampled node(s) resolved via exact-name lookup; the FTS index answered a known-present token.`,CANARY_SELF_TEST_LOOKUP_FAIL:(t,e)=>`Graph self-test FAILED: ${t} of ${e} sampled l2_nodes row(s) could not be resolved by exact-name lookup -- rows exist that query/impact can never find.`,CANARY_SELF_TEST_FTS_FAIL:t=>`Graph self-test FAILED: FTS search for known-indexed token "${t}" returned 0 rows while l2_nodes holds data -- the FTS index is out of sync with l2_nodes.`,CANARY_SELF_TEST_FAIL_SUGGESTION:"Run `docuvia analyze --full` to rebuild the local graph from the working tree (or `docuvia hydrate --force` to re-pull it from the knowledge branch)."};async function zT(t,e,r){let n=y.resolve(A.EdgeResolutionProviders,{logger:e}),i=await fp(t,n),s=[];for(let o of i){let a=n[o];if(!a)continue;let l=a();r&&l.configure(r);let c=await l.checkAvailability(t);c.available||s.push(c)}return s.length===0?{available:!0}:i.length>0&&s.length===i.length?s.length===1?s[0]:{available:!1,reason:s.map(o=>o.reason??"").join("; ")}:{available:!0}}async function fp(t,e){if(!y.has(A.GraphStoreOpener))return Object.keys(e);let r;try{r=await y.resolve(A.GraphStoreOpener)({dbPath:ie(t),readonly:!0});let i=Ns(r),s=new Set;for(let o of i){let a=np(o.file);a&&s.add(a)}return Array.from(s)}catch{return Object.keys(e)}finally{await r?.close()}}import{existsSync as MF}from"fs";import*as mp from"path";import{execFile as kF}from"child_process";import{promisify as GF}from"util";var xF=GF(kF),UF=5e3,HF="npx",BF="--no-install",hp="docuvia",KF=[".cmd",".CMD",".exe",""],JT="docuvia doctor";function $F(t){let e=mp.join(t,"node_modules",".bin");return(process.platform==="win32"?KF.map(n=>`${hp}${n}`):[hp]).some(n=>MF(mp.join(e,n)))}function qT(t){if(!t||typeof t!="object")return"";let{stdout:e,stderr:r}=t;return`${e??""}${r??""}`}async function YF(t){try{let e=await xF(HF,[BF,hp],{cwd:t,timeout:UF});return qT(e).includes(JT)}catch(e){return qT(e).includes(JT)}}async function Ep(t){return $F(t)?!0:YF(t)}import*as It from"path";import*as lr from"fs/promises";var wl=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(e={}){let{skipDb:r=!1,skipGit:n=!1,skipLogs:i=!1,skipHooks:s=!1,skipLsp:o=!1,skipLlm:a=!1,fix:l=!1,llmBaseUrl:c,llmApiKey:u,llmModel:p}=e,d={},f=[await this.runOrSkip(r,()=>this.runDbDiagnostics(d)),await this.runOrSkip(n,()=>this.runGitDiagnostics(d)),await this.runOrSkip(i,()=>this.runLogsDiagnostics(d)),await this.runOrSkip(n,()=>this.runGitHookDiagnostic(d,l)),await this.runOrSkip(n,()=>this.runPrePushHookDiagnostic(d,l)),await this.runOrSkip(a,()=>this.runLlmReachabilityDiagnostic(d,c,u,p)),await this.runOrSkip(o,()=>this.runLspBinaryDiagnostic(d)),await this.runOrSkip(r,()=>this.runTierBCoverageDiagnostic(d)),await this.runOrSkip(r,()=>this.runGraphEmptyDiagnostic(d)),await this.runOrSkip(r||n,()=>this.runPostCommitIngestionDiagnostic(d)),...await this.runGraphHealthDiagnostics(d,r,n,c)];return await this.runOrSkip(r,()=>this.runTierBCommitCapDiagnostic(d)),await this.runOrSkip(s,()=>this.runAgentHooksDiagnostic(d)),{allPassed:f.every(Boolean),diagnostics:d}}async runOrSkip(e,r){if(e)return!0;let n=await r();return n===void 0?!0:!!n}async runGraphHealthDiagnostics(e,r,n,i){return[await this.runOrSkip(r,()=>this.runTierCQueueDiagnostic(e)),await this.runOrSkip(r,()=>this.runL2SemanticCoverageDiagnostic(e,i)),await this.runStagedL3Diagnostic(e),await this.runOrSkip(n,()=>this.runWorktreeDivergenceDiagnostic(e)),await this.runOrSkip(r||n,()=>this.runAgentAuthoredAdoptionDiagnostic(e)),await this.runOrSkip(r,()=>this.runCallGraphResolutionDiagnostic(e)),await this.runOrSkip(r,()=>this.runCanarySelfTestDiagnostic(e))]}async runCanarySelfTestDiagnostic(e){if(!y.has(A.GraphStoreOpener))return!0;let r;try{r=await y.resolve(A.GraphStoreOpener)({dbPath:ie(this.workspaceRoot),readonly:!0});let i=r.graph.getCanarySample(S.DEFAULT_CANARY_SAMPLE_SIZE);if(i.length===0)return!0;let s=i.filter(({name:a})=>!r?.graph.findNodeByName(a));if(s.length>0)return e[ue.CANARY_SELF_TEST]={status:K.FAIL,message:k.CANARY_SELF_TEST_LOOKUP_FAIL(s.length,i.length),suggestion:k.CANARY_SELF_TEST_FAIL_SUGGESTION},!1;let o;for(let{name:a}of i)if(o=a.split(/[^A-Za-z0-9]+/).filter(Boolean).reduce((c,u)=>u.length>=3&&u.length>c.length?u:c,""),o)break;return o&&r.fts.searchL2Nodes([o],10).length===0?(e[ue.CANARY_SELF_TEST]={status:K.FAIL,message:k.CANARY_SELF_TEST_FTS_FAIL(o),suggestion:k.CANARY_SELF_TEST_FAIL_SUGGESTION},!1):(e[ue.CANARY_SELF_TEST]={status:K.PASS,message:k.CANARY_SELF_TEST_OK(i.length)},!0)}catch{return!0}finally{await r?.close()}}async runGitHookDiagnostic(e,r){if(!y.has(A.GitProvider))return!0;try{let n=y.resolve(A.GitProvider),i=await n.readHookFile(this.workspaceRoot,S.POST_COMMIT_HOOK_NAME),s=!!i?.includes(S.POST_COMMIT_HOOK_MARKER),o=!!i?.includes(S.LEGACY_POST_COMMIT_HOOK_MARKER),a=!!i?.includes(S.POST_COMMIT_FLUSH_L3_MARKER),l=await this.classifyGitHookState(n,s,o,a);return l=await this.repairGitHookIfRequested(r,l,s,o,a),e[ue.GIT_HOOK]=l,l.status===K.PASS}catch{return!0}}async repairGitHookIfRequested(e,r,n,i,s){return e?n&&i?this.repairDuplicateGitHookIfRequested(r):r.status===K.FAIL&&!s?this.repairStaleGitHookIfRequested(r):r:r}async repairStaleGitHookIfRequested(e){if(!y.has(A.KnowledgeGitService))return e;let r=y.resolve(A.KnowledgeGitService,{logger:this.logger}),{installed:n}=await r.installPostCommitHook(this.workspaceRoot);return n?{...e,message:e.message+k.GIT_HOOK_REPAIRED_NOTE}:e}async classifyGitHookState(e,r,n,i){if(!r&&!n)return{status:K.PASS,message:k.GIT_HOOK_NOT_INSTALLED};if(r&&n)return{status:K.FAIL,message:k.GIT_HOOK_DUPLICATE,suggestion:k.GIT_HOOK_DUPLICATE_SUGGESTION};if(n)return{status:K.FAIL,message:k.GIT_HOOK_LEGACY_ONLY,suggestion:k.GIT_HOOK_LEGACY_ONLY_SUGGESTION};if(!i)return{status:K.FAIL,message:k.GIT_HOOK_FLUSH_STALE,suggestion:k.GIT_HOOK_FLUSH_STALE_SUGGESTION};if(!await Ep(this.workspaceRoot))return{status:K.FAIL,message:k.GIT_HOOK_NOT_RESOLVABLE,suggestion:k.GIT_HOOK_NOT_RESOLVABLE_SUGGESTION};let o=await e.resolveHooksDir(this.workspaceRoot);return{status:K.PASS,message:k.GIT_HOOK_RESOLVABLE(It.join(o,S.POST_COMMIT_HOOK_NAME))}}async repairDuplicateGitHookIfRequested(e){if(!y.has(A.KnowledgeGitService))return e;let r=y.resolve(A.KnowledgeGitService,{logger:this.logger}),{repaired:n}=await r.repairDuplicatePostCommitHook(this.workspaceRoot);return n?{...e,message:e.message+k.GIT_HOOK_REPAIRED_NOTE}:e}async runPrePushHookDiagnostic(e,r){if(!y.has(A.GitProvider))return!0;try{let n=y.resolve(A.GitProvider),i=await n.readHookFile(this.workspaceRoot,S.PRE_PUSH_HOOK_NAME),s=!!i?.includes(S.PRE_PUSH_HOOK_MARKER),o=!!i?.includes(S.PRE_PUSH_SYNC_KNOWLEDGE_MARKER),a=!!i?.includes(S.PRE_PUSH_ENV_GATE_MARKER),l=!!i?.includes(S.PRE_PUSH_HOOKS_CHECK_MARKER),c=!!i?.includes(S.PRE_PUSH_FAILURE_HINT_MARKER),u=await this.classifyPrePushHookState(n,s,o,a,l,c);return u=await this.repairPrePushHookIfRequested(r,u,s,o,a,l,c),e[ue.PRE_PUSH_HOOK]=u,u.status===K.PASS}catch{return!0}}async repairPrePushHookIfRequested(e,r,n,i,s,o,a){return!e||!n||i&&s&&o&&a?r:this.repairStalePrePushHookIfRequested(r)}async repairStalePrePushHookIfRequested(e){if(!y.has(A.KnowledgeGitService))return e;let r=y.resolve(A.KnowledgeGitService,{logger:this.logger}),{installed:n}=await r.installPrePushHook(this.workspaceRoot);return n?{...e,message:e.message+k.PRE_PUSH_HOOK_REPAIRED_NOTE}:e}async classifyPrePushHookState(e,r,n,i,s,o){if(!r)return{status:K.PASS,message:k.PRE_PUSH_HOOK_NOT_INSTALLED};if(!n)return{status:K.FAIL,message:k.PRE_PUSH_HOOK_STALE,suggestion:k.PRE_PUSH_HOOK_STALE_SUGGESTION};if(!i)return{status:K.FAIL,message:k.PRE_PUSH_HOOK_ENV_GATE_STALE,suggestion:k.PRE_PUSH_HOOK_STALE_SUGGESTION};if(!s)return{status:K.FAIL,message:k.PRE_PUSH_HOOK_HOOKS_CHECK_STALE,suggestion:k.PRE_PUSH_HOOK_STALE_SUGGESTION};if(!o)return{status:K.FAIL,message:k.PRE_PUSH_HOOK_FAILURE_HINT_STALE,suggestion:k.PRE_PUSH_HOOK_STALE_SUGGESTION};if(!await Ep(this.workspaceRoot))return{status:K.FAIL,message:k.PRE_PUSH_HOOK_NOT_RESOLVABLE,suggestion:k.GIT_HOOK_NOT_RESOLVABLE_SUGGESTION};let l=await e.resolveHooksDir(this.workspaceRoot);return{status:K.PASS,message:k.PRE_PUSH_HOOK_OK(It.join(l,S.PRE_PUSH_HOOK_NAME))}}async runLlmReachabilityDiagnostic(e,r,n,i){if(!r||!i)return e[ue.LLM_REACHABILITY]={status:K.PASS,message:k.LLM_NOT_CONFIGURED},!0;if(!y.has(A.LlmClient))return!0;try{let o=y.resolve(A.LlmClient)();o.initialize({baseUrl:r,apiKey:n});let a=await o.checkBridgeReachability(i);return a.available?(e[ue.LLM_REACHABILITY]={status:K.PASS,message:k.LLM_REACHABLE},!0):(e[ue.LLM_REACHABILITY]={status:K.FAIL,message:k.LLM_UNREACHABLE(a.reason??""),suggestion:k.LLM_UNREACHABLE_SUGGESTION},!1)}catch{return!0}}async runLspBinaryDiagnostic(e){if(!y.has(A.EdgeResolutionProviders))return!0;try{let r=y.resolve(A.EdgeResolutionProviders,{logger:this.logger}),n=await fp(this.workspaceRoot,r),i=!0;for(let s of n){let o=r[s];if(!o)continue;let a=o(),l=await a.checkAvailability(this.workspaceRoot);e[ue.LSP_BINARY(s)]=l.available?{status:K.PASS,message:k.LSP_BINARY_AVAILABLE(a.name)}:{status:K.FAIL,message:k.LSP_BINARY_UNAVAILABLE(l.reason??""),suggestion:k.LSP_BINARY_UNAVAILABLE_SUGGESTION},l.available||(i=!1)}return i}catch{return!0}}async runAgentHooksDiagnostic(e){let r=[{key:ue.AGENT_HOOKS_CLAUDE,dir:Vn,filename:br,platformName:gp.CLAUDE},{key:ue.AGENT_HOOKS_CURSOR,dir:zn,filename:wr,platformName:gp.CURSOR}];for(let{key:n,dir:i,filename:s,platformName:o}of r){let a=It.join(this.workspaceRoot,i,s),l;try{await lr.stat(a),l=!0}catch{l=!1}e[n]={status:K.PASS,message:l?k.AGENT_HOOKS_FOUND(o):k.AGENT_HOOKS_NOT_FOUND(o)}}}async runTierBCommitCapDiagnostic(e){if(!y.has(A.GraphStoreOpener))return;let r;try{r=await y.resolve(A.GraphStoreOpener)({dbPath:ie(this.workspaceRoot),readonly:!0});let i=vi(r);e[ue.TIER_B_COMMIT_CAP]={status:K.PASS,message:i?k.TIER_B_CAP_EXCEEDED:k.TIER_B_CAP_OK}}catch{}finally{await r?.close()}}async runTierBCoverageDiagnostic(e){if(!y.has(A.GraphStoreOpener))return!0;let r;try{r=await y.resolve(A.GraphStoreOpener)({dbPath:ie(this.workspaceRoot),readonly:!0});let{totalFiles:i,processedFiles:s}=r.files.getTierBCoverage(),o=i>0?s/i:1,a=o<S.DEFAULT_TIER_B_COVERAGE_FAIL_THRESHOLD;return e[ue.TIER_B_COVERAGE]=a?{status:K.FAIL,message:k.TIER_B_COVERAGE_LOW(s,i,o*100),suggestion:k.TIER_B_COVERAGE_LOW_SUGGESTION}:{status:K.PASS,message:k.TIER_B_COVERAGE_OK(s,i)},!a}catch{return!0}finally{await r?.close()}}async runGraphEmptyDiagnostic(e){if(!y.has(A.GraphStoreOpener))return!0;let r;try{r=await y.resolve(A.GraphStoreOpener)({dbPath:ie(this.workspaceRoot),readonly:!0});let i=r.projects.getFirst(),{l2Nodes:s}=r.graph.count(),o=!i||s===0;return e[ue.GRAPH_EMPTY]=o?{status:K.FAIL,message:k.GRAPH_EMPTY,suggestion:k.GRAPH_EMPTY_SUGGESTION}:{status:K.PASS,message:k.GRAPH_EMPTY_OK(s)},!o}catch{return!0}finally{await r?.close()}}async runPostCommitIngestionDiagnostic(e){if(!y.has(A.GraphStoreOpener)||!y.has(A.GitProvider))return!0;let r;try{let n=y.resolve(A.GitProvider);r=await y.resolve(A.GraphStoreOpener)({dbPath:ie(this.workspaceRoot),readonly:!0});let s=await n.getHeadSha(this.workspaceRoot);if(!s)return!0;let o=r.meta.get(S.META_KEY_LAST_INGESTED_SOURCE_SHA),a=ar(r).length;if(o===s)return e[ue.POST_COMMIT_INGESTION]={status:K.PASS,message:k.POST_COMMIT_INGESTION_OK(a)},!0;let l=await this.hasRecentAnalyzeActivity();return e[ue.POST_COMMIT_INGESTION]=l?{status:K.PASS,message:k.POST_COMMIT_INGESTION_RECENT(o,a)}:{status:K.FAIL,message:k.POST_COMMIT_INGESTION_STALE(a),suggestion:k.POST_COMMIT_INGESTION_STALE_SUGGESTION},l}catch{return!0}finally{await r?.close()}}async hasRecentAnalyzeActivity(){let e=It.join(this.workspaceRoot,he,Pr,Ki),r;try{r=await lr.readFile(e,H)}catch{return!1}let n=S.DEFAULT_POST_COMMIT_INGESTION_GRACE_MS,i=Date.now(),s=r.split(`
173
+ `).filter(o=>o.trim().length>0);for(let o of s)try{let a=JSON.parse(o);if(typeof a.ts=="string"){let l=Date.parse(a.ts);if(!Number.isNaN(l)&&i-l<=n)return!0}}catch{}return!1}async runTierCQueueDiagnostic(e){if(!y.has(A.GraphStoreOpener))return!0;let r;try{r=await y.resolve(A.GraphStoreOpener)({dbPath:ie(this.workspaceRoot),readonly:!0});let i=ar(r).length;if(i===0)return e[ue.TIER_C_QUEUE]={status:K.PASS,message:k.TIER_C_QUEUE_OK(0,0)},!0;let s=await this.readLastTierCDrainOutcome();return s?s.processed===0?(e[ue.TIER_C_QUEUE]={status:K.FAIL,message:k.TIER_C_QUEUE_STUCK(i,s.reason??"unknown"),suggestion:k.TIER_C_QUEUE_STUCK_SUGGESTION},!1):(e[ue.TIER_C_QUEUE]={status:K.PASS,message:k.TIER_C_QUEUE_OK(i,s.processed)},!0):(e[ue.TIER_C_QUEUE]={status:K.FAIL,message:k.TIER_C_QUEUE_NEVER_DRAINED(i),suggestion:k.TIER_C_QUEUE_NEVER_DRAINED_SUGGESTION},!1)}catch{return!0}finally{await r?.close()}}async runStagedL3Diagnostic(e){let r;try{r=await wi(this.workspaceRoot,this.logger)}catch{return!0}let n=Date.now(),i=r.filter(a=>{let l=Date.parse(a.stagedAt);return Number.isFinite(l)&&n-l>=S.DEFAULT_STAGED_L3_STRANDED_AFTER_MS});if(i.length===0)return e[ue.STAGED_L3_DECISIONS]={status:K.PASS,message:k.STAGED_L3_OK(r.length)},!0;let s=i.reduce((a,l)=>Date.parse(a.stagedAt)<=Date.parse(l.stagedAt)?a:l),o=Math.floor((n-Date.parse(s.stagedAt))/S.DEFAULT_STAGED_L3_STRANDED_AFTER_MS);return e[ue.STAGED_L3_DECISIONS]={status:K.FAIL,message:k.STAGED_L3_STRANDED(i.length,o,s.filePath),suggestion:k.STAGED_L3_STRANDED_SUGGESTION},!1}async readLastTierCDrainOutcome(){let e=It.join(this.workspaceRoot,he,Pr,Ki),r;try{r=await lr.readFile(e,H)}catch{return}let n,i;for(let s of r.split(`
174
+ `))try{let o=JSON.parse(s);o.event===Y.TIER_C_SUMMARY?n={processed:Number(o.processed??0)}:o.event===Y.TIER_C_ITEM_FAILED&&typeof o.reason=="string"&&(i=o.reason)}catch{}if(n)return{processed:n.processed,reason:i}}async runL2SemanticCoverageDiagnostic(e,r){if(!y.has(A.GraphStoreOpener))return!0;let n;try{n=await y.resolve(A.GraphStoreOpener)({dbPath:ie(this.workspaceRoot),readonly:!0});let{totalNodes:s,describedNodes:o}=n.graph.getSemanticCoverage(),a=s>0?o/s:1,l=a<S.DEFAULT_L2_SEMANTIC_COVERAGE_FAIL_THRESHOLD,c=!!r;return e[ue.L2_SEMANTIC_COVERAGE]=l?c?{status:K.FAIL,message:k.L2_SEMANTIC_COVERAGE_LOW(o,s,a*100),suggestion:k.L2_SEMANTIC_COVERAGE_LOW_SUGGESTION}:{status:K.PASS,message:k.L2_SEMANTIC_COVERAGE_STRUCTURAL_ONLY(o,s)}:{status:K.PASS,message:k.L2_SEMANTIC_COVERAGE_OK(o,s)},!(l&&c)}catch{return!0}finally{await n?.close()}}async runWorktreeDivergenceDiagnostic(e){if(!y.has(A.GitProvider))return!0;try{let n=await y.resolve(A.GitProvider).listWorktrees(this.workspaceRoot),i=It.resolve(this.workspaceRoot),s=[];for(let o of n){if(It.resolve(o.path)===i)continue;let a=It.join(o.path,he,$i);await lr.stat(a).catch(()=>null)&&s.push(o.path)}return e[ue.WORKTREE_DIVERGENCE]=s.length>0?{status:K.FAIL,message:k.WORKTREE_DIVERGENCE_FAIL(s.length,s),suggestion:k.WORKTREE_DIVERGENCE_SUGGESTION}:{status:K.PASS,message:k.WORKTREE_DIVERGENCE_OK(n.length)},s.length===0}catch{return!0}}async runAgentAuthoredAdoptionDiagnostic(e){if(!y.has(A.GraphStoreOpener)||!y.has(A.GitProvider))return!0;let r;try{let n=y.resolve(A.GitProvider);r=await y.resolve(A.GraphStoreOpener)({dbPath:ie(this.workspaceRoot),readonly:!0});let s=await n.getHeadSha(this.workspaceRoot),o=r.meta.get(S.META_KEY_LAST_INGESTED_SOURCE_SHA),a=o&&o!==s?await n.getChangedFilesSince(this.workspaceRoot,o):[];if(a.length===0)return e[ue.AGENT_AUTHED_ADOPTION]={status:K.PASS,message:k.AGENT_AUTHED_ADOPTION_SKIPPED},!0;let l=await wi(this.workspaceRoot,this.logger),c=new Set(l.map(d=>d.filePath)),u=r.l3.getAllExportable().filter(d=>d.source===Gt.AGENT_AUTHORED).length,p=a.filter(d=>!c.has(d.file)).length;return e[ue.AGENT_AUTHED_ADOPTION]={status:K.PASS,message:k.AGENT_AUTHED_ADOPTION_OK(l.length,a.length,p,u)},!0}catch{return!0}finally{await r?.close()}}async runCallGraphResolutionDiagnostic(e){if(!y.has(A.GraphStoreOpener))return!0;let r;try{r=await y.resolve(A.GraphStoreOpener)({dbPath:ie(this.workspaceRoot),readonly:!0});let{byFile:i,total:s}=wS(r),o=Object.keys(i).length;if(o===0||s.total===0)return e[ue.CALL_GRAPH_RESOLUTION]={status:K.PASS,message:k.CALL_GRAPH_RESOLUTION_NO_DATA},!0;let a=lg(s),l=a>0?s.resolved/a:1,c=l<S.DEFAULT_CALL_RESOLUTION_NOTE_THRESHOLD;return e[ue.CALL_GRAPH_RESOLUTION]=c?{status:K.PASS,message:k.CALL_GRAPH_RESOLUTION_LOW(s.resolved,a,l*100,o),suggestion:k.CALL_GRAPH_RESOLUTION_LOW_SUGGESTION}:{status:K.PASS,message:k.CALL_GRAPH_RESOLUTION_OK(s.resolved,a,o)},!0}catch{return!0}finally{await r?.close()}}async runDbDiagnostics(e){let r=It.join(this.workspaceRoot,he,$i);if(!await lr.stat(r).catch(()=>null))return e[ue.DB_FOUND]={status:K.FAIL,message:k.DB_NOT_FOUND_AT(r)},!1;if(!y.has(A.DiagnosticRunnerDb))return e[ue.DB_RUNNER]={status:K.FAIL,message:k.DB_RUNNER_NOT_REGISTERED},!1;let s=await y.resolve(A.DiagnosticRunnerDb).checkHealth(r);return this.mergeDiagnosticResults(e,s)}async runGitDiagnostics(e){if(!y.has(A.DiagnosticRunnerGit))return e[ue.GIT_RUNNER]={status:K.FAIL,message:k.GIT_RUNNER_NOT_REGISTERED},!1;try{let n=await y.resolve(A.DiagnosticRunnerGit,{logger:this.logger}).checkHealth(this.workspaceRoot);return this.mergeDiagnosticResults(e,n)}catch(r){return e[ue.GIT_REACHABILITY]=this.buildGitReachabilityFailure(r),!1}}mergeDiagnosticResults(e,r){let n=!0;for(let[i,s]of Object.entries(r))e[i]=s,s.status===K.FAIL&&(n=!1);return n}buildGitReachabilityFailure(e){let r=e instanceof E||e instanceof Error?e.message:String(e),n;return e instanceof E&&(e.code===T.GIT_NETWORK_TIMEOUT?n=k.GIT_NETWORK_TIMEOUT_SUGGESTION:e.code===T.GIT_COMMAND_FAILED&&r.includes(k.GIT_NOT_A_REPO_TEXT)?n=k.GIT_NOT_A_REPO_SUGGESTION:e.code===T.GIT_COMMAND_FAILED&&r.includes(k.GIT_REMOTE_UNREADABLE_TEXT)&&(n=k.GIT_REMOTE_UNREADABLE_SUGGESTION)),{status:K.FAIL,message:k.GIT_REACHABILITY_FAILED(r),suggestion:n}}async runLogsDiagnostics(e){let r=It.join(this.workspaceRoot,he,Pr);try{let{errorsFound:n,logsChecked:i}=await this.scanLogFiles(r);return n>0?(e[ue.LOGS]={status:K.FAIL,message:k.LOGS_ERRORS_FOUND(n),suggestion:k.LOGS_ERRORS_FOUND_SUGGESTION},!1):(e[ue.LOGS]={status:K.PASS,message:k.LOGS_CHECKED_CLEAN(i)},!0)}catch{return e[ue.LOGS]={status:K.PASS,message:k.LOGS_NOT_FOUND_AT(r)},!0}}async scanLogFiles(e){let r=0,n=0,i=await lr.readdir(e);for(let s of i){if(!s.endsWith(VT))continue;n++;let a=(await lr.readFile(It.join(e,s),H)).split(`
175
+ `).filter(l=>l.trim().length>0);for(let l of a)try{let c=JSON.parse(l);c.level&&c.level>=50&&r++}catch{}}return{errorsFound:r,logsChecked:n}}};var Fl=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(e=!1){let{workspaceRoot:r,logger:n}=this,i=y.resolve(A.KnowledgeGitService,{logger:n}),s=await this.removeHookSafely(()=>i.removePostCommitHook(r),S.POST_COMMIT_HOOK_NAME),o=await this.removeHookSafely(()=>i.removePrePushHook(r),S.PRE_PUSH_HOOK_NAME),a=!1;if(!e)try{({deleted:a}=await i.deleteKnowledgeBranch(r))}catch(l){this.logger.warn("Failed to delete the docuvia-knowledge git branch",{error:l instanceof Error?l.message:String(l)})}return{postCommitRemoved:s,prePushRemoved:o,knowledgeBranchDeleted:a}}async removeHookSafely(e,r){try{let{removed:n}=await e();return n}catch(n){return this.logger.warn(`Failed to remove the ${r} git hook`,{error:n instanceof Error?n.message:String(n)}),!1}}};import QT from"fs/promises";import WF from"path";var XT={REMOVED:"Removed .docuvia/ directory",NOT_FOUND:".docuvia/ directory not present; nothing to remove"};async function ZT(t,e){let r=WF.join(t,he);if(!Ni(r,t))throw new E(T.UNINSTALL_WORKFLOW_FAILED,`Refusing to remove directory at ${r}: resolved outside workspace ${t}`);let n=!0;try{await QT.access(r)}catch{n=!1}return n?(await QT.rm(r,{recursive:!0,force:!0}),e.info(XT.REMOVED),{removed:!0}):(e.debug(XT.NOT_FOUND),{removed:!1})}async function eA(t,e){return Fi(t,e)}async function tA(t,e,r,n){return await kT(t,e,r,n),Fi(t,n)}function _e(t,e){let r=R.get(t,e);if(r===void 0)throw new E(T.INVALID_INPUT,IS.MISSING_MEMORY_KEY(e,t));return r}function rA(t){let e=R.get(t,O.LSP_BINARY_OVERRIDE),r=R.get(t,O.LSP_ARGS_OVERRIDE),n=R.get(t,O.LSP_TIMEOUT_MS),i=R.get(t,O.LSP_MAX_PROCESSES);if(!(e===void 0&&r===void 0&&n===void 0&&i===void 0))return{binaryOverride:e,argsOverride:r,timeoutMs:n,maxProcesses:i}}var X={async init(t,e){let r=_e(t,O.WORKSPACE_ROOT);return new rl(r,e).execute()},async clean(t,e){let r=_e(t,O.WORKSPACE_ROOT);return new sl(r,e).execute()},async status(t,e){let r=_e(t,O.WORKSPACE_ROOT);return new cl(r,e).execute()},async sync(t,e,r){let n=_e(t,O.WORKSPACE_ROOT),i=_e(t,O.API_URL),s=_e(t,O.PROJECT_ID),o=R.get(t,O.COMMIT_SHA);return new dl(n,e,i,r).execute({projectId:s,commitSha:o})},async analyze(t,e,r){let n=_e(t,O.WORKSPACE_ROOT);if(R.get(t,O.FLUSH_STAGED_L3))return new sn(n,e,{flushStagedL3:!0}).execute();let s=R.get(t,O.TARGET_PATH),o=R.get(t,O.AGENT_AUTHORED_DECISIONS);if(s&&o)return new sn(n,e,{targetPath:s,agentAuthoredDecisions:o}).execute();if(s){let l=_e(t,O.LLM_BASE_URL),c=_e(t,O.LLM_MODEL);return new sn(n,e,{targetPath:s,llmBaseUrl:l,llmApiKey:r,llmModel:c}).execute()}return R.get(t,O.ESCALATE_TO_LSP)?new sn(n,e,{escalateToLsp:!0,lspProviderConfig:rA(t),tierBCommitCap:R.get(t,O.TIER_B_COMMIT_CAP),full:R.get(t,O.TIER_B_FULL_RESYNC),llmBaseUrl:R.get(t,O.LLM_BASE_URL),llmApiKey:r,llmModel:R.get(t,O.LLM_MODEL),tierCDailyCallCap:R.get(t,O.TIER_C_DAILY_CALL_CAP),tierCDailyTokenCap:R.get(t,O.TIER_C_DAILY_TOKEN_CAP),tierCWallClockMs:R.get(t,O.TIER_C_WALL_CLOCK_MS),tierCItemCap:R.get(t,O.TIER_C_ITEM_CAP),tierCLoadThreshold:R.get(t,O.TIER_C_LOAD_THRESHOLD),force:R.get(t,O.FORCE),tierCDrainAll:R.get(t,O.TIER_C_DRAIN_ALL)}).execute():new sn(n,e).execute()},async stageAgentAuthoredDecisions(t,e){let r=_e(t,O.WORKSPACE_ROOT),n=_e(t,O.TARGET_PATH),i=_e(t,O.AGENT_AUTHORED_DECISIONS),s=il(n,r);if(s.status==="outside")throw new E(T.INVALID_INPUT,J.PATH_NOT_FOUND(n));if(s.status==="missing")throw new E(T.FS_READ_FAILED,J.PATH_NOT_FOUND(n));return bT(r,n,i,e)},async review(t,e){let r=_e(t,O.WORKSPACE_ROOT),n=R.get(t,O.BASE_REF);return new El(r,e).execute(n)},async impact(t,e){let r=_e(t,O.WORKSPACE_ROOT),n=_e(t,O.TARGET);return new _l(r,e).execute(n)},async query(t,e){let r=_e(t,O.WORKSPACE_ROOT),n=_e(t,O.TARGET),i=R.get(t,O.LIMIT);return new Rl(r,e).execute(n,i)},async exportTopology(t,e){let r=_e(t,O.WORKSPACE_ROOT),n=R.get(t,O.COLLAPSE);return new Ll(r,e).execute({collapse:n})},async snapshot(t,e){let r=_e(t,O.WORKSPACE_ROOT);return new Cl(r,e).execute()},async hydrate(t,e,r){let n=_e(t,O.WORKSPACE_ROOT);return new Dl(n,e).execute(r)},async syncKnowledge(t,e){let r=_e(t,O.WORKSPACE_ROOT),n=R.get(t,O.GIT_NETWORK_TIMEOUT_MS);return new bl(r,e,n).execute()},async doctor(t,e,r){let n=_e(t,O.WORKSPACE_ROOT);return new wl(n,e).execute(r)},async uninstallGitHooks(t,e){let r=_e(t,O.WORKSPACE_ROOT),n=R.get(t,O.KEEP_DB);return new Fl(r,e).execute(n)},async removeDocuviaDir(t,e){let r=_e(t,O.WORKSPACE_ROOT);return ZT(r,e)},async listHooks(t,e){let r=_e(t,O.WORKSPACE_ROOT);return eA(r,e)},async setHookEnabled(t,e){let r=_e(t,O.WORKSPACE_ROOT),n=_e(t,O.HOOK_NAME),i=_e(t,O.HOOK_ENABLED);return tA(r,n,i,e)},async checkTierBGate(t,e){let r=_e(t,O.WORKSPACE_ROOT);return zT(r,e,rA(t))}};import nA from"pino";import{createRequire as jF}from"module";var VF=jF(import.meta.url),_p="pino-pretty",zF=`[docuvia] ${_p} unavailable, falling back to plain JSON logs.
176
+ `,JF=["req.headers.authorization","req.headers.Authorization","*.authorization","*.Authorization","*.*.authorization","*.*.Authorization","password","*.password","*.*.password","token","*.token","*.*.token","apiKey","*.apiKey","*.*.apiKey","OPENAI_API_KEY","*.OPENAI_API_KEY","*.*.OPENAI_API_KEY"],qF="[REDACTED]",QF="1";function XF(){if(process.env.DOCUVIA_PRETTY_LOGS===QF)try{return VF.resolve(_p),{target:_p,options:{colorize:!0,destination:2}}}catch{process.stderr.write(zF);return}}function ee(){let t=XF(),e=nA({level:process.env.LOG_LEVEL||ye.INFO,redact:{paths:[...JF],censor:qF},transport:t},t?void 0:nA.destination(2)),r=new xp;return r.onLog(n=>{e[n.level](n.context??{},n.message)}),r}var on={UNKNOWN_OPTIONS:t=>`Unknown options provided: ${t}`,UNKNOWN_PLATFORMS:(t,e)=>`Unknown --platform value(s): ${t}. Available platforms: ${e}`,WORKSPACE_ROOT_EMPTY:"workspace root must not be empty",INVALID_FORMAT:(t,e)=>`Unknown --format value: ${t}. Available formats: ${e}`};var Et=class{};import*as tt from"fs/promises";import*as Mt from"path";var iA=".js",sA=".cjs",Ml=class extends Et{name=Og;slug=Pg;async installHooks(e){await this.configureHooks(e),await this.configureMcpServer(e)}async configureHooks(e){let r=Mt.join(e,zn);await tt.mkdir(r,{recursive:!0}),await tt.writeFile(Mt.join(r,wr),Zs,{mode:493});let n=gn.replace(/\${HOOKS_DIR}/g,hc).replace(iA,sA);await Ct(Mt.join(r,Jn),n,wr)}async configureMcpServer(e){let r=Mt.join(e,pc);try{let n={mcpServers:{}};try{let i=await tt.readFile(r,H);n=JSON.parse(i)}catch{await tt.mkdir(Mt.dirname(r),{recursive:!0})}n.mcpServers=n.mcpServers||{},n.mcpServers[qn]={command:Qs,args:[Gg,...Xs]},await tt.writeFile(r,JSON.stringify(n,null,2)),h.success(g.INIT_HOOKS_REGISTERED_MCP+r)}catch(n){let i=n instanceof Error?n.message:String(n);h.warn(g.INIT_HOOKS_FAIL_CURSOR_MCP+i)}}async uninstallHooks(e){let r=Mt.join(e,zn);try{await tt.unlink(Mt.join(r,wr)),h.success(`${g.UNINSTALL_REMOVED_FILE_PREFIX}${wr}`)}catch{}let{removeBlock:n}=await import("./fs-utils-C7GLQ5VB.js"),{CURSOR_RULES_FILENAME:i,AGENT_INSTRUCTIONS_MARKER:s,AGENT_INSTRUCTIONS_END_MARKER:o}=await import("./init-templates-IETTMNLY.js"),a=Mt.join(e,i);await n(a,`<!-- ${s} -->`,`<!-- ${o} -->`);let l=Mt.join(r,Jn),c=!1;try{(await tt.readFile(l,H)).trim()===gn.replace(/\$\{HOOKS_DIR\}/g,hc).replace(iA,sA).trim()&&(await tt.unlink(l),c=!0)}catch{}if(c)try{await tt.rmdir(r)}catch{}let u=Mt.join(e,pc);try{let p=await tt.readFile(u,H),d=JSON.parse(p);d?.mcpServers&&d.mcpServers[qn]&&(delete d.mcpServers[qn],await tt.writeFile(u,JSON.stringify(d,null,2)),h.success(`${g.UNINSTALL_REMOVED_MCP_SERVER_PREFIX}${u}`))}catch{}}};import*as ze from"fs/promises";import*as rt from"path";import Us from"process";var ZF="win32",eM="darwin",tM="Library",rM="Application Support",nM=".config";async function iM(t){try{await ze.unlink(rt.join(t,br)),h.success(`${g.UNINSTALL_REMOVED_FILE_PREFIX}${br}`)}catch{}}async function sM(t){let e=rt.join(t,Jn);try{if((await ze.readFile(e,H)).trim()===gn.replace(/\$\{HOOKS_DIR\}/g,mc).trim())return await ze.unlink(e),!0}catch{}return!1}async function oM(t){try{await ze.rmdir(t)}catch{}}function oA(){let t=gn.replace(/\${HOOKS_DIR}/g,Mg);return JSON.parse(t)[Ut][0]}function lA(t){let e=t.hooks,r=Array.isArray(e)?e[0]?.command:void 0;return typeof r=="string"?r:""}function cA(t,e){let r=t?.hooks;return Array.isArray(r)&&r.some(n=>n?.command===e)}async function aM(t){try{let e=await ze.readFile(t,H);return{settings:JSON.parse(e),aborted:!1}}catch(e){return e?.code!==zs?(h.warn(`${g.FS_READ_ERROR}${t} (${e?.code??g.FS_READ_ERROR_UNKNOWN_CODE}); leaving it untouched`),{settings:{},aborted:!0}):{settings:{},aborted:!1}}}async function lM(t,e){let{settings:r,aborted:n}=await aM(t);if(n)return;if(r.hooks=r.hooks??{},r.hooks[Ut]!==void 0&&!Array.isArray(r.hooks[Ut])){h.warn(g.FS_UNEXPECTED_SHAPE(Ut,t));return}r.hooks[Ut]=r.hooks[Ut]??[];let i=r.hooks[Ut],s=lA(e);i.some(o=>cA(o,s))||(i.push(e),await ze.mkdir(rt.dirname(t),{recursive:!0}),await ze.writeFile(t,`${JSON.stringify(r,null,2)}
177
+ `,H))}async function cM(t,e){let r;try{let s=await ze.readFile(t,H);r=JSON.parse(s)}catch{return}let n=r?.hooks?.[Ut];if(!Array.isArray(n))return;let i=n.filter(s=>!cA(s,e));if(i.length!==n.length){if(i.length===0?delete r.hooks[Ut]:r.hooks[Ut]=i,Object.keys(r.hooks).length===0&&delete r.hooks,Object.keys(r).length===0){await ze.unlink(t),h.success(g.UNINSTALL_REMOVED_FILE_PREFIX+qs);return}await ze.writeFile(t,`${JSON.stringify(r,null,2)}
178
+ `,H),h.success(g.UNINSTALL_REMOVED_HOOK_FROM_SETTINGS_PREFIX+t)}}function uM(t){let e=rt.join(t,gc);h.info(`${g.UNINSTALL_CLAUDE_MCP_MANUAL_REMINDER} (${e}).`)}function aA(){return Us.platform===ZF?rt.join(Us.env.APPDATA||"",Wi):Us.platform===eM?rt.join(Us.env.HOME||"",tM,rM,Wi):rt.join(Us.env.HOME||"",nM,Wi)}var kl=class extends Et{name=Wi;slug=Dg;async installHooks(e){await this.configureHooks(e),this.printMcpServerSnippet(e)}printMcpServerSnippet(e){let r=aA();if(!r)return;let n=rt.join(r,gc),i=JSON.stringify({mcpServers:{[qn]:{command:Qs,args:[kg,...Xs],env:{[xg]:e}}}},null,2);h.info(`${g.INIT_CLAUDE_MCP_MANUAL_SNIPPET} (${n}):
179
+ ${i}`)}async configureHooks(e){let r=rt.join(e,Vn);await ze.mkdir(r,{recursive:!0}),await ze.writeFile(rt.join(r,br),Zs,{mode:493});let n=gn.replace(/\${HOOKS_DIR}/g,mc);await Ct(rt.join(r,Jn),n,br),await lM(rt.join(e,dc,qs),oA())}async uninstallHooks(e){let r=rt.join(e,Vn);await iM(r),await sM(r)&&await oM(r);try{await cM(rt.join(e,dc,qs),lA(oA()))}catch{}let i=aA();i&&uM(i)}};import*as uA from"path";var Gl=class extends Et{name=Ig;slug=vg;instructionsPath(e){return uA.join(e,mg,hg)}async installHooks(e){await Ct(this.instructionsPath(e),Mr,Tt)}async uninstallHooks(e){await kr(this.instructionsPath(e),`<!-- ${Tt} -->`,`<!-- ${Fr} -->`)}};import*as dA from"path";var xl=class extends Et{name=Lg;slug=bg;agentsMdPath(e){return dA.join(e,Ag)}async installHooks(e){await Ct(this.agentsMdPath(e),Mr,Tt)}async uninstallHooks(e){await kr(this.agentsMdPath(e),`<!-- ${Tt} -->`,`<!-- ${Fr} -->`)}};import*as Hl from"fs/promises";import*as Sp from"path";var Ul=class extends Et{name=Cg;slug=wg;rulesDir(e){return Sp.join(e,yg)}rulesFilePath(e){return Sp.join(this.rulesDir(e),fc)}async installHooks(e){await Ct(this.rulesFilePath(e),Mr,Tt)}async uninstallHooks(e){try{await Hl.unlink(this.rulesFilePath(e)),h.success(`${g.UNINSTALL_REMOVED_FILE_PREFIX}${fc}`)}catch{return}try{await Hl.rmdir(this.rulesDir(e))}catch{}}};import*as pA from"path";var Bl=class extends Et{name=Ng;slug=Fg;hermesMdPath(e){return pA.join(e,Rg)}async installHooks(e){await Ct(this.hermesMdPath(e),Mr,Tt)}async uninstallHooks(e){await kr(this.hermesMdPath(e),`<!-- ${Tt} -->`,`<!-- ${Fr} -->`)}};function dM(){return[new Ml,new kl,new Gl,new xl,new Ul,new Bl]}function pM(t){return t.split(",").map(e=>e.trim().toLowerCase()).filter(Boolean)}async function Kl(t,e,r,n=dM()){if(e!==void 0){let i=pM(e),s=n.map(a=>a.slug),o=i.filter(a=>!s.includes(a));if(o.length>0)throw new Error(on.UNKNOWN_PLATFORMS(o.join(", "),s.join(", ")));return n.filter(a=>i.includes(a.slug))}if(r){let i=n.map(o=>({name:o.name,value:o.name,checked:!0})),s=await h.askCheckbox(t,i);return n.filter(o=>s.includes(o.name))}return n}import gM from"fs/promises";import gA from"path";var fM=30*6e4,mM=1e4,hM=3e4;async function $l(t,e,r){let n=gA.join(t,he,tg);await gM.mkdir(gA.dirname(n),{recursive:!0});let s=await y.resolve(A.ProcessLock)(n,{maxWaitMs:fM,heartbeatIntervalMs:mM,staleAfterMs:hM,onWaiting:r});try{return await e()}finally{await s.release()}}import*as Yt from"fs";import*as Mi from"path";var EM=["---","name: docuvia-exploring","description: >"," Use when exploring or navigating an unfamiliar codebase -- before reaching for"," Grep, Glob, or Read. Queries the local Docuvia knowledge graph for concepts,"," files, and symbols, and checks blast radius before editing. Falls back to raw"," file tools only when the graph returns nothing or the target is flagged unprocessed.","---","","# Explore the Codebase via Docuvia","","## When to use this skill","","You are exploring, navigating, or learning about a codebase. Before any Grep, Glob, or Read","call, query the knowledge graph first -- it is structurally aware and orders of magnitude","cheaper than raw file scanning.","","## Exploration workflow","","**Step 1 -- Query the graph for the concept.**","","Use the `docuvia_query` MCP tool (or CLI fallback):","```",'npx --no-install docuvia query "<concept_or_file>" --format=prompt',"```","","The result includes `match_type` (exact/keyword/neighbor) -- treat a non-`exact` match on","what should be a well-known symbol as a signal to cross-check with Grep/Glob.","","**Step 2 -- Check blast radius before editing.**","","Before modifying any file or symbol, run:","```","npx --no-install docuvia impact <symbolOrFile>","```","","This returns which other parts of the codebase would be affected, with a risk level","assessment. Stop and warn the user if it comes back HIGH or CRITICAL.","","**Step 3 -- Only fall back to raw file tools when:**","","- The graph returns empty results",'- The target is flagged `tier_b_status="unprocessed"` (unknown, not zero)',"- You need exact source text, formatting, or a diff","- `query` returns a non-`exact` `match_type` for what should be a well-known symbol","","## After making code changes","","If your change reflects a real architectural decision, rule, or notable rationale, stage it:","","```","npx --no-install docuvia analyze <file> --agent-authored --stage","```","","Pipe a JSON payload on stdin or pass `--decisions-file=<path>`. Staged decisions flush","into the knowledge graph automatically on the next commit touching that file."].join(`
180
+ `),_M=["---","name: docuvia-impact-analysis","description: >"," Use before making any code change to analyze blast radius -- which other parts of"," the codebase would be affected, with a risk level assessment. Also use after"," receiving a code review or diff to understand downstream impact.","---","","# Impact Analysis with Docuvia","","## When to use this skill","","You are about to modify code, or you have received a review/diff and need to understand","downstream impact. Always run impact analysis before touching shared interfaces, constants,","or widely-imported modules.","","## Impact analysis workflow","","**Step 1 -- Run impact analysis on the target.**","","```","npx --no-install docuvia impact <symbolOrFile>","```","",'Or via MCP: `docuvia_impact` with `{ "target": "<symbolOrFile>" }`',"","The result includes:","- `blastRadius`: array of affected nodes with filePath, edgeType, and depth","- `riskLevel`: LOW / MEDIUM / HIGH / CRITICAL / UNKNOWN","- L3 decision context explaining *why* each dependent matters",'- Entries with `"edgeSource": "lsp-fallback"` were recovered from raw call sites, not',' resolved edges -- treat them as "a call to this name exists here" and verify before'," relying on them","","**Step 2 -- Assess the risk level.**","","- **LOW**: Safe to proceed -- changes are localized","- **MEDIUM**: Review the affected files -- some cross-cutting concern may exist","- **HIGH**: Stop and warn the user -- significant downstream impact detected","- **CRITICAL**: Do not proceed without explicit user confirmation","","**Step 3 -- Cross-reference with query if needed.**","","If impact returns unexpected results or you need more context on a specific dependent,","query the graph:","```",'npx --no-install docuvia query "<dependent_symbol>" --format=prompt',"```","","**Step 4 -- After changes, stage decisions.**","","If your change reflects architectural rationale, stage it for the knowledge graph:","```","npx --no-install docuvia analyze <file> --agent-authored --stage","```"].join(`
181
+ `),SM=["---","name: docuvia-knowledge-graph","description: >"," Use when querying the Docuvia knowledge graph -- guides effective query construction,"," result interpretation (match types, L2/L3 data), and when to cross-check with raw"," file tools.","---","","# Querying the Knowledge Graph","","## When to use this skill","","You need to look up a concept, file, symbol, or architectural decision in the codebase.","The knowledge graph provides structural awareness that Grep/Glob/Read cannot match.","","## Query workflow","","**Step 1 -- Construct a targeted query.**","","Use the `docuvia_query` MCP tool (or CLI fallback):","```",'npx --no-install docuvia query "<target>" --format=prompt',"```","","Tips for effective queries:",'- Use exact symbol names for best results (`match_type: "exact"`)',"- Concept phrases work but may return `keyword` matches -- cross-check those","- File paths resolve to their containing module's structural data","- Use `--limit=N` to cap results when exploring broadly","","**Step 2 -- Interpret the result.**","","Each result includes:","- `matchType`: `exact` (high confidence) / `keyword` (medium) / `neighbor` (low)","- `node`: L2 structural data (type, filePath, key)","- `l3Decisions`: L3 rationale if available (why this code exists)","","**Step 3 -- Decide trust level.**","",'- `matchType: "exact"` on a well-known symbol -> trust it','- `matchType: "keyword"` or `"neighbor"` -> cross-check with Grep/Glob',"- Empty result -> fall back to raw file tools",'- `tier_b_status: "unprocessed"` -> graph has not seen this file yet, treat as unknown',"","**Step 4 -- Use impact for dependency analysis.**","","After finding a symbol, check who depends on it:","```","npx --no-install docuvia impact <symbolOrFile>","```"].join(`
182
+ `),TM=["---","name: docuvia-agent-authored","description: >"," Use after making code changes that reflect architectural decisions, rules, or"," notable rationale -- stages L3 decisions into the knowledge graph for future"," query/impact context. Supports both MCP tool and CLI fallback.","---","","# Stage Agent-Authored L3 Decisions","","## When to use this skill","","You have just made (or are about to commit) a code change that reflects:","- An architectural decision (why this approach was chosen)","- A rule or constraint (what must not be changed)","- Context that future agents need (why this code exists this way)","","## Staging decisions","","**Option A -- MCP tool (preferred, when available):**","","Use `docuvia_apply_decision` with:","```json","{",' "targetPath": "src/path/to/file.ts",',' "decisions": ['," {",' "title": "Decision title",',' "content": "Detailed rationale",',' "nodeType": "decision",',' "confidence": 0.9'," }"," ]","}","```","","**Option B -- CLI fallback:**","","```","npx --no-install docuvia analyze <file> --agent-authored --stage","```","","Pipe JSON on stdin or use `--decisions-file=<path>`.","","**Option C -- CLI (direct write, no staging):**","","```","npx --no-install docuvia analyze <file> --agent-authored","```","","## Decision fields","","- `title`: Short description of the decision","- `content`: Detailed rationale -- why this approach was chosen","- `nodeType`: One of `change`, `rule`, `decision`, `context`","- `confidence`: 0.0 to 1.0 -- how certain you are about this rationale","","## How it works","","Staged decisions (Options A/B) are flushed into `l3_nodes` automatically on the next git","commit that touches the target file -- via the post-commit hook's `--flush-staged-l3` step.","No manual flush step needed.","","Direct writes (Option C) persist immediately to `l3_nodes` with `source='agent-authored'`."].join(`
183
+ `),fA=[{dirName:"docuvia-exploring",content:EM},{dirName:"docuvia-impact-analysis",content:_M},{dirName:"docuvia-knowledge-graph",content:SM},{dirName:"docuvia-agent-authored",content:TM}];var mA=".claude/skills";function hA(t){let e=Mi.join(t,mA),r=[],n=[];for(let i of fA)AM(e,i)==="installed"?r.push(i.dirName):n.push(i.dirName);return{installed:r,skipped:n}}function EA(t){let e=Mi.join(t,mA),r=[];if(!Yt.existsSync(e))return r;let n=Yt.readdirSync(e,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()||!i.name.startsWith("docuvia-"))continue;let s=Mi.join(e,i.name);Yt.rmSync(s,{recursive:!0,force:!0}),r.push(i.name)}return r}function AM(t,e){let r=Mi.join(t,e.dirName),n=Mi.join(r,"SKILL.md");return Yt.existsSync(n)?"skipped":(Yt.mkdirSync(r,{recursive:!0}),Yt.writeFileSync(n,e.content,"utf-8"),"installed")}var yM=Tp.object({cwd:Tp.string().min(1,on.WORKSPACE_ROOT_EMPTY),platformFilter:Tp.string().optional()});async function OM(t){let e=h.spinner(g.INIT_START).start(),r=RM.randomUUID(),n=ee();n.onLog(i=>{i.level===ye.INFO&&(e.text=i.message)}),R.createScope(r),R.set(r,O.WORKSPACE_ROOT,t);try{let i=await X.init(r,n);i.partialFailure?e.warn(i.message):e.succeed(i.message)}catch(i){let s=i instanceof E||i instanceof Error?i.message:String(i);throw e.fail(g.INIT_FAILED+s),i}finally{R.deleteScope(r)}}async function IM(t,e,r){h.info(g.INIT_AGENT_HOOKS);let n=await Kl(g.INIT_HOOKS_SELECT,e,r);if(n.length===0){h.info(g.INIT_HOOKS_NONE_SELECTED);return}for(let i of n)await i.installHooks(t);h.success(g.INIT_HOOKS_SUCCESS),h.info(g.INIT_HOOKS_SUPPORTED)}async function _A(t=Yl.cwd(),e,r=!1,n=!1){let i=yM.parse({cwd:t,platformFilter:e});h.header(g.INIT_HEADER),r&&(await h.askConfirm(g.INIT_CONFIRM,!0)||(h.warn(g.INIT_ABORTED),Yl.exit(0)));let s=!1,o;await $l(i.cwd,async()=>{try{await OM(i.cwd)}catch{s=!0}if(!s)try{await IM(i.cwd,i.platformFilter,r)}catch(a){o=a}},()=>h.info(g.INIT_LOCK_WAITING)),s&&Yl.exit(1),o!==void 0&&(h.error(g.INIT_HOOKS_FAIL+o),Yl.exit(1)),n&&LM(t)}function LM(t){try{let e=hA(t);e.installed.length>0&&h.success(`Installed ${e.installed.length} skill(s): ${e.installed.join(", ")}`),e.skipped.length>0&&h.info(`Skipped ${e.skipped.length} existing skill(s): ${e.skipped.join(", ")}`)}catch(e){h.warn(`Skill installation failed: ${e instanceof Error?e.message:String(e)}`)}}import Ap from"process";import CM from"crypto";async function SA(t=Ap.cwd(),e=!1){h.header(g.CLEAN_HEADER),e&&(await h.askConfirm(g.CLEAN_CONFIRM,!1)||(h.warn(g.CLEAN_ABORTED),Ap.exit(0)));let r=h.spinner(g.CLEAN_START).start(),n=CM.randomUUID(),i=ee();i.onLog(s=>{s.level===ye.INFO&&(r.text=s.message)}),R.createScope(n),R.set(n,O.WORKSPACE_ROOT,t);try{let s=await X.clean(n,i);r.succeed(g.CLEAN_SUCCESS+s.message)}catch(s){let o=s instanceof E||s instanceof Error?s.message:String(s);r.fail(g.CLEAN_FAIL+o),Ap.exitCode=1}finally{R.deleteScope(n)}}import TA from"process";import NM from"crypto";async function AA(t=TA.cwd()){let e=h.spinner(g.STATUS_START).start(),r=NM.randomUUID(),n=ee();n.onLog(i=>{i.level===ye.INFO&&(e.text=i.message)}),R.createScope(r),R.set(r,O.WORKSPACE_ROOT,t);try{let i=await X.status(r,n);e.succeed(g.STATUS_SUCCESS),h.header(g.STATUS_HEADER);let s=i.tierBFilesTotal>0?(i.tierBFilesProcessed/i.tierBFilesTotal*100).toFixed(1):"0.0";h.table([{header:g.STATUS_COL_METRIC},{header:g.STATUS_COL_VALUE}],[[g.STATUS_METRIC_PROJECTS,String(i.projects)],[g.STATUS_METRIC_L2_NODES,String(i.l2Nodes)],[g.STATUS_METRIC_L3_DECISIONS,String(i.l3Nodes)],[g.STATUS_METRIC_TIER_B_COVERAGE,`${i.tierBFilesProcessed} / ${i.tierBFilesTotal} (${s}%)`],[g.STATUS_METRIC_TIER_C_QUEUE,String(i.tierCQueued)],[g.STATUS_METRIC_GRAPH_FRESHNESS,i.graphFreshness==="fresh"?g.STATUS_FRESHNESS_FRESH:i.graphFreshness==="stale"?g.STATUS_FRESHNESS_STALE:g.STATUS_FRESHNESS_UNKNOWN]])}catch(i){let s=i instanceof E||i instanceof Error?i.message:String(i);e.fail(g.STATUS_FAIL+s),TA.exitCode=1}finally{R.deleteScope(r)}}import Or from"process";import vM from"crypto";var q={INDENT_TWO:" ",NEWLINE:`
184
+ `,OPEN_PAREN:" (",CLOSE_PAREN:")",DOUBLE_QUOTE:'"',EMPTY:"",ELLIPSIS:"...",SHORT_SHA_LENGTH:7};import PM from"process";import{createInterface as DM}from"readline";async function Wl(){let t=DM({input:PM.stdin}),e=[];try{for await(let r of t)e.push(r)}finally{t.close()}return e.join(`
185
+ `).trim()}async function bM(t,e){if(t)return t;e||(h.error(g.PUBLISH_MISSING_PROJECT_ID),Or.exit(1)),h.info(g.PUBLISH_NO_PROJECT_ID_PROVIDED);let r=await h.askInput(g.PUBLISH_PROMPT_PROJECT_ID);return r||(h.error(g.PUBLISH_PROJECT_ID_REQUIRED),Or.exit(1)),r}function wM(){return!!Or.env.DOCUVIA_API_URL&&!!Or.env.MCP_PAT}async function FM(t){return t||(Or.stdin.isTTY?void 0:Wl())}async function MM(t,e,r,n){try{let i=await X.sync(t,e,n);r.succeed(g.PUBLISH_SUCCESS+" "+i.message)}catch(i){let s=i instanceof E||i instanceof Error?i.message:String(i);r.fail(g.PUBLISH_FAIL+s),Or.exitCode=1}finally{R.deleteScope(t)}}async function RA(t,e=Or.cwd(),r=!1){h.header(g.PUBLISH_HEADER);let n=await bM(t.projectId,r);if(!wM()){h.warn(g.PUBLISH_MISSING_ENV),h.warn(g.PUBLISH_SKIP);return}let i=await FM(t.commitSha),s=h.spinner(g.PUBLISH_START+n+q.ELLIPSIS).start(),o=vM.randomUUID(),a=ee();a.onLog(l=>{l.level===ye.INFO&&(s.text=l.message)}),R.createScope(o),R.set(o,O.WORKSPACE_ROOT,e),R.set(o,O.API_URL,Or.env.DOCUVIA_API_URL),R.set(o,O.PROJECT_ID,n),R.set(o,O.COMMIT_SHA,i||void 0),await MM(o,a,s,Or.env.MCP_PAT)}import we from"process";import jl from"crypto";import HM from"fs/promises";import{z as Hn}from"zod";function OA(t){if(!t)return;let e=t.trim();if(e.length!==0){if(e.startsWith("[")){let r;try{r=JSON.parse(e)}catch(n){throw new E(T.INVALID_INPUT,g.ANALYZE_LSP_ARGS_INVALID_JSON(String(n)))}if(!Array.isArray(r)||r.some(n=>typeof n!="string"))throw new E(T.INVALID_INPUT,g.ANALYZE_LSP_ARGS_INVALID_SHAPE);return r}return UM(e)}}function kM(t,e){return t==="\\"&&e!==void 0&&(e==='"'||e==="\\")}function GM(t){return t==='"'||t==="'"}function xM(t){return/\s/.test(t)}function yA(t,e){return e.length>0&&t.push(e),""}function UM(t){let e=[],r="",n=null;for(let i=0;i<t.length;i++){let s=t[i],o=t[i+1];if(n!==null){s===n?n=null:n==='"'&&kM(s,o)?(r+=o,i++):r+=s;continue}GM(s)?n=s:s==="\\"&&o!==void 0?(r+=o,i++):xM(s)?r=yA(e,r):r+=s}return yA(e,r),e}var BM=Hn.object({title:Hn.string().min(1),content:Hn.string(),nodeType:Hn.nativeEnum(un),confidence:Hn.number().min(0).max(1)}),KM=Hn.object({decisions:Hn.array(BM)});function IA(){let t=we.env.AI_DOCUVIA_INTEGRATIONS_OPENAI_BASE_URL,e=we.env.AI_DOCUVIA_INTEGRATIONS_OPENAI_API_KEY,r=we.env.AI_DOCUVIA_MODEL||we.env.AI_DOCUVIA_FAST_MODEL;return!t||!r?null:{llmBaseUrl:t,llmApiKey:e,llmModel:r}}async function $M(t){let e=t?await HM.readFile(t,H):we.stdin.isTTY?void 0:await Wl();if(!e)return;let r;try{r=JSON.parse(e)}catch(i){throw new E(T.INVALID_INPUT,g.ANALYZE_AGENT_AUTHORED_INVALID_JSON(String(i)))}let n=KM.safeParse(r);if(!n.success)throw new E(T.INVALID_INPUT,g.ANALYZE_AGENT_AUTHORED_INVALID_SHAPE(n.error.message));return n.data}function YM(){let t=we.env.DOCUVIA_TIER_C_DAILY_CALL_CAP,e=we.env.DOCUVIA_TIER_C_DAILY_TOKEN_CAP,r=we.env.DOCUVIA_TIER_C_WALL_CLOCK_MS,n=we.env.DOCUVIA_TIER_C_ITEM_CAP,i=we.env.DOCUVIA_TIER_C_LOAD_THRESHOLD;return{dailyCallCap:t?Number(t):void 0,dailyTokenCap:e?Number(e):void 0,wallClockMs:r?Number(r):void 0,itemCap:n?Number(n):void 0,loadThreshold:i?Number(i):void 0}}function WM(t,e){let r=we.env.DOCUVIA_LSP_ARGS,n=we.env.DOCUVIA_LSP_TIMEOUT_MS,i=we.env.DOCUVIA_LSP_MAX_PROCESSES,s=we.env.DOCUVIA_TIER_B_COMMIT_CAP,o=a=>{if(!a)return;let l=Number(a);if(!(Number.isNaN(l)||l<1||!Number.isInteger(l)))return l};return{lspBinaryOverride:we.env.DOCUVIA_LSP_BINARY,lspArgsOverride:OA(r),lspTimeoutMs:t??(n?Number(n):void 0),lspMaxProcesses:e??o(i),tierBCommitCap:s?Number(s):void 0}}function jM(t,e){e.succeed(g.ANALYZE_AUTO_FULL_SUCCESS),h.info(g.ANALYZE_PROJECT_TYPE+t.projectType),h.info(g.ANALYZE_SUGGESTED_TAGS+(t.suggestedTags.join(", ")||g.ANALYZE_NONE)),h.info(g.ANALYZE_AUTO_FULL_SUMMARY(t.filesParsed,t.filesRequested,t.filesFailed))}function VM(t,e){e.succeed(g.ANALYZE_AUTO_DELTA_SUCCESS),h.info(g.ANALYZE_AUTO_DELTA_SUMMARY(t.filesReparsed,t.filesDeleted,t.tierBQueued))}function zM(t,e){if(e.succeed(g.ANALYZE_FOCUSED_SUCCESS),t.decisions.length===0){h.info(g.ANALYZE_FOCUSED_NONE);return}for(let r of t.decisions)h.info(g.ANALYZE_DECISION_LINE(r.nodeType,r.title,r.confidence)),r.content&&h.log(g.ANALYZE_DECISION_CONTENT_PREFIX+r.content);h.info(g.ANALYZE_FOCUSED_PERSISTED(t.persisted,t.deduped))}function JM(t,e,r){t.degraded?(e.succeed(g.ANALYZE_TIER_B_DEGRADED(t.degradedReason??"")),r||(we.exitCode=1)):(e.succeed(g.ANALYZE_TIER_B_SUCCESS),h.info(g.ANALYZE_TIER_B_SUMMARY(t.filesProcessed,t.edgesApplied,t.filesFailed,t.filesFailedPermanent,t.filesSkippedNotApplicable??0,!!t.zeroProgressWatchdogTripped))),qM(t)}function qM(t){if(t.tierCQueued!==0){if(t.tierCSkipped){h.info(g.ANALYZE_TIER_C_SKIPPED(t.tierCSkippedReason??""));return}h.info(g.ANALYZE_TIER_C_SUMMARY(t.tierCProcessed,t.tierCPersisted,t.tierCFailed))}}function QM(t,e){if(t.skippedDisabled){e.succeed(g.ANALYZE_FLUSH_STAGED_L3_DISABLED_SUCCESS);return}e.succeed(g.ANALYZE_FLUSH_STAGED_L3_SUCCESS),h.info(g.ANALYZE_FLUSH_STAGED_L3_SUMMARY(t.flushed,t.deduped,t.stillPending)),t.noGraphToAttach&&h.warn(g.ANALYZE_FLUSH_STAGED_L3_NO_GRAPH_ADVICE)}function Rp(t,e,r){switch(t.kind){case Se.AUTO_FULL_INGESTION:jM(t,e);break;case Se.AUTO_DELTA:VM(t,e);break;case Se.AUTO_DELTA_NOOP:e.succeed(t.dirtyWorktree?g.ANALYZE_AUTO_NOOP_DIRTY_WORKTREE_SUCCESS:g.ANALYZE_AUTO_NOOP_SUCCESS);break;case Se.DECISION_EXTRACTION:zM(t,e);break;case Se.TIER_B_BATCH:JM(t,e,r);break;case Se.FLUSH_STAGED_L3:QM(t,e);break}}function LA(t,e,r=!1){return h.header(r?g.ANALYZE_STAGE_HEADER:t?g.ANALYZE_FOCUSED_HEADER:e?g.ANALYZE_TIER_B_HEADER:g.ANALYZE_HEADER),h.spinner(r?g.ANALYZE_STAGE_START+t+q.ELLIPSIS:t?g.ANALYZE_FOCUSED_START+t+q.ELLIPSIS:e?g.ANALYZE_TIER_B_START:g.ANALYZE_START).start()}function XM(t,e,r,n,i,s,o,a,l,c){R.createScope(t),R.set(t,O.WORKSPACE_ROOT,e),s&&R.set(t,O.FORCE,!0),r&&n?(R.set(t,O.TARGET_PATH,r),R.set(t,O.LLM_BASE_URL,n.llmBaseUrl),R.set(t,O.LLM_MODEL,n.llmModel)):i&&(R.set(t,O.ESCALATE_TO_LSP,!0),l&&R.set(t,O.TIER_B_FULL_RESYNC,!0),c&&R.set(t,O.TIER_C_DRAIN_ALL,!0),CA(t,o,a),ZM(t,n))}function ZM(t,e){e&&(R.set(t,O.LLM_BASE_URL,e.llmBaseUrl),R.set(t,O.LLM_MODEL,e.llmModel));let r=YM();r.dailyCallCap!==void 0&&R.set(t,O.TIER_C_DAILY_CALL_CAP,r.dailyCallCap),r.dailyTokenCap!==void 0&&R.set(t,O.TIER_C_DAILY_TOKEN_CAP,r.dailyTokenCap),r.wallClockMs!==void 0&&R.set(t,O.TIER_C_WALL_CLOCK_MS,r.wallClockMs),r.itemCap!==void 0&&R.set(t,O.TIER_C_ITEM_CAP,r.itemCap),r.loadThreshold!==void 0&&R.set(t,O.TIER_C_LOAD_THRESHOLD,r.loadThreshold)}function CA(t,e,r){let n=WM(e,r);n.lspBinaryOverride!==void 0&&R.set(t,O.LSP_BINARY_OVERRIDE,n.lspBinaryOverride),n.lspArgsOverride!==void 0&&R.set(t,O.LSP_ARGS_OVERRIDE,n.lspArgsOverride),n.lspTimeoutMs!==void 0&&R.set(t,O.LSP_TIMEOUT_MS,n.lspTimeoutMs),n.lspMaxProcesses!==void 0&&R.set(t,O.LSP_MAX_PROCESSES,n.lspMaxProcesses),n.tierBCommitCap!==void 0&&R.set(t,O.TIER_B_COMMIT_CAP,n.tierBCommitCap)}function yp(t,e,r,n){let i=t instanceof E||t instanceof Error?t.message:String(t),s=e?g.ANALYZE_FOCUSED_FAIL:r?g.ANALYZE_TIER_B_FAIL:g.ANALYZE_FAIL;n.fail(s+i),we.exitCode=1}async function ek(t,e,r){let n=jl.randomUUID();R.createScope(n),R.set(n,O.WORKSPACE_ROOT,t),CA(n,r);try{let i=ee(),s=await X.checkTierBGate(n,i);if(s.available)return!0;if(!e)return h.error(g.ANALYZE_TIER_B_GATE_FAILED(s.reason??"")),we.exitCode=1,!1;h.warn(g.ANALYZE_TIER_B_GATE_NOT_READY(s.reason??""));let o=await h.askConfirm(g.ANALYZE_TIER_B_GATE_PROMPT,!0);return o||h.info(g.ANALYZE_TIER_B_GATE_DECLINED),o}finally{R.deleteScope(n)}}async function tk(t,e,r){let n;try{n=await $M(r.decisionsFile)}catch(a){let l=a instanceof E||a instanceof Error?a.message:String(a);h.error(l),we.exitCode=1;return}if(!n){h.error(g.ANALYZE_AGENT_AUTHORED_MISSING_PAYLOAD),we.exitCode=1;return}let i=LA(t,!1,r.stage),s=jl.randomUUID(),o=ee();o.onLog(a=>{a.level===ye.INFO&&(i.text=a.message)}),R.createScope(s),R.set(s,O.WORKSPACE_ROOT,e),R.set(s,O.TARGET_PATH,t),R.set(s,O.AGENT_AUTHORED_DECISIONS,n.decisions);try{if(r.stage){let a=await X.stageAgentAuthoredDecisions(s,o);i.succeed(g.ANALYZE_STAGE_SUCCESS),h.info(g.ANALYZE_STAGE_SUMMARY(a.staged))}else{let a=await X.analyze(s,o);Rp(a,i,!1)}}catch(a){yp(a,t,!1,i)}finally{R.deleteScope(s)}}async function rk(t){h.header(g.ANALYZE_FLUSH_STAGED_L3_HEADER);let e=h.spinner(g.ANALYZE_FLUSH_STAGED_L3_START).start(),r=jl.randomUUID(),n=ee();n.onLog(i=>{i.level===ye.INFO&&(e.text=i.message)}),R.createScope(r),R.set(r,O.WORKSPACE_ROOT,t),R.set(r,O.FLUSH_STAGED_L3,!0);try{let i=await X.analyze(r,n);Rp(i,e,!1)}catch(i){yp(i,void 0,!1,e)}finally{R.deleteScope(r)}}async function nk(t,e,r){return r.agentAuthored?t?(await tk(t,e,r),!0):(h.error(g.ANALYZE_AGENT_AUTHORED_MISSING_TARGET),we.exitCode=1,!0):!1}async function ik(t,e){return e.flushStagedL3?(await rk(t),!0):!1}async function NA(t,e=we.cwd(),r={}){await ik(e,r)||await nk(t,e,r)||await sk(t,e,r)}async function sk(t,e,r){let n,i=!t&&!!r.escalateToLsp;if(t){let l=IA();if(!l){h.error(g.ANALYZE_LLM_MISSING_ENV),we.exitCode=1;return}n=l}else if(i&&(n=IA()??void 0,!r.fallbackAst&&!await ek(e,!!r.isInteractive,r.lspTimeoutMs)))return;let s=LA(t,i),o=jl.randomUUID(),a=ee();a.onLog(l=>{l.level===ye.INFO&&(s.text=l.message)}),XM(o,e,t,n,i,r.force,r.lspTimeoutMs,r.lspProcesses,r.full,r.tierCAll);try{let l=await X.analyze(o,a,n?.llmApiKey);Rp(l,s,!!r.fallbackAst)}catch(l){yp(l,t,i,s)}finally{R.deleteScope(o)}}import PA from"process";import ok from"crypto";var w={COMMIT_SHA:"--commitSha=",BASE_REF:"--baseRef=",ESCALATE_TO_LSP:"--escalate-to-lsp",FORMAT:"--format=",LIMIT:"--limit=",OUT:"--out=",JSON_ONLY:"--json-only",COLLAPSE:"--collapse=",PLATFORM:"--platform=",KEEP_DB:"--keep-db",SKIP_DB:"--skip-db",SKIP_GIT:"--skip-git",SKIP_HOOKS:"--skip-hooks",SKIP_LOGS:"--skip-logs",SKIP_LSP:"--skip-lsp",SKIP_LLM:"--skip-llm",FALLBACK_AST:"--fallback-ast",LSP_TIMEOUT:"--lsp-timeout=",LSP_PROCESSES:"--lsp-processes=",FULL:"--full",FIX:"--fix",HELP:"--help",HELP_SHORT:"-h",VERSION:"--version",VERSION_SHORT:"-v",FORCE:"--force",FORCE_SHORT:"-f",INTERACTIVE:"--interactive",INTERACTIVE_SHORT:"-i",AGENT_AUTHORED:"--agent-authored",DECISIONS_FILE:"--decisions-file=",STAGE:"--stage",FLUSH_STAGED_L3:"--flush-staged-l3",TIER_C_ALL:"--tier-c-all",SKILLS:"--skills"},Wt={HUMAN:"human",PROMPT:"prompt",JSON:"json"};function Vl(t,e){t.onLog(r=>{r.level===ye.INFO&&e&&(e.text=r.message)})}function ki(t){return t instanceof E||t instanceof Error?t.message:String(t)}function ak(t){let e=q.INDENT_TWO+q.INDENT_TWO,r=e+q.INDENT_TWO,n=t.flatMap(i=>i.impactedBy.filter(s=>s.why&&s.why.length>0).map(s=>({file:i.file,entry:s})));if(n.length!==0){h.log(""),h.section(g.REVIEW_WHY_HEADER);for(let{file:i,entry:s}of n){h.log(q.INDENT_TWO+s.name+q.OPEN_PAREN+i+q.CLOSE_PAREN);for(let o of s.why??[])h.log(e+g.REVIEW_WHY_PREFIX+o.title),o.content&&h.log(r+o.content.split(q.NEWLINE).join(q.NEWLINE+r))}}}function lk(t,e,r){r.succeed(g.REVIEW_SUCCESS+(e?g.REVIEW_AGAINST+e:"")),h.log(""),h.log(g.REVIEW_FILES_CHANGED+t.filesChanged.length);let n=g.REVIEW_RISK_PREFIX+t.riskLevel;t.riskLevel===$e.CRITICAL?h.error(n):t.riskLevel===$e.HIGH?h.warn(n):h.log(n),h.log(""),h.log(t.analysis),ak(t.affectedNodes)}async function DA(t,e={},r=PA.cwd()){let n=e.format===Wt.JSON;n||h.header(g.REVIEW_HEADER);let i=n?void 0:h.spinner(g.REVIEW_START).start(),s=ok.randomUUID(),o=ee();Vl(o,i),R.createScope(s),R.set(s,O.WORKSPACE_ROOT,r),t&&R.set(s,O.BASE_REF,t);try{let a=await X.review(s,o);i?lk(a,t,i):h.log(JSON.stringify(a,null,2))}catch(a){let l=ki(a);i?i.fail(g.REVIEW_FAIL+l):h.error(g.REVIEW_FAIL+l),PA.exitCode=1}finally{R.deleteScope(s)}}import Op from"process";import ck from"crypto";function uk(t,e){if(!e||e.length===0)return;let r=q.INDENT_TWO,n=r+q.INDENT_TWO,i=n+q.INDENT_TWO;h.log(r+g.IMPACT_ENTRY_WHY_LABEL(t));for(let s of e)h.log(n+g.IMPACT_WHY_PREFIX+s.title),s.content&&h.log(i+s.content.split(q.NEWLINE).join(q.NEWLINE+i))}function dk(t){let e=t.some(r=>r.edgeSource!==void 0);h.table([{header:g.IMPACT_COL_NAME},{header:g.IMPACT_COL_TYPE},...e?[{header:g.IMPACT_COL_SOURCE}]:[]],t.map(r=>[r.name,r.type,...e?[r.edgeSource??g.IMPACT_EDGE_SOURCE_STATIC]:[]]))}function pk(t,e,r,n,i){if(h.header(g.IMPACT_BLAST_RADIUS_HEADER),t.length===0)h.warn(g.IMPACT_NO_DEPENDENTS),n&&h.warn(n),r&&r.workspaceFilesProcessed<r.workspaceFilesTotal&&h.warn(g.IMPACT_TIER_B_INCOMPLETE(r.workspaceFilesTotal-r.workspaceFilesProcessed,r.workspaceFilesTotal));else{dk(t),h.log(q.EMPTY);for(let o of t)uk(o.name,o.why)}i&&h.warn(g.IMPACT_RISK_NOTE_PREFIX+i),h.log(q.EMPTY);let s=g.IMPACT_RISK_PREFIX+e;e===$e.CRITICAL?h.error(s):e===$e.HIGH||e===$e.UNKNOWN?h.warn(s):h.log(s),h.log(q.EMPTY)}function gk(t,e,r){r.succeed(g.IMPACT_SUCCESS+q.DOUBLE_QUOTE+e+q.DOUBLE_QUOTE),h.log(""),pk(t.blastRadius,t.riskLevel,t.tierBCoverage,t.coverageNote,t.riskNote)}function fk(t,e){if(t){t.warn(g.IMPACT_NOT_FOUND+q.DOUBLE_QUOTE+e+q.DOUBLE_QUOTE);return}h.log("null")}async function vA(t,e={},r=Op.cwd()){let n=e.format===Wt.JSON;if(n||h.header(g.IMPACT_HEADER),!t){h.error(g.IMPACT_MISSING_TARGET),Op.exitCode=1;return}let i=n?void 0:h.spinner(g.IMPACT_START+q.DOUBLE_QUOTE+t+q.DOUBLE_QUOTE+q.ELLIPSIS).start(),s=ck.randomUUID(),o=ee();Vl(o,i),R.createScope(s),R.set(s,O.WORKSPACE_ROOT,r),R.set(s,O.TARGET,t);try{let a=await X.impact(s,o);if(!a){fk(i,t);return}i?gk(a,t,i):h.log(JSON.stringify(a,null,2))}catch(a){let l=ki(a);i?i.fail(g.IMPACT_FAIL+l):h.error(g.IMPACT_FAIL+l),Op.exitCode=1}finally{R.deleteScope(s)}}import Jl from"process";import Tk from"crypto";var Ee={CONTEXT_START:"<docuvia_context>",CONTEXT_END:"</docuvia_context>",L2_START_PREFIX:' <l2_module name="',L2_TYPE_MID:'" type="',L2_FILE_MID:'" file="',L2_MATCH_TYPE_MID:'" match_type="',L2_START_SUFFIX:'">',L2_END:" </l2_module>",L3_START_PREFIX:' <l3_decision title="',L3_SOURCE_MID:'" source="',L3_CONFIDENCE_MID:'" confidence="',L3_COMMIT_MID:'" commit="',L3_CREATED_AT_MID:'" created_at="',L3_VALIDITY_MID:'" validity="',L3_START_SUFFIX:'">',L3_CONTENT_PREFIX:" ",L3_END:" </l3_decision>",INCOMING_START:" <incoming>",INCOMING_END:" </incoming>",CALLER_PREFIX:' <caller name="',CALLER_MID:'" relation="',CALLER_SUFFIX:'" />',OUTGOING_START:" <outgoing>",OUTGOING_END:" </outgoing>",CALLEE_PREFIX:' <callee name="',CALLEE_MID:'" relation="',CALLEE_SUFFIX:'" />',INCOMING_UNPROCESSED_PREFIX:' <incoming tier_b_status="unprocessed" note="',OUTGOING_UNPROCESSED_PREFIX:' <outgoing tier_b_status="unprocessed" note="',UNPROCESSED_SUFFIX:'" />'};function mk(t){let e=Ee.L3_START_PREFIX+t.title;return t.source&&(e+=Ee.L3_SOURCE_MID+t.source),t.confidence!==void 0&&t.confidence!==null&&(e+=Ee.L3_CONFIDENCE_MID+String(t.confidence)),t.commitHash&&(e+=Ee.L3_COMMIT_MID+t.commitHash),t.createdAt&&(e+=Ee.L3_CREATED_AT_MID+t.createdAt),t.validityStatus&&(e+=Ee.L3_VALIDITY_MID+t.validityStatus),e+Ee.L3_START_SUFFIX}function hk(t){let e=[];if(t.l2){let r=Ee.L2_START_PREFIX+t.l2.name;t.l2.type&&(r+=Ee.L2_TYPE_MID+t.l2.type),t.l2.filePath&&(r+=Ee.L2_FILE_MID+t.l2.filePath),r+=Ee.L2_MATCH_TYPE_MID+t.l2.matchType,e.push(r+Ee.L2_START_SUFFIX)}for(let r of t.l3)e.push(mk(r)),e.push(Ee.L3_CONTENT_PREFIX+(r.content||q.EMPTY)),e.push(Ee.L3_END);return t.l2&&e.push(Ee.L2_END),e}function Ek(t,e){if(t.length>0){let r=[Ee.INCOMING_START];for(let n of t)r.push(Ee.CALLER_PREFIX+n.name+Ee.CALLER_MID+n.linkType+Ee.CALLER_SUFFIX);return r.push(Ee.INCOMING_END),r}return e&&e.workspaceFilesProcessed<e.workspaceFilesTotal?[Ee.INCOMING_UNPROCESSED_PREFIX+g.QUERY_TIER_B_INCOMING_UNPROCESSED(e.workspaceFilesTotal-e.workspaceFilesProcessed,e.workspaceFilesTotal)+Ee.UNPROCESSED_SUFFIX]:[]}function _k(t,e){if(t.length>0){let r=[Ee.OUTGOING_START];for(let n of t)r.push(Ee.CALLEE_PREFIX+n.name+Ee.CALLEE_MID+n.linkType+Ee.CALLEE_SUFFIX);return r.push(Ee.OUTGOING_END),r}return e&&e.ownFileLastProcessedAt===null?[Ee.OUTGOING_UNPROCESSED_PREFIX+g.QUERY_TIER_B_OUTGOING_UNPROCESSED+Ee.UNPROCESSED_SUFFIX]:[]}function Sk(t){let e=t.context?.incoming??[],r=t.context?.outgoing??[],n=t.context?.tierBCoverage;return e.length===0&&r.length===0&&!n?[]:[...Ek(e,n),..._k(r,n)]}function zl(t){return[Ee.CONTEXT_START,...hk(t),...Sk(t),Ee.CONTEXT_END].join(q.NEWLINE)}var Ak={exact:g.QUERY_MATCH_TYPE_EXACT,keyword:g.QUERY_MATCH_TYPE_KEYWORD,neighbor:g.QUERY_MATCH_TYPE_NEIGHBOR};function Rk(t){if(t.l2){let e=g.QUERY_L2_PREFIX+t.l2.name;t.l2.filePath&&(e+=q.OPEN_PAREN+t.l2.filePath+q.CLOSE_PAREN),e+=Ak[t.l2.matchType],h.info(e)}else h.warn(g.QUERY_NO_L2)}function yk(t){let e=[];return t.source&&e.push(`source=${t.source}`),t.commitHash&&e.push(`commit=${t.commitHash.slice(0,q.SHORT_SHA_LENGTH)}`),t.validityStatus&&e.push(`validity=${t.validityStatus}`),e}function Ok(t){for(let e of t){let r=yk(e);h.success(g.QUERY_L3_PREFIX+e.title+(r.length>0?g.QUERY_L3_PROVENANCE(r):"")),e.content&&h.log(q.INDENT_TWO+e.content.split(q.NEWLINE).join(q.NEWLINE+q.INDENT_TWO)),h.log(q.EMPTY)}}function bA(t,e,r){if(t.length===0){if(!r)return;h.section(e),h.warn(r),h.log(q.EMPTY);return}h.section(e),h.table([{header:g.QUERY_COL_NAME},{header:g.QUERY_COL_RELATION}],t.map(n=>[n.name,n.linkType])),h.log(q.EMPTY)}function Ik(t,e){if(!(!t||!e||e.workspaceFilesProcessed>=e.workspaceFilesTotal))return g.QUERY_TIER_B_INCOMING_UNPROCESSED(e.workspaceFilesTotal-e.workspaceFilesProcessed,e.workspaceFilesTotal)}function Lk(t,e){if(!(!t||!e||e.ownFileLastProcessedAt!==null))return g.QUERY_TIER_B_OUTGOING_UNPROCESSED}function Ck(t){h.header(g.QUERY_CONTEXT_HEADER),Rk(t),h.log(q.EMPTY),Ok(t.l3);let e=t.context?.incoming??[],r=t.context?.outgoing??[],n=t.context?.tierBCoverage,i=Ik(e.length===0,n),s=Lk(r.length===0,n);bA(e,g.QUERY_INCOMING_HEADER,i),bA(r,g.QUERY_OUTGOING_HEADER,s),h.log(q.EMPTY)}async function Nk(t,e){if(t)return t;e||(h.error(g.QUERY_MISSING_TARGET),Jl.exit(1)),h.header(g.QUERY_HEADER);let r=await h.askInput(g.QUERY_PROMPT_TARGET);return r||(h.error(g.QUERY_MISSING_TARGET_NON_TTY),Jl.exit(1)),r}function Pk(t){if(t!==void 0&&(!Number.isInteger(t)||t<=0)){h.warn(g.QUERY_INVALID_LIMIT+t);return}return t}function Dk(t,e,r){if(t)return;let n=h.spinner(g.QUERY_START+q.DOUBLE_QUOTE+e+q.DOUBLE_QUOTE+q.ELLIPSIS).start();return r.onLog(i=>{i.level===ye.INFO&&(n.text=i.message)}),n}async function vk(t,e,r,n,i,s){R.createScope(t),R.set(t,O.WORKSPACE_ROOT,r),R.set(t,O.TARGET,n),i!==void 0&&R.set(t,O.LIMIT,i);try{let o=await X.query(t,e);return s&&(s.succeed(g.QUERY_FOUND+q.DOUBLE_QUOTE+n+q.DOUBLE_QUOTE),h.log("")),o}catch(o){let a=ki(o);s?s.fail(g.QUERY_FAIL+a):h.error(g.QUERY_FAIL+a),Jl.exitCode=1;return}finally{R.deleteScope(t)}}async function wA(t,e={},r=Jl.cwd(),n=!1){let i=await Nk(t,n),s=e.format===Wt.PROMPT||e.format===Wt.JSON,o=Pk(e.limit),a=Tk.randomUUID(),l=ee(),c=Dk(s,i,l),u=await vk(a,l,r,i,o,c);u&&(e.format===Wt.JSON?h.log(JSON.stringify(u,null,2)):e.format===Wt.PROMPT?h.log(zl(u)):Ck(u))}import Ip from"fs/promises";import Gi from"path";import GA from"process";import Kk from"crypto";function FA(t){let e=JSON.stringify(t).replace(/</g,"\\u003c"),r=`
186
+ `,n=[];return n.push(bk(t)),n.push(wk()),n.push(Fk(e)),n.push("</body>"),n.push("</html>"),n.join(r)+r}function bk(t){let e=[];return e.push("<!DOCTYPE html>"),e.push('<html lang="en">'),e.push("<head>"),e.push('<meta charset="UTF-8">'),e.push('<meta name="viewport" content="width=device-width, initial-scale=1">'),e.push("<title>Docuvia Topology - "+Bk(t.workspaceRoot)+"</title>"),e.push("<style>"),e.push("* { box-sizing: border-box; margin: 0; padding: 0; }"),e.push("body { background: #0f1420; color: #dbe2ef; font-family: sans-serif; display: flex; height: 100vh; overflow: hidden; }"),e.push("#graph { flex: 1; cursor: grab; }"),e.push("#graph.dragging { cursor: grabbing; }"),e.push("#sidebar { width: 360px; background: #161c2c; border-right: 1px solid #263048; display: flex; flex-direction: column; overflow: hidden; }"),e.push(".panel { padding: 12px; border-bottom: 1px solid #263048; }"),e.push(".panel h3 { font-size: 12px; color: #8b98b8; margin-bottom: 8px; text-transform: uppercase; }"),e.push("#search { width: 100%; background: #0f1420; border: 1px solid #33405f; color: #dbe2ef; padding: 7px 10px; border-radius: 6px; font-size: 13px; outline: none; }"),e.push("#search-results { max-height: 130px; overflow-y: auto; margin-top: 6px; }"),e.push(".search-item, .neighbor-item { padding: 4px 6px; cursor: pointer; border-radius: 4px; font-size: 12px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }"),e.push(".search-item:hover, .neighbor-item:hover { background: #263048; }"),e.push("#info { font-size: 13px; line-height: 1.65; min-height: 120px; }"),e.push("#info .muted { color: #5d6a8a; font-style: italic; }"),e.push("#info b { color: #f1f4fb; }"),e.push(".kind-badge { display: inline-block; padding: 1px 7px; border-radius: 9px; font-size: 11px; margin-left: 6px; }"),e.push(".kind-file { background: #2a4d7a; } .kind-symbol { background: #3a6b4f; } .kind-decision { background: #8a6d1f; }"),e.push("#neighbors { max-height: 150px; overflow-y: auto; margin-top: 4px; }"),e.push("#legend { flex: 1; overflow-y: auto; padding: 12px; }"),e.push(".legend-item { display: flex; align-items: center; gap: 8px; padding: 4px 2px; cursor: pointer; border-radius: 4px; font-size: 12px; }"),e.push(".legend-item:hover { background: #263048; }"),e.push(".legend-item.off { opacity: 0.3; }"),e.push(".legend-dot { width: 11px; height: 11px; border-radius: 50%; flex-shrink: 0; }"),e.push(".legend-label { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }"),e.push(".legend-count { color: #5d6a8a; font-size: 11px; }"),e.push("#stats { padding: 10px 12px; border-top: 1px solid #263048; font-size: 11px; color: #5d6a8a; }"),e.push("#controls { position: absolute; top: 16px; right: 16px; display: flex; gap: 8px; z-index: 10; }"),e.push(".btn { background: #161c2c; color: #dbe2ef; border: 1px solid #33405f; padding: 6px 10px; border-radius: 6px; cursor: pointer; font-size: 13px; font-weight: bold; outline: none; }"),e.push(".btn:hover { background: #263048; border-color: #5b8def; }"),e.push("</style>"),e.push("</head>"),e.join(`
187
+ `)}function wk(){let t=[];return t.push("<body>"),t.push('<div id="controls">'),t.push('<button class="btn" id="btn-zoom-in" title="Zoom In">+</button>'),t.push('<button class="btn" id="btn-zoom-out" title="Zoom Out">-</button>'),t.push('<button class="btn" id="btn-fit" title="Fit View">Fit View</button>'),t.push("</div>"),t.push('<div id="sidebar">'),t.push('<div class="panel">'),t.push('<input id="search" type="text" placeholder="Search nodes..." autocomplete="off">'),t.push('<div id="search-results"></div>'),t.push("</div>"),t.push('<div class="panel">'),t.push("<h3>Node Info</h3>"),t.push('<div id="info"></div>'),t.push('<div id="neighbors"></div>'),t.push("</div>"),t.push('<div id="legend"><h3>Groups</h3><div id="legend-items"></div></div>'),t.push('<div id="stats"></div>'),t.push("</div>"),t.push('<canvas id="graph"></canvas>'),t.join(`
188
+ `)}function Fk(t){return["<script>",Mk(t),kk(),Gk(),xk(),Uk(),Hk(),"</script>"].join(`
189
+ `)}function Mk(t){let e=[];return e.push('"use strict";'),e.push("var GRAPH = "+t+";"),e.push('var PALETTE = ["#4E79A7","#F28E2B","#E15759","#76B7B2","#59A14F","#EDC948","#B07AA1","#FF9DA7","#9C755F","#BAB0AC","#5B8DEF","#8CD17D"];'),e.push('var DECISION_COLOR = "#E8B931";'),e.push('var canvas = document.getElementById("graph");'),e.push('var ctx = canvas.getContext("2d");'),e.push("var nodes = GRAPH.nodes.map(function (n) { return Object.assign({ x: 0, y: 0, vx: 0, vy: 0 }, n); });"),e.push("var nodeById = {};"),e.push("nodes.forEach(function (n) { nodeById[n.id] = n; });"),e.push("var links = GRAPH.links.filter(function (l) { return nodeById[l.source] && nodeById[l.target]; });"),e.push("var incoming = {}, outgoing = {};"),e.push("links.forEach(function (l) {"),e.push(" (incoming[l.target] = incoming[l.target] || []).push(l);"),e.push(" (outgoing[l.source] = outgoing[l.source] || []).push(l);"),e.push("});"),e.push("var maxDeg = 1;"),e.push("nodes.forEach(function (n) { if (n.degree > maxDeg) maxDeg = n.degree; });"),e.push("var groupCenters = {};"),e.push("var R = 160 * Math.sqrt(Math.max(GRAPH.groups.length, 1));"),e.push("GRAPH.groups.forEach(function (g, i) {"),e.push(" var a = (2 * Math.PI * i) / Math.max(GRAPH.groups.length, 1);"),e.push(" groupCenters[g.id] = { x: R * Math.cos(a), y: R * Math.sin(a) };"),e.push("});"),e.push("nodes.forEach(function (n, i) {"),e.push(" var c = groupCenters[n.group] || { x: 0, y: 0 };"),e.push(" var a = i * 2.399963;"),e.push(" var r = 20 + 90 * Math.sqrt((i % 97) / 97);"),e.push(" n.x = c.x + r * Math.cos(a);"),e.push(" n.y = c.y + r * Math.sin(a);"),e.push("});"),e.join(`
190
+ `)}function kk(){let t=[];return t.push("var ticksLeft = 300;"),t.push("function tick() {"),t.push(" var i, j, n, m, dx, dy, d2, f;"),t.push(" for (i = 0; i < nodes.length; i++) {"),t.push(" n = nodes[i];"),t.push(" for (j = i + 1; j < nodes.length; j++) {"),t.push(" m = nodes[j];"),t.push(" dx = n.x - m.x; dy = n.y - m.y;"),t.push(" d2 = dx * dx + dy * dy;"),t.push(" if (d2 > 60000 || d2 === 0) continue;"),t.push(" f = 3000 / d2;"),t.push(" dx *= f; dy *= f;"),t.push(" n.vx += dx; n.vy += dy; m.vx -= dx; m.vy -= dy;"),t.push(" }"),t.push(" }"),t.push(" links.forEach(function (l) {"),t.push(" var a = nodeById[l.source], b = nodeById[l.target];"),t.push(" var ddx = b.x - a.x, ddy = b.y - a.y;"),t.push(" var dist = Math.sqrt(ddx * ddx + ddy * ddy) || 1;"),t.push(' var rest = l.linkType === "contains" || l.linkType === "decision" ? 60 : 140;'),t.push(" var s = 0.06 * (dist - rest) / dist;"),t.push(" ddx *= s; ddy *= s;"),t.push(" a.vx += ddx; a.vy += ddy; b.vx -= ddx; b.vy -= ddy;"),t.push(" });"),t.push(" nodes.forEach(function (p) {"),t.push(" var c = groupCenters[p.group] || { x: 0, y: 0 };"),t.push(" p.vx += (c.x - p.x) * 0.015 + (0 - p.x) * 0.002;"),t.push(" p.vy += (c.y - p.y) * 0.015 + (0 - p.y) * 0.002;"),t.push(" p.vx *= 0.8; p.vy *= 0.8;"),t.push(" p.x += p.vx; p.y += p.vy;"),t.push(" });"),t.push("}"),t.push("var scale = 1, ox = 0, oy = 0;"),t.push("function resize() {"),t.push(" canvas.width = canvas.clientWidth * devicePixelRatio;"),t.push(" canvas.height = canvas.clientHeight * devicePixelRatio;"),t.push(" draw();"),t.push("}"),t.push("function fitView() {"),t.push(" var minX = 1e9, minY = 1e9, maxX = -1e9, maxY = -1e9;"),t.push(" nodes.forEach(function (n) {"),t.push(" if (n.x < minX) minX = n.x; if (n.x > maxX) maxX = n.x;"),t.push(" if (n.y < minY) minY = n.y; if (n.y > maxY) maxY = n.y;"),t.push(" });"),t.push(" var w = canvas.clientWidth, h = canvas.clientHeight;"),t.push(" scale = Math.min(w / (maxX - minX + 200), h / (maxY - minY + 200), 2);"),t.push(" ox = w / 2 - scale * (minX + maxX) / 2;"),t.push(" oy = h / 2 - scale * (minY + maxY) / 2;"),t.push("}"),t.push("var selected = null, hiddenGroups = {}, blast = null;"),t.push("function computeBlast(id) {"),t.push(" var seen = {}; seen[id] = 0;"),t.push(" var frontier = [id], depth = 0;"),t.push(" while (frontier.length && depth < 3) {"),t.push(" var next = [];"),t.push(" frontier.forEach(function (nid) {"),t.push(" (incoming[nid] || []).forEach(function (l) {"),t.push(" if (!(l.source in seen)) { seen[l.source] = depth + 1; next.push(l.source); }"),t.push(" });"),t.push(" });"),t.push(" frontier = next; depth++;"),t.push(" }"),t.push(" return seen;"),t.push("}"),t.push("function nodeRadius(n) {"),t.push(' return n.kind === "decision" ? 6 : 6 + 14 * Math.sqrt(n.degree / maxDeg);'),t.push("}"),t.push("function nodeColor(n) {"),t.push(' if (n.kind === "decision") return DECISION_COLOR;'),t.push(" return PALETTE[n.group % PALETTE.length];"),t.push("}"),t.push("function convexHull(pts) {"),t.push(" if (pts.length < 3) return pts;"),t.push(" pts = pts.slice().sort(function (a, b) { return a.x - b.x || a.y - b.y; });"),t.push(" var cross = function (o, a, b) { return (a.x - o.x) * (b.y - o.y) - (a.y - o.y) * (b.x - o.x); };"),t.push(" var lower = [], upper = [], k;"),t.push(" for (k = 0; k < pts.length; k++) {"),t.push(" while (lower.length >= 2 && cross(lower[lower.length - 2], lower[lower.length - 1], pts[k]) <= 0) lower.pop();"),t.push(" lower.push(pts[k]);"),t.push(" }"),t.push(" for (k = pts.length - 1; k >= 0; k--) {"),t.push(" while (upper.length >= 2 && cross(upper[upper.length - 2], upper[upper.length - 1], pts[k]) <= 0) upper.pop();"),t.push(" upper.push(pts[k]);"),t.push(" }"),t.push(" lower.pop(); upper.pop();"),t.push(" return lower.concat(upper);"),t.push("}"),t.join(`
191
+ `)}function Gk(){let t=[];return t.push("function draw() {"),t.push(" ctx.setTransform(devicePixelRatio, 0, 0, devicePixelRatio, 0, 0);"),t.push(" ctx.clearRect(0, 0, canvas.clientWidth, canvas.clientHeight);"),t.push(" ctx.setTransform(devicePixelRatio * scale, 0, 0, devicePixelRatio * scale, devicePixelRatio * ox, devicePixelRatio * oy);"),t.push(" GRAPH.groups.forEach(function (g) {"),t.push(" if (hiddenGroups[g.id]) return;"),t.push(" var pts = nodes.filter(function (n) { return n.group === g.id; });"),t.push(" if (pts.length < 2) return;"),t.push(" var hull = convexHull(pts);"),t.push(" var cx = 0, cy = 0;"),t.push(" hull.forEach(function (p) { cx += p.x; cy += p.y; });"),t.push(" cx /= hull.length; cy /= hull.length;"),t.push(" var color = PALETTE[g.id % PALETTE.length];"),t.push(" ctx.beginPath();"),t.push(" hull.forEach(function (p, idx) {"),t.push(" var ex = cx + (p.x - cx) * 1.25, ey = cy + (p.y - cy) * 1.25;"),t.push(" if (idx === 0) ctx.moveTo(ex, ey); else ctx.lineTo(ex, ey);"),t.push(" });"),t.push(" ctx.closePath();"),t.push(" ctx.globalAlpha = 0.07; ctx.fillStyle = color; ctx.fill();"),t.push(" ctx.globalAlpha = 0.3; ctx.strokeStyle = color; ctx.lineWidth = 1.5 / scale; ctx.stroke();"),t.push(" ctx.globalAlpha = 0.75; ctx.fillStyle = color;"),t.push(' ctx.font = "bold " + (13 / scale) + "px sans-serif";'),t.push(" ctx.fillText(g.label, cx, cy - (10 / scale));"),t.push(" ctx.globalAlpha = 1;"),t.push(" });"),t.push(" links.forEach(function (l) {"),t.push(" var a = nodeById[l.source], b = nodeById[l.target];"),t.push(" if (hiddenGroups[a.group] || hiddenGroups[b.group]) return;"),t.push(" var inBlast = blast && l.target in blast && l.source in blast;"),t.push(" ctx.beginPath();"),t.push(" ctx.moveTo(a.x, a.y);"),t.push(" ctx.lineTo(b.x, b.y);"),t.push(" if (blast && !inBlast) { ctx.globalAlpha = 0.04; }"),t.push(' else if (l.linkType === "contains") { ctx.globalAlpha = 0.10; }'),t.push(' else if (l.linkType === "decision") { ctx.globalAlpha = 0.5; ctx.setLineDash([4 / scale, 3 / scale]); }'),t.push(" else { ctx.globalAlpha = inBlast ? 0.9 : 0.35; }"),t.push(' ctx.strokeStyle = inBlast ? "#ff6b6b" : (l.linkType === "decision" ? DECISION_COLOR : "#8b98b8");'),t.push(" ctx.lineWidth = (inBlast ? 2 : 1) / scale;"),t.push(" ctx.stroke();"),t.push(" ctx.setLineDash([]);"),t.push(" ctx.globalAlpha = 1;"),t.push(" });"),t.push(" nodes.forEach(function (n) {"),t.push(" if (hiddenGroups[n.group]) return;"),t.push(" var r = nodeRadius(n);"),t.push(" var dimmed = blast && !(n.id in blast);"),t.push(" ctx.globalAlpha = dimmed ? 0.12 : 1;"),t.push(" ctx.fillStyle = nodeColor(n);"),t.push(' if (n.kind === "decision") {'),t.push(" ctx.fillRect(n.x - r, n.y - r, r * 2, r * 2);"),t.push(" } else {"),t.push(" ctx.beginPath();"),t.push(" ctx.arc(n.x, n.y, r, 0, 2 * Math.PI);"),t.push(" ctx.fill();"),t.push(' if (n.kind === "file") {'),t.push(' ctx.strokeStyle = "#f1f4fb"; ctx.lineWidth = 1 / scale;'),t.push(" ctx.stroke();"),t.push(" }"),t.push(" }"),t.push(" if (selected && n.id === selected.id) {"),t.push(' ctx.strokeStyle = "#ffffff"; ctx.lineWidth = 2.5 / scale;'),t.push(" ctx.beginPath(); ctx.arc(n.x, n.y, r + 3 / scale, 0, 2 * Math.PI); ctx.stroke();"),t.push(" }"),t.push(" ctx.globalAlpha = 1;"),t.push(" });"),t.push(' ctx.fillStyle = "#dbe2ef";'),t.push(' ctx.font = (11 / scale) + "px sans-serif";'),t.push(" nodes.forEach(function (n) {"),t.push(" if (hiddenGroups[n.group]) return;"),t.push(" var show = n.degree >= maxDeg * 0.3 || (selected && n.id === selected.id) || (blast && n.id in blast && scale > 0.7);"),t.push(" if (!show) return;"),t.push(" if (blast && !(n.id in blast)) return;"),t.push(' ctx.fillText(n.label.length > 34 ? n.label.slice(0, 33) + "..." : n.label, n.x + nodeRadius(n) + 3 / scale, n.y + 4 / scale);'),t.push(" });"),t.push("}"),t.join(`
192
+ `)}function xk(){let t=[];return t.push("var dragging = false, moved = false, lastX = 0, lastY = 0;"),t.push('canvas.addEventListener("mousedown", function (e) { dragging = true; moved = false; lastX = e.clientX; lastY = e.clientY; canvas.classList.add("dragging"); });'),t.push('window.addEventListener("mousemove", function (e) {'),t.push(" if (!dragging) return;"),t.push(" var dx = e.clientX - lastX, dy = e.clientY - lastY;"),t.push(" if (Math.abs(dx) + Math.abs(dy) > 3) moved = true;"),t.push(" ox += dx; oy += dy; lastX = e.clientX; lastY = e.clientY;"),t.push(" draw();"),t.push("});"),t.push('window.addEventListener("mouseup", function (e) {'),t.push(' canvas.classList.remove("dragging");'),t.push(" if (dragging && !moved) handleClick(e);"),t.push(" dragging = false;"),t.push("});"),t.push('canvas.addEventListener("wheel", function (e) {'),t.push(" e.preventDefault();"),t.push(" var f = Math.exp(-e.deltaY * 0.0012);"),t.push(" var wx = (e.offsetX - ox) / scale, wy = (e.offsetY - oy) / scale;"),t.push(" scale = Math.min(Math.max(scale * f, 0.03), 10);"),t.push(" ox = e.offsetX - wx * scale; oy = e.offsetY - wy * scale;"),t.push(" draw();"),t.push("}, { passive: false });"),t.push('document.getElementById("btn-zoom-in").addEventListener("click", function() {'),t.push(" var w = canvas.clientWidth, h = canvas.clientHeight;"),t.push(" var wx = (w / 2 - ox) / scale, wy = (h / 2 - oy) / scale;"),t.push(" scale = Math.min(scale * 1.4, 10);"),t.push(" ox = w / 2 - wx * scale; oy = h / 2 - wy * scale;"),t.push(" draw();"),t.push("});"),t.push('document.getElementById("btn-zoom-out").addEventListener("click", function() {'),t.push(" var w = canvas.clientWidth, h = canvas.clientHeight;"),t.push(" var wx = (w / 2 - ox) / scale, wy = (h / 2 - oy) / scale;"),t.push(" scale = Math.max(scale / 1.4, 0.03);"),t.push(" ox = w / 2 - wx * scale; oy = h / 2 - wy * scale;"),t.push(" draw();"),t.push("});"),t.push('document.getElementById("btn-fit").addEventListener("click", function() { fitView(); draw(); });'),t.push("function handleClick(e) {"),t.push(" var rect = canvas.getBoundingClientRect();"),t.push(" var wx = (e.clientX - rect.left - ox) / scale, wy = (e.clientY - rect.top - oy) / scale;"),t.push(" var best = null, bestD = 12 / scale + 6;"),t.push(" nodes.forEach(function (n) {"),t.push(" if (hiddenGroups[n.group]) return;"),t.push(" var d = Math.hypot(n.x - wx, n.y - wy);"),t.push(" if (d < bestD + nodeRadius(n)) { best = n; bestD = d; }"),t.push(" });"),t.push(" if (!best) { selected = null; blast = null; renderInfo(); draw(); return; }"),t.push(" if (selected && selected.id === best.id) {"),t.push(" blast = blast ? null : computeBlast(best.id);"),t.push(" } else {"),t.push(" selected = best; blast = null;"),t.push(" }"),t.push(" renderInfo();"),t.push(" draw();"),t.push("}"),t.push("function selectNode(id) {"),t.push(" selected = nodeById[id]; blast = null;"),t.push(" ox = canvas.clientWidth / 2 - selected.x * scale;"),t.push(" oy = canvas.clientHeight / 2 - selected.y * scale;"),t.push(" renderInfo();"),t.push(" draw();"),t.push("}"),t.join(`
193
+ `)}function Uk(){let t=[];return t.push("function renderInfo() {"),t.push(' var info = document.getElementById("info");'),t.push(' var nb = document.getElementById("neighbors");'),t.push(' nb.textContent = "";'),t.push(' info.textContent = "";'),t.push(" if (!selected) {"),t.push(' var muted = document.createElement("span");'),t.push(' muted.className = "muted";'),t.push(' muted.textContent = "Click a node to inspect it. Click again to see its blast radius (upstream dependents).";'),t.push(" info.appendChild(muted);"),t.push(" return;"),t.push(" }"),t.push(" var n = selected;"),t.push(' var title = document.createElement("div");'),t.push(' var bold = document.createElement("b"); bold.textContent = n.label;'),t.push(' var badge = document.createElement("span"); badge.className = "kind-badge kind-" + n.kind; badge.textContent = n.kind;'),t.push(" title.appendChild(bold); title.appendChild(badge);"),t.push(" info.appendChild(title);"),t.push(" var addField = function (k, v) {"),t.push(" if (!v) return;"),t.push(' var d = document.createElement("div");'),t.push(' d.textContent = k + ": " + v;'),t.push(" info.appendChild(d);"),t.push(" };"),t.push(' addField("file", n.filePath);'),t.push(' addField("group", (GRAPH.groups[n.group] || {}).label);'),t.push(' addField("degree", String(n.degree));'),t.push(' addField("tags", (n.tags || []).join(", "));'),t.push(' addField("type", n.l2Type);'),t.push(' addField("decision type", n.decisionType);'),t.push(' addField("confidence", n.confidence != null ? String(n.confidence) : "");'),t.push(' addField("validity", n.validityStatus);'),t.push(' addField("source commits", (n.sourceCommits || []).join(", "));'),t.push(' addField("content", n.content);'),t.push(" if (blast) {"),t.push(" var count = Object.keys(blast).length - 1;"),t.push(' var d = document.createElement("div");'),t.push(' var b = document.createElement("b");'),t.push(' b.textContent = "blast radius: " + count + " upstream node" + (count === 1 ? "" : "s");'),t.push(" d.appendChild(b);"),t.push(" info.appendChild(d);"),t.push(" }"),t.push(" var neigh = {};"),t.push(' (incoming[n.id] || []).forEach(function (l) { neigh[l.source] = "in:" + l.linkType; });'),t.push(' (outgoing[n.id] || []).forEach(function (l) { neigh[l.target] = "out:" + l.linkType; });'),t.push(" Object.keys(neigh).slice(0, 25).forEach(function (id) {"),t.push(" var m = nodeById[id];"),t.push(' var item = document.createElement("div");'),t.push(' item.className = "neighbor-item";'),t.push(' item.textContent = neigh[id] + " - " + m.label;'),t.push(' item.addEventListener("click", function () { selectNode(id); });'),t.push(" nb.appendChild(item);"),t.push(" });"),t.push("}"),t.push('var searchInput = document.getElementById("search");'),t.push('var searchResults = document.getElementById("search-results");'),t.push('searchInput.addEventListener("input", function () {'),t.push(" var q = searchInput.value.trim().toLowerCase();"),t.push(' searchResults.textContent = "";'),t.push(" if (!q) return;"),t.push(" nodes.filter(function (n) { return n.label.toLowerCase().indexOf(q) >= 0; })"),t.push(" .slice(0, 20)"),t.push(" .forEach(function (n) {"),t.push(' var item = document.createElement("div");'),t.push(' item.className = "search-item";'),t.push(' item.textContent = n.label + " (" + n.kind + ")";'),t.push(' item.addEventListener("click", function () { selectNode(n.id); });'),t.push(" searchResults.appendChild(item);"),t.push(" });"),t.push("});"),t.push('var legendItems = document.getElementById("legend-items");'),t.push("GRAPH.groups.forEach(function (g) {"),t.push(' var item = document.createElement("div");'),t.push(' item.className = "legend-item";'),t.push(' var dot = document.createElement("span");'),t.push(' dot.className = "legend-dot";'),t.push(" dot.style.background = PALETTE[g.id % PALETTE.length];"),t.push(' var label = document.createElement("span");'),t.push(' label.className = "legend-label";'),t.push(" label.textContent = g.label;"),t.push(' var count = document.createElement("span");'),t.push(' count.className = "legend-count";'),t.push(" count.textContent = String(g.count);"),t.push(" item.appendChild(dot); item.appendChild(label); item.appendChild(count);"),t.push(' item.addEventListener("click", function () {'),t.push(" hiddenGroups[g.id] = !hiddenGroups[g.id];"),t.push(' item.classList.toggle("off", !!hiddenGroups[g.id]);'),t.push(" draw();"),t.push(" });"),t.push(" legendItems.appendChild(item);"),t.push("});"),t.join(`
194
+ `)}function Hk(){let t=[];return t.push('document.getElementById("stats").textContent ='),t.push(' GRAPH.stats.nodeCount + " nodes, " + GRAPH.stats.linkCount + " links, " +'),t.push(' GRAPH.stats.groupCount + " groups" + (GRAPH.collapsed ? " (collapsed to file level)" : "") +'),t.push(' " - generated " + GRAPH.generatedAt.slice(0, 19).replace("T", " ");'),t.push('window.addEventListener("resize", resize);'),t.push("renderInfo();"),t.push("resize();"),t.push("function loop() {"),t.push(" if (ticksLeft > 0) {"),t.push(" for (var i = 0; i < 4 && ticksLeft > 0; i++) { tick(); ticksLeft--; }"),t.push(" if (ticksLeft === 260) fitView();"),t.push(" draw();"),t.push(" requestAnimationFrame(loop);"),t.push(" } else {"),t.push(" fitView();"),t.push(" draw();"),t.push(" }"),t.push("}"),t.push("loop();"),t.join(`
195
+ `)}function Bk(t){return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}var MA="topology.json",kA="topology.html";function $k(t,e){let r=t?Gi.resolve(e,t):Gi.join(e,he);if(!r.startsWith(e+Gi.sep)&&r!==e)throw new E(T.FS_PATH_TRAVERSAL,`Resolved output directory "${r}" escapes workspace root "${e}" \u2014 possible path traversal via --out`);return r}function Yk(t,e){h.info(g.EXPORT_STATS_LINE(t.stats.nodeCount,t.stats.linkCount,t.stats.groupCount)),t.collapsed&&h.info(g.EXPORT_COLLAPSED_LINE),t.stats.foldedLinkCount>0&&h.info(g.EXPORT_FOLDED_LINE(t.stats.foldedLinkCount)),e&&h.info(g.EXPORT_HTML_PATH_LINE(e))}async function xA(t={},e=GA.cwd()){h.header(g.EXPORT_HEADER);let r=h.spinner(g.EXPORT_START).start(),n=Kk.randomUUID(),i=ee();i.onLog(a=>{a.level===ye.INFO&&(r.text=a.message)}),R.createScope(n),R.set(n,O.WORKSPACE_ROOT,e),t.collapse&&R.set(n,O.COLLAPSE,t.collapse);let s,o;try{s=$k(t.out,Gi.resolve(e)),o=await X.exportTopology(n,i),await Ip.mkdir(s,{recursive:!0});let a=Gi.join(s,MA);await Ip.writeFile(a,JSON.stringify(o,null,2));let l;t.jsonOnly||(l=Gi.join(s,kA),await Ip.writeFile(l,FA(o))),r.succeed(g.EXPORT_SUCCESS+a),Yk(o,l)}catch(a){let l=a instanceof E||a instanceof Error?a.message:String(a);r.fail(g.EXPORT_FAIL+l),GA.exitCode=1}finally{R.deleteScope(n)}}import UA from"process";import Wk from"crypto";async function HA(t=UA.cwd()){h.header(g.SNAPSHOT_HEADER);let e=h.spinner(g.SNAPSHOT_START).start(),r=Wk.randomUUID(),n=ee();n.onLog(i=>{i.level===ye.INFO&&(e.text=i.message)}),R.createScope(r),R.set(r,O.WORKSPACE_ROOT,t);try{let i=await X.snapshot(r,n);e.succeed(g.SNAPSHOT_SUCCESS),h.info(g.SNAPSHOT_NODES_WRITTEN_LINE(i.nodesWritten)),h.info(g.SNAPSHOT_EDGES_WRITTEN_LINE(i.edgesWritten)),h.info(g.SNAPSHOT_MARKDOWN_WRITTEN_LINE(i.markdownFilesWritten))}catch(i){let s=i instanceof E||i instanceof Error?i.message:String(i);e.fail(g.SNAPSHOT_FAIL+s),UA.exitCode=1}finally{R.deleteScope(r)}}import BA from"process";import jk from"crypto";async function KA(t=BA.cwd(),e){h.header(g.HYDRATE_HEADER);let r=h.spinner(g.HYDRATE_START).start(),n=jk.randomUUID(),i=ee();i.onLog(s=>{s.level===ye.INFO&&(r.text=s.message)}),R.createScope(n),R.set(n,O.WORKSPACE_ROOT,t);try{let s=await X.hydrate(n,i,e);if(s.refused){r.warn(g.HYDRATE_REFUSED(s.refusalReason));return}if(!s.hydrated){r.warn(g.HYDRATE_NOTHING);return}r.succeed(g.HYDRATE_SUCCESS),h.info(g.HYDRATE_NODES_LOADED_LINE(s.nodesLoaded)),h.info(g.HYDRATE_EDGES_LOADED_LINE(s.edgesLoaded)),s.edgesDropped>0&&h.info(g.HYDRATE_EDGES_DROPPED_LINE(s.edgesDropped))}catch(s){let o=s instanceof E||s instanceof Error?s.message:String(s);r.fail(g.HYDRATE_FAIL+o),BA.exitCode=1}finally{R.deleteScope(n)}}import Lp from"process";import Vk from"crypto";var $A={[Je.NO_REMOTE]:g.SYNC_KNOWLEDGE_NO_REMOTE,[Je.UP_TO_DATE]:g.SYNC_KNOWLEDGE_UP_TO_DATE,[Je.FAST_FORWARDED_LOCAL]:g.SYNC_KNOWLEDGE_FAST_FORWARDED,[Je.PUSHED_LOCAL]:g.SYNC_KNOWLEDGE_PUSHED,[Je.MERGED]:g.SYNC_KNOWLEDGE_MERGED};async function YA(t=Lp.cwd()){h.header(g.SYNC_KNOWLEDGE_HEADER);let e=h.spinner(g.SYNC_KNOWLEDGE_START).start(),r=Vk.randomUUID(),n=ee();n.onLog(s=>{s.level===ye.INFO&&(e.text=s.message)}),R.createScope(r),R.set(r,O.WORKSPACE_ROOT,t);let i=Lp.env.DOCUVIA_PUSH_TIMEOUT_MS;i&&R.set(r,O.GIT_NETWORK_TIMEOUT_MS,Number(i));try{let s=await X.syncKnowledge(r,n);if(s.status===Je.NO_REMOTE){e.warn($A[s.status]);return}e.succeed($A[s.status])}catch(s){let o=s instanceof E||s instanceof Error?s.message:String(s);e.fail(g.SYNC_KNOWLEDGE_FAIL+o),Lp.exitCode=1}finally{R.deleteScope(r)}}import Cp from"crypto";import*as WA from"path";async function zk(t){let e=[Eg,_g,Sg,Tg];for(let r of e)await kr(WA.join(t,r),`<!-- ${Tt} -->`,`<!-- ${Fr} -->`)}async function Jk(t,e,r){let n=[];for(let i of t)try{await i.uninstallHooks(e)}catch(s){let o=s instanceof Error?s.message:String(s);r.warn(`${g.UNINSTALL_HOOKS_FAIL_LOG}${q.DOUBLE_QUOTE}${i.name}${q.DOUBLE_QUOTE}`,{platform:i.name,error:o}),h.warn(g.UNINSTALL_PLATFORM_FAIL+i.name+g.UNINSTALL_PLATFORM_FAIL_MID+o),n.push(i.name)}return n}async function qk(t,e,r){let n=Cp.randomUUID();R.createScope(n),R.set(n,O.WORKSPACE_ROOT,t),R.set(n,O.KEEP_DB,e);try{let i=await X.uninstallGitHooks(n,r);return h.success(g.UNINSTALL_GIT_HOOKS_SUCCESS(i.postCommitRemoved,i.prePushRemoved)),i.knowledgeBranchDeleted&&h.success(g.UNINSTALL_KNOWLEDGE_BRANCH_DELETED),null}catch(i){let s=i instanceof E||i instanceof Error?i.message:String(i);return r.warn(g.UNINSTALL_GIT_HOOKS_FAIL_LOG,{error:s}),h.warn(g.UNINSTALL_GIT_HOOKS_FAIL+s),g.UNINSTALL_GIT_HOOKS_FAILURE_NAME}finally{R.deleteScope(n)}}async function Qk(t,e,r){if(e)return null;let n=Cp.randomUUID();R.createScope(n),R.set(n,O.WORKSPACE_ROOT,t);try{return(await X.removeDocuviaDir(n,r)).removed&&h.success(g.UNINSTALL_DOCUVIA_DIR_REMOVED),null}catch(i){let s=i instanceof E||i instanceof Error?i.message:String(i);return r.warn(g.UNINSTALL_DOCUVIA_DIR_FAIL_LOG,{error:s}),h.warn(g.UNINSTALL_DOCUVIA_DIR_FAIL+s),g.UNINSTALL_DOCUVIA_DIR_FAILURE_NAME}finally{R.deleteScope(n)}}async function Xk(t,e,r){if(e)return h.info(g.UNINSTALL_KEEP_DB),null;let n=Cp.randomUUID();R.createScope(n),R.set(n,O.WORKSPACE_ROOT,t);try{let i=await X.clean(n,r);return h.success(g.UNINSTALL_SUCCESS_CLEAN+i.message),null}catch(i){let s=i instanceof E||i instanceof Error?i.message:String(i);return r.warn(g.UNINSTALL_DB_CLEANUP_FAIL_LOG,{error:s}),h.warn(g.UNINSTALL_FAIL_CLEAN+s),g.UNINSTALL_DB_CLEANUP_FAILURE_NAME}finally{R.deleteScope(n)}}function Zk(t){try{let e=EA(t);e.length>0?h.success(`Removed ${e.length} skill(s): ${e.join(", ")}`):h.info("No Docuvia skill files found to remove.")}catch(e){h.warn(`Skill removal failed: ${e instanceof Error?e.message:String(e)}`)}}async function eG(t,e,r,n){let i=await Jk(t,e,n);await zk(e);let s=await qk(e,r,n);s&&i.push(s);let o=await Xk(e,r,n);o&&i.push(o);let a=await Qk(e,r,n);return a&&i.push(a),i}function tG(t){t.length>0?(h.warn(g.UNINSTALL_PARTIAL+t.join(", ")),process.exitCode=1):h.success(g.UNINSTALL_SUCCESS)}async function jA(t,e,r=!1,n=!1,i=!1){if(!t){h.error(g.UNINSTALL_INVALID_WORKSPACE_ROOT),process.exitCode=1;return}let s=ee();try{h.header(g.UNINSTALL_HEADER),h.info(g.UNINSTALL_START);let o=await Kl(g.UNINSTALL_HOOKS_SELECT,e,n),a=await eG(o,t,r,s);i&&Zk(t),tG(a)}catch(o){let a=o instanceof Error?o.message:String(o);s.error(g.UNINSTALL_FAIL_LOG,{error:a}),h.warn(g.UNINSTALL_FAIL+a),process.exitCode=1}}import xi from"process";import iG from"crypto";var rG=[{category:g.DOCTOR_CATEGORY_DATABASE,test:t=>t.startsWith("sqlite_")||t==="db_runner"||t==="db_found"||t==="graph_empty"||t==="l2_semantic_coverage"||t==="call_graph_resolution"||t==="canary_self_test"},{category:g.DOCTOR_CATEGORY_GIT_HOOKS,test:t=>t==="git_hook"||t==="pre_push_hook"},{category:g.DOCTOR_CATEGORY_GIT,test:t=>t.startsWith("git_")||t==="worktree_divergence"},{category:g.DOCTOR_CATEGORY_LOGS,test:t=>t==="logs"},{category:g.DOCTOR_CATEGORY_TIER_B,test:t=>t==="tier_b_commit_cap"},{category:g.DOCTOR_CATEGORY_TIER_B_COVERAGE,test:t=>t==="tier_b_coverage"},{category:g.DOCTOR_CATEGORY_LLM,test:t=>t==="llm_reachability"||t==="tier_c_queue"},{category:g.DOCTOR_CATEGORY_LSP,test:t=>t.startsWith("lsp_binary")},{category:g.DOCTOR_CATEGORY_AGENT_HOOKS,test:t=>t.startsWith("agent_hooks_")},{category:g.DOCTOR_CATEGORY_AGENT_ADOPTION,test:t=>t==="agent_authored_adoption"}],VA=[g.DOCTOR_CATEGORY_DATABASE,g.DOCTOR_CATEGORY_GIT,g.DOCTOR_CATEGORY_GIT_HOOKS,g.DOCTOR_CATEGORY_LOGS,g.DOCTOR_CATEGORY_TIER_B,g.DOCTOR_CATEGORY_TIER_B_COVERAGE,g.DOCTOR_CATEGORY_LLM,g.DOCTOR_CATEGORY_LSP,g.DOCTOR_CATEGORY_AGENT_HOOKS,g.DOCTOR_CATEGORY_AGENT_ADOPTION,g.DOCTOR_CATEGORY_OTHER];function nG(t){return rG.find(e=>e.test(t))?.category??g.DOCTOR_CATEGORY_OTHER}function zA(t){let e=new Map;for(let[r,n]of Object.entries(t)){let i=nG(r),s=e.get(i)??[];s.push([r,n]),e.set(i,s)}return e}var JA=[{header:g.DOCTOR_COL_CHECK},{header:g.DOCTOR_COL_STATUS},{header:g.DOCTOR_COL_MESSAGE,maxWidth:70},{header:g.DOCTOR_COL_FIX,maxWidth:50}];function qA(t,e){let r=e.status===K.PASS?`${uc.PASS} ${g.DOCTOR_STATUS_PASS}`:`${uc.FAIL} ${g.DOCTOR_STATUS_FAIL}`,n=e.details?`${e.message}${q.OPEN_PAREN}${e.details}${q.CLOSE_PAREN}`:e.message;return[t,r,n,e.suggestion??q.EMPTY]}function QA(t){let e=Object.values(t);return{passed:e.filter(n=>n.status===K.PASS).length,total:e.length}}var sG=60;function oG(){return{llmBaseUrl:xi.env.AI_DOCUVIA_INTEGRATIONS_OPENAI_BASE_URL,llmApiKey:xi.env.AI_DOCUVIA_INTEGRATIONS_OPENAI_API_KEY,llmModel:xi.env.AI_DOCUVIA_MODEL||xi.env.AI_DOCUVIA_FAST_MODEL}}function aG(t){let e=zA(t);for(let r of VA){let n=e.get(r);!n||n.length===0||(h.section(r),h.table(JA,n.map(([i,s])=>qA(i,s))))}}function lG(t,e){let{passed:r,total:n}=QA(t);h.log(""),h.log(fg.HORIZONTAL.repeat(sG));let i=g.DOCTOR_SUMMARY_PASSED(r,n);if(e){h.success(i);return}h.error(i),h.info(g.DOCTOR_FIX_HINT)}async function cG(t,e,r,n){R.createScope(t),R.set(t,O.WORKSPACE_ROOT,r);try{let i=await X.doctor(t,e,{...n,...oG()});return aG(i.diagnostics),lG(i.diagnostics,i.allPassed),i.allPassed}catch(i){let s=i instanceof E||i instanceof Error?i.message:String(i);return h.error(g.DOCTOR_FAIL+s),!1}finally{R.deleteScope(t)}}function uG(t){let{skipDb:e=!1,skipGit:r=!1,skipHooks:n=!1,skipLogs:i=!1,skipLsp:s=!1,skipLlm:o=!1,fix:a=!1}=t;return{skipDb:e,skipGit:r,skipHooks:n,skipLogs:i,skipLsp:s,skipLlm:o,fix:a}}async function XA(t,e={}){try{h.header(g.DOCTOR_HEADER),h.info(g.DOCTOR_START);let r=iG.randomUUID(),n=ee();await cG(r,n,t,uG(e))||(xi.exitCode=1)}catch(r){let n=r instanceof Error?r.message:String(r);h.error(g.DOCTOR_FAIL+n),xi.exitCode=1}}import an from"process";import Np from"crypto";var ql={LIST:"list",ENABLE:"enable",DISABLE:"disable",CHECK:"check"};function eR(t){return!!t&&Object.values(ur).includes(t)}async function dG(t){let e=Np.randomUUID(),r=ee();R.createScope(e),R.set(e,O.WORKSPACE_ROOT,t);try{let n=await X.listHooks(e,r);h.header(g.HOOKS_HEADER),h.table([{header:g.HOOKS_COL_NAME},{header:g.HOOKS_COL_STATUS}],Object.values(ur).map(i=>[i,n[i]?g.HOOKS_STATUS_ENABLED:g.HOOKS_STATUS_DISABLED]))}catch(n){let i=n instanceof E||n instanceof Error?n.message:String(n);h.error(g.HOOKS_LIST_FAIL+i),an.exitCode=1}finally{R.deleteScope(e)}}async function ZA(t,e,r){if(!eR(e)){h.error(g.HOOKS_INVALID_NAME(e,Object.values(ur))),an.exitCode=1;return}let n=Np.randomUUID(),i=ee();R.createScope(n),R.set(n,O.WORKSPACE_ROOT,t),R.set(n,O.HOOK_NAME,e),R.set(n,O.HOOK_ENABLED,r);try{let s=await X.setHookEnabled(n,i);h.success(r?g.HOOKS_ENABLED(e):g.HOOKS_DISABLED(e)),h.table([{header:g.HOOKS_COL_NAME},{header:g.HOOKS_COL_STATUS}],Object.values(ur).map(o=>[o,s[o]?g.HOOKS_STATUS_ENABLED:g.HOOKS_STATUS_DISABLED]))}catch(s){let o=s instanceof E||s instanceof Error?s.message:String(s);h.error(g.HOOKS_SET_FAIL+o),an.exitCode=1}finally{R.deleteScope(n)}}async function pG(t,e){if(!eR(e)){an.exitCode=1;return}let r=Np.randomUUID();R.createScope(r),R.set(r,O.WORKSPACE_ROOT,t);try{let n=await X.listHooks(r,me());an.exitCode=n[e]?0:1}catch{an.exitCode=0}finally{R.deleteScope(r)}}async function tR(t,e,r=an.cwd()){switch(t){case ql.LIST:await dG(r);return;case ql.ENABLE:await ZA(r,e,!0);return;case ql.DISABLE:await ZA(r,e,!1);return;case ql.CHECK:await pG(r,e);return;default:h.error(g.HOOKS_UNKNOWN_SUBCOMMAND(t)),an.exitCode=1}}import{Server as KG}from"@modelcontextprotocol/sdk/server/index.js";import{StdioServerTransport as $G}from"@modelcontextprotocol/sdk/server/stdio.js";import{CallToolRequestSchema as YG,ListToolsRequestSchema as WG}from"@modelcontextprotocol/sdk/types.js";import EG from"crypto";import{z as _G}from"zod";import{createRequire as gG}from"module";import{existsSync as fG}from"fs";import{dirname as rR,join as mG}from"path";import{fileURLToPath as hG}from"url";var Ql;function Xl(){if(Ql!==void 0)return Ql;let t=rR(hG(import.meta.url));for(;;){let e=mG(t,"package.json");if(fG(e)){let n=gG(import.meta.url)(e);if(typeof n.version!="string")throw E.wrap(T.FS_READ_FAILED,`Package manifest at ${e} has no string "version" field`,void 0);return Ql=n.version,Ql}let r=rR(t);if(r===t)break;t=r}throw E.wrap(T.FS_READ_FAILED,"Could not locate the CLI package.json by walking up from the running module",void 0)}var nR="docuvia-local-mcp",iR=Xl(),sR=["Docuvia maintains a local knowledge graph of this workspace: modules, dependencies, blast radius, and recorded architectural decisions ('why' rationale).","Workflow:","1. Before exploring code structure with Grep/Glob/Read, call docuvia_query \u2014 it returns structural context those tools cannot.","2. Before editing or deleting a symbol/file, call docuvia_impact to see who depends on it.","3. After finishing edits, call docuvia_detect_changes as a pre-commit risk check.","4. If results look empty or suspicious, call docuvia_status \u2014 incomplete Tier B coverage means partial answers.","Treat non-'exact' match_type results and 'unprocessed'/incomplete-coverage flags as lower confidence \u2014 unknown, not zero; cross-check before relying on them."].join(`
196
+ `),oR="Docuvia Local MCP Server running on stdio",aR=t=>`Tool not found: ${t}`,Be="text";function kt(t,e){return async r=>{try{return await e(r)}catch(n){return{content:[{type:Be,text:`${t}: ${n.message}`}],isError:!0}}}}var xe={ERROR_INITIALIZING:"Error initializing Docuvia",ERROR_QUERYING:"Error querying Docuvia knowledge graph",ERROR_ANALYZING_IMPACT:"Error analyzing impact",ERROR_APPLYING_DECISION:"Error applying decision",ERROR_GETTING_STATUS:"Error getting Docuvia status",ERROR_DETECTING_CHANGES:"Error detecting changes",QUERY_TOOL_DESCRIPTION:"Search the codebase knowledge graph (symbols, modules, architectural decisions, caller/callee context) BEFORE reaching for Grep/Glob/Read \u2014 it returns precomputed structural awareness those tools lack. Use it to locate where a concept lives, understand a module's role, or surface recorded 'why' decisions. Read match_type in the response: exact = confirmed symbol/file; keyword/neighbor = lower confidence, cross-check before relying on it. An empty result means unknown (not zero) \u2014 run docuvia_status; if Tier B coverage is incomplete, results may be partial.",IMPACT_TOOL_DESCRIPTION:"Compute the blast radius of a file or symbol: every module that depends on it upstream/downstream, with a risk level (low/medium/high/critical) and any recorded rationale ('why') per dependent. Call this BEFORE editing or deleting a symbol/file so you know who breaks. Returns null when the target isn't in the graph (unknown target, not confirmed-isolated); a non-null but empty blast radius with an incomplete-coverage note may also be incomplete rather than truly dependency-free.",STATUS_TOOL_DESCRIPTION:"Report knowledge-graph health: project/module/decision counts and Tier B (LSP cross-file) processing coverage. Call this when graph results look empty, stale, or suspiciously low-confidence \u2014 if Tier B coverage is below 100%, structural answers may be incomplete until 'docuvia analyze --escalate-to-lsp --full' runs.",DETECT_CHANGES_TOOL_DESCRIPTION:"Compare the current workspace against a git ref and report which tracked files changed, which graph nodes those changes touch, an overall risk level, and a natural-language analysis of what the diff puts at risk. Use it after finishing edits (or with baseRef set to your merge base) as a pre-commit safety check, instead of manually reading diffs.",QUERY_NEXT_STEP_HINT:"Next steps: before editing any file or symbol above, call docuvia_impact on it to see who depends on it.",IMPACT_NOT_FOUND_HINT:"The target was not found in the knowledge graph \u2014 this means unknown, not isolated. Verify the exact name with docuvia_query first; if it exists there but not here, the graph is likely stale or Tier B coverage is incomplete (see docuvia_status).",IMPACT_EMPTY_HINT:"No dependents found. If Tier B coverage below 100% is reported above, treat this as possibly incomplete \u2014 runtime/computed imports are invisible to static analysis \u2014 and cross-check with Grep before deleting.",REVIEW_NEXT_STEP_HINT:"Next steps: inspect the affected nodes above before committing; call docuvia_impact on any node you're about to change further."};var SG=_G.object({}).strict(),TG="docuvia_init",AG="Initialize the local Docuvia SQLite database in the current workspace.",RG="object",Pp={definition:{name:TG,description:AG,inputSchema:{type:RG,properties:{}}},handler:kt(xe.ERROR_INITIALIZING,async t=>{SG.parse(t??{});let e=EG.randomUUID(),r=ee();R.createScope(e),R.set(e,O.WORKSPACE_ROOT,process.cwd());try{let n=await $l(process.cwd(),()=>X.init(e,r));return{content:[{type:Be,text:n.message}]}}finally{R.deleteScope(e)}})};import yG from"crypto";import{z as Dp}from"zod";var OG=Dp.object({target:Dp.string().min(1),limit:Dp.number().int().positive().optional()}).strict(),IG="docuvia_query",vp={definition:{name:IG,description:xe.QUERY_TOOL_DESCRIPTION,inputSchema:{type:"object",properties:{target:{type:"string",description:"Symbol name, file path, or concept phrase to search for."},limit:{type:"number",description:"Maximum number of L3 decisions to return."}},required:["target"]}},handler:kt(xe.ERROR_QUERYING,async t=>{let e=OG.parse(t??{}),r=yG.randomUUID(),n=ee();R.createScope(r),R.set(r,O.WORKSPACE_ROOT,process.cwd()),R.set(r,O.TARGET,e.target),e.limit!==void 0&&R.set(r,O.LIMIT,e.limit);try{let i=await X.query(r,n);return{content:[{type:Be,text:zl(i)},{type:Be,text:xe.QUERY_NEXT_STEP_HINT}]}}finally{R.deleteScope(r)}})};import LG from"crypto";import{z as lR}from"zod";var CG=lR.object({target:lR.string().min(1)}).strict(),NG="docuvia_impact",bp={definition:{name:NG,description:xe.IMPACT_TOOL_DESCRIPTION,inputSchema:{type:"object",properties:{target:{type:"string",description:"Symbol name or file path whose dependents (blast radius) should be computed."}},required:["target"]}},handler:kt(xe.ERROR_ANALYZING_IMPACT,async t=>{let e=CG.parse(t??{}),r=LG.randomUUID(),n=ee();R.createScope(r),R.set(r,O.WORKSPACE_ROOT,process.cwd()),R.set(r,O.TARGET,e.target);try{let i=await X.impact(r,n);if(!i)return{content:[{type:Be,text:"null"},{type:Be,text:xe.IMPACT_NOT_FOUND_HINT}]};let s=[{type:Be,text:JSON.stringify(i,null,2)}];return i.blastRadius.length===0&&i.tierBCoverage&&i.tierBCoverage.workspaceFilesProcessed<i.tierBCoverage.workspaceFilesTotal&&s.push({type:Be,text:xe.IMPACT_EMPTY_HINT}),{content:s}}finally{R.deleteScope(r)}})};import PG from"crypto";import{z as DG}from"zod";var vG=DG.object({}).strict(),bG="docuvia_status",wp={definition:{name:bG,description:xe.STATUS_TOOL_DESCRIPTION,inputSchema:{type:"object",properties:{}}},handler:kt(xe.ERROR_GETTING_STATUS,async t=>{vG.parse(t??{});let e=PG.randomUUID(),r=ee();R.createScope(e),R.set(e,O.WORKSPACE_ROOT,process.cwd());try{let n=await X.status(e,r),i=n.tierBFilesTotal>0?Number((n.tierBFilesProcessed/n.tierBFilesTotal*100).toFixed(1)):0;return{content:[{type:Be,text:JSON.stringify({...n,tierBCoveragePct:i},null,2)}]}}finally{R.deleteScope(e)}})};import wG from"crypto";import{z as cR}from"zod";var FG=cR.object({baseRef:cR.string().min(1).optional()}).strict(),MG="docuvia_detect_changes",Fp={definition:{name:MG,description:xe.DETECT_CHANGES_TOOL_DESCRIPTION,inputSchema:{type:"object",properties:{baseRef:{type:"string",description:"Git ref to diff against (branch name, tag, or SHA). Defaults to the workspace's configured base branch."}}}},handler:kt(xe.ERROR_DETECTING_CHANGES,async t=>{let e=FG.parse(t??{}),r=wG.randomUUID(),n=ee();R.createScope(r),R.set(r,O.WORKSPACE_ROOT,process.cwd()),e.baseRef&&R.set(r,O.BASE_REF,e.baseRef);try{let i=await X.review(r,n);return{content:[{type:Be,text:JSON.stringify(i,null,2)},{type:Be,text:xe.REVIEW_NEXT_STEP_HINT}]}}finally{R.deleteScope(r)}})};import kG from"crypto";import{z as ln}from"zod";var GG=ln.object({title:ln.string().min(1,"title is required"),content:ln.string().min(1,"content is required"),nodeType:ln.enum(["change","rule","decision","context"]),confidence:ln.number().min(0).max(1)}),xG=ln.object({targetPath:ln.string().min(1,"targetPath is required").describe("File path (relative to workspace root) these decisions apply to"),decisions:ln.array(GG).min(1,"at least one decision is required").describe("Array of L3 decisions to stage for this file")}).strict(),UG="docuvia_apply_decision",HG="Stage agent-authored L3 decisions for a file. Staged decisions are flushed into the knowledge graph automatically on the next git commit that touches the target file. Use this after making code changes that reflect architectural decisions, rules, or notable rationale.",BG="object",Mp={definition:{name:UG,description:HG,inputSchema:{type:BG,properties:{targetPath:{type:"string",description:"File path (relative to workspace root) these decisions apply to"},decisions:{type:"array",description:"Array of L3 decisions to stage for this file",items:{type:"object",properties:{title:{type:"string",description:"Decision title"},content:{type:"string",description:"Decision content / rationale"},nodeType:{type:"string",enum:["change","rule","decision","context"],description:"Type of the L3 node"},confidence:{type:"number",description:"Confidence score between 0 and 1"}},required:["title","content","nodeType","confidence"]}}},required:["targetPath","decisions"]}},handler:kt(xe.ERROR_APPLYING_DECISION,async t=>{let e=xG.parse(t??{}),r=kG.randomUUID(),n=ee();R.createScope(r),R.set(r,O.WORKSPACE_ROOT,process.cwd()),R.set(r,O.TARGET_PATH,e.targetPath),R.set(r,O.AGENT_AUTHORED_DECISIONS,e.decisions);try{let i=await X.stageAgentAuthoredDecisions(r,n);return{content:[{type:Be,text:`${i.staged} decision(s) staged \u2014 flushed automatically on the next commit that touches ${e.targetPath}.`}]}}finally{R.deleteScope(r)}})};var kp={[Pp.definition.name]:Pp,[vp.definition.name]:vp,[bp.definition.name]:bp,[wp.definition.name]:wp,[Fp.definition.name]:Fp,[Mp.definition.name]:Mp},uR=Object.values(kp).map(t=>t.definition);async function dR(){let t=new KG({name:nR,version:iR},{capabilities:{tools:{}},instructions:sR});t.setRequestHandler(WG,async()=>({tools:uR})),t.setRequestHandler(YG,async n=>{let{name:i,arguments:s}=n.params,o=kp[i];if(o)return o.handler(s);throw new Error(aR(i))});let e=new $G;await t.connect(e),ee().info(oR)}var W={INIT:"init",MCP:"mcp",CLEAN:"clean",STATUS:"status",PUBLISH:"publish",ANALYZE:"analyze",REVIEW:"review",IMPACT:"impact",QUERY:"query",EXPORT_TOPOLOGY:"export-topology",SNAPSHOT:"snapshot",HYDRATE:"hydrate",SYNC_KNOWLEDGE:"sync-knowledge",UNINSTALL:"uninstall",DOCTOR:"doctor",HOOKS:"hooks"},Zl={[W.INIT]:"Initialize local project and agent hooks",[W.MCP]:"Start the local MCP stdio server",[W.CLEAN]:"Wipe the local Docuvia SQLite database",[W.STATUS]:"Show local knowledge graph row counts",[W.PUBLISH]:"Push locally-generated decisions to the remote backend",[W.ANALYZE]:"Detect project type/tags and run full AST ingestion into the knowledge graph",[W.REVIEW]:"Detect changed-file blast radius and risk level",[W.IMPACT]:"Show the blast radius/risk level for a symbol or module",[W.QUERY]:"Query the local knowledge graph (keyword + structural search)",[W.EXPORT_TOPOLOGY]:"Export the knowledge graph as topology.json/topology.html",[W.SNAPSHOT]:"Pack the local knowledge graph onto the hidden knowledge branch",[W.HYDRATE]:"Rebuild the local database from the hidden knowledge branch",[W.SYNC_KNOWLEDGE]:"Reconcile the hidden knowledge branch with the remote (fetch/merge/push)",[W.UNINSTALL]:"Uninstall Docuvia2 integrations and local DB",[W.DOCTOR]:"Run diagnostic checks on Docuvia2 setup",[W.HOOKS]:"List/enable/disable Docuvia's automation hooks (context-injection, commit-l3-write, tier-b-c-prepush)"},Ke={[W.INIT]:[w.PLATFORM,w.INTERACTIVE,w.INTERACTIVE_SHORT,w.SKILLS],[W.MCP]:[],[W.CLEAN]:[w.INTERACTIVE,w.INTERACTIVE_SHORT],[W.STATUS]:[],[W.PUBLISH]:[w.COMMIT_SHA,w.INTERACTIVE,w.INTERACTIVE_SHORT],[W.ANALYZE]:[w.ESCALATE_TO_LSP,w.FALLBACK_AST,w.LSP_TIMEOUT,w.LSP_PROCESSES,w.FULL,w.INTERACTIVE,w.INTERACTIVE_SHORT,w.FORCE,w.FORCE_SHORT,w.AGENT_AUTHORED,w.DECISIONS_FILE,w.STAGE,w.FLUSH_STAGED_L3,w.TIER_C_ALL],[W.REVIEW]:[w.FORMAT],[W.IMPACT]:[w.FORMAT],[W.QUERY]:[w.FORMAT,w.LIMIT,w.INTERACTIVE,w.INTERACTIVE_SHORT],[W.EXPORT_TOPOLOGY]:[w.OUT,w.JSON_ONLY,w.COLLAPSE],[W.SNAPSHOT]:[],[W.HYDRATE]:[w.FORCE,w.FORCE_SHORT],[W.SYNC_KNOWLEDGE]:[],[W.UNINSTALL]:[w.PLATFORM,w.KEEP_DB,w.INTERACTIVE,w.INTERACTIVE_SHORT,w.SKILLS],[W.DOCTOR]:[w.SKIP_DB,w.SKIP_GIT,w.SKIP_HOOKS,w.SKIP_LOGS,w.SKIP_LSP,w.SKIP_LLM,w.FIX],[W.HOOKS]:[]};function Gp(){return["Usage:",...Object.values(W).map(t=>` docuvia ${t.padEnd(40)} # ${Zl[t]}`),"","Options:"," docuvia --help, -h # Show this help"," docuvia --version, -v # Show the installed version"," docuvia <command> --help, -h # Show flags for a specific command"," docuvia -i, --interactive # Launch the wizard menu (requires a real terminal)"," docuvia <command> -i, --interactive # Allow that command to prompt instead of using its non-interactive default"].join(`
197
+ `)}function pR(t){let e=Ke[t],r=[`docuvia ${t}`,` ${Zl[t]}`];return e.length>0&&r.push("","Flags:",...e.map(n=>` ${n}`)),r.join(`
198
+ `)}var ec=class{args;parsedFlags=new Map;positionals=[];constructor(e){this.args=e,this.parse()}parse(){for(let e=0;e<this.args.length;e++){let r=this.args[e];if(r.startsWith("--"))if(r.includes("=")){let[n,...i]=r.split("=");this.parsedFlags.set(n,i.join("="))}else e+1<this.args.length&&!this.args[e+1].startsWith("-")?(this.parsedFlags.set(r,this.args[e+1]),e++):this.parsedFlags.set(r,!0);else r.startsWith("-")?this.parsedFlags.set(r,!0):this.positionals.push(r)}}hasFlag(e){let r=e.endsWith("=")?e.slice(0,-1):e;return this.parsedFlags.has(r)}getFlagValue(e){let r=e.endsWith("=")?e.slice(0,-1):e,n=this.parsedFlags.get(r);return typeof n=="string"?n:void 0}getPositional(e){return this.positionals[e]}getAllPositionals(){return this.positionals}checkUnknownFlags(e){let r=e.map(i=>i.endsWith("=")?i.slice(0,-1):i),n=Array.from(this.parsedFlags.keys()).filter(i=>!r.includes(i));if(n.length>0)throw new Error(on.UNKNOWN_OPTIONS(n.join(", ")))}};function tc(t){if(t===void 0)return;let e=Object.values(Wt);if(e.includes(t))return t;throw new Error(on.INVALID_FORMAT(t,e.join(", ")))}fR.config({quiet:!0});function mR(){h.error(Gp())}function VG(){return Xl()}function zG(t){return t===w.HELP||t===w.HELP_SHORT}function JG(t){return t===w.VERSION||t===w.VERSION_SHORT}function hR(t){return t===w.INTERACTIVE||t===w.INTERACTIVE_SHORT}async function qG(t){t.parser.checkUnknownFlags(Ke[W.INIT]);let e=t.parser.getFlagValue(w.PLATFORM),r=t.parser.hasFlag(w.SKILLS);await _A(t.workspaceRoot,e,t.isInteractive,r)}async function QG(t){t.parser.checkUnknownFlags(Ke[W.MCP]),await dR()}async function XG(t){t.parser.checkUnknownFlags(Ke[W.CLEAN]),await SA(t.workspaceRoot,t.isInteractive)}async function ZG(t){t.parser.checkUnknownFlags(Ke[W.STATUS]),await AA(t.workspaceRoot)}async function ex(t){t.parser.checkUnknownFlags(Ke[W.PUBLISH]);let e=t.parser.getPositional(0),r=t.parser.getFlagValue(w.COMMIT_SHA);await RA({projectId:e,commitSha:r},t.workspaceRoot,t.isInteractive)}async function tx(t){t.parser.checkUnknownFlags(Ke[W.ANALYZE]);let e=t.parser.getPositional(0),r=t.parser.hasFlag(w.ESCALATE_TO_LSP),n=t.parser.hasFlag(w.FALLBACK_AST),i=t.parser.hasFlag(w.FULL),s=t.parser.hasFlag(w.FORCE)||t.parser.hasFlag(w.FORCE_SHORT),o=t.parser.getFlagValue(w.LSP_TIMEOUT),a=o!==void 0?Number(o):void 0,l=t.parser.getFlagValue(w.LSP_PROCESSES),c=l!==void 0?Number(l):void 0,u=t.parser.hasFlag(w.AGENT_AUTHORED),p=t.parser.getFlagValue(w.DECISIONS_FILE),d=t.parser.hasFlag(w.STAGE),f=t.parser.hasFlag(w.FLUSH_STAGED_L3),m=t.parser.hasFlag(w.TIER_C_ALL);await NA(e,t.workspaceRoot,{escalateToLsp:r,fallbackAst:n,isInteractive:t.isInteractive,force:s,lspTimeoutMs:a,lspProcesses:c,full:i,agentAuthored:u,decisionsFile:p,stage:d,flushStagedL3:f,tierCAll:m})}async function rx(t){t.parser.checkUnknownFlags(Ke[W.REVIEW]);let e=t.parser.getPositional(0),r=tc(t.parser.getFlagValue(w.FORMAT));await DA(e,{format:r},t.workspaceRoot)}async function nx(t){t.parser.checkUnknownFlags(Ke[W.IMPACT]);let e=t.parser.getPositional(0);if(!e){h.error(g.IMPACT_MISSING_TARGET),jt.exitCode=1;return}let r=tc(t.parser.getFlagValue(w.FORMAT));await vA(e,{format:r},t.workspaceRoot)}async function ix(t){t.parser.checkUnknownFlags(Ke[W.QUERY]);let e=t.parser.getPositional(0),r=tc(t.parser.getFlagValue(w.FORMAT)),n=t.parser.getFlagValue(w.LIMIT),i=n?Number(n):void 0;await wA(e,{format:r,limit:i},t.workspaceRoot,t.isInteractive)}async function sx(t){t.parser.checkUnknownFlags(Ke[W.EXPORT_TOPOLOGY]);let e=t.parser.getFlagValue(w.OUT),r=t.parser.hasFlag(w.JSON_ONLY),n=t.parser.getFlagValue(w.COLLAPSE);await xA({out:e,jsonOnly:r,collapse:n},t.workspaceRoot)}async function ox(t){t.parser.checkUnknownFlags(Ke[W.SNAPSHOT]),await HA(t.workspaceRoot)}async function ax(t){t.parser.checkUnknownFlags(Ke[W.HYDRATE]);let e=t.parser.hasFlag(w.FORCE)||t.parser.hasFlag(w.FORCE_SHORT);await KA(t.workspaceRoot,{force:e})}async function lx(t){t.parser.checkUnknownFlags(Ke[W.UNINSTALL]);let e=t.parser.getFlagValue(w.PLATFORM),r=t.parser.hasFlag(w.KEEP_DB),n=t.parser.hasFlag(w.SKILLS);await jA(t.workspaceRoot,e,r,t.isInteractive,n)}async function cx(t){t.parser.checkUnknownFlags(Ke[W.DOCTOR]);let e=t.parser.hasFlag(w.SKIP_DB),r=t.parser.hasFlag(w.SKIP_GIT),n=t.parser.hasFlag(w.SKIP_HOOKS),i=t.parser.hasFlag(w.SKIP_LOGS),s=t.parser.hasFlag(w.SKIP_LSP),o=t.parser.hasFlag(w.SKIP_LLM),a=t.parser.hasFlag(w.FIX);await XA(t.workspaceRoot,{skipDb:e,skipGit:r,skipHooks:n,skipLogs:i,skipLsp:s,skipLlm:o,fix:a})}async function ux(t){t.parser.checkUnknownFlags(Ke[W.SYNC_KNOWLEDGE]),await YA(t.workspaceRoot)}async function dx(t){t.parser.checkUnknownFlags(Ke[W.HOOKS]);let e=t.parser.getPositional(0),r=t.parser.getPositional(1);await tR(e,r,t.workspaceRoot)}var px={[W.INIT]:qG,[W.MCP]:QG,[W.CLEAN]:XG,[W.STATUS]:ZG,[W.PUBLISH]:ex,[W.ANALYZE]:tx,[W.REVIEW]:rx,[W.IMPACT]:nx,[W.QUERY]:ix,[W.EXPORT_TOPOLOGY]:sx,[W.SNAPSHOT]:ox,[W.HYDRATE]:ax,[W.SYNC_KNOWLEDGE]:ux,[W.UNINSTALL]:lx,[W.DOCTOR]:cx,[W.HOOKS]:dx};async function gx(t,e,r){let n=hR(t)?void 0:t;if(n)return n;e||(mR(),jt.exit(1)),r||(h.error(g.CLI_INTERACTIVE_NO_TTY),jt.exit(1)),h.header(g.CLI_HEADER);let i=Object.values(W).filter(o=>o!==W.MCP).map(o=>({name:o,value:o,description:Zl[o]}));return await h.askSelect(g.CLI_PROMPT_ACTION,i)}function fx(t){return zG(t)?(h.log(Gp()),!0):JG(t)?(h.log(VG()),!0):!1}function mx(t,e){let r=hR(t)||e.hasFlag(w.INTERACTIVE)||e.hasFlag(w.INTERACTIVE_SHORT),n=r&&!!jt.stdin.isTTY&&!jt.env.CI;return{wantsInteractive:r,interactiveEligible:n}}async function hx(t,e,r,n,i,s){if(!t||!e){h.error(g.CLI_UNKNOWN_COMMAND+t),mR(),jt.exit(1);return}if(r.hasFlag(w.HELP)||r.hasFlag(w.HELP_SHORT)){h.log(pR(t));return}n&&!i&&h.warn(g.CLI_INTERACTIVE_UNAVAILABLE),await e({parser:r,isInteractive:i,workspaceRoot:s})}async function Ex(){let t=jt.argv[2];if(fx(t))return;let e=jt.argv.slice(3),r=new ec(e),n=jt.cwd(),{wantsInteractive:i,interactiveEligible:s}=mx(t,r),o=await gx(t,i,s),a=o?px[o]:void 0;try{await hx(o,a,r,i,s,n)}catch(l){let c=l instanceof Error?l.message:String(l);h.error(g.CLI_FATAL_ERROR+c),jt.exit(1)}}Ex().catch(t=>{h.error(g.CLI_FATAL_ERROR+(t instanceof Error?t.message:String(t))),jt.exit(1)});
199
199
  /*! Bundled license information:
200
200
 
201
201
  is-extglob/index.js: