docuvia 1.8.14 → 1.8.15

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,107 +1,107 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
3
- import{a as Sp,b as Tp,d as je,f as Rp,g as Ap,h as yp}from"./chunk-CNYHBOCB.js";import{A as Bp,B as Kp,C as $p,D as Yp,E as kl,F as Gl,G as Wp,H as Ps,I as jp,J as Vp,K as Ds,L as zp,M as vs,N as kt,O as nn,P as Cr,a as Ip,b as wl,c as kn,d as Ns,e as bl,f as Fl,g as Gn,h as Lp,i as Cp,j as Np,k as _t,l as Lr,m as Pp,n as Dp,o as vp,p as wp,q as bp,r as Ml,s as Fp,t as Pi,u as Mp,v as kp,w as Gp,x as xp,y as Up,z as Hp}from"./chunk-KDURFY2Q.js";import{a as Op,b as vl,c as h,d as g,e as yt,g as Nr}from"./chunk-YBPQ2IUS.js";import{$ as hp,A as Xd,Aa as Ls,B as tn,Ba as rn,C as Mt,Ca as wn,D as Nl,Da as bn,E as Zd,Ea as Cs,F as or,Fa as lr,G as Ii,Ga as Ni,H as _e,Ha as yr,I as Ar,Ia as Ep,J as ep,Ja as K,K as tp,Ka as Fn,L as rp,La as Mn,M as np,Ma as Or,N as Li,Na as Ir,O as ip,P as sp,Q as op,R as ap,S as lp,T as cp,U as up,V as at,W as Ci,X as dp,Y as pp,Z as gp,_ as fp,a as Oe,aa as ar,b as Jd,ba as mt,c as he,ca as mp,da as se,e as qd,ea as H,f as y,fa as Jt,g as E,ga as ys,h as O,ha as S,i as R,ia as _p,j as A,k as T,l as At,m as Il,n as B,o as qe,p as Rr,q as me,r as sr,s as Ft,t as en,u as Te,ua as Pl,v as Qd,va as Os,w as zt,wa as Is,x as Ll,xa as Dl,y as We,ya as Dn,z as Cl,za as vn}from"./chunk-WL3HOIHC.js";import{a as we,b as U,c as Ol}from"./chunk-KVOCOCYJ.js";var xg=U(Yn=>{"use strict";Object.defineProperty(Yn,"__esModule",{value:!0});Yn.splitWhen=Yn.flatten=void 0;function MA(t){return t.reduce((e,r)=>[].concat(e,r),[])}Yn.flatten=MA;function kA(t,e){let r=[[]],n=0;for(let i of t)e(i)?(n++,r[n]=[]):r[n].push(i);return r}Yn.splitWhen=kA});var Ug=U(Ws=>{"use strict";Object.defineProperty(Ws,"__esModule",{value:!0});Ws.isEnoentCodeError=void 0;function GA(t){return t.code==="ENOENT"}Ws.isEnoentCodeError=GA});var Hg=U(js=>{"use strict";Object.defineProperty(js,"__esModule",{value:!0});js.createDirentFromStats=void 0;var zl=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 xA(t,e){return new zl(t,e)}js.createDirentFromStats=xA});var Yg=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 UA=we("os"),HA=we("path"),Bg=UA.platform()==="win32",BA=2,KA=/(\\?)([()*?[\]{|}]|^!|[!+@](?=\()|\\(?![!()*+?@[\]{|}]))/g,$A=/(\\?)([()[\]{}]|^!|[!+@](?=\())/g,YA=/^\\\\([.?])/,WA=/\\(?![!()+@[\]{}])/g;function jA(t){return t.replace(/\\/g,"/")}ke.unixify=jA;function VA(t,e){return HA.resolve(t,e)}ke.makeAbsolute=VA;function zA(t){if(t.charAt(0)==="."){let e=t.charAt(1);if(e==="/"||e==="\\")return t.slice(BA)}return t}ke.removeLeadingDotSegment=zA;ke.escape=Bg?Jl:ql;function Jl(t){return t.replace($A,"\\$2")}ke.escapeWindowsPath=Jl;function ql(t){return t.replace(KA,"\\$2")}ke.escapePosixPath=ql;ke.convertPathToPattern=Bg?Kg:$g;function Kg(t){return Jl(t).replace(YA,"//$1").replace(WA,"/")}ke.convertWindowsPathToPattern=Kg;function $g(t){return ql(t)}ke.convertPosixPathToPattern=$g});var jg=U((uU,Wg)=>{"use strict";Wg.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 Jg=U((dU,zg)=>{"use strict";var JA=jg(),Vg={"{":"}","(":")","[":"]"},qA=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=Vg[a];if(l){var c=t.indexOf(l,e);c!==-1&&(e=c+1)}if(t[e]==="!")return!0}else e++}return!1},QA=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=Vg[r];if(n){var i=t.indexOf(n,e);i!==-1&&(e=i+1)}if(t[e]==="!")return!0}else e++}return!1};zg.exports=function(e,r){if(typeof e!="string"||e==="")return!1;if(JA(e))return!0;var n=qA;return r&&r.strict===!1&&(n=QA),n(e)}});var Qg=U((pU,qg)=>{"use strict";var XA=Jg(),ZA=we("path").posix.dirname,ey=we("os").platform()==="win32",Ql="/",ty=/\\/g,ry=/[\{\[].*[\}\]]$/,ny=/(^|[^\\])([\{\[]|\([^\)]+$)/,iy=/\\([\!\*\?\|\[\]\(\)\{\}])/g;qg.exports=function(e,r){var n=Object.assign({flipBackslashes:!0},r);n.flipBackslashes&&ey&&e.indexOf(Ql)<0&&(e=e.replace(ty,Ql)),ry.test(e)&&(e+=Ql),e+="a";do e=ZA(e);while(XA(e)||ny.test(e));return e.replace(iy,"$1")}});var Vs=U(It=>{"use strict";It.isInteger=t=>typeof t=="number"?Number.isInteger(t):typeof t=="string"&&t.trim()!==""?Number.isInteger(Number(t)):!1;It.find=(t,e)=>t.nodes.find(r=>r.type===e);It.exceedsLimit=(t,e,r=1,n)=>n===!1||!It.isInteger(t)||!It.isInteger(e)?!1:(Number(e)-Number(t))/Number(r)>=n;It.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)};It.encloseBrace=t=>t.type!=="brace"?!1:t.commas>>0+t.ranges>>0===0?(t.invalid=!0,!0):!1;It.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;It.isOpenOrClose=t=>t.type==="open"||t.type==="close"?!0:t.open===!0||t.close===!0;It.reduce=t=>t.reduce((e,r)=>(r.type==="text"&&e.push(r.value),r.type==="range"&&(r.type="text"),e),[]);It.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 zs=U((fU,Zg)=>{"use strict";var Xg=Vs();Zg.exports=(t,e={})=>{let r=(n,i={})=>{let s=e.escapeInvalid&&Xg.isInvalidBrace(i),o=n.invalid===!0&&e.escapeInvalid===!0,a="";if(n.value)return(s||o)&&Xg.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 tf=U((hU,ef)=>{"use strict";ef.exports=function(t){return typeof t=="number"?t-t===0:typeof t=="string"&&t.trim()!==""?Number.isFinite?Number.isFinite(+t):isFinite(+t):!1}});var df=U((mU,uf)=>{"use strict";var rf=tf(),dn=(t,e,r)=>{if(rf(t)===!1)throw new TypeError("toRegexRange: expected the first argument to be a number");if(e===void 0||t===e)return String(t);if(rf(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(dn.cache.hasOwnProperty(l))return dn.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=cf(t)||cf(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=nf(_,Math.abs(c),d,n),c=d.a=0}return u>=0&&(f=nf(c,u,d,n)),d.negatives=m,d.positives=f,d.result=sy(m,f,n),n.capture===!0?d.result=`(${d.result})`:n.wrap!==!1&&f.length+m.length>1&&(d.result=`(?:${d.result})`),dn.cache[l]=d,d.result};function sy(t,e,r){let n=Xl(t,e,"-",!1,r)||[],i=Xl(e,t,"",!1,r)||[],s=Xl(t,e,"-?",!0,r)||[];return n.concat(s).concat(i).join("|")}function oy(t,e){let r=1,n=1,i=of(t,r),s=new Set([e]);for(;t<=i&&i<=e;)s.add(i),r+=1,i=of(t,r);for(i=af(e+1,n)-1;t<i&&i<=e;)s.add(i),n+=1,i=af(e+1,n)-1;return s=[...s],s.sort(cy),s}function ay(t,e,r){if(t===e)return{pattern:t,count:[],digits:0};let n=ly(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+=uy(l,c,r):o++}return o&&(s+=r.shorthand===!0?"\\d":"[0-9]"),{pattern:s,count:[o],digits:i}}function nf(t,e,r,n){let i=oy(t,e),s=[],o=t,a;for(let l=0;l<i.length;l++){let c=i[l],u=ay(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+lf(a.count),o=c+1;continue}r.isPadded&&(p=dy(c,r,n)),u.string=p+u.pattern+lf(u.count),s.push(u),o=c+1,a=u}return s}function Xl(t,e,r,n,i){let s=[];for(let o of t){let{string:a}=o;!n&&!sf(e,"string",a)&&s.push(r+a),n&&sf(e,"string",a)&&s.push(r+a)}return s}function ly(t,e){let r=[];for(let n=0;n<t.length;n++)r.push([t[n],e[n]]);return r}function cy(t,e){return t>e?1:e>t?-1:0}function sf(t,e,r){return t.some(n=>n[e]===r)}function of(t,e){return Number(String(t).slice(0,-e)+"9".repeat(e))}function af(t,e){return t-t%Math.pow(10,e)}function lf(t){let[e=0,r=""]=t;return r||e>1?`{${e+(r?","+r:"")}}`:""}function uy(t,e,r){return`[${t}${e-t===1?"":"-"}${e}]`}function cf(t){return/^-?(0+)\d/.test(t)}function dy(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}}`}}dn.cache={};dn.clearCache=()=>dn.cache={};uf.exports=dn});var tc=U((_U,Ef)=>{"use strict";var py=we("util"),gf=df(),pf=t=>t!==null&&typeof t=="object"&&!Array.isArray(t),gy=t=>e=>t===!0?Number(e):String(e),Zl=t=>typeof t=="number"||typeof t=="string"&&t!=="",Bi=t=>Number.isInteger(+t),ec=t=>{let e=`${t}`,r=-1;if(e[0]==="-"&&(e=e.slice(1)),e==="0")return!1;for(;e[++r]==="0";);return r>0},fy=(t,e,r)=>typeof t=="string"||typeof e=="string"?!0:r.stringify===!0,hy=(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},qs=(t,e)=>{let r=t[0]==="-"?"-":"";for(r&&(t=t.slice(1),e--);t.length<e;)t="0"+t;return r?"-"+t:t},my=(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=>qs(String(a),r)).join("|")),t.negatives.length&&(s=`-(${n}${t.negatives.map(a=>qs(String(a),r)).join("|")})`),i&&s?o=`${i}|${s}`:o=i||s,e.wrap?`(${n}${o})`:o},ff=(t,e,r,n)=>{if(r)return gf(t,e,{wrap:!1,...n});let i=String.fromCharCode(t);if(t===e)return i;let s=String.fromCharCode(e);return`[${i}-${s}]`},hf=(t,e,r)=>{if(Array.isArray(t)){let n=r.wrap===!0,i=r.capture?"":"?:";return n?`(${i}${t.join("|")})`:t.join("|")}return gf(t,e,r)},mf=(...t)=>new RangeError("Invalid range arguments: "+py.inspect(...t)),_f=(t,e,r)=>{if(r.strictRanges===!0)throw mf([t,e]);return[]},_y=(t,e)=>{if(e.strictRanges===!0)throw new TypeError(`Expected step "${t}" to be a number`);return[]},Ey=(t,e,r=1,n={})=>{let i=Number(t),s=Number(e);if(!Number.isInteger(i)||!Number.isInteger(s)){if(n.strictRanges===!0)throw mf([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=ec(a)||ec(l)||ec(c),p=u?Math.max(a.length,l.length,c.length):0,d=u===!1&&fy(t,e,n)===!1,f=n.transform||gy(d);if(n.toRegex&&r===1)return ff(qs(t,p),qs(e,p),!0,n);let m={negatives:[],positives:[]},_=L=>m[L<0?"negatives":"positives"].push(Math.abs(L)),I=[],C=0;for(;o?i>=s:i<=s;)n.toRegex===!0&&r>1?_(i):I.push(hy(f(i,C),p,d)),i=o?i-r:i+r,C++;return n.toRegex===!0?r>1?my(m,n,p):hf(I,null,{wrap:!1,...n}):I},Sy=(t,e,r=1,n={})=>{if(!Bi(t)&&t.length>1||!Bi(e)&&e.length>1)return _f(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 ff(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?hf(u,null,{wrap:!1,options:n}):u},Js=(t,e,r,n={})=>{if(e==null&&Zl(t))return[t];if(!Zl(t)||!Zl(e))return _f(t,e,n);if(typeof r=="function")return Js(t,e,1,{transform:r});if(pf(r))return Js(t,e,0,r);let i={...n};return i.capture===!0&&(i.wrap=!0),r=r||i.step||1,Bi(r)?Bi(t)&&Bi(e)?Ey(t,e,r,i):Sy(t,e,Math.max(Math.abs(r),1),i):r!=null&&!pf(r)?_y(r,i):Js(t,e,1,r)};Ef.exports=Js});var Rf=U((EU,Tf)=>{"use strict";var Ty=tc(),Sf=Vs(),Ry=(t,e={})=>{let r=(n,i={})=>{let s=Sf.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=Sf.reduce(n.nodes),p=Ty(...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)};Tf.exports=Ry});var Of=U((SU,yf)=>{"use strict";var Ay=tc(),Af=zs(),Wn=Vs(),pn=(t="",e="",r=!1)=>{let n=[];if(t=[].concat(t),e=[].concat(e),!e.length)return t;if(!t.length)return r?Wn.flatten(e).map(i=>`{${i}}`):e;for(let i of t)if(Array.isArray(i))for(let s of i)n.push(pn(s,e,r));else for(let s of e)r===!0&&typeof s=="string"&&(s=`{${s}}`),n.push(Array.isArray(s)?pn(i,s,r):i+s);return Wn.flatten(n)},yy=(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(pn(a.pop(),Af(i,e)));return}if(i.type==="brace"&&i.invalid!==!0&&i.nodes.length===2){a.push(pn(a.pop(),["{}"]));return}if(i.nodes&&i.ranges>0){let p=Wn.reduce(i.nodes);if(Wn.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=Ay(...p,e);d.length===0&&(d=Af(i,e)),a.push(pn(a.pop(),d)),i.nodes=[];return}let l=Wn.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(pn(a.pop(),c,l));continue}if(d.value&&d.type!=="open"){c.push(pn(c.pop(),d.value));continue}d.nodes&&n(d,i)}return c};return Wn.flatten(n(t))};yf.exports=yy});var Lf=U((TU,If)=>{"use strict";If.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 vf=U((RU,Df)=>{"use strict";var Oy=zs(),{MAX_LENGTH:Cf,CHAR_BACKSLASH:rc,CHAR_BACKTICK:Iy,CHAR_COMMA:Ly,CHAR_DOT:Cy,CHAR_LEFT_PARENTHESES:Ny,CHAR_RIGHT_PARENTHESES:Py,CHAR_LEFT_CURLY_BRACE:Dy,CHAR_RIGHT_CURLY_BRACE:vy,CHAR_LEFT_SQUARE_BRACKET:Nf,CHAR_RIGHT_SQUARE_BRACKET:Pf,CHAR_DOUBLE_QUOTE:wy,CHAR_SINGLE_QUOTE:by,CHAR_NO_BREAK_SPACE:Fy,CHAR_ZERO_WIDTH_NOBREAK_SPACE:My}=Lf(),ky=(t,e={})=>{if(typeof t!="string")throw new TypeError("Expected a string");let r=e||{},n=typeof r.maxLength=="number"?Math.min(Cf,r.maxLength):Cf;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===My||d===Fy)){if(d===rc){m({type:"text",value:(e.keepEscaping?d:"")+f()});continue}if(d===Pf){m({type:"text",value:"\\"+d});continue}if(d===Nf){l++;let _;for(;u<c&&(_=f());){if(d+=_,_===Nf){l++;continue}if(_===rc){d+=f();continue}if(_===Pf&&(l--,l===0))break}m({type:"text",value:d});continue}if(d===Ny){o=m({type:"paren",nodes:[]}),s.push(o),m({type:"text",value:d});continue}if(d===Py){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===wy||d===by||d===Iy){let _=d,I;for(e.keepQuotes!==!0&&(d="");u<c&&(I=f());){if(I===rc){d+=I+f();continue}if(I===_){e.keepQuotes===!0&&(d+=I);break}d+=I}m({type:"text",value:d});continue}if(d===Dy){p++;let I={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(I),s.push(o),m({type:"open",value:d});continue}if(d===vy){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===Ly&&p>0){if(o.ranges>0){o.ranges=0;let _=o.nodes.shift();o.nodes=[_,{type:"text",value:Oy(o)}]}m({type:"comma",value:d}),o.commas++;continue}if(d===Cy&&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 I=_[_.length-1];I.value+=a.value+d,a=I,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],I=_.nodes.indexOf(o);_.nodes.splice(I,1,...o.nodes)}while(s.length>0);return m({type:"eos"}),i};Df.exports=ky});var Ff=U((AU,bf)=>{"use strict";var wf=zs(),Gy=Rf(),xy=Of(),Uy=vf(),St=(t,e={})=>{let r=[];if(Array.isArray(t))for(let n of t){let i=St.create(n,e);Array.isArray(i)?r.push(...i):r.push(i)}else r=[].concat(St.create(t,e));return e&&e.expand===!0&&e.nodupes===!0&&(r=[...new Set(r)]),r};St.parse=(t,e={})=>Uy(t,e);St.stringify=(t,e={})=>wf(typeof t=="string"?St.parse(t,e):t,e);St.compile=(t,e={})=>(typeof t=="string"&&(t=St.parse(t,e)),Gy(t,e));St.expand=(t,e={})=>{typeof t=="string"&&(t=St.parse(t,e));let r=xy(t,e);return e.noempty===!0&&(r=r.filter(Boolean)),e.nodupes===!0&&(r=[...new Set(r)]),r};St.create=(t,e={})=>t===""||t.length<3?[t]:e.expand!==!0?St.compile(t,e):St.expand(t,e);bf.exports=St});var Ki=U((yU,Uf)=>{"use strict";var Hy=we("path"),Qt="\\\\/",Mf=`[^${Qt}]`,By=0,dr="\\.",Ky="\\+",$y="\\?",Qs="\\/",Yy="(?=.)",kf="[^/]",nc=`(?:${Qs}|$)`,Gf=`(?:^|${Qs})`,ic=`${dr}{1,2}${nc}`,Wy=`(?!${dr})`,jy=`(?!${Gf}${ic})`,Vy=`(?!${dr}{0,1}${nc})`,zy=`(?!${ic})`,Jy=`[^.${Qs}]`,qy=`${kf}*?`,xf={DOT_LITERAL:dr,PLUS_LITERAL:Ky,QMARK_LITERAL:$y,SLASH_LITERAL:Qs,ONE_CHAR:Yy,QMARK:kf,END_ANCHOR:nc,DOTS_SLASH:ic,NO_DOT:Wy,NO_DOTS:jy,NO_DOT_SLASH:Vy,NO_DOTS_SLASH:zy,QMARK_NO_DOT:Jy,STAR:qy,START_ANCHOR:Gf},Qy={...xf,SLASH_LITERAL:`[${Qt}]`,QMARK:Mf,STAR:`${Mf}*?`,DOTS_SLASH:`${dr}{1,2}(?:[${Qt}]|$)`,NO_DOT:`(?!${dr})`,NO_DOTS:`(?!(?:^|[${Qt}])${dr}{1,2}(?:[${Qt}]|$))`,NO_DOT_SLASH:`(?!${dr}{0,1}(?:[${Qt}]|$))`,NO_DOTS_SLASH:`(?!${dr}{1,2}(?:[${Qt}]|$))`,QMARK_NO_DOT:`[^.${Qt}]`,START_ANCHOR:`(?:^|[${Qt}])`,END_ANCHOR:`(?:[${Qt}]|$)`},Xy={__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"};Uf.exports={DEFAULT_MAX_EXTGLOB_RECURSION:By,MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:Xy,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:Hy.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?Qy:xf}}});var $i=U(dt=>{"use strict";var Zy=we("path"),eO=process.platform==="win32",{REGEX_BACKSLASH:tO,REGEX_REMOVE_BACKSLASH:rO,REGEX_SPECIAL_CHARS:nO,REGEX_SPECIAL_CHARS_GLOBAL:iO}=Ki();dt.isObject=t=>t!==null&&typeof t=="object"&&!Array.isArray(t);dt.hasRegexChars=t=>nO.test(t);dt.isRegexChar=t=>t.length===1&&dt.hasRegexChars(t);dt.escapeRegex=t=>t.replace(iO,"\\$1");dt.toPosixSlashes=t=>t.replace(tO,"/");dt.removeBackslashes=t=>t.replace(rO,e=>e==="\\"?"":e);dt.supportsLookbehinds=()=>{let t=process.version.slice(1).split(".").map(Number);return t.length===3&&t[0]>=9||t[0]===8&&t[1]>=10};dt.isWindows=t=>t&&typeof t.windows=="boolean"?t.windows:eO===!0||Zy.sep==="\\";dt.escapeLast=(t,e,r)=>{let n=t.lastIndexOf(e,r);return n===-1?t:t[n-1]==="\\"?dt.escapeLast(t,e,n-1):`${t.slice(0,n)}\\${t.slice(n)}`};dt.removePrefix=(t,e={})=>{let r=t;return r.startsWith("./")&&(r=r.slice(2),e.prefix="./"),r};dt.wrapOutput=(t,e={},r={})=>{let n=r.contains?"":"^",i=r.contains?"":"$",s=`${n}(?:${t})${i}`;return e.negated===!0&&(s=`(?:^(?!${s}).*$)`),s}});var Vf=U((IU,jf)=>{"use strict";var Hf=$i(),{CHAR_ASTERISK:sc,CHAR_AT:sO,CHAR_BACKWARD_SLASH:Yi,CHAR_COMMA:oO,CHAR_DOT:oc,CHAR_EXCLAMATION_MARK:ac,CHAR_FORWARD_SLASH:Wf,CHAR_LEFT_CURLY_BRACE:lc,CHAR_LEFT_PARENTHESES:cc,CHAR_LEFT_SQUARE_BRACKET:aO,CHAR_PLUS:lO,CHAR_QUESTION_MARK:Bf,CHAR_RIGHT_CURLY_BRACE:cO,CHAR_RIGHT_PARENTHESES:Kf,CHAR_RIGHT_SQUARE_BRACKET:uO}=Ki(),$f=t=>t===Wf||t===Yi,Yf=t=>{t.isPrefix!==!0&&(t.depth=t.isGlobstar?1/0:1)},dO=(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,I=!1,C=!1,L=!1,w=!1,Q=!1,J=!1,$=0,te,M,ne={value:"",depth:0,isGlob:!1},de=()=>c>=n,N=()=>l.charCodeAt(c+1),Ae=()=>(te=M,l.charCodeAt(++c));for(;c<n;){M=Ae();let nt;if(M===Yi){L=ne.backslashes=!0,M=Ae(),M===lc&&(C=!0);continue}if(C===!0||M===lc){for($++;de()!==!0&&(M=Ae());){if(M===Yi){L=ne.backslashes=!0,Ae();continue}if(M===lc){$++;continue}if(C!==!0&&M===oc&&(M=Ae())===oc){if(d=ne.isBrace=!0,m=ne.isGlob=!0,J=!0,i===!0)continue;break}if(C!==!0&&M===oO){if(d=ne.isBrace=!0,m=ne.isGlob=!0,J=!0,i===!0)continue;break}if(M===cO&&($--,$===0)){C=!1,d=ne.isBrace=!0,J=!0;break}}if(i===!0)continue;break}if(M===Wf){if(s.push(c),o.push(ne),ne={value:"",depth:0,isGlob:!1},J===!0)continue;if(te===oc&&c===u+1){u+=2;continue}p=c+1;continue}if(r.noext!==!0&&(M===lO||M===sO||M===sc||M===Bf||M===ac)===!0&&N()===cc){if(m=ne.isGlob=!0,_=ne.isExtglob=!0,J=!0,M===ac&&c===u&&(Q=!0),i===!0){for(;de()!==!0&&(M=Ae());){if(M===Yi){L=ne.backslashes=!0,M=Ae();continue}if(M===Kf){m=ne.isGlob=!0,J=!0;break}}continue}break}if(M===sc){if(te===sc&&(I=ne.isGlobstar=!0),m=ne.isGlob=!0,J=!0,i===!0)continue;break}if(M===Bf){if(m=ne.isGlob=!0,J=!0,i===!0)continue;break}if(M===aO){for(;de()!==!0&&(nt=Ae());){if(nt===Yi){L=ne.backslashes=!0,Ae();continue}if(nt===uO){f=ne.isBracket=!0,m=ne.isGlob=!0,J=!0;break}}if(i===!0)continue;break}if(r.nonegate!==!0&&M===ac&&c===u){w=ne.negated=!0,u++;continue}if(r.noparen!==!0&&M===cc){if(m=ne.isGlob=!0,i===!0){for(;de()!==!0&&(M=Ae());){if(M===cc){L=ne.backslashes=!0,M=Ae();continue}if(M===Kf){J=!0;break}}continue}break}if(m===!0){if(J=!0,i===!0)continue;break}}r.noext===!0&&(_=!1,m=!1);let Ie=l,Sr="",D="";u>0&&(Sr=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&&$f(Ie.charCodeAt(Ie.length-1))&&(Ie=Ie.slice(0,-1)),r.unescape===!0&&(D&&(D=Hf.removeBackslashes(D)),Ie&&L===!0&&(Ie=Hf.removeBackslashes(Ie)));let v={prefix:Sr,input:t,start:u,base:Ie,glob:D,isBrace:d,isBracket:f,isGlob:m,isExtglob:_,isGlobstar:I,negated:w,negatedExtglob:Q};if(r.tokens===!0&&(v.maxDepth=0,$f(M)||o.push(ne),v.tokens=o),r.parts===!0||r.tokens===!0){let nt;for(let fe=0;fe<s.length;fe++){let Yt=nt?nt+1:u,Wt=s[fe],ht=t.slice(Yt,Wt);r.tokens&&(fe===0&&u!==0?(o[fe].isPrefix=!0,o[fe].value=Sr):o[fe].value=ht,Yf(o[fe]),v.maxDepth+=o[fe].depth),(fe!==0||ht!=="")&&a.push(ht),nt=Wt}if(nt&&nt+1<t.length){let fe=t.slice(nt+1);a.push(fe),r.tokens&&(o[o.length-1].value=fe,Yf(o[o.length-1]),v.maxDepth+=o[o.length-1].depth)}v.slashes=s,v.parts=a}return v};jf.exports=dO});var Xf=U((LU,Qf)=>{"use strict";var Wi=Ki(),Qe=$i(),{MAX_LENGTH:Xs,POSIX_REGEX_SOURCE:pO,REGEX_NON_SPECIAL_CHARS:gO,REGEX_SPECIAL_CHARS_BACKREF:fO,REPLACEMENTS:zf}=Wi,hO=(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},jn=(t,e)=>`Missing ${t}: "${e}" - use "\\\\${e}" to match literal characters`,Jf=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},mO=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},qf=t=>{let e=t.trim(),r=!0;for(;r===!0;)r=!1,/^@\([^\\()[\]{}|]+\)$/.test(e)&&(e=e.slice(2,-1),r=!0);if(mO(e))return e.replace(/\\(.)/g,"$1")},_O=t=>{let e=t.map(qf).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},uc=(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}}}}},EO=t=>{let e=0,r=[];for(;e<t.length;){let i=uc(t.slice(e),!1);if(!i||i.type!=="*")return;let s=Jf(i.body).map(a=>a.trim());if(s.length!==1)return;let o=qf(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("")}]`}*`},SO=t=>{let e=0,r=t.trim(),n=uc(r);for(;n;)e++,r=n.body.trim(),n=uc(r);return e},TO=(t,e)=>{if(e.maxExtglobRecursion===!1)return{risky:!1};let r=typeof e.maxExtglobRecursion=="number"?e.maxExtglobRecursion:Wi.DEFAULT_MAX_EXTGLOB_RECURSION,n=Jf(t).map(i=>i.trim());if(n.length>1&&(n.some(i=>i==="")||n.some(i=>/^[*?]+$/.test(i))||_O(n)))return{risky:!0};for(let i of n){let s=EO(i);if(s)return{risky:!0,safeOutput:s};if(SO(i)>r)return{risky:!0}}return{risky:!1}},dc=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");t=zf[t]||t;let r={...e},n=typeof r.maxLength=="number"?Math.min(Xs,r.maxLength):Xs,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=Wi.globChars(l),u=Wi.extglobChars(c),{DOT_LITERAL:p,PLUS_LITERAL:d,SLASH_LITERAL:f,ONE_CHAR:m,DOTS_SLASH:_,NO_DOT:I,NO_DOT_SLASH:C,NO_DOTS_SLASH:L,QMARK:w,QMARK_NO_DOT:Q,STAR:J,START_ANCHOR:$}=c,te=x=>`(${a}(?:(?!${$}${x.dot?_:p}).)*?)`,M=r.dot?"":I,ne=r.dot?w:Q,de=r.bash===!0?te(r):J;r.capture&&(de=`(${de})`),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=[],Ie=[],Sr=[],D=s,v,nt=()=>N.index===i-1,fe=N.peek=(x=1)=>t[N.index+x],Yt=N.advance=()=>t[++N.index]||"",Wt=()=>t.slice(N.index+1),ht=(x="",Ne=0)=>{N.consumed+=x,N.index+=Ne},Ts=x=>{N.output+=x.output!=null?x.output:x.value,ht(x.value)},tR=()=>{let x=1;for(;fe()==="!"&&(fe(2)!=="("||fe(3)==="?");)Yt(),N.start++,x++;return x%2===0?!1:(N.negated=!0,N.start++,!0)},Rs=x=>{N[x]++,Sr.push(x)},Tr=x=>{N[x]--,Sr.pop()},le=x=>{if(D.type==="globstar"){let Ne=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"&&!Ne&&!G&&(N.output=N.output.slice(0,-D.output.length),D.type="star",D.value="*",D.output=de,N.output+=D.output)}if(Ae.length&&x.type!=="paren"&&(Ae[Ae.length-1].inner+=x.value),(x.value||x.output)&&Ts(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},As=(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;Rs("parens"),le({type:x,value:Ne,output:N.output?"":m}),le({type:"paren",extglob:!0,value:Yt(),output:ae}),Ae.push(G)},rR=x=>{let Ne=t.slice(x.startIndex,N.index+1),G=t.slice(x.startIndex+2,N.index),ae=TO(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,jt=o[x.tokensIndex];jt.type="text",jt.value=Ne,jt.output=ye||Qe.escapeRegex(Ne);for(let Vt=x.tokensIndex+1;Vt<o.length;Vt++)o[Vt].value="",o[Vt].output="",delete o[Vt].suffix;N.output=x.output+jt.output,N.backtrack=!0,le({type:"paren",extglob:!0,value:v,output:""}),Tr("parens");return}let Le=x.close+(r.capture?")":""),He;if(x.type==="negate"){let ye=de;if(x.inner&&x.inner.length>1&&x.inner.includes("/")&&(ye=te(r)),(ye!==de||nt()||/^\)+$/.test(Wt()))&&(Le=x.close=`)$))${ye}`),x.inner.includes("*")&&(He=Wt())&&/^\.[^\\/.]+$/.test(He)){let jt=dc(He,{...e,fastpaths:!1}).output;Le=x.close=`)${jt})${ye})`}x.prev.type==="bos"&&(N.negatedExtglob=!0)}le({type:"paren",extglob:!0,value:v,output:Le}),Tr("parens")};if(r.fastpaths!==!1&&!/(^[*!]|[/()[\]{}"])/.test(t)){let x=!1,Ne=t.replace(fO,(G,ae,Le,He,ye,jt)=>He==="\\"?(x=!0,G):He==="?"?ae?ae+He+(ye?w.repeat(ye.length):""):jt===0?ne+(ye?w.repeat(ye.length):""):w.repeat(Le.length):He==="."?p.repeat(Le.length):He==="*"?ae?ae+He+(ye?de:""):de: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=Qe.wrapOutput(Ne,N,e),N)}for(;!nt();){if(v=Yt(),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(Wt()),Le=0;if(ae&&ae[0].length>2&&(Le=ae[0].length,N.index+=Le,Le%2!==0&&(v+="\\")),r.unescape===!0?v=Yt():v+=Yt(),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=pO[He];if(ye){D.value=Le+ye,N.backtrack=!0,Yt(),!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,Ts({value:v});continue}if(N.quotes===1&&v!=='"'){v=Qe.escapeRegex(v),D.value+=v,Ts({value:v});continue}if(v==='"'){N.quotes=N.quotes===1?0:1,r.keepQuotes===!0&&le({type:"text",value:v});continue}if(v==="("){Rs("parens"),le({type:"paren",value:v});continue}if(v===")"){if(N.parens===0&&r.strictBrackets===!0)throw new SyntaxError(jn("opening","("));let G=Ae[Ae.length-1];if(G&&N.parens===G.parens+1){rR(Ae.pop());continue}le({type:"paren",value:v,output:N.parens?")":"\\)"}),Tr("parens");continue}if(v==="["){if(r.nobracket===!0||!Wt().includes("]")){if(r.nobracket!==!0&&r.strictBrackets===!0)throw new SyntaxError(jn("closing","]"));v=`\\${v}`}else Rs("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(jn("opening","["));le({type:"text",value:v,output:`\\${v}`});continue}Tr("brackets");let G=D.value.slice(1);if(D.posix!==!0&&G[0]==="^"&&!G.includes("/")&&(v=`/${v}`),D.value+=v,Ts({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){Rs("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=hO(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}),Tr("braces"),Ie.pop();continue}if(v==="|"){Ae.length>0&&Ae[Ae.length-1].conditions++,le({type:"text",value:v});continue}if(v===","){let G=v,ae=Ie[Ie.length-1];ae&&Sr[Sr.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&&fe()==="("&&fe(2)!=="?"){As("qmark",v);continue}if(D&&D.type==="paren"){let ae=fe(),Le=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(Wt()))&&(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:Q});continue}le({type:"qmark",value:v,output:w});continue}if(v==="!"){if(r.noextglob!==!0&&fe()==="("&&(fe(2)!=="?"||!/[!=<:]/.test(fe(3)))){As("negate",v);continue}if(r.nonegate!==!0&&N.index===0){tR();continue}}if(v==="+"){if(r.noextglob!==!0&&fe()==="("&&fe(2)!=="?"){As("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=gO.exec(Wt());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=de,N.backtrack=!0,N.globstar=!0,ht(v);continue}let x=Wt();if(r.noextglob!==!0&&/^\([^?]/.test(x)){As("star",v);continue}if(D.type==="star"){if(r.noglobstar===!0){ht(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"),jt=Ae.length&&(G.type==="pipe"||G.type==="paren");if(!Le&&G.type!=="paren"&&!ye&&!jt){le({type:"star",value:v,output:""});continue}for(;x.slice(0,3)==="/**";){let Vt=t[N.index+4];if(Vt&&Vt!=="/")break;x=x.slice(3),ht("/**",3)}if(G.type==="bos"&&nt()){D.type="globstar",D.value+=v,D.output=te(r),N.output=D.output,N.globstar=!0,ht(v);continue}if(G.type==="slash"&&G.prev.type!=="bos"&&!He&&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,ht(v);continue}if(G.type==="slash"&&G.prev.type!=="bos"&&x[0]==="/"){let Vt=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}${Vt})`,D.value+=v,N.output+=G.output+D.output,N.globstar=!0,ht(v+Yt()),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,ht(v+Yt()),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,ht(v);continue}let Ne={type:"star",value:v,output:de};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+=L,D.output+=L):(N.output+=M,D.output+=M),fe()!=="*"&&(N.output+=m,D.output+=m)),le(Ne)}for(;N.brackets>0;){if(r.strictBrackets===!0)throw new SyntaxError(jn("closing","]"));N.output=Qe.escapeLast(N.output,"["),Tr("brackets")}for(;N.parens>0;){if(r.strictBrackets===!0)throw new SyntaxError(jn("closing",")"));N.output=Qe.escapeLast(N.output,"("),Tr("parens")}for(;N.braces>0;){if(r.strictBrackets===!0)throw new SyntaxError(jn("closing","}"));N.output=Qe.escapeLast(N.output,"{"),Tr("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};dc.fastpaths=(t,e)=>{let r={...e},n=typeof r.maxLength=="number"?Math.min(Xs,r.maxLength):Xs,i=t.length;if(i>n)throw new SyntaxError(`Input length: ${i}, exceeds maximum allowed length: ${n}`);t=zf[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}=Wi.globChars(s),_=r.dot?p:u,I=r.dot?d:u,C=r.capture?"":"?:",L={negated:!1,prefix:""},w=r.bash===!0?".*?":f;r.capture&&(w=`(${w})`);let Q=M=>M.noglobstar===!0?w:`(${C}(?:(?!${m}${M.dot?c:o}).)*?)`,J=M=>{switch(M){case"*":return`${_}${l}${w}`;case".*":return`${o}${l}${w}`;case"*.*":return`${_}${w}${o}${l}${w}`;case"*/*":return`${_}${w}${a}${l}${I}${w}`;case"**":return _+Q(r);case"**/*":return`(?:${_}${Q(r)}${a})?${I}${l}${w}`;case"**/*.*":return`(?:${_}${Q(r)}${a})?${I}${w}${o}${l}${w}`;case"**/.*":return`(?:${_}${Q(r)}${a})?${o}${l}${w}`;default:{let ne=/^(.*?)\.(\w+)$/.exec(M);if(!ne)return;let de=J(ne[1]);return de?de+o+ne[2]:void 0}}},$=Qe.removePrefix(t,L),te=J($);return te&&r.strictSlashes!==!0&&(te+=`${a}?`),te};Qf.exports=dc});var eh=U((CU,Zf)=>{"use strict";var RO=we("path"),AO=Vf(),pc=Xf(),gc=$i(),yO=Ki(),OO=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=OO(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=gc.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?gc.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=gc.isWindows(r))=>(e instanceof RegExp?e:Me.makeRe(e,r)).test(RO.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)):pc(t,{...e,fastpaths:!1});Me.scan=(t,e)=>AO(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=pc.fastpaths(t,e)),i.output||(i=pc(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=yO;Zf.exports=Me});var rh=U((NU,th)=>{"use strict";th.exports=eh()});var lh=U((PU,ah)=>{"use strict";var ih=we("util"),sh=Ff(),Xt=rh(),fc=$i(),nh=t=>t===""||t==="./",oh=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=Xt(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)=>Xt(t,e);Ce.isMatch=(t,e,r)=>Xt(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: "${ih.inspect(t)}"`);if(Array.isArray(e))return e.some(n=>Ce.contains(t,n,r));if(typeof e=="string"){if(nh(t)||nh(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(!fc.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=Xt(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=Xt(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: "${ih.inspect(t)}"`);return[].concat(e).every(n=>Xt(n,r)(t))};Ce.capture=(t,e,r)=>{let n=fc.isWindows(r),s=Xt.makeRe(String(t),{...r,capture:!0}).exec(n?fc.toPosixSlashes(e):e);if(s)return s.slice(1).map(o=>o===void 0?"":o)};Ce.makeRe=(...t)=>Xt.makeRe(...t);Ce.scan=(...t)=>Xt.scan(...t);Ce.parse=(t,e)=>{let r=[];for(let n of[].concat(t||[]))for(let i of sh(String(n),e))r.push(Xt.parse(i,e));return r};Ce.braces=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");return e&&e.nobrace===!0||!oh(t)?[t]:sh(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=oh;ah.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 ch=we("path"),IO=Qg(),hc=lh(),uh="**",LO="\\",CO=/[*?]|^!/,NO=/\[[^[]*]/,PO=/(?:^|[^!*+?@])\([^(]*\|[^|]*\)/,DO=/[!*+?@]\([^(]*\)/,vO=/,|\.\./,wO=/(?!^)\/{2,}/g;function dh(t,e={}){return!ph(t,e)}Z.isStaticPattern=dh;function ph(t,e={}){return t===""?!1:!!(e.caseSensitiveMatch===!1||t.includes(LO)||CO.test(t)||NO.test(t)||PO.test(t)||e.extglob!==!1&&DO.test(t)||e.braceExpansion!==!1&&bO(t))}Z.isDynamicPattern=ph;function bO(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 vO.test(n)}function FO(t){return Zs(t)?t.slice(1):t}Z.convertToPositivePattern=FO;function MO(t){return"!"+t}Z.convertToNegativePattern=MO;function Zs(t){return t.startsWith("!")&&t[1]!=="("}Z.isNegativePattern=Zs;function gh(t){return!Zs(t)}Z.isPositivePattern=gh;function kO(t){return t.filter(Zs)}Z.getNegativePatterns=kO;function GO(t){return t.filter(gh)}Z.getPositivePatterns=GO;function xO(t){return t.filter(e=>!mc(e))}Z.getPatternsInsideCurrentDirectory=xO;function UO(t){return t.filter(mc)}Z.getPatternsOutsideCurrentDirectory=UO;function mc(t){return t.startsWith("..")||t.startsWith("./..")}Z.isPatternRelatedToParentDirectory=mc;function HO(t){return IO(t,{flipBackslashes:!1})}Z.getBaseDirectory=HO;function BO(t){return t.includes(uh)}Z.hasGlobStar=BO;function fh(t){return t.endsWith("/"+uh)}Z.endsWithSlashGlobStar=fh;function KO(t){let e=ch.basename(t);return fh(t)||dh(e)}Z.isAffectDepthOfReadingPattern=KO;function $O(t){return t.reduce((e,r)=>e.concat(hh(r)),[])}Z.expandPatternsWithBraceExpansion=$O;function hh(t){let e=hc.braces(t,{expand:!0,nodupes:!0,keepEscaping:!0});return e.sort((r,n)=>r.length-n.length),e.filter(r=>r!=="")}Z.expandBraceExpansion=hh;function YO(t,e){let{parts:r}=hc.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=YO;function mh(t,e){return hc.makeRe(t,e)}Z.makeRe=mh;function WO(t,e){return t.map(r=>mh(r,e))}Z.convertPatternsToRe=WO;function jO(t,e){return e.some(r=>r.test(t))}Z.matchAny=jO;function VO(t){return t.replace(wO,"/")}Z.removeDuplicateSlashes=VO;function zO(t){let e=[],r=[];for(let n of t)_h(n)?e.push(n):r.push(n);return[e,r]}Z.partitionAbsoluteAndRelative=zO;function _h(t){return ch.isAbsolute(t)}Z.isAbsolute=_h});var Ah=U((vU,Rh)=>{"use strict";var JO=we("stream"),Sh=JO.PassThrough,qO=Array.prototype.slice;Rh.exports=QO;function QO(){let t=[],e=qO.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=Sh(n);function a(){for(let u=0,p=arguments.length;u<p;u++)t.push(Th(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",I),d()}function I(C){o.emit("error",C)}if(m._readableState.endEmitted)return d();m.on("merge2UnpipeEnd",_),m.on("end",_),s&&m.on("error",I),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 Th(t,e){if(Array.isArray(t))for(let r=0,n=t.length;r<n;r++)t[r]=Th(t[r],e);else{if(!t._readableState&&t.pipe&&(t=t.pipe(Sh(e))),!t._readableState||!t.pause||!t.pipe)throw new Error("Only readable stream can be merged.");t.pause()}return t}});var Oh=U(eo=>{"use strict";Object.defineProperty(eo,"__esModule",{value:!0});eo.merge=void 0;var XO=Ah();function ZO(t){let e=XO(t);return t.forEach(r=>{r.once("error",n=>e.emit("error",n))}),e.once("close",()=>yh(t)),e.once("end",()=>yh(t)),e}eo.merge=ZO;function yh(t){t.forEach(e=>e.emit("close"))}});var Ih=U(Vn=>{"use strict";Object.defineProperty(Vn,"__esModule",{value:!0});Vn.isEmpty=Vn.isString=void 0;function eI(t){return typeof t=="string"}Vn.isString=eI;function tI(t){return t===""}Vn.isEmpty=tI});var pr=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 rI=xg();Xe.array=rI;var nI=Ug();Xe.errno=nI;var iI=Hg();Xe.fs=iI;var sI=Yg();Xe.path=sI;var oI=Eh();Xe.pattern=oI;var aI=Oh();Xe.stream=aI;var lI=Ih();Xe.string=lI});var Ph=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 Gt=pr();function cI(t,e){let r=Lh(t,e),n=Lh(e.ignore,e),i=Ch(r),s=Nh(r,n),o=i.filter(u=>Gt.pattern.isStaticPattern(u,e)),a=i.filter(u=>Gt.pattern.isDynamicPattern(u,e)),l=_c(o,s,!1),c=_c(a,s,!0);return l.concat(c)}Ze.generate=cI;function Lh(t,e){let r=t;return e.braceExpansion&&(r=Gt.pattern.expandPatternsWithBraceExpansion(r)),e.baseNameMatch&&(r=r.map(n=>n.includes("/")?n:`**/${n}`)),r.map(n=>Gt.pattern.removeDuplicateSlashes(n))}function _c(t,e,r){let n=[],i=Gt.pattern.getPatternsOutsideCurrentDirectory(t),s=Gt.pattern.getPatternsInsideCurrentDirectory(t),o=Ec(i),a=Ec(s);return n.push(...Sc(o,e,r)),"."in a?n.push(Tc(".",s,e,r)):n.push(...Sc(a,e,r)),n}Ze.convertPatternsToTasks=_c;function Ch(t){return Gt.pattern.getPositivePatterns(t)}Ze.getPositivePatterns=Ch;function Nh(t,e){return Gt.pattern.getNegativePatterns(t).concat(e).map(Gt.pattern.convertToPositivePattern)}Ze.getNegativePatternsAsPositive=Nh;function Ec(t){let e={};return t.reduce((r,n)=>{let i=Gt.pattern.getBaseDirectory(n);return i in r?r[i].push(n):r[i]=[n],r},e)}Ze.groupPatternsByBaseDirectory=Ec;function Sc(t,e,r){return Object.keys(t).map(n=>Tc(n,t[n],e,r))}Ze.convertPatternGroupsToTasks=Sc;function Tc(t,e,r,n){return{dynamic:n,positive:e,negative:r,base:t,patterns:[].concat(e,r.map(Gt.pattern.convertToNegativePattern))}}Ze.convertPatternGroupToTask=Tc});var vh=U(to=>{"use strict";Object.defineProperty(to,"__esModule",{value:!0});to.read=void 0;function uI(t,e,r){e.fs.lstat(t,(n,i)=>{if(n!==null){Dh(r,n);return}if(!i.isSymbolicLink()||!e.followSymbolicLink){Rc(r,i);return}e.fs.stat(t,(s,o)=>{if(s!==null){if(e.throwErrorOnBrokenSymbolicLink){Dh(r,s);return}Rc(r,i);return}e.markSymbolicLink&&(o.isSymbolicLink=()=>!0),Rc(r,o)})})}to.read=uI;function Dh(t,e){t(e)}function Rc(t,e){t(null,e)}});var wh=U(ro=>{"use strict";Object.defineProperty(ro,"__esModule",{value:!0});ro.read=void 0;function dI(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}}ro.read=dI});var bh=U(wr=>{"use strict";Object.defineProperty(wr,"__esModule",{value:!0});wr.createFileSystemAdapter=wr.FILE_SYSTEM_ADAPTER=void 0;var no=we("fs");wr.FILE_SYSTEM_ADAPTER={lstat:no.lstat,stat:no.stat,lstatSync:no.lstatSync,statSync:no.statSync};function pI(t){return t===void 0?wr.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},wr.FILE_SYSTEM_ADAPTER),t)}wr.createFileSystemAdapter=pI});var Fh=U(yc=>{"use strict";Object.defineProperty(yc,"__esModule",{value:!0});var gI=bh(),Ac=class{constructor(e={}){this._options=e,this.followSymbolicLink=this._getValue(this._options.followSymbolicLink,!0),this.fs=gI.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}};yc.default=Ac});var gn=U(br=>{"use strict";Object.defineProperty(br,"__esModule",{value:!0});br.statSync=br.stat=br.Settings=void 0;var Mh=vh(),fI=wh(),Oc=Fh();br.Settings=Oc.default;function hI(t,e,r){if(typeof e=="function"){Mh.read(t,Ic(),e);return}Mh.read(t,Ic(e),r)}br.stat=hI;function mI(t,e){let r=Ic(e);return fI.read(t,r)}br.statSync=mI;function Ic(t={}){return t instanceof Oc.default?t:new Oc.default(t)}});var xh=U((BU,Gh)=>{"use strict";var kh;Gh.exports=typeof queueMicrotask=="function"?queueMicrotask.bind(typeof window<"u"?window:global):t=>(kh||(kh=Promise.resolve())).then(t).catch(e=>setTimeout(()=>{throw e},0))});var Hh=U((KU,Uh)=>{"use strict";Uh.exports=EI;var _I=xh();function EI(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?_I(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 Lc=U(so=>{"use strict";Object.defineProperty(so,"__esModule",{value:!0});so.IS_SUPPORT_READDIR_WITH_FILE_TYPES=void 0;var io=process.versions.node.split(".");if(io[0]===void 0||io[1]===void 0)throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);var Bh=Number.parseInt(io[0],10),SI=Number.parseInt(io[1],10),Kh=10,TI=10,RI=Bh>Kh,AI=Bh===Kh&&SI>=TI;so.IS_SUPPORT_READDIR_WITH_FILE_TYPES=RI||AI});var $h=U(oo=>{"use strict";Object.defineProperty(oo,"__esModule",{value:!0});oo.createDirentFromStats=void 0;var Cc=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 yI(t,e){return new Cc(t,e)}oo.createDirentFromStats=yI});var Nc=U(ao=>{"use strict";Object.defineProperty(ao,"__esModule",{value:!0});ao.fs=void 0;var OI=$h();ao.fs=OI});var Pc=U(lo=>{"use strict";Object.defineProperty(lo,"__esModule",{value:!0});lo.joinPathSegments=void 0;function II(t,e,r){return t.endsWith(r)?t+e:t+r+e}lo.joinPathSegments=II});var Jh=U(Fr=>{"use strict";Object.defineProperty(Fr,"__esModule",{value:!0});Fr.readdir=Fr.readdirWithFileTypes=Fr.read=void 0;var LI=gn(),Yh=Hh(),CI=Lc(),Wh=Nc(),jh=Pc();function NI(t,e,r){if(!e.stats&&CI.IS_SUPPORT_READDIR_WITH_FILE_TYPES){Vh(t,e,r);return}zh(t,e,r)}Fr.read=NI;function Vh(t,e,r){e.fs.readdir(t,{withFileTypes:!0},(n,i)=>{if(n!==null){co(r,n);return}let s=i.map(a=>({dirent:a,name:a.name,path:jh.joinPathSegments(t,a.name,e.pathSegmentSeparator)}));if(!e.followSymbolicLinks){Dc(r,s);return}let o=s.map(a=>PI(a,e));Yh(o,(a,l)=>{if(a!==null){co(r,a);return}Dc(r,l)})})}Fr.readdirWithFileTypes=Vh;function PI(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=Wh.fs.createDirentFromStats(t.name,i),r(null,t)})}}function zh(t,e,r){e.fs.readdir(t,(n,i)=>{if(n!==null){co(r,n);return}let s=i.map(o=>{let a=jh.joinPathSegments(t,o,e.pathSegmentSeparator);return l=>{LI.stat(a,e.fsStatSettings,(c,u)=>{if(c!==null){l(c);return}let p={name:o,path:a,dirent:Wh.fs.createDirentFromStats(o,u)};e.stats&&(p.stats=u),l(null,p)})}});Yh(s,(o,a)=>{if(o!==null){co(r,o);return}Dc(r,a)})})}Fr.readdir=zh;function co(t,e){t(e)}function Dc(t,e){t(null,e)}});var em=U(Mr=>{"use strict";Object.defineProperty(Mr,"__esModule",{value:!0});Mr.readdir=Mr.readdirWithFileTypes=Mr.read=void 0;var DI=gn(),vI=Lc(),qh=Nc(),Qh=Pc();function wI(t,e){return!e.stats&&vI.IS_SUPPORT_READDIR_WITH_FILE_TYPES?Xh(t,e):Zh(t,e)}Mr.read=wI;function Xh(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=qh.fs.createDirentFromStats(i.name,s)}catch(s){if(e.throwErrorOnBrokenSymbolicLink)throw s}return i})}Mr.readdirWithFileTypes=Xh;function Zh(t,e){return e.fs.readdirSync(t).map(n=>{let i=Qh.joinPathSegments(t,n,e.pathSegmentSeparator),s=DI.statSync(i,e.fsStatSettings),o={name:n,path:i,dirent:qh.fs.createDirentFromStats(n,s)};return e.stats&&(o.stats=s),o})}Mr.readdir=Zh});var tm=U(kr=>{"use strict";Object.defineProperty(kr,"__esModule",{value:!0});kr.createFileSystemAdapter=kr.FILE_SYSTEM_ADAPTER=void 0;var zn=we("fs");kr.FILE_SYSTEM_ADAPTER={lstat:zn.lstat,stat:zn.stat,lstatSync:zn.lstatSync,statSync:zn.statSync,readdir:zn.readdir,readdirSync:zn.readdirSync};function bI(t){return t===void 0?kr.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},kr.FILE_SYSTEM_ADAPTER),t)}kr.createFileSystemAdapter=bI});var rm=U(wc=>{"use strict";Object.defineProperty(wc,"__esModule",{value:!0});var FI=we("path"),MI=gn(),kI=tm(),vc=class{constructor(e={}){this._options=e,this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!1),this.fs=kI.createFileSystemAdapter(this._options.fs),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,FI.sep),this.stats=this._getValue(this._options.stats,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0),this.fsStatSettings=new MI.Settings({followSymbolicLink:this.followSymbolicLinks,fs:this.fs,throwErrorOnBrokenSymbolicLink:this.throwErrorOnBrokenSymbolicLink})}_getValue(e,r){return e??r}};wc.default=vc});var uo=U(Gr=>{"use strict";Object.defineProperty(Gr,"__esModule",{value:!0});Gr.Settings=Gr.scandirSync=Gr.scandir=void 0;var nm=Jh(),GI=em(),bc=rm();Gr.Settings=bc.default;function xI(t,e,r){if(typeof e=="function"){nm.read(t,Fc(),e);return}nm.read(t,Fc(e),r)}Gr.scandir=xI;function UI(t,e){let r=Fc(e);return GI.read(t,r)}Gr.scandirSync=UI;function Fc(t={}){return t instanceof bc.default?t:new bc.default(t)}});var sm=U((XU,im)=>{"use strict";function HI(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}}im.exports=HI});var am=U((ZU,Mc)=>{"use strict";var BI=sm();function om(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=BI(KI),i=null,s=null,o=0,a=null,l={push:_,drain:pt,saturated:pt,pause:u,paused:!1,get concurrency(){return r},set concurrency($){if(!($>=1))throw new Error("fastqueue concurrency must be equal to or greater than 1");if(r=$,!l.paused)for(;i&&o<r;)o++,C()},running:c,resume:f,idle:m,length:p,getQueue:d,unshift:I,empty:pt,kill:L,killAndDrain:w,error:J,abort:Q};return l;function c(){return o}function u(){l.paused=!0}function p(){for(var $=i,te=0;$;)$=$.next,te++;return te}function d(){for(var $=i,te=[];$;)te.push($.value),$=$.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 _($,te){var M=n.get();M.context=t,M.release=C,M.value=$,M.callback=te||pt,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 I($,te){var M=n.get();M.context=t,M.release=C,M.value=$,M.callback=te||pt,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($){$&&n.release($);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 L(){i=null,s=null,l.drain=pt}function w(){i=null,s=null,l.drain(),l.drain=pt}function Q(){var $=i;for(i=null,s=null;$;){var te=$.next,M=$.callback,ne=$.errorHandler,de=$.value,N=$.context;$.value=null,$.callback=pt,$.errorHandler=null,ne&&ne(new Error("abort"),de),M.call(N,new Error("abort")),$.release($),$=te}l.drain=pt}function J($){a=$}}function pt(){}function KI(){this.value=null,this.callback=pt,this.next=null,this.release=pt,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=pt,t.errorHandler&&s(r,o),i.call(t.context,r,n),t.release(t)}}function $I(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=om(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(pt),p}function l(u){var p=new Promise(function(d,f){o(u,function(m,_){if(m){f(m);return}d(_)})});return p.catch(pt),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}}Mc.exports=om;Mc.exports.promise=$I});var po=U(Zt=>{"use strict";Object.defineProperty(Zt,"__esModule",{value:!0});Zt.joinPathSegments=Zt.replacePathSegmentSeparator=Zt.isAppliedFilter=Zt.isFatalError=void 0;function YI(t,e){return t.errorFilter===null?!0:!t.errorFilter(e)}Zt.isFatalError=YI;function WI(t,e){return t===null||t(e)}Zt.isAppliedFilter=WI;function jI(t,e){return t.split(/[/\\]/).join(e)}Zt.replacePathSegmentSeparator=jI;function VI(t,e,r){return t===""?e:t.endsWith(r)?t+e:t+r+e}Zt.joinPathSegments=VI});var xc=U(Gc=>{"use strict";Object.defineProperty(Gc,"__esModule",{value:!0});var zI=po(),kc=class{constructor(e,r){this._root=e,this._settings=r,this._root=zI.replacePathSegmentSeparator(e,r.pathSegmentSeparator)}};Gc.default=kc});var Bc=U(Hc=>{"use strict";Object.defineProperty(Hc,"__esModule",{value:!0});var JI=we("events"),qI=uo(),QI=am(),go=po(),XI=xc(),Uc=class extends XI.default{constructor(e,r){super(e,r),this._settings=r,this._scandir=qI.scandir,this._emitter=new JI.EventEmitter,this._queue=QI(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||!go.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=go.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),go.isAppliedFilter(this._settings.entryFilter,e)&&this._emitEntry(e),e.dirent.isDirectory()&&go.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(n,r===void 0?void 0:e.path)}_emitEntry(e){this._emitter.emit("entry",e)}};Hc.default=Uc});var lm=U($c=>{"use strict";Object.defineProperty($c,"__esModule",{value:!0});var ZI=Bc(),Kc=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new ZI.default(this._root,this._settings),this._storage=[]}read(e){this._reader.onError(r=>{eL(e,r)}),this._reader.onEntry(r=>{this._storage.push(r)}),this._reader.onEnd(()=>{tL(e,this._storage)}),this._reader.read()}};$c.default=Kc;function eL(t,e){t(e)}function tL(t,e){t(null,e)}});var cm=U(Wc=>{"use strict";Object.defineProperty(Wc,"__esModule",{value:!0});var rL=we("stream"),nL=Bc(),Yc=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new nL.default(this._root,this._settings),this._stream=new rL.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}};Wc.default=Yc});var um=U(Vc=>{"use strict";Object.defineProperty(Vc,"__esModule",{value:!0});var iL=uo(),fo=po(),sL=xc(),jc=class extends sL.default{constructor(){super(...arguments),this._scandir=iL.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(fo.isFatalError(this._settings,e))throw e}_handleEntry(e,r){let n=e.path;r!==void 0&&(e.path=fo.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),fo.isAppliedFilter(this._settings.entryFilter,e)&&this._pushToStorage(e),e.dirent.isDirectory()&&fo.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(n,r===void 0?void 0:e.path)}_pushToStorage(e){this._storage.push(e)}};Vc.default=jc});var dm=U(Jc=>{"use strict";Object.defineProperty(Jc,"__esModule",{value:!0});var oL=um(),zc=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new oL.default(this._root,this._settings)}read(){return this._reader.read()}};Jc.default=zc});var pm=U(Qc=>{"use strict";Object.defineProperty(Qc,"__esModule",{value:!0});var aL=we("path"),lL=uo(),qc=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,aL.sep),this.fsScandirSettings=new lL.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}};Qc.default=qc});var mo=U(er=>{"use strict";Object.defineProperty(er,"__esModule",{value:!0});er.Settings=er.walkStream=er.walkSync=er.walk=void 0;var gm=lm(),cL=cm(),uL=dm(),Xc=pm();er.Settings=Xc.default;function dL(t,e,r){if(typeof e=="function"){new gm.default(t,ho()).read(e);return}new gm.default(t,ho(e)).read(r)}er.walk=dL;function pL(t,e){let r=ho(e);return new uL.default(t,r).read()}er.walkSync=pL;function gL(t,e){let r=ho(e);return new cL.default(t,r).read()}er.walkStream=gL;function ho(t={}){return t instanceof Xc.default?t:new Xc.default(t)}});var _o=U(eu=>{"use strict";Object.defineProperty(eu,"__esModule",{value:!0});var fL=we("path"),hL=gn(),fm=pr(),Zc=class{constructor(e){this._settings=e,this._fsStatSettings=new hL.Settings({followSymbolicLink:this._settings.followSymbolicLinks,fs:this._settings.fs,throwErrorOnBrokenSymbolicLink:this._settings.followSymbolicLinks})}_getFullEntryPath(e){return fL.resolve(this._settings.cwd,e)}_makeEntry(e,r){let n={name:r,path:r,dirent:fm.fs.createDirentFromStats(r,e)};return this._settings.stats&&(n.stats=e),n}_isFatalError(e){return!fm.errno.isEnoentCodeError(e)&&!this._settings.suppressErrors}};eu.default=Zc});var nu=U(ru=>{"use strict";Object.defineProperty(ru,"__esModule",{value:!0});var mL=we("stream"),_L=gn(),EL=mo(),SL=_o(),tu=class extends SL.default{constructor(){super(...arguments),this._walkStream=EL.walkStream,this._stat=_L.stat}dynamic(e,r){return this._walkStream(e,r)}static(e,r){let n=e.map(this._getFullEntryPath,this),i=new mL.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))})}};ru.default=tu});var hm=U(su=>{"use strict";Object.defineProperty(su,"__esModule",{value:!0});var TL=mo(),RL=_o(),AL=nu(),iu=class extends RL.default{constructor(){super(...arguments),this._walkAsync=TL.walk,this._readerStream=new AL.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))})}};su.default=iu});var mm=U(au=>{"use strict";Object.defineProperty(au,"__esModule",{value:!0});var ji=pr(),ou=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 ji.pattern.getPatternParts(e,this._micromatchOptions).map(n=>ji.pattern.isDynamicPattern(n,this._settings)?{dynamic:!0,pattern:n,patternRe:ji.pattern.makeRe(n,this._micromatchOptions)}:{dynamic:!1,pattern:n})}_splitSegmentsIntoSections(e){return ji.array.splitWhen(e,r=>r.dynamic&&ji.pattern.hasGlobStar(r.pattern))}};au.default=ou});var _m=U(cu=>{"use strict";Object.defineProperty(cu,"__esModule",{value:!0});var yL=mm(),lu=class extends yL.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}};cu.default=lu});var Em=U(du=>{"use strict";Object.defineProperty(du,"__esModule",{value:!0});var Eo=pr(),OL=_m(),uu=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 OL.default(e,this._settings,this._micromatchOptions)}_getNegativePatternsRe(e){let r=e.filter(Eo.pattern.isAffectDepthOfReadingPattern);return Eo.pattern.convertPatternsToRe(r,this._micromatchOptions)}_filter(e,r,n,i){if(this._isSkippedByDeep(e,r.path)||this._isSkippedSymbolicLink(r))return!1;let s=Eo.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!Eo.pattern.matchAny(e,r)}};du.default=uu});var Sm=U(gu=>{"use strict";Object.defineProperty(gu,"__esModule",{value:!0});var xr=pr(),pu=class{constructor(e,r){this._settings=e,this._micromatchOptions=r,this.index=new Map}getFilter(e,r){let[n,i]=xr.pattern.partitionAbsoluteAndRelative(r),s={positive:{all:xr.pattern.convertPatternsToRe(e,this._micromatchOptions)},negative:{absolute:xr.pattern.convertPatternsToRe(n,Object.assign(Object.assign({},this._micromatchOptions),{dot:!0})),relative:xr.pattern.convertPatternsToRe(i,Object.assign(Object.assign({},this._micromatchOptions),{dot:!0}))}};return o=>this._filter(o,s)}_filter(e,r){let n=xr.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=xr.path.makeAbsolute(this._settings.cwd,e);return this._isMatchToPatterns(i,r,n)}_isMatchToPatterns(e,r,n){if(r.length===0)return!1;let i=xr.pattern.matchAny(e,r);return!i&&n?xr.pattern.matchAny(e+"/",r):i}};gu.default=pu});var Tm=U(hu=>{"use strict";Object.defineProperty(hu,"__esModule",{value:!0});var IL=pr(),fu=class{constructor(e){this._settings=e}getFilter(){return e=>this._isNonFatalError(e)}_isNonFatalError(e){return IL.errno.isEnoentCodeError(e)||this._settings.suppressErrors}};hu.default=fu});var Am=U(_u=>{"use strict";Object.defineProperty(_u,"__esModule",{value:!0});var Rm=pr(),mu=class{constructor(e){this._settings=e}getTransformer(){return e=>this._transform(e)}_transform(e){let r=e.path;return this._settings.absolute&&(r=Rm.path.makeAbsolute(this._settings.cwd,r),r=Rm.path.unixify(r)),this._settings.markDirectories&&e.dirent.isDirectory()&&(r+="/"),this._settings.objectMode?Object.assign(Object.assign({},e),{path:r}):r}};_u.default=mu});var So=U(Su=>{"use strict";Object.defineProperty(Su,"__esModule",{value:!0});var LL=we("path"),CL=Em(),NL=Sm(),PL=Tm(),DL=Am(),Eu=class{constructor(e){this._settings=e,this.errorFilter=new PL.default(this._settings),this.entryFilter=new NL.default(this._settings,this._getMicromatchOptions()),this.deepFilter=new CL.default(this._settings,this._getMicromatchOptions()),this.entryTransformer=new DL.default(this._settings)}_getRootDirectory(e){return LL.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}}};Su.default=Eu});var ym=U(Ru=>{"use strict";Object.defineProperty(Ru,"__esModule",{value:!0});var vL=hm(),wL=So(),Tu=class extends wL.default{constructor(){super(...arguments),this._reader=new vL.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)}};Ru.default=Tu});var Om=U(yu=>{"use strict";Object.defineProperty(yu,"__esModule",{value:!0});var bL=we("stream"),FL=nu(),ML=So(),Au=class extends ML.default{constructor(){super(...arguments),this._reader=new FL.default(this._settings)}read(e){let r=this._getRootDirectory(e),n=this._getReaderOptions(e),i=this.api(r,e,n),s=new bL.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)}};yu.default=Au});var Im=U(Iu=>{"use strict";Object.defineProperty(Iu,"__esModule",{value:!0});var kL=gn(),GL=mo(),xL=_o(),Ou=class extends xL.default{constructor(){super(...arguments),this._walkSync=GL.walkSync,this._statSync=kL.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)}};Iu.default=Ou});var Lm=U(Cu=>{"use strict";Object.defineProperty(Cu,"__esModule",{value:!0});var UL=Im(),HL=So(),Lu=class extends HL.default{constructor(){super(...arguments),this._reader=new UL.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)}};Cu.default=Lu});var Cm=U(qn=>{"use strict";Object.defineProperty(qn,"__esModule",{value:!0});qn.DEFAULT_FILE_SYSTEM_ADAPTER=void 0;var Jn=we("fs"),BL=we("os"),KL=Math.max(BL.cpus().length,1);qn.DEFAULT_FILE_SYSTEM_ADAPTER={lstat:Jn.lstat,lstatSync:Jn.lstatSync,stat:Jn.stat,statSync:Jn.statSync,readdir:Jn.readdir,readdirSync:Jn.readdirSync};var Nu=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,KL),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({},qn.DEFAULT_FILE_SYSTEM_ADAPTER),e)}};qn.default=Nu});var wu=U((OH,Pm)=>{"use strict";var Nm=Ph(),$L=ym(),YL=Om(),WL=Lm(),Pu=Cm(),Lt=pr();async function Du(t,e){xt(t);let r=vu(t,$L.default,e),n=await Promise.all(r);return Lt.array.flatten(n)}(function(t){t.glob=t,t.globSync=e,t.globStream=r,t.async=t;function e(c,u){xt(c);let p=vu(c,WL.default,u);return Lt.array.flatten(p)}t.sync=e;function r(c,u){xt(c);let p=vu(c,YL.default,u);return Lt.stream.merge(p)}t.stream=r;function n(c,u){xt(c);let p=[].concat(c),d=new Pu.default(u);return Nm.generate(p,d)}t.generateTasks=n;function i(c,u){xt(c);let p=new Pu.default(u);return Lt.pattern.isDynamicPattern(c,p)}t.isDynamicPattern=i;function s(c){return xt(c),Lt.path.escape(c)}t.escapePath=s;function o(c){return xt(c),Lt.path.convertPathToPattern(c)}t.convertPathToPattern=o;let a;(function(c){function u(d){return xt(d),Lt.path.escapePosixPath(d)}c.escapePath=u;function p(d){return xt(d),Lt.path.convertPosixPathToPattern(d)}c.convertPathToPattern=p})(a=t.posix||(t.posix={}));let l;(function(c){function u(d){return xt(d),Lt.path.escapeWindowsPath(d)}c.escapePath=u;function p(d){return xt(d),Lt.path.convertWindowsPathToPattern(d)}c.convertPathToPattern=p})(l=t.win32||(t.win32={}))})(Du||(Du={}));function vu(t,e,r){let n=[].concat(t),i=new Pu.default(r),s=Nm.generate(n,i),o=new e(i);return s.map(o.read,o)}function xt(t){if(![].concat(t).every(n=>Lt.string.isString(n)&&!Lt.string.isEmpty(n)))throw new TypeError("Patterns must be a string (non empty) or an array of strings")}Pm.exports=Du});var xm=U((IH,Ao)=>{"use strict";function wm(t){return Array.isArray(t)?t:[t]}var jL=void 0,Fu="",Dm=" ",bu="\\",VL=/^\s+$/,zL=/(?:[^\\]|^)\\$/,JL=/^\\!/,qL=/^\\#/,QL=/\r?\n/g,XL=/^\.{0,2}\/|^\.{1,2}$/,ZL=/\/$/,Qn="/",bm="node-ignore";typeof Symbol<"u"&&(bm=Symbol.for("node-ignore"));var Fm=bm,Xn=(t,e,r)=>(Object.defineProperty(t,e,{value:r}),r),eC=/([0-z])-([0-z])/g,Mm=()=>!1,tC=t=>t.replace(eC,(e,r,n)=>r.charCodeAt(0)<=n.charCodeAt(0)?e:Fu),rC=t=>t.startsWith("!")||t.startsWith("\\^")?`^${t.slice(t[0]==="!"?1:2)}`:t,nC=t=>{let{length:e}=t;return t.slice(0,e-e%2)},iC=[[/^\uFEFF/,()=>Fu],[/((?:\\\\)*?)(\\?\s+)$/,(t,e,r)=>e+(r.indexOf("\\")===0?Dm:Fu)],[/(\\+?)\s/g,(t,e)=>{let{length:r}=e;return e.slice(0,r-r%2)+Dm}],[/[\\$.|*+(){^]/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,()=>bu],[/\\\\/g,()=>bu],[/(\\)?\[([^\]/]*?)(\\*)($|\])/g,(t,e,r,n,i)=>e===bu?`\\[${r}${nC(n)}${i}`:i==="]"&&n.length%2===0?`[${rC(tC(r))}${n}]`:"[]"],[/(?:[^*])$/,t=>/\/$/.test(t)?`${t}$`:`${t}(?=$|\\/$)`]],sC=/(^|\\\/)?\\\*$/,Vi="regex",To="checkRegex",vm="_",oC={[Vi](t,e){return`${e?`${e}[^/]+`:"[^/]*"}(?=$|\\/$)`},[To](t,e){return`${e?`${e}[^/]*`:"[^/]*"}(?=$|\\/$)`}},aC=t=>iC.reduce((e,[r,n])=>e.replace(r,n.bind(t)),t),Ro=t=>typeof t=="string",lC=t=>t&&Ro(t)&&!VL.test(t)&&!zL.test(t)&&t.indexOf("#")!==0,cC=t=>t.split(QL).filter(Boolean),Mu=class{constructor(e,r,n,i,s,o){this.pattern=e,this.mark=r,this.negative=s,Xn(this,"body",n),Xn(this,"ignoreCase",i),Xn(this,"regexPrefix",o)}get regex(){let e=vm+Vi;return this[e]?this[e]:this._make(Vi,e)}get checkRegex(){let e=vm+To;return this[e]?this[e]:this._make(To,e)}_make(e,r){let n=this.regexPrefix.replace(sC,oC[e]),i=this.ignoreCase?new RegExp(n,"i"):new RegExp(n);return Xn(this,r,i)}},uC=({pattern:t,mark:e},r)=>{let n=!1,i=t;i.indexOf("!")===0&&(n=!0,i=i.substr(1)),i=i.replace(JL,"!").replace(qL,"#");let s=aC(i);return new Mu(t,e,i,r,n,s)},ku=class{constructor(e){this._ignoreCase=e,this._rules=[]}_add(e){if(e&&e[Fm]){this._rules=this._rules.concat(e._rules._rules),this._added=!0;return}if(Ro(e)&&(e={pattern:e}),lC(e.pattern)){let r=uC(e,this._ignoreCase);this._added=!0,this._rules.push(r)}}add(e){return this._added=!1,wm(Ro(e)?cC(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?jL:l)});let a={ignored:i,unignored:s};return o&&(a.rule=o),a}},dC=(t,e)=>{throw new e(t)},gr=(t,e,r)=>Ro(t)?t?gr.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),km=t=>XL.test(t);gr.isNotRelative=km;gr.convert=t=>t;var Gu=class{constructor({ignorecase:e=!0,ignoreCase:r=e,allowRelativePaths:n=!1}={}){Xn(this,Fm,!0),this._rules=new ku(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&&gr.convert(e);return gr(s,e,this._strictPathCheck?dC:Mm),this._t(s,r,n,i)}checkIgnore(e){if(!ZL.test(e))return this.test(e);let r=e.split(Qn).filter(Boolean);if(r.pop(),r.length){let n=this._t(r.join(Qn)+Qn,this._testCache,!0,r);if(n.ignored)return n}return this._rules.test(e,!1,To)}_t(e,r,n,i){if(e in r)return r[e];if(i||(i=e.split(Qn).filter(Boolean)),i.pop(),!i.length)return r[e]=this._rules.test(e,n,Vi);let s=this._t(i.join(Qn)+Qn,r,n,i);return r[e]=s.ignored?s:this._rules.test(e,n,Vi)}ignores(e){return this._test(e,this._ignoreCache,!1).ignored}createFilter(){return e=>!this.ignores(e)}filter(e){return wm(e).filter(this.createFilter())}test(e){return this._test(e,this._testCache,!0)}},xu=t=>new Gu(t),pC=t=>gr(t&&gr.convert(t),t,Mm),Gm=()=>{let t=r=>/^\\\\\?\\/.test(r)||/["<>|\u0000-\u001F]+/u.test(r)?r:r.replace(/\\/g,"/");gr.convert=t;let e=/^[a-z]:\//i;gr.isNotRelative=r=>e.test(r)||km(r)};typeof process<"u"&&process.platform==="win32"&&Gm();Ao.exports=xu;xu.default=xu;Ao.exports.isPathValid=pC;Xn(Ao.exports,Symbol.for("setupWindows"),Gm)});import*as XT from"dotenv";import $t from"process";import{execFile as ER}from"child_process";import{promisify as SR}from"util";import cr from"fs/promises";import lt from"path";import{spawn as nR}from"child_process";import qp from"fs/promises";import ln from"path";import iR from"os";var xl=class{value;next;constructor(e){this.value=e}},Di=class{#t;#s;#c;constructor(){this.clear()}enqueue(e){let r=new xl(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 sn(t){let e=!1;if(typeof t=="object"&&({concurrency:t,rejectOnClear:e=!1}=t),Jp(t),typeof e!="boolean")throw new TypeError("Expected `rejectOnClear` to be a boolean");let r=new Di,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){Jp(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 Jp(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 Pr={NAME:"Docuvia",EMAIL:"docuvia@localhost"};var on="refs/heads/",Ul="HEAD";var sR="fast-import",oR="--quiet",Hl={PIPE:"pipe",IGNORE:"ignore"},ws={DATA:"data",ERROR:"error",CLOSE:"close"},an={COMMIT:"commit",COMMITTER:"committer",DATA:"data",FROM:"from",DELETE_ALL:"deleteall",MODIFY:"M"},aR="100644",lR="inline",cR="+0000",uR="stdin write failed: ",dR=(t,e,r)=>{let n=[e,r?`${uR}${r.message}`:""].filter(Boolean).join("; ");return`git fast-import exited with code ${t}${n?": "+n:""}`},pR=300*1e3,Qp="SIGTERM",gR=t=>`git fast-import timed out after ${t}ms and was terminated`,fR=iR.cpus().length*4;async function Xp(t,e){let r=ln.resolve(t),n=e?ln.resolve(e):r;if(!r.startsWith(n+ln.sep)&&r!==n)throw new E(y.FS_PATH_TRAVERSAL,`sourceDir "${t}" escapes allowed root "${n}"`);let i=new Map,s=sn(fR),o=async a=>{let l=await qp.readdir(a,{withFileTypes:!0});await Promise.all(l.map(async c=>{let u=ln.join(a,c.name);if(c.isDirectory())await o(u);else if(c.isFile()){let p=ln.relative(t,u),d=await s(()=>qp.readFile(u,H));i.set(p,d)}}))};return await o(t),i}function Zp(t,e,r,n,i){let s=[];s.push(`${an.COMMIT} ${on}${t}`),s.push(`${an.COMMITTER} ${Pr.NAME} <${Pr.EMAIL}> ${r} ${cR}`),s.push(`${an.DATA} ${Buffer.byteLength(n,H)}`),s.push(n),i&&s.push(`${an.FROM} ${i}`),s.push(an.DELETE_ALL);for(let[o,a]of e){let l=Buffer.from(a,H),c=o.split(ln.sep).join(ln.posix.sep);s.push(`${an.MODIFY} ${aR} ${lR} ${c}`),s.push(`${an.DATA} ${l.length}`),s.push(a)}return s.push(""),s.join(`
5
- `)}function eg(t,e,r=pR){return new Promise((n,i)=>{let s=nR("git",[sR,oR],{cwd:t,stdio:[Hl.PIPE,Hl.IGNORE,Hl.PIPE]}),o=setTimeout(()=>{s.kill(Qp),i(new Error(gR(r)))},r);o.unref();let a=[],l;s.stderr.on(ws.DATA,c=>a.push(c)),s.on(ws.ERROR,i),s.on(ws.CLOSE,c=>{if(clearTimeout(o),c===0)return n();let u=Buffer.concat(a).toString(H).trim();i(new Error(dR(c,u,l)))}),s.stdin.on(ws.ERROR,c=>{l=c});try{s.stdin.end(e,H)}catch(c){s.kill(Qp),clearTimeout(o),i(c instanceof Error?c:new Error(String(c)));return}})}import xn from"path";var hR="Git hook name must be a basename contained by the resolved hooks directory";function mR(t){return t.length===0||t==="."||t===".."||t.includes("/")||t.includes("\\")||xn.isAbsolute(t)}function _R(t){return t.length===0||t===".."||t.startsWith(`..${xn.sep}`)||xn.isAbsolute(t)}function tg(){throw new E(y.FS_PATH_TRAVERSAL,hR)}function vi(t,e){mR(e)&&tg();let r=xn.resolve(t),n=xn.resolve(r,e),i=xn.relative(r,n);return _R(i)&&tg(),n}var TR=SR(ER),RR={LC_ALL:"C",LANG:"C",LC_MESSAGES:"C"},pe=(t,e,r={})=>TR(t,e,{...r,encoding:"utf8",env:{...process.env,...r.env??{},...RR}}),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"},bs={PATH:"worktree ",BRANCH:"branch "},AR="\0",yR="",Bl={RENAMED:"R",ADDED:"A",DELETED:"D"},OR="4b825dc642cb6eb9a060e54bf8d69288fbee4904",rg=".git",ng="hooks",IR="_",ig="docuvia-knowledge.lock",LR=1e4,CR=100,NR=6e4,sg="object",og="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`},Un=class{async getGitDir(e){try{let{stdout:r}=await pe("git",[ge.REV_PARSE,re.GIT_DIR_FLAG],{cwd:e});return lt.resolve(e,r.trim())}catch{return lt.join(e,rg)}}async getGitCommonDir(e){try{let{stdout:r}=await pe("git",[ge.REV_PARSE,re.GIT_COMMON_DIR_FLAG],{cwd:e});return lt.resolve(e,r.trim())}catch{return lt.join(e,rg)}}async resolveHooksDir(e){let r;try{let{stdout:n}=await pe("git",[ge.REV_PARSE,re.GIT_PATH_FLAG,ng],{cwd:e});r=lt.resolve(e,n.trim())}catch{let n=await this.getGitCommonDir(e);r=lt.join(n,ng)}return lt.basename(r)===IR?lt.dirname(r):r}async isGitRepository(e){try{return await pe("git",[ge.REV_PARSE,re.IS_INSIDE_WORK_TREE],{cwd:e}),!0}catch{return!1}}async branchExists(e,r){try{let{stdout:n}=await pe("git",[ge.BRANCH,re.LIST,r],{cwd:e});return n.trim().length>0}catch(n){throw E.wrap(y.GIT_COMMAND_FAILED,Fe.BRANCH_LIST_FAILED,n)}}async deleteBranch(e,r){try{await pe("git",[ge.BRANCH,re.DELETE_FORCE,r],{cwd:e})}catch(n){throw E.wrap(y.GIT_COMMAND_FAILED,Fe.BRANCH_DELETE_FAILED,n)}}async commitEmptyTree(e,r){try{let{stdout:n}=await pe("git",[ge.COMMIT_TREE,OR,re.MESSAGE_FLAG,r],{cwd:e});return n.trim()}catch(n){throw E.wrap(y.GIT_BRANCH_CREATE_FAILED,Fe.COMMIT_TREE_FAILED,n)}}async updateBranchRef(e,r,n){try{await pe("git",[ge.UPDATE_REF,`${on}${r}`,n],{cwd:e})}catch(i){throw E.wrap(y.GIT_BRANCH_CREATE_FAILED,Fe.UPDATE_REF_FAILED,i)}}async hooksDirExists(e){try{let r=await this.resolveHooksDir(e);return await cr.access(r),!0}catch{return!1}}async readHookFile(e,r){let n=await this.resolveHooksDir(e),i=vi(n,r);try{return await cr.readFile(i,H)}catch{return}}async appendHookFile(e,r,n){try{let i=await this.resolveHooksDir(e),s=vi(i,r);await cr.appendFile(s,n)}catch(i){throw E.wrap(y.GIT_HOOK_INSTALL_FAILED,Fe.HOOK_FILE_WRITE_FAILED,i)}}async writeHookFile(e,r,n){try{let i=await this.resolveHooksDir(e),s=vi(i,r);await cr.writeFile(s,n)}catch(i){throw E.wrap(y.GIT_HOOK_INSTALL_FAILED,Fe.HOOK_FILE_WRITE_FAILED,i)}}async makeHookExecutable(e,r){try{let n=await this.resolveHooksDir(e),i=vi(n,r);await cr.chmod(i,493)}catch(n){throw E.wrap(y.GIT_HOOK_INSTALL_FAILED,Fe.HOOK_FILE_CHMOD_FAILED,n)}}async listTrackedFilesWithBlobHash(e){let r=new Map;try{let{stdout:n}=await pe("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(y.GIT_COMMAND_FAILED,Fe.LS_FILES_STAGED_FAILED,n)}}async listUntrackedFiles(e){try{let{stdout:r}=await pe("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(y.GIT_COMMAND_FAILED,Fe.LS_FILES_OTHERS_FAILED,r)}}async listModifiedFiles(e){try{let{stdout:r}=await pe("git",[ge.DIFF,re.NAME_ONLY],{cwd:e});return r.split(`
8
- `).map(n=>n.trim()).filter(Boolean)}catch(r){throw E.wrap(y.GIT_COMMAND_FAILED,Fe.DIFF_NAME_ONLY_FAILED,r)}}async readBlobContent(e,r){try{let{stdout:n}=await pe("git",[ge.CAT_FILE,re.BLOB,r],{cwd:e,maxBuffer:10485760});return n}catch(n){throw E.wrap(y.GIT_COMMAND_FAILED,Fe.CAT_FILE_BLOB_FAILED,n)}}async readFileAtRef(e,r,n){try{let i=n.split(lt.sep).join(lt.posix.sep),{stdout:s}=await pe("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(lt.sep).join(lt.posix.sep),s=i.endsWith("/")?i:`${i}/`,{stdout:o}=await pe("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 pe("git",[ge.LOG,r,re.MAX_COUNT_FLAG,String(n),re.LOG_FORMAT_SHA_AND_BODY],{cwd:e,maxBuffer:67108864});return i.split(AR).map(s=>s.trim()).filter(Boolean).map(s=>{let o=s.indexOf(yR);return{sha:s.slice(0,o),message:s.slice(o+1)}})}catch{return[]}}async getCommitAncestry(e,r,n=1e3){try{let{stdout:i}=await pe("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 pe("git",[ge.REMOTE,re.GET_URL,ys],{cwd:e}),n=r.trim();return n.length>0?n:void 0}catch{return}}async getRecentChangedFilePaths(e,r=100){try{let{stdout:n}=await pe("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 pe("git",[ge.STATUS,re.PORCELAIN],{cwd:e});return r.trim().length>0}catch(r){throw E.wrap(y.GIT_COMMAND_FAILED,Fe.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??Ul,...n?[n]:[]],{stdout:a}=await pe("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(Bl.RENAMED)?{status:At.RENAMED,file:r[2]??r[1],oldFile:r[1]}:e.startsWith(Bl.ADDED)?{status:At.ADDED,file:r[1]}:e.startsWith(Bl.DELETED)?{status:At.DELETED,file:r[1]}:{status:At.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:At.ADDED}))}async getChangedLineRanges(e,r,n,i){let s=[];try{let{stdout:o}=await pe("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 pe("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(y.GIT_COMMAND_FAILED,Fe.DIFF_TREE_FAILED,n)}}async getHeadSha(e){try{let{stdout:r}=await pe("git",[ge.REV_PARSE,Ul],{cwd:e}),n=r.trim();return n.length>0?n:void 0}catch{return}}async listWorktrees(e){let r;try{r=(await pe("git",[ge.WORKTREE,re.WORKTREE_LIST,re.PORCELAIN],{cwd:e})).stdout}catch{return[]}let n=[];for(let i of r.split(`
3
+ import{a as Sp,b as Tp,d as je,f as Rp,g as Ap,h as Op}from"./chunk-CNYHBOCB.js";import{A as Bp,B as Kp,C as $p,D as Yp,E as kl,F as Gl,G as Wp,H as Ps,I as jp,J as Vp,K as Ds,L as zp,M as vs,N as kt,O as nn,P as Cr,a as Ip,b as bl,c as kn,d as Ns,e as wl,f as Fl,g as Gn,h as Lp,i as Cp,j as Np,k as _t,l as Lr,m as Pp,n as Dp,o as vp,p as bp,q as wp,r as Ml,s as Fp,t as Pi,u as Mp,v as kp,w as Gp,x as xp,y as Up,z as Hp}from"./chunk-KDURFY2Q.js";import{a as yp,b as vl,c as h,d as g,e as Ot,g as Nr}from"./chunk-YBPQ2IUS.js";import{$ as hp,A as Xd,Aa as Ls,B as tn,Ba as rn,C as Mt,Ca as bn,D as Nl,Da as wn,E as Zd,Ea as Cs,F as or,Fa as lr,G as Ii,Ga as Ni,H as _e,Ha as Or,I as Ar,Ia as Ep,J as ep,Ja as K,K as tp,Ka as Fn,L as rp,La as Mn,M as np,Ma as yr,N as Li,Na as Ir,O as ip,P as sp,Q as op,R as ap,S as lp,T as cp,U as up,V as at,W as Ci,X as dp,Y as pp,Z as gp,_ as fp,a as ye,aa as ar,b as Jd,ba as mt,c as me,ca as mp,da as se,e as qd,ea as H,f as A,fa as Jt,g as E,ga as Os,h as y,ha as S,i as R,ia as _p,j as O,k as T,l as At,m as Il,n as B,o as qe,p as Rr,q as de,r as sr,s as Ft,t as en,u as Te,ua as Pl,v as Qd,va as ys,w as zt,wa as Is,x as Ll,xa as Dl,y as We,ya as Dn,z as Cl,za as vn}from"./chunk-WL3HOIHC.js";import{a as be,b as U,c as yl}from"./chunk-KVOCOCYJ.js";var xg=U(Yn=>{"use strict";Object.defineProperty(Yn,"__esModule",{value:!0});Yn.splitWhen=Yn.flatten=void 0;function MA(t){return t.reduce((e,r)=>[].concat(e,r),[])}Yn.flatten=MA;function kA(t,e){let r=[[]],n=0;for(let i of t)e(i)?(n++,r[n]=[]):r[n].push(i);return r}Yn.splitWhen=kA});var Ug=U(Ws=>{"use strict";Object.defineProperty(Ws,"__esModule",{value:!0});Ws.isEnoentCodeError=void 0;function GA(t){return t.code==="ENOENT"}Ws.isEnoentCodeError=GA});var Hg=U(js=>{"use strict";Object.defineProperty(js,"__esModule",{value:!0});js.createDirentFromStats=void 0;var zl=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 xA(t,e){return new zl(t,e)}js.createDirentFromStats=xA});var Yg=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 UA=be("os"),HA=be("path"),Bg=UA.platform()==="win32",BA=2,KA=/(\\?)([()*?[\]{|}]|^!|[!+@](?=\()|\\(?![!()*+?@[\]{|}]))/g,$A=/(\\?)([()[\]{}]|^!|[!+@](?=\())/g,YA=/^\\\\([.?])/,WA=/\\(?![!()+@[\]{}])/g;function jA(t){return t.replace(/\\/g,"/")}ke.unixify=jA;function VA(t,e){return HA.resolve(t,e)}ke.makeAbsolute=VA;function zA(t){if(t.charAt(0)==="."){let e=t.charAt(1);if(e==="/"||e==="\\")return t.slice(BA)}return t}ke.removeLeadingDotSegment=zA;ke.escape=Bg?Jl:ql;function Jl(t){return t.replace($A,"\\$2")}ke.escapeWindowsPath=Jl;function ql(t){return t.replace(KA,"\\$2")}ke.escapePosixPath=ql;ke.convertPathToPattern=Bg?Kg:$g;function Kg(t){return Jl(t).replace(YA,"//$1").replace(WA,"/")}ke.convertWindowsPathToPattern=Kg;function $g(t){return ql(t)}ke.convertPosixPathToPattern=$g});var jg=U((uU,Wg)=>{"use strict";Wg.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 Jg=U((dU,zg)=>{"use strict";var JA=jg(),Vg={"{":"}","(":")","[":"]"},qA=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=Vg[a];if(l){var c=t.indexOf(l,e);c!==-1&&(e=c+1)}if(t[e]==="!")return!0}else e++}return!1},QA=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=Vg[r];if(n){var i=t.indexOf(n,e);i!==-1&&(e=i+1)}if(t[e]==="!")return!0}else e++}return!1};zg.exports=function(e,r){if(typeof e!="string"||e==="")return!1;if(JA(e))return!0;var n=qA;return r&&r.strict===!1&&(n=QA),n(e)}});var Qg=U((pU,qg)=>{"use strict";var XA=Jg(),ZA=be("path").posix.dirname,eO=be("os").platform()==="win32",Ql="/",tO=/\\/g,rO=/[\{\[].*[\}\]]$/,nO=/(^|[^\\])([\{\[]|\([^\)]+$)/,iO=/\\([\!\*\?\|\[\]\(\)\{\}])/g;qg.exports=function(e,r){var n=Object.assign({flipBackslashes:!0},r);n.flipBackslashes&&eO&&e.indexOf(Ql)<0&&(e=e.replace(tO,Ql)),rO.test(e)&&(e+=Ql),e+="a";do e=ZA(e);while(XA(e)||nO.test(e));return e.replace(iO,"$1")}});var Vs=U(It=>{"use strict";It.isInteger=t=>typeof t=="number"?Number.isInteger(t):typeof t=="string"&&t.trim()!==""?Number.isInteger(Number(t)):!1;It.find=(t,e)=>t.nodes.find(r=>r.type===e);It.exceedsLimit=(t,e,r=1,n)=>n===!1||!It.isInteger(t)||!It.isInteger(e)?!1:(Number(e)-Number(t))/Number(r)>=n;It.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)};It.encloseBrace=t=>t.type!=="brace"?!1:t.commas>>0+t.ranges>>0===0?(t.invalid=!0,!0):!1;It.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;It.isOpenOrClose=t=>t.type==="open"||t.type==="close"?!0:t.open===!0||t.close===!0;It.reduce=t=>t.reduce((e,r)=>(r.type==="text"&&e.push(r.value),r.type==="range"&&(r.type="text"),e),[]);It.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 zs=U((fU,Zg)=>{"use strict";var Xg=Vs();Zg.exports=(t,e={})=>{let r=(n,i={})=>{let s=e.escapeInvalid&&Xg.isInvalidBrace(i),o=n.invalid===!0&&e.escapeInvalid===!0,a="";if(n.value)return(s||o)&&Xg.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 tf=U((hU,ef)=>{"use strict";ef.exports=function(t){return typeof t=="number"?t-t===0:typeof t=="string"&&t.trim()!==""?Number.isFinite?Number.isFinite(+t):isFinite(+t):!1}});var df=U((mU,uf)=>{"use strict";var rf=tf(),dn=(t,e,r)=>{if(rf(t)===!1)throw new TypeError("toRegexRange: expected the first argument to be a number");if(e===void 0||t===e)return String(t);if(rf(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(dn.cache.hasOwnProperty(l))return dn.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=cf(t)||cf(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=nf(_,Math.abs(c),d,n),c=d.a=0}return u>=0&&(f=nf(c,u,d,n)),d.negatives=m,d.positives=f,d.result=sO(m,f,n),n.capture===!0?d.result=`(${d.result})`:n.wrap!==!1&&f.length+m.length>1&&(d.result=`(?:${d.result})`),dn.cache[l]=d,d.result};function sO(t,e,r){let n=Xl(t,e,"-",!1,r)||[],i=Xl(e,t,"",!1,r)||[],s=Xl(t,e,"-?",!0,r)||[];return n.concat(s).concat(i).join("|")}function oO(t,e){let r=1,n=1,i=of(t,r),s=new Set([e]);for(;t<=i&&i<=e;)s.add(i),r+=1,i=of(t,r);for(i=af(e+1,n)-1;t<i&&i<=e;)s.add(i),n+=1,i=af(e+1,n)-1;return s=[...s],s.sort(cO),s}function aO(t,e,r){if(t===e)return{pattern:t,count:[],digits:0};let n=lO(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+=uO(l,c,r):o++}return o&&(s+=r.shorthand===!0?"\\d":"[0-9]"),{pattern:s,count:[o],digits:i}}function nf(t,e,r,n){let i=oO(t,e),s=[],o=t,a;for(let l=0;l<i.length;l++){let c=i[l],u=aO(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+lf(a.count),o=c+1;continue}r.isPadded&&(p=dO(c,r,n)),u.string=p+u.pattern+lf(u.count),s.push(u),o=c+1,a=u}return s}function Xl(t,e,r,n,i){let s=[];for(let o of t){let{string:a}=o;!n&&!sf(e,"string",a)&&s.push(r+a),n&&sf(e,"string",a)&&s.push(r+a)}return s}function lO(t,e){let r=[];for(let n=0;n<t.length;n++)r.push([t[n],e[n]]);return r}function cO(t,e){return t>e?1:e>t?-1:0}function sf(t,e,r){return t.some(n=>n[e]===r)}function of(t,e){return Number(String(t).slice(0,-e)+"9".repeat(e))}function af(t,e){return t-t%Math.pow(10,e)}function lf(t){let[e=0,r=""]=t;return r||e>1?`{${e+(r?","+r:"")}}`:""}function uO(t,e,r){return`[${t}${e-t===1?"":"-"}${e}]`}function cf(t){return/^-?(0+)\d/.test(t)}function dO(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}}`}}dn.cache={};dn.clearCache=()=>dn.cache={};uf.exports=dn});var tc=U((_U,Ef)=>{"use strict";var pO=be("util"),gf=df(),pf=t=>t!==null&&typeof t=="object"&&!Array.isArray(t),gO=t=>e=>t===!0?Number(e):String(e),Zl=t=>typeof t=="number"||typeof t=="string"&&t!=="",Bi=t=>Number.isInteger(+t),ec=t=>{let e=`${t}`,r=-1;if(e[0]==="-"&&(e=e.slice(1)),e==="0")return!1;for(;e[++r]==="0";);return r>0},fO=(t,e,r)=>typeof t=="string"||typeof e=="string"?!0:r.stringify===!0,hO=(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},qs=(t,e)=>{let r=t[0]==="-"?"-":"";for(r&&(t=t.slice(1),e--);t.length<e;)t="0"+t;return r?"-"+t:t},mO=(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=>qs(String(a),r)).join("|")),t.negatives.length&&(s=`-(${n}${t.negatives.map(a=>qs(String(a),r)).join("|")})`),i&&s?o=`${i}|${s}`:o=i||s,e.wrap?`(${n}${o})`:o},ff=(t,e,r,n)=>{if(r)return gf(t,e,{wrap:!1,...n});let i=String.fromCharCode(t);if(t===e)return i;let s=String.fromCharCode(e);return`[${i}-${s}]`},hf=(t,e,r)=>{if(Array.isArray(t)){let n=r.wrap===!0,i=r.capture?"":"?:";return n?`(${i}${t.join("|")})`:t.join("|")}return gf(t,e,r)},mf=(...t)=>new RangeError("Invalid range arguments: "+pO.inspect(...t)),_f=(t,e,r)=>{if(r.strictRanges===!0)throw mf([t,e]);return[]},_O=(t,e)=>{if(e.strictRanges===!0)throw new TypeError(`Expected step "${t}" to be a number`);return[]},EO=(t,e,r=1,n={})=>{let i=Number(t),s=Number(e);if(!Number.isInteger(i)||!Number.isInteger(s)){if(n.strictRanges===!0)throw mf([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=ec(a)||ec(l)||ec(c),p=u?Math.max(a.length,l.length,c.length):0,d=u===!1&&fO(t,e,n)===!1,f=n.transform||gO(d);if(n.toRegex&&r===1)return ff(qs(t,p),qs(e,p),!0,n);let m={negatives:[],positives:[]},_=L=>m[L<0?"negatives":"positives"].push(Math.abs(L)),I=[],C=0;for(;o?i>=s:i<=s;)n.toRegex===!0&&r>1?_(i):I.push(hO(f(i,C),p,d)),i=o?i-r:i+r,C++;return n.toRegex===!0?r>1?mO(m,n,p):hf(I,null,{wrap:!1,...n}):I},SO=(t,e,r=1,n={})=>{if(!Bi(t)&&t.length>1||!Bi(e)&&e.length>1)return _f(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 ff(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?hf(u,null,{wrap:!1,options:n}):u},Js=(t,e,r,n={})=>{if(e==null&&Zl(t))return[t];if(!Zl(t)||!Zl(e))return _f(t,e,n);if(typeof r=="function")return Js(t,e,1,{transform:r});if(pf(r))return Js(t,e,0,r);let i={...n};return i.capture===!0&&(i.wrap=!0),r=r||i.step||1,Bi(r)?Bi(t)&&Bi(e)?EO(t,e,r,i):SO(t,e,Math.max(Math.abs(r),1),i):r!=null&&!pf(r)?_O(r,i):Js(t,e,1,r)};Ef.exports=Js});var Rf=U((EU,Tf)=>{"use strict";var TO=tc(),Sf=Vs(),RO=(t,e={})=>{let r=(n,i={})=>{let s=Sf.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=Sf.reduce(n.nodes),p=TO(...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)};Tf.exports=RO});var yf=U((SU,Of)=>{"use strict";var AO=tc(),Af=zs(),Wn=Vs(),pn=(t="",e="",r=!1)=>{let n=[];if(t=[].concat(t),e=[].concat(e),!e.length)return t;if(!t.length)return r?Wn.flatten(e).map(i=>`{${i}}`):e;for(let i of t)if(Array.isArray(i))for(let s of i)n.push(pn(s,e,r));else for(let s of e)r===!0&&typeof s=="string"&&(s=`{${s}}`),n.push(Array.isArray(s)?pn(i,s,r):i+s);return Wn.flatten(n)},OO=(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(pn(a.pop(),Af(i,e)));return}if(i.type==="brace"&&i.invalid!==!0&&i.nodes.length===2){a.push(pn(a.pop(),["{}"]));return}if(i.nodes&&i.ranges>0){let p=Wn.reduce(i.nodes);if(Wn.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=AO(...p,e);d.length===0&&(d=Af(i,e)),a.push(pn(a.pop(),d)),i.nodes=[];return}let l=Wn.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(pn(a.pop(),c,l));continue}if(d.value&&d.type!=="open"){c.push(pn(c.pop(),d.value));continue}d.nodes&&n(d,i)}return c};return Wn.flatten(n(t))};Of.exports=OO});var Lf=U((TU,If)=>{"use strict";If.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 vf=U((RU,Df)=>{"use strict";var yO=zs(),{MAX_LENGTH:Cf,CHAR_BACKSLASH:rc,CHAR_BACKTICK:IO,CHAR_COMMA:LO,CHAR_DOT:CO,CHAR_LEFT_PARENTHESES:NO,CHAR_RIGHT_PARENTHESES:PO,CHAR_LEFT_CURLY_BRACE:DO,CHAR_RIGHT_CURLY_BRACE:vO,CHAR_LEFT_SQUARE_BRACKET:Nf,CHAR_RIGHT_SQUARE_BRACKET:Pf,CHAR_DOUBLE_QUOTE:bO,CHAR_SINGLE_QUOTE:wO,CHAR_NO_BREAK_SPACE:FO,CHAR_ZERO_WIDTH_NOBREAK_SPACE:MO}=Lf(),kO=(t,e={})=>{if(typeof t!="string")throw new TypeError("Expected a string");let r=e||{},n=typeof r.maxLength=="number"?Math.min(Cf,r.maxLength):Cf;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===MO||d===FO)){if(d===rc){m({type:"text",value:(e.keepEscaping?d:"")+f()});continue}if(d===Pf){m({type:"text",value:"\\"+d});continue}if(d===Nf){l++;let _;for(;u<c&&(_=f());){if(d+=_,_===Nf){l++;continue}if(_===rc){d+=f();continue}if(_===Pf&&(l--,l===0))break}m({type:"text",value:d});continue}if(d===NO){o=m({type:"paren",nodes:[]}),s.push(o),m({type:"text",value:d});continue}if(d===PO){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===bO||d===wO||d===IO){let _=d,I;for(e.keepQuotes!==!0&&(d="");u<c&&(I=f());){if(I===rc){d+=I+f();continue}if(I===_){e.keepQuotes===!0&&(d+=I);break}d+=I}m({type:"text",value:d});continue}if(d===DO){p++;let I={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(I),s.push(o),m({type:"open",value:d});continue}if(d===vO){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===LO&&p>0){if(o.ranges>0){o.ranges=0;let _=o.nodes.shift();o.nodes=[_,{type:"text",value:yO(o)}]}m({type:"comma",value:d}),o.commas++;continue}if(d===CO&&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 I=_[_.length-1];I.value+=a.value+d,a=I,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],I=_.nodes.indexOf(o);_.nodes.splice(I,1,...o.nodes)}while(s.length>0);return m({type:"eos"}),i};Df.exports=kO});var Ff=U((AU,wf)=>{"use strict";var bf=zs(),GO=Rf(),xO=yf(),UO=vf(),St=(t,e={})=>{let r=[];if(Array.isArray(t))for(let n of t){let i=St.create(n,e);Array.isArray(i)?r.push(...i):r.push(i)}else r=[].concat(St.create(t,e));return e&&e.expand===!0&&e.nodupes===!0&&(r=[...new Set(r)]),r};St.parse=(t,e={})=>UO(t,e);St.stringify=(t,e={})=>bf(typeof t=="string"?St.parse(t,e):t,e);St.compile=(t,e={})=>(typeof t=="string"&&(t=St.parse(t,e)),GO(t,e));St.expand=(t,e={})=>{typeof t=="string"&&(t=St.parse(t,e));let r=xO(t,e);return e.noempty===!0&&(r=r.filter(Boolean)),e.nodupes===!0&&(r=[...new Set(r)]),r};St.create=(t,e={})=>t===""||t.length<3?[t]:e.expand!==!0?St.compile(t,e):St.expand(t,e);wf.exports=St});var Ki=U((OU,Uf)=>{"use strict";var HO=be("path"),Qt="\\\\/",Mf=`[^${Qt}]`,BO=0,dr="\\.",KO="\\+",$O="\\?",Qs="\\/",YO="(?=.)",kf="[^/]",nc=`(?:${Qs}|$)`,Gf=`(?:^|${Qs})`,ic=`${dr}{1,2}${nc}`,WO=`(?!${dr})`,jO=`(?!${Gf}${ic})`,VO=`(?!${dr}{0,1}${nc})`,zO=`(?!${ic})`,JO=`[^.${Qs}]`,qO=`${kf}*?`,xf={DOT_LITERAL:dr,PLUS_LITERAL:KO,QMARK_LITERAL:$O,SLASH_LITERAL:Qs,ONE_CHAR:YO,QMARK:kf,END_ANCHOR:nc,DOTS_SLASH:ic,NO_DOT:WO,NO_DOTS:jO,NO_DOT_SLASH:VO,NO_DOTS_SLASH:zO,QMARK_NO_DOT:JO,STAR:qO,START_ANCHOR:Gf},QO={...xf,SLASH_LITERAL:`[${Qt}]`,QMARK:Mf,STAR:`${Mf}*?`,DOTS_SLASH:`${dr}{1,2}(?:[${Qt}]|$)`,NO_DOT:`(?!${dr})`,NO_DOTS:`(?!(?:^|[${Qt}])${dr}{1,2}(?:[${Qt}]|$))`,NO_DOT_SLASH:`(?!${dr}{0,1}(?:[${Qt}]|$))`,NO_DOTS_SLASH:`(?!${dr}{1,2}(?:[${Qt}]|$))`,QMARK_NO_DOT:`[^.${Qt}]`,START_ANCHOR:`(?:^|[${Qt}])`,END_ANCHOR:`(?:[${Qt}]|$)`},XO={__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"};Uf.exports={DEFAULT_MAX_EXTGLOB_RECURSION:BO,MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:XO,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:HO.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?QO:xf}}});var $i=U(dt=>{"use strict";var ZO=be("path"),ey=process.platform==="win32",{REGEX_BACKSLASH:ty,REGEX_REMOVE_BACKSLASH:ry,REGEX_SPECIAL_CHARS:ny,REGEX_SPECIAL_CHARS_GLOBAL:iy}=Ki();dt.isObject=t=>t!==null&&typeof t=="object"&&!Array.isArray(t);dt.hasRegexChars=t=>ny.test(t);dt.isRegexChar=t=>t.length===1&&dt.hasRegexChars(t);dt.escapeRegex=t=>t.replace(iy,"\\$1");dt.toPosixSlashes=t=>t.replace(ty,"/");dt.removeBackslashes=t=>t.replace(ry,e=>e==="\\"?"":e);dt.supportsLookbehinds=()=>{let t=process.version.slice(1).split(".").map(Number);return t.length===3&&t[0]>=9||t[0]===8&&t[1]>=10};dt.isWindows=t=>t&&typeof t.windows=="boolean"?t.windows:ey===!0||ZO.sep==="\\";dt.escapeLast=(t,e,r)=>{let n=t.lastIndexOf(e,r);return n===-1?t:t[n-1]==="\\"?dt.escapeLast(t,e,n-1):`${t.slice(0,n)}\\${t.slice(n)}`};dt.removePrefix=(t,e={})=>{let r=t;return r.startsWith("./")&&(r=r.slice(2),e.prefix="./"),r};dt.wrapOutput=(t,e={},r={})=>{let n=r.contains?"":"^",i=r.contains?"":"$",s=`${n}(?:${t})${i}`;return e.negated===!0&&(s=`(?:^(?!${s}).*$)`),s}});var Vf=U((IU,jf)=>{"use strict";var Hf=$i(),{CHAR_ASTERISK:sc,CHAR_AT:sy,CHAR_BACKWARD_SLASH:Yi,CHAR_COMMA:oy,CHAR_DOT:oc,CHAR_EXCLAMATION_MARK:ac,CHAR_FORWARD_SLASH:Wf,CHAR_LEFT_CURLY_BRACE:lc,CHAR_LEFT_PARENTHESES:cc,CHAR_LEFT_SQUARE_BRACKET:ay,CHAR_PLUS:ly,CHAR_QUESTION_MARK:Bf,CHAR_RIGHT_CURLY_BRACE:cy,CHAR_RIGHT_PARENTHESES:Kf,CHAR_RIGHT_SQUARE_BRACKET:uy}=Ki(),$f=t=>t===Wf||t===Yi,Yf=t=>{t.isPrefix!==!0&&(t.depth=t.isGlobstar?1/0:1)},dy=(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,I=!1,C=!1,L=!1,b=!1,Q=!1,J=!1,$=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===Yi){L=ne.backslashes=!0,M=Ae(),M===lc&&(C=!0);continue}if(C===!0||M===lc){for($++;pe()!==!0&&(M=Ae());){if(M===Yi){L=ne.backslashes=!0,Ae();continue}if(M===lc){$++;continue}if(C!==!0&&M===oc&&(M=Ae())===oc){if(d=ne.isBrace=!0,m=ne.isGlob=!0,J=!0,i===!0)continue;break}if(C!==!0&&M===oy){if(d=ne.isBrace=!0,m=ne.isGlob=!0,J=!0,i===!0)continue;break}if(M===cy&&($--,$===0)){C=!1,d=ne.isBrace=!0,J=!0;break}}if(i===!0)continue;break}if(M===Wf){if(s.push(c),o.push(ne),ne={value:"",depth:0,isGlob:!1},J===!0)continue;if(te===oc&&c===u+1){u+=2;continue}p=c+1;continue}if(r.noext!==!0&&(M===ly||M===sy||M===sc||M===Bf||M===ac)===!0&&N()===cc){if(m=ne.isGlob=!0,_=ne.isExtglob=!0,J=!0,M===ac&&c===u&&(Q=!0),i===!0){for(;pe()!==!0&&(M=Ae());){if(M===Yi){L=ne.backslashes=!0,M=Ae();continue}if(M===Kf){m=ne.isGlob=!0,J=!0;break}}continue}break}if(M===sc){if(te===sc&&(I=ne.isGlobstar=!0),m=ne.isGlob=!0,J=!0,i===!0)continue;break}if(M===Bf){if(m=ne.isGlob=!0,J=!0,i===!0)continue;break}if(M===ay){for(;pe()!==!0&&(nt=Ae());){if(nt===Yi){L=ne.backslashes=!0,Ae();continue}if(nt===uy){f=ne.isBracket=!0,m=ne.isGlob=!0,J=!0;break}}if(i===!0)continue;break}if(r.nonegate!==!0&&M===ac&&c===u){b=ne.negated=!0,u++;continue}if(r.noparen!==!0&&M===cc){if(m=ne.isGlob=!0,i===!0){for(;pe()!==!0&&(M=Ae());){if(M===cc){L=ne.backslashes=!0,M=Ae();continue}if(M===Kf){J=!0;break}}continue}break}if(m===!0){if(J=!0,i===!0)continue;break}}r.noext===!0&&(_=!1,m=!1);let Ie=l,Sr="",D="";u>0&&(Sr=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&&$f(Ie.charCodeAt(Ie.length-1))&&(Ie=Ie.slice(0,-1)),r.unescape===!0&&(D&&(D=Hf.removeBackslashes(D)),Ie&&L===!0&&(Ie=Hf.removeBackslashes(Ie)));let v={prefix:Sr,input:t,start:u,base:Ie,glob:D,isBrace:d,isBracket:f,isGlob:m,isExtglob:_,isGlobstar:I,negated:b,negatedExtglob:Q};if(r.tokens===!0&&(v.maxDepth=0,$f(M)||o.push(ne),v.tokens=o),r.parts===!0||r.tokens===!0){let nt;for(let he=0;he<s.length;he++){let Yt=nt?nt+1:u,Wt=s[he],ht=t.slice(Yt,Wt);r.tokens&&(he===0&&u!==0?(o[he].isPrefix=!0,o[he].value=Sr):o[he].value=ht,Yf(o[he]),v.maxDepth+=o[he].depth),(he!==0||ht!=="")&&a.push(ht),nt=Wt}if(nt&&nt+1<t.length){let he=t.slice(nt+1);a.push(he),r.tokens&&(o[o.length-1].value=he,Yf(o[o.length-1]),v.maxDepth+=o[o.length-1].depth)}v.slashes=s,v.parts=a}return v};jf.exports=dy});var Xf=U((LU,Qf)=>{"use strict";var Wi=Ki(),Qe=$i(),{MAX_LENGTH:Xs,POSIX_REGEX_SOURCE:py,REGEX_NON_SPECIAL_CHARS:gy,REGEX_SPECIAL_CHARS_BACKREF:fy,REPLACEMENTS:zf}=Wi,hy=(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},jn=(t,e)=>`Missing ${t}: "${e}" - use "\\\\${e}" to match literal characters`,Jf=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},my=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},qf=t=>{let e=t.trim(),r=!0;for(;r===!0;)r=!1,/^@\([^\\()[\]{}|]+\)$/.test(e)&&(e=e.slice(2,-1),r=!0);if(my(e))return e.replace(/\\(.)/g,"$1")},_y=t=>{let e=t.map(qf).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},uc=(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}}}}},Ey=t=>{let e=0,r=[];for(;e<t.length;){let i=uc(t.slice(e),!1);if(!i||i.type!=="*")return;let s=Jf(i.body).map(a=>a.trim());if(s.length!==1)return;let o=qf(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("")}]`}*`},Sy=t=>{let e=0,r=t.trim(),n=uc(r);for(;n;)e++,r=n.body.trim(),n=uc(r);return e},Ty=(t,e)=>{if(e.maxExtglobRecursion===!1)return{risky:!1};let r=typeof e.maxExtglobRecursion=="number"?e.maxExtglobRecursion:Wi.DEFAULT_MAX_EXTGLOB_RECURSION,n=Jf(t).map(i=>i.trim());if(n.length>1&&(n.some(i=>i==="")||n.some(i=>/^[*?]+$/.test(i))||_y(n)))return{risky:!0};for(let i of n){let s=Ey(i);if(s)return{risky:!0,safeOutput:s};if(Sy(i)>r)return{risky:!0}}return{risky:!1}},dc=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");t=zf[t]||t;let r={...e},n=typeof r.maxLength=="number"?Math.min(Xs,r.maxLength):Xs,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=Wi.globChars(l),u=Wi.extglobChars(c),{DOT_LITERAL:p,PLUS_LITERAL:d,SLASH_LITERAL:f,ONE_CHAR:m,DOTS_SLASH:_,NO_DOT:I,NO_DOT_SLASH:C,NO_DOTS_SLASH:L,QMARK:b,QMARK_NO_DOT:Q,STAR:J,START_ANCHOR:$}=c,te=x=>`(${a}(?:(?!${$}${x.dot?_:p}).)*?)`,M=r.dot?"":I,ne=r.dot?b:Q,pe=r.bash===!0?te(r):J;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=[],Ie=[],Sr=[],D=s,v,nt=()=>N.index===i-1,he=N.peek=(x=1)=>t[N.index+x],Yt=N.advance=()=>t[++N.index]||"",Wt=()=>t.slice(N.index+1),ht=(x="",Ne=0)=>{N.consumed+=x,N.index+=Ne},Ts=x=>{N.output+=x.output!=null?x.output:x.value,ht(x.value)},tR=()=>{let x=1;for(;he()==="!"&&(he(2)!=="("||he(3)==="?");)Yt(),N.start++,x++;return x%2===0?!1:(N.negated=!0,N.start++,!0)},Rs=x=>{N[x]++,Sr.push(x)},Tr=x=>{N[x]--,Sr.pop()},le=x=>{if(D.type==="globstar"){let Ne=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"&&!Ne&&!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)&&Ts(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},As=(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;Rs("parens"),le({type:x,value:Ne,output:N.output?"":m}),le({type:"paren",extglob:!0,value:Yt(),output:ae}),Ae.push(G)},rR=x=>{let Ne=t.slice(x.startIndex,N.index+1),G=t.slice(x.startIndex+2,N.index),ae=Ty(G,r);if((x.type==="plus"||x.type==="star")&&ae.risky){let Oe=ae.safeOutput?(x.output?"":m)+(r.capture?`(${ae.safeOutput})`:ae.safeOutput):void 0,jt=o[x.tokensIndex];jt.type="text",jt.value=Ne,jt.output=Oe||Qe.escapeRegex(Ne);for(let Vt=x.tokensIndex+1;Vt<o.length;Vt++)o[Vt].value="",o[Vt].output="",delete o[Vt].suffix;N.output=x.output+jt.output,N.backtrack=!0,le({type:"paren",extglob:!0,value:v,output:""}),Tr("parens");return}let Le=x.close+(r.capture?")":""),He;if(x.type==="negate"){let Oe=pe;if(x.inner&&x.inner.length>1&&x.inner.includes("/")&&(Oe=te(r)),(Oe!==pe||nt()||/^\)+$/.test(Wt()))&&(Le=x.close=`)$))${Oe}`),x.inner.includes("*")&&(He=Wt())&&/^\.[^\\/.]+$/.test(He)){let jt=dc(He,{...e,fastpaths:!1}).output;Le=x.close=`)${jt})${Oe})`}x.prev.type==="bos"&&(N.negatedExtglob=!0)}le({type:"paren",extglob:!0,value:v,output:Le}),Tr("parens")};if(r.fastpaths!==!1&&!/(^[*!]|[/()[\]{}"])/.test(t)){let x=!1,Ne=t.replace(fy,(G,ae,Le,He,Oe,jt)=>He==="\\"?(x=!0,G):He==="?"?ae?ae+He+(Oe?b.repeat(Oe.length):""):jt===0?ne+(Oe?b.repeat(Oe.length):""):b.repeat(Le.length):He==="."?p.repeat(Le.length):He==="*"?ae?ae+He+(Oe?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=Qe.wrapOutput(Ne,N,e),N)}for(;!nt();){if(v=Yt(),v==="\0")continue;if(v==="\\"){let G=he();if(G==="/"&&r.bash!==!0||G==="."||G===";")continue;if(!G){v+="\\",le({type:"text",value:v});continue}let ae=/^\\+/.exec(Wt()),Le=0;if(ae&&ae[0].length>2&&(Le=ae[0].length,N.index+=Le,Le%2!==0&&(v+="\\")),r.unescape===!0?v=Yt():v+=Yt(),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),Oe=py[He];if(Oe){D.value=Le+Oe,N.backtrack=!0,Yt(),!s.output&&o.indexOf(D)===1&&(s.output=m);continue}}}(v==="["&&he()!==":"||v==="-"&&he()==="]")&&(v=`\\${v}`),v==="]"&&(D.value==="["||D.value==="[^")&&(v=`\\${v}`),r.posix===!0&&v==="!"&&D.value==="["&&(v="^"),D.value+=v,Ts({value:v});continue}if(N.quotes===1&&v!=='"'){v=Qe.escapeRegex(v),D.value+=v,Ts({value:v});continue}if(v==='"'){N.quotes=N.quotes===1?0:1,r.keepQuotes===!0&&le({type:"text",value:v});continue}if(v==="("){Rs("parens"),le({type:"paren",value:v});continue}if(v===")"){if(N.parens===0&&r.strictBrackets===!0)throw new SyntaxError(jn("opening","("));let G=Ae[Ae.length-1];if(G&&N.parens===G.parens+1){rR(Ae.pop());continue}le({type:"paren",value:v,output:N.parens?")":"\\)"}),Tr("parens");continue}if(v==="["){if(r.nobracket===!0||!Wt().includes("]")){if(r.nobracket!==!0&&r.strictBrackets===!0)throw new SyntaxError(jn("closing","]"));v=`\\${v}`}else Rs("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(jn("opening","["));le({type:"text",value:v,output:`\\${v}`});continue}Tr("brackets");let G=D.value.slice(1);if(D.posix!==!0&&G[0]==="^"&&!G.includes("/")&&(v=`/${v}`),D.value+=v,Ts({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){Rs("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 Oe=Le.length-1;Oe>=0&&(o.pop(),Le[Oe].type!=="brace");Oe--)Le[Oe].type!=="dots"&&He.unshift(Le[Oe].value);ae=hy(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 Oe of He)N.output+=Oe.output||Oe.value}le({type:"brace",value:v,output:ae}),Tr("braces"),Ie.pop();continue}if(v==="|"){Ae.length>0&&Ae[Ae.length-1].conditions++,le({type:"text",value:v});continue}if(v===","){let G=v,ae=Ie[Ie.length-1];ae&&Sr[Sr.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&&he()==="("&&he(2)!=="?"){As("qmark",v);continue}if(D&&D.type==="paren"){let ae=he(),Le=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(Wt()))&&(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:Q});continue}le({type:"qmark",value:v,output:b});continue}if(v==="!"){if(r.noextglob!==!0&&he()==="("&&(he(2)!=="?"||!/[!=<:]/.test(he(3)))){As("negate",v);continue}if(r.nonegate!==!0&&N.index===0){tR();continue}}if(v==="+"){if(r.noextglob!==!0&&he()==="("&&he(2)!=="?"){As("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&&he()==="("&&he(2)!=="?"){le({type:"at",extglob:!0,value:v,output:""});continue}le({type:"text",value:v});continue}if(v!=="*"){(v==="$"||v==="^")&&(v=`\\${v}`);let G=gy.exec(Wt());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,ht(v);continue}let x=Wt();if(r.noextglob!==!0&&/^\([^?]/.test(x)){As("star",v);continue}if(D.type==="star"){if(r.noglobstar===!0){ht(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 Oe=N.braces>0&&(G.type==="comma"||G.type==="brace"),jt=Ae.length&&(G.type==="pipe"||G.type==="paren");if(!Le&&G.type!=="paren"&&!Oe&&!jt){le({type:"star",value:v,output:""});continue}for(;x.slice(0,3)==="/**";){let Vt=t[N.index+4];if(Vt&&Vt!=="/")break;x=x.slice(3),ht("/**",3)}if(G.type==="bos"&&nt()){D.type="globstar",D.value+=v,D.output=te(r),N.output=D.output,N.globstar=!0,ht(v);continue}if(G.type==="slash"&&G.prev.type!=="bos"&&!He&&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,ht(v);continue}if(G.type==="slash"&&G.prev.type!=="bos"&&x[0]==="/"){let Vt=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}${Vt})`,D.value+=v,N.output+=G.output+D.output,N.globstar=!0,ht(v+Yt()),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,ht(v+Yt()),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,ht(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+=L,D.output+=L):(N.output+=M,D.output+=M),he()!=="*"&&(N.output+=m,D.output+=m)),le(Ne)}for(;N.brackets>0;){if(r.strictBrackets===!0)throw new SyntaxError(jn("closing","]"));N.output=Qe.escapeLast(N.output,"["),Tr("brackets")}for(;N.parens>0;){if(r.strictBrackets===!0)throw new SyntaxError(jn("closing",")"));N.output=Qe.escapeLast(N.output,"("),Tr("parens")}for(;N.braces>0;){if(r.strictBrackets===!0)throw new SyntaxError(jn("closing","}"));N.output=Qe.escapeLast(N.output,"{"),Tr("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};dc.fastpaths=(t,e)=>{let r={...e},n=typeof r.maxLength=="number"?Math.min(Xs,r.maxLength):Xs,i=t.length;if(i>n)throw new SyntaxError(`Input length: ${i}, exceeds maximum allowed length: ${n}`);t=zf[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}=Wi.globChars(s),_=r.dot?p:u,I=r.dot?d:u,C=r.capture?"":"?:",L={negated:!1,prefix:""},b=r.bash===!0?".*?":f;r.capture&&(b=`(${b})`);let Q=M=>M.noglobstar===!0?b:`(${C}(?:(?!${m}${M.dot?c:o}).)*?)`,J=M=>{switch(M){case"*":return`${_}${l}${b}`;case".*":return`${o}${l}${b}`;case"*.*":return`${_}${b}${o}${l}${b}`;case"*/*":return`${_}${b}${a}${l}${I}${b}`;case"**":return _+Q(r);case"**/*":return`(?:${_}${Q(r)}${a})?${I}${l}${b}`;case"**/*.*":return`(?:${_}${Q(r)}${a})?${I}${b}${o}${l}${b}`;case"**/.*":return`(?:${_}${Q(r)}${a})?${o}${l}${b}`;default:{let ne=/^(.*?)\.(\w+)$/.exec(M);if(!ne)return;let pe=J(ne[1]);return pe?pe+o+ne[2]:void 0}}},$=Qe.removePrefix(t,L),te=J($);return te&&r.strictSlashes!==!0&&(te+=`${a}?`),te};Qf.exports=dc});var eh=U((CU,Zf)=>{"use strict";var Ry=be("path"),Ay=Vf(),pc=Xf(),gc=$i(),Oy=Ki(),yy=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=yy(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=gc.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?gc.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=gc.isWindows(r))=>(e instanceof RegExp?e:Me.makeRe(e,r)).test(Ry.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)):pc(t,{...e,fastpaths:!1});Me.scan=(t,e)=>Ay(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=pc.fastpaths(t,e)),i.output||(i=pc(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=Oy;Zf.exports=Me});var rh=U((NU,th)=>{"use strict";th.exports=eh()});var lh=U((PU,ah)=>{"use strict";var ih=be("util"),sh=Ff(),Xt=rh(),fc=$i(),nh=t=>t===""||t==="./",oh=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=Xt(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)=>Xt(t,e);Ce.isMatch=(t,e,r)=>Xt(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: "${ih.inspect(t)}"`);if(Array.isArray(e))return e.some(n=>Ce.contains(t,n,r));if(typeof e=="string"){if(nh(t)||nh(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(!fc.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=Xt(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=Xt(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: "${ih.inspect(t)}"`);return[].concat(e).every(n=>Xt(n,r)(t))};Ce.capture=(t,e,r)=>{let n=fc.isWindows(r),s=Xt.makeRe(String(t),{...r,capture:!0}).exec(n?fc.toPosixSlashes(e):e);if(s)return s.slice(1).map(o=>o===void 0?"":o)};Ce.makeRe=(...t)=>Xt.makeRe(...t);Ce.scan=(...t)=>Xt.scan(...t);Ce.parse=(t,e)=>{let r=[];for(let n of[].concat(t||[]))for(let i of sh(String(n),e))r.push(Xt.parse(i,e));return r};Ce.braces=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");return e&&e.nobrace===!0||!oh(t)?[t]:sh(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=oh;ah.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 ch=be("path"),Iy=Qg(),hc=lh(),uh="**",Ly="\\",Cy=/[*?]|^!/,Ny=/\[[^[]*]/,Py=/(?:^|[^!*+?@])\([^(]*\|[^|]*\)/,Dy=/[!*+?@]\([^(]*\)/,vy=/,|\.\./,by=/(?!^)\/{2,}/g;function dh(t,e={}){return!ph(t,e)}Z.isStaticPattern=dh;function ph(t,e={}){return t===""?!1:!!(e.caseSensitiveMatch===!1||t.includes(Ly)||Cy.test(t)||Ny.test(t)||Py.test(t)||e.extglob!==!1&&Dy.test(t)||e.braceExpansion!==!1&&wy(t))}Z.isDynamicPattern=ph;function wy(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 vy.test(n)}function Fy(t){return Zs(t)?t.slice(1):t}Z.convertToPositivePattern=Fy;function My(t){return"!"+t}Z.convertToNegativePattern=My;function Zs(t){return t.startsWith("!")&&t[1]!=="("}Z.isNegativePattern=Zs;function gh(t){return!Zs(t)}Z.isPositivePattern=gh;function ky(t){return t.filter(Zs)}Z.getNegativePatterns=ky;function Gy(t){return t.filter(gh)}Z.getPositivePatterns=Gy;function xy(t){return t.filter(e=>!mc(e))}Z.getPatternsInsideCurrentDirectory=xy;function Uy(t){return t.filter(mc)}Z.getPatternsOutsideCurrentDirectory=Uy;function mc(t){return t.startsWith("..")||t.startsWith("./..")}Z.isPatternRelatedToParentDirectory=mc;function Hy(t){return Iy(t,{flipBackslashes:!1})}Z.getBaseDirectory=Hy;function By(t){return t.includes(uh)}Z.hasGlobStar=By;function fh(t){return t.endsWith("/"+uh)}Z.endsWithSlashGlobStar=fh;function Ky(t){let e=ch.basename(t);return fh(t)||dh(e)}Z.isAffectDepthOfReadingPattern=Ky;function $y(t){return t.reduce((e,r)=>e.concat(hh(r)),[])}Z.expandPatternsWithBraceExpansion=$y;function hh(t){let e=hc.braces(t,{expand:!0,nodupes:!0,keepEscaping:!0});return e.sort((r,n)=>r.length-n.length),e.filter(r=>r!=="")}Z.expandBraceExpansion=hh;function Yy(t,e){let{parts:r}=hc.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=Yy;function mh(t,e){return hc.makeRe(t,e)}Z.makeRe=mh;function Wy(t,e){return t.map(r=>mh(r,e))}Z.convertPatternsToRe=Wy;function jy(t,e){return e.some(r=>r.test(t))}Z.matchAny=jy;function Vy(t){return t.replace(by,"/")}Z.removeDuplicateSlashes=Vy;function zy(t){let e=[],r=[];for(let n of t)_h(n)?e.push(n):r.push(n);return[e,r]}Z.partitionAbsoluteAndRelative=zy;function _h(t){return ch.isAbsolute(t)}Z.isAbsolute=_h});var Ah=U((vU,Rh)=>{"use strict";var Jy=be("stream"),Sh=Jy.PassThrough,qy=Array.prototype.slice;Rh.exports=Qy;function Qy(){let t=[],e=qy.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=Sh(n);function a(){for(let u=0,p=arguments.length;u<p;u++)t.push(Th(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",I),d()}function I(C){o.emit("error",C)}if(m._readableState.endEmitted)return d();m.on("merge2UnpipeEnd",_),m.on("end",_),s&&m.on("error",I),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 Th(t,e){if(Array.isArray(t))for(let r=0,n=t.length;r<n;r++)t[r]=Th(t[r],e);else{if(!t._readableState&&t.pipe&&(t=t.pipe(Sh(e))),!t._readableState||!t.pause||!t.pipe)throw new Error("Only readable stream can be merged.");t.pause()}return t}});var yh=U(eo=>{"use strict";Object.defineProperty(eo,"__esModule",{value:!0});eo.merge=void 0;var Xy=Ah();function Zy(t){let e=Xy(t);return t.forEach(r=>{r.once("error",n=>e.emit("error",n))}),e.once("close",()=>Oh(t)),e.once("end",()=>Oh(t)),e}eo.merge=Zy;function Oh(t){t.forEach(e=>e.emit("close"))}});var Ih=U(Vn=>{"use strict";Object.defineProperty(Vn,"__esModule",{value:!0});Vn.isEmpty=Vn.isString=void 0;function eI(t){return typeof t=="string"}Vn.isString=eI;function tI(t){return t===""}Vn.isEmpty=tI});var pr=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 rI=xg();Xe.array=rI;var nI=Ug();Xe.errno=nI;var iI=Hg();Xe.fs=iI;var sI=Yg();Xe.path=sI;var oI=Eh();Xe.pattern=oI;var aI=yh();Xe.stream=aI;var lI=Ih();Xe.string=lI});var Ph=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 Gt=pr();function cI(t,e){let r=Lh(t,e),n=Lh(e.ignore,e),i=Ch(r),s=Nh(r,n),o=i.filter(u=>Gt.pattern.isStaticPattern(u,e)),a=i.filter(u=>Gt.pattern.isDynamicPattern(u,e)),l=_c(o,s,!1),c=_c(a,s,!0);return l.concat(c)}Ze.generate=cI;function Lh(t,e){let r=t;return e.braceExpansion&&(r=Gt.pattern.expandPatternsWithBraceExpansion(r)),e.baseNameMatch&&(r=r.map(n=>n.includes("/")?n:`**/${n}`)),r.map(n=>Gt.pattern.removeDuplicateSlashes(n))}function _c(t,e,r){let n=[],i=Gt.pattern.getPatternsOutsideCurrentDirectory(t),s=Gt.pattern.getPatternsInsideCurrentDirectory(t),o=Ec(i),a=Ec(s);return n.push(...Sc(o,e,r)),"."in a?n.push(Tc(".",s,e,r)):n.push(...Sc(a,e,r)),n}Ze.convertPatternsToTasks=_c;function Ch(t){return Gt.pattern.getPositivePatterns(t)}Ze.getPositivePatterns=Ch;function Nh(t,e){return Gt.pattern.getNegativePatterns(t).concat(e).map(Gt.pattern.convertToPositivePattern)}Ze.getNegativePatternsAsPositive=Nh;function Ec(t){let e={};return t.reduce((r,n)=>{let i=Gt.pattern.getBaseDirectory(n);return i in r?r[i].push(n):r[i]=[n],r},e)}Ze.groupPatternsByBaseDirectory=Ec;function Sc(t,e,r){return Object.keys(t).map(n=>Tc(n,t[n],e,r))}Ze.convertPatternGroupsToTasks=Sc;function Tc(t,e,r,n){return{dynamic:n,positive:e,negative:r,base:t,patterns:[].concat(e,r.map(Gt.pattern.convertToNegativePattern))}}Ze.convertPatternGroupToTask=Tc});var vh=U(to=>{"use strict";Object.defineProperty(to,"__esModule",{value:!0});to.read=void 0;function uI(t,e,r){e.fs.lstat(t,(n,i)=>{if(n!==null){Dh(r,n);return}if(!i.isSymbolicLink()||!e.followSymbolicLink){Rc(r,i);return}e.fs.stat(t,(s,o)=>{if(s!==null){if(e.throwErrorOnBrokenSymbolicLink){Dh(r,s);return}Rc(r,i);return}e.markSymbolicLink&&(o.isSymbolicLink=()=>!0),Rc(r,o)})})}to.read=uI;function Dh(t,e){t(e)}function Rc(t,e){t(null,e)}});var bh=U(ro=>{"use strict";Object.defineProperty(ro,"__esModule",{value:!0});ro.read=void 0;function dI(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}}ro.read=dI});var wh=U(br=>{"use strict";Object.defineProperty(br,"__esModule",{value:!0});br.createFileSystemAdapter=br.FILE_SYSTEM_ADAPTER=void 0;var no=be("fs");br.FILE_SYSTEM_ADAPTER={lstat:no.lstat,stat:no.stat,lstatSync:no.lstatSync,statSync:no.statSync};function pI(t){return t===void 0?br.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},br.FILE_SYSTEM_ADAPTER),t)}br.createFileSystemAdapter=pI});var Fh=U(Oc=>{"use strict";Object.defineProperty(Oc,"__esModule",{value:!0});var gI=wh(),Ac=class{constructor(e={}){this._options=e,this.followSymbolicLink=this._getValue(this._options.followSymbolicLink,!0),this.fs=gI.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}};Oc.default=Ac});var gn=U(wr=>{"use strict";Object.defineProperty(wr,"__esModule",{value:!0});wr.statSync=wr.stat=wr.Settings=void 0;var Mh=vh(),fI=bh(),yc=Fh();wr.Settings=yc.default;function hI(t,e,r){if(typeof e=="function"){Mh.read(t,Ic(),e);return}Mh.read(t,Ic(e),r)}wr.stat=hI;function mI(t,e){let r=Ic(e);return fI.read(t,r)}wr.statSync=mI;function Ic(t={}){return t instanceof yc.default?t:new yc.default(t)}});var xh=U((BU,Gh)=>{"use strict";var kh;Gh.exports=typeof queueMicrotask=="function"?queueMicrotask.bind(typeof window<"u"?window:global):t=>(kh||(kh=Promise.resolve())).then(t).catch(e=>setTimeout(()=>{throw e},0))});var Hh=U((KU,Uh)=>{"use strict";Uh.exports=EI;var _I=xh();function EI(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?_I(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 Lc=U(so=>{"use strict";Object.defineProperty(so,"__esModule",{value:!0});so.IS_SUPPORT_READDIR_WITH_FILE_TYPES=void 0;var io=process.versions.node.split(".");if(io[0]===void 0||io[1]===void 0)throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);var Bh=Number.parseInt(io[0],10),SI=Number.parseInt(io[1],10),Kh=10,TI=10,RI=Bh>Kh,AI=Bh===Kh&&SI>=TI;so.IS_SUPPORT_READDIR_WITH_FILE_TYPES=RI||AI});var $h=U(oo=>{"use strict";Object.defineProperty(oo,"__esModule",{value:!0});oo.createDirentFromStats=void 0;var Cc=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 OI(t,e){return new Cc(t,e)}oo.createDirentFromStats=OI});var Nc=U(ao=>{"use strict";Object.defineProperty(ao,"__esModule",{value:!0});ao.fs=void 0;var yI=$h();ao.fs=yI});var Pc=U(lo=>{"use strict";Object.defineProperty(lo,"__esModule",{value:!0});lo.joinPathSegments=void 0;function II(t,e,r){return t.endsWith(r)?t+e:t+r+e}lo.joinPathSegments=II});var Jh=U(Fr=>{"use strict";Object.defineProperty(Fr,"__esModule",{value:!0});Fr.readdir=Fr.readdirWithFileTypes=Fr.read=void 0;var LI=gn(),Yh=Hh(),CI=Lc(),Wh=Nc(),jh=Pc();function NI(t,e,r){if(!e.stats&&CI.IS_SUPPORT_READDIR_WITH_FILE_TYPES){Vh(t,e,r);return}zh(t,e,r)}Fr.read=NI;function Vh(t,e,r){e.fs.readdir(t,{withFileTypes:!0},(n,i)=>{if(n!==null){co(r,n);return}let s=i.map(a=>({dirent:a,name:a.name,path:jh.joinPathSegments(t,a.name,e.pathSegmentSeparator)}));if(!e.followSymbolicLinks){Dc(r,s);return}let o=s.map(a=>PI(a,e));Yh(o,(a,l)=>{if(a!==null){co(r,a);return}Dc(r,l)})})}Fr.readdirWithFileTypes=Vh;function PI(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=Wh.fs.createDirentFromStats(t.name,i),r(null,t)})}}function zh(t,e,r){e.fs.readdir(t,(n,i)=>{if(n!==null){co(r,n);return}let s=i.map(o=>{let a=jh.joinPathSegments(t,o,e.pathSegmentSeparator);return l=>{LI.stat(a,e.fsStatSettings,(c,u)=>{if(c!==null){l(c);return}let p={name:o,path:a,dirent:Wh.fs.createDirentFromStats(o,u)};e.stats&&(p.stats=u),l(null,p)})}});Yh(s,(o,a)=>{if(o!==null){co(r,o);return}Dc(r,a)})})}Fr.readdir=zh;function co(t,e){t(e)}function Dc(t,e){t(null,e)}});var em=U(Mr=>{"use strict";Object.defineProperty(Mr,"__esModule",{value:!0});Mr.readdir=Mr.readdirWithFileTypes=Mr.read=void 0;var DI=gn(),vI=Lc(),qh=Nc(),Qh=Pc();function bI(t,e){return!e.stats&&vI.IS_SUPPORT_READDIR_WITH_FILE_TYPES?Xh(t,e):Zh(t,e)}Mr.read=bI;function Xh(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=qh.fs.createDirentFromStats(i.name,s)}catch(s){if(e.throwErrorOnBrokenSymbolicLink)throw s}return i})}Mr.readdirWithFileTypes=Xh;function Zh(t,e){return e.fs.readdirSync(t).map(n=>{let i=Qh.joinPathSegments(t,n,e.pathSegmentSeparator),s=DI.statSync(i,e.fsStatSettings),o={name:n,path:i,dirent:qh.fs.createDirentFromStats(n,s)};return e.stats&&(o.stats=s),o})}Mr.readdir=Zh});var tm=U(kr=>{"use strict";Object.defineProperty(kr,"__esModule",{value:!0});kr.createFileSystemAdapter=kr.FILE_SYSTEM_ADAPTER=void 0;var zn=be("fs");kr.FILE_SYSTEM_ADAPTER={lstat:zn.lstat,stat:zn.stat,lstatSync:zn.lstatSync,statSync:zn.statSync,readdir:zn.readdir,readdirSync:zn.readdirSync};function wI(t){return t===void 0?kr.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},kr.FILE_SYSTEM_ADAPTER),t)}kr.createFileSystemAdapter=wI});var rm=U(bc=>{"use strict";Object.defineProperty(bc,"__esModule",{value:!0});var FI=be("path"),MI=gn(),kI=tm(),vc=class{constructor(e={}){this._options=e,this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!1),this.fs=kI.createFileSystemAdapter(this._options.fs),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,FI.sep),this.stats=this._getValue(this._options.stats,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0),this.fsStatSettings=new MI.Settings({followSymbolicLink:this.followSymbolicLinks,fs:this.fs,throwErrorOnBrokenSymbolicLink:this.throwErrorOnBrokenSymbolicLink})}_getValue(e,r){return e??r}};bc.default=vc});var uo=U(Gr=>{"use strict";Object.defineProperty(Gr,"__esModule",{value:!0});Gr.Settings=Gr.scandirSync=Gr.scandir=void 0;var nm=Jh(),GI=em(),wc=rm();Gr.Settings=wc.default;function xI(t,e,r){if(typeof e=="function"){nm.read(t,Fc(),e);return}nm.read(t,Fc(e),r)}Gr.scandir=xI;function UI(t,e){let r=Fc(e);return GI.read(t,r)}Gr.scandirSync=UI;function Fc(t={}){return t instanceof wc.default?t:new wc.default(t)}});var sm=U((XU,im)=>{"use strict";function HI(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}}im.exports=HI});var am=U((ZU,Mc)=>{"use strict";var BI=sm();function om(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=BI(KI),i=null,s=null,o=0,a=null,l={push:_,drain:pt,saturated:pt,pause:u,paused:!1,get concurrency(){return r},set concurrency($){if(!($>=1))throw new Error("fastqueue concurrency must be equal to or greater than 1");if(r=$,!l.paused)for(;i&&o<r;)o++,C()},running:c,resume:f,idle:m,length:p,getQueue:d,unshift:I,empty:pt,kill:L,killAndDrain:b,error:J,abort:Q};return l;function c(){return o}function u(){l.paused=!0}function p(){for(var $=i,te=0;$;)$=$.next,te++;return te}function d(){for(var $=i,te=[];$;)te.push($.value),$=$.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 _($,te){var M=n.get();M.context=t,M.release=C,M.value=$,M.callback=te||pt,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 I($,te){var M=n.get();M.context=t,M.release=C,M.value=$,M.callback=te||pt,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($){$&&n.release($);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 L(){i=null,s=null,l.drain=pt}function b(){i=null,s=null,l.drain(),l.drain=pt}function Q(){var $=i;for(i=null,s=null;$;){var te=$.next,M=$.callback,ne=$.errorHandler,pe=$.value,N=$.context;$.value=null,$.callback=pt,$.errorHandler=null,ne&&ne(new Error("abort"),pe),M.call(N,new Error("abort")),$.release($),$=te}l.drain=pt}function J($){a=$}}function pt(){}function KI(){this.value=null,this.callback=pt,this.next=null,this.release=pt,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=pt,t.errorHandler&&s(r,o),i.call(t.context,r,n),t.release(t)}}function $I(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=om(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(pt),p}function l(u){var p=new Promise(function(d,f){o(u,function(m,_){if(m){f(m);return}d(_)})});return p.catch(pt),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}}Mc.exports=om;Mc.exports.promise=$I});var po=U(Zt=>{"use strict";Object.defineProperty(Zt,"__esModule",{value:!0});Zt.joinPathSegments=Zt.replacePathSegmentSeparator=Zt.isAppliedFilter=Zt.isFatalError=void 0;function YI(t,e){return t.errorFilter===null?!0:!t.errorFilter(e)}Zt.isFatalError=YI;function WI(t,e){return t===null||t(e)}Zt.isAppliedFilter=WI;function jI(t,e){return t.split(/[/\\]/).join(e)}Zt.replacePathSegmentSeparator=jI;function VI(t,e,r){return t===""?e:t.endsWith(r)?t+e:t+r+e}Zt.joinPathSegments=VI});var xc=U(Gc=>{"use strict";Object.defineProperty(Gc,"__esModule",{value:!0});var zI=po(),kc=class{constructor(e,r){this._root=e,this._settings=r,this._root=zI.replacePathSegmentSeparator(e,r.pathSegmentSeparator)}};Gc.default=kc});var Bc=U(Hc=>{"use strict";Object.defineProperty(Hc,"__esModule",{value:!0});var JI=be("events"),qI=uo(),QI=am(),go=po(),XI=xc(),Uc=class extends XI.default{constructor(e,r){super(e,r),this._settings=r,this._scandir=qI.scandir,this._emitter=new JI.EventEmitter,this._queue=QI(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||!go.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=go.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),go.isAppliedFilter(this._settings.entryFilter,e)&&this._emitEntry(e),e.dirent.isDirectory()&&go.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(n,r===void 0?void 0:e.path)}_emitEntry(e){this._emitter.emit("entry",e)}};Hc.default=Uc});var lm=U($c=>{"use strict";Object.defineProperty($c,"__esModule",{value:!0});var ZI=Bc(),Kc=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new ZI.default(this._root,this._settings),this._storage=[]}read(e){this._reader.onError(r=>{eL(e,r)}),this._reader.onEntry(r=>{this._storage.push(r)}),this._reader.onEnd(()=>{tL(e,this._storage)}),this._reader.read()}};$c.default=Kc;function eL(t,e){t(e)}function tL(t,e){t(null,e)}});var cm=U(Wc=>{"use strict";Object.defineProperty(Wc,"__esModule",{value:!0});var rL=be("stream"),nL=Bc(),Yc=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new nL.default(this._root,this._settings),this._stream=new rL.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}};Wc.default=Yc});var um=U(Vc=>{"use strict";Object.defineProperty(Vc,"__esModule",{value:!0});var iL=uo(),fo=po(),sL=xc(),jc=class extends sL.default{constructor(){super(...arguments),this._scandir=iL.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(fo.isFatalError(this._settings,e))throw e}_handleEntry(e,r){let n=e.path;r!==void 0&&(e.path=fo.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),fo.isAppliedFilter(this._settings.entryFilter,e)&&this._pushToStorage(e),e.dirent.isDirectory()&&fo.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(n,r===void 0?void 0:e.path)}_pushToStorage(e){this._storage.push(e)}};Vc.default=jc});var dm=U(Jc=>{"use strict";Object.defineProperty(Jc,"__esModule",{value:!0});var oL=um(),zc=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new oL.default(this._root,this._settings)}read(){return this._reader.read()}};Jc.default=zc});var pm=U(Qc=>{"use strict";Object.defineProperty(Qc,"__esModule",{value:!0});var aL=be("path"),lL=uo(),qc=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,aL.sep),this.fsScandirSettings=new lL.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}};Qc.default=qc});var mo=U(er=>{"use strict";Object.defineProperty(er,"__esModule",{value:!0});er.Settings=er.walkStream=er.walkSync=er.walk=void 0;var gm=lm(),cL=cm(),uL=dm(),Xc=pm();er.Settings=Xc.default;function dL(t,e,r){if(typeof e=="function"){new gm.default(t,ho()).read(e);return}new gm.default(t,ho(e)).read(r)}er.walk=dL;function pL(t,e){let r=ho(e);return new uL.default(t,r).read()}er.walkSync=pL;function gL(t,e){let r=ho(e);return new cL.default(t,r).read()}er.walkStream=gL;function ho(t={}){return t instanceof Xc.default?t:new Xc.default(t)}});var _o=U(eu=>{"use strict";Object.defineProperty(eu,"__esModule",{value:!0});var fL=be("path"),hL=gn(),fm=pr(),Zc=class{constructor(e){this._settings=e,this._fsStatSettings=new hL.Settings({followSymbolicLink:this._settings.followSymbolicLinks,fs:this._settings.fs,throwErrorOnBrokenSymbolicLink:this._settings.followSymbolicLinks})}_getFullEntryPath(e){return fL.resolve(this._settings.cwd,e)}_makeEntry(e,r){let n={name:r,path:r,dirent:fm.fs.createDirentFromStats(r,e)};return this._settings.stats&&(n.stats=e),n}_isFatalError(e){return!fm.errno.isEnoentCodeError(e)&&!this._settings.suppressErrors}};eu.default=Zc});var nu=U(ru=>{"use strict";Object.defineProperty(ru,"__esModule",{value:!0});var mL=be("stream"),_L=gn(),EL=mo(),SL=_o(),tu=class extends SL.default{constructor(){super(...arguments),this._walkStream=EL.walkStream,this._stat=_L.stat}dynamic(e,r){return this._walkStream(e,r)}static(e,r){let n=e.map(this._getFullEntryPath,this),i=new mL.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))})}};ru.default=tu});var hm=U(su=>{"use strict";Object.defineProperty(su,"__esModule",{value:!0});var TL=mo(),RL=_o(),AL=nu(),iu=class extends RL.default{constructor(){super(...arguments),this._walkAsync=TL.walk,this._readerStream=new AL.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))})}};su.default=iu});var mm=U(au=>{"use strict";Object.defineProperty(au,"__esModule",{value:!0});var ji=pr(),ou=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 ji.pattern.getPatternParts(e,this._micromatchOptions).map(n=>ji.pattern.isDynamicPattern(n,this._settings)?{dynamic:!0,pattern:n,patternRe:ji.pattern.makeRe(n,this._micromatchOptions)}:{dynamic:!1,pattern:n})}_splitSegmentsIntoSections(e){return ji.array.splitWhen(e,r=>r.dynamic&&ji.pattern.hasGlobStar(r.pattern))}};au.default=ou});var _m=U(cu=>{"use strict";Object.defineProperty(cu,"__esModule",{value:!0});var OL=mm(),lu=class extends OL.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}};cu.default=lu});var Em=U(du=>{"use strict";Object.defineProperty(du,"__esModule",{value:!0});var Eo=pr(),yL=_m(),uu=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 yL.default(e,this._settings,this._micromatchOptions)}_getNegativePatternsRe(e){let r=e.filter(Eo.pattern.isAffectDepthOfReadingPattern);return Eo.pattern.convertPatternsToRe(r,this._micromatchOptions)}_filter(e,r,n,i){if(this._isSkippedByDeep(e,r.path)||this._isSkippedSymbolicLink(r))return!1;let s=Eo.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!Eo.pattern.matchAny(e,r)}};du.default=uu});var Sm=U(gu=>{"use strict";Object.defineProperty(gu,"__esModule",{value:!0});var xr=pr(),pu=class{constructor(e,r){this._settings=e,this._micromatchOptions=r,this.index=new Map}getFilter(e,r){let[n,i]=xr.pattern.partitionAbsoluteAndRelative(r),s={positive:{all:xr.pattern.convertPatternsToRe(e,this._micromatchOptions)},negative:{absolute:xr.pattern.convertPatternsToRe(n,Object.assign(Object.assign({},this._micromatchOptions),{dot:!0})),relative:xr.pattern.convertPatternsToRe(i,Object.assign(Object.assign({},this._micromatchOptions),{dot:!0}))}};return o=>this._filter(o,s)}_filter(e,r){let n=xr.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=xr.path.makeAbsolute(this._settings.cwd,e);return this._isMatchToPatterns(i,r,n)}_isMatchToPatterns(e,r,n){if(r.length===0)return!1;let i=xr.pattern.matchAny(e,r);return!i&&n?xr.pattern.matchAny(e+"/",r):i}};gu.default=pu});var Tm=U(hu=>{"use strict";Object.defineProperty(hu,"__esModule",{value:!0});var IL=pr(),fu=class{constructor(e){this._settings=e}getFilter(){return e=>this._isNonFatalError(e)}_isNonFatalError(e){return IL.errno.isEnoentCodeError(e)||this._settings.suppressErrors}};hu.default=fu});var Am=U(_u=>{"use strict";Object.defineProperty(_u,"__esModule",{value:!0});var Rm=pr(),mu=class{constructor(e){this._settings=e}getTransformer(){return e=>this._transform(e)}_transform(e){let r=e.path;return this._settings.absolute&&(r=Rm.path.makeAbsolute(this._settings.cwd,r),r=Rm.path.unixify(r)),this._settings.markDirectories&&e.dirent.isDirectory()&&(r+="/"),this._settings.objectMode?Object.assign(Object.assign({},e),{path:r}):r}};_u.default=mu});var So=U(Su=>{"use strict";Object.defineProperty(Su,"__esModule",{value:!0});var LL=be("path"),CL=Em(),NL=Sm(),PL=Tm(),DL=Am(),Eu=class{constructor(e){this._settings=e,this.errorFilter=new PL.default(this._settings),this.entryFilter=new NL.default(this._settings,this._getMicromatchOptions()),this.deepFilter=new CL.default(this._settings,this._getMicromatchOptions()),this.entryTransformer=new DL.default(this._settings)}_getRootDirectory(e){return LL.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}}};Su.default=Eu});var Om=U(Ru=>{"use strict";Object.defineProperty(Ru,"__esModule",{value:!0});var vL=hm(),bL=So(),Tu=class extends bL.default{constructor(){super(...arguments),this._reader=new vL.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)}};Ru.default=Tu});var ym=U(Ou=>{"use strict";Object.defineProperty(Ou,"__esModule",{value:!0});var wL=be("stream"),FL=nu(),ML=So(),Au=class extends ML.default{constructor(){super(...arguments),this._reader=new FL.default(this._settings)}read(e){let r=this._getRootDirectory(e),n=this._getReaderOptions(e),i=this.api(r,e,n),s=new wL.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)}};Ou.default=Au});var Im=U(Iu=>{"use strict";Object.defineProperty(Iu,"__esModule",{value:!0});var kL=gn(),GL=mo(),xL=_o(),yu=class extends xL.default{constructor(){super(...arguments),this._walkSync=GL.walkSync,this._statSync=kL.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)}};Iu.default=yu});var Lm=U(Cu=>{"use strict";Object.defineProperty(Cu,"__esModule",{value:!0});var UL=Im(),HL=So(),Lu=class extends HL.default{constructor(){super(...arguments),this._reader=new UL.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)}};Cu.default=Lu});var Cm=U(qn=>{"use strict";Object.defineProperty(qn,"__esModule",{value:!0});qn.DEFAULT_FILE_SYSTEM_ADAPTER=void 0;var Jn=be("fs"),BL=be("os"),KL=Math.max(BL.cpus().length,1);qn.DEFAULT_FILE_SYSTEM_ADAPTER={lstat:Jn.lstat,lstatSync:Jn.lstatSync,stat:Jn.stat,statSync:Jn.statSync,readdir:Jn.readdir,readdirSync:Jn.readdirSync};var Nu=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,KL),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({},qn.DEFAULT_FILE_SYSTEM_ADAPTER),e)}};qn.default=Nu});var bu=U((yH,Pm)=>{"use strict";var Nm=Ph(),$L=Om(),YL=ym(),WL=Lm(),Pu=Cm(),Lt=pr();async function Du(t,e){xt(t);let r=vu(t,$L.default,e),n=await Promise.all(r);return Lt.array.flatten(n)}(function(t){t.glob=t,t.globSync=e,t.globStream=r,t.async=t;function e(c,u){xt(c);let p=vu(c,WL.default,u);return Lt.array.flatten(p)}t.sync=e;function r(c,u){xt(c);let p=vu(c,YL.default,u);return Lt.stream.merge(p)}t.stream=r;function n(c,u){xt(c);let p=[].concat(c),d=new Pu.default(u);return Nm.generate(p,d)}t.generateTasks=n;function i(c,u){xt(c);let p=new Pu.default(u);return Lt.pattern.isDynamicPattern(c,p)}t.isDynamicPattern=i;function s(c){return xt(c),Lt.path.escape(c)}t.escapePath=s;function o(c){return xt(c),Lt.path.convertPathToPattern(c)}t.convertPathToPattern=o;let a;(function(c){function u(d){return xt(d),Lt.path.escapePosixPath(d)}c.escapePath=u;function p(d){return xt(d),Lt.path.convertPosixPathToPattern(d)}c.convertPathToPattern=p})(a=t.posix||(t.posix={}));let l;(function(c){function u(d){return xt(d),Lt.path.escapeWindowsPath(d)}c.escapePath=u;function p(d){return xt(d),Lt.path.convertWindowsPathToPattern(d)}c.convertPathToPattern=p})(l=t.win32||(t.win32={}))})(Du||(Du={}));function vu(t,e,r){let n=[].concat(t),i=new Pu.default(r),s=Nm.generate(n,i),o=new e(i);return s.map(o.read,o)}function xt(t){if(![].concat(t).every(n=>Lt.string.isString(n)&&!Lt.string.isEmpty(n)))throw new TypeError("Patterns must be a string (non empty) or an array of strings")}Pm.exports=Du});var xm=U((IH,Ao)=>{"use strict";function bm(t){return Array.isArray(t)?t:[t]}var jL=void 0,Fu="",Dm=" ",wu="\\",VL=/^\s+$/,zL=/(?:[^\\]|^)\\$/,JL=/^\\!/,qL=/^\\#/,QL=/\r?\n/g,XL=/^\.{0,2}\/|^\.{1,2}$/,ZL=/\/$/,Qn="/",wm="node-ignore";typeof Symbol<"u"&&(wm=Symbol.for("node-ignore"));var Fm=wm,Xn=(t,e,r)=>(Object.defineProperty(t,e,{value:r}),r),eC=/([0-z])-([0-z])/g,Mm=()=>!1,tC=t=>t.replace(eC,(e,r,n)=>r.charCodeAt(0)<=n.charCodeAt(0)?e:Fu),rC=t=>t.startsWith("!")||t.startsWith("\\^")?`^${t.slice(t[0]==="!"?1:2)}`:t,nC=t=>{let{length:e}=t;return t.slice(0,e-e%2)},iC=[[/^\uFEFF/,()=>Fu],[/((?:\\\\)*?)(\\?\s+)$/,(t,e,r)=>e+(r.indexOf("\\")===0?Dm:Fu)],[/(\\+?)\s/g,(t,e)=>{let{length:r}=e;return e.slice(0,r-r%2)+Dm}],[/[\\$.|*+(){^]/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,()=>wu],[/\\\\/g,()=>wu],[/(\\)?\[([^\]/]*?)(\\*)($|\])/g,(t,e,r,n,i)=>e===wu?`\\[${r}${nC(n)}${i}`:i==="]"&&n.length%2===0?`[${rC(tC(r))}${n}]`:"[]"],[/(?:[^*])$/,t=>/\/$/.test(t)?`${t}$`:`${t}(?=$|\\/$)`]],sC=/(^|\\\/)?\\\*$/,Vi="regex",To="checkRegex",vm="_",oC={[Vi](t,e){return`${e?`${e}[^/]+`:"[^/]*"}(?=$|\\/$)`},[To](t,e){return`${e?`${e}[^/]*`:"[^/]*"}(?=$|\\/$)`}},aC=t=>iC.reduce((e,[r,n])=>e.replace(r,n.bind(t)),t),Ro=t=>typeof t=="string",lC=t=>t&&Ro(t)&&!VL.test(t)&&!zL.test(t)&&t.indexOf("#")!==0,cC=t=>t.split(QL).filter(Boolean),Mu=class{constructor(e,r,n,i,s,o){this.pattern=e,this.mark=r,this.negative=s,Xn(this,"body",n),Xn(this,"ignoreCase",i),Xn(this,"regexPrefix",o)}get regex(){let e=vm+Vi;return this[e]?this[e]:this._make(Vi,e)}get checkRegex(){let e=vm+To;return this[e]?this[e]:this._make(To,e)}_make(e,r){let n=this.regexPrefix.replace(sC,oC[e]),i=this.ignoreCase?new RegExp(n,"i"):new RegExp(n);return Xn(this,r,i)}},uC=({pattern:t,mark:e},r)=>{let n=!1,i=t;i.indexOf("!")===0&&(n=!0,i=i.substr(1)),i=i.replace(JL,"!").replace(qL,"#");let s=aC(i);return new Mu(t,e,i,r,n,s)},ku=class{constructor(e){this._ignoreCase=e,this._rules=[]}_add(e){if(e&&e[Fm]){this._rules=this._rules.concat(e._rules._rules),this._added=!0;return}if(Ro(e)&&(e={pattern:e}),lC(e.pattern)){let r=uC(e,this._ignoreCase);this._added=!0,this._rules.push(r)}}add(e){return this._added=!1,bm(Ro(e)?cC(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?jL:l)});let a={ignored:i,unignored:s};return o&&(a.rule=o),a}},dC=(t,e)=>{throw new e(t)},gr=(t,e,r)=>Ro(t)?t?gr.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),km=t=>XL.test(t);gr.isNotRelative=km;gr.convert=t=>t;var Gu=class{constructor({ignorecase:e=!0,ignoreCase:r=e,allowRelativePaths:n=!1}={}){Xn(this,Fm,!0),this._rules=new ku(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&&gr.convert(e);return gr(s,e,this._strictPathCheck?dC:Mm),this._t(s,r,n,i)}checkIgnore(e){if(!ZL.test(e))return this.test(e);let r=e.split(Qn).filter(Boolean);if(r.pop(),r.length){let n=this._t(r.join(Qn)+Qn,this._testCache,!0,r);if(n.ignored)return n}return this._rules.test(e,!1,To)}_t(e,r,n,i){if(e in r)return r[e];if(i||(i=e.split(Qn).filter(Boolean)),i.pop(),!i.length)return r[e]=this._rules.test(e,n,Vi);let s=this._t(i.join(Qn)+Qn,r,n,i);return r[e]=s.ignored?s:this._rules.test(e,n,Vi)}ignores(e){return this._test(e,this._ignoreCache,!1).ignored}createFilter(){return e=>!this.ignores(e)}filter(e){return bm(e).filter(this.createFilter())}test(e){return this._test(e,this._testCache,!0)}},xu=t=>new Gu(t),pC=t=>gr(t&&gr.convert(t),t,Mm),Gm=()=>{let t=r=>/^\\\\\?\\/.test(r)||/["<>|\u0000-\u001F]+/u.test(r)?r:r.replace(/\\/g,"/");gr.convert=t;let e=/^[a-z]:\//i;gr.isNotRelative=r=>e.test(r)||km(r)};typeof process<"u"&&process.platform==="win32"&&Gm();Ao.exports=xu;xu.default=xu;Ao.exports.isPathValid=pC;Xn(Ao.exports,Symbol.for("setupWindows"),Gm)});import*as XT from"dotenv";import $t from"process";import{execFile as ER}from"child_process";import{promisify as SR}from"util";import cr from"fs/promises";import lt from"path";import{spawn as nR}from"child_process";import qp from"fs/promises";import ln from"path";import iR from"os";var xl=class{value;next;constructor(e){this.value=e}},Di=class{#t;#s;#c;constructor(){this.clear()}enqueue(e){let r=new xl(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 sn(t){let e=!1;if(typeof t=="object"&&({concurrency:t,rejectOnClear:e=!1}=t),Jp(t),typeof e!="boolean")throw new TypeError("Expected `rejectOnClear` to be a boolean");let r=new Di,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){Jp(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 Jp(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 Pr={NAME:"Docuvia",EMAIL:"docuvia@localhost"};var on="refs/heads/",Ul="HEAD";var sR="fast-import",oR="--quiet",Hl={PIPE:"pipe",IGNORE:"ignore"},bs={DATA:"data",ERROR:"error",CLOSE:"close"},an={COMMIT:"commit",COMMITTER:"committer",DATA:"data",FROM:"from",DELETE_ALL:"deleteall",MODIFY:"M"},aR="100644",lR="inline",cR="+0000",uR="stdin write failed: ",dR=(t,e,r)=>{let n=[e,r?`${uR}${r.message}`:""].filter(Boolean).join("; ");return`git fast-import exited with code ${t}${n?": "+n:""}`},pR=300*1e3,Qp="SIGTERM",gR=t=>`git fast-import timed out after ${t}ms and was terminated`,fR=iR.cpus().length*4;async function Xp(t,e){let r=ln.resolve(t),n=e?ln.resolve(e):r;if(!r.startsWith(n+ln.sep)&&r!==n)throw new E(A.FS_PATH_TRAVERSAL,`sourceDir "${t}" escapes allowed root "${n}"`);let i=new Map,s=sn(fR),o=async a=>{let l=await qp.readdir(a,{withFileTypes:!0});await Promise.all(l.map(async c=>{let u=ln.join(a,c.name);if(c.isDirectory())await o(u);else if(c.isFile()){let p=ln.relative(t,u),d=await s(()=>qp.readFile(u,H));i.set(p,d)}}))};return await o(t),i}function Zp(t,e,r,n,i){let s=[];s.push(`${an.COMMIT} ${on}${t}`),s.push(`${an.COMMITTER} ${Pr.NAME} <${Pr.EMAIL}> ${r} ${cR}`),s.push(`${an.DATA} ${Buffer.byteLength(n,H)}`),s.push(n),i&&s.push(`${an.FROM} ${i}`),s.push(an.DELETE_ALL);for(let[o,a]of e){let l=Buffer.from(a,H),c=o.split(ln.sep).join(ln.posix.sep);s.push(`${an.MODIFY} ${aR} ${lR} ${c}`),s.push(`${an.DATA} ${l.length}`),s.push(a)}return s.push(""),s.join(`
5
+ `)}function eg(t,e,r=pR){return new Promise((n,i)=>{let s=nR("git",[sR,oR],{cwd:t,stdio:[Hl.PIPE,Hl.IGNORE,Hl.PIPE]}),o=setTimeout(()=>{s.kill(Qp),i(new Error(gR(r)))},r);o.unref();let a=[],l;s.stderr.on(bs.DATA,c=>a.push(c)),s.on(bs.ERROR,i),s.on(bs.CLOSE,c=>{if(clearTimeout(o),c===0)return n();let u=Buffer.concat(a).toString(H).trim();i(new Error(dR(c,u,l)))}),s.stdin.on(bs.ERROR,c=>{l=c});try{s.stdin.end(e,H)}catch(c){s.kill(Qp),clearTimeout(o),i(c instanceof Error?c:new Error(String(c)));return}})}import xn from"path";var hR="Git hook name must be a basename contained by the resolved hooks directory";function mR(t){return t.length===0||t==="."||t===".."||t.includes("/")||t.includes("\\")||xn.isAbsolute(t)}function _R(t){return t.length===0||t===".."||t.startsWith(`..${xn.sep}`)||xn.isAbsolute(t)}function tg(){throw new E(A.FS_PATH_TRAVERSAL,hR)}function vi(t,e){mR(e)&&tg();let r=xn.resolve(t),n=xn.resolve(r,e),i=xn.relative(r,n);return _R(i)&&tg(),n}var TR=SR(ER),RR={LC_ALL:"C",LANG:"C",LC_MESSAGES:"C"},ge=(t,e,r={})=>TR(t,e,{...r,encoding:"utf8",env:{...process.env,...r.env??{},...RR}}),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"},ws={PATH:"worktree ",BRANCH:"branch "},AR="\0",OR="",Bl={RENAMED:"R",ADDED:"A",DELETED:"D"},yR="4b825dc642cb6eb9a060e54bf8d69288fbee4904",rg=".git",ng="hooks",IR="_",ig="docuvia-knowledge.lock",LR=1e4,CR=100,NR=6e4,sg="object",og="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`},Un=class{async getGitDir(e){try{let{stdout:r}=await ge("git",[fe.REV_PARSE,re.GIT_DIR_FLAG],{cwd:e});return lt.resolve(e,r.trim())}catch{return lt.join(e,rg)}}async getGitCommonDir(e){try{let{stdout:r}=await ge("git",[fe.REV_PARSE,re.GIT_COMMON_DIR_FLAG],{cwd:e});return lt.resolve(e,r.trim())}catch{return lt.join(e,rg)}}async resolveHooksDir(e){let r;try{let{stdout:n}=await ge("git",[fe.REV_PARSE,re.GIT_PATH_FLAG,ng],{cwd:e});r=lt.resolve(e,n.trim())}catch{let n=await this.getGitCommonDir(e);r=lt.join(n,ng)}return lt.basename(r)===IR?lt.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(A.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(A.GIT_COMMAND_FAILED,Fe.BRANCH_DELETE_FAILED,n)}}async commitEmptyTree(e,r){try{let{stdout:n}=await ge("git",[fe.COMMIT_TREE,yR,re.MESSAGE_FLAG,r],{cwd:e});return n.trim()}catch(n){throw E.wrap(A.GIT_BRANCH_CREATE_FAILED,Fe.COMMIT_TREE_FAILED,n)}}async updateBranchRef(e,r,n){try{await ge("git",[fe.UPDATE_REF,`${on}${r}`,n],{cwd:e})}catch(i){throw E.wrap(A.GIT_BRANCH_CREATE_FAILED,Fe.UPDATE_REF_FAILED,i)}}async hooksDirExists(e){try{let r=await this.resolveHooksDir(e);return await cr.access(r),!0}catch{return!1}}async readHookFile(e,r){let n=await this.resolveHooksDir(e),i=vi(n,r);try{return await cr.readFile(i,H)}catch{return}}async appendHookFile(e,r,n){try{let i=await this.resolveHooksDir(e),s=vi(i,r);await cr.appendFile(s,n)}catch(i){throw E.wrap(A.GIT_HOOK_INSTALL_FAILED,Fe.HOOK_FILE_WRITE_FAILED,i)}}async writeHookFile(e,r,n){try{let i=await this.resolveHooksDir(e),s=vi(i,r);await cr.writeFile(s,n)}catch(i){throw E.wrap(A.GIT_HOOK_INSTALL_FAILED,Fe.HOOK_FILE_WRITE_FAILED,i)}}async makeHookExecutable(e,r){try{let n=await this.resolveHooksDir(e),i=vi(n,r);await cr.chmod(i,493)}catch(n){throw E.wrap(A.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(A.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(A.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(A.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(A.GIT_COMMAND_FAILED,Fe.CAT_FILE_BLOB_FAILED,n)}}async readFileAtRef(e,r,n){try{let i=n.split(lt.sep).join(lt.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(lt.sep).join(lt.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(AR).map(s=>s.trim()).filter(Boolean).map(s=>{let o=s.indexOf(OR);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,Os],{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(A.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??Ul,...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(Bl.RENAMED)?{status:At.RENAMED,file:r[2]??r[1],oldFile:r[1]}:e.startsWith(Bl.ADDED)?{status:At.ADDED,file:r[1]}:e.startsWith(Bl.DELETED)?{status:At.DELETED,file:r[1]}:{status:At.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:At.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(A.GIT_COMMAND_FAILED,Fe.DIFF_TREE_FAILED,n)}}async getHeadSha(e){try{let{stdout:r}=await ge("git",[fe.REV_PARSE,Ul],{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(`
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(bs.PATH));if(!o)continue;let a=s.find(l=>l.startsWith(bs.BRANCH));n.push({path:o.slice(bs.PATH.length),branch:a?a.slice(bs.BRANCH.length).replace(on,""):void 0})}return n}async getBranchTipSha(e,r){try{let{stdout:n}=await pe("git",[ge.REV_PARSE,re.VERIFY,re.QUIET,`${on}${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 Xp(r,o?void 0:e),l=s!==void 0?s:Math.floor(Date.now()/1e3),c=await this.getBranchTipSha(e,n),u=Zp(n,a,l,i,c);await eg(e,u)}catch(a){throw E.wrap(y.GIT_FAST_IMPORT_FAILED,Fe.FAST_IMPORT_FAILED,a)}}async fetchRef(e,r,n,i){try{await pe("git",[ge.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=`${on}${n}`;await pe("git",[ge.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===sg&&e!==null&&e.killed?y.GIT_NETWORK_TIMEOUT:y.GIT_COMMAND_FAILED;return E.wrap(n,r,e)}async getRefSha(e,r){try{let{stdout:n}=await pe("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 pe("git",[ge.MERGE_BASE,re.IS_ANCESTOR,r,n],{cwd:e}),!0}catch(i){if(i&&typeof i===sg&&og in i&&i[og]===1)return!1;throw E.wrap(y.GIT_COMMAND_FAILED,Fe.MERGE_BASE_IS_ANCESTOR_FAILED,i)}}async getTreeSha(e,r){try{let{stdout:n}=await pe("git",[ge.REV_PARSE,`${r}${re.TREE_SUFFIX}`],{cwd:e});return n.trim()}catch(n){throw E.wrap(y.GIT_COMMAND_FAILED,Fe.REV_PARSE_TREE_FAILED,n)}}async getCommitTimestamp(e,r){try{let{stdout:n}=await pe("git",[ge.SHOW,re.SUPPRESS_DIFF,re.COMMIT_TIMESTAMP_FORMAT,r],{cwd:e});return Number(n.trim())}catch(n){throw E.wrap(y.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 pe("git",[ge.COMMIT_TREE,r,...s,re.MESSAGE_FLAG,i],{cwd:e,env:{...process.env,GIT_AUTHOR_NAME:Pr.NAME,GIT_AUTHOR_EMAIL:Pr.EMAIL,GIT_COMMITTER_NAME:Pr.NAME,GIT_COMMITTER_EMAIL:Pr.EMAIL}});return o.trim()}catch(s){throw E.wrap(y.GIT_COMMAND_FAILED,Fe.COMMIT_TREE_MERGE_FAILED,s)}}async acquireKnowledgeLock(e){let r=await this.getGitDir(e),n=lt.join(r,ig),i=Date.now()+LR;for(;;)try{await(await cr.open(n,"wx")).close();return}catch(s){let o=s.code;if(o!==vn&&o!==rn&&o!==wn&&o!==bn)throw E.wrap(y.GIT_COMMAND_FAILED,Fe.KNOWLEDGE_LOCK_ACQUIRE_FAILED,s);let a=await cr.stat(n).catch(()=>{});if(a&&Date.now()-a.mtimeMs>NR){await cr.rm(n,{force:!0});continue}if(Date.now()>i)throw new E(y.GIT_COMMAND_FAILED,Fe.KNOWLEDGE_LOCK_TIMED_OUT(n));await new Promise(l=>setTimeout(l,CR))}}async releaseKnowledgeLock(e){let r=await this.getGitDir(e),n=lt.join(r,ig);await cr.rm(n,{force:!0})}async getBlameLineOwners(e,r){let n=new Map;try{let{stdout:i}=await pe("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 PR}from"child_process";import{promisify as DR}from"util";var vR=DR(PR),wR="git_network",ag={REMOTE_REACHABLE:"Git remote is reachable",REMOTE_REACHABILITY_CHECK_FAILED:"Git remote reachability check failed"},bR="ls-remote",FR="--heads",MR=`${"git"} ${bR} ${FR} ${ys}`,kR=5e3,Fs=class{async checkHealth(e){let r={};try{let{stdout:n}=await vR(MR,{cwd:e,timeout:kR});r[wR]={status:K.PASS,message:ag.REMOTE_REACHABLE}}catch(n){let i=n.killed?y.GIT_NETWORK_TIMEOUT:y.GIT_COMMAND_FAILED;throw E.wrap(i,ag.REMOTE_REACHABILITY_CHECK_FAILED,n)}return r}};A.register(T.GitProvider,()=>new Un);A.register(T.LineBlameProvider,()=>new Un);A.register(T.DiagnosticRunnerGit,()=>new Fs);import mg from"fs";import Us from"fs/promises";import VR from"path";import _g from"better-sqlite3";import lg from"fs";import GR from"path";var cn={BUSY_TIMEOUT_MS:1e4,JOURNAL_MODE:"WAL",SYNCHRONOUS:"NORMAL",WAL_FILE_SUFFIX:"-wal"},Hn={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 xR=".sql";function Kl(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(ws.PATH));if(!o)continue;let a=s.find(l=>l.startsWith(ws.BRANCH));n.push({path:o.slice(ws.PATH.length),branch:a?a.slice(ws.BRANCH.length).replace(on,""):void 0})}return n}async getBranchTipSha(e,r){try{let{stdout:n}=await ge("git",[fe.REV_PARSE,re.VERIFY,re.QUIET,`${on}${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 Xp(r,o?void 0:e),l=s!==void 0?s:Math.floor(Date.now()/1e3),c=await this.getBranchTipSha(e,n),u=Zp(n,a,l,i,c);await eg(e,u)}catch(a){throw E.wrap(A.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=`${on}${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===sg&&e!==null&&e.killed?A.GIT_NETWORK_TIMEOUT:A.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===sg&&og in i&&i[og]===1)return!1;throw E.wrap(A.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(A.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(A.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:Pr.NAME,GIT_AUTHOR_EMAIL:Pr.EMAIL,GIT_COMMITTER_NAME:Pr.NAME,GIT_COMMITTER_EMAIL:Pr.EMAIL}});return o.trim()}catch(s){throw E.wrap(A.GIT_COMMAND_FAILED,Fe.COMMIT_TREE_MERGE_FAILED,s)}}async acquireKnowledgeLock(e){let r=await this.getGitDir(e),n=lt.join(r,ig),i=Date.now()+LR;for(;;)try{await(await cr.open(n,"wx")).close();return}catch(s){let o=s.code;if(o!==vn&&o!==rn&&o!==bn&&o!==wn)throw E.wrap(A.GIT_COMMAND_FAILED,Fe.KNOWLEDGE_LOCK_ACQUIRE_FAILED,s);let a=await cr.stat(n).catch(()=>{});if(a&&Date.now()-a.mtimeMs>NR){await cr.rm(n,{force:!0});continue}if(Date.now()>i)throw new E(A.GIT_COMMAND_FAILED,Fe.KNOWLEDGE_LOCK_TIMED_OUT(n));await new Promise(l=>setTimeout(l,CR))}}async releaseKnowledgeLock(e){let r=await this.getGitDir(e),n=lt.join(r,ig);await cr.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 PR}from"child_process";import{promisify as DR}from"util";var vR=DR(PR),bR="git_network",ag={REMOTE_REACHABLE:"Git remote is reachable",REMOTE_REACHABILITY_CHECK_FAILED:"Git remote reachability check failed"},wR="ls-remote",FR="--heads",MR=`${"git"} ${wR} ${FR} ${Os}`,kR=5e3,Fs=class{async checkHealth(e){let r={};try{let{stdout:n}=await vR(MR,{cwd:e,timeout:kR});r[bR]={status:K.PASS,message:ag.REMOTE_REACHABLE}}catch(n){let i=n.killed?A.GIT_NETWORK_TIMEOUT:A.GIT_COMMAND_FAILED;throw E.wrap(i,ag.REMOTE_REACHABILITY_CHECK_FAILED,n)}return r}};O.register(T.GitProvider,()=>new Un);O.register(T.LineBlameProvider,()=>new Un);O.register(T.DiagnosticRunnerGit,()=>new Fs);import mg from"fs";import Us from"fs/promises";import VR from"path";import _g from"better-sqlite3";import lg from"fs";import GR from"path";var cn={BUSY_TIMEOUT_MS:1e4,JOURNAL_MODE:"WAL",SYNCHRONOUS:"NORMAL",WAL_FILE_SUFFIX:"-wal"},Hn={BUSY_TIMEOUT:"busy_timeout",JOURNAL_MODE:"journal_mode",SYNCHRONOUS:"synchronous",INTEGRITY_CHECK:"integrity_check"},w={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 xR=".sql";function Kl(t,e){t.exec(`CREATE TABLE IF NOT EXISTS ${w.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=lg.readdirSync(e).filter(s=>s.endsWith(xR)).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=lg.readFileSync(GR.join(e,o),H);t.exec(a),n.run(o)}}).immediate()}import{fileURLToPath as UR}from"url";import cg from"path";var HR=cg.dirname(UR(import.meta.url)),$l=cg.join(HR,"migrations");var Ms={READ:"read",WRITE:"write"},ks=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===Ms.WRITE)?(this.activeReaders++,Promise.resolve()):new Promise(e=>{this.queue.push({kind:Ms.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:Ms.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===Ms.WRITE){this.activeReaders===0&&(this.queue.shift(),this.writerActive=!0,e.grant());return}this.queue.shift(),this.activeReaders++,e.grant()}}};var BR="Failed to count projects",bi=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(y.DB_QUERY_FAILED,BR,e)}}};var Fi=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}))}upsertFile(e){this.db.prepare(`INSERT INTO ${b.PROJECT_FILES} (${P.PROJECT_ID}, ${P.FILE_PATH}, ${P.CONTENT_HASH}, last_parsed_at)
22
+ )`);let r=lg.readdirSync(e).filter(s=>s.endsWith(xR)).sort(),n=t.prepare(`INSERT INTO ${w.SCHEMA_MIGRATIONS} (${P.FILENAME}) VALUES (?)`);t.transaction(()=>{let s=new Set(t.prepare(`SELECT ${P.FILENAME} FROM ${w.SCHEMA_MIGRATIONS}`).all().map(o=>o.filename));for(let o of r){if(s.has(o))continue;let a=lg.readFileSync(GR.join(e,o),H);t.exec(a),n.run(o)}}).immediate()}import{fileURLToPath as UR}from"url";import cg from"path";var HR=cg.dirname(UR(import.meta.url)),$l=cg.join(HR,"migrations");var Ms={READ:"read",WRITE:"write"},ks=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===Ms.WRITE)?(this.activeReaders++,Promise.resolve()):new Promise(e=>{this.queue.push({kind:Ms.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:Ms.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===Ms.WRITE){this.activeReaders===0&&(this.queue.shift(),this.writerActive=!0,e.grant());return}this.queue.shift(),this.activeReaders++,e.grant()}}};var BR="Failed to count projects",wi=class{constructor(e){this.db=e}db;getFirst(){return this.db.prepare(`SELECT * FROM ${w.PROJECTS} LIMIT 1`).get()}insert(e){let r=this.db.prepare(`INSERT INTO ${w.PROJECTS} (name, repo_url) VALUES (?, ?)`).run(e.name,e.repoUrl);return this.db.prepare(`SELECT * FROM ${w.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 ${w.PROJECTS}`).get().c}catch(e){throw E.wrap(A.DB_QUERY_FAILED,BR,e)}}};var Fi=class{constructor(e){this.db=e}db;getAllHashes(){return this.db.prepare(`SELECT ${P.FILE_PATH}, ${P.CONTENT_HASH} FROM ${w.PROJECT_FILES}`).all().map(r=>({filePath:r.file_path,contentHash:r.content_hash}))}upsertFile(e){this.db.prepare(`INSERT INTO ${w.PROJECT_FILES} (${P.PROJECT_ID}, ${P.FILE_PATH}, ${P.CONTENT_HASH}, last_parsed_at)
23
23
  VALUES (?, ?, ?, CURRENT_TIMESTAMP)
24
24
  ON CONFLICT(${P.PROJECT_ID}, ${P.FILE_PATH})
25
- 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)
25
+ 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 ${w.PROJECT_FILES} (${P.PROJECT_ID}, ${P.FILE_PATH}, last_tier_b_processed_at, last_tier_b_commit_sha)
26
26
  VALUES (?, ?, CURRENT_TIMESTAMP, ?)
27
27
  ON CONFLICT(${P.PROJECT_ID}, ${P.FILE_PATH})
28
- DO UPDATE SET last_tier_b_processed_at = CURRENT_TIMESTAMP, last_tier_b_commit_sha = excluded.last_tier_b_commit_sha`).run(e.projectId,e.filePath,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 ug={AUTO_DETECTED_TAG_DESCRIPTION:t=>`Auto-detected tag: ${t}`,GET_ALL_TAG_LINKS_FAILED:"Failed to get all tag links"},Mi=class{constructor(e){this.db=e}db;upsertTag(e){this.db.prepare(`INSERT INTO ${b.L1_TAGS} (name, slug, description)
28
+ DO UPDATE SET last_tier_b_processed_at = CURRENT_TIMESTAMP, last_tier_b_commit_sha = excluded.last_tier_b_commit_sha`).run(e.projectId,e.filePath,e.commitSha)}getTierBFileStatus(e){let r=this.db.prepare(`SELECT last_tier_b_processed_at, last_tier_b_commit_sha FROM ${w.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 ${w.PROJECT_FILES}`).get();return{totalFiles:e.total,processedFiles:e.processed??0}}};var ug={AUTO_DETECTED_TAG_DESCRIPTION:t=>`Auto-detected tag: ${t}`,GET_ALL_TAG_LINKS_FAILED:"Failed to get all tag links"},Mi=class{constructor(e){this.db=e}db;upsertTag(e){this.db.prepare(`INSERT INTO ${w.L1_TAGS} (name, slug, description)
29
29
  VALUES (?, ?, ?)
30
- ON CONFLICT(name) DO NOTHING`).run(e,e,ug.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
31
- FROM ${b.L2_NODE_L1_TAGS} lt
32
- 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(y.DB_QUERY_FAILED,ug.GET_ALL_TAG_LINKS_FAILED,e)}}};var ct={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 dg(t){return{id:t.id,name:t.name,type:t.type,filePath:KR(t.path_patterns)}}function KR(t){if(t)try{let e=JSON.parse(t);if(Array.isArray(e)&&e.length>0)return String(e[0])}catch{}}var Bn={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 $R(t,e){let r=t[0];return r?r===e?r:`${r}#${e}`:e}var ki=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??$R(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})
33
- VALUES (?, ?, ?, ?, ?, ?, ?)`).run(e.projectId,e.name,e.type??Rr.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(y.DB_QUERY_FAILED,ct.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(y.DB_QUERY_FAILED,ct.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(y.DB_QUERY_FAILED,ct.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(y.DB_QUERY_FAILED,ct.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 dg(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?dg(i):void 0}catch(r){throw E.wrap(y.DB_QUERY_FAILED,ct.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(y.DB_QUERY_FAILED,ct.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
34
- FROM ${b.NODE_LINKS} l
35
- JOIN ${b.L2_NODES} n ON n.id = l.${P.SOURCE_NODE_ID}
36
- WHERE l.${P.TARGET_NODE_ID} = ?`).all(e)}catch(r){throw E.wrap(y.DB_QUERY_FAILED,ct.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
37
- FROM ${b.NODE_LINKS} l
38
- JOIN ${b.L2_NODES} n ON n.id = l.${P.TARGET_NODE_ID}
39
- WHERE l.${P.SOURCE_NODE_ID} = ?`).all(e)}catch(r){throw E.wrap(y.DB_QUERY_FAILED,ct.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
40
- FROM ${b.NODE_LINKS} l
41
- JOIN ${b.L2_NODES} n ON n.id = l.${P.SOURCE_NODE_ID}
42
- WHERE l.${P.TARGET_NODE_ID} = ?`).all(e)}catch(r){throw E.wrap(y.DB_QUERY_FAILED,ct.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
43
- FROM ${b.NODE_LINKS} l
44
- JOIN ${b.L2_NODES} n ON n.id = l.${P.TARGET_NODE_ID}
45
- WHERE l.${P.SOURCE_NODE_ID} = ?`).all(e)}catch(r){throw E.wrap(y.DB_QUERY_FAILED,ct.OUTGOING_RELATIONS_FAILED(e),r)}}getAllNodes(){try{return this.db.prepare(`SELECT * FROM ${b.L2_NODES}`).all()}catch(e){throw E.wrap(y.DB_QUERY_FAILED,ct.ALL_NODES_FAILED,e)}}getAllLinks(){try{return this.db.prepare(`SELECT * FROM ${b.NODE_LINKS}`).all()}catch(e){throw E.wrap(y.DB_QUERY_FAILED,ct.ALL_LINKS_FAILED,e)}}withFtsSyncSuspended(e){this.db.exec(pg);let r=e();return this.db.exec(`INSERT INTO ${b.L2_NODES_FTS}(${b.L2_NODES_FTS}) VALUES('rebuild')`),this.db.exec(gg),r}bulkLoadGraph(e){try{return this.db.transaction(()=>{this.db.exec(pg),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})
46
- VALUES (?, ?, ?, '', ?, ?)`),i=new Map;for(let l of e.nodes){let c=n.run(e.projectId,l.name,Rr.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(gg),{nodesLoaded:e.nodes.length,edgesLoaded:o,edgesDropped:a}})()}catch(r){throw E.wrap(y.DB_QUERY_FAILED,ct.BULK_LOAD_FAILED,r)}}pruneOrphanedLinks(){try{return this.db.prepare(`DELETE FROM ${b.NODE_LINKS}
47
- WHERE ${P.SOURCE_NODE_ID} NOT IN (SELECT id FROM ${b.L2_NODES})
48
- OR ${P.TARGET_NODE_ID} NOT IN (SELECT id FROM ${b.L2_NODES})`).run().changes}catch(e){throw E.wrap(y.DB_QUERY_FAILED,ct.PRUNE_ORPHANED_LINKS_FAILED,e)}}},pg=`
30
+ ON CONFLICT(name) DO NOTHING`).run(e,e,ug.AUTO_DETECTED_TAG_DESCRIPTION(e))}getIdByName(e){return this.db.prepare(`SELECT id FROM ${w.L1_TAGS} WHERE name = ?`).get(e)?.id}linkNodeToTag(e,r){this.db.prepare(`INSERT INTO ${w.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
31
+ FROM ${w.L2_NODE_L1_TAGS} lt
32
+ JOIN ${w.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(A.DB_QUERY_FAILED,ug.GET_ALL_TAG_LINKS_FAILED,e)}}};var ct={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 dg(t){return{id:t.id,name:t.name,type:t.type,filePath:KR(t.path_patterns)}}function KR(t){if(t)try{let e=JSON.parse(t);if(Array.isArray(e)&&e.length>0)return String(e[0])}catch{}}var Bn={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 $R(t,e){let r=t[0];return r?r===e?r:`${r}#${e}`:e}var ki=class{constructor(e){this.db=e}db;deleteNodesForPath(e){let r=JSON.stringify([e]),i=this.db.prepare(`SELECT id FROM ${w.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 ${w.L2_NODE_L1_TAGS} WHERE ${P.L2_NODE_ID} IN (${s})`).run(...i),this.db.prepare(`DELETE FROM ${w.NODE_LINKS} WHERE ${P.SOURCE_NODE_ID} IN (${s})`).run(...i),this.db.prepare(`DELETE FROM ${w.L2_NODES} WHERE id IN (${s})`).run(...i),i}insertNode(e){let r=e.nodeKey??$R(e.pathPatterns,e.name),n=this.db.prepare(`INSERT INTO ${w.L2_NODES} (${P.PROJECT_ID}, name, type, description, ${P.PATH_PATTERNS}, ${P.NODE_KEY}, ${P.CONTENT_HASH})
33
+ VALUES (?, ?, ?, ?, ?, ?, ?)`).run(e.projectId,e.name,e.type??Rr.MODULE,e.description??"",JSON.stringify(e.pathPatterns),r,e.contentHash??null);return Number(n.lastInsertRowid)}insertLink(e){this.db.prepare(`INSERT INTO ${w.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 ${w.L2_NODES} WHERE ${P.PATH_PATTERNS} = ? AND name = ?`).get(n,r)?.id}count(){try{let e=this.db.prepare(`SELECT COUNT(*) as c FROM ${w.L2_NODES}`).get().c,r=this.db.prepare(`SELECT COUNT(*) as c FROM ${w.L3_NODES}`).get().c;return{l2Nodes:e,l3Nodes:r}}catch(e){throw E.wrap(A.DB_QUERY_FAILED,ct.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 ${w.L2_NODES}`).get();return{totalNodes:e.total,describedNodes:e.described??0}}catch(e){throw E.wrap(A.DB_QUERY_FAILED,ct.SEMANTIC_COVERAGE_FAILED,e)}}getCanarySample(e){try{return this.db.prepare(`SELECT name FROM ${w.L2_NODES} WHERE name != '' ORDER BY id LIMIT ?`).all(e)}catch(r){throw E.wrap(A.DB_QUERY_FAILED,ct.COUNT_FAILED,r)}}findNodesForChangedFiles(e){try{let r=new Set(e),i=this.db.prepare(`SELECT * FROM ${w.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 ${w.L3_NODES} WHERE ${P.L2_NODE_ID} = ?`);return i.map(o=>({l2Node:o,l3Nodes:s.all(o.id)}))}catch(r){throw E.wrap(A.DB_QUERY_FAILED,ct.FIND_NODES_FOR_CHANGED_FILES_FAILED,r)}}findNodeByName(e){try{let r=this.db.prepare(`SELECT id, name, type, ${P.PATH_PATTERNS} FROM ${w.L2_NODES} WHERE name = ? ORDER BY (${P.PATH_PATTERNS} LIKE '%test%' OR ${P.PATH_PATTERNS} LIKE '%spec%') ASC, (SELECT COUNT(*) FROM ${w.NODE_LINKS} WHERE ${P.SOURCE_NODE_ID} = ${w.L2_NODES}.id OR ${P.TARGET_NODE_ID} = ${w.L2_NODES}.id) DESC LIMIT 1`).get(e);if(r)return dg(r);let n=e.replace(/[\\%_]/g,s=>`\\${s}`),i=this.db.prepare(`SELECT id, name, type, ${P.PATH_PATTERNS} FROM ${w.L2_NODES} WHERE name LIKE ? ESCAPE '\\' ORDER BY (${P.PATH_PATTERNS} LIKE '%test%' OR ${P.PATH_PATTERNS} LIKE '%spec%') ASC, (SELECT COUNT(*) FROM ${w.NODE_LINKS} WHERE ${P.SOURCE_NODE_ID} = ${w.L2_NODES}.id OR ${P.TARGET_NODE_ID} = ${w.L2_NODES}.id) DESC LIMIT 1`).get(`%${n}%`);return i?dg(i):void 0}catch(r){throw E.wrap(A.DB_QUERY_FAILED,ct.FIND_NODE_BY_NAME_FAILED(e),r)}}findNodeIdByNodeKey(e){try{return this.db.prepare(`SELECT id FROM ${w.L2_NODES} WHERE ${P.NODE_KEY} = ?`).get(e)?.id}catch(r){throw E.wrap(A.DB_QUERY_FAILED,ct.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
34
+ FROM ${w.NODE_LINKS} l
35
+ JOIN ${w.L2_NODES} n ON n.id = l.${P.SOURCE_NODE_ID}
36
+ WHERE l.${P.TARGET_NODE_ID} = ?`).all(e)}catch(r){throw E.wrap(A.DB_QUERY_FAILED,ct.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
37
+ FROM ${w.NODE_LINKS} l
38
+ JOIN ${w.L2_NODES} n ON n.id = l.${P.TARGET_NODE_ID}
39
+ WHERE l.${P.SOURCE_NODE_ID} = ?`).all(e)}catch(r){throw E.wrap(A.DB_QUERY_FAILED,ct.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
40
+ FROM ${w.NODE_LINKS} l
41
+ JOIN ${w.L2_NODES} n ON n.id = l.${P.SOURCE_NODE_ID}
42
+ WHERE l.${P.TARGET_NODE_ID} = ?`).all(e)}catch(r){throw E.wrap(A.DB_QUERY_FAILED,ct.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
43
+ FROM ${w.NODE_LINKS} l
44
+ JOIN ${w.L2_NODES} n ON n.id = l.${P.TARGET_NODE_ID}
45
+ WHERE l.${P.SOURCE_NODE_ID} = ?`).all(e)}catch(r){throw E.wrap(A.DB_QUERY_FAILED,ct.OUTGOING_RELATIONS_FAILED(e),r)}}getAllNodes(){try{return this.db.prepare(`SELECT * FROM ${w.L2_NODES}`).all()}catch(e){throw E.wrap(A.DB_QUERY_FAILED,ct.ALL_NODES_FAILED,e)}}getAllLinks(){try{return this.db.prepare(`SELECT * FROM ${w.NODE_LINKS}`).all()}catch(e){throw E.wrap(A.DB_QUERY_FAILED,ct.ALL_LINKS_FAILED,e)}}withFtsSyncSuspended(e){this.db.exec(pg);let r=e();return this.db.exec(`INSERT INTO ${w.L2_NODES_FTS}(${w.L2_NODES_FTS}) VALUES('rebuild')`),this.db.exec(gg),r}bulkLoadGraph(e){try{return this.db.transaction(()=>{this.db.exec(pg),this.db.exec(`DELETE FROM ${w.NODE_LINKS}`),this.db.exec(`DELETE FROM ${w.L2_NODE_L1_TAGS}`),this.db.exec(`DELETE FROM ${w.L2_NODES}`);let n=this.db.prepare(`INSERT INTO ${w.L2_NODES} (${P.PROJECT_ID}, name, type, description, ${P.PATH_PATTERNS}, ${P.NODE_KEY})
46
+ VALUES (?, ?, ?, '', ?, ?)`),i=new Map;for(let l of e.nodes){let c=n.run(e.projectId,l.name,Rr.MODULE,JSON.stringify(l.filePath?[l.filePath]:[]),l.nodeKey);i.set(l.nodeKey,Number(c.lastInsertRowid))}let s=this.db.prepare(`INSERT INTO ${w.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 ${w.L2_NODES_FTS}(${w.L2_NODES_FTS}) VALUES('rebuild')`),this.db.exec(gg),{nodesLoaded:e.nodes.length,edgesLoaded:o,edgesDropped:a}})()}catch(r){throw E.wrap(A.DB_QUERY_FAILED,ct.BULK_LOAD_FAILED,r)}}pruneOrphanedLinks(){try{return this.db.prepare(`DELETE FROM ${w.NODE_LINKS}
47
+ WHERE ${P.SOURCE_NODE_ID} NOT IN (SELECT id FROM ${w.L2_NODES})
48
+ OR ${P.TARGET_NODE_ID} NOT IN (SELECT id FROM ${w.L2_NODES})`).run().changes}catch(e){throw E.wrap(A.DB_QUERY_FAILED,ct.PRUNE_ORPHANED_LINKS_FAILED,e)}}},pg=`
49
49
  DROP TRIGGER IF EXISTS ${Bn.L2_NODES_FTS_AFTER_INSERT};
50
50
  DROP TRIGGER IF EXISTS ${Bn.L2_NODES_FTS_AFTER_DELETE};
51
51
  DROP TRIGGER IF EXISTS ${Bn.L2_NODES_FTS_AFTER_UPDATE};
52
52
  `,gg=`
53
- CREATE TRIGGER IF NOT EXISTS ${Bn.L2_NODES_FTS_AFTER_INSERT} AFTER INSERT ON ${b.L2_NODES} BEGIN
54
- INSERT INTO ${b.L2_NODES_FTS}(rowid, name, description, ${P.PATH_PATTERNS})
53
+ CREATE TRIGGER IF NOT EXISTS ${Bn.L2_NODES_FTS_AFTER_INSERT} AFTER INSERT ON ${w.L2_NODES} BEGIN
54
+ INSERT INTO ${w.L2_NODES_FTS}(rowid, name, description, ${P.PATH_PATTERNS})
55
55
  VALUES (new.id, new.name, new.description, new.${P.PATH_PATTERNS});
56
56
  END;
57
- CREATE TRIGGER IF NOT EXISTS ${Bn.L2_NODES_FTS_AFTER_DELETE} AFTER DELETE ON ${b.L2_NODES} BEGIN
58
- INSERT INTO ${b.L2_NODES_FTS}(${b.L2_NODES_FTS}, rowid, name, description, ${P.PATH_PATTERNS})
57
+ CREATE TRIGGER IF NOT EXISTS ${Bn.L2_NODES_FTS_AFTER_DELETE} AFTER DELETE ON ${w.L2_NODES} BEGIN
58
+ INSERT INTO ${w.L2_NODES_FTS}(${w.L2_NODES_FTS}, rowid, name, description, ${P.PATH_PATTERNS})
59
59
  VALUES ('delete', old.id, old.name, old.description, old.${P.PATH_PATTERNS});
60
60
  END;
61
- CREATE TRIGGER IF NOT EXISTS ${Bn.L2_NODES_FTS_AFTER_UPDATE} AFTER UPDATE ON ${b.L2_NODES} BEGIN
62
- INSERT INTO ${b.L2_NODES_FTS}(${b.L2_NODES_FTS}, rowid, name, description, ${P.PATH_PATTERNS})
61
+ CREATE TRIGGER IF NOT EXISTS ${Bn.L2_NODES_FTS_AFTER_UPDATE} AFTER UPDATE ON ${w.L2_NODES} BEGIN
62
+ INSERT INTO ${w.L2_NODES_FTS}(${w.L2_NODES_FTS}, rowid, name, description, ${P.PATH_PATTERNS})
63
63
  VALUES ('delete', old.id, old.name, old.description, old.${P.PATH_PATTERNS});
64
- INSERT INTO ${b.L2_NODES_FTS}(rowid, name, description, ${P.PATH_PATTERNS})
64
+ INSERT INTO ${w.L2_NODES_FTS}(rowid, name, description, ${P.PATH_PATTERNS})
65
65
  VALUES (new.id, new.name, new.description, new.${P.PATH_PATTERNS});
66
66
  END;
67
67
  `;import YR from"crypto";var Kn={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}`},WR="git-import";function jR(t,e,r){return YR.createHash(Jt).update(`${t}
68
68
  ${e}
69
- ${r}`).digest("hex")}var Gi=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(y.DB_QUERY_FAILED,Kn.GET_BY_ID_FAILED(e),r)}}getAllExportable(){try{return this.db.prepare(`SELECT * FROM ${b.L3_NODES} WHERE validity_status != '${sr.GARBAGE}'`).all()}catch(e){throw E.wrap(y.DB_QUERY_FAILED,Kn.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(y.DB_QUERY_FAILED,Kn.GET_BY_L2_NODE_ID_FAILED(e),r)}}upsertDecision(e){try{let r=jR(e.nodeType,e.title,e.content);return this.db.transaction(()=>{let i=this.db.prepare(`SELECT l3.* FROM ${b.L3_NODES} l3
70
- JOIN ${b.L2_NODES} l2 ON l2.id = l3.${P.L2_NODE_ID}
69
+ ${r}`).digest("hex")}var Gi=class{constructor(e){this.db=e}db;getById(e){try{return this.db.prepare(`SELECT * FROM ${w.L3_NODES} WHERE id = ?`).get(e)}catch(r){throw E.wrap(A.DB_QUERY_FAILED,Kn.GET_BY_ID_FAILED(e),r)}}getAllExportable(){try{return this.db.prepare(`SELECT * FROM ${w.L3_NODES} WHERE validity_status != '${sr.GARBAGE}'`).all()}catch(e){throw E.wrap(A.DB_QUERY_FAILED,Kn.GET_ALL_EXPORTABLE_FAILED,e)}}getByL2NodeId(e){try{return this.db.prepare(`SELECT * FROM ${w.L3_NODES} WHERE ${P.L2_NODE_ID} = ?`).all(e)}catch(r){throw E.wrap(A.DB_QUERY_FAILED,Kn.GET_BY_L2_NODE_ID_FAILED(e),r)}}upsertDecision(e){try{let r=jR(e.nodeType,e.title,e.content);return this.db.transaction(()=>{let i=this.db.prepare(`SELECT l3.* FROM ${w.L3_NODES} l3
70
+ JOIN ${w.L2_NODES} l2 ON l2.id = l3.${P.L2_NODE_ID}
71
71
  WHERE l2.${P.PROJECT_ID} = ? AND l3.${P.CONTENT_HASH} = ?
72
- 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}
72
+ 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 ${w.L3_NODES}
73
73
  SET occurrence_count = occurrence_count + 1,
74
74
  last_verified_at = CURRENT_TIMESTAMP,
75
75
  source_commits = ?
76
- WHERE id = ?`).run(JSON.stringify(l),i.id),this.db.prepare(`INSERT INTO ${b.DOCUVIA_META} (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value`).run("tierCProcessedThisRun","true"),{id:i.id,deduped:!0}}let s=JSON.stringify(e.commitSha?[e.commitSha]:[]),o=e.anchorRanges&&e.anchorRanges.length>0?JSON.stringify(e.anchorRanges):null,a=this.db.prepare(`INSERT INTO ${b.L3_NODES}
76
+ WHERE id = ?`).run(JSON.stringify(l),i.id),this.db.prepare(`INSERT INTO ${w.DOCUVIA_META} (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value`).run("tierCProcessedThisRun","true"),{id:i.id,deduped:!0}}let s=JSON.stringify(e.commitSha?[e.commitSha]:[]),o=e.anchorRanges&&e.anchorRanges.length>0?JSON.stringify(e.anchorRanges):null,a=this.db.prepare(`INSERT INTO ${w.L3_NODES}
77
77
  (${P.L2_NODE_ID}, title, content, node_type, source_commits,
78
78
  initial_source_commits, commit_hash, ai_generated, confidence, source,
79
79
  ${P.CONTENT_HASH}, extraction_model, source_files, anchor_ranges)
80
- VALUES (?, ?, ?, ?, ?, ?, ?, 1, ?, ?, ?, ?, ?, ?)`).run(e.l2NodeId,e.title,e.content,e.nodeType,s,s,e.commitSha,e.confidence,e.source??Ft.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}})()}catch(r){throw E.wrap(y.DB_QUERY_FAILED,Kn.UPSERT_DECISION_FAILED,r)}}importCard(e){try{return this.db.transaction(()=>{let n=this.db.prepare(`SELECT l3.* FROM ${b.L3_NODES} l3
81
- JOIN ${b.L2_NODES} l2 ON l2.id = l3.${P.L2_NODE_ID}
80
+ VALUES (?, ?, ?, ?, ?, ?, ?, 1, ?, ?, ?, ?, ?, ?)`).run(e.l2NodeId,e.title,e.content,e.nodeType,s,s,e.commitSha,e.confidence,e.source??Ft.ANALYZE,r,e.extractionModel,JSON.stringify(e.sourceFiles),o);return this.db.prepare(`INSERT INTO ${w.DOCUVIA_META} (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value`).run("tierCProcessedThisRun","true"),{id:Number(a.lastInsertRowid),deduped:!1}})()}catch(r){throw E.wrap(A.DB_QUERY_FAILED,Kn.UPSERT_DECISION_FAILED,r)}}importCard(e){try{return this.db.transaction(()=>{let n=this.db.prepare(`SELECT l3.* FROM ${w.L3_NODES} l3
81
+ JOIN ${w.L2_NODES} l2 ON l2.id = l3.${P.L2_NODE_ID}
82
82
  WHERE l2.${P.PROJECT_ID} = (
83
- SELECT ${P.PROJECT_ID} FROM ${b.L2_NODES} WHERE id = ?
83
+ SELECT ${P.PROJECT_ID} FROM ${w.L2_NODES} WHERE id = ?
84
84
  ) AND l3.${P.CONTENT_HASH} = ?
85
- LIMIT 1`).get(e.l2NodeId,e.contentHash);if(n)return{id:n.id,imported:!1};let i=JSON.stringify(e.sourceCommits),s=this.db.prepare(`INSERT INTO ${b.L3_NODES}
85
+ LIMIT 1`).get(e.l2NodeId,e.contentHash);if(n)return{id:n.id,imported:!1};let i=JSON.stringify(e.sourceCommits),s=this.db.prepare(`INSERT INTO ${w.L3_NODES}
86
86
  (${P.L2_NODE_ID}, title, content, node_type, source_commits,
87
87
  initial_source_commits, ai_generated, source, ${P.CONTENT_HASH},
88
88
  extraction_model, source_files, created_at)
89
- VALUES (?, ?, ?, ?, ?, ?, 1, '${WR}', ?, ?, ?, ?)`).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}})()}catch(r){throw E.wrap(y.DB_QUERY_FAILED,Kn.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(y.DB_QUERY_FAILED,Kn.UPDATE_VALIDITY_STATUS_FAILED(e),n)}}};var fg={SEARCH_L2_FAILED:"Failed to search l2 nodes via FTS",SEARCH_L3_FAILED:"Failed to search l3 nodes via FTS"},xi=class{constructor(e){this.db=e}db;searchL2Nodes(e,r){try{let n=Gs(e,"AND");if(n){let s=this.runL2Match(n,r);if(s.length>0)return s}let i=Gs(e,"OR");return i?this.runL2Match(i,r):[]}catch(n){throw E.wrap(y.DB_QUERY_FAILED,fg.SEARCH_L2_FAILED,n)}}searchL3Nodes(e,r){try{let n=Gs(e,"AND");if(n){let s=this.runL3Match(n,r);if(s.length>0)return s}let i=Gs(e,"OR");return i?this.runL3Match(i,r):[]}catch(n){throw E.wrap(y.DB_QUERY_FAILED,fg.SEARCH_L3_FAILED,n)}}runL2Match(e,r){return this.db.prepare(`SELECT n.*
90
- FROM ${b.L2_NODES_FTS} f
91
- JOIN ${b.L2_NODES} n ON n.id = f.rowid
92
- WHERE ${b.L2_NODES_FTS} MATCH ?
89
+ VALUES (?, ?, ?, ?, ?, ?, 1, '${WR}', ?, ?, ?, ?)`).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 ${w.DOCUVIA_META} (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value`).run("tierCProcessedThisRun","true"),{id:Number(s.lastInsertRowid),imported:!0}})()}catch(r){throw E.wrap(A.DB_QUERY_FAILED,Kn.IMPORT_CARD_FAILED,r)}}updateValidityStatus(e,r){try{this.db.prepare(`UPDATE ${w.L3_NODES} SET validity_status = ? WHERE id = ? AND validity_status != ?`).run(r,e,r)}catch(n){throw E.wrap(A.DB_QUERY_FAILED,Kn.UPDATE_VALIDITY_STATUS_FAILED(e),n)}}};var fg={SEARCH_L2_FAILED:"Failed to search l2 nodes via FTS",SEARCH_L3_FAILED:"Failed to search l3 nodes via FTS"},xi=class{constructor(e){this.db=e}db;searchL2Nodes(e,r){try{let n=Gs(e,"AND");if(n){let s=this.runL2Match(n,r);if(s.length>0)return s}let i=Gs(e,"OR");return i?this.runL2Match(i,r):[]}catch(n){throw E.wrap(A.DB_QUERY_FAILED,fg.SEARCH_L2_FAILED,n)}}searchL3Nodes(e,r){try{let n=Gs(e,"AND");if(n){let s=this.runL3Match(n,r);if(s.length>0)return s}let i=Gs(e,"OR");return i?this.runL3Match(i,r):[]}catch(n){throw E.wrap(A.DB_QUERY_FAILED,fg.SEARCH_L3_FAILED,n)}}runL2Match(e,r){return this.db.prepare(`SELECT n.*
90
+ FROM ${w.L2_NODES_FTS} f
91
+ JOIN ${w.L2_NODES} n ON n.id = f.rowid
92
+ WHERE ${w.L2_NODES_FTS} MATCH ?
93
93
  ORDER BY rank
94
94
  LIMIT ?`).all(e,r)}runL3Match(e,r){return this.db.prepare(`SELECT n.*
95
- FROM ${b.L3_NODES_FTS} f
96
- JOIN ${b.L3_NODES} n ON n.id = f.rowid
97
- WHERE ${b.L3_NODES_FTS} MATCH ?
95
+ FROM ${w.L3_NODES_FTS} f
96
+ JOIN ${w.L3_NODES} n ON n.id = f.rowid
97
+ WHERE ${w.L3_NODES_FTS} MATCH ?
98
98
  ORDER BY rank
99
- LIMIT ?`).all(e,r)}};function Gs(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 hg={READ_FAILED:t=>`Failed to read meta key "${t}"`,WRITE_FAILED:t=>`Failed to write meta key "${t}"`},xs=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(y.DB_QUERY_FAILED,hg.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(y.DB_QUERY_FAILED,hg.WRITE_FAILED(e),n)}}};var Ui=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})
99
+ LIMIT ?`).all(e,r)}};function Gs(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 hg={READ_FAILED:t=>`Failed to read meta key "${t}"`,WRITE_FAILED:t=>`Failed to write meta key "${t}"`},xs=class{constructor(e){this.db=e}db;get(e){try{return this.db.prepare(`SELECT value FROM ${w.DOCUVIA_META} WHERE key = ?`).get(e)?.value}catch(r){throw E.wrap(A.DB_QUERY_FAILED,hg.READ_FAILED(e),r)}}set(e,r){try{this.db.prepare(`INSERT INTO ${w.DOCUVIA_META} (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value`).run(e,r)}catch(n){throw E.wrap(A.DB_QUERY_FAILED,hg.WRITE_FAILED(e),n)}}};var Ui=class{constructor(e){this.db=e}db;deleteForFile(e,r){this.db.prepare(`DELETE FROM ${w.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 ${w.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})
100
100
  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}
101
- FROM ${b.AST_CALL_SITES}
101
+ FROM ${w.AST_CALL_SITES}
102
102
  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}
103
- FROM ${b.AST_CALL_SITES}
104
- 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 zR=1e4,JR=100,qR=6e4,QR=".init-lock",Dr={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 XR(t){if(!(!(t instanceof Error)||!("code"in t)))return t.code}function ZR(t){if(typeof t!="string"||t.length===0||t.includes("\0"))throw new E(y.INVALID_INPUT,Dr.INVALID_DB_PATH)}async function eA(t){let e=`${t}${QR}`,r=Date.now()+zR;for(;;)try{return await(await Us.open(e,"wx")).close(),e}catch(n){let i=XR(n);if(i!==vn&&i!==rn&&i!==wn&&i!==bn)throw E.wrap(y.DB_LOCKED,Dr.INIT_LOCK_ACQUIRE_FAILED,n);let s=await Us.stat(e).catch(()=>{});if(s&&Date.now()-s.mtimeMs>qR){await Us.rm(e,{force:!0});continue}if(Date.now()>r)throw new E(y.DB_LOCKED,Dr.INIT_LOCK_TIMED_OUT(e));await new Promise(o=>setTimeout(o,JR))}}async function tA(t){await Us.rm(t,{force:!0})}var Hi=class t{constructor(e){this.db=e;this.projectsRepo=new bi(e),this.filesRepo=new Fi(e),this.tagsRepo=new Mi(e),this.graphRepo=new ki(e),this.l3Repo=new Gi(e),this.ftsRepo=new xi(e),this.metaRepo=new xs(e),this.callSitesRepo=new Ui(e)}db;lock=new ks;projectsRepo;filesRepo;tagsRepo;graphRepo;l3Repo;ftsRepo;metaRepo;callSitesRepo;static async open(e){if(ZR(e.dbPath),mg.mkdirSync(VR.dirname(e.dbPath),{recursive:!0}),e.readonly&&!mg.existsSync(e.dbPath))throw new E(y.DB_NOT_FOUND,Dr.NOT_FOUND(e.dbPath));let r=e.readonly?void 0:await eA(e.dbPath).catch(n=>{throw E.wrap(y.DB_OPEN_FAILED,Dr.OPEN_FAILED(e.dbPath),n)});try{let n=e.readonly?new _g(e.dbPath,{readonly:!0,fileMustExist:!0}):new _g(e.dbPath);if(n.pragma(`${Hn.BUSY_TIMEOUT} = ${cn.BUSY_TIMEOUT_MS}`),!e.readonly){n.pragma(`${Hn.JOURNAL_MODE} = ${cn.JOURNAL_MODE}`),n.pragma(`${Hn.SYNCHRONOUS} = ${cn.SYNCHRONOUS}`);try{Kl(n,$l)}catch(i){throw new E(y.DB_MIGRATION_FAILED,Dr.MIGRATIONS_FAILED,i)}}return new t(n)}catch(n){throw E.wrap(y.DB_OPEN_FAILED,Dr.OPEN_FAILED(e.dbPath),n)}finally{r&&await tA(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)()}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(y.DB_QUERY_FAILED,Dr.PRUNE_MISSING_FILES_FAILED,r)}}};import rA from"fs/promises";import nA from"better-sqlite3";var un={CONNECTION:"sqlite_connection",INTEGRITY:"sqlite_integrity",WAL_BLOAT:"sqlite_wal_bloat",ABI_MISMATCH:"sqlite_abi_mismatch"},iA="NODE_MODULE_VERSION",Eg="ok",ut={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."},sA=100*1024*1024,Hs=class{async checkHealth(e){let r={},n;try{n=new nA(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(iA);n&&(e[un.ABI_MISMATCH]={status:K.FAIL,message:ut.ABI_MISMATCH,details:r,suggestion:ut.ABI_MISMATCH_SUGGESTION}),e[un.CONNECTION]={status:K.FAIL,message:ut.CONNECTION_FAILED,details:r,suggestion:n?ut.ABI_MISMATCH_SUGGESTION:ut.CONNECTION_SUGGESTION}}async runHealthChecks(e,r,n){try{let i=e.pragma(Hn.INTEGRITY_CHECK,{simple:!0});i===Eg||Array.isArray(i)&&i[0]?.integrity_check===Eg?n[un.INTEGRITY]={status:K.PASS,message:ut.INTEGRITY_PASSED}:n[un.INTEGRITY]={status:K.FAIL,message:ut.INTEGRITY_FAILED,details:JSON.stringify(i),suggestion:ut.CORRUPTION_SUGGESTION}}catch(i){n[un.INTEGRITY]={status:K.FAIL,message:ut.INTEGRITY_CHECK_ERRORED,details:String(i),suggestion:ut.CORRUPTION_SUGGESTION}}try{let i=r+cn.WAL_FILE_SUFFIX,s=await rA.stat(i).catch(()=>null);s&&s.size>sA?n[un.WAL_BLOAT]={status:K.FAIL,message:ut.WAL_TOO_LARGE,details:ut.WAL_SIZE_DETAILS((s.size/1024/1024).toFixed(2)),suggestion:ut.WAL_BLOAT_SUGGESTION}:n[un.WAL_BLOAT]={status:K.PASS,message:ut.WAL_SIZE_NORMAL}}catch{}}};A.register(T.GraphStoreOpener,()=>Hi.open);A.register(T.DiagnosticRunnerDb,()=>new Hs);import Sg from"fs/promises";import oA from"os";import aA 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)}]
103
+ FROM ${w.AST_CALL_SITES}
104
+ 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 zR=1e4,JR=100,qR=6e4,QR=".init-lock",Dr={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 XR(t){if(!(!(t instanceof Error)||!("code"in t)))return t.code}function ZR(t){if(typeof t!="string"||t.length===0||t.includes("\0"))throw new E(A.INVALID_INPUT,Dr.INVALID_DB_PATH)}async function eA(t){let e=`${t}${QR}`,r=Date.now()+zR;for(;;)try{return await(await Us.open(e,"wx")).close(),e}catch(n){let i=XR(n);if(i!==vn&&i!==rn&&i!==bn&&i!==wn)throw E.wrap(A.DB_LOCKED,Dr.INIT_LOCK_ACQUIRE_FAILED,n);let s=await Us.stat(e).catch(()=>{});if(s&&Date.now()-s.mtimeMs>qR){await Us.rm(e,{force:!0});continue}if(Date.now()>r)throw new E(A.DB_LOCKED,Dr.INIT_LOCK_TIMED_OUT(e));await new Promise(o=>setTimeout(o,JR))}}async function tA(t){await Us.rm(t,{force:!0})}var Hi=class t{constructor(e){this.db=e;this.projectsRepo=new wi(e),this.filesRepo=new Fi(e),this.tagsRepo=new Mi(e),this.graphRepo=new ki(e),this.l3Repo=new Gi(e),this.ftsRepo=new xi(e),this.metaRepo=new xs(e),this.callSitesRepo=new Ui(e)}db;lock=new ks;projectsRepo;filesRepo;tagsRepo;graphRepo;l3Repo;ftsRepo;metaRepo;callSitesRepo;static async open(e){if(ZR(e.dbPath),mg.mkdirSync(VR.dirname(e.dbPath),{recursive:!0}),e.readonly&&!mg.existsSync(e.dbPath))throw new E(A.DB_NOT_FOUND,Dr.NOT_FOUND(e.dbPath));let r=e.readonly?void 0:await eA(e.dbPath).catch(n=>{throw E.wrap(A.DB_OPEN_FAILED,Dr.OPEN_FAILED(e.dbPath),n)});try{let n=e.readonly?new _g(e.dbPath,{readonly:!0,fileMustExist:!0}):new _g(e.dbPath);if(n.pragma(`${Hn.BUSY_TIMEOUT} = ${cn.BUSY_TIMEOUT_MS}`),!e.readonly){n.pragma(`${Hn.JOURNAL_MODE} = ${cn.JOURNAL_MODE}`),n.pragma(`${Hn.SYNCHRONOUS} = ${cn.SYNCHRONOUS}`);try{Kl(n,$l)}catch(i){throw new E(A.DB_MIGRATION_FAILED,Dr.MIGRATIONS_FAILED,i)}}return new t(n)}catch(n){throw E.wrap(A.DB_OPEN_FAILED,Dr.OPEN_FAILED(e.dbPath),n)}finally{r&&await tA(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)()}pruneMissingFiles(e){try{let r=new Set(e),n=this.db.prepare(`SELECT id, ${P.PATH_PATTERNS} FROM ${w.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 ${w.L2_NODE_L1_TAGS} WHERE ${P.L2_NODE_ID} IN (${c})`).run(...o),this.db.prepare(`DELETE FROM ${w.NODE_LINKS} WHERE ${P.SOURCE_NODE_ID} IN (${c}) OR ${P.TARGET_NODE_ID} IN (${c})`).run(...o,...o),this.db.prepare(`DELETE FROM ${w.L2_NODES} WHERE id IN (${c})`).run(...o)}let l=this.db.prepare(`SELECT ${P.FILE_PATH} FROM ${w.PROJECT_FILES}`).all().filter(c=>!r.has(c.file_path));for(let{file_path:c}of l)this.db.prepare(`DELETE FROM ${w.PROJECT_FILES} WHERE ${P.FILE_PATH} = ?`).run(c);return l.length})(n),prunedNodes:n.length}}catch(r){throw E.wrap(A.DB_QUERY_FAILED,Dr.PRUNE_MISSING_FILES_FAILED,r)}}};import rA from"fs/promises";import nA from"better-sqlite3";var un={CONNECTION:"sqlite_connection",INTEGRITY:"sqlite_integrity",WAL_BLOAT:"sqlite_wal_bloat",ABI_MISMATCH:"sqlite_abi_mismatch"},iA="NODE_MODULE_VERSION",Eg="ok",ut={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."},sA=100*1024*1024,Hs=class{async checkHealth(e){let r={},n;try{n=new nA(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(iA);n&&(e[un.ABI_MISMATCH]={status:K.FAIL,message:ut.ABI_MISMATCH,details:r,suggestion:ut.ABI_MISMATCH_SUGGESTION}),e[un.CONNECTION]={status:K.FAIL,message:ut.CONNECTION_FAILED,details:r,suggestion:n?ut.ABI_MISMATCH_SUGGESTION:ut.CONNECTION_SUGGESTION}}async runHealthChecks(e,r,n){try{let i=e.pragma(Hn.INTEGRITY_CHECK,{simple:!0});i===Eg||Array.isArray(i)&&i[0]?.integrity_check===Eg?n[un.INTEGRITY]={status:K.PASS,message:ut.INTEGRITY_PASSED}:n[un.INTEGRITY]={status:K.FAIL,message:ut.INTEGRITY_FAILED,details:JSON.stringify(i),suggestion:ut.CORRUPTION_SUGGESTION}}catch(i){n[un.INTEGRITY]={status:K.FAIL,message:ut.INTEGRITY_CHECK_ERRORED,details:String(i),suggestion:ut.CORRUPTION_SUGGESTION}}try{let i=r+cn.WAL_FILE_SUFFIX,s=await rA.stat(i).catch(()=>null);s&&s.size>sA?n[un.WAL_BLOAT]={status:K.FAIL,message:ut.WAL_TOO_LARGE,details:ut.WAL_SIZE_DETAILS((s.size/1024/1024).toFixed(2)),suggestion:ut.WAL_BLOAT_SUGGESTION}:n[un.WAL_BLOAT]={status:K.PASS,message:ut.WAL_SIZE_NORMAL}}catch{}}};O.register(T.GraphStoreOpener,()=>Hi.open);O.register(T.DiagnosticRunnerDb,()=>new Hs);import Sg from"fs/promises";import oA from"os";import aA 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)}]
105
105
 
106
106
  ${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)=>`---
107
107
  id: ${t}
@@ -115,27 +115,27 @@ Path: \`${e??t}\`
115
115
  `,markdownSymbolBody:(t,e)=>`# Symbol: ${t}
116
116
 
117
117
  File: \`${e??""}\`
118
- `};async function qt(t,e,r){await t.acquireKnowledgeLock(e);try{return await r()}finally{await t.releaseKnowledgeLock(e)}}function lA(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var cA=new RegExp(`(?:^#!.*\\n)?${lA(S.DOCUVIA_HOOK_HEADER_COMMENT)}[\\s\\S]*?^fi$\\n?`,"gm"),Bs=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}):qt(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 Sg.mkdtemp(aA.join(oA.tmpdir(),S.EMPTY_KNOWLEDGE_TEMP_DIR_PREFIX));try{await this.packSnapshotToKnowledgeBranchLocked(e,n,r)}finally{await Sg.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}):qt(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}):qt(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)?qt(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)?qt(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 qt(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(cA,"")+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 qt(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 qt(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]?lr(i[0].message):void 0,a=s[0]?lr(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=lr(i.message);if(s)return s}}async hasSourceCommitInHistory(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(lr(s.message)===r)return!0;return!1}async runUnderKnowledgeLock(e,r){return qt(this.git,e,r)}async buildSnapshotCommitMessage(e){let r=await this.git.getHeadSha(e);return r?j.snapshotCommitMessage(r):j.SNAPSHOT_UNKNOWN}};import vr from"fs/promises";import Et from"path";import EA from"os";var Tg=".md",uA=/[<>:"/\\|?*\x00-\x1f\s]/g,dA=".",pA="..",gA=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"]),Rg="_";function yg(t){let e=t.replace(uA,"_");e.length>100&&(e=e.slice(0,100));let r=e.indexOf("."),n=r===-1?e:e.slice(0,r);return gA.has(n.toLowerCase())?r===-1?`${n}${Rg}`:`${n}${Rg}${e.slice(r)}`:e}function fA(t){return t.split(/[\\/]+/).filter(e=>e.length>0&&e!==dA&&e!==pA).map(yg).join("/")}function hA(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 Og(t,e){if(!t.filePath)return;let r=fA(t.filePath);if(!e)return`${S.KNOWLEDGE_DIR_NAME}/${r}${Tg}`;let{dir:n,base:i}=hA(r),s=yg(t.name),o=n?`${n}/${i}`:i;return`${S.KNOWLEDGE_DIR_NAME}/${o}/${s}${Tg}`}function mA(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 Ig(t,e){let r=new Map;for(let s of t)r.set(s.id,mA(s.path_patterns));let n=new Map;for(let s of e)s.link_type===me.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=Og({name:s.name,filePath:a},o!==void 0);l&&i.set(s.id,l)}return i}function Lg(t,e){let r=new Map;for(let i of e)i.type===me.CONTAINS&&r.set(i.target,i.source);let n=new Map;for(let i of t){let s=r.has(i.nodeKey),o=Og({name:i.name,filePath:i.filePath},s);o&&n.set(i.nodeKey,o)}return n}function Ag(t){if(!t)return[];try{let e=JSON.parse(t);return Array.isArray(e)?e.map(String):[]}catch{return[]}}function Cg(t,e){let r={content_hash:t.content_hash??"",node_type:t.node_type,title:t.title,l2_path:e,source_commits:Ag(t.initial_source_commits??t.source_commits),extraction_model:t.extraction_model,source_files:Ag(t.source_files),created_at:t.created_at},n=t.content??"";return`---
118
+ `};async function qt(t,e,r){await t.acquireKnowledgeLock(e);try{return await r()}finally{await t.releaseKnowledgeLock(e)}}function lA(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var cA=new RegExp(`(?:^#!.*\\n)?${lA(S.DOCUVIA_HOOK_HEADER_COMMENT)}[\\s\\S]*?^fi$\\n?`,"gm"),Bs=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}):qt(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 Sg.mkdtemp(aA.join(oA.tmpdir(),S.EMPTY_KNOWLEDGE_TEMP_DIR_PREFIX));try{await this.packSnapshotToKnowledgeBranchLocked(e,n,r)}finally{await Sg.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}):qt(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}):qt(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)?qt(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)?qt(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 qt(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(cA,"")+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 qt(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 qt(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]?lr(i[0].message):void 0,a=s[0]?lr(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=lr(i.message);if(s)return s}}async hasSourceCommitInHistory(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(lr(s.message)===r)return!0;return!1}async runUnderKnowledgeLock(e,r){return qt(this.git,e,r)}async buildSnapshotCommitMessage(e){let r=await this.git.getHeadSha(e);return r?j.snapshotCommitMessage(r):j.SNAPSHOT_UNKNOWN}};import vr from"fs/promises";import Et from"path";import EA from"os";var Tg=".md",uA=/[<>:"/\\|?*\x00-\x1f\s]/g,dA=".",pA="..",gA=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"]),Rg="_";function Og(t){let e=t.replace(uA,"_");e.length>100&&(e=e.slice(0,100));let r=e.indexOf("."),n=r===-1?e:e.slice(0,r);return gA.has(n.toLowerCase())?r===-1?`${n}${Rg}`:`${n}${Rg}${e.slice(r)}`:e}function fA(t){return t.split(/[\\/]+/).filter(e=>e.length>0&&e!==dA&&e!==pA).map(Og).join("/")}function hA(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 yg(t,e){if(!t.filePath)return;let r=fA(t.filePath);if(!e)return`${S.KNOWLEDGE_DIR_NAME}/${r}${Tg}`;let{dir:n,base:i}=hA(r),s=Og(t.name),o=n?`${n}/${i}`:i;return`${S.KNOWLEDGE_DIR_NAME}/${o}/${s}${Tg}`}function mA(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 Ig(t,e){let r=new Map;for(let s of t)r.set(s.id,mA(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=yg({name:s.name,filePath:a},o!==void 0);l&&i.set(s.id,l)}return i}function Lg(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=yg({name:i.name,filePath:i.filePath},s);o&&n.set(i.nodeKey,o)}return n}function Ag(t){if(!t)return[];try{let e=JSON.parse(t);return Array.isArray(e)?e.map(String):[]}catch{return[]}}function Cg(t,e){let r={content_hash:t.content_hash??"",node_type:t.node_type,title:t.title,l2_path:e,source_commits:Ag(t.initial_source_commits??t.source_commits),extraction_model:t.extraction_model,source_files:Ag(t.source_files),created_at:t.created_at},n=t.content??"";return`---
119
119
  ${JSON.stringify(r,null,2)}
120
120
  ---
121
121
 
122
122
  ${n}
123
123
  `}var _A=/^---\n([\s\S]*?)\n---\n\n?([\s\S]*)$/;function Ng(t){let e=_A.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(`
124
- `)?e[2].slice(0,-1):e[2];return{...r,content:n}}catch{return}}function Ot(t){return`l2:${t}`}function Yl(t){return`l3:${t}`}var SA=EA.cpus().length*4,Ks=class{async render(e){let{outDir:r,l2Rows:n,linkRows:i,l3Rows:s}=e,o=Et.join(r,S.GRAPH_DIR_NAME),a=Et.join(r,S.KNOWLEDGE_DIR_NAME);await vr.mkdir(o,{recursive:!0}),await vr.mkdir(a,{recursive:!0});let l=new Map;for(let L of n)l.set(L.id,IA(L.path_patterns));let c=new Map;for(let L of i)L.link_type===me.CONTAINS&&c.set(L.target_node_id,L.source_node_id);let u=new Map;for(let L of n)u.set(L.id,L.node_key??Ot(L.id));let p=n.map(L=>{let w=c.get(L.id);return{id:u.get(L.id),kind:w!==void 0?Mt.SYMBOL:Mt.FILE,name:L.name,type:L.type,filePath:w!==void 0?l.get(w):l.get(L.id)}}).sort((L,w)=>L.id.localeCompare(w.id)),d=p.map(L=>JSON.stringify({id:L.id,type:L.kind,name:L.name,filePath:L.filePath})),m=i.map(L=>({source:u.get(L.source_node_id)??Ot(L.source_node_id),target:u.get(L.target_node_id)??Ot(L.target_node_id),type:L.link_type})).sort((L,w)=>L.source.localeCompare(w.source)||L.target.localeCompare(w.target)||L.type.localeCompare(w.type)).map(L=>JSON.stringify(L));d.length>0&&await vr.writeFile(Et.join(o,S.NODES_JSONL_NAME),d.join(`
124
+ `)?e[2].slice(0,-1):e[2];return{...r,content:n}}catch{return}}function yt(t){return`l2:${t}`}function Yl(t){return`l3:${t}`}var SA=EA.cpus().length*4,Ks=class{async render(e){let{outDir:r,l2Rows:n,linkRows:i,l3Rows:s}=e,o=Et.join(r,S.GRAPH_DIR_NAME),a=Et.join(r,S.KNOWLEDGE_DIR_NAME);await vr.mkdir(o,{recursive:!0}),await vr.mkdir(a,{recursive:!0});let l=new Map;for(let L of n)l.set(L.id,IA(L.path_patterns));let c=new Map;for(let L of i)L.link_type===de.CONTAINS&&c.set(L.target_node_id,L.source_node_id);let u=new Map;for(let L of n)u.set(L.id,L.node_key??yt(L.id));let p=n.map(L=>{let b=c.get(L.id);return{id:u.get(L.id),kind:b!==void 0?Mt.SYMBOL:Mt.FILE,name:L.name,type:L.type,filePath:b!==void 0?l.get(b):l.get(L.id)}}).sort((L,b)=>L.id.localeCompare(b.id)),d=p.map(L=>JSON.stringify({id:L.id,type:L.kind,name:L.name,filePath:L.filePath})),m=i.map(L=>({source:u.get(L.source_node_id)??yt(L.source_node_id),target:u.get(L.target_node_id)??yt(L.target_node_id),type:L.link_type})).sort((L,b)=>L.source.localeCompare(b.source)||L.target.localeCompare(b.target)||L.type.localeCompare(b.type)).map(L=>JSON.stringify(L));d.length>0&&await vr.writeFile(Et.join(o,S.NODES_JSONL_NAME),d.join(`
125
125
  `)+`
126
126
  `,H),m.length>0&&await vr.writeFile(Et.join(o,S.EDGES_JSONL_NAME),m.join(`
127
127
  `)+`
128
- `,H);let _=sn(SA),I=0,C=[];return await Promise.all(p.map(L=>_(async()=>{try{let w=OA(a,L);if(!w)return;await this.writeMarkdown(w,L),I++}catch(w){C.push(j.failedToWriteMarkdown(L.id,L.name,w instanceof Error?w.message:String(w)))}}))),s&&s.length>0&&await this.writeL3Cards(r,s,n,i),{nodesWritten:d.length,edgesWritten:m.length,markdownFilesWritten:I,errors:C}}async writeL3Cards(e,r,n,i){let s=Ig(n,i),o=Et.join(e,S.KNOWLEDGE_DIR_NAME,S.L3_DIR_NAME);await vr.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 vr.writeFile(Et.join(o,`${a.content_hash}.md`),Cg(a,l),H)}))}async writeMarkdown(e,r){await vr.mkdir(Et.dirname(e),{recursive:!0});let n=j.markdownFrontmatter(r.id,r.kind,r.name,r.filePath),i=r.kind===Mt.FILE?j.markdownFileBody(r.name,r.filePath):j.markdownSymbolBody(r.name,r.filePath);await vr.writeFile(e,n+i,H)}},TA=/[<>:"/\\|?*\x00-\x1f\s]/g,RA=".",AA="..",Pg=".md",yA=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"]),Dg="_";function bg(t){let e=t.replace(TA,"_");e.length>100&&(e=e.slice(0,100));let r=e.indexOf("."),n=r===-1?e:e.slice(0,r);return yA.has(n.toLowerCase())?r===-1?`${n}${Dg}`:`${n}${Dg}${e.slice(r)}`:e}function vg(t){return t.split(/[\\/]+/).filter(e=>e.length>0&&e!==RA&&e!==AA).map(bg).join(Et.sep)}function wg(t,e){let r=Et.resolve(t),n=Et.resolve(r,e);if(n!==r&&!n.startsWith(r+Et.sep))throw new E(y.INVALID_INPUT,j.sanitizedPathEscapesKnowledgeDir(e));return n}function OA(t,e){if(e.kind===Mt.FILE)return e.filePath?wg(t,`${vg(e.filePath)}${Pg}`):void 0;if(!e.filePath)return;let r=Et.parse(vg(e.filePath)),n=bg(e.name);return wg(t,Et.join(r.dir,r.name,`${n}${Pg}`))}function IA(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 Wl={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"},Fg={HIGH_MIN:6,CRITICAL_MIN:21},Mg=16e3;function kg(t,e){if(e<=Mg)return t;let r=Math.sqrt(e/Mg);return Math.max(t,Math.round(t*r))}function LA(t,e){let r=kg(Fg.CRITICAL_MIN,e),n=kg(Fg.HIGH_MIN,e);return t>=r?We.CRITICAL:t>=n?We.HIGH:t>=1?We.MEDIUM:We.LOW}var $n=class{constructor(e=he()){this.logger=e}logger;computeRiskLevel(e,r){let{l2Nodes:n}=e.graph.count();return LA(r,n)}getBlastRadius(e,r){let n=e.graph.findNodeByName(r);if(!n){this.logger.debug(Wl.NO_NODE_RESOLVED,{target:r});return}let i=e.graph.getIncomingEdges(n.id).map(({id:s,name:o,type:a})=>this.buildEntry(e,s,o,a));if(!this.hasStaticCallerEdge(e,n.id)){let s=new Set(i.map(a=>a.name)),o=this.resolveCallSiteFallback(e,n,s);o.length>0&&this.logger.debug(Wl.LSP_FALLBACK_APPLIED,{target:r,count:o.length}),i.push(...o)}return this.logger.debug(Wl.RESOLVED_BLAST_RADIUS,{target:r,count:i.length}),i}hasStaticCallerEdge(e,r){return e.graph.getIncomingRelations(r).some(n=>n.linkType!==me.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:Xd.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 CA=10,$s=class{constructor(e=new $n,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===We.LOW&&i.length>CA&&(a=We.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(`
128
+ `,H);let _=sn(SA),I=0,C=[];return await Promise.all(p.map(L=>_(async()=>{try{let b=yA(a,L);if(!b)return;await this.writeMarkdown(b,L),I++}catch(b){C.push(j.failedToWriteMarkdown(L.id,L.name,b instanceof Error?b.message:String(b)))}}))),s&&s.length>0&&await this.writeL3Cards(r,s,n,i),{nodesWritten:d.length,edgesWritten:m.length,markdownFilesWritten:I,errors:C}}async writeL3Cards(e,r,n,i){let s=Ig(n,i),o=Et.join(e,S.KNOWLEDGE_DIR_NAME,S.L3_DIR_NAME);await vr.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 vr.writeFile(Et.join(o,`${a.content_hash}.md`),Cg(a,l),H)}))}async writeMarkdown(e,r){await vr.mkdir(Et.dirname(e),{recursive:!0});let n=j.markdownFrontmatter(r.id,r.kind,r.name,r.filePath),i=r.kind===Mt.FILE?j.markdownFileBody(r.name,r.filePath):j.markdownSymbolBody(r.name,r.filePath);await vr.writeFile(e,n+i,H)}},TA=/[<>:"/\\|?*\x00-\x1f\s]/g,RA=".",AA="..",Pg=".md",OA=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"]),Dg="_";function wg(t){let e=t.replace(TA,"_");e.length>100&&(e=e.slice(0,100));let r=e.indexOf("."),n=r===-1?e:e.slice(0,r);return OA.has(n.toLowerCase())?r===-1?`${n}${Dg}`:`${n}${Dg}${e.slice(r)}`:e}function vg(t){return t.split(/[\\/]+/).filter(e=>e.length>0&&e!==RA&&e!==AA).map(wg).join(Et.sep)}function bg(t,e){let r=Et.resolve(t),n=Et.resolve(r,e);if(n!==r&&!n.startsWith(r+Et.sep))throw new E(A.INVALID_INPUT,j.sanitizedPathEscapesKnowledgeDir(e));return n}function yA(t,e){if(e.kind===Mt.FILE)return e.filePath?bg(t,`${vg(e.filePath)}${Pg}`):void 0;if(!e.filePath)return;let r=Et.parse(vg(e.filePath)),n=wg(e.name);return bg(t,Et.join(r.dir,r.name,`${n}${Pg}`))}function IA(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 Wl={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"},Fg={HIGH_MIN:6,CRITICAL_MIN:21},Mg=16e3;function kg(t,e){if(e<=Mg)return t;let r=Math.sqrt(e/Mg);return Math.max(t,Math.round(t*r))}function LA(t,e){let r=kg(Fg.CRITICAL_MIN,e),n=kg(Fg.HIGH_MIN,e);return t>=r?We.CRITICAL:t>=n?We.HIGH:t>=1?We.MEDIUM:We.LOW}var $n=class{constructor(e=me()){this.logger=e}logger;computeRiskLevel(e,r){let{l2Nodes:n}=e.graph.count();return LA(r,n)}getBlastRadius(e,r){let n=e.graph.findNodeByName(r);if(!n){this.logger.debug(Wl.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(Wl.LSP_FALLBACK_APPLIED,{target:r,count:a.length}),s.push(...a)}return this.logger.debug(Wl.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:Xd.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 CA=10,$s=class{constructor(e=new $n,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===We.LOW&&i.length>CA&&(a=We.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(`
129
129
  `)}};import Gg from"path";import jl from"path";function NA(t){return t?t.split(`
130
130
  `).map(e=>e.trim()).filter(Boolean).map(e=>{let r=JSON.parse(e);return{nodeKey:r.id,name:r.name,filePath:r.filePath}}):[]}function PA(t){return t?t.split(`
131
- `).map(e=>e.trim()).filter(Boolean).map(e=>JSON.parse(e)):[]}async function Vl(t,e,r,n,i=he()){let s=jl.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,jl.posix.join(S.GRAPH_DIR_NAME,S.NODES_JSONL_NAME)),t.readFileAtRef(e,r,jl.posix.join(S.GRAPH_DIR_NAME,S.EDGES_JSONL_NAME))]),c=NA(a),u=PA(l),p=new Map;for(let[f,m]of Lg(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 _=Ng(m);if(!_)continue;let I=p.get(_.l2_path);if(!I)continue;let C=n.graph.findNodeIdByNodeKey(I);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 DA=2e3,vA=50,wA=.5;function bA(t){return t?t.split(`
131
+ `).map(e=>e.trim()).filter(Boolean).map(e=>JSON.parse(e)):[]}async function Vl(t,e,r,n,i=me()){let s=jl.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,jl.posix.join(S.GRAPH_DIR_NAME,S.NODES_JSONL_NAME)),t.readFileAtRef(e,r,jl.posix.join(S.GRAPH_DIR_NAME,S.EDGES_JSONL_NAME))]),c=NA(a),u=PA(l),p=new Map;for(let[f,m]of Lg(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 _=Ng(m);if(!_)continue;let I=p.get(_.l2_path);if(!I)continue;let C=n.graph.findNodeIdByNodeKey(I);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 DA=2e3,vA=50,bA=.5;function wA(t){return t?t.split(`
132
132
  `).map(e=>e.trim()).filter(Boolean).map(e=>{let r=JSON.parse(e);return{nodeKey:r.id,name:r.name,filePath:r.filePath}}):[]}function FA(t){return t?t.split(`
133
- `).map(e=>e.trim()).filter(Boolean).map(e=>JSON.parse(e)):[]}var Ys=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=lr(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,DA);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]=await Promise.all([this.git.readFileAtRef(e,s,Gg.posix.join(S.GRAPH_DIR_NAME,S.NODES_JSONL_NAME)),this.git.readFileAtRef(e,s,Gg.posix.join(S.GRAPH_DIR_NAME,S.EDGES_JSONL_NAME))]),l=bA(o),c=FA(a);if(!(i?.force??!1)){let d=this.checkDestructiveRebuildGuard(r,l.length);if(d)return this.logger.warn(d.message,{knowledgeSha:s,incomingNodes:l.length}),{hydrated:!1,refused:!0,refusalReason:d.reason,nodesLoaded:0,edgesLoaded:0,edgesDropped:0}}let p=await r.withWriteLock(async()=>{let d=r.graph.bulkLoadGraph({projectId:S.DEFAULT_LOCAL_PROJECT_ID,nodes:l,edges:c});return await Vl(this.git,e,s,r,this.logger),r.meta.set(S.META_KEY_KNOWLEDGE_TIP_SHA,s),d});return this.logger.info(j.HYDRATED_KNOWLEDGE_GRAPH,{knowledgeSha:s,...p}),{hydrated:!0,knowledgeSha:s,...p}}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>=vA&&r<n*wA)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(()=>Vl(this.git,e,r,n,this.logger))}};var Uu=Ol(wu(),1),$m=Ol(xm(),1);import Bm from"path";import Km from"fs/promises";import gC from"crypto";var Re={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"},Ur={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"},Ct={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"},Oo=[`${at}/**`,".git/**","dist/**","build/**"],Um=[at,"dist","build","docs","test","tests","scripts"],zi="src",Hm=[zi,"lib","app"];var fC=".gitignore",Io=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(Ct.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(Ct.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=>Dn(a)),this.logger.debug(Ct.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(Ct.GIT_OPS_FAILED_FALLBACK,{error:s instanceof Error?s.message:String(s)}),null}}async discoverViaGlobFallback(e,r){this.logger.debug(Ct.GIT_UNAVAILABLE_FALLBACK);let n=(0,$m.default)();try{let c=await Km.readFile(Bm.join(e,fC),H);n.add(c)}catch{this.logger.debug(Ct.NO_GITIGNORE_FOUND)}let i=[...Oo,`${_e}/**`],[s,o]=await Promise.all([(0,Uu.default)(`**/*.{${Dl().join(",")}}`,{cwd:e,ignore:i,absolute:!1}),(0,Uu.default)(`**/{${Array.from(Pl).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(Ct.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 Km.readFile(Bm.join(n.workspaceRoot,e),H);let s=r||gC.createHash(Jt).update(i).digest("hex");return{code:i,hash:s}}catch{return null}}};var Wm=Ol(wu(),1);import hC from"path";import mC from"fs/promises";function No(t){return e=>e===t}function Hu(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 Zn(t,e,r){return{id:t,matchesFile:e,detect:()=>r}}var Ut=No(oe.PACKAGE_JSON),Ji=No(oe.CARGO_TOML),Lo=t=>t===oe.PYPROJECT_TOML||t===oe.REQUIREMENTS_TXT,Ym=No(oe.GO_MOD),_C=No(oe.TSCONFIG_JSON),EC=[Be(Re.PACKAGE_JSON_TYPESCRIPT,Ut,Ge.PACKAGE_JSON_TYPESCRIPT,[ar.TYPESCRIPT]),Be(Re.PACKAGE_JSON_REACT,Ut,Ge.PACKAGE_JSON_REACT,[ar.REACT,se.FRONTEND]),Be(Re.PACKAGE_JSON_VUE,Ut,Ge.PACKAGE_JSON_VUE,[ar.VUE,se.FRONTEND]),Be(Re.PACKAGE_JSON_NEXT,Ut,Ge.PACKAGE_JSON_NEXT,[se.NEXTJS,se.FRONTEND,se.SSR]),Be(Re.PACKAGE_JSON_EXPRESS,Ut,Ge.PACKAGE_JSON_EXPRESS,[ar.EXPRESS,se.BACKEND]),Be(Re.PACKAGE_JSON_DRIZZLE_ORM,Ut,Ge.PACKAGE_JSON_DRIZZLE_ORM,[se.DRIZZLE,se.DATABASE]),Be(Re.PACKAGE_JSON_TAILWINDCSS,Ut,Ge.PACKAGE_JSON_TAILWINDCSS,[se.TAILWINDCSS,se.CSS]),Be(Re.PACKAGE_JSON_JEST,Ut,Ge.PACKAGE_JSON_JEST,[se.JEST,se.TESTING]),Be(Re.PACKAGE_JSON_VITEST,Ut,Ge.PACKAGE_JSON_VITEST,[se.VITEST,se.TESTING]),Be(Re.PACKAGE_JSON_PG,Ut,Ge.PACKAGE_JSON_PG,[se.POSTGRES,se.DATABASE]),Be(Re.PACKAGE_JSON_WORKSPACES,Ut,Ge.PACKAGE_JSON_WORKSPACES,[se.MONOREPO]),Zn(Re.CARGO_BASE,Ji,{projectType:mt.RUST,tags:[mt.RUST]}),Be(Re.CARGO_TOKIO,Ji,Ge.CARGO_TOKIO,[se.TOKIO,se.ASYNC]),Be(Re.CARGO_ACTIX,Ji,Ge.CARGO_ACTIX,[se.ACTIX,se.BACKEND]),Be(Re.CARGO_SERDE,Ji,Ge.CARGO_SERDE,[se.SERDE]),Be(Re.CARGO_TAURI,Ji,Ge.CARGO_TAURI,[se.TAURI,se.DESKTOP]),Zn(Re.PYTHON_BASE,Lo,{projectType:mt.PYTHON,tags:[mt.PYTHON]}),Be(Re.PYTHON_DJANGO,Lo,Ge.PYTHON_DJANGO,[se.DJANGO,se.BACKEND]),Be(Re.PYTHON_FASTAPI,Lo,Ge.PYTHON_FASTAPI,[se.FASTAPI,se.BACKEND]),Be(Re.PYTHON_PANDAS,Lo,Ge.PYTHON_PANDAS,[se.PANDAS,se.DATA]),Zn(Re.GO_BASE,Ym,{projectType:mt.GO,tags:[mt.GO]}),Be(Re.GO_GIN,Ym,Ge.GO_GIN,[se.GIN,se.BACKEND]),{id:Re.TSCONFIG_STRICT,matchesFile:_C,detect:t=>/"strict"\s*:\s*true/.test(t)?{tags:[se.STRICT_TS]}:null},Zn(Re.VITE_PRESENCE,Hu(Ur.VITE_CONFIG),{tags:[se.VITE,se.BUILD_TOOL]}),Zn(Re.DRIZZLE_PRESENCE,Hu(Ur.DRIZZLE_CONFIG),{tags:[se.DRIZZLE,se.DATABASE]}),Zn(Re.TAURI_PRESENCE,Hu(Ur.TAURI_CONF),{tags:[se.TAURI,se.DESKTOP]})],SC=[`**/${oe.PACKAGE_JSON}`,`**/${oe.CARGO_TOML}`,`**/${oe.PYPROJECT_TOML}`,`**/${oe.REQUIREMENTS_TXT}`,`**/${oe.GO_MOD}`,`**/${oe.TSCONFIG_JSON}`,`**/${Ur.VITE_CONFIG}.*`,`**/${Ur.DRIZZLE_CONFIG}.*`,`**/${Ur.WEBPACK_CONFIG}.*`,`**/${Ur.TAURI_CONF}.*`],TC=[...Oo,"target/**","venv/**",".venv/**","**/fixtures/**","**/__fixtures__/**","**/test-data/**"],Co=class{constructor(e=he()){this.logger=e}logger;async scanConfigs(e){let r=mt.UNKNOWN,n=new Set;try{let i=await(0,Wm.default)(SC,{cwd:e,ignore:TC,absolute:!0,deep:3});r=await this.scanAllConfigFiles(i,n),r=this.resolveJavascriptFallback(r,n)}catch(i){this.logger.warn(Ct.CONFIG_SCAN_FAILED,{error:i?.message??String(i)})}return r===mt.UNKNOWN&&(r=mt.GENERIC),n.size===0&&n.add(mp),{projectType:r,tags:Array.from(n)}}async scanAllConfigFiles(e,r){let n=mt.UNKNOWN;for(let i of e){let s=await this.readConfigFileContent(i);if(s===null)continue;let o=hC.basename(i),a=this.applyDetectionRules(o,s,r);a&&(n=a)}return n}async readConfigFileContent(e){try{return await mC.readFile(e,H)}catch{return null}}applyDetectionRules(e,r,n){let i;for(let s of EC){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(ar.TYPESCRIPT)||r.has(ar.REACT)||r.has(ar.EXPRESS)||r.has(ar.VUE))&&e===mt.UNKNOWN?mt.JAVASCRIPT:e}};var Bu=".",RC=["packages","artifacts","crates"],AC="domain:";function yC(t){return t[0]===zi&&t.length>1||t.length>3&&RC.includes(t[0])&&t[2]===zi?t[1]:(t.length>2&&t[1]===zi,t[0])}function OC(t){let e=t.split("/");if(e.length<=1||e[0].startsWith(Bu)||Um.includes(e[0]))return null;let r=yC(e);return r.includes(Bu)||r.startsWith(Bu)||Hm.includes(r)?null:r}var Po=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(`${AC}${a}`);o.length>0&&this.logger.debug(Ct.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=OC(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 vC from"os";import{Worker as IC}from"worker_threads";import*as Qi from"path";import*as Hr from"fs";import{fileURLToPath as LC}from"url";import CC from"crypto";var NC=LC(import.meta.url),jm=Qi.dirname(NC),Do={FORMAT:"esm",PLATFORM:"node",TARGET:"node20",EXTERNAL_TREE_SITTER:"web-tree-sitter"},qi={EVAL:"--eval",PRINT:"--print",IMPORT:"--import",TSX_LOADER:"tsx"};async function PC(t,e){let r=await import("esbuild"),n=`${e}.${process.pid}.tmp`;await r.build({entryPoints:[t],outfile:n,bundle:!0,format:Do.FORMAT,platform:Do.PLATFORM,target:Do.TARGET,external:[Do.EXTERNAL_TREE_SITTER]}),Hr.renameSync(n,e)}function DC(t,e){return Hr.existsSync(e)?Hr.existsSync(t)?Hr.statSync(t).mtimeMs>Hr.statSync(e).mtimeMs:!1:!0}var Xi=class extends Error{constructor(r,n){super(je.workerCrashWhileParsing(r??je.UNKNOWN_FILE)+(n instanceof Error?n.message:String(n)));this.filePath=r;this.cause=n;this.name=Tp}filePath;cause},vo=class{constructor(e=he(),r=3e4,n,i){this.logger=e;this.taskTimeoutMs=r;this.cache=n;this.workerScriptPathOverride=i;this.ipcLogRouter=new qd(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 IC(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(je.WORKER_EXITED_DURING_SHUTDOWN,{taskId:s,filePath:o}):this.logger.error(je.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 Xi(o,i?new Error(je.taskTimedOutAfterMs(s,this.taskTimeoutMs)):n||new Error(je.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(je.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(qi.EVAL)&&!n.includes(qi.PRINT)),this.workerOptions.execArgv.some(n=>n.includes(qi.TSX_LOADER))||this.workerOptions.execArgv.push(qi.IMPORT,qi.TSX_LOADER);for(let n=0;n<e;n++)await this.enqueueSpawn();return}this.wPath=Qi.resolve(jm,"./ast-worker.js");let r=Qi.resolve(jm,"./ast-worker.ts");DC(r,this.wPath)&&await PC(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=CC.createHash(Jt).update(e.code).digest("hex");let o=performance.now(),a=this.cache.get(i),l=performance.now()-o;if(a){this.logger.debug(je.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(je.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(je.TASK_TIMED_OUT_TERMINATING,{taskId:n,filePath:this.taskFilePaths.get(n),taskTimeoutMs:this.taskTimeoutMs}),r.terminate().catch(s=>{this.logger.warn(je.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(je.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 wo=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,(vC.cpus().length||4)-1);await n.initialize(i);let s=u=>Os(u)??_p.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:Os(u.file)}};else{let f=d.error??je.PARSE_FAILURE_NO_DETAIL;this.logger.warn(je.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 Xi||d instanceof Error?d.message:String(d);this.logger.error(je.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 es from"path";import*as et from"path";import*as gt from"fs";import*as Fo from"fs";import bo from"path";function fn(t,e){let r=bo.resolve(t),n=bo.resolve(r,e),i=r.endsWith(bo.sep)?r:r+bo.sep;return n===r||n.startsWith(i)?n:null}function ei(t,e){let r=fn(t,e);if(!r||!Fo.existsSync(r))return null;try{return Fo.readFileSync(r,H)}catch{return null}}function Vm(t){return t.replace(/\\"|"(?:\\"|[^"])*"|(\/\/.*|\/\*[\s\S]*?\*\/)/g,(e,r)=>r?"":e)}var wC="tsconfig.base.json",bC="pnpm-workspace.yaml",FC="index.js",MC="src",kC="index",Mo="*",zm=".",Jm=[".ts",".js",".tsx",".jsx",".py",".rs",".go",".java",".cpp",".cc",".c",".h",".hpp"],GC=["/index.ts","/index.js"],qm=".go",Qm={TSCONFIG_PARSE_FAILED:"Failed to JSON-parse tsconfig.json",TSCONFIG_FILES_READ_FAILED:"Failed to read or parse tsconfig files"},Ku="*",xC="node:",UC=/^(@[^/]+\/[^/]+|[^/]+)/,ti=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(Qm.TSCONFIG_FILES_READ_FAILED,{error:e?.message??String(e)})}}mergeProjectTsConfigPaths(){let e=et.join(this.workspaceRoot,oe.TSCONFIG_JSON);if(!gt.existsSync(e))return;let r=gt.readFileSync(e,H),n=Vm(r);try{let i=JSON.parse(n);i.compilerOptions&&i.compilerOptions.paths&&(this.tsConfigPaths={...this.tsConfigPaths,...i.compilerOptions.paths})}catch(i){this.logger.debug(Qm.TSCONFIG_PARSE_FAILED,{error:i instanceof Error?i.message:String(i)})}}mergeBaseTsConfigPaths(){let e=et.join(this.workspaceRoot,wC);if(!gt.existsSync(e))return;let r=gt.readFileSync(e,H),n=Vm(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(qm)){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(qm)){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===Ku?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===Ku?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(xC))return!0;if(r.startsWith(zm))return!1;let n=UC.exec(r)?.[1];if(n&&this.getWorkspacePackageDirs().has(n)||this.matchesTsConfigAlias(r))return!1;let i=this.resolveModulePath(e,r);return i?i.startsWith(`${at}/`)||i.includes(`/${at}/`):!0}matchesTsConfigAlias(e){return Object.keys(this.tsConfigPaths).some(r=>e.startsWith(r.replace(Mo,"")))}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===Ku?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(zm)){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(Mo,"");if(r.startsWith(s)){let o=r.slice(s.length);for(let a of i){let l=a.replace(Mo,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(Mo),i=(n>=0?e.slice(0,n):e).replace(/\/$/,""),s=fn(this.workspaceRoot,i);if(!s||!gt.existsSync(s))return;let o;try{o=gt.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(gt.existsSync(s))try{let o=JSON.parse(gt.readFileSync(s,H));o.name&&i.set(o.name,et.posix.join(e,n.name))}catch{}}getWorkspaceGlobs(){try{let e=ei(this.workspaceRoot,bC);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=ei(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,MC,kC),s=this.findFileWithExtension(i);return s||this.findFileWithExtension(n)}resolveNodeModulesImport(e,r){try{let n=ei(this.workspaceRoot,et.join(at,e,oe.PACKAGE_JSON));if(!n)return null;let i=JSON.parse(n),s=r||i.module||i.main||FC,o=et.posix.join(at,e,s);return fn(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=fn(this.workspaceRoot,n);if(!(!i||!gt.existsSync(i))&&!(r&&!gt.statSync(i).isFile()))return n}return null}findFileWithExtension(e){let r=this.firstExisting([e],!0);if(r)return r;let n=this.firstExisting(Jm.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(Jm.map(o=>i+o));if(s)return s}return this.firstExisting(GC.map(i=>e+i))}};function hn(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 Zi(t,e,r){return r?`${t}#${r}.${e}`:`${t}#${e}`}function HC(){return{total:0,resolved:0,selfDiscarded:0,unresolvable:0,external:0,unknownReceiver:0}}function BC(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 Go=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 ti(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?yr(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:Rr.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=hn(o,Zi(n.file,a.name,a.containerName),a.startLine);o.add(l);let c=e.graph.insertNode({projectId:r,name:a.name,type:Rr.MODULE,description:"",pathPatterns:[n.file],nodeKey:l,contentHash:a.contentHash});s.set(a.name,c),e.graph.insertLink({sourceNodeId:i,targetNodeId:c,linkType:me.CONTAINS})}}insertClassNodes(e,r,n,i,s,o){for(let a of n.data.classes??[]){let l=hn(o,`${n.file}#${a.name}`,a.startLine);o.add(l);let c=e.graph.insertNode({projectId:r,name:a.name,type:Rr.MODULE,description:"",pathPatterns:[n.file],nodeKey:l,contentHash:a.contentHash});s.set(a.name,c),e.graph.insertLink({sourceNodeId:i,targetNodeId:c,linkType:me.CONTAINS})}}insertVariableNodes(e,r,n,i,s,o){for(let a of n.data.variables??[]){let l=hn(o,`${n.file}#${a.name}`,a.startLine);o.add(l);let c=e.graph.insertNode({projectId:r,name:a.name,type:Rr.MODULE,description:"",pathPatterns:[n.file],nodeKey:l,contentHash:a.contentHash});s.set(a.name,c),e.graph.insertLink({sourceNodeId:i,targetNodeId:c,linkType:me.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=HC();this.linkParsedResultRelations(e,r,c,u,s,o,p),p.total>0&&(a[c.file]=BC(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,me.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,me.IMPLEMENTS,!0);for(let c of n.data.extends??[])this.linkSymbolReference(e,r,n.file,i,l,s,o,c.sourceClass,c.targetClass,me.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:me.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:me.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 I=this.classifyUnresolvedCall(r,n,c,f);I==="external"?d.external++:I==="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!==Sp?e?.get(r):void 0)??n}};var KC=new Set(["child_process","node:child_process"]),Xm=new Set(["execFile","execFileSync","spawn","spawnSync","fork"]),Zm=[".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs"],e_=/\.(?:js|jsx|mjs|cjs)$/,t_="*";function $C(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function YC(t){return[...(t.data.functions??[]).map(e=>e.name),...(t.data.classes??[]).map(e=>e.name),...(t.data.variables??[]).map(e=>e.name)]}var xo=class{base=new Go;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 ti(e);for(let i of r)n.registerFile(i.file,i.data.imports??[],[],YC(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,me.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=ei(r,i.file);if(!s)return;let o=e.graph.findNodeIdByName(i.file,i.file);if(o)for(let a of i.data.imports??[])KC.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,me.DEPENDS_ON)}childProcessInvocations(e){return Xm.has(e.originalName)&&e.originalName!==t_?[{api:e.originalName,localExpression:e.localName}]:e.originalName===t_?[...Xm].map(r=>({api:r,localExpression:`${e.localName}.${r}`})):[]}extractLiteralProcessTargets(e,r,n){let i=$C(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(es.posix.normalize(es.posix.join(es.posix.dirname(e),i))),s.add(es.posix.normalize(i.replace(/^\//,"")));for(let o of s){if(n.has(o))return o;if(e_.test(o)){let a=o.replace(e_,"");for(let l of Zm){let c=`${a}${l}`;if(n.has(c))return c}}else for(let a of Zm){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 ri from"fs/promises";import ns from"path";import{tracingChannel as WC,channel as jC}from"diagnostics_channel";var Ve=jC("lru-cache:metrics"),ts=WC("lru-cache"),VC=typeof performance=="object"&&performance&&typeof performance.now=="function"?performance:Date,$u=()=>Ve.hasSubscribers||ts.hasSubscribers,n_=new Set,r_=typeof process=="object"&&process?process:{},zC=(t,e,r,n)=>{typeof r_.emitWarning=="function"?r_.emitWarning(t,e,r,n):console.error(`[${r}] ${e}: ${t}`)},JC=t=>!n_.has(t),Br=t=>!!t&&t===Math.floor(t)&&t>0&&isFinite(t),i_=t=>Br(t)?t<=Math.pow(2,8)?Uint8Array:t<=Math.pow(2,16)?Uint16Array:t<=Math.pow(2,32)?Uint32Array:t<=Number.MAX_SAFE_INTEGER?Uo:null:null,Uo=class extends Array{constructor(t){super(t),this.fill(0)}},qC=class rs{heap;length;static#t=!1;static create(e){let r=i_(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]}},s_=class o_{#t;#s;#c;#P;#_;#M;#k;#E;get perf(){return this.#E}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;#R;#A;#f;#h;#y;#G;#p;#D;static unsafeExposeInternals(e){return{starts:e.#A,ttls:e.#f,autopurgeTimers:e.#h,sizes:e.#R,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.#m(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.#_}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:I,fetchMethod:C,memoMethod:L,noDeleteOnFetchRejection:w,noDeleteOnStaleGet:Q,allowStaleOnFetchRejection:J,allowStaleOnFetchAbort:$,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.#E=ne??VC,r!==0&&!Br(r))throw new TypeError("max option must be a nonnegative integer");let de=r?i_(r):Array;if(!de)throw new Error("invalid max value: "+r);if(this.#t=r,this.#s=m,this.maxEntrySize=_||this.#s,this.sizeCalculation=I,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(L!==void 0&&typeof L!="function")throw new TypeError("memoMethod must be a function if defined");if(this.#k=L,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 de(r),this.#g=new de(r),this.#u=0,this.#a=0,this.#T=qC.create(r),this.#o=0,this.#S=0,typeof c=="function"&&(this.#c=c),typeof u=="function"&&(this.#P=u),typeof p=="function"?(this.#_=p,this.#l=[]):(this.#_=void 0,this.#l=void 0),this.#y=!!this.#c,this.#D=!!this.#P,this.#p=!!this.#_,this.noDisposeOnSet=!!d,this.noUpdateTTL=!!f,this.noDeleteOnFetchRejection=!!w,this.allowStaleOnFetchRejection=!!J,this.allowStaleOnFetchAbort=!!$,this.ignoreFetchAbort=!!te,this.maxEntrySize!==0){if(this.#s!==0&&!Br(this.#s))throw new TypeError("maxSize must be a positive integer if specified");if(!Br(this.maxEntrySize))throw new TypeError("maxEntrySize must be a positive integer if specified");this.#z()}if(this.allowStale=!!l,this.noDeleteOnStaleGet=!!Q,this.updateAgeOnGet=!!o,this.updateAgeOnHas=!!a,this.ttlResolution=Br(i)||i===0?i:1,this.ttlAutopurge=!!s,this.ttl=n||0,this.ttl){if(!Br(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";JC(N)&&(n_.add(N),zC("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.","UnboundedCacheWarning",N,o_))}}getRemainingTTL(e){return this.#i.has(e)?1/0:0}#B(){let e=new Uo(this.#t),r=new Uo(this.#t);this.#f=e,this.#A=r;let n=this.ttlAutopurge?Array.from({length:this.#t}):void 0;this.#h=n,this.#K=(l,c,u=this.#E.now())=>{r[l]=c!==0?u:0,e[l]=c,i(l,c)},this.#v=l=>{r[l]=e[l]!==0?this.#E.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.#m(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.#E.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.#m=l=>{let c=r[l],u=e[l];return!!u&&!!c&&(s||o())-c>u}}#v=()=>{};#C=()=>{};#K=()=>{};#m=()=>!1;#z(){let e=new Uo(this.#t);this.#S=0,this.#R=e,this.#w=r=>{this.#S-=e[r],e[r]=0},this.#$=(r,n,i,s)=>{if(!Br(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),!Br(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)}}#w=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.#m(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.#m(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.#b(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.#m(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.#A){let o=this.#f[r],a=this.#A[r];if(o&&a){let l=o-(this.#E.now()-a);s.ttl=l,s.start=Date.now()}}return this.#R&&(s.size=this.#R[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.#A){o.ttl=this.#f[r];let a=this.#E.now()-this.#A[r];o.start=Math.floor(Date.now()-a)}this.#R&&(o.size=this.#R[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.#E.now()-i}this.#N(r,n.value,n)}}set(e,r,n={}){let{status:i=Ve.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&&Ve.hasSubscribers&&Ve.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.#w(f),this.#x(f,d,c),this.#e[f]=r,!u){let _=m&&this.#r(m)?m.__staleWhileFetching:m,I=_===void 0?"add":r!==_?"replace":"update";c&&(c.set=I,_!==void 0&&(c.oldValue=_)),this.#D&&this.onInsert?.(r,e,I)}}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.#_?.(..._)}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.#_?.(...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.#w(r),this.#h?.[r]&&(clearTimeout(this.#h[r]),this.#h[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=Ve.hasSubscribers?{}:void 0}=r;r.status=n,n&&(n.op="has",n.key=e,n.cache=this);let i=this.#J(e,r);return Ve.hasSubscribers&&Ve.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.#m(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=$u()?{}:void 0}=r;n&&(n.op="peek",n.key=e,n.cache=this),r.status=n;let i=this.#q(e,r);return Ve.hasSubscribers&&Ve.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.#m(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=(_,I=!1)=>{let{aborted:C}=o.signal,L=n.ignoreFetchAbort&&_!==void 0,w=n.ignoreFetchAbort||!!(n.allowStaleOnFetchAbort&&_!==void 0);if(n.status&&(C&&!I?(n.status.fetchAborted=!0,n.status.fetchError=o.signal.reason,L&&(n.status.fetchAbortIgnored=!0)):n.status.fetchResolved=!0),C&&!L&&!I)return p(o.signal.reason,w);let Q=f,J=this.#e[r];return(J===f||J===void 0&&L&&I)&&(_===void 0?Q.__staleWhileFetching!==void 0?this.#e[r]=Q.__staleWhileFetching:this.#L(e,"fetch"):(n.status&&(n.status.fetchUpdated=!0),this.#N(e,_,l.options,Q))),_},u=_=>(n.status&&(n.status.fetchRejected=!0,n.status.fetchError=_),p(_,!1)),p=(_,I)=>{let{aborted:C}=o.signal,L=C&&n.allowStaleOnFetchAbort,w=L||n.allowStaleOnFetchRejection,Q=w||n.noDeleteOnFetchRejection,J=f;if(this.#e[r]===f&&(!Q||!I&&J.__staleWhileFetching===void 0?this.#L(e,"fetch"):L||(this.#e[r]=J.__staleWhileFetching)),w)return n.status&&J.__staleWhileFetching!==void 0&&(n.status.returnedStale=!0),J.__staleWhileFetching;if(J.__returned===J)throw _},d=(_,I)=>{let C=this.#M?.(e,s,l);o.signal.addEventListener("abort",()=>{(!n.ignoreFetchAbort||n.allowStaleOnFetchAbort)&&(_(void 0),n.allowStaleOnFetchAbort&&(_=L=>c(L,!0)))}),C&&C instanceof Promise?C.then(L=>_(L===void 0?void 0:L),I):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=ts.hasSubscribers,{status:i=$u()?{}: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,ts.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:I=!1,status:C,signal:L}=r;if(C&&(C.op="fetch",C.key=e,I&&(C.forceRefresh=!0),C.cache=this),!this.#G)return C&&(C.fetch="get"),this.#b(e,{allowStale:n,updateAgeOnGet:i,noDeleteOnStaleGet:s,status:C});let w={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:L},Q=this.#i.get(e);if(Q===void 0){C&&(C.fetch="miss");let J=this.#H(e,Q,w,_);return J.__returned=J}else{let J=this.#e[Q];if(this.#r(J)){let ne=n&&J.__staleWhileFetching!==void 0;return C&&(C.fetch="inflight",ne&&(C.returnedStale=!0)),ne?J.__staleWhileFetching:J.__returned=J}let $=this.#m(Q);if(!I&&!$)return C&&(C.fetch="hit"),this.#F(Q),i&&this.#v(Q),C&&this.#C(C,Q),J;let te=this.#H(e,Q,w,_),M=te.__staleWhileFetching!==void 0&&n;return C&&(C.fetch=$?"stale":"refresh",M&&$&&(C.returnedStale=!0)),M?te.__staleWhileFetching:te.__returned=te}}forceFetch(e,r={}){let n=ts.hasSubscribers,{status:i=$u()?{}: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,ts.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=Ve.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),Ve.hasSubscribers&&Ve.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.#b(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=Ve.hasSubscribers?{}:void 0}=r;r.status=n,n&&(n.op="get",n.key=e,n.cache=this);let i=this.#b(e,r);return n&&(i!==void 0&&(n.value=i),Ve.hasSubscribers&&Ve.publish(n)),i}#b(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.#m(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){Ve.hasSubscribers&&Ve.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.#h?.[i]&&(clearTimeout(this.#h[i]),this.#h[i]=void 0),n=!0,this.#o===1)this.#V(r);else{this.#w(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.#_?.(...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.#A){this.#f.fill(0),this.#A.fill(0);for(let r of this.#h??[])r!==void 0&&clearTimeout(r);this.#h?.fill(void 0)}if(this.#R&&this.#R.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.#_?.(...n)}}};var QC="tmp",fr={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"},Ho=class{constructor(e,r=he(),n=1024*1024*1024,i=14400*1e3,s=1800*1e3){this.logger=r;let o=ns.resolve(e);this.tempDir=ns.join(o,_e,QC),this.ttlMs=i,this.lruCache=new s_({max:1e4,maxSize:n,sizeCalculation:a=>a.sizeBytes,ttl:i,allowStale:!1})}logger;tempDir;lruCache;cleanupInterval=null;concurrencyLimit=sn(5);ttlMs;async initialize(){try{await ri.mkdir(this.tempDir,{recursive:!0});let e=ns.dirname(ns.dirname(this.tempDir)),[r,n]=await Promise.all([ri.realpath(e),ri.realpath(this.tempDir)]);if(!n.startsWith(r+ns.sep))throw new E(y.FS_PATH_TRAVERSAL,`Resolved temp directory "${n}" escapes workspace root "${r}" \u2014 possible path traversal via symlink`);this.logger.info(fr.INITIALIZED,{tempDir:this.tempDir}),this.startCleanupSchedule(1800*1e3)}catch(e){throw e instanceof E||this.logger.error(fr.INIT_FAILED,{error:e instanceof Error?e.message:String(e)}),e}}async trackFile(e){return this.concurrencyLimit(async()=>{try{let r=await ri.stat(e),n={filePath:e,createdAt:Date.now(),lastAccessedAt:Date.now(),sizeBytes:r.size};this.lruCache.set(e,n),this.logger.debug(fr.FILE_TRACKED,{filePath:e,sizeBytes:r.size})}catch(r){this.logger.warn(fr.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 ri.readFile(e,H)}catch(r){return this.logger.warn(fr.ACCESS_FAILED,{filePath:e,error:r instanceof Error?r.message:String(r)}),null}})}async removeFileSync(e){try{await ri.unlink(e),this.logger.debug(fr.FILE_REMOVED,{filePath:e})}catch(r){if(r?.code!==Ls)throw r}}startCleanupSchedule(e){this.cleanupInterval=setInterval(()=>{this.cleanup().catch(r=>{this.logger.error(fr.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(fr.CLEANUP_COMPLETED,{removedCount:r.length,cacheSize:this.lruCache.size})}catch(e){this.logger.error(fr.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 Bo={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}`},XC=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"]),ZC=5,eN=25;function tN(t){return Math.max(t*ZC,eN)}function a_(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 Ko=class{constructor(e=he()){this.logger=e}logger;extractKeywords(e){let r=e.split(/[^\w./-]+/).map(n=>n.trim()).filter(n=>n.length>0&&!XC.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!==me.CONTAINS).map(({name:a,linkType:l})=>({name:a,linkType:l})),s=e.graph.getOutgoingRelations(n.id).filter(a=>a.linkType!==me.CONTAINS).map(({name:a,linkType:l})=>({name:a,linkType:l})),o=Ni(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(Bo.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=tN(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)));a_(e.fts.searchL2Nodes(o,l),o.length>1?c():[]).slice(0,n).forEach((f,m)=>s({layer:tn.L2,id:f.id,title:f.name,content:f.description,score:.9-m*.01,matchType:"keyword"})),a_(e.fts.searchL3Nodes(o,l),o.length>1?u():[]).slice(0,n).forEach((f,m)=>s({layer:tn.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:tn.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:tn.L2,id:u.id,title:u.name,content:Bo.linkedTo(l.name),score:.7-p*.01,matchType:"neighbor"})))}return this.logger.debug(Bo.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===tn.L2),o=i.filter(c=>c.layer===tn.L3),a=null;try{a=this.getContext(e,r)}catch(c){this.logger.debug(Bo.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 $o=class extends $n{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===me.CONTAINS))for(let a of e.graph.getIncomingRelations(o.id))a.linkType!==me.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 iN=2e3,sN="(ungrouped)",oN=".",Yo=class{build(e,r={}){let n=e.l2Rows.map(w=>({id:w.id,name:w.name,filePath:mN(w.path_patterns),type:w.type})),i=e.linkRows.map(w=>({sourceNodeId:w.source_node_id,targetNodeId:w.target_node_id,linkType:w.link_type,commitSha:w.commit_sha??void 0,diffSummary:w.diff_summary??void 0})),s=e.l3Rows.map(w=>({id:w.id,l2NodeId:w.l2_node_id,title:w.title,content:w.content??void 0,nodeType:w.node_type,confidence:w.confidence??void 0,validityStatus:w.validity_status,sourceCommits:_N(w.source_commits)})),o=e.tagRows,a=aN(n),l=lN(i),c=cN(o),u=r.maxNodes??iN,p=n.length+s.length,d=uN(r,p,u),f=d?fN(n,i,s,l,a):gN(n,i,s,l,a),m=f.nodes,_=f.links,I=new Set(m.map(w=>w.id)),C=_.filter(w=>I.has(w.source)&&I.has(w.target)),L=dN(m,c);return pN(m,C),{topologyVersion:2,generatedAt:new Date().toISOString(),workspaceRoot:e.workspaceRoot,collapsed:d,nodes:m,links:C,groups:L,stats:{nodeCount:m.length,linkCount:C.length,groupCount:L.length,foldedLinkCount:f.foldedLinkCount??0}}}};function aN(t){let e=new Map;for(let r of t)e.set(String(r.id),r.filePath);return e}function lN(t){let e=new Map;for(let r of t)r.linkType===me.CONTAINS&&e.set(String(r.targetNodeId),String(r.sourceNodeId));return e}function cN(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 uN(t,e,r){return t.collapse===Nl.FILE||t.collapse!==Nl.SYMBOL&&e>r}function dN(t,e){let r=new Map,n=[];for(let i of t){let s=hN(i.filePath),o=r.get(s);if(o===void 0&&(o=n.length,r.set(s,o),n.push({id:o,label:s,source:Zd.DIRECTORY,count:0})),i.group=o,n[o].count++,i.kind===Mt.FILE){let a=e.get(i.id.slice("l2:".length));a&&a.length&&(i.tags=a)}}return n}function pN(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 gN(t,e,r,n,i){let s=t.map(a=>({id:Ot(a.id),label:a.name,kind:n.has(String(a.id))?Mt.SYMBOL:Mt.FILE,group:0,filePath:i.get(String(a.id)),degree:0,l2Type:a.type})),o=e.map(a=>({source:Ot(a.sourceNodeId),target:Ot(a.targetNodeId),linkType:a.linkType,confidence:1,commitSha:a.commitSha,diffSummary:a.diffSummary}));return l_(s,o,r,i),{nodes:s,links:o,foldedLinkCount:0}}function fN(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:Ot(u.id),label:u.name,kind:Mt.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===me.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:Ot(p),target:Ot(d),linkType:u.linkType,confidence:1,commitSha:u.commitSha,diffSummary:u.diffSummary}))}return l_(o,a,r,i),{nodes:o,links:a,foldedLinkCount:c}}function l_(t,e,r,n){let i=new Set(t.map(s=>s.id));for(let s of r){let o=Ot(s.l2NodeId);i.has(o)&&(t.push({id:Yl(s.id),label:s.title,kind:Mt.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:Yl(s.id),target:o,linkType:me.DECISION,confidence:1}))}}function hN(t){if(!t)return sN;let r=t.split("\\").join("/").split("/").filter(Boolean);return r.length<=1?oN:r.slice(0,Math.min(2,r.length-1)).join("/")}function mN(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 _N(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 u_ from"path";import*as d_ from"fs";import{Parser as c_,Language as EN}from"web-tree-sitter";var Wo={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 jo=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(Wo.DETECTOR_FAILED,{filePath:r,error:a instanceof Error?a.message:String(a)}),[]}}async getDetectorForFile(e){let r=await this.getRegistry(),n=u_.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??=c_.init(),await this.parserInitPromise;let{wasmPath:o,attemptedPaths:a}=yp(i.wasm_file);if(!d_.existsSync(o)){this.logger.debug(Wo.NO_GRAMMAR_AVAILABLE,{filePath:e,wasmFile:i.wasm_file,attemptedPaths:a}),this.detectors.set(i.wasm_file,null);return}try{let l=await EN.load(o),c=new c_,u=new Ap(c,l);return this.detectors.set(i.wasm_file,u),u}catch(l){this.logger.warn(Wo.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??=Rp(),this.registryPromise}};import f_ from"fs";import Vo from"path";import{execFile as SN}from"child_process";import{promisify as TN}from"util";var Wu=TN(SN),RN=[".cmd",".CMD",".exe",""];function Yu(t,e){return e?{...t,env:e}:t}function AN(t,e){let r=Vo.join(t,at,".bin"),n=process.platform==="win32"?RN.map(i=>`${e}${i}`):[e];for(let i of n){let s=Vo.join(r,i);if(f_.existsSync(s))return s}}function tr(t,e,r){let n=e.buildEnv?.();if(r?.binary)return Yu({command:r.binary,args:r.args??e.defaultArgs,locallyResolved:!0,fromUserOverride:!0},n);let i=e.binaryName??e.packageName,s=AN(t,i);if(s)return Yu({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 Yu({command:"npx",args:o,locallyResolved:!1},n)}var p_=5e3,yN=5e3;async function ON(t){try{if(process.platform==="win32"){let{stdout:n}=await Wu("where",[t],{timeout:p_});return n.split(/\r?\n/).map(i=>i.trim()).find(i=>i.length>0)}let{stdout:e}=await Wu("sh",["-c",`command -v ${t}`],{timeout:p_}),r=e.trim();return r.length>0?r:void 0}catch{return}}function IN(t,e){if(!e)return;let r=process.platform==="win32"?[`${t}.exe`,t]:[t];for(let n of e)for(let i of r){let s=Vo.join(n,i);if(f_.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 ON(t.binaryName);if(r)return{command:r,args:t.defaultArgs,locallyResolved:!0};let n=IN(t.binaryName,t.extraCandidateDirs);return n?{command:n,args:t.defaultArgs,locallyResolved:!0}:{command:t.binaryName,args:t.defaultArgs,locallyResolved:!1}}function g_(t){let e=t.trim().replace(/\\/g,"/");return Vo.posix.basename(e).replace(/\.exe$/i,"").toLowerCase()}async function h_(t,e=yN,r){if(r&&!r.some(n=>g_(n)===g_(t)))return!1;try{return await Wu(t,["--version"],{timeout:e}),!0}catch{return!1}}var Nt={PACKAGE_NAME:"typescript-language-server",NPX_COMMAND:"npx",NPX_NO_INSTALL_FLAG:"--no-install",STDIO_ARG:"--stdio",VERSION_FLAG:"--version"},zo=8192,ni={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 LN=["PATH","HOME","USERPROFILE","PATHEXT","SYSTEMROOT","COMSPEC","LANG","LC_ALL","TERM"];function m_(){let t={};for(let e of LN){let r=process.env[e];r!==void 0&&(t[e]=r)}return t}function CN(){let t=m_(),e=process.env.NODE_OPTIONS??"";if(e.includes("--max-old-space-size"))return t.NODE_OPTIONS=e,t;let r=`--max-old-space-size=${zo}`;return t.NODE_OPTIONS=e?`${e} ${r}`:r,t}function Jo(t,e){return tr(t,{packageName:Nt.PACKAGE_NAME,defaultArgs:[Nt.STDIO_ARG],buildEnv:CN},e)}import qo from"fs";import Qo from"path";import{execFile as FN}from"child_process";import{promisify as MN}from"util";import NN from"path";import{execFile as PN}from"child_process";import{promisify as DN}from"util";var vN=DN(PN),wN=new Set([".cmd",".bat",".ps1"]),__=new Set(["npx"]);function Kr(t){return process.platform!=="win32"?!1:wN.has(NN.extname(t).toLowerCase())||__.has(t.toLowerCase())}function ju(t){return`"${t.replace(/"/g,'""')}"`}var bN=5e3;async function Vu(t,e){try{let{stdout:r}=await vN("where",[t],{timeout:bN,env:e});return r.split(/\r?\n/).map(i=>i.trim()).find(i=>i.length>0)??t}catch{return t}}function zu(t){return __.has(t.toLowerCase())}async function ii(t,e,r){return[zu(t)?await Vu(t,r):t,...e].map(ju).join(" ")}var E_=MN(FN),S_=5e3,kN=[oe.TSCONFIG_JSON,oe.JSCONFIG_JSON];function GN(t){return qo.existsSync(Qo.join(t,at))}function xN(t){return!!(kN.some(r=>qo.existsSync(Qo.join(t,r)))||qo.existsSync(Qo.join(t,"tsconfig.base.json"))||qo.existsSync(Qo.join(t,"src",oe.TSCONFIG_JSON)))}async function UN(t){let e=[Nt.NPX_NO_INSTALL_FLAG,Nt.PACKAGE_NAME,Nt.VERSION_FLAG];try{if(Kr(Nt.NPX_COMMAND)){let r=await ii(Nt.NPX_COMMAND,e,void 0);await E_(r,[],{cwd:t,timeout:S_,shell:!0})}else await E_(Nt.NPX_COMMAND,e,{cwd:t,timeout:S_});return!0}catch{return!1}}async function T_(t,e){let r=GN(t),n=xN(t);if(!r)return{nodeModulesPresent:r,tsconfigResolvable:n,lspBinaryResolvable:!1,ready:!1,reason:ni.nodeModulesMissing};if(!n)return{nodeModulesPresent:r,tsconfigResolvable:n,lspBinaryResolvable:!1,ready:!1,reason:ni.tsconfigMissing};let s=Jo(t,e).locallyResolved?!0:await UN(t);return s?{nodeModulesPresent:r,tsconfigResolvable:n,lspBinaryResolvable:s,ready:!0}:{nodeModulesPresent:r,tsconfigResolvable:n,lspBinaryResolvable:s,ready:!1,reason:ni.binaryUnresolvable}}import rP from"fs/promises";import Ju from"os";import si from"path";import{pathToFileURL as C_,fileURLToPath as N_}from"url";import{spawn as R_}from"child_process";var mn={CONTENT_LENGTH_HEADER_PREFIX:"Content-Length: ",HEADER_BODY_SEPARATOR:`\r
133
+ `).map(e=>e.trim()).filter(Boolean).map(e=>JSON.parse(e)):[]}var Ys=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=lr(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,DA);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]=await Promise.all([this.git.readFileAtRef(e,s,Gg.posix.join(S.GRAPH_DIR_NAME,S.NODES_JSONL_NAME)),this.git.readFileAtRef(e,s,Gg.posix.join(S.GRAPH_DIR_NAME,S.EDGES_JSONL_NAME))]),l=wA(o),c=FA(a);if(!(i?.force??!1)){let d=this.checkDestructiveRebuildGuard(r,l.length);if(d)return this.logger.warn(d.message,{knowledgeSha:s,incomingNodes:l.length}),{hydrated:!1,refused:!0,refusalReason:d.reason,nodesLoaded:0,edgesLoaded:0,edgesDropped:0}}let p=await r.withWriteLock(async()=>{let d=r.graph.bulkLoadGraph({projectId:S.DEFAULT_LOCAL_PROJECT_ID,nodes:l,edges:c});return await Vl(this.git,e,s,r,this.logger),r.meta.set(S.META_KEY_KNOWLEDGE_TIP_SHA,s),d});return this.logger.info(j.HYDRATED_KNOWLEDGE_GRAPH,{knowledgeSha:s,...p}),{hydrated:!0,knowledgeSha:s,...p}}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>=vA&&r<n*bA)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(()=>Vl(this.git,e,r,n,this.logger))}};var Uu=yl(bu(),1),$m=yl(xm(),1);import Bm from"path";import Km from"fs/promises";import gC from"crypto";var Re={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"},Ur={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"},Ct={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"},yo=[`${at}/**`,".git/**","dist/**","build/**"],Um=[at,"dist","build","docs","test","tests","scripts"],zi="src",Hm=[zi,"lib","app"];var fC=".gitignore",Io=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(Ct.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(Ct.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=>Dn(a)),this.logger.debug(Ct.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(Ct.GIT_OPS_FAILED_FALLBACK,{error:s instanceof Error?s.message:String(s)}),null}}async discoverViaGlobFallback(e,r){this.logger.debug(Ct.GIT_UNAVAILABLE_FALLBACK);let n=(0,$m.default)();try{let c=await Km.readFile(Bm.join(e,fC),H);n.add(c)}catch{this.logger.debug(Ct.NO_GITIGNORE_FOUND)}let i=[...yo,`${_e}/**`],[s,o]=await Promise.all([(0,Uu.default)(`**/*.{${Dl().join(",")}}`,{cwd:e,ignore:i,absolute:!1}),(0,Uu.default)(`**/{${Array.from(Pl).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(Ct.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 Km.readFile(Bm.join(n.workspaceRoot,e),H);let s=r||gC.createHash(Jt).update(i).digest("hex");return{code:i,hash:s}}catch{return null}}};var Wm=yl(bu(),1);import hC from"path";import mC from"fs/promises";function No(t){return e=>e===t}function Hu(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 Zn(t,e,r){return{id:t,matchesFile:e,detect:()=>r}}var Ut=No(oe.PACKAGE_JSON),Ji=No(oe.CARGO_TOML),Lo=t=>t===oe.PYPROJECT_TOML||t===oe.REQUIREMENTS_TXT,Ym=No(oe.GO_MOD),_C=No(oe.TSCONFIG_JSON),EC=[Be(Re.PACKAGE_JSON_TYPESCRIPT,Ut,Ge.PACKAGE_JSON_TYPESCRIPT,[ar.TYPESCRIPT]),Be(Re.PACKAGE_JSON_REACT,Ut,Ge.PACKAGE_JSON_REACT,[ar.REACT,se.FRONTEND]),Be(Re.PACKAGE_JSON_VUE,Ut,Ge.PACKAGE_JSON_VUE,[ar.VUE,se.FRONTEND]),Be(Re.PACKAGE_JSON_NEXT,Ut,Ge.PACKAGE_JSON_NEXT,[se.NEXTJS,se.FRONTEND,se.SSR]),Be(Re.PACKAGE_JSON_EXPRESS,Ut,Ge.PACKAGE_JSON_EXPRESS,[ar.EXPRESS,se.BACKEND]),Be(Re.PACKAGE_JSON_DRIZZLE_ORM,Ut,Ge.PACKAGE_JSON_DRIZZLE_ORM,[se.DRIZZLE,se.DATABASE]),Be(Re.PACKAGE_JSON_TAILWINDCSS,Ut,Ge.PACKAGE_JSON_TAILWINDCSS,[se.TAILWINDCSS,se.CSS]),Be(Re.PACKAGE_JSON_JEST,Ut,Ge.PACKAGE_JSON_JEST,[se.JEST,se.TESTING]),Be(Re.PACKAGE_JSON_VITEST,Ut,Ge.PACKAGE_JSON_VITEST,[se.VITEST,se.TESTING]),Be(Re.PACKAGE_JSON_PG,Ut,Ge.PACKAGE_JSON_PG,[se.POSTGRES,se.DATABASE]),Be(Re.PACKAGE_JSON_WORKSPACES,Ut,Ge.PACKAGE_JSON_WORKSPACES,[se.MONOREPO]),Zn(Re.CARGO_BASE,Ji,{projectType:mt.RUST,tags:[mt.RUST]}),Be(Re.CARGO_TOKIO,Ji,Ge.CARGO_TOKIO,[se.TOKIO,se.ASYNC]),Be(Re.CARGO_ACTIX,Ji,Ge.CARGO_ACTIX,[se.ACTIX,se.BACKEND]),Be(Re.CARGO_SERDE,Ji,Ge.CARGO_SERDE,[se.SERDE]),Be(Re.CARGO_TAURI,Ji,Ge.CARGO_TAURI,[se.TAURI,se.DESKTOP]),Zn(Re.PYTHON_BASE,Lo,{projectType:mt.PYTHON,tags:[mt.PYTHON]}),Be(Re.PYTHON_DJANGO,Lo,Ge.PYTHON_DJANGO,[se.DJANGO,se.BACKEND]),Be(Re.PYTHON_FASTAPI,Lo,Ge.PYTHON_FASTAPI,[se.FASTAPI,se.BACKEND]),Be(Re.PYTHON_PANDAS,Lo,Ge.PYTHON_PANDAS,[se.PANDAS,se.DATA]),Zn(Re.GO_BASE,Ym,{projectType:mt.GO,tags:[mt.GO]}),Be(Re.GO_GIN,Ym,Ge.GO_GIN,[se.GIN,se.BACKEND]),{id:Re.TSCONFIG_STRICT,matchesFile:_C,detect:t=>/"strict"\s*:\s*true/.test(t)?{tags:[se.STRICT_TS]}:null},Zn(Re.VITE_PRESENCE,Hu(Ur.VITE_CONFIG),{tags:[se.VITE,se.BUILD_TOOL]}),Zn(Re.DRIZZLE_PRESENCE,Hu(Ur.DRIZZLE_CONFIG),{tags:[se.DRIZZLE,se.DATABASE]}),Zn(Re.TAURI_PRESENCE,Hu(Ur.TAURI_CONF),{tags:[se.TAURI,se.DESKTOP]})],SC=[`**/${oe.PACKAGE_JSON}`,`**/${oe.CARGO_TOML}`,`**/${oe.PYPROJECT_TOML}`,`**/${oe.REQUIREMENTS_TXT}`,`**/${oe.GO_MOD}`,`**/${oe.TSCONFIG_JSON}`,`**/${Ur.VITE_CONFIG}.*`,`**/${Ur.DRIZZLE_CONFIG}.*`,`**/${Ur.WEBPACK_CONFIG}.*`,`**/${Ur.TAURI_CONF}.*`],TC=[...yo,"target/**","venv/**",".venv/**","**/fixtures/**","**/__fixtures__/**","**/test-data/**"],Co=class{constructor(e=me()){this.logger=e}logger;async scanConfigs(e){let r=mt.UNKNOWN,n=new Set;try{let i=await(0,Wm.default)(SC,{cwd:e,ignore:TC,absolute:!0,deep:3});r=await this.scanAllConfigFiles(i,n),r=this.resolveJavascriptFallback(r,n)}catch(i){this.logger.warn(Ct.CONFIG_SCAN_FAILED,{error:i?.message??String(i)})}return r===mt.UNKNOWN&&(r=mt.GENERIC),n.size===0&&n.add(mp),{projectType:r,tags:Array.from(n)}}async scanAllConfigFiles(e,r){let n=mt.UNKNOWN;for(let i of e){let s=await this.readConfigFileContent(i);if(s===null)continue;let o=hC.basename(i),a=this.applyDetectionRules(o,s,r);a&&(n=a)}return n}async readConfigFileContent(e){try{return await mC.readFile(e,H)}catch{return null}}applyDetectionRules(e,r,n){let i;for(let s of EC){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(ar.TYPESCRIPT)||r.has(ar.REACT)||r.has(ar.EXPRESS)||r.has(ar.VUE))&&e===mt.UNKNOWN?mt.JAVASCRIPT:e}};var Bu=".",RC=["packages","artifacts","crates"],AC="domain:";function OC(t){return t[0]===zi&&t.length>1||t.length>3&&RC.includes(t[0])&&t[2]===zi?t[1]:(t.length>2&&t[1]===zi,t[0])}function yC(t){let e=t.split("/");if(e.length<=1||e[0].startsWith(Bu)||Um.includes(e[0]))return null;let r=OC(e);return r.includes(Bu)||r.startsWith(Bu)||Hm.includes(r)?null:r}var Po=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(`${AC}${a}`);o.length>0&&this.logger.debug(Ct.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=yC(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 vC from"os";import{Worker as IC}from"worker_threads";import*as Qi from"path";import*as Hr from"fs";import{fileURLToPath as LC}from"url";import CC from"crypto";var NC=LC(import.meta.url),jm=Qi.dirname(NC),Do={FORMAT:"esm",PLATFORM:"node",TARGET:"node20",EXTERNAL_TREE_SITTER:"web-tree-sitter"},qi={EVAL:"--eval",PRINT:"--print",IMPORT:"--import",TSX_LOADER:"tsx"};async function PC(t,e){let r=await import("esbuild"),n=`${e}.${process.pid}.tmp`;await r.build({entryPoints:[t],outfile:n,bundle:!0,format:Do.FORMAT,platform:Do.PLATFORM,target:Do.TARGET,external:[Do.EXTERNAL_TREE_SITTER]}),Hr.renameSync(n,e)}function DC(t,e){return Hr.existsSync(e)?Hr.existsSync(t)?Hr.statSync(t).mtimeMs>Hr.statSync(e).mtimeMs:!1:!0}var Xi=class extends Error{constructor(r,n){super(je.workerCrashWhileParsing(r??je.UNKNOWN_FILE)+(n instanceof Error?n.message:String(n)));this.filePath=r;this.cause=n;this.name=Tp}filePath;cause},vo=class{constructor(e=me(),r=3e4,n,i){this.logger=e;this.taskTimeoutMs=r;this.cache=n;this.workerScriptPathOverride=i;this.ipcLogRouter=new qd(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 IC(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(je.WORKER_EXITED_DURING_SHUTDOWN,{taskId:s,filePath:o}):this.logger.error(je.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 Xi(o,i?new Error(je.taskTimedOutAfterMs(s,this.taskTimeoutMs)):n||new Error(je.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(je.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(qi.EVAL)&&!n.includes(qi.PRINT)),this.workerOptions.execArgv.some(n=>n.includes(qi.TSX_LOADER))||this.workerOptions.execArgv.push(qi.IMPORT,qi.TSX_LOADER);for(let n=0;n<e;n++)await this.enqueueSpawn();return}this.wPath=Qi.resolve(jm,"./ast-worker.js");let r=Qi.resolve(jm,"./ast-worker.ts");DC(r,this.wPath)&&await PC(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=CC.createHash(Jt).update(e.code).digest("hex");let o=performance.now(),a=this.cache.get(i),l=performance.now()-o;if(a){this.logger.debug(je.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(je.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(je.TASK_TIMED_OUT_TERMINATING,{taskId:n,filePath:this.taskFilePaths.get(n),taskTimeoutMs:this.taskTimeoutMs}),r.terminate().catch(s=>{this.logger.warn(je.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(je.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 bo=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,(vC.cpus().length||4)-1);await n.initialize(i);let s=u=>ys(u)??_p.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:ys(u.file)}};else{let f=d.error??je.PARSE_FAILURE_NO_DETAIL;this.logger.warn(je.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 Xi||d instanceof Error?d.message:String(d);this.logger.error(je.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 es from"path";import*as et from"path";import*as gt from"fs";import*as Fo from"fs";import wo from"path";function fn(t,e){let r=wo.resolve(t),n=wo.resolve(r,e),i=r.endsWith(wo.sep)?r:r+wo.sep;return n===r||n.startsWith(i)?n:null}function ei(t,e){let r=fn(t,e);if(!r||!Fo.existsSync(r))return null;try{return Fo.readFileSync(r,H)}catch{return null}}function Vm(t){return t.replace(/\\"|"(?:\\"|[^"])*"|(\/\/.*|\/\*[\s\S]*?\*\/)/g,(e,r)=>r?"":e)}var bC="tsconfig.base.json",wC="pnpm-workspace.yaml",FC="index.js",MC="src",kC="index",Mo="*",zm=".",Jm=[".ts",".js",".tsx",".jsx",".py",".rs",".go",".java",".cpp",".cc",".c",".h",".hpp"],GC=["/index.ts","/index.js"],qm=".go",Qm={TSCONFIG_PARSE_FAILED:"Failed to JSON-parse tsconfig.json",TSCONFIG_FILES_READ_FAILED:"Failed to read or parse tsconfig files"},Ku="*",xC="node:",UC=/^(@[^/]+\/[^/]+|[^/]+)/,ti=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(Qm.TSCONFIG_FILES_READ_FAILED,{error:e?.message??String(e)})}}mergeProjectTsConfigPaths(){let e=et.join(this.workspaceRoot,oe.TSCONFIG_JSON);if(!gt.existsSync(e))return;let r=gt.readFileSync(e,H),n=Vm(r);try{let i=JSON.parse(n);i.compilerOptions&&i.compilerOptions.paths&&(this.tsConfigPaths={...this.tsConfigPaths,...i.compilerOptions.paths})}catch(i){this.logger.debug(Qm.TSCONFIG_PARSE_FAILED,{error:i instanceof Error?i.message:String(i)})}}mergeBaseTsConfigPaths(){let e=et.join(this.workspaceRoot,bC);if(!gt.existsSync(e))return;let r=gt.readFileSync(e,H),n=Vm(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(qm)){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(qm)){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===Ku?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===Ku?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(xC))return!0;if(r.startsWith(zm))return!1;let n=UC.exec(r)?.[1];if(n&&this.getWorkspacePackageDirs().has(n)||this.matchesTsConfigAlias(r))return!1;let i=this.resolveModulePath(e,r);return i?i.startsWith(`${at}/`)||i.includes(`/${at}/`):!0}matchesTsConfigAlias(e){return Object.keys(this.tsConfigPaths).some(r=>e.startsWith(r.replace(Mo,"")))}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===Ku?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(zm)){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(Mo,"");if(r.startsWith(s)){let o=r.slice(s.length);for(let a of i){let l=a.replace(Mo,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(Mo),i=(n>=0?e.slice(0,n):e).replace(/\/$/,""),s=fn(this.workspaceRoot,i);if(!s||!gt.existsSync(s))return;let o;try{o=gt.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(gt.existsSync(s))try{let o=JSON.parse(gt.readFileSync(s,H));o.name&&i.set(o.name,et.posix.join(e,n.name))}catch{}}getWorkspaceGlobs(){try{let e=ei(this.workspaceRoot,wC);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=ei(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,MC,kC),s=this.findFileWithExtension(i);return s||this.findFileWithExtension(n)}resolveNodeModulesImport(e,r){try{let n=ei(this.workspaceRoot,et.join(at,e,oe.PACKAGE_JSON));if(!n)return null;let i=JSON.parse(n),s=r||i.module||i.main||FC,o=et.posix.join(at,e,s);return fn(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=fn(this.workspaceRoot,n);if(!(!i||!gt.existsSync(i))&&!(r&&!gt.statSync(i).isFile()))return n}return null}findFileWithExtension(e){let r=this.firstExisting([e],!0);if(r)return r;let n=this.firstExisting(Jm.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(Jm.map(o=>i+o));if(s)return s}return this.firstExisting(GC.map(i=>e+i))}};function hn(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 Zi(t,e,r){return r?`${t}#${r}.${e}`:`${t}#${e}`}function HC(){return{total:0,resolved:0,selfDiscarded:0,unresolvable:0,external:0,unknownReceiver:0}}function BC(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 Go=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 ti(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?Or(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:Rr.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=hn(o,Zi(n.file,a.name,a.containerName),a.startLine);o.add(l);let c=e.graph.insertNode({projectId:r,name:a.name,type:Rr.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=hn(o,`${n.file}#${a.name}`,a.startLine);o.add(l);let c=e.graph.insertNode({projectId:r,name:a.name,type:Rr.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=hn(o,`${n.file}#${a.name}`,a.startLine);o.add(l);let c=e.graph.insertNode({projectId:r,name:a.name,type:Rr.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=HC();this.linkParsedResultRelations(e,r,c,u,s,o,p),p.total>0&&(a[c.file]=BC(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 I=this.classifyUnresolvedCall(r,n,c,f);I==="external"?d.external++:I==="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!==Sp?e?.get(r):void 0)??n}};var KC=new Set(["child_process","node:child_process"]),Xm=new Set(["execFile","execFileSync","spawn","spawnSync","fork"]),Zm=[".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs"],e_=/\.(?:js|jsx|mjs|cjs)$/,t_="*";function $C(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function YC(t){return[...(t.data.functions??[]).map(e=>e.name),...(t.data.classes??[]).map(e=>e.name),...(t.data.variables??[]).map(e=>e.name)]}var xo=class{base=new Go;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 ti(e);for(let i of r)n.registerFile(i.file,i.data.imports??[],[],YC(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=ei(r,i.file);if(!s)return;let o=e.graph.findNodeIdByName(i.file,i.file);if(o)for(let a of i.data.imports??[])KC.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 Xm.has(e.originalName)&&e.originalName!==t_?[{api:e.originalName,localExpression:e.localName}]:e.originalName===t_?[...Xm].map(r=>({api:r,localExpression:`${e.localName}.${r}`})):[]}extractLiteralProcessTargets(e,r,n){let i=$C(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(es.posix.normalize(es.posix.join(es.posix.dirname(e),i))),s.add(es.posix.normalize(i.replace(/^\//,"")));for(let o of s){if(n.has(o))return o;if(e_.test(o)){let a=o.replace(e_,"");for(let l of Zm){let c=`${a}${l}`;if(n.has(c))return c}}else for(let a of Zm){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 ri from"fs/promises";import ns from"path";import{tracingChannel as WC,channel as jC}from"diagnostics_channel";var Ve=jC("lru-cache:metrics"),ts=WC("lru-cache"),VC=typeof performance=="object"&&performance&&typeof performance.now=="function"?performance:Date,$u=()=>Ve.hasSubscribers||ts.hasSubscribers,n_=new Set,r_=typeof process=="object"&&process?process:{},zC=(t,e,r,n)=>{typeof r_.emitWarning=="function"?r_.emitWarning(t,e,r,n):console.error(`[${r}] ${e}: ${t}`)},JC=t=>!n_.has(t),Br=t=>!!t&&t===Math.floor(t)&&t>0&&isFinite(t),i_=t=>Br(t)?t<=Math.pow(2,8)?Uint8Array:t<=Math.pow(2,16)?Uint16Array:t<=Math.pow(2,32)?Uint32Array:t<=Number.MAX_SAFE_INTEGER?Uo:null:null,Uo=class extends Array{constructor(t){super(t),this.fill(0)}},qC=class rs{heap;length;static#t=!1;static create(e){let r=i_(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]}},s_=class o_{#t;#s;#c;#P;#_;#M;#k;#E;get perf(){return this.#E}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;#R;#A;#f;#h;#O;#G;#p;#D;static unsafeExposeInternals(e){return{starts:e.#A,ttls:e.#f,autopurgeTimers:e.#h,sizes:e.#R,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.#y(r),rindexes:r=>e.#I(r),isStale:r=>e.#m(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.#_}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:I,fetchMethod:C,memoMethod:L,noDeleteOnFetchRejection:b,noDeleteOnStaleGet:Q,allowStaleOnFetchRejection:J,allowStaleOnFetchAbort:$,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.#E=ne??VC,r!==0&&!Br(r))throw new TypeError("max option must be a nonnegative integer");let pe=r?i_(r):Array;if(!pe)throw new Error("invalid max value: "+r);if(this.#t=r,this.#s=m,this.maxEntrySize=_||this.#s,this.sizeCalculation=I,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(L!==void 0&&typeof L!="function")throw new TypeError("memoMethod must be a function if defined");if(this.#k=L,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=qC.create(r),this.#o=0,this.#S=0,typeof c=="function"&&(this.#c=c),typeof u=="function"&&(this.#P=u),typeof p=="function"?(this.#_=p,this.#l=[]):(this.#_=void 0,this.#l=void 0),this.#O=!!this.#c,this.#D=!!this.#P,this.#p=!!this.#_,this.noDisposeOnSet=!!d,this.noUpdateTTL=!!f,this.noDeleteOnFetchRejection=!!b,this.allowStaleOnFetchRejection=!!J,this.allowStaleOnFetchAbort=!!$,this.ignoreFetchAbort=!!te,this.maxEntrySize!==0){if(this.#s!==0&&!Br(this.#s))throw new TypeError("maxSize must be a positive integer if specified");if(!Br(this.maxEntrySize))throw new TypeError("maxEntrySize must be a positive integer if specified");this.#z()}if(this.allowStale=!!l,this.noDeleteOnStaleGet=!!Q,this.updateAgeOnGet=!!o,this.updateAgeOnHas=!!a,this.ttlResolution=Br(i)||i===0?i:1,this.ttlAutopurge=!!s,this.ttl=n||0,this.ttl){if(!Br(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";JC(N)&&(n_.add(N),zC("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.","UnboundedCacheWarning",N,o_))}}getRemainingTTL(e){return this.#i.has(e)?1/0:0}#B(){let e=new Uo(this.#t),r=new Uo(this.#t);this.#f=e,this.#A=r;let n=this.ttlAutopurge?Array.from({length:this.#t}):void 0;this.#h=n,this.#K=(l,c,u=this.#E.now())=>{r[l]=c!==0?u:0,e[l]=c,i(l,c)},this.#v=l=>{r[l]=e[l]!==0?this.#E.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.#m(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.#E.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.#m=l=>{let c=r[l],u=e[l];return!!u&&!!c&&(s||o())-c>u}}#v=()=>{};#C=()=>{};#K=()=>{};#m=()=>!1;#z(){let e=new Uo(this.#t);this.#S=0,this.#R=e,this.#b=r=>{this.#S-=e[r],e[r]=0},this.#$=(r,n,i,s)=>{if(!Br(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),!Br(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};*#y({allowStale:e=this.allowStale}={}){if(this.#o)for(let r=this.#a;this.#Y(r)&&((e||!this.#m(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.#m(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.#y())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.#y()){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.#y())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.#y()){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.#y()){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.#m(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.#A){let o=this.#f[r],a=this.#A[r];if(o&&a){let l=o-(this.#E.now()-a);s.ttl=l,s.start=Date.now()}}return this.#R&&(s.size=this.#R[r]),s}dump(){let e=[];for(let r of this.#y({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.#A){o.ttl=this.#f[r];let a=this.#E.now()-this.#A[r];o.start=Math.floor(Date.now()-a)}this.#R&&(o.size=this.#R[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.#E.now()-i}this.#N(r,n.value,n)}}set(e,r,n={}){let{status:i=Ve.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&&Ve.hasSubscribers&&Ve.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.#O&&this.#c?.(_,e,"set"),this.#p&&this.#l?.push([_,e,"set"]))}else this.#O&&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,I=_===void 0?"add":r!==_?"replace":"update";c&&(c.set=I,_!==void 0&&(c.oldValue=_)),this.#D&&this.onInsert?.(r,e,I)}}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.#_?.(..._)}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.#_?.(...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.#O||this.#p)&&o!==void 0&&(this.#O&&this.#c?.(o,n,"evict"),this.#p&&this.#l?.push([o,n,"evict"])),this.#b(r),this.#h?.[r]&&(clearTimeout(this.#h[r]),this.#h[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=Ve.hasSubscribers?{}:void 0}=r;r.status=n,n&&(n.op="has",n.key=e,n.cache=this);let i=this.#J(e,r);return Ve.hasSubscribers&&Ve.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.#m(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=$u()?{}:void 0}=r;n&&(n.op="peek",n.key=e,n.cache=this),r.status=n;let i=this.#q(e,r);return Ve.hasSubscribers&&Ve.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.#m(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=(_,I=!1)=>{let{aborted:C}=o.signal,L=n.ignoreFetchAbort&&_!==void 0,b=n.ignoreFetchAbort||!!(n.allowStaleOnFetchAbort&&_!==void 0);if(n.status&&(C&&!I?(n.status.fetchAborted=!0,n.status.fetchError=o.signal.reason,L&&(n.status.fetchAbortIgnored=!0)):n.status.fetchResolved=!0),C&&!L&&!I)return p(o.signal.reason,b);let Q=f,J=this.#e[r];return(J===f||J===void 0&&L&&I)&&(_===void 0?Q.__staleWhileFetching!==void 0?this.#e[r]=Q.__staleWhileFetching:this.#L(e,"fetch"):(n.status&&(n.status.fetchUpdated=!0),this.#N(e,_,l.options,Q))),_},u=_=>(n.status&&(n.status.fetchRejected=!0,n.status.fetchError=_),p(_,!1)),p=(_,I)=>{let{aborted:C}=o.signal,L=C&&n.allowStaleOnFetchAbort,b=L||n.allowStaleOnFetchRejection,Q=b||n.noDeleteOnFetchRejection,J=f;if(this.#e[r]===f&&(!Q||!I&&J.__staleWhileFetching===void 0?this.#L(e,"fetch"):L||(this.#e[r]=J.__staleWhileFetching)),b)return n.status&&J.__staleWhileFetching!==void 0&&(n.status.returnedStale=!0),J.__staleWhileFetching;if(J.__returned===J)throw _},d=(_,I)=>{let C=this.#M?.(e,s,l);o.signal.addEventListener("abort",()=>{(!n.ignoreFetchAbort||n.allowStaleOnFetchAbort)&&(_(void 0),n.allowStaleOnFetchAbort&&(_=L=>c(L,!0)))}),C&&C instanceof Promise?C.then(L=>_(L===void 0?void 0:L),I):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=ts.hasSubscribers,{status:i=$u()?{}: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,ts.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:I=!1,status:C,signal:L}=r;if(C&&(C.op="fetch",C.key=e,I&&(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 b={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:L},Q=this.#i.get(e);if(Q===void 0){C&&(C.fetch="miss");let J=this.#H(e,Q,b,_);return J.__returned=J}else{let J=this.#e[Q];if(this.#r(J)){let ne=n&&J.__staleWhileFetching!==void 0;return C&&(C.fetch="inflight",ne&&(C.returnedStale=!0)),ne?J.__staleWhileFetching:J.__returned=J}let $=this.#m(Q);if(!I&&!$)return C&&(C.fetch="hit"),this.#F(Q),i&&this.#v(Q),C&&this.#C(C,Q),J;let te=this.#H(e,Q,b,_),M=te.__staleWhileFetching!==void 0&&n;return C&&(C.fetch=$?"stale":"refresh",M&&$&&(C.returnedStale=!0)),M?te.__staleWhileFetching:te.__returned=te}}forceFetch(e,r={}){let n=ts.hasSubscribers,{status:i=$u()?{}: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,ts.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=Ve.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),Ve.hasSubscribers&&Ve.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=Ve.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),Ve.hasSubscribers&&Ve.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.#m(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){Ve.hasSubscribers&&Ve.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.#h?.[i]&&(clearTimeout(this.#h[i]),this.#h[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.#O||this.#p)&&(this.#O&&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.#_?.(...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.#O&&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.#A){this.#f.fill(0),this.#A.fill(0);for(let r of this.#h??[])r!==void 0&&clearTimeout(r);this.#h?.fill(void 0)}if(this.#R&&this.#R.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.#_?.(...n)}}};var QC="tmp",fr={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"},Ho=class{constructor(e,r=me(),n=1024*1024*1024,i=14400*1e3,s=1800*1e3){this.logger=r;let o=ns.resolve(e);this.tempDir=ns.join(o,_e,QC),this.ttlMs=i,this.lruCache=new s_({max:1e4,maxSize:n,sizeCalculation:a=>a.sizeBytes,ttl:i,allowStale:!1})}logger;tempDir;lruCache;cleanupInterval=null;concurrencyLimit=sn(5);ttlMs;async initialize(){try{await ri.mkdir(this.tempDir,{recursive:!0});let e=ns.dirname(ns.dirname(this.tempDir)),[r,n]=await Promise.all([ri.realpath(e),ri.realpath(this.tempDir)]);if(!n.startsWith(r+ns.sep))throw new E(A.FS_PATH_TRAVERSAL,`Resolved temp directory "${n}" escapes workspace root "${r}" \u2014 possible path traversal via symlink`);this.logger.info(fr.INITIALIZED,{tempDir:this.tempDir}),this.startCleanupSchedule(1800*1e3)}catch(e){throw e instanceof E||this.logger.error(fr.INIT_FAILED,{error:e instanceof Error?e.message:String(e)}),e}}async trackFile(e){return this.concurrencyLimit(async()=>{try{let r=await ri.stat(e),n={filePath:e,createdAt:Date.now(),lastAccessedAt:Date.now(),sizeBytes:r.size};this.lruCache.set(e,n),this.logger.debug(fr.FILE_TRACKED,{filePath:e,sizeBytes:r.size})}catch(r){this.logger.warn(fr.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 ri.readFile(e,H)}catch(r){return this.logger.warn(fr.ACCESS_FAILED,{filePath:e,error:r instanceof Error?r.message:String(r)}),null}})}async removeFileSync(e){try{await ri.unlink(e),this.logger.debug(fr.FILE_REMOVED,{filePath:e})}catch(r){if(r?.code!==Ls)throw r}}startCleanupSchedule(e){this.cleanupInterval=setInterval(()=>{this.cleanup().catch(r=>{this.logger.error(fr.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(fr.CLEANUP_COMPLETED,{removedCount:r.length,cacheSize:this.lruCache.size})}catch(e){this.logger.error(fr.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 Bo={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}`},XC=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"]),ZC=5,eN=25;function tN(t){return Math.max(t*ZC,eN)}function a_(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 Ko=class{constructor(e=me()){this.logger=e}logger;extractKeywords(e){let r=e.split(/[^\w./-]+/).map(n=>n.trim()).filter(n=>n.length>0&&!XC.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=Ni(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(Bo.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=tN(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)));a_(e.fts.searchL2Nodes(o,l),o.length>1?c():[]).slice(0,n).forEach((f,m)=>s({layer:tn.L2,id:f.id,title:f.name,content:f.description,score:.9-m*.01,matchType:"keyword"})),a_(e.fts.searchL3Nodes(o,l),o.length>1?u():[]).slice(0,n).forEach((f,m)=>s({layer:tn.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:tn.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:tn.L2,id:u.id,title:u.name,content:Bo.linkedTo(l.name),score:.7-p*.01,matchType:"neighbor"})))}return this.logger.debug(Bo.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===tn.L2),o=i.filter(c=>c.layer===tn.L3),a=null;try{a=this.getContext(e,r)}catch(c){this.logger.debug(Bo.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 $o=class extends $n{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 iN=2e3,sN="(ungrouped)",oN=".",Yo=class{build(e,r={}){let n=e.l2Rows.map(b=>({id:b.id,name:b.name,filePath:mN(b.path_patterns),type:b.type})),i=e.linkRows.map(b=>({sourceNodeId:b.source_node_id,targetNodeId:b.target_node_id,linkType:b.link_type,commitSha:b.commit_sha??void 0,diffSummary:b.diff_summary??void 0})),s=e.l3Rows.map(b=>({id:b.id,l2NodeId:b.l2_node_id,title:b.title,content:b.content??void 0,nodeType:b.node_type,confidence:b.confidence??void 0,validityStatus:b.validity_status,sourceCommits:_N(b.source_commits)})),o=e.tagRows,a=aN(n),l=lN(i),c=cN(o),u=r.maxNodes??iN,p=n.length+s.length,d=uN(r,p,u),f=d?fN(n,i,s,l,a):gN(n,i,s,l,a),m=f.nodes,_=f.links,I=new Set(m.map(b=>b.id)),C=_.filter(b=>I.has(b.source)&&I.has(b.target)),L=dN(m,c);return pN(m,C),{topologyVersion:2,generatedAt:new Date().toISOString(),workspaceRoot:e.workspaceRoot,collapsed:d,nodes:m,links:C,groups:L,stats:{nodeCount:m.length,linkCount:C.length,groupCount:L.length,foldedLinkCount:f.foldedLinkCount??0}}}};function aN(t){let e=new Map;for(let r of t)e.set(String(r.id),r.filePath);return e}function lN(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 cN(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 uN(t,e,r){return t.collapse===Nl.FILE||t.collapse!==Nl.SYMBOL&&e>r}function dN(t,e){let r=new Map,n=[];for(let i of t){let s=hN(i.filePath),o=r.get(s);if(o===void 0&&(o=n.length,r.set(s,o),n.push({id:o,label:s,source:Zd.DIRECTORY,count:0})),i.group=o,n[o].count++,i.kind===Mt.FILE){let a=e.get(i.id.slice("l2:".length));a&&a.length&&(i.tags=a)}}return n}function pN(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 gN(t,e,r,n,i){let s=t.map(a=>({id:yt(a.id),label:a.name,kind:n.has(String(a.id))?Mt.SYMBOL:Mt.FILE,group:0,filePath:i.get(String(a.id)),degree:0,l2Type:a.type})),o=e.map(a=>({source:yt(a.sourceNodeId),target:yt(a.targetNodeId),linkType:a.linkType,confidence:1,commitSha:a.commitSha,diffSummary:a.diffSummary}));return l_(s,o,r,i),{nodes:s,links:o,foldedLinkCount:0}}function fN(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:yt(u.id),label:u.name,kind:Mt.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:yt(p),target:yt(d),linkType:u.linkType,confidence:1,commitSha:u.commitSha,diffSummary:u.diffSummary}))}return l_(o,a,r,i),{nodes:o,links:a,foldedLinkCount:c}}function l_(t,e,r,n){let i=new Set(t.map(s=>s.id));for(let s of r){let o=yt(s.l2NodeId);i.has(o)&&(t.push({id:Yl(s.id),label:s.title,kind:Mt.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:Yl(s.id),target:o,linkType:de.DECISION,confidence:1}))}}function hN(t){if(!t)return sN;let r=t.split("\\").join("/").split("/").filter(Boolean);return r.length<=1?oN:r.slice(0,Math.min(2,r.length-1)).join("/")}function mN(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 _N(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 u_ from"path";import*as d_ from"fs";import{Parser as c_,Language as EN}from"web-tree-sitter";var Wo={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 jo=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(Wo.DETECTOR_FAILED,{filePath:r,error:a instanceof Error?a.message:String(a)}),[]}}async getDetectorForFile(e){let r=await this.getRegistry(),n=u_.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??=c_.init(),await this.parserInitPromise;let{wasmPath:o,attemptedPaths:a}=Op(i.wasm_file);if(!d_.existsSync(o)){this.logger.debug(Wo.NO_GRAMMAR_AVAILABLE,{filePath:e,wasmFile:i.wasm_file,attemptedPaths:a}),this.detectors.set(i.wasm_file,null);return}try{let l=await EN.load(o),c=new c_,u=new Ap(c,l);return this.detectors.set(i.wasm_file,u),u}catch(l){this.logger.warn(Wo.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??=Rp(),this.registryPromise}};import f_ from"fs";import Vo from"path";import{execFile as SN}from"child_process";import{promisify as TN}from"util";var Wu=TN(SN),RN=[".cmd",".CMD",".exe",""];function Yu(t,e){return e?{...t,env:e}:t}function AN(t,e){let r=Vo.join(t,at,".bin"),n=process.platform==="win32"?RN.map(i=>`${e}${i}`):[e];for(let i of n){let s=Vo.join(r,i);if(f_.existsSync(s))return s}}function tr(t,e,r){let n=e.buildEnv?.();if(r?.binary)return Yu({command:r.binary,args:r.args??e.defaultArgs,locallyResolved:!0,fromUserOverride:!0},n);let i=e.binaryName??e.packageName,s=AN(t,i);if(s)return Yu({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 Yu({command:"npx",args:o,locallyResolved:!1},n)}var p_=5e3,ON=5e3;async function yN(t){try{if(process.platform==="win32"){let{stdout:n}=await Wu("where",[t],{timeout:p_});return n.split(/\r?\n/).map(i=>i.trim()).find(i=>i.length>0)}let{stdout:e}=await Wu("sh",["-c",`command -v ${t}`],{timeout:p_}),r=e.trim();return r.length>0?r:void 0}catch{return}}function IN(t,e){if(!e)return;let r=process.platform==="win32"?[`${t}.exe`,t]:[t];for(let n of e)for(let i of r){let s=Vo.join(n,i);if(f_.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 yN(t.binaryName);if(r)return{command:r,args:t.defaultArgs,locallyResolved:!0};let n=IN(t.binaryName,t.extraCandidateDirs);return n?{command:n,args:t.defaultArgs,locallyResolved:!0}:{command:t.binaryName,args:t.defaultArgs,locallyResolved:!1}}function g_(t){let e=t.trim().replace(/\\/g,"/");return Vo.posix.basename(e).replace(/\.exe$/i,"").toLowerCase()}async function h_(t,e=ON,r){if(r&&!r.some(n=>g_(n)===g_(t)))return!1;try{return await Wu(t,["--version"],{timeout:e}),!0}catch{return!1}}var Nt={PACKAGE_NAME:"typescript-language-server",NPX_COMMAND:"npx",NPX_NO_INSTALL_FLAG:"--no-install",STDIO_ARG:"--stdio",VERSION_FLAG:"--version"},zo=8192,ni={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 LN=["PATH","HOME","USERPROFILE","PATHEXT","SYSTEMROOT","COMSPEC","LANG","LC_ALL","TERM"];function m_(){let t={};for(let e of LN){let r=process.env[e];r!==void 0&&(t[e]=r)}return t}function CN(){let t=m_(),e=process.env.NODE_OPTIONS??"";if(e.includes("--max-old-space-size"))return t.NODE_OPTIONS=e,t;let r=`--max-old-space-size=${zo}`;return t.NODE_OPTIONS=e?`${e} ${r}`:r,t}function Jo(t,e){return tr(t,{packageName:Nt.PACKAGE_NAME,defaultArgs:[Nt.STDIO_ARG],buildEnv:CN},e)}import qo from"fs";import Qo from"path";import{execFile as FN}from"child_process";import{promisify as MN}from"util";import NN from"path";import{execFile as PN}from"child_process";import{promisify as DN}from"util";var vN=DN(PN),bN=new Set([".cmd",".bat",".ps1"]),__=new Set(["npx"]);function Kr(t){return process.platform!=="win32"?!1:bN.has(NN.extname(t).toLowerCase())||__.has(t.toLowerCase())}function ju(t){return`"${t.replace(/"/g,'""')}"`}var wN=5e3;async function Vu(t,e){try{let{stdout:r}=await vN("where",[t],{timeout:wN,env:e});return r.split(/\r?\n/).map(i=>i.trim()).find(i=>i.length>0)??t}catch{return t}}function zu(t){return __.has(t.toLowerCase())}async function ii(t,e,r){return[zu(t)?await Vu(t,r):t,...e].map(ju).join(" ")}var E_=MN(FN),S_=5e3,kN=[oe.TSCONFIG_JSON,oe.JSCONFIG_JSON];function GN(t){return qo.existsSync(Qo.join(t,at))}function xN(t){return!!(kN.some(r=>qo.existsSync(Qo.join(t,r)))||qo.existsSync(Qo.join(t,"tsconfig.base.json"))||qo.existsSync(Qo.join(t,"src",oe.TSCONFIG_JSON)))}async function UN(t){let e=[Nt.NPX_NO_INSTALL_FLAG,Nt.PACKAGE_NAME,Nt.VERSION_FLAG];try{if(Kr(Nt.NPX_COMMAND)){let r=await ii(Nt.NPX_COMMAND,e,void 0);await E_(r,[],{cwd:t,timeout:S_,shell:!0})}else await E_(Nt.NPX_COMMAND,e,{cwd:t,timeout:S_});return!0}catch{return!1}}async function T_(t,e){let r=GN(t),n=xN(t);if(!r)return{nodeModulesPresent:r,tsconfigResolvable:n,lspBinaryResolvable:!1,ready:!1,reason:ni.nodeModulesMissing};if(!n)return{nodeModulesPresent:r,tsconfigResolvable:n,lspBinaryResolvable:!1,ready:!1,reason:ni.tsconfigMissing};let s=Jo(t,e).locallyResolved?!0:await UN(t);return s?{nodeModulesPresent:r,tsconfigResolvable:n,lspBinaryResolvable:s,ready:!0}:{nodeModulesPresent:r,tsconfigResolvable:n,lspBinaryResolvable:s,ready:!1,reason:ni.binaryUnresolvable}}import rP from"fs/promises";import Ju from"os";import si from"path";import{pathToFileURL as C_,fileURLToPath as N_}from"url";import{spawn as R_}from"child_process";var mn={CONTENT_LENGTH_HEADER_PREFIX:"Content-Length: ",HEADER_BODY_SEPARATOR:`\r
134
134
  \r
135
- `,JSON_RPC_VERSION:"2.0"},Ht={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"},hr={NAMESPACE:3,CLASS:5,METHOD:6,CONSTRUCTOR:9,FUNCTION:12,OBJECT:19},ze={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)`};var HN=["PATH","HOME","USERPROFILE","PATHEXT","SYSTEMROOT","COMSPEC","LANG","LC_ALL","TERM"];function BN(){let t={};for(let e of HN){let r=process.env[e];r!==void 0&&(t[e]=r)}return t}function A_(){return["pipe","pipe","pipe"]}var KN=4e3,Xo=class{child;buffer=Buffer.alloc(0);nextId=1;pending=new Map;stopped=!1;stderrTail="";async start(e){let r=Kr(e.command),n=e.env??BN(),i=r&&zu(e.command)?await Vu(e.command,e.env):e.command,s=r?R_([i,...e.args].map(ju).join(" "),{cwd:e.cwd,stdio:A_(),shell:!0,env:n}):R_(e.command,e.args,{cwd:e.cwd,stdio:A_(),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)),await new Promise((o,a)=>{let l=!1;s.once("spawn",()=>{l=!0,o()}),s.once("error",c=>{l||(l=!0,a(c))})})}request(e,r,n){if(!this.child||this.stopped)return Promise.reject(new Error(ze.clientNotRunning(e)));let i=this.nextId++;return new Promise((s,o)=>{let a=n>0?setTimeout(()=>{this.pending.delete(i),o(new Error(ze.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:mn.JSON_RPC_VERSION,id:i,method:e,params:r})})}notify(e,r){!this.child||this.stopped||this.write({jsonrpc:mn.JSON_RPC_VERSION,method:e,params:r})}async stop(){if(!this.child||this.stopped)return;this.stopped=!0;let e=this.child;this.child=void 0,this.rejectAllPending(new Error(ze.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=`${mn.CONTENT_LENGTH_HEADER_PREFIX}${Buffer.byteLength(r,H)}`+mn.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(mn.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+mn.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(-KN)}onExit(e){this.stopped=!0,this.rejectAllPending(new Error(ze.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 is from"fs";import $e from"path";var $N=[{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 YN(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=>is.existsSync($e.join(t,s)))),!i&&e.suffixes.length>0)try{i=is.readdirSync(t).some(s=>e.suffixes.some(o=>s.endsWith(o)))}catch{i=!1}return r.set(t,i),i}function WN(t,e,r,n){let i=$e.dirname($e.join(t,e));for(;;){if(YN(i,r,n))return i;if(i===t)return t;let s=$e.dirname(i);if(s===i)return t;i=s}}function jN(t){let e=Zo(t,oe.CARGO_TOML);if(e===void 0)return[];let r=[],n="";for(let i of e.split(/\r?\n/)){let s=i.trim(),o=s.match(/^\[(.+)\]$/);if(o){n=o[1].trim().toLowerCase();continue}if(n==="workspace"){for(let a of s.matchAll(/"([^"]+)"/g))r.push(a[1]);continue}if(n.includes("dependencies")||n.startsWith("patch")||n.startsWith("replace"))for(let a of s.matchAll(/path\s*=\s*"([^"]+)"/g))r.push(a[1])}return r.map(i=>O_(t,i))}function VN(t){let e=Zo(t,oe.GO_MOD);if(e===void 0)return[];let r=[];for(let n of e.split(/\r?\n/)){let i=n.trim().match(/^replace\s+\S+\s+=>\s+(\S+)\s*$/);if(!i)continue;let s=i[1];!s.startsWith(".")&&!$e.isAbsolute(s)||r.push(s)}return r.map(n=>O_(t,n))}function zN(t){return[...qN(t),...QN(t)]}function JN(t,e){if(!e.includes("*"))return[$e.resolve(t,e)];let r=$e.resolve(t,$e.dirname(e)),n=$e.basename(e);try{return is.readdirSync(r).filter(i=>n==="*"||i.includes(n.slice(0,n.indexOf("*")))).map(i=>$e.join(r,i))}catch{return[]}}function qN(t){let e=y_(t,oe.PACKAGE_JSON);if(e===void 0)return[];let r=e.workspaces,n=Array.isArray(r)?r:typeof r=="object"&&r!==null&&Array.isArray(r.packages)?r.packages:[],i=[];for(let s of n)typeof s=="string"&&i.push(...JN(t,s));return i}function QN(t){let e=y_(t,oe.TSCONFIG_JSON);if(e===void 0)return[];let r=[],n=e.references;if(Array.isArray(n))for(let s of n){if(typeof s!="object"||s===null)continue;let o=s.path;typeof o=="string"&&r.push($e.resolve(t,o))}let i=e.extends;return typeof i=="string"&&r.push($e.resolve(t,i)),r}function XN(t){let e=[],r=[];try{r=is.readdirSync(t)}catch{return e}for(let n of r){if(!n.endsWith(".csproj"))continue;let i=Zo(t,n);if(i!==void 0)for(let s of i.matchAll(/<ProjectReference[^>]*Include\s*=\s*"([^"]+)"/g)){let o=$e.resolve(t,s[1].split("\\").join("/"));e.push($e.dirname(o))}}return e}function Zo(t,e){try{return is.readFileSync($e.join(t,e),"utf8")}catch{return}}function y_(t,e){let r=Zo(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 O_(t,e){return $e.normalize($e.resolve(t,e))}function ZN(t,e){switch(e){case B.RUST:return jN(t);case B.GO:return VN(t);case B.TYPESCRIPT:return zN(t);case B.CSHARP:return XN(t);default:return[]}}function eP(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 I_(t){let e=$e.resolve(t.workspaceRoot),r=$N.find(a=>a.languageId===t.languageId)??null,n=new Map,i=new Map,s=new Map;for(let a of t.files){let l=r?WN(e,a,r,n):e;s.set(a,l);let c=i.get(l);c?c.push(a):i.set(l,[a])}let o=[];for(let[a,l]of i)o.push({root:a,files:l,deps:r?ZN(a,t.languageId):[]});return{groups:eP(o),fileToProjectRoot:s}}var tP="LSP file path resolves outside the configured workspace root";function L_(t,e){let r=fn(t,e);if(!r)throw new E(y.FS_PATH_TRAVERSAL,tP);return r}var nP=12e4,iP=3e4,sP=200,oP=512,aP=.25,ea=new Set([hr.FUNCTION,hr.METHOD,hr.CONSTRUCTOR,hr.CLASS]),lP=new Set([hr.CLASS]);function P_(t,e){return e.has(t)}function oi(t){return t.split("\\").join("/")}var na=class extends Error{};function cP(t){return"location"in t}function uP(t){return t?t.map(e=>cP(e)?{name:e.name,kind:e.kind,range:e.location.range,selectionRange:e.location.range}:e):[]}function qu(t,e){return e.normalizeSymbolName?e.normalizeSymbolName(t):t}function dP(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 ta(t,e,r,n){for(let i of t){if(!dP(i.range,e))continue;let s=P_(i.kind,r)?i.name:n;return(i.children?ta(i.children,e,r,s):void 0)??{symbol:i,containerName:n}}}function ra(t,e,r){let n=[];for(let i of t)if(ea.has(i.kind)&&n.push({symbol:i,containerName:r}),i.children){let s=P_(i.kind,e)?i.name:r;n.push(...ra(i.children,e,s))}return n}var xe=class{name;config={};logger;createClient;languageConfig;containmentKinds;constructor(e,r,n=()=>new Xo){this.languageConfig=e,this.name=e.name,this.logger=r??he(),this.createClient=n,this.containmentKinds=e.containmentSymbolKinds??lP}configure(e){this.config=e}get requestTimeoutMs(){return this.config.timeoutMs??iP}get maxOpenFiles(){return this.config.maxOpenFiles??sP}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(Ju.availableParallelism(),e))}processMemoryEstimateMb(){return this.config.processMemoryEstimateMb??this.languageConfig.processMemoryEstimateMb??oP}maxProcessMemoryMb(){return this.config.maxProcessMemoryMb!==void 0?this.config.maxProcessMemoryMb:Math.max(Math.round(Ju.totalmem()/1024/1024*aP),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(ze.concurrencyClamped(r,n)),n}effectiveProcesses(e){let r=this.maxProcesses,n=Math.floor(this.maxProcessMemoryMb()/this.processMemoryEstimateMb()),i=Ju.availableParallelism(),s=Math.max(1,Math.min(r,e,i,n));return s!==r&&(this.logger.debug(ze.processShardsClamped(r,s)),s<r&&n<Math.min(r,e,i)&&this.logger.debug(ze.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??nP,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=I_({workspaceRoot:e.workspaceRoot,languageId:this.languageConfig.tierBLanguageId,files:e.files}).groups,s=(d,f)=>{let m={};for(let _ of f){let I=e.callsByFile?.[_];I&&(m[_]=I)}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:ze.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(ze.initializeFailed(p)),{edges:[],filesProcessed:[],filesFailed:[],unavailableReason:d}):{edges:[],filesProcessed:[],filesFailed:[],unavailableReason:ze.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=ra(l.symbols,this.containmentKinds);if(c.length===0)continue;if(o=!0,(await Promise.all(c.map(({symbol:p})=>e.request(Ht.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=C_(r).toString();await e.request(Ht.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(Ht.INITIALIZED,{})}async shutdownSession(e){try{await e.request(Ht.SHUTDOWN,null,this.requestTimeoutMs),e.notify(Ht.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 L=c++;if(L>=n.length)return;let w=n[L];a.pinnedPaths.add(w);try{let Q=await this.runOneSlot(e,r,w,i,a,C,o);l[L]=Q,!Q.ok&&Q.deadlineExceeded&&(u=!0)}finally{a.pinnedPaths.delete(w)}}},d=this.effectiveConcurrency(n.length);await Promise.allSettled(Array.from({length:d},()=>p()));let f=[],m=new Set,_=[],I=[];for(let C=0;C<n.length;C++){let L=l[C];if(L)if(L.ok){_.push(n[C]);for(let w of L.edges){let Q=`${w.sourceNodeKey}->${w.targetNodeKey}`;m.has(Q)||(m.add(Q),f.push(w))}}else I.push({file:n[C],reason:L.reason,retryable:L.deadlineExceeded})}return u&&this.markUnreachedFilesFailed(n,_,I,o),{edges:f,filesProcessed:_,filesFailed:I,...u?{unavailableReason:ze.batchTimedOut(o)}:{}}}raceAgainstDeadline(e,r){return new Promise((n,i)=>{let s=setTimeout(()=>i(new na),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 na)return{ok:!1,deadlineExceeded:!0,reason:ze.batchTimedOut(a)};let c=l instanceof Error?l.message:String(l);return this.logger.warn(ze.resolutionFailedForFile(n),{error:c}),this.closeAndEvict(e,n,s),{ok:!1,deadlineExceeded:!1,reason:c}}}closeOpenFile(e,r,n){n.delete(r.relativePath),e.notify(Ht.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:ze.batchTimedOut(i),retryable:!0})}qualifiedContainerName(e){if(!(!this.languageConfig.supportsQualifiedContainment||!e))return qu(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=[...ra(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 _=hn(a.used,Zi(r,qu(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=hn(a.used,Zi(r,qu(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=ra(s.symbols,this.containmentKinds),a=await Promise.all(o.map(({symbol:c})=>e.request(Ht.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=oi(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(Ht.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=ta(o.symbols,{line:u,character:p},this.containmentKinds),m=f&&ea.has(f.symbol.kind)?oi(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:Il.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(ze.skippedMultiLocationDefinition(n)),l}}async resolveTargetNodeKey(e,r,n,i,s){let o=si.relative(r,N_(i.uri));if(si.isAbsolute(o)||o.startsWith(".."))return;let a=oi(o);if(a===n)return;let l=await this.openAndGetSymbols(e,r,a,s),c=ta(l.symbols,i.range.start,this.containmentKinds);return c&&ea.has(c.symbol.kind)?oi(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,N_(n.uri));if(si.isAbsolute(a)||a.startsWith(".."))return;let l=oi(a);if(l===s)return;let c=await this.openAndGetSymbols(e,r,l,o),u=ta(c.symbols,n.range.start,this.containmentKinds);return{sourceNodeKey:u&&ea.has(u.symbol.kind)?oi(this.resolveNodeKeyForFile(o,l,c.symbols,u.symbol.name,u.symbol.selectionRange.start.line,u.containerName)):l,targetNodeKey:i,source:Il.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=L_(r,n),o=await rP.readFile(s,H),a=C_(s).toString();e.notify(Ht.DID_OPEN,{textDocument:{uri:a,languageId:this.languageIdFor(n),version:1,text:o}});let l=await e.request(Ht.DOCUMENT_SYMBOL,{textDocument:{uri:a}},this.requestTimeoutMs),c=uP(l),u={relativePath:n,uri:a,symbols:c};return i.openFileCache.set(n,u),u}};var ia="typescript",pP={".ts":ia,".mts":ia,".cts":ia,".tsx":"typescriptreact",".js":"javascript",".mjs":"javascript",".cjs":"javascript",".jsx":"javascriptreact"},gP={name:Nt.PACKAGE_NAME,tierBLanguageId:B.TYPESCRIPT,languageIdByExtension:pP,defaultLanguageId:ia,resolveBinary:Jo,checkPreflight:T_,supportsQualifiedContainment:!0,initializationOptions:{maxTsServerMemory:zo},definitionResolution:"forward",unavailableReasonForUnresolvableBinary:ni.binaryUnresolvable},sa=class extends xe{constructor(e,r){super(gP,e,r)}};import fP from"fs";import hP from"path";import{execFile as mP}from"child_process";import{promisify as _P}from"util";var it={PACKAGE_NAME:"pyright",BINARY_NAME:"pyright-langserver",NPX_COMMAND:"npx",NPX_NO_INSTALL_FLAG:"--no-install",STDIO_ARG:"--stdio",VERSION_FLAG:"--version"},ss={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 D_=_P(mP),v_=5e3,EP=[oe.PYPROJECT_TOML,oe.REQUIREMENTS_TXT];function SP(t){return EP.some(e=>fP.existsSync(hP.join(t,e)))}async function TP(t){let e=[it.NPX_NO_INSTALL_FLAG,it.PACKAGE_NAME,it.VERSION_FLAG];try{if(Kr(it.NPX_COMMAND)){let r=await ii(it.NPX_COMMAND,e,void 0);await D_(r,[],{cwd:t,timeout:v_,shell:!0})}else await D_(it.NPX_COMMAND,e,{cwd:t,timeout:v_});return!0}catch{return!1}}async function w_(t,e){let r=SP(t),i=tr(t,{packageName:it.PACKAGE_NAME,binaryName:it.BINARY_NAME,defaultArgs:[it.STDIO_ARG]},e).locallyResolved?!0:await TP(t);return r?i?{markerFileResolvable:r,lspBinaryResolvable:i,ready:!0}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:ss.binaryUnresolvable}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:ss.markerFileMissing}}var b_="python",RP={".py":b_},AP={name:it.PACKAGE_NAME,tierBLanguageId:B.PYTHON,languageIdByExtension:RP,defaultLanguageId:b_,resolveBinary:(t,e)=>tr(t,{packageName:it.PACKAGE_NAME,binaryName:it.BINARY_NAME,defaultArgs:[it.STDIO_ARG]},e),checkPreflight:w_,supportsQualifiedContainment:!0,definitionResolution:"reverse",unavailableReasonForUnresolvableBinary:ss.binaryUnresolvable},oa=class extends xe{constructor(e,r){super(AP,e,r)}};import yP from"fs";import Xu from"path";import OP from"os";var _n={BINARY_NAME:"gopls",DEFAULT_ARGS:[]};function F_(t){let e=/^\((\*?)([^(]*)\)\.(.+)$/.exec(t);if(!e)return t;let[,,r,n]=e;return`${r}.${n}`}var Qu={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 IP(t){return yP.existsSync(Xu.join(t,oe.GO_MOD))}function LP(){let t=[];return process.env.GOBIN&&t.push(process.env.GOBIN),process.env.GOPATH&&t.push(Xu.join(process.env.GOPATH,"bin")),t.push(Xu.join(OP.homedir(),"go","bin")),t}async function M_(t,e){let r=IP(t),i=(await Pe({binaryName:_n.BINARY_NAME,defaultArgs:_n.DEFAULT_ARGS,extraCandidateDirs:LP()},e)).locallyResolved;return r?i?{markerFileResolvable:r,lspBinaryResolvable:i,ready:!0}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:Qu.binaryUnresolvable}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:Qu.markerFileMissing}}var k_="go",CP={".go":k_},NP={name:_n.BINARY_NAME,tierBLanguageId:B.GO,languageIdByExtension:CP,defaultLanguageId:k_,resolveBinary:(t,e)=>Pe({binaryName:_n.BINARY_NAME,defaultArgs:_n.DEFAULT_ARGS},e),checkPreflight:M_,supportsQualifiedContainment:!1,normalizeSymbolName:F_,definitionResolution:"reverse"},aa=class extends xe{constructor(e,r){super(NP,e,r)}};import kP from"path";import GP from"os";import PP from"fs";import Zu from"path";import DP from"os";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 $r={BINARY_NAME:"rust-analyzer",DEFAULT_ARGS:[]},ca={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 G_(t){return t.startsWith("impl ")?t.slice(5):t}function vP(t){return PP.existsSync(Zu.join(t,oe.CARGO_TOML))}var wP=new la;function bP(t){return Zu.join(t.env.CARGO_HOME??Zu.join(DP.homedir(),".cargo"),"bin")}var FP=5e3;async function MP(t,e){return h_(t,FP,e)}async function x_(t,e,r=wP){let n=vP(t),i=await Pe({binaryName:$r.BINARY_NAME,defaultArgs:$r.DEFAULT_ARGS,extraCandidateDirs:[bP(r)]},e),s=i.locallyResolved,o=!s||await MP(i.command,i.fromUserOverride?void 0:[$r.BINARY_NAME]);return n?s?o?{markerFileResolvable:n,lspBinaryResolvable:s,lspBinarySpawnable:o,ready:!0}:{markerFileResolvable:n,lspBinaryResolvable:s,lspBinarySpawnable:o,ready:!1,reason:ca.binaryNotSpawnable}:{markerFileResolvable:n,lspBinaryResolvable:s,lspBinarySpawnable:o,ready:!1,reason:ca.binaryUnresolvable}:{markerFileResolvable:n,lspBinaryResolvable:s,lspBinarySpawnable:o,ready:!1,reason:ca.markerFileMissing}}var U_="rust",xP={".rs":U_};function UP(){return kP.join(GP.homedir(),".cargo","bin")}var HP={name:$r.BINARY_NAME,tierBLanguageId:B.RUST,languageIdByExtension:xP,defaultLanguageId:U_,resolveBinary:(t,e)=>Pe({binaryName:$r.BINARY_NAME,defaultArgs:$r.DEFAULT_ARGS,extraCandidateDirs:[UP()]},e),checkPreflight:x_,supportsQualifiedContainment:!0,containmentSymbolKinds:new Set([hr.CLASS,hr.OBJECT]),normalizeSymbolName:G_,definitionResolution:"reverse",coldStartSettleMs:8e3,processMemoryEstimateMb:2048},ua=class extends xe{constructor(e,r){super(HP,e,r)}};import BP from"fs";import H_ from"path";var En={BINARY_NAME:"clangd",DEFAULT_ARGS:[]},ed={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 KP=["compile_commands.json","CMakeLists.txt"];function $P(t){return KP.some(e=>BP.existsSync(H_.join(t,e)))}function YP(){return process.platform==="win32"?[H_.join(process.env.ProgramFiles??"C:\\Program Files","LLVM","bin")]:process.platform==="darwin"?["/opt/homebrew/opt/llvm/bin","/usr/local/opt/llvm/bin"]:["/usr/lib/llvm/bin","/usr/local/bin"]}async function B_(t,e){let r=$P(t),i=(await Pe({binaryName:En.BINARY_NAME,defaultArgs:En.DEFAULT_ARGS,extraCandidateDirs:YP()},e)).locallyResolved;return r?i?{markerFileResolvable:r,lspBinaryResolvable:i,ready:!0}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:ed.binaryUnresolvable}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:ed.markerFileMissing}}var mr="cpp",WP={".c":"c",".h":"c",".cpp":mr,".cxx":mr,".cc":mr,".hpp":mr,".hxx":mr,".hh":mr,".cu":mr,".cuh":mr},jP={name:En.BINARY_NAME,tierBLanguageId:B.CPP,languageIdByExtension:WP,defaultLanguageId:mr,resolveBinary:(t,e)=>Pe({binaryName:En.BINARY_NAME,defaultArgs:En.DEFAULT_ARGS},e),checkPreflight:B_,supportsQualifiedContainment:!1,definitionResolution:"reverse"},da=class extends xe{constructor(e,r){super(jP,e,r)}};import VP from"fs";import pa from"path";import K_ from"os";var Sn={BINARY_NAME:"jdtls",DEFAULT_ARGS:[]},td={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 zP=["pom.xml","build.gradle"];function JP(t){return zP.some(e=>VP.existsSync(pa.join(t,e)))}function qP(){return process.platform==="win32"?[pa.join(K_.homedir(),"scoop","shims"),pa.join(process.env.ChocolateyInstall??"C:\\ProgramData\\chocolatey","bin")]:process.platform==="darwin"?["/opt/homebrew/bin","/usr/local/bin"]:["/usr/local/bin","/usr/bin",pa.join(K_.homedir(),".local","share","jdtls","bin")]}async function $_(t,e){let r=JP(t),i=(await Pe({binaryName:Sn.BINARY_NAME,defaultArgs:Sn.DEFAULT_ARGS,extraCandidateDirs:qP()},e)).locallyResolved;return r?i?{markerFileResolvable:r,lspBinaryResolvable:i,ready:!0}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:td.binaryUnresolvable}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:td.markerFileMissing}}var Y_="java",QP={".java":Y_},XP={name:Sn.BINARY_NAME,tierBLanguageId:B.JAVA,languageIdByExtension:QP,defaultLanguageId:Y_,resolveBinary:(t,e)=>Pe({binaryName:Sn.BINARY_NAME,defaultArgs:Sn.DEFAULT_ARGS},e),checkPreflight:$_,supportsQualifiedContainment:!0,definitionResolution:"reverse"},ga=class extends xe{constructor(e,r){super(XP,e,r)}};import ZP from"fs";import eD from"path";import tD from"os";var Tn={BINARY_NAME:"csharp-ls",DEFAULT_ARGS:[]},rd={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 rD(){return eD.join(tD.homedir(),".dotnet","tools")}function nD(t){try{return ZP.readdirSync(t).some(r=>r.endsWith(".sln")||r.endsWith(".slnx")||r.endsWith(".csproj"))}catch{return!1}}async function W_(t,e){let r=nD(t),i=(await Pe({binaryName:Tn.BINARY_NAME,defaultArgs:Tn.DEFAULT_ARGS,extraCandidateDirs:[rD()]},e)).locallyResolved;return r?i?{markerFileResolvable:r,lspBinaryResolvable:i,ready:!0}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:rd.binaryUnresolvable}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:rd.markerFileMissing}}var j_="csharp",iD={".cs":j_},sD={name:Tn.BINARY_NAME,tierBLanguageId:B.CSHARP,languageIdByExtension:iD,defaultLanguageId:j_,resolveBinary:(t,e)=>Pe({binaryName:Tn.BINARY_NAME,defaultArgs:Tn.DEFAULT_ARGS},e),checkPreflight:W_,supportsQualifiedContainment:!0,definitionResolution:"reverse"},fa=class extends xe{constructor(e,r){super(sD,e,r)}};import oD from"fs";import aD from"path";import{execFile as lD}from"child_process";import{promisify as cD}from"util";var Tt={PACKAGE_NAME:"intelephense",NPX_COMMAND:"npx",NPX_NO_INSTALL_FLAG:"--no-install",STDIO_ARG:"--stdio",VERSION_FLAG:"--version"},os={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 V_=cD(lD),z_=5e3;function uD(t){return oD.existsSync(aD.join(t,"composer.json"))}async function dD(t){let e=[Tt.NPX_NO_INSTALL_FLAG,Tt.PACKAGE_NAME,Tt.VERSION_FLAG];try{if(Kr(Tt.NPX_COMMAND)){let r=await ii(Tt.NPX_COMMAND,e,void 0);await V_(r,[],{cwd:t,timeout:z_,shell:!0})}else await V_(Tt.NPX_COMMAND,e,{cwd:t,timeout:z_});return!0}catch{return!1}}async function J_(t,e){let r=uD(t),i=tr(t,{packageName:Tt.PACKAGE_NAME,defaultArgs:[Tt.STDIO_ARG]},e).locallyResolved?!0:await dD(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 Rn="php",pD={".php":Rn,".phtml":Rn,".php3":Rn,".php4":Rn,".php5":Rn,".phps":Rn},gD={name:Tt.PACKAGE_NAME,tierBLanguageId:B.PHP,languageIdByExtension:pD,defaultLanguageId:Rn,resolveBinary:(t,e)=>tr(t,{packageName:Tt.PACKAGE_NAME,defaultArgs:[Tt.STDIO_ARG]},e),checkPreflight:J_,supportsQualifiedContainment:!0,definitionResolution:"reverse",unavailableReasonForUnresolvableBinary:os.binaryUnresolvable},ha=class extends xe{constructor(e,r){super(gD,e,r)}};import fD from"fs";import id from"path";import hD from"os";var An={BINARY_NAME:"ruby-lsp",DEFAULT_ARGS:[]},nd={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 mD=["Gemfile","Gemfile.lock"];function _D(t){return mD.some(e=>fD.existsSync(id.join(t,e)))}function ED(){if(process.platform==="win32")return[];let t=hD.homedir();return[id.join(t,".rbenv","shims"),id.join(t,".rvm","bin")]}async function q_(t,e){let r=_D(t),i=(await Pe({binaryName:An.BINARY_NAME,defaultArgs:An.DEFAULT_ARGS,extraCandidateDirs:ED()},e)).locallyResolved;return r?i?{markerFileResolvable:r,lspBinaryResolvable:i,ready:!0}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:nd.binaryUnresolvable}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:nd.markerFileMissing}}var ma="ruby",SD={".rb":ma,".rake":ma,".gemspec":ma},TD={name:An.BINARY_NAME,tierBLanguageId:B.RUBY,languageIdByExtension:SD,defaultLanguageId:ma,resolveBinary:(t,e)=>Pe({binaryName:An.BINARY_NAME,defaultArgs:An.DEFAULT_ARGS},e),checkPreflight:q_,supportsQualifiedContainment:!0,definitionResolution:"reverse"},_a=class extends xe{constructor(e,r){super(TD,e,r)}};import ai from"fs/promises";var RD={maxWaitMs:1e4,retryIntervalMs:100,heartbeatIntervalMs:1e4,staleAfterMs:3e4};function AD(t){return new Promise(e=>setTimeout(e,t))}function yD(t){try{return process.kill(t,0),!0}catch(e){return e.code===rn}}async function OD(t){try{let e=Number.parseInt(await ai.readFile(t,H),10);return Number.isFinite(e)?e:void 0}catch{return}}async function ID(t,e){let r=await ai.stat(t).catch(()=>{});if(!r||Date.now()-r.mtimeMs<=e)return!1;let n=await OD(t);return n!==void 0&&yD(n)?!1:(await ai.rm(t,{force:!0}).catch(()=>{}),!0)}function LD(t){let e=t.code;return e===vn||e===rn||e===wn||e===bn}async function CD(t){try{let e=await ai.open(t,"wx");return await e.writeFile(String(process.pid)),await e.close(),!0}catch(e){if(!LD(e))throw e;return!1}}async function Q_(t,e={}){let r={...RD,...e},n=Date.now()+r.maxWaitMs,i=!1;for(;!await CD(t);)if(i||(i=!0,e.onWaiting?.()),!await ID(t,r.staleAfterMs)){if(Date.now()>n)throw new Cs(t);await AD(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(()=>{}))}}}A.register(T.KnowledgeGitService,(t,e)=>new Bs(t.resolve(T.GitProvider),e?.logger,e?.gitNetworkTimeoutMs));A.register(T.FileDiscovery,(t,e)=>new Io(t.resolve(T.GitProvider),e?.logger));A.register(T.ConfigScanner,(t,e)=>new Co(e?.logger));A.register(T.VcsScanner,(t,e)=>new Po(t.resolve(T.GitProvider),e?.logger));var ND=new vo;A.register(T.AstProcessor,(t,e)=>new wo(ND,e?.logger));A.register(T.GraphPersister,()=>new xo);A.register(T.TempFileManager,()=>(t,e)=>new Ho(t,e));A.register(T.ProcessLock,()=>Q_);A.register(T.QueryService,(t,e)=>new Ko(e?.logger));A.register(T.TierBCoverageHintProvider,()=>({resolve:Ni}));A.register(T.ImpactService,(t,e)=>new $o(e?.logger));A.register(T.ChangeDetectionService,(t,e)=>new $s(t.resolve(T.ImpactService,e),e?.logger));A.register(T.TopologyBuilder,()=>new Yo);A.register(T.SnapshotRenderer,()=>new Ks);A.register(T.HydrationService,(t,e)=>new Ys(t.resolve(T.GitProvider),e?.logger));A.register(T.SemanticDiffAnalyzer,(t,e)=>new jo(e?.logger));A.register(T.EdgeResolutionProviders,(t,e)=>({typescript:()=>new sa(e?.logger),python:()=>new oa(e?.logger),go:()=>new aa(e?.logger),rust:()=>new ua(e?.logger),cpp:()=>new da(e?.logger),java:()=>new ga(e?.logger),csharp:()=>new fa(e?.logger),php:()=>new ha(e?.logger),ruby:()=>new _a(e?.logger)}));var Yr={METHOD_POST:"POST",HEADER_AUTHORIZATION:"Authorization",HEADER_CONTENT_TYPE:"Content-Type",CONTENT_TYPE_JSON:"application/json",bearerAuth:t=>`Bearer ${t}`};var rr={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 sd={l2Nodes:t=>`/projects/${t}/l2-nodes`,SYNC_PUSH:"/sync/push"};function X_(t,e){if(typeof t!="object"||t===null||Array.isArray(t))throw new TypeError(`${e} must be an object`);return t}function Z_(t,e){if(typeof t!="number"||!Number.isFinite(t))throw new TypeError(`${e} must be a finite number`);return t}function eE(t){if(!Array.isArray(t))throw new TypeError("response must be an array");for(let[e,r]of t.entries()){let n=X_(r,`response[${e}]`);if(Z_(n.id,`response[${e}].id`),typeof n.name!="string")throw new TypeError(`response[${e}].name must be a string`)}return t}function tE(t){let e=X_(t,"response");if(typeof e.success!="boolean")throw new TypeError("response.success must be a boolean");return Z_(e.processed,"response.processed"),t}var rE=3e4,as=class{config;initialize(e){this.config=e}getConfig(){if(!this.config)throw new E(y.SYNC_FETCH_FAILED,rr.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}${sd.l2Nodes(e)}`,{headers:{[Yr.HEADER_AUTHORIZATION]:Yr.bearerAuth(n)},signal:AbortSignal.timeout(rE)})}catch(o){throw E.wrap(y.SYNC_FETCH_FAILED,rr.FETCH_L2_NODES_FAILED,o)}if(!i.ok){let o=await this.parseErrorBody(i);throw new E(y.SYNC_FETCH_FAILED,rr.fetchL2NodesFailedWithReason(o))}let s;try{s=await i.json()}catch(o){throw E.wrap(y.SYNC_FETCH_FAILED,rr.FETCH_L2_NODES_INVALID_JSON,o)}try{return eE(s)}catch(o){throw E.wrap(y.SYNC_FETCH_FAILED,rr.FETCH_L2_NODES_INVALID_RESPONSE,o)}}async pushSyncEvents(e,r){let{apiUrl:n,pat:i}=this.getConfig(),s;try{s=await fetch(`${n}${sd.SYNC_PUSH}`,{method:Yr.METHOD_POST,headers:{[Yr.HEADER_CONTENT_TYPE]:Yr.CONTENT_TYPE_JSON,[Yr.HEADER_AUTHORIZATION]:Yr.bearerAuth(i)},body:JSON.stringify({projectId:Number(e),events:r}),signal:AbortSignal.timeout(rE)})}catch(a){throw E.wrap(y.SYNC_PUSH_FAILED,rr.SYNC_PUSH_FAILED,a)}if(!s.ok){let a=await this.parseErrorBody(s);throw new E(y.SYNC_PUSH_FAILED,rr.syncPushFailedWithReason(a))}let o;try{o=await s.json()}catch(a){throw E.wrap(y.SYNC_PUSH_FAILED,rr.SYNC_PUSH_INVALID_JSON,a)}try{return tE(o)}catch(a){throw E.wrap(y.SYNC_PUSH_FAILED,rr.SYNC_PUSH_INVALID_RESPONSE,a)}}};A.register(T.RemoteSyncClient,()=>()=>new as);var st={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:`
135
+ `,JSON_RPC_VERSION:"2.0"},Ht={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"},hr={NAMESPACE:3,CLASS:5,METHOD:6,CONSTRUCTOR:9,FUNCTION:12,OBJECT:19},ze={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)`};var HN=["PATH","HOME","USERPROFILE","PATHEXT","SYSTEMROOT","COMSPEC","LANG","LC_ALL","TERM"];function BN(){let t={};for(let e of HN){let r=process.env[e];r!==void 0&&(t[e]=r)}return t}function A_(){return["pipe","pipe","pipe"]}var KN=4e3,Xo=class{child;buffer=Buffer.alloc(0);nextId=1;pending=new Map;stopped=!1;stderrTail="";async start(e){let r=Kr(e.command),n=e.env??BN(),i=r&&zu(e.command)?await Vu(e.command,e.env):e.command,s=r?R_([i,...e.args].map(ju).join(" "),{cwd:e.cwd,stdio:A_(),shell:!0,env:n}):R_(e.command,e.args,{cwd:e.cwd,stdio:A_(),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)),await new Promise((o,a)=>{let l=!1;s.once("spawn",()=>{l=!0,o()}),s.once("error",c=>{l||(l=!0,a(c))})})}request(e,r,n){if(!this.child||this.stopped)return Promise.reject(new Error(ze.clientNotRunning(e)));let i=this.nextId++;return new Promise((s,o)=>{let a=n>0?setTimeout(()=>{this.pending.delete(i),o(new Error(ze.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:mn.JSON_RPC_VERSION,id:i,method:e,params:r})})}notify(e,r){!this.child||this.stopped||this.write({jsonrpc:mn.JSON_RPC_VERSION,method:e,params:r})}async stop(){if(!this.child||this.stopped)return;this.stopped=!0;let e=this.child;this.child=void 0,this.rejectAllPending(new Error(ze.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=`${mn.CONTENT_LENGTH_HEADER_PREFIX}${Buffer.byteLength(r,H)}`+mn.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(mn.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+mn.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(-KN)}onExit(e){this.stopped=!0,this.rejectAllPending(new Error(ze.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 is from"fs";import $e from"path";var $N=[{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 YN(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=>is.existsSync($e.join(t,s)))),!i&&e.suffixes.length>0)try{i=is.readdirSync(t).some(s=>e.suffixes.some(o=>s.endsWith(o)))}catch{i=!1}return r.set(t,i),i}function WN(t,e,r,n){let i=$e.dirname($e.join(t,e));for(;;){if(YN(i,r,n))return i;if(i===t)return t;let s=$e.dirname(i);if(s===i)return t;i=s}}function jN(t){let e=Zo(t,oe.CARGO_TOML);if(e===void 0)return[];let r=[],n="";for(let i of e.split(/\r?\n/)){let s=i.trim(),o=s.match(/^\[(.+)\]$/);if(o){n=o[1].trim().toLowerCase();continue}if(n==="workspace"){for(let a of s.matchAll(/"([^"]+)"/g))r.push(a[1]);continue}if(n.includes("dependencies")||n.startsWith("patch")||n.startsWith("replace"))for(let a of s.matchAll(/path\s*=\s*"([^"]+)"/g))r.push(a[1])}return r.map(i=>y_(t,i))}function VN(t){let e=Zo(t,oe.GO_MOD);if(e===void 0)return[];let r=[];for(let n of e.split(/\r?\n/)){let i=n.trim().match(/^replace\s+\S+\s+=>\s+(\S+)\s*$/);if(!i)continue;let s=i[1];!s.startsWith(".")&&!$e.isAbsolute(s)||r.push(s)}return r.map(n=>y_(t,n))}function zN(t){return[...qN(t),...QN(t)]}function JN(t,e){if(!e.includes("*"))return[$e.resolve(t,e)];let r=$e.resolve(t,$e.dirname(e)),n=$e.basename(e);try{return is.readdirSync(r).filter(i=>n==="*"||i.includes(n.slice(0,n.indexOf("*")))).map(i=>$e.join(r,i))}catch{return[]}}function qN(t){let e=O_(t,oe.PACKAGE_JSON);if(e===void 0)return[];let r=e.workspaces,n=Array.isArray(r)?r:typeof r=="object"&&r!==null&&Array.isArray(r.packages)?r.packages:[],i=[];for(let s of n)typeof s=="string"&&i.push(...JN(t,s));return i}function QN(t){let e=O_(t,oe.TSCONFIG_JSON);if(e===void 0)return[];let r=[],n=e.references;if(Array.isArray(n))for(let s of n){if(typeof s!="object"||s===null)continue;let o=s.path;typeof o=="string"&&r.push($e.resolve(t,o))}let i=e.extends;return typeof i=="string"&&r.push($e.resolve(t,i)),r}function XN(t){let e=[],r=[];try{r=is.readdirSync(t)}catch{return e}for(let n of r){if(!n.endsWith(".csproj"))continue;let i=Zo(t,n);if(i!==void 0)for(let s of i.matchAll(/<ProjectReference[^>]*Include\s*=\s*"([^"]+)"/g)){let o=$e.resolve(t,s[1].split("\\").join("/"));e.push($e.dirname(o))}}return e}function Zo(t,e){try{return is.readFileSync($e.join(t,e),"utf8")}catch{return}}function O_(t,e){let r=Zo(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 y_(t,e){return $e.normalize($e.resolve(t,e))}function ZN(t,e){switch(e){case B.RUST:return jN(t);case B.GO:return VN(t);case B.TYPESCRIPT:return zN(t);case B.CSHARP:return XN(t);default:return[]}}function eP(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 I_(t){let e=$e.resolve(t.workspaceRoot),r=$N.find(a=>a.languageId===t.languageId)??null,n=new Map,i=new Map,s=new Map;for(let a of t.files){let l=r?WN(e,a,r,n):e;s.set(a,l);let c=i.get(l);c?c.push(a):i.set(l,[a])}let o=[];for(let[a,l]of i)o.push({root:a,files:l,deps:r?ZN(a,t.languageId):[]});return{groups:eP(o),fileToProjectRoot:s}}var tP="LSP file path resolves outside the configured workspace root";function L_(t,e){let r=fn(t,e);if(!r)throw new E(A.FS_PATH_TRAVERSAL,tP);return r}var nP=12e4,iP=3e4,sP=200,oP=512,aP=.25,ea=new Set([hr.FUNCTION,hr.METHOD,hr.CONSTRUCTOR,hr.CLASS]),lP=new Set([hr.CLASS]);function P_(t,e){return e.has(t)}function oi(t){return t.split("\\").join("/")}var na=class extends Error{};function cP(t){return"location"in t}function uP(t){return t?t.map(e=>cP(e)?{name:e.name,kind:e.kind,range:e.location.range,selectionRange:e.location.range}:e):[]}function qu(t,e){return e.normalizeSymbolName?e.normalizeSymbolName(t):t}function dP(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 ta(t,e,r,n){for(let i of t){if(!dP(i.range,e))continue;let s=P_(i.kind,r)?i.name:n;return(i.children?ta(i.children,e,r,s):void 0)??{symbol:i,containerName:n}}}function ra(t,e,r){let n=[];for(let i of t)if(ea.has(i.kind)&&n.push({symbol:i,containerName:r}),i.children){let s=P_(i.kind,e)?i.name:r;n.push(...ra(i.children,e,s))}return n}var xe=class{name;config={};logger;createClient;languageConfig;containmentKinds;constructor(e,r,n=()=>new Xo){this.languageConfig=e,this.name=e.name,this.logger=r??me(),this.createClient=n,this.containmentKinds=e.containmentSymbolKinds??lP}configure(e){this.config=e}get requestTimeoutMs(){return this.config.timeoutMs??iP}get maxOpenFiles(){return this.config.maxOpenFiles??sP}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(Ju.availableParallelism(),e))}processMemoryEstimateMb(){return this.config.processMemoryEstimateMb??this.languageConfig.processMemoryEstimateMb??oP}maxProcessMemoryMb(){return this.config.maxProcessMemoryMb!==void 0?this.config.maxProcessMemoryMb:Math.max(Math.round(Ju.totalmem()/1024/1024*aP),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(ze.concurrencyClamped(r,n)),n}effectiveProcesses(e){let r=this.maxProcesses,n=Math.floor(this.maxProcessMemoryMb()/this.processMemoryEstimateMb()),i=Ju.availableParallelism(),s=Math.max(1,Math.min(r,e,i,n));return s!==r&&(this.logger.debug(ze.processShardsClamped(r,s)),s<r&&n<Math.min(r,e,i)&&this.logger.debug(ze.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??nP,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=I_({workspaceRoot:e.workspaceRoot,languageId:this.languageConfig.tierBLanguageId,files:e.files}).groups,s=(d,f)=>{let m={};for(let _ of f){let I=e.callsByFile?.[_];I&&(m[_]=I)}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:ze.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(ze.initializeFailed(p)),{edges:[],filesProcessed:[],filesFailed:[],unavailableReason:d}):{edges:[],filesProcessed:[],filesFailed:[],unavailableReason:ze.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=ra(l.symbols,this.containmentKinds);if(c.length===0)continue;if(o=!0,(await Promise.all(c.map(({symbol:p})=>e.request(Ht.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=C_(r).toString();await e.request(Ht.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(Ht.INITIALIZED,{})}async shutdownSession(e){try{await e.request(Ht.SHUTDOWN,null,this.requestTimeoutMs),e.notify(Ht.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 L=c++;if(L>=n.length)return;let b=n[L];a.pinnedPaths.add(b);try{let Q=await this.runOneSlot(e,r,b,i,a,C,o);l[L]=Q,!Q.ok&&Q.deadlineExceeded&&(u=!0)}finally{a.pinnedPaths.delete(b)}}},d=this.effectiveConcurrency(n.length);await Promise.allSettled(Array.from({length:d},()=>p()));let f=[],m=new Set,_=[],I=[];for(let C=0;C<n.length;C++){let L=l[C];if(L)if(L.ok){_.push(n[C]);for(let b of L.edges){let Q=`${b.sourceNodeKey}->${b.targetNodeKey}`;m.has(Q)||(m.add(Q),f.push(b))}}else I.push({file:n[C],reason:L.reason,retryable:L.deadlineExceeded})}return u&&this.markUnreachedFilesFailed(n,_,I,o),{edges:f,filesProcessed:_,filesFailed:I,...u?{unavailableReason:ze.batchTimedOut(o)}:{}}}raceAgainstDeadline(e,r){return new Promise((n,i)=>{let s=setTimeout(()=>i(new na),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 na)return{ok:!1,deadlineExceeded:!0,reason:ze.batchTimedOut(a)};let c=l instanceof Error?l.message:String(l);return this.logger.warn(ze.resolutionFailedForFile(n),{error:c}),this.closeAndEvict(e,n,s),{ok:!1,deadlineExceeded:!1,reason:c}}}closeOpenFile(e,r,n){n.delete(r.relativePath),e.notify(Ht.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:ze.batchTimedOut(i),retryable:!0})}qualifiedContainerName(e){if(!(!this.languageConfig.supportsQualifiedContainment||!e))return qu(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=[...ra(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 _=hn(a.used,Zi(r,qu(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=hn(a.used,Zi(r,qu(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=ra(s.symbols,this.containmentKinds),a=await Promise.all(o.map(({symbol:c})=>e.request(Ht.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=oi(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(Ht.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=ta(o.symbols,{line:u,character:p},this.containmentKinds),m=f&&ea.has(f.symbol.kind)?oi(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:Il.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(ze.skippedMultiLocationDefinition(n)),l}}async resolveTargetNodeKey(e,r,n,i,s){let o=si.relative(r,N_(i.uri));if(si.isAbsolute(o)||o.startsWith(".."))return;let a=oi(o);if(a===n)return;let l=await this.openAndGetSymbols(e,r,a,s),c=ta(l.symbols,i.range.start,this.containmentKinds);return c&&ea.has(c.symbol.kind)?oi(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,N_(n.uri));if(si.isAbsolute(a)||a.startsWith(".."))return;let l=oi(a);if(l===s)return;let c=await this.openAndGetSymbols(e,r,l,o),u=ta(c.symbols,n.range.start,this.containmentKinds);return{sourceNodeKey:u&&ea.has(u.symbol.kind)?oi(this.resolveNodeKeyForFile(o,l,c.symbols,u.symbol.name,u.symbol.selectionRange.start.line,u.containerName)):l,targetNodeKey:i,source:Il.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=L_(r,n),o=await rP.readFile(s,H),a=C_(s).toString();e.notify(Ht.DID_OPEN,{textDocument:{uri:a,languageId:this.languageIdFor(n),version:1,text:o}});let l=await e.request(Ht.DOCUMENT_SYMBOL,{textDocument:{uri:a}},this.requestTimeoutMs),c=uP(l),u={relativePath:n,uri:a,symbols:c};return i.openFileCache.set(n,u),u}};var ia="typescript",pP={".ts":ia,".mts":ia,".cts":ia,".tsx":"typescriptreact",".js":"javascript",".mjs":"javascript",".cjs":"javascript",".jsx":"javascriptreact"},gP={name:Nt.PACKAGE_NAME,tierBLanguageId:B.TYPESCRIPT,languageIdByExtension:pP,defaultLanguageId:ia,resolveBinary:Jo,checkPreflight:T_,supportsQualifiedContainment:!0,initializationOptions:{maxTsServerMemory:zo},definitionResolution:"forward",unavailableReasonForUnresolvableBinary:ni.binaryUnresolvable},sa=class extends xe{constructor(e,r){super(gP,e,r)}};import fP from"fs";import hP from"path";import{execFile as mP}from"child_process";import{promisify as _P}from"util";var it={PACKAGE_NAME:"pyright",BINARY_NAME:"pyright-langserver",NPX_COMMAND:"npx",NPX_NO_INSTALL_FLAG:"--no-install",STDIO_ARG:"--stdio",VERSION_FLAG:"--version"},ss={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 D_=_P(mP),v_=5e3,EP=[oe.PYPROJECT_TOML,oe.REQUIREMENTS_TXT];function SP(t){return EP.some(e=>fP.existsSync(hP.join(t,e)))}async function TP(t){let e=[it.NPX_NO_INSTALL_FLAG,it.PACKAGE_NAME,it.VERSION_FLAG];try{if(Kr(it.NPX_COMMAND)){let r=await ii(it.NPX_COMMAND,e,void 0);await D_(r,[],{cwd:t,timeout:v_,shell:!0})}else await D_(it.NPX_COMMAND,e,{cwd:t,timeout:v_});return!0}catch{return!1}}async function b_(t,e){let r=SP(t),i=tr(t,{packageName:it.PACKAGE_NAME,binaryName:it.BINARY_NAME,defaultArgs:[it.STDIO_ARG]},e).locallyResolved?!0:await TP(t);return r?i?{markerFileResolvable:r,lspBinaryResolvable:i,ready:!0}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:ss.binaryUnresolvable}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:ss.markerFileMissing}}var w_="python",RP={".py":w_},AP={name:it.PACKAGE_NAME,tierBLanguageId:B.PYTHON,languageIdByExtension:RP,defaultLanguageId:w_,resolveBinary:(t,e)=>tr(t,{packageName:it.PACKAGE_NAME,binaryName:it.BINARY_NAME,defaultArgs:[it.STDIO_ARG]},e),checkPreflight:b_,supportsQualifiedContainment:!0,definitionResolution:"reverse",unavailableReasonForUnresolvableBinary:ss.binaryUnresolvable},oa=class extends xe{constructor(e,r){super(AP,e,r)}};import OP from"fs";import Xu from"path";import yP from"os";var _n={BINARY_NAME:"gopls",DEFAULT_ARGS:[]};function F_(t){let e=/^\((\*?)([^(]*)\)\.(.+)$/.exec(t);if(!e)return t;let[,,r,n]=e;return`${r}.${n}`}var Qu={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 IP(t){return OP.existsSync(Xu.join(t,oe.GO_MOD))}function LP(){let t=[];return process.env.GOBIN&&t.push(process.env.GOBIN),process.env.GOPATH&&t.push(Xu.join(process.env.GOPATH,"bin")),t.push(Xu.join(yP.homedir(),"go","bin")),t}async function M_(t,e){let r=IP(t),i=(await Pe({binaryName:_n.BINARY_NAME,defaultArgs:_n.DEFAULT_ARGS,extraCandidateDirs:LP()},e)).locallyResolved;return r?i?{markerFileResolvable:r,lspBinaryResolvable:i,ready:!0}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:Qu.binaryUnresolvable}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:Qu.markerFileMissing}}var k_="go",CP={".go":k_},NP={name:_n.BINARY_NAME,tierBLanguageId:B.GO,languageIdByExtension:CP,defaultLanguageId:k_,resolveBinary:(t,e)=>Pe({binaryName:_n.BINARY_NAME,defaultArgs:_n.DEFAULT_ARGS},e),checkPreflight:M_,supportsQualifiedContainment:!1,normalizeSymbolName:F_,definitionResolution:"reverse"},aa=class extends xe{constructor(e,r){super(NP,e,r)}};import kP from"path";import GP from"os";import PP from"fs";import Zu from"path";import DP from"os";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 $r={BINARY_NAME:"rust-analyzer",DEFAULT_ARGS:[]},ca={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 G_(t){return t.startsWith("impl ")?t.slice(5):t}function vP(t){return PP.existsSync(Zu.join(t,oe.CARGO_TOML))}var bP=new la;function wP(t){return Zu.join(t.env.CARGO_HOME??Zu.join(DP.homedir(),".cargo"),"bin")}var FP=5e3;async function MP(t,e){return h_(t,FP,e)}async function x_(t,e,r=bP){let n=vP(t),i=await Pe({binaryName:$r.BINARY_NAME,defaultArgs:$r.DEFAULT_ARGS,extraCandidateDirs:[wP(r)]},e),s=i.locallyResolved,o=!s||await MP(i.command,i.fromUserOverride?void 0:[$r.BINARY_NAME]);return n?s?o?{markerFileResolvable:n,lspBinaryResolvable:s,lspBinarySpawnable:o,ready:!0}:{markerFileResolvable:n,lspBinaryResolvable:s,lspBinarySpawnable:o,ready:!1,reason:ca.binaryNotSpawnable}:{markerFileResolvable:n,lspBinaryResolvable:s,lspBinarySpawnable:o,ready:!1,reason:ca.binaryUnresolvable}:{markerFileResolvable:n,lspBinaryResolvable:s,lspBinarySpawnable:o,ready:!1,reason:ca.markerFileMissing}}var U_="rust",xP={".rs":U_};function UP(){return kP.join(GP.homedir(),".cargo","bin")}var HP={name:$r.BINARY_NAME,tierBLanguageId:B.RUST,languageIdByExtension:xP,defaultLanguageId:U_,resolveBinary:(t,e)=>Pe({binaryName:$r.BINARY_NAME,defaultArgs:$r.DEFAULT_ARGS,extraCandidateDirs:[UP()]},e),checkPreflight:x_,supportsQualifiedContainment:!0,containmentSymbolKinds:new Set([hr.CLASS,hr.OBJECT]),normalizeSymbolName:G_,definitionResolution:"reverse",coldStartSettleMs:8e3,processMemoryEstimateMb:2048},ua=class extends xe{constructor(e,r){super(HP,e,r)}};import BP from"fs";import H_ from"path";var En={BINARY_NAME:"clangd",DEFAULT_ARGS:[]},ed={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 KP=["compile_commands.json","CMakeLists.txt"];function $P(t){return KP.some(e=>BP.existsSync(H_.join(t,e)))}function YP(){return process.platform==="win32"?[H_.join(process.env.ProgramFiles??"C:\\Program Files","LLVM","bin")]:process.platform==="darwin"?["/opt/homebrew/opt/llvm/bin","/usr/local/opt/llvm/bin"]:["/usr/lib/llvm/bin","/usr/local/bin"]}async function B_(t,e){let r=$P(t),i=(await Pe({binaryName:En.BINARY_NAME,defaultArgs:En.DEFAULT_ARGS,extraCandidateDirs:YP()},e)).locallyResolved;return r?i?{markerFileResolvable:r,lspBinaryResolvable:i,ready:!0}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:ed.binaryUnresolvable}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:ed.markerFileMissing}}var mr="cpp",WP={".c":"c",".h":"c",".cpp":mr,".cxx":mr,".cc":mr,".hpp":mr,".hxx":mr,".hh":mr,".cu":mr,".cuh":mr},jP={name:En.BINARY_NAME,tierBLanguageId:B.CPP,languageIdByExtension:WP,defaultLanguageId:mr,resolveBinary:(t,e)=>Pe({binaryName:En.BINARY_NAME,defaultArgs:En.DEFAULT_ARGS},e),checkPreflight:B_,supportsQualifiedContainment:!1,definitionResolution:"reverse"},da=class extends xe{constructor(e,r){super(jP,e,r)}};import VP from"fs";import pa from"path";import K_ from"os";var Sn={BINARY_NAME:"jdtls",DEFAULT_ARGS:[]},td={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 zP=["pom.xml","build.gradle"];function JP(t){return zP.some(e=>VP.existsSync(pa.join(t,e)))}function qP(){return process.platform==="win32"?[pa.join(K_.homedir(),"scoop","shims"),pa.join(process.env.ChocolateyInstall??"C:\\ProgramData\\chocolatey","bin")]:process.platform==="darwin"?["/opt/homebrew/bin","/usr/local/bin"]:["/usr/local/bin","/usr/bin",pa.join(K_.homedir(),".local","share","jdtls","bin")]}async function $_(t,e){let r=JP(t),i=(await Pe({binaryName:Sn.BINARY_NAME,defaultArgs:Sn.DEFAULT_ARGS,extraCandidateDirs:qP()},e)).locallyResolved;return r?i?{markerFileResolvable:r,lspBinaryResolvable:i,ready:!0}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:td.binaryUnresolvable}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:td.markerFileMissing}}var Y_="java",QP={".java":Y_},XP={name:Sn.BINARY_NAME,tierBLanguageId:B.JAVA,languageIdByExtension:QP,defaultLanguageId:Y_,resolveBinary:(t,e)=>Pe({binaryName:Sn.BINARY_NAME,defaultArgs:Sn.DEFAULT_ARGS},e),checkPreflight:$_,supportsQualifiedContainment:!0,definitionResolution:"reverse"},ga=class extends xe{constructor(e,r){super(XP,e,r)}};import ZP from"fs";import eD from"path";import tD from"os";var Tn={BINARY_NAME:"csharp-ls",DEFAULT_ARGS:[]},rd={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 rD(){return eD.join(tD.homedir(),".dotnet","tools")}function nD(t){try{return ZP.readdirSync(t).some(r=>r.endsWith(".sln")||r.endsWith(".slnx")||r.endsWith(".csproj"))}catch{return!1}}async function W_(t,e){let r=nD(t),i=(await Pe({binaryName:Tn.BINARY_NAME,defaultArgs:Tn.DEFAULT_ARGS,extraCandidateDirs:[rD()]},e)).locallyResolved;return r?i?{markerFileResolvable:r,lspBinaryResolvable:i,ready:!0}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:rd.binaryUnresolvable}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:rd.markerFileMissing}}var j_="csharp",iD={".cs":j_},sD={name:Tn.BINARY_NAME,tierBLanguageId:B.CSHARP,languageIdByExtension:iD,defaultLanguageId:j_,resolveBinary:(t,e)=>Pe({binaryName:Tn.BINARY_NAME,defaultArgs:Tn.DEFAULT_ARGS},e),checkPreflight:W_,supportsQualifiedContainment:!0,definitionResolution:"reverse"},fa=class extends xe{constructor(e,r){super(sD,e,r)}};import oD from"fs";import aD from"path";import{execFile as lD}from"child_process";import{promisify as cD}from"util";var Tt={PACKAGE_NAME:"intelephense",NPX_COMMAND:"npx",NPX_NO_INSTALL_FLAG:"--no-install",STDIO_ARG:"--stdio",VERSION_FLAG:"--version"},os={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 V_=cD(lD),z_=5e3;function uD(t){return oD.existsSync(aD.join(t,"composer.json"))}async function dD(t){let e=[Tt.NPX_NO_INSTALL_FLAG,Tt.PACKAGE_NAME,Tt.VERSION_FLAG];try{if(Kr(Tt.NPX_COMMAND)){let r=await ii(Tt.NPX_COMMAND,e,void 0);await V_(r,[],{cwd:t,timeout:z_,shell:!0})}else await V_(Tt.NPX_COMMAND,e,{cwd:t,timeout:z_});return!0}catch{return!1}}async function J_(t,e){let r=uD(t),i=tr(t,{packageName:Tt.PACKAGE_NAME,defaultArgs:[Tt.STDIO_ARG]},e).locallyResolved?!0:await dD(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 Rn="php",pD={".php":Rn,".phtml":Rn,".php3":Rn,".php4":Rn,".php5":Rn,".phps":Rn},gD={name:Tt.PACKAGE_NAME,tierBLanguageId:B.PHP,languageIdByExtension:pD,defaultLanguageId:Rn,resolveBinary:(t,e)=>tr(t,{packageName:Tt.PACKAGE_NAME,defaultArgs:[Tt.STDIO_ARG]},e),checkPreflight:J_,supportsQualifiedContainment:!0,definitionResolution:"reverse",unavailableReasonForUnresolvableBinary:os.binaryUnresolvable},ha=class extends xe{constructor(e,r){super(gD,e,r)}};import fD from"fs";import id from"path";import hD from"os";var An={BINARY_NAME:"ruby-lsp",DEFAULT_ARGS:[]},nd={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 mD=["Gemfile","Gemfile.lock"];function _D(t){return mD.some(e=>fD.existsSync(id.join(t,e)))}function ED(){if(process.platform==="win32")return[];let t=hD.homedir();return[id.join(t,".rbenv","shims"),id.join(t,".rvm","bin")]}async function q_(t,e){let r=_D(t),i=(await Pe({binaryName:An.BINARY_NAME,defaultArgs:An.DEFAULT_ARGS,extraCandidateDirs:ED()},e)).locallyResolved;return r?i?{markerFileResolvable:r,lspBinaryResolvable:i,ready:!0}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:nd.binaryUnresolvable}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:nd.markerFileMissing}}var ma="ruby",SD={".rb":ma,".rake":ma,".gemspec":ma},TD={name:An.BINARY_NAME,tierBLanguageId:B.RUBY,languageIdByExtension:SD,defaultLanguageId:ma,resolveBinary:(t,e)=>Pe({binaryName:An.BINARY_NAME,defaultArgs:An.DEFAULT_ARGS},e),checkPreflight:q_,supportsQualifiedContainment:!0,definitionResolution:"reverse"},_a=class extends xe{constructor(e,r){super(TD,e,r)}};import ai from"fs/promises";var RD={maxWaitMs:1e4,retryIntervalMs:100,heartbeatIntervalMs:1e4,staleAfterMs:3e4};function AD(t){return new Promise(e=>setTimeout(e,t))}function OD(t){try{return process.kill(t,0),!0}catch(e){return e.code===rn}}async function yD(t){try{let e=Number.parseInt(await ai.readFile(t,H),10);return Number.isFinite(e)?e:void 0}catch{return}}async function ID(t,e){let r=await ai.stat(t).catch(()=>{});if(!r||Date.now()-r.mtimeMs<=e)return!1;let n=await yD(t);return n!==void 0&&OD(n)?!1:(await ai.rm(t,{force:!0}).catch(()=>{}),!0)}function LD(t){let e=t.code;return e===vn||e===rn||e===bn||e===wn}async function CD(t){try{let e=await ai.open(t,"wx");return await e.writeFile(String(process.pid)),await e.close(),!0}catch(e){if(!LD(e))throw e;return!1}}async function Q_(t,e={}){let r={...RD,...e},n=Date.now()+r.maxWaitMs,i=!1;for(;!await CD(t);)if(i||(i=!0,e.onWaiting?.()),!await ID(t,r.staleAfterMs)){if(Date.now()>n)throw new Cs(t);await AD(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 ND(t=O,e={}){let r=e.createAstWorkerPool??(()=>new vo);t.register(T.KnowledgeGitService,(i,s)=>new Bs(i.resolve(T.GitProvider),s?.logger,s?.gitNetworkTimeoutMs)),t.register(T.FileDiscovery,(i,s)=>new Io(i.resolve(T.GitProvider),s?.logger)),t.register(T.ConfigScanner,(i,s)=>new Co(s?.logger)),t.register(T.VcsScanner,(i,s)=>new Po(i.resolve(T.GitProvider),s?.logger));let n;t.register(T.AstProcessor,(i,s)=>(n??=r(),new bo(n,s?.logger))),t.register(T.GraphPersister,()=>new xo),t.register(T.TempFileManager,()=>(i,s)=>new Ho(i,s)),t.register(T.ProcessLock,()=>Q_),t.register(T.QueryService,(i,s)=>new Ko(s?.logger)),t.register(T.TierBCoverageHintProvider,()=>({resolve:Ni})),t.register(T.ImpactService,(i,s)=>new $o(s?.logger)),t.register(T.ChangeDetectionService,(i,s)=>new $s(i.resolve(T.ImpactService,s),s?.logger)),t.register(T.TopologyBuilder,()=>new Yo),t.register(T.SnapshotRenderer,()=>new Ks),t.register(T.HydrationService,(i,s)=>new Ys(i.resolve(T.GitProvider),s?.logger)),t.register(T.SemanticDiffAnalyzer,(i,s)=>new jo(s?.logger)),t.register(T.EdgeResolutionProviders,(i,s)=>({typescript:()=>new sa(s?.logger),python:()=>new oa(s?.logger),go:()=>new aa(s?.logger),rust:()=>new ua(s?.logger),cpp:()=>new da(s?.logger),java:()=>new ga(s?.logger),csharp:()=>new fa(s?.logger),php:()=>new ha(s?.logger),ruby:()=>new _a(s?.logger)}))}ND();var Yr={METHOD_POST:"POST",HEADER_AUTHORIZATION:"Authorization",HEADER_CONTENT_TYPE:"Content-Type",CONTENT_TYPE_JSON:"application/json",bearerAuth:t=>`Bearer ${t}`};var rr={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 sd={l2Nodes:t=>`/projects/${t}/l2-nodes`,SYNC_PUSH:"/sync/push"};function X_(t,e){if(typeof t!="object"||t===null||Array.isArray(t))throw new TypeError(`${e} must be an object`);return t}function Z_(t,e){if(typeof t!="number"||!Number.isFinite(t))throw new TypeError(`${e} must be a finite number`);return t}function eE(t){if(!Array.isArray(t))throw new TypeError("response must be an array");for(let[e,r]of t.entries()){let n=X_(r,`response[${e}]`);if(Z_(n.id,`response[${e}].id`),typeof n.name!="string")throw new TypeError(`response[${e}].name must be a string`)}return t}function tE(t){let e=X_(t,"response");if(typeof e.success!="boolean")throw new TypeError("response.success must be a boolean");return Z_(e.processed,"response.processed"),t}var rE=3e4,as=class{config;initialize(e){this.config=e}getConfig(){if(!this.config)throw new E(A.SYNC_FETCH_FAILED,rr.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}${sd.l2Nodes(e)}`,{headers:{[Yr.HEADER_AUTHORIZATION]:Yr.bearerAuth(n)},signal:AbortSignal.timeout(rE)})}catch(o){throw E.wrap(A.SYNC_FETCH_FAILED,rr.FETCH_L2_NODES_FAILED,o)}if(!i.ok){let o=await this.parseErrorBody(i);throw new E(A.SYNC_FETCH_FAILED,rr.fetchL2NodesFailedWithReason(o))}let s;try{s=await i.json()}catch(o){throw E.wrap(A.SYNC_FETCH_FAILED,rr.FETCH_L2_NODES_INVALID_JSON,o)}try{return eE(s)}catch(o){throw E.wrap(A.SYNC_FETCH_FAILED,rr.FETCH_L2_NODES_INVALID_RESPONSE,o)}}async pushSyncEvents(e,r){let{apiUrl:n,pat:i}=this.getConfig(),s;try{s=await fetch(`${n}${sd.SYNC_PUSH}`,{method:Yr.METHOD_POST,headers:{[Yr.HEADER_CONTENT_TYPE]:Yr.CONTENT_TYPE_JSON,[Yr.HEADER_AUTHORIZATION]:Yr.bearerAuth(i)},body:JSON.stringify({projectId:Number(e),events:r}),signal:AbortSignal.timeout(rE)})}catch(a){throw E.wrap(A.SYNC_PUSH_FAILED,rr.SYNC_PUSH_FAILED,a)}if(!s.ok){let a=await this.parseErrorBody(s);throw new E(A.SYNC_PUSH_FAILED,rr.syncPushFailedWithReason(a))}let o;try{o=await s.json()}catch(a){throw E.wrap(A.SYNC_PUSH_FAILED,rr.SYNC_PUSH_INVALID_JSON,a)}try{return tE(o)}catch(a){throw E.wrap(A.SYNC_PUSH_FAILED,rr.SYNC_PUSH_INVALID_RESPONSE,a)}}};O.register(T.RemoteSyncClient,()=>()=>new as);var st={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:`
136
136
 
137
- `,bearerAuth:t=>`Bearer ${t}`};var ot={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 nE={CHAT_COMPLETIONS:"/v1/chat/completions"};var PD=new Set(Object.values(zt));function Wr(t,e){if(typeof t!="object"||t===null||Array.isArray(t))throw new TypeError(`${e} must be an object`);return t}function od(t,e){if(!Array.isArray(t))throw new TypeError(`${e} must be an array`);return t}function Pt(t,e){if(typeof t!="string")throw new TypeError(`${e} must be a string`);return t}function iE(t,e){if(typeof t!="number"||!Number.isFinite(t))throw new TypeError(`${e} must be a finite number`);return t}function ad(t,e){return t===null?null:Pt(t,e)}function sE(t,e){let r=Pt(t,e);if(!PD.has(r))throw new TypeError(`${e} must be a supported chat role`);return r}function oE(t,e){for(let[r,n]of od(t,e).entries()){let i=Wr(n,`${e}[${r}]`);if(Pt(i.id,`${e}[${r}].id`),i.type!==Ll)throw new TypeError(`${e}[${r}].type must be ${Ll}`);let s=Wr(i.function,`${e}[${r}].function`);Pt(s.name,`${e}[${r}].function.name`),Pt(s.arguments,`${e}[${r}].function.arguments`)}}function DD(t,e){let r=Wr(t,e);sE(r.role,`${e}.role`),ad(r.content,`${e}.content`),r.name!==void 0&&Pt(r.name,`${e}.name`),r.tool_call_id!==void 0&&Pt(r.tool_call_id,`${e}.tool_call_id`),r.tool_calls!==void 0&&oE(r.tool_calls,`${e}.tool_calls`)}function aE(t){let e=Wr(t,"response");Pt(e.id,"response.id"),Pt(e.model,"response.model");for(let[r,n]of od(e.choices,"response.choices").entries()){let i=Wr(n,`response.choices[${r}]`);iE(i.index,`response.choices[${r}].index`),DD(i.message,`response.choices[${r}].message`),ad(i.finish_reason,`response.choices[${r}].finish_reason`)}return t}function lE(t){let e=Wr(t,"chunk");Pt(e.id,"chunk.id"),Pt(e.model,"chunk.model");for(let[r,n]of od(e.choices,"chunk.choices").entries()){let i=Wr(n,`chunk.choices[${r}]`);iE(i.index,`chunk.choices[${r}].index`);let s=Wr(i.delta,`chunk.choices[${r}].delta`);s.role!==void 0&&sE(s.role,`chunk.choices[${r}].delta.role`),s.content!==void 0&&Pt(s.content,`chunk.choices[${r}].delta.content`),s.tool_calls!==void 0&&oE(s.tool_calls,`chunk.choices[${r}].delta.tool_calls`),ad(i.finish_reason,`chunk.choices[${r}].finish_reason`)}return t}var uE=3e4,cE=4e3,ls=class{config;initialize(e){this.config=e}getConfig(){if(!this.config)throw new E(y.LLM_NOT_INITIALIZED,ot.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}${nE.CHAT_COMPLETIONS}`}buildHeaders(e,r){let n={[st.HEADER_CONTENT_TYPE]:st.CONTENT_TYPE_JSON};return r&&(n.Accept=r),e.apiKey&&(n[st.HEADER_AUTHORIZATION]=st.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:st.METHOD_GET,signal:AbortSignal.timeout(cE)}),{available:!0}}catch(e){let r=e instanceof Error?e.message:String(e);return{available:!1,reason:ot.availabilityCheckFailedWithReason(r)}}}async checkBridgeReachability(e){try{let r=this.getConfig(),n=await fetch(this.buildCompletionsUrl(r.baseUrl),{method:st.METHOD_POST,headers:this.buildHeaders(r),body:JSON.stringify({model:e,messages:[{role:zt.USER,content:"ping"}],max_tokens:1,stream:!1}),signal:AbortSignal.timeout(cE)});if(!n.ok){let i=await this.parseErrorBody(n);return{available:!1,reason:ot.bridgeProbeRejectedWithReason(n.status,i)}}return{available:!0}}catch(r){let n=r instanceof Error?r.message:String(r);return{available:!1,reason:ot.bridgeProbeFailedWithReason(n)}}}async chatCompletion(e){let r=this.getConfig(),n;try{n=await fetch(this.buildCompletionsUrl(r.baseUrl),{method:st.METHOD_POST,headers:this.buildHeaders(r),body:JSON.stringify(this.buildRequestBody(e,!1)),signal:AbortSignal.timeout(uE)})}catch(s){throw E.wrap(y.LLM_CHAT_COMPLETION_FAILED,ot.CHAT_COMPLETION_FAILED,s)}if(!n.ok){let s=await this.parseErrorBody(n);throw n.status===429?new E(y.LLM_RATE_LIMITED,ot.chatCompletionFailedWithReason(s)):n.status===401||n.status===403?new E(y.LLM_AUTH_FAILED,ot.chatCompletionFailedWithReason(s)):new E(y.LLM_HTTP_FAILED,ot.chatCompletionFailedWithReason(s))}let i;try{i=await n.json()}catch(s){throw E.wrap(y.LLM_INVALID_RESPONSE,ot.CHAT_COMPLETION_INVALID_JSON,s)}try{return this.fromWireResult(aE(i))}catch(s){throw E.wrap(y.LLM_INVALID_RESPONSE,ot.CHAT_COMPLETION_INVALID_RESPONSE,s)}}streamChatCompletion(e){let r=this.getConfig(),n=this.buildHeaders(r,st.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 vD(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(st.SSE_BLOCK_SEPARATOR))!==-1;){let I=d.slice(0,_);d=d.slice(_+st.SSE_BLOCK_SEPARATOR.length);let C=wD(I,a);if(C.kind==="done")return;C.kind==="chunk"&&(yield C.chunk)}}}return l()}};async function vD(t,e,r,n){let i;try{i=await fetch(t,{method:st.METHOD_POST,headers:e,body:r,signal:AbortSignal.timeout(uE)})}catch(s){throw E.wrap(y.LLM_CHAT_COMPLETION_FAILED,ot.CHAT_COMPLETION_STREAM_FAILED,s)}if(!i.ok){let s=await n(i);throw new E(y.LLM_CHAT_COMPLETION_FAILED,ot.chatCompletionStreamFailedWithReason(s))}return i}function wD(t,e){let r=t.trim();if(!r)return{kind:"skip"};let n=r.startsWith(st.SSE_DATA_PREFIX)?r.slice(st.SSE_DATA_PREFIX.length):r;if(n===st.SSE_DONE_SENTINEL)return{kind:"done"};let i;try{i=JSON.parse(n)}catch(s){throw E.wrap(y.LLM_STREAM_FAILED,ot.CHAT_COMPLETION_STREAM_INVALID_JSON,s)}try{return{kind:"chunk",chunk:e(lE(i))}}catch(s){throw E.wrap(y.LLM_STREAM_FAILED,ot.CHAT_COMPLETION_STREAM_INVALID_RESPONSE,s)}}A.register(T.LlmClient,()=>()=>new ls);import pl from"process";import hb from"crypto";import{z as vd}from"zod";import Gw from"fs";import xw from"path";var dE={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"},jr={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 pE from"fs/promises";import gE from"path";async function ve(t,e,r){let n=gE.join(t,_e,Ar,e);await pE.mkdir(gE.dirname(n),{recursive:!0}),await pE.appendFile(n,JSON.stringify({ts:new Date().toISOString(),...r})+`
138
- `,H)}async function li(t,e){await ve(t,ep,e)}async function fE(t,e){await li(t,{event:jr.SUMMARY,...e})}async function hE(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 mE from"path";import{pathToFileURL as bD}from"url";async function ci(t,e,r){let n=t.getFirst();if(n)return n;let s=await e.getRemoteUrl(r)??bD(mE.resolve(r)).href;return t.getOrInsert({name:mE.basename(r),repoUrl:s})}async function Ea(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 ui(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 cs(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 di(t,e){if(e.length===0)return;let r=cs(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 Sa(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&&di(e,o)})}function FD(t){return JSON.stringify({byFile:t})}function Ta(t){let e=t.meta.get(S.META_KEY_CALL_RESOLUTION_STATS);if(!e)return{};try{return JSON.parse(e).byFile??{}}catch{return{}}}function _E(t,e){Object.keys(e).length!==0&&t.meta.set(S.META_KEY_CALL_RESOLUTION_STATS,FD(e))}function Ra(t,e){Object.keys(e).length!==0&&_E(t,e)}function EE(t,e,r){let n=Ta(t);for(let i of r)delete n[i];for(let[i,s]of Object.entries(e))n[i]=s;_E(t,n)}function SE(t){let e=Ta(t);return{byFile:e,total:yr(e)}}async function TE(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 RE(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 AE(){return{success:!0,partialFailure:!1,message:De.ALREADY_INITIALIZED,filesRequested:0,filesParsed:0,filesFailed:0,failures:[],filesSkippedOversized:0,skippedExistingGraph:!0}}import MD from"path";function ie(t){return MD.join(t,_e,Ci)}import OE from"fs/promises";import kD from"os";import GD from"path";var Aa={SNAPSHOTTING:"Packing knowledge graph snapshot...",DB_NOT_FOUND:'Local database not found. Please run "docuvia init".'},pi={START:"snapshot.start",ERROR:"snapshot.error",SUMMARY:"snapshot.summary",TIER_B_FINALIZED:"snapshot.tierB.finalized"},yE="docuvia-snapshot-";async function gi(t,e,r){let n=A.resolve(T.SnapshotRenderer),i=e.graph.getAllNodes(),s=e.graph.getAllLinks(),o=await OE.mkdtemp(GD.join(kD.tmpdir(),yE));try{let a=await n.render({outDir:o,l2Rows:i,linkRows:s,l3Rows:e.l3.getAllExportable()});return await e.withWriteLock(()=>{e.meta.set(S.META_KEY_KNOWLEDGE_PACK_PENDING,"true")}),await r.packSnapshotToKnowledgeBranch(t,o),await e.withWriteLock(()=>{e.meta.set(S.META_KEY_KNOWLEDGE_PACK_PENDING,"")}),a}finally{await OE.rm(o,{recursive:!0,force:!0})}}var IE=["SIGTERM","SIGINT"],ya=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 li(e,{event:jr.START,workspaceRoot:e});let n=A.resolve(T.GitProvider),i=A.resolve(T.KnowledgeGitService,{logger:r}),s=A.resolve(T.FileDiscovery,{logger:r}),o=A.resolve(T.ConfigScanner,{logger:r}),a=A.resolve(T.VcsScanner,{logger:r}),l=A.resolve(T.AstProcessor,{logger:r}),c=A.resolve(T.GraphPersister),u=A.resolve(T.TempFileManager),p=A.resolve(T.GraphStoreOpener),d;try{d=await p({dbPath:ie(e)})}catch(f){throw E.wrap(y.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 hE(i,e,r),_)return r.info(De.ALREADY_INITIALIZED),await li(e,{event:jr.ALREADY_INITIALIZED,workspaceRoot:e}),AE();let I=await ci(d.projects,n,e);r.info(De.SCANNING_WORKSPACE);let C=await Ea({configScanner:o,vcsScanner:a,fileDiscovery:s,filesRepo:d.files,workspaceRoot:e});r.info(De.PARSING_AST);let{parsedResults:L,failures:w,callResolutionByFile:Q}=await ui({astProcessor:l,graphPersister:c,store:d,workspaceRoot:e,projectId:I.id,filesToParse:C.filesToParse,skippedOversized:C.skippedOversized,tags:C.tags,appendLogLine:li,logEvents:{parseFailure:jr.PARSE_FAILURE,fileSkippedOversized:jr.FILE_SKIPPED_OVERSIZED}});r.info(De.PERSISTING_GRAPH),Ra(d,Q??{}),await Sa({store:d,git:n,workspaceRoot:e,parsedResults:L}),r.info(De.SNAPSHOTTING_KNOWLEDGE_BRANCH);let J=A.resolve(T.HydrationService,{logger:r});try{await gi(e,d,i),await J.markSynced(e,d)}catch(M){r.warn(De.SNAPSHOT_AFTER_INIT_FAILED,{error:M instanceof Error?M.message:String(M)}),await li(e,{event:jr.SNAPSHOT_AFTER_INIT_FAILED,message:M instanceof Error?M.message:String(M)})}r.info(De.INITIALIZING_TEMP_FILES);let $=await TE(u,e,r),te=xD($,r);try{let M=C.filesToParse.length,ne=L.length,de=w.length,N=C.skippedOversized.length;(de>0||N>0)&&r.warn(De.PARSE_FAILURES_OR_SKIPPED,{filesRequested:M,filesParsed:ne,filesFailed:de,filesSkippedOversized:N});let Ae=RE({filesRequested:M,filesParsed:ne,filesFailed:de,failures:w,filesSkippedOversized:N});return await fE(e,{filesRequested:M,filesParsed:ne,filesFailed:de,failures:w,filesSkippedOversized:N}),Ae}finally{te()}}finally{await d.close()}}};function xD(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 IE)process.on(n,r);return()=>{for(let n of IE)process.removeListener(n,r)}}import LE from"fs/promises";var yn={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}`},Oa={START:"clean.start",SUMMARY:"clean.summary"};async function ld(t,e){await ve(t,tp,e)}async function cd(t,e){await ld(t,{event:Oa.SUMMARY,...e})}import ud from"path";function Ia(t,e){let r=ud.resolve(e),n=ud.resolve(t);return n===r||n.startsWith(`${r}${ud.sep}`)}var La=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(){let{workspaceRoot:e,logger:r}=this,n=ie(e);if(!Ia(n,e))throw new E(y.CLEAN_WORKFLOW_FAILED,yn.PATH_ESCAPES_WORKSPACE(n,e));r.info(yn.CLEANING(n)),await ld(e,{event:Oa.START});let i=!0;try{await LE.access(n)}catch{i=!1}if(!i){let o={deleted:!1,message:yn.NOT_FOUND};return await cd(e,o),o}try{await LE.unlink(n)}catch(o){throw E.wrap(y.CLEAN_WORKFLOW_FAILED,yn.DELETE_FAILED(n),o)}r.info(yn.DELETED_AT(n));let s={deleted:!0,message:yn.DELETED};return await cd(e,s),s}};var Ca={GETTING_STATUS:"Getting status...",DB_NOT_FOUND:'Local database not found. Please run "docuvia init".'},Na={START:"status.start",ERROR:"status.error",SUMMARY:"status.summary"};async function Pa(t,e){await ve(t,rp,e)}var UD="ensureHydrated: automatic hydration refused; local.db left untouched (see reason)";async function Vr(t,e){let r=A.resolve(T.GraphStoreOpener),n;try{n=await r({dbPath:ie(t),readonly:!1})}catch{return}try{let i=A.resolve(T.HydrationService,{logger:e});if(await i.isStale(t,n)){let s=await i.hydrate(t,n);s.refused&&e.warn(UD,{refusalReason:s.refusalReason})}}finally{await n.close()}}var On={COMMIT_MESSAGE:"commitMessage",CONTRACT_SYMBOL:"contractSymbol"};function nr(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(HD):[]}catch{return[]}}function HD(t){if(!t||typeof t!="object")return!1;let e=t;return(e.kind===On.COMMIT_MESSAGE||e.kind===On.CONTRACT_SYMBOL)&&typeof e.target=="string"&&typeof e.commitSha=="string"}function CE(t,e){if(e.length===0)return;let r=nr(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 NE(t,e){if(e.length===0)return;let r=new Set(e),n=nr(t).filter(i=>!r.has(i.target));t.meta.set(S.META_KEY_TIER_C_QUEUE,JSON.stringify(n))}function PE(t,e,r){let n=nr(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 Da=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(){let{workspaceRoot:e,logger:r}=this;r.info(Ca.GETTING_STATUS),await Pa(e,{event:Na.START}),await Vr(e,r);let n=A.resolve(T.GraphStoreOpener),i;try{i=await n({dbPath:ie(e),readonly:!0})}catch(s){if(s instanceof E&&s.code===y.DB_NOT_FOUND){let o=new E(y.DB_NOT_FOUND,Ca.DB_NOT_FOUND,s);throw await Pa(e,{event:Na.ERROR,message:Ca.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:nr(i).length,graphFreshness:await this.resolveGraphFreshness(i)};return await Pa(e,{event:Na.SUMMARY,...c}),c}finally{await i.close()}}async resolveGraphFreshness(e){try{if(!A.has(T.GitProvider))return"unknown";let n=await A.resolve(T.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 In={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.`},Ln={START:"sync.start",ERROR:"sync.error",SUMMARY:"sync.summary"};async function Cn(t,e){await ve(t,np,e)}import va from"fs/promises";import dd from"path";function pd(t){return dd.join(t,_e,Ar,gp)}var BD=1e4,KD=100,$D=6e4,YD=".lock",WD={TIMED_OUT_WAITING:t=>`Timed out waiting for the sync-state lock at ${t} \u2014 another docuvia publish may be stuck`};async function jD(t,e){let r=`${t}${YD}`;await va.mkdir(dd.dirname(r),{recursive:!0});try{return await e(r,{maxWaitMs:BD,retryIntervalMs:KD,staleAfterMs:$D})}catch(n){throw n instanceof Cs?E.wrap(y.DB_LOCKED,WD.TIMED_OUT_WAITING(r),n):n}}async function DE(t,e,r){let n=await jD(pd(t),e);try{return await r()}finally{await n.release()}}async function vE(t){try{let e=await va.readFile(pd(t),H);return JSON.parse(e)}catch{return{}}}async function wE(t,e){let r=pd(t);await va.mkdir(dd.dirname(r),{recursive:!0}),await va.writeFile(r,JSON.stringify(e,null,2),H)}var wa=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(In.STARTING(i)),await Cn(r,{event:Ln.START,projectId:i,commitSha:s??null});let o=A.resolve(T.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:In.NOTHING_TO_SYNC};return await Cn(r,{event:Ln.SUMMARY,projectId:i,...p}),p}let c=A.resolve(T.GraphStoreOpener),u;try{u=await c({dbPath:ie(r),readonly:!0})}catch(p){throw p instanceof E&&p.code===y.DB_NOT_FOUND?(await Cn(r,{event:Ln.ERROR,projectId:i,message:In.DB_NOT_FOUND}),new E(y.DB_NOT_FOUND,In.DB_NOT_FOUND,p)):p}try{let d=A.resolve(T.RemoteSyncClient)();d.initialize({apiUrl:this.apiUrl,pat:this.pat});let f;try{f=await d.fetchRemoteL2Nodes(i)}catch(L){let w=L instanceof Error?L.message:String(L);throw await Cn(r,{event:Ln.ERROR,projectId:i,message:w}),L}let m=new Map(f.map(L=>[L.name,L.id])),_=u.graph.findNodesForChangedFiles(Array.from(l)),I=A.resolve(T.ProcessLock),C=await DE(r,I,async()=>{let L=await vE(r),w=L[i]??{syncedContentHashes:[]},Q=new Set(w.syncedContentHashes),{events:J,newlySyncedHashes:$,skippedL2Count:te}=this.buildSyncPushEvents(_,m,Q);if(J.length===0)return{synced:0,skipped:te,message:In.NOTHING_NEW(te)};let M;try{M=await d.pushSyncEvents(i,J)}catch(de){let N=de instanceof Error?de.message:String(de);throw await Cn(r,{event:Ln.ERROR,projectId:i,message:N}),de}w.syncedContentHashes=Array.from(new Set([...Q,...$])),L[i]=w,await wE(r,L);let ne=M.processed??J.length;return{synced:ne,skipped:te,message:In.SYNCED(ne,te)}});return await Cn(r,{event:Ln.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:Qd.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 hw from"fs";import mw from"path";var q={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)=>`Tier B batch complete: ${t} file(s) processed, ${e} corrected edge(s) applied`+(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_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"},bE=`You are an expert software architect reviewing source code directly (not commit history).
137
+ `,bearerAuth:t=>`Bearer ${t}`};var ot={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 nE={CHAT_COMPLETIONS:"/v1/chat/completions"};var PD=new Set(Object.values(zt));function Wr(t,e){if(typeof t!="object"||t===null||Array.isArray(t))throw new TypeError(`${e} must be an object`);return t}function od(t,e){if(!Array.isArray(t))throw new TypeError(`${e} must be an array`);return t}function Pt(t,e){if(typeof t!="string")throw new TypeError(`${e} must be a string`);return t}function iE(t,e){if(typeof t!="number"||!Number.isFinite(t))throw new TypeError(`${e} must be a finite number`);return t}function ad(t,e){return t===null?null:Pt(t,e)}function sE(t,e){let r=Pt(t,e);if(!PD.has(r))throw new TypeError(`${e} must be a supported chat role`);return r}function oE(t,e){for(let[r,n]of od(t,e).entries()){let i=Wr(n,`${e}[${r}]`);if(Pt(i.id,`${e}[${r}].id`),i.type!==Ll)throw new TypeError(`${e}[${r}].type must be ${Ll}`);let s=Wr(i.function,`${e}[${r}].function`);Pt(s.name,`${e}[${r}].function.name`),Pt(s.arguments,`${e}[${r}].function.arguments`)}}function DD(t,e){let r=Wr(t,e);sE(r.role,`${e}.role`),ad(r.content,`${e}.content`),r.name!==void 0&&Pt(r.name,`${e}.name`),r.tool_call_id!==void 0&&Pt(r.tool_call_id,`${e}.tool_call_id`),r.tool_calls!==void 0&&oE(r.tool_calls,`${e}.tool_calls`)}function aE(t){let e=Wr(t,"response");Pt(e.id,"response.id"),Pt(e.model,"response.model");for(let[r,n]of od(e.choices,"response.choices").entries()){let i=Wr(n,`response.choices[${r}]`);iE(i.index,`response.choices[${r}].index`),DD(i.message,`response.choices[${r}].message`),ad(i.finish_reason,`response.choices[${r}].finish_reason`)}return t}function lE(t){let e=Wr(t,"chunk");Pt(e.id,"chunk.id"),Pt(e.model,"chunk.model");for(let[r,n]of od(e.choices,"chunk.choices").entries()){let i=Wr(n,`chunk.choices[${r}]`);iE(i.index,`chunk.choices[${r}].index`);let s=Wr(i.delta,`chunk.choices[${r}].delta`);s.role!==void 0&&sE(s.role,`chunk.choices[${r}].delta.role`),s.content!==void 0&&Pt(s.content,`chunk.choices[${r}].delta.content`),s.tool_calls!==void 0&&oE(s.tool_calls,`chunk.choices[${r}].delta.tool_calls`),ad(i.finish_reason,`chunk.choices[${r}].finish_reason`)}return t}var uE=3e4,cE=4e3,ls=class{config;initialize(e){this.config=e}getConfig(){if(!this.config)throw new E(A.LLM_NOT_INITIALIZED,ot.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}${nE.CHAT_COMPLETIONS}`}buildHeaders(e,r){let n={[st.HEADER_CONTENT_TYPE]:st.CONTENT_TYPE_JSON};return r&&(n.Accept=r),e.apiKey&&(n[st.HEADER_AUTHORIZATION]=st.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:st.METHOD_GET,signal:AbortSignal.timeout(cE)}),{available:!0}}catch(e){let r=e instanceof Error?e.message:String(e);return{available:!1,reason:ot.availabilityCheckFailedWithReason(r)}}}async checkBridgeReachability(e){try{let r=this.getConfig(),n=await fetch(this.buildCompletionsUrl(r.baseUrl),{method:st.METHOD_POST,headers:this.buildHeaders(r),body:JSON.stringify({model:e,messages:[{role:zt.USER,content:"ping"}],max_tokens:1,stream:!1}),signal:AbortSignal.timeout(cE)});if(!n.ok){let i=await this.parseErrorBody(n);return{available:!1,reason:ot.bridgeProbeRejectedWithReason(n.status,i)}}return{available:!0}}catch(r){let n=r instanceof Error?r.message:String(r);return{available:!1,reason:ot.bridgeProbeFailedWithReason(n)}}}async chatCompletion(e){let r=this.getConfig(),n;try{n=await fetch(this.buildCompletionsUrl(r.baseUrl),{method:st.METHOD_POST,headers:this.buildHeaders(r),body:JSON.stringify(this.buildRequestBody(e,!1)),signal:AbortSignal.timeout(uE)})}catch(s){throw E.wrap(A.LLM_CHAT_COMPLETION_FAILED,ot.CHAT_COMPLETION_FAILED,s)}if(!n.ok){let s=await this.parseErrorBody(n);throw n.status===429?new E(A.LLM_RATE_LIMITED,ot.chatCompletionFailedWithReason(s)):n.status===401||n.status===403?new E(A.LLM_AUTH_FAILED,ot.chatCompletionFailedWithReason(s)):new E(A.LLM_HTTP_FAILED,ot.chatCompletionFailedWithReason(s))}let i;try{i=await n.json()}catch(s){throw E.wrap(A.LLM_INVALID_RESPONSE,ot.CHAT_COMPLETION_INVALID_JSON,s)}try{return this.fromWireResult(aE(i))}catch(s){throw E.wrap(A.LLM_INVALID_RESPONSE,ot.CHAT_COMPLETION_INVALID_RESPONSE,s)}}streamChatCompletion(e){let r=this.getConfig(),n=this.buildHeaders(r,st.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 vD(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(st.SSE_BLOCK_SEPARATOR))!==-1;){let I=d.slice(0,_);d=d.slice(_+st.SSE_BLOCK_SEPARATOR.length);let C=bD(I,a);if(C.kind==="done")return;C.kind==="chunk"&&(yield C.chunk)}}}return l()}};async function vD(t,e,r,n){let i;try{i=await fetch(t,{method:st.METHOD_POST,headers:e,body:r,signal:AbortSignal.timeout(uE)})}catch(s){throw E.wrap(A.LLM_CHAT_COMPLETION_FAILED,ot.CHAT_COMPLETION_STREAM_FAILED,s)}if(!i.ok){let s=await n(i);throw new E(A.LLM_CHAT_COMPLETION_FAILED,ot.chatCompletionStreamFailedWithReason(s))}return i}function bD(t,e){let r=t.trim();if(!r)return{kind:"skip"};let n=r.startsWith(st.SSE_DATA_PREFIX)?r.slice(st.SSE_DATA_PREFIX.length):r;if(n===st.SSE_DONE_SENTINEL)return{kind:"done"};let i;try{i=JSON.parse(n)}catch(s){throw E.wrap(A.LLM_STREAM_FAILED,ot.CHAT_COMPLETION_STREAM_INVALID_JSON,s)}try{return{kind:"chunk",chunk:e(lE(i))}}catch(s){throw E.wrap(A.LLM_STREAM_FAILED,ot.CHAT_COMPLETION_STREAM_INVALID_RESPONSE,s)}}O.register(T.LlmClient,()=>()=>new ls);import pl from"process";import hw from"crypto";import{z as vd}from"zod";import Gb from"fs";import xb from"path";var dE={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"},jr={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 pE from"fs/promises";import gE from"path";async function ve(t,e,r){let n=gE.join(t,_e,Ar,e);await pE.mkdir(gE.dirname(n),{recursive:!0}),await pE.appendFile(n,JSON.stringify({ts:new Date().toISOString(),...r})+`
138
+ `,H)}async function li(t,e){await ve(t,ep,e)}async function fE(t,e){await li(t,{event:jr.SUMMARY,...e})}async function hE(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 mE from"path";import{pathToFileURL as wD}from"url";async function ci(t,e,r){let n=t.getFirst();if(n)return n;let s=await e.getRemoteUrl(r)??wD(mE.resolve(r)).href;return t.getOrInsert({name:mE.basename(r),repoUrl:s})}async function Ea(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 ui(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 cs(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 di(t,e){if(e.length===0)return;let r=cs(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 Sa(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&&di(e,o)})}function FD(t){return JSON.stringify({byFile:t})}function Ta(t){let e=t.meta.get(S.META_KEY_CALL_RESOLUTION_STATS);if(!e)return{};try{return JSON.parse(e).byFile??{}}catch{return{}}}function _E(t,e){Object.keys(e).length!==0&&t.meta.set(S.META_KEY_CALL_RESOLUTION_STATS,FD(e))}function Ra(t,e){Object.keys(e).length!==0&&_E(t,e)}function EE(t,e,r){let n=Ta(t);for(let i of r)delete n[i];for(let[i,s]of Object.entries(e))n[i]=s;_E(t,n)}function SE(t){let e=Ta(t);return{byFile:e,total:Or(e)}}async function TE(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 RE(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 AE(){return{success:!0,partialFailure:!1,message:De.ALREADY_INITIALIZED,filesRequested:0,filesParsed:0,filesFailed:0,failures:[],filesSkippedOversized:0,skippedExistingGraph:!0}}import MD from"path";function ie(t){return MD.join(t,_e,Ci)}import yE from"fs/promises";import kD from"os";import GD from"path";var Aa={SNAPSHOTTING:"Packing knowledge graph snapshot...",DB_NOT_FOUND:'Local database not found. Please run "docuvia init".'},pi={START:"snapshot.start",ERROR:"snapshot.error",SUMMARY:"snapshot.summary",TIER_B_FINALIZED:"snapshot.tierB.finalized"},OE="docuvia-snapshot-";async function gi(t,e,r){let n=O.resolve(T.SnapshotRenderer),i=e.graph.getAllNodes(),s=e.graph.getAllLinks(),o=await yE.mkdtemp(GD.join(kD.tmpdir(),OE));try{let a=await n.render({outDir:o,l2Rows:i,linkRows:s,l3Rows:e.l3.getAllExportable()});return await e.withWriteLock(()=>{e.meta.set(S.META_KEY_KNOWLEDGE_PACK_PENDING,"true")}),await r.packSnapshotToKnowledgeBranch(t,o),await e.withWriteLock(()=>{e.meta.set(S.META_KEY_KNOWLEDGE_PACK_PENDING,"")}),a}finally{await yE.rm(o,{recursive:!0,force:!0})}}var IE=["SIGTERM","SIGINT"],Oa=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 li(e,{event:jr.START,workspaceRoot:e});let n=O.resolve(T.GitProvider),i=O.resolve(T.KnowledgeGitService,{logger:r}),s=O.resolve(T.FileDiscovery,{logger:r}),o=O.resolve(T.ConfigScanner,{logger:r}),a=O.resolve(T.VcsScanner,{logger:r}),l=O.resolve(T.AstProcessor,{logger:r}),c=O.resolve(T.GraphPersister),u=O.resolve(T.TempFileManager),p=O.resolve(T.GraphStoreOpener),d;try{d=await p({dbPath:ie(e)})}catch(f){throw E.wrap(A.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 hE(i,e,r),_)return r.info(De.ALREADY_INITIALIZED),await li(e,{event:jr.ALREADY_INITIALIZED,workspaceRoot:e}),AE();let I=await ci(d.projects,n,e);r.info(De.SCANNING_WORKSPACE);let C=await Ea({configScanner:o,vcsScanner:a,fileDiscovery:s,filesRepo:d.files,workspaceRoot:e});r.info(De.PARSING_AST);let{parsedResults:L,failures:b,callResolutionByFile:Q}=await ui({astProcessor:l,graphPersister:c,store:d,workspaceRoot:e,projectId:I.id,filesToParse:C.filesToParse,skippedOversized:C.skippedOversized,tags:C.tags,appendLogLine:li,logEvents:{parseFailure:jr.PARSE_FAILURE,fileSkippedOversized:jr.FILE_SKIPPED_OVERSIZED}});r.info(De.PERSISTING_GRAPH),Ra(d,Q??{}),await Sa({store:d,git:n,workspaceRoot:e,parsedResults:L}),r.info(De.SNAPSHOTTING_KNOWLEDGE_BRANCH);let J=O.resolve(T.HydrationService,{logger:r});try{await gi(e,d,i),await J.markSynced(e,d)}catch(M){r.warn(De.SNAPSHOT_AFTER_INIT_FAILED,{error:M instanceof Error?M.message:String(M)}),await li(e,{event:jr.SNAPSHOT_AFTER_INIT_FAILED,message:M instanceof Error?M.message:String(M)})}r.info(De.INITIALIZING_TEMP_FILES);let $=await TE(u,e,r),te=xD($,r);try{let M=C.filesToParse.length,ne=L.length,pe=b.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 Ae=RE({filesRequested:M,filesParsed:ne,filesFailed:pe,failures:b,filesSkippedOversized:N});return await fE(e,{filesRequested:M,filesParsed:ne,filesFailed:pe,failures:b,filesSkippedOversized:N}),Ae}finally{te()}}finally{await d.close()}}};function xD(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 IE)process.on(n,r);return()=>{for(let n of IE)process.removeListener(n,r)}}import LE from"fs/promises";var On={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}`},ya={START:"clean.start",SUMMARY:"clean.summary"};async function ld(t,e){await ve(t,tp,e)}async function cd(t,e){await ld(t,{event:ya.SUMMARY,...e})}import ud from"path";function Ia(t,e){let r=ud.resolve(e),n=ud.resolve(t);return n===r||n.startsWith(`${r}${ud.sep}`)}var La=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(){let{workspaceRoot:e,logger:r}=this,n=ie(e);if(!Ia(n,e))throw new E(A.CLEAN_WORKFLOW_FAILED,On.PATH_ESCAPES_WORKSPACE(n,e));r.info(On.CLEANING(n)),await ld(e,{event:ya.START});let i=!0;try{await LE.access(n)}catch{i=!1}if(!i){let o={deleted:!1,message:On.NOT_FOUND};return await cd(e,o),o}try{await LE.unlink(n)}catch(o){throw E.wrap(A.CLEAN_WORKFLOW_FAILED,On.DELETE_FAILED(n),o)}r.info(On.DELETED_AT(n));let s={deleted:!0,message:On.DELETED};return await cd(e,s),s}};var Ca={GETTING_STATUS:"Getting status...",DB_NOT_FOUND:'Local database not found. Please run "docuvia init".'},Na={START:"status.start",ERROR:"status.error",SUMMARY:"status.summary"};async function Pa(t,e){await ve(t,rp,e)}var UD="ensureHydrated: automatic hydration refused; local.db left untouched (see reason)";async function Vr(t,e){let r=O.resolve(T.GraphStoreOpener),n;try{n=await r({dbPath:ie(t),readonly:!1})}catch{return}try{let i=O.resolve(T.HydrationService,{logger:e});if(await i.isStale(t,n)){let s=await i.hydrate(t,n);s.refused&&e.warn(UD,{refusalReason:s.refusalReason})}}finally{await n.close()}}var yn={COMMIT_MESSAGE:"commitMessage",CONTRACT_SYMBOL:"contractSymbol"};function nr(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(HD):[]}catch{return[]}}function HD(t){if(!t||typeof t!="object")return!1;let e=t;return(e.kind===yn.COMMIT_MESSAGE||e.kind===yn.CONTRACT_SYMBOL)&&typeof e.target=="string"&&typeof e.commitSha=="string"}function CE(t,e){if(e.length===0)return;let r=nr(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 NE(t,e){if(e.length===0)return;let r=new Set(e),n=nr(t).filter(i=>!r.has(i.target));t.meta.set(S.META_KEY_TIER_C_QUEUE,JSON.stringify(n))}function PE(t,e,r){let n=nr(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 Da=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(){let{workspaceRoot:e,logger:r}=this;r.info(Ca.GETTING_STATUS),await Pa(e,{event:Na.START}),await Vr(e,r);let n=O.resolve(T.GraphStoreOpener),i;try{i=await n({dbPath:ie(e),readonly:!0})}catch(s){if(s instanceof E&&s.code===A.DB_NOT_FOUND){let o=new E(A.DB_NOT_FOUND,Ca.DB_NOT_FOUND,s);throw await Pa(e,{event:Na.ERROR,message:Ca.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:nr(i).length,graphFreshness:await this.resolveGraphFreshness(i)};return await Pa(e,{event:Na.SUMMARY,...c}),c}finally{await i.close()}}async resolveGraphFreshness(e){try{if(!O.has(T.GitProvider))return"unknown";let n=await O.resolve(T.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 In={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.`},Ln={START:"sync.start",ERROR:"sync.error",SUMMARY:"sync.summary"};async function Cn(t,e){await ve(t,np,e)}import va from"fs/promises";import dd from"path";function pd(t){return dd.join(t,_e,Ar,gp)}var BD=1e4,KD=100,$D=6e4,YD=".lock",WD={TIMED_OUT_WAITING:t=>`Timed out waiting for the sync-state lock at ${t} \u2014 another docuvia publish may be stuck`};async function jD(t,e){let r=`${t}${YD}`;await va.mkdir(dd.dirname(r),{recursive:!0});try{return await e(r,{maxWaitMs:BD,retryIntervalMs:KD,staleAfterMs:$D})}catch(n){throw n instanceof Cs?E.wrap(A.DB_LOCKED,WD.TIMED_OUT_WAITING(r),n):n}}async function DE(t,e,r){let n=await jD(pd(t),e);try{return await r()}finally{await n.release()}}async function vE(t){try{let e=await va.readFile(pd(t),H);return JSON.parse(e)}catch{return{}}}async function bE(t,e){let r=pd(t);await va.mkdir(dd.dirname(r),{recursive:!0}),await va.writeFile(r,JSON.stringify(e,null,2),H)}var ba=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(In.STARTING(i)),await Cn(r,{event:Ln.START,projectId:i,commitSha:s??null});let o=O.resolve(T.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:In.NOTHING_TO_SYNC};return await Cn(r,{event:Ln.SUMMARY,projectId:i,...p}),p}let c=O.resolve(T.GraphStoreOpener),u;try{u=await c({dbPath:ie(r),readonly:!0})}catch(p){throw p instanceof E&&p.code===A.DB_NOT_FOUND?(await Cn(r,{event:Ln.ERROR,projectId:i,message:In.DB_NOT_FOUND}),new E(A.DB_NOT_FOUND,In.DB_NOT_FOUND,p)):p}try{let d=O.resolve(T.RemoteSyncClient)();d.initialize({apiUrl:this.apiUrl,pat:this.pat});let f;try{f=await d.fetchRemoteL2Nodes(i)}catch(L){let b=L instanceof Error?L.message:String(L);throw await Cn(r,{event:Ln.ERROR,projectId:i,message:b}),L}let m=new Map(f.map(L=>[L.name,L.id])),_=u.graph.findNodesForChangedFiles(Array.from(l)),I=O.resolve(T.ProcessLock),C=await DE(r,I,async()=>{let L=await vE(r),b=L[i]??{syncedContentHashes:[]},Q=new Set(b.syncedContentHashes),{events:J,newlySyncedHashes:$,skippedL2Count:te}=this.buildSyncPushEvents(_,m,Q);if(J.length===0)return{synced:0,skipped:te,message:In.NOTHING_NEW(te)};let M;try{M=await d.pushSyncEvents(i,J)}catch(pe){let N=pe instanceof Error?pe.message:String(pe);throw await Cn(r,{event:Ln.ERROR,projectId:i,message:N}),pe}b.syncedContentHashes=Array.from(new Set([...Q,...$])),L[i]=b,await bE(r,L);let ne=M.processed??J.length;return{synced:ne,skipped:te,message:In.SYNCED(ne,te)}});return await Cn(r,{event:Ln.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:Qd.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 hb from"fs";import mb from"path";var q={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)=>`Tier B batch complete: ${t} file(s) processed, ${e} corrected edge(s) applied`+(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_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"},wE=`You are an expert software architect reviewing source code directly (not commit history).
139
139
  Extract concrete implementation decisions, architectural rules, notable constraints, and rationale that are evident from the code itself \u2014 not speculative commentary.
140
140
  Return ONLY a valid JSON array. Each item:
141
141
  { "title": "concise title", "nodeType": "change" | "rule" | "decision" | "context", "content": "detailed explanation grounded in what the code actually does", "confidence": 0.0 to 1.0 }
@@ -155,40 +155,40 @@ Return ONLY a valid JSON array. Each item:
155
155
  If the code contains no decision-worthy content, return an empty array \u2014 do not fabricate entries.
156
156
  OUTPUT MUST BE VALID JSON ONLY. NO MARKDOWN WRAPPERS. DO NOT OUTPUT \`\`\`json.`,xE=(t,e,r)=>`Focus on the symbol \`${t}\` in the following file (\`${e}\`):
157
157
 
158
- ${r}`;async function V(t,e){await ve(t,Li,e)}import fi from"fs";import gd from"path";var VD=40,zD=2e5,JD=".git",qD=new Set([at,JD,_e]);function HE(t){let e=[],r=fi.readdirSync(t,{withFileTypes:!0});for(let n of r){if(n.isDirectory()&&qD.has(n.name))continue;let i=gd.join(t,n.name);n.isDirectory()?e.push(...HE(i)):n.isFile()&&e.push(i)}return e}function UE(t,e){return t.startsWith(e+gd.sep)||t===e}function QD(t,e){try{return fi.realpathSync(t)}catch{return e.warn(q.FILE_READ_FAILED,{filePath:t,error:"Failed to resolve symlinks for file path"}),null}}function XD(t,e){try{return fi.readFileSync(t,H)}catch(r){return e.warn(q.FILE_READ_FAILED,{filePath:t,error:r instanceof Error?r.message:String(r)}),null}}function zr(t,e,r){let n=fi.realpathSync(e),i=fi.realpathSync(t);if(!UE(i,n))return r.warn(q.FILE_READ_FAILED,{filePath:t,error:`Resolved path ${i} is outside workspace root ${n}`}),{files:[],droppedFiles:[]};let o=fi.statSync(t).isDirectory()?HE(t):[t],a=[],l=[],c=0;for(let u of o){if(!Is(u))continue;let p=QD(u,r);if(p===null||!UE(p,n))continue;let d=gd.relative(e,u);if(a.length>=VD){l.push(d);continue}let f=XD(u,r);if(f!==null){if(c+f.length>zD){l.push(d);continue}c+=f.length,a.push({relativePath:d,content:f})}}return{files:a,droppedFiles:l}}async function hi(t){let{workspaceRoot:e,logger:r,store:n,git:i}=t;r.info(q.AUTO_FULL_INGESTION),await V(e,{event:Y.FULL_START});let s=A.resolve(T.FileDiscovery,{logger:r}),o=A.resolve(T.ConfigScanner,{logger:r}),a=A.resolve(T.VcsScanner,{logger:r}),l=A.resolve(T.AstProcessor,{logger:r}),c=A.resolve(T.GraphPersister),u=A.resolve(T.HydrationService,{logger:r}),p=A.resolve(T.KnowledgeGitService,{logger:r}),d=await ci(n.projects,i,e),f=await Ea({configScanner:o,vcsScanner:a,fileDiscovery:s,filesRepo:n.files,workspaceRoot:e}),{parsedResults:m,failures:_,callResolutionByFile:I}=await ui({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(I??{}).length>0){Ra(n,I??{});let J=yr(I??{});await V(e,{event:Y.FULL_CALL_RESOLUTION,...J,files:Object.keys(I??{}).length})}await Sa({store:n,git:i,workspaceRoot:e,parsedResults:m});try{await gi(e,n,p),await u.markSynced(e,n)}catch(J){let $=J instanceof Error?J.message:String(J);r.warn(q.SNAPSHOT_AFTER_FULL_INGESTION_FAILED,{error:$}),await V(e,{event:Y.FULL_SNAPSHOT_FAILED,message:$})}let C=f.filesToParse.length,L=m.length,w=_.length,Q=f.skippedOversized.length;return await V(e,{event:Y.FULL_SUMMARY,projectType:f.projectType,filesRequested:C,filesParsed:L,filesFailed:w,filesSkippedOversized:Q}),{kind:Te.AUTO_FULL_INGESTION,projectType:f.projectType,suggestedTags:Array.from(f.tags),filesRequested:C,filesParsed:L,filesFailed:w,filesSkippedOversized:Q}}import cv from"crypto";function BE(t){return t.meta.get(S.META_KEY_NODE_KEY_FORMAT_VERSION)!=="2"}import ZD from"path";function Dt(t){return t.replace(/\\/g,"/")}function KE(t,e,r,n){let i=Dt(ZD.relative(e,r)),s=t.graph.findNodeIdByNodeKey(i);if(s!==void 0)return s;for(let o of n){let a=t.graph.findNodeIdByNodeKey(Dt(o.relativePath));if(a!==void 0)return a}}var ev=new Set(["chore","style","ci","build","docs","test"]),tv=10,rv=/^(wip|fixup!|squash!|typo|lint|format|merge branch)/i,nv=/^([A-Za-z]+)(\([^)]*\))?!?:\s*(.*)$/;function iv(t){return t.split(`
159
- `)[0]?.trim()??""}function sv(t,e){let r=t?.[1]?.toLowerCase();return!!(r&&e.has(r))}function ov(t,e){return(e?e[3]:t).trim()}function $E(t,e={}){let r=e.denylistTypes??ev,n=e.minSubjectLength??tv,i=iv(t);if(rv.test(i))return!1;let s=i.match(nv);return sv(s,r)?!1:ov(i,s).length>=n}var av=1,lv=500;async function YE(t,e,r,n,i){let s=await t.getCommitLog(e,n,lv),o=[];for(let{sha:a,message:l}of s){if(a===r)break;$E(l,i)&&o.push({kind:On.COMMIT_MESSAGE,target:a,commitSha:a,message:l})}return o}function WE(t,e,r){return r.filter(n=>n.pruningLevel===av).map(n=>({kind:On.CONTRACT_SYMBOL,target:`${Dt(t)}#${n.nodeId}`,commitSha:e,file:t}))}async function fd(t){let{workspaceRoot:e,logger:r,store:n,git:i,knowledgeGit:s,projectId:o,fromSha:a,headSha:l}=t;if(BE(n))return r.info(q.NODE_KEY_FORMAT_STALE),await V(e,{event:Y.DELTA_NODE_KEY_FORMAT_STALE}),hi({workspaceRoot:e,logger:r,store:n,git:i});if(!await i.isAncestor(e,a,l))return r.info(q.HEAD_NOT_DESCENDANT_OF_LAST_INGESTED),await V(e,{event:Y.DELTA_HEAD_NOT_DESCENDANT,fromSha:a,headSha:l}),hi({workspaceRoot:e,logger:r,store:n,git:i});r.info(q.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}=uv(c),{filesToParse:d,skippedOversized:f,tierBEntries:m,tierCSymbolEntries:_,changedBytes:I}=await dv(t,p),L=[...await YE(i,e,a,l),..._],w=[];await s.runUnderKnowledgeLock(e,async()=>{w=await gv(t,{toDelete:u,filesToParse:d,tierBEntries:m,tierCEntries:L,changedBytes:I})});let Q=d.length-w.length;return await V(e,{event:Y.DELTA_SUMMARY,fromSha:a,headSha:l,filesReparsed:Q,filesDeleted:u.size,filesFailed:w.length,filesSkippedOversized:f.length,tierBQueued:m.length,tierCQueued:L.length}),{kind:Te.AUTO_DELTA,fromSha:a,headSha:l,filesReparsed:Q,filesDeleted:u.size,filesFailed:w.length,filesSkippedOversized:f.length,tierBQueued:m.length,tierCQueued:L.length}}function uv(t){let e=new Set,r=[];for(let n of t){if(n.status===At.DELETED){e.add(n.file);continue}n.status===At.RENAMED&&n.oldFile&&e.add(n.oldFile),Dn(n.file)&&r.push(n)}return{toDelete:e,toReparse:r}}async function dv(t,e){let{workspaceRoot:r,logger:n,git:i,headSha:s}=t,o=await i.listTrackedFilesWithBlobHash(r),a=A.resolve(T.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 I=o.get(f.file)??cv.createHash(Jt).update(m).digest("hex");l.push({file:f.file,hash:I,code:m}),d+=_;let{contractChanged:C,findings:L}=await pv(t,a,f,m);C&&(u.push({file:f.file,commitSha:s}),p.push(...WE(f.file,s,L)))}return{filesToParse:l,skippedOversized:c,tierBEntries:u,tierCSymbolEntries:p,changedBytes:d}}async function pv(t,e,r,n){let{workspaceRoot:i,git:s,fromSha:o,headSha:a}=t;if(r.status!==At.MODIFIED&&r.status!==At.ADDED)return{contractChanged:!1,findings:[]};let l=r.status===At.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 gv(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=A.resolve(T.AstProcessor,{logger:n}),_=A.resolve(T.GraphPersister),I=await ui({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=I.failures,f=I.callResolutionByFile}if(f&&Object.keys(f).length>0){EE(i,f,a);let m=yr(f);await V(r,{event:Y.DELTA_CALL_RESOLUTION,...m,files:Object.keys(f).length})}return await i.withWriteLock(()=>{if(c.length>0&&di(i,c),u.length>0&&CE(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 jv from"fs";import Vv from"path";async function jE(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(()=>{di(r,o)}),{filesQueued:o.length}}import fv from"path";var hv={".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 hd(t){return hv[fv.extname(t)]}function VE(t){let e={},r=[];for(let n of t){let i=hd(n.file);if(!i){r.push(n);continue}(e[i]??=[]).push(n)}return{buckets:e,unsupported:r}}function mi(t,e=S.DEFAULT_TIER_B_COMMIT_CAP_BYTES){return Number(t.meta.get(S.META_KEY_TIER_B_CHANGED_BYTES)??0)>=e}var mv=Object.values(en),zE="```";function JE(t){let e=t.trim();if(!e.startsWith(zE)||!e.endsWith(zE))return t;let r=e.indexOf(`
160
- `);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 ba(t){if(t==null)return;let e;try{e=JSON.parse(JE(t))}catch{return}if(Array.isArray(e))return e.map(r=>({title:String(r?.title??""),nodeType:mv.includes(r?.nodeType)?r.nodeType:en.CONTEXT,content:String(r?.content??""),confidence:typeof r?.confidence=="number"?r.confidence:0}))}function _v(){return new Date().toISOString().slice(0,10)}function Fa(t){return{date:t,calls:0,tokens:0}}function qE(t){let e=_v(),r=t.meta.get(S.META_KEY_TIER_C_BUDGET);if(!r)return Fa(e);try{let n=JSON.parse(r);return!n||typeof n.date!="string"||typeof n.calls!="number"||typeof n.tokens!="number"||n.date!==e?Fa(e):n}catch{return Fa(e)}}function QE(t,e){t.meta.set(S.META_KEY_TIER_C_BUDGET,JSON.stringify(e))}function md(t,e,r){return t.calls>=e||t.tokens>=r}function XE(t){return Math.ceil(t.length/4)}import ZE from"os";import Ev from"fs/promises";import eS from"path";var Sv=200,Tv=5e3,Rv=3e4;async function tS(t){let e=eS.join(t,_e,pp);try{return await Ev.mkdir(eS.dirname(e),{recursive:!0}),await A.resolve(T.ProcessLock)(e,{maxWaitMs:Sv,retryIntervalMs:50,heartbeatIntervalMs:Tv,staleAfterMs:Rv})}catch{return}}function rS(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=ZE.cpus().length||1,r=ZE.loadavg()[0]/e;return r>t?{ok:!1,note:`load ratio ${r.toFixed(2)} exceeds threshold ${t}`}:{ok:!0}}var ds={LLM_NOT_CONFIGURED:"llm-not-configured",LOCK_CONTENDED:"lock-contended",BUDGET_EXHAUSTED:"budget-exhausted",LOAD_HIGH:"load-high"},_r={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 _d(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 us(t,e,r){return t.logger.info(q.TIER_C_SKIPPED(r)),await V(t.workspaceRoot,{event:Y.TIER_C_SKIPPED,reason:r,queued:e}),_d({queued:e,processed:0,persisted:0,deduped:0,failed:0,skipped:!0,reason:r})}async function Av(t,e,r){let n=!1,i=null;try{let s=A.resolve(T.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 nS(t){let{workspaceRoot:e,store:r}=t,n=nr(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}),_d({queued:0,processed:0,persisted:0,deduped:0,failed:0,skipped:!1});if(await Av(t,r,e))return await us(t,n.length,"already-snapshotted-with-tier-c");if(!t.llmBaseUrl||!t.llmModel)return await us(t,n.length,ds.LLM_NOT_CONFIGURED);let s=await tS(e);if(!s)return await us(t,n.length,ds.LOCK_CONTENDED);try{return await yv(t,n)}finally{await s.release()}}async function yv(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=qE(n);if(md(o,i,s))return await us(t,e.length,ds.BUDGET_EXHAUSTED);let a=rS(t.loadThreshold);return a.note&&await V(r,{event:Y.TIER_C_LOAD_NOTE,note:a.note}),a.ok?await Iv(t,e,o,i,s):await us(t,e.length,ds.LOAD_HIGH)}function Jr(t){return{success:!1,reason:t,persistedCount:0,dedupedCount:0,tokensUsed:0,callsUsed:0}}function Ov(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 Iv(t,e,r,n,i){let{store:s,workspaceRoot:o,logger:a}=t,{wallClockMs:l,itemCap:c}=Ov(t),u=Date.now()+l,d=A.resolve(T.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(md(f,n,i)){await V(o,{event:Y.TIER_C_SKIPPED,reason:ds.BUDGET_EXHAUSTED,queued:e.length,midRun:!0});break}let I=await Fv(t,d,_);if(f=await Lv(s,f,I),await Cv(t,_,I,m))break}return await V(o,{event:Y.TIER_C_SUMMARY,queued:e.length,...m}),a.info(q.TIER_C_SUMMARY(m.processed,m.persisted)),m.processed>0&&await s.withWriteLock(()=>{s.meta.set("tierCProcessedThisRun","true")}),_d({queued:e.length,...m,skipped:!1})}async function Lv(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(()=>QE(t,n)),n}async function Cv(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(()=>NE(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(()=>PE(i,e.target,o));return a&&(t.logger.warn(q.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 Nv(t){return t instanceof E&&t.code===y.LLM_CHAT_COMPLETION_FAILED}function Pv(t){return t instanceof E&&t.code===y.LLM_RATE_LIMITED}function Dv(t){return t instanceof E&&t.code===y.LLM_AUTH_FAILED}function iS(t){return Pv(t)?_r.RATE_LIMITED:Dv(t)?_r.AUTH_FAILED:Nv(t)?_r.BRIDGE_UNREACHABLE:vv(t)}function vv(t){return t instanceof Error?t.message:String(t)}function wv(t){return t.replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F]/g,"").slice(0,ME)}async function sS(t,e,r,n){let s=(await t.chatCompletion({model:e,temperature:.2,messages:[{role:zt.SYSTEM,content:r},{role:zt.USER,content:n}]})).choices[0]?.message.content,o=ba(s),a=XE(r+n+(s??""));return{decisions:o,tokensUsed:a}}function bv(t,e){for(let r of e){let n=t.graph.findNodeIdByNodeKey(Dt(r));if(n!==void 0)return n}}function oS(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(Dt),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 Fv(t,e,r){return r.kind===On.COMMIT_MESSAGE?Mv(t,e,r):kv(t,e,r)}async function Mv(t,e,r){let{git:n,workspaceRoot:i,store:s,llmModel:o}=t,a=await n.getFilesChangedByCommit(i,r.commitSha),l=bv(s,a);if(l===void 0)return Jr(_r.NO_ANCHOR);let c;try{c=await sS(e,o,FE,kE(wv(r.message??"")))}catch(d){return{...Jr(iS(d)),callsUsed:1}}if(c.decisions===void 0)return{...Jr(_r.LLM_NON_JSON_OUTPUT),tokensUsed:c.tokensUsed,callsUsed:1};let{persisted:u,deduped:p}=oS(t,l,a,r.commitSha,c.decisions);return{success:!0,persistedCount:u,dedupedCount:p,tokensUsed:c.tokensUsed,callsUsed:1}}async function kv(t,e,r){let{git:n,workspaceRoot:i,store:s,llmModel:o}=t,a=r.file;if(!a)return Jr(_r.MISSING_FILE);let l=s.graph.findNodeIdByNodeKey(r.target)??s.graph.findNodeIdByNodeKey(Dt(a));if(l===void 0)return Jr(_r.NO_ANCHOR);let c=await n.readFileAtRef(i,S.HEAD_REF,a);if(c===void 0)return Jr(_r.FILE_UNREADABLE);let u=r.target.slice(r.target.indexOf("#")+1),p=xE(u,a,c),d;try{d=await sS(e,o,GE,p)}catch(_){return{...Jr(iS(_)),callsUsed:1}}if(d.decisions===void 0)return{...Jr(_r.LLM_NON_JSON_OUTPUT),tokensUsed:d.tokensUsed,callsUsed:1};let{persisted:f,deduped:m}=oS(t,l,[a],r.commitSha,d.decisions);return{success:!0,persistedCount:f,dedupedCount:m,tokensUsed:d.tokensUsed,callsUsed:1}}import Gv from"path";import xv from"crypto";import Uv from"fs/promises";function Hv(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 Bv(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 aS(t,e){let{workspaceRoot:r,logger:n,providerConfig:i,store:s,git:o}=e,a=A.resolve(T.EdgeResolutionProviders,{logger:n}),l=[],c=[],u=[],p=[];for(let _ of Object.keys(t)){let I=t[_];if(!I||I.length===0)continue;let C=a[_];if(!C){p.push({languageId:_,reason:`no LSP provider registered for language "${_}"`});continue}let L=C();i&&L.configure(i);let w=_===B.TYPESCRIPT?await Wv(s,o,r,I,n):void 0,Q=await L.resolveEdges({workspaceRoot:r,files:I.map(J=>J.file),callsByFile:w});Hv(Q,l,c,u),Q.unavailableReason&&p.push({languageId:_,reason:Q.unavailableReason})}let{unavailableReason:d,fullyDegraded:f,strayLanguageDegraded:m}=Bv(t,p);return{edges:l,filesProcessed:c,filesFailed:u,unavailableReason:d,degradedLanguages:p,fullyDegraded:f,strayLanguageDegraded:m}}function Kv(t){return t.split("\\").join("/")}async function $v(t,e,r,n){let i=Kv(e);if(!r.has(i)&&n.has(i))return n.get(i);try{let s=await Uv.readFile(Gv.join(t,e),H);return xv.createHash(Jt).update(s).digest("hex")}catch{return}}async function Yv(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 Wv(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(q.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 Yv(e,r),d={},f=0,m=0;for(let _ of o){let I=a.get(_);if(!I||I.length===0)continue;let C=c.get(_),L=await $v(r,_,u,p);if(!C||!L||C!==L){m++;continue}d[_]=I,f++}return i.info(q.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 Ed=50;async function cS(t){let e=await zv(t),r=await nS({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 zv(t){let{workspaceRoot:e,logger:r,store:n,git:i,knowledgeGit:s}=t;r.info(q.TIER_B_STARTING),await V(e,{event:Y.TIER_B_START});let o=await i.getHeadSha(e)??null,a=mi(n,t.commitCap);if(t.full){let{filesQueued:$}=await jE({workspaceRoot:e,store:n,git:i});r.info(q.TIER_B_FULL_RESYNC_QUEUED($)),await V(e,{event:Y.TIER_B_FULL_RESYNC_QUEUED,filesQueued:$})}let l=cs(n);if(l.length===0)return r.info(q.TIER_B_EMPTY_QUEUE),await V(e,{event:Y.TIER_B_EMPTY_QUEUE}),Qv(o,a);let{buckets:c,toProcess:u,droppedDeleted:p,skippedLanguage:d}=await Xv(t,l);if(await Zv(e,p,d),u.length===0)return await lS(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:[],edgesApplied:0,edgesPruned:0});let f=await ew(t,c);for(let $ of f.filesFailed)await V(e,{event:Y.TIER_B_FILE_FAILED,level:Ed,file:$.file,reason:$.reason,retryable:$.retryable});f.unavailableReason&&(await V(e,{event:Y.TIER_B_DEGRADED,level:Ed,reason:f.unavailableReason,degradedLanguages:f.degradedLanguages}),r.info(q.TIER_B_DEGRADED(f.unavailableReason)));let{edgesApplied:m,edgesPruned:_}=await tw(t,f,o),I=new Set(f.filesProcessed),C=new Map(f.filesFailed.map($=>[$.file,$.retryable])),L=[],w=u.filter($=>I.has($.file)?!1:C.get($.file)===!1?(L.push($),!1):!0),Q=I.size>0||m>0,J=Jv(n,u,f,Q,w,L,qv(c,f));return await lS(t,{headSha:o,commitCapExceeded:a,queued:l.length,droppedDeleted:p.length,skippedLanguage:d.length,outcome:f,failedEntries:w,permanentFailed:L,edgesApplied:m,edgesPruned:_,zeroProgressWatchdogTripped:J,degradedReason:f.unavailableReason})}function Jv(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 qv(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 Qv(t,e){return{kind:Te.TIER_B_BATCH,headSha:t,filesQueued:0,filesDroppedDeleted:0,filesSkippedLanguage:0,filesProcessed:0,filesFailed:0,filesFailedPermanent:0,edgesApplied:0,edgesPruned:0,degraded:!1,commitCapExceeded:e}}async function Xv(t,e){let{workspaceRoot:r}=t,n=[],i=[];for(let a of e)jv.existsSync(Vv.join(r,a.file))?n.push(a):i.push(a);let{buckets:s,unsupported:o}=VE(n);return{buckets:s,toProcess:Object.values(s).flatMap(a=>a??[]),droppedDeleted:i,skippedLanguage:o}}async function Zv(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 ew(t,e){let{workspaceRoot:r,logger:n,providerConfig:i,store:s,git:o}=t;return aS(e,{workspaceRoot:r,logger:n,providerConfig:i,store:s,git:o})}async function tw(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}->${me.CALLS}`;l.has(f)||(l.add(f),n.graph.insertLink({sourceNodeId:p,targetNodeId:d,linkType:me.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 lS(t,e){let{workspaceRoot:r,logger:n,store:i,knowledgeGit:s}=t,{headSha:o,outcome:a,failedEntries:l,permanentFailed:c}=e;if(o&&c.length>0){let p=i.projects.getFirst();if(p)for(let d of c)i.files.markTierBProcessed({projectId:p.id,filePath:d.file,commitSha:o})}if(o){let p={headSha:o,remainingQueue:l};await s.runUnderKnowledgeLock(r,async()=>{await i.withWriteLock(()=>{i.meta.set(S.META_KEY_TIER_B_BATCH_PENDING,JSON.stringify(p))})})}let u=a.filesProcessed.length;return await V(r,{event:Y.TIER_B_SUMMARY,...a.unavailableReason?{level:Ed}:{},headSha:o,filesQueued:e.queued,filesDroppedDeleted:e.droppedDeleted,filesSkippedLanguage:e.skippedLanguage,filesProcessed:u,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(q.TIER_B_SUMMARY(u,e.edgesApplied,c.length)),{kind:Te.TIER_B_BATCH,headSha:o,filesQueued:e.queued,filesDroppedDeleted:e.droppedDeleted,filesSkippedLanguage:e.skippedLanguage,filesProcessed:u,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 uS(t){return t.trim().replace(/\s+/g," ").toLowerCase()}function dS(t){return(t??"").trim().replace(/\s+/g," ")}function pS(t,e){let r=t.filter(i=>i.validity_status!==sr.GARBAGE),n=[];for(let i of e){let s=uS(i.title),o=dS(i.content);for(let a of r)uS(a.title)===s&&dS(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 gS(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 _i(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 nw(e,r);if(c===null)return{persisted:0,deduped:0,noGraphToAttach:!0};try{let u=c.projects.getFirst();if(!u)return await Sd(e,r),{persisted:0,deduped:0,noGraphToAttach:!0};let p=KE(c,e,n,i);if(p===void 0)return await Sd(e,r),{persisted:0,deduped:0,noGraphToAttach:!0};t.writerEnhancements?.warnOnAnchorContradictions&&rw(c.l3.getByL2NodeId(p),s,r);let d=await iw({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 rw(t,e,r){for(let n of pS(t,e))r.warn(q.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 nw(t,e){let r=A.resolve(T.GraphStoreOpener);try{return await r({dbPath:ie(t),readonly:!1})}catch(n){if(n instanceof E&&n.code===y.DB_OPEN_FAILED)return await Sd(t,e),null;throw n}}async function iw(t){let{workspaceRoot:e,store:r,projectId:n,anchorL2NodeId:i,files:s,decisions:o,source:a,extractionModel:l}=t,c=t.commitSha??await A.resolve(T.GitProvider).getHeadSha(e)??null,u=s.map(m=>Dt(m.relativePath)),p=t.captureAnchorRanges?await gS({git:A.resolve(T.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 Sd(t,e){e.warn(q.NO_GRAPH_TO_ATTACH),await V(t,{event:Y.FOCUSED_PERSIST_SKIPPED,message:q.NO_GRAPH_TO_ATTACH})}import fS from"fs";import ps from"path";function sw(t,e){let r=ps.relative(e,t);return r===""||r!==".."&&!r.startsWith(`..${ps.sep}`)&&!ps.isAbsolute(r)}async function hS(t){let{workspaceRoot:e,logger:r,targetPath:n,decisions:i}=t;r.info(q.EXTRACTING(n)),await V(e,{event:Y.FOCUSED_START,targetPath:n,source:Ft.AGENT_AUTHORED});let s=ps.resolve(e),o=ps.resolve(s,n);if(!sw(o,s)){let p=q.PATH_NOT_FOUND(n);throw await V(e,{event:Y.FOCUSED_ERROR,targetPath:n,message:p}),new E(y.INVALID_INPUT,p)}if(!fS.existsSync(o)){let p=q.PATH_NOT_FOUND(n);throw await V(e,{event:Y.FOCUSED_ERROR,targetPath:n,message:p}),new E(y.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}=zr(o,e,r);if(l.length>0&&r.warn(q.FILES_DROPPED(l.length),{droppedFiles:l,targetPath:n}),a.length===0&&!fS.statSync(o).isDirectory())throw new E(y.INVALID_INPUT,q.AGENT_AUTHORED_ANCHOR_UNRESOLVABLE(n));let{persisted:c,deduped:u}=await _i({workspaceRoot:e,logger:r,resolvedTargetPath:o,files:a,decisions:i,source:Ft.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 cw from"fs";import uw from"path";import Td from"fs/promises";import{statSync as ow}from"fs";import Ma from"path";var mS={CORRUPT_FILE:t=>`Could not parse ${t} -- treating staged L3 decisions as empty`};function _S(t){return Ma.join(t,_e,hp)}function aw(t){return typeof t=="object"&&t!==null&&Array.isArray(t.decisions)}async function Ei(t,e){let r=_S(t),n;try{n=await Td.readFile(r,H)}catch{return[]}let i;try{i=JSON.parse(n)}catch{return e.warn(mS.CORRUPT_FILE(r)),[]}return aw(i)?i.decisions:(e.warn(mS.CORRUPT_FILE(r)),[])}async function ES(t,e,r,n){let i=Ma.resolve(t,e),s;try{s=ow(i).isDirectory()}catch{throw new E(y.FS_READ_FAILED,q.PATH_NOT_FOUND(e))}let{files:o}=zr(i,t,n);if(!s&&o.length===0)throw new E(y.INVALID_INPUT,q.AGENT_AUTHORED_ANCHOR_UNRESOLVABLE(e));let a=Dt(Ma.relative(t,i)),l=await Ei(t,n),c=new Date().toISOString(),u=r.map(p=>({filePath:a,title:p.title,content:p.content,nodeType:p.nodeType,confidence:p.confidence,stagedAt:c}));return await Rd(t,[...l,...u]),{staged:u.length}}async function Rd(t,e){await Td.mkdir(Ma.join(t,_e),{recursive:!0}),await Td.writeFile(_S(t),`${JSON.stringify({decisions:e},null,2)}
161
- `,H)}import Ad from"fs/promises";import TS from"path";var SS={CORRUPT_FILE:t=>`Could not parse ${t} -- falling back to the default hooks config`};function RS(t){return TS.join(t,_e,fp)}function lw(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}async function Si(t,e){let r=RS(t),n;try{n=await Ad.readFile(r,H)}catch{return{...Ii}}let i;try{i=JSON.parse(n)}catch{return e.warn(SS.CORRUPT_FILE(r)),{...Ii}}if(!lw(i))return e.warn(SS.CORRUPT_FILE(r)),{...Ii};let s={...Ii};for(let o of Object.values(or)){let a=i[o];typeof a=="boolean"&&(s[o]=a)}return s}async function AS(t,e,r,n){let s={...await Si(t,n),[e]:r};await Ad.mkdir(TS.join(t,_e),{recursive:!0}),await Ad.writeFile(RS(t),`${JSON.stringify(s,null,2)}
162
- `,H)}function gs(t,e,r){return{kind:Te.FLUSH_STAGED_L3,skippedDisabled:t,flushed:0,deduped:0,stillPending:e,commitSha:r,noGraphToAttach:!1}}function dw(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 pw(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 gw(t){return t.map(e=>({title:e.title,content:e.content,nodeType:e.nodeType,confidence:e.confidence}))}async function fw(t,e,r,n,i){let s=uw.resolve(t,r);if(!cw.existsSync(s))return e.warn(q.FLUSH_STAGED_L3_FILE_DELETED(r),{droppedCount:n.length}),{persisted:0,deduped:0,dropped:n,retry:[],noGraphToAttach:!1};let{files:o,droppedFiles:a}=zr(s,t,e);a.length>0&&e.warn(q.FILES_DROPPED(a.length),{droppedFiles:a,filePath:r});let l=await _i({workspaceRoot:t,logger:e,resolvedTargetPath:s,files:o,decisions:gw(n),source:Ft.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 yS(t){let{workspaceRoot:e,logger:r}=t;if(!(await Si(e,r))[or.COMMIT_L3_WRITE])return r.info(q.FLUSH_STAGED_L3_DISABLED),await V(e,{event:Y.FLUSH_STAGED_L3_DISABLED}),gs(!0,0,null);let i=await Ei(e,r);if(i.length===0)return r.info(q.FLUSH_STAGED_L3_EMPTY),gs(!1,0,null);let s=A.resolve(T.GitProvider),o=await s.getHeadSha(e);if(!o)return gs(!1,i.length,null);let a=new Set(await s.getFilesChangedByCommit(e,o)),{toFlush:l,stillPending:c}=pw(i,a);if(l.length===0)return await V(e,{event:Y.FLUSH_STAGED_L3_SUMMARY,flushed:0,stillPending:c.length,commitSha:o}),gs(!1,c.length,o);let u=dw(l),p=0,d=0,f=0,m=0,_=[];try{for(let[C,L]of u){let w=await fw(e,r,C,L,o);p+=w.persisted,d+=w.deduped,f+=w.dropped.length,m+=Number(w.noGraphToAttach),_.push(...w.retry)}}catch(C){let L=C instanceof Error?C.message:String(C);return r.warn(q.FLUSH_STAGED_L3_ERROR(L)),await V(e,{event:Y.FLUSH_STAGED_L3_SUMMARY,error:L,commitSha:o}),gs(!1,i.length,o)}let I=[...c,..._];return await Rd(e,I),r.info(q.FLUSH_STAGED_L3_SUMMARY(p,I.length)),await V(e,{event:Y.FLUSH_STAGED_L3_SUMMARY,flushed:p,deduped:d,stillPending:I.length,droppedDeleted:f,commitSha:o}),{kind:Te.FLUSH_STAGED_L3,skippedDisabled:!1,flushed:p,deduped:d,stillPending:I.length,commitSha:o,noGraphToAttach:m>0}}var qr=class{constructor(e,r,n){this.workspaceRoot=e;this.logger=r;this.options=n}workspaceRoot;logger;options;async execute(){return this.options?.flushStagedL3?yS({workspaceRoot:this.workspaceRoot,logger:this.logger}):this.options?.agentAuthoredDecisions?hS({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=A.resolve(T.GitProvider),o=A.resolve(T.KnowledgeGitService,{logger:r});return i=await A.resolve(T.GraphStoreOpener)({dbPath:ie(e),readonly:!1}),await cS(Tw(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(q.AUTO_ANALYZING),await V(e,{event:Y.AUTO_START});let n;try{let i=A.resolve(T.GitProvider),s=A.resolve(T.KnowledgeGitService,{logger:r});return n=await A.resolve(T.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?q.AUTO_NOOP_DIRTY_WORKTREE:q.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 fd({workspaceRoot:i,logger:s,store:e,git:r,knowledgeGit:n,projectId:l.id,fromSha:u,headSha:o}):await hi({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 hi({workspaceRoot:s,logger:o,store:e,git:r})}async tryHydrateThenDelta(e,r,n,i){let{workspaceRoot:s,logger:o}=this,a=A.resolve(T.HydrationService,{logger:o}),l=await a.resolveHydrationCommit(s);if(!l)return;let c=await _w(r,s,l);if(!c||!(await a.hydrate(s,e)).hydrated)return;let p=await ci(e.projects,r,s);return await fd({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(!mi(e))return;n.info(q.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(q.EXTRACTING(e)),await V(r,{event:Y.FOCUSED_START,targetPath:e});let s=mw.resolve(r,e);if(!hw.existsSync(s)){let I=q.PATH_NOT_FOUND(e);throw await V(r,{event:Y.FOCUSED_ERROR,targetPath:e,message:I}),new E(y.FS_READ_FAILED,I)}let{files:o,droppedFiles:a}=zr(s,r,n);if(a.length>0&&n.warn(q.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(I=>`--- ${I.relativePath} ---
158
+ ${r}`;async function V(t,e){await ve(t,Li,e)}import fi from"fs";import gd from"path";var VD=40,zD=2e5,JD=".git",qD=new Set([at,JD,_e]);function HE(t){let e=[],r=fi.readdirSync(t,{withFileTypes:!0});for(let n of r){if(n.isDirectory()&&qD.has(n.name))continue;let i=gd.join(t,n.name);n.isDirectory()?e.push(...HE(i)):n.isFile()&&e.push(i)}return e}function UE(t,e){return t.startsWith(e+gd.sep)||t===e}function QD(t,e){try{return fi.realpathSync(t)}catch{return e.warn(q.FILE_READ_FAILED,{filePath:t,error:"Failed to resolve symlinks for file path"}),null}}function XD(t,e){try{return fi.readFileSync(t,H)}catch(r){return e.warn(q.FILE_READ_FAILED,{filePath:t,error:r instanceof Error?r.message:String(r)}),null}}function zr(t,e,r){let n=fi.realpathSync(e),i=fi.realpathSync(t);if(!UE(i,n))return r.warn(q.FILE_READ_FAILED,{filePath:t,error:`Resolved path ${i} is outside workspace root ${n}`}),{files:[],droppedFiles:[]};let o=fi.statSync(t).isDirectory()?HE(t):[t],a=[],l=[],c=0;for(let u of o){if(!Is(u))continue;let p=QD(u,r);if(p===null||!UE(p,n))continue;let d=gd.relative(e,u);if(a.length>=VD){l.push(d);continue}let f=XD(u,r);if(f!==null){if(c+f.length>zD){l.push(d);continue}c+=f.length,a.push({relativePath:d,content:f})}}return{files:a,droppedFiles:l}}async function hi(t){let{workspaceRoot:e,logger:r,store:n,git:i}=t;r.info(q.AUTO_FULL_INGESTION),await V(e,{event:Y.FULL_START});let s=O.resolve(T.FileDiscovery,{logger:r}),o=O.resolve(T.ConfigScanner,{logger:r}),a=O.resolve(T.VcsScanner,{logger:r}),l=O.resolve(T.AstProcessor,{logger:r}),c=O.resolve(T.GraphPersister),u=O.resolve(T.HydrationService,{logger:r}),p=O.resolve(T.KnowledgeGitService,{logger:r}),d=await ci(n.projects,i,e),f=await Ea({configScanner:o,vcsScanner:a,fileDiscovery:s,filesRepo:n.files,workspaceRoot:e}),{parsedResults:m,failures:_,callResolutionByFile:I}=await ui({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(I??{}).length>0){Ra(n,I??{});let J=Or(I??{});await V(e,{event:Y.FULL_CALL_RESOLUTION,...J,files:Object.keys(I??{}).length})}await Sa({store:n,git:i,workspaceRoot:e,parsedResults:m});try{await gi(e,n,p),await u.markSynced(e,n)}catch(J){let $=J instanceof Error?J.message:String(J);r.warn(q.SNAPSHOT_AFTER_FULL_INGESTION_FAILED,{error:$}),await V(e,{event:Y.FULL_SNAPSHOT_FAILED,message:$})}let C=f.filesToParse.length,L=m.length,b=_.length,Q=f.skippedOversized.length;return await V(e,{event:Y.FULL_SUMMARY,projectType:f.projectType,filesRequested:C,filesParsed:L,filesFailed:b,filesSkippedOversized:Q}),{kind:Te.AUTO_FULL_INGESTION,projectType:f.projectType,suggestedTags:Array.from(f.tags),filesRequested:C,filesParsed:L,filesFailed:b,filesSkippedOversized:Q}}import cv from"crypto";function BE(t){return t.meta.get(S.META_KEY_NODE_KEY_FORMAT_VERSION)!=="2"}import ZD from"path";function Dt(t){return t.replace(/\\/g,"/")}function KE(t,e,r,n){let i=Dt(ZD.relative(e,r)),s=t.graph.findNodeIdByNodeKey(i);if(s!==void 0)return s;for(let o of n){let a=t.graph.findNodeIdByNodeKey(Dt(o.relativePath));if(a!==void 0)return a}}var ev=new Set(["chore","style","ci","build","docs","test"]),tv=10,rv=/^(wip|fixup!|squash!|typo|lint|format|merge branch)/i,nv=/^([A-Za-z]+)(\([^)]*\))?!?:\s*(.*)$/;function iv(t){return t.split(`
159
+ `)[0]?.trim()??""}function sv(t,e){let r=t?.[1]?.toLowerCase();return!!(r&&e.has(r))}function ov(t,e){return(e?e[3]:t).trim()}function $E(t,e={}){let r=e.denylistTypes??ev,n=e.minSubjectLength??tv,i=iv(t);if(rv.test(i))return!1;let s=i.match(nv);return sv(s,r)?!1:ov(i,s).length>=n}var av=1,lv=500;async function YE(t,e,r,n,i){let s=await t.getCommitLog(e,n,lv),o=[];for(let{sha:a,message:l}of s){if(a===r)break;$E(l,i)&&o.push({kind:yn.COMMIT_MESSAGE,target:a,commitSha:a,message:l})}return o}function WE(t,e,r){return r.filter(n=>n.pruningLevel===av).map(n=>({kind:yn.CONTRACT_SYMBOL,target:`${Dt(t)}#${n.nodeId}`,commitSha:e,file:t}))}async function fd(t){let{workspaceRoot:e,logger:r,store:n,git:i,knowledgeGit:s,projectId:o,fromSha:a,headSha:l}=t;if(BE(n))return r.info(q.NODE_KEY_FORMAT_STALE),await V(e,{event:Y.DELTA_NODE_KEY_FORMAT_STALE}),hi({workspaceRoot:e,logger:r,store:n,git:i});if(!await i.isAncestor(e,a,l))return r.info(q.HEAD_NOT_DESCENDANT_OF_LAST_INGESTED),await V(e,{event:Y.DELTA_HEAD_NOT_DESCENDANT,fromSha:a,headSha:l}),hi({workspaceRoot:e,logger:r,store:n,git:i});r.info(q.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}=uv(c),{filesToParse:d,skippedOversized:f,tierBEntries:m,tierCSymbolEntries:_,changedBytes:I}=await dv(t,p),L=[...await YE(i,e,a,l),..._],b=[];await s.runUnderKnowledgeLock(e,async()=>{b=await gv(t,{toDelete:u,filesToParse:d,tierBEntries:m,tierCEntries:L,changedBytes:I})});let Q=d.length-b.length;return await V(e,{event:Y.DELTA_SUMMARY,fromSha:a,headSha:l,filesReparsed:Q,filesDeleted:u.size,filesFailed:b.length,filesSkippedOversized:f.length,tierBQueued:m.length,tierCQueued:L.length}),{kind:Te.AUTO_DELTA,fromSha:a,headSha:l,filesReparsed:Q,filesDeleted:u.size,filesFailed:b.length,filesSkippedOversized:f.length,tierBQueued:m.length,tierCQueued:L.length}}function uv(t){let e=new Set,r=[];for(let n of t){if(n.status===At.DELETED){e.add(n.file);continue}n.status===At.RENAMED&&n.oldFile&&e.add(n.oldFile),Dn(n.file)&&r.push(n)}return{toDelete:e,toReparse:r}}async function dv(t,e){let{workspaceRoot:r,logger:n,git:i,headSha:s}=t,o=await i.listTrackedFilesWithBlobHash(r),a=O.resolve(T.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 I=o.get(f.file)??cv.createHash(Jt).update(m).digest("hex");l.push({file:f.file,hash:I,code:m}),d+=_;let{contractChanged:C,findings:L}=await pv(t,a,f,m);C&&(u.push({file:f.file,commitSha:s}),p.push(...WE(f.file,s,L)))}return{filesToParse:l,skippedOversized:c,tierBEntries:u,tierCSymbolEntries:p,changedBytes:d}}async function pv(t,e,r,n){let{workspaceRoot:i,git:s,fromSha:o,headSha:a}=t;if(r.status!==At.MODIFIED&&r.status!==At.ADDED)return{contractChanged:!1,findings:[]};let l=r.status===At.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 gv(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=O.resolve(T.AstProcessor,{logger:n}),_=O.resolve(T.GraphPersister),I=await ui({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=I.failures,f=I.callResolutionByFile}if(f&&Object.keys(f).length>0){EE(i,f,a);let m=Or(f);await V(r,{event:Y.DELTA_CALL_RESOLUTION,...m,files:Object.keys(f).length})}return await i.withWriteLock(()=>{if(c.length>0&&di(i,c),u.length>0&&CE(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 jv from"fs";import Vv from"path";async function jE(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(()=>{di(r,o)}),{filesQueued:o.length}}import fv from"path";var hv={".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 hd(t){return hv[fv.extname(t)]}function VE(t){let e={},r=[];for(let n of t){let i=hd(n.file);if(!i){r.push(n);continue}(e[i]??=[]).push(n)}return{buckets:e,unsupported:r}}function mi(t,e=S.DEFAULT_TIER_B_COMMIT_CAP_BYTES){return Number(t.meta.get(S.META_KEY_TIER_B_CHANGED_BYTES)??0)>=e}var mv=Object.values(en),zE="```";function JE(t){let e=t.trim();if(!e.startsWith(zE)||!e.endsWith(zE))return t;let r=e.indexOf(`
160
+ `);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 wa(t){if(t==null)return;let e;try{e=JSON.parse(JE(t))}catch{return}if(Array.isArray(e))return e.map(r=>({title:String(r?.title??""),nodeType:mv.includes(r?.nodeType)?r.nodeType:en.CONTEXT,content:String(r?.content??""),confidence:typeof r?.confidence=="number"?r.confidence:0}))}function _v(){return new Date().toISOString().slice(0,10)}function Fa(t){return{date:t,calls:0,tokens:0}}function qE(t){let e=_v(),r=t.meta.get(S.META_KEY_TIER_C_BUDGET);if(!r)return Fa(e);try{let n=JSON.parse(r);return!n||typeof n.date!="string"||typeof n.calls!="number"||typeof n.tokens!="number"||n.date!==e?Fa(e):n}catch{return Fa(e)}}function QE(t,e){t.meta.set(S.META_KEY_TIER_C_BUDGET,JSON.stringify(e))}function md(t,e,r){return t.calls>=e||t.tokens>=r}function XE(t){return Math.ceil(t.length/4)}import ZE from"os";import Ev from"fs/promises";import eS from"path";var Sv=200,Tv=5e3,Rv=3e4;async function tS(t){let e=eS.join(t,_e,pp);try{return await Ev.mkdir(eS.dirname(e),{recursive:!0}),await O.resolve(T.ProcessLock)(e,{maxWaitMs:Sv,retryIntervalMs:50,heartbeatIntervalMs:Tv,staleAfterMs:Rv})}catch{return}}function rS(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=ZE.cpus().length||1,r=ZE.loadavg()[0]/e;return r>t?{ok:!1,note:`load ratio ${r.toFixed(2)} exceeds threshold ${t}`}:{ok:!0}}var ds={LLM_NOT_CONFIGURED:"llm-not-configured",LOCK_CONTENDED:"lock-contended",BUDGET_EXHAUSTED:"budget-exhausted",LOAD_HIGH:"load-high"},_r={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 _d(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 us(t,e,r){return t.logger.info(q.TIER_C_SKIPPED(r)),await V(t.workspaceRoot,{event:Y.TIER_C_SKIPPED,reason:r,queued:e}),_d({queued:e,processed:0,persisted:0,deduped:0,failed:0,skipped:!0,reason:r})}async function Av(t,e,r){let n=!1,i=null;try{let s=O.resolve(T.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 nS(t){let{workspaceRoot:e,store:r}=t,n=nr(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}),_d({queued:0,processed:0,persisted:0,deduped:0,failed:0,skipped:!1});if(await Av(t,r,e))return await us(t,n.length,"already-snapshotted-with-tier-c");if(!t.llmBaseUrl||!t.llmModel)return await us(t,n.length,ds.LLM_NOT_CONFIGURED);let s=await tS(e);if(!s)return await us(t,n.length,ds.LOCK_CONTENDED);try{return await Ov(t,n)}finally{await s.release()}}async function Ov(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=qE(n);if(md(o,i,s))return await us(t,e.length,ds.BUDGET_EXHAUSTED);let a=rS(t.loadThreshold);return a.note&&await V(r,{event:Y.TIER_C_LOAD_NOTE,note:a.note}),a.ok?await Iv(t,e,o,i,s):await us(t,e.length,ds.LOAD_HIGH)}function Jr(t){return{success:!1,reason:t,persistedCount:0,dedupedCount:0,tokensUsed:0,callsUsed:0}}function yv(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 Iv(t,e,r,n,i){let{store:s,workspaceRoot:o,logger:a}=t,{wallClockMs:l,itemCap:c}=yv(t),u=Date.now()+l,d=O.resolve(T.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(md(f,n,i)){await V(o,{event:Y.TIER_C_SKIPPED,reason:ds.BUDGET_EXHAUSTED,queued:e.length,midRun:!0});break}let I=await Fv(t,d,_);if(f=await Lv(s,f,I),await Cv(t,_,I,m))break}return await V(o,{event:Y.TIER_C_SUMMARY,queued:e.length,...m}),a.info(q.TIER_C_SUMMARY(m.processed,m.persisted)),m.processed>0&&await s.withWriteLock(()=>{s.meta.set("tierCProcessedThisRun","true")}),_d({queued:e.length,...m,skipped:!1})}async function Lv(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(()=>QE(t,n)),n}async function Cv(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(()=>NE(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(()=>PE(i,e.target,o));return a&&(t.logger.warn(q.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 Nv(t){return t instanceof E&&t.code===A.LLM_CHAT_COMPLETION_FAILED}function Pv(t){return t instanceof E&&t.code===A.LLM_RATE_LIMITED}function Dv(t){return t instanceof E&&t.code===A.LLM_AUTH_FAILED}function iS(t){return Pv(t)?_r.RATE_LIMITED:Dv(t)?_r.AUTH_FAILED:Nv(t)?_r.BRIDGE_UNREACHABLE:vv(t)}function vv(t){return t instanceof Error?t.message:String(t)}function bv(t){return t.replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F]/g,"").slice(0,ME)}async function sS(t,e,r,n){let s=(await t.chatCompletion({model:e,temperature:.2,messages:[{role:zt.SYSTEM,content:r},{role:zt.USER,content:n}]})).choices[0]?.message.content,o=wa(s),a=XE(r+n+(s??""));return{decisions:o,tokensUsed:a}}function wv(t,e){for(let r of e){let n=t.graph.findNodeIdByNodeKey(Dt(r));if(n!==void 0)return n}}function oS(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(Dt),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 Fv(t,e,r){return r.kind===yn.COMMIT_MESSAGE?Mv(t,e,r):kv(t,e,r)}async function Mv(t,e,r){let{git:n,workspaceRoot:i,store:s,llmModel:o}=t,a=await n.getFilesChangedByCommit(i,r.commitSha),l=wv(s,a);if(l===void 0)return Jr(_r.NO_ANCHOR);let c;try{c=await sS(e,o,FE,kE(bv(r.message??"")))}catch(d){return{...Jr(iS(d)),callsUsed:1}}if(c.decisions===void 0)return{...Jr(_r.LLM_NON_JSON_OUTPUT),tokensUsed:c.tokensUsed,callsUsed:1};let{persisted:u,deduped:p}=oS(t,l,a,r.commitSha,c.decisions);return{success:!0,persistedCount:u,dedupedCount:p,tokensUsed:c.tokensUsed,callsUsed:1}}async function kv(t,e,r){let{git:n,workspaceRoot:i,store:s,llmModel:o}=t,a=r.file;if(!a)return Jr(_r.MISSING_FILE);let l=s.graph.findNodeIdByNodeKey(r.target)??s.graph.findNodeIdByNodeKey(Dt(a));if(l===void 0)return Jr(_r.NO_ANCHOR);let c=await n.readFileAtRef(i,S.HEAD_REF,a);if(c===void 0)return Jr(_r.FILE_UNREADABLE);let u=r.target.slice(r.target.indexOf("#")+1),p=xE(u,a,c),d;try{d=await sS(e,o,GE,p)}catch(_){return{...Jr(iS(_)),callsUsed:1}}if(d.decisions===void 0)return{...Jr(_r.LLM_NON_JSON_OUTPUT),tokensUsed:d.tokensUsed,callsUsed:1};let{persisted:f,deduped:m}=oS(t,l,[a],r.commitSha,d.decisions);return{success:!0,persistedCount:f,dedupedCount:m,tokensUsed:d.tokensUsed,callsUsed:1}}import Gv from"path";import xv from"crypto";import Uv from"fs/promises";function Hv(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 Bv(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 aS(t,e){let{workspaceRoot:r,logger:n,providerConfig:i,store:s,git:o}=e,a=O.resolve(T.EdgeResolutionProviders,{logger:n}),l=[],c=[],u=[],p=[];for(let _ of Object.keys(t)){let I=t[_];if(!I||I.length===0)continue;let C=a[_];if(!C){p.push({languageId:_,reason:`no LSP provider registered for language "${_}"`});continue}let L=C();i&&L.configure(i);let b=_===B.TYPESCRIPT?await Wv(s,o,r,I,n):void 0,Q=await L.resolveEdges({workspaceRoot:r,files:I.map(J=>J.file),callsByFile:b});Hv(Q,l,c,u),Q.unavailableReason&&p.push({languageId:_,reason:Q.unavailableReason})}let{unavailableReason:d,fullyDegraded:f,strayLanguageDegraded:m}=Bv(t,p);return{edges:l,filesProcessed:c,filesFailed:u,unavailableReason:d,degradedLanguages:p,fullyDegraded:f,strayLanguageDegraded:m}}function Kv(t){return t.split("\\").join("/")}async function $v(t,e,r,n){let i=Kv(e);if(!r.has(i)&&n.has(i))return n.get(i);try{let s=await Uv.readFile(Gv.join(t,e),H);return xv.createHash(Jt).update(s).digest("hex")}catch{return}}async function Yv(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 Wv(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(q.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 Yv(e,r),d={},f=0,m=0;for(let _ of o){let I=a.get(_);if(!I||I.length===0)continue;let C=c.get(_),L=await $v(r,_,u,p);if(!C||!L||C!==L){m++;continue}d[_]=I,f++}return i.info(q.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 Ed=50;async function cS(t){let e=await zv(t),r=await nS({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 zv(t){let{workspaceRoot:e,logger:r,store:n,git:i,knowledgeGit:s}=t;r.info(q.TIER_B_STARTING),await V(e,{event:Y.TIER_B_START});let o=await i.getHeadSha(e)??null,a=mi(n,t.commitCap);if(t.full){let{filesQueued:$}=await jE({workspaceRoot:e,store:n,git:i});r.info(q.TIER_B_FULL_RESYNC_QUEUED($)),await V(e,{event:Y.TIER_B_FULL_RESYNC_QUEUED,filesQueued:$})}let l=cs(n);if(l.length===0)return r.info(q.TIER_B_EMPTY_QUEUE),await V(e,{event:Y.TIER_B_EMPTY_QUEUE}),Qv(o,a);let{buckets:c,toProcess:u,droppedDeleted:p,skippedLanguage:d}=await Xv(t,l);if(await Zv(e,p,d),u.length===0)return await lS(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:[],edgesApplied:0,edgesPruned:0});let f=await eb(t,c);for(let $ of f.filesFailed)await V(e,{event:Y.TIER_B_FILE_FAILED,level:Ed,file:$.file,reason:$.reason,retryable:$.retryable});f.unavailableReason&&(await V(e,{event:Y.TIER_B_DEGRADED,level:Ed,reason:f.unavailableReason,degradedLanguages:f.degradedLanguages}),r.info(q.TIER_B_DEGRADED(f.unavailableReason)));let{edgesApplied:m,edgesPruned:_}=await tb(t,f,o),I=new Set(f.filesProcessed),C=new Map(f.filesFailed.map($=>[$.file,$.retryable])),L=[],b=u.filter($=>I.has($.file)?!1:C.get($.file)===!1?(L.push($),!1):!0),Q=I.size>0||m>0,J=Jv(n,u,f,Q,b,L,qv(c,f));return await lS(t,{headSha:o,commitCapExceeded:a,queued:l.length,droppedDeleted:p.length,skippedLanguage:d.length,outcome:f,failedEntries:b,permanentFailed:L,edgesApplied:m,edgesPruned:_,zeroProgressWatchdogTripped:J,degradedReason:f.unavailableReason})}function Jv(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 qv(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 Qv(t,e){return{kind:Te.TIER_B_BATCH,headSha:t,filesQueued:0,filesDroppedDeleted:0,filesSkippedLanguage:0,filesProcessed:0,filesFailed:0,filesFailedPermanent:0,edgesApplied:0,edgesPruned:0,degraded:!1,commitCapExceeded:e}}async function Xv(t,e){let{workspaceRoot:r}=t,n=[],i=[];for(let a of e)jv.existsSync(Vv.join(r,a.file))?n.push(a):i.push(a);let{buckets:s,unsupported:o}=VE(n);return{buckets:s,toProcess:Object.values(s).flatMap(a=>a??[]),droppedDeleted:i,skippedLanguage:o}}async function Zv(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 eb(t,e){let{workspaceRoot:r,logger:n,providerConfig:i,store:s,git:o}=t;return aS(e,{workspaceRoot:r,logger:n,providerConfig:i,store:s,git:o})}async function tb(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 lS(t,e){let{workspaceRoot:r,logger:n,store:i,knowledgeGit:s}=t,{headSha:o,outcome:a,failedEntries:l,permanentFailed:c}=e;if(o&&c.length>0){let p=i.projects.getFirst();if(p)for(let d of c)i.files.markTierBProcessed({projectId:p.id,filePath:d.file,commitSha:o})}if(o){let p={headSha:o,remainingQueue:l};await s.runUnderKnowledgeLock(r,async()=>{await i.withWriteLock(()=>{i.meta.set(S.META_KEY_TIER_B_BATCH_PENDING,JSON.stringify(p))})})}let u=a.filesProcessed.length;return await V(r,{event:Y.TIER_B_SUMMARY,...a.unavailableReason?{level:Ed}:{},headSha:o,filesQueued:e.queued,filesDroppedDeleted:e.droppedDeleted,filesSkippedLanguage:e.skippedLanguage,filesProcessed:u,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(q.TIER_B_SUMMARY(u,e.edgesApplied,c.length)),{kind:Te.TIER_B_BATCH,headSha:o,filesQueued:e.queued,filesDroppedDeleted:e.droppedDeleted,filesSkippedLanguage:e.skippedLanguage,filesProcessed:u,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 uS(t){return t.trim().replace(/\s+/g," ").toLowerCase()}function dS(t){return(t??"").trim().replace(/\s+/g," ")}function pS(t,e){let r=t.filter(i=>i.validity_status!==sr.GARBAGE),n=[];for(let i of e){let s=uS(i.title),o=dS(i.content);for(let a of r)uS(a.title)===s&&dS(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 gS(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 _i(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 nb(e,r);if(c===null)return{persisted:0,deduped:0,noGraphToAttach:!0};try{let u=c.projects.getFirst();if(!u)return await Sd(e,r),{persisted:0,deduped:0,noGraphToAttach:!0};let p=KE(c,e,n,i);if(p===void 0)return await Sd(e,r),{persisted:0,deduped:0,noGraphToAttach:!0};t.writerEnhancements?.warnOnAnchorContradictions&&rb(c.l3.getByL2NodeId(p),s,r);let d=await ib({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 rb(t,e,r){for(let n of pS(t,e))r.warn(q.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 nb(t,e){let r=O.resolve(T.GraphStoreOpener);try{return await r({dbPath:ie(t),readonly:!1})}catch(n){if(n instanceof E&&n.code===A.DB_OPEN_FAILED)return await Sd(t,e),null;throw n}}async function ib(t){let{workspaceRoot:e,store:r,projectId:n,anchorL2NodeId:i,files:s,decisions:o,source:a,extractionModel:l}=t,c=t.commitSha??await O.resolve(T.GitProvider).getHeadSha(e)??null,u=s.map(m=>Dt(m.relativePath)),p=t.captureAnchorRanges?await gS({git:O.resolve(T.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 Sd(t,e){e.warn(q.NO_GRAPH_TO_ATTACH),await V(t,{event:Y.FOCUSED_PERSIST_SKIPPED,message:q.NO_GRAPH_TO_ATTACH})}import fS from"fs";import ps from"path";function sb(t,e){let r=ps.relative(e,t);return r===""||r!==".."&&!r.startsWith(`..${ps.sep}`)&&!ps.isAbsolute(r)}async function hS(t){let{workspaceRoot:e,logger:r,targetPath:n,decisions:i}=t;r.info(q.EXTRACTING(n)),await V(e,{event:Y.FOCUSED_START,targetPath:n,source:Ft.AGENT_AUTHORED});let s=ps.resolve(e),o=ps.resolve(s,n);if(!sb(o,s)){let p=q.PATH_NOT_FOUND(n);throw await V(e,{event:Y.FOCUSED_ERROR,targetPath:n,message:p}),new E(A.INVALID_INPUT,p)}if(!fS.existsSync(o)){let p=q.PATH_NOT_FOUND(n);throw await V(e,{event:Y.FOCUSED_ERROR,targetPath:n,message:p}),new E(A.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}=zr(o,e,r);if(l.length>0&&r.warn(q.FILES_DROPPED(l.length),{droppedFiles:l,targetPath:n}),a.length===0&&!fS.statSync(o).isDirectory())throw new E(A.INVALID_INPUT,q.AGENT_AUTHORED_ANCHOR_UNRESOLVABLE(n));let{persisted:c,deduped:u}=await _i({workspaceRoot:e,logger:r,resolvedTargetPath:o,files:a,decisions:i,source:Ft.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 cb from"fs";import ub from"path";import Td from"fs/promises";import{statSync as ob}from"fs";import Ma from"path";var mS={CORRUPT_FILE:t=>`Could not parse ${t} -- treating staged L3 decisions as empty`};function _S(t){return Ma.join(t,_e,hp)}function ab(t){return typeof t=="object"&&t!==null&&Array.isArray(t.decisions)}async function Ei(t,e){let r=_S(t),n;try{n=await Td.readFile(r,H)}catch{return[]}let i;try{i=JSON.parse(n)}catch{return e.warn(mS.CORRUPT_FILE(r)),[]}return ab(i)?i.decisions:(e.warn(mS.CORRUPT_FILE(r)),[])}async function ES(t,e,r,n){let i=Ma.resolve(t,e),s;try{s=ob(i).isDirectory()}catch{throw new E(A.FS_READ_FAILED,q.PATH_NOT_FOUND(e))}let{files:o}=zr(i,t,n);if(!s&&o.length===0)throw new E(A.INVALID_INPUT,q.AGENT_AUTHORED_ANCHOR_UNRESOLVABLE(e));let a=Dt(Ma.relative(t,i)),l=await Ei(t,n),c=new Date().toISOString(),u=r.map(p=>({filePath:a,title:p.title,content:p.content,nodeType:p.nodeType,confidence:p.confidence,stagedAt:c}));return await Rd(t,[...l,...u]),{staged:u.length}}async function Rd(t,e){await Td.mkdir(Ma.join(t,_e),{recursive:!0}),await Td.writeFile(_S(t),`${JSON.stringify({decisions:e},null,2)}
161
+ `,H)}import Ad from"fs/promises";import TS from"path";var SS={CORRUPT_FILE:t=>`Could not parse ${t} -- falling back to the default hooks config`};function RS(t){return TS.join(t,_e,fp)}function lb(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}async function Si(t,e){let r=RS(t),n;try{n=await Ad.readFile(r,H)}catch{return{...Ii}}let i;try{i=JSON.parse(n)}catch{return e.warn(SS.CORRUPT_FILE(r)),{...Ii}}if(!lb(i))return e.warn(SS.CORRUPT_FILE(r)),{...Ii};let s={...Ii};for(let o of Object.values(or)){let a=i[o];typeof a=="boolean"&&(s[o]=a)}return s}async function AS(t,e,r,n){let s={...await Si(t,n),[e]:r};await Ad.mkdir(TS.join(t,_e),{recursive:!0}),await Ad.writeFile(RS(t),`${JSON.stringify(s,null,2)}
162
+ `,H)}function gs(t,e,r){return{kind:Te.FLUSH_STAGED_L3,skippedDisabled:t,flushed:0,deduped:0,stillPending:e,commitSha:r,noGraphToAttach:!1}}function db(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 pb(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 gb(t){return t.map(e=>({title:e.title,content:e.content,nodeType:e.nodeType,confidence:e.confidence}))}async function fb(t,e,r,n,i){let s=ub.resolve(t,r);if(!cb.existsSync(s))return e.warn(q.FLUSH_STAGED_L3_FILE_DELETED(r),{droppedCount:n.length}),{persisted:0,deduped:0,dropped:n,retry:[],noGraphToAttach:!1};let{files:o,droppedFiles:a}=zr(s,t,e);a.length>0&&e.warn(q.FILES_DROPPED(a.length),{droppedFiles:a,filePath:r});let l=await _i({workspaceRoot:t,logger:e,resolvedTargetPath:s,files:o,decisions:gb(n),source:Ft.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 OS(t){let{workspaceRoot:e,logger:r}=t;if(!(await Si(e,r))[or.COMMIT_L3_WRITE])return r.info(q.FLUSH_STAGED_L3_DISABLED),await V(e,{event:Y.FLUSH_STAGED_L3_DISABLED}),gs(!0,0,null);let i=await Ei(e,r);if(i.length===0)return r.info(q.FLUSH_STAGED_L3_EMPTY),gs(!1,0,null);let s=O.resolve(T.GitProvider),o=await s.getHeadSha(e);if(!o)return gs(!1,i.length,null);let a=new Set(await s.getFilesChangedByCommit(e,o)),{toFlush:l,stillPending:c}=pb(i,a);if(l.length===0)return await V(e,{event:Y.FLUSH_STAGED_L3_SUMMARY,flushed:0,stillPending:c.length,commitSha:o}),gs(!1,c.length,o);let u=db(l),p=0,d=0,f=0,m=0,_=[];try{for(let[C,L]of u){let b=await fb(e,r,C,L,o);p+=b.persisted,d+=b.deduped,f+=b.dropped.length,m+=Number(b.noGraphToAttach),_.push(...b.retry)}}catch(C){let L=C instanceof Error?C.message:String(C);return r.warn(q.FLUSH_STAGED_L3_ERROR(L)),await V(e,{event:Y.FLUSH_STAGED_L3_SUMMARY,error:L,commitSha:o}),gs(!1,i.length,o)}let I=[...c,..._];return await Rd(e,I),r.info(q.FLUSH_STAGED_L3_SUMMARY(p,I.length)),await V(e,{event:Y.FLUSH_STAGED_L3_SUMMARY,flushed:p,deduped:d,stillPending:I.length,droppedDeleted:f,commitSha:o}),{kind:Te.FLUSH_STAGED_L3,skippedDisabled:!1,flushed:p,deduped:d,stillPending:I.length,commitSha:o,noGraphToAttach:m>0}}var qr=class{constructor(e,r,n){this.workspaceRoot=e;this.logger=r;this.options=n}workspaceRoot;logger;options;async execute(){return this.options?.flushStagedL3?OS({workspaceRoot:this.workspaceRoot,logger:this.logger}):this.options?.agentAuthoredDecisions?hS({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=O.resolve(T.GitProvider),o=O.resolve(T.KnowledgeGitService,{logger:r});return i=await O.resolve(T.GraphStoreOpener)({dbPath:ie(e),readonly:!1}),await cS(Tb(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(q.AUTO_ANALYZING),await V(e,{event:Y.AUTO_START});let n;try{let i=O.resolve(T.GitProvider),s=O.resolve(T.KnowledgeGitService,{logger:r});return n=await O.resolve(T.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?q.AUTO_NOOP_DIRTY_WORKTREE:q.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 fd({workspaceRoot:i,logger:s,store:e,git:r,knowledgeGit:n,projectId:l.id,fromSha:u,headSha:o}):await hi({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 hi({workspaceRoot:s,logger:o,store:e,git:r})}async tryHydrateThenDelta(e,r,n,i){let{workspaceRoot:s,logger:o}=this,a=O.resolve(T.HydrationService,{logger:o}),l=await a.resolveHydrationCommit(s);if(!l)return;let c=await _b(r,s,l);if(!c||!(await a.hydrate(s,e)).hydrated)return;let p=await ci(e.projects,r,s);return await fd({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(!mi(e))return;n.info(q.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(q.EXTRACTING(e)),await V(r,{event:Y.FOCUSED_START,targetPath:e});let s=mb.resolve(r,e);if(!hb.existsSync(s)){let I=q.PATH_NOT_FOUND(e);throw await V(r,{event:Y.FOCUSED_ERROR,targetPath:e,message:I}),new E(A.FS_READ_FAILED,I)}let{files:o,droppedFiles:a}=zr(s,r,n);if(a.length>0&&n.warn(q.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(I=>`--- ${I.relativePath} ---
163
163
  ${I.content}`).join(`
164
164
 
165
- `),u=A.resolve(T.LlmClient)();u.initialize({baseUrl:i.llmBaseUrl,apiKey:i.llmApiKey});let p;try{p=await u.chatCompletion({model:i.llmModel,temperature:.2,messages:[{role:zt.SYSTEM,content:bE},{role:zt.USER,content:l}]})}catch(I){let C=I instanceof Error?I.message:String(I);throw await V(r,{event:Y.FOCUSED_ERROR,targetPath:e,message:C}),I}let d=p.choices[0]?.message.content,f=ba(d);if(f===void 0){let I=q.LLM_NON_JSON_OUTPUT;throw await V(r,{event:Y.FOCUSED_ERROR,targetPath:e,message:I}),new E(y.LLM_INVALID_RESPONSE,I)}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 _i({workspaceRoot:i,logger:s,resolvedTargetPath:e,files:r,decisions:n,source:Ft.ANALYZE,extractionModel:o?.llmModel??null})}};async function _w(t,e,r){let i=(await t.getCommitLog(e,S.KNOWLEDGE_ROOT,S.KNOWLEDGE_LOG_SCAN_LIMIT)).find(s=>s.sha===r);return i?lr(i.message):void 0}function Ew(t){return{providerConfig:t?.lspProviderConfig,commitCap:t?.tierBCommitCap,llmBaseUrl:t?.llmBaseUrl,llmApiKey:t?.llmApiKey,llmModel:t?.llmModel,full:t?.full}}function Sw(t){return{tierCDailyCallCap:t?.tierCDailyCallCap,tierCDailyTokenCap:t?.tierCDailyTokenCap,tierCWallClockMs:t?.tierCWallClockMs,tierCItemCap:t?.tierCItemCap,tierCLoadThreshold:t?.tierCLoadThreshold,tierCDrainAll:t?.tierCDrainAll}}function Tw(t,e,r,n,i,s){return{workspaceRoot:t,logger:e,store:r,git:n,knowledgeGit:i,...Ew(s),...Sw(s),force:s?.force}}var ka={DETECTING_CHANGES:"Detecting changes...",DB_NOT_FOUND:'Local database not found. Please run "docuvia init".'},Ga={START:"review.start",ERROR:"review.error",SUMMARY:"review.summary"};async function xa(t,e){await ve(t,ip,e)}var Ua=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(e){let{workspaceRoot:r,logger:n}=this;n.info(ka.DETECTING_CHANGES),await xa(r,{event:Ga.START,baseRef:e??null});let o=(await A.resolve(T.GitProvider).getChangedFilesSince(r,e)).map(c=>({file:c.file,status:c.status}));await Vr(r,n);let a=A.resolve(T.GraphStoreOpener),l;try{l=await a({dbPath:ie(r),readonly:!0})}catch(c){throw c instanceof E&&c.code===y.DB_NOT_FOUND?(await xa(r,{event:Ga.ERROR,message:ka.DB_NOT_FOUND}),new E(y.DB_NOT_FOUND,ka.DB_NOT_FOUND,c)):c}try{let u=A.resolve(T.ChangeDetectionService,{logger:n}).detectChanges({store:l,baseRef:e??null,filesChanged:o});return await xa(r,{event:Ga.SUMMARY,baseRef:e??null,riskLevel:u.riskLevel,filesChanged:u.filesChanged.length,affectedNodes:u.affectedNodes.length}),u}finally{await l.close()}}};var vt={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_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 hs(t,e){await ve(t,sp,e)}function Rw(t,e,r,n){return t===void 0||e===void 0||t<e?vt.RISK_NOTE_EMPTY_WITH_PARTIAL_COVERAGE(t??0,e??0):r?vt.REGISTRY_MEDIATED_COVERAGE_NOTE:n&&n.applicable>=S.DEFAULT_CALL_RESOLUTION_MIN_SAMPLE&&n.resolved/n.applicable<S.DEFAULT_CALL_RESOLUTION_NOTE_THRESHOLD?vt.RISK_NOTE_EMPTY_LOW_RESOLUTION(n.resolved,n.applicable):vt.RISK_NOTE_EMPTY_STATIC_EDGES_ONLY}function OS(t){let{blastRadiusCount:e,computedRiskLevel:r,workspaceFilesProcessed:n,workspaceFilesTotal:i,registryMediated:s}=t;return e===0?{riskLevel:We.UNKNOWN,epistemic:Cl.LOWER_BOUND,riskNote:Rw(n,i,s,t.targetFileResolution)}:n===void 0||i===void 0||n<i?{riskLevel:r,epistemic:Cl.LOWER_BOUND,riskNote:vt.RISK_NOTE_PARTIAL_COVERAGE_NON_EMPTY(n??0,i??0)}:{riskLevel:r}}function IS(t,e){if(t)return e===vt.REGISTRY_MEDIATED_COVERAGE_NOTE?void 0:vt.REGISTRY_MEDIATED_COVERAGE_NOTE}import*as LS from"path";import*as CS from"fs/promises";var Ha=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(e){let{workspaceRoot:r,logger:n}=this;n.info(vt.RESOLVING),await hs(r,{event:fs.START,target:e}),await Vr(r,n);let i=A.resolve(T.GraphStoreOpener),s;try{s=await i({dbPath:ie(r),readonly:!0})}catch(o){throw o instanceof E&&o.code===y.DB_NOT_FOUND?(await hs(r,{event:fs.ERROR,target:e,message:vt.DB_NOT_FOUND}),new E(y.DB_NOT_FOUND,vt.DB_NOT_FOUND,o)):o}try{let o=A.resolve(T.ImpactService,{logger:n}),a=o.getBlastRadius(s,e);if(!a)return await hs(r,{event:fs.SUMMARY,target:e,found:!1,blastRadiusCount:0,riskLevel:null}),null;let l=o.computeRiskLevel(s,a.length);return await hs(r,{event:fs.SUMMARY,target:e,found:!0,blastRadiusCount:a.length,riskLevel:l}),{blastRadius:a,...await this.resolveEpistemicFields(s,e,a.length,l)}}finally{await s.close()}}async resolveEpistemicFields(e,r,n,i){let{tierBCoverage:s,registryMediated:o,targetFileResolution:a}=await this.resolveTargetContext(e,r,n),l=e.files.getTierBCoverage(),c=OS({blastRadiusCount:n,computedRiskLevel:i,workspaceFilesProcessed:l?.processedFiles,workspaceFilesTotal:l?.totalFiles,registryMediated:o,targetFileResolution:a}),u=l!=null&&l.totalFiles>0&&l.processedFiles<l.totalFiles,p=IS(o,c.riskNote);return{riskLevel:c.riskLevel,...c.epistemic?{epistemic:c.epistemic}:{},...c.riskNote?{riskNote:c.riskNote}:{},...p?{coverageNote:p}:{},...s?{tierBCoverage:s}:{},...u?{partialCoverage:!0}:{}}}async resolveTargetContext(e,r,n){let i=e.graph.findNodeByName(r),s=A.resolve(T.TierBCoverageHintProvider).resolve(e,i?.filePath,n===0,!1),o=n===0&&!!i?.filePath&&await this.fileUsesFactoryRegistry(i.filePath),a;if(i?.filePath){let l=Ta(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 CS.readFile(LS.join(this.workspaceRoot,e),H)}catch{return!1}return/docuviaFactory|TOKENS\./.test(r)}};var Ba={QUERYING:"Querying local knowledge graph...",DB_NOT_FOUND:'Local database not found. Please run "docuvia init".'},Ka={START:"query.start",ERROR:"query.error",SUMMARY:"query.summary"};async function $a(t,e){await ve(t,op,e)}var Ya=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(e,r){let{workspaceRoot:n,logger:i}=this;i.info(Ba.QUERYING),await $a(n,{event:Ka.START,target:e}),await Vr(n,i);let s=A.resolve(T.GraphStoreOpener),o;try{o=await s({dbPath:ie(n),readonly:!0})}catch(a){throw a instanceof E&&a.code===y.DB_NOT_FOUND?(await $a(n,{event:Ka.ERROR,target:e,message:Ba.DB_NOT_FOUND}),new E(y.DB_NOT_FOUND,Ba.DB_NOT_FOUND,a)):a}try{let l=A.resolve(T.QueryService,{logger:i}).query(o,e,r),c=!!l.l2||l.l3.length>0||!!l.context;return await $a(n,{event:Ka.SUMMARY,target:e,found:c}),l}finally{await o.close()}}};var Wa={EXPORTING:"Exporting topology...",DB_NOT_FOUND:'Local database not found. Please run "docuvia init".'},ja={START:"export-topology.start",ERROR:"export-topology.error",SUMMARY:"export-topology.summary"};async function Va(t,e){await ve(t,ap,e)}var za=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(e={}){let{workspaceRoot:r,logger:n}=this;n.info(Wa.EXPORTING),await Va(r,{event:ja.START,collapse:e.collapse??null});let i=A.resolve(T.GraphStoreOpener),s;try{s=await i({dbPath:ie(r),readonly:!0})}catch(o){throw o instanceof E&&o.code===y.DB_NOT_FOUND?(await Va(r,{event:ja.ERROR,message:Wa.DB_NOT_FOUND}),new E(y.DB_NOT_FOUND,Wa.DB_NOT_FOUND,o)):o}try{let a=A.resolve(T.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 Va(r,{event:ja.SUMMARY,nodeCount:a.stats.nodeCount,linkCount:a.stats.linkCount,groupCount:a.stats.groupCount,collapsed:a.collapsed}),a}finally{await s.close()}}};async function Nn(t,e){await ve(t,lp,e)}function Aw(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 NS(t,e){let r=A.resolve(T.GraphStoreOpener),n=A.resolve(T.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=Aw(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 Nn(t,{event:pi.TIER_B_FINALIZED,headSha:s.headSha,remainingQueueSize:s.remainingQueue.length})}finally{await i.close()}}var Ja=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===y.DB_NOT_FOUND?(await Nn(this.workspaceRoot,{event:pi.ERROR,message:Aa.DB_NOT_FOUND}),new E(y.DB_NOT_FOUND,Aa.DB_NOT_FOUND,r)):r}}async shouldSkipSnapshot(e,r){let i=await A.resolve(T.GitProvider).getHeadSha(this.workspaceRoot)??null,s=i&&typeof e.hasSourceCommitInHistory=="function"?await e.hasSourceCommitInHistory(this.workspaceRoot,i):!1,o=r.meta.get(S.META_KEY_TIER_B_BATCH_PENDING),a=r.meta.get(S.META_KEY_LAST_TIER_B_BATCH_SHA),l=r.meta.get("tierCProcessedThisRun")==="true";return{shouldSkip:!!(i&&s&&a===i&&!o&&!l),headSha:i}}async execute(){let{workspaceRoot:e,logger:r}=this;r.info(Aa.SNAPSHOTTING),await Nn(e,{event:pi.START,workspaceRoot:e});let n=A.resolve(T.GraphStoreOpener),i=A.resolve(T.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 Nn(e,{event:"snapshot.skipped",reason:"already-up-to-date",headSha:a}),{nodesWritten:0,edgesWritten:0,markdownFilesWritten:0};let l=await gi(e,s,i);return await NS(e,r),await Nn(e,{event:pi.SUMMARY,nodesWritten:l.nodesWritten,edgesWritten:l.edgesWritten,markdownFilesWritten:l.markdownFilesWritten}),l}finally{await s.close()}}};var yd={HYDRATING:"Hydrating local database from the knowledge branch...",NOTHING_TO_HYDRATE:'Nothing to hydrate from yet. Please run "docuvia init".'},qa={START:"hydrate.start",SUMMARY:"hydrate.summary"};async function Qa(t,e){await ve(t,cp,e)}var Xa=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(e){let{workspaceRoot:r,logger:n}=this;n.info(yd.HYDRATING),await Qa(r,{event:qa.START,workspaceRoot:r});let s=await A.resolve(T.GraphStoreOpener)({dbPath:ie(r),readonly:!1});try{let a=await A.resolve(T.HydrationService,{logger:n}).hydrate(r,s,void 0,e);return a.hydrated?(await Qa(r,{event:qa.SUMMARY,hydrated:!0,knowledgeSha:a.knowledgeSha,nodesLoaded:a.nodesLoaded,edgesLoaded:a.edgesLoaded,edgesDropped:a.edgesDropped}),a):(await Qa(r,{event:qa.SUMMARY,hydrated:!1,message:yd.NOTHING_TO_HYDRATE}),a)}finally{await s.close()}}};var ms={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}`},_s={START:"sync-knowledge.start",SUMMARY:"sync-knowledge.summary",VALIDITY_PASS:"sync-knowledge.l3-validity-pass"};async function Es(t,e){await ve(t,up,e)}var Za="l3ValidityJudgedSha";function yw(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 PS(t){if(!t)return[];try{let e=JSON.parse(t);return Array.isArray(e)?e:[]}catch{return[]}}function Ow(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 Iw(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([...PS(o.source_commits),...PS(o.initial_source_commits),...o.commit_hash?[o.commit_hash]:[]]),c=a.ranges.every(p=>Ow(p,r,l)),u=c?sr.ACTIVE:sr.GARBAGE;u!==o.validity_status&&(t.l3.updateValidityStatus(o.id,u),c?i++:s++)}return{activated:i,superseded:s}}async function DS(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(Za);if(l===o)return a;if(!l)return n.meta.set(Za,o),a.baseline=!0,a;let c=n.l3.getAllExportable().map(I=>({row:I,anchors:yw(I)})).filter(I=>I.anchors!==null&&(I.row.validity_status===sr.PENDING||I.row.validity_status===sr.ACTIVE));if(c.length===0)return n.meta.set(Za,o),a;let u=new Set(c.flatMap(I=>I.anchors.ranges.map(C=>C.path))),p=new Set((await i.getChangedFilesSince(e,l,"HEAD")).map(I=>I.file)),d=[...u].filter(I=>p.has(I)),f=new Map;for(let I of d)f.set(I,await s.getBlameLineOwners(e,I));let m=new Set(d),_=Iw(n,c,f,m);return a.activated=_.activated,a.superseded=_.superseded,n.meta.set(Za,o),a}var el=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(ms.SYNCING),await Es(e,{event:_s.START,workspaceRoot:e});let i=A.resolve(T.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(ms.VALIDITY_PASS_FAILED(a)),await Es(e,{event:_s.VALIDITY_PASS,status:"error",error:a})}return await Es(e,{event:_s.SUMMARY,status:s.status,branchTipSha:s.branchTipSha??null}),s}async importL3Cards(e,r){let{workspaceRoot:n,logger:i}=this,s=A.resolve(T.HydrationService,{logger:i}),a=await A.resolve(T.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 A.resolve(T.GraphStoreOpener)({dbPath:ie(e),readonly:!1});try{let s=await DS({workspaceRoot:e,logger:r,store:i,git:A.resolve(T.GitProvider),blame:A.resolve(T.LineBlameProvider)});s.baseline?r.info(ms.VALIDITY_PASS_BASELINE):r.info(ms.VALIDITY_PASS_SUMMARY(s.activated,s.superseded)),await Es(e,{event:_s.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"},vS=".log",Od={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 wS(t,e,r){let n=A.resolve(T.EdgeResolutionProviders,{logger:e}),i=await Id(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 Id(t,e){if(!A.has(T.GraphStoreOpener))return Object.keys(e);let r;try{r=await A.resolve(T.GraphStoreOpener)({dbPath:ie(t),readonly:!0});let i=cs(r),s=new Set;for(let o of i){let a=hd(o.file);a&&s.add(a)}return Array.from(s)}catch{return Object.keys(e)}finally{await r?.close()}}import{existsSync as Lw}from"fs";import*as Ld from"path";import{execFile as Cw}from"child_process";import{promisify as Nw}from"util";var Pw=Nw(Cw),Dw=5e3,vw="npx",ww="--no-install",Cd="docuvia",bw=[".cmd",".CMD",".exe",""],bS="docuvia doctor";function Fw(t){let e=Ld.join(t,"node_modules",".bin");return(process.platform==="win32"?bw.map(n=>`${Cd}${n}`):[Cd]).some(n=>Lw(Ld.join(e,n)))}function FS(t){if(!t||typeof t!="object")return"";let{stdout:e,stderr:r}=t;return`${e??""}${r??""}`}async function Mw(t){try{let e=await Pw(vw,[ww,Cd],{cwd:t,timeout:Dw});return FS(e).includes(bS)}catch(e){return FS(e).includes(bS)}}async function Nd(t){return Fw(t)?!0:Mw(t)}import*as Rt from"path";import*as ir from"fs/promises";var tl=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(!A.has(T.GraphStoreOpener))return!0;let r;try{r=await A.resolve(T.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(!A.has(T.GitProvider))return!0;try{let n=A.resolve(T.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(!A.has(T.KnowledgeGitService))return e;let r=A.resolve(T.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 Nd(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(Rt.join(o,S.POST_COMMIT_HOOK_NAME))}}async repairDuplicateGitHookIfRequested(e){if(!A.has(T.KnowledgeGitService))return e;let r=A.resolve(T.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(!A.has(T.GitProvider))return!0;try{let n=A.resolve(T.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(!A.has(T.KnowledgeGitService))return e;let r=A.resolve(T.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 Nd(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(Rt.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(!A.has(T.LlmClient))return!0;try{let o=A.resolve(T.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(!A.has(T.EdgeResolutionProviders))return!0;try{let r=A.resolve(T.EdgeResolutionProviders,{logger:this.logger}),n=await Id(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:Fn,filename:Or,platformName:Od.CLAUDE},{key:ue.AGENT_HOOKS_CURSOR,dir:Mn,filename:Ir,platformName:Od.CURSOR}];for(let{key:n,dir:i,filename:s,platformName:o}of r){let a=Rt.join(this.workspaceRoot,i,s),l;try{await ir.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(!A.has(T.GraphStoreOpener))return;let r;try{r=await A.resolve(T.GraphStoreOpener)({dbPath:ie(this.workspaceRoot),readonly:!0});let i=mi(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(!A.has(T.GraphStoreOpener))return!0;let r;try{r=await A.resolve(T.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(!A.has(T.GraphStoreOpener))return!0;let r;try{r=await A.resolve(T.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(!A.has(T.GraphStoreOpener)||!A.has(T.GitProvider))return!0;let r;try{let n=A.resolve(T.GitProvider);r=await A.resolve(T.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=nr(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=Rt.join(this.workspaceRoot,_e,Ar,Li),r;try{r=await ir.readFile(e,H)}catch{return!1}let n=S.DEFAULT_POST_COMMIT_INGESTION_GRACE_MS,i=Date.now(),s=r.split(`
166
- `).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(!A.has(T.GraphStoreOpener))return!0;let r;try{r=await A.resolve(T.GraphStoreOpener)({dbPath:ie(this.workspaceRoot),readonly:!0});let i=nr(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 Ei(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=Rt.join(this.workspaceRoot,_e,Ar,Li),r;try{r=await ir.readFile(e,H)}catch{return}let n,i;for(let s of r.split(`
167
- `))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(!A.has(T.GraphStoreOpener))return!0;let n;try{n=await A.resolve(T.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(!A.has(T.GitProvider))return!0;try{let n=await A.resolve(T.GitProvider).listWorktrees(this.workspaceRoot),i=Rt.resolve(this.workspaceRoot),s=[];for(let o of n){if(Rt.resolve(o.path)===i)continue;let a=Rt.join(o.path,_e,Ci);await ir.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(!A.has(T.GraphStoreOpener)||!A.has(T.GitProvider))return!0;let r;try{let n=A.resolve(T.GitProvider);r=await A.resolve(T.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 Ei(this.workspaceRoot,this.logger),c=new Set(l.map(d=>d.filePath)),u=r.l3.getAllExportable().filter(d=>d.source===Ft.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(!A.has(T.GraphStoreOpener))return!0;let r;try{r=await A.resolve(T.GraphStoreOpener)({dbPath:ie(this.workspaceRoot),readonly:!0});let{byFile:i,total:s}=SE(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=Ep(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=Rt.join(this.workspaceRoot,_e,Ci);if(!await ir.stat(r).catch(()=>null))return e[ue.DB_FOUND]={status:K.FAIL,message:k.DB_NOT_FOUND_AT(r)},!1;if(!A.has(T.DiagnosticRunnerDb))return e[ue.DB_RUNNER]={status:K.FAIL,message:k.DB_RUNNER_NOT_REGISTERED},!1;let s=await A.resolve(T.DiagnosticRunnerDb).checkHealth(r);return this.mergeDiagnosticResults(e,s)}async runGitDiagnostics(e){if(!A.has(T.DiagnosticRunnerGit))return e[ue.GIT_RUNNER]={status:K.FAIL,message:k.GIT_RUNNER_NOT_REGISTERED},!1;try{let n=await A.resolve(T.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===y.GIT_NETWORK_TIMEOUT?n=k.GIT_NETWORK_TIMEOUT_SUGGESTION:e.code===y.GIT_COMMAND_FAILED&&r.includes(k.GIT_NOT_A_REPO_TEXT)?n=k.GIT_NOT_A_REPO_SUGGESTION:e.code===y.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=Rt.join(this.workspaceRoot,_e,Ar);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 ir.readdir(e);for(let s of i){if(!s.endsWith(vS))continue;n++;let a=(await ir.readFile(Rt.join(e,s),H)).split(`
168
- `).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 rl=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(e=!1){let{workspaceRoot:r,logger:n}=this,i=A.resolve(T.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 MS from"fs/promises";import kw from"path";var kS={REMOVED:"Removed .docuvia/ directory",NOT_FOUND:".docuvia/ directory not present; nothing to remove"};async function GS(t,e){let r=kw.join(t,_e);if(!Ia(r,t))throw new E(y.UNINSTALL_WORKFLOW_FAILED,`Refusing to remove directory at ${r}: resolved outside workspace ${t}`);let n=!0;try{await MS.access(r)}catch{n=!1}return n?(await MS.rm(r,{recursive:!0,force:!0}),e.info(kS.REMOVED),{removed:!0}):(e.debug(kS.NOT_FOUND),{removed:!1})}async function xS(t,e){return Si(t,e)}async function US(t,e,r,n){return await AS(t,e,r,n),Si(t,n)}function Se(t,e){let r=R.get(t,e);if(r===void 0)throw new E(y.INVALID_INPUT,dE.MISSING_MEMORY_KEY(e,t));return r}function HS(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 ya(r,e).execute()},async clean(t,e){let r=Se(t,O.WORKSPACE_ROOT);return new La(r,e).execute()},async status(t,e){let r=Se(t,O.WORKSPACE_ROOT);return new Da(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 wa(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 qr(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 qr(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 qr(n,e,{targetPath:s,llmBaseUrl:l,llmApiKey:r,llmModel:c}).execute()}return R.get(t,O.ESCALATE_TO_LSP)?new qr(n,e,{escalateToLsp:!0,lspProviderConfig:HS(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 qr(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=xw.resolve(r,n);if(!Gw.existsSync(s))throw new E(y.FS_READ_FAILED,q.PATH_NOT_FOUND(n));return ES(r,n,i,e)},async review(t,e){let r=Se(t,O.WORKSPACE_ROOT),n=R.get(t,O.BASE_REF);return new Ua(r,e).execute(n)},async impact(t,e){let r=Se(t,O.WORKSPACE_ROOT),n=Se(t,O.TARGET);return new Ha(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 Ya(r,e).execute(n,i)},async exportTopology(t,e){let r=Se(t,O.WORKSPACE_ROOT),n=R.get(t,O.COLLAPSE);return new za(r,e).execute({collapse:n})},async snapshot(t,e){let r=Se(t,O.WORKSPACE_ROOT);return new Ja(r,e).execute()},async hydrate(t,e,r){let n=Se(t,O.WORKSPACE_ROOT);return new Xa(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 el(r,e,n).execute()},async doctor(t,e,r){let n=Se(t,O.WORKSPACE_ROOT);return new tl(n,e).execute(r)},async uninstallGitHooks(t,e){let r=Se(t,O.WORKSPACE_ROOT),n=R.get(t,O.KEEP_DB);return new rl(r,e).execute(n)},async removeDocuviaDir(t,e){let r=Se(t,O.WORKSPACE_ROOT);return GS(r,e)},async listHooks(t,e){let r=Se(t,O.WORKSPACE_ROOT);return xS(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 US(r,n,i,e)},async checkTierBGate(t,e){let r=Se(t,O.WORKSPACE_ROOT);return wS(r,e,HS(t))}};import BS from"pino";import{createRequire as Uw}from"module";var Hw=Uw(import.meta.url),Pd="pino-pretty",Bw=`[docuvia] ${Pd} unavailable, falling back to plain JSON logs.
169
- `,Kw=["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"],$w="[REDACTED]",Yw="1";function Ww(){if(process.env.DOCUVIA_PRETTY_LOGS===Yw)try{return Hw.resolve(Pd),{target:Pd,options:{colorize:!0,destination:2}}}catch{process.stderr.write(Bw);return}}function ee(){let t=Ww(),e=BS({level:process.env.LOG_LEVEL||Oe.INFO,redact:{paths:[...Kw],censor:$w},transport:t},t?void 0:BS.destination(2)),r=new Jd;return r.onLog(n=>{e[n.level](n.context??{},n.message)}),r}var Qr={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 ft=class{};import*as tt from"fs/promises";import*as wt from"path";var KS=".js",$S=".cjs",nl=class extends ft{name=Fp;slug=Up;async installHooks(e){await this.configureHooks(e),await this.configureMcpServer(e)}async configureHooks(e){let r=wt.join(e,Mn);await tt.mkdir(r,{recursive:!0}),await tt.writeFile(wt.join(r,Ir),vs,{mode:493});let n=nn.replace(/\${HOOKS_DIR}/g,Gl).replace(KS,$S);await yt(wt.join(r,kn),n,Ir)}async configureMcpServer(e){let r=wt.join(e,bl);try{let n={mcpServers:{}};try{let i=await tt.readFile(r,H);n=JSON.parse(i)}catch{await tt.mkdir(wt.dirname(r),{recursive:!0})}n.mcpServers=n.mcpServers||{},n.mcpServers[Gn]={command:Ps,args:[Vp,...Ds]},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=wt.join(e,Mn);try{await tt.unlink(wt.join(r,Ir)),h.success(`${g.UNINSTALL_REMOVED_FILE_PREFIX}${Ir}`)}catch{}let{removeBlock:n}=await import("./fs-utils-FRYB7LND.js"),{CURSOR_RULES_FILENAME:i,AGENT_INSTRUCTIONS_MARKER:s,AGENT_INSTRUCTIONS_END_MARKER:o}=await import("./init-templates-R6BFAJUH.js"),a=wt.join(e,i);await n(a,`<!-- ${s} -->`,`<!-- ${o} -->`);let l=wt.join(r,kn),c=!1;try{(await tt.readFile(l,H)).trim()===nn.replace(/\$\{HOOKS_DIR\}/g,Gl).replace(KS,$S).trim()&&(await tt.unlink(l),c=!0)}catch{}if(c)try{await tt.rmdir(r)}catch{}let u=wt.join(e,bl);try{let p=await tt.readFile(u,H),d=JSON.parse(p);d?.mcpServers&&d.mcpServers[Gn]&&(delete d.mcpServers[Gn],await tt.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 rt from"path";import Ss from"process";var jw="win32",Vw="darwin",zw="Library",Jw="Application Support",qw=".config";async function Qw(t){try{await Je.unlink(rt.join(t,Or)),h.success(`${g.UNINSTALL_REMOVED_FILE_PREFIX}${Or}`)}catch{}}async function Xw(t){let e=rt.join(t,kn);try{if((await Je.readFile(e,H)).trim()===nn.replace(/\$\{HOOKS_DIR\}/g,kl).trim())return await Je.unlink(e),!0}catch{}return!1}async function Zw(t){try{await Je.rmdir(t)}catch{}}function YS(){let t=nn.replace(/\${HOOKS_DIR}/g,Wp);return JSON.parse(t)[kt][0]}function jS(t){let e=t.hooks,r=Array.isArray(e)?e[0]?.command:void 0;return typeof r=="string"?r:""}function VS(t,e){let r=t?.hooks;return Array.isArray(r)&&r.some(n=>n?.command===e)}async function eb(t){try{let e=await Je.readFile(t,H);return{settings:JSON.parse(e),aborted:!1}}catch(e){return e?.code!==Ls?(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 tb(t,e){let{settings:r,aborted:n}=await eb(t);if(n)return;if(r.hooks=r.hooks??{},r.hooks[kt]!==void 0&&!Array.isArray(r.hooks[kt])){h.warn(g.FS_UNEXPECTED_SHAPE(kt,t));return}r.hooks[kt]=r.hooks[kt]??[];let i=r.hooks[kt],s=jS(e);i.some(o=>VS(o,s))||(i.push(e),await Je.mkdir(rt.dirname(t),{recursive:!0}),await Je.writeFile(t,`${JSON.stringify(r,null,2)}
170
- `,H))}async function rb(t,e){let r;try{let s=await Je.readFile(t,H);r=JSON.parse(s)}catch{return}let n=r?.hooks?.[kt];if(!Array.isArray(n))return;let i=n.filter(s=>!VS(s,e));if(i.length!==n.length){if(i.length===0?delete r.hooks[kt]:r.hooks[kt]=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+Ns);return}await Je.writeFile(t,`${JSON.stringify(r,null,2)}
171
- `,H),h.success(g.UNINSTALL_REMOVED_HOOK_FROM_SETTINGS_PREFIX+t)}}function nb(t){let e=rt.join(t,Fl);h.info(`${g.UNINSTALL_CLAUDE_MCP_MANUAL_REMINDER} (${e}).`)}function WS(){return Ss.platform===jw?rt.join(Ss.env.APPDATA||"",Pi):Ss.platform===Vw?rt.join(Ss.env.HOME||"",zw,Jw,Pi):rt.join(Ss.env.HOME||"",qw,Pi)}var il=class extends ft{name=Pi;slug=Hp;async installHooks(e){await this.configureHooks(e),this.printMcpServerSnippet(e)}printMcpServerSnippet(e){let r=WS();if(!r)return;let n=rt.join(r,Fl),i=JSON.stringify({mcpServers:{[Gn]:{command:Ps,args:[jp,...Ds],env:{[zp]:e}}}},null,2);h.info(`${g.INIT_CLAUDE_MCP_MANUAL_SNIPPET} (${n}):
172
- ${i}`)}async configureHooks(e){let r=rt.join(e,Fn);await Je.mkdir(r,{recursive:!0}),await Je.writeFile(rt.join(r,Or),vs,{mode:493});let n=nn.replace(/\${HOOKS_DIR}/g,kl);await yt(rt.join(r,kn),n,Or),await tb(rt.join(e,wl,Ns),YS())}async uninstallHooks(e){let r=rt.join(e,Fn);await Qw(r),await Xw(r)&&await Zw(r);try{await rb(rt.join(e,wl,Ns),jS(YS()))}catch{}let i=WS();i&&nb(i)}};import*as zS from"path";var sl=class extends ft{name=Mp;slug=Bp;instructionsPath(e){return zS.join(e,Ip,Lp)}async installHooks(e){await yt(this.instructionsPath(e),Cr,_t)}async uninstallHooks(e){await Nr(this.instructionsPath(e),`<!-- ${_t} -->`,`<!-- ${Lr} -->`)}};import*as JS from"path";var ol=class extends ft{name=kp;slug=Kp;agentsMdPath(e){return JS.join(e,vp)}async installHooks(e){await yt(this.agentsMdPath(e),Cr,_t)}async uninstallHooks(e){await Nr(this.agentsMdPath(e),`<!-- ${_t} -->`,`<!-- ${Lr} -->`)}};import*as ll from"fs/promises";import*as Dd from"path";var al=class extends ft{name=Gp;slug=$p;rulesDir(e){return Dd.join(e,bp)}rulesFilePath(e){return Dd.join(this.rulesDir(e),Ml)}async installHooks(e){await yt(this.rulesFilePath(e),Cr,_t)}async uninstallHooks(e){try{await ll.unlink(this.rulesFilePath(e)),h.success(`${g.UNINSTALL_REMOVED_FILE_PREFIX}${Ml}`)}catch{return}try{await ll.rmdir(this.rulesDir(e))}catch{}}};import*as qS from"path";var cl=class extends ft{name=xp;slug=Yp;hermesMdPath(e){return qS.join(e,wp)}async installHooks(e){await yt(this.hermesMdPath(e),Cr,_t)}async uninstallHooks(e){await Nr(this.hermesMdPath(e),`<!-- ${_t} -->`,`<!-- ${Lr} -->`)}};function ib(){return[new nl,new il,new sl,new ol,new al,new cl]}function sb(t){return t.split(",").map(e=>e.trim().toLowerCase()).filter(Boolean)}async function ul(t,e,r,n=ib()){if(e!==void 0){let i=sb(e),s=n.map(a=>a.slug),o=i.filter(a=>!s.includes(a));if(o.length>0)throw new Error(Qr.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 ob from"fs/promises";import QS from"path";var ab=30*6e4,lb=1e4,cb=3e4;async function dl(t,e,r){let n=QS.join(t,_e,dp);await ob.mkdir(QS.dirname(n),{recursive:!0});let s=await A.resolve(T.ProcessLock)(n,{maxWaitMs:ab,heartbeatIntervalMs:lb,staleAfterMs:cb,onWaiting:r});try{return await e()}finally{await s.release()}}import*as Bt from"fs";import*as Ti from"path";var ub=["---","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(`
173
- `),db=["---","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(`
174
- `),pb=["---","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(`
175
- `),gb=["---","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(`
176
- `),XS=[{dirName:"docuvia-exploring",content:ub},{dirName:"docuvia-impact-analysis",content:db},{dirName:"docuvia-knowledge-graph",content:pb},{dirName:"docuvia-agent-authored",content:gb}];var ZS=".claude/skills";function eT(t){let e=Ti.join(t,ZS),r=[],n=[];for(let i of XS)fb(e,i)==="installed"?r.push(i.dirName):n.push(i.dirName);return{installed:r,skipped:n}}function tT(t){let e=Ti.join(t,ZS),r=[];if(!Bt.existsSync(e))return r;let n=Bt.readdirSync(e,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()||!i.name.startsWith("docuvia-"))continue;let s=Ti.join(e,i.name);Bt.rmSync(s,{recursive:!0,force:!0}),r.push(i.name)}return r}function fb(t,e){let r=Ti.join(t,e.dirName),n=Ti.join(r,"SKILL.md");return Bt.existsSync(n)?"skipped":(Bt.mkdirSync(r,{recursive:!0}),Bt.writeFileSync(n,e.content,"utf-8"),"installed")}var mb=vd.object({cwd:vd.string().min(1,Qr.WORKSPACE_ROOT_EMPTY),platformFilter:vd.string().optional()});async function _b(t){let e=h.spinner(g.INIT_START).start(),r=hb.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 Eb(t,e,r){h.info(g.INIT_AGENT_HOOKS);let n=await ul(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 rT(t=pl.cwd(),e,r=!1,n=!1){let i=mb.parse({cwd:t,platformFilter:e});h.header(g.INIT_HEADER),r&&(await h.askConfirm(g.INIT_CONFIRM,!0)||(h.warn(g.INIT_ABORTED),pl.exit(0)));let s=!1,o;await dl(i.cwd,async()=>{try{await _b(i.cwd)}catch{s=!0}if(!s)try{await Eb(i.cwd,i.platformFilter,r)}catch(a){o=a}},()=>h.info(g.INIT_LOCK_WAITING)),s&&pl.exit(1),o!==void 0&&(h.error(g.INIT_HOOKS_FAIL+o),pl.exit(1)),n&&Sb(t)}function Sb(t){try{let e=eT(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 wd from"process";import Tb from"crypto";async function nT(t=wd.cwd(),e=!1){h.header(g.CLEAN_HEADER),e&&(await h.askConfirm(g.CLEAN_CONFIRM,!1)||(h.warn(g.CLEAN_ABORTED),wd.exit(0)));let r=h.spinner(g.CLEAN_START).start(),n=Tb.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),wd.exitCode=1}finally{R.deleteScope(n)}}import iT from"process";import Rb from"crypto";async function sT(t=iT.cwd()){let e=h.spinner(g.STATUS_START).start(),r=Rb.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),iT.exitCode=1}finally{R.deleteScope(r)}}import Er from"process";import Ob from"crypto";var z={INDENT_TWO:" ",NEWLINE:`
177
- `,OPEN_PAREN:" (",CLOSE_PAREN:")",DOUBLE_QUOTE:'"',EMPTY:"",ELLIPSIS:"...",SHORT_SHA_LENGTH:7};import Ab from"process";import{createInterface as yb}from"readline";async function gl(){let t=yb({input:Ab.stdin}),e=[];try{for await(let r of t)e.push(r)}finally{t.close()}return e.join(`
178
- `).trim()}async function Ib(t,e){if(t)return t;e||(h.error(g.PUBLISH_MISSING_PROJECT_ID),Er.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),Er.exit(1)),r}function Lb(){return!!Er.env.DOCUVIA_API_URL&&!!Er.env.MCP_PAT}async function Cb(t){return t||(Er.stdin.isTTY?void 0:gl())}async function Nb(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),Er.exitCode=1}finally{R.deleteScope(t)}}async function oT(t,e=Er.cwd(),r=!1){h.header(g.PUBLISH_HEADER);let n=await Ib(t.projectId,r);if(!Lb()){h.warn(g.PUBLISH_MISSING_ENV),h.warn(g.PUBLISH_SKIP);return}let i=await Cb(t.commitSha),s=h.spinner(g.PUBLISH_START+n+z.ELLIPSIS).start(),o=Ob.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,Er.env.DOCUVIA_API_URL),R.set(o,O.PROJECT_ID,n),R.set(o,O.COMMIT_SHA,i||void 0),await Nb(o,a,s,Er.env.MCP_PAT)}import be from"process";import fl from"crypto";import bb from"fs/promises";import{z as Pn}from"zod";function lT(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(y.INVALID_INPUT,g.ANALYZE_LSP_ARGS_INVALID_JSON(String(n)))}if(!Array.isArray(r)||r.some(n=>typeof n!="string"))throw new E(y.INVALID_INPUT,g.ANALYZE_LSP_ARGS_INVALID_SHAPE);return r}return wb(e)}}function Pb(t,e){return t==="\\"&&e!==void 0&&(e==='"'||e==="\\")}function Db(t){return t==='"'||t==="'"}function vb(t){return/\s/.test(t)}function aT(t,e){return e.length>0&&t.push(e),""}function wb(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==='"'&&Pb(s,o)?(r+=o,i++):r+=s;continue}Db(s)?n=s:s==="\\"&&o!==void 0?(r+=o,i++):vb(s)?r=aT(e,r):r+=s}return aT(e,r),e}var Fb=Pn.object({title:Pn.string().min(1),content:Pn.string(),nodeType:Pn.nativeEnum(en),confidence:Pn.number().min(0).max(1)}),Mb=Pn.object({decisions:Pn.array(Fb)});function cT(){let t=be.env.AI_DOCUVIA_INTEGRATIONS_OPENAI_BASE_URL,e=be.env.AI_DOCUVIA_INTEGRATIONS_OPENAI_API_KEY,r=be.env.AI_DOCUVIA_MODEL||be.env.AI_DOCUVIA_FAST_MODEL;return!t||!r?null:{llmBaseUrl:t,llmApiKey:e,llmModel:r}}async function kb(t){let e=t?await bb.readFile(t,H):be.stdin.isTTY?void 0:await gl();if(!e)return;let r;try{r=JSON.parse(e)}catch(i){throw new E(y.INVALID_INPUT,g.ANALYZE_AGENT_AUTHORED_INVALID_JSON(String(i)))}let n=Mb.safeParse(r);if(!n.success)throw new E(y.INVALID_INPUT,g.ANALYZE_AGENT_AUTHORED_INVALID_SHAPE(n.error.message));return n.data}function Gb(){let t=be.env.DOCUVIA_TIER_C_DAILY_CALL_CAP,e=be.env.DOCUVIA_TIER_C_DAILY_TOKEN_CAP,r=be.env.DOCUVIA_TIER_C_WALL_CLOCK_MS,n=be.env.DOCUVIA_TIER_C_ITEM_CAP,i=be.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 xb(t,e){let r=be.env.DOCUVIA_LSP_ARGS,n=be.env.DOCUVIA_LSP_TIMEOUT_MS,i=be.env.DOCUVIA_LSP_MAX_PROCESSES,s=be.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:be.env.DOCUVIA_LSP_BINARY,lspArgsOverride:lT(r),lspTimeoutMs:t??(n?Number(n):void 0),lspMaxProcesses:e??o(i),tierBCommitCap:s?Number(s):void 0}}function Ub(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 Hb(t,e){e.succeed(g.ANALYZE_AUTO_DELTA_SUCCESS),h.info(g.ANALYZE_AUTO_DELTA_SUMMARY(t.filesReparsed,t.filesDeleted,t.tierBQueued))}function Bb(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 Kb(t,e,r){t.degraded?(e.succeed(g.ANALYZE_TIER_B_DEGRADED(t.degradedReason??"")),r||(be.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.zeroProgressWatchdogTripped))),$b(t)}function $b(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 Yb(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 bd(t,e,r){switch(t.kind){case Te.AUTO_FULL_INGESTION:Ub(t,e);break;case Te.AUTO_DELTA:Hb(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:Bb(t,e);break;case Te.TIER_B_BATCH:Kb(t,e,r);break;case Te.FLUSH_STAGED_L3:Yb(t,e);break}}function uT(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+z.ELLIPSIS:t?g.ANALYZE_FOCUSED_START+t+z.ELLIPSIS:e?g.ANALYZE_TIER_B_START:g.ANALYZE_START).start()}function Wb(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),dT(t,o,a),jb(t,n))}function jb(t,e){e&&(R.set(t,O.LLM_BASE_URL,e.llmBaseUrl),R.set(t,O.LLM_MODEL,e.llmModel));let r=Gb();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 dT(t,e,r){let n=xb(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 Fd(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),be.exitCode=1}async function Vb(t,e,r){let n=fl.randomUUID();R.createScope(n),R.set(n,O.WORKSPACE_ROOT,t),dT(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??"")),be.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 zb(t,e,r){let n;try{n=await kb(r.decisionsFile)}catch(a){let l=a instanceof E||a instanceof Error?a.message:String(a);h.error(l),be.exitCode=1;return}if(!n){h.error(g.ANALYZE_AGENT_AUTHORED_MISSING_PAYLOAD),be.exitCode=1;return}let i=uT(t,!1,r.stage),s=fl.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);bd(a,i,!1)}}catch(a){Fd(a,t,!1,i)}finally{R.deleteScope(s)}}async function Jb(t){h.header(g.ANALYZE_FLUSH_STAGED_L3_HEADER);let e=h.spinner(g.ANALYZE_FLUSH_STAGED_L3_START).start(),r=fl.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);bd(i,e,!1)}catch(i){Fd(i,void 0,!1,e)}finally{R.deleteScope(r)}}async function qb(t,e,r){return r.agentAuthored?t?(await zb(t,e,r),!0):(h.error(g.ANALYZE_AGENT_AUTHORED_MISSING_TARGET),be.exitCode=1,!0):!1}async function Qb(t,e){return e.flushStagedL3?(await Jb(t),!0):!1}async function pT(t,e=be.cwd(),r={}){await Qb(e,r)||await qb(t,e,r)||await Xb(t,e,r)}async function Xb(t,e,r){let n,i=!t&&!!r.escalateToLsp;if(t){let l=cT();if(!l){h.error(g.ANALYZE_LLM_MISSING_ENV),be.exitCode=1;return}n=l}else if(i&&(n=cT()??void 0,!r.fallbackAst&&!await Vb(e,!!r.isInteractive,r.lspTimeoutMs)))return;let s=uT(t,i),o=fl.randomUUID(),a=ee();a.onLog(l=>{l.level===Oe.INFO&&(s.text=l.message)}),Wb(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);bd(l,s,!!r.fallbackAst)}catch(l){Fd(l,t,i,s)}finally{R.deleteScope(o)}}import gT from"process";import Zb from"crypto";var F={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"},Kt={HUMAN:"human",PROMPT:"prompt",JSON:"json"};function hl(t,e){t.onLog(r=>{r.level===Oe.INFO&&e&&(e.text=r.message)})}function Ri(t){return t instanceof E||t instanceof Error?t.message:String(t)}function eF(t){let e=z.INDENT_TWO+z.INDENT_TWO,r=e+z.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(z.INDENT_TWO+s.name+z.OPEN_PAREN+i+z.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(z.NEWLINE).join(z.NEWLINE+r))}}}function tF(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===We.CRITICAL?h.error(n):t.riskLevel===We.HIGH?h.warn(n):h.log(n),h.log(""),h.log(t.analysis),eF(t.affectedNodes)}async function fT(t,e={},r=gT.cwd()){let n=e.format===Kt.JSON;n||h.header(g.REVIEW_HEADER);let i=n?void 0:h.spinner(g.REVIEW_START).start(),s=Zb.randomUUID(),o=ee();hl(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?tF(a,t,i):h.log(JSON.stringify(a,null,2))}catch(a){let l=Ri(a);i?i.fail(g.REVIEW_FAIL+l):h.error(g.REVIEW_FAIL+l),gT.exitCode=1}finally{R.deleteScope(s)}}import Md from"process";import rF from"crypto";function nF(t,e){if(!e||e.length===0)return;let r=z.INDENT_TWO,n=r+z.INDENT_TWO,i=n+z.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(z.NEWLINE).join(z.NEWLINE+i))}function iF(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 sF(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{iF(t),h.log(z.EMPTY);for(let o of t)nF(o.name,o.why)}i&&h.warn(g.IMPACT_RISK_NOTE_PREFIX+i),h.log(z.EMPTY);let s=g.IMPACT_RISK_PREFIX+e;e===We.CRITICAL?h.error(s):e===We.HIGH||e===We.UNKNOWN?h.warn(s):h.log(s),h.log(z.EMPTY)}function oF(t,e,r){r.succeed(g.IMPACT_SUCCESS+z.DOUBLE_QUOTE+e+z.DOUBLE_QUOTE),h.log(""),sF(t.blastRadius,t.riskLevel,t.tierBCoverage,t.coverageNote,t.riskNote)}function aF(t,e){if(t){t.warn(g.IMPACT_NOT_FOUND+z.DOUBLE_QUOTE+e+z.DOUBLE_QUOTE);return}h.log("null")}async function hT(t,e={},r=Md.cwd()){let n=e.format===Kt.JSON;if(n||h.header(g.IMPACT_HEADER),!t){h.error(g.IMPACT_MISSING_TARGET),Md.exitCode=1;return}let i=n?void 0:h.spinner(g.IMPACT_START+z.DOUBLE_QUOTE+t+z.DOUBLE_QUOTE+z.ELLIPSIS).start(),s=rF.randomUUID(),o=ee();hl(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){aF(i,t);return}i?oF(a,t,i):h.log(JSON.stringify(a,null,2))}catch(a){let l=Ri(a);i?i.fail(g.IMPACT_FAIL+l):h.error(g.IMPACT_FAIL+l),Md.exitCode=1}finally{R.deleteScope(s)}}import _l from"process";import gF 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 lF(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 cF(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(lF(r)),e.push(Ee.L3_CONTENT_PREFIX+(r.content||z.EMPTY)),e.push(Ee.L3_END);return t.l2&&e.push(Ee.L2_END),e}function uF(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 dF(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 pF(t){let e=t.context?.incoming??[],r=t.context?.outgoing??[],n=t.context?.tierBCoverage;return e.length===0&&r.length===0&&!n?[]:[...uF(e,n),...dF(r,n)]}function ml(t){return[Ee.CONTEXT_START,...cF(t),...pF(t),Ee.CONTEXT_END].join(z.NEWLINE)}var fF={exact:g.QUERY_MATCH_TYPE_EXACT,keyword:g.QUERY_MATCH_TYPE_KEYWORD,neighbor:g.QUERY_MATCH_TYPE_NEIGHBOR};function hF(t){if(t.l2){let e=g.QUERY_L2_PREFIX+t.l2.name;t.l2.filePath&&(e+=z.OPEN_PAREN+t.l2.filePath+z.CLOSE_PAREN),e+=fF[t.l2.matchType],h.info(e)}else h.warn(g.QUERY_NO_L2)}function mF(t){let e=[];return t.source&&e.push(`source=${t.source}`),t.commitHash&&e.push(`commit=${t.commitHash.slice(0,z.SHORT_SHA_LENGTH)}`),t.validityStatus&&e.push(`validity=${t.validityStatus}`),e}function _F(t){for(let e of t){let r=mF(e);h.success(g.QUERY_L3_PREFIX+e.title+(r.length>0?g.QUERY_L3_PROVENANCE(r):"")),e.content&&h.log(z.INDENT_TWO+e.content.split(z.NEWLINE).join(z.NEWLINE+z.INDENT_TWO)),h.log(z.EMPTY)}}function mT(t,e,r){if(t.length===0){if(!r)return;h.section(e),h.warn(r),h.log(z.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(z.EMPTY)}function EF(t,e){if(!(!t||!e||e.workspaceFilesProcessed>=e.workspaceFilesTotal))return g.QUERY_TIER_B_INCOMING_UNPROCESSED(e.workspaceFilesTotal-e.workspaceFilesProcessed,e.workspaceFilesTotal)}function SF(t,e){if(!(!t||!e||e.ownFileLastProcessedAt!==null))return g.QUERY_TIER_B_OUTGOING_UNPROCESSED}function TF(t){h.header(g.QUERY_CONTEXT_HEADER),hF(t),h.log(z.EMPTY),_F(t.l3);let e=t.context?.incoming??[],r=t.context?.outgoing??[],n=t.context?.tierBCoverage,i=EF(e.length===0,n),s=SF(r.length===0,n);mT(e,g.QUERY_INCOMING_HEADER,i),mT(r,g.QUERY_OUTGOING_HEADER,s),h.log(z.EMPTY)}async function RF(t,e){if(t)return t;e||(h.error(g.QUERY_MISSING_TARGET),_l.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),_l.exit(1)),r}function AF(t){if(t!==void 0&&(!Number.isInteger(t)||t<=0)){h.warn(g.QUERY_INVALID_LIMIT+t);return}return t}function yF(t,e,r){if(t)return;let n=h.spinner(g.QUERY_START+z.DOUBLE_QUOTE+e+z.DOUBLE_QUOTE+z.ELLIPSIS).start();return r.onLog(i=>{i.level===Oe.INFO&&(n.text=i.message)}),n}async function OF(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+z.DOUBLE_QUOTE+n+z.DOUBLE_QUOTE),h.log("")),o}catch(o){let a=Ri(o);s?s.fail(g.QUERY_FAIL+a):h.error(g.QUERY_FAIL+a),_l.exitCode=1;return}finally{R.deleteScope(t)}}async function _T(t,e={},r=_l.cwd(),n=!1){let i=await RF(t,n),s=e.format===Kt.PROMPT||e.format===Kt.JSON,o=AF(e.limit),a=gF.randomUUID(),l=ee(),c=yF(s,i,l),u=await OF(a,l,r,i,o,c);u&&(e.format===Kt.JSON?h.log(JSON.stringify(u,null,2)):e.format===Kt.PROMPT?h.log(ml(u)):TF(u))}import kd from"fs/promises";import Ai from"path";import RT from"process";import MF from"crypto";function ET(t){let e=JSON.stringify(t).replace(/</g,"\\u003c"),r=`
165
+ `),u=O.resolve(T.LlmClient)();u.initialize({baseUrl:i.llmBaseUrl,apiKey:i.llmApiKey});let p;try{p=await u.chatCompletion({model:i.llmModel,temperature:.2,messages:[{role:zt.SYSTEM,content:wE},{role:zt.USER,content:l}]})}catch(I){let C=I instanceof Error?I.message:String(I);throw await V(r,{event:Y.FOCUSED_ERROR,targetPath:e,message:C}),I}let d=p.choices[0]?.message.content,f=wa(d);if(f===void 0){let I=q.LLM_NON_JSON_OUTPUT;throw await V(r,{event:Y.FOCUSED_ERROR,targetPath:e,message:I}),new E(A.LLM_INVALID_RESPONSE,I)}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 _i({workspaceRoot:i,logger:s,resolvedTargetPath:e,files:r,decisions:n,source:Ft.ANALYZE,extractionModel:o?.llmModel??null})}};async function _b(t,e,r){let i=(await t.getCommitLog(e,S.KNOWLEDGE_ROOT,S.KNOWLEDGE_LOG_SCAN_LIMIT)).find(s=>s.sha===r);return i?lr(i.message):void 0}function Eb(t){return{providerConfig:t?.lspProviderConfig,commitCap:t?.tierBCommitCap,llmBaseUrl:t?.llmBaseUrl,llmApiKey:t?.llmApiKey,llmModel:t?.llmModel,full:t?.full}}function Sb(t){return{tierCDailyCallCap:t?.tierCDailyCallCap,tierCDailyTokenCap:t?.tierCDailyTokenCap,tierCWallClockMs:t?.tierCWallClockMs,tierCItemCap:t?.tierCItemCap,tierCLoadThreshold:t?.tierCLoadThreshold,tierCDrainAll:t?.tierCDrainAll}}function Tb(t,e,r,n,i,s){return{workspaceRoot:t,logger:e,store:r,git:n,knowledgeGit:i,...Eb(s),...Sb(s),force:s?.force}}var ka={DETECTING_CHANGES:"Detecting changes...",DB_NOT_FOUND:'Local database not found. Please run "docuvia init".'},Ga={START:"review.start",ERROR:"review.error",SUMMARY:"review.summary"};async function xa(t,e){await ve(t,ip,e)}var Ua=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(e){let{workspaceRoot:r,logger:n}=this;n.info(ka.DETECTING_CHANGES),await xa(r,{event:Ga.START,baseRef:e??null});let o=(await O.resolve(T.GitProvider).getChangedFilesSince(r,e)).map(c=>({file:c.file,status:c.status}));await Vr(r,n);let a=O.resolve(T.GraphStoreOpener),l;try{l=await a({dbPath:ie(r),readonly:!0})}catch(c){throw c instanceof E&&c.code===A.DB_NOT_FOUND?(await xa(r,{event:Ga.ERROR,message:ka.DB_NOT_FOUND}),new E(A.DB_NOT_FOUND,ka.DB_NOT_FOUND,c)):c}try{let u=O.resolve(T.ChangeDetectionService,{logger:n}).detectChanges({store:l,baseRef:e??null,filesChanged:o});return await xa(r,{event:Ga.SUMMARY,baseRef:e??null,riskLevel:u.riskLevel,filesChanged:u.filesChanged.length,affectedNodes:u.affectedNodes.length}),u}finally{await l.close()}}};var vt={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_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 hs(t,e){await ve(t,sp,e)}function Rb(t,e,r,n){return t===void 0||e===void 0||t<e?vt.RISK_NOTE_EMPTY_WITH_PARTIAL_COVERAGE(t??0,e??0):r?vt.REGISTRY_MEDIATED_COVERAGE_NOTE:n&&n.applicable>=S.DEFAULT_CALL_RESOLUTION_MIN_SAMPLE&&n.resolved/n.applicable<S.DEFAULT_CALL_RESOLUTION_NOTE_THRESHOLD?vt.RISK_NOTE_EMPTY_LOW_RESOLUTION(n.resolved,n.applicable):vt.RISK_NOTE_EMPTY_STATIC_EDGES_ONLY}function yS(t){let{blastRadiusCount:e,computedRiskLevel:r,workspaceFilesProcessed:n,workspaceFilesTotal:i,registryMediated:s}=t;return e===0?{riskLevel:We.UNKNOWN,epistemic:Cl.LOWER_BOUND,riskNote:Rb(n,i,s,t.targetFileResolution)}:n===void 0||i===void 0||n<i?{riskLevel:r,epistemic:Cl.LOWER_BOUND,riskNote:vt.RISK_NOTE_PARTIAL_COVERAGE_NON_EMPTY(n??0,i??0)}:{riskLevel:r}}function IS(t,e){if(t)return e===vt.REGISTRY_MEDIATED_COVERAGE_NOTE?void 0:vt.REGISTRY_MEDIATED_COVERAGE_NOTE}import*as LS from"path";import*as CS from"fs/promises";var Ha=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(e){let{workspaceRoot:r,logger:n}=this;n.info(vt.RESOLVING),await hs(r,{event:fs.START,target:e}),await Vr(r,n);let i=O.resolve(T.GraphStoreOpener),s;try{s=await i({dbPath:ie(r),readonly:!0})}catch(o){throw o instanceof E&&o.code===A.DB_NOT_FOUND?(await hs(r,{event:fs.ERROR,target:e,message:vt.DB_NOT_FOUND}),new E(A.DB_NOT_FOUND,vt.DB_NOT_FOUND,o)):o}try{let o=O.resolve(T.ImpactService,{logger:n}),a=o.getBlastRadius(s,e);if(!a)return await hs(r,{event:fs.SUMMARY,target:e,found:!1,blastRadiusCount:0,riskLevel:null}),null;let l=o.computeRiskLevel(s,a.length);return await hs(r,{event:fs.SUMMARY,target:e,found:!0,blastRadiusCount:a.length,riskLevel:l}),{blastRadius:a,...await this.resolveEpistemicFields(s,e,a.length,l)}}finally{await s.close()}}async resolveEpistemicFields(e,r,n,i){let{tierBCoverage:s,registryMediated:o,targetFileResolution:a}=await this.resolveTargetContext(e,r,n),l=e.files.getTierBCoverage(),c=yS({blastRadiusCount:n,computedRiskLevel:i,workspaceFilesProcessed:l?.processedFiles,workspaceFilesTotal:l?.totalFiles,registryMediated:o,targetFileResolution:a}),u=l!=null&&l.totalFiles>0&&l.processedFiles<l.totalFiles,p=IS(o,c.riskNote);return{riskLevel:c.riskLevel,...c.epistemic?{epistemic:c.epistemic}:{},...c.riskNote?{riskNote:c.riskNote}:{},...p?{coverageNote:p}:{},...s?{tierBCoverage:s}:{},...u?{partialCoverage:!0}:{}}}async resolveTargetContext(e,r,n){let i=e.graph.findNodeByName(r),s=O.resolve(T.TierBCoverageHintProvider).resolve(e,i?.filePath,n===0,!1),o=n===0&&!!i?.filePath&&await this.fileUsesFactoryRegistry(i.filePath),a;if(i?.filePath){let l=Ta(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 CS.readFile(LS.join(this.workspaceRoot,e),H)}catch{return!1}return/docuviaFactory|TOKENS\./.test(r)}};var Ba={QUERYING:"Querying local knowledge graph...",DB_NOT_FOUND:'Local database not found. Please run "docuvia init".'},Ka={START:"query.start",ERROR:"query.error",SUMMARY:"query.summary"};async function $a(t,e){await ve(t,op,e)}var Ya=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(e,r){let{workspaceRoot:n,logger:i}=this;i.info(Ba.QUERYING),await $a(n,{event:Ka.START,target:e}),await Vr(n,i);let s=O.resolve(T.GraphStoreOpener),o;try{o=await s({dbPath:ie(n),readonly:!0})}catch(a){throw a instanceof E&&a.code===A.DB_NOT_FOUND?(await $a(n,{event:Ka.ERROR,target:e,message:Ba.DB_NOT_FOUND}),new E(A.DB_NOT_FOUND,Ba.DB_NOT_FOUND,a)):a}try{let l=O.resolve(T.QueryService,{logger:i}).query(o,e,r),c=!!l.l2||l.l3.length>0||!!l.context;return await $a(n,{event:Ka.SUMMARY,target:e,found:c}),l}finally{await o.close()}}};var Wa={EXPORTING:"Exporting topology...",DB_NOT_FOUND:'Local database not found. Please run "docuvia init".'},ja={START:"export-topology.start",ERROR:"export-topology.error",SUMMARY:"export-topology.summary"};async function Va(t,e){await ve(t,ap,e)}var za=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(e={}){let{workspaceRoot:r,logger:n}=this;n.info(Wa.EXPORTING),await Va(r,{event:ja.START,collapse:e.collapse??null});let i=O.resolve(T.GraphStoreOpener),s;try{s=await i({dbPath:ie(r),readonly:!0})}catch(o){throw o instanceof E&&o.code===A.DB_NOT_FOUND?(await Va(r,{event:ja.ERROR,message:Wa.DB_NOT_FOUND}),new E(A.DB_NOT_FOUND,Wa.DB_NOT_FOUND,o)):o}try{let a=O.resolve(T.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 Va(r,{event:ja.SUMMARY,nodeCount:a.stats.nodeCount,linkCount:a.stats.linkCount,groupCount:a.stats.groupCount,collapsed:a.collapsed}),a}finally{await s.close()}}};async function Nn(t,e){await ve(t,lp,e)}function Ab(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 NS(t,e){let r=O.resolve(T.GraphStoreOpener),n=O.resolve(T.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=Ab(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 Nn(t,{event:pi.TIER_B_FINALIZED,headSha:s.headSha,remainingQueueSize:s.remainingQueue.length})}finally{await i.close()}}var Ja=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===A.DB_NOT_FOUND?(await Nn(this.workspaceRoot,{event:pi.ERROR,message:Aa.DB_NOT_FOUND}),new E(A.DB_NOT_FOUND,Aa.DB_NOT_FOUND,r)):r}}async shouldSkipSnapshot(e,r){let i=await O.resolve(T.GitProvider).getHeadSha(this.workspaceRoot)??null,s=i&&typeof e.hasSourceCommitInHistory=="function"?await e.hasSourceCommitInHistory(this.workspaceRoot,i):!1,o=r.meta.get(S.META_KEY_TIER_B_BATCH_PENDING),a=r.meta.get(S.META_KEY_LAST_TIER_B_BATCH_SHA),l=r.meta.get("tierCProcessedThisRun")==="true";return{shouldSkip:!!(i&&s&&a===i&&!o&&!l),headSha:i}}async execute(){let{workspaceRoot:e,logger:r}=this;r.info(Aa.SNAPSHOTTING),await Nn(e,{event:pi.START,workspaceRoot:e});let n=O.resolve(T.GraphStoreOpener),i=O.resolve(T.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 Nn(e,{event:"snapshot.skipped",reason:"already-up-to-date",headSha:a}),{nodesWritten:0,edgesWritten:0,markdownFilesWritten:0};let l=await gi(e,s,i);return await NS(e,r),await Nn(e,{event:pi.SUMMARY,nodesWritten:l.nodesWritten,edgesWritten:l.edgesWritten,markdownFilesWritten:l.markdownFilesWritten}),l}finally{await s.close()}}};var Od={HYDRATING:"Hydrating local database from the knowledge branch...",NOTHING_TO_HYDRATE:'Nothing to hydrate from yet. Please run "docuvia init".'},qa={START:"hydrate.start",SUMMARY:"hydrate.summary"};async function Qa(t,e){await ve(t,cp,e)}var Xa=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(e){let{workspaceRoot:r,logger:n}=this;n.info(Od.HYDRATING),await Qa(r,{event:qa.START,workspaceRoot:r});let s=await O.resolve(T.GraphStoreOpener)({dbPath:ie(r),readonly:!1});try{let a=await O.resolve(T.HydrationService,{logger:n}).hydrate(r,s,void 0,e);return a.hydrated?(await Qa(r,{event:qa.SUMMARY,hydrated:!0,knowledgeSha:a.knowledgeSha,nodesLoaded:a.nodesLoaded,edgesLoaded:a.edgesLoaded,edgesDropped:a.edgesDropped}),a):(await Qa(r,{event:qa.SUMMARY,hydrated:!1,message:Od.NOTHING_TO_HYDRATE}),a)}finally{await s.close()}}};var ms={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}`},_s={START:"sync-knowledge.start",SUMMARY:"sync-knowledge.summary",VALIDITY_PASS:"sync-knowledge.l3-validity-pass"};async function Es(t,e){await ve(t,up,e)}var Za="l3ValidityJudgedSha";function Ob(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 PS(t){if(!t)return[];try{let e=JSON.parse(t);return Array.isArray(e)?e:[]}catch{return[]}}function yb(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 Ib(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([...PS(o.source_commits),...PS(o.initial_source_commits),...o.commit_hash?[o.commit_hash]:[]]),c=a.ranges.every(p=>yb(p,r,l)),u=c?sr.ACTIVE:sr.GARBAGE;u!==o.validity_status&&(t.l3.updateValidityStatus(o.id,u),c?i++:s++)}return{activated:i,superseded:s}}async function DS(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(Za);if(l===o)return a;if(!l)return n.meta.set(Za,o),a.baseline=!0,a;let c=n.l3.getAllExportable().map(I=>({row:I,anchors:Ob(I)})).filter(I=>I.anchors!==null&&(I.row.validity_status===sr.PENDING||I.row.validity_status===sr.ACTIVE));if(c.length===0)return n.meta.set(Za,o),a;let u=new Set(c.flatMap(I=>I.anchors.ranges.map(C=>C.path))),p=new Set((await i.getChangedFilesSince(e,l,"HEAD")).map(I=>I.file)),d=[...u].filter(I=>p.has(I)),f=new Map;for(let I of d)f.set(I,await s.getBlameLineOwners(e,I));let m=new Set(d),_=Ib(n,c,f,m);return a.activated=_.activated,a.superseded=_.superseded,n.meta.set(Za,o),a}var el=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(ms.SYNCING),await Es(e,{event:_s.START,workspaceRoot:e});let i=O.resolve(T.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(ms.VALIDITY_PASS_FAILED(a)),await Es(e,{event:_s.VALIDITY_PASS,status:"error",error:a})}return await Es(e,{event:_s.SUMMARY,status:s.status,branchTipSha:s.branchTipSha??null}),s}async importL3Cards(e,r){let{workspaceRoot:n,logger:i}=this,s=O.resolve(T.HydrationService,{logger:i}),a=await O.resolve(T.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 O.resolve(T.GraphStoreOpener)({dbPath:ie(e),readonly:!1});try{let s=await DS({workspaceRoot:e,logger:r,store:i,git:O.resolve(T.GitProvider),blame:O.resolve(T.LineBlameProvider)});s.baseline?r.info(ms.VALIDITY_PASS_BASELINE):r.info(ms.VALIDITY_PASS_SUMMARY(s.activated,s.superseded)),await Es(e,{event:_s.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"},vS=".log",yd={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 bS(t,e,r){let n=O.resolve(T.EdgeResolutionProviders,{logger:e}),i=await Id(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 Id(t,e){if(!O.has(T.GraphStoreOpener))return Object.keys(e);let r;try{r=await O.resolve(T.GraphStoreOpener)({dbPath:ie(t),readonly:!0});let i=cs(r),s=new Set;for(let o of i){let a=hd(o.file);a&&s.add(a)}return Array.from(s)}catch{return Object.keys(e)}finally{await r?.close()}}import{existsSync as Lb}from"fs";import*as Ld from"path";import{execFile as Cb}from"child_process";import{promisify as Nb}from"util";var Pb=Nb(Cb),Db=5e3,vb="npx",bb="--no-install",Cd="docuvia",wb=[".cmd",".CMD",".exe",""],wS="docuvia doctor";function Fb(t){let e=Ld.join(t,"node_modules",".bin");return(process.platform==="win32"?wb.map(n=>`${Cd}${n}`):[Cd]).some(n=>Lb(Ld.join(e,n)))}function FS(t){if(!t||typeof t!="object")return"";let{stdout:e,stderr:r}=t;return`${e??""}${r??""}`}async function Mb(t){try{let e=await Pb(vb,[bb,Cd],{cwd:t,timeout:Db});return FS(e).includes(wS)}catch(e){return FS(e).includes(wS)}}async function Nd(t){return Fb(t)?!0:Mb(t)}import*as Rt from"path";import*as ir from"fs/promises";var tl=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(!O.has(T.GraphStoreOpener))return!0;let r;try{r=await O.resolve(T.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(!O.has(T.GitProvider))return!0;try{let n=O.resolve(T.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(!O.has(T.KnowledgeGitService))return e;let r=O.resolve(T.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 Nd(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(Rt.join(o,S.POST_COMMIT_HOOK_NAME))}}async repairDuplicateGitHookIfRequested(e){if(!O.has(T.KnowledgeGitService))return e;let r=O.resolve(T.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(!O.has(T.GitProvider))return!0;try{let n=O.resolve(T.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(!O.has(T.KnowledgeGitService))return e;let r=O.resolve(T.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 Nd(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(Rt.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(!O.has(T.LlmClient))return!0;try{let o=O.resolve(T.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(!O.has(T.EdgeResolutionProviders))return!0;try{let r=O.resolve(T.EdgeResolutionProviders,{logger:this.logger}),n=await Id(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:Fn,filename:yr,platformName:yd.CLAUDE},{key:ue.AGENT_HOOKS_CURSOR,dir:Mn,filename:Ir,platformName:yd.CURSOR}];for(let{key:n,dir:i,filename:s,platformName:o}of r){let a=Rt.join(this.workspaceRoot,i,s),l;try{await ir.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(!O.has(T.GraphStoreOpener))return;let r;try{r=await O.resolve(T.GraphStoreOpener)({dbPath:ie(this.workspaceRoot),readonly:!0});let i=mi(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(!O.has(T.GraphStoreOpener))return!0;let r;try{r=await O.resolve(T.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(!O.has(T.GraphStoreOpener))return!0;let r;try{r=await O.resolve(T.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(!O.has(T.GraphStoreOpener)||!O.has(T.GitProvider))return!0;let r;try{let n=O.resolve(T.GitProvider);r=await O.resolve(T.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=nr(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=Rt.join(this.workspaceRoot,_e,Ar,Li),r;try{r=await ir.readFile(e,H)}catch{return!1}let n=S.DEFAULT_POST_COMMIT_INGESTION_GRACE_MS,i=Date.now(),s=r.split(`
166
+ `).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(!O.has(T.GraphStoreOpener))return!0;let r;try{r=await O.resolve(T.GraphStoreOpener)({dbPath:ie(this.workspaceRoot),readonly:!0});let i=nr(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 Ei(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=Rt.join(this.workspaceRoot,_e,Ar,Li),r;try{r=await ir.readFile(e,H)}catch{return}let n,i;for(let s of r.split(`
167
+ `))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(!O.has(T.GraphStoreOpener))return!0;let n;try{n=await O.resolve(T.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(!O.has(T.GitProvider))return!0;try{let n=await O.resolve(T.GitProvider).listWorktrees(this.workspaceRoot),i=Rt.resolve(this.workspaceRoot),s=[];for(let o of n){if(Rt.resolve(o.path)===i)continue;let a=Rt.join(o.path,_e,Ci);await ir.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(!O.has(T.GraphStoreOpener)||!O.has(T.GitProvider))return!0;let r;try{let n=O.resolve(T.GitProvider);r=await O.resolve(T.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 Ei(this.workspaceRoot,this.logger),c=new Set(l.map(d=>d.filePath)),u=r.l3.getAllExportable().filter(d=>d.source===Ft.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(!O.has(T.GraphStoreOpener))return!0;let r;try{r=await O.resolve(T.GraphStoreOpener)({dbPath:ie(this.workspaceRoot),readonly:!0});let{byFile:i,total:s}=SE(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=Ep(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=Rt.join(this.workspaceRoot,_e,Ci);if(!await ir.stat(r).catch(()=>null))return e[ue.DB_FOUND]={status:K.FAIL,message:k.DB_NOT_FOUND_AT(r)},!1;if(!O.has(T.DiagnosticRunnerDb))return e[ue.DB_RUNNER]={status:K.FAIL,message:k.DB_RUNNER_NOT_REGISTERED},!1;let s=await O.resolve(T.DiagnosticRunnerDb).checkHealth(r);return this.mergeDiagnosticResults(e,s)}async runGitDiagnostics(e){if(!O.has(T.DiagnosticRunnerGit))return e[ue.GIT_RUNNER]={status:K.FAIL,message:k.GIT_RUNNER_NOT_REGISTERED},!1;try{let n=await O.resolve(T.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===A.GIT_NETWORK_TIMEOUT?n=k.GIT_NETWORK_TIMEOUT_SUGGESTION:e.code===A.GIT_COMMAND_FAILED&&r.includes(k.GIT_NOT_A_REPO_TEXT)?n=k.GIT_NOT_A_REPO_SUGGESTION:e.code===A.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=Rt.join(this.workspaceRoot,_e,Ar);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 ir.readdir(e);for(let s of i){if(!s.endsWith(vS))continue;n++;let a=(await ir.readFile(Rt.join(e,s),H)).split(`
168
+ `).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 rl=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(e=!1){let{workspaceRoot:r,logger:n}=this,i=O.resolve(T.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 MS from"fs/promises";import kb from"path";var kS={REMOVED:"Removed .docuvia/ directory",NOT_FOUND:".docuvia/ directory not present; nothing to remove"};async function GS(t,e){let r=kb.join(t,_e);if(!Ia(r,t))throw new E(A.UNINSTALL_WORKFLOW_FAILED,`Refusing to remove directory at ${r}: resolved outside workspace ${t}`);let n=!0;try{await MS.access(r)}catch{n=!1}return n?(await MS.rm(r,{recursive:!0,force:!0}),e.info(kS.REMOVED),{removed:!0}):(e.debug(kS.NOT_FOUND),{removed:!1})}async function xS(t,e){return Si(t,e)}async function US(t,e,r,n){return await AS(t,e,r,n),Si(t,n)}function Se(t,e){let r=R.get(t,e);if(r===void 0)throw new E(A.INVALID_INPUT,dE.MISSING_MEMORY_KEY(e,t));return r}function HS(t){let e=R.get(t,y.LSP_BINARY_OVERRIDE),r=R.get(t,y.LSP_ARGS_OVERRIDE),n=R.get(t,y.LSP_TIMEOUT_MS),i=R.get(t,y.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,y.WORKSPACE_ROOT);return new Oa(r,e).execute()},async clean(t,e){let r=Se(t,y.WORKSPACE_ROOT);return new La(r,e).execute()},async status(t,e){let r=Se(t,y.WORKSPACE_ROOT);return new Da(r,e).execute()},async sync(t,e,r){let n=Se(t,y.WORKSPACE_ROOT),i=Se(t,y.API_URL),s=Se(t,y.PROJECT_ID),o=R.get(t,y.COMMIT_SHA);return new ba(n,e,i,r).execute({projectId:s,commitSha:o})},async analyze(t,e,r){let n=Se(t,y.WORKSPACE_ROOT);if(R.get(t,y.FLUSH_STAGED_L3))return new qr(n,e,{flushStagedL3:!0}).execute();let s=R.get(t,y.TARGET_PATH),o=R.get(t,y.AGENT_AUTHORED_DECISIONS);if(s&&o)return new qr(n,e,{targetPath:s,agentAuthoredDecisions:o}).execute();if(s){let l=Se(t,y.LLM_BASE_URL),c=Se(t,y.LLM_MODEL);return new qr(n,e,{targetPath:s,llmBaseUrl:l,llmApiKey:r,llmModel:c}).execute()}return R.get(t,y.ESCALATE_TO_LSP)?new qr(n,e,{escalateToLsp:!0,lspProviderConfig:HS(t),tierBCommitCap:R.get(t,y.TIER_B_COMMIT_CAP),full:R.get(t,y.TIER_B_FULL_RESYNC),llmBaseUrl:R.get(t,y.LLM_BASE_URL),llmApiKey:r,llmModel:R.get(t,y.LLM_MODEL),tierCDailyCallCap:R.get(t,y.TIER_C_DAILY_CALL_CAP),tierCDailyTokenCap:R.get(t,y.TIER_C_DAILY_TOKEN_CAP),tierCWallClockMs:R.get(t,y.TIER_C_WALL_CLOCK_MS),tierCItemCap:R.get(t,y.TIER_C_ITEM_CAP),tierCLoadThreshold:R.get(t,y.TIER_C_LOAD_THRESHOLD),force:R.get(t,y.FORCE),tierCDrainAll:R.get(t,y.TIER_C_DRAIN_ALL)}).execute():new qr(n,e).execute()},async stageAgentAuthoredDecisions(t,e){let r=Se(t,y.WORKSPACE_ROOT),n=Se(t,y.TARGET_PATH),i=Se(t,y.AGENT_AUTHORED_DECISIONS),s=xb.resolve(r,n);if(!Gb.existsSync(s))throw new E(A.FS_READ_FAILED,q.PATH_NOT_FOUND(n));return ES(r,n,i,e)},async review(t,e){let r=Se(t,y.WORKSPACE_ROOT),n=R.get(t,y.BASE_REF);return new Ua(r,e).execute(n)},async impact(t,e){let r=Se(t,y.WORKSPACE_ROOT),n=Se(t,y.TARGET);return new Ha(r,e).execute(n)},async query(t,e){let r=Se(t,y.WORKSPACE_ROOT),n=Se(t,y.TARGET),i=R.get(t,y.LIMIT);return new Ya(r,e).execute(n,i)},async exportTopology(t,e){let r=Se(t,y.WORKSPACE_ROOT),n=R.get(t,y.COLLAPSE);return new za(r,e).execute({collapse:n})},async snapshot(t,e){let r=Se(t,y.WORKSPACE_ROOT);return new Ja(r,e).execute()},async hydrate(t,e,r){let n=Se(t,y.WORKSPACE_ROOT);return new Xa(n,e).execute(r)},async syncKnowledge(t,e){let r=Se(t,y.WORKSPACE_ROOT),n=R.get(t,y.GIT_NETWORK_TIMEOUT_MS);return new el(r,e,n).execute()},async doctor(t,e,r){let n=Se(t,y.WORKSPACE_ROOT);return new tl(n,e).execute(r)},async uninstallGitHooks(t,e){let r=Se(t,y.WORKSPACE_ROOT),n=R.get(t,y.KEEP_DB);return new rl(r,e).execute(n)},async removeDocuviaDir(t,e){let r=Se(t,y.WORKSPACE_ROOT);return GS(r,e)},async listHooks(t,e){let r=Se(t,y.WORKSPACE_ROOT);return xS(r,e)},async setHookEnabled(t,e){let r=Se(t,y.WORKSPACE_ROOT),n=Se(t,y.HOOK_NAME),i=Se(t,y.HOOK_ENABLED);return US(r,n,i,e)},async checkTierBGate(t,e){let r=Se(t,y.WORKSPACE_ROOT);return bS(r,e,HS(t))}};import BS from"pino";import{createRequire as Ub}from"module";var Hb=Ub(import.meta.url),Pd="pino-pretty",Bb=`[docuvia] ${Pd} unavailable, falling back to plain JSON logs.
169
+ `,Kb=["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"],$b="[REDACTED]",Yb="1";function Wb(){if(process.env.DOCUVIA_PRETTY_LOGS===Yb)try{return Hb.resolve(Pd),{target:Pd,options:{colorize:!0,destination:2}}}catch{process.stderr.write(Bb);return}}function ee(){let t=Wb(),e=BS({level:process.env.LOG_LEVEL||ye.INFO,redact:{paths:[...Kb],censor:$b},transport:t},t?void 0:BS.destination(2)),r=new Jd;return r.onLog(n=>{e[n.level](n.context??{},n.message)}),r}var Qr={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 ft=class{};import*as tt from"fs/promises";import*as bt from"path";var KS=".js",$S=".cjs",nl=class extends ft{name=Fp;slug=Up;async installHooks(e){await this.configureHooks(e),await this.configureMcpServer(e)}async configureHooks(e){let r=bt.join(e,Mn);await tt.mkdir(r,{recursive:!0}),await tt.writeFile(bt.join(r,Ir),vs,{mode:493});let n=nn.replace(/\${HOOKS_DIR}/g,Gl).replace(KS,$S);await Ot(bt.join(r,kn),n,Ir)}async configureMcpServer(e){let r=bt.join(e,wl);try{let n={mcpServers:{}};try{let i=await tt.readFile(r,H);n=JSON.parse(i)}catch{await tt.mkdir(bt.dirname(r),{recursive:!0})}n.mcpServers=n.mcpServers||{},n.mcpServers[Gn]={command:Ps,args:[Vp,...Ds]},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=bt.join(e,Mn);try{await tt.unlink(bt.join(r,Ir)),h.success(`${g.UNINSTALL_REMOVED_FILE_PREFIX}${Ir}`)}catch{}let{removeBlock:n}=await import("./fs-utils-FRYB7LND.js"),{CURSOR_RULES_FILENAME:i,AGENT_INSTRUCTIONS_MARKER:s,AGENT_INSTRUCTIONS_END_MARKER:o}=await import("./init-templates-R6BFAJUH.js"),a=bt.join(e,i);await n(a,`<!-- ${s} -->`,`<!-- ${o} -->`);let l=bt.join(r,kn),c=!1;try{(await tt.readFile(l,H)).trim()===nn.replace(/\$\{HOOKS_DIR\}/g,Gl).replace(KS,$S).trim()&&(await tt.unlink(l),c=!0)}catch{}if(c)try{await tt.rmdir(r)}catch{}let u=bt.join(e,wl);try{let p=await tt.readFile(u,H),d=JSON.parse(p);d?.mcpServers&&d.mcpServers[Gn]&&(delete d.mcpServers[Gn],await tt.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 rt from"path";import Ss from"process";var jb="win32",Vb="darwin",zb="Library",Jb="Application Support",qb=".config";async function Qb(t){try{await Je.unlink(rt.join(t,yr)),h.success(`${g.UNINSTALL_REMOVED_FILE_PREFIX}${yr}`)}catch{}}async function Xb(t){let e=rt.join(t,kn);try{if((await Je.readFile(e,H)).trim()===nn.replace(/\$\{HOOKS_DIR\}/g,kl).trim())return await Je.unlink(e),!0}catch{}return!1}async function Zb(t){try{await Je.rmdir(t)}catch{}}function YS(){let t=nn.replace(/\${HOOKS_DIR}/g,Wp);return JSON.parse(t)[kt][0]}function jS(t){let e=t.hooks,r=Array.isArray(e)?e[0]?.command:void 0;return typeof r=="string"?r:""}function VS(t,e){let r=t?.hooks;return Array.isArray(r)&&r.some(n=>n?.command===e)}async function ew(t){try{let e=await Je.readFile(t,H);return{settings:JSON.parse(e),aborted:!1}}catch(e){return e?.code!==Ls?(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 tw(t,e){let{settings:r,aborted:n}=await ew(t);if(n)return;if(r.hooks=r.hooks??{},r.hooks[kt]!==void 0&&!Array.isArray(r.hooks[kt])){h.warn(g.FS_UNEXPECTED_SHAPE(kt,t));return}r.hooks[kt]=r.hooks[kt]??[];let i=r.hooks[kt],s=jS(e);i.some(o=>VS(o,s))||(i.push(e),await Je.mkdir(rt.dirname(t),{recursive:!0}),await Je.writeFile(t,`${JSON.stringify(r,null,2)}
170
+ `,H))}async function rw(t,e){let r;try{let s=await Je.readFile(t,H);r=JSON.parse(s)}catch{return}let n=r?.hooks?.[kt];if(!Array.isArray(n))return;let i=n.filter(s=>!VS(s,e));if(i.length!==n.length){if(i.length===0?delete r.hooks[kt]:r.hooks[kt]=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+Ns);return}await Je.writeFile(t,`${JSON.stringify(r,null,2)}
171
+ `,H),h.success(g.UNINSTALL_REMOVED_HOOK_FROM_SETTINGS_PREFIX+t)}}function nw(t){let e=rt.join(t,Fl);h.info(`${g.UNINSTALL_CLAUDE_MCP_MANUAL_REMINDER} (${e}).`)}function WS(){return Ss.platform===jb?rt.join(Ss.env.APPDATA||"",Pi):Ss.platform===Vb?rt.join(Ss.env.HOME||"",zb,Jb,Pi):rt.join(Ss.env.HOME||"",qb,Pi)}var il=class extends ft{name=Pi;slug=Hp;async installHooks(e){await this.configureHooks(e),this.printMcpServerSnippet(e)}printMcpServerSnippet(e){let r=WS();if(!r)return;let n=rt.join(r,Fl),i=JSON.stringify({mcpServers:{[Gn]:{command:Ps,args:[jp,...Ds],env:{[zp]:e}}}},null,2);h.info(`${g.INIT_CLAUDE_MCP_MANUAL_SNIPPET} (${n}):
172
+ ${i}`)}async configureHooks(e){let r=rt.join(e,Fn);await Je.mkdir(r,{recursive:!0}),await Je.writeFile(rt.join(r,yr),vs,{mode:493});let n=nn.replace(/\${HOOKS_DIR}/g,kl);await Ot(rt.join(r,kn),n,yr),await tw(rt.join(e,bl,Ns),YS())}async uninstallHooks(e){let r=rt.join(e,Fn);await Qb(r),await Xb(r)&&await Zb(r);try{await rw(rt.join(e,bl,Ns),jS(YS()))}catch{}let i=WS();i&&nw(i)}};import*as zS from"path";var sl=class extends ft{name=Mp;slug=Bp;instructionsPath(e){return zS.join(e,Ip,Lp)}async installHooks(e){await Ot(this.instructionsPath(e),Cr,_t)}async uninstallHooks(e){await Nr(this.instructionsPath(e),`<!-- ${_t} -->`,`<!-- ${Lr} -->`)}};import*as JS from"path";var ol=class extends ft{name=kp;slug=Kp;agentsMdPath(e){return JS.join(e,vp)}async installHooks(e){await Ot(this.agentsMdPath(e),Cr,_t)}async uninstallHooks(e){await Nr(this.agentsMdPath(e),`<!-- ${_t} -->`,`<!-- ${Lr} -->`)}};import*as ll from"fs/promises";import*as Dd from"path";var al=class extends ft{name=Gp;slug=$p;rulesDir(e){return Dd.join(e,wp)}rulesFilePath(e){return Dd.join(this.rulesDir(e),Ml)}async installHooks(e){await Ot(this.rulesFilePath(e),Cr,_t)}async uninstallHooks(e){try{await ll.unlink(this.rulesFilePath(e)),h.success(`${g.UNINSTALL_REMOVED_FILE_PREFIX}${Ml}`)}catch{return}try{await ll.rmdir(this.rulesDir(e))}catch{}}};import*as qS from"path";var cl=class extends ft{name=xp;slug=Yp;hermesMdPath(e){return qS.join(e,bp)}async installHooks(e){await Ot(this.hermesMdPath(e),Cr,_t)}async uninstallHooks(e){await Nr(this.hermesMdPath(e),`<!-- ${_t} -->`,`<!-- ${Lr} -->`)}};function iw(){return[new nl,new il,new sl,new ol,new al,new cl]}function sw(t){return t.split(",").map(e=>e.trim().toLowerCase()).filter(Boolean)}async function ul(t,e,r,n=iw()){if(e!==void 0){let i=sw(e),s=n.map(a=>a.slug),o=i.filter(a=>!s.includes(a));if(o.length>0)throw new Error(Qr.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 ow from"fs/promises";import QS from"path";var aw=30*6e4,lw=1e4,cw=3e4;async function dl(t,e,r){let n=QS.join(t,_e,dp);await ow.mkdir(QS.dirname(n),{recursive:!0});let s=await O.resolve(T.ProcessLock)(n,{maxWaitMs:aw,heartbeatIntervalMs:lw,staleAfterMs:cw,onWaiting:r});try{return await e()}finally{await s.release()}}import*as Bt from"fs";import*as Ti from"path";var uw=["---","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(`
173
+ `),dw=["---","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(`
174
+ `),pw=["---","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(`
175
+ `),gw=["---","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(`
176
+ `),XS=[{dirName:"docuvia-exploring",content:uw},{dirName:"docuvia-impact-analysis",content:dw},{dirName:"docuvia-knowledge-graph",content:pw},{dirName:"docuvia-agent-authored",content:gw}];var ZS=".claude/skills";function eT(t){let e=Ti.join(t,ZS),r=[],n=[];for(let i of XS)fw(e,i)==="installed"?r.push(i.dirName):n.push(i.dirName);return{installed:r,skipped:n}}function tT(t){let e=Ti.join(t,ZS),r=[];if(!Bt.existsSync(e))return r;let n=Bt.readdirSync(e,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()||!i.name.startsWith("docuvia-"))continue;let s=Ti.join(e,i.name);Bt.rmSync(s,{recursive:!0,force:!0}),r.push(i.name)}return r}function fw(t,e){let r=Ti.join(t,e.dirName),n=Ti.join(r,"SKILL.md");return Bt.existsSync(n)?"skipped":(Bt.mkdirSync(r,{recursive:!0}),Bt.writeFileSync(n,e.content,"utf-8"),"installed")}var mw=vd.object({cwd:vd.string().min(1,Qr.WORKSPACE_ROOT_EMPTY),platformFilter:vd.string().optional()});async function _w(t){let e=h.spinner(g.INIT_START).start(),r=hw.randomUUID(),n=ee();n.onLog(i=>{i.level===ye.INFO&&(e.text=i.message)}),R.createScope(r),R.set(r,y.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 Ew(t,e,r){h.info(g.INIT_AGENT_HOOKS);let n=await ul(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 rT(t=pl.cwd(),e,r=!1,n=!1){let i=mw.parse({cwd:t,platformFilter:e});h.header(g.INIT_HEADER),r&&(await h.askConfirm(g.INIT_CONFIRM,!0)||(h.warn(g.INIT_ABORTED),pl.exit(0)));let s=!1,o;await dl(i.cwd,async()=>{try{await _w(i.cwd)}catch{s=!0}if(!s)try{await Ew(i.cwd,i.platformFilter,r)}catch(a){o=a}},()=>h.info(g.INIT_LOCK_WAITING)),s&&pl.exit(1),o!==void 0&&(h.error(g.INIT_HOOKS_FAIL+o),pl.exit(1)),n&&Sw(t)}function Sw(t){try{let e=eT(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 bd from"process";import Tw from"crypto";async function nT(t=bd.cwd(),e=!1){h.header(g.CLEAN_HEADER),e&&(await h.askConfirm(g.CLEAN_CONFIRM,!1)||(h.warn(g.CLEAN_ABORTED),bd.exit(0)));let r=h.spinner(g.CLEAN_START).start(),n=Tw.randomUUID(),i=ee();i.onLog(s=>{s.level===ye.INFO&&(r.text=s.message)}),R.createScope(n),R.set(n,y.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),bd.exitCode=1}finally{R.deleteScope(n)}}import iT from"process";import Rw from"crypto";async function sT(t=iT.cwd()){let e=h.spinner(g.STATUS_START).start(),r=Rw.randomUUID(),n=ee();n.onLog(i=>{i.level===ye.INFO&&(e.text=i.message)}),R.createScope(r),R.set(r,y.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),iT.exitCode=1}finally{R.deleteScope(r)}}import Er from"process";import yw from"crypto";var z={INDENT_TWO:" ",NEWLINE:`
177
+ `,OPEN_PAREN:" (",CLOSE_PAREN:")",DOUBLE_QUOTE:'"',EMPTY:"",ELLIPSIS:"...",SHORT_SHA_LENGTH:7};import Aw from"process";import{createInterface as Ow}from"readline";async function gl(){let t=Ow({input:Aw.stdin}),e=[];try{for await(let r of t)e.push(r)}finally{t.close()}return e.join(`
178
+ `).trim()}async function Iw(t,e){if(t)return t;e||(h.error(g.PUBLISH_MISSING_PROJECT_ID),Er.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),Er.exit(1)),r}function Lw(){return!!Er.env.DOCUVIA_API_URL&&!!Er.env.MCP_PAT}async function Cw(t){return t||(Er.stdin.isTTY?void 0:gl())}async function Nw(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),Er.exitCode=1}finally{R.deleteScope(t)}}async function oT(t,e=Er.cwd(),r=!1){h.header(g.PUBLISH_HEADER);let n=await Iw(t.projectId,r);if(!Lw()){h.warn(g.PUBLISH_MISSING_ENV),h.warn(g.PUBLISH_SKIP);return}let i=await Cw(t.commitSha),s=h.spinner(g.PUBLISH_START+n+z.ELLIPSIS).start(),o=yw.randomUUID(),a=ee();a.onLog(l=>{l.level===ye.INFO&&(s.text=l.message)}),R.createScope(o),R.set(o,y.WORKSPACE_ROOT,e),R.set(o,y.API_URL,Er.env.DOCUVIA_API_URL),R.set(o,y.PROJECT_ID,n),R.set(o,y.COMMIT_SHA,i||void 0),await Nw(o,a,s,Er.env.MCP_PAT)}import we from"process";import fl from"crypto";import ww from"fs/promises";import{z as Pn}from"zod";function lT(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(A.INVALID_INPUT,g.ANALYZE_LSP_ARGS_INVALID_JSON(String(n)))}if(!Array.isArray(r)||r.some(n=>typeof n!="string"))throw new E(A.INVALID_INPUT,g.ANALYZE_LSP_ARGS_INVALID_SHAPE);return r}return bw(e)}}function Pw(t,e){return t==="\\"&&e!==void 0&&(e==='"'||e==="\\")}function Dw(t){return t==='"'||t==="'"}function vw(t){return/\s/.test(t)}function aT(t,e){return e.length>0&&t.push(e),""}function bw(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==='"'&&Pw(s,o)?(r+=o,i++):r+=s;continue}Dw(s)?n=s:s==="\\"&&o!==void 0?(r+=o,i++):vw(s)?r=aT(e,r):r+=s}return aT(e,r),e}var Fw=Pn.object({title:Pn.string().min(1),content:Pn.string(),nodeType:Pn.nativeEnum(en),confidence:Pn.number().min(0).max(1)}),Mw=Pn.object({decisions:Pn.array(Fw)});function cT(){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 kw(t){let e=t?await ww.readFile(t,H):we.stdin.isTTY?void 0:await gl();if(!e)return;let r;try{r=JSON.parse(e)}catch(i){throw new E(A.INVALID_INPUT,g.ANALYZE_AGENT_AUTHORED_INVALID_JSON(String(i)))}let n=Mw.safeParse(r);if(!n.success)throw new E(A.INVALID_INPUT,g.ANALYZE_AGENT_AUTHORED_INVALID_SHAPE(n.error.message));return n.data}function Gw(){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 xw(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:lT(r),lspTimeoutMs:t??(n?Number(n):void 0),lspMaxProcesses:e??o(i),tierBCommitCap:s?Number(s):void 0}}function Uw(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 Hw(t,e){e.succeed(g.ANALYZE_AUTO_DELTA_SUCCESS),h.info(g.ANALYZE_AUTO_DELTA_SUMMARY(t.filesReparsed,t.filesDeleted,t.tierBQueued))}function Bw(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 Kw(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.zeroProgressWatchdogTripped))),$w(t)}function $w(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 Yw(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 wd(t,e,r){switch(t.kind){case Te.AUTO_FULL_INGESTION:Uw(t,e);break;case Te.AUTO_DELTA:Hw(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:Bw(t,e);break;case Te.TIER_B_BATCH:Kw(t,e,r);break;case Te.FLUSH_STAGED_L3:Yw(t,e);break}}function uT(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+z.ELLIPSIS:t?g.ANALYZE_FOCUSED_START+t+z.ELLIPSIS:e?g.ANALYZE_TIER_B_START:g.ANALYZE_START).start()}function Ww(t,e,r,n,i,s,o,a,l,c){R.createScope(t),R.set(t,y.WORKSPACE_ROOT,e),s&&R.set(t,y.FORCE,!0),r&&n?(R.set(t,y.TARGET_PATH,r),R.set(t,y.LLM_BASE_URL,n.llmBaseUrl),R.set(t,y.LLM_MODEL,n.llmModel)):i&&(R.set(t,y.ESCALATE_TO_LSP,!0),l&&R.set(t,y.TIER_B_FULL_RESYNC,!0),c&&R.set(t,y.TIER_C_DRAIN_ALL,!0),dT(t,o,a),jw(t,n))}function jw(t,e){e&&(R.set(t,y.LLM_BASE_URL,e.llmBaseUrl),R.set(t,y.LLM_MODEL,e.llmModel));let r=Gw();r.dailyCallCap!==void 0&&R.set(t,y.TIER_C_DAILY_CALL_CAP,r.dailyCallCap),r.dailyTokenCap!==void 0&&R.set(t,y.TIER_C_DAILY_TOKEN_CAP,r.dailyTokenCap),r.wallClockMs!==void 0&&R.set(t,y.TIER_C_WALL_CLOCK_MS,r.wallClockMs),r.itemCap!==void 0&&R.set(t,y.TIER_C_ITEM_CAP,r.itemCap),r.loadThreshold!==void 0&&R.set(t,y.TIER_C_LOAD_THRESHOLD,r.loadThreshold)}function dT(t,e,r){let n=xw(e,r);n.lspBinaryOverride!==void 0&&R.set(t,y.LSP_BINARY_OVERRIDE,n.lspBinaryOverride),n.lspArgsOverride!==void 0&&R.set(t,y.LSP_ARGS_OVERRIDE,n.lspArgsOverride),n.lspTimeoutMs!==void 0&&R.set(t,y.LSP_TIMEOUT_MS,n.lspTimeoutMs),n.lspMaxProcesses!==void 0&&R.set(t,y.LSP_MAX_PROCESSES,n.lspMaxProcesses),n.tierBCommitCap!==void 0&&R.set(t,y.TIER_B_COMMIT_CAP,n.tierBCommitCap)}function Fd(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 Vw(t,e,r){let n=fl.randomUUID();R.createScope(n),R.set(n,y.WORKSPACE_ROOT,t),dT(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 zw(t,e,r){let n;try{n=await kw(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=uT(t,!1,r.stage),s=fl.randomUUID(),o=ee();o.onLog(a=>{a.level===ye.INFO&&(i.text=a.message)}),R.createScope(s),R.set(s,y.WORKSPACE_ROOT,e),R.set(s,y.TARGET_PATH,t),R.set(s,y.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);wd(a,i,!1)}}catch(a){Fd(a,t,!1,i)}finally{R.deleteScope(s)}}async function Jw(t){h.header(g.ANALYZE_FLUSH_STAGED_L3_HEADER);let e=h.spinner(g.ANALYZE_FLUSH_STAGED_L3_START).start(),r=fl.randomUUID(),n=ee();n.onLog(i=>{i.level===ye.INFO&&(e.text=i.message)}),R.createScope(r),R.set(r,y.WORKSPACE_ROOT,t),R.set(r,y.FLUSH_STAGED_L3,!0);try{let i=await X.analyze(r,n);wd(i,e,!1)}catch(i){Fd(i,void 0,!1,e)}finally{R.deleteScope(r)}}async function qw(t,e,r){return r.agentAuthored?t?(await zw(t,e,r),!0):(h.error(g.ANALYZE_AGENT_AUTHORED_MISSING_TARGET),we.exitCode=1,!0):!1}async function Qw(t,e){return e.flushStagedL3?(await Jw(t),!0):!1}async function pT(t,e=we.cwd(),r={}){await Qw(e,r)||await qw(t,e,r)||await Xw(t,e,r)}async function Xw(t,e,r){let n,i=!t&&!!r.escalateToLsp;if(t){let l=cT();if(!l){h.error(g.ANALYZE_LLM_MISSING_ENV),we.exitCode=1;return}n=l}else if(i&&(n=cT()??void 0,!r.fallbackAst&&!await Vw(e,!!r.isInteractive,r.lspTimeoutMs)))return;let s=uT(t,i),o=fl.randomUUID(),a=ee();a.onLog(l=>{l.level===ye.INFO&&(s.text=l.message)}),Ww(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);wd(l,s,!!r.fallbackAst)}catch(l){Fd(l,t,i,s)}finally{R.deleteScope(o)}}import gT from"process";import Zw from"crypto";var F={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"},Kt={HUMAN:"human",PROMPT:"prompt",JSON:"json"};function hl(t,e){t.onLog(r=>{r.level===ye.INFO&&e&&(e.text=r.message)})}function Ri(t){return t instanceof E||t instanceof Error?t.message:String(t)}function eF(t){let e=z.INDENT_TWO+z.INDENT_TWO,r=e+z.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(z.INDENT_TWO+s.name+z.OPEN_PAREN+i+z.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(z.NEWLINE).join(z.NEWLINE+r))}}}function tF(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===We.CRITICAL?h.error(n):t.riskLevel===We.HIGH?h.warn(n):h.log(n),h.log(""),h.log(t.analysis),eF(t.affectedNodes)}async function fT(t,e={},r=gT.cwd()){let n=e.format===Kt.JSON;n||h.header(g.REVIEW_HEADER);let i=n?void 0:h.spinner(g.REVIEW_START).start(),s=Zw.randomUUID(),o=ee();hl(o,i),R.createScope(s),R.set(s,y.WORKSPACE_ROOT,r),t&&R.set(s,y.BASE_REF,t);try{let a=await X.review(s,o);i?tF(a,t,i):h.log(JSON.stringify(a,null,2))}catch(a){let l=Ri(a);i?i.fail(g.REVIEW_FAIL+l):h.error(g.REVIEW_FAIL+l),gT.exitCode=1}finally{R.deleteScope(s)}}import Md from"process";import rF from"crypto";function nF(t,e){if(!e||e.length===0)return;let r=z.INDENT_TWO,n=r+z.INDENT_TWO,i=n+z.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(z.NEWLINE).join(z.NEWLINE+i))}function iF(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 sF(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{iF(t),h.log(z.EMPTY);for(let o of t)nF(o.name,o.why)}i&&h.warn(g.IMPACT_RISK_NOTE_PREFIX+i),h.log(z.EMPTY);let s=g.IMPACT_RISK_PREFIX+e;e===We.CRITICAL?h.error(s):e===We.HIGH||e===We.UNKNOWN?h.warn(s):h.log(s),h.log(z.EMPTY)}function oF(t,e,r){r.succeed(g.IMPACT_SUCCESS+z.DOUBLE_QUOTE+e+z.DOUBLE_QUOTE),h.log(""),sF(t.blastRadius,t.riskLevel,t.tierBCoverage,t.coverageNote,t.riskNote)}function aF(t,e){if(t){t.warn(g.IMPACT_NOT_FOUND+z.DOUBLE_QUOTE+e+z.DOUBLE_QUOTE);return}h.log("null")}async function hT(t,e={},r=Md.cwd()){let n=e.format===Kt.JSON;if(n||h.header(g.IMPACT_HEADER),!t){h.error(g.IMPACT_MISSING_TARGET),Md.exitCode=1;return}let i=n?void 0:h.spinner(g.IMPACT_START+z.DOUBLE_QUOTE+t+z.DOUBLE_QUOTE+z.ELLIPSIS).start(),s=rF.randomUUID(),o=ee();hl(o,i),R.createScope(s),R.set(s,y.WORKSPACE_ROOT,r),R.set(s,y.TARGET,t);try{let a=await X.impact(s,o);if(!a){aF(i,t);return}i?oF(a,t,i):h.log(JSON.stringify(a,null,2))}catch(a){let l=Ri(a);i?i.fail(g.IMPACT_FAIL+l):h.error(g.IMPACT_FAIL+l),Md.exitCode=1}finally{R.deleteScope(s)}}import _l from"process";import gF 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 lF(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 cF(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(lF(r)),e.push(Ee.L3_CONTENT_PREFIX+(r.content||z.EMPTY)),e.push(Ee.L3_END);return t.l2&&e.push(Ee.L2_END),e}function uF(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 dF(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 pF(t){let e=t.context?.incoming??[],r=t.context?.outgoing??[],n=t.context?.tierBCoverage;return e.length===0&&r.length===0&&!n?[]:[...uF(e,n),...dF(r,n)]}function ml(t){return[Ee.CONTEXT_START,...cF(t),...pF(t),Ee.CONTEXT_END].join(z.NEWLINE)}var fF={exact:g.QUERY_MATCH_TYPE_EXACT,keyword:g.QUERY_MATCH_TYPE_KEYWORD,neighbor:g.QUERY_MATCH_TYPE_NEIGHBOR};function hF(t){if(t.l2){let e=g.QUERY_L2_PREFIX+t.l2.name;t.l2.filePath&&(e+=z.OPEN_PAREN+t.l2.filePath+z.CLOSE_PAREN),e+=fF[t.l2.matchType],h.info(e)}else h.warn(g.QUERY_NO_L2)}function mF(t){let e=[];return t.source&&e.push(`source=${t.source}`),t.commitHash&&e.push(`commit=${t.commitHash.slice(0,z.SHORT_SHA_LENGTH)}`),t.validityStatus&&e.push(`validity=${t.validityStatus}`),e}function _F(t){for(let e of t){let r=mF(e);h.success(g.QUERY_L3_PREFIX+e.title+(r.length>0?g.QUERY_L3_PROVENANCE(r):"")),e.content&&h.log(z.INDENT_TWO+e.content.split(z.NEWLINE).join(z.NEWLINE+z.INDENT_TWO)),h.log(z.EMPTY)}}function mT(t,e,r){if(t.length===0){if(!r)return;h.section(e),h.warn(r),h.log(z.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(z.EMPTY)}function EF(t,e){if(!(!t||!e||e.workspaceFilesProcessed>=e.workspaceFilesTotal))return g.QUERY_TIER_B_INCOMING_UNPROCESSED(e.workspaceFilesTotal-e.workspaceFilesProcessed,e.workspaceFilesTotal)}function SF(t,e){if(!(!t||!e||e.ownFileLastProcessedAt!==null))return g.QUERY_TIER_B_OUTGOING_UNPROCESSED}function TF(t){h.header(g.QUERY_CONTEXT_HEADER),hF(t),h.log(z.EMPTY),_F(t.l3);let e=t.context?.incoming??[],r=t.context?.outgoing??[],n=t.context?.tierBCoverage,i=EF(e.length===0,n),s=SF(r.length===0,n);mT(e,g.QUERY_INCOMING_HEADER,i),mT(r,g.QUERY_OUTGOING_HEADER,s),h.log(z.EMPTY)}async function RF(t,e){if(t)return t;e||(h.error(g.QUERY_MISSING_TARGET),_l.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),_l.exit(1)),r}function AF(t){if(t!==void 0&&(!Number.isInteger(t)||t<=0)){h.warn(g.QUERY_INVALID_LIMIT+t);return}return t}function OF(t,e,r){if(t)return;let n=h.spinner(g.QUERY_START+z.DOUBLE_QUOTE+e+z.DOUBLE_QUOTE+z.ELLIPSIS).start();return r.onLog(i=>{i.level===ye.INFO&&(n.text=i.message)}),n}async function yF(t,e,r,n,i,s){R.createScope(t),R.set(t,y.WORKSPACE_ROOT,r),R.set(t,y.TARGET,n),i!==void 0&&R.set(t,y.LIMIT,i);try{let o=await X.query(t,e);return s&&(s.succeed(g.QUERY_FOUND+z.DOUBLE_QUOTE+n+z.DOUBLE_QUOTE),h.log("")),o}catch(o){let a=Ri(o);s?s.fail(g.QUERY_FAIL+a):h.error(g.QUERY_FAIL+a),_l.exitCode=1;return}finally{R.deleteScope(t)}}async function _T(t,e={},r=_l.cwd(),n=!1){let i=await RF(t,n),s=e.format===Kt.PROMPT||e.format===Kt.JSON,o=AF(e.limit),a=gF.randomUUID(),l=ee(),c=OF(s,i,l),u=await yF(a,l,r,i,o,c);u&&(e.format===Kt.JSON?h.log(JSON.stringify(u,null,2)):e.format===Kt.PROMPT?h.log(ml(u)):TF(u))}import kd from"fs/promises";import Ai from"path";import RT from"process";import MF from"crypto";function ET(t){let e=JSON.stringify(t).replace(/</g,"\\u003c"),r=`
179
179
  `,n=[];return n.push(IF(t)),n.push(LF()),n.push(CF(e)),n.push("</body>"),n.push("</html>"),n.join(r)+r}function IF(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 - "+FF(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(`
180
180
  `)}function LF(){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(`
181
- `)}function CF(t){return["<script>",NF(t),PF(),DF(),vF(),wF(),bF(),"</script>"].join(`
181
+ `)}function CF(t){return["<script>",NF(t),PF(),DF(),vF(),bF(),wF(),"</script>"].join(`
182
182
  `)}function NF(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(`
183
183
  `)}function PF(){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(`
184
184
  `)}function DF(){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(`
185
185
  `)}function vF(){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(`
186
- `)}function wF(){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(`
187
- `)}function bF(){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(`
188
- `)}function FF(t){return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}var ST="topology.json",TT="topology.html";function kF(t,e){let r=t?Ai.resolve(e,t):Ai.join(e,_e);if(!r.startsWith(e+Ai.sep)&&r!==e)throw new E(y.FS_PATH_TRAVERSAL,`Resolved output directory "${r}" escapes workspace root "${e}" \u2014 possible path traversal via --out`);return r}function GF(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 AT(t={},e=RT.cwd()){h.header(g.EXPORT_HEADER);let r=h.spinner(g.EXPORT_START).start(),n=MF.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=kF(t.out,Ai.resolve(e)),o=await X.exportTopology(n,i),await kd.mkdir(s,{recursive:!0});let a=Ai.join(s,ST);await kd.writeFile(a,JSON.stringify(o,null,2));let l;t.jsonOnly||(l=Ai.join(s,TT),await kd.writeFile(l,ET(o))),r.succeed(g.EXPORT_SUCCESS+a),GF(o,l)}catch(a){let l=a instanceof E||a instanceof Error?a.message:String(a);r.fail(g.EXPORT_FAIL+l),RT.exitCode=1}finally{R.deleteScope(n)}}import yT from"process";import xF from"crypto";async function OT(t=yT.cwd()){h.header(g.SNAPSHOT_HEADER);let e=h.spinner(g.SNAPSHOT_START).start(),r=xF.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),yT.exitCode=1}finally{R.deleteScope(r)}}import IT from"process";import UF from"crypto";async function LT(t=IT.cwd(),e){h.header(g.HYDRATE_HEADER);let r=h.spinner(g.HYDRATE_START).start(),n=UF.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),IT.exitCode=1}finally{R.deleteScope(n)}}import Gd from"process";import HF from"crypto";var CT={[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 NT(t=Gd.cwd()){h.header(g.SYNC_KNOWLEDGE_HEADER);let e=h.spinner(g.SYNC_KNOWLEDGE_START).start(),r=HF.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=Gd.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(CT[s.status]);return}e.succeed(CT[s.status])}catch(s){let o=s instanceof E||s instanceof Error?s.message:String(s);e.fail(g.SYNC_KNOWLEDGE_FAIL+o),Gd.exitCode=1}finally{R.deleteScope(r)}}import xd from"crypto";import*as PT from"path";async function BF(t){let e=[Cp,Np,Pp,Dp];for(let r of e)await Nr(PT.join(t,r),`<!-- ${_t} -->`,`<!-- ${Lr} -->`)}async function KF(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}${z.DOUBLE_QUOTE}${i.name}${z.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 $F(t,e,r){let n=xd.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 YF(t,e,r){if(e)return null;let n=xd.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 WF(t,e,r){if(e)return h.info(g.UNINSTALL_KEEP_DB),null;let n=xd.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 jF(t){try{let e=tT(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 VF(t,e,r,n){let i=await KF(t,e,n);await BF(e);let s=await $F(e,r,n);s&&i.push(s);let o=await WF(e,r,n);o&&i.push(o);let a=await YF(e,r,n);return a&&i.push(a),i}function zF(t){t.length>0?(h.warn(g.UNINSTALL_PARTIAL+t.join(", ")),process.exitCode=1):h.success(g.UNINSTALL_SUCCESS)}async function DT(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 ul(g.UNINSTALL_HOOKS_SELECT,e,n),a=await VF(o,t,r,s);i&&jF(t),zF(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 yi from"process";import QF from"crypto";var JF=[{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"}],vT=[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 qF(t){return JF.find(e=>e.test(t))?.category??g.DOCTOR_CATEGORY_OTHER}function wT(t){let e=new Map;for(let[r,n]of Object.entries(t)){let i=qF(r),s=e.get(i)??[];s.push([r,n]),e.set(i,s)}return e}var bT=[{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 FT(t,e){let r=e.status===K.PASS?`${vl.PASS} ${g.DOCTOR_STATUS_PASS}`:`${vl.FAIL} ${g.DOCTOR_STATUS_FAIL}`,n=e.details?`${e.message}${z.OPEN_PAREN}${e.details}${z.CLOSE_PAREN}`:e.message;return[t,r,n,e.suggestion??z.EMPTY]}function MT(t){let e=Object.values(t);return{passed:e.filter(n=>n.status===K.PASS).length,total:e.length}}var XF=60;function ZF(){return{llmBaseUrl:yi.env.AI_DOCUVIA_INTEGRATIONS_OPENAI_BASE_URL,llmApiKey:yi.env.AI_DOCUVIA_INTEGRATIONS_OPENAI_API_KEY,llmModel:yi.env.AI_DOCUVIA_MODEL||yi.env.AI_DOCUVIA_FAST_MODEL}}function eM(t){let e=wT(t);for(let r of vT){let n=e.get(r);!n||n.length===0||(h.section(r),h.table(bT,n.map(([i,s])=>FT(i,s))))}}function tM(t,e){let{passed:r,total:n}=MT(t);h.log(""),h.log(Op.HORIZONTAL.repeat(XF));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 rM(t,e,r,n){R.createScope(t),R.set(t,O.WORKSPACE_ROOT,r);try{let i=await X.doctor(t,e,{...n,...ZF()});return eM(i.diagnostics),tM(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 nM(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 kT(t,e={}){try{h.header(g.DOCTOR_HEADER),h.info(g.DOCTOR_START);let r=QF.randomUUID(),n=ee();await rM(r,n,t,nM(e))||(yi.exitCode=1)}catch(r){let n=r instanceof Error?r.message:String(r);h.error(g.DOCTOR_FAIL+n),yi.exitCode=1}}import Xr from"process";import Ud from"crypto";var El={LIST:"list",ENABLE:"enable",DISABLE:"disable",CHECK:"check"};function xT(t){return!!t&&Object.values(or).includes(t)}async function iM(t){let e=Ud.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(or).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),Xr.exitCode=1}finally{R.deleteScope(e)}}async function GT(t,e,r){if(!xT(e)){h.error(g.HOOKS_INVALID_NAME(e,Object.values(or))),Xr.exitCode=1;return}let n=Ud.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(or).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),Xr.exitCode=1}finally{R.deleteScope(n)}}async function sM(t,e){if(!xT(e)){Xr.exitCode=1;return}let r=Ud.randomUUID();R.createScope(r),R.set(r,O.WORKSPACE_ROOT,t);try{let n=await X.listHooks(r,he());Xr.exitCode=n[e]?0:1}catch{Xr.exitCode=0}finally{R.deleteScope(r)}}async function UT(t,e,r=Xr.cwd()){switch(t){case El.LIST:await iM(r);return;case El.ENABLE:await GT(r,e,!0);return;case El.DISABLE:await GT(r,e,!1);return;case El.CHECK:await sM(r,e);return;default:h.error(g.HOOKS_UNKNOWN_SUBCOMMAND(t)),Xr.exitCode=1}}import{Server as MM}from"@modelcontextprotocol/sdk/server/index.js";import{StdioServerTransport as kM}from"@modelcontextprotocol/sdk/server/stdio.js";import{CallToolRequestSchema as GM,ListToolsRequestSchema as xM}from"@modelcontextprotocol/sdk/types.js";import uM from"crypto";import{z as dM}from"zod";import{createRequire as oM}from"module";import{existsSync as aM}from"fs";import{dirname as HT,join as lM}from"path";import{fileURLToPath as cM}from"url";var Sl;function Tl(){if(Sl!==void 0)return Sl;let t=HT(cM(import.meta.url));for(;;){let e=lM(t,"package.json");if(aM(e)){let n=oM(import.meta.url)(e);if(typeof n.version!="string")throw E.wrap(y.FS_READ_FAILED,`Package manifest at ${e} has no string "version" field`,void 0);return Sl=n.version,Sl}let r=HT(t);if(r===t)break;t=r}throw E.wrap(y.FS_READ_FAILED,"Could not locate the CLI package.json by walking up from the running module",void 0)}var BT="docuvia-local-mcp",KT=Tl(),$T=["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(`
189
- `),YT="Docuvia Local MCP Server running on stdio",WT=t=>`Tool not found: ${t}`,Ke="text";function bt(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 pM=dM.object({}).strict(),gM="docuvia_init",fM="Initialize the local Docuvia SQLite database in the current workspace.",hM="object",Hd={definition:{name:gM,description:fM,inputSchema:{type:hM,properties:{}}},handler:bt(Ue.ERROR_INITIALIZING,async t=>{pM.parse(t??{});let e=uM.randomUUID(),r=ee();R.createScope(e),R.set(e,O.WORKSPACE_ROOT,process.cwd());try{let n=await dl(process.cwd(),()=>X.init(e,r));return{content:[{type:Ke,text:n.message}]}}finally{R.deleteScope(e)}})};import mM from"crypto";import{z as Bd}from"zod";var _M=Bd.object({target:Bd.string().min(1),limit:Bd.number().int().positive().optional()}).strict(),EM="docuvia_query",Kd={definition:{name:EM,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:bt(Ue.ERROR_QUERYING,async t=>{let e=_M.parse(t??{}),r=mM.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:ml(i)},{type:Ke,text:Ue.QUERY_NEXT_STEP_HINT}]}}finally{R.deleteScope(r)}})};import SM from"crypto";import{z as jT}from"zod";var TM=jT.object({target:jT.string().min(1)}).strict(),RM="docuvia_impact",$d={definition:{name:RM,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:bt(Ue.ERROR_ANALYZING_IMPACT,async t=>{let e=TM.parse(t??{}),r=SM.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 AM from"crypto";import{z as yM}from"zod";var OM=yM.object({}).strict(),IM="docuvia_status",Yd={definition:{name:IM,description:Ue.STATUS_TOOL_DESCRIPTION,inputSchema:{type:"object",properties:{}}},handler:bt(Ue.ERROR_GETTING_STATUS,async t=>{OM.parse(t??{});let e=AM.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 LM from"crypto";import{z as VT}from"zod";var CM=VT.object({baseRef:VT.string().min(1).optional()}).strict(),NM="docuvia_detect_changes",Wd={definition:{name:NM,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:bt(Ue.ERROR_DETECTING_CHANGES,async t=>{let e=CM.parse(t??{}),r=LM.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 PM from"crypto";import{z as Zr}from"zod";var DM=Zr.object({title:Zr.string().min(1,"title is required"),content:Zr.string().min(1,"content is required"),nodeType:Zr.enum(["change","rule","decision","context"]),confidence:Zr.number().min(0).max(1)}),vM=Zr.object({targetPath:Zr.string().min(1,"targetPath is required").describe("File path (relative to workspace root) these decisions apply to"),decisions:Zr.array(DM).min(1,"at least one decision is required").describe("Array of L3 decisions to stage for this file")}).strict(),wM="docuvia_apply_decision",bM="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.",FM="object",jd={definition:{name:wM,description:bM,inputSchema:{type:FM,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:bt(Ue.ERROR_APPLYING_DECISION,async t=>{let e=vM.parse(t??{}),r=PM.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 Vd={[Hd.definition.name]:Hd,[Kd.definition.name]:Kd,[$d.definition.name]:$d,[Yd.definition.name]:Yd,[Wd.definition.name]:Wd,[jd.definition.name]:jd},zT=Object.values(Vd).map(t=>t.definition);async function JT(){let t=new MM({name:BT,version:KT},{capabilities:{tools:{}},instructions:$T});t.setRequestHandler(xM,async()=>({tools:zT})),t.setRequestHandler(GM,async n=>{let{name:i,arguments:s}=n.params,o=Vd[i];if(o)return o.handler(s);throw new Error(WT(i))});let e=new kM;await t.connect(e),ee().info(YT)}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"},Rl={[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)"},Ye={[W.INIT]:[F.PLATFORM,F.INTERACTIVE,F.INTERACTIVE_SHORT,F.SKILLS],[W.MCP]:[],[W.CLEAN]:[F.INTERACTIVE,F.INTERACTIVE_SHORT],[W.STATUS]:[],[W.PUBLISH]:[F.COMMIT_SHA,F.INTERACTIVE,F.INTERACTIVE_SHORT],[W.ANALYZE]:[F.ESCALATE_TO_LSP,F.FALLBACK_AST,F.LSP_TIMEOUT,F.LSP_PROCESSES,F.FULL,F.INTERACTIVE,F.INTERACTIVE_SHORT,F.FORCE,F.FORCE_SHORT,F.AGENT_AUTHORED,F.DECISIONS_FILE,F.STAGE,F.FLUSH_STAGED_L3,F.TIER_C_ALL],[W.REVIEW]:[F.FORMAT],[W.IMPACT]:[F.FORMAT],[W.QUERY]:[F.FORMAT,F.LIMIT,F.INTERACTIVE,F.INTERACTIVE_SHORT],[W.EXPORT_TOPOLOGY]:[F.OUT,F.JSON_ONLY,F.COLLAPSE],[W.SNAPSHOT]:[],[W.HYDRATE]:[F.FORCE,F.FORCE_SHORT],[W.SYNC_KNOWLEDGE]:[],[W.UNINSTALL]:[F.PLATFORM,F.KEEP_DB,F.INTERACTIVE,F.INTERACTIVE_SHORT,F.SKILLS],[W.DOCTOR]:[F.SKIP_DB,F.SKIP_GIT,F.SKIP_HOOKS,F.SKIP_LOGS,F.SKIP_LSP,F.SKIP_LLM,F.FIX],[W.HOOKS]:[]};function zd(){return["Usage:",...Object.values(W).map(t=>` docuvia ${t.padEnd(40)} # ${Rl[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(`
186
+ `)}function bF(){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(`
187
+ `)}function wF(){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(`
188
+ `)}function FF(t){return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}var ST="topology.json",TT="topology.html";function kF(t,e){let r=t?Ai.resolve(e,t):Ai.join(e,_e);if(!r.startsWith(e+Ai.sep)&&r!==e)throw new E(A.FS_PATH_TRAVERSAL,`Resolved output directory "${r}" escapes workspace root "${e}" \u2014 possible path traversal via --out`);return r}function GF(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 AT(t={},e=RT.cwd()){h.header(g.EXPORT_HEADER);let r=h.spinner(g.EXPORT_START).start(),n=MF.randomUUID(),i=ee();i.onLog(a=>{a.level===ye.INFO&&(r.text=a.message)}),R.createScope(n),R.set(n,y.WORKSPACE_ROOT,e),t.collapse&&R.set(n,y.COLLAPSE,t.collapse);let s,o;try{s=kF(t.out,Ai.resolve(e)),o=await X.exportTopology(n,i),await kd.mkdir(s,{recursive:!0});let a=Ai.join(s,ST);await kd.writeFile(a,JSON.stringify(o,null,2));let l;t.jsonOnly||(l=Ai.join(s,TT),await kd.writeFile(l,ET(o))),r.succeed(g.EXPORT_SUCCESS+a),GF(o,l)}catch(a){let l=a instanceof E||a instanceof Error?a.message:String(a);r.fail(g.EXPORT_FAIL+l),RT.exitCode=1}finally{R.deleteScope(n)}}import OT from"process";import xF from"crypto";async function yT(t=OT.cwd()){h.header(g.SNAPSHOT_HEADER);let e=h.spinner(g.SNAPSHOT_START).start(),r=xF.randomUUID(),n=ee();n.onLog(i=>{i.level===ye.INFO&&(e.text=i.message)}),R.createScope(r),R.set(r,y.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),OT.exitCode=1}finally{R.deleteScope(r)}}import IT from"process";import UF from"crypto";async function LT(t=IT.cwd(),e){h.header(g.HYDRATE_HEADER);let r=h.spinner(g.HYDRATE_START).start(),n=UF.randomUUID(),i=ee();i.onLog(s=>{s.level===ye.INFO&&(r.text=s.message)}),R.createScope(n),R.set(n,y.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),IT.exitCode=1}finally{R.deleteScope(n)}}import Gd from"process";import HF from"crypto";var CT={[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 NT(t=Gd.cwd()){h.header(g.SYNC_KNOWLEDGE_HEADER);let e=h.spinner(g.SYNC_KNOWLEDGE_START).start(),r=HF.randomUUID(),n=ee();n.onLog(s=>{s.level===ye.INFO&&(e.text=s.message)}),R.createScope(r),R.set(r,y.WORKSPACE_ROOT,t);let i=Gd.env.DOCUVIA_PUSH_TIMEOUT_MS;i&&R.set(r,y.GIT_NETWORK_TIMEOUT_MS,Number(i));try{let s=await X.syncKnowledge(r,n);if(s.status===qe.NO_REMOTE){e.warn(CT[s.status]);return}e.succeed(CT[s.status])}catch(s){let o=s instanceof E||s instanceof Error?s.message:String(s);e.fail(g.SYNC_KNOWLEDGE_FAIL+o),Gd.exitCode=1}finally{R.deleteScope(r)}}import xd from"crypto";import*as PT from"path";async function BF(t){let e=[Cp,Np,Pp,Dp];for(let r of e)await Nr(PT.join(t,r),`<!-- ${_t} -->`,`<!-- ${Lr} -->`)}async function KF(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}${z.DOUBLE_QUOTE}${i.name}${z.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 $F(t,e,r){let n=xd.randomUUID();R.createScope(n),R.set(n,y.WORKSPACE_ROOT,t),R.set(n,y.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 YF(t,e,r){if(e)return null;let n=xd.randomUUID();R.createScope(n),R.set(n,y.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 WF(t,e,r){if(e)return h.info(g.UNINSTALL_KEEP_DB),null;let n=xd.randomUUID();R.createScope(n),R.set(n,y.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 jF(t){try{let e=tT(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 VF(t,e,r,n){let i=await KF(t,e,n);await BF(e);let s=await $F(e,r,n);s&&i.push(s);let o=await WF(e,r,n);o&&i.push(o);let a=await YF(e,r,n);return a&&i.push(a),i}function zF(t){t.length>0?(h.warn(g.UNINSTALL_PARTIAL+t.join(", ")),process.exitCode=1):h.success(g.UNINSTALL_SUCCESS)}async function DT(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 ul(g.UNINSTALL_HOOKS_SELECT,e,n),a=await VF(o,t,r,s);i&&jF(t),zF(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 Oi from"process";import QF from"crypto";var JF=[{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"}],vT=[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 qF(t){return JF.find(e=>e.test(t))?.category??g.DOCTOR_CATEGORY_OTHER}function bT(t){let e=new Map;for(let[r,n]of Object.entries(t)){let i=qF(r),s=e.get(i)??[];s.push([r,n]),e.set(i,s)}return e}var wT=[{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 FT(t,e){let r=e.status===K.PASS?`${vl.PASS} ${g.DOCTOR_STATUS_PASS}`:`${vl.FAIL} ${g.DOCTOR_STATUS_FAIL}`,n=e.details?`${e.message}${z.OPEN_PAREN}${e.details}${z.CLOSE_PAREN}`:e.message;return[t,r,n,e.suggestion??z.EMPTY]}function MT(t){let e=Object.values(t);return{passed:e.filter(n=>n.status===K.PASS).length,total:e.length}}var XF=60;function ZF(){return{llmBaseUrl:Oi.env.AI_DOCUVIA_INTEGRATIONS_OPENAI_BASE_URL,llmApiKey:Oi.env.AI_DOCUVIA_INTEGRATIONS_OPENAI_API_KEY,llmModel:Oi.env.AI_DOCUVIA_MODEL||Oi.env.AI_DOCUVIA_FAST_MODEL}}function eM(t){let e=bT(t);for(let r of vT){let n=e.get(r);!n||n.length===0||(h.section(r),h.table(wT,n.map(([i,s])=>FT(i,s))))}}function tM(t,e){let{passed:r,total:n}=MT(t);h.log(""),h.log(yp.HORIZONTAL.repeat(XF));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 rM(t,e,r,n){R.createScope(t),R.set(t,y.WORKSPACE_ROOT,r);try{let i=await X.doctor(t,e,{...n,...ZF()});return eM(i.diagnostics),tM(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 nM(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 kT(t,e={}){try{h.header(g.DOCTOR_HEADER),h.info(g.DOCTOR_START);let r=QF.randomUUID(),n=ee();await rM(r,n,t,nM(e))||(Oi.exitCode=1)}catch(r){let n=r instanceof Error?r.message:String(r);h.error(g.DOCTOR_FAIL+n),Oi.exitCode=1}}import Xr from"process";import Ud from"crypto";var El={LIST:"list",ENABLE:"enable",DISABLE:"disable",CHECK:"check"};function xT(t){return!!t&&Object.values(or).includes(t)}async function iM(t){let e=Ud.randomUUID(),r=ee();R.createScope(e),R.set(e,y.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(or).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),Xr.exitCode=1}finally{R.deleteScope(e)}}async function GT(t,e,r){if(!xT(e)){h.error(g.HOOKS_INVALID_NAME(e,Object.values(or))),Xr.exitCode=1;return}let n=Ud.randomUUID(),i=ee();R.createScope(n),R.set(n,y.WORKSPACE_ROOT,t),R.set(n,y.HOOK_NAME,e),R.set(n,y.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(or).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),Xr.exitCode=1}finally{R.deleteScope(n)}}async function sM(t,e){if(!xT(e)){Xr.exitCode=1;return}let r=Ud.randomUUID();R.createScope(r),R.set(r,y.WORKSPACE_ROOT,t);try{let n=await X.listHooks(r,me());Xr.exitCode=n[e]?0:1}catch{Xr.exitCode=0}finally{R.deleteScope(r)}}async function UT(t,e,r=Xr.cwd()){switch(t){case El.LIST:await iM(r);return;case El.ENABLE:await GT(r,e,!0);return;case El.DISABLE:await GT(r,e,!1);return;case El.CHECK:await sM(r,e);return;default:h.error(g.HOOKS_UNKNOWN_SUBCOMMAND(t)),Xr.exitCode=1}}import{Server as MM}from"@modelcontextprotocol/sdk/server/index.js";import{StdioServerTransport as kM}from"@modelcontextprotocol/sdk/server/stdio.js";import{CallToolRequestSchema as GM,ListToolsRequestSchema as xM}from"@modelcontextprotocol/sdk/types.js";import uM from"crypto";import{z as dM}from"zod";import{createRequire as oM}from"module";import{existsSync as aM}from"fs";import{dirname as HT,join as lM}from"path";import{fileURLToPath as cM}from"url";var Sl;function Tl(){if(Sl!==void 0)return Sl;let t=HT(cM(import.meta.url));for(;;){let e=lM(t,"package.json");if(aM(e)){let n=oM(import.meta.url)(e);if(typeof n.version!="string")throw E.wrap(A.FS_READ_FAILED,`Package manifest at ${e} has no string "version" field`,void 0);return Sl=n.version,Sl}let r=HT(t);if(r===t)break;t=r}throw E.wrap(A.FS_READ_FAILED,"Could not locate the CLI package.json by walking up from the running module",void 0)}var BT="docuvia-local-mcp",KT=Tl(),$T=["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(`
189
+ `),YT="Docuvia Local MCP Server running on stdio",WT=t=>`Tool not found: ${t}`,Ke="text";function wt(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 pM=dM.object({}).strict(),gM="docuvia_init",fM="Initialize the local Docuvia SQLite database in the current workspace.",hM="object",Hd={definition:{name:gM,description:fM,inputSchema:{type:hM,properties:{}}},handler:wt(Ue.ERROR_INITIALIZING,async t=>{pM.parse(t??{});let e=uM.randomUUID(),r=ee();R.createScope(e),R.set(e,y.WORKSPACE_ROOT,process.cwd());try{let n=await dl(process.cwd(),()=>X.init(e,r));return{content:[{type:Ke,text:n.message}]}}finally{R.deleteScope(e)}})};import mM from"crypto";import{z as Bd}from"zod";var _M=Bd.object({target:Bd.string().min(1),limit:Bd.number().int().positive().optional()}).strict(),EM="docuvia_query",Kd={definition:{name:EM,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:wt(Ue.ERROR_QUERYING,async t=>{let e=_M.parse(t??{}),r=mM.randomUUID(),n=ee();R.createScope(r),R.set(r,y.WORKSPACE_ROOT,process.cwd()),R.set(r,y.TARGET,e.target),e.limit!==void 0&&R.set(r,y.LIMIT,e.limit);try{let i=await X.query(r,n);return{content:[{type:Ke,text:ml(i)},{type:Ke,text:Ue.QUERY_NEXT_STEP_HINT}]}}finally{R.deleteScope(r)}})};import SM from"crypto";import{z as jT}from"zod";var TM=jT.object({target:jT.string().min(1)}).strict(),RM="docuvia_impact",$d={definition:{name:RM,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:wt(Ue.ERROR_ANALYZING_IMPACT,async t=>{let e=TM.parse(t??{}),r=SM.randomUUID(),n=ee();R.createScope(r),R.set(r,y.WORKSPACE_ROOT,process.cwd()),R.set(r,y.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 AM from"crypto";import{z as OM}from"zod";var yM=OM.object({}).strict(),IM="docuvia_status",Yd={definition:{name:IM,description:Ue.STATUS_TOOL_DESCRIPTION,inputSchema:{type:"object",properties:{}}},handler:wt(Ue.ERROR_GETTING_STATUS,async t=>{yM.parse(t??{});let e=AM.randomUUID(),r=ee();R.createScope(e),R.set(e,y.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 LM from"crypto";import{z as VT}from"zod";var CM=VT.object({baseRef:VT.string().min(1).optional()}).strict(),NM="docuvia_detect_changes",Wd={definition:{name:NM,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:wt(Ue.ERROR_DETECTING_CHANGES,async t=>{let e=CM.parse(t??{}),r=LM.randomUUID(),n=ee();R.createScope(r),R.set(r,y.WORKSPACE_ROOT,process.cwd()),e.baseRef&&R.set(r,y.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 PM from"crypto";import{z as Zr}from"zod";var DM=Zr.object({title:Zr.string().min(1,"title is required"),content:Zr.string().min(1,"content is required"),nodeType:Zr.enum(["change","rule","decision","context"]),confidence:Zr.number().min(0).max(1)}),vM=Zr.object({targetPath:Zr.string().min(1,"targetPath is required").describe("File path (relative to workspace root) these decisions apply to"),decisions:Zr.array(DM).min(1,"at least one decision is required").describe("Array of L3 decisions to stage for this file")}).strict(),bM="docuvia_apply_decision",wM="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.",FM="object",jd={definition:{name:bM,description:wM,inputSchema:{type:FM,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:wt(Ue.ERROR_APPLYING_DECISION,async t=>{let e=vM.parse(t??{}),r=PM.randomUUID(),n=ee();R.createScope(r),R.set(r,y.WORKSPACE_ROOT,process.cwd()),R.set(r,y.TARGET_PATH,e.targetPath),R.set(r,y.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 Vd={[Hd.definition.name]:Hd,[Kd.definition.name]:Kd,[$d.definition.name]:$d,[Yd.definition.name]:Yd,[Wd.definition.name]:Wd,[jd.definition.name]:jd},zT=Object.values(Vd).map(t=>t.definition);async function JT(){let t=new MM({name:BT,version:KT},{capabilities:{tools:{}},instructions:$T});t.setRequestHandler(xM,async()=>({tools:zT})),t.setRequestHandler(GM,async n=>{let{name:i,arguments:s}=n.params,o=Vd[i];if(o)return o.handler(s);throw new Error(WT(i))});let e=new kM;await t.connect(e),ee().info(YT)}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"},Rl={[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)"},Ye={[W.INIT]:[F.PLATFORM,F.INTERACTIVE,F.INTERACTIVE_SHORT,F.SKILLS],[W.MCP]:[],[W.CLEAN]:[F.INTERACTIVE,F.INTERACTIVE_SHORT],[W.STATUS]:[],[W.PUBLISH]:[F.COMMIT_SHA,F.INTERACTIVE,F.INTERACTIVE_SHORT],[W.ANALYZE]:[F.ESCALATE_TO_LSP,F.FALLBACK_AST,F.LSP_TIMEOUT,F.LSP_PROCESSES,F.FULL,F.INTERACTIVE,F.INTERACTIVE_SHORT,F.FORCE,F.FORCE_SHORT,F.AGENT_AUTHORED,F.DECISIONS_FILE,F.STAGE,F.FLUSH_STAGED_L3,F.TIER_C_ALL],[W.REVIEW]:[F.FORMAT],[W.IMPACT]:[F.FORMAT],[W.QUERY]:[F.FORMAT,F.LIMIT,F.INTERACTIVE,F.INTERACTIVE_SHORT],[W.EXPORT_TOPOLOGY]:[F.OUT,F.JSON_ONLY,F.COLLAPSE],[W.SNAPSHOT]:[],[W.HYDRATE]:[F.FORCE,F.FORCE_SHORT],[W.SYNC_KNOWLEDGE]:[],[W.UNINSTALL]:[F.PLATFORM,F.KEEP_DB,F.INTERACTIVE,F.INTERACTIVE_SHORT,F.SKILLS],[W.DOCTOR]:[F.SKIP_DB,F.SKIP_GIT,F.SKIP_HOOKS,F.SKIP_LOGS,F.SKIP_LSP,F.SKIP_LLM,F.FIX],[W.HOOKS]:[]};function zd(){return["Usage:",...Object.values(W).map(t=>` docuvia ${t.padEnd(40)} # ${Rl[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(`
190
190
  `)}function qT(t){let e=Ye[t],r=[`docuvia ${t}`,` ${Rl[t]}`];return e.length>0&&r.push("","Flags:",...e.map(n=>` ${n}`)),r.join(`
191
- `)}var Al=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(Qr.UNKNOWN_OPTIONS(n.join(", ")))}};function yl(t){if(t===void 0)return;let e=Object.values(Kt);if(e.includes(t))return t;throw new Error(Qr.INVALID_FORMAT(t,e.join(", ")))}XT.config({quiet:!0});function ZT(){h.error(zd())}function HM(){return Tl()}function BM(t){return t===F.HELP||t===F.HELP_SHORT}function KM(t){return t===F.VERSION||t===F.VERSION_SHORT}function eR(t){return t===F.INTERACTIVE||t===F.INTERACTIVE_SHORT}async function $M(t){t.parser.checkUnknownFlags(Ye[W.INIT]);let e=t.parser.getFlagValue(F.PLATFORM),r=t.parser.hasFlag(F.SKILLS);await rT(t.workspaceRoot,e,t.isInteractive,r)}async function YM(t){t.parser.checkUnknownFlags(Ye[W.MCP]),await JT()}async function WM(t){t.parser.checkUnknownFlags(Ye[W.CLEAN]),await nT(t.workspaceRoot,t.isInteractive)}async function jM(t){t.parser.checkUnknownFlags(Ye[W.STATUS]),await sT(t.workspaceRoot)}async function VM(t){t.parser.checkUnknownFlags(Ye[W.PUBLISH]);let e=t.parser.getPositional(0),r=t.parser.getFlagValue(F.COMMIT_SHA);await oT({projectId:e,commitSha:r},t.workspaceRoot,t.isInteractive)}async function zM(t){t.parser.checkUnknownFlags(Ye[W.ANALYZE]);let e=t.parser.getPositional(0),r=t.parser.hasFlag(F.ESCALATE_TO_LSP),n=t.parser.hasFlag(F.FALLBACK_AST),i=t.parser.hasFlag(F.FULL),s=t.parser.hasFlag(F.FORCE)||t.parser.hasFlag(F.FORCE_SHORT),o=t.parser.getFlagValue(F.LSP_TIMEOUT),a=o!==void 0?Number(o):void 0,l=t.parser.getFlagValue(F.LSP_PROCESSES),c=l!==void 0?Number(l):void 0,u=t.parser.hasFlag(F.AGENT_AUTHORED),p=t.parser.getFlagValue(F.DECISIONS_FILE),d=t.parser.hasFlag(F.STAGE),f=t.parser.hasFlag(F.FLUSH_STAGED_L3),m=t.parser.hasFlag(F.TIER_C_ALL);await pT(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 JM(t){t.parser.checkUnknownFlags(Ye[W.REVIEW]);let e=t.parser.getPositional(0),r=yl(t.parser.getFlagValue(F.FORMAT));await fT(e,{format:r},t.workspaceRoot)}async function qM(t){t.parser.checkUnknownFlags(Ye[W.IMPACT]);let e=t.parser.getPositional(0);if(!e){h.error(g.IMPACT_MISSING_TARGET),$t.exitCode=1;return}let r=yl(t.parser.getFlagValue(F.FORMAT));await hT(e,{format:r},t.workspaceRoot)}async function QM(t){t.parser.checkUnknownFlags(Ye[W.QUERY]);let e=t.parser.getPositional(0),r=yl(t.parser.getFlagValue(F.FORMAT)),n=t.parser.getFlagValue(F.LIMIT),i=n?Number(n):void 0;await _T(e,{format:r,limit:i},t.workspaceRoot,t.isInteractive)}async function XM(t){t.parser.checkUnknownFlags(Ye[W.EXPORT_TOPOLOGY]);let e=t.parser.getFlagValue(F.OUT),r=t.parser.hasFlag(F.JSON_ONLY),n=t.parser.getFlagValue(F.COLLAPSE);await AT({out:e,jsonOnly:r,collapse:n},t.workspaceRoot)}async function ZM(t){t.parser.checkUnknownFlags(Ye[W.SNAPSHOT]),await OT(t.workspaceRoot)}async function ek(t){t.parser.checkUnknownFlags(Ye[W.HYDRATE]);let e=t.parser.hasFlag(F.FORCE)||t.parser.hasFlag(F.FORCE_SHORT);await LT(t.workspaceRoot,{force:e})}async function tk(t){t.parser.checkUnknownFlags(Ye[W.UNINSTALL]);let e=t.parser.getFlagValue(F.PLATFORM),r=t.parser.hasFlag(F.KEEP_DB),n=t.parser.hasFlag(F.SKILLS);await DT(t.workspaceRoot,e,r,t.isInteractive,n)}async function rk(t){t.parser.checkUnknownFlags(Ye[W.DOCTOR]);let e=t.parser.hasFlag(F.SKIP_DB),r=t.parser.hasFlag(F.SKIP_GIT),n=t.parser.hasFlag(F.SKIP_HOOKS),i=t.parser.hasFlag(F.SKIP_LOGS),s=t.parser.hasFlag(F.SKIP_LSP),o=t.parser.hasFlag(F.SKIP_LLM),a=t.parser.hasFlag(F.FIX);await kT(t.workspaceRoot,{skipDb:e,skipGit:r,skipHooks:n,skipLogs:i,skipLsp:s,skipLlm:o,fix:a})}async function nk(t){t.parser.checkUnknownFlags(Ye[W.SYNC_KNOWLEDGE]),await NT(t.workspaceRoot)}async function ik(t){t.parser.checkUnknownFlags(Ye[W.HOOKS]);let e=t.parser.getPositional(0),r=t.parser.getPositional(1);await UT(e,r,t.workspaceRoot)}var sk={[W.INIT]:$M,[W.MCP]:YM,[W.CLEAN]:WM,[W.STATUS]:jM,[W.PUBLISH]:VM,[W.ANALYZE]:zM,[W.REVIEW]:JM,[W.IMPACT]:qM,[W.QUERY]:QM,[W.EXPORT_TOPOLOGY]:XM,[W.SNAPSHOT]:ZM,[W.HYDRATE]:ek,[W.SYNC_KNOWLEDGE]:nk,[W.UNINSTALL]:tk,[W.DOCTOR]:rk,[W.HOOKS]:ik};async function ok(t,e,r){let n=eR(t)?void 0:t;if(n)return n;e||(ZT(),$t.exit(1)),r||(h.error(g.CLI_INTERACTIVE_NO_TTY),$t.exit(1)),h.header(g.CLI_HEADER);let i=Object.values(W).filter(o=>o!==W.MCP).map(o=>({name:o,value:o,description:Rl[o]}));return await h.askSelect(g.CLI_PROMPT_ACTION,i)}function ak(t){return BM(t)?(h.log(zd()),!0):KM(t)?(h.log(HM()),!0):!1}function lk(t,e){let r=eR(t)||e.hasFlag(F.INTERACTIVE)||e.hasFlag(F.INTERACTIVE_SHORT),n=r&&!!$t.stdin.isTTY&&!$t.env.CI;return{wantsInteractive:r,interactiveEligible:n}}async function ck(t,e,r,n,i,s){if(!t||!e){h.error(g.CLI_UNKNOWN_COMMAND+t),ZT(),$t.exit(1);return}if(r.hasFlag(F.HELP)||r.hasFlag(F.HELP_SHORT)){h.log(qT(t));return}n&&!i&&h.warn(g.CLI_INTERACTIVE_UNAVAILABLE),await e({parser:r,isInteractive:i,workspaceRoot:s})}async function uk(){let t=$t.argv[2];if(ak(t))return;let e=$t.argv.slice(3),r=new Al(e),n=$t.cwd(),{wantsInteractive:i,interactiveEligible:s}=lk(t,r),o=await ok(t,i,s),a=o?sk[o]:void 0;try{await ck(o,a,r,i,s,n)}catch(l){let c=l instanceof Error?l.message:String(l);h.error(g.CLI_FATAL_ERROR+c),$t.exit(1)}}uk().catch(t=>{h.error(g.CLI_FATAL_ERROR+(t instanceof Error?t.message:String(t))),$t.exit(1)});
191
+ `)}var Al=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(Qr.UNKNOWN_OPTIONS(n.join(", ")))}};function Ol(t){if(t===void 0)return;let e=Object.values(Kt);if(e.includes(t))return t;throw new Error(Qr.INVALID_FORMAT(t,e.join(", ")))}XT.config({quiet:!0});function ZT(){h.error(zd())}function HM(){return Tl()}function BM(t){return t===F.HELP||t===F.HELP_SHORT}function KM(t){return t===F.VERSION||t===F.VERSION_SHORT}function eR(t){return t===F.INTERACTIVE||t===F.INTERACTIVE_SHORT}async function $M(t){t.parser.checkUnknownFlags(Ye[W.INIT]);let e=t.parser.getFlagValue(F.PLATFORM),r=t.parser.hasFlag(F.SKILLS);await rT(t.workspaceRoot,e,t.isInteractive,r)}async function YM(t){t.parser.checkUnknownFlags(Ye[W.MCP]),await JT()}async function WM(t){t.parser.checkUnknownFlags(Ye[W.CLEAN]),await nT(t.workspaceRoot,t.isInteractive)}async function jM(t){t.parser.checkUnknownFlags(Ye[W.STATUS]),await sT(t.workspaceRoot)}async function VM(t){t.parser.checkUnknownFlags(Ye[W.PUBLISH]);let e=t.parser.getPositional(0),r=t.parser.getFlagValue(F.COMMIT_SHA);await oT({projectId:e,commitSha:r},t.workspaceRoot,t.isInteractive)}async function zM(t){t.parser.checkUnknownFlags(Ye[W.ANALYZE]);let e=t.parser.getPositional(0),r=t.parser.hasFlag(F.ESCALATE_TO_LSP),n=t.parser.hasFlag(F.FALLBACK_AST),i=t.parser.hasFlag(F.FULL),s=t.parser.hasFlag(F.FORCE)||t.parser.hasFlag(F.FORCE_SHORT),o=t.parser.getFlagValue(F.LSP_TIMEOUT),a=o!==void 0?Number(o):void 0,l=t.parser.getFlagValue(F.LSP_PROCESSES),c=l!==void 0?Number(l):void 0,u=t.parser.hasFlag(F.AGENT_AUTHORED),p=t.parser.getFlagValue(F.DECISIONS_FILE),d=t.parser.hasFlag(F.STAGE),f=t.parser.hasFlag(F.FLUSH_STAGED_L3),m=t.parser.hasFlag(F.TIER_C_ALL);await pT(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 JM(t){t.parser.checkUnknownFlags(Ye[W.REVIEW]);let e=t.parser.getPositional(0),r=Ol(t.parser.getFlagValue(F.FORMAT));await fT(e,{format:r},t.workspaceRoot)}async function qM(t){t.parser.checkUnknownFlags(Ye[W.IMPACT]);let e=t.parser.getPositional(0);if(!e){h.error(g.IMPACT_MISSING_TARGET),$t.exitCode=1;return}let r=Ol(t.parser.getFlagValue(F.FORMAT));await hT(e,{format:r},t.workspaceRoot)}async function QM(t){t.parser.checkUnknownFlags(Ye[W.QUERY]);let e=t.parser.getPositional(0),r=Ol(t.parser.getFlagValue(F.FORMAT)),n=t.parser.getFlagValue(F.LIMIT),i=n?Number(n):void 0;await _T(e,{format:r,limit:i},t.workspaceRoot,t.isInteractive)}async function XM(t){t.parser.checkUnknownFlags(Ye[W.EXPORT_TOPOLOGY]);let e=t.parser.getFlagValue(F.OUT),r=t.parser.hasFlag(F.JSON_ONLY),n=t.parser.getFlagValue(F.COLLAPSE);await AT({out:e,jsonOnly:r,collapse:n},t.workspaceRoot)}async function ZM(t){t.parser.checkUnknownFlags(Ye[W.SNAPSHOT]),await yT(t.workspaceRoot)}async function ek(t){t.parser.checkUnknownFlags(Ye[W.HYDRATE]);let e=t.parser.hasFlag(F.FORCE)||t.parser.hasFlag(F.FORCE_SHORT);await LT(t.workspaceRoot,{force:e})}async function tk(t){t.parser.checkUnknownFlags(Ye[W.UNINSTALL]);let e=t.parser.getFlagValue(F.PLATFORM),r=t.parser.hasFlag(F.KEEP_DB),n=t.parser.hasFlag(F.SKILLS);await DT(t.workspaceRoot,e,r,t.isInteractive,n)}async function rk(t){t.parser.checkUnknownFlags(Ye[W.DOCTOR]);let e=t.parser.hasFlag(F.SKIP_DB),r=t.parser.hasFlag(F.SKIP_GIT),n=t.parser.hasFlag(F.SKIP_HOOKS),i=t.parser.hasFlag(F.SKIP_LOGS),s=t.parser.hasFlag(F.SKIP_LSP),o=t.parser.hasFlag(F.SKIP_LLM),a=t.parser.hasFlag(F.FIX);await kT(t.workspaceRoot,{skipDb:e,skipGit:r,skipHooks:n,skipLogs:i,skipLsp:s,skipLlm:o,fix:a})}async function nk(t){t.parser.checkUnknownFlags(Ye[W.SYNC_KNOWLEDGE]),await NT(t.workspaceRoot)}async function ik(t){t.parser.checkUnknownFlags(Ye[W.HOOKS]);let e=t.parser.getPositional(0),r=t.parser.getPositional(1);await UT(e,r,t.workspaceRoot)}var sk={[W.INIT]:$M,[W.MCP]:YM,[W.CLEAN]:WM,[W.STATUS]:jM,[W.PUBLISH]:VM,[W.ANALYZE]:zM,[W.REVIEW]:JM,[W.IMPACT]:qM,[W.QUERY]:QM,[W.EXPORT_TOPOLOGY]:XM,[W.SNAPSHOT]:ZM,[W.HYDRATE]:ek,[W.SYNC_KNOWLEDGE]:nk,[W.UNINSTALL]:tk,[W.DOCTOR]:rk,[W.HOOKS]:ik};async function ok(t,e,r){let n=eR(t)?void 0:t;if(n)return n;e||(ZT(),$t.exit(1)),r||(h.error(g.CLI_INTERACTIVE_NO_TTY),$t.exit(1)),h.header(g.CLI_HEADER);let i=Object.values(W).filter(o=>o!==W.MCP).map(o=>({name:o,value:o,description:Rl[o]}));return await h.askSelect(g.CLI_PROMPT_ACTION,i)}function ak(t){return BM(t)?(h.log(zd()),!0):KM(t)?(h.log(HM()),!0):!1}function lk(t,e){let r=eR(t)||e.hasFlag(F.INTERACTIVE)||e.hasFlag(F.INTERACTIVE_SHORT),n=r&&!!$t.stdin.isTTY&&!$t.env.CI;return{wantsInteractive:r,interactiveEligible:n}}async function ck(t,e,r,n,i,s){if(!t||!e){h.error(g.CLI_UNKNOWN_COMMAND+t),ZT(),$t.exit(1);return}if(r.hasFlag(F.HELP)||r.hasFlag(F.HELP_SHORT)){h.log(qT(t));return}n&&!i&&h.warn(g.CLI_INTERACTIVE_UNAVAILABLE),await e({parser:r,isInteractive:i,workspaceRoot:s})}async function uk(){let t=$t.argv[2];if(ak(t))return;let e=$t.argv.slice(3),r=new Al(e),n=$t.cwd(),{wantsInteractive:i,interactiveEligible:s}=lk(t,r),o=await ok(t,i,s),a=o?sk[o]:void 0;try{await ck(o,a,r,i,s,n)}catch(l){let c=l instanceof Error?l.message:String(l);h.error(g.CLI_FATAL_ERROR+c),$t.exit(1)}}uk().catch(t=>{h.error(g.CLI_FATAL_ERROR+(t instanceof Error?t.message:String(t))),$t.exit(1)});
192
192
  /*! Bundled license information:
193
193
 
194
194
  is-extglob/index.js: