docuvia 1.11.1 → 1.11.2

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,36 +1,36 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
3
- import{a as Pp,b as Dp,d as We,f as vp,g as bp,h as wp}from"./chunk-2PHGPH6J.js";import{A as Qp,B as Xp,C as Zp,D as eg,E as jl,F as Vl,G as tg,H as Gs,I as rg,J as ng,K as xs,L as ig,M as Us,N as kt,O as ln,P as Dr,a as Mp,b as Kl,c as $n,d as ks,e as $l,f as Yl,g as Yn,h as kp,i as Gp,j as xp,k as Et,l as Pr,m as Up,n as Hp,o as Bp,p as Kp,q as $p,r as Wl,s as Yp,t as ki,u as Wp,v as jp,w as Vp,x as zp,y as Jp,z as qp}from"./chunk-UOVRG6ML.js";import{a as Fp,b as Bl,c as m,d as g,e as Ot,g as vr}from"./chunk-SKVYRRXB.js";import{$ as yp,A as yr,Aa as Gn,B as lp,Ba as xn,C as kn,Ca as Fs,D as on,Da as an,E as Mt,Ea as Un,F as xl,Fa as Hn,G as cp,Ga as Ir,H as ar,Ha as Ms,I as bi,Ia as cr,J as Ee,Ja as Mi,K as Or,Ka as Lr,L as up,La as Np,M as dp,Ma as K,N as pp,Na as Bn,O as gp,Oa as Kn,P as wi,Pa as Cr,Q as fp,Qa as Nr,R as mp,S as hp,T as Ep,U as _p,V as Sp,W as Tp,X as at,Y as Fi,Z as Ap,_ as Rp,a as Oe,aa as Op,b as sp,ba as Ip,c as he,ca as lr,da as ht,e as op,ea as Lp,f as R,fa as se,g as _,ga as H,h as O,ha as Jt,i as A,ia as vs,j as y,ja as S,k as T,ka as Cp,l as yt,m as kl,n as B,o as qe,p as Rr,q as de,r as or,s as Ft,t as sn,u as Te,v as ap,w as zt,wa as Ul,x as Gl,xa as bs,y as Ye,ya as ws,z as Ds,za as Hl}from"./chunk-AZIYDR4P.js";import{a as be,b as U,c as Ml}from"./chunk-KVOCOCYJ.js";var zg=U(Qn=>{"use strict";Object.defineProperty(Qn,"__esModule",{value:!0});Qn.splitWhen=Qn.flatten=void 0;function sy(t){return t.reduce((e,r)=>[].concat(e,r),[])}Qn.flatten=sy;function oy(t,e){let r=[[]],n=0;for(let i of t)e(i)?(n++,r[n]=[]):r[n].push(i);return r}Qn.splitWhen=oy});var Jg=U(Zs=>{"use strict";Object.defineProperty(Zs,"__esModule",{value:!0});Zs.isEnoentCodeError=void 0;function ay(t){return t.code==="ENOENT"}Zs.isEnoentCodeError=ay});var qg=U(eo=>{"use strict";Object.defineProperty(eo,"__esModule",{value:!0});eo.createDirentFromStats=void 0;var ic=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 ly(t,e){return new ic(t,e)}eo.createDirentFromStats=ly});var ef=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 cy=be("os"),uy=be("path"),Qg=cy.platform()==="win32",dy=2,py=/(\\?)([()*?[\]{|}]|^!|[!+@](?=\()|\\(?![!()*+?@[\]{|}]))/g,gy=/(\\?)([()[\]{}]|^!|[!+@](?=\())/g,fy=/^\\\\([.?])/,my=/\\(?![!()+@[\]{}])/g;function hy(t){return t.replace(/\\/g,"/")}ke.unixify=hy;function Ey(t,e){return uy.resolve(t,e)}ke.makeAbsolute=Ey;function _y(t){if(t.charAt(0)==="."){let e=t.charAt(1);if(e==="/"||e==="\\")return t.slice(dy)}return t}ke.removeLeadingDotSegment=_y;ke.escape=Qg?sc:oc;function sc(t){return t.replace(gy,"\\$2")}ke.escapeWindowsPath=sc;function oc(t){return t.replace(py,"\\$2")}ke.escapePosixPath=oc;ke.convertPathToPattern=Qg?Xg:Zg;function Xg(t){return sc(t).replace(fy,"//$1").replace(my,"/")}ke.convertWindowsPathToPattern=Xg;function Zg(t){return oc(t)}ke.convertPosixPathToPattern=Zg});var rf=U((JU,tf)=>{"use strict";tf.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 of=U((qU,sf)=>{"use strict";var Sy=rf(),nf={"{":"}","(":")","[":"]"},Ty=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=nf[a];if(l){var c=t.indexOf(l,e);c!==-1&&(e=c+1)}if(t[e]==="!")return!0}else e++}return!1},Ay=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=nf[r];if(n){var i=t.indexOf(n,e);i!==-1&&(e=i+1)}if(t[e]==="!")return!0}else e++}return!1};sf.exports=function(e,r){if(typeof e!="string"||e==="")return!1;if(Sy(e))return!0;var n=Ty;return r&&r.strict===!1&&(n=Ay),n(e)}});var lf=U((QU,af)=>{"use strict";var Ry=of(),yy=be("path").posix.dirname,Oy=be("os").platform()==="win32",ac="/",Iy=/\\/g,Ly=/[\{\[].*[\}\]]$/,Cy=/(^|[^\\])([\{\[]|\([^\)]+$)/,Ny=/\\([\!\*\?\|\[\]\(\)\{\}])/g;af.exports=function(e,r){var n=Object.assign({flipBackslashes:!0},r);n.flipBackslashes&&Oy&&e.indexOf(ac)<0&&(e=e.replace(Iy,ac)),Ly.test(e)&&(e+=ac),e+="a";do e=yy(e);while(Ry(e)||Cy.test(e));return e.replace(Ny,"$1")}});var to=U(Lt=>{"use strict";Lt.isInteger=t=>typeof t=="number"?Number.isInteger(t):typeof t=="string"&&t.trim()!==""?Number.isInteger(Number(t)):!1;Lt.find=(t,e)=>t.nodes.find(r=>r.type===e);Lt.exceedsLimit=(t,e,r=1,n)=>n===!1||!Lt.isInteger(t)||!Lt.isInteger(e)?!1:(Number(e)-Number(t))/Number(r)>=n;Lt.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)};Lt.encloseBrace=t=>t.type!=="brace"?!1:t.commas>>0+t.ranges>>0===0?(t.invalid=!0,!0):!1;Lt.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;Lt.isOpenOrClose=t=>t.type==="open"||t.type==="close"?!0:t.open===!0||t.close===!0;Lt.reduce=t=>t.reduce((e,r)=>(r.type==="text"&&e.push(r.value),r.type==="range"&&(r.type="text"),e),[]);Lt.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 ro=U((ZU,uf)=>{"use strict";var cf=to();uf.exports=(t,e={})=>{let r=(n,i={})=>{let s=e.escapeInvalid&&cf.isInvalidBrace(i),o=n.invalid===!0&&e.escapeInvalid===!0,a="";if(n.value)return(s||o)&&cf.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 pf=U((eH,df)=>{"use strict";df.exports=function(t){return typeof t=="number"?t-t===0:typeof t=="string"&&t.trim()!==""?Number.isFinite?Number.isFinite(+t):isFinite(+t):!1}});var Af=U((tH,Tf)=>{"use strict";var gf=pf(),mn=(t,e,r)=>{if(gf(t)===!1)throw new TypeError("toRegexRange: expected the first argument to be a number");if(e===void 0||t===e)return String(t);if(gf(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(mn.cache.hasOwnProperty(l))return mn.cache[l].result;let c=Math.min(t,e),u=Math.max(t,e);if(Math.abs(c-u)===1){let E=t+"|"+e;return n.capture?`(${E})`:n.wrap===!1?E:`(?:${E})`}let p=Sf(t)||Sf(e),d={min:t,max:e,a:c,b:u},f=[],h=[];if(p&&(d.isPadded=p,d.maxLen=String(d.max).length),c<0){let E=u<0?Math.abs(u):1;h=ff(E,Math.abs(c),d,n),c=d.a=0}return u>=0&&(f=ff(c,u,d,n)),d.negatives=h,d.positives=f,d.result=Py(h,f,n),n.capture===!0?d.result=`(${d.result})`:n.wrap!==!1&&f.length+h.length>1&&(d.result=`(?:${d.result})`),mn.cache[l]=d,d.result};function Py(t,e,r){let n=lc(t,e,"-",!1,r)||[],i=lc(e,t,"",!1,r)||[],s=lc(t,e,"-?",!0,r)||[];return n.concat(s).concat(i).join("|")}function Dy(t,e){let r=1,n=1,i=hf(t,r),s=new Set([e]);for(;t<=i&&i<=e;)s.add(i),r+=1,i=hf(t,r);for(i=Ef(e+1,n)-1;t<i&&i<=e;)s.add(i),n+=1,i=Ef(e+1,n)-1;return s=[...s],s.sort(wy),s}function vy(t,e,r){if(t===e)return{pattern:t,count:[],digits:0};let n=by(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+=Fy(l,c,r):o++}return o&&(s+=r.shorthand===!0?"\\d":"[0-9]"),{pattern:s,count:[o],digits:i}}function ff(t,e,r,n){let i=Dy(t,e),s=[],o=t,a;for(let l=0;l<i.length;l++){let c=i[l],u=vy(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+_f(a.count),o=c+1;continue}r.isPadded&&(p=My(c,r,n)),u.string=p+u.pattern+_f(u.count),s.push(u),o=c+1,a=u}return s}function lc(t,e,r,n,i){let s=[];for(let o of t){let{string:a}=o;!n&&!mf(e,"string",a)&&s.push(r+a),n&&mf(e,"string",a)&&s.push(r+a)}return s}function by(t,e){let r=[];for(let n=0;n<t.length;n++)r.push([t[n],e[n]]);return r}function wy(t,e){return t>e?1:e>t?-1:0}function mf(t,e,r){return t.some(n=>n[e]===r)}function hf(t,e){return Number(String(t).slice(0,-e)+"9".repeat(e))}function Ef(t,e){return t-t%Math.pow(10,e)}function _f(t){let[e=0,r=""]=t;return r||e>1?`{${e+(r?","+r:"")}}`:""}function Fy(t,e,r){return`[${t}${e-t===1?"":"-"}${e}]`}function Sf(t){return/^-?(0+)\d/.test(t)}function My(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}}`}}mn.cache={};mn.clearCache=()=>mn.cache={};Tf.exports=mn});var dc=U((rH,Nf)=>{"use strict";var ky=be("util"),yf=Af(),Rf=t=>t!==null&&typeof t=="object"&&!Array.isArray(t),Gy=t=>e=>t===!0?Number(e):String(e),cc=t=>typeof t=="number"||typeof t=="string"&&t!=="",zi=t=>Number.isInteger(+t),uc=t=>{let e=`${t}`,r=-1;if(e[0]==="-"&&(e=e.slice(1)),e==="0")return!1;for(;e[++r]==="0";);return r>0},xy=(t,e,r)=>typeof t=="string"||typeof e=="string"?!0:r.stringify===!0,Uy=(t,e,r)=>{if(e>0){let n=t[0]==="-"?"-":"";n&&(t=t.slice(1)),t=n+t.padStart(n?e-1:e,"0")}return r===!1?String(t):t},io=(t,e)=>{let r=t[0]==="-"?"-":"";for(r&&(t=t.slice(1),e--);t.length<e;)t="0"+t;return r?"-"+t:t},Hy=(t,e,r)=>{t.negatives.sort((a,l)=>a<l?-1:a>l?1:0),t.positives.sort((a,l)=>a<l?-1:a>l?1:0);let n=e.capture?"":"?:",i="",s="",o;return t.positives.length&&(i=t.positives.map(a=>io(String(a),r)).join("|")),t.negatives.length&&(s=`-(${n}${t.negatives.map(a=>io(String(a),r)).join("|")})`),i&&s?o=`${i}|${s}`:o=i||s,e.wrap?`(${n}${o})`:o},Of=(t,e,r,n)=>{if(r)return yf(t,e,{wrap:!1,...n});let i=String.fromCharCode(t);if(t===e)return i;let s=String.fromCharCode(e);return`[${i}-${s}]`},If=(t,e,r)=>{if(Array.isArray(t)){let n=r.wrap===!0,i=r.capture?"":"?:";return n?`(${i}${t.join("|")})`:t.join("|")}return yf(t,e,r)},Lf=(...t)=>new RangeError("Invalid range arguments: "+ky.inspect(...t)),Cf=(t,e,r)=>{if(r.strictRanges===!0)throw Lf([t,e]);return[]},By=(t,e)=>{if(e.strictRanges===!0)throw new TypeError(`Expected step "${t}" to be a number`);return[]},Ky=(t,e,r=1,n={})=>{let i=Number(t),s=Number(e);if(!Number.isInteger(i)||!Number.isInteger(s)){if(n.strictRanges===!0)throw Lf([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=uc(a)||uc(l)||uc(c),p=u?Math.max(a.length,l.length,c.length):0,d=u===!1&&xy(t,e,n)===!1,f=n.transform||Gy(d);if(n.toRegex&&r===1)return Of(io(t,p),io(e,p),!0,n);let h={negatives:[],positives:[]},E=L=>h[L<0?"negatives":"positives"].push(Math.abs(L)),I=[],C=0;for(;o?i>=s:i<=s;)n.toRegex===!0&&r>1?E(i):I.push(Uy(f(i,C),p,d)),i=o?i-r:i+r,C++;return n.toRegex===!0?r>1?Hy(h,n,p):If(I,null,{wrap:!1,...n}):I},$y=(t,e,r=1,n={})=>{if(!zi(t)&&t.length>1||!zi(e)&&e.length>1)return Cf(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 Of(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?If(u,null,{wrap:!1,options:n}):u},no=(t,e,r,n={})=>{if(e==null&&cc(t))return[t];if(!cc(t)||!cc(e))return Cf(t,e,n);if(typeof r=="function")return no(t,e,1,{transform:r});if(Rf(r))return no(t,e,0,r);let i={...n};return i.capture===!0&&(i.wrap=!0),r=r||i.step||1,zi(r)?zi(t)&&zi(e)?Ky(t,e,r,i):$y(t,e,Math.max(Math.abs(r),1),i):r!=null&&!Rf(r)?By(r,i):no(t,e,1,r)};Nf.exports=no});var vf=U((nH,Df)=>{"use strict";var Yy=dc(),Pf=to(),Wy=(t,e={})=>{let r=(n,i={})=>{let s=Pf.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=Pf.reduce(n.nodes),p=Yy(...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)};Df.exports=Wy});var Ff=U((iH,wf)=>{"use strict";var jy=dc(),bf=ro(),Xn=to(),hn=(t="",e="",r=!1)=>{let n=[];if(t=[].concat(t),e=[].concat(e),!e.length)return t;if(!t.length)return r?Xn.flatten(e).map(i=>`{${i}}`):e;for(let i of t)if(Array.isArray(i))for(let s of i)n.push(hn(s,e,r));else for(let s of e)r===!0&&typeof s=="string"&&(s=`{${s}}`),n.push(Array.isArray(s)?hn(i,s,r):i+s);return Xn.flatten(n)},Vy=(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(hn(a.pop(),bf(i,e)));return}if(i.type==="brace"&&i.invalid!==!0&&i.nodes.length===2){a.push(hn(a.pop(),["{}"]));return}if(i.nodes&&i.ranges>0){let p=Xn.reduce(i.nodes);if(Xn.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=jy(...p,e);d.length===0&&(d=bf(i,e)),a.push(hn(a.pop(),d)),i.nodes=[];return}let l=Xn.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(hn(a.pop(),c,l));continue}if(d.value&&d.type!=="open"){c.push(hn(c.pop(),d.value));continue}d.nodes&&n(d,i)}return c};return Xn.flatten(n(t))};wf.exports=Vy});var kf=U((sH,Mf)=>{"use strict";Mf.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 Bf=U((oH,Hf)=>{"use strict";var zy=ro(),{MAX_LENGTH:Gf,CHAR_BACKSLASH:pc,CHAR_BACKTICK:Jy,CHAR_COMMA:qy,CHAR_DOT:Qy,CHAR_LEFT_PARENTHESES:Xy,CHAR_RIGHT_PARENTHESES:Zy,CHAR_LEFT_CURLY_BRACE:eO,CHAR_RIGHT_CURLY_BRACE:tO,CHAR_LEFT_SQUARE_BRACKET:xf,CHAR_RIGHT_SQUARE_BRACKET:Uf,CHAR_DOUBLE_QUOTE:rO,CHAR_SINGLE_QUOTE:nO,CHAR_NO_BREAK_SPACE:iO,CHAR_ZERO_WIDTH_NOBREAK_SPACE:sO}=kf(),oO=(t,e={})=>{if(typeof t!="string")throw new TypeError("Expected a string");let r=e||{},n=typeof r.maxLength=="number"?Math.min(Gf,r.maxLength):Gf;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++],h=E=>{if(E.type==="text"&&a.type==="dot"&&(a.type="text"),a&&a.type==="text"&&E.type==="text"){a.value+=E.value;return}return o.nodes.push(E),E.parent=o,E.prev=a,a=E,E};for(h({type:"bos"});u<c;)if(o=s[s.length-1],d=f(),!(d===sO||d===iO)){if(d===pc){h({type:"text",value:(e.keepEscaping?d:"")+f()});continue}if(d===Uf){h({type:"text",value:"\\"+d});continue}if(d===xf){l++;let E;for(;u<c&&(E=f());){if(d+=E,E===xf){l++;continue}if(E===pc){d+=f();continue}if(E===Uf&&(l--,l===0))break}h({type:"text",value:d});continue}if(d===Xy){o=h({type:"paren",nodes:[]}),s.push(o),h({type:"text",value:d});continue}if(d===Zy){if(o.type!=="paren"){h({type:"text",value:d});continue}o=s.pop(),h({type:"text",value:d}),o=s[s.length-1];continue}if(d===rO||d===nO||d===Jy){let E=d,I;for(e.keepQuotes!==!0&&(d="");u<c&&(I=f());){if(I===pc){d+=I+f();continue}if(I===E){e.keepQuotes===!0&&(d+=I);break}d+=I}h({type:"text",value:d});continue}if(d===eO){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=h(I),s.push(o),h({type:"open",value:d});continue}if(d===tO){if(o.type!=="brace"){h({type:"text",value:d});continue}let E="close";o=s.pop(),o.close=!0,h({type:E,value:d}),p--,o=s[s.length-1];continue}if(d===qy&&p>0){if(o.ranges>0){o.ranges=0;let E=o.nodes.shift();o.nodes=[E,{type:"text",value:zy(o)}]}h({type:"comma",value:d}),o.commas++;continue}if(d===Qy&&p>0&&o.commas===0){let E=o.nodes;if(p===0||E.length===0){h({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"){E.pop();let I=E[E.length-1];I.value+=a.value+d,a=I,o.ranges--;continue}h({type:"dot",value:d});continue}h({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 E=s[s.length-1],I=E.nodes.indexOf(o);E.nodes.splice(I,1,...o.nodes)}while(s.length>0);return h({type:"eos"}),i};Hf.exports=oO});var Yf=U((aH,$f)=>{"use strict";var Kf=ro(),aO=vf(),lO=Ff(),cO=Bf(),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={})=>cO(t,e);St.stringify=(t,e={})=>Kf(typeof t=="string"?St.parse(t,e):t,e);St.compile=(t,e={})=>(typeof t=="string"&&(t=St.parse(t,e)),aO(t,e));St.expand=(t,e={})=>{typeof t=="string"&&(t=St.parse(t,e));let r=lO(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);$f.exports=St});var Ji=U((lH,Jf)=>{"use strict";var uO=be("path"),Qt="\\\\/",Wf=`[^${Qt}]`,dO=0,pr="\\.",pO="\\+",gO="\\?",so="\\/",fO="(?=.)",jf="[^/]",gc=`(?:${so}|$)`,Vf=`(?:^|${so})`,fc=`${pr}{1,2}${gc}`,mO=`(?!${pr})`,hO=`(?!${Vf}${fc})`,EO=`(?!${pr}{0,1}${gc})`,_O=`(?!${fc})`,SO=`[^.${so}]`,TO=`${jf}*?`,zf={DOT_LITERAL:pr,PLUS_LITERAL:pO,QMARK_LITERAL:gO,SLASH_LITERAL:so,ONE_CHAR:fO,QMARK:jf,END_ANCHOR:gc,DOTS_SLASH:fc,NO_DOT:mO,NO_DOTS:hO,NO_DOT_SLASH:EO,NO_DOTS_SLASH:_O,QMARK_NO_DOT:SO,STAR:TO,START_ANCHOR:Vf},AO={...zf,SLASH_LITERAL:`[${Qt}]`,QMARK:Wf,STAR:`${Wf}*?`,DOTS_SLASH:`${pr}{1,2}(?:[${Qt}]|$)`,NO_DOT:`(?!${pr})`,NO_DOTS:`(?!(?:^|[${Qt}])${pr}{1,2}(?:[${Qt}]|$))`,NO_DOT_SLASH:`(?!${pr}{0,1}(?:[${Qt}]|$))`,NO_DOTS_SLASH:`(?!${pr}{1,2}(?:[${Qt}]|$))`,QMARK_NO_DOT:`[^.${Qt}]`,START_ANCHOR:`(?:^|[${Qt}])`,END_ANCHOR:`(?:[${Qt}]|$)`},RO={__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"};Jf.exports={DEFAULT_MAX_EXTGLOB_RECURSION:dO,MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:RO,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:uO.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?AO:zf}}});var qi=U(dt=>{"use strict";var yO=be("path"),OO=process.platform==="win32",{REGEX_BACKSLASH:IO,REGEX_REMOVE_BACKSLASH:LO,REGEX_SPECIAL_CHARS:CO,REGEX_SPECIAL_CHARS_GLOBAL:NO}=Ji();dt.isObject=t=>t!==null&&typeof t=="object"&&!Array.isArray(t);dt.hasRegexChars=t=>CO.test(t);dt.isRegexChar=t=>t.length===1&&dt.hasRegexChars(t);dt.escapeRegex=t=>t.replace(NO,"\\$1");dt.toPosixSlashes=t=>t.replace(IO,"/");dt.removeBackslashes=t=>t.replace(LO,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:OO===!0||yO.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 nm=U((uH,rm)=>{"use strict";var qf=qi(),{CHAR_ASTERISK:mc,CHAR_AT:PO,CHAR_BACKWARD_SLASH:Qi,CHAR_COMMA:DO,CHAR_DOT:hc,CHAR_EXCLAMATION_MARK:Ec,CHAR_FORWARD_SLASH:tm,CHAR_LEFT_CURLY_BRACE:_c,CHAR_LEFT_PARENTHESES:Sc,CHAR_LEFT_SQUARE_BRACKET:vO,CHAR_PLUS:bO,CHAR_QUESTION_MARK:Qf,CHAR_RIGHT_CURLY_BRACE:wO,CHAR_RIGHT_PARENTHESES:Xf,CHAR_RIGHT_SQUARE_BRACKET:FO}=Ji(),Zf=t=>t===tm||t===Qi,em=t=>{t.isPrefix!==!0&&(t.depth=t.isGlobstar?1/0:1)},MO=(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,h=!1,E=!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),Re=()=>(te=M,l.charCodeAt(++c));for(;c<n;){M=Re();let nt;if(M===Qi){L=ne.backslashes=!0,M=Re(),M===_c&&(C=!0);continue}if(C===!0||M===_c){for($++;pe()!==!0&&(M=Re());){if(M===Qi){L=ne.backslashes=!0,Re();continue}if(M===_c){$++;continue}if(C!==!0&&M===hc&&(M=Re())===hc){if(d=ne.isBrace=!0,h=ne.isGlob=!0,J=!0,i===!0)continue;break}if(C!==!0&&M===DO){if(d=ne.isBrace=!0,h=ne.isGlob=!0,J=!0,i===!0)continue;break}if(M===wO&&($--,$===0)){C=!1,d=ne.isBrace=!0,J=!0;break}}if(i===!0)continue;break}if(M===tm){if(s.push(c),o.push(ne),ne={value:"",depth:0,isGlob:!1},J===!0)continue;if(te===hc&&c===u+1){u+=2;continue}p=c+1;continue}if(r.noext!==!0&&(M===bO||M===PO||M===mc||M===Qf||M===Ec)===!0&&N()===Sc){if(h=ne.isGlob=!0,E=ne.isExtglob=!0,J=!0,M===Ec&&c===u&&(Q=!0),i===!0){for(;pe()!==!0&&(M=Re());){if(M===Qi){L=ne.backslashes=!0,M=Re();continue}if(M===Xf){h=ne.isGlob=!0,J=!0;break}}continue}break}if(M===mc){if(te===mc&&(I=ne.isGlobstar=!0),h=ne.isGlob=!0,J=!0,i===!0)continue;break}if(M===Qf){if(h=ne.isGlob=!0,J=!0,i===!0)continue;break}if(M===vO){for(;pe()!==!0&&(nt=Re());){if(nt===Qi){L=ne.backslashes=!0,Re();continue}if(nt===FO){f=ne.isBracket=!0,h=ne.isGlob=!0,J=!0;break}}if(i===!0)continue;break}if(r.nonegate!==!0&&M===Ec&&c===u){b=ne.negated=!0,u++;continue}if(r.noparen!==!0&&M===Sc){if(h=ne.isGlob=!0,i===!0){for(;pe()!==!0&&(M=Re());){if(M===Sc){L=ne.backslashes=!0,M=Re();continue}if(M===Xf){J=!0;break}}continue}break}if(h===!0){if(J=!0,i===!0)continue;break}}r.noext===!0&&(E=!1,h=!1);let Ie=l,Tr="",D="";u>0&&(Tr=l.slice(0,u),l=l.slice(u),p-=u),Ie&&h===!0&&p>0?(Ie=l.slice(0,p),D=l.slice(p)):h===!0?(Ie="",D=l):Ie=l,Ie&&Ie!==""&&Ie!=="/"&&Ie!==l&&Zf(Ie.charCodeAt(Ie.length-1))&&(Ie=Ie.slice(0,-1)),r.unescape===!0&&(D&&(D=qf.removeBackslashes(D)),Ie&&L===!0&&(Ie=qf.removeBackslashes(Ie)));let v={prefix:Tr,input:t,start:u,base:Ie,glob:D,isBrace:d,isBracket:f,isGlob:h,isExtglob:E,isGlobstar:I,negated:b,negatedExtglob:Q};if(r.tokens===!0&&(v.maxDepth=0,Zf(M)||o.push(ne),v.tokens=o),r.parts===!0||r.tokens===!0){let nt;for(let me=0;me<s.length;me++){let Yt=nt?nt+1:u,Wt=s[me],mt=t.slice(Yt,Wt);r.tokens&&(me===0&&u!==0?(o[me].isPrefix=!0,o[me].value=Tr):o[me].value=mt,em(o[me]),v.maxDepth+=o[me].depth),(me!==0||mt!=="")&&a.push(mt),nt=Wt}if(nt&&nt+1<t.length){let me=t.slice(nt+1);a.push(me),r.tokens&&(o[o.length-1].value=me,em(o[o.length-1]),v.maxDepth+=o[o.length-1].depth)}v.slashes=s,v.parts=a}return v};rm.exports=MO});var lm=U((dH,am)=>{"use strict";var Xi=Ji(),Qe=qi(),{MAX_LENGTH:oo,POSIX_REGEX_SOURCE:kO,REGEX_NON_SPECIAL_CHARS:GO,REGEX_SPECIAL_CHARS_BACKREF:xO,REPLACEMENTS:im}=Xi,UO=(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},Zn=(t,e)=>`Missing ${t}: "${e}" - use "\\\\${e}" to match literal characters`,sm=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},HO=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},om=t=>{let e=t.trim(),r=!0;for(;r===!0;)r=!1,/^@\([^\\()[\]{}|]+\)$/.test(e)&&(e=e.slice(2,-1),r=!0);if(HO(e))return e.replace(/\\(.)/g,"$1")},BO=t=>{let e=t.map(om).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},Tc=(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}}}}},KO=t=>{let e=0,r=[];for(;e<t.length;){let i=Tc(t.slice(e),!1);if(!i||i.type!=="*")return;let s=sm(i.body).map(a=>a.trim());if(s.length!==1)return;let o=om(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("")}]`}*`},$O=t=>{let e=0,r=t.trim(),n=Tc(r);for(;n;)e++,r=n.body.trim(),n=Tc(r);return e},YO=(t,e)=>{if(e.maxExtglobRecursion===!1)return{risky:!1};let r=typeof e.maxExtglobRecursion=="number"?e.maxExtglobRecursion:Xi.DEFAULT_MAX_EXTGLOB_RECURSION,n=sm(t).map(i=>i.trim());if(n.length>1&&(n.some(i=>i==="")||n.some(i=>/^[*?]+$/.test(i))||BO(n)))return{risky:!0};for(let i of n){let s=KO(i);if(s)return{risky:!0,safeOutput:s};if($O(i)>r)return{risky:!0}}return{risky:!1}},Ac=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");t=im[t]||t;let r={...e},n=typeof r.maxLength=="number"?Math.min(oo,r.maxLength):oo,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=Xi.globChars(l),u=Xi.extglobChars(c),{DOT_LITERAL:p,PLUS_LITERAL:d,SLASH_LITERAL:f,ONE_CHAR:h,DOTS_SLASH:E,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?E: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 Re=[],Ie=[],Tr=[],D=s,v,nt=()=>N.index===i-1,me=N.peek=(x=1)=>t[N.index+x],Yt=N.advance=()=>t[++N.index]||"",Wt=()=>t.slice(N.index+1),mt=(x="",Ne=0)=>{N.consumed+=x,N.index+=Ne},Cs=x=>{N.output+=x.output!=null?x.output:x.value,mt(x.value)},IA=()=>{let x=1;for(;me()==="!"&&(me(2)!=="("||me(3)==="?");)Yt(),N.start++,x++;return x%2===0?!1:(N.negated=!0,N.start++,!0)},Ns=x=>{N[x]++,Tr.push(x)},Ar=x=>{N[x]--,Tr.pop()},le=x=>{if(D.type==="globstar"){let Ne=N.braces>0&&(x.type==="comma"||x.type==="brace"),G=x.extglob===!0||Re.length&&(x.type==="pipe"||x.type==="paren");x.type!=="slash"&&x.type!=="paren"&&!Ne&&!G&&(N.output=N.output.slice(0,-D.output.length),D.type="star",D.value="*",D.output=pe,N.output+=D.output)}if(Re.length&&x.type!=="paren"&&(Re[Re.length-1].inner+=x.value),(x.value||x.output)&&Cs(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},Ps=(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;Ns("parens"),le({type:x,value:Ne,output:N.output?"":h}),le({type:"paren",extglob:!0,value:Yt(),output:ae}),Re.push(G)},LA=x=>{let Ne=t.slice(x.startIndex,N.index+1),G=t.slice(x.startIndex+2,N.index),ae=YO(G,r);if((x.type==="plus"||x.type==="star")&&ae.risky){let ye=ae.safeOutput?(x.output?"":h)+(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:""}),Ar("parens");return}let Le=x.close+(r.capture?")":""),He;if(x.type==="negate"){let ye=pe;if(x.inner&&x.inner.length>1&&x.inner.includes("/")&&(ye=te(r)),(ye!==pe||nt()||/^\)+$/.test(Wt()))&&(Le=x.close=`)$))${ye}`),x.inner.includes("*")&&(He=Wt())&&/^\.[^\\/.]+$/.test(He)){let jt=Ac(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}),Ar("parens")};if(r.fastpaths!==!1&&!/(^[*!]|[/()[\]{}"])/.test(t)){let x=!1,Ne=t.replace(xO,(G,ae,Le,He,ye,jt)=>He==="\\"?(x=!0,G):He==="?"?ae?ae+He+(ye?b.repeat(ye.length):""):jt===0?ne+(ye?b.repeat(ye.length):""):b.repeat(Le.length):He==="."?p.repeat(Le.length):He==="*"?ae?ae+He+(ye?pe:""):pe:ae?G:`\\${G}`);return x===!0&&(r.unescape===!0?Ne=Ne.replace(/\\/g,""):Ne=Ne.replace(/\\+/g,G=>G.length%2===0?"\\\\":G?"\\":"")),Ne===t&&r.contains===!0?(N.output=t,N):(N.output=Qe.wrapOutput(Ne,N,e),N)}for(;!nt();){if(v=Yt(),v==="\0")continue;if(v==="\\"){let G=me();if(G==="/"&&r.bash!==!0||G==="."||G===";")continue;if(!G){v+="\\",le({type:"text",value:v});continue}let ae=/^\\+/.exec(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=kO[He];if(ye){D.value=Le+ye,N.backtrack=!0,Yt(),!s.output&&o.indexOf(D)===1&&(s.output=h);continue}}}(v==="["&&me()!==":"||v==="-"&&me()==="]")&&(v=`\\${v}`),v==="]"&&(D.value==="["||D.value==="[^")&&(v=`\\${v}`),r.posix===!0&&v==="!"&&D.value==="["&&(v="^"),D.value+=v,Cs({value:v});continue}if(N.quotes===1&&v!=='"'){v=Qe.escapeRegex(v),D.value+=v,Cs({value:v});continue}if(v==='"'){N.quotes=N.quotes===1?0:1,r.keepQuotes===!0&&le({type:"text",value:v});continue}if(v==="("){Ns("parens"),le({type:"paren",value:v});continue}if(v===")"){if(N.parens===0&&r.strictBrackets===!0)throw new SyntaxError(Zn("opening","("));let G=Re[Re.length-1];if(G&&N.parens===G.parens+1){LA(Re.pop());continue}le({type:"paren",value:v,output:N.parens?")":"\\)"}),Ar("parens");continue}if(v==="["){if(r.nobracket===!0||!Wt().includes("]")){if(r.nobracket!==!0&&r.strictBrackets===!0)throw new SyntaxError(Zn("closing","]"));v=`\\${v}`}else Ns("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(Zn("opening","["));le({type:"text",value:v,output:`\\${v}`});continue}Ar("brackets");let G=D.value.slice(1);if(D.posix!==!0&&G[0]==="^"&&!G.includes("/")&&(v=`/${v}`),D.value+=v,Cs({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){Ns("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=UO(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}),Ar("braces"),Ie.pop();continue}if(v==="|"){Re.length>0&&Re[Re.length-1].conditions++,le({type:"text",value:v});continue}if(v===","){let G=v,ae=Ie[Ie.length-1];ae&&Tr[Tr.length-1]==="braces"&&(ae.comma=!0,G="|"),le({type:"comma",value:v,output:G});continue}if(v==="/"){if(D.type==="dot"&&N.index===N.start+1){N.start=N.index+1,N.consumed="",N.output="",o.pop(),D=s;continue}le({type:"slash",value:v,output:f});continue}if(v==="."){if(N.braces>0&&D.type==="dot"){D.value==="."&&(D.output=p);let G=Ie[Ie.length-1];D.type="dots",D.output+=v,D.value+=v,G.dots=!0;continue}if(N.braces+N.parens===0&&D.type!=="bos"&&D.type!=="slash"){le({type:"text",value:v,output:p});continue}le({type:"dot",value:v,output:p});continue}if(v==="?"){if(!(D&&D.value==="(")&&r.noextglob!==!0&&me()==="("&&me(2)!=="?"){Ps("qmark",v);continue}if(D&&D.type==="paren"){let ae=me(),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&&me()==="("&&(me(2)!=="?"||!/[!=<:]/.test(me(3)))){Ps("negate",v);continue}if(r.nonegate!==!0&&N.index===0){IA();continue}}if(v==="+"){if(r.noextglob!==!0&&me()==="("&&me(2)!=="?"){Ps("plus",v);continue}if(D&&D.value==="("||r.regex===!1){le({type:"plus",value:v,output:d});continue}if(D&&(D.type==="bracket"||D.type==="paren"||D.type==="brace")||N.parens>0){le({type:"plus",value:v});continue}le({type:"plus",value:d});continue}if(v==="@"){if(r.noextglob!==!0&&me()==="("&&me(2)!=="?"){le({type:"at",extglob:!0,value:v,output:""});continue}le({type:"text",value:v});continue}if(v!=="*"){(v==="$"||v==="^")&&(v=`\\${v}`);let G=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=pe,N.backtrack=!0,N.globstar=!0,mt(v);continue}let x=Wt();if(r.noextglob!==!0&&/^\([^?]/.test(x)){Ps("star",v);continue}if(D.type==="star"){if(r.noglobstar===!0){mt(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=Re.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),mt("/**",3)}if(G.type==="bos"&&nt()){D.type="globstar",D.value+=v,D.output=te(r),N.output=D.output,N.globstar=!0,mt(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,mt(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,mt(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,mt(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,mt(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),me()!=="*"&&(N.output+=h,D.output+=h)),le(Ne)}for(;N.brackets>0;){if(r.strictBrackets===!0)throw new SyntaxError(Zn("closing","]"));N.output=Qe.escapeLast(N.output,"["),Ar("brackets")}for(;N.parens>0;){if(r.strictBrackets===!0)throw new SyntaxError(Zn("closing",")"));N.output=Qe.escapeLast(N.output,"("),Ar("parens")}for(;N.braces>0;){if(r.strictBrackets===!0)throw new SyntaxError(Zn("closing","}"));N.output=Qe.escapeLast(N.output,"{"),Ar("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};Ac.fastpaths=(t,e)=>{let r={...e},n=typeof r.maxLength=="number"?Math.min(oo,r.maxLength):oo,i=t.length;if(i>n)throw new SyntaxError(`Input length: ${i}, exceeds maximum allowed length: ${n}`);t=im[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:h}=Xi.globChars(s),E=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}(?:(?!${h}${M.dot?c:o}).)*?)`,J=M=>{switch(M){case"*":return`${E}${l}${b}`;case".*":return`${o}${l}${b}`;case"*.*":return`${E}${b}${o}${l}${b}`;case"*/*":return`${E}${b}${a}${l}${I}${b}`;case"**":return E+Q(r);case"**/*":return`(?:${E}${Q(r)}${a})?${I}${l}${b}`;case"**/*.*":return`(?:${E}${Q(r)}${a})?${I}${b}${o}${l}${b}`;case"**/.*":return`(?:${E}${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};am.exports=Ac});var um=U((pH,cm)=>{"use strict";var WO=be("path"),jO=nm(),Rc=lm(),yc=qi(),VO=Ji(),zO=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 h=f(d);if(h)return h}return!1}}let n=zO(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=yc.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:h}=Me.test(u,o,e,{glob:t,posix:s}),E={glob:t,state:a,regex:o,posix:s,input:u,output:h,match:f,isMatch:d};return typeof i.onResult=="function"&&i.onResult(E),d===!1?(E.isMatch=!1,p?E:!1):l(u)?(typeof i.onIgnore=="function"&&i.onIgnore(E),E.isMatch=!1,p?E:!1):(typeof i.onMatch=="function"&&i.onMatch(E),p?E:!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?yc.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=yc.isWindows(r))=>(e instanceof RegExp?e:Me.makeRe(e,r)).test(WO.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)):Rc(t,{...e,fastpaths:!1});Me.scan=(t,e)=>jO(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=Rc.fastpaths(t,e)),i.output||(i=Rc(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=VO;cm.exports=Me});var pm=U((gH,dm)=>{"use strict";dm.exports=um()});var _m=U((fH,Em)=>{"use strict";var fm=be("util"),mm=Yf(),Xt=pm(),Oc=qi(),gm=t=>t===""||t==="./",hm=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 h=p(f,!0);(d?!h.isMatch:h.isMatch)&&(d?n.add(h.output):(n.delete(h.output),i.add(h.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: "${fm.inspect(t)}"`);if(Array.isArray(e))return e.some(n=>Ce.contains(t,n,r));if(typeof e=="string"){if(gm(t)||gm(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(!Oc.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: "${fm.inspect(t)}"`);return[].concat(e).every(n=>Xt(n,r)(t))};Ce.capture=(t,e,r)=>{let n=Oc.isWindows(r),s=Xt.makeRe(String(t),{...r,capture:!0}).exec(n?Oc.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 mm(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||!hm(t)?[t]:mm(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=hm;Em.exports=Ce});var Nm=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 Sm=be("path"),JO=lf(),Ic=_m(),Tm="**",qO="\\",QO=/[*?]|^!/,XO=/\[[^[]*]/,ZO=/(?:^|[^!*+?@])\([^(]*\|[^|]*\)/,eI=/[!*+?@]\([^(]*\)/,tI=/,|\.\./,rI=/(?!^)\/{2,}/g;function Am(t,e={}){return!Rm(t,e)}Z.isStaticPattern=Am;function Rm(t,e={}){return t===""?!1:!!(e.caseSensitiveMatch===!1||t.includes(qO)||QO.test(t)||XO.test(t)||ZO.test(t)||e.extglob!==!1&&eI.test(t)||e.braceExpansion!==!1&&nI(t))}Z.isDynamicPattern=Rm;function nI(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 tI.test(n)}function iI(t){return ao(t)?t.slice(1):t}Z.convertToPositivePattern=iI;function sI(t){return"!"+t}Z.convertToNegativePattern=sI;function ao(t){return t.startsWith("!")&&t[1]!=="("}Z.isNegativePattern=ao;function ym(t){return!ao(t)}Z.isPositivePattern=ym;function oI(t){return t.filter(ao)}Z.getNegativePatterns=oI;function aI(t){return t.filter(ym)}Z.getPositivePatterns=aI;function lI(t){return t.filter(e=>!Lc(e))}Z.getPatternsInsideCurrentDirectory=lI;function cI(t){return t.filter(Lc)}Z.getPatternsOutsideCurrentDirectory=cI;function Lc(t){return t.startsWith("..")||t.startsWith("./..")}Z.isPatternRelatedToParentDirectory=Lc;function uI(t){return JO(t,{flipBackslashes:!1})}Z.getBaseDirectory=uI;function dI(t){return t.includes(Tm)}Z.hasGlobStar=dI;function Om(t){return t.endsWith("/"+Tm)}Z.endsWithSlashGlobStar=Om;function pI(t){let e=Sm.basename(t);return Om(t)||Am(e)}Z.isAffectDepthOfReadingPattern=pI;function gI(t){return t.reduce((e,r)=>e.concat(Im(r)),[])}Z.expandPatternsWithBraceExpansion=gI;function Im(t){let e=Ic.braces(t,{expand:!0,nodupes:!0,keepEscaping:!0});return e.sort((r,n)=>r.length-n.length),e.filter(r=>r!=="")}Z.expandBraceExpansion=Im;function fI(t,e){let{parts:r}=Ic.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=fI;function Lm(t,e){return Ic.makeRe(t,e)}Z.makeRe=Lm;function mI(t,e){return t.map(r=>Lm(r,e))}Z.convertPatternsToRe=mI;function hI(t,e){return e.some(r=>r.test(t))}Z.matchAny=hI;function EI(t){return t.replace(rI,"/")}Z.removeDuplicateSlashes=EI;function _I(t){let e=[],r=[];for(let n of t)Cm(n)?e.push(n):r.push(n);return[e,r]}Z.partitionAbsoluteAndRelative=_I;function Cm(t){return Sm.isAbsolute(t)}Z.isAbsolute=Cm});var bm=U((hH,vm)=>{"use strict";var SI=be("stream"),Pm=SI.PassThrough,TI=Array.prototype.slice;vm.exports=AI;function AI(){let t=[],e=TI.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=Pm(n);function a(){for(let u=0,p=arguments.length;u<p;u++)t.push(Dm(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(h){function E(){h.removeListener("merge2UnpipeEnd",E),h.removeListener("end",E),s&&h.removeListener("error",I),d()}function I(C){o.emit("error",C)}if(h._readableState.endEmitted)return d();h.on("merge2UnpipeEnd",E),h.on("end",E),s&&h.on("error",I),h.pipe(o,{end:!1}),h.resume()}for(let h=0;h<u.length;h++)f(u[h]);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 Dm(t,e){if(Array.isArray(t))for(let r=0,n=t.length;r<n;r++)t[r]=Dm(t[r],e);else{if(!t._readableState&&t.pipe&&(t=t.pipe(Pm(e))),!t._readableState||!t.pause||!t.pipe)throw new Error("Only readable stream can be merged.");t.pause()}return t}});var Fm=U(lo=>{"use strict";Object.defineProperty(lo,"__esModule",{value:!0});lo.merge=void 0;var RI=bm();function yI(t){let e=RI(t);return t.forEach(r=>{r.once("error",n=>e.emit("error",n))}),e.once("close",()=>wm(t)),e.once("end",()=>wm(t)),e}lo.merge=yI;function wm(t){t.forEach(e=>e.emit("close"))}});var Mm=U(ei=>{"use strict";Object.defineProperty(ei,"__esModule",{value:!0});ei.isEmpty=ei.isString=void 0;function OI(t){return typeof t=="string"}ei.isString=OI;function II(t){return t===""}ei.isEmpty=II});var gr=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 LI=zg();Xe.array=LI;var CI=Jg();Xe.errno=CI;var NI=qg();Xe.fs=NI;var PI=ef();Xe.path=PI;var DI=Nm();Xe.pattern=DI;var vI=Fm();Xe.stream=vI;var bI=Mm();Xe.string=bI});var Um=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=gr();function wI(t,e){let r=km(t,e),n=km(e.ignore,e),i=Gm(r),s=xm(r,n),o=i.filter(u=>Gt.pattern.isStaticPattern(u,e)),a=i.filter(u=>Gt.pattern.isDynamicPattern(u,e)),l=Cc(o,s,!1),c=Cc(a,s,!0);return l.concat(c)}Ze.generate=wI;function km(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 Cc(t,e,r){let n=[],i=Gt.pattern.getPatternsOutsideCurrentDirectory(t),s=Gt.pattern.getPatternsInsideCurrentDirectory(t),o=Nc(i),a=Nc(s);return n.push(...Pc(o,e,r)),"."in a?n.push(Dc(".",s,e,r)):n.push(...Pc(a,e,r)),n}Ze.convertPatternsToTasks=Cc;function Gm(t){return Gt.pattern.getPositivePatterns(t)}Ze.getPositivePatterns=Gm;function xm(t,e){return Gt.pattern.getNegativePatterns(t).concat(e).map(Gt.pattern.convertToPositivePattern)}Ze.getNegativePatternsAsPositive=xm;function Nc(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=Nc;function Pc(t,e,r){return Object.keys(t).map(n=>Dc(n,t[n],e,r))}Ze.convertPatternGroupsToTasks=Pc;function Dc(t,e,r,n){return{dynamic:n,positive:e,negative:r,base:t,patterns:[].concat(e,r.map(Gt.pattern.convertToNegativePattern))}}Ze.convertPatternGroupToTask=Dc});var Bm=U(co=>{"use strict";Object.defineProperty(co,"__esModule",{value:!0});co.read=void 0;function FI(t,e,r){e.fs.lstat(t,(n,i)=>{if(n!==null){Hm(r,n);return}if(!i.isSymbolicLink()||!e.followSymbolicLink){vc(r,i);return}e.fs.stat(t,(s,o)=>{if(s!==null){if(e.throwErrorOnBrokenSymbolicLink){Hm(r,s);return}vc(r,i);return}e.markSymbolicLink&&(o.isSymbolicLink=()=>!0),vc(r,o)})})}co.read=FI;function Hm(t,e){t(e)}function vc(t,e){t(null,e)}});var Km=U(uo=>{"use strict";Object.defineProperty(uo,"__esModule",{value:!0});uo.read=void 0;function MI(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}}uo.read=MI});var $m=U(Mr=>{"use strict";Object.defineProperty(Mr,"__esModule",{value:!0});Mr.createFileSystemAdapter=Mr.FILE_SYSTEM_ADAPTER=void 0;var po=be("fs");Mr.FILE_SYSTEM_ADAPTER={lstat:po.lstat,stat:po.stat,lstatSync:po.lstatSync,statSync:po.statSync};function kI(t){return t===void 0?Mr.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},Mr.FILE_SYSTEM_ADAPTER),t)}Mr.createFileSystemAdapter=kI});var Ym=U(wc=>{"use strict";Object.defineProperty(wc,"__esModule",{value:!0});var GI=$m(),bc=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}};wc.default=bc});var En=U(kr=>{"use strict";Object.defineProperty(kr,"__esModule",{value:!0});kr.statSync=kr.stat=kr.Settings=void 0;var Wm=Bm(),xI=Km(),Fc=Ym();kr.Settings=Fc.default;function UI(t,e,r){if(typeof e=="function"){Wm.read(t,Mc(),e);return}Wm.read(t,Mc(e),r)}kr.stat=UI;function HI(t,e){let r=Mc(e);return xI.read(t,r)}kr.statSync=HI;function Mc(t={}){return t instanceof Fc.default?t:new Fc.default(t)}});var zm=U((LH,Vm)=>{"use strict";var jm;Vm.exports=typeof queueMicrotask=="function"?queueMicrotask.bind(typeof window<"u"?window:global):t=>(jm||(jm=Promise.resolve())).then(t).catch(e=>setTimeout(()=>{throw e},0))});var qm=U((CH,Jm)=>{"use strict";Jm.exports=KI;var BI=zm();function KI(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?BI(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 kc=U(fo=>{"use strict";Object.defineProperty(fo,"__esModule",{value:!0});fo.IS_SUPPORT_READDIR_WITH_FILE_TYPES=void 0;var go=process.versions.node.split(".");if(go[0]===void 0||go[1]===void 0)throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);var Qm=Number.parseInt(go[0],10),$I=Number.parseInt(go[1],10),Xm=10,YI=10,WI=Qm>Xm,jI=Qm===Xm&&$I>=YI;fo.IS_SUPPORT_READDIR_WITH_FILE_TYPES=WI||jI});var Zm=U(mo=>{"use strict";Object.defineProperty(mo,"__esModule",{value:!0});mo.createDirentFromStats=void 0;var Gc=class{constructor(e,r){this.name=e,this.isBlockDevice=r.isBlockDevice.bind(r),this.isCharacterDevice=r.isCharacterDevice.bind(r),this.isDirectory=r.isDirectory.bind(r),this.isFIFO=r.isFIFO.bind(r),this.isFile=r.isFile.bind(r),this.isSocket=r.isSocket.bind(r),this.isSymbolicLink=r.isSymbolicLink.bind(r)}};function VI(t,e){return new Gc(t,e)}mo.createDirentFromStats=VI});var xc=U(ho=>{"use strict";Object.defineProperty(ho,"__esModule",{value:!0});ho.fs=void 0;var zI=Zm();ho.fs=zI});var Uc=U(Eo=>{"use strict";Object.defineProperty(Eo,"__esModule",{value:!0});Eo.joinPathSegments=void 0;function JI(t,e,r){return t.endsWith(r)?t+e:t+r+e}Eo.joinPathSegments=JI});var sh=U(Gr=>{"use strict";Object.defineProperty(Gr,"__esModule",{value:!0});Gr.readdir=Gr.readdirWithFileTypes=Gr.read=void 0;var qI=En(),eh=qm(),QI=kc(),th=xc(),rh=Uc();function XI(t,e,r){if(!e.stats&&QI.IS_SUPPORT_READDIR_WITH_FILE_TYPES){nh(t,e,r);return}ih(t,e,r)}Gr.read=XI;function nh(t,e,r){e.fs.readdir(t,{withFileTypes:!0},(n,i)=>{if(n!==null){_o(r,n);return}let s=i.map(a=>({dirent:a,name:a.name,path:rh.joinPathSegments(t,a.name,e.pathSegmentSeparator)}));if(!e.followSymbolicLinks){Hc(r,s);return}let o=s.map(a=>ZI(a,e));eh(o,(a,l)=>{if(a!==null){_o(r,a);return}Hc(r,l)})})}Gr.readdirWithFileTypes=nh;function ZI(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=th.fs.createDirentFromStats(t.name,i),r(null,t)})}}function ih(t,e,r){e.fs.readdir(t,(n,i)=>{if(n!==null){_o(r,n);return}let s=i.map(o=>{let a=rh.joinPathSegments(t,o,e.pathSegmentSeparator);return l=>{qI.stat(a,e.fsStatSettings,(c,u)=>{if(c!==null){l(c);return}let p={name:o,path:a,dirent:th.fs.createDirentFromStats(o,u)};e.stats&&(p.stats=u),l(null,p)})}});eh(s,(o,a)=>{if(o!==null){_o(r,o);return}Hc(r,a)})})}Gr.readdir=ih;function _o(t,e){t(e)}function Hc(t,e){t(null,e)}});var uh=U(xr=>{"use strict";Object.defineProperty(xr,"__esModule",{value:!0});xr.readdir=xr.readdirWithFileTypes=xr.read=void 0;var eL=En(),tL=kc(),oh=xc(),ah=Uc();function rL(t,e){return!e.stats&&tL.IS_SUPPORT_READDIR_WITH_FILE_TYPES?lh(t,e):ch(t,e)}xr.read=rL;function lh(t,e){return e.fs.readdirSync(t,{withFileTypes:!0}).map(n=>{let i={dirent:n,name:n.name,path:ah.joinPathSegments(t,n.name,e.pathSegmentSeparator)};if(i.dirent.isSymbolicLink()&&e.followSymbolicLinks)try{let s=e.fs.statSync(i.path);i.dirent=oh.fs.createDirentFromStats(i.name,s)}catch(s){if(e.throwErrorOnBrokenSymbolicLink)throw s}return i})}xr.readdirWithFileTypes=lh;function ch(t,e){return e.fs.readdirSync(t).map(n=>{let i=ah.joinPathSegments(t,n,e.pathSegmentSeparator),s=eL.statSync(i,e.fsStatSettings),o={name:n,path:i,dirent:oh.fs.createDirentFromStats(n,s)};return e.stats&&(o.stats=s),o})}xr.readdir=ch});var dh=U(Ur=>{"use strict";Object.defineProperty(Ur,"__esModule",{value:!0});Ur.createFileSystemAdapter=Ur.FILE_SYSTEM_ADAPTER=void 0;var ti=be("fs");Ur.FILE_SYSTEM_ADAPTER={lstat:ti.lstat,stat:ti.stat,lstatSync:ti.lstatSync,statSync:ti.statSync,readdir:ti.readdir,readdirSync:ti.readdirSync};function nL(t){return t===void 0?Ur.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},Ur.FILE_SYSTEM_ADAPTER),t)}Ur.createFileSystemAdapter=nL});var ph=U(Kc=>{"use strict";Object.defineProperty(Kc,"__esModule",{value:!0});var iL=be("path"),sL=En(),oL=dh(),Bc=class{constructor(e={}){this._options=e,this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!1),this.fs=oL.createFileSystemAdapter(this._options.fs),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,iL.sep),this.stats=this._getValue(this._options.stats,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0),this.fsStatSettings=new sL.Settings({followSymbolicLink:this.followSymbolicLinks,fs:this.fs,throwErrorOnBrokenSymbolicLink:this.throwErrorOnBrokenSymbolicLink})}_getValue(e,r){return e??r}};Kc.default=Bc});var So=U(Hr=>{"use strict";Object.defineProperty(Hr,"__esModule",{value:!0});Hr.Settings=Hr.scandirSync=Hr.scandir=void 0;var gh=sh(),aL=uh(),$c=ph();Hr.Settings=$c.default;function lL(t,e,r){if(typeof e=="function"){gh.read(t,Yc(),e);return}gh.read(t,Yc(e),r)}Hr.scandir=lL;function cL(t,e){let r=Yc(e);return aL.read(t,r)}Hr.scandirSync=cL;function Yc(t={}){return t instanceof $c.default?t:new $c.default(t)}});var mh=U((GH,fh)=>{"use strict";function uL(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}}fh.exports=uL});var Eh=U((xH,Wc)=>{"use strict";var dL=mh();function hh(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=dL(pL),i=null,s=null,o=0,a=null,l={push:E,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:h,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 h(){return o===0&&l.length()===0}function E($,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 pL(){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 gL(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=hh(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(h,E){if(h){f(h);return}d(E)})});return p.catch(pt),p}function l(u){var p=new Promise(function(d,f){o(u,function(h,E){if(h){f(h);return}d(E)})});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}}Wc.exports=hh;Wc.exports.promise=gL});var To=U(Zt=>{"use strict";Object.defineProperty(Zt,"__esModule",{value:!0});Zt.joinPathSegments=Zt.replacePathSegmentSeparator=Zt.isAppliedFilter=Zt.isFatalError=void 0;function fL(t,e){return t.errorFilter===null?!0:!t.errorFilter(e)}Zt.isFatalError=fL;function mL(t,e){return t===null||t(e)}Zt.isAppliedFilter=mL;function hL(t,e){return t.split(/[/\\]/).join(e)}Zt.replacePathSegmentSeparator=hL;function EL(t,e,r){return t===""?e:t.endsWith(r)?t+e:t+r+e}Zt.joinPathSegments=EL});var zc=U(Vc=>{"use strict";Object.defineProperty(Vc,"__esModule",{value:!0});var _L=To(),jc=class{constructor(e,r){this._root=e,this._settings=r,this._root=_L.replacePathSegmentSeparator(e,r.pathSegmentSeparator)}};Vc.default=jc});var Qc=U(qc=>{"use strict";Object.defineProperty(qc,"__esModule",{value:!0});var SL=be("events"),TL=So(),AL=Eh(),Ao=To(),RL=zc(),Jc=class extends RL.default{constructor(e,r){super(e,r),this._settings=r,this._scandir=TL.scandir,this._emitter=new SL.EventEmitter,this._queue=AL(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||!Ao.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=Ao.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),Ao.isAppliedFilter(this._settings.entryFilter,e)&&this._emitEntry(e),e.dirent.isDirectory()&&Ao.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(n,r===void 0?void 0:e.path)}_emitEntry(e){this._emitter.emit("entry",e)}};qc.default=Jc});var _h=U(Zc=>{"use strict";Object.defineProperty(Zc,"__esModule",{value:!0});var yL=Qc(),Xc=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new yL.default(this._root,this._settings),this._storage=[]}read(e){this._reader.onError(r=>{OL(e,r)}),this._reader.onEntry(r=>{this._storage.push(r)}),this._reader.onEnd(()=>{IL(e,this._storage)}),this._reader.read()}};Zc.default=Xc;function OL(t,e){t(e)}function IL(t,e){t(null,e)}});var Sh=U(tu=>{"use strict";Object.defineProperty(tu,"__esModule",{value:!0});var LL=be("stream"),CL=Qc(),eu=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new CL.default(this._root,this._settings),this._stream=new LL.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}};tu.default=eu});var Th=U(nu=>{"use strict";Object.defineProperty(nu,"__esModule",{value:!0});var NL=So(),Ro=To(),PL=zc(),ru=class extends PL.default{constructor(){super(...arguments),this._scandir=NL.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(Ro.isFatalError(this._settings,e))throw e}_handleEntry(e,r){let n=e.path;r!==void 0&&(e.path=Ro.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),Ro.isAppliedFilter(this._settings.entryFilter,e)&&this._pushToStorage(e),e.dirent.isDirectory()&&Ro.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(n,r===void 0?void 0:e.path)}_pushToStorage(e){this._storage.push(e)}};nu.default=ru});var Ah=U(su=>{"use strict";Object.defineProperty(su,"__esModule",{value:!0});var DL=Th(),iu=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new DL.default(this._root,this._settings)}read(){return this._reader.read()}};su.default=iu});var Rh=U(au=>{"use strict";Object.defineProperty(au,"__esModule",{value:!0});var vL=be("path"),bL=So(),ou=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,vL.sep),this.fsScandirSettings=new bL.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}};au.default=ou});var Oo=U(er=>{"use strict";Object.defineProperty(er,"__esModule",{value:!0});er.Settings=er.walkStream=er.walkSync=er.walk=void 0;var yh=_h(),wL=Sh(),FL=Ah(),lu=Rh();er.Settings=lu.default;function ML(t,e,r){if(typeof e=="function"){new yh.default(t,yo()).read(e);return}new yh.default(t,yo(e)).read(r)}er.walk=ML;function kL(t,e){let r=yo(e);return new FL.default(t,r).read()}er.walkSync=kL;function GL(t,e){let r=yo(e);return new wL.default(t,r).read()}er.walkStream=GL;function yo(t={}){return t instanceof lu.default?t:new lu.default(t)}});var Io=U(uu=>{"use strict";Object.defineProperty(uu,"__esModule",{value:!0});var xL=be("path"),UL=En(),Oh=gr(),cu=class{constructor(e){this._settings=e,this._fsStatSettings=new UL.Settings({followSymbolicLink:this._settings.followSymbolicLinks,fs:this._settings.fs,throwErrorOnBrokenSymbolicLink:this._settings.followSymbolicLinks})}_getFullEntryPath(e){return xL.resolve(this._settings.cwd,e)}_makeEntry(e,r){let n={name:r,path:r,dirent:Oh.fs.createDirentFromStats(r,e)};return this._settings.stats&&(n.stats=e),n}_isFatalError(e){return!Oh.errno.isEnoentCodeError(e)&&!this._settings.suppressErrors}};uu.default=cu});var gu=U(pu=>{"use strict";Object.defineProperty(pu,"__esModule",{value:!0});var HL=be("stream"),BL=En(),KL=Oo(),$L=Io(),du=class extends $L.default{constructor(){super(...arguments),this._walkStream=KL.walkStream,this._stat=BL.stat}dynamic(e,r){return this._walkStream(e,r)}static(e,r){let n=e.map(this._getFullEntryPath,this),i=new HL.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))})}};pu.default=du});var Ih=U(mu=>{"use strict";Object.defineProperty(mu,"__esModule",{value:!0});var YL=Oo(),WL=Io(),jL=gu(),fu=class extends WL.default{constructor(){super(...arguments),this._walkAsync=YL.walk,this._readerStream=new jL.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))})}};mu.default=fu});var Lh=U(Eu=>{"use strict";Object.defineProperty(Eu,"__esModule",{value:!0});var Zi=gr(),hu=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 Zi.pattern.getPatternParts(e,this._micromatchOptions).map(n=>Zi.pattern.isDynamicPattern(n,this._settings)?{dynamic:!0,pattern:n,patternRe:Zi.pattern.makeRe(n,this._micromatchOptions)}:{dynamic:!1,pattern:n})}_splitSegmentsIntoSections(e){return Zi.array.splitWhen(e,r=>r.dynamic&&Zi.pattern.hasGlobStar(r.pattern))}};Eu.default=hu});var Ch=U(Su=>{"use strict";Object.defineProperty(Su,"__esModule",{value:!0});var VL=Lh(),_u=class extends VL.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}};Su.default=_u});var Nh=U(Au=>{"use strict";Object.defineProperty(Au,"__esModule",{value:!0});var Lo=gr(),zL=Ch(),Tu=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 zL.default(e,this._settings,this._micromatchOptions)}_getNegativePatternsRe(e){let r=e.filter(Lo.pattern.isAffectDepthOfReadingPattern);return Lo.pattern.convertPatternsToRe(r,this._micromatchOptions)}_filter(e,r,n,i){if(this._isSkippedByDeep(e,r.path)||this._isSkippedSymbolicLink(r))return!1;let s=Lo.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!Lo.pattern.matchAny(e,r)}};Au.default=Tu});var Ph=U(yu=>{"use strict";Object.defineProperty(yu,"__esModule",{value:!0});var Br=gr(),Ru=class{constructor(e,r){this._settings=e,this._micromatchOptions=r,this.index=new Map}getFilter(e,r){let[n,i]=Br.pattern.partitionAbsoluteAndRelative(r),s={positive:{all:Br.pattern.convertPatternsToRe(e,this._micromatchOptions)},negative:{absolute:Br.pattern.convertPatternsToRe(n,Object.assign(Object.assign({},this._micromatchOptions),{dot:!0})),relative:Br.pattern.convertPatternsToRe(i,Object.assign(Object.assign({},this._micromatchOptions),{dot:!0}))}};return o=>this._filter(o,s)}_filter(e,r){let n=Br.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=Br.path.makeAbsolute(this._settings.cwd,e);return this._isMatchToPatterns(i,r,n)}_isMatchToPatterns(e,r,n){if(r.length===0)return!1;let i=Br.pattern.matchAny(e,r);return!i&&n?Br.pattern.matchAny(e+"/",r):i}};yu.default=Ru});var Dh=U(Iu=>{"use strict";Object.defineProperty(Iu,"__esModule",{value:!0});var JL=gr(),Ou=class{constructor(e){this._settings=e}getFilter(){return e=>this._isNonFatalError(e)}_isNonFatalError(e){return JL.errno.isEnoentCodeError(e)||this._settings.suppressErrors}};Iu.default=Ou});var bh=U(Cu=>{"use strict";Object.defineProperty(Cu,"__esModule",{value:!0});var vh=gr(),Lu=class{constructor(e){this._settings=e}getTransformer(){return e=>this._transform(e)}_transform(e){let r=e.path;return this._settings.absolute&&(r=vh.path.makeAbsolute(this._settings.cwd,r),r=vh.path.unixify(r)),this._settings.markDirectories&&e.dirent.isDirectory()&&(r+="/"),this._settings.objectMode?Object.assign(Object.assign({},e),{path:r}):r}};Cu.default=Lu});var Co=U(Pu=>{"use strict";Object.defineProperty(Pu,"__esModule",{value:!0});var qL=be("path"),QL=Nh(),XL=Ph(),ZL=Dh(),eC=bh(),Nu=class{constructor(e){this._settings=e,this.errorFilter=new ZL.default(this._settings),this.entryFilter=new XL.default(this._settings,this._getMicromatchOptions()),this.deepFilter=new QL.default(this._settings,this._getMicromatchOptions()),this.entryTransformer=new eC.default(this._settings)}_getRootDirectory(e){return qL.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}}};Pu.default=Nu});var wh=U(vu=>{"use strict";Object.defineProperty(vu,"__esModule",{value:!0});var tC=Ih(),rC=Co(),Du=class extends rC.default{constructor(){super(...arguments),this._reader=new tC.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)}};vu.default=Du});var Fh=U(wu=>{"use strict";Object.defineProperty(wu,"__esModule",{value:!0});var nC=be("stream"),iC=gu(),sC=Co(),bu=class extends sC.default{constructor(){super(...arguments),this._reader=new iC.default(this._settings)}read(e){let r=this._getRootDirectory(e),n=this._getReaderOptions(e),i=this.api(r,e,n),s=new nC.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)}};wu.default=bu});var Mh=U(Mu=>{"use strict";Object.defineProperty(Mu,"__esModule",{value:!0});var oC=En(),aC=Oo(),lC=Io(),Fu=class extends lC.default{constructor(){super(...arguments),this._walkSync=aC.walkSync,this._statSync=oC.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)}};Mu.default=Fu});var kh=U(Gu=>{"use strict";Object.defineProperty(Gu,"__esModule",{value:!0});var cC=Mh(),uC=Co(),ku=class extends uC.default{constructor(){super(...arguments),this._reader=new cC.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)}};Gu.default=ku});var Gh=U(ni=>{"use strict";Object.defineProperty(ni,"__esModule",{value:!0});ni.DEFAULT_FILE_SYSTEM_ADAPTER=void 0;var ri=be("fs"),dC=be("os"),pC=Math.max(dC.cpus().length,1);ni.DEFAULT_FILE_SYSTEM_ADAPTER={lstat:ri.lstat,lstatSync:ri.lstatSync,stat:ri.stat,statSync:ri.statSync,readdir:ri.readdir,readdirSync:ri.readdirSync};var xu=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,pC),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({},ni.DEFAULT_FILE_SYSTEM_ADAPTER),e)}};ni.default=xu});var Ku=U((cB,Uh)=>{"use strict";var xh=Um(),gC=wh(),fC=Fh(),mC=kh(),Uu=Gh(),Ct=gr();async function Hu(t,e){xt(t);let r=Bu(t,gC.default,e),n=await Promise.all(r);return Ct.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=Bu(c,mC.default,u);return Ct.array.flatten(p)}t.sync=e;function r(c,u){xt(c);let p=Bu(c,fC.default,u);return Ct.stream.merge(p)}t.stream=r;function n(c,u){xt(c);let p=[].concat(c),d=new Uu.default(u);return xh.generate(p,d)}t.generateTasks=n;function i(c,u){xt(c);let p=new Uu.default(u);return Ct.pattern.isDynamicPattern(c,p)}t.isDynamicPattern=i;function s(c){return xt(c),Ct.path.escape(c)}t.escapePath=s;function o(c){return xt(c),Ct.path.convertPathToPattern(c)}t.convertPathToPattern=o;let a;(function(c){function u(d){return xt(d),Ct.path.escapePosixPath(d)}c.escapePath=u;function p(d){return xt(d),Ct.path.convertPosixPathToPattern(d)}c.convertPathToPattern=p})(a=t.posix||(t.posix={}));let l;(function(c){function u(d){return xt(d),Ct.path.escapeWindowsPath(d)}c.escapePath=u;function p(d){return xt(d),Ct.path.convertWindowsPathToPattern(d)}c.convertPathToPattern=p})(l=t.win32||(t.win32={}))})(Hu||(Hu={}));function Bu(t,e,r){let n=[].concat(t),i=new Uu.default(r),s=xh.generate(n,i),o=new e(i);return s.map(o.read,o)}function xt(t){if(![].concat(t).every(n=>Ct.string.isString(n)&&!Ct.string.isEmpty(n)))throw new TypeError("Patterns must be a string (non empty) or an array of strings")}Uh.exports=Hu});var zh=U((uB,Do)=>{"use strict";function Kh(t){return Array.isArray(t)?t:[t]}var hC=void 0,Yu="",Hh=" ",$u="\\",EC=/^\s+$/,_C=/(?:[^\\]|^)\\$/,SC=/^\\!/,TC=/^\\#/,AC=/\r?\n/g,RC=/^\.{0,2}\/|^\.{1,2}$/,yC=/\/$/,ii="/",$h="node-ignore";typeof Symbol<"u"&&($h=Symbol.for("node-ignore"));var Yh=$h,si=(t,e,r)=>(Object.defineProperty(t,e,{value:r}),r),OC=/([0-z])-([0-z])/g,Wh=()=>!1,IC=t=>t.replace(OC,(e,r,n)=>r.charCodeAt(0)<=n.charCodeAt(0)?e:Yu),LC=t=>t.startsWith("!")||t.startsWith("\\^")?`^${t.slice(t[0]==="!"?1:2)}`:t,CC=t=>{let{length:e}=t;return t.slice(0,e-e%2)},NC=[[/^\uFEFF/,()=>Yu],[/((?:\\\\)*?)(\\?\s+)$/,(t,e,r)=>e+(r.indexOf("\\")===0?Hh:Yu)],[/(\\+?)\s/g,(t,e)=>{let{length:r}=e;return e.slice(0,r-r%2)+Hh}],[/[\\$.|*+(){^]/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,()=>$u],[/\\\\/g,()=>$u],[/(\\)?\[([^\]/]*?)(\\*)($|\])/g,(t,e,r,n,i)=>e===$u?`\\[${r}${CC(n)}${i}`:i==="]"&&n.length%2===0?`[${LC(IC(r))}${n}]`:"[]"],[/(?:[^*])$/,t=>/\/$/.test(t)?`${t}$`:`${t}(?=$|\\/$)`]],PC=/(^|\\\/)?\\\*$/,es="regex",No="checkRegex",Bh="_",DC={[es](t,e){return`${e?`${e}[^/]+`:"[^/]*"}(?=$|\\/$)`},[No](t,e){return`${e?`${e}[^/]*`:"[^/]*"}(?=$|\\/$)`}},vC=t=>NC.reduce((e,[r,n])=>e.replace(r,n.bind(t)),t),Po=t=>typeof t=="string",bC=t=>t&&Po(t)&&!EC.test(t)&&!_C.test(t)&&t.indexOf("#")!==0,wC=t=>t.split(AC).filter(Boolean),Wu=class{constructor(e,r,n,i,s,o){this.pattern=e,this.mark=r,this.negative=s,si(this,"body",n),si(this,"ignoreCase",i),si(this,"regexPrefix",o)}get regex(){let e=Bh+es;return this[e]?this[e]:this._make(es,e)}get checkRegex(){let e=Bh+No;return this[e]?this[e]:this._make(No,e)}_make(e,r){let n=this.regexPrefix.replace(PC,DC[e]),i=this.ignoreCase?new RegExp(n,"i"):new RegExp(n);return si(this,r,i)}},FC=({pattern:t,mark:e},r)=>{let n=!1,i=t;i.indexOf("!")===0&&(n=!0,i=i.substr(1)),i=i.replace(SC,"!").replace(TC,"#");let s=vC(i);return new Wu(t,e,i,r,n,s)},ju=class{constructor(e){this._ignoreCase=e,this._rules=[]}_add(e){if(e&&e[Yh]){this._rules=this._rules.concat(e._rules._rules),this._added=!0;return}if(Po(e)&&(e={pattern:e}),bC(e.pattern)){let r=FC(e,this._ignoreCase);this._added=!0,this._rules.push(r)}}add(e){return this._added=!1,Kh(Po(e)?wC(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?hC:l)});let a={ignored:i,unignored:s};return o&&(a.rule=o),a}},MC=(t,e)=>{throw new e(t)},fr=(t,e,r)=>Po(t)?t?fr.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),jh=t=>RC.test(t);fr.isNotRelative=jh;fr.convert=t=>t;var Vu=class{constructor({ignorecase:e=!0,ignoreCase:r=e,allowRelativePaths:n=!1}={}){si(this,Yh,!0),this._rules=new ju(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&&fr.convert(e);return fr(s,e,this._strictPathCheck?MC:Wh),this._t(s,r,n,i)}checkIgnore(e){if(!yC.test(e))return this.test(e);let r=e.split(ii).filter(Boolean);if(r.pop(),r.length){let n=this._t(r.join(ii)+ii,this._testCache,!0,r);if(n.ignored)return n}return this._rules.test(e,!1,No)}_t(e,r,n,i){if(e in r)return r[e];if(i||(i=e.split(ii).filter(Boolean)),i.pop(),!i.length)return r[e]=this._rules.test(e,n,es);let s=this._t(i.join(ii)+ii,r,n,i);return r[e]=s.ignored?s:this._rules.test(e,n,es)}ignores(e){return this._test(e,this._ignoreCache,!1).ignored}createFilter(){return e=>!this.ignores(e)}filter(e){return Kh(e).filter(this.createFilter())}test(e){return this._test(e,this._testCache,!0)}},zu=t=>new Vu(t),kC=t=>fr(t&&fr.convert(t),t,Wh),Vh=()=>{let t=r=>/^\\\\\?\\/.test(r)||/["<>|\u0000-\u001F]+/u.test(r)?r:r.replace(/\\/g,"/");fr.convert=t;let e=/^[a-z]:\//i;fr.isNotRelative=r=>e.test(r)||jh(r)};typeof process<"u"&&process.platform==="win32"&&Vh();Do.exports=zu;zu.default=zu;Do.exports.isPathValid=kC;si(Do.exports,Symbol.for("setupWindows"),Vh)});import*as RA from"dotenv";import $t from"process";import{execFile as KA}from"child_process";import{promisify as $A}from"util";import ur from"fs/promises";import lt from"path";import{spawn as CA}from"child_process";import og from"fs/promises";import pn from"path";import NA from"os";var zl=class{value;next;constructor(e){this.value=e}},Gi=class{#t;#s;#c;constructor(){this.clear()}enqueue(e){let r=new zl(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 cn(t){let e=!1;if(typeof t=="object"&&({concurrency:t,rejectOnClear:e=!1}=t),sg(t),typeof e!="boolean")throw new TypeError("Expected `rejectOnClear` to be a boolean");let r=new Gi,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(h=>{f.run=h,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){sg(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 sg(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 br={NAME:"Docuvia",EMAIL:"docuvia@localhost"};var un="refs/heads/",Jl="HEAD";var PA="fast-import",DA="--quiet",ql={PIPE:"pipe",IGNORE:"ignore"},Hs={DATA:"data",ERROR:"error",CLOSE:"close"},dn={COMMIT:"commit",COMMITTER:"committer",DATA:"data",FROM:"from",DELETE_ALL:"deleteall",MODIFY:"M"},vA="100644",bA="inline",wA="+0000",FA="stdin write failed: ",MA=(t,e,r)=>{let n=[e,r?`${FA}${r.message}`:""].filter(Boolean).join("; ");return`git fast-import exited with code ${t}${n?": "+n:""}`},kA=300*1e3,ag="SIGTERM",GA=t=>`git fast-import timed out after ${t}ms and was terminated`,xA=NA.cpus().length*4;async function lg(t,e){let r=pn.resolve(t),n=e?pn.resolve(e):r;if(!r.startsWith(n+pn.sep)&&r!==n)throw new _(R.FS_PATH_TRAVERSAL,`sourceDir "${t}" escapes allowed root "${n}"`);let i=new Map,s=cn(xA),o=async a=>{let l=await og.readdir(a,{withFileTypes:!0});await Promise.all(l.map(async c=>{let u=pn.join(a,c.name);if(c.isDirectory())await o(u);else if(c.isFile()){let p=pn.relative(t,u),d=await s(()=>og.readFile(u,H));i.set(p,d)}}))};return await o(t),i}function cg(t,e,r,n,i){let s=[];s.push(`${dn.COMMIT} ${un}${t}`),s.push(`${dn.COMMITTER} ${br.NAME} <${br.EMAIL}> ${r} ${wA}`),s.push(`${dn.DATA} ${Buffer.byteLength(n,H)}`),s.push(n),i&&s.push(`${dn.FROM} ${i}`),s.push(dn.DELETE_ALL);for(let[o,a]of e){let l=Buffer.from(a,H),c=o.split(pn.sep).join(pn.posix.sep);s.push(`${dn.MODIFY} ${vA} ${bA} ${c}`),s.push(`${dn.DATA} ${l.length}`),s.push(a)}return s.push(""),s.join(`
5
- `)}function ug(t,e,r=kA){return new Promise((n,i)=>{let s=CA("git",[PA,DA],{cwd:t,stdio:[ql.PIPE,ql.IGNORE,ql.PIPE]}),o=setTimeout(()=>{s.kill(ag),i(new Error(GA(r)))},r);o.unref();let a=[],l;s.stderr.on(Hs.DATA,c=>a.push(c)),s.on(Hs.ERROR,i),s.on(Hs.CLOSE,c=>{if(clearTimeout(o),c===0)return n();let u=Buffer.concat(a).toString(H).trim();i(new Error(MA(c,u,l)))}),s.stdin.on(Hs.ERROR,c=>{l=c});try{s.stdin.end(e,H)}catch(c){s.kill(ag),clearTimeout(o),i(c instanceof Error?c:new Error(String(c)));return}})}import Wn from"path";var UA="Git hook name must be a basename contained by the resolved hooks directory";function HA(t){return t.length===0||t==="."||t===".."||t.includes("/")||t.includes("\\")||Wn.isAbsolute(t)}function BA(t){return t.length===0||t===".."||t.startsWith(`..${Wn.sep}`)||Wn.isAbsolute(t)}function dg(){throw new _(R.FS_PATH_TRAVERSAL,UA)}function xi(t,e){HA(e)&&dg();let r=Wn.resolve(t),n=Wn.resolve(r,e),i=Wn.relative(r,n);return BA(i)&&dg(),n}var YA=$A(KA),WA={LC_ALL:"C",LANG:"C",LC_MESSAGES:"C"},ge=(t,e,r={})=>YA(t,e,{...r,encoding:"utf8",env:{...process.env,...r.env??{},...WA}}),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"},Bs={PATH:"worktree ",BRANCH:"branch "},jA="\0",VA="",Ql={RENAMED:"R",ADDED:"A",DELETED:"D"},zA="4b825dc642cb6eb9a060e54bf8d69288fbee4904",pg=".git",gg="hooks",JA="_",fg="docuvia-knowledge.lock",qA=1e4,QA=100,XA=6e4,mg="object",hg="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`},jn=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,pg)}}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,pg)}}async resolveHooksDir(e){let r;try{let{stdout:n}=await ge("git",[fe.REV_PARSE,re.GIT_PATH_FLAG,gg],{cwd:e});r=lt.resolve(e,n.trim())}catch{let n=await this.getGitCommonDir(e);r=lt.join(n,gg)}return lt.basename(r)===JA?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 _.wrap(R.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 _.wrap(R.GIT_COMMAND_FAILED,Fe.BRANCH_DELETE_FAILED,n)}}async commitEmptyTree(e,r){try{let{stdout:n}=await ge("git",[fe.COMMIT_TREE,zA,re.MESSAGE_FLAG,r],{cwd:e});return n.trim()}catch(n){throw _.wrap(R.GIT_BRANCH_CREATE_FAILED,Fe.COMMIT_TREE_FAILED,n)}}async updateBranchRef(e,r,n){try{await ge("git",[fe.UPDATE_REF,`${un}${r}`,n],{cwd:e})}catch(i){throw _.wrap(R.GIT_BRANCH_CREATE_FAILED,Fe.UPDATE_REF_FAILED,i)}}async hooksDirExists(e){try{let r=await this.resolveHooksDir(e);return await ur.access(r),!0}catch{return!1}}async readHookFile(e,r){let n=await this.resolveHooksDir(e),i=xi(n,r);try{return await ur.readFile(i,H)}catch{return}}async appendHookFile(e,r,n){try{let i=await this.resolveHooksDir(e),s=xi(i,r);await ur.appendFile(s,n)}catch(i){throw _.wrap(R.GIT_HOOK_INSTALL_FAILED,Fe.HOOK_FILE_WRITE_FAILED,i)}}async writeHookFile(e,r,n){try{let i=await this.resolveHooksDir(e),s=xi(i,r);await ur.writeFile(s,n)}catch(i){throw _.wrap(R.GIT_HOOK_INSTALL_FAILED,Fe.HOOK_FILE_WRITE_FAILED,i)}}async makeHookExecutable(e,r){try{let n=await this.resolveHooksDir(e),i=xi(n,r);await ur.chmod(i,493)}catch(n){throw _.wrap(R.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(`
3
+ import{a as Dp,b as vp,d as We,f as bp,g as wp,h as Fp}from"./chunk-2PHGPH6J.js";import{A as Xp,B as Zp,C as eg,D as tg,E as Vl,F as zl,G as rg,H as Gs,I as ng,J as ig,K as xs,L as sg,M as Us,N as kt,O as ln,P as Dr,a as kp,b as $l,c as $n,d as ks,e as Yl,f as Wl,g as Yn,h as Gp,i as xp,j as Up,k as Et,l as Pr,m as Hp,n as Bp,o as Kp,p as $p,q as Yp,r as jl,s as Wp,t as ki,u as jp,v as Vp,w as zp,x as Jp,y as qp,z as Qp}from"./chunk-UOVRG6ML.js";import{a as Mp,b as Kl,c as m,d as g,e as Ot,g as vr}from"./chunk-SKVYRRXB.js";import{$ as Op,A as yr,Aa as Gn,B as cp,Ba as xn,C as kn,Ca as Fs,D as on,Da as an,E as Mt,Ea as Un,F as Ul,Fa as Hn,G as up,Ga as Ir,H as ar,Ha as Ms,I as bi,Ia as cr,J as Ee,Ja as Mi,K as Or,Ka as Lr,L as dp,La as Pp,M as pp,Ma as K,N as gp,Na as Bn,O as fp,Oa as Kn,P as wi,Pa as Cr,Q as mp,Qa as Nr,R as hp,S as Ep,T as _p,U as Sp,V as Tp,W as Ap,X as at,Y as Fi,Z as Rp,_ as yp,a as Oe,aa as Ip,b as op,ba as Lp,c as he,ca as lr,da as ht,e as ap,ea as Cp,f as R,fa as se,g as _,ga as H,h as O,ha as Jt,i as A,ia as vs,j as y,ja as S,k as T,ka as Np,l as yt,m as Gl,n as B,o as qe,p as Rr,q as de,r as or,s as Ft,t as sn,u as Te,v as lp,w as zt,wa as Hl,x as xl,xa as bs,y as Ye,ya as ws,z as Ds,za as Bl}from"./chunk-AZIYDR4P.js";import{a as be,b as U,c as kl}from"./chunk-KVOCOCYJ.js";var Jg=U(Qn=>{"use strict";Object.defineProperty(Qn,"__esModule",{value:!0});Qn.splitWhen=Qn.flatten=void 0;function sy(t){return t.reduce((e,r)=>[].concat(e,r),[])}Qn.flatten=sy;function oy(t,e){let r=[[]],n=0;for(let i of t)e(i)?(n++,r[n]=[]):r[n].push(i);return r}Qn.splitWhen=oy});var qg=U(Zs=>{"use strict";Object.defineProperty(Zs,"__esModule",{value:!0});Zs.isEnoentCodeError=void 0;function ay(t){return t.code==="ENOENT"}Zs.isEnoentCodeError=ay});var Qg=U(eo=>{"use strict";Object.defineProperty(eo,"__esModule",{value:!0});eo.createDirentFromStats=void 0;var sc=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 ly(t,e){return new sc(t,e)}eo.createDirentFromStats=ly});var tf=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 cy=be("os"),uy=be("path"),Xg=cy.platform()==="win32",dy=2,py=/(\\?)([()*?[\]{|}]|^!|[!+@](?=\()|\\(?![!()*+?@[\]{|}]))/g,gy=/(\\?)([()[\]{}]|^!|[!+@](?=\())/g,fy=/^\\\\([.?])/,my=/\\(?![!()+@[\]{}])/g;function hy(t){return t.replace(/\\/g,"/")}ke.unixify=hy;function Ey(t,e){return uy.resolve(t,e)}ke.makeAbsolute=Ey;function _y(t){if(t.charAt(0)==="."){let e=t.charAt(1);if(e==="/"||e==="\\")return t.slice(dy)}return t}ke.removeLeadingDotSegment=_y;ke.escape=Xg?oc:ac;function oc(t){return t.replace(gy,"\\$2")}ke.escapeWindowsPath=oc;function ac(t){return t.replace(py,"\\$2")}ke.escapePosixPath=ac;ke.convertPathToPattern=Xg?Zg:ef;function Zg(t){return oc(t).replace(fy,"//$1").replace(my,"/")}ke.convertWindowsPathToPattern=Zg;function ef(t){return ac(t)}ke.convertPosixPathToPattern=ef});var nf=U((VU,rf)=>{"use strict";rf.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 af=U((zU,of)=>{"use strict";var Sy=nf(),sf={"{":"}","(":")","[":"]"},Ty=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=sf[a];if(l){var c=t.indexOf(l,e);c!==-1&&(e=c+1)}if(t[e]==="!")return!0}else e++}return!1},Ay=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=sf[r];if(n){var i=t.indexOf(n,e);i!==-1&&(e=i+1)}if(t[e]==="!")return!0}else e++}return!1};of.exports=function(e,r){if(typeof e!="string"||e==="")return!1;if(Sy(e))return!0;var n=Ty;return r&&r.strict===!1&&(n=Ay),n(e)}});var cf=U((JU,lf)=>{"use strict";var Ry=af(),yy=be("path").posix.dirname,Oy=be("os").platform()==="win32",lc="/",Iy=/\\/g,Ly=/[\{\[].*[\}\]]$/,Cy=/(^|[^\\])([\{\[]|\([^\)]+$)/,Ny=/\\([\!\*\?\|\[\]\(\)\{\}])/g;lf.exports=function(e,r){var n=Object.assign({flipBackslashes:!0},r);n.flipBackslashes&&Oy&&e.indexOf(lc)<0&&(e=e.replace(Iy,lc)),Ly.test(e)&&(e+=lc),e+="a";do e=yy(e);while(Ry(e)||Cy.test(e));return e.replace(Ny,"$1")}});var to=U(Lt=>{"use strict";Lt.isInteger=t=>typeof t=="number"?Number.isInteger(t):typeof t=="string"&&t.trim()!==""?Number.isInteger(Number(t)):!1;Lt.find=(t,e)=>t.nodes.find(r=>r.type===e);Lt.exceedsLimit=(t,e,r=1,n)=>n===!1||!Lt.isInteger(t)||!Lt.isInteger(e)?!1:(Number(e)-Number(t))/Number(r)>=n;Lt.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)};Lt.encloseBrace=t=>t.type!=="brace"?!1:t.commas>>0+t.ranges>>0===0?(t.invalid=!0,!0):!1;Lt.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;Lt.isOpenOrClose=t=>t.type==="open"||t.type==="close"?!0:t.open===!0||t.close===!0;Lt.reduce=t=>t.reduce((e,r)=>(r.type==="text"&&e.push(r.value),r.type==="range"&&(r.type="text"),e),[]);Lt.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 ro=U((QU,df)=>{"use strict";var uf=to();df.exports=(t,e={})=>{let r=(n,i={})=>{let s=e.escapeInvalid&&uf.isInvalidBrace(i),o=n.invalid===!0&&e.escapeInvalid===!0,a="";if(n.value)return(s||o)&&uf.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 gf=U((XU,pf)=>{"use strict";pf.exports=function(t){return typeof t=="number"?t-t===0:typeof t=="string"&&t.trim()!==""?Number.isFinite?Number.isFinite(+t):isFinite(+t):!1}});var Rf=U((ZU,Af)=>{"use strict";var ff=gf(),mn=(t,e,r)=>{if(ff(t)===!1)throw new TypeError("toRegexRange: expected the first argument to be a number");if(e===void 0||t===e)return String(t);if(ff(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(mn.cache.hasOwnProperty(l))return mn.cache[l].result;let c=Math.min(t,e),u=Math.max(t,e);if(Math.abs(c-u)===1){let E=t+"|"+e;return n.capture?`(${E})`:n.wrap===!1?E:`(?:${E})`}let p=Tf(t)||Tf(e),d={min:t,max:e,a:c,b:u},f=[],h=[];if(p&&(d.isPadded=p,d.maxLen=String(d.max).length),c<0){let E=u<0?Math.abs(u):1;h=mf(E,Math.abs(c),d,n),c=d.a=0}return u>=0&&(f=mf(c,u,d,n)),d.negatives=h,d.positives=f,d.result=Py(h,f,n),n.capture===!0?d.result=`(${d.result})`:n.wrap!==!1&&f.length+h.length>1&&(d.result=`(?:${d.result})`),mn.cache[l]=d,d.result};function Py(t,e,r){let n=cc(t,e,"-",!1,r)||[],i=cc(e,t,"",!1,r)||[],s=cc(t,e,"-?",!0,r)||[];return n.concat(s).concat(i).join("|")}function Dy(t,e){let r=1,n=1,i=Ef(t,r),s=new Set([e]);for(;t<=i&&i<=e;)s.add(i),r+=1,i=Ef(t,r);for(i=_f(e+1,n)-1;t<i&&i<=e;)s.add(i),n+=1,i=_f(e+1,n)-1;return s=[...s],s.sort(wy),s}function vy(t,e,r){if(t===e)return{pattern:t,count:[],digits:0};let n=by(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+=Fy(l,c,r):o++}return o&&(s+=r.shorthand===!0?"\\d":"[0-9]"),{pattern:s,count:[o],digits:i}}function mf(t,e,r,n){let i=Dy(t,e),s=[],o=t,a;for(let l=0;l<i.length;l++){let c=i[l],u=vy(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+Sf(a.count),o=c+1;continue}r.isPadded&&(p=My(c,r,n)),u.string=p+u.pattern+Sf(u.count),s.push(u),o=c+1,a=u}return s}function cc(t,e,r,n,i){let s=[];for(let o of t){let{string:a}=o;!n&&!hf(e,"string",a)&&s.push(r+a),n&&hf(e,"string",a)&&s.push(r+a)}return s}function by(t,e){let r=[];for(let n=0;n<t.length;n++)r.push([t[n],e[n]]);return r}function wy(t,e){return t>e?1:e>t?-1:0}function hf(t,e,r){return t.some(n=>n[e]===r)}function Ef(t,e){return Number(String(t).slice(0,-e)+"9".repeat(e))}function _f(t,e){return t-t%Math.pow(10,e)}function Sf(t){let[e=0,r=""]=t;return r||e>1?`{${e+(r?","+r:"")}}`:""}function Fy(t,e,r){return`[${t}${e-t===1?"":"-"}${e}]`}function Tf(t){return/^-?(0+)\d/.test(t)}function My(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}}`}}mn.cache={};mn.clearCache=()=>mn.cache={};Af.exports=mn});var pc=U((eH,Pf)=>{"use strict";var ky=be("util"),Of=Rf(),yf=t=>t!==null&&typeof t=="object"&&!Array.isArray(t),Gy=t=>e=>t===!0?Number(e):String(e),uc=t=>typeof t=="number"||typeof t=="string"&&t!=="",zi=t=>Number.isInteger(+t),dc=t=>{let e=`${t}`,r=-1;if(e[0]==="-"&&(e=e.slice(1)),e==="0")return!1;for(;e[++r]==="0";);return r>0},xy=(t,e,r)=>typeof t=="string"||typeof e=="string"?!0:r.stringify===!0,Uy=(t,e,r)=>{if(e>0){let n=t[0]==="-"?"-":"";n&&(t=t.slice(1)),t=n+t.padStart(n?e-1:e,"0")}return r===!1?String(t):t},io=(t,e)=>{let r=t[0]==="-"?"-":"";for(r&&(t=t.slice(1),e--);t.length<e;)t="0"+t;return r?"-"+t:t},Hy=(t,e,r)=>{t.negatives.sort((a,l)=>a<l?-1:a>l?1:0),t.positives.sort((a,l)=>a<l?-1:a>l?1:0);let n=e.capture?"":"?:",i="",s="",o;return t.positives.length&&(i=t.positives.map(a=>io(String(a),r)).join("|")),t.negatives.length&&(s=`-(${n}${t.negatives.map(a=>io(String(a),r)).join("|")})`),i&&s?o=`${i}|${s}`:o=i||s,e.wrap?`(${n}${o})`:o},If=(t,e,r,n)=>{if(r)return Of(t,e,{wrap:!1,...n});let i=String.fromCharCode(t);if(t===e)return i;let s=String.fromCharCode(e);return`[${i}-${s}]`},Lf=(t,e,r)=>{if(Array.isArray(t)){let n=r.wrap===!0,i=r.capture?"":"?:";return n?`(${i}${t.join("|")})`:t.join("|")}return Of(t,e,r)},Cf=(...t)=>new RangeError("Invalid range arguments: "+ky.inspect(...t)),Nf=(t,e,r)=>{if(r.strictRanges===!0)throw Cf([t,e]);return[]},By=(t,e)=>{if(e.strictRanges===!0)throw new TypeError(`Expected step "${t}" to be a number`);return[]},Ky=(t,e,r=1,n={})=>{let i=Number(t),s=Number(e);if(!Number.isInteger(i)||!Number.isInteger(s)){if(n.strictRanges===!0)throw Cf([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=dc(a)||dc(l)||dc(c),p=u?Math.max(a.length,l.length,c.length):0,d=u===!1&&xy(t,e,n)===!1,f=n.transform||Gy(d);if(n.toRegex&&r===1)return If(io(t,p),io(e,p),!0,n);let h={negatives:[],positives:[]},E=L=>h[L<0?"negatives":"positives"].push(Math.abs(L)),I=[],C=0;for(;o?i>=s:i<=s;)n.toRegex===!0&&r>1?E(i):I.push(Uy(f(i,C),p,d)),i=o?i-r:i+r,C++;return n.toRegex===!0?r>1?Hy(h,n,p):Lf(I,null,{wrap:!1,...n}):I},$y=(t,e,r=1,n={})=>{if(!zi(t)&&t.length>1||!zi(e)&&e.length>1)return Nf(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 If(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?Lf(u,null,{wrap:!1,options:n}):u},no=(t,e,r,n={})=>{if(e==null&&uc(t))return[t];if(!uc(t)||!uc(e))return Nf(t,e,n);if(typeof r=="function")return no(t,e,1,{transform:r});if(yf(r))return no(t,e,0,r);let i={...n};return i.capture===!0&&(i.wrap=!0),r=r||i.step||1,zi(r)?zi(t)&&zi(e)?Ky(t,e,r,i):$y(t,e,Math.max(Math.abs(r),1),i):r!=null&&!yf(r)?By(r,i):no(t,e,1,r)};Pf.exports=no});var bf=U((tH,vf)=>{"use strict";var Yy=pc(),Df=to(),Wy=(t,e={})=>{let r=(n,i={})=>{let s=Df.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=Df.reduce(n.nodes),p=Yy(...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)};vf.exports=Wy});var Mf=U((rH,Ff)=>{"use strict";var jy=pc(),wf=ro(),Xn=to(),hn=(t="",e="",r=!1)=>{let n=[];if(t=[].concat(t),e=[].concat(e),!e.length)return t;if(!t.length)return r?Xn.flatten(e).map(i=>`{${i}}`):e;for(let i of t)if(Array.isArray(i))for(let s of i)n.push(hn(s,e,r));else for(let s of e)r===!0&&typeof s=="string"&&(s=`{${s}}`),n.push(Array.isArray(s)?hn(i,s,r):i+s);return Xn.flatten(n)},Vy=(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(hn(a.pop(),wf(i,e)));return}if(i.type==="brace"&&i.invalid!==!0&&i.nodes.length===2){a.push(hn(a.pop(),["{}"]));return}if(i.nodes&&i.ranges>0){let p=Xn.reduce(i.nodes);if(Xn.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=jy(...p,e);d.length===0&&(d=wf(i,e)),a.push(hn(a.pop(),d)),i.nodes=[];return}let l=Xn.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(hn(a.pop(),c,l));continue}if(d.value&&d.type!=="open"){c.push(hn(c.pop(),d.value));continue}d.nodes&&n(d,i)}return c};return Xn.flatten(n(t))};Ff.exports=Vy});var Gf=U((nH,kf)=>{"use strict";kf.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 Kf=U((iH,Bf)=>{"use strict";var zy=ro(),{MAX_LENGTH:xf,CHAR_BACKSLASH:gc,CHAR_BACKTICK:Jy,CHAR_COMMA:qy,CHAR_DOT:Qy,CHAR_LEFT_PARENTHESES:Xy,CHAR_RIGHT_PARENTHESES:Zy,CHAR_LEFT_CURLY_BRACE:eO,CHAR_RIGHT_CURLY_BRACE:tO,CHAR_LEFT_SQUARE_BRACKET:Uf,CHAR_RIGHT_SQUARE_BRACKET:Hf,CHAR_DOUBLE_QUOTE:rO,CHAR_SINGLE_QUOTE:nO,CHAR_NO_BREAK_SPACE:iO,CHAR_ZERO_WIDTH_NOBREAK_SPACE:sO}=Gf(),oO=(t,e={})=>{if(typeof t!="string")throw new TypeError("Expected a string");let r=e||{},n=typeof r.maxLength=="number"?Math.min(xf,r.maxLength):xf;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++],h=E=>{if(E.type==="text"&&a.type==="dot"&&(a.type="text"),a&&a.type==="text"&&E.type==="text"){a.value+=E.value;return}return o.nodes.push(E),E.parent=o,E.prev=a,a=E,E};for(h({type:"bos"});u<c;)if(o=s[s.length-1],d=f(),!(d===sO||d===iO)){if(d===gc){h({type:"text",value:(e.keepEscaping?d:"")+f()});continue}if(d===Hf){h({type:"text",value:"\\"+d});continue}if(d===Uf){l++;let E;for(;u<c&&(E=f());){if(d+=E,E===Uf){l++;continue}if(E===gc){d+=f();continue}if(E===Hf&&(l--,l===0))break}h({type:"text",value:d});continue}if(d===Xy){o=h({type:"paren",nodes:[]}),s.push(o),h({type:"text",value:d});continue}if(d===Zy){if(o.type!=="paren"){h({type:"text",value:d});continue}o=s.pop(),h({type:"text",value:d}),o=s[s.length-1];continue}if(d===rO||d===nO||d===Jy){let E=d,I;for(e.keepQuotes!==!0&&(d="");u<c&&(I=f());){if(I===gc){d+=I+f();continue}if(I===E){e.keepQuotes===!0&&(d+=I);break}d+=I}h({type:"text",value:d});continue}if(d===eO){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=h(I),s.push(o),h({type:"open",value:d});continue}if(d===tO){if(o.type!=="brace"){h({type:"text",value:d});continue}let E="close";o=s.pop(),o.close=!0,h({type:E,value:d}),p--,o=s[s.length-1];continue}if(d===qy&&p>0){if(o.ranges>0){o.ranges=0;let E=o.nodes.shift();o.nodes=[E,{type:"text",value:zy(o)}]}h({type:"comma",value:d}),o.commas++;continue}if(d===Qy&&p>0&&o.commas===0){let E=o.nodes;if(p===0||E.length===0){h({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"){E.pop();let I=E[E.length-1];I.value+=a.value+d,a=I,o.ranges--;continue}h({type:"dot",value:d});continue}h({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 E=s[s.length-1],I=E.nodes.indexOf(o);E.nodes.splice(I,1,...o.nodes)}while(s.length>0);return h({type:"eos"}),i};Bf.exports=oO});var Wf=U((sH,Yf)=>{"use strict";var $f=ro(),aO=bf(),lO=Mf(),cO=Kf(),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={})=>cO(t,e);St.stringify=(t,e={})=>$f(typeof t=="string"?St.parse(t,e):t,e);St.compile=(t,e={})=>(typeof t=="string"&&(t=St.parse(t,e)),aO(t,e));St.expand=(t,e={})=>{typeof t=="string"&&(t=St.parse(t,e));let r=lO(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);Yf.exports=St});var Ji=U((oH,qf)=>{"use strict";var uO=be("path"),Qt="\\\\/",jf=`[^${Qt}]`,dO=0,pr="\\.",pO="\\+",gO="\\?",so="\\/",fO="(?=.)",Vf="[^/]",fc=`(?:${so}|$)`,zf=`(?:^|${so})`,mc=`${pr}{1,2}${fc}`,mO=`(?!${pr})`,hO=`(?!${zf}${mc})`,EO=`(?!${pr}{0,1}${fc})`,_O=`(?!${mc})`,SO=`[^.${so}]`,TO=`${Vf}*?`,Jf={DOT_LITERAL:pr,PLUS_LITERAL:pO,QMARK_LITERAL:gO,SLASH_LITERAL:so,ONE_CHAR:fO,QMARK:Vf,END_ANCHOR:fc,DOTS_SLASH:mc,NO_DOT:mO,NO_DOTS:hO,NO_DOT_SLASH:EO,NO_DOTS_SLASH:_O,QMARK_NO_DOT:SO,STAR:TO,START_ANCHOR:zf},AO={...Jf,SLASH_LITERAL:`[${Qt}]`,QMARK:jf,STAR:`${jf}*?`,DOTS_SLASH:`${pr}{1,2}(?:[${Qt}]|$)`,NO_DOT:`(?!${pr})`,NO_DOTS:`(?!(?:^|[${Qt}])${pr}{1,2}(?:[${Qt}]|$))`,NO_DOT_SLASH:`(?!${pr}{0,1}(?:[${Qt}]|$))`,NO_DOTS_SLASH:`(?!${pr}{1,2}(?:[${Qt}]|$))`,QMARK_NO_DOT:`[^.${Qt}]`,START_ANCHOR:`(?:^|[${Qt}])`,END_ANCHOR:`(?:[${Qt}]|$)`},RO={__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"};qf.exports={DEFAULT_MAX_EXTGLOB_RECURSION:dO,MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:RO,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:uO.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?AO:Jf}}});var qi=U(dt=>{"use strict";var yO=be("path"),OO=process.platform==="win32",{REGEX_BACKSLASH:IO,REGEX_REMOVE_BACKSLASH:LO,REGEX_SPECIAL_CHARS:CO,REGEX_SPECIAL_CHARS_GLOBAL:NO}=Ji();dt.isObject=t=>t!==null&&typeof t=="object"&&!Array.isArray(t);dt.hasRegexChars=t=>CO.test(t);dt.isRegexChar=t=>t.length===1&&dt.hasRegexChars(t);dt.escapeRegex=t=>t.replace(NO,"\\$1");dt.toPosixSlashes=t=>t.replace(IO,"/");dt.removeBackslashes=t=>t.replace(LO,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:OO===!0||yO.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 im=U((lH,nm)=>{"use strict";var Qf=qi(),{CHAR_ASTERISK:hc,CHAR_AT:PO,CHAR_BACKWARD_SLASH:Qi,CHAR_COMMA:DO,CHAR_DOT:Ec,CHAR_EXCLAMATION_MARK:_c,CHAR_FORWARD_SLASH:rm,CHAR_LEFT_CURLY_BRACE:Sc,CHAR_LEFT_PARENTHESES:Tc,CHAR_LEFT_SQUARE_BRACKET:vO,CHAR_PLUS:bO,CHAR_QUESTION_MARK:Xf,CHAR_RIGHT_CURLY_BRACE:wO,CHAR_RIGHT_PARENTHESES:Zf,CHAR_RIGHT_SQUARE_BRACKET:FO}=Ji(),em=t=>t===rm||t===Qi,tm=t=>{t.isPrefix!==!0&&(t.depth=t.isGlobstar?1/0:1)},MO=(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,h=!1,E=!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),Re=()=>(te=M,l.charCodeAt(++c));for(;c<n;){M=Re();let nt;if(M===Qi){L=ne.backslashes=!0,M=Re(),M===Sc&&(C=!0);continue}if(C===!0||M===Sc){for($++;pe()!==!0&&(M=Re());){if(M===Qi){L=ne.backslashes=!0,Re();continue}if(M===Sc){$++;continue}if(C!==!0&&M===Ec&&(M=Re())===Ec){if(d=ne.isBrace=!0,h=ne.isGlob=!0,J=!0,i===!0)continue;break}if(C!==!0&&M===DO){if(d=ne.isBrace=!0,h=ne.isGlob=!0,J=!0,i===!0)continue;break}if(M===wO&&($--,$===0)){C=!1,d=ne.isBrace=!0,J=!0;break}}if(i===!0)continue;break}if(M===rm){if(s.push(c),o.push(ne),ne={value:"",depth:0,isGlob:!1},J===!0)continue;if(te===Ec&&c===u+1){u+=2;continue}p=c+1;continue}if(r.noext!==!0&&(M===bO||M===PO||M===hc||M===Xf||M===_c)===!0&&N()===Tc){if(h=ne.isGlob=!0,E=ne.isExtglob=!0,J=!0,M===_c&&c===u&&(Q=!0),i===!0){for(;pe()!==!0&&(M=Re());){if(M===Qi){L=ne.backslashes=!0,M=Re();continue}if(M===Zf){h=ne.isGlob=!0,J=!0;break}}continue}break}if(M===hc){if(te===hc&&(I=ne.isGlobstar=!0),h=ne.isGlob=!0,J=!0,i===!0)continue;break}if(M===Xf){if(h=ne.isGlob=!0,J=!0,i===!0)continue;break}if(M===vO){for(;pe()!==!0&&(nt=Re());){if(nt===Qi){L=ne.backslashes=!0,Re();continue}if(nt===FO){f=ne.isBracket=!0,h=ne.isGlob=!0,J=!0;break}}if(i===!0)continue;break}if(r.nonegate!==!0&&M===_c&&c===u){b=ne.negated=!0,u++;continue}if(r.noparen!==!0&&M===Tc){if(h=ne.isGlob=!0,i===!0){for(;pe()!==!0&&(M=Re());){if(M===Tc){L=ne.backslashes=!0,M=Re();continue}if(M===Zf){J=!0;break}}continue}break}if(h===!0){if(J=!0,i===!0)continue;break}}r.noext===!0&&(E=!1,h=!1);let Ie=l,Tr="",D="";u>0&&(Tr=l.slice(0,u),l=l.slice(u),p-=u),Ie&&h===!0&&p>0?(Ie=l.slice(0,p),D=l.slice(p)):h===!0?(Ie="",D=l):Ie=l,Ie&&Ie!==""&&Ie!=="/"&&Ie!==l&&em(Ie.charCodeAt(Ie.length-1))&&(Ie=Ie.slice(0,-1)),r.unescape===!0&&(D&&(D=Qf.removeBackslashes(D)),Ie&&L===!0&&(Ie=Qf.removeBackslashes(Ie)));let v={prefix:Tr,input:t,start:u,base:Ie,glob:D,isBrace:d,isBracket:f,isGlob:h,isExtglob:E,isGlobstar:I,negated:b,negatedExtglob:Q};if(r.tokens===!0&&(v.maxDepth=0,em(M)||o.push(ne),v.tokens=o),r.parts===!0||r.tokens===!0){let nt;for(let me=0;me<s.length;me++){let Yt=nt?nt+1:u,Wt=s[me],mt=t.slice(Yt,Wt);r.tokens&&(me===0&&u!==0?(o[me].isPrefix=!0,o[me].value=Tr):o[me].value=mt,tm(o[me]),v.maxDepth+=o[me].depth),(me!==0||mt!=="")&&a.push(mt),nt=Wt}if(nt&&nt+1<t.length){let me=t.slice(nt+1);a.push(me),r.tokens&&(o[o.length-1].value=me,tm(o[o.length-1]),v.maxDepth+=o[o.length-1].depth)}v.slashes=s,v.parts=a}return v};nm.exports=MO});var cm=U((cH,lm)=>{"use strict";var Xi=Ji(),Qe=qi(),{MAX_LENGTH:oo,POSIX_REGEX_SOURCE:kO,REGEX_NON_SPECIAL_CHARS:GO,REGEX_SPECIAL_CHARS_BACKREF:xO,REPLACEMENTS:sm}=Xi,UO=(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},Zn=(t,e)=>`Missing ${t}: "${e}" - use "\\\\${e}" to match literal characters`,om=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},HO=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},am=t=>{let e=t.trim(),r=!0;for(;r===!0;)r=!1,/^@\([^\\()[\]{}|]+\)$/.test(e)&&(e=e.slice(2,-1),r=!0);if(HO(e))return e.replace(/\\(.)/g,"$1")},BO=t=>{let e=t.map(am).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},Ac=(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}}}}},KO=t=>{let e=0,r=[];for(;e<t.length;){let i=Ac(t.slice(e),!1);if(!i||i.type!=="*")return;let s=om(i.body).map(a=>a.trim());if(s.length!==1)return;let o=am(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("")}]`}*`},$O=t=>{let e=0,r=t.trim(),n=Ac(r);for(;n;)e++,r=n.body.trim(),n=Ac(r);return e},YO=(t,e)=>{if(e.maxExtglobRecursion===!1)return{risky:!1};let r=typeof e.maxExtglobRecursion=="number"?e.maxExtglobRecursion:Xi.DEFAULT_MAX_EXTGLOB_RECURSION,n=om(t).map(i=>i.trim());if(n.length>1&&(n.some(i=>i==="")||n.some(i=>/^[*?]+$/.test(i))||BO(n)))return{risky:!0};for(let i of n){let s=KO(i);if(s)return{risky:!0,safeOutput:s};if($O(i)>r)return{risky:!0}}return{risky:!1}},Rc=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");t=sm[t]||t;let r={...e},n=typeof r.maxLength=="number"?Math.min(oo,r.maxLength):oo,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=Xi.globChars(l),u=Xi.extglobChars(c),{DOT_LITERAL:p,PLUS_LITERAL:d,SLASH_LITERAL:f,ONE_CHAR:h,DOTS_SLASH:E,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?E: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 Re=[],Ie=[],Tr=[],D=s,v,nt=()=>N.index===i-1,me=N.peek=(x=1)=>t[N.index+x],Yt=N.advance=()=>t[++N.index]||"",Wt=()=>t.slice(N.index+1),mt=(x="",Ne=0)=>{N.consumed+=x,N.index+=Ne},Cs=x=>{N.output+=x.output!=null?x.output:x.value,mt(x.value)},IA=()=>{let x=1;for(;me()==="!"&&(me(2)!=="("||me(3)==="?");)Yt(),N.start++,x++;return x%2===0?!1:(N.negated=!0,N.start++,!0)},Ns=x=>{N[x]++,Tr.push(x)},Ar=x=>{N[x]--,Tr.pop()},le=x=>{if(D.type==="globstar"){let Ne=N.braces>0&&(x.type==="comma"||x.type==="brace"),G=x.extglob===!0||Re.length&&(x.type==="pipe"||x.type==="paren");x.type!=="slash"&&x.type!=="paren"&&!Ne&&!G&&(N.output=N.output.slice(0,-D.output.length),D.type="star",D.value="*",D.output=pe,N.output+=D.output)}if(Re.length&&x.type!=="paren"&&(Re[Re.length-1].inner+=x.value),(x.value||x.output)&&Cs(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},Ps=(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;Ns("parens"),le({type:x,value:Ne,output:N.output?"":h}),le({type:"paren",extglob:!0,value:Yt(),output:ae}),Re.push(G)},LA=x=>{let Ne=t.slice(x.startIndex,N.index+1),G=t.slice(x.startIndex+2,N.index),ae=YO(G,r);if((x.type==="plus"||x.type==="star")&&ae.risky){let ye=ae.safeOutput?(x.output?"":h)+(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:""}),Ar("parens");return}let Le=x.close+(r.capture?")":""),He;if(x.type==="negate"){let ye=pe;if(x.inner&&x.inner.length>1&&x.inner.includes("/")&&(ye=te(r)),(ye!==pe||nt()||/^\)+$/.test(Wt()))&&(Le=x.close=`)$))${ye}`),x.inner.includes("*")&&(He=Wt())&&/^\.[^\\/.]+$/.test(He)){let jt=Rc(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}),Ar("parens")};if(r.fastpaths!==!1&&!/(^[*!]|[/()[\]{}"])/.test(t)){let x=!1,Ne=t.replace(xO,(G,ae,Le,He,ye,jt)=>He==="\\"?(x=!0,G):He==="?"?ae?ae+He+(ye?b.repeat(ye.length):""):jt===0?ne+(ye?b.repeat(ye.length):""):b.repeat(Le.length):He==="."?p.repeat(Le.length):He==="*"?ae?ae+He+(ye?pe:""):pe:ae?G:`\\${G}`);return x===!0&&(r.unescape===!0?Ne=Ne.replace(/\\/g,""):Ne=Ne.replace(/\\+/g,G=>G.length%2===0?"\\\\":G?"\\":"")),Ne===t&&r.contains===!0?(N.output=t,N):(N.output=Qe.wrapOutput(Ne,N,e),N)}for(;!nt();){if(v=Yt(),v==="\0")continue;if(v==="\\"){let G=me();if(G==="/"&&r.bash!==!0||G==="."||G===";")continue;if(!G){v+="\\",le({type:"text",value:v});continue}let ae=/^\\+/.exec(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=kO[He];if(ye){D.value=Le+ye,N.backtrack=!0,Yt(),!s.output&&o.indexOf(D)===1&&(s.output=h);continue}}}(v==="["&&me()!==":"||v==="-"&&me()==="]")&&(v=`\\${v}`),v==="]"&&(D.value==="["||D.value==="[^")&&(v=`\\${v}`),r.posix===!0&&v==="!"&&D.value==="["&&(v="^"),D.value+=v,Cs({value:v});continue}if(N.quotes===1&&v!=='"'){v=Qe.escapeRegex(v),D.value+=v,Cs({value:v});continue}if(v==='"'){N.quotes=N.quotes===1?0:1,r.keepQuotes===!0&&le({type:"text",value:v});continue}if(v==="("){Ns("parens"),le({type:"paren",value:v});continue}if(v===")"){if(N.parens===0&&r.strictBrackets===!0)throw new SyntaxError(Zn("opening","("));let G=Re[Re.length-1];if(G&&N.parens===G.parens+1){LA(Re.pop());continue}le({type:"paren",value:v,output:N.parens?")":"\\)"}),Ar("parens");continue}if(v==="["){if(r.nobracket===!0||!Wt().includes("]")){if(r.nobracket!==!0&&r.strictBrackets===!0)throw new SyntaxError(Zn("closing","]"));v=`\\${v}`}else Ns("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(Zn("opening","["));le({type:"text",value:v,output:`\\${v}`});continue}Ar("brackets");let G=D.value.slice(1);if(D.posix!==!0&&G[0]==="^"&&!G.includes("/")&&(v=`/${v}`),D.value+=v,Cs({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){Ns("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=UO(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}),Ar("braces"),Ie.pop();continue}if(v==="|"){Re.length>0&&Re[Re.length-1].conditions++,le({type:"text",value:v});continue}if(v===","){let G=v,ae=Ie[Ie.length-1];ae&&Tr[Tr.length-1]==="braces"&&(ae.comma=!0,G="|"),le({type:"comma",value:v,output:G});continue}if(v==="/"){if(D.type==="dot"&&N.index===N.start+1){N.start=N.index+1,N.consumed="",N.output="",o.pop(),D=s;continue}le({type:"slash",value:v,output:f});continue}if(v==="."){if(N.braces>0&&D.type==="dot"){D.value==="."&&(D.output=p);let G=Ie[Ie.length-1];D.type="dots",D.output+=v,D.value+=v,G.dots=!0;continue}if(N.braces+N.parens===0&&D.type!=="bos"&&D.type!=="slash"){le({type:"text",value:v,output:p});continue}le({type:"dot",value:v,output:p});continue}if(v==="?"){if(!(D&&D.value==="(")&&r.noextglob!==!0&&me()==="("&&me(2)!=="?"){Ps("qmark",v);continue}if(D&&D.type==="paren"){let ae=me(),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&&me()==="("&&(me(2)!=="?"||!/[!=<:]/.test(me(3)))){Ps("negate",v);continue}if(r.nonegate!==!0&&N.index===0){IA();continue}}if(v==="+"){if(r.noextglob!==!0&&me()==="("&&me(2)!=="?"){Ps("plus",v);continue}if(D&&D.value==="("||r.regex===!1){le({type:"plus",value:v,output:d});continue}if(D&&(D.type==="bracket"||D.type==="paren"||D.type==="brace")||N.parens>0){le({type:"plus",value:v});continue}le({type:"plus",value:d});continue}if(v==="@"){if(r.noextglob!==!0&&me()==="("&&me(2)!=="?"){le({type:"at",extglob:!0,value:v,output:""});continue}le({type:"text",value:v});continue}if(v!=="*"){(v==="$"||v==="^")&&(v=`\\${v}`);let G=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=pe,N.backtrack=!0,N.globstar=!0,mt(v);continue}let x=Wt();if(r.noextglob!==!0&&/^\([^?]/.test(x)){Ps("star",v);continue}if(D.type==="star"){if(r.noglobstar===!0){mt(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=Re.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),mt("/**",3)}if(G.type==="bos"&&nt()){D.type="globstar",D.value+=v,D.output=te(r),N.output=D.output,N.globstar=!0,mt(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,mt(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,mt(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,mt(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,mt(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),me()!=="*"&&(N.output+=h,D.output+=h)),le(Ne)}for(;N.brackets>0;){if(r.strictBrackets===!0)throw new SyntaxError(Zn("closing","]"));N.output=Qe.escapeLast(N.output,"["),Ar("brackets")}for(;N.parens>0;){if(r.strictBrackets===!0)throw new SyntaxError(Zn("closing",")"));N.output=Qe.escapeLast(N.output,"("),Ar("parens")}for(;N.braces>0;){if(r.strictBrackets===!0)throw new SyntaxError(Zn("closing","}"));N.output=Qe.escapeLast(N.output,"{"),Ar("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};Rc.fastpaths=(t,e)=>{let r={...e},n=typeof r.maxLength=="number"?Math.min(oo,r.maxLength):oo,i=t.length;if(i>n)throw new SyntaxError(`Input length: ${i}, exceeds maximum allowed length: ${n}`);t=sm[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:h}=Xi.globChars(s),E=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}(?:(?!${h}${M.dot?c:o}).)*?)`,J=M=>{switch(M){case"*":return`${E}${l}${b}`;case".*":return`${o}${l}${b}`;case"*.*":return`${E}${b}${o}${l}${b}`;case"*/*":return`${E}${b}${a}${l}${I}${b}`;case"**":return E+Q(r);case"**/*":return`(?:${E}${Q(r)}${a})?${I}${l}${b}`;case"**/*.*":return`(?:${E}${Q(r)}${a})?${I}${b}${o}${l}${b}`;case"**/.*":return`(?:${E}${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};lm.exports=Rc});var dm=U((uH,um)=>{"use strict";var WO=be("path"),jO=im(),yc=cm(),Oc=qi(),VO=Ji(),zO=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 h=f(d);if(h)return h}return!1}}let n=zO(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=Oc.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:h}=Me.test(u,o,e,{glob:t,posix:s}),E={glob:t,state:a,regex:o,posix:s,input:u,output:h,match:f,isMatch:d};return typeof i.onResult=="function"&&i.onResult(E),d===!1?(E.isMatch=!1,p?E:!1):l(u)?(typeof i.onIgnore=="function"&&i.onIgnore(E),E.isMatch=!1,p?E:!1):(typeof i.onMatch=="function"&&i.onMatch(E),p?E:!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?Oc.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=Oc.isWindows(r))=>(e instanceof RegExp?e:Me.makeRe(e,r)).test(WO.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)):yc(t,{...e,fastpaths:!1});Me.scan=(t,e)=>jO(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=yc.fastpaths(t,e)),i.output||(i=yc(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=VO;um.exports=Me});var gm=U((dH,pm)=>{"use strict";pm.exports=dm()});var Sm=U((pH,_m)=>{"use strict";var mm=be("util"),hm=Wf(),Xt=gm(),Ic=qi(),fm=t=>t===""||t==="./",Em=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 h=p(f,!0);(d?!h.isMatch:h.isMatch)&&(d?n.add(h.output):(n.delete(h.output),i.add(h.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: "${mm.inspect(t)}"`);if(Array.isArray(e))return e.some(n=>Ce.contains(t,n,r));if(typeof e=="string"){if(fm(t)||fm(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(!Ic.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: "${mm.inspect(t)}"`);return[].concat(e).every(n=>Xt(n,r)(t))};Ce.capture=(t,e,r)=>{let n=Ic.isWindows(r),s=Xt.makeRe(String(t),{...r,capture:!0}).exec(n?Ic.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 hm(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||!Em(t)?[t]:hm(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=Em;_m.exports=Ce});var Pm=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 Tm=be("path"),JO=cf(),Lc=Sm(),Am="**",qO="\\",QO=/[*?]|^!/,XO=/\[[^[]*]/,ZO=/(?:^|[^!*+?@])\([^(]*\|[^|]*\)/,eI=/[!*+?@]\([^(]*\)/,tI=/,|\.\./,rI=/(?!^)\/{2,}/g;function Rm(t,e={}){return!ym(t,e)}Z.isStaticPattern=Rm;function ym(t,e={}){return t===""?!1:!!(e.caseSensitiveMatch===!1||t.includes(qO)||QO.test(t)||XO.test(t)||ZO.test(t)||e.extglob!==!1&&eI.test(t)||e.braceExpansion!==!1&&nI(t))}Z.isDynamicPattern=ym;function nI(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 tI.test(n)}function iI(t){return ao(t)?t.slice(1):t}Z.convertToPositivePattern=iI;function sI(t){return"!"+t}Z.convertToNegativePattern=sI;function ao(t){return t.startsWith("!")&&t[1]!=="("}Z.isNegativePattern=ao;function Om(t){return!ao(t)}Z.isPositivePattern=Om;function oI(t){return t.filter(ao)}Z.getNegativePatterns=oI;function aI(t){return t.filter(Om)}Z.getPositivePatterns=aI;function lI(t){return t.filter(e=>!Cc(e))}Z.getPatternsInsideCurrentDirectory=lI;function cI(t){return t.filter(Cc)}Z.getPatternsOutsideCurrentDirectory=cI;function Cc(t){return t.startsWith("..")||t.startsWith("./..")}Z.isPatternRelatedToParentDirectory=Cc;function uI(t){return JO(t,{flipBackslashes:!1})}Z.getBaseDirectory=uI;function dI(t){return t.includes(Am)}Z.hasGlobStar=dI;function Im(t){return t.endsWith("/"+Am)}Z.endsWithSlashGlobStar=Im;function pI(t){let e=Tm.basename(t);return Im(t)||Rm(e)}Z.isAffectDepthOfReadingPattern=pI;function gI(t){return t.reduce((e,r)=>e.concat(Lm(r)),[])}Z.expandPatternsWithBraceExpansion=gI;function Lm(t){let e=Lc.braces(t,{expand:!0,nodupes:!0,keepEscaping:!0});return e.sort((r,n)=>r.length-n.length),e.filter(r=>r!=="")}Z.expandBraceExpansion=Lm;function fI(t,e){let{parts:r}=Lc.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=fI;function Cm(t,e){return Lc.makeRe(t,e)}Z.makeRe=Cm;function mI(t,e){return t.map(r=>Cm(r,e))}Z.convertPatternsToRe=mI;function hI(t,e){return e.some(r=>r.test(t))}Z.matchAny=hI;function EI(t){return t.replace(rI,"/")}Z.removeDuplicateSlashes=EI;function _I(t){let e=[],r=[];for(let n of t)Nm(n)?e.push(n):r.push(n);return[e,r]}Z.partitionAbsoluteAndRelative=_I;function Nm(t){return Tm.isAbsolute(t)}Z.isAbsolute=Nm});var wm=U((fH,bm)=>{"use strict";var SI=be("stream"),Dm=SI.PassThrough,TI=Array.prototype.slice;bm.exports=AI;function AI(){let t=[],e=TI.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=Dm(n);function a(){for(let u=0,p=arguments.length;u<p;u++)t.push(vm(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(h){function E(){h.removeListener("merge2UnpipeEnd",E),h.removeListener("end",E),s&&h.removeListener("error",I),d()}function I(C){o.emit("error",C)}if(h._readableState.endEmitted)return d();h.on("merge2UnpipeEnd",E),h.on("end",E),s&&h.on("error",I),h.pipe(o,{end:!1}),h.resume()}for(let h=0;h<u.length;h++)f(u[h]);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 vm(t,e){if(Array.isArray(t))for(let r=0,n=t.length;r<n;r++)t[r]=vm(t[r],e);else{if(!t._readableState&&t.pipe&&(t=t.pipe(Dm(e))),!t._readableState||!t.pause||!t.pipe)throw new Error("Only readable stream can be merged.");t.pause()}return t}});var Mm=U(lo=>{"use strict";Object.defineProperty(lo,"__esModule",{value:!0});lo.merge=void 0;var RI=wm();function yI(t){let e=RI(t);return t.forEach(r=>{r.once("error",n=>e.emit("error",n))}),e.once("close",()=>Fm(t)),e.once("end",()=>Fm(t)),e}lo.merge=yI;function Fm(t){t.forEach(e=>e.emit("close"))}});var km=U(ei=>{"use strict";Object.defineProperty(ei,"__esModule",{value:!0});ei.isEmpty=ei.isString=void 0;function OI(t){return typeof t=="string"}ei.isString=OI;function II(t){return t===""}ei.isEmpty=II});var gr=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 LI=Jg();Xe.array=LI;var CI=qg();Xe.errno=CI;var NI=Qg();Xe.fs=NI;var PI=tf();Xe.path=PI;var DI=Pm();Xe.pattern=DI;var vI=Mm();Xe.stream=vI;var bI=km();Xe.string=bI});var Hm=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=gr();function wI(t,e){let r=Gm(t,e),n=Gm(e.ignore,e),i=xm(r),s=Um(r,n),o=i.filter(u=>Gt.pattern.isStaticPattern(u,e)),a=i.filter(u=>Gt.pattern.isDynamicPattern(u,e)),l=Nc(o,s,!1),c=Nc(a,s,!0);return l.concat(c)}Ze.generate=wI;function Gm(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 Nc(t,e,r){let n=[],i=Gt.pattern.getPatternsOutsideCurrentDirectory(t),s=Gt.pattern.getPatternsInsideCurrentDirectory(t),o=Pc(i),a=Pc(s);return n.push(...Dc(o,e,r)),"."in a?n.push(vc(".",s,e,r)):n.push(...Dc(a,e,r)),n}Ze.convertPatternsToTasks=Nc;function xm(t){return Gt.pattern.getPositivePatterns(t)}Ze.getPositivePatterns=xm;function Um(t,e){return Gt.pattern.getNegativePatterns(t).concat(e).map(Gt.pattern.convertToPositivePattern)}Ze.getNegativePatternsAsPositive=Um;function Pc(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=Pc;function Dc(t,e,r){return Object.keys(t).map(n=>vc(n,t[n],e,r))}Ze.convertPatternGroupsToTasks=Dc;function vc(t,e,r,n){return{dynamic:n,positive:e,negative:r,base:t,patterns:[].concat(e,r.map(Gt.pattern.convertToNegativePattern))}}Ze.convertPatternGroupToTask=vc});var Km=U(co=>{"use strict";Object.defineProperty(co,"__esModule",{value:!0});co.read=void 0;function FI(t,e,r){e.fs.lstat(t,(n,i)=>{if(n!==null){Bm(r,n);return}if(!i.isSymbolicLink()||!e.followSymbolicLink){bc(r,i);return}e.fs.stat(t,(s,o)=>{if(s!==null){if(e.throwErrorOnBrokenSymbolicLink){Bm(r,s);return}bc(r,i);return}e.markSymbolicLink&&(o.isSymbolicLink=()=>!0),bc(r,o)})})}co.read=FI;function Bm(t,e){t(e)}function bc(t,e){t(null,e)}});var $m=U(uo=>{"use strict";Object.defineProperty(uo,"__esModule",{value:!0});uo.read=void 0;function MI(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}}uo.read=MI});var Ym=U(Mr=>{"use strict";Object.defineProperty(Mr,"__esModule",{value:!0});Mr.createFileSystemAdapter=Mr.FILE_SYSTEM_ADAPTER=void 0;var po=be("fs");Mr.FILE_SYSTEM_ADAPTER={lstat:po.lstat,stat:po.stat,lstatSync:po.lstatSync,statSync:po.statSync};function kI(t){return t===void 0?Mr.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},Mr.FILE_SYSTEM_ADAPTER),t)}Mr.createFileSystemAdapter=kI});var Wm=U(Fc=>{"use strict";Object.defineProperty(Fc,"__esModule",{value:!0});var GI=Ym(),wc=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}};Fc.default=wc});var En=U(kr=>{"use strict";Object.defineProperty(kr,"__esModule",{value:!0});kr.statSync=kr.stat=kr.Settings=void 0;var jm=Km(),xI=$m(),Mc=Wm();kr.Settings=Mc.default;function UI(t,e,r){if(typeof e=="function"){jm.read(t,kc(),e);return}jm.read(t,kc(e),r)}kr.stat=UI;function HI(t,e){let r=kc(e);return xI.read(t,r)}kr.statSync=HI;function kc(t={}){return t instanceof Mc.default?t:new Mc.default(t)}});var Jm=U((OH,zm)=>{"use strict";var Vm;zm.exports=typeof queueMicrotask=="function"?queueMicrotask.bind(typeof window<"u"?window:global):t=>(Vm||(Vm=Promise.resolve())).then(t).catch(e=>setTimeout(()=>{throw e},0))});var Qm=U((IH,qm)=>{"use strict";qm.exports=KI;var BI=Jm();function KI(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?BI(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 Gc=U(fo=>{"use strict";Object.defineProperty(fo,"__esModule",{value:!0});fo.IS_SUPPORT_READDIR_WITH_FILE_TYPES=void 0;var go=process.versions.node.split(".");if(go[0]===void 0||go[1]===void 0)throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);var Xm=Number.parseInt(go[0],10),$I=Number.parseInt(go[1],10),Zm=10,YI=10,WI=Xm>Zm,jI=Xm===Zm&&$I>=YI;fo.IS_SUPPORT_READDIR_WITH_FILE_TYPES=WI||jI});var eh=U(mo=>{"use strict";Object.defineProperty(mo,"__esModule",{value:!0});mo.createDirentFromStats=void 0;var xc=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 VI(t,e){return new xc(t,e)}mo.createDirentFromStats=VI});var Uc=U(ho=>{"use strict";Object.defineProperty(ho,"__esModule",{value:!0});ho.fs=void 0;var zI=eh();ho.fs=zI});var Hc=U(Eo=>{"use strict";Object.defineProperty(Eo,"__esModule",{value:!0});Eo.joinPathSegments=void 0;function JI(t,e,r){return t.endsWith(r)?t+e:t+r+e}Eo.joinPathSegments=JI});var oh=U(Gr=>{"use strict";Object.defineProperty(Gr,"__esModule",{value:!0});Gr.readdir=Gr.readdirWithFileTypes=Gr.read=void 0;var qI=En(),th=Qm(),QI=Gc(),rh=Uc(),nh=Hc();function XI(t,e,r){if(!e.stats&&QI.IS_SUPPORT_READDIR_WITH_FILE_TYPES){ih(t,e,r);return}sh(t,e,r)}Gr.read=XI;function ih(t,e,r){e.fs.readdir(t,{withFileTypes:!0},(n,i)=>{if(n!==null){_o(r,n);return}let s=i.map(a=>({dirent:a,name:a.name,path:nh.joinPathSegments(t,a.name,e.pathSegmentSeparator)}));if(!e.followSymbolicLinks){Bc(r,s);return}let o=s.map(a=>ZI(a,e));th(o,(a,l)=>{if(a!==null){_o(r,a);return}Bc(r,l)})})}Gr.readdirWithFileTypes=ih;function ZI(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=rh.fs.createDirentFromStats(t.name,i),r(null,t)})}}function sh(t,e,r){e.fs.readdir(t,(n,i)=>{if(n!==null){_o(r,n);return}let s=i.map(o=>{let a=nh.joinPathSegments(t,o,e.pathSegmentSeparator);return l=>{qI.stat(a,e.fsStatSettings,(c,u)=>{if(c!==null){l(c);return}let p={name:o,path:a,dirent:rh.fs.createDirentFromStats(o,u)};e.stats&&(p.stats=u),l(null,p)})}});th(s,(o,a)=>{if(o!==null){_o(r,o);return}Bc(r,a)})})}Gr.readdir=sh;function _o(t,e){t(e)}function Bc(t,e){t(null,e)}});var dh=U(xr=>{"use strict";Object.defineProperty(xr,"__esModule",{value:!0});xr.readdir=xr.readdirWithFileTypes=xr.read=void 0;var eL=En(),tL=Gc(),ah=Uc(),lh=Hc();function rL(t,e){return!e.stats&&tL.IS_SUPPORT_READDIR_WITH_FILE_TYPES?ch(t,e):uh(t,e)}xr.read=rL;function ch(t,e){return e.fs.readdirSync(t,{withFileTypes:!0}).map(n=>{let i={dirent:n,name:n.name,path:lh.joinPathSegments(t,n.name,e.pathSegmentSeparator)};if(i.dirent.isSymbolicLink()&&e.followSymbolicLinks)try{let s=e.fs.statSync(i.path);i.dirent=ah.fs.createDirentFromStats(i.name,s)}catch(s){if(e.throwErrorOnBrokenSymbolicLink)throw s}return i})}xr.readdirWithFileTypes=ch;function uh(t,e){return e.fs.readdirSync(t).map(n=>{let i=lh.joinPathSegments(t,n,e.pathSegmentSeparator),s=eL.statSync(i,e.fsStatSettings),o={name:n,path:i,dirent:ah.fs.createDirentFromStats(n,s)};return e.stats&&(o.stats=s),o})}xr.readdir=uh});var ph=U(Ur=>{"use strict";Object.defineProperty(Ur,"__esModule",{value:!0});Ur.createFileSystemAdapter=Ur.FILE_SYSTEM_ADAPTER=void 0;var ti=be("fs");Ur.FILE_SYSTEM_ADAPTER={lstat:ti.lstat,stat:ti.stat,lstatSync:ti.lstatSync,statSync:ti.statSync,readdir:ti.readdir,readdirSync:ti.readdirSync};function nL(t){return t===void 0?Ur.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},Ur.FILE_SYSTEM_ADAPTER),t)}Ur.createFileSystemAdapter=nL});var gh=U($c=>{"use strict";Object.defineProperty($c,"__esModule",{value:!0});var iL=be("path"),sL=En(),oL=ph(),Kc=class{constructor(e={}){this._options=e,this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!1),this.fs=oL.createFileSystemAdapter(this._options.fs),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,iL.sep),this.stats=this._getValue(this._options.stats,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0),this.fsStatSettings=new sL.Settings({followSymbolicLink:this.followSymbolicLinks,fs:this.fs,throwErrorOnBrokenSymbolicLink:this.throwErrorOnBrokenSymbolicLink})}_getValue(e,r){return e??r}};$c.default=Kc});var So=U(Hr=>{"use strict";Object.defineProperty(Hr,"__esModule",{value:!0});Hr.Settings=Hr.scandirSync=Hr.scandir=void 0;var fh=oh(),aL=dh(),Yc=gh();Hr.Settings=Yc.default;function lL(t,e,r){if(typeof e=="function"){fh.read(t,Wc(),e);return}fh.read(t,Wc(e),r)}Hr.scandir=lL;function cL(t,e){let r=Wc(e);return aL.read(t,r)}Hr.scandirSync=cL;function Wc(t={}){return t instanceof Yc.default?t:new Yc.default(t)}});var hh=U((MH,mh)=>{"use strict";function uL(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}}mh.exports=uL});var _h=U((kH,jc)=>{"use strict";var dL=hh();function Eh(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=dL(pL),i=null,s=null,o=0,a=null,l={push:E,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:h,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 h(){return o===0&&l.length()===0}function E($,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 pL(){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 gL(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=Eh(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(h,E){if(h){f(h);return}d(E)})});return p.catch(pt),p}function l(u){var p=new Promise(function(d,f){o(u,function(h,E){if(h){f(h);return}d(E)})});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}}jc.exports=Eh;jc.exports.promise=gL});var To=U(Zt=>{"use strict";Object.defineProperty(Zt,"__esModule",{value:!0});Zt.joinPathSegments=Zt.replacePathSegmentSeparator=Zt.isAppliedFilter=Zt.isFatalError=void 0;function fL(t,e){return t.errorFilter===null?!0:!t.errorFilter(e)}Zt.isFatalError=fL;function mL(t,e){return t===null||t(e)}Zt.isAppliedFilter=mL;function hL(t,e){return t.split(/[/\\]/).join(e)}Zt.replacePathSegmentSeparator=hL;function EL(t,e,r){return t===""?e:t.endsWith(r)?t+e:t+r+e}Zt.joinPathSegments=EL});var Jc=U(zc=>{"use strict";Object.defineProperty(zc,"__esModule",{value:!0});var _L=To(),Vc=class{constructor(e,r){this._root=e,this._settings=r,this._root=_L.replacePathSegmentSeparator(e,r.pathSegmentSeparator)}};zc.default=Vc});var Xc=U(Qc=>{"use strict";Object.defineProperty(Qc,"__esModule",{value:!0});var SL=be("events"),TL=So(),AL=_h(),Ao=To(),RL=Jc(),qc=class extends RL.default{constructor(e,r){super(e,r),this._settings=r,this._scandir=TL.scandir,this._emitter=new SL.EventEmitter,this._queue=AL(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||!Ao.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=Ao.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),Ao.isAppliedFilter(this._settings.entryFilter,e)&&this._emitEntry(e),e.dirent.isDirectory()&&Ao.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(n,r===void 0?void 0:e.path)}_emitEntry(e){this._emitter.emit("entry",e)}};Qc.default=qc});var Sh=U(eu=>{"use strict";Object.defineProperty(eu,"__esModule",{value:!0});var yL=Xc(),Zc=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new yL.default(this._root,this._settings),this._storage=[]}read(e){this._reader.onError(r=>{OL(e,r)}),this._reader.onEntry(r=>{this._storage.push(r)}),this._reader.onEnd(()=>{IL(e,this._storage)}),this._reader.read()}};eu.default=Zc;function OL(t,e){t(e)}function IL(t,e){t(null,e)}});var Th=U(ru=>{"use strict";Object.defineProperty(ru,"__esModule",{value:!0});var LL=be("stream"),CL=Xc(),tu=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new CL.default(this._root,this._settings),this._stream=new LL.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}};ru.default=tu});var Ah=U(iu=>{"use strict";Object.defineProperty(iu,"__esModule",{value:!0});var NL=So(),Ro=To(),PL=Jc(),nu=class extends PL.default{constructor(){super(...arguments),this._scandir=NL.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(Ro.isFatalError(this._settings,e))throw e}_handleEntry(e,r){let n=e.path;r!==void 0&&(e.path=Ro.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),Ro.isAppliedFilter(this._settings.entryFilter,e)&&this._pushToStorage(e),e.dirent.isDirectory()&&Ro.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(n,r===void 0?void 0:e.path)}_pushToStorage(e){this._storage.push(e)}};iu.default=nu});var Rh=U(ou=>{"use strict";Object.defineProperty(ou,"__esModule",{value:!0});var DL=Ah(),su=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new DL.default(this._root,this._settings)}read(){return this._reader.read()}};ou.default=su});var yh=U(lu=>{"use strict";Object.defineProperty(lu,"__esModule",{value:!0});var vL=be("path"),bL=So(),au=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,vL.sep),this.fsScandirSettings=new bL.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}};lu.default=au});var Oo=U(er=>{"use strict";Object.defineProperty(er,"__esModule",{value:!0});er.Settings=er.walkStream=er.walkSync=er.walk=void 0;var Oh=Sh(),wL=Th(),FL=Rh(),cu=yh();er.Settings=cu.default;function ML(t,e,r){if(typeof e=="function"){new Oh.default(t,yo()).read(e);return}new Oh.default(t,yo(e)).read(r)}er.walk=ML;function kL(t,e){let r=yo(e);return new FL.default(t,r).read()}er.walkSync=kL;function GL(t,e){let r=yo(e);return new wL.default(t,r).read()}er.walkStream=GL;function yo(t={}){return t instanceof cu.default?t:new cu.default(t)}});var Io=U(du=>{"use strict";Object.defineProperty(du,"__esModule",{value:!0});var xL=be("path"),UL=En(),Ih=gr(),uu=class{constructor(e){this._settings=e,this._fsStatSettings=new UL.Settings({followSymbolicLink:this._settings.followSymbolicLinks,fs:this._settings.fs,throwErrorOnBrokenSymbolicLink:this._settings.followSymbolicLinks})}_getFullEntryPath(e){return xL.resolve(this._settings.cwd,e)}_makeEntry(e,r){let n={name:r,path:r,dirent:Ih.fs.createDirentFromStats(r,e)};return this._settings.stats&&(n.stats=e),n}_isFatalError(e){return!Ih.errno.isEnoentCodeError(e)&&!this._settings.suppressErrors}};du.default=uu});var fu=U(gu=>{"use strict";Object.defineProperty(gu,"__esModule",{value:!0});var HL=be("stream"),BL=En(),KL=Oo(),$L=Io(),pu=class extends $L.default{constructor(){super(...arguments),this._walkStream=KL.walkStream,this._stat=BL.stat}dynamic(e,r){return this._walkStream(e,r)}static(e,r){let n=e.map(this._getFullEntryPath,this),i=new HL.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))})}};gu.default=pu});var Lh=U(hu=>{"use strict";Object.defineProperty(hu,"__esModule",{value:!0});var YL=Oo(),WL=Io(),jL=fu(),mu=class extends WL.default{constructor(){super(...arguments),this._walkAsync=YL.walk,this._readerStream=new jL.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))})}};hu.default=mu});var Ch=U(_u=>{"use strict";Object.defineProperty(_u,"__esModule",{value:!0});var Zi=gr(),Eu=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 Zi.pattern.getPatternParts(e,this._micromatchOptions).map(n=>Zi.pattern.isDynamicPattern(n,this._settings)?{dynamic:!0,pattern:n,patternRe:Zi.pattern.makeRe(n,this._micromatchOptions)}:{dynamic:!1,pattern:n})}_splitSegmentsIntoSections(e){return Zi.array.splitWhen(e,r=>r.dynamic&&Zi.pattern.hasGlobStar(r.pattern))}};_u.default=Eu});var Nh=U(Tu=>{"use strict";Object.defineProperty(Tu,"__esModule",{value:!0});var VL=Ch(),Su=class extends VL.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}};Tu.default=Su});var Ph=U(Ru=>{"use strict";Object.defineProperty(Ru,"__esModule",{value:!0});var Lo=gr(),zL=Nh(),Au=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 zL.default(e,this._settings,this._micromatchOptions)}_getNegativePatternsRe(e){let r=e.filter(Lo.pattern.isAffectDepthOfReadingPattern);return Lo.pattern.convertPatternsToRe(r,this._micromatchOptions)}_filter(e,r,n,i){if(this._isSkippedByDeep(e,r.path)||this._isSkippedSymbolicLink(r))return!1;let s=Lo.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!Lo.pattern.matchAny(e,r)}};Ru.default=Au});var Dh=U(Ou=>{"use strict";Object.defineProperty(Ou,"__esModule",{value:!0});var Br=gr(),yu=class{constructor(e,r){this._settings=e,this._micromatchOptions=r,this.index=new Map}getFilter(e,r){let[n,i]=Br.pattern.partitionAbsoluteAndRelative(r),s={positive:{all:Br.pattern.convertPatternsToRe(e,this._micromatchOptions)},negative:{absolute:Br.pattern.convertPatternsToRe(n,Object.assign(Object.assign({},this._micromatchOptions),{dot:!0})),relative:Br.pattern.convertPatternsToRe(i,Object.assign(Object.assign({},this._micromatchOptions),{dot:!0}))}};return o=>this._filter(o,s)}_filter(e,r){let n=Br.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=Br.path.makeAbsolute(this._settings.cwd,e);return this._isMatchToPatterns(i,r,n)}_isMatchToPatterns(e,r,n){if(r.length===0)return!1;let i=Br.pattern.matchAny(e,r);return!i&&n?Br.pattern.matchAny(e+"/",r):i}};Ou.default=yu});var vh=U(Lu=>{"use strict";Object.defineProperty(Lu,"__esModule",{value:!0});var JL=gr(),Iu=class{constructor(e){this._settings=e}getFilter(){return e=>this._isNonFatalError(e)}_isNonFatalError(e){return JL.errno.isEnoentCodeError(e)||this._settings.suppressErrors}};Lu.default=Iu});var wh=U(Nu=>{"use strict";Object.defineProperty(Nu,"__esModule",{value:!0});var bh=gr(),Cu=class{constructor(e){this._settings=e}getTransformer(){return e=>this._transform(e)}_transform(e){let r=e.path;return this._settings.absolute&&(r=bh.path.makeAbsolute(this._settings.cwd,r),r=bh.path.unixify(r)),this._settings.markDirectories&&e.dirent.isDirectory()&&(r+="/"),this._settings.objectMode?Object.assign(Object.assign({},e),{path:r}):r}};Nu.default=Cu});var Co=U(Du=>{"use strict";Object.defineProperty(Du,"__esModule",{value:!0});var qL=be("path"),QL=Ph(),XL=Dh(),ZL=vh(),eC=wh(),Pu=class{constructor(e){this._settings=e,this.errorFilter=new ZL.default(this._settings),this.entryFilter=new XL.default(this._settings,this._getMicromatchOptions()),this.deepFilter=new QL.default(this._settings,this._getMicromatchOptions()),this.entryTransformer=new eC.default(this._settings)}_getRootDirectory(e){return qL.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}}};Du.default=Pu});var Fh=U(bu=>{"use strict";Object.defineProperty(bu,"__esModule",{value:!0});var tC=Lh(),rC=Co(),vu=class extends rC.default{constructor(){super(...arguments),this._reader=new tC.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)}};bu.default=vu});var Mh=U(Fu=>{"use strict";Object.defineProperty(Fu,"__esModule",{value:!0});var nC=be("stream"),iC=fu(),sC=Co(),wu=class extends sC.default{constructor(){super(...arguments),this._reader=new iC.default(this._settings)}read(e){let r=this._getRootDirectory(e),n=this._getReaderOptions(e),i=this.api(r,e,n),s=new nC.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)}};Fu.default=wu});var kh=U(ku=>{"use strict";Object.defineProperty(ku,"__esModule",{value:!0});var oC=En(),aC=Oo(),lC=Io(),Mu=class extends lC.default{constructor(){super(...arguments),this._walkSync=aC.walkSync,this._statSync=oC.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)}};ku.default=Mu});var Gh=U(xu=>{"use strict";Object.defineProperty(xu,"__esModule",{value:!0});var cC=kh(),uC=Co(),Gu=class extends uC.default{constructor(){super(...arguments),this._reader=new cC.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)}};xu.default=Gu});var xh=U(ni=>{"use strict";Object.defineProperty(ni,"__esModule",{value:!0});ni.DEFAULT_FILE_SYSTEM_ADAPTER=void 0;var ri=be("fs"),dC=be("os"),pC=Math.max(dC.cpus().length,1);ni.DEFAULT_FILE_SYSTEM_ADAPTER={lstat:ri.lstat,lstatSync:ri.lstatSync,stat:ri.stat,statSync:ri.statSync,readdir:ri.readdir,readdirSync:ri.readdirSync};var Uu=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,pC),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({},ni.DEFAULT_FILE_SYSTEM_ADAPTER),e)}};ni.default=Uu});var $u=U((aB,Hh)=>{"use strict";var Uh=Hm(),gC=Fh(),fC=Mh(),mC=Gh(),Hu=xh(),Ct=gr();async function Bu(t,e){xt(t);let r=Ku(t,gC.default,e),n=await Promise.all(r);return Ct.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=Ku(c,mC.default,u);return Ct.array.flatten(p)}t.sync=e;function r(c,u){xt(c);let p=Ku(c,fC.default,u);return Ct.stream.merge(p)}t.stream=r;function n(c,u){xt(c);let p=[].concat(c),d=new Hu.default(u);return Uh.generate(p,d)}t.generateTasks=n;function i(c,u){xt(c);let p=new Hu.default(u);return Ct.pattern.isDynamicPattern(c,p)}t.isDynamicPattern=i;function s(c){return xt(c),Ct.path.escape(c)}t.escapePath=s;function o(c){return xt(c),Ct.path.convertPathToPattern(c)}t.convertPathToPattern=o;let a;(function(c){function u(d){return xt(d),Ct.path.escapePosixPath(d)}c.escapePath=u;function p(d){return xt(d),Ct.path.convertPosixPathToPattern(d)}c.convertPathToPattern=p})(a=t.posix||(t.posix={}));let l;(function(c){function u(d){return xt(d),Ct.path.escapeWindowsPath(d)}c.escapePath=u;function p(d){return xt(d),Ct.path.convertWindowsPathToPattern(d)}c.convertPathToPattern=p})(l=t.win32||(t.win32={}))})(Bu||(Bu={}));function Ku(t,e,r){let n=[].concat(t),i=new Hu.default(r),s=Uh.generate(n,i),o=new e(i);return s.map(o.read,o)}function xt(t){if(![].concat(t).every(n=>Ct.string.isString(n)&&!Ct.string.isEmpty(n)))throw new TypeError("Patterns must be a string (non empty) or an array of strings")}Hh.exports=Bu});var Jh=U((lB,Do)=>{"use strict";function $h(t){return Array.isArray(t)?t:[t]}var hC=void 0,Wu="",Bh=" ",Yu="\\",EC=/^\s+$/,_C=/(?:[^\\]|^)\\$/,SC=/^\\!/,TC=/^\\#/,AC=/\r?\n/g,RC=/^\.{0,2}\/|^\.{1,2}$/,yC=/\/$/,ii="/",Yh="node-ignore";typeof Symbol<"u"&&(Yh=Symbol.for("node-ignore"));var Wh=Yh,si=(t,e,r)=>(Object.defineProperty(t,e,{value:r}),r),OC=/([0-z])-([0-z])/g,jh=()=>!1,IC=t=>t.replace(OC,(e,r,n)=>r.charCodeAt(0)<=n.charCodeAt(0)?e:Wu),LC=t=>t.startsWith("!")||t.startsWith("\\^")?`^${t.slice(t[0]==="!"?1:2)}`:t,CC=t=>{let{length:e}=t;return t.slice(0,e-e%2)},NC=[[/^\uFEFF/,()=>Wu],[/((?:\\\\)*?)(\\?\s+)$/,(t,e,r)=>e+(r.indexOf("\\")===0?Bh:Wu)],[/(\\+?)\s/g,(t,e)=>{let{length:r}=e;return e.slice(0,r-r%2)+Bh}],[/[\\$.|*+(){^]/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,()=>Yu],[/\\\\/g,()=>Yu],[/(\\)?\[([^\]/]*?)(\\*)($|\])/g,(t,e,r,n,i)=>e===Yu?`\\[${r}${CC(n)}${i}`:i==="]"&&n.length%2===0?`[${LC(IC(r))}${n}]`:"[]"],[/(?:[^*])$/,t=>/\/$/.test(t)?`${t}$`:`${t}(?=$|\\/$)`]],PC=/(^|\\\/)?\\\*$/,es="regex",No="checkRegex",Kh="_",DC={[es](t,e){return`${e?`${e}[^/]+`:"[^/]*"}(?=$|\\/$)`},[No](t,e){return`${e?`${e}[^/]*`:"[^/]*"}(?=$|\\/$)`}},vC=t=>NC.reduce((e,[r,n])=>e.replace(r,n.bind(t)),t),Po=t=>typeof t=="string",bC=t=>t&&Po(t)&&!EC.test(t)&&!_C.test(t)&&t.indexOf("#")!==0,wC=t=>t.split(AC).filter(Boolean),ju=class{constructor(e,r,n,i,s,o){this.pattern=e,this.mark=r,this.negative=s,si(this,"body",n),si(this,"ignoreCase",i),si(this,"regexPrefix",o)}get regex(){let e=Kh+es;return this[e]?this[e]:this._make(es,e)}get checkRegex(){let e=Kh+No;return this[e]?this[e]:this._make(No,e)}_make(e,r){let n=this.regexPrefix.replace(PC,DC[e]),i=this.ignoreCase?new RegExp(n,"i"):new RegExp(n);return si(this,r,i)}},FC=({pattern:t,mark:e},r)=>{let n=!1,i=t;i.indexOf("!")===0&&(n=!0,i=i.substr(1)),i=i.replace(SC,"!").replace(TC,"#");let s=vC(i);return new ju(t,e,i,r,n,s)},Vu=class{constructor(e){this._ignoreCase=e,this._rules=[]}_add(e){if(e&&e[Wh]){this._rules=this._rules.concat(e._rules._rules),this._added=!0;return}if(Po(e)&&(e={pattern:e}),bC(e.pattern)){let r=FC(e,this._ignoreCase);this._added=!0,this._rules.push(r)}}add(e){return this._added=!1,$h(Po(e)?wC(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?hC:l)});let a={ignored:i,unignored:s};return o&&(a.rule=o),a}},MC=(t,e)=>{throw new e(t)},fr=(t,e,r)=>Po(t)?t?fr.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),Vh=t=>RC.test(t);fr.isNotRelative=Vh;fr.convert=t=>t;var zu=class{constructor({ignorecase:e=!0,ignoreCase:r=e,allowRelativePaths:n=!1}={}){si(this,Wh,!0),this._rules=new Vu(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&&fr.convert(e);return fr(s,e,this._strictPathCheck?MC:jh),this._t(s,r,n,i)}checkIgnore(e){if(!yC.test(e))return this.test(e);let r=e.split(ii).filter(Boolean);if(r.pop(),r.length){let n=this._t(r.join(ii)+ii,this._testCache,!0,r);if(n.ignored)return n}return this._rules.test(e,!1,No)}_t(e,r,n,i){if(e in r)return r[e];if(i||(i=e.split(ii).filter(Boolean)),i.pop(),!i.length)return r[e]=this._rules.test(e,n,es);let s=this._t(i.join(ii)+ii,r,n,i);return r[e]=s.ignored?s:this._rules.test(e,n,es)}ignores(e){return this._test(e,this._ignoreCache,!1).ignored}createFilter(){return e=>!this.ignores(e)}filter(e){return $h(e).filter(this.createFilter())}test(e){return this._test(e,this._testCache,!0)}},Ju=t=>new zu(t),kC=t=>fr(t&&fr.convert(t),t,jh),zh=()=>{let t=r=>/^\\\\\?\\/.test(r)||/["<>|\u0000-\u001F]+/u.test(r)?r:r.replace(/\\/g,"/");fr.convert=t;let e=/^[a-z]:\//i;fr.isNotRelative=r=>e.test(r)||Vh(r)};typeof process<"u"&&process.platform==="win32"&&zh();Do.exports=Ju;Ju.default=Ju;Do.exports.isPathValid=kC;si(Do.exports,Symbol.for("setupWindows"),zh)});import*as RA from"dotenv";import $t from"process";import{execFile as KA}from"child_process";import{promisify as $A}from"util";import ur from"fs/promises";import lt from"path";import{spawn as CA}from"child_process";import ag from"fs/promises";import pn from"path";import NA from"os";var Jl=class{value;next;constructor(e){this.value=e}},Gi=class{#t;#s;#c;constructor(){this.clear()}enqueue(e){let r=new Jl(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 cn(t){let e=!1;if(typeof t=="object"&&({concurrency:t,rejectOnClear:e=!1}=t),og(t),typeof e!="boolean")throw new TypeError("Expected `rejectOnClear` to be a boolean");let r=new Gi,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(h=>{f.run=h,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){og(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 og(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 br={NAME:"Docuvia",EMAIL:"docuvia@localhost"};var un="refs/heads/",ql="HEAD";var PA="fast-import",DA="--quiet",Ql={PIPE:"pipe",IGNORE:"ignore"},Hs={DATA:"data",ERROR:"error",CLOSE:"close"},dn={COMMIT:"commit",COMMITTER:"committer",DATA:"data",FROM:"from",DELETE_ALL:"deleteall",MODIFY:"M"},vA="100644",bA="inline",wA="+0000",FA="stdin write failed: ",MA=(t,e,r)=>{let n=[e,r?`${FA}${r.message}`:""].filter(Boolean).join("; ");return`git fast-import exited with code ${t}${n?": "+n:""}`},kA=300*1e3,lg="SIGTERM",GA=t=>`git fast-import timed out after ${t}ms and was terminated`,xA=NA.cpus().length*4;async function cg(t,e){let r=pn.resolve(t),n=e?pn.resolve(e):r;if(!r.startsWith(n+pn.sep)&&r!==n)throw new _(R.FS_PATH_TRAVERSAL,`sourceDir "${t}" escapes allowed root "${n}"`);let i=new Map,s=cn(xA),o=async a=>{let l=await ag.readdir(a,{withFileTypes:!0});await Promise.all(l.map(async c=>{let u=pn.join(a,c.name);if(c.isDirectory())await o(u);else if(c.isFile()){let p=pn.relative(t,u),d=await s(()=>ag.readFile(u,H));i.set(p,d)}}))};return await o(t),i}function ug(t,e,r,n,i){let s=[];s.push(`${dn.COMMIT} ${un}${t}`),s.push(`${dn.COMMITTER} ${br.NAME} <${br.EMAIL}> ${r} ${wA}`),s.push(`${dn.DATA} ${Buffer.byteLength(n,H)}`),s.push(n),i&&s.push(`${dn.FROM} ${i}`),s.push(dn.DELETE_ALL);for(let[o,a]of e){let l=Buffer.from(a,H),c=o.split(pn.sep).join(pn.posix.sep);s.push(`${dn.MODIFY} ${vA} ${bA} ${c}`),s.push(`${dn.DATA} ${l.length}`),s.push(a)}return s.push(""),s.join(`
5
+ `)}function dg(t,e,r=kA){return new Promise((n,i)=>{let s=CA("git",[PA,DA],{cwd:t,stdio:[Ql.PIPE,Ql.IGNORE,Ql.PIPE]}),o=setTimeout(()=>{s.kill(lg),i(new Error(GA(r)))},r);o.unref();let a=[],l;s.stderr.on(Hs.DATA,c=>a.push(c)),s.on(Hs.ERROR,i),s.on(Hs.CLOSE,c=>{if(clearTimeout(o),c===0)return n();let u=Buffer.concat(a).toString(H).trim();i(new Error(MA(c,u,l)))}),s.stdin.on(Hs.ERROR,c=>{l=c});try{s.stdin.end(e,H)}catch(c){s.kill(lg),clearTimeout(o),i(c instanceof Error?c:new Error(String(c)));return}})}import Wn from"path";var UA="Git hook name must be a basename contained by the resolved hooks directory";function HA(t){return t.length===0||t==="."||t===".."||t.includes("/")||t.includes("\\")||Wn.isAbsolute(t)}function BA(t){return t.length===0||t===".."||t.startsWith(`..${Wn.sep}`)||Wn.isAbsolute(t)}function pg(){throw new _(R.FS_PATH_TRAVERSAL,UA)}function xi(t,e){HA(e)&&pg();let r=Wn.resolve(t),n=Wn.resolve(r,e),i=Wn.relative(r,n);return BA(i)&&pg(),n}var YA=$A(KA),WA={LC_ALL:"C",LANG:"C",LC_MESSAGES:"C"},ge=(t,e,r={})=>YA(t,e,{...r,encoding:"utf8",env:{...process.env,...r.env??{},...WA}}),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"},Bs={PATH:"worktree ",BRANCH:"branch "},jA="\0",VA="",Xl={RENAMED:"R",ADDED:"A",DELETED:"D"},zA="4b825dc642cb6eb9a060e54bf8d69288fbee4904",gg=".git",fg="hooks",JA="_",mg="docuvia-knowledge.lock",qA=1e4,QA=100,XA=6e4,hg="object",Eg="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`},jn=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,gg)}}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,gg)}}async resolveHooksDir(e){let r;try{let{stdout:n}=await ge("git",[fe.REV_PARSE,re.GIT_PATH_FLAG,fg],{cwd:e});r=lt.resolve(e,n.trim())}catch{let n=await this.getGitCommonDir(e);r=lt.join(n,fg)}return lt.basename(r)===JA?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 _.wrap(R.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 _.wrap(R.GIT_COMMAND_FAILED,Fe.BRANCH_DELETE_FAILED,n)}}async commitEmptyTree(e,r){try{let{stdout:n}=await ge("git",[fe.COMMIT_TREE,zA,re.MESSAGE_FLAG,r],{cwd:e});return n.trim()}catch(n){throw _.wrap(R.GIT_BRANCH_CREATE_FAILED,Fe.COMMIT_TREE_FAILED,n)}}async updateBranchRef(e,r,n){try{await ge("git",[fe.UPDATE_REF,`${un}${r}`,n],{cwd:e})}catch(i){throw _.wrap(R.GIT_BRANCH_CREATE_FAILED,Fe.UPDATE_REF_FAILED,i)}}async hooksDirExists(e){try{let r=await this.resolveHooksDir(e);return await ur.access(r),!0}catch{return!1}}async readHookFile(e,r){let n=await this.resolveHooksDir(e),i=xi(n,r);try{return await ur.readFile(i,H)}catch{return}}async appendHookFile(e,r,n){try{let i=await this.resolveHooksDir(e),s=xi(i,r);await ur.appendFile(s,n)}catch(i){throw _.wrap(R.GIT_HOOK_INSTALL_FAILED,Fe.HOOK_FILE_WRITE_FAILED,i)}}async writeHookFile(e,r,n){try{let i=await this.resolveHooksDir(e),s=xi(i,r);await ur.writeFile(s,n)}catch(i){throw _.wrap(R.GIT_HOOK_INSTALL_FAILED,Fe.HOOK_FILE_WRITE_FAILED,i)}}async makeHookExecutable(e,r){try{let n=await this.resolveHooksDir(e),i=xi(n,r);await ur.chmod(i,493)}catch(n){throw _.wrap(R.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
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 _.wrap(R.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
7
  `).map(n=>n.trim()).filter(Boolean)}catch(r){throw _.wrap(R.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
8
  `).map(n=>n.trim()).filter(Boolean)}catch(r){throw _.wrap(R.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 _.wrap(R.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
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(jA).map(s=>s.trim()).filter(Boolean).map(s=>{let o=s.indexOf(VA);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
10
  `).map(s=>s.trim()).filter(Boolean)}catch{return[]}}async getRemoteUrl(e){try{let{stdout:r}=await ge("git",[fe.REMOTE,re.GET_URL,vs],{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 _.wrap(R.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??Jl,...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(Ql.RENAMED)?{status:yt.RENAMED,file:r[2]??r[1],oldFile:r[1]}:e.startsWith(Ql.ADDED)?{status:yt.ADDED,file:r[1]}:e.startsWith(Ql.DELETED)?{status:yt.DELETED,file:r[1]}:{status:yt.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:yt.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(`
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 _.wrap(R.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??ql,...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(Xl.RENAMED)?{status:yt.RENAMED,file:r[2]??r[1],oldFile:r[1]}:e.startsWith(Xl.ADDED)?{status:yt.ADDED,file:r[1]}:e.startsWith(Xl.DELETED)?{status:yt.DELETED,file:r[1]}:{status:yt.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:yt.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
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 _.wrap(R.GIT_COMMAND_FAILED,Fe.DIFF_TREE_FAILED,n)}}async getHeadSha(e){try{let{stdout:r}=await ge("git",[fe.REV_PARSE,Jl],{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(`
14
+ `).map(i=>i.trim()).filter(Boolean)}catch(n){throw _.wrap(R.GIT_COMMAND_FAILED,Fe.DIFF_TREE_FAILED,n)}}async getHeadSha(e){try{let{stdout:r}=await ge("git",[fe.REV_PARSE,ql],{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(un,""):void 0})}return n}async getBranchTipSha(e,r){try{let{stdout:n}=await ge("git",[fe.REV_PARSE,re.VERIFY,re.QUIET,`${un}${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 lg(r,o?void 0:e),l=s!==void 0?s:Math.floor(Date.now()/1e3),c=await this.getBranchTipSha(e,n),u=cg(n,a,l,i,c);await ug(e,u)}catch(a){throw _.wrap(R.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=`${un}${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===mg&&e!==null&&e.killed?R.GIT_NETWORK_TIMEOUT:R.GIT_COMMAND_FAILED;return _.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===mg&&hg in i&&i[hg]===1)return!1;throw _.wrap(R.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 _.wrap(R.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 _.wrap(R.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:br.NAME,GIT_AUTHOR_EMAIL:br.EMAIL,GIT_COMMITTER_NAME:br.NAME,GIT_COMMITTER_EMAIL:br.EMAIL}});return o.trim()}catch(s){throw _.wrap(R.GIT_COMMAND_FAILED,Fe.COMMIT_TREE_MERGE_FAILED,s)}}async acquireKnowledgeLock(e){let r=await this.getGitDir(e),n=lt.join(r,fg),i=Date.now()+qA;for(;;)try{await(await ur.open(n,"wx")).close();return}catch(s){let o=s.code;if(o!==xn&&o!==an&&o!==Un&&o!==Hn)throw _.wrap(R.GIT_COMMAND_FAILED,Fe.KNOWLEDGE_LOCK_ACQUIRE_FAILED,s);let a=await ur.stat(n).catch(()=>{});if(a&&Date.now()-a.mtimeMs>XA){await ur.rm(n,{force:!0});continue}if(Date.now()>i)throw new _(R.GIT_COMMAND_FAILED,Fe.KNOWLEDGE_LOCK_TIMED_OUT(n));await new Promise(l=>setTimeout(l,QA))}}async releaseKnowledgeLock(e){let r=await this.getGitDir(e),n=lt.join(r,fg);await ur.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 ZA}from"child_process";import{promisify as eR}from"util";var tR=eR(ZA),rR="git_network",Eg={REMOTE_REACHABLE:"Git remote is reachable",REMOTE_REACHABILITY_CHECK_FAILED:"Git remote reachability check failed"},nR="ls-remote",iR="--heads",sR=`${"git"} ${nR} ${iR} ${vs}`,oR=5e3,Ks=class{async checkHealth(e){let r={};try{let{stdout:n}=await tR(sR,{cwd:e,timeout:oR});r[rR]={status:K.PASS,message:Eg.REMOTE_REACHABLE}}catch(n){let i=n.killed?R.GIT_NETWORK_TIMEOUT:R.GIT_COMMAND_FAILED;throw _.wrap(i,Eg.REMOTE_REACHABILITY_CHECK_FAILED,n)}return r}};y.register(T.GitProvider,()=>new jn);y.register(T.LineBlameProvider,()=>new jn);y.register(T.DiagnosticRunnerGit,()=>new Ks);import Lg from"fs";import Vs from"fs/promises";import ER from"path";import Cg from"better-sqlite3";import _g from"fs";import aR from"path";var gn={BUSY_TIMEOUT_MS:1e4,JOURNAL_MODE:"WAL",SYNCHRONOUS:"NORMAL",WAL_FILE_SUFFIX:"-wal"},Vn={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 lR=".sql";function Xl(t,e){t.exec(`CREATE TABLE IF NOT EXISTS ${w.SCHEMA_MIGRATIONS} (
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(un,""):void 0})}return n}async getBranchTipSha(e,r){try{let{stdout:n}=await ge("git",[fe.REV_PARSE,re.VERIFY,re.QUIET,`${un}${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 cg(r,o?void 0:e),l=s!==void 0?s:Math.floor(Date.now()/1e3),c=await this.getBranchTipSha(e,n),u=ug(n,a,l,i,c);await dg(e,u)}catch(a){throw _.wrap(R.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=`${un}${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===hg&&e!==null&&e.killed?R.GIT_NETWORK_TIMEOUT:R.GIT_COMMAND_FAILED;return _.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===hg&&Eg in i&&i[Eg]===1)return!1;throw _.wrap(R.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 _.wrap(R.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 _.wrap(R.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:br.NAME,GIT_AUTHOR_EMAIL:br.EMAIL,GIT_COMMITTER_NAME:br.NAME,GIT_COMMITTER_EMAIL:br.EMAIL}});return o.trim()}catch(s){throw _.wrap(R.GIT_COMMAND_FAILED,Fe.COMMIT_TREE_MERGE_FAILED,s)}}async acquireKnowledgeLock(e){let r=await this.getGitDir(e),n=lt.join(r,mg),i=Date.now()+qA;for(;;)try{await(await ur.open(n,"wx")).close();return}catch(s){let o=s.code;if(o!==xn&&o!==an&&o!==Un&&o!==Hn)throw _.wrap(R.GIT_COMMAND_FAILED,Fe.KNOWLEDGE_LOCK_ACQUIRE_FAILED,s);let a=await ur.stat(n).catch(()=>{});if(a&&Date.now()-a.mtimeMs>XA){await ur.rm(n,{force:!0});continue}if(Date.now()>i)throw new _(R.GIT_COMMAND_FAILED,Fe.KNOWLEDGE_LOCK_TIMED_OUT(n));await new Promise(l=>setTimeout(l,QA))}}async releaseKnowledgeLock(e){let r=await this.getGitDir(e),n=lt.join(r,mg);await ur.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 ZA}from"child_process";import{promisify as eR}from"util";var tR=eR(ZA),rR="git_network",_g={REMOTE_REACHABLE:"Git remote is reachable",REMOTE_REACHABILITY_CHECK_FAILED:"Git remote reachability check failed"},nR="ls-remote",iR="--heads",sR=`${"git"} ${nR} ${iR} ${vs}`,oR=5e3,Ks=class{async checkHealth(e){let r={};try{let{stdout:n}=await tR(sR,{cwd:e,timeout:oR});r[rR]={status:K.PASS,message:_g.REMOTE_REACHABLE}}catch(n){let i=n.killed?R.GIT_NETWORK_TIMEOUT:R.GIT_COMMAND_FAILED;throw _.wrap(i,_g.REMOTE_REACHABILITY_CHECK_FAILED,n)}return r}};y.register(T.GitProvider,()=>new jn);y.register(T.LineBlameProvider,()=>new jn);y.register(T.DiagnosticRunnerGit,()=>new Ks);import Cg from"fs";import Vs from"fs/promises";import ER from"path";import Ng from"better-sqlite3";import Sg from"fs";import aR from"path";var gn={BUSY_TIMEOUT_MS:1e4,JOURNAL_MODE:"WAL",SYNCHRONOUS:"NORMAL",WAL_FILE_SUFFIX:"-wal"},Vn={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 lR=".sql";function Zl(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=_g.readdirSync(e).filter(s=>s.endsWith(lR)).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=_g.readFileSync(aR.join(e,o),H);t.exec(a),n.run(o)}}).immediate()}import{fileURLToPath as cR}from"url";import Sg from"path";var uR=Sg.dirname(cR(import.meta.url)),Zl=Sg.join(uR,"migrations");var $s={READ:"read",WRITE:"write"},Ys=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===$s.WRITE)?(this.activeReaders++,Promise.resolve()):new Promise(e=>{this.queue.push({kind:$s.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:$s.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===$s.WRITE){this.activeReaders===0&&(this.queue.shift(),this.writerActive=!0,e.grant());return}this.queue.shift(),this.activeReaders++,e.grant()}}};var dR="Failed to count projects",Hi=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 _.wrap(R.DB_QUERY_FAILED,dR,e)}}};var Bi=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)
22
+ )`);let r=Sg.readdirSync(e).filter(s=>s.endsWith(lR)).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=Sg.readFileSync(aR.join(e,o),H);t.exec(a),n.run(o)}}).immediate()}import{fileURLToPath as cR}from"url";import Tg from"path";var uR=Tg.dirname(cR(import.meta.url)),ec=Tg.join(uR,"migrations");var $s={READ:"read",WRITE:"write"},Ys=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===$s.WRITE)?(this.activeReaders++,Promise.resolve()):new Promise(e=>{this.queue.push({kind:$s.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:$s.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===$s.WRITE){this.activeReaders===0&&(this.queue.shift(),this.writerActive=!0,e.grant());return}this.queue.shift(),this.activeReaders++,e.grant()}}};var dR="Failed to count projects",Hi=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 _.wrap(R.DB_QUERY_FAILED,dR,e)}}};var Bi=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
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 ${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 Tg={AUTO_DETECTED_TAG_DESCRIPTION:t=>`Auto-detected tag: ${t}`,GET_ALL_TAG_LINKS_FAILED:"Failed to get all tag links"},Ki=class{constructor(e){this.db=e}db;upsertTag(e){this.db.prepare(`INSERT INTO ${w.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 Ag={AUTO_DETECTED_TAG_DESCRIPTION:t=>`Auto-detected tag: ${t}`,GET_ALL_TAG_LINKS_FAILED:"Failed to get all tag links"},Ki=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,Tg.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
30
+ ON CONFLICT(name) DO NOTHING`).run(e,e,Ag.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
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 _.wrap(R.DB_QUERY_FAILED,Tg.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 Ag(t){return{id:t.id,name:t.name,type:t.type,filePath:pR(t.path_patterns)}}function pR(t){if(t)try{let e=JSON.parse(t);if(Array.isArray(e)&&e.length>0)return String(e[0])}catch{}}var zn={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 gR(t,e){let r=t[0];return r?r===e?r:`${r}#${e}`:e}var $i=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??gR(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 _.wrap(R.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 _.wrap(R.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 _.wrap(R.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 _.wrap(R.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 Ag(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?Ag(i):void 0}catch(r){throw _.wrap(R.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 _.wrap(R.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
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 _.wrap(R.DB_QUERY_FAILED,Ag.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 Rg(t){return{id:t.id,name:t.name,type:t.type,filePath:pR(t.path_patterns)}}function pR(t){if(t)try{let e=JSON.parse(t);if(Array.isArray(e)&&e.length>0)return String(e[0])}catch{}}var zn={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 gR(t,e){let r=t[0];return r?r===e?r:`${r}#${e}`:e}var $i=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??gR(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 _.wrap(R.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 _.wrap(R.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 _.wrap(R.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 _.wrap(R.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 Rg(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?Rg(i):void 0}catch(r){throw _.wrap(R.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 _.wrap(R.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
34
  FROM ${w.NODE_LINKS} l
35
35
  JOIN ${w.L2_NODES} n ON n.id = l.${P.SOURCE_NODE_ID}
36
36
  WHERE l.${P.TARGET_NODE_ID} = ?`).all(e)}catch(r){throw _.wrap(R.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
@@ -42,14 +42,14 @@ import{a as Pp,b as Dp,d as We,f as vp,g as bp,h as wp}from"./chunk-2PHGPH6J.js"
42
42
  WHERE l.${P.TARGET_NODE_ID} = ?`).all(e)}catch(r){throw _.wrap(R.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
43
  FROM ${w.NODE_LINKS} l
44
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 _.wrap(R.DB_QUERY_FAILED,ct.OUTGOING_RELATIONS_FAILED(e),r)}}getAllNodes(){try{return this.db.prepare(`SELECT * FROM ${w.L2_NODES}`).all()}catch(e){throw _.wrap(R.DB_QUERY_FAILED,ct.ALL_NODES_FAILED,e)}}getAllLinks(){try{return this.db.prepare(`SELECT * FROM ${w.NODE_LINKS}`).all()}catch(e){throw _.wrap(R.DB_QUERY_FAILED,ct.ALL_LINKS_FAILED,e)}}withFtsSyncSuspended(e){this.db.exec(Rg);let r=e();return this.db.exec(`INSERT INTO ${w.L2_NODES_FTS}(${w.L2_NODES_FTS}) VALUES('rebuild')`),this.db.exec(yg),r}bulkLoadGraph(e){try{return this.db.transaction(()=>{this.db.exec(Rg),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(yg),{nodesLoaded:e.nodes.length,edgesLoaded:o,edgesDropped:a}})()}catch(r){throw _.wrap(R.DB_QUERY_FAILED,ct.BULK_LOAD_FAILED,r)}}pruneOrphanedLinks(){try{return this.db.prepare(`DELETE FROM ${w.NODE_LINKS}
45
+ WHERE l.${P.SOURCE_NODE_ID} = ?`).all(e)}catch(r){throw _.wrap(R.DB_QUERY_FAILED,ct.OUTGOING_RELATIONS_FAILED(e),r)}}getAllNodes(){try{return this.db.prepare(`SELECT * FROM ${w.L2_NODES}`).all()}catch(e){throw _.wrap(R.DB_QUERY_FAILED,ct.ALL_NODES_FAILED,e)}}getAllLinks(){try{return this.db.prepare(`SELECT * FROM ${w.NODE_LINKS}`).all()}catch(e){throw _.wrap(R.DB_QUERY_FAILED,ct.ALL_LINKS_FAILED,e)}}withFtsSyncSuspended(e){this.db.exec(yg);let r=e();return this.db.exec(`INSERT INTO ${w.L2_NODES_FTS}(${w.L2_NODES_FTS}) VALUES('rebuild')`),this.db.exec(Og),r}bulkLoadGraph(e){try{return this.db.transaction(()=>{this.db.exec(yg),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(Og),{nodesLoaded:e.nodes.length,edgesLoaded:o,edgesDropped:a}})()}catch(r){throw _.wrap(R.DB_QUERY_FAILED,ct.BULK_LOAD_FAILED,r)}}pruneOrphanedLinks(){try{return this.db.prepare(`DELETE FROM ${w.NODE_LINKS}
47
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 _.wrap(R.DB_QUERY_FAILED,ct.PRUNE_ORPHANED_LINKS_FAILED,e)}}},Rg=`
48
+ OR ${P.TARGET_NODE_ID} NOT IN (SELECT id FROM ${w.L2_NODES})`).run().changes}catch(e){throw _.wrap(R.DB_QUERY_FAILED,ct.PRUNE_ORPHANED_LINKS_FAILED,e)}}},yg=`
49
49
  DROP TRIGGER IF EXISTS ${zn.L2_NODES_FTS_AFTER_INSERT};
50
50
  DROP TRIGGER IF EXISTS ${zn.L2_NODES_FTS_AFTER_DELETE};
51
51
  DROP TRIGGER IF EXISTS ${zn.L2_NODES_FTS_AFTER_UPDATE};
52
- `,yg=`
52
+ `,Og=`
53
53
  CREATE TRIGGER IF NOT EXISTS ${zn.L2_NODES_FTS_AFTER_INSERT} AFTER INSERT ON ${w.L2_NODES} BEGIN
54
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});
@@ -86,7 +86,7 @@ ${r}`).digest("hex")}var Yi=class{constructor(e){this.db=e}db;getById(e){try{ret
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, '${mR}', ?, ?, ?, ?)`).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 _.wrap(R.DB_QUERY_FAILED,Jn.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 _.wrap(R.DB_QUERY_FAILED,Jn.UPDATE_VALIDITY_STATUS_FAILED(e),n)}}};var Og={SEARCH_L2_FAILED:"Failed to search l2 nodes via FTS",SEARCH_L3_FAILED:"Failed to search l3 nodes via FTS"},Wi=class{constructor(e){this.db=e}db;searchL2Nodes(e,r){try{let n=Ws(e,"AND");if(n){let s=this.runL2Match(n,r);if(s.length>0)return s}let i=Ws(e,"OR");return i?this.runL2Match(i,r):[]}catch(n){throw _.wrap(R.DB_QUERY_FAILED,Og.SEARCH_L2_FAILED,n)}}searchL3Nodes(e,r){try{let n=Ws(e,"AND");if(n){let s=this.runL3Match(n,r);if(s.length>0)return s}let i=Ws(e,"OR");return i?this.runL3Match(i,r):[]}catch(n){throw _.wrap(R.DB_QUERY_FAILED,Og.SEARCH_L3_FAILED,n)}}runL2Match(e,r){return this.db.prepare(`SELECT n.*
89
+ VALUES (?, ?, ?, ?, ?, ?, 1, '${mR}', ?, ?, ?, ?)`).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 _.wrap(R.DB_QUERY_FAILED,Jn.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 _.wrap(R.DB_QUERY_FAILED,Jn.UPDATE_VALIDITY_STATUS_FAILED(e),n)}}};var Ig={SEARCH_L2_FAILED:"Failed to search l2 nodes via FTS",SEARCH_L3_FAILED:"Failed to search l3 nodes via FTS"},Wi=class{constructor(e){this.db=e}db;searchL2Nodes(e,r){try{let n=Ws(e,"AND");if(n){let s=this.runL2Match(n,r);if(s.length>0)return s}let i=Ws(e,"OR");return i?this.runL2Match(i,r):[]}catch(n){throw _.wrap(R.DB_QUERY_FAILED,Ig.SEARCH_L2_FAILED,n)}}searchL3Nodes(e,r){try{let n=Ws(e,"AND");if(n){let s=this.runL3Match(n,r);if(s.length>0)return s}let i=Ws(e,"OR");return i?this.runL3Match(i,r):[]}catch(n){throw _.wrap(R.DB_QUERY_FAILED,Ig.SEARCH_L3_FAILED,n)}}runL2Match(e,r){return this.db.prepare(`SELECT n.*
90
90
  FROM ${w.L2_NODES_FTS} f
91
91
  JOIN ${w.L2_NODES} n ON n.id = f.rowid
92
92
  WHERE ${w.L2_NODES_FTS} MATCH ?
@@ -96,12 +96,12 @@ ${r}`).digest("hex")}var Yi=class{constructor(e){this.db=e}db;getById(e){try{ret
96
96
  JOIN ${w.L3_NODES} n ON n.id = f.rowid
97
97
  WHERE ${w.L3_NODES_FTS} MATCH ?
98
98
  ORDER BY rank
99
- LIMIT ?`).all(e,r)}};function Ws(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 Ig={READ_FAILED:t=>`Failed to read meta key "${t}"`,WRITE_FAILED:t=>`Failed to write meta key "${t}"`},js=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 _.wrap(R.DB_QUERY_FAILED,Ig.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 _.wrap(R.DB_QUERY_FAILED,Ig.WRITE_FAILED(e),n)}}};var ji=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})
99
+ LIMIT ?`).all(e,r)}};function Ws(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 Lg={READ_FAILED:t=>`Failed to read meta key "${t}"`,WRITE_FAILED:t=>`Failed to write meta key "${t}"`},js=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 _.wrap(R.DB_QUERY_FAILED,Lg.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 _.wrap(R.DB_QUERY_FAILED,Lg.WRITE_FAILED(e),n)}}};var ji=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
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
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 _R=1e4,SR=100,TR=6e4,AR=".init-lock",wr={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 RR(t){if(!(!(t instanceof Error)||!("code"in t)))return t.code}function yR(t){if(typeof t!="string"||t.length===0||t.includes("\0"))throw new _(R.INVALID_INPUT,wr.INVALID_DB_PATH)}async function OR(t){let e=`${t}${AR}`,r=Date.now()+_R;for(;;)try{return await(await Vs.open(e,"wx")).close(),e}catch(n){let i=RR(n);if(i!==xn&&i!==an&&i!==Un&&i!==Hn)throw _.wrap(R.DB_LOCKED,wr.INIT_LOCK_ACQUIRE_FAILED,n);let s=await Vs.stat(e).catch(()=>{});if(s&&Date.now()-s.mtimeMs>TR){await Vs.rm(e,{force:!0});continue}if(Date.now()>r)throw new _(R.DB_LOCKED,wr.INIT_LOCK_TIMED_OUT(e));await new Promise(o=>setTimeout(o,SR))}}async function IR(t){await Vs.rm(t,{force:!0})}var Vi=class t{constructor(e){this.db=e;this.projectsRepo=new Hi(e),this.filesRepo=new Bi(e),this.tagsRepo=new Ki(e),this.graphRepo=new $i(e),this.l3Repo=new Yi(e),this.ftsRepo=new Wi(e),this.metaRepo=new js(e),this.callSitesRepo=new ji(e)}db;lock=new Ys;projectsRepo;filesRepo;tagsRepo;graphRepo;l3Repo;ftsRepo;metaRepo;callSitesRepo;static async open(e){if(yR(e.dbPath),Lg.mkdirSync(ER.dirname(e.dbPath),{recursive:!0}),e.readonly&&!Lg.existsSync(e.dbPath))throw new _(R.DB_NOT_FOUND,wr.NOT_FOUND(e.dbPath));let r=e.readonly?void 0:await OR(e.dbPath).catch(n=>{throw _.wrap(R.DB_OPEN_FAILED,wr.OPEN_FAILED(e.dbPath),n)});try{let n=e.readonly?new Cg(e.dbPath,{readonly:!0,fileMustExist:!0}):new Cg(e.dbPath);if(n.pragma(`${Vn.BUSY_TIMEOUT} = ${gn.BUSY_TIMEOUT_MS}`),!e.readonly){n.pragma(`${Vn.JOURNAL_MODE} = ${gn.JOURNAL_MODE}`),n.pragma(`${Vn.SYNCHRONOUS} = ${gn.SYNCHRONOUS}`);try{Xl(n,Zl)}catch(i){throw new _(R.DB_MIGRATION_FAILED,wr.MIGRATIONS_FAILED,i)}}return new t(n)}catch(n){throw _.wrap(R.DB_OPEN_FAILED,wr.OPEN_FAILED(e.dbPath),n)}finally{r&&await IR(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 _.wrap(R.DB_QUERY_FAILED,wr.PRUNE_MISSING_FILES_FAILED,r)}}};import LR from"fs/promises";import CR from"better-sqlite3";var fn={CONNECTION:"sqlite_connection",INTEGRITY:"sqlite_integrity",WAL_BLOAT:"sqlite_wal_bloat",ABI_MISMATCH:"sqlite_abi_mismatch"},NR="NODE_MODULE_VERSION",Ng="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."},PR=100*1024*1024,zs=class{async checkHealth(e){let r={},n;try{n=new CR(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(NR);n&&(e[fn.ABI_MISMATCH]={status:K.FAIL,message:ut.ABI_MISMATCH,details:r,suggestion:ut.ABI_MISMATCH_SUGGESTION}),e[fn.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(Vn.INTEGRITY_CHECK,{simple:!0});i===Ng||Array.isArray(i)&&i[0]?.integrity_check===Ng?n[fn.INTEGRITY]={status:K.PASS,message:ut.INTEGRITY_PASSED}:n[fn.INTEGRITY]={status:K.FAIL,message:ut.INTEGRITY_FAILED,details:JSON.stringify(i),suggestion:ut.CORRUPTION_SUGGESTION}}catch(i){n[fn.INTEGRITY]={status:K.FAIL,message:ut.INTEGRITY_CHECK_ERRORED,details:String(i),suggestion:ut.CORRUPTION_SUGGESTION}}try{let i=r+gn.WAL_FILE_SUFFIX,s=await LR.stat(i).catch(()=>null);s&&s.size>PR?n[fn.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[fn.WAL_BLOAT]={status:K.PASS,message:ut.WAL_SIZE_NORMAL}}catch{}}};y.register(T.GraphStoreOpener,()=>Vi.open);y.register(T.DiagnosticRunnerDb,()=>new zs);import Pg from"fs/promises";import DR from"os";import vR 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)}]
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 _R=1e4,SR=100,TR=6e4,AR=".init-lock",wr={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 RR(t){if(!(!(t instanceof Error)||!("code"in t)))return t.code}function yR(t){if(typeof t!="string"||t.length===0||t.includes("\0"))throw new _(R.INVALID_INPUT,wr.INVALID_DB_PATH)}async function OR(t){let e=`${t}${AR}`,r=Date.now()+_R;for(;;)try{return await(await Vs.open(e,"wx")).close(),e}catch(n){let i=RR(n);if(i!==xn&&i!==an&&i!==Un&&i!==Hn)throw _.wrap(R.DB_LOCKED,wr.INIT_LOCK_ACQUIRE_FAILED,n);let s=await Vs.stat(e).catch(()=>{});if(s&&Date.now()-s.mtimeMs>TR){await Vs.rm(e,{force:!0});continue}if(Date.now()>r)throw new _(R.DB_LOCKED,wr.INIT_LOCK_TIMED_OUT(e));await new Promise(o=>setTimeout(o,SR))}}async function IR(t){await Vs.rm(t,{force:!0})}var Vi=class t{constructor(e){this.db=e;this.projectsRepo=new Hi(e),this.filesRepo=new Bi(e),this.tagsRepo=new Ki(e),this.graphRepo=new $i(e),this.l3Repo=new Yi(e),this.ftsRepo=new Wi(e),this.metaRepo=new js(e),this.callSitesRepo=new ji(e)}db;lock=new Ys;projectsRepo;filesRepo;tagsRepo;graphRepo;l3Repo;ftsRepo;metaRepo;callSitesRepo;static async open(e){if(yR(e.dbPath),Cg.mkdirSync(ER.dirname(e.dbPath),{recursive:!0}),e.readonly&&!Cg.existsSync(e.dbPath))throw new _(R.DB_NOT_FOUND,wr.NOT_FOUND(e.dbPath));let r=e.readonly?void 0:await OR(e.dbPath).catch(n=>{throw _.wrap(R.DB_OPEN_FAILED,wr.OPEN_FAILED(e.dbPath),n)});try{let n=e.readonly?new Ng(e.dbPath,{readonly:!0,fileMustExist:!0}):new Ng(e.dbPath);if(n.pragma(`${Vn.BUSY_TIMEOUT} = ${gn.BUSY_TIMEOUT_MS}`),!e.readonly){n.pragma(`${Vn.JOURNAL_MODE} = ${gn.JOURNAL_MODE}`),n.pragma(`${Vn.SYNCHRONOUS} = ${gn.SYNCHRONOUS}`);try{Zl(n,ec)}catch(i){throw new _(R.DB_MIGRATION_FAILED,wr.MIGRATIONS_FAILED,i)}}return new t(n)}catch(n){throw _.wrap(R.DB_OPEN_FAILED,wr.OPEN_FAILED(e.dbPath),n)}finally{r&&await IR(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 _.wrap(R.DB_QUERY_FAILED,wr.PRUNE_MISSING_FILES_FAILED,r)}}};import LR from"fs/promises";import CR from"better-sqlite3";var fn={CONNECTION:"sqlite_connection",INTEGRITY:"sqlite_integrity",WAL_BLOAT:"sqlite_wal_bloat",ABI_MISMATCH:"sqlite_abi_mismatch"},NR="NODE_MODULE_VERSION",Pg="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."},PR=100*1024*1024,zs=class{async checkHealth(e){let r={},n;try{n=new CR(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(NR);n&&(e[fn.ABI_MISMATCH]={status:K.FAIL,message:ut.ABI_MISMATCH,details:r,suggestion:ut.ABI_MISMATCH_SUGGESTION}),e[fn.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(Vn.INTEGRITY_CHECK,{simple:!0});i===Pg||Array.isArray(i)&&i[0]?.integrity_check===Pg?n[fn.INTEGRITY]={status:K.PASS,message:ut.INTEGRITY_PASSED}:n[fn.INTEGRITY]={status:K.FAIL,message:ut.INTEGRITY_FAILED,details:JSON.stringify(i),suggestion:ut.CORRUPTION_SUGGESTION}}catch(i){n[fn.INTEGRITY]={status:K.FAIL,message:ut.INTEGRITY_CHECK_ERRORED,details:String(i),suggestion:ut.CORRUPTION_SUGGESTION}}try{let i=r+gn.WAL_FILE_SUFFIX,s=await LR.stat(i).catch(()=>null);s&&s.size>PR?n[fn.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[fn.WAL_BLOAT]={status:K.PASS,message:ut.WAL_SIZE_NORMAL}}catch{}}};y.register(T.GraphStoreOpener,()=>Vi.open);y.register(T.DiagnosticRunnerDb,()=>new zs);import Dg from"fs/promises";import DR from"os";import vR 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,30 +115,30 @@ 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 bR(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var wR=new RegExp(`(?:^#!.*\\n)?${bR(S.DOCUVIA_HOOK_HEADER_COMMENT)}[\\s\\S]*?^fi$\\n?`,"gm"),Js=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 Pg.mkdtemp(vR.join(DR.tmpdir(),S.EMPTY_KNOWLEDGE_TEMP_DIR_PREFIX));try{await this.packSnapshotToKnowledgeBranchLocked(e,n,r)}finally{await Pg.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(wR,"")+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]?cr(i[0].message):void 0,a=s[0]?cr(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=cr(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(cr(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 Fr from"fs/promises";import _t from"path";import KR from"os";var Dg=".md",FR=/[<>:"/\\|?*\x00-\x1f\s]/g,MR=".",kR="..",GR=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"]),vg="_";function wg(t){let e=t.replace(FR,"_");e.length>100&&(e=e.slice(0,100));let r=e.indexOf("."),n=r===-1?e:e.slice(0,r);return GR.has(n.toLowerCase())?r===-1?`${n}${vg}`:`${n}${vg}${e.slice(r)}`:e}function xR(t){return t.split(/[\\/]+/).filter(e=>e.length>0&&e!==MR&&e!==kR).map(wg).join("/")}function UR(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 Fg(t,e){if(!t.filePath)return;let r=xR(t.filePath);if(!e)return`${S.KNOWLEDGE_DIR_NAME}/${r}${Dg}`;let{dir:n,base:i}=UR(r),s=wg(t.name),o=n?`${n}/${i}`:i;return`${S.KNOWLEDGE_DIR_NAME}/${o}/${s}${Dg}`}function HR(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 Mg(t,e){let r=new Map;for(let s of t)r.set(s.id,HR(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=Fg({name:s.name,filePath:a},o!==void 0);l&&i.set(s.id,l)}return i}function kg(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=Fg({name:i.name,filePath:i.filePath},s);o&&n.set(i.nodeKey,o)}return n}function bg(t){if(!t)return[];try{let e=JSON.parse(t);return Array.isArray(e)?e.map(String):[]}catch{return[]}}function Gg(t,e){let r={content_hash:t.content_hash??"",node_type:t.node_type,title:t.title,l2_path:e,source_commits:bg(t.initial_source_commits??t.source_commits),extraction_model:t.extraction_model,source_files:bg(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 bR(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var wR=new RegExp(`(?:^#!.*\\n)?${bR(S.DOCUVIA_HOOK_HEADER_COMMENT)}[\\s\\S]*?^fi$\\n?`,"gm"),Js=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 Dg.mkdtemp(vR.join(DR.tmpdir(),S.EMPTY_KNOWLEDGE_TEMP_DIR_PREFIX));try{await this.packSnapshotToKnowledgeBranchLocked(e,n,r)}finally{await Dg.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(wR,"")+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]?cr(i[0].message):void 0,a=s[0]?cr(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=cr(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(cr(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 Fr from"fs/promises";import _t from"path";import KR from"os";var vg=".md",FR=/[<>:"/\\|?*\x00-\x1f\s]/g,MR=".",kR="..",GR=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"]),bg="_";function Fg(t){let e=t.replace(FR,"_");e.length>100&&(e=e.slice(0,100));let r=e.indexOf("."),n=r===-1?e:e.slice(0,r);return GR.has(n.toLowerCase())?r===-1?`${n}${bg}`:`${n}${bg}${e.slice(r)}`:e}function xR(t){return t.split(/[\\/]+/).filter(e=>e.length>0&&e!==MR&&e!==kR).map(Fg).join("/")}function UR(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 Mg(t,e){if(!t.filePath)return;let r=xR(t.filePath);if(!e)return`${S.KNOWLEDGE_DIR_NAME}/${r}${vg}`;let{dir:n,base:i}=UR(r),s=Fg(t.name),o=n?`${n}/${i}`:i;return`${S.KNOWLEDGE_DIR_NAME}/${o}/${s}${vg}`}function HR(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 kg(t,e){let r=new Map;for(let s of t)r.set(s.id,HR(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=Mg({name:s.name,filePath:a},o!==void 0);l&&i.set(s.id,l)}return i}function Gg(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=Mg({name:i.name,filePath:i.filePath},s);o&&n.set(i.nodeKey,o)}return n}function wg(t){if(!t)return[];try{let e=JSON.parse(t);return Array.isArray(e)?e.map(String):[]}catch{return[]}}function xg(t,e){let r={content_hash:t.content_hash??"",node_type:t.node_type,title:t.title,l2_path:e,source_commits:wg(t.initial_source_commits??t.source_commits),extraction_model:t.extraction_model,source_files:wg(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
- `}var BR=/^---\n([\s\S]*?)\n---\n\n?([\s\S]*)$/;function xg(t){let e=BR.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 It(t){return`l2:${t}`}function ec(t){return`l3:${t}`}var $R=KR.cpus().length*4,qs=class{async render(e){let{outDir:r,l2Rows:n,linkRows:i,l3Rows:s}=e,o=_t.join(r,S.GRAPH_DIR_NAME),a=_t.join(r,S.KNOWLEDGE_DIR_NAME);await Fr.mkdir(o,{recursive:!0}),await Fr.mkdir(a,{recursive:!0});let l=new Map;for(let L of n)l.set(L.id,JR(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??It(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})),h=i.map(L=>({source:u.get(L.source_node_id)??It(L.source_node_id),target:u.get(L.target_node_id)??It(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 Fr.writeFile(_t.join(o,S.NODES_JSONL_NAME),d.join(`
123
+ `}var BR=/^---\n([\s\S]*?)\n---\n\n?([\s\S]*)$/;function Ug(t){let e=BR.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 It(t){return`l2:${t}`}function tc(t){return`l3:${t}`}var $R=KR.cpus().length*4,qs=class{async render(e){let{outDir:r,l2Rows:n,linkRows:i,l3Rows:s}=e,o=_t.join(r,S.GRAPH_DIR_NAME),a=_t.join(r,S.KNOWLEDGE_DIR_NAME);await Fr.mkdir(o,{recursive:!0}),await Fr.mkdir(a,{recursive:!0});let l=new Map;for(let L of n)l.set(L.id,JR(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??It(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})),h=i.map(L=>({source:u.get(L.source_node_id)??It(L.source_node_id),target:u.get(L.target_node_id)??It(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 Fr.writeFile(_t.join(o,S.NODES_JSONL_NAME),d.join(`
125
125
  `)+`
126
126
  `,H),h.length>0&&await Fr.writeFile(_t.join(o,S.EDGES_JSONL_NAME),h.join(`
127
127
  `)+`
128
- `,H);let E=cn($R),I=0,C=[];return await Promise.all(p.map(L=>E(async()=>{try{let b=zR(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:h.length,markdownFilesWritten:I,errors:C}}async writeL3Cards(e,r,n,i){let s=Mg(n,i),o=_t.join(e,S.KNOWLEDGE_DIR_NAME,S.L3_DIR_NAME);await Fr.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 Fr.writeFile(_t.join(o,`${a.content_hash}.md`),Gg(a,l),H)}))}async writeMarkdown(e,r){await Fr.mkdir(_t.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 Fr.writeFile(e,n+i,H)}},YR=/[<>:"/\\|?*\x00-\x1f\s]/g,WR=".",jR="..",Ug=".md",VR=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"]),Hg="_";function $g(t){let e=t.replace(YR,"_");e.length>100&&(e=e.slice(0,100));let r=e.indexOf("."),n=r===-1?e:e.slice(0,r);return VR.has(n.toLowerCase())?r===-1?`${n}${Hg}`:`${n}${Hg}${e.slice(r)}`:e}function Bg(t){return t.split(/[\\/]+/).filter(e=>e.length>0&&e!==WR&&e!==jR).map($g).join(_t.sep)}function Kg(t,e){let r=_t.resolve(t),n=_t.resolve(r,e);if(n!==r&&!n.startsWith(r+_t.sep))throw new _(R.INVALID_INPUT,j.sanitizedPathEscapesKnowledgeDir(e));return n}function zR(t,e){if(e.kind===Mt.FILE)return e.filePath?Kg(t,`${Bg(e.filePath)}${Ug}`):void 0;if(!e.filePath)return;let r=_t.parse(Bg(e.filePath)),n=$g(e.name);return Kg(t,_t.join(r.dir,r.name,`${n}${Ug}`))}function JR(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 tc={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"},Yg={HIGH_MIN:6,CRITICAL_MIN:21},Wg=16e3;function jg(t,e){if(e<=Wg)return t;let r=Math.sqrt(e/Wg);return Math.max(t,Math.round(t*r))}function qR(t,e){let r=jg(Yg.CRITICAL_MIN,e),n=jg(Yg.HIGH_MIN,e);return t>=r?Ye.CRITICAL:t>=n?Ye.HIGH:t>=1?Ye.MEDIUM:Ye.LOW}var qn=class{constructor(e=he()){this.logger=e}logger;computeRiskLevel(e,r){let{l2Nodes:n}=e.graph.count();return qR(r,n)}getBlastRadius(e,r){let n=e.graph.findNodeByName(r);if(!n){this.logger.debug(tc.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(tc.LSP_FALLBACK_APPLIED,{target:r,count:a.length}),s.push(...a)}return this.logger.debug(tc.RESOLVED_BLAST_RADIUS,{target:r,count:s.length}),s}isFileNode(e){return e.filePath!==void 0&&e.name===e.filePath}resolveContainedSymbolDependents(e,r,n){let i=[],s=new Set(n),o=e.graph.getOutgoingRelations(r).filter(({linkType:a})=>a===de.CONTAINS);for(let a of o)for(let l of e.graph.getIncomingRelations(a.id)){if(l.linkType===de.CONTAINS)continue;let c=this.resolveContainingFile(e,l);c.id===r||s.has(c.id)||(s.add(c.id),i.push(this.buildEntry(e,c.id,c.name,c.type)))}return i}resolveContainingFile(e,r){return e.graph.getIncomingRelations(r.id).find(({linkType:i})=>i===de.CONTAINS)??r}hasStaticCallerEdge(e,r){return e.graph.getIncomingRelations(r).some(n=>n.linkType!==de.CONTAINS)}resolveCallSiteFallback(e,r,n){let i=e.projects.getFirst()?.id;if(!i)return[];let s=e.callSites.getByTargetFunctions(i,[r.name]),o=[];for(let a of s.keys()){if(a===r.filePath||n.has(a))continue;let l=e.graph.findNodeByName(a);!l||l.name!==a||o.push({...this.buildEntry(e,l.id,l.name,l.type),edgeSource:kn.LSP_FALLBACK})}return o}buildEntry(e,r,n,i){let s=e.l3.getByL2NodeId(r),o=s.length>0?s.map(a=>({title:a.title,content:a.content})):void 0;return o?{name:n,type:i,why:o}:{name:n,type:i}}};var QR=10,Qs=class{constructor(e=new qn,r=he()){this.impactService=e;this.logger=r}impactService;logger;detectChanges(e){let{store:r,baseRef:n,filesChanged:i}=e,s=[],o=0;for(let{file:c}of i){let u=this.impactService.getBlastRadius(r,c);u&&u.length>0&&(s.push({file:c,impactedBy:u}),o+=u.length)}let a=this.impactService.computeRiskLevel(r,o);a===Ye.LOW&&i.length>QR&&(a=Ye.MEDIUM);let l=this.buildAnalysis(n,i,s,a,o);return this.logger.debug(j.DETECTED_CHANGES,{baseRef:n,filesChanged:i.length,affectedNodes:s.length,riskLevel:a}),{baseRef:n,filesChanged:i,affectedNodes:s,riskLevel:a,analysis:l}}buildAnalysis(e,r,n,i,s){let o=[];if(o.push(j.analysisBase(e??j.WORKING_TREE_HEAD)),o.push(j.analysisFilesChanged(r.length)),o.push(j.analysisRiskLevel(i)),n.length===0)o.push(j.NO_LOCAL_GRAPH_IMPACT);else{o.push(j.analysisImpactedNodes(s,n.length)),o.push(j.TOP_AFFECTED_FILES);let a=[...n].sort((l,c)=>c.impactedBy.length-l.impactedBy.length).slice(0,5);for(let l of a){let c=l.impactedBy.slice(0,5).map(u=>`${u.name} (${u.type})`).join(", ");o.push(j.analysisAffectedFileLine(l.file,l.impactedBy.length,c))}}return o.join(`
129
- `)}};import Vg from"path";import rc from"path";function XR(t){return t?t.split(`
128
+ `,H);let E=cn($R),I=0,C=[];return await Promise.all(p.map(L=>E(async()=>{try{let b=zR(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:h.length,markdownFilesWritten:I,errors:C}}async writeL3Cards(e,r,n,i){let s=kg(n,i),o=_t.join(e,S.KNOWLEDGE_DIR_NAME,S.L3_DIR_NAME);await Fr.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 Fr.writeFile(_t.join(o,`${a.content_hash}.md`),xg(a,l),H)}))}async writeMarkdown(e,r){await Fr.mkdir(_t.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 Fr.writeFile(e,n+i,H)}},YR=/[<>:"/\\|?*\x00-\x1f\s]/g,WR=".",jR="..",Hg=".md",VR=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"]),Bg="_";function Yg(t){let e=t.replace(YR,"_");e.length>100&&(e=e.slice(0,100));let r=e.indexOf("."),n=r===-1?e:e.slice(0,r);return VR.has(n.toLowerCase())?r===-1?`${n}${Bg}`:`${n}${Bg}${e.slice(r)}`:e}function Kg(t){return t.split(/[\\/]+/).filter(e=>e.length>0&&e!==WR&&e!==jR).map(Yg).join(_t.sep)}function $g(t,e){let r=_t.resolve(t),n=_t.resolve(r,e);if(n!==r&&!n.startsWith(r+_t.sep))throw new _(R.INVALID_INPUT,j.sanitizedPathEscapesKnowledgeDir(e));return n}function zR(t,e){if(e.kind===Mt.FILE)return e.filePath?$g(t,`${Kg(e.filePath)}${Hg}`):void 0;if(!e.filePath)return;let r=_t.parse(Kg(e.filePath)),n=Yg(e.name);return $g(t,_t.join(r.dir,r.name,`${n}${Hg}`))}function JR(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 rc={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"},Wg={HIGH_MIN:6,CRITICAL_MIN:21},jg=16e3;function Vg(t,e){if(e<=jg)return t;let r=Math.sqrt(e/jg);return Math.max(t,Math.round(t*r))}function qR(t,e){let r=Vg(Wg.CRITICAL_MIN,e),n=Vg(Wg.HIGH_MIN,e);return t>=r?Ye.CRITICAL:t>=n?Ye.HIGH:t>=1?Ye.MEDIUM:Ye.LOW}var qn=class{constructor(e=he()){this.logger=e}logger;computeRiskLevel(e,r){let{l2Nodes:n}=e.graph.count();return qR(r,n)}getBlastRadius(e,r){let n=e.graph.findNodeByName(r);if(!n){this.logger.debug(rc.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(rc.LSP_FALLBACK_APPLIED,{target:r,count:a.length}),s.push(...a)}return this.logger.debug(rc.RESOLVED_BLAST_RADIUS,{target:r,count:s.length}),s}isFileNode(e){return e.filePath!==void 0&&e.name===e.filePath}resolveContainedSymbolDependents(e,r,n){let i=[],s=new Set(n),o=e.graph.getOutgoingRelations(r).filter(({linkType:a})=>a===de.CONTAINS);for(let a of o)for(let l of e.graph.getIncomingRelations(a.id)){if(l.linkType===de.CONTAINS)continue;let c=this.resolveContainingFile(e,l);c.id===r||s.has(c.id)||(s.add(c.id),i.push(this.buildEntry(e,c.id,c.name,c.type)))}return i}resolveContainingFile(e,r){return e.graph.getIncomingRelations(r.id).find(({linkType:i})=>i===de.CONTAINS)??r}hasStaticCallerEdge(e,r){return e.graph.getIncomingRelations(r).some(n=>n.linkType!==de.CONTAINS)}resolveCallSiteFallback(e,r,n){let i=e.projects.getFirst()?.id;if(!i)return[];let s=e.callSites.getByTargetFunctions(i,[r.name]),o=[];for(let a of s.keys()){if(a===r.filePath||n.has(a))continue;let l=e.graph.findNodeByName(a);!l||l.name!==a||o.push({...this.buildEntry(e,l.id,l.name,l.type),edgeSource:kn.LSP_FALLBACK})}return o}buildEntry(e,r,n,i){let s=e.l3.getByL2NodeId(r),o=s.length>0?s.map(a=>({title:a.title,content:a.content})):void 0;return o?{name:n,type:i,why:o}:{name:n,type:i}}};var QR=10,Qs=class{constructor(e=new qn,r=he()){this.impactService=e;this.logger=r}impactService;logger;detectChanges(e){let{store:r,baseRef:n,filesChanged:i}=e,s=[],o=0;for(let{file:c}of i){let u=this.impactService.getBlastRadius(r,c);u&&u.length>0&&(s.push({file:c,impactedBy:u}),o+=u.length)}let a=this.impactService.computeRiskLevel(r,o);a===Ye.LOW&&i.length>QR&&(a=Ye.MEDIUM);let l=this.buildAnalysis(n,i,s,a,o);return this.logger.debug(j.DETECTED_CHANGES,{baseRef:n,filesChanged:i.length,affectedNodes:s.length,riskLevel:a}),{baseRef:n,filesChanged:i,affectedNodes:s,riskLevel:a,analysis:l}}buildAnalysis(e,r,n,i,s){let o=[];if(o.push(j.analysisBase(e??j.WORKING_TREE_HEAD)),o.push(j.analysisFilesChanged(r.length)),o.push(j.analysisRiskLevel(i)),n.length===0)o.push(j.NO_LOCAL_GRAPH_IMPACT);else{o.push(j.analysisImpactedNodes(s,n.length)),o.push(j.TOP_AFFECTED_FILES);let a=[...n].sort((l,c)=>c.impactedBy.length-l.impactedBy.length).slice(0,5);for(let l of a){let c=l.impactedBy.slice(0,5).map(u=>`${u.name} (${u.type})`).join(", ");o.push(j.analysisAffectedFileLine(l.file,l.impactedBy.length,c))}}return o.join(`
129
+ `)}};import zg from"path";import nc from"path";function XR(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 ZR(t){return t?t.split(`
131
- `).map(e=>e.trim()).filter(Boolean).map(e=>JSON.parse(e)):[]}async function nc(t,e,r,n,i=he()){let s=rc.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,rc.posix.join(S.GRAPH_DIR_NAME,S.NODES_JSONL_NAME)),t.readFileAtRef(e,r,rc.posix.join(S.GRAPH_DIR_NAME,S.EDGES_JSONL_NAME))]),c=XR(a),u=ZR(l),p=new Map;for(let[f,h]of kg(c,u))p.set(h,f);let d=0;for(let f of o){let h=await t.readFileAtRef(e,r,f);if(!h)continue;let E=xg(h);if(!E)continue;let I=p.get(E.l2_path);if(!I)continue;let C=n.graph.findNodeIdByNodeKey(I);if(C===void 0)continue;n.l3.importCard({l2NodeId:C,contentHash:E.content_hash,title:E.title,content:E.content,nodeType:E.node_type,sourceCommits:E.source_commits,extractionModel:E.extraction_model,sourceFiles:E.source_files,createdAt:E.created_at}).imported&&d++}return i.info(j.IMPORTED_L3_CARDS,{cardsFound:o.length,imported:d}),{cardsFound:o.length,imported:d}}var ey=2e3,ty=50,ry=.5;function ny(t){return t?t.split(`
131
+ `).map(e=>e.trim()).filter(Boolean).map(e=>JSON.parse(e)):[]}async function ic(t,e,r,n,i=he()){let s=nc.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,nc.posix.join(S.GRAPH_DIR_NAME,S.NODES_JSONL_NAME)),t.readFileAtRef(e,r,nc.posix.join(S.GRAPH_DIR_NAME,S.EDGES_JSONL_NAME))]),c=XR(a),u=ZR(l),p=new Map;for(let[f,h]of Gg(c,u))p.set(h,f);let d=0;for(let f of o){let h=await t.readFileAtRef(e,r,f);if(!h)continue;let E=Ug(h);if(!E)continue;let I=p.get(E.l2_path);if(!I)continue;let C=n.graph.findNodeIdByNodeKey(I);if(C===void 0)continue;n.l3.importCard({l2NodeId:C,contentHash:E.content_hash,title:E.title,content:E.content,nodeType:E.node_type,sourceCommits:E.source_commits,extractionModel:E.extraction_model,sourceFiles:E.source_files,createdAt:E.created_at}).imported&&d++}return i.info(j.IMPORTED_L3_CARDS,{cardsFound:o.length,imported:d}),{cardsFound:o.length,imported:d}}var ey=2e3,ty=50,ry=.5;function ny(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 iy(t){return t?t.split(`
133
- `).map(e=>e.trim()).filter(Boolean).map(e=>JSON.parse(e)):[]}var Xs=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=cr(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,ey);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,Vg.posix.join(S.GRAPH_DIR_NAME,S.NODES_JSONL_NAME)),this.git.readFileAtRef(e,s,Vg.posix.join(S.GRAPH_DIR_NAME,S.EDGES_JSONL_NAME))]),l=ny(o),c=iy(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 nc(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>=ty&&r<n*ry)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(()=>nc(this.git,e,r,n,this.logger))}};var Ju=Ml(Ku(),1),Zh=Ml(zh(),1);import Qh from"path";import Xh from"fs/promises";import GC from"crypto";var Ae={PACKAGE_JSON_TYPESCRIPT:"package.json:typescript",PACKAGE_JSON_REACT:"package.json:react",PACKAGE_JSON_VUE:"package.json:vue",PACKAGE_JSON_NEXT:"package.json:next",PACKAGE_JSON_EXPRESS:"package.json:express",PACKAGE_JSON_DRIZZLE_ORM:"package.json:drizzle-orm",PACKAGE_JSON_TAILWINDCSS:"package.json:tailwindcss",PACKAGE_JSON_JEST:"package.json:jest",PACKAGE_JSON_VITEST:"package.json:vitest",PACKAGE_JSON_PG:"package.json:pg",PACKAGE_JSON_WORKSPACES:"package.json:workspaces",CARGO_BASE:"cargo:base",CARGO_TOKIO:"cargo:tokio",CARGO_ACTIX:"cargo:actix",CARGO_SERDE:"cargo:serde",CARGO_TAURI:"cargo:tauri",PYTHON_BASE:"python:base",PYTHON_DJANGO:"python:django",PYTHON_FASTAPI:"python:fastapi",PYTHON_PANDAS:"python:pandas",GO_BASE:"go:base",GO_GIN:"go:gin",TSCONFIG_STRICT:"tsconfig:strict",VITE_PRESENCE:"vite:presence",DRIZZLE_PRESENCE:"drizzle:presence",TAURI_PRESENCE:"tauri:presence"},oe={PACKAGE_JSON:"package.json",CARGO_TOML:"Cargo.toml",PYPROJECT_TOML:"pyproject.toml",REQUIREMENTS_TXT:"requirements.txt",GO_MOD:"go.mod",TSCONFIG_JSON:"tsconfig.json",JSCONFIG_JSON:"jsconfig.json"},Kr={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"},Nt={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"},bo=[`${at}/**`,".git/**","dist/**","build/**"],Jh=[at,"dist","build","docs","test","tests","scripts"],ts="src",qh=[ts,"lib","app"];var xC=".gitignore",wo=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(Nt.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(Nt.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=>Gn(a)),this.logger.debug(Nt.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(Nt.GIT_OPS_FAILED_FALLBACK,{error:s instanceof Error?s.message:String(s)}),null}}async discoverViaGlobFallback(e,r){this.logger.debug(Nt.GIT_UNAVAILABLE_FALLBACK);let n=(0,Zh.default)();try{let c=await Xh.readFile(Qh.join(e,xC),H);n.add(c)}catch{this.logger.debug(Nt.NO_GITIGNORE_FOUND)}let i=[...bo,`${Ee}/**`],[s,o]=await Promise.all([(0,Ju.default)(`**/*.{${Hl().join(",")}}`,{cwd:e,ignore:i,absolute:!1}),(0,Ju.default)(`**/{${Array.from(Ul).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(Nt.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 Xh.readFile(Qh.join(n.workspaceRoot,e),H);let s=r||GC.createHash(Jt).update(i).digest("hex");return{code:i,hash:s}}catch{return null}}};var tE=Ml(Ku(),1);import UC from"path";import HC from"fs/promises";function ko(t){return e=>e===t}function qu(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 oi(t,e,r){return{id:t,matchesFile:e,detect:()=>r}}var Ut=ko(oe.PACKAGE_JSON),rs=ko(oe.CARGO_TOML),Fo=t=>t===oe.PYPROJECT_TOML||t===oe.REQUIREMENTS_TXT,eE=ko(oe.GO_MOD),BC=ko(oe.TSCONFIG_JSON),KC=[Be(Ae.PACKAGE_JSON_TYPESCRIPT,Ut,Ge.PACKAGE_JSON_TYPESCRIPT,[lr.TYPESCRIPT]),Be(Ae.PACKAGE_JSON_REACT,Ut,Ge.PACKAGE_JSON_REACT,[lr.REACT,se.FRONTEND]),Be(Ae.PACKAGE_JSON_VUE,Ut,Ge.PACKAGE_JSON_VUE,[lr.VUE,se.FRONTEND]),Be(Ae.PACKAGE_JSON_NEXT,Ut,Ge.PACKAGE_JSON_NEXT,[se.NEXTJS,se.FRONTEND,se.SSR]),Be(Ae.PACKAGE_JSON_EXPRESS,Ut,Ge.PACKAGE_JSON_EXPRESS,[lr.EXPRESS,se.BACKEND]),Be(Ae.PACKAGE_JSON_DRIZZLE_ORM,Ut,Ge.PACKAGE_JSON_DRIZZLE_ORM,[se.DRIZZLE,se.DATABASE]),Be(Ae.PACKAGE_JSON_TAILWINDCSS,Ut,Ge.PACKAGE_JSON_TAILWINDCSS,[se.TAILWINDCSS,se.CSS]),Be(Ae.PACKAGE_JSON_JEST,Ut,Ge.PACKAGE_JSON_JEST,[se.JEST,se.TESTING]),Be(Ae.PACKAGE_JSON_VITEST,Ut,Ge.PACKAGE_JSON_VITEST,[se.VITEST,se.TESTING]),Be(Ae.PACKAGE_JSON_PG,Ut,Ge.PACKAGE_JSON_PG,[se.POSTGRES,se.DATABASE]),Be(Ae.PACKAGE_JSON_WORKSPACES,Ut,Ge.PACKAGE_JSON_WORKSPACES,[se.MONOREPO]),oi(Ae.CARGO_BASE,rs,{projectType:ht.RUST,tags:[ht.RUST]}),Be(Ae.CARGO_TOKIO,rs,Ge.CARGO_TOKIO,[se.TOKIO,se.ASYNC]),Be(Ae.CARGO_ACTIX,rs,Ge.CARGO_ACTIX,[se.ACTIX,se.BACKEND]),Be(Ae.CARGO_SERDE,rs,Ge.CARGO_SERDE,[se.SERDE]),Be(Ae.CARGO_TAURI,rs,Ge.CARGO_TAURI,[se.TAURI,se.DESKTOP]),oi(Ae.PYTHON_BASE,Fo,{projectType:ht.PYTHON,tags:[ht.PYTHON]}),Be(Ae.PYTHON_DJANGO,Fo,Ge.PYTHON_DJANGO,[se.DJANGO,se.BACKEND]),Be(Ae.PYTHON_FASTAPI,Fo,Ge.PYTHON_FASTAPI,[se.FASTAPI,se.BACKEND]),Be(Ae.PYTHON_PANDAS,Fo,Ge.PYTHON_PANDAS,[se.PANDAS,se.DATA]),oi(Ae.GO_BASE,eE,{projectType:ht.GO,tags:[ht.GO]}),Be(Ae.GO_GIN,eE,Ge.GO_GIN,[se.GIN,se.BACKEND]),{id:Ae.TSCONFIG_STRICT,matchesFile:BC,detect:t=>/"strict"\s*:\s*true/.test(t)?{tags:[se.STRICT_TS]}:null},oi(Ae.VITE_PRESENCE,qu(Kr.VITE_CONFIG),{tags:[se.VITE,se.BUILD_TOOL]}),oi(Ae.DRIZZLE_PRESENCE,qu(Kr.DRIZZLE_CONFIG),{tags:[se.DRIZZLE,se.DATABASE]}),oi(Ae.TAURI_PRESENCE,qu(Kr.TAURI_CONF),{tags:[se.TAURI,se.DESKTOP]})],$C=[`**/${oe.PACKAGE_JSON}`,`**/${oe.CARGO_TOML}`,`**/${oe.PYPROJECT_TOML}`,`**/${oe.REQUIREMENTS_TXT}`,`**/${oe.GO_MOD}`,`**/${oe.TSCONFIG_JSON}`,`**/${Kr.VITE_CONFIG}.*`,`**/${Kr.DRIZZLE_CONFIG}.*`,`**/${Kr.WEBPACK_CONFIG}.*`,`**/${Kr.TAURI_CONF}.*`],YC=[...bo,"target/**","venv/**",".venv/**","**/fixtures/**","**/__fixtures__/**","**/test-data/**"],Mo=class{constructor(e=he()){this.logger=e}logger;async scanConfigs(e){let r=ht.UNKNOWN,n=new Set;try{let i=await(0,tE.default)($C,{cwd:e,ignore:YC,absolute:!0,deep:3});r=await this.scanAllConfigFiles(i,n),r=this.resolveJavascriptFallback(r,n)}catch(i){this.logger.warn(Nt.CONFIG_SCAN_FAILED,{error:i?.message??String(i)})}return r===ht.UNKNOWN&&(r=ht.GENERIC),n.size===0&&n.add(Lp),{projectType:r,tags:Array.from(n)}}async scanAllConfigFiles(e,r){let n=ht.UNKNOWN;for(let i of e){let s=await this.readConfigFileContent(i);if(s===null)continue;let o=UC.basename(i),a=this.applyDetectionRules(o,s,r);a&&(n=a)}return n}async readConfigFileContent(e){try{return await HC.readFile(e,H)}catch{return null}}applyDetectionRules(e,r,n){let i;for(let s of KC){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(lr.TYPESCRIPT)||r.has(lr.REACT)||r.has(lr.EXPRESS)||r.has(lr.VUE))&&e===ht.UNKNOWN?ht.JAVASCRIPT:e}};var Qu=".",WC=["packages","artifacts","crates"],jC="domain:";function VC(t){return t[0]===ts&&t.length>1||t.length>3&&WC.includes(t[0])&&t[2]===ts?t[1]:(t.length>2&&t[1]===ts,t[0])}function zC(t){let e=t.split("/");if(e.length<=1||e[0].startsWith(Qu)||Jh.includes(e[0]))return null;let r=VC(e);return r.includes(Qu)||r.startsWith(Qu)||qh.includes(r)?null:r}var Go=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(`${jC}${a}`);o.length>0&&this.logger.debug(Nt.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=zC(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 tN from"os";import{Worker as JC}from"worker_threads";import*as is from"path";import*as $r from"fs";import{fileURLToPath as qC}from"url";import QC from"crypto";var XC=qC(import.meta.url),rE=is.dirname(XC),xo={FORMAT:"esm",PLATFORM:"node",TARGET:"node20",EXTERNAL_TREE_SITTER:"web-tree-sitter"},ns={EVAL:"--eval",PRINT:"--print",IMPORT:"--import",TSX_LOADER:"tsx"};async function ZC(t,e){let r=await import("esbuild"),n=`${e}.${process.pid}.tmp`;await r.build({entryPoints:[t],outfile:n,bundle:!0,format:xo.FORMAT,platform:xo.PLATFORM,target:xo.TARGET,external:[xo.EXTERNAL_TREE_SITTER]}),$r.renameSync(n,e)}function eN(t,e){return $r.existsSync(e)?$r.existsSync(t)?$r.statSync(t).mtimeMs>$r.statSync(e).mtimeMs:!1:!0}var ss=class extends Error{constructor(r,n){super(We.workerCrashWhileParsing(r??We.UNKNOWN_FILE)+(n instanceof Error?n.message:String(n)));this.filePath=r;this.cause=n;this.name=Dp}filePath;cause},Uo=class{constructor(e=he(),r=3e4,n,i){this.logger=e;this.taskTimeoutMs=r;this.cache=n;this.workerScriptPathOverride=i;this.ipcLogRouter=new op(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 JC(this.wPath,this.workerOptions);e.on("message",n=>{if(this.ipcLogRouter.handleMessage(n))return;this.workerTasks.delete(e);let i=this.taskTimeouts.get(n.taskId);i&&(clearTimeout(i),this.taskTimeouts.delete(n.taskId));let s=this.pendingTasks.get(n.taskId);s&&(this.pendingTasks.delete(n.taskId),this.taskFilePaths.delete(n.taskId),s.resolve(n)),this.workerQueue.push(e),this.processQueue()});let r=n=>{let i=this.timedOutWorkers.delete(e),s=this.workerTasks.get(e),o=s?this.taskFilePaths.get(s):void 0;if(this.shuttingDown?this.logger.debug(We.WORKER_EXITED_DURING_SHUTDOWN,{taskId:s,filePath:o}):this.logger.error(We.WORKER_CRASHED_EXITED,{taskId:s,filePath:o,hadInFlightTask:!!s,error:n instanceof Error?{message:n.message,name:n.name}:n}),s){let a=this.taskTimeouts.get(s);a&&(clearTimeout(a),this.taskTimeouts.delete(s));let l=this.pendingTasks.get(s);l&&(l.reject(new ss(o,i?new Error(We.taskTimedOutAfterMs(s,this.taskTimeoutMs)):n||new Error(We.WORKER_EXITED_UNEXPECTEDLY))),this.pendingTasks.delete(s)),this.workerTasks.delete(e),this.taskFilePaths.delete(s)}this.workers=this.workers.filter(a=>a!==e),this.workerQueue=this.workerQueue.filter(a=>a!==e),this.shuttingDown||this.enqueueSpawn()};return e.on("error",r),e.on("exit",n=>{n!==0&&r(new Error(We.workerExitedWithCode(n)))}),this.workers.push(e),this.workerQueue.push(e),this.processQueue(),e}async initialize(e=2){if(this.workers.length>0)return;if(this.shuttingDown=!1,this.workerScriptPathOverride){this.wPath=this.workerScriptPathOverride,this.workerOptions.execArgv=process.execArgv.filter(n=>!n.includes(ns.EVAL)&&!n.includes(ns.PRINT)),this.workerOptions.execArgv.some(n=>n.includes(ns.TSX_LOADER))||this.workerOptions.execArgv.push(ns.IMPORT,ns.TSX_LOADER);for(let n=0;n<e;n++)await this.enqueueSpawn();return}this.wPath=is.resolve(rE,"./ast-worker.js");let r=is.resolve(rE,"./ast-worker.ts");eN(r,this.wPath)&&await ZC(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=QC.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(We.PARSE_CACHE_HIT,{contentHash:i,cacheLookupTimeMs:Number(l.toFixed(2))}),r(a);return}}let s=Date.now();this.taskQueue.push({request:e,resolve:o=>{if(this.cache){this.cache.set(i,o);let a=this.cache.metrics;if(a.hits+a.misses>0&&(a.hits+a.misses)%100===0){let l=a.hits/(a.hits+a.misses)*100,c=Date.now()-s;this.logger.info(We.CACHE_METRICS_AND_QUEUE_PERFORMANCE,{hitRate:Number(l.toFixed(2)),queueWaitTimeMs:c,...a})}}r(o)},reject:n}),this.processQueue()})}processQueue(){for(;this.taskQueue.length>0&&this.workerQueue.length>0;){let e=this.taskQueue.shift(),r=this.workerQueue.shift(),n=String(++this.taskCounter);this.pendingTasks.set(n,{resolve:e.resolve,reject:e.reject}),this.workerTasks.set(r,n),this.taskFilePaths.set(n,e.request.filePath);let i=setTimeout(()=>{this.taskTimeouts.delete(n),this.timedOutWorkers.add(r),this.logger.error(We.TASK_TIMED_OUT_TERMINATING,{taskId:n,filePath:this.taskFilePaths.get(n),taskTimeoutMs:this.taskTimeoutMs}),r.terminate().catch(s=>{this.logger.warn(We.WORKER_TERMINATE_FAILED,{taskId:n,filePath:this.taskFilePaths.get(n),error:s instanceof Error?{message:s.message,name:s.name}:s})})},this.taskTimeoutMs);this.taskTimeouts.set(n,i),r.postMessage({...e.request,taskId:n})}}async terminate(){this.shuttingDown=!0;let e=new Error(We.POOL_TERMINATED);for(let n of this.taskTimeouts.values())clearTimeout(n);this.taskTimeouts.clear();for(let n of this.pendingTasks.values())n.reject(e);this.pendingTasks.clear();for(let n of this.taskQueue)n.reject(e);this.taskQueue=[],this.workerTasks.clear(),this.taskFilePaths.clear(),this.workerQueue=[];let r=this.workers;this.workers=[],await Promise.all(r.map(n=>n.terminate()))}async serializeBatch(e){let r=this.batchChain.then(e);return this.batchChain=r.then(()=>{},()=>{}),r}};var Ho=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,(tN.cpus().length||4)-1);await n.initialize(i);let s=u=>bs(u)??Cp.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:bs(u.file)}};else{let f=d.error??We.PARSE_FAILURE_NO_DETAIL;this.logger.warn(We.PARSE_FAILURE_RESULT,{file:u.file,error:f}),l[p]={outcome:"failed",failure:{file:u.file,hash:u.hash,error:f}}}}catch(d){let f=d instanceof ss||d instanceof Error?d.message:String(d);this.logger.error(We.PARSE_THREW,{file:u.file,error:f}),l[p]={outcome:"failed",failure:{file:u.file,hash:u.hash,error:f}}}});await Promise.all(c);for(let u of l)u.outcome==="parsed"?o.push(u.result):a.push(u.failure);return await n.terminate(),{parsed:o,failures:a}}};import*as as from"path";import*as et from"path";import*as gt from"fs";import*as Ko from"fs";import Bo from"path";function _n(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 Yr(t,e){let r=_n(t,e);if(!r||!Ko.existsSync(r))return null;try{return Ko.readFileSync(r,H)}catch{return null}}function nE(t){return t.replace(/\\"|"(?:\\"|[^"])*"|(\/\/.*|\/\*[\s\S]*?\*\/)/g,(e,r)=>r?"":e)}var rN="tsconfig.base.json",nN="pnpm-workspace.yaml",iN="index.js",sN="src",oN="index",$o="*",iE=".",sE=[".ts",".js",".tsx",".jsx",".py",".rs",".go",".java",".cpp",".cc",".c",".h",".hpp"],aN=["/index.ts","/index.js"],oE=".go",aE={TSCONFIG_PARSE_FAILED:"Failed to JSON-parse tsconfig.json",TSCONFIG_FILES_READ_FAILED:"Failed to read or parse tsconfig files"},Xu="*",lN="node:",cN=/^(@[^/]+\/[^/]+|[^/]+)/,ai=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(aE.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=nE(r);try{let i=JSON.parse(n);i.compilerOptions&&i.compilerOptions.paths&&(this.tsConfigPaths={...this.tsConfigPaths,...i.compilerOptions.paths})}catch(i){this.logger.debug(aE.TSCONFIG_PARSE_FAILED,{error:i instanceof Error?i.message:String(i)})}}mergeBaseTsConfigPaths(){let e=et.join(this.workspaceRoot,rN);if(!gt.existsSync(e))return;let r=gt.readFileSync(e,H),n=nE(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(oE)){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(oE)){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===Xu?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===Xu?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(lN))return!0;if(r.startsWith(iE))return!1;let n=cN.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($o,"")))}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===Xu?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(iE)){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($o,"");if(r.startsWith(s)){let o=r.slice(s.length);for(let a of i){let l=a.replace($o,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($o),i=(n>=0?e.slice(0,n):e).replace(/\/$/,""),s=_n(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=Yr(this.workspaceRoot,nN);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=Yr(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,sN,oN),s=this.findFileWithExtension(i);return s||this.findFileWithExtension(n)}resolveNodeModulesImport(e,r){try{let n=Yr(this.workspaceRoot,et.join(at,e,oe.PACKAGE_JSON));if(!n)return null;let i=JSON.parse(n),s=r||i.module||i.main||iN,o=et.posix.join(at,e,s);return _n(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=_n(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(sE.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(sE.map(o=>i+o));if(s)return s}return this.firstExisting(aN.map(i=>e+i))}};function Sn(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 os(t,e,r){return r?`${t}#${r}.${e}`:`${t}#${e}`}function uN(){return{total:0,resolved:0,selfDiscarded:0,unresolvable:0,external:0,unknownReceiver:0}}function dN(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 Wo=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 ai(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?Lr(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=Sn(o,os(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=Sn(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=Sn(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=uN();this.linkParsedResultRelations(e,r,c,u,s,o,p),p.total>0&&(a[c.file]=dN(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 h=this.resolveCallTarget(r,n,c,f),E=this.insertResolvedLink(e,h,c,p,s,l,i,o,a,u);if(!d)return;if(E==="linked"){d.resolved++;return}if(E==="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!==Pp?e?.get(r):void 0)??n}};var pN=new Set(["child_process","node:child_process"]),lE=new Set(["execFile","execFileSync","spawn","spawnSync","fork"]),cE=[".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs"],uE=/\.(?:js|jsx|mjs|cjs)$/,dE="*";function gN(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function fN(t){return[...(t.data.functions??[]).map(e=>e.name),...(t.data.classes??[]).map(e=>e.name),...(t.data.variables??[]).map(e=>e.name)]}var jo=class{base=new Wo;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 ai(e);for(let i of r)n.registerFile(i.file,i.data.imports??[],[],fN(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=Yr(r,i.file);if(!s)return;let o=e.graph.findNodeIdByName(i.file,i.file);if(o)for(let a of i.data.imports??[])pN.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 lE.has(e.originalName)&&e.originalName!==dE?[{api:e.originalName,localExpression:e.localName}]:e.originalName===dE?[...lE].map(r=>({api:r,localExpression:`${e.localName}.${r}`})):[]}extractLiteralProcessTargets(e,r,n){let i=gN(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(as.posix.normalize(as.posix.join(as.posix.dirname(e),i))),s.add(as.posix.normalize(i.replace(/^\//,"")));for(let o of s){if(n.has(o))return o;if(uE.test(o)){let a=o.replace(uE,"");for(let l of cE){let c=`${a}${l}`;if(n.has(c))return c}}else for(let a of cE){let l=`${o}${a}`;if(n.has(l))return l}}}insertLinkOnce(e,r,n,i){e.graph.getOutgoingRelations(r).some(o=>o.id===n&&o.linkType===i)||e.graph.insertLink({sourceNodeId:r,targetNodeId:n,linkType:i})}};import*as ls from"path";var mN="impact.dynamic-dependencies.v1",pE=64,hN=new Set([".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs"]);function fE(t){return`${mN}:${t}`}function gE(t){return t!==void 0&&/[A-Za-z0-9_$]/.test(t)}function EN(t,e,r){let n=e+1;for(;n<t.length;){if(t[n]==="\\"){n+=2;continue}if(t[n]===r)return n+1;n++}return t.length}function _N(t,e){let r=t.indexOf(`
134
- `,e+2);return r===-1?t.length:r+1}function SN(t,e){let r=t.indexOf("*/",e+2);return r===-1?t.length:r+2}function mE(t,e){let r=t[e],n=t[e+1];if(r==="/"&&n==="/")return _N(t,e);if(r==="/"&&n==="*")return SN(t,e);if(r==="'"||r==='"'||r==="`")return EN(t,e,r)}function TN(t,e){let r=1,n=e+1;for(;n<t.length;){let i=mE(t,n);if(i!==void 0){n=i;continue}if(t[n]==="("&&r++,t[n]===")"&&(r--,r===0))return n;n++}}function AN(t,e){let r=t.slice(0,e),n=r.split(`
133
+ `).map(e=>e.trim()).filter(Boolean).map(e=>JSON.parse(e)):[]}var Xs=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=cr(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,ey);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,zg.posix.join(S.GRAPH_DIR_NAME,S.NODES_JSONL_NAME)),this.git.readFileAtRef(e,s,zg.posix.join(S.GRAPH_DIR_NAME,S.EDGES_JSONL_NAME))]),l=ny(o),c=iy(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 ic(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>=ty&&r<n*ry)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(()=>ic(this.git,e,r,n,this.logger))}};var qu=kl($u(),1),eE=kl(Jh(),1);import Xh from"path";import Zh from"fs/promises";import GC from"crypto";var Ae={PACKAGE_JSON_TYPESCRIPT:"package.json:typescript",PACKAGE_JSON_REACT:"package.json:react",PACKAGE_JSON_VUE:"package.json:vue",PACKAGE_JSON_NEXT:"package.json:next",PACKAGE_JSON_EXPRESS:"package.json:express",PACKAGE_JSON_DRIZZLE_ORM:"package.json:drizzle-orm",PACKAGE_JSON_TAILWINDCSS:"package.json:tailwindcss",PACKAGE_JSON_JEST:"package.json:jest",PACKAGE_JSON_VITEST:"package.json:vitest",PACKAGE_JSON_PG:"package.json:pg",PACKAGE_JSON_WORKSPACES:"package.json:workspaces",CARGO_BASE:"cargo:base",CARGO_TOKIO:"cargo:tokio",CARGO_ACTIX:"cargo:actix",CARGO_SERDE:"cargo:serde",CARGO_TAURI:"cargo:tauri",PYTHON_BASE:"python:base",PYTHON_DJANGO:"python:django",PYTHON_FASTAPI:"python:fastapi",PYTHON_PANDAS:"python:pandas",GO_BASE:"go:base",GO_GIN:"go:gin",TSCONFIG_STRICT:"tsconfig:strict",VITE_PRESENCE:"vite:presence",DRIZZLE_PRESENCE:"drizzle:presence",TAURI_PRESENCE:"tauri:presence"},oe={PACKAGE_JSON:"package.json",CARGO_TOML:"Cargo.toml",PYPROJECT_TOML:"pyproject.toml",REQUIREMENTS_TXT:"requirements.txt",GO_MOD:"go.mod",TSCONFIG_JSON:"tsconfig.json",JSCONFIG_JSON:"jsconfig.json"},Kr={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"},Nt={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"},bo=[`${at}/**`,".git/**","dist/**","build/**"],qh=[at,"dist","build","docs","test","tests","scripts"],ts="src",Qh=[ts,"lib","app"];var xC=".gitignore",wo=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(Nt.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(Nt.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=>Gn(a)),this.logger.debug(Nt.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(Nt.GIT_OPS_FAILED_FALLBACK,{error:s instanceof Error?s.message:String(s)}),null}}async discoverViaGlobFallback(e,r){this.logger.debug(Nt.GIT_UNAVAILABLE_FALLBACK);let n=(0,eE.default)();try{let c=await Zh.readFile(Xh.join(e,xC),H);n.add(c)}catch{this.logger.debug(Nt.NO_GITIGNORE_FOUND)}let i=[...bo,`${Ee}/**`],[s,o]=await Promise.all([(0,qu.default)(`**/*.{${Bl().join(",")}}`,{cwd:e,ignore:i,absolute:!1}),(0,qu.default)(`**/{${Array.from(Hl).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(Nt.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 Zh.readFile(Xh.join(n.workspaceRoot,e),H);let s=r||GC.createHash(Jt).update(i).digest("hex");return{code:i,hash:s}}catch{return null}}};var rE=kl($u(),1);import UC from"path";import HC from"fs/promises";function ko(t){return e=>e===t}function Qu(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 oi(t,e,r){return{id:t,matchesFile:e,detect:()=>r}}var Ut=ko(oe.PACKAGE_JSON),rs=ko(oe.CARGO_TOML),Fo=t=>t===oe.PYPROJECT_TOML||t===oe.REQUIREMENTS_TXT,tE=ko(oe.GO_MOD),BC=ko(oe.TSCONFIG_JSON),KC=[Be(Ae.PACKAGE_JSON_TYPESCRIPT,Ut,Ge.PACKAGE_JSON_TYPESCRIPT,[lr.TYPESCRIPT]),Be(Ae.PACKAGE_JSON_REACT,Ut,Ge.PACKAGE_JSON_REACT,[lr.REACT,se.FRONTEND]),Be(Ae.PACKAGE_JSON_VUE,Ut,Ge.PACKAGE_JSON_VUE,[lr.VUE,se.FRONTEND]),Be(Ae.PACKAGE_JSON_NEXT,Ut,Ge.PACKAGE_JSON_NEXT,[se.NEXTJS,se.FRONTEND,se.SSR]),Be(Ae.PACKAGE_JSON_EXPRESS,Ut,Ge.PACKAGE_JSON_EXPRESS,[lr.EXPRESS,se.BACKEND]),Be(Ae.PACKAGE_JSON_DRIZZLE_ORM,Ut,Ge.PACKAGE_JSON_DRIZZLE_ORM,[se.DRIZZLE,se.DATABASE]),Be(Ae.PACKAGE_JSON_TAILWINDCSS,Ut,Ge.PACKAGE_JSON_TAILWINDCSS,[se.TAILWINDCSS,se.CSS]),Be(Ae.PACKAGE_JSON_JEST,Ut,Ge.PACKAGE_JSON_JEST,[se.JEST,se.TESTING]),Be(Ae.PACKAGE_JSON_VITEST,Ut,Ge.PACKAGE_JSON_VITEST,[se.VITEST,se.TESTING]),Be(Ae.PACKAGE_JSON_PG,Ut,Ge.PACKAGE_JSON_PG,[se.POSTGRES,se.DATABASE]),Be(Ae.PACKAGE_JSON_WORKSPACES,Ut,Ge.PACKAGE_JSON_WORKSPACES,[se.MONOREPO]),oi(Ae.CARGO_BASE,rs,{projectType:ht.RUST,tags:[ht.RUST]}),Be(Ae.CARGO_TOKIO,rs,Ge.CARGO_TOKIO,[se.TOKIO,se.ASYNC]),Be(Ae.CARGO_ACTIX,rs,Ge.CARGO_ACTIX,[se.ACTIX,se.BACKEND]),Be(Ae.CARGO_SERDE,rs,Ge.CARGO_SERDE,[se.SERDE]),Be(Ae.CARGO_TAURI,rs,Ge.CARGO_TAURI,[se.TAURI,se.DESKTOP]),oi(Ae.PYTHON_BASE,Fo,{projectType:ht.PYTHON,tags:[ht.PYTHON]}),Be(Ae.PYTHON_DJANGO,Fo,Ge.PYTHON_DJANGO,[se.DJANGO,se.BACKEND]),Be(Ae.PYTHON_FASTAPI,Fo,Ge.PYTHON_FASTAPI,[se.FASTAPI,se.BACKEND]),Be(Ae.PYTHON_PANDAS,Fo,Ge.PYTHON_PANDAS,[se.PANDAS,se.DATA]),oi(Ae.GO_BASE,tE,{projectType:ht.GO,tags:[ht.GO]}),Be(Ae.GO_GIN,tE,Ge.GO_GIN,[se.GIN,se.BACKEND]),{id:Ae.TSCONFIG_STRICT,matchesFile:BC,detect:t=>/"strict"\s*:\s*true/.test(t)?{tags:[se.STRICT_TS]}:null},oi(Ae.VITE_PRESENCE,Qu(Kr.VITE_CONFIG),{tags:[se.VITE,se.BUILD_TOOL]}),oi(Ae.DRIZZLE_PRESENCE,Qu(Kr.DRIZZLE_CONFIG),{tags:[se.DRIZZLE,se.DATABASE]}),oi(Ae.TAURI_PRESENCE,Qu(Kr.TAURI_CONF),{tags:[se.TAURI,se.DESKTOP]})],$C=[`**/${oe.PACKAGE_JSON}`,`**/${oe.CARGO_TOML}`,`**/${oe.PYPROJECT_TOML}`,`**/${oe.REQUIREMENTS_TXT}`,`**/${oe.GO_MOD}`,`**/${oe.TSCONFIG_JSON}`,`**/${Kr.VITE_CONFIG}.*`,`**/${Kr.DRIZZLE_CONFIG}.*`,`**/${Kr.WEBPACK_CONFIG}.*`,`**/${Kr.TAURI_CONF}.*`],YC=[...bo,"target/**","venv/**",".venv/**","**/fixtures/**","**/__fixtures__/**","**/test-data/**"],Mo=class{constructor(e=he()){this.logger=e}logger;async scanConfigs(e){let r=ht.UNKNOWN,n=new Set;try{let i=await(0,rE.default)($C,{cwd:e,ignore:YC,absolute:!0,deep:3});r=await this.scanAllConfigFiles(i,n),r=this.resolveJavascriptFallback(r,n)}catch(i){this.logger.warn(Nt.CONFIG_SCAN_FAILED,{error:i?.message??String(i)})}return r===ht.UNKNOWN&&(r=ht.GENERIC),n.size===0&&n.add(Cp),{projectType:r,tags:Array.from(n)}}async scanAllConfigFiles(e,r){let n=ht.UNKNOWN;for(let i of e){let s=await this.readConfigFileContent(i);if(s===null)continue;let o=UC.basename(i),a=this.applyDetectionRules(o,s,r);a&&(n=a)}return n}async readConfigFileContent(e){try{return await HC.readFile(e,H)}catch{return null}}applyDetectionRules(e,r,n){let i;for(let s of KC){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(lr.TYPESCRIPT)||r.has(lr.REACT)||r.has(lr.EXPRESS)||r.has(lr.VUE))&&e===ht.UNKNOWN?ht.JAVASCRIPT:e}};var Xu=".",WC=["packages","artifacts","crates"],jC="domain:";function VC(t){return t[0]===ts&&t.length>1||t.length>3&&WC.includes(t[0])&&t[2]===ts?t[1]:(t.length>2&&t[1]===ts,t[0])}function zC(t){let e=t.split("/");if(e.length<=1||e[0].startsWith(Xu)||qh.includes(e[0]))return null;let r=VC(e);return r.includes(Xu)||r.startsWith(Xu)||Qh.includes(r)?null:r}var Go=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(`${jC}${a}`);o.length>0&&this.logger.debug(Nt.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=zC(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 tN from"os";import{Worker as JC}from"worker_threads";import*as is from"path";import*as $r from"fs";import{fileURLToPath as qC}from"url";import QC from"crypto";var XC=qC(import.meta.url),nE=is.dirname(XC),xo={FORMAT:"esm",PLATFORM:"node",TARGET:"node20",EXTERNAL_TREE_SITTER:"web-tree-sitter"},ns={EVAL:"--eval",PRINT:"--print",IMPORT:"--import",TSX_LOADER:"tsx"};async function ZC(t,e){let r=await import("esbuild"),n=`${e}.${process.pid}.tmp`;await r.build({entryPoints:[t],outfile:n,bundle:!0,format:xo.FORMAT,platform:xo.PLATFORM,target:xo.TARGET,external:[xo.EXTERNAL_TREE_SITTER]}),$r.renameSync(n,e)}function eN(t,e){return $r.existsSync(e)?$r.existsSync(t)?$r.statSync(t).mtimeMs>$r.statSync(e).mtimeMs:!1:!0}var ss=class extends Error{constructor(r,n){super(We.workerCrashWhileParsing(r??We.UNKNOWN_FILE)+(n instanceof Error?n.message:String(n)));this.filePath=r;this.cause=n;this.name=vp}filePath;cause},Uo=class{constructor(e=he(),r=3e4,n,i){this.logger=e;this.taskTimeoutMs=r;this.cache=n;this.workerScriptPathOverride=i;this.ipcLogRouter=new ap(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 JC(this.wPath,this.workerOptions);e.on("message",n=>{if(this.ipcLogRouter.handleMessage(n))return;this.workerTasks.delete(e);let i=this.taskTimeouts.get(n.taskId);i&&(clearTimeout(i),this.taskTimeouts.delete(n.taskId));let s=this.pendingTasks.get(n.taskId);s&&(this.pendingTasks.delete(n.taskId),this.taskFilePaths.delete(n.taskId),s.resolve(n)),this.workerQueue.push(e),this.processQueue()});let r=n=>{let i=this.timedOutWorkers.delete(e),s=this.workerTasks.get(e),o=s?this.taskFilePaths.get(s):void 0;if(this.shuttingDown?this.logger.debug(We.WORKER_EXITED_DURING_SHUTDOWN,{taskId:s,filePath:o}):this.logger.error(We.WORKER_CRASHED_EXITED,{taskId:s,filePath:o,hadInFlightTask:!!s,error:n instanceof Error?{message:n.message,name:n.name}:n}),s){let a=this.taskTimeouts.get(s);a&&(clearTimeout(a),this.taskTimeouts.delete(s));let l=this.pendingTasks.get(s);l&&(l.reject(new ss(o,i?new Error(We.taskTimedOutAfterMs(s,this.taskTimeoutMs)):n||new Error(We.WORKER_EXITED_UNEXPECTEDLY))),this.pendingTasks.delete(s)),this.workerTasks.delete(e),this.taskFilePaths.delete(s)}this.workers=this.workers.filter(a=>a!==e),this.workerQueue=this.workerQueue.filter(a=>a!==e),this.shuttingDown||this.enqueueSpawn()};return e.on("error",r),e.on("exit",n=>{n!==0&&r(new Error(We.workerExitedWithCode(n)))}),this.workers.push(e),this.workerQueue.push(e),this.processQueue(),e}async initialize(e=2){if(this.workers.length>0)return;if(this.shuttingDown=!1,this.workerScriptPathOverride){this.wPath=this.workerScriptPathOverride,this.workerOptions.execArgv=process.execArgv.filter(n=>!n.includes(ns.EVAL)&&!n.includes(ns.PRINT)),this.workerOptions.execArgv.some(n=>n.includes(ns.TSX_LOADER))||this.workerOptions.execArgv.push(ns.IMPORT,ns.TSX_LOADER);for(let n=0;n<e;n++)await this.enqueueSpawn();return}this.wPath=is.resolve(nE,"./ast-worker.js");let r=is.resolve(nE,"./ast-worker.ts");eN(r,this.wPath)&&await ZC(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=QC.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(We.PARSE_CACHE_HIT,{contentHash:i,cacheLookupTimeMs:Number(l.toFixed(2))}),r(a);return}}let s=Date.now();this.taskQueue.push({request:e,resolve:o=>{if(this.cache){this.cache.set(i,o);let a=this.cache.metrics;if(a.hits+a.misses>0&&(a.hits+a.misses)%100===0){let l=a.hits/(a.hits+a.misses)*100,c=Date.now()-s;this.logger.info(We.CACHE_METRICS_AND_QUEUE_PERFORMANCE,{hitRate:Number(l.toFixed(2)),queueWaitTimeMs:c,...a})}}r(o)},reject:n}),this.processQueue()})}processQueue(){for(;this.taskQueue.length>0&&this.workerQueue.length>0;){let e=this.taskQueue.shift(),r=this.workerQueue.shift(),n=String(++this.taskCounter);this.pendingTasks.set(n,{resolve:e.resolve,reject:e.reject}),this.workerTasks.set(r,n),this.taskFilePaths.set(n,e.request.filePath);let i=setTimeout(()=>{this.taskTimeouts.delete(n),this.timedOutWorkers.add(r),this.logger.error(We.TASK_TIMED_OUT_TERMINATING,{taskId:n,filePath:this.taskFilePaths.get(n),taskTimeoutMs:this.taskTimeoutMs}),r.terminate().catch(s=>{this.logger.warn(We.WORKER_TERMINATE_FAILED,{taskId:n,filePath:this.taskFilePaths.get(n),error:s instanceof Error?{message:s.message,name:s.name}:s})})},this.taskTimeoutMs);this.taskTimeouts.set(n,i),r.postMessage({...e.request,taskId:n})}}async terminate(){this.shuttingDown=!0;let e=new Error(We.POOL_TERMINATED);for(let n of this.taskTimeouts.values())clearTimeout(n);this.taskTimeouts.clear();for(let n of this.pendingTasks.values())n.reject(e);this.pendingTasks.clear();for(let n of this.taskQueue)n.reject(e);this.taskQueue=[],this.workerTasks.clear(),this.taskFilePaths.clear(),this.workerQueue=[];let r=this.workers;this.workers=[],await Promise.all(r.map(n=>n.terminate()))}async serializeBatch(e){let r=this.batchChain.then(e);return this.batchChain=r.then(()=>{},()=>{}),r}};var Ho=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,(tN.cpus().length||4)-1);await n.initialize(i);let s=u=>bs(u)??Np.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:bs(u.file)}};else{let f=d.error??We.PARSE_FAILURE_NO_DETAIL;this.logger.warn(We.PARSE_FAILURE_RESULT,{file:u.file,error:f}),l[p]={outcome:"failed",failure:{file:u.file,hash:u.hash,error:f}}}}catch(d){let f=d instanceof ss||d instanceof Error?d.message:String(d);this.logger.error(We.PARSE_THREW,{file:u.file,error:f}),l[p]={outcome:"failed",failure:{file:u.file,hash:u.hash,error:f}}}});await Promise.all(c);for(let u of l)u.outcome==="parsed"?o.push(u.result):a.push(u.failure);return await n.terminate(),{parsed:o,failures:a}}};import*as as from"path";import*as et from"path";import*as gt from"fs";import*as Ko from"fs";import Bo from"path";function _n(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 Yr(t,e){let r=_n(t,e);if(!r||!Ko.existsSync(r))return null;try{return Ko.readFileSync(r,H)}catch{return null}}function iE(t){return t.replace(/\\"|"(?:\\"|[^"])*"|(\/\/.*|\/\*[\s\S]*?\*\/)/g,(e,r)=>r?"":e)}var rN="tsconfig.base.json",nN="pnpm-workspace.yaml",iN="index.js",sN="src",oN="index",$o="*",sE=".",oE=[".ts",".js",".tsx",".jsx",".py",".rs",".go",".java",".cpp",".cc",".c",".h",".hpp"],aN=["/index.ts","/index.js"],aE=".go",lE={TSCONFIG_PARSE_FAILED:"Failed to JSON-parse tsconfig.json",TSCONFIG_FILES_READ_FAILED:"Failed to read or parse tsconfig files"},Zu="*",lN="node:",cN=/^(@[^/]+\/[^/]+|[^/]+)/,ai=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(lE.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=iE(r);try{let i=JSON.parse(n);i.compilerOptions&&i.compilerOptions.paths&&(this.tsConfigPaths={...this.tsConfigPaths,...i.compilerOptions.paths})}catch(i){this.logger.debug(lE.TSCONFIG_PARSE_FAILED,{error:i instanceof Error?i.message:String(i)})}}mergeBaseTsConfigPaths(){let e=et.join(this.workspaceRoot,rN);if(!gt.existsSync(e))return;let r=gt.readFileSync(e,H),n=iE(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(aE)){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(aE)){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===Zu?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===Zu?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(lN))return!0;if(r.startsWith(sE))return!1;let n=cN.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($o,"")))}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===Zu?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(sE)){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($o,"");if(r.startsWith(s)){let o=r.slice(s.length);for(let a of i){let l=a.replace($o,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($o),i=(n>=0?e.slice(0,n):e).replace(/\/$/,""),s=_n(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=Yr(this.workspaceRoot,nN);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=Yr(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,sN,oN),s=this.findFileWithExtension(i);return s||this.findFileWithExtension(n)}resolveNodeModulesImport(e,r){try{let n=Yr(this.workspaceRoot,et.join(at,e,oe.PACKAGE_JSON));if(!n)return null;let i=JSON.parse(n),s=r||i.module||i.main||iN,o=et.posix.join(at,e,s);return _n(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=_n(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(oE.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(oE.map(o=>i+o));if(s)return s}return this.firstExisting(aN.map(i=>e+i))}};function Sn(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 os(t,e,r){return r?`${t}#${r}.${e}`:`${t}#${e}`}function uN(){return{total:0,resolved:0,selfDiscarded:0,unresolvable:0,external:0,unknownReceiver:0}}function dN(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 Wo=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 ai(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?Lr(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=Sn(o,os(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=Sn(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=Sn(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=uN();this.linkParsedResultRelations(e,r,c,u,s,o,p),p.total>0&&(a[c.file]=dN(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 h=this.resolveCallTarget(r,n,c,f),E=this.insertResolvedLink(e,h,c,p,s,l,i,o,a,u);if(!d)return;if(E==="linked"){d.resolved++;return}if(E==="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!==Dp?e?.get(r):void 0)??n}};var pN=new Set(["child_process","node:child_process"]),cE=new Set(["execFile","execFileSync","spawn","spawnSync","fork"]),uE=[".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs"],dE=/\.(?:js|jsx|mjs|cjs)$/,pE="*";function gN(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function fN(t){return[...(t.data.functions??[]).map(e=>e.name),...(t.data.classes??[]).map(e=>e.name),...(t.data.variables??[]).map(e=>e.name)]}var jo=class{base=new Wo;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 ai(e);for(let i of r)n.registerFile(i.file,i.data.imports??[],[],fN(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=Yr(r,i.file);if(!s)return;let o=e.graph.findNodeIdByName(i.file,i.file);if(o)for(let a of i.data.imports??[])pN.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 cE.has(e.originalName)&&e.originalName!==pE?[{api:e.originalName,localExpression:e.localName}]:e.originalName===pE?[...cE].map(r=>({api:r,localExpression:`${e.localName}.${r}`})):[]}extractLiteralProcessTargets(e,r,n){let i=gN(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(as.posix.normalize(as.posix.join(as.posix.dirname(e),i))),s.add(as.posix.normalize(i.replace(/^\//,"")));for(let o of s){if(n.has(o))return o;if(dE.test(o)){let a=o.replace(dE,"");for(let l of uE){let c=`${a}${l}`;if(n.has(c))return c}}else for(let a of uE){let l=`${o}${a}`;if(n.has(l))return l}}}insertLinkOnce(e,r,n,i){e.graph.getOutgoingRelations(r).some(o=>o.id===n&&o.linkType===i)||e.graph.insertLink({sourceNodeId:r,targetNodeId:n,linkType:i})}};import*as ls from"path";var mN="impact.dynamic-dependencies.v1",gE=64,hN=new Set([".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs"]);function mE(t){return`${mN}:${t}`}function fE(t){return t!==void 0&&/[A-Za-z0-9_$]/.test(t)}function EN(t,e,r){let n=e+1;for(;n<t.length;){if(t[n]==="\\"){n+=2;continue}if(t[n]===r)return n+1;n++}return t.length}function _N(t,e){let r=t.indexOf(`
134
+ `,e+2);return r===-1?t.length:r+1}function SN(t,e){let r=t.indexOf("*/",e+2);return r===-1?t.length:r+2}function hE(t,e){let r=t[e],n=t[e+1];if(r==="/"&&n==="/")return _N(t,e);if(r==="/"&&n==="*")return SN(t,e);if(r==="'"||r==='"'||r==="`")return EN(t,e,r)}function TN(t,e){let r=1,n=e+1;for(;n<t.length;){let i=hE(t,n);if(i!==void 0){n=i;continue}if(t[n]==="("&&r++,t[n]===")"&&(r--,r===0))return n;n++}}function AN(t,e){let r=t.slice(0,e),n=r.split(`
135
135
  `).length-1,i=r.lastIndexOf(`
136
- `);return{line:n,column:e-i-1}}function RN(t){if(t.length<2)return{interpolated:!1};let e=t[0];if((e==="'"||e==='"')&&t.at(-1)===e)return{literalPrefix:t.slice(1,-1),interpolated:!1};if(e!=="`"||t.at(-1)!=="`")return{interpolated:!1};let r=t.slice(1,-1),n=r.indexOf("${");if(n<0)return{literalPrefix:r,interpolated:!1};let i=r.lastIndexOf("}");return{literalPrefix:r.slice(0,n),literalSuffix:i>=n?r.slice(i+1):void 0,interpolated:!0}}function yN(t,e){return!t.startsWith("import",e)||gE(t[e-1])?!1:!gE(t[e+6])}function ON(t,e){if(!yN(t,e))return;let r=e+6;for(;/\s/.test(t[r]??"");)r++;if(t[r]!=="(")return;let n=TN(t,r);if(n===void 0)return;let i=t.slice(r+1,n),s=i.length-i.trimStart().length,o=i.trim();if(o.length===0)return;let a=r+1+s,l=AN(t,a);return{item:{expression:o,startLine:l.line,startColumn:l.column,...RN(o)},nextIndex:n+1}}function IN(t){let e=[],r=0;for(;r<t.length;){let n=mE(t,r);if(n!==void 0){r=n;continue}let i=ON(t,r);if(i){e.push(i.item),r=i.nextIndex;continue}r++}return e}function li(t){return t.replaceAll("\\","/")}function LN(t){let e=ls.posix.extname(t);return hN.has(e)?t.slice(0,-e.length):t}function hE(t,e){if(!e?.startsWith("."))return;let r=ls.posix.dirname(li(t)),n=ls.posix.normalize(ls.posix.join(r,li(e)));return e.endsWith("/")&&!n.endsWith("/")?`${n}/`:n}function EE(t,e,r){let n=hE(t,e.literalPrefix);if(!n)return!e.literalPrefix;let i=li(r),s=LN(i);return e.interpolated?s.startsWith(n)&&s.endsWith(e.literalSuffix??""):i===n||s===n}function CN(t,e,r){if(!hE(t,e.literalPrefix))return{status:yr.UNRESOLVED,candidatePaths:[],reason:e.literalPrefix?"non-local-dynamic-specifier":"unbounded-runtime-expression"};let i=r.filter(s=>EE(t,e,s)).sort((s,o)=>s.localeCompare(o));return i.length===0?{status:yr.UNRESOLVED,candidatePaths:[],reason:"no-known-local-candidate"}:i.length>pE?{status:yr.UNRESOLVED,candidatePaths:[],reason:`candidate-set-exceeds-${pE}`}:{status:yr.BOUNDED,candidatePaths:i,reason:e.interpolated?"bounded-local-pattern":"literal-dynamic-import"}}function _E(t){return t.sort((e,r)=>e.sourceFile.localeCompare(r.sourceFile)||e.startLine-r.startLine||e.startColumn-r.startColumn||e.expression.localeCompare(r.expression))}function SE(t,e){let r=t.meta.get(fE(e));if(!r)return[];try{let n=JSON.parse(r);return Array.isArray(n)?_E(n):[]}catch{return[]}}function TE(t,e,r,n){let i=new Set(n.map(l=>l.file)),s=SE(t,r).filter(l=>!i.has(l.sourceFile)),o=t.files.getAllHashes().map(({filePath:l})=>li(l)).sort((l,c)=>l.localeCompare(c)),a=[];for(let l of n){if(!/\.[cm]?[jt]sx?$/.test(l.file))continue;let c=Yr(e,l.file);if(c!==null)for(let u of IN(c))a.push({sourceFile:li(l.file),kind:lp.DYNAMIC_IMPORT,expression:u.expression,startLine:u.startLine,startColumn:u.startColumn,...u.literalPrefix!==void 0?{literalPrefix:u.literalPrefix}:{},...u.literalSuffix!==void 0?{literalSuffix:u.literalSuffix}:{},...CN(l.file,u,o)})}t.meta.set(fE(r),JSON.stringify(_E([...s,...a])))}function AE(t,e){let r=t.projects.getFirst()?.id,n=t.graph.findNodeByName(e);if(!r||!n?.filePath)return[];let i=li(n.filePath);return SE(t,r).filter(s=>s.candidatePaths.includes(i)?!0:s.status!==yr.UNRESOLVED?!1:EE(s.sourceFile,{literalPrefix:s.literalPrefix,literalSuffix:s.literalSuffix,interpolated:s.expression.startsWith("`")&&s.expression.includes("${")},i))}var Vo=class{base=new jo;async persist(e){let r=await this.base.persist(e);return await e.store.withWriteLock(()=>e.store.withTransaction(()=>{TE(e.store,e.workspaceRoot,e.projectId,e.parsedResults)})),r}};import ci from"fs/promises";import ds from"path";import{tracingChannel as NN,channel as PN}from"diagnostics_channel";var je=PN("lru-cache:metrics"),cs=NN("lru-cache"),DN=typeof performance=="object"&&performance&&typeof performance.now=="function"?performance:Date,Zu=()=>je.hasSubscribers||cs.hasSubscribers,yE=new Set,RE=typeof process=="object"&&process?process:{},vN=(t,e,r,n)=>{typeof RE.emitWarning=="function"?RE.emitWarning(t,e,r,n):console.error(`[${r}] ${e}: ${t}`)},bN=t=>!yE.has(t),Wr=t=>!!t&&t===Math.floor(t)&&t>0&&isFinite(t),OE=t=>Wr(t)?t<=Math.pow(2,8)?Uint8Array:t<=Math.pow(2,16)?Uint16Array:t<=Math.pow(2,32)?Uint32Array:t<=Number.MAX_SAFE_INTEGER?zo:null:null,zo=class extends Array{constructor(t){super(t),this.fill(0)}},wN=class us{heap;length;static#t=!1;static create(e){let r=OE(e);if(!r)return[];us.#t=!0;let n=new us(e,r);return us.#t=!1,n}constructor(e,r){if(!us.#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]}},IE=class LE{#t;#s;#c;#P;#E;#M;#k;#_;get perf(){return this.#_}ttl;ttlResolution;ttlAutopurge;updateAgeOnGet;updateAgeOnHas;allowStale;noDisposeOnSet;noUpdateTTL;maxEntrySize;sizeCalculation;noDeleteOnFetchRejection;noDeleteOnStaleGet;allowStaleOnFetchAbort;allowStaleOnFetchRejection;ignoreFetchAbort;backgroundFetchSize;#o;#S;#i;#n;#e;#d;#g;#u;#a;#T;#l;#A;#R;#f;#m;#y;#G;#p;#D;static unsafeExposeInternals(e){return{starts:e.#R,ttls:e.#f,autopurgeTimers:e.#m,sizes:e.#A,keyMap:e.#i,keyList:e.#n,valList:e.#e,next:e.#d,prev:e.#g,get head(){return e.#u},get tail(){return e.#a},free:e.#T,isBackgroundFetch:r=>e.#r(r),backgroundFetch:(r,n,i,s)=>e.#H(r,n,i,s),moveToTail:r=>e.#F(r),indexes:r=>e.#O(r),rindexes:r=>e.#I(r),isStale:r=>e.#h(r)}}get max(){return this.#t}get maxSize(){return this.#s}get calculatedSize(){return this.#S}get size(){return this.#o}get fetchMethod(){return this.#M}get memoMethod(){return this.#k}get dispose(){return this.#c}get onInsert(){return this.#P}get disposeAfter(){return this.#E}constructor(e){let{max:r=0,ttl:n,ttlResolution:i=1,ttlAutopurge:s,updateAgeOnGet:o,updateAgeOnHas:a,allowStale:l,dispose:c,onInsert:u,disposeAfter:p,noDisposeOnSet:d,noUpdateTTL:f,maxSize:h=0,maxEntrySize:E=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.#_=ne??DN,r!==0&&!Wr(r))throw new TypeError("max option must be a nonnegative integer");let pe=r?OE(r):Array;if(!pe)throw new Error("invalid max value: "+r);if(this.#t=r,this.#s=h,this.maxEntrySize=E||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=wN.create(r),this.#o=0,this.#S=0,typeof c=="function"&&(this.#c=c),typeof u=="function"&&(this.#P=u),typeof p=="function"?(this.#E=p,this.#l=[]):(this.#E=void 0,this.#l=void 0),this.#y=!!this.#c,this.#D=!!this.#P,this.#p=!!this.#E,this.noDisposeOnSet=!!d,this.noUpdateTTL=!!f,this.noDeleteOnFetchRejection=!!b,this.allowStaleOnFetchRejection=!!J,this.allowStaleOnFetchAbort=!!$,this.ignoreFetchAbort=!!te,this.maxEntrySize!==0){if(this.#s!==0&&!Wr(this.#s))throw new TypeError("maxSize must be a positive integer if specified");if(!Wr(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=Wr(i)||i===0?i:1,this.ttlAutopurge=!!s,this.ttl=n||0,this.ttl){if(!Wr(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";bN(N)&&(yE.add(N),vN("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.","UnboundedCacheWarning",N,LE))}}getRemainingTTL(e){return this.#i.has(e)?1/0:0}#B(){let e=new zo(this.#t),r=new zo(this.#t);this.#f=e,this.#R=r;let n=this.ttlAutopurge?Array.from({length:this.#t}):void 0;this.#m=n,this.#K=(l,c,u=this.#_.now())=>{r[l]=c!==0?u:0,e[l]=c,i(l,c)},this.#v=l=>{r[l]=e[l]!==0?this.#_.now():0,i(l,e[l])};let i=this.ttlAutopurge?(l,c)=>{if(n?.[l]&&(clearTimeout(n[l]),n[l]=void 0),c&&c!==0&&n){let u=setTimeout(()=>{this.#h(l)?(this.#L(this.#n[l],"expire"),n[l]=void 0):i(l,a(l))},c+1);u.unref&&u.unref(),n[l]=u}}:()=>{};this.#C=(l,c)=>{if(e[c]){let u=e[c],p=r[c];if(!u||!p)return;l.ttl=u,l.start=p,l.now=s||o();let d=l.now-p;l.remainingTTL=u-d}};let s=0,o=()=>{let l=this.#_.now();if(this.ttlResolution>0){s=l;let c=setTimeout(()=>s=0,this.ttlResolution);c.unref&&c.unref()}return l};this.getRemainingTTL=l=>{let c=this.#i.get(l);return c===void 0?0:a(c)};let a=l=>{let c=e[l],u=r[l];if(!c||!u)return 1/0;let p=(s||o())-u;return c-p};this.#h=l=>{let c=r[l],u=e[l];return!!u&&!!c&&(s||o())-c>u}}#v=()=>{};#C=()=>{};#K=()=>{};#h=()=>!1;#z(){let e=new zo(this.#t);this.#S=0,this.#A=e,this.#b=r=>{this.#S-=e[r],e[r]=0},this.#$=(r,n,i,s)=>{if(!Wr(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),!Wr(i))throw new TypeError("sizeCalculation return invalid (expect positive integer)")}else throw new TypeError("invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set.")}return i},this.#x=(r,n,i)=>{if(e[r]=n,this.#s){let s=this.#s-e[r];for(;this.#S>s;)this.#U(!0)}this.#S+=e[r],i&&(i.entrySize=n,i.totalCalculatedSize=this.#S)}}#b=e=>{};#x=(e,r,n)=>{};#$=(e,r,n,i)=>{if(n||i)throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache");return 0};*#O({allowStale:e=this.allowStale}={}){if(this.#o)for(let r=this.#a;this.#Y(r)&&((e||!this.#h(r))&&(yield r),r!==this.#u);)r=this.#g[r]}*#I({allowStale:e=this.allowStale}={}){if(this.#o)for(let r=this.#u;this.#Y(r)&&((e||!this.#h(r))&&(yield r),r!==this.#a);)r=this.#d[r]}#Y(e){return e!==void 0&&this.#i.get(this.#n[e])===e}*entries(){for(let e of this.#O())this.#e[e]!==void 0&&this.#n[e]!==void 0&&!this.#r(this.#e[e])&&(yield[this.#n[e],this.#e[e]])}*rentries(){for(let e of this.#I())this.#e[e]!==void 0&&this.#n[e]!==void 0&&!this.#r(this.#e[e])&&(yield[this.#n[e],this.#e[e]])}*keys(){for(let e of this.#O()){let r=this.#n[e];r!==void 0&&!this.#r(this.#e[e])&&(yield r)}}*rkeys(){for(let e of this.#I()){let r=this.#n[e];r!==void 0&&!this.#r(this.#e[e])&&(yield r)}}*values(){for(let e of this.#O())this.#e[e]!==void 0&&!this.#r(this.#e[e])&&(yield this.#e[e])}*rvalues(){for(let e of this.#I())this.#e[e]!==void 0&&!this.#r(this.#e[e])&&(yield this.#e[e])}[Symbol.iterator](){return this.entries()}[Symbol.toStringTag]="LRUCache";find(e,r={}){for(let n of this.#O()){let i=this.#e[n],s=this.#r(i)?i.__staleWhileFetching:i;if(s!==void 0&&e(s,this.#n[n],this))return this.#w(this.#n[n],r)}}forEach(e,r=this){for(let n of this.#O()){let i=this.#e[n],s=this.#r(i)?i.__staleWhileFetching:i;s!==void 0&&e.call(r,s,this.#n[n],this)}}rforEach(e,r=this){for(let n of this.#I()){let i=this.#e[n],s=this.#r(i)?i.__staleWhileFetching:i;s!==void 0&&e.call(r,s,this.#n[n],this)}}purgeStale(){let e=!1;for(let r of this.#I({allowStale:!0}))this.#h(r)&&(this.#L(this.#n[r],"expire"),e=!0);return e}info(e){let r=this.#i.get(e);if(r===void 0)return;let n=this.#e[r],i=this.#r(n)?n.__staleWhileFetching:n;if(i===void 0)return;let s={value:i};if(this.#f&&this.#R){let o=this.#f[r],a=this.#R[r];if(o&&a){let l=o-(this.#_.now()-a);s.ttl=l,s.start=Date.now()}}return this.#A&&(s.size=this.#A[r]),s}dump(){let e=[];for(let r of this.#O({allowStale:!0})){let n=this.#n[r],i=this.#e[r],s=this.#r(i)?i.__staleWhileFetching:i;if(s===void 0||n===void 0)continue;let o={value:s};if(this.#f&&this.#R){o.ttl=this.#f[r];let a=this.#_.now()-this.#R[r];o.start=Math.floor(Date.now()-a)}this.#A&&(o.size=this.#A[r]),e.unshift([n,o])}return e}load(e){this.clear();for(let[r,n]of e){if(n.start){let i=Date.now()-n.start;n.start=this.#_.now()-i}this.#N(r,n.value,n)}}set(e,r,n={}){let{status:i=je.hasSubscribers?{}:void 0}=n;n.status=i,i&&(i.op="set",i.key=e,r!==void 0&&(i.value=r),i.cache=this);let s=this.#N(e,r,n);return i&&je.hasSubscribers&&je.publish(i),s}#N(e,r,n,i){let{ttl:s=this.ttl,start:o,noDisposeOnSet:a=this.noDisposeOnSet,sizeCalculation:l=this.sizeCalculation,status:c}=n,u=this.#r(r);if(r===void 0)return c&&(c.set="deleted"),this.delete(e),this;let{noUpdateTTL:p=this.noUpdateTTL}=n;c&&!u&&(c.value=r);let d=this.#$(e,r,n.size||0,l,c);if(this.maxEntrySize&&d>this.maxEntrySize)return this.#L(e,"set"),c&&(c.set="miss",c.maxEntrySizeExceeded=!0),this;let f=this.#o===0?void 0:this.#i.get(e);if(f===void 0)f=this.#o===0?this.#a:this.#T.length!==0?this.#T.pop():this.#o===this.#t?this.#U(!1):this.#o,this.#n[f]=e,this.#e[f]=r,this.#i.set(e,f),this.#d[this.#a]=f,this.#g[f]=this.#a,this.#a=f,this.#o++,this.#x(f,d,c),c&&(c.set="add"),p=!1,this.#D&&!u&&this.#P?.(r,e,"add");else{this.#F(f);let h=this.#e[f];if(r!==h){if(!a)if(this.#r(h)){h!==i&&h.__abortController.abort(new Error("replaced"));let{__staleWhileFetching:E}=h;E!==void 0&&E!==r&&(this.#y&&this.#c?.(E,e,"set"),this.#p&&this.#l?.push([E,e,"set"]))}else this.#y&&this.#c?.(h,e,"set"),this.#p&&this.#l?.push([h,e,"set"]);if(this.#b(f),this.#x(f,d,c),this.#e[f]=r,!u){let E=h&&this.#r(h)?h.__staleWhileFetching:h,I=E===void 0?"add":r!==E?"replace":"update";c&&(c.set=I,E!==void 0&&(c.oldValue=E)),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 h=this.#l,E;for(;E=h?.shift();)this.#E?.(...E)}return this}pop(){try{for(;this.#o;){let e=this.#e[this.#u];if(this.#U(!0),this.#r(e)){if(e.__staleWhileFetching)return e.__staleWhileFetching}else if(e!==void 0)return e}}finally{if(this.#p&&this.#l){let e=this.#l,r;for(;r=e?.shift();)this.#E?.(...r)}}}#U(e){let r=this.#u,n=this.#n[r],i=this.#e[r],s=this.#r(i);s&&i.__abortController.abort(new Error("evicted"));let o=s?i.__staleWhileFetching:i;return(this.#y||this.#p)&&o!==void 0&&(this.#y&&this.#c?.(o,n,"evict"),this.#p&&this.#l?.push([o,n,"evict"])),this.#b(r),this.#m?.[r]&&(clearTimeout(this.#m[r]),this.#m[r]=void 0),e&&(this.#n[r]=void 0,this.#e[r]=void 0,this.#T.push(r)),this.#o===1?(this.#u=this.#a=0,this.#T.length=0):this.#u=this.#d[r],this.#i.delete(n),this.#o--,r}has(e,r={}){let{status:n=je.hasSubscribers?{}:void 0}=r;r.status=n,n&&(n.op="has",n.key=e,n.cache=this);let i=this.#J(e,r);return je.hasSubscribers&&je.publish(n),i}#J(e,r={}){let{updateAgeOnHas:n=this.updateAgeOnHas,status:i}=r,s=this.#i.get(e);if(s!==void 0){let o=this.#e[s];if(this.#r(o)&&o.__staleWhileFetching===void 0)return!1;if(this.#h(s))i&&(i.has="stale",this.#C(i,s));else return n&&this.#v(s),i&&(i.has="hit",this.#C(i,s)),!0}else i&&(i.has="miss");return!1}peek(e,r={}){let{status:n=Zu()?{}:void 0}=r;n&&(n.op="peek",n.key=e,n.cache=this),r.status=n;let i=this.#q(e,r);return je.hasSubscribers&&je.publish(n),i}#q(e,r){let{status:n,allowStale:i=this.allowStale}=r,s=this.#i.get(e);if(s===void 0||!i&&this.#h(s)){n&&(n.peek=s===void 0?"miss":"stale");return}let o=this.#e[s],a=this.#r(o)?o.__staleWhileFetching:o;return n&&(a!==void 0?(n.peek="hit",n.value=a):n.peek="miss"),a}#H(e,r,n,i){let s=r===void 0?void 0:this.#e[r];if(this.#r(s))return s;let o=new AbortController,{signal:a}=n;a?.addEventListener("abort",()=>o.abort(a.reason),{signal:o.signal});let l={signal:o.signal,options:n,context:i},c=(E,I=!1)=>{let{aborted:C}=o.signal,L=n.ignoreFetchAbort&&E!==void 0,b=n.ignoreFetchAbort||!!(n.allowStaleOnFetchAbort&&E!==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)&&(E===void 0?Q.__staleWhileFetching!==void 0?this.#e[r]=Q.__staleWhileFetching:this.#L(e,"fetch"):(n.status&&(n.status.fetchUpdated=!0),this.#N(e,E,l.options,Q))),E},u=E=>(n.status&&(n.status.fetchRejected=!0,n.status.fetchError=E),p(E,!1)),p=(E,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 E},d=(E,I)=>{let C=this.#M?.(e,s,l);o.signal.addEventListener("abort",()=>{(!n.ignoreFetchAbort||n.allowStaleOnFetchAbort)&&(E(void 0),n.allowStaleOnFetchAbort&&(E=L=>c(L,!0)))}),C&&C instanceof Promise?C.then(L=>E(L===void 0?void 0:L),I):C!==void 0&&E(C)};n.status&&(n.status.fetchDispatched=!0);let f=new Promise(d).then(c,u),h=Object.assign(f,{__abortController:o,__staleWhileFetching:s,__returned:void 0});return r===void 0?(this.#N(e,h,{...l.options,status:void 0}),r=this.#i.get(e)):this.#e[r]=h,h}#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=cs.hasSubscribers,{status:i=Zu()?{}: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,cs.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:h=this.allowStaleOnFetchAbort,context:E,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:h,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,E);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.#h(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,E),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=cs.hasSubscribers,{status:i=Zu()?{}: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,cs.tracePromise(()=>s,i).catch(()=>{})),s}async#Q(e,r={}){let n=await this.#W(e,r);if(n===void 0)throw new Error("fetch() returned undefined");return n}memo(e,r={}){let{status:n=je.hasSubscribers?{}:void 0}=r;r.status=n,n&&(n.op="memo",n.key=e,r.context&&(n.context=r.context),n.cache=this);let i=this.#X(e,r);return n&&(n.value=i),je.hasSubscribers&&je.publish(n),i}#X(e,r={}){let n=this.#k;if(!n)throw new Error("no memoMethod provided to constructor");let{context:i,status:s,forceRefresh:o,...a}=r;s&&o&&(s.forceRefresh=!0);let l=this.#w(e,a),c=o||l===void 0;if(s&&(s.memo=c?"miss":"hit",c||(s.value=l)),!c)return l;let u=n(e,l,{options:a,context:i});return s&&(s.value=u),this.#N(e,u,a),u}get(e,r={}){let{status:n=je.hasSubscribers?{}:void 0}=r;r.status=n,n&&(n.op="get",n.key=e,n.cache=this);let i=this.#w(e,r);return n&&(i!==void 0&&(n.value=i),je.hasSubscribers&&je.publish(n)),i}#w(e,r={}){let{allowStale:n=this.allowStale,updateAgeOnGet:i=this.updateAgeOnGet,noDeleteOnStaleGet:s=this.noDeleteOnStaleGet,status:o}=r,a=this.#i.get(e);if(a===void 0){o&&(o.get="miss");return}let l=this.#e[a],c=this.#r(l);return o&&this.#C(o,a),this.#h(a)?c?(o&&(o.get="stale-fetching"),n&&l.__staleWhileFetching!==void 0?(o&&(o.returnedStale=!0),l.__staleWhileFetching):void 0):(s||this.#L(e,"expire"),o&&(o.get="stale"),n?(o&&(o.returnedStale=!0),l):void 0):(o&&(o.get=c?"fetching":"hit"),this.#F(a),i&&this.#v(a),c?l.__staleWhileFetching:l)}#j(e,r){this.#g[r]=e,this.#d[e]=r}#F(e){e!==this.#a&&(e===this.#u?this.#u=this.#d[e]:this.#j(this.#g[e],this.#d[e]),this.#j(this.#a,e),this.#a=e)}delete(e){return this.#L(e,"delete")}#L(e,r){je.hasSubscribers&&je.publish({op:"delete",delete:r,key:e,cache:this});let n=!1;if(this.#o!==0){let i=this.#i.get(e);if(i!==void 0)if(this.#m?.[i]&&(clearTimeout(this.#m[i]),this.#m[i]=void 0),n=!0,this.#o===1)this.#V(r);else{this.#b(i);let s=this.#e[i];if(this.#r(s)?s.__abortController.abort(new Error("deleted")):(this.#y||this.#p)&&(this.#y&&this.#c?.(s,e,r),this.#p&&this.#l?.push([s,e,r])),this.#i.delete(e),this.#n[i]=void 0,this.#e[i]=void 0,i===this.#a)this.#a=this.#g[i];else if(i===this.#u)this.#u=this.#d[i];else{let o=this.#g[i];this.#d[o]=this.#d[i];let a=this.#d[i];this.#g[a]=this.#g[i]}this.#o--,this.#T.push(i)}}if(this.#p&&this.#l?.length){let i=this.#l,s;for(;s=i?.shift();)this.#E?.(...s)}return n}clear(){return this.#V("delete")}#V(e){for(let r of this.#I({allowStale:!0})){let n=this.#e[r];if(this.#r(n))n.__abortController.abort(new Error("deleted"));else{let i=this.#n[r];this.#y&&this.#c?.(n,i,e),this.#p&&this.#l?.push([n,i,e])}}if(this.#i.clear(),this.#e.fill(void 0),this.#n.fill(void 0),this.#f&&this.#R){this.#f.fill(0),this.#R.fill(0);for(let r of this.#m??[])r!==void 0&&clearTimeout(r);this.#m?.fill(void 0)}if(this.#A&&this.#A.fill(0),this.#u=0,this.#a=0,this.#T.length=0,this.#S=0,this.#o=0,this.#p&&this.#l){let r=this.#l,n;for(;n=r?.shift();)this.#E?.(...n)}}};var FN="tmp",mr={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"},Jo=class{constructor(e,r=he(),n=1024*1024*1024,i=14400*1e3,s=1800*1e3){this.logger=r;let o=ds.resolve(e);this.tempDir=ds.join(o,Ee,FN),this.ttlMs=i,this.lruCache=new IE({max:1e4,maxSize:n,sizeCalculation:a=>a.sizeBytes,ttl:i,allowStale:!1})}logger;tempDir;lruCache;cleanupInterval=null;concurrencyLimit=cn(5);ttlMs;async initialize(){try{await ci.mkdir(this.tempDir,{recursive:!0});let e=ds.dirname(ds.dirname(this.tempDir)),[r,n]=await Promise.all([ci.realpath(e),ci.realpath(this.tempDir)]);if(!n.startsWith(r+ds.sep))throw new _(R.FS_PATH_TRAVERSAL,`Resolved temp directory "${n}" escapes workspace root "${r}" \u2014 possible path traversal via symlink`);this.logger.info(mr.INITIALIZED,{tempDir:this.tempDir}),this.startCleanupSchedule(1800*1e3)}catch(e){throw e instanceof _||this.logger.error(mr.INIT_FAILED,{error:e instanceof Error?e.message:String(e)}),e}}async trackFile(e){return this.concurrencyLimit(async()=>{try{let r=await ci.stat(e),n={filePath:e,createdAt:Date.now(),lastAccessedAt:Date.now(),sizeBytes:r.size};this.lruCache.set(e,n),this.logger.debug(mr.FILE_TRACKED,{filePath:e,sizeBytes:r.size})}catch(r){this.logger.warn(mr.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 ci.readFile(e,H)}catch(r){return this.logger.warn(mr.ACCESS_FAILED,{filePath:e,error:r instanceof Error?r.message:String(r)}),null}})}async removeFileSync(e){try{await ci.unlink(e),this.logger.debug(mr.FILE_REMOVED,{filePath:e})}catch(r){if(r?.code!==Fs)throw r}}startCleanupSchedule(e){this.cleanupInterval=setInterval(()=>{this.cleanup().catch(r=>{this.logger.error(mr.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(mr.CLEANUP_COMPLETED,{removedCount:r.length,cacheSize:this.lruCache.size})}catch(e){this.logger.error(mr.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 qo={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}`},MN=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"]),kN=5,GN=25;function xN(t){return Math.max(t*kN,GN)}function CE(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 Qo=class{constructor(e=he()){this.logger=e}logger;extractKeywords(e){let r=e.split(/[^\w./-]+/).map(n=>n.trim()).filter(n=>n.length>0&&!MN.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=Mi(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(qo.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=xN(n),c=()=>o.map(f=>new Set(e.fts.searchL2Nodes([f],l).map(h=>h.id))),u=()=>o.map(f=>new Set(e.fts.searchL3Nodes([f],l).map(h=>h.id)));CE(e.fts.searchL2Nodes(o,l),o.length>1?c():[]).slice(0,n).forEach((f,h)=>s({layer:on.L2,id:f.id,title:f.name,content:f.description,score:.9-h*.01,matchType:"keyword"})),CE(e.fts.searchL3Nodes(o,l),o.length>1?u():[]).slice(0,n).forEach((f,h)=>s({layer:on.L3,id:f.id,title:f.title,content:f.content,score:.85-h*.01,matchType:"keyword"}))}let a=r.trim();if(a){let l=e.graph.findNodeByName(a);l&&(s({layer:on.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:on.L2,id:u.id,title:u.name,content:qo.linkedTo(l.name),score:.7-p*.01,matchType:"neighbor"})))}return this.logger.debug(qo.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===on.L2),o=i.filter(c=>c.layer===on.L3),a=null;try{a=this.getContext(e,r)}catch(c){this.logger.debug(qo.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 Xo=class extends qn{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 Zo=class extends Xo{getBlastRadius(e,r){let n=super.getBlastRadius(e,r);if(!n)return;let i=e.graph.findNodeByName(r)?.filePath;if(!i)return n;let s=new Set(n.map(o=>o.name));return n.push(...this.resolveDynamicCandidateEntries(e,r,i,s)),n}getDynamicEvidence(e,r){return AE(e,r)}resolveDynamicCandidateEntries(e,r,n,i){let s=[];for(let o of this.getDynamicEvidence(e,r)){let a=this.buildDynamicCandidateEntry(e,o,n,i);a&&(s.push(a),i.add(a.name))}return s}buildDynamicCandidateEntry(e,r,n,i){if(!this.isCandidateForTarget(r,n)||r.sourceFile===n||i.has(r.sourceFile))return;let s=e.graph.findNodeByName(r.sourceFile);if(!s||s.name!==r.sourceFile)return;let o=e.l3.getByL2NodeId(s.id),a=o.length>0?o.map(l=>({title:l.title,content:l.content})):void 0;return{name:s.name,type:s.type,edgeSource:kn.DYNAMIC_CANDIDATE,dynamicEvidence:r,...a?{why:a}:{}}}isCandidateForTarget(e,r){return e.status===yr.BOUNDED&&e.candidatePaths.includes(r)}};var BN=2e3,KN="(ungrouped)",$N=".",ea=class{build(e,r={}){let n=e.l2Rows.map(b=>({id:b.id,name:b.name,filePath:ZN(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:eP(b.source_commits)})),o=e.tagRows,a=YN(n),l=WN(i),c=jN(o),u=r.maxNodes??BN,p=n.length+s.length,d=VN(r,p,u),f=d?QN(n,i,s,l,a):qN(n,i,s,l,a),h=f.nodes,E=f.links,I=new Set(h.map(b=>b.id)),C=E.filter(b=>I.has(b.source)&&I.has(b.target)),L=zN(h,c);return JN(h,C),{topologyVersion:2,generatedAt:new Date().toISOString(),workspaceRoot:e.workspaceRoot,collapsed:d,nodes:h,links:C,groups:L,stats:{nodeCount:h.length,linkCount:C.length,groupCount:L.length,foldedLinkCount:f.foldedLinkCount??0}}}};function YN(t){let e=new Map;for(let r of t)e.set(String(r.id),r.filePath);return e}function WN(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 jN(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 VN(t,e,r){return t.collapse===xl.FILE||t.collapse!==xl.SYMBOL&&e>r}function zN(t,e){let r=new Map,n=[];for(let i of t){let s=XN(i.filePath),o=r.get(s);if(o===void 0&&(o=n.length,r.set(s,o),n.push({id:o,label:s,source:cp.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 JN(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 qN(t,e,r,n,i){let s=t.map(a=>({id:It(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:It(a.sourceNodeId),target:It(a.targetNodeId),linkType:a.linkType,confidence:1,commitSha:a.commitSha,diffSummary:a.diffSummary}));return NE(s,o,r,i),{nodes:s,links:o,foldedLinkCount:0}}function QN(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:It(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:It(p),target:It(d),linkType:u.linkType,confidence:1,commitSha:u.commitSha,diffSummary:u.diffSummary}))}return NE(o,a,r,i),{nodes:o,links:a,foldedLinkCount:c}}function NE(t,e,r,n){let i=new Set(t.map(s=>s.id));for(let s of r){let o=It(s.l2NodeId);i.has(o)&&(t.push({id:ec(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:ec(s.id),target:o,linkType:de.DECISION,confidence:1}))}}function XN(t){if(!t)return KN;let r=t.split("\\").join("/").split("/").filter(Boolean);return r.length<=1?$N:r.slice(0,Math.min(2,r.length-1)).join("/")}function ZN(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 eP(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 DE from"path";import*as vE from"fs";import{Parser as PE,Language as tP}from"web-tree-sitter";var ta={DETECTOR_FAILED:"SemanticDiffDetector failed; treating file as unclassified for Tier B",NO_GRAMMAR_AVAILABLE:"No tree-sitter grammar available for semantic-diff classification; changed file will still be re-parsed",GRAMMAR_LOAD_FAILED:"Failed to load tree-sitter grammar for semantic-diff classification"};var ra=class{constructor(e=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(ta.DETECTOR_FAILED,{filePath:r,error:a instanceof Error?a.message:String(a)}),[]}}async getDetectorForFile(e){let r=await this.getRegistry(),n=DE.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??=PE.init(),await this.parserInitPromise;let{wasmPath:o,attemptedPaths:a}=wp(i.wasm_file);if(!vE.existsSync(o)){this.logger.debug(ta.NO_GRAMMAR_AVAILABLE,{filePath:e,wasmFile:i.wasm_file,attemptedPaths:a}),this.detectors.set(i.wasm_file,null);return}try{let l=await tP.load(o),c=new PE,u=new bp(c,l);return this.detectors.set(i.wasm_file,u),u}catch(l){this.logger.warn(ta.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??=vp(),this.registryPromise}};import FE from"fs";import na from"path";import{execFile as rP}from"child_process";import{promisify as nP}from"util";var td=nP(rP),iP=[".cmd",".CMD",".exe",""];function ed(t,e){return e?{...t,env:e}:t}function sP(t,e){let r=na.join(t,at,".bin"),n=process.platform===Ir?iP.map(i=>`${e}${i}`):[e];for(let i of n){let s=na.join(r,i);if(FE.existsSync(s))return s}}function tr(t,e,r){let n=e.buildEnv?.();if(r?.binary)return ed({command:r.binary,args:r.args??e.defaultArgs,locallyResolved:!0,fromUserOverride:!0},n);let i=e.binaryName??e.packageName,s=sP(t,i);if(s)return ed({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 ed({command:"npx",args:o,locallyResolved:!1},n)}var bE=5e3,oP=5e3;async function aP(t){try{if(process.platform===Ir){let{stdout:n}=await td("where",[t],{timeout:bE});return n.split(/\r?\n/).map(i=>i.trim()).find(i=>i.length>0)}let{stdout:e}=await td("sh",["-c",`command -v ${t}`],{timeout:bE}),r=e.trim();return r.length>0?r:void 0}catch{return}}function lP(t,e){if(!e)return;let r=process.platform===Ir?[`${t}.exe`,t]:[t];for(let n of e)for(let i of r){let s=na.join(n,i);if(FE.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 aP(t.binaryName);if(r)return{command:r,args:t.defaultArgs,locallyResolved:!0};let n=lP(t.binaryName,t.extraCandidateDirs);return n?{command:n,args:t.defaultArgs,locallyResolved:!0}:{command:t.binaryName,args:t.defaultArgs,locallyResolved:!1}}function wE(t){let e=t.trim().replace(/\\/g,"/");return na.posix.basename(e).replace(/\.exe$/i,"").toLowerCase()}async function ME(t,e=oP,r){if(r&&!r.some(n=>wE(n)===wE(t)))return!1;try{return await td(t,["--version"],{timeout:e}),!0}catch{return!1}}var Pt={PACKAGE_NAME:"typescript-language-server",NPX_COMMAND:"npx",NPX_NO_INSTALL_FLAG:"--no-install",STDIO_ARG:"--stdio",VERSION_FLAG:"--version"},ia=8192,ui={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 cP=["PATH","HOME","USERPROFILE","PATHEXT","SYSTEMROOT","COMSPEC","LANG","LC_ALL","TERM"];function kE(t=process.env){let e={};for(let r of cP){let n=t[r];n!==void 0&&(e[r]=n)}return e}var sa=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 rr=new sa;function uP(t){let e=kE(t.env),r=t.env.NODE_OPTIONS??"";if(r.includes("--max-old-space-size"))return e.NODE_OPTIONS=r,e;let n=`--max-old-space-size=${ia}`;return e.NODE_OPTIONS=r?`${r} ${n}`:n,e}function oa(t,e,r=rr){return tr(t,{packageName:Pt.PACKAGE_NAME,defaultArgs:[Pt.STDIO_ARG],buildEnv:()=>uP(r)},e)}import aa from"fs";import la from"path";import{execFile as _P}from"child_process";import{promisify as SP}from"util";import dP from"path";import{execFile as pP}from"child_process";import{promisify as gP}from"util";var fP=gP(pP),mP=new Set([".cmd",".bat",".ps1"]),GE=new Set(["npx"]);function jr(t){return process.platform!=="win32"?!1:mP.has(dP.extname(t).toLowerCase())||GE.has(t.toLowerCase())}var hP=/[%!"\r\n]/;function rd(t){let e=t.match(hP);if(e)throw new Error(`Unsafe character ${JSON.stringify(e[0])} in Windows shell-wrapped LSP token`);return`"${t}"`}var EP=5e3;async function nd(t,e){try{let{stdout:r}=await fP("where",[t],{timeout:EP,env:e});return r.split(/\r?\n/).map(i=>i.trim()).find(i=>i.length>0)??t}catch{return t}}function id(t){return GE.has(t.toLowerCase())}async function di(t,e,r){return[id(t)?await nd(t,r):t,...e].map(rd).join(" ")}var xE=SP(_P),UE=5e3,TP=[oe.TSCONFIG_JSON,oe.JSCONFIG_JSON];function AP(t){return aa.existsSync(la.join(t,at))}function RP(t){return!!(TP.some(r=>aa.existsSync(la.join(t,r)))||aa.existsSync(la.join(t,"tsconfig.base.json"))||aa.existsSync(la.join(t,"src",oe.TSCONFIG_JSON)))}async function yP(t){let e=[Pt.NPX_NO_INSTALL_FLAG,Pt.PACKAGE_NAME,Pt.VERSION_FLAG];try{if(jr(Pt.NPX_COMMAND)){let r=await di(Pt.NPX_COMMAND,e,void 0);await xE(r,[],{cwd:t,timeout:UE,shell:!0})}else await xE(Pt.NPX_COMMAND,e,{cwd:t,timeout:UE});return!0}catch{return!1}}async function HE(t,e){let r=AP(t),n=RP(t);if(!r)return{nodeModulesPresent:r,tsconfigResolvable:n,lspBinaryResolvable:!1,ready:!1,reason:ui.nodeModulesMissing};if(!n)return{nodeModulesPresent:r,tsconfigResolvable:n,lspBinaryResolvable:!1,ready:!1,reason:ui.tsconfigMissing};let s=oa(t,e).locallyResolved?!0:await yP(t);return s?{nodeModulesPresent:r,tsconfigResolvable:n,lspBinaryResolvable:s,ready:!0}:{nodeModulesPresent:r,tsconfigResolvable:n,lspBinaryResolvable:s,ready:!1,reason:ui.binaryUnresolvable}}import HP from"fs/promises";import sd from"os";import pi from"path";import{pathToFileURL as zE,fileURLToPath as JE}from"url";import{spawn as BE}from"child_process";var Tn={CONTENT_LENGTH_HEADER_PREFIX:"Content-Length: ",HEADER_BODY_SEPARATOR:`\r
136
+ `);return{line:n,column:e-i-1}}function RN(t){if(t.length<2)return{interpolated:!1};let e=t[0];if((e==="'"||e==='"')&&t.at(-1)===e)return{literalPrefix:t.slice(1,-1),interpolated:!1};if(e!=="`"||t.at(-1)!=="`")return{interpolated:!1};let r=t.slice(1,-1),n=r.indexOf("${");if(n<0)return{literalPrefix:r,interpolated:!1};let i=r.lastIndexOf("}");return{literalPrefix:r.slice(0,n),literalSuffix:i>=n?r.slice(i+1):void 0,interpolated:!0}}function yN(t,e){return!t.startsWith("import",e)||fE(t[e-1])?!1:!fE(t[e+6])}function ON(t,e){if(!yN(t,e))return;let r=e+6;for(;/\s/.test(t[r]??"");)r++;if(t[r]!=="(")return;let n=TN(t,r);if(n===void 0)return;let i=t.slice(r+1,n),s=i.length-i.trimStart().length,o=i.trim();if(o.length===0)return;let a=r+1+s,l=AN(t,a);return{item:{expression:o,startLine:l.line,startColumn:l.column,...RN(o)},nextIndex:n+1}}function IN(t){let e=[],r=0;for(;r<t.length;){let n=hE(t,r);if(n!==void 0){r=n;continue}let i=ON(t,r);if(i){e.push(i.item),r=i.nextIndex;continue}r++}return e}function li(t){return t.replaceAll("\\","/")}function LN(t){let e=ls.posix.extname(t);return hN.has(e)?t.slice(0,-e.length):t}function EE(t,e){if(!e?.startsWith("."))return;let r=ls.posix.dirname(li(t)),n=ls.posix.normalize(ls.posix.join(r,li(e)));return e.endsWith("/")&&!n.endsWith("/")?`${n}/`:n}function _E(t,e,r){let n=EE(t,e.literalPrefix);if(!n)return!e.literalPrefix;let i=li(r),s=LN(i);return e.interpolated?s.startsWith(n)&&s.endsWith(e.literalSuffix??""):i===n||s===n}function CN(t,e,r){if(!EE(t,e.literalPrefix))return{status:yr.UNRESOLVED,candidatePaths:[],reason:e.literalPrefix?"non-local-dynamic-specifier":"unbounded-runtime-expression"};let i=r.filter(s=>_E(t,e,s)).sort((s,o)=>s.localeCompare(o));return i.length===0?{status:yr.UNRESOLVED,candidatePaths:[],reason:"no-known-local-candidate"}:i.length>gE?{status:yr.UNRESOLVED,candidatePaths:[],reason:`candidate-set-exceeds-${gE}`}:{status:yr.BOUNDED,candidatePaths:i,reason:e.interpolated?"bounded-local-pattern":"literal-dynamic-import"}}function SE(t){return t.sort((e,r)=>e.sourceFile.localeCompare(r.sourceFile)||e.startLine-r.startLine||e.startColumn-r.startColumn||e.expression.localeCompare(r.expression))}function TE(t,e){let r=t.meta.get(mE(e));if(!r)return[];try{let n=JSON.parse(r);return Array.isArray(n)?SE(n):[]}catch{return[]}}function AE(t,e,r,n){let i=new Set(n.map(l=>l.file)),s=TE(t,r).filter(l=>!i.has(l.sourceFile)),o=t.files.getAllHashes().map(({filePath:l})=>li(l)).sort((l,c)=>l.localeCompare(c)),a=[];for(let l of n){if(!/\.[cm]?[jt]sx?$/.test(l.file))continue;let c=Yr(e,l.file);if(c!==null)for(let u of IN(c))a.push({sourceFile:li(l.file),kind:cp.DYNAMIC_IMPORT,expression:u.expression,startLine:u.startLine,startColumn:u.startColumn,...u.literalPrefix!==void 0?{literalPrefix:u.literalPrefix}:{},...u.literalSuffix!==void 0?{literalSuffix:u.literalSuffix}:{},...CN(l.file,u,o)})}t.meta.set(mE(r),JSON.stringify(SE([...s,...a])))}function RE(t,e){let r=t.projects.getFirst()?.id,n=t.graph.findNodeByName(e);if(!r||!n?.filePath)return[];let i=li(n.filePath);return TE(t,r).filter(s=>s.candidatePaths.includes(i)?!0:s.status!==yr.UNRESOLVED?!1:_E(s.sourceFile,{literalPrefix:s.literalPrefix,literalSuffix:s.literalSuffix,interpolated:s.expression.startsWith("`")&&s.expression.includes("${")},i))}var Vo=class{base=new jo;async persist(e){let r=await this.base.persist(e);return await e.store.withWriteLock(()=>e.store.withTransaction(()=>{AE(e.store,e.workspaceRoot,e.projectId,e.parsedResults)})),r}};import ci from"fs/promises";import ds from"path";import{tracingChannel as NN,channel as PN}from"diagnostics_channel";var je=PN("lru-cache:metrics"),cs=NN("lru-cache"),DN=typeof performance=="object"&&performance&&typeof performance.now=="function"?performance:Date,ed=()=>je.hasSubscribers||cs.hasSubscribers,OE=new Set,yE=typeof process=="object"&&process?process:{},vN=(t,e,r,n)=>{typeof yE.emitWarning=="function"?yE.emitWarning(t,e,r,n):console.error(`[${r}] ${e}: ${t}`)},bN=t=>!OE.has(t),Wr=t=>!!t&&t===Math.floor(t)&&t>0&&isFinite(t),IE=t=>Wr(t)?t<=Math.pow(2,8)?Uint8Array:t<=Math.pow(2,16)?Uint16Array:t<=Math.pow(2,32)?Uint32Array:t<=Number.MAX_SAFE_INTEGER?zo:null:null,zo=class extends Array{constructor(t){super(t),this.fill(0)}},wN=class us{heap;length;static#t=!1;static create(e){let r=IE(e);if(!r)return[];us.#t=!0;let n=new us(e,r);return us.#t=!1,n}constructor(e,r){if(!us.#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]}},LE=class CE{#t;#s;#c;#P;#E;#M;#k;#_;get perf(){return this.#_}ttl;ttlResolution;ttlAutopurge;updateAgeOnGet;updateAgeOnHas;allowStale;noDisposeOnSet;noUpdateTTL;maxEntrySize;sizeCalculation;noDeleteOnFetchRejection;noDeleteOnStaleGet;allowStaleOnFetchAbort;allowStaleOnFetchRejection;ignoreFetchAbort;backgroundFetchSize;#o;#S;#i;#n;#e;#d;#g;#u;#a;#T;#l;#A;#R;#f;#m;#y;#G;#p;#D;static unsafeExposeInternals(e){return{starts:e.#R,ttls:e.#f,autopurgeTimers:e.#m,sizes:e.#A,keyMap:e.#i,keyList:e.#n,valList:e.#e,next:e.#d,prev:e.#g,get head(){return e.#u},get tail(){return e.#a},free:e.#T,isBackgroundFetch:r=>e.#r(r),backgroundFetch:(r,n,i,s)=>e.#H(r,n,i,s),moveToTail:r=>e.#F(r),indexes:r=>e.#O(r),rindexes:r=>e.#I(r),isStale:r=>e.#h(r)}}get max(){return this.#t}get maxSize(){return this.#s}get calculatedSize(){return this.#S}get size(){return this.#o}get fetchMethod(){return this.#M}get memoMethod(){return this.#k}get dispose(){return this.#c}get onInsert(){return this.#P}get disposeAfter(){return this.#E}constructor(e){let{max:r=0,ttl:n,ttlResolution:i=1,ttlAutopurge:s,updateAgeOnGet:o,updateAgeOnHas:a,allowStale:l,dispose:c,onInsert:u,disposeAfter:p,noDisposeOnSet:d,noUpdateTTL:f,maxSize:h=0,maxEntrySize:E=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.#_=ne??DN,r!==0&&!Wr(r))throw new TypeError("max option must be a nonnegative integer");let pe=r?IE(r):Array;if(!pe)throw new Error("invalid max value: "+r);if(this.#t=r,this.#s=h,this.maxEntrySize=E||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=wN.create(r),this.#o=0,this.#S=0,typeof c=="function"&&(this.#c=c),typeof u=="function"&&(this.#P=u),typeof p=="function"?(this.#E=p,this.#l=[]):(this.#E=void 0,this.#l=void 0),this.#y=!!this.#c,this.#D=!!this.#P,this.#p=!!this.#E,this.noDisposeOnSet=!!d,this.noUpdateTTL=!!f,this.noDeleteOnFetchRejection=!!b,this.allowStaleOnFetchRejection=!!J,this.allowStaleOnFetchAbort=!!$,this.ignoreFetchAbort=!!te,this.maxEntrySize!==0){if(this.#s!==0&&!Wr(this.#s))throw new TypeError("maxSize must be a positive integer if specified");if(!Wr(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=Wr(i)||i===0?i:1,this.ttlAutopurge=!!s,this.ttl=n||0,this.ttl){if(!Wr(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";bN(N)&&(OE.add(N),vN("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.","UnboundedCacheWarning",N,CE))}}getRemainingTTL(e){return this.#i.has(e)?1/0:0}#B(){let e=new zo(this.#t),r=new zo(this.#t);this.#f=e,this.#R=r;let n=this.ttlAutopurge?Array.from({length:this.#t}):void 0;this.#m=n,this.#K=(l,c,u=this.#_.now())=>{r[l]=c!==0?u:0,e[l]=c,i(l,c)},this.#v=l=>{r[l]=e[l]!==0?this.#_.now():0,i(l,e[l])};let i=this.ttlAutopurge?(l,c)=>{if(n?.[l]&&(clearTimeout(n[l]),n[l]=void 0),c&&c!==0&&n){let u=setTimeout(()=>{this.#h(l)?(this.#L(this.#n[l],"expire"),n[l]=void 0):i(l,a(l))},c+1);u.unref&&u.unref(),n[l]=u}}:()=>{};this.#C=(l,c)=>{if(e[c]){let u=e[c],p=r[c];if(!u||!p)return;l.ttl=u,l.start=p,l.now=s||o();let d=l.now-p;l.remainingTTL=u-d}};let s=0,o=()=>{let l=this.#_.now();if(this.ttlResolution>0){s=l;let c=setTimeout(()=>s=0,this.ttlResolution);c.unref&&c.unref()}return l};this.getRemainingTTL=l=>{let c=this.#i.get(l);return c===void 0?0:a(c)};let a=l=>{let c=e[l],u=r[l];if(!c||!u)return 1/0;let p=(s||o())-u;return c-p};this.#h=l=>{let c=r[l],u=e[l];return!!u&&!!c&&(s||o())-c>u}}#v=()=>{};#C=()=>{};#K=()=>{};#h=()=>!1;#z(){let e=new zo(this.#t);this.#S=0,this.#A=e,this.#b=r=>{this.#S-=e[r],e[r]=0},this.#$=(r,n,i,s)=>{if(!Wr(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),!Wr(i))throw new TypeError("sizeCalculation return invalid (expect positive integer)")}else throw new TypeError("invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set.")}return i},this.#x=(r,n,i)=>{if(e[r]=n,this.#s){let s=this.#s-e[r];for(;this.#S>s;)this.#U(!0)}this.#S+=e[r],i&&(i.entrySize=n,i.totalCalculatedSize=this.#S)}}#b=e=>{};#x=(e,r,n)=>{};#$=(e,r,n,i)=>{if(n||i)throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache");return 0};*#O({allowStale:e=this.allowStale}={}){if(this.#o)for(let r=this.#a;this.#Y(r)&&((e||!this.#h(r))&&(yield r),r!==this.#u);)r=this.#g[r]}*#I({allowStale:e=this.allowStale}={}){if(this.#o)for(let r=this.#u;this.#Y(r)&&((e||!this.#h(r))&&(yield r),r!==this.#a);)r=this.#d[r]}#Y(e){return e!==void 0&&this.#i.get(this.#n[e])===e}*entries(){for(let e of this.#O())this.#e[e]!==void 0&&this.#n[e]!==void 0&&!this.#r(this.#e[e])&&(yield[this.#n[e],this.#e[e]])}*rentries(){for(let e of this.#I())this.#e[e]!==void 0&&this.#n[e]!==void 0&&!this.#r(this.#e[e])&&(yield[this.#n[e],this.#e[e]])}*keys(){for(let e of this.#O()){let r=this.#n[e];r!==void 0&&!this.#r(this.#e[e])&&(yield r)}}*rkeys(){for(let e of this.#I()){let r=this.#n[e];r!==void 0&&!this.#r(this.#e[e])&&(yield r)}}*values(){for(let e of this.#O())this.#e[e]!==void 0&&!this.#r(this.#e[e])&&(yield this.#e[e])}*rvalues(){for(let e of this.#I())this.#e[e]!==void 0&&!this.#r(this.#e[e])&&(yield this.#e[e])}[Symbol.iterator](){return this.entries()}[Symbol.toStringTag]="LRUCache";find(e,r={}){for(let n of this.#O()){let i=this.#e[n],s=this.#r(i)?i.__staleWhileFetching:i;if(s!==void 0&&e(s,this.#n[n],this))return this.#w(this.#n[n],r)}}forEach(e,r=this){for(let n of this.#O()){let i=this.#e[n],s=this.#r(i)?i.__staleWhileFetching:i;s!==void 0&&e.call(r,s,this.#n[n],this)}}rforEach(e,r=this){for(let n of this.#I()){let i=this.#e[n],s=this.#r(i)?i.__staleWhileFetching:i;s!==void 0&&e.call(r,s,this.#n[n],this)}}purgeStale(){let e=!1;for(let r of this.#I({allowStale:!0}))this.#h(r)&&(this.#L(this.#n[r],"expire"),e=!0);return e}info(e){let r=this.#i.get(e);if(r===void 0)return;let n=this.#e[r],i=this.#r(n)?n.__staleWhileFetching:n;if(i===void 0)return;let s={value:i};if(this.#f&&this.#R){let o=this.#f[r],a=this.#R[r];if(o&&a){let l=o-(this.#_.now()-a);s.ttl=l,s.start=Date.now()}}return this.#A&&(s.size=this.#A[r]),s}dump(){let e=[];for(let r of this.#O({allowStale:!0})){let n=this.#n[r],i=this.#e[r],s=this.#r(i)?i.__staleWhileFetching:i;if(s===void 0||n===void 0)continue;let o={value:s};if(this.#f&&this.#R){o.ttl=this.#f[r];let a=this.#_.now()-this.#R[r];o.start=Math.floor(Date.now()-a)}this.#A&&(o.size=this.#A[r]),e.unshift([n,o])}return e}load(e){this.clear();for(let[r,n]of e){if(n.start){let i=Date.now()-n.start;n.start=this.#_.now()-i}this.#N(r,n.value,n)}}set(e,r,n={}){let{status:i=je.hasSubscribers?{}:void 0}=n;n.status=i,i&&(i.op="set",i.key=e,r!==void 0&&(i.value=r),i.cache=this);let s=this.#N(e,r,n);return i&&je.hasSubscribers&&je.publish(i),s}#N(e,r,n,i){let{ttl:s=this.ttl,start:o,noDisposeOnSet:a=this.noDisposeOnSet,sizeCalculation:l=this.sizeCalculation,status:c}=n,u=this.#r(r);if(r===void 0)return c&&(c.set="deleted"),this.delete(e),this;let{noUpdateTTL:p=this.noUpdateTTL}=n;c&&!u&&(c.value=r);let d=this.#$(e,r,n.size||0,l,c);if(this.maxEntrySize&&d>this.maxEntrySize)return this.#L(e,"set"),c&&(c.set="miss",c.maxEntrySizeExceeded=!0),this;let f=this.#o===0?void 0:this.#i.get(e);if(f===void 0)f=this.#o===0?this.#a:this.#T.length!==0?this.#T.pop():this.#o===this.#t?this.#U(!1):this.#o,this.#n[f]=e,this.#e[f]=r,this.#i.set(e,f),this.#d[this.#a]=f,this.#g[f]=this.#a,this.#a=f,this.#o++,this.#x(f,d,c),c&&(c.set="add"),p=!1,this.#D&&!u&&this.#P?.(r,e,"add");else{this.#F(f);let h=this.#e[f];if(r!==h){if(!a)if(this.#r(h)){h!==i&&h.__abortController.abort(new Error("replaced"));let{__staleWhileFetching:E}=h;E!==void 0&&E!==r&&(this.#y&&this.#c?.(E,e,"set"),this.#p&&this.#l?.push([E,e,"set"]))}else this.#y&&this.#c?.(h,e,"set"),this.#p&&this.#l?.push([h,e,"set"]);if(this.#b(f),this.#x(f,d,c),this.#e[f]=r,!u){let E=h&&this.#r(h)?h.__staleWhileFetching:h,I=E===void 0?"add":r!==E?"replace":"update";c&&(c.set=I,E!==void 0&&(c.oldValue=E)),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 h=this.#l,E;for(;E=h?.shift();)this.#E?.(...E)}return this}pop(){try{for(;this.#o;){let e=this.#e[this.#u];if(this.#U(!0),this.#r(e)){if(e.__staleWhileFetching)return e.__staleWhileFetching}else if(e!==void 0)return e}}finally{if(this.#p&&this.#l){let e=this.#l,r;for(;r=e?.shift();)this.#E?.(...r)}}}#U(e){let r=this.#u,n=this.#n[r],i=this.#e[r],s=this.#r(i);s&&i.__abortController.abort(new Error("evicted"));let o=s?i.__staleWhileFetching:i;return(this.#y||this.#p)&&o!==void 0&&(this.#y&&this.#c?.(o,n,"evict"),this.#p&&this.#l?.push([o,n,"evict"])),this.#b(r),this.#m?.[r]&&(clearTimeout(this.#m[r]),this.#m[r]=void 0),e&&(this.#n[r]=void 0,this.#e[r]=void 0,this.#T.push(r)),this.#o===1?(this.#u=this.#a=0,this.#T.length=0):this.#u=this.#d[r],this.#i.delete(n),this.#o--,r}has(e,r={}){let{status:n=je.hasSubscribers?{}:void 0}=r;r.status=n,n&&(n.op="has",n.key=e,n.cache=this);let i=this.#J(e,r);return je.hasSubscribers&&je.publish(n),i}#J(e,r={}){let{updateAgeOnHas:n=this.updateAgeOnHas,status:i}=r,s=this.#i.get(e);if(s!==void 0){let o=this.#e[s];if(this.#r(o)&&o.__staleWhileFetching===void 0)return!1;if(this.#h(s))i&&(i.has="stale",this.#C(i,s));else return n&&this.#v(s),i&&(i.has="hit",this.#C(i,s)),!0}else i&&(i.has="miss");return!1}peek(e,r={}){let{status:n=ed()?{}:void 0}=r;n&&(n.op="peek",n.key=e,n.cache=this),r.status=n;let i=this.#q(e,r);return je.hasSubscribers&&je.publish(n),i}#q(e,r){let{status:n,allowStale:i=this.allowStale}=r,s=this.#i.get(e);if(s===void 0||!i&&this.#h(s)){n&&(n.peek=s===void 0?"miss":"stale");return}let o=this.#e[s],a=this.#r(o)?o.__staleWhileFetching:o;return n&&(a!==void 0?(n.peek="hit",n.value=a):n.peek="miss"),a}#H(e,r,n,i){let s=r===void 0?void 0:this.#e[r];if(this.#r(s))return s;let o=new AbortController,{signal:a}=n;a?.addEventListener("abort",()=>o.abort(a.reason),{signal:o.signal});let l={signal:o.signal,options:n,context:i},c=(E,I=!1)=>{let{aborted:C}=o.signal,L=n.ignoreFetchAbort&&E!==void 0,b=n.ignoreFetchAbort||!!(n.allowStaleOnFetchAbort&&E!==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)&&(E===void 0?Q.__staleWhileFetching!==void 0?this.#e[r]=Q.__staleWhileFetching:this.#L(e,"fetch"):(n.status&&(n.status.fetchUpdated=!0),this.#N(e,E,l.options,Q))),E},u=E=>(n.status&&(n.status.fetchRejected=!0,n.status.fetchError=E),p(E,!1)),p=(E,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 E},d=(E,I)=>{let C=this.#M?.(e,s,l);o.signal.addEventListener("abort",()=>{(!n.ignoreFetchAbort||n.allowStaleOnFetchAbort)&&(E(void 0),n.allowStaleOnFetchAbort&&(E=L=>c(L,!0)))}),C&&C instanceof Promise?C.then(L=>E(L===void 0?void 0:L),I):C!==void 0&&E(C)};n.status&&(n.status.fetchDispatched=!0);let f=new Promise(d).then(c,u),h=Object.assign(f,{__abortController:o,__staleWhileFetching:s,__returned:void 0});return r===void 0?(this.#N(e,h,{...l.options,status:void 0}),r=this.#i.get(e)):this.#e[r]=h,h}#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=cs.hasSubscribers,{status:i=ed()?{}: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,cs.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:h=this.allowStaleOnFetchAbort,context:E,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:h,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,E);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.#h(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,E),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=cs.hasSubscribers,{status:i=ed()?{}: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,cs.tracePromise(()=>s,i).catch(()=>{})),s}async#Q(e,r={}){let n=await this.#W(e,r);if(n===void 0)throw new Error("fetch() returned undefined");return n}memo(e,r={}){let{status:n=je.hasSubscribers?{}:void 0}=r;r.status=n,n&&(n.op="memo",n.key=e,r.context&&(n.context=r.context),n.cache=this);let i=this.#X(e,r);return n&&(n.value=i),je.hasSubscribers&&je.publish(n),i}#X(e,r={}){let n=this.#k;if(!n)throw new Error("no memoMethod provided to constructor");let{context:i,status:s,forceRefresh:o,...a}=r;s&&o&&(s.forceRefresh=!0);let l=this.#w(e,a),c=o||l===void 0;if(s&&(s.memo=c?"miss":"hit",c||(s.value=l)),!c)return l;let u=n(e,l,{options:a,context:i});return s&&(s.value=u),this.#N(e,u,a),u}get(e,r={}){let{status:n=je.hasSubscribers?{}:void 0}=r;r.status=n,n&&(n.op="get",n.key=e,n.cache=this);let i=this.#w(e,r);return n&&(i!==void 0&&(n.value=i),je.hasSubscribers&&je.publish(n)),i}#w(e,r={}){let{allowStale:n=this.allowStale,updateAgeOnGet:i=this.updateAgeOnGet,noDeleteOnStaleGet:s=this.noDeleteOnStaleGet,status:o}=r,a=this.#i.get(e);if(a===void 0){o&&(o.get="miss");return}let l=this.#e[a],c=this.#r(l);return o&&this.#C(o,a),this.#h(a)?c?(o&&(o.get="stale-fetching"),n&&l.__staleWhileFetching!==void 0?(o&&(o.returnedStale=!0),l.__staleWhileFetching):void 0):(s||this.#L(e,"expire"),o&&(o.get="stale"),n?(o&&(o.returnedStale=!0),l):void 0):(o&&(o.get=c?"fetching":"hit"),this.#F(a),i&&this.#v(a),c?l.__staleWhileFetching:l)}#j(e,r){this.#g[r]=e,this.#d[e]=r}#F(e){e!==this.#a&&(e===this.#u?this.#u=this.#d[e]:this.#j(this.#g[e],this.#d[e]),this.#j(this.#a,e),this.#a=e)}delete(e){return this.#L(e,"delete")}#L(e,r){je.hasSubscribers&&je.publish({op:"delete",delete:r,key:e,cache:this});let n=!1;if(this.#o!==0){let i=this.#i.get(e);if(i!==void 0)if(this.#m?.[i]&&(clearTimeout(this.#m[i]),this.#m[i]=void 0),n=!0,this.#o===1)this.#V(r);else{this.#b(i);let s=this.#e[i];if(this.#r(s)?s.__abortController.abort(new Error("deleted")):(this.#y||this.#p)&&(this.#y&&this.#c?.(s,e,r),this.#p&&this.#l?.push([s,e,r])),this.#i.delete(e),this.#n[i]=void 0,this.#e[i]=void 0,i===this.#a)this.#a=this.#g[i];else if(i===this.#u)this.#u=this.#d[i];else{let o=this.#g[i];this.#d[o]=this.#d[i];let a=this.#d[i];this.#g[a]=this.#g[i]}this.#o--,this.#T.push(i)}}if(this.#p&&this.#l?.length){let i=this.#l,s;for(;s=i?.shift();)this.#E?.(...s)}return n}clear(){return this.#V("delete")}#V(e){for(let r of this.#I({allowStale:!0})){let n=this.#e[r];if(this.#r(n))n.__abortController.abort(new Error("deleted"));else{let i=this.#n[r];this.#y&&this.#c?.(n,i,e),this.#p&&this.#l?.push([n,i,e])}}if(this.#i.clear(),this.#e.fill(void 0),this.#n.fill(void 0),this.#f&&this.#R){this.#f.fill(0),this.#R.fill(0);for(let r of this.#m??[])r!==void 0&&clearTimeout(r);this.#m?.fill(void 0)}if(this.#A&&this.#A.fill(0),this.#u=0,this.#a=0,this.#T.length=0,this.#S=0,this.#o=0,this.#p&&this.#l){let r=this.#l,n;for(;n=r?.shift();)this.#E?.(...n)}}};var FN="tmp",mr={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"},Jo=class{constructor(e,r=he(),n=1024*1024*1024,i=14400*1e3,s=1800*1e3){this.logger=r;let o=ds.resolve(e);this.tempDir=ds.join(o,Ee,FN),this.ttlMs=i,this.lruCache=new LE({max:1e4,maxSize:n,sizeCalculation:a=>a.sizeBytes,ttl:i,allowStale:!1})}logger;tempDir;lruCache;cleanupInterval=null;concurrencyLimit=cn(5);ttlMs;async initialize(){try{await ci.mkdir(this.tempDir,{recursive:!0});let e=ds.dirname(ds.dirname(this.tempDir)),[r,n]=await Promise.all([ci.realpath(e),ci.realpath(this.tempDir)]);if(!n.startsWith(r+ds.sep))throw new _(R.FS_PATH_TRAVERSAL,`Resolved temp directory "${n}" escapes workspace root "${r}" \u2014 possible path traversal via symlink`);this.logger.info(mr.INITIALIZED,{tempDir:this.tempDir}),this.startCleanupSchedule(1800*1e3)}catch(e){throw e instanceof _||this.logger.error(mr.INIT_FAILED,{error:e instanceof Error?e.message:String(e)}),e}}async trackFile(e){return this.concurrencyLimit(async()=>{try{let r=await ci.stat(e),n={filePath:e,createdAt:Date.now(),lastAccessedAt:Date.now(),sizeBytes:r.size};this.lruCache.set(e,n),this.logger.debug(mr.FILE_TRACKED,{filePath:e,sizeBytes:r.size})}catch(r){this.logger.warn(mr.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 ci.readFile(e,H)}catch(r){return this.logger.warn(mr.ACCESS_FAILED,{filePath:e,error:r instanceof Error?r.message:String(r)}),null}})}async removeFileSync(e){try{await ci.unlink(e),this.logger.debug(mr.FILE_REMOVED,{filePath:e})}catch(r){if(r?.code!==Fs)throw r}}startCleanupSchedule(e){this.cleanupInterval=setInterval(()=>{this.cleanup().catch(r=>{this.logger.error(mr.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(mr.CLEANUP_COMPLETED,{removedCount:r.length,cacheSize:this.lruCache.size})}catch(e){this.logger.error(mr.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 qo={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}`},MN=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"]),kN=5,GN=25;function xN(t){return Math.max(t*kN,GN)}function NE(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 Qo=class{constructor(e=he()){this.logger=e}logger;extractKeywords(e){let r=e.split(/[^\w./-]+/).map(n=>n.trim()).filter(n=>n.length>0&&!MN.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=Mi(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(qo.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=xN(n),c=()=>o.map(f=>new Set(e.fts.searchL2Nodes([f],l).map(h=>h.id))),u=()=>o.map(f=>new Set(e.fts.searchL3Nodes([f],l).map(h=>h.id)));NE(e.fts.searchL2Nodes(o,l),o.length>1?c():[]).slice(0,n).forEach((f,h)=>s({layer:on.L2,id:f.id,title:f.name,content:f.description,score:.9-h*.01,matchType:"keyword"})),NE(e.fts.searchL3Nodes(o,l),o.length>1?u():[]).slice(0,n).forEach((f,h)=>s({layer:on.L3,id:f.id,title:f.title,content:f.content,score:.85-h*.01,matchType:"keyword"}))}let a=r.trim();if(a){let l=e.graph.findNodeByName(a);l&&(s({layer:on.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:on.L2,id:u.id,title:u.name,content:qo.linkedTo(l.name),score:.7-p*.01,matchType:"neighbor"})))}return this.logger.debug(qo.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===on.L2),o=i.filter(c=>c.layer===on.L3),a=null;try{a=this.getContext(e,r)}catch(c){this.logger.debug(qo.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 Xo=class extends qn{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 Zo=class extends Xo{getBlastRadius(e,r){let n=super.getBlastRadius(e,r);if(!n)return;let i=e.graph.findNodeByName(r)?.filePath;if(!i)return n;let s=new Set(n.map(o=>o.name));return n.push(...this.resolveDynamicCandidateEntries(e,r,i,s)),n}getDynamicEvidence(e,r){return RE(e,r)}resolveDynamicCandidateEntries(e,r,n,i){let s=[];for(let o of this.getDynamicEvidence(e,r)){let a=this.buildDynamicCandidateEntry(e,o,n,i);a&&(s.push(a),i.add(a.name))}return s}buildDynamicCandidateEntry(e,r,n,i){if(!this.isCandidateForTarget(r,n)||r.sourceFile===n||i.has(r.sourceFile))return;let s=e.graph.findNodeByName(r.sourceFile);if(!s||s.name!==r.sourceFile)return;let o=e.l3.getByL2NodeId(s.id),a=o.length>0?o.map(l=>({title:l.title,content:l.content})):void 0;return{name:s.name,type:s.type,edgeSource:kn.DYNAMIC_CANDIDATE,dynamicEvidence:r,...a?{why:a}:{}}}isCandidateForTarget(e,r){return e.status===yr.BOUNDED&&e.candidatePaths.includes(r)}};var BN=2e3,KN="(ungrouped)",$N=".",ea=class{build(e,r={}){let n=e.l2Rows.map(b=>({id:b.id,name:b.name,filePath:ZN(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:eP(b.source_commits)})),o=e.tagRows,a=YN(n),l=WN(i),c=jN(o),u=r.maxNodes??BN,p=n.length+s.length,d=VN(r,p,u),f=d?QN(n,i,s,l,a):qN(n,i,s,l,a),h=f.nodes,E=f.links,I=new Set(h.map(b=>b.id)),C=E.filter(b=>I.has(b.source)&&I.has(b.target)),L=zN(h,c);return JN(h,C),{topologyVersion:2,generatedAt:new Date().toISOString(),workspaceRoot:e.workspaceRoot,collapsed:d,nodes:h,links:C,groups:L,stats:{nodeCount:h.length,linkCount:C.length,groupCount:L.length,foldedLinkCount:f.foldedLinkCount??0}}}};function YN(t){let e=new Map;for(let r of t)e.set(String(r.id),r.filePath);return e}function WN(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 jN(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 VN(t,e,r){return t.collapse===Ul.FILE||t.collapse!==Ul.SYMBOL&&e>r}function zN(t,e){let r=new Map,n=[];for(let i of t){let s=XN(i.filePath),o=r.get(s);if(o===void 0&&(o=n.length,r.set(s,o),n.push({id:o,label:s,source:up.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 JN(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 qN(t,e,r,n,i){let s=t.map(a=>({id:It(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:It(a.sourceNodeId),target:It(a.targetNodeId),linkType:a.linkType,confidence:1,commitSha:a.commitSha,diffSummary:a.diffSummary}));return PE(s,o,r,i),{nodes:s,links:o,foldedLinkCount:0}}function QN(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:It(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:It(p),target:It(d),linkType:u.linkType,confidence:1,commitSha:u.commitSha,diffSummary:u.diffSummary}))}return PE(o,a,r,i),{nodes:o,links:a,foldedLinkCount:c}}function PE(t,e,r,n){let i=new Set(t.map(s=>s.id));for(let s of r){let o=It(s.l2NodeId);i.has(o)&&(t.push({id:tc(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:tc(s.id),target:o,linkType:de.DECISION,confidence:1}))}}function XN(t){if(!t)return KN;let r=t.split("\\").join("/").split("/").filter(Boolean);return r.length<=1?$N:r.slice(0,Math.min(2,r.length-1)).join("/")}function ZN(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 eP(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 vE from"path";import*as bE from"fs";import{Parser as DE,Language as tP}from"web-tree-sitter";var ta={DETECTOR_FAILED:"SemanticDiffDetector failed; treating file as unclassified for Tier B",NO_GRAMMAR_AVAILABLE:"No tree-sitter grammar available for semantic-diff classification; changed file will still be re-parsed",GRAMMAR_LOAD_FAILED:"Failed to load tree-sitter grammar for semantic-diff classification"};var ra=class{constructor(e=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(ta.DETECTOR_FAILED,{filePath:r,error:a instanceof Error?a.message:String(a)}),[]}}async getDetectorForFile(e){let r=await this.getRegistry(),n=vE.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??=DE.init(),await this.parserInitPromise;let{wasmPath:o,attemptedPaths:a}=Fp(i.wasm_file);if(!bE.existsSync(o)){this.logger.debug(ta.NO_GRAMMAR_AVAILABLE,{filePath:e,wasmFile:i.wasm_file,attemptedPaths:a}),this.detectors.set(i.wasm_file,null);return}try{let l=await tP.load(o),c=new DE,u=new wp(c,l);return this.detectors.set(i.wasm_file,u),u}catch(l){this.logger.warn(ta.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??=bp(),this.registryPromise}};import ME from"fs";import na from"path";import{execFile as rP}from"child_process";import{promisify as nP}from"util";var rd=nP(rP),iP=[".cmd",".CMD",".exe",""];function td(t,e){return e?{...t,env:e}:t}function sP(t,e){let r=na.join(t,at,".bin"),n=process.platform===Ir?iP.map(i=>`${e}${i}`):[e];for(let i of n){let s=na.join(r,i);if(ME.existsSync(s))return s}}function tr(t,e,r){let n=e.buildEnv?.();if(r?.binary)return td({command:r.binary,args:r.args??e.defaultArgs,locallyResolved:!0,fromUserOverride:!0},n);let i=e.binaryName??e.packageName,s=sP(t,i);if(s)return td({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 td({command:"npx",args:o,locallyResolved:!1},n)}var wE=5e3,oP=5e3;async function aP(t){try{if(process.platform===Ir){let{stdout:n}=await rd("where",[t],{timeout:wE});return n.split(/\r?\n/).map(i=>i.trim()).find(i=>i.length>0)}let{stdout:e}=await rd("sh",["-c",`command -v ${t}`],{timeout:wE}),r=e.trim();return r.length>0?r:void 0}catch{return}}function lP(t,e){if(!e)return;let r=process.platform===Ir?[`${t}.exe`,t]:[t];for(let n of e)for(let i of r){let s=na.join(n,i);if(ME.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 aP(t.binaryName);if(r)return{command:r,args:t.defaultArgs,locallyResolved:!0};let n=lP(t.binaryName,t.extraCandidateDirs);return n?{command:n,args:t.defaultArgs,locallyResolved:!0}:{command:t.binaryName,args:t.defaultArgs,locallyResolved:!1}}function FE(t){let e=t.trim().replace(/\\/g,"/");return na.posix.basename(e).replace(/\.exe$/i,"").toLowerCase()}async function kE(t,e=oP,r){if(r&&!r.some(n=>FE(n)===FE(t)))return!1;try{return await rd(t,["--version"],{timeout:e}),!0}catch{return!1}}var Pt={PACKAGE_NAME:"typescript-language-server",NPX_COMMAND:"npx",NPX_NO_INSTALL_FLAG:"--no-install",STDIO_ARG:"--stdio",VERSION_FLAG:"--version"},ia=8192,ui={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 cP=["PATH","HOME","USERPROFILE","PATHEXT","SYSTEMROOT","COMSPEC","LANG","LC_ALL","TERM"];function sa(t=process.env){let e={};for(let r of cP){let n=t[r];n!==void 0&&(e[r]=n)}return e}var oa=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 rr=new oa;function uP(t){let e=sa(t.env),r=t.env.NODE_OPTIONS??"";if(r.includes("--max-old-space-size"))return e.NODE_OPTIONS=r,e;let n=`--max-old-space-size=${ia}`;return e.NODE_OPTIONS=r?`${r} ${n}`:n,e}function aa(t,e,r=rr){return tr(t,{packageName:Pt.PACKAGE_NAME,defaultArgs:[Pt.STDIO_ARG],buildEnv:()=>uP(r)},e)}import la from"fs";import ca from"path";import{execFile as _P}from"child_process";import{promisify as SP}from"util";import dP from"path";import{execFile as pP}from"child_process";import{promisify as gP}from"util";var fP=gP(pP),mP=new Set([".cmd",".bat",".ps1"]),GE=new Set(["npx"]);function jr(t){return process.platform!=="win32"?!1:mP.has(dP.extname(t).toLowerCase())||GE.has(t.toLowerCase())}var hP=/[%!"\r\n]/;function nd(t){let e=t.match(hP);if(e)throw new Error(`Unsafe character ${JSON.stringify(e[0])} in Windows shell-wrapped LSP token`);return`"${t}"`}var EP=5e3;async function id(t,e){try{let{stdout:r}=await fP("where",[t],{timeout:EP,env:e});return r.split(/\r?\n/).map(i=>i.trim()).find(i=>i.length>0)??t}catch{return t}}function sd(t){return GE.has(t.toLowerCase())}async function di(t,e,r){return[sd(t)?await id(t,r):t,...e].map(nd).join(" ")}var xE=SP(_P),UE=5e3,TP=[oe.TSCONFIG_JSON,oe.JSCONFIG_JSON];function AP(t){return la.existsSync(ca.join(t,at))}function RP(t){return!!(TP.some(r=>la.existsSync(ca.join(t,r)))||la.existsSync(ca.join(t,"tsconfig.base.json"))||la.existsSync(ca.join(t,"src",oe.TSCONFIG_JSON)))}async function yP(t){let e=[Pt.NPX_NO_INSTALL_FLAG,Pt.PACKAGE_NAME,Pt.VERSION_FLAG];try{if(jr(Pt.NPX_COMMAND)){let r=await di(Pt.NPX_COMMAND,e,void 0);await xE(r,[],{cwd:t,timeout:UE,shell:!0})}else await xE(Pt.NPX_COMMAND,e,{cwd:t,timeout:UE});return!0}catch{return!1}}async function HE(t,e){let r=AP(t),n=RP(t);if(!r)return{nodeModulesPresent:r,tsconfigResolvable:n,lspBinaryResolvable:!1,ready:!1,reason:ui.nodeModulesMissing};if(!n)return{nodeModulesPresent:r,tsconfigResolvable:n,lspBinaryResolvable:!1,ready:!1,reason:ui.tsconfigMissing};let s=aa(t,e).locallyResolved?!0:await yP(t);return s?{nodeModulesPresent:r,tsconfigResolvable:n,lspBinaryResolvable:s,ready:!0}:{nodeModulesPresent:r,tsconfigResolvable:n,lspBinaryResolvable:s,ready:!1,reason:ui.binaryUnresolvable}}import xP from"fs/promises";import od from"os";import pi from"path";import{pathToFileURL as zE,fileURLToPath as JE}from"url";import{spawn as BE}from"child_process";var Tn={CONTENT_LENGTH_HEADER_PREFIX:"Content-Length: ",HEADER_BODY_SEPARATOR:`\r
137
137
  \r
138
- `,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},Ve={clientNotRunning:t=>`LSP request "${t}" attempted after the client stopped running`,clientStoppedBeforeResponse:"LSP client stopped before the server responded to the request",requestTimedOut:(t,e)=>`LSP request "${t}" timed out after ${e}ms`,serverExited:(t,e)=>`LSP server process exited (code=${String(t)}) before responding`+(e?` -- stderr: ${e}`:""),spawnFailed:(t,e)=>`Failed to spawn LSP server "${t}": ${e}`,initializeFailed:t=>`LSP server exited before completing its initialize handshake: ${t}`,batchTimedOut:t=>`Tier B LSP batch exceeded its ${t}ms timeout and was aborted`,resolutionFailedForFile:t=>`Tier B LSP resolution failed for ${t}`,skippedMultiLocationDefinition:t=>`Tier B forward resolution: first definition result for ${t} resolved outside the workspace; falling through to the next in-workspace result`,concurrencyClamped:(t,e)=>`Tier B LSP batch: maxConcurrentFiles=${t} clamped to ${e} (bounded by file count and maxOpenFiles)`,processShardsClamped:(t,e)=>`Tier B LSP batch: maxProcesses=${t} clamped to ${e} (bounded by file count)`,processShardsMemoryClamped:(t,e,r,n)=>`Tier B LSP batch: maxProcesses=${t} clamped to ${e} by memory (${r}MiB budget / ${n}MiB per shard)`};var OP=["PATH","HOME","USERPROFILE","PATHEXT","SYSTEMROOT","COMSPEC","LANG","LC_ALL","TERM"];function IP(){let t={};for(let e of OP){let r=process.env[e];r!==void 0&&(t[e]=r)}return t}function KE(){return["pipe","pipe","pipe"]}var LP=4e3,ca=class{child;buffer=Buffer.alloc(0);nextId=1;pending=new Map;stopped=!1;stderrTail="";async start(e){let r=jr(e.command),n=e.env??IP(),i=r&&id(e.command)?await nd(e.command,e.env):e.command,s=r?BE([i,...e.args].map(rd).join(" "),{cwd:e.cwd,stdio:KE(),shell:!0,env:n}):BE(e.command,e.args,{cwd:e.cwd,stdio:KE(),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(Ve.clientNotRunning(e)));let i=this.nextId++;return new Promise((s,o)=>{let a=n>0?setTimeout(()=>{this.pending.delete(i),o(new Error(Ve.requestTimedOut(e,n)))},n):void 0;this.pending.set(i,{resolve:l=>{a&&clearTimeout(a),s(l)},reject:l=>{a&&clearTimeout(a),o(l)}}),this.write({jsonrpc:Tn.JSON_RPC_VERSION,id:i,method:e,params:r})})}notify(e,r){!this.child||this.stopped||this.write({jsonrpc:Tn.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(Ve.clientStoppedBeforeResponse)),this.buffer=Buffer.alloc(0),this.stderrTail="",e.stdout.removeAllListeners("data"),e.stderr.removeAllListeners("data"),e.removeAllListeners("exit"),e.removeAllListeners("error"),e.removeAllListeners("spawn"),e.on("error",()=>{});try{e.stdin.end()}catch{}try{e.stdin.destroy(),e.stdout.destroy(),e.stderr.destroy()}catch{}try{e.kill()}catch{}try{e.unref()}catch{}}write(e){let r=JSON.stringify(e),n=`${Tn.CONTENT_LENGTH_HEADER_PREFIX}${Buffer.byteLength(r,H)}`+Tn.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(Tn.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+Tn.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(-LP)}onExit(e){this.stopped=!0,this.rejectAllPending(new Error(Ve.serverExited(e,this.stderrTail||void 0)))}onError(e){this.stopped=!0,this.rejectAllPending(e)}rejectAllPending(e){for(let r of this.pending.values())r.reject(e);this.pending.clear()}};import Rn from"fs";import ze from"path";var CP=[{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 NP(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=>Rn.existsSync(ze.join(t,s)))),!i&&e.suffixes.length>0)try{i=Rn.readdirSync(t).some(s=>e.suffixes.some(o=>s.endsWith(o)))}catch{i=!1}return r.set(t,i),i}function PP(t,e,r,n){let i=ze.dirname(ze.join(t,e));for(;;){if(NP(i,r,n))return i;if(i===t)return t;let s=ze.dirname(i);if(s===i)return t;i=s}}function $E(t,e){let r=ze.relative(ze.resolve(t),e);return r===""||r!==".."&&!r.startsWith(`..${ze.sep}`)&&!ze.isAbsolute(r)}function An(t,e,r,n){let i=ze.resolve(t),s=ze.normalize(ze.resolve(r,n));if($E(i,s))try{let o=Rn.realpathSync(s);return $E(e,o)?s:void 0}catch{return}}function YE(t,e,r,n){return n.map(i=>An(t,e,r,i)).filter(i=>i!==void 0)}function DP(t,e,r){let n=ua(t,oe.CARGO_TOML);if(n===void 0)return[];let i=[],s="";for(let o of n.split(/\r?\n/)){let a=o.trim(),l=a.match(/^\[(.+)\]$/);if(l){s=l[1].trim().toLowerCase();continue}if(s==="workspace"){for(let c of a.matchAll(/"([^"]+)"/g))i.push(c[1]);continue}if(s.includes("dependencies")||s.startsWith("patch")||s.startsWith("replace"))for(let c of a.matchAll(/path\s*=\s*"([^"]+)"/g))i.push(c[1])}return YE(e,r,t,i)}function vP(t,e,r){let n=ua(t,oe.GO_MOD);if(n===void 0)return[];let i=[];for(let s of n.split(/\r?\n/)){let o=s.trim().match(/^replace\s+\S+\s+=>\s+(\S+)\s*$/);if(!o)continue;let a=o[1];!a.startsWith(".")&&!ze.isAbsolute(a)||i.push(a)}return YE(e,r,t,i)}function bP(t,e,r){return[...FP(t,e,r),...MP(t,e,r)]}function wP(t,e,r,n){if(!n.includes("*")){let o=An(e,r,t,n);return o?[o]:[]}let i=An(e,r,t,ze.dirname(n));if(!i)return[];let s=ze.basename(n);try{return Rn.readdirSync(i).filter(o=>s==="*"||o.includes(s.slice(0,s.indexOf("*")))).map(o=>An(e,r,i,o)).filter(o=>o!==void 0)}catch{return[]}}function FP(t,e,r){let n=WE(t,oe.PACKAGE_JSON);if(n===void 0)return[];let i=n.workspaces,s=Array.isArray(i)?i:typeof i=="object"&&i!==null&&Array.isArray(i.packages)?i.packages:[],o=[];for(let a of s)typeof a=="string"&&o.push(...wP(t,e,r,a));return o}function MP(t,e,r){let n=WE(t,oe.TSCONFIG_JSON);if(n===void 0)return[];let i=[],s=n.references;if(Array.isArray(s))for(let a of s){if(typeof a!="object"||a===null)continue;let l=a.path;if(typeof l!="string")continue;let c=An(e,r,t,l);c&&i.push(c)}let o=n.extends;if(typeof o=="string"){let a=An(e,r,t,o);a&&i.push(a)}return i}function kP(t,e,r){let n=[],i=[];try{i=Rn.readdirSync(t)}catch{return n}for(let s of i){if(!s.endsWith(".csproj"))continue;let o=ua(t,s);if(o!==void 0)for(let a of o.matchAll(/<ProjectReference[^>]*Include\s*=\s*"([^"]+)"/g)){let l=a[1].split("\\").join("/"),c=An(e,r,t,l);c&&n.push(ze.dirname(c))}}return n}function ua(t,e){try{return Rn.readFileSync(ze.join(t,e),"utf8")}catch{return}}function WE(t,e){let r=ua(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 GP(t,e,r,n){switch(e){case B.RUST:return DP(t,r,n);case B.GO:return vP(t,r,n);case B.TYPESCRIPT:return bP(t,r,n);case B.CSHARP:return kP(t,r,n);default:return[]}}function xP(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 jE(t){let e=ze.resolve(t.workspaceRoot),r;try{r=Rn.realpathSync(e)}catch{r=void 0}let n=CP.find(l=>l.languageId===t.languageId)??null,i=new Map,s=new Map,o=new Map;for(let l of t.files){let c=n?PP(e,l,n,i):e;o.set(l,c);let u=s.get(c);u?u.push(l):s.set(c,[l])}let a=[];for(let[l,c]of s)a.push({root:l,files:c,deps:n&&r?GP(l,t.languageId,e,r):[]});return{groups:xP(a),fileToProjectRoot:o}}var UP="LSP file path resolves outside the configured workspace root";function VE(t,e){let r=_n(t,e);if(!r)throw new _(R.FS_PATH_TRAVERSAL,UP);return r}var BP=12e4,KP=3e4,$P=200,YP=512,WP=.25,da=new Set([hr.FUNCTION,hr.METHOD,hr.CONSTRUCTOR,hr.CLASS]),jP=new Set([hr.CLASS]);function qE(t,e){return e.has(t)}function gi(t){return t.split("\\").join("/")}var fa=class extends Error{};function VP(t){return"location"in t}function zP(t){return t?t.map(e=>VP(e)?{name:e.name,kind:e.kind,range:e.location.range,selectionRange:e.location.range}:e):[]}function od(t,e){return e.normalizeSymbolName?e.normalizeSymbolName(t):t}function JP(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 pa(t,e,r,n){for(let i of t){if(!JP(i.range,e))continue;let s=qE(i.kind,r)?i.name:n;return(i.children?pa(i.children,e,r,s):void 0)??{symbol:i,containerName:n}}}function ga(t,e,r){let n=[];for(let i of t)if(da.has(i.kind)&&n.push({symbol:i,containerName:r}),i.children){let s=qE(i.kind,e)?i.name:r;n.push(...ga(i.children,e,s))}return n}var xe=class{name;config={};logger;createClient;languageConfig;containmentKinds;constructor(e,r,n=()=>new ca){this.languageConfig=e,this.name=e.name,this.logger=r??he(),this.createClient=n,this.containmentKinds=e.containmentSymbolKinds??jP}configure(e){this.config=e}get requestTimeoutMs(){return this.config.timeoutMs??KP}get maxOpenFiles(){return this.config.maxOpenFiles??$P}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(sd.availableParallelism(),e))}processMemoryEstimateMb(){return this.config.processMemoryEstimateMb??this.languageConfig.processMemoryEstimateMb??YP}maxProcessMemoryMb(){return this.config.maxProcessMemoryMb!==void 0?this.config.maxProcessMemoryMb:Math.max(Math.round(sd.totalmem()/1024/1024*WP),this.processMemoryEstimateMb())}effectiveConcurrency(e){let r=this.maxConcurrentFiles,n=Math.max(1,Math.min(r,e,this.maxOpenFiles-1));return n!==r&&this.logger.debug(Ve.concurrencyClamped(r,n)),n}effectiveProcesses(e){let r=this.maxProcesses,n=Math.floor(this.maxProcessMemoryMb()/this.processMemoryEstimateMb()),i=sd.availableParallelism(),s=Math.max(1,Math.min(r,e,i,n));return s!==r&&(this.logger.debug(Ve.processShardsClamped(r,s)),s<r&&n<Math.min(r,e,i)&&this.logger.debug(Ve.processShardsMemoryClamped(r,s,this.maxProcessMemoryMb(),this.processMemoryEstimateMb()))),s}async checkAvailability(e){let r=await this.languageConfig.checkPreflight(e,{binary:this.config.binaryOverride,args:this.config.argsOverride});return r.ready?{available:!0}:{available:!1,reason:r.reason}}async resolveEdges(e){if(e.files.length===0)return{edges:[],filesProcessed:[],filesFailed:[]};let r=this.config.timeoutMs??BP,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[pi.extname(e)]??this.languageConfig.defaultLanguageId}buildProjectShards(e,r){let i=jE({workspaceRoot:e.workspaceRoot,languageId:this.languageConfig.tierBLanguageId,files:e.files}).groups,s=(d,f)=>{let h={};for(let E of f){let I=e.callsByFile?.[E];I&&(h[E]=I)}return{workspaceRoot:e.workspaceRoot,serverRoot:d,files:f,callsByFile:h}};if(i.length<=r)return i.map(d=>s(d.root,d.files));let o=[...i].sort((d,f)=>d.files.length-f.files.length||d.root.localeCompare(f.root)),a=r-1,l=new Set(o.slice(-a).map(d=>d.root)),c=[],u=[];for(let d of i)l.has(d.root)?c.push(s(d.root,d.files)):u.push(...d.files);let p=[...c];return u.length>0&&p.push(s(e.workspaceRoot,u)),p}mergeShardOutcomes(e,r){let n=[],i=new Set,s=new Map,o=0;for(let u=0;u<e.length;u++){let p=e[u];for(let d of p.edges)n.push(d);for(let d of p.filesProcessed)i.add(d);for(let d of p.filesFailed)s.set(d.file,d);p.unavailableReason&&o++}n.sort((u,p)=>(u.sourceNodeKey+"->"+u.targetNodeKey).localeCompare(p.sourceNodeKey+"->"+p.targetNodeKey));let{filesProcessed:a,filesFailed:l}=this.reorderFiles(r,i,s),c={edges:n,filesProcessed:a,filesFailed:l};return o===e.length&&e.length>0&&(c.unavailableReason=e.find(u=>u.unavailableReason)?.unavailableReason),c}reorderFiles(e,r,n){let i=[],s=[];for(let o of e)r.has(o)?i.push(o):n.has(o)&&s.push(n.get(o));return{filesProcessed:i,filesFailed:s}}async runBatch(e,r,n){let{workspaceRoot:i,files:s,callsByFile:o}=r,a=r.serverRoot??i,l=await this.languageConfig.resolveBinary(i,{binary:this.config.binaryOverride,args:this.config.argsOverride});try{await e.start({command:l.command,args:l.args,cwd:a,env:l.env})}catch(u){return{edges:[],filesProcessed:[],filesFailed:[],unavailableReason:Ve.spawnFailed(l.command,u instanceof Error?u.message:String(u))}}try{await this.initializeSession(e,a)}catch(u){let p=u instanceof Error?u.message:String(u);await this.shutdownSession(e);let d=this.languageConfig.unavailableReasonForUnresolvableBinary;return!l.locallyResolved&&d?(this.logger.debug(Ve.initializeFailed(p)),{edges:[],filesProcessed:[],filesFailed:[],unavailableReason:d}):{edges:[],filesProcessed:[],filesFailed:[],unavailableReason:Ve.initializeFailed(p)}}await this.waitForColdStart(e,i,s);let c=n>0?Date.now()+n:void 0;try{return await this.processAllFiles(e,i,s,o,c,n)}finally{await this.shutdownSession(e)}}async settleColdStart(){let e=this.config.coldStartSettleMs??this.languageConfig.coldStartSettleMs??0;e>0&&await new Promise(r=>setTimeout(r,e))}async waitForColdStart(e,r,n){await this.settleColdStart(),(this.config.coldStartSettleMs??this.languageConfig.coldStartSettleMs??0)>0&&await this.waitForServerReady(e,r,n)}async waitForServerReady(e,r,n){let i=this.config.coldStartPollMs??5e3,s=this.config.coldStartMaxWaitMs??12e4,o=Date.now();for(;;){if(await this.probeServerReady(e,r,n)||Date.now()-o>=s)return;await new Promise(c=>setTimeout(c,i))}}async probeServerReady(e,r,n){let s={openFileCache:new Map,inFlightOpens:new Map,pinnedPaths:new Set,usedNodeKeysByFile:new Map};try{let o=!1;for(let a=0;a<Math.min(n.length,12);a++){let l=await this.openAndGetSymbols(e,r,n[a],s),c=ga(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=zE(r).toString();await e.request(Ht.INITIALIZE,{processId:process.pid,rootUri:n,capabilities:{textDocument:{documentSymbol:{hierarchicalDocumentSymbolSupport:!0}}},workspaceFolders:[{uri:n,name:pi.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=[],h=new Set,E=[],I=[];for(let C=0;C<n.length;C++){let L=l[C];if(L)if(L.ok){E.push(n[C]);for(let b of L.edges){let Q=`${b.sourceNodeKey}->${b.targetNodeKey}`;h.has(Q)||(h.add(Q),f.push(b))}}else I.push({file:n[C],reason:L.reason,retryable:L.deadlineExceeded})}return u&&this.markUnreachedFilesFailed(n,E,I,o),{edges:f,filesProcessed:E,filesFailed:I,...u?{unavailableReason:Ve.batchTimedOut(o)}:{}}}raceAgainstDeadline(e,r){return new Promise((n,i)=>{let s=setTimeout(()=>i(new fa),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 fa)return{ok:!1,deadlineExceeded:!0,reason:Ve.batchTimedOut(a)};let c=l instanceof Error?l.message:String(l);return this.logger.warn(Ve.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:Ve.batchTimedOut(i),retryable:!0})}qualifiedContainerName(e){if(!(!this.languageConfig.supportsQualifiedContainment||!e))return od(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=[...ga(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 h=`${d.name}@${d.selectionRange.start.line}`;if(a.resolved.has(h))continue;let E=Sn(a.used,os(r,od(d.name,this.languageConfig),this.qualifiedContainerName(f)),d.selectionRange.start.line);a.used.add(E),a.resolved.set(h,E)}}let l=`${i}@${s}`,c=a.resolved.get(l);if(c)return c;let u=Sn(a.used,os(r,od(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=ga(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=gi(this.resolveNodeKeyForFile(i,n,s.symbols,u.name,u.selectionRange.start.line,p));for(let h of d){let E=await this.resolveReferenceEdge(e,r,h,f,n,i);E&&l.push(E)}}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=pa(o.symbols,{line:u,character:p},this.containmentKinds),h=f&&da.has(f.symbol.kind)?gi(this.resolveNodeKeyForFile(s,n,o.symbols,f.symbol.name,f.symbol.selectionRange.start.line,f.containerName)):n;h!==d&&a.push({sourceNodeKey:h,targetNodeKey:d,source:kl.LSP})}return a}async resolveFirstDefinitionTarget(e,r,n,i,s){if(!i)return;let o=Array.isArray(i)?i:[i];for(let a=0;a<o.length;a++){let l=await this.resolveTargetNodeKey(e,r,n,o[a],s);if(l!==void 0)return a>0&&this.logger.debug(Ve.skippedMultiLocationDefinition(n)),l}}async resolveTargetNodeKey(e,r,n,i,s){let o=pi.relative(r,JE(i.uri));if(pi.isAbsolute(o)||o.startsWith(".."))return;let a=gi(o);if(a===n)return;let l=await this.openAndGetSymbols(e,r,a,s),c=pa(l.symbols,i.range.start,this.containmentKinds);return c&&da.has(c.symbol.kind)?gi(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=pi.relative(r,JE(n.uri));if(pi.isAbsolute(a)||a.startsWith(".."))return;let l=gi(a);if(l===s)return;let c=await this.openAndGetSymbols(e,r,l,o),u=pa(c.symbols,n.range.start,this.containmentKinds);return{sourceNodeKey:u&&da.has(u.symbol.kind)?gi(this.resolveNodeKeyForFile(o,l,c.symbols,u.symbol.name,u.symbol.selectionRange.start.line,u.containerName)):l,targetNodeKey:i,source:kl.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=VE(r,n),o=await HP.readFile(s,H),a=zE(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=zP(l),u={relativePath:n,uri:a,symbols:c};return i.openFileCache.set(n,u),u}};var ma="typescript",qP={".ts":ma,".mts":ma,".cts":ma,".tsx":"typescriptreact",".js":"javascript",".mjs":"javascript",".cjs":"javascript",".jsx":"javascriptreact"},QP={name:Pt.PACKAGE_NAME,tierBLanguageId:B.TYPESCRIPT,languageIdByExtension:qP,defaultLanguageId:ma,resolveBinary:oa,checkPreflight:HE,supportsQualifiedContainment:!0,initializationOptions:{maxTsServerMemory:ia},definitionResolution:"forward",unavailableReasonForUnresolvableBinary:ui.binaryUnresolvable},ha=class extends xe{constructor(e,r){super(QP,e,r)}};import XP from"fs";import ZP from"path";import{execFile as eD}from"child_process";import{promisify as tD}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"},ps={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 QE=tD(eD),XE=5e3,rD=[oe.PYPROJECT_TOML,oe.REQUIREMENTS_TXT];function nD(t){return rD.some(e=>XP.existsSync(ZP.join(t,e)))}async function iD(t){let e=[it.NPX_NO_INSTALL_FLAG,it.PACKAGE_NAME,it.VERSION_FLAG];try{if(jr(it.NPX_COMMAND)){let r=await di(it.NPX_COMMAND,e,void 0);await QE(r,[],{cwd:t,timeout:XE,shell:!0})}else await QE(it.NPX_COMMAND,e,{cwd:t,timeout:XE});return!0}catch{return!1}}async function ZE(t,e){let r=nD(t),i=tr(t,{packageName:it.PACKAGE_NAME,binaryName:it.BINARY_NAME,defaultArgs:[it.STDIO_ARG]},e).locallyResolved?!0:await iD(t);return r?i?{markerFileResolvable:r,lspBinaryResolvable:i,ready:!0}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:ps.binaryUnresolvable}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:ps.markerFileMissing}}var e_="python",sD={".py":e_},oD={name:it.PACKAGE_NAME,tierBLanguageId:B.PYTHON,languageIdByExtension:sD,defaultLanguageId:e_,resolveBinary:(t,e)=>tr(t,{packageName:it.PACKAGE_NAME,binaryName:it.BINARY_NAME,defaultArgs:[it.STDIO_ARG]},e),checkPreflight:ZE,supportsQualifiedContainment:!0,definitionResolution:"reverse",unavailableReasonForUnresolvableBinary:ps.binaryUnresolvable},Ea=class extends xe{constructor(e,r){super(oD,e,r)}};import aD from"fs";import ld from"path";import lD from"os";var yn={BINARY_NAME:"gopls",DEFAULT_ARGS:[]};function t_(t){let e=/^\((\*?)([^(]*)\)\.(.+)$/.exec(t);if(!e)return t;let[,,r,n]=e;return`${r}.${n}`}var ad={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 cD(t){return aD.existsSync(ld.join(t,oe.GO_MOD))}function uD(t){let e=[];return t.env.GOBIN&&e.push(t.env.GOBIN),t.env.GOPATH&&e.push(ld.join(t.env.GOPATH,"bin")),e.push(ld.join(lD.homedir(),"go","bin")),e}async function r_(t,e,r=rr){let n=cD(t),s=(await Pe({binaryName:yn.BINARY_NAME,defaultArgs:yn.DEFAULT_ARGS,extraCandidateDirs:uD(r)},e)).locallyResolved;return n?s?{markerFileResolvable:n,lspBinaryResolvable:s,ready:!0}:{markerFileResolvable:n,lspBinaryResolvable:s,ready:!1,reason:ad.binaryUnresolvable}:{markerFileResolvable:n,lspBinaryResolvable:s,ready:!1,reason:ad.markerFileMissing}}var n_="go",dD={".go":n_},pD={name:yn.BINARY_NAME,tierBLanguageId:B.GO,languageIdByExtension:dD,defaultLanguageId:n_,resolveBinary:(t,e)=>Pe({binaryName:yn.BINARY_NAME,defaultArgs:yn.DEFAULT_ARGS},e),checkPreflight:r_,supportsQualifiedContainment:!1,normalizeSymbolName:t_,definitionResolution:"reverse"},_a=class extends xe{constructor(e,r){super(pD,e,r)}};import SD from"path";import TD from"os";import gD from"fs";import cd from"path";import fD from"os";var Vr={BINARY_NAME:"rust-analyzer",DEFAULT_ARGS:[]},Sa={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 i_(t){return t.startsWith("impl ")?t.slice(5):t}function mD(t){return gD.existsSync(cd.join(t,oe.CARGO_TOML))}function hD(t){return cd.join(t.env.CARGO_HOME??cd.join(fD.homedir(),".cargo"),"bin")}var ED=5e3;async function _D(t,e){return ME(t,ED,e)}async function s_(t,e,r=rr){let n=mD(t),i=await Pe({binaryName:Vr.BINARY_NAME,defaultArgs:Vr.DEFAULT_ARGS,extraCandidateDirs:[hD(r)]},e),s=i.locallyResolved,o=!s||await _D(i.command,i.fromUserOverride?void 0:[Vr.BINARY_NAME]);return n?s?o?{markerFileResolvable:n,lspBinaryResolvable:s,lspBinarySpawnable:o,ready:!0}:{markerFileResolvable:n,lspBinaryResolvable:s,lspBinarySpawnable:o,ready:!1,reason:Sa.binaryNotSpawnable}:{markerFileResolvable:n,lspBinaryResolvable:s,lspBinarySpawnable:o,ready:!1,reason:Sa.binaryUnresolvable}:{markerFileResolvable:n,lspBinaryResolvable:s,lspBinarySpawnable:o,ready:!1,reason:Sa.markerFileMissing}}var o_="rust",AD={".rs":o_};function RD(){return SD.join(TD.homedir(),".cargo","bin")}var yD={name:Vr.BINARY_NAME,tierBLanguageId:B.RUST,languageIdByExtension:AD,defaultLanguageId:o_,resolveBinary:(t,e)=>Pe({binaryName:Vr.BINARY_NAME,defaultArgs:Vr.DEFAULT_ARGS,extraCandidateDirs:[RD()]},e),checkPreflight:s_,supportsQualifiedContainment:!0,containmentSymbolKinds:new Set([hr.CLASS,hr.OBJECT]),normalizeSymbolName:i_,definitionResolution:"reverse",coldStartSettleMs:8e3,processMemoryEstimateMb:2048},Ta=class extends xe{constructor(e,r){super(yD,e,r)}};import OD from"fs";import a_ from"path";var On={BINARY_NAME:"clangd",DEFAULT_ARGS:[]},ud={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 ID=["compile_commands.json","CMakeLists.txt"];function LD(t){return ID.some(e=>OD.existsSync(a_.join(t,e)))}function CD(t){return t.platform===Ir?[a_.join(t.env.ProgramFiles??"C:\\Program Files","LLVM","bin")]:t.platform==="darwin"?["/opt/homebrew/opt/llvm/bin","/usr/local/opt/llvm/bin"]:["/usr/lib/llvm/bin","/usr/local/bin"]}async function l_(t,e,r=rr){let n=LD(t),s=(await Pe({binaryName:On.BINARY_NAME,defaultArgs:On.DEFAULT_ARGS,extraCandidateDirs:CD(r)},e)).locallyResolved;return n?s?{markerFileResolvable:n,lspBinaryResolvable:s,ready:!0}:{markerFileResolvable:n,lspBinaryResolvable:s,ready:!1,reason:ud.binaryUnresolvable}:{markerFileResolvable:n,lspBinaryResolvable:s,ready:!1,reason:ud.markerFileMissing}}var Er="cpp",ND={".c":"c",".h":"c",".cpp":Er,".cxx":Er,".cc":Er,".hpp":Er,".hxx":Er,".hh":Er,".cu":Er,".cuh":Er},PD={name:On.BINARY_NAME,tierBLanguageId:B.CPP,languageIdByExtension:ND,defaultLanguageId:Er,resolveBinary:(t,e)=>Pe({binaryName:On.BINARY_NAME,defaultArgs:On.DEFAULT_ARGS},e),checkPreflight:l_,supportsQualifiedContainment:!1,definitionResolution:"reverse"},Aa=class extends xe{constructor(e,r){super(PD,e,r)}};import DD from"fs";import Ra from"path";import c_ from"os";var In={BINARY_NAME:"jdtls",DEFAULT_ARGS:[]},dd={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 vD=["pom.xml","build.gradle"];function bD(t){return vD.some(e=>DD.existsSync(Ra.join(t,e)))}function wD(t){return t.platform===Ir?[Ra.join(c_.homedir(),"scoop","shims"),Ra.join(t.env.ChocolateyInstall??"C:\\ProgramData\\chocolatey","bin")]:t.platform==="darwin"?["/opt/homebrew/bin","/usr/local/bin"]:["/usr/local/bin","/usr/bin",Ra.join(c_.homedir(),".local","share","jdtls","bin")]}async function u_(t,e,r=rr){let n=bD(t),s=(await Pe({binaryName:In.BINARY_NAME,defaultArgs:In.DEFAULT_ARGS,extraCandidateDirs:wD(r)},e)).locallyResolved;return n?s?{markerFileResolvable:n,lspBinaryResolvable:s,ready:!0}:{markerFileResolvable:n,lspBinaryResolvable:s,ready:!1,reason:dd.binaryUnresolvable}:{markerFileResolvable:n,lspBinaryResolvable:s,ready:!1,reason:dd.markerFileMissing}}var d_="java",FD={".java":d_},MD={name:In.BINARY_NAME,tierBLanguageId:B.JAVA,languageIdByExtension:FD,defaultLanguageId:d_,resolveBinary:(t,e)=>Pe({binaryName:In.BINARY_NAME,defaultArgs:In.DEFAULT_ARGS},e),checkPreflight:u_,supportsQualifiedContainment:!0,definitionResolution:"reverse"},ya=class extends xe{constructor(e,r){super(MD,e,r)}};import kD from"fs";import GD from"path";import xD from"os";var Ln={BINARY_NAME:"csharp-ls",DEFAULT_ARGS:[]},pd={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 UD(){return GD.join(xD.homedir(),".dotnet","tools")}function HD(t){try{return kD.readdirSync(t).some(r=>r.endsWith(".sln")||r.endsWith(".slnx")||r.endsWith(".csproj"))}catch{return!1}}async function p_(t,e){let r=HD(t),i=(await Pe({binaryName:Ln.BINARY_NAME,defaultArgs:Ln.DEFAULT_ARGS,extraCandidateDirs:[UD()]},e)).locallyResolved;return r?i?{markerFileResolvable:r,lspBinaryResolvable:i,ready:!0}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:pd.binaryUnresolvable}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:pd.markerFileMissing}}var g_="csharp",BD={".cs":g_},KD={name:Ln.BINARY_NAME,tierBLanguageId:B.CSHARP,languageIdByExtension:BD,defaultLanguageId:g_,resolveBinary:(t,e)=>Pe({binaryName:Ln.BINARY_NAME,defaultArgs:Ln.DEFAULT_ARGS},e),checkPreflight:p_,supportsQualifiedContainment:!0,definitionResolution:"reverse"},Oa=class extends xe{constructor(e,r){super(KD,e,r)}};import $D from"fs";import YD from"path";import{execFile as WD}from"child_process";import{promisify as jD}from"util";var Tt={PACKAGE_NAME:"intelephense",NPX_COMMAND:"npx",NPX_NO_INSTALL_FLAG:"--no-install",STDIO_ARG:"--stdio",VERSION_FLAG:"--version"},gs={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 f_=jD(WD),m_=5e3;function VD(t){return $D.existsSync(YD.join(t,"composer.json"))}async function zD(t){let e=[Tt.NPX_NO_INSTALL_FLAG,Tt.PACKAGE_NAME,Tt.VERSION_FLAG];try{if(jr(Tt.NPX_COMMAND)){let r=await di(Tt.NPX_COMMAND,e,void 0);await f_(r,[],{cwd:t,timeout:m_,shell:!0})}else await f_(Tt.NPX_COMMAND,e,{cwd:t,timeout:m_});return!0}catch{return!1}}async function h_(t,e){let r=VD(t),i=tr(t,{packageName:Tt.PACKAGE_NAME,defaultArgs:[Tt.STDIO_ARG]},e).locallyResolved?!0:await zD(t);return r?i?{markerFileResolvable:r,lspBinaryResolvable:i,ready:!0}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:gs.binaryUnresolvable}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:gs.markerFileMissing}}var Cn="php",JD={".php":Cn,".phtml":Cn,".php3":Cn,".php4":Cn,".php5":Cn,".phps":Cn},qD={name:Tt.PACKAGE_NAME,tierBLanguageId:B.PHP,languageIdByExtension:JD,defaultLanguageId:Cn,resolveBinary:(t,e)=>tr(t,{packageName:Tt.PACKAGE_NAME,defaultArgs:[Tt.STDIO_ARG]},e),checkPreflight:h_,supportsQualifiedContainment:!0,definitionResolution:"reverse",unavailableReasonForUnresolvableBinary:gs.binaryUnresolvable},Ia=class extends xe{constructor(e,r){super(qD,e,r)}};import QD from"fs";import fd from"path";import XD from"os";var Nn={BINARY_NAME:"ruby-lsp",DEFAULT_ARGS:[]},gd={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 ZD=["Gemfile","Gemfile.lock"];function ev(t){return ZD.some(e=>QD.existsSync(fd.join(t,e)))}function tv(){if(process.platform==="win32")return[];let t=XD.homedir();return[fd.join(t,".rbenv","shims"),fd.join(t,".rvm","bin")]}async function E_(t,e){let r=ev(t),i=(await Pe({binaryName:Nn.BINARY_NAME,defaultArgs:Nn.DEFAULT_ARGS,extraCandidateDirs:tv()},e)).locallyResolved;return r?i?{markerFileResolvable:r,lspBinaryResolvable:i,ready:!0}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:gd.binaryUnresolvable}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:gd.markerFileMissing}}var La="ruby",rv={".rb":La,".rake":La,".gemspec":La},nv={name:Nn.BINARY_NAME,tierBLanguageId:B.RUBY,languageIdByExtension:rv,defaultLanguageId:La,resolveBinary:(t,e)=>Pe({binaryName:Nn.BINARY_NAME,defaultArgs:Nn.DEFAULT_ARGS},e),checkPreflight:E_,supportsQualifiedContainment:!0,definitionResolution:"reverse"},Ca=class extends xe{constructor(e,r){super(nv,e,r)}};import fi from"fs/promises";var iv={maxWaitMs:1e4,retryIntervalMs:100,heartbeatIntervalMs:1e4,staleAfterMs:3e4};function sv(t){return new Promise(e=>setTimeout(e,t))}function ov(t){try{return process.kill(t,0),!0}catch(e){return e.code===an}}async function av(t){try{let e=Number.parseInt(await fi.readFile(t,H),10);return Number.isFinite(e)?e:void 0}catch{return}}async function lv(t,e){let r=await fi.stat(t).catch(()=>{});if(!r||Date.now()-r.mtimeMs<=e)return!1;let n=await av(t);return n!==void 0&&ov(n)?!1:(await fi.rm(t,{force:!0}).catch(()=>{}),!0)}function cv(t){let e=t.code;return e===xn||e===an||e===Un||e===Hn}async function uv(t){try{let e=await fi.open(t,"wx");return await e.writeFile(String(process.pid)),await e.close(),!0}catch(e){if(!cv(e))throw e;return!1}}async function __(t,e={}){let r={...iv,...e},n=Date.now()+r.maxWaitMs,i=!1;for(;!await uv(t);)if(i||(i=!0,e.onWaiting?.()),!await lv(t,r.staleAfterMs)){if(Date.now()>n)throw new Ms(t);await sv(r.retryIntervalMs)}let s=setInterval(()=>{let a=new Date;fi.utimes(t,a,a).catch(()=>{})},r.heartbeatIntervalMs);s.unref?.();let o=!1;return{async release(){o||(o=!0,clearInterval(s),await fi.rm(t,{force:!0}).catch(()=>{}))}}}function dv(t=y,e={}){let r=e.createAstWorkerPool??(()=>new Uo);t.register(T.KnowledgeGitService,(i,s)=>new Js(i.resolve(T.GitProvider),s?.logger,s?.gitNetworkTimeoutMs)),t.register(T.FileDiscovery,(i,s)=>new wo(i.resolve(T.GitProvider),s?.logger)),t.register(T.ConfigScanner,(i,s)=>new Mo(s?.logger)),t.register(T.VcsScanner,(i,s)=>new Go(i.resolve(T.GitProvider),s?.logger));let n;t.register(T.AstProcessor,(i,s)=>(n??=r(),new Ho(n,s?.logger))),t.register(T.GraphPersister,()=>new Vo),t.register(T.TempFileManager,()=>(i,s)=>new Jo(i,s)),t.register(T.ProcessLock,()=>__),t.register(T.QueryService,(i,s)=>new Qo(s?.logger)),t.register(T.TierBCoverageHintProvider,()=>({resolve:Mi})),t.register(T.ImpactService,(i,s)=>new Zo(s?.logger)),t.register(T.ChangeDetectionService,(i,s)=>new Qs(i.resolve(T.ImpactService,s),s?.logger)),t.register(T.TopologyBuilder,()=>new ea),t.register(T.SnapshotRenderer,()=>new qs),t.register(T.HydrationService,(i,s)=>new Xs(i.resolve(T.GitProvider),s?.logger)),t.register(T.SemanticDiffAnalyzer,(i,s)=>new ra(s?.logger)),t.register(T.EdgeResolutionProviders,(i,s)=>({typescript:()=>new ha(s?.logger),python:()=>new Ea(s?.logger),go:()=>new _a(s?.logger),rust:()=>new Ta(s?.logger),cpp:()=>new Aa(s?.logger),java:()=>new ya(s?.logger),csharp:()=>new Oa(s?.logger),php:()=>new Ia(s?.logger),ruby:()=>new Ca(s?.logger)}))}dv();var zr={METHOD_POST:"POST",HEADER_AUTHORIZATION:"Authorization",HEADER_CONTENT_TYPE:"Content-Type",CONTENT_TYPE_JSON:"application/json",bearerAuth:t=>`Bearer ${t}`};var nr={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 md={l2Nodes:t=>`/projects/${t}/l2-nodes`,SYNC_PUSH:"/sync/push"};function S_(t,e){if(typeof t!="object"||t===null||Array.isArray(t))throw new TypeError(`${e} must be an object`);return t}function T_(t,e){if(typeof t!="number"||!Number.isFinite(t))throw new TypeError(`${e} must be a finite number`);return t}function A_(t){if(!Array.isArray(t))throw new TypeError("response must be an array");for(let[e,r]of t.entries()){let n=S_(r,`response[${e}]`);if(T_(n.id,`response[${e}].id`),typeof n.name!="string")throw new TypeError(`response[${e}].name must be a string`)}return t}function R_(t){let e=S_(t,"response");if(typeof e.success!="boolean")throw new TypeError("response.success must be a boolean");return T_(e.processed,"response.processed"),t}var y_=3e4,fs=class{config;initialize(e){this.config=e}getConfig(){if(!this.config)throw new _(R.SYNC_FETCH_FAILED,nr.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}${md.l2Nodes(e)}`,{headers:{[zr.HEADER_AUTHORIZATION]:zr.bearerAuth(n)},signal:AbortSignal.timeout(y_)})}catch(o){throw _.wrap(R.SYNC_FETCH_FAILED,nr.FETCH_L2_NODES_FAILED,o)}if(!i.ok){let o=await this.parseErrorBody(i);throw new _(R.SYNC_FETCH_FAILED,nr.fetchL2NodesFailedWithReason(o))}let s;try{s=await i.json()}catch(o){throw _.wrap(R.SYNC_FETCH_FAILED,nr.FETCH_L2_NODES_INVALID_JSON,o)}try{return A_(s)}catch(o){throw _.wrap(R.SYNC_FETCH_FAILED,nr.FETCH_L2_NODES_INVALID_RESPONSE,o)}}async pushSyncEvents(e,r){let{apiUrl:n,pat:i}=this.getConfig(),s;try{s=await fetch(`${n}${md.SYNC_PUSH}`,{method:zr.METHOD_POST,headers:{[zr.HEADER_CONTENT_TYPE]:zr.CONTENT_TYPE_JSON,[zr.HEADER_AUTHORIZATION]:zr.bearerAuth(i)},body:JSON.stringify({projectId:Number(e),events:r}),signal:AbortSignal.timeout(y_)})}catch(a){throw _.wrap(R.SYNC_PUSH_FAILED,nr.SYNC_PUSH_FAILED,a)}if(!s.ok){let a=await this.parseErrorBody(s);throw new _(R.SYNC_PUSH_FAILED,nr.syncPushFailedWithReason(a))}let o;try{o=await s.json()}catch(a){throw _.wrap(R.SYNC_PUSH_FAILED,nr.SYNC_PUSH_INVALID_JSON,a)}try{return R_(o)}catch(a){throw _.wrap(R.SYNC_PUSH_FAILED,nr.SYNC_PUSH_INVALID_RESPONSE,a)}}};y.register(T.RemoteSyncClient,()=>()=>new fs);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:`
138
+ `,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},Ve={clientNotRunning:t=>`LSP request "${t}" attempted after the client stopped running`,clientStoppedBeforeResponse:"LSP client stopped before the server responded to the request",requestTimedOut:(t,e)=>`LSP request "${t}" timed out after ${e}ms`,serverExited:(t,e)=>`LSP server process exited (code=${String(t)}) before responding`+(e?` -- stderr: ${e}`:""),spawnFailed:(t,e)=>`Failed to spawn LSP server "${t}": ${e}`,initializeFailed:t=>`LSP server exited before completing its initialize handshake: ${t}`,batchTimedOut:t=>`Tier B LSP batch exceeded its ${t}ms timeout and was aborted`,resolutionFailedForFile:t=>`Tier B LSP resolution failed for ${t}`,skippedMultiLocationDefinition:t=>`Tier B forward resolution: first definition result for ${t} resolved outside the workspace; falling through to the next in-workspace result`,concurrencyClamped:(t,e)=>`Tier B LSP batch: maxConcurrentFiles=${t} clamped to ${e} (bounded by file count and maxOpenFiles)`,processShardsClamped:(t,e)=>`Tier B LSP batch: maxProcesses=${t} clamped to ${e} (bounded by file count)`,processShardsMemoryClamped:(t,e,r,n)=>`Tier B LSP batch: maxProcesses=${t} clamped to ${e} by memory (${r}MiB budget / ${n}MiB per shard)`};function KE(){return["pipe","pipe","pipe"]}var OP=4e3,ua=class{child;buffer=Buffer.alloc(0);nextId=1;pending=new Map;stopped=!1;stderrTail="";async start(e){let r=jr(e.command),n=e.env??sa(),i=r&&sd(e.command)?await id(e.command,e.env):e.command,s=r?BE([i,...e.args].map(nd).join(" "),{cwd:e.cwd,stdio:KE(),shell:!0,env:n}):BE(e.command,e.args,{cwd:e.cwd,stdio:KE(),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(Ve.clientNotRunning(e)));let i=this.nextId++;return new Promise((s,o)=>{let a=n>0?setTimeout(()=>{this.pending.delete(i),o(new Error(Ve.requestTimedOut(e,n)))},n):void 0;this.pending.set(i,{resolve:l=>{a&&clearTimeout(a),s(l)},reject:l=>{a&&clearTimeout(a),o(l)}}),this.write({jsonrpc:Tn.JSON_RPC_VERSION,id:i,method:e,params:r})})}notify(e,r){!this.child||this.stopped||this.write({jsonrpc:Tn.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(Ve.clientStoppedBeforeResponse)),this.buffer=Buffer.alloc(0),this.stderrTail="",e.stdout.removeAllListeners("data"),e.stderr.removeAllListeners("data"),e.removeAllListeners("exit"),e.removeAllListeners("error"),e.removeAllListeners("spawn"),e.on("error",()=>{});try{e.stdin.end()}catch{}try{e.stdin.destroy(),e.stdout.destroy(),e.stderr.destroy()}catch{}try{e.kill()}catch{}try{e.unref()}catch{}}write(e){let r=JSON.stringify(e),n=`${Tn.CONTENT_LENGTH_HEADER_PREFIX}${Buffer.byteLength(r,H)}`+Tn.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(Tn.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+Tn.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(-OP)}onExit(e){this.stopped=!0,this.rejectAllPending(new Error(Ve.serverExited(e,this.stderrTail||void 0)))}onError(e){this.stopped=!0,this.rejectAllPending(e)}rejectAllPending(e){for(let r of this.pending.values())r.reject(e);this.pending.clear()}};import Rn from"fs";import ze from"path";var IP=[{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 LP(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=>Rn.existsSync(ze.join(t,s)))),!i&&e.suffixes.length>0)try{i=Rn.readdirSync(t).some(s=>e.suffixes.some(o=>s.endsWith(o)))}catch{i=!1}return r.set(t,i),i}function CP(t,e,r,n){let i=ze.dirname(ze.join(t,e));for(;;){if(LP(i,r,n))return i;if(i===t)return t;let s=ze.dirname(i);if(s===i)return t;i=s}}function $E(t,e){let r=ze.relative(ze.resolve(t),e);return r===""||r!==".."&&!r.startsWith(`..${ze.sep}`)&&!ze.isAbsolute(r)}function An(t,e,r,n){let i=ze.resolve(t),s=ze.normalize(ze.resolve(r,n));if($E(i,s))try{let o=Rn.realpathSync(s);return $E(e,o)?s:void 0}catch{return}}function YE(t,e,r,n){return n.map(i=>An(t,e,r,i)).filter(i=>i!==void 0)}function NP(t,e,r){let n=da(t,oe.CARGO_TOML);if(n===void 0)return[];let i=[],s="";for(let o of n.split(/\r?\n/)){let a=o.trim(),l=a.match(/^\[(.+)\]$/);if(l){s=l[1].trim().toLowerCase();continue}if(s==="workspace"){for(let c of a.matchAll(/"([^"]+)"/g))i.push(c[1]);continue}if(s.includes("dependencies")||s.startsWith("patch")||s.startsWith("replace"))for(let c of a.matchAll(/path\s*=\s*"([^"]+)"/g))i.push(c[1])}return YE(e,r,t,i)}function PP(t,e,r){let n=da(t,oe.GO_MOD);if(n===void 0)return[];let i=[];for(let s of n.split(/\r?\n/)){let o=s.trim().match(/^replace\s+\S+\s+=>\s+(\S+)\s*$/);if(!o)continue;let a=o[1];!a.startsWith(".")&&!ze.isAbsolute(a)||i.push(a)}return YE(e,r,t,i)}function DP(t,e,r){return[...bP(t,e,r),...wP(t,e,r)]}function vP(t,e,r,n){if(!n.includes("*")){let o=An(e,r,t,n);return o?[o]:[]}let i=An(e,r,t,ze.dirname(n));if(!i)return[];let s=ze.basename(n);try{return Rn.readdirSync(i).filter(o=>s==="*"||o.includes(s.slice(0,s.indexOf("*")))).map(o=>An(e,r,i,o)).filter(o=>o!==void 0)}catch{return[]}}function bP(t,e,r){let n=WE(t,oe.PACKAGE_JSON);if(n===void 0)return[];let i=n.workspaces,s=Array.isArray(i)?i:typeof i=="object"&&i!==null&&Array.isArray(i.packages)?i.packages:[],o=[];for(let a of s)typeof a=="string"&&o.push(...vP(t,e,r,a));return o}function wP(t,e,r){let n=WE(t,oe.TSCONFIG_JSON);if(n===void 0)return[];let i=[],s=n.references;if(Array.isArray(s))for(let a of s){if(typeof a!="object"||a===null)continue;let l=a.path;if(typeof l!="string")continue;let c=An(e,r,t,l);c&&i.push(c)}let o=n.extends;if(typeof o=="string"){let a=An(e,r,t,o);a&&i.push(a)}return i}function FP(t,e,r){let n=[],i=[];try{i=Rn.readdirSync(t)}catch{return n}for(let s of i){if(!s.endsWith(".csproj"))continue;let o=da(t,s);if(o!==void 0)for(let a of o.matchAll(/<ProjectReference[^>]*Include\s*=\s*"([^"]+)"/g)){let l=a[1].split("\\").join("/"),c=An(e,r,t,l);c&&n.push(ze.dirname(c))}}return n}function da(t,e){try{return Rn.readFileSync(ze.join(t,e),"utf8")}catch{return}}function WE(t,e){let r=da(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 MP(t,e,r,n){switch(e){case B.RUST:return NP(t,r,n);case B.GO:return PP(t,r,n);case B.TYPESCRIPT:return DP(t,r,n);case B.CSHARP:return FP(t,r,n);default:return[]}}function kP(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 jE(t){let e=ze.resolve(t.workspaceRoot),r;try{r=Rn.realpathSync(e)}catch{r=void 0}let n=IP.find(l=>l.languageId===t.languageId)??null,i=new Map,s=new Map,o=new Map;for(let l of t.files){let c=n?CP(e,l,n,i):e;o.set(l,c);let u=s.get(c);u?u.push(l):s.set(c,[l])}let a=[];for(let[l,c]of s)a.push({root:l,files:c,deps:n&&r?MP(l,t.languageId,e,r):[]});return{groups:kP(a),fileToProjectRoot:o}}var GP="LSP file path resolves outside the configured workspace root";function VE(t,e){let r=_n(t,e);if(!r)throw new _(R.FS_PATH_TRAVERSAL,GP);return r}var UP=12e4,HP=3e4,BP=200,KP=512,$P=.25,pa=new Set([hr.FUNCTION,hr.METHOD,hr.CONSTRUCTOR,hr.CLASS]),YP=new Set([hr.CLASS]);function qE(t,e){return e.has(t)}function gi(t){return t.split("\\").join("/")}var ma=class extends Error{};function WP(t){return"location"in t}function jP(t){return t?t.map(e=>WP(e)?{name:e.name,kind:e.kind,range:e.location.range,selectionRange:e.location.range}:e):[]}function ad(t,e){return e.normalizeSymbolName?e.normalizeSymbolName(t):t}function VP(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 ga(t,e,r,n){for(let i of t){if(!VP(i.range,e))continue;let s=qE(i.kind,r)?i.name:n;return(i.children?ga(i.children,e,r,s):void 0)??{symbol:i,containerName:n}}}function fa(t,e,r){let n=[];for(let i of t)if(pa.has(i.kind)&&n.push({symbol:i,containerName:r}),i.children){let s=qE(i.kind,e)?i.name:r;n.push(...fa(i.children,e,s))}return n}var xe=class{name;config={};logger;createClient;languageConfig;containmentKinds;constructor(e,r,n=()=>new ua){this.languageConfig=e,this.name=e.name,this.logger=r??he(),this.createClient=n,this.containmentKinds=e.containmentSymbolKinds??YP}configure(e){this.config=e}get requestTimeoutMs(){return this.config.timeoutMs??HP}get maxOpenFiles(){return this.config.maxOpenFiles??BP}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(od.availableParallelism(),e))}processMemoryEstimateMb(){return this.config.processMemoryEstimateMb??this.languageConfig.processMemoryEstimateMb??KP}maxProcessMemoryMb(){return this.config.maxProcessMemoryMb!==void 0?this.config.maxProcessMemoryMb:Math.max(Math.round(od.totalmem()/1024/1024*$P),this.processMemoryEstimateMb())}effectiveConcurrency(e){let r=this.maxConcurrentFiles,n=Math.max(1,Math.min(r,e,this.maxOpenFiles-1));return n!==r&&this.logger.debug(Ve.concurrencyClamped(r,n)),n}effectiveProcesses(e){let r=this.maxProcesses,n=Math.floor(this.maxProcessMemoryMb()/this.processMemoryEstimateMb()),i=od.availableParallelism(),s=Math.max(1,Math.min(r,e,i,n));return s!==r&&(this.logger.debug(Ve.processShardsClamped(r,s)),s<r&&n<Math.min(r,e,i)&&this.logger.debug(Ve.processShardsMemoryClamped(r,s,this.maxProcessMemoryMb(),this.processMemoryEstimateMb()))),s}async checkAvailability(e){let r=await this.languageConfig.checkPreflight(e,{binary:this.config.binaryOverride,args:this.config.argsOverride});return r.ready?{available:!0}:{available:!1,reason:r.reason}}async resolveEdges(e){if(e.files.length===0)return{edges:[],filesProcessed:[],filesFailed:[]};let r=this.config.timeoutMs??UP,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[pi.extname(e)]??this.languageConfig.defaultLanguageId}buildProjectShards(e,r){let i=jE({workspaceRoot:e.workspaceRoot,languageId:this.languageConfig.tierBLanguageId,files:e.files}).groups,s=(d,f)=>{let h={};for(let E of f){let I=e.callsByFile?.[E];I&&(h[E]=I)}return{workspaceRoot:e.workspaceRoot,serverRoot:d,files:f,callsByFile:h}};if(i.length<=r)return i.map(d=>s(d.root,d.files));let o=[...i].sort((d,f)=>d.files.length-f.files.length||d.root.localeCompare(f.root)),a=r-1,l=new Set(o.slice(-a).map(d=>d.root)),c=[],u=[];for(let d of i)l.has(d.root)?c.push(s(d.root,d.files)):u.push(...d.files);let p=[...c];return u.length>0&&p.push(s(e.workspaceRoot,u)),p}mergeShardOutcomes(e,r){let n=[],i=new Set,s=new Map,o=0;for(let u=0;u<e.length;u++){let p=e[u];for(let d of p.edges)n.push(d);for(let d of p.filesProcessed)i.add(d);for(let d of p.filesFailed)s.set(d.file,d);p.unavailableReason&&o++}n.sort((u,p)=>(u.sourceNodeKey+"->"+u.targetNodeKey).localeCompare(p.sourceNodeKey+"->"+p.targetNodeKey));let{filesProcessed:a,filesFailed:l}=this.reorderFiles(r,i,s),c={edges:n,filesProcessed:a,filesFailed:l};return o===e.length&&e.length>0&&(c.unavailableReason=e.find(u=>u.unavailableReason)?.unavailableReason),c}reorderFiles(e,r,n){let i=[],s=[];for(let o of e)r.has(o)?i.push(o):n.has(o)&&s.push(n.get(o));return{filesProcessed:i,filesFailed:s}}async runBatch(e,r,n){let{workspaceRoot:i,files:s,callsByFile:o}=r,a=r.serverRoot??i,l=await this.languageConfig.resolveBinary(i,{binary:this.config.binaryOverride,args:this.config.argsOverride});try{await e.start({command:l.command,args:l.args,cwd:a,env:l.env})}catch(u){return{edges:[],filesProcessed:[],filesFailed:[],unavailableReason:Ve.spawnFailed(l.command,u instanceof Error?u.message:String(u))}}try{await this.initializeSession(e,a)}catch(u){let p=u instanceof Error?u.message:String(u);await this.shutdownSession(e);let d=this.languageConfig.unavailableReasonForUnresolvableBinary;return!l.locallyResolved&&d?(this.logger.debug(Ve.initializeFailed(p)),{edges:[],filesProcessed:[],filesFailed:[],unavailableReason:d}):{edges:[],filesProcessed:[],filesFailed:[],unavailableReason:Ve.initializeFailed(p)}}await this.waitForColdStart(e,i,s);let c=n>0?Date.now()+n:void 0;try{return await this.processAllFiles(e,i,s,o,c,n)}finally{await this.shutdownSession(e)}}async settleColdStart(){let e=this.config.coldStartSettleMs??this.languageConfig.coldStartSettleMs??0;e>0&&await new Promise(r=>setTimeout(r,e))}async waitForColdStart(e,r,n){await this.settleColdStart(),(this.config.coldStartSettleMs??this.languageConfig.coldStartSettleMs??0)>0&&await this.waitForServerReady(e,r,n)}async waitForServerReady(e,r,n){let i=this.config.coldStartPollMs??5e3,s=this.config.coldStartMaxWaitMs??12e4,o=Date.now();for(;;){if(await this.probeServerReady(e,r,n)||Date.now()-o>=s)return;await new Promise(c=>setTimeout(c,i))}}async probeServerReady(e,r,n){let s={openFileCache:new Map,inFlightOpens:new Map,pinnedPaths:new Set,usedNodeKeysByFile:new Map};try{let o=!1;for(let a=0;a<Math.min(n.length,12);a++){let l=await this.openAndGetSymbols(e,r,n[a],s),c=fa(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=zE(r).toString();await e.request(Ht.INITIALIZE,{processId:process.pid,rootUri:n,capabilities:{textDocument:{documentSymbol:{hierarchicalDocumentSymbolSupport:!0}}},workspaceFolders:[{uri:n,name:pi.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=[],h=new Set,E=[],I=[];for(let C=0;C<n.length;C++){let L=l[C];if(L)if(L.ok){E.push(n[C]);for(let b of L.edges){let Q=`${b.sourceNodeKey}->${b.targetNodeKey}`;h.has(Q)||(h.add(Q),f.push(b))}}else I.push({file:n[C],reason:L.reason,retryable:L.deadlineExceeded})}return u&&this.markUnreachedFilesFailed(n,E,I,o),{edges:f,filesProcessed:E,filesFailed:I,...u?{unavailableReason:Ve.batchTimedOut(o)}:{}}}raceAgainstDeadline(e,r){return new Promise((n,i)=>{let s=setTimeout(()=>i(new ma),r);s.unref?.(),e.then(o=>{clearTimeout(s),n(o)},o=>{clearTimeout(s),i(o)})})}async runOneSlot(e,r,n,i,s,o,a){try{let l=o!==void 0?await this.raceAgainstDeadline(this.processOneFile(e,r,n,i,s),o):await this.processOneFile(e,r,n,i,s);return this.closeAndEvict(e,n,s),{ok:!0,edges:l}}catch(l){if(l instanceof ma)return{ok:!1,deadlineExceeded:!0,reason:Ve.batchTimedOut(a)};let c=l instanceof Error?l.message:String(l);return this.logger.warn(Ve.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:Ve.batchTimedOut(i),retryable:!0})}qualifiedContainerName(e){if(!(!this.languageConfig.supportsQualifiedContainment||!e))return ad(e,this.languageConfig)}resolveNodeKeyForFile(e,r,n,i,s,o){let a=e.usedNodeKeysByFile.get(r);if(!a){a={used:new Set([r]),resolved:new Map},e.usedNodeKeysByFile.set(r,a);let p=[...fa(n,this.containmentKinds)].sort((d,f)=>d.symbol.selectionRange.start.line-f.symbol.selectionRange.start.line);for(let{symbol:d,containerName:f}of p){let h=`${d.name}@${d.selectionRange.start.line}`;if(a.resolved.has(h))continue;let E=Sn(a.used,os(r,ad(d.name,this.languageConfig),this.qualifiedContainerName(f)),d.selectionRange.start.line);a.used.add(E),a.resolved.set(h,E)}}let l=`${i}@${s}`,c=a.resolved.get(l);if(c)return c;let u=Sn(a.used,os(r,ad(i,this.languageConfig),this.qualifiedContainerName(o)),s);return a.used.add(u),a.resolved.set(l,u),u}async processOneFile(e,r,n,i,s){let o=i?.[n];return this.languageConfig.definitionResolution==="forward"&&o&&o.length>0?this.processOneFileForward(e,r,n,o,s):this.processOneFileReverse(e,r,n,s)}async processOneFileReverse(e,r,n,i){let s=await this.openAndGetSymbols(e,r,n,i),o=fa(s.symbols,this.containmentKinds),a=await Promise.all(o.map(({symbol:c})=>e.request(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=gi(this.resolveNodeKeyForFile(i,n,s.symbols,u.name,u.selectionRange.start.line,p));for(let h of d){let E=await this.resolveReferenceEdge(e,r,h,f,n,i);E&&l.push(E)}}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=ga(o.symbols,{line:u,character:p},this.containmentKinds),h=f&&pa.has(f.symbol.kind)?gi(this.resolveNodeKeyForFile(s,n,o.symbols,f.symbol.name,f.symbol.selectionRange.start.line,f.containerName)):n;h!==d&&a.push({sourceNodeKey:h,targetNodeKey:d,source:Gl.LSP})}return a}async resolveFirstDefinitionTarget(e,r,n,i,s){if(!i)return;let o=Array.isArray(i)?i:[i];for(let a=0;a<o.length;a++){let l=await this.resolveTargetNodeKey(e,r,n,o[a],s);if(l!==void 0)return a>0&&this.logger.debug(Ve.skippedMultiLocationDefinition(n)),l}}async resolveTargetNodeKey(e,r,n,i,s){let o=pi.relative(r,JE(i.uri));if(pi.isAbsolute(o)||o.startsWith(".."))return;let a=gi(o);if(a===n)return;let l=await this.openAndGetSymbols(e,r,a,s),c=ga(l.symbols,i.range.start,this.containmentKinds);return c&&pa.has(c.symbol.kind)?gi(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=pi.relative(r,JE(n.uri));if(pi.isAbsolute(a)||a.startsWith(".."))return;let l=gi(a);if(l===s)return;let c=await this.openAndGetSymbols(e,r,l,o),u=ga(c.symbols,n.range.start,this.containmentKinds);return{sourceNodeKey:u&&pa.has(u.symbol.kind)?gi(this.resolveNodeKeyForFile(o,l,c.symbols,u.symbol.name,u.symbol.selectionRange.start.line,u.containerName)):l,targetNodeKey:i,source:Gl.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=VE(r,n),o=await xP.readFile(s,H),a=zE(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=jP(l),u={relativePath:n,uri:a,symbols:c};return i.openFileCache.set(n,u),u}};var ha="typescript",zP={".ts":ha,".mts":ha,".cts":ha,".tsx":"typescriptreact",".js":"javascript",".mjs":"javascript",".cjs":"javascript",".jsx":"javascriptreact"},JP={name:Pt.PACKAGE_NAME,tierBLanguageId:B.TYPESCRIPT,languageIdByExtension:zP,defaultLanguageId:ha,resolveBinary:aa,checkPreflight:HE,supportsQualifiedContainment:!0,initializationOptions:{maxTsServerMemory:ia},definitionResolution:"forward",unavailableReasonForUnresolvableBinary:ui.binaryUnresolvable},Ea=class extends xe{constructor(e,r){super(JP,e,r)}};import qP from"fs";import QP from"path";import{execFile as XP}from"child_process";import{promisify as ZP}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"},ps={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 QE=ZP(XP),XE=5e3,eD=[oe.PYPROJECT_TOML,oe.REQUIREMENTS_TXT];function tD(t){return eD.some(e=>qP.existsSync(QP.join(t,e)))}async function rD(t){let e=[it.NPX_NO_INSTALL_FLAG,it.PACKAGE_NAME,it.VERSION_FLAG];try{if(jr(it.NPX_COMMAND)){let r=await di(it.NPX_COMMAND,e,void 0);await QE(r,[],{cwd:t,timeout:XE,shell:!0})}else await QE(it.NPX_COMMAND,e,{cwd:t,timeout:XE});return!0}catch{return!1}}async function ZE(t,e){let r=tD(t),i=tr(t,{packageName:it.PACKAGE_NAME,binaryName:it.BINARY_NAME,defaultArgs:[it.STDIO_ARG]},e).locallyResolved?!0:await rD(t);return r?i?{markerFileResolvable:r,lspBinaryResolvable:i,ready:!0}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:ps.binaryUnresolvable}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:ps.markerFileMissing}}var e_="python",nD={".py":e_},iD={name:it.PACKAGE_NAME,tierBLanguageId:B.PYTHON,languageIdByExtension:nD,defaultLanguageId:e_,resolveBinary:(t,e)=>tr(t,{packageName:it.PACKAGE_NAME,binaryName:it.BINARY_NAME,defaultArgs:[it.STDIO_ARG]},e),checkPreflight:ZE,supportsQualifiedContainment:!0,definitionResolution:"reverse",unavailableReasonForUnresolvableBinary:ps.binaryUnresolvable},_a=class extends xe{constructor(e,r){super(iD,e,r)}};import sD from"fs";import cd from"path";import oD from"os";var yn={BINARY_NAME:"gopls",DEFAULT_ARGS:[]};function t_(t){let e=/^\((\*?)([^(]*)\)\.(.+)$/.exec(t);if(!e)return t;let[,,r,n]=e;return`${r}.${n}`}var ld={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 aD(t){return sD.existsSync(cd.join(t,oe.GO_MOD))}function lD(t){let e=[];return t.env.GOBIN&&e.push(t.env.GOBIN),t.env.GOPATH&&e.push(cd.join(t.env.GOPATH,"bin")),e.push(cd.join(oD.homedir(),"go","bin")),e}async function r_(t,e,r=rr){let n=aD(t),s=(await Pe({binaryName:yn.BINARY_NAME,defaultArgs:yn.DEFAULT_ARGS,extraCandidateDirs:lD(r)},e)).locallyResolved;return n?s?{markerFileResolvable:n,lspBinaryResolvable:s,ready:!0}:{markerFileResolvable:n,lspBinaryResolvable:s,ready:!1,reason:ld.binaryUnresolvable}:{markerFileResolvable:n,lspBinaryResolvable:s,ready:!1,reason:ld.markerFileMissing}}var n_="go",cD={".go":n_},uD={name:yn.BINARY_NAME,tierBLanguageId:B.GO,languageIdByExtension:cD,defaultLanguageId:n_,resolveBinary:(t,e)=>Pe({binaryName:yn.BINARY_NAME,defaultArgs:yn.DEFAULT_ARGS},e),checkPreflight:r_,supportsQualifiedContainment:!1,normalizeSymbolName:t_,definitionResolution:"reverse"},Sa=class extends xe{constructor(e,r){super(uD,e,r)}};import ED from"path";import _D from"os";import dD from"fs";import ud from"path";import pD from"os";var Vr={BINARY_NAME:"rust-analyzer",DEFAULT_ARGS:[]},Ta={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 i_(t){return t.startsWith("impl ")?t.slice(5):t}function gD(t){return dD.existsSync(ud.join(t,oe.CARGO_TOML))}function fD(t){return ud.join(t.env.CARGO_HOME??ud.join(pD.homedir(),".cargo"),"bin")}var mD=5e3;async function hD(t,e){return kE(t,mD,e)}async function s_(t,e,r=rr){let n=gD(t),i=await Pe({binaryName:Vr.BINARY_NAME,defaultArgs:Vr.DEFAULT_ARGS,extraCandidateDirs:[fD(r)]},e),s=i.locallyResolved,o=!s||await hD(i.command,i.fromUserOverride?void 0:[Vr.BINARY_NAME]);return n?s?o?{markerFileResolvable:n,lspBinaryResolvable:s,lspBinarySpawnable:o,ready:!0}:{markerFileResolvable:n,lspBinaryResolvable:s,lspBinarySpawnable:o,ready:!1,reason:Ta.binaryNotSpawnable}:{markerFileResolvable:n,lspBinaryResolvable:s,lspBinarySpawnable:o,ready:!1,reason:Ta.binaryUnresolvable}:{markerFileResolvable:n,lspBinaryResolvable:s,lspBinarySpawnable:o,ready:!1,reason:Ta.markerFileMissing}}var o_="rust",SD={".rs":o_};function TD(){return ED.join(_D.homedir(),".cargo","bin")}var AD={name:Vr.BINARY_NAME,tierBLanguageId:B.RUST,languageIdByExtension:SD,defaultLanguageId:o_,resolveBinary:(t,e)=>Pe({binaryName:Vr.BINARY_NAME,defaultArgs:Vr.DEFAULT_ARGS,extraCandidateDirs:[TD()]},e),checkPreflight:s_,supportsQualifiedContainment:!0,containmentSymbolKinds:new Set([hr.CLASS,hr.OBJECT]),normalizeSymbolName:i_,definitionResolution:"reverse",coldStartSettleMs:8e3,processMemoryEstimateMb:2048},Aa=class extends xe{constructor(e,r){super(AD,e,r)}};import RD from"fs";import a_ from"path";var On={BINARY_NAME:"clangd",DEFAULT_ARGS:[]},dd={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 yD=["compile_commands.json","CMakeLists.txt"];function OD(t){return yD.some(e=>RD.existsSync(a_.join(t,e)))}function ID(t){return t.platform===Ir?[a_.join(t.env.ProgramFiles??"C:\\Program Files","LLVM","bin")]:t.platform==="darwin"?["/opt/homebrew/opt/llvm/bin","/usr/local/opt/llvm/bin"]:["/usr/lib/llvm/bin","/usr/local/bin"]}async function l_(t,e,r=rr){let n=OD(t),s=(await Pe({binaryName:On.BINARY_NAME,defaultArgs:On.DEFAULT_ARGS,extraCandidateDirs:ID(r)},e)).locallyResolved;return n?s?{markerFileResolvable:n,lspBinaryResolvable:s,ready:!0}:{markerFileResolvable:n,lspBinaryResolvable:s,ready:!1,reason:dd.binaryUnresolvable}:{markerFileResolvable:n,lspBinaryResolvable:s,ready:!1,reason:dd.markerFileMissing}}var Er="cpp",LD={".c":"c",".h":"c",".cpp":Er,".cxx":Er,".cc":Er,".hpp":Er,".hxx":Er,".hh":Er,".cu":Er,".cuh":Er},CD={name:On.BINARY_NAME,tierBLanguageId:B.CPP,languageIdByExtension:LD,defaultLanguageId:Er,resolveBinary:(t,e)=>Pe({binaryName:On.BINARY_NAME,defaultArgs:On.DEFAULT_ARGS},e),checkPreflight:l_,supportsQualifiedContainment:!1,definitionResolution:"reverse"},Ra=class extends xe{constructor(e,r){super(CD,e,r)}};import ND from"fs";import ya from"path";import c_ from"os";var In={BINARY_NAME:"jdtls",DEFAULT_ARGS:[]},pd={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 PD=["pom.xml","build.gradle"];function DD(t){return PD.some(e=>ND.existsSync(ya.join(t,e)))}function vD(t){return t.platform===Ir?[ya.join(c_.homedir(),"scoop","shims"),ya.join(t.env.ChocolateyInstall??"C:\\ProgramData\\chocolatey","bin")]:t.platform==="darwin"?["/opt/homebrew/bin","/usr/local/bin"]:["/usr/local/bin","/usr/bin",ya.join(c_.homedir(),".local","share","jdtls","bin")]}async function u_(t,e,r=rr){let n=DD(t),s=(await Pe({binaryName:In.BINARY_NAME,defaultArgs:In.DEFAULT_ARGS,extraCandidateDirs:vD(r)},e)).locallyResolved;return n?s?{markerFileResolvable:n,lspBinaryResolvable:s,ready:!0}:{markerFileResolvable:n,lspBinaryResolvable:s,ready:!1,reason:pd.binaryUnresolvable}:{markerFileResolvable:n,lspBinaryResolvable:s,ready:!1,reason:pd.markerFileMissing}}var d_="java",bD={".java":d_},wD={name:In.BINARY_NAME,tierBLanguageId:B.JAVA,languageIdByExtension:bD,defaultLanguageId:d_,resolveBinary:(t,e)=>Pe({binaryName:In.BINARY_NAME,defaultArgs:In.DEFAULT_ARGS},e),checkPreflight:u_,supportsQualifiedContainment:!0,definitionResolution:"reverse"},Oa=class extends xe{constructor(e,r){super(wD,e,r)}};import FD from"fs";import MD from"path";import kD from"os";var Ln={BINARY_NAME:"csharp-ls",DEFAULT_ARGS:[]},gd={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 GD(){return MD.join(kD.homedir(),".dotnet","tools")}function xD(t){try{return FD.readdirSync(t).some(r=>r.endsWith(".sln")||r.endsWith(".slnx")||r.endsWith(".csproj"))}catch{return!1}}async function p_(t,e){let r=xD(t),i=(await Pe({binaryName:Ln.BINARY_NAME,defaultArgs:Ln.DEFAULT_ARGS,extraCandidateDirs:[GD()]},e)).locallyResolved;return r?i?{markerFileResolvable:r,lspBinaryResolvable:i,ready:!0}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:gd.binaryUnresolvable}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:gd.markerFileMissing}}var g_="csharp",UD={".cs":g_},HD={name:Ln.BINARY_NAME,tierBLanguageId:B.CSHARP,languageIdByExtension:UD,defaultLanguageId:g_,resolveBinary:(t,e)=>Pe({binaryName:Ln.BINARY_NAME,defaultArgs:Ln.DEFAULT_ARGS},e),checkPreflight:p_,supportsQualifiedContainment:!0,definitionResolution:"reverse"},Ia=class extends xe{constructor(e,r){super(HD,e,r)}};import BD from"fs";import KD from"path";import{execFile as $D}from"child_process";import{promisify as YD}from"util";var Tt={PACKAGE_NAME:"intelephense",NPX_COMMAND:"npx",NPX_NO_INSTALL_FLAG:"--no-install",STDIO_ARG:"--stdio",VERSION_FLAG:"--version"},gs={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 f_=YD($D),m_=5e3;function WD(t){return BD.existsSync(KD.join(t,"composer.json"))}async function jD(t){let e=[Tt.NPX_NO_INSTALL_FLAG,Tt.PACKAGE_NAME,Tt.VERSION_FLAG];try{if(jr(Tt.NPX_COMMAND)){let r=await di(Tt.NPX_COMMAND,e,void 0);await f_(r,[],{cwd:t,timeout:m_,shell:!0})}else await f_(Tt.NPX_COMMAND,e,{cwd:t,timeout:m_});return!0}catch{return!1}}async function h_(t,e){let r=WD(t),i=tr(t,{packageName:Tt.PACKAGE_NAME,defaultArgs:[Tt.STDIO_ARG]},e).locallyResolved?!0:await jD(t);return r?i?{markerFileResolvable:r,lspBinaryResolvable:i,ready:!0}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:gs.binaryUnresolvable}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:gs.markerFileMissing}}var Cn="php",VD={".php":Cn,".phtml":Cn,".php3":Cn,".php4":Cn,".php5":Cn,".phps":Cn},zD={name:Tt.PACKAGE_NAME,tierBLanguageId:B.PHP,languageIdByExtension:VD,defaultLanguageId:Cn,resolveBinary:(t,e)=>tr(t,{packageName:Tt.PACKAGE_NAME,defaultArgs:[Tt.STDIO_ARG]},e),checkPreflight:h_,supportsQualifiedContainment:!0,definitionResolution:"reverse",unavailableReasonForUnresolvableBinary:gs.binaryUnresolvable},La=class extends xe{constructor(e,r){super(zD,e,r)}};import JD from"fs";import md from"path";import qD from"os";var Nn={BINARY_NAME:"ruby-lsp",DEFAULT_ARGS:[]},fd={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 QD=["Gemfile","Gemfile.lock"];function XD(t){return QD.some(e=>JD.existsSync(md.join(t,e)))}function ZD(){if(process.platform==="win32")return[];let t=qD.homedir();return[md.join(t,".rbenv","shims"),md.join(t,".rvm","bin")]}async function E_(t,e){let r=XD(t),i=(await Pe({binaryName:Nn.BINARY_NAME,defaultArgs:Nn.DEFAULT_ARGS,extraCandidateDirs:ZD()},e)).locallyResolved;return r?i?{markerFileResolvable:r,lspBinaryResolvable:i,ready:!0}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:fd.binaryUnresolvable}:{markerFileResolvable:r,lspBinaryResolvable:i,ready:!1,reason:fd.markerFileMissing}}var Ca="ruby",ev={".rb":Ca,".rake":Ca,".gemspec":Ca},tv={name:Nn.BINARY_NAME,tierBLanguageId:B.RUBY,languageIdByExtension:ev,defaultLanguageId:Ca,resolveBinary:(t,e)=>Pe({binaryName:Nn.BINARY_NAME,defaultArgs:Nn.DEFAULT_ARGS},e),checkPreflight:E_,supportsQualifiedContainment:!0,definitionResolution:"reverse"},Na=class extends xe{constructor(e,r){super(tv,e,r)}};import fi from"fs/promises";var rv={maxWaitMs:1e4,retryIntervalMs:100,heartbeatIntervalMs:1e4,staleAfterMs:3e4};function nv(t){return new Promise(e=>setTimeout(e,t))}function iv(t){try{return process.kill(t,0),!0}catch(e){return e.code===an}}async function sv(t){try{let e=Number.parseInt(await fi.readFile(t,H),10);return Number.isFinite(e)?e:void 0}catch{return}}async function ov(t,e){let r=await fi.stat(t).catch(()=>{});if(!r||Date.now()-r.mtimeMs<=e)return!1;let n=await sv(t);return n!==void 0&&iv(n)?!1:(await fi.rm(t,{force:!0}).catch(()=>{}),!0)}function av(t){let e=t.code;return e===xn||e===an||e===Un||e===Hn}async function lv(t){try{let e=await fi.open(t,"wx");return await e.writeFile(String(process.pid)),await e.close(),!0}catch(e){if(!av(e))throw e;return!1}}async function __(t,e={}){let r={...rv,...e},n=Date.now()+r.maxWaitMs,i=!1;for(;!await lv(t);)if(i||(i=!0,e.onWaiting?.()),!await ov(t,r.staleAfterMs)){if(Date.now()>n)throw new Ms(t);await nv(r.retryIntervalMs)}let s=setInterval(()=>{let a=new Date;fi.utimes(t,a,a).catch(()=>{})},r.heartbeatIntervalMs);s.unref?.();let o=!1;return{async release(){o||(o=!0,clearInterval(s),await fi.rm(t,{force:!0}).catch(()=>{}))}}}function cv(t=y,e={}){let r=e.createAstWorkerPool??(()=>new Uo);t.register(T.KnowledgeGitService,(i,s)=>new Js(i.resolve(T.GitProvider),s?.logger,s?.gitNetworkTimeoutMs)),t.register(T.FileDiscovery,(i,s)=>new wo(i.resolve(T.GitProvider),s?.logger)),t.register(T.ConfigScanner,(i,s)=>new Mo(s?.logger)),t.register(T.VcsScanner,(i,s)=>new Go(i.resolve(T.GitProvider),s?.logger));let n;t.register(T.AstProcessor,(i,s)=>(n??=r(),new Ho(n,s?.logger))),t.register(T.GraphPersister,()=>new Vo),t.register(T.TempFileManager,()=>(i,s)=>new Jo(i,s)),t.register(T.ProcessLock,()=>__),t.register(T.QueryService,(i,s)=>new Qo(s?.logger)),t.register(T.TierBCoverageHintProvider,()=>({resolve:Mi})),t.register(T.ImpactService,(i,s)=>new Zo(s?.logger)),t.register(T.ChangeDetectionService,(i,s)=>new Qs(i.resolve(T.ImpactService,s),s?.logger)),t.register(T.TopologyBuilder,()=>new ea),t.register(T.SnapshotRenderer,()=>new qs),t.register(T.HydrationService,(i,s)=>new Xs(i.resolve(T.GitProvider),s?.logger)),t.register(T.SemanticDiffAnalyzer,(i,s)=>new ra(s?.logger)),t.register(T.EdgeResolutionProviders,(i,s)=>({typescript:()=>new Ea(s?.logger),python:()=>new _a(s?.logger),go:()=>new Sa(s?.logger),rust:()=>new Aa(s?.logger),cpp:()=>new Ra(s?.logger),java:()=>new Oa(s?.logger),csharp:()=>new Ia(s?.logger),php:()=>new La(s?.logger),ruby:()=>new Na(s?.logger)}))}cv();var zr={METHOD_POST:"POST",HEADER_AUTHORIZATION:"Authorization",HEADER_CONTENT_TYPE:"Content-Type",CONTENT_TYPE_JSON:"application/json",bearerAuth:t=>`Bearer ${t}`};var nr={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 hd={l2Nodes:t=>`/projects/${t}/l2-nodes`,SYNC_PUSH:"/sync/push"};function S_(t,e){if(typeof t!="object"||t===null||Array.isArray(t))throw new TypeError(`${e} must be an object`);return t}function T_(t,e){if(typeof t!="number"||!Number.isFinite(t))throw new TypeError(`${e} must be a finite number`);return t}function A_(t){if(!Array.isArray(t))throw new TypeError("response must be an array");for(let[e,r]of t.entries()){let n=S_(r,`response[${e}]`);if(T_(n.id,`response[${e}].id`),typeof n.name!="string")throw new TypeError(`response[${e}].name must be a string`)}return t}function R_(t){let e=S_(t,"response");if(typeof e.success!="boolean")throw new TypeError("response.success must be a boolean");return T_(e.processed,"response.processed"),t}var y_=3e4,fs=class{config;initialize(e){this.config=e}getConfig(){if(!this.config)throw new _(R.SYNC_FETCH_FAILED,nr.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}${hd.l2Nodes(e)}`,{headers:{[zr.HEADER_AUTHORIZATION]:zr.bearerAuth(n)},signal:AbortSignal.timeout(y_)})}catch(o){throw _.wrap(R.SYNC_FETCH_FAILED,nr.FETCH_L2_NODES_FAILED,o)}if(!i.ok){let o=await this.parseErrorBody(i);throw new _(R.SYNC_FETCH_FAILED,nr.fetchL2NodesFailedWithReason(o))}let s;try{s=await i.json()}catch(o){throw _.wrap(R.SYNC_FETCH_FAILED,nr.FETCH_L2_NODES_INVALID_JSON,o)}try{return A_(s)}catch(o){throw _.wrap(R.SYNC_FETCH_FAILED,nr.FETCH_L2_NODES_INVALID_RESPONSE,o)}}async pushSyncEvents(e,r){let{apiUrl:n,pat:i}=this.getConfig(),s;try{s=await fetch(`${n}${hd.SYNC_PUSH}`,{method:zr.METHOD_POST,headers:{[zr.HEADER_CONTENT_TYPE]:zr.CONTENT_TYPE_JSON,[zr.HEADER_AUTHORIZATION]:zr.bearerAuth(i)},body:JSON.stringify({projectId:Number(e),events:r}),signal:AbortSignal.timeout(y_)})}catch(a){throw _.wrap(R.SYNC_PUSH_FAILED,nr.SYNC_PUSH_FAILED,a)}if(!s.ok){let a=await this.parseErrorBody(s);throw new _(R.SYNC_PUSH_FAILED,nr.syncPushFailedWithReason(a))}let o;try{o=await s.json()}catch(a){throw _.wrap(R.SYNC_PUSH_FAILED,nr.SYNC_PUSH_INVALID_JSON,a)}try{return R_(o)}catch(a){throw _.wrap(R.SYNC_PUSH_FAILED,nr.SYNC_PUSH_INVALID_RESPONSE,a)}}};y.register(T.RemoteSyncClient,()=>()=>new fs);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:`
139
139
 
140
- `,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 O_={CHAT_COMPLETIONS:"/v1/chat/completions"};var pv=new Set(Object.values(zt));function Jr(t,e){if(typeof t!="object"||t===null||Array.isArray(t))throw new TypeError(`${e} must be an object`);return t}function hd(t,e){if(!Array.isArray(t))throw new TypeError(`${e} must be an array`);return t}function Dt(t,e){if(typeof t!="string")throw new TypeError(`${e} must be a string`);return t}function I_(t,e){if(typeof t!="number"||!Number.isFinite(t))throw new TypeError(`${e} must be a finite number`);return t}function Ed(t,e){return t===null?null:Dt(t,e)}function L_(t,e){let r=Dt(t,e);if(!pv.has(r))throw new TypeError(`${e} must be a supported chat role`);return r}function C_(t,e){for(let[r,n]of hd(t,e).entries()){let i=Jr(n,`${e}[${r}]`);if(Dt(i.id,`${e}[${r}].id`),i.type!==Gl)throw new TypeError(`${e}[${r}].type must be ${Gl}`);let s=Jr(i.function,`${e}[${r}].function`);Dt(s.name,`${e}[${r}].function.name`),Dt(s.arguments,`${e}[${r}].function.arguments`)}}function gv(t,e){let r=Jr(t,e);L_(r.role,`${e}.role`),Ed(r.content,`${e}.content`),r.name!==void 0&&Dt(r.name,`${e}.name`),r.tool_call_id!==void 0&&Dt(r.tool_call_id,`${e}.tool_call_id`),r.tool_calls!==void 0&&C_(r.tool_calls,`${e}.tool_calls`)}function N_(t){let e=Jr(t,"response");Dt(e.id,"response.id"),Dt(e.model,"response.model");for(let[r,n]of hd(e.choices,"response.choices").entries()){let i=Jr(n,`response.choices[${r}]`);I_(i.index,`response.choices[${r}].index`),gv(i.message,`response.choices[${r}].message`),Ed(i.finish_reason,`response.choices[${r}].finish_reason`)}return t}function P_(t){let e=Jr(t,"chunk");Dt(e.id,"chunk.id"),Dt(e.model,"chunk.model");for(let[r,n]of hd(e.choices,"chunk.choices").entries()){let i=Jr(n,`chunk.choices[${r}]`);I_(i.index,`chunk.choices[${r}].index`);let s=Jr(i.delta,`chunk.choices[${r}].delta`);s.role!==void 0&&L_(s.role,`chunk.choices[${r}].delta.role`),s.content!==void 0&&Dt(s.content,`chunk.choices[${r}].delta.content`),s.tool_calls!==void 0&&C_(s.tool_calls,`chunk.choices[${r}].delta.tool_calls`),Ed(i.finish_reason,`chunk.choices[${r}].finish_reason`)}return t}var v_=3e4,D_=4e3,ms=class{config;initialize(e){this.config=e}getConfig(){if(!this.config)throw new _(R.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}${O_.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(D_)}),{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(D_)});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(v_)})}catch(s){throw _.wrap(R.LLM_CHAT_COMPLETION_FAILED,ot.CHAT_COMPLETION_FAILED,s)}if(!n.ok){let s=await this.parseErrorBody(n);throw n.status===429?new _(R.LLM_RATE_LIMITED,ot.chatCompletionFailedWithReason(s)):n.status===401||n.status===403?new _(R.LLM_AUTH_FAILED,ot.chatCompletionFailedWithReason(s)):new _(R.LLM_HTTP_FAILED,ot.chatCompletionFailedWithReason(s))}let i;try{i=await n.json()}catch(s){throw _.wrap(R.LLM_INVALID_RESPONSE,ot.CHAT_COMPLETION_INVALID_JSON,s)}try{return this.fromWireResult(N_(i))}catch(s){throw _.wrap(R.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 fv(s,n,i,o);if(!c.body)return;let u=c.body.getReader(),p=new TextDecoder,d="";for(;;){let{done:f,value:h}=await u.read();if(f)break;d+=p.decode(h,{stream:!0});let E;for(;(E=d.indexOf(st.SSE_BLOCK_SEPARATOR))!==-1;){let I=d.slice(0,E);d=d.slice(E+st.SSE_BLOCK_SEPARATOR.length);let C=mv(I,a);if(C.kind==="done")return;C.kind==="chunk"&&(yield C.chunk)}}}return l()}};async function fv(t,e,r,n){let i;try{i=await fetch(t,{method:st.METHOD_POST,headers:e,body:r,signal:AbortSignal.timeout(v_)})}catch(s){throw _.wrap(R.LLM_CHAT_COMPLETION_FAILED,ot.CHAT_COMPLETION_STREAM_FAILED,s)}if(!i.ok){let s=await n(i);throw new _(R.LLM_CHAT_COMPLETION_FAILED,ot.chatCompletionStreamFailedWithReason(s))}return i}function mv(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 _.wrap(R.LLM_STREAM_FAILED,ot.CHAT_COMPLETION_STREAM_INVALID_JSON,s)}try{return{kind:"chunk",chunk:e(P_(i))}}catch(s){throw _.wrap(R.LLM_STREAM_FAILED,ot.CHAT_COMPLETION_STREAM_INVALID_RESPONSE,s)}}y.register(T.LlmClient,()=>()=>new ms);var b_="semantic decision model is not installed in this foundation slice",Na=class{name="local-semantic-decision";async checkAvailability(){return{available:!1,reason:b_}}async score(e){return{scores:[],unavailableReason:b_}}};function hv(t=y){t.register(T.SemanticDecisionProvider,()=>new Na)}hv();import yl from"process";import eF from"crypto";import{z as Bd}from"zod";import Rw from"fs";import yw from"path";var w_={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"},qr={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 F_ from"fs/promises";import M_ from"path";async function ve(t,e,r){let n=M_.join(t,Ee,Or,e);await F_.mkdir(M_.dirname(n),{recursive:!0}),await F_.appendFile(n,JSON.stringify({ts:new Date().toISOString(),...r})+`
141
- `,H)}async function mi(t,e){await ve(t,up,e)}async function k_(t,e){await mi(t,{event:qr.SUMMARY,...e})}async function G_(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 x_ from"path";import{pathToFileURL as Ev}from"url";async function hi(t,e,r){let n=t.getFirst();if(n)return n;let s=await e.getRemoteUrl(r)??Ev(x_.resolve(r)).href;return t.getOrInsert({name:x_.basename(r),repoUrl:s})}async function Pa(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 Ei(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 h of u)h.language&&d.add(h.language);for(let h of p)await l(i,{event:c.parseFailure,...h});for(let h of a)await l(i,{event:c.fileSkippedOversized,...h});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 hs(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 _i(t,e){if(e.length===0)return;let r=hs(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 Da(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&&_i(e,o)})}function _v(t){return JSON.stringify({byFile:t})}function va(t){let e=t.meta.get(S.META_KEY_CALL_RESOLUTION_STATS);if(!e)return{};try{return JSON.parse(e).byFile??{}}catch{return{}}}function U_(t,e){Object.keys(e).length!==0&&t.meta.set(S.META_KEY_CALL_RESOLUTION_STATS,_v(e))}function ba(t,e){Object.keys(e).length!==0&&U_(t,e)}function H_(t,e,r){let n=va(t);for(let i of r)delete n[i];for(let[i,s]of Object.entries(e))n[i]=s;U_(t,n)}function B_(t){let e=va(t);return{byFile:e,total:Lr(e)}}async function K_(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 $_(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 Y_(){return{success:!0,partialFailure:!1,message:De.ALREADY_INITIALIZED,filesRequested:0,filesParsed:0,filesFailed:0,failures:[],filesSkippedOversized:0,skippedExistingGraph:!0}}import Sv from"path";function ie(t){return Sv.join(t,Ee,Fi)}import j_ from"fs/promises";import Tv from"os";import Av from"path";var wa={SNAPSHOTTING:"Packing knowledge graph snapshot...",DB_NOT_FOUND:'Local database not found. Please run "docuvia init".'},Si={START:"snapshot.start",ERROR:"snapshot.error",SUMMARY:"snapshot.summary",TIER_B_FINALIZED:"snapshot.tierB.finalized"},W_="docuvia-snapshot-";async function Ti(t,e,r){let n=y.resolve(T.SnapshotRenderer),i=e.graph.getAllNodes(),s=e.graph.getAllLinks(),o=await j_.mkdtemp(Av.join(Tv.tmpdir(),W_));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 j_.rm(o,{recursive:!0,force:!0})}}var V_=["SIGTERM","SIGINT"],Fa=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 mi(e,{event:qr.START,workspaceRoot:e});let n=y.resolve(T.GitProvider),i=y.resolve(T.KnowledgeGitService,{logger:r}),s=y.resolve(T.FileDiscovery,{logger:r}),o=y.resolve(T.ConfigScanner,{logger:r}),a=y.resolve(T.VcsScanner,{logger:r}),l=y.resolve(T.AstProcessor,{logger:r}),c=y.resolve(T.GraphPersister),u=y.resolve(T.TempFileManager),p=y.resolve(T.GraphStoreOpener),d;try{d=await p({dbPath:ie(e)})}catch(f){throw _.wrap(R.INIT_WORKFLOW_FAILED,De.OPEN_DB_FAILED,f)}try{let f=d.projects.getFirst(),{l2Nodes:h}=d.graph.count(),E=f!==void 0&&h>0;if(await G_(i,e,r),E)return r.info(De.ALREADY_INITIALIZED),await mi(e,{event:qr.ALREADY_INITIALIZED,workspaceRoot:e}),Y_();let I=await hi(d.projects,n,e);r.info(De.SCANNING_WORKSPACE);let C=await Pa({configScanner:o,vcsScanner:a,fileDiscovery:s,filesRepo:d.files,workspaceRoot:e});r.info(De.PARSING_AST);let{parsedResults:L,failures:b,callResolutionByFile:Q}=await Ei({astProcessor:l,graphPersister:c,store:d,workspaceRoot:e,projectId:I.id,filesToParse:C.filesToParse,skippedOversized:C.skippedOversized,tags:C.tags,appendLogLine:mi,logEvents:{parseFailure:qr.PARSE_FAILURE,fileSkippedOversized:qr.FILE_SKIPPED_OVERSIZED}});r.info(De.PERSISTING_GRAPH),ba(d,Q??{}),await Da({store:d,git:n,workspaceRoot:e,parsedResults:L}),r.info(De.SNAPSHOTTING_KNOWLEDGE_BRANCH);let J=y.resolve(T.HydrationService,{logger:r});try{await Ti(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 mi(e,{event:qr.SNAPSHOT_AFTER_INIT_FAILED,message:M instanceof Error?M.message:String(M)})}r.info(De.INITIALIZING_TEMP_FILES);let $=await K_(u,e,r),te=Rv($,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 Re=$_({filesRequested:M,filesParsed:ne,filesFailed:pe,failures:b,filesSkippedOversized:N});return await k_(e,{filesRequested:M,filesParsed:ne,filesFailed:pe,failures:b,filesSkippedOversized:N}),Re}finally{te()}}finally{await d.close()}}};function Rv(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 V_)process.on(n,r);return()=>{for(let n of V_)process.removeListener(n,r)}}import z_ from"fs/promises";var Pn={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}`},Ma={START:"clean.start",SUMMARY:"clean.summary"};async function _d(t,e){await ve(t,dp,e)}async function Sd(t,e){await _d(t,{event:Ma.SUMMARY,...e})}import Td from"path";function ka(t,e){let r=Td.resolve(e),n=Td.resolve(t);return n===r||n.startsWith(`${r}${Td.sep}`)}var Ga=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(){let{workspaceRoot:e,logger:r}=this,n=ie(e);if(!ka(n,e))throw new _(R.CLEAN_WORKFLOW_FAILED,Pn.PATH_ESCAPES_WORKSPACE(n,e));r.info(Pn.CLEANING(n)),await _d(e,{event:Ma.START});let i=!0;try{await z_.access(n)}catch{i=!1}if(!i){let o={deleted:!1,message:Pn.NOT_FOUND};return await Sd(e,o),o}try{await z_.unlink(n)}catch(o){throw _.wrap(R.CLEAN_WORKFLOW_FAILED,Pn.DELETE_FAILED(n),o)}r.info(Pn.DELETED_AT(n));let s={deleted:!0,message:Pn.DELETED};return await Sd(e,s),s}};var xa={GETTING_STATUS:"Getting status...",DB_NOT_FOUND:'Local database not found. Please run "docuvia init".'},Ua={START:"status.start",ERROR:"status.error",SUMMARY:"status.summary"};async function Ha(t,e){await ve(t,pp,e)}var yv="ensureHydrated: automatic hydration refused; local.db left untouched (see reason)";async function Qr(t,e){let r=y.resolve(T.GraphStoreOpener),n;try{n=await r({dbPath:ie(t),readonly:!1})}catch{return}try{let i=y.resolve(T.HydrationService,{logger:e});if(await i.isStale(t,n)){let s=await i.hydrate(t,n);s.refused&&e.warn(yv,{refusalReason:s.refusalReason})}}finally{await n.close()}}var Dn={COMMIT_MESSAGE:"commitMessage",CONTRACT_SYMBOL:"contractSymbol"};function ir(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(Ov):[]}catch{return[]}}function Ov(t){if(!t||typeof t!="object")return!1;let e=t;return(e.kind===Dn.COMMIT_MESSAGE||e.kind===Dn.CONTRACT_SYMBOL)&&typeof e.target=="string"&&typeof e.commitSha=="string"}function J_(t,e){if(e.length===0)return;let r=ir(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 q_(t,e){if(e.length===0)return;let r=new Set(e),n=ir(t).filter(i=>!r.has(i.target));t.meta.set(S.META_KEY_TIER_C_QUEUE,JSON.stringify(n))}function Q_(t,e,r){let n=ir(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 Ba=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(){let{workspaceRoot:e,logger:r}=this;r.info(xa.GETTING_STATUS),await Ha(e,{event:Ua.START}),await Qr(e,r);let n=y.resolve(T.GraphStoreOpener),i;try{i=await n({dbPath:ie(e),readonly:!0})}catch(s){if(s instanceof _&&s.code===R.DB_NOT_FOUND){let o=new _(R.DB_NOT_FOUND,xa.DB_NOT_FOUND,s);throw await Ha(e,{event:Ua.ERROR,message:xa.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:ir(i).length,graphFreshness:await this.resolveGraphFreshness(i)};return await Ha(e,{event:Ua.SUMMARY,...c}),c}finally{await i.close()}}async resolveGraphFreshness(e){try{if(!y.has(T.GitProvider))return"unknown";let n=await y.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 vn={STARTING:t=>`Starting sync for project ${t}...`,DB_NOT_FOUND:'Local database not found. Please run "docuvia init".',NOTHING_TO_SYNC:"Nothing to sync: no changed files detected.",NOTHING_NEW:t=>`Nothing new to sync (${t} module(s) skipped, no remote match).`,SYNCED:(t,e)=>`Synced ${t} decision(s), ${e} module(s) skipped.`},bn={START:"sync.start",ERROR:"sync.error",SUMMARY:"sync.summary"};async function wn(t,e){await ve(t,gp,e)}import Ka from"fs/promises";import Ad from"path";function Rd(t){return Ad.join(t,Ee,Or,yp)}var Iv=1e4,Lv=100,Cv=6e4,Nv=".lock",Pv={TIMED_OUT_WAITING:t=>`Timed out waiting for the sync-state lock at ${t} \u2014 another docuvia publish may be stuck`};async function Dv(t,e){let r=`${t}${Nv}`;await Ka.mkdir(Ad.dirname(r),{recursive:!0});try{return await e(r,{maxWaitMs:Iv,retryIntervalMs:Lv,staleAfterMs:Cv})}catch(n){throw n instanceof Ms?_.wrap(R.DB_LOCKED,Pv.TIMED_OUT_WAITING(r),n):n}}async function X_(t,e,r){let n=await Dv(Rd(t),e);try{return await r()}finally{await n.release()}}async function Z_(t){try{let e=await Ka.readFile(Rd(t),H);return JSON.parse(e)}catch{return{}}}async function eS(t,e){let r=Rd(t);await Ka.mkdir(Ad.dirname(r),{recursive:!0}),await Ka.writeFile(r,JSON.stringify(e,null,2),H)}var $a=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(vn.STARTING(i)),await wn(r,{event:bn.START,projectId:i,commitSha:s??null});let o=y.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:vn.NOTHING_TO_SYNC};return await wn(r,{event:bn.SUMMARY,projectId:i,...p}),p}let c=y.resolve(T.GraphStoreOpener),u;try{u=await c({dbPath:ie(r),readonly:!0})}catch(p){throw p instanceof _&&p.code===R.DB_NOT_FOUND?(await wn(r,{event:bn.ERROR,projectId:i,message:vn.DB_NOT_FOUND}),new _(R.DB_NOT_FOUND,vn.DB_NOT_FOUND,p)):p}try{let d=y.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 wn(r,{event:bn.ERROR,projectId:i,message:b}),L}let h=new Map(f.map(L=>[L.name,L.id])),E=u.graph.findNodesForChangedFiles(Array.from(l)),I=y.resolve(T.ProcessLock),C=await X_(r,I,async()=>{let L=await Z_(r),b=L[i]??{syncedContentHashes:[]},Q=new Set(b.syncedContentHashes),{events:J,newlySyncedHashes:$,skippedL2Count:te}=this.buildSyncPushEvents(E,h,Q);if(J.length===0)return{synced:0,skipped:te,message:vn.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 wn(r,{event:bn.ERROR,projectId:i,message:N}),pe}b.syncedContentHashes=Array.from(new Set([...Q,...$])),L[i]=b,await eS(r,L);let ne=M.processed??J.length;return{synced:ne,skipped:te,message:vn.SYNCED(ne,te)}});return await wn(r,{event:bn.SUMMARY,projectId:i,...C}),C}finally{await u.close()}}buildSyncPushEvents(e,r,n){let i=[],s=[],o=0;for(let{l2Node:a,l3Nodes:l}of e){let c=r.get(a.name);if(c===void 0){o++;continue}for(let u of l)u.content_hash&&n.has(u.content_hash)||(i.push(this.buildL3PushEvent(c,u)),u.content_hash&&s.push(u.content_hash))}return{events:i,newlySyncedHashes:s,skippedL2Count:o}}buildL3PushEvent(e,r){return{type:ap.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 Zb from"fs";import ew 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"},tS=`You are an expert software architect reviewing source code directly (not commit history).
140
+ `,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 O_={CHAT_COMPLETIONS:"/v1/chat/completions"};var uv=new Set(Object.values(zt));function Jr(t,e){if(typeof t!="object"||t===null||Array.isArray(t))throw new TypeError(`${e} must be an object`);return t}function Ed(t,e){if(!Array.isArray(t))throw new TypeError(`${e} must be an array`);return t}function Dt(t,e){if(typeof t!="string")throw new TypeError(`${e} must be a string`);return t}function I_(t,e){if(typeof t!="number"||!Number.isFinite(t))throw new TypeError(`${e} must be a finite number`);return t}function _d(t,e){return t===null?null:Dt(t,e)}function L_(t,e){let r=Dt(t,e);if(!uv.has(r))throw new TypeError(`${e} must be a supported chat role`);return r}function C_(t,e){for(let[r,n]of Ed(t,e).entries()){let i=Jr(n,`${e}[${r}]`);if(Dt(i.id,`${e}[${r}].id`),i.type!==xl)throw new TypeError(`${e}[${r}].type must be ${xl}`);let s=Jr(i.function,`${e}[${r}].function`);Dt(s.name,`${e}[${r}].function.name`),Dt(s.arguments,`${e}[${r}].function.arguments`)}}function dv(t,e){let r=Jr(t,e);L_(r.role,`${e}.role`),_d(r.content,`${e}.content`),r.name!==void 0&&Dt(r.name,`${e}.name`),r.tool_call_id!==void 0&&Dt(r.tool_call_id,`${e}.tool_call_id`),r.tool_calls!==void 0&&C_(r.tool_calls,`${e}.tool_calls`)}function N_(t){let e=Jr(t,"response");Dt(e.id,"response.id"),Dt(e.model,"response.model");for(let[r,n]of Ed(e.choices,"response.choices").entries()){let i=Jr(n,`response.choices[${r}]`);I_(i.index,`response.choices[${r}].index`),dv(i.message,`response.choices[${r}].message`),_d(i.finish_reason,`response.choices[${r}].finish_reason`)}return t}function P_(t){let e=Jr(t,"chunk");Dt(e.id,"chunk.id"),Dt(e.model,"chunk.model");for(let[r,n]of Ed(e.choices,"chunk.choices").entries()){let i=Jr(n,`chunk.choices[${r}]`);I_(i.index,`chunk.choices[${r}].index`);let s=Jr(i.delta,`chunk.choices[${r}].delta`);s.role!==void 0&&L_(s.role,`chunk.choices[${r}].delta.role`),s.content!==void 0&&Dt(s.content,`chunk.choices[${r}].delta.content`),s.tool_calls!==void 0&&C_(s.tool_calls,`chunk.choices[${r}].delta.tool_calls`),_d(i.finish_reason,`chunk.choices[${r}].finish_reason`)}return t}var v_=3e4,D_=4e3,ms=class{config;initialize(e){this.config=e}getConfig(){if(!this.config)throw new _(R.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}${O_.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(D_)}),{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(D_)});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(v_)})}catch(s){throw _.wrap(R.LLM_CHAT_COMPLETION_FAILED,ot.CHAT_COMPLETION_FAILED,s)}if(!n.ok){let s=await this.parseErrorBody(n);throw n.status===429?new _(R.LLM_RATE_LIMITED,ot.chatCompletionFailedWithReason(s)):n.status===401||n.status===403?new _(R.LLM_AUTH_FAILED,ot.chatCompletionFailedWithReason(s)):new _(R.LLM_HTTP_FAILED,ot.chatCompletionFailedWithReason(s))}let i;try{i=await n.json()}catch(s){throw _.wrap(R.LLM_INVALID_RESPONSE,ot.CHAT_COMPLETION_INVALID_JSON,s)}try{return this.fromWireResult(N_(i))}catch(s){throw _.wrap(R.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 pv(s,n,i,o);if(!c.body)return;let u=c.body.getReader(),p=new TextDecoder,d="";for(;;){let{done:f,value:h}=await u.read();if(f)break;d+=p.decode(h,{stream:!0});let E;for(;(E=d.indexOf(st.SSE_BLOCK_SEPARATOR))!==-1;){let I=d.slice(0,E);d=d.slice(E+st.SSE_BLOCK_SEPARATOR.length);let C=gv(I,a);if(C.kind==="done")return;C.kind==="chunk"&&(yield C.chunk)}}}return l()}};async function pv(t,e,r,n){let i;try{i=await fetch(t,{method:st.METHOD_POST,headers:e,body:r,signal:AbortSignal.timeout(v_)})}catch(s){throw _.wrap(R.LLM_CHAT_COMPLETION_FAILED,ot.CHAT_COMPLETION_STREAM_FAILED,s)}if(!i.ok){let s=await n(i);throw new _(R.LLM_CHAT_COMPLETION_FAILED,ot.chatCompletionStreamFailedWithReason(s))}return i}function gv(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 _.wrap(R.LLM_STREAM_FAILED,ot.CHAT_COMPLETION_STREAM_INVALID_JSON,s)}try{return{kind:"chunk",chunk:e(P_(i))}}catch(s){throw _.wrap(R.LLM_STREAM_FAILED,ot.CHAT_COMPLETION_STREAM_INVALID_RESPONSE,s)}}y.register(T.LlmClient,()=>()=>new ms);var b_="semantic decision model is not installed in this foundation slice",Pa=class{name="local-semantic-decision";async checkAvailability(){return{available:!1,reason:b_}}async score(e){return{scores:[],unavailableReason:b_}}};function fv(t=y){t.register(T.SemanticDecisionProvider,()=>new Pa)}fv();import Ol from"process";import Xw from"crypto";import{z as Kd}from"zod";import Tw from"fs";import Aw from"path";var w_={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"},qr={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 F_ from"fs/promises";import M_ from"path";async function ve(t,e,r){let n=M_.join(t,Ee,Or,e);await F_.mkdir(M_.dirname(n),{recursive:!0}),await F_.appendFile(n,JSON.stringify({ts:new Date().toISOString(),...r})+`
141
+ `,H)}async function mi(t,e){await ve(t,dp,e)}async function k_(t,e){await mi(t,{event:qr.SUMMARY,...e})}async function G_(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 x_ from"path";import{pathToFileURL as mv}from"url";async function hi(t,e,r){let n=t.getFirst();if(n)return n;let s=await e.getRemoteUrl(r)??mv(x_.resolve(r)).href;return t.getOrInsert({name:x_.basename(r),repoUrl:s})}async function Da(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 Ei(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 h of u)h.language&&d.add(h.language);for(let h of p)await l(i,{event:c.parseFailure,...h});for(let h of a)await l(i,{event:c.fileSkippedOversized,...h});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 hs(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 _i(t,e){if(e.length===0)return;let r=hs(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 va(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&&_i(e,o)})}function hv(t){return JSON.stringify({byFile:t})}function ba(t){let e=t.meta.get(S.META_KEY_CALL_RESOLUTION_STATS);if(!e)return{};try{return JSON.parse(e).byFile??{}}catch{return{}}}function U_(t,e){Object.keys(e).length!==0&&t.meta.set(S.META_KEY_CALL_RESOLUTION_STATS,hv(e))}function wa(t,e){Object.keys(e).length!==0&&U_(t,e)}function H_(t,e,r){let n=ba(t);for(let i of r)delete n[i];for(let[i,s]of Object.entries(e))n[i]=s;U_(t,n)}function B_(t){let e=ba(t);return{byFile:e,total:Lr(e)}}async function K_(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 $_(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 Y_(){return{success:!0,partialFailure:!1,message:De.ALREADY_INITIALIZED,filesRequested:0,filesParsed:0,filesFailed:0,failures:[],filesSkippedOversized:0,skippedExistingGraph:!0}}import Ev from"path";function ie(t){return Ev.join(t,Ee,Fi)}import j_ from"fs/promises";import _v from"os";import Sv from"path";var Fa={SNAPSHOTTING:"Packing knowledge graph snapshot...",DB_NOT_FOUND:'Local database not found. Please run "docuvia init".'},Si={START:"snapshot.start",ERROR:"snapshot.error",SUMMARY:"snapshot.summary",TIER_B_FINALIZED:"snapshot.tierB.finalized"},W_="docuvia-snapshot-";async function Ti(t,e,r){let n=y.resolve(T.SnapshotRenderer),i=e.graph.getAllNodes(),s=e.graph.getAllLinks(),o=await j_.mkdtemp(Sv.join(_v.tmpdir(),W_));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 j_.rm(o,{recursive:!0,force:!0})}}var V_=["SIGTERM","SIGINT"],Ma=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 mi(e,{event:qr.START,workspaceRoot:e});let n=y.resolve(T.GitProvider),i=y.resolve(T.KnowledgeGitService,{logger:r}),s=y.resolve(T.FileDiscovery,{logger:r}),o=y.resolve(T.ConfigScanner,{logger:r}),a=y.resolve(T.VcsScanner,{logger:r}),l=y.resolve(T.AstProcessor,{logger:r}),c=y.resolve(T.GraphPersister),u=y.resolve(T.TempFileManager),p=y.resolve(T.GraphStoreOpener),d;try{d=await p({dbPath:ie(e)})}catch(f){throw _.wrap(R.INIT_WORKFLOW_FAILED,De.OPEN_DB_FAILED,f)}try{let f=d.projects.getFirst(),{l2Nodes:h}=d.graph.count(),E=f!==void 0&&h>0;if(await G_(i,e,r),E)return r.info(De.ALREADY_INITIALIZED),await mi(e,{event:qr.ALREADY_INITIALIZED,workspaceRoot:e}),Y_();let I=await hi(d.projects,n,e);r.info(De.SCANNING_WORKSPACE);let C=await Da({configScanner:o,vcsScanner:a,fileDiscovery:s,filesRepo:d.files,workspaceRoot:e});r.info(De.PARSING_AST);let{parsedResults:L,failures:b,callResolutionByFile:Q}=await Ei({astProcessor:l,graphPersister:c,store:d,workspaceRoot:e,projectId:I.id,filesToParse:C.filesToParse,skippedOversized:C.skippedOversized,tags:C.tags,appendLogLine:mi,logEvents:{parseFailure:qr.PARSE_FAILURE,fileSkippedOversized:qr.FILE_SKIPPED_OVERSIZED}});r.info(De.PERSISTING_GRAPH),wa(d,Q??{}),await va({store:d,git:n,workspaceRoot:e,parsedResults:L}),r.info(De.SNAPSHOTTING_KNOWLEDGE_BRANCH);let J=y.resolve(T.HydrationService,{logger:r});try{await Ti(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 mi(e,{event:qr.SNAPSHOT_AFTER_INIT_FAILED,message:M instanceof Error?M.message:String(M)})}r.info(De.INITIALIZING_TEMP_FILES);let $=await K_(u,e,r),te=Tv($,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 Re=$_({filesRequested:M,filesParsed:ne,filesFailed:pe,failures:b,filesSkippedOversized:N});return await k_(e,{filesRequested:M,filesParsed:ne,filesFailed:pe,failures:b,filesSkippedOversized:N}),Re}finally{te()}}finally{await d.close()}}};function Tv(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 V_)process.on(n,r);return()=>{for(let n of V_)process.removeListener(n,r)}}import z_ from"fs/promises";var Pn={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}`},ka={START:"clean.start",SUMMARY:"clean.summary"};async function Sd(t,e){await ve(t,pp,e)}async function Td(t,e){await Sd(t,{event:ka.SUMMARY,...e})}import Ad from"path";function Ga(t,e){let r=Ad.resolve(e),n=Ad.resolve(t);return n===r||n.startsWith(`${r}${Ad.sep}`)}var xa=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(){let{workspaceRoot:e,logger:r}=this,n=ie(e);if(!Ga(n,e))throw new _(R.CLEAN_WORKFLOW_FAILED,Pn.PATH_ESCAPES_WORKSPACE(n,e));r.info(Pn.CLEANING(n)),await Sd(e,{event:ka.START});let i=!0;try{await z_.access(n)}catch{i=!1}if(!i){let o={deleted:!1,message:Pn.NOT_FOUND};return await Td(e,o),o}try{await z_.unlink(n)}catch(o){throw _.wrap(R.CLEAN_WORKFLOW_FAILED,Pn.DELETE_FAILED(n),o)}r.info(Pn.DELETED_AT(n));let s={deleted:!0,message:Pn.DELETED};return await Td(e,s),s}};var Ua={GETTING_STATUS:"Getting status...",DB_NOT_FOUND:'Local database not found. Please run "docuvia init".'},Ha={START:"status.start",ERROR:"status.error",SUMMARY:"status.summary"};async function Ba(t,e){await ve(t,gp,e)}var Av="ensureHydrated: automatic hydration refused; local.db left untouched (see reason)";async function Qr(t,e){let r=y.resolve(T.GraphStoreOpener),n;try{n=await r({dbPath:ie(t),readonly:!1})}catch{return}try{let i=y.resolve(T.HydrationService,{logger:e});if(await i.isStale(t,n)){let s=await i.hydrate(t,n);s.refused&&e.warn(Av,{refusalReason:s.refusalReason})}}finally{await n.close()}}var Dn={COMMIT_MESSAGE:"commitMessage",CONTRACT_SYMBOL:"contractSymbol"};function ir(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(Rv):[]}catch{return[]}}function Rv(t){if(!t||typeof t!="object")return!1;let e=t;return(e.kind===Dn.COMMIT_MESSAGE||e.kind===Dn.CONTRACT_SYMBOL)&&typeof e.target=="string"&&typeof e.commitSha=="string"}function J_(t,e){if(e.length===0)return;let r=ir(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 q_(t,e){if(e.length===0)return;let r=new Set(e),n=ir(t).filter(i=>!r.has(i.target));t.meta.set(S.META_KEY_TIER_C_QUEUE,JSON.stringify(n))}function Q_(t,e,r){let n=ir(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 Ka=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(){let{workspaceRoot:e,logger:r}=this;r.info(Ua.GETTING_STATUS),await Ba(e,{event:Ha.START}),await Qr(e,r);let n=y.resolve(T.GraphStoreOpener),i;try{i=await n({dbPath:ie(e),readonly:!0})}catch(s){if(s instanceof _&&s.code===R.DB_NOT_FOUND){let o=new _(R.DB_NOT_FOUND,Ua.DB_NOT_FOUND,s);throw await Ba(e,{event:Ha.ERROR,message:Ua.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:ir(i).length,graphFreshness:await this.resolveGraphFreshness(i)};return await Ba(e,{event:Ha.SUMMARY,...c}),c}finally{await i.close()}}async resolveGraphFreshness(e){try{if(!y.has(T.GitProvider))return"unknown";let n=await y.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 vn={STARTING:t=>`Starting sync for project ${t}...`,DB_NOT_FOUND:'Local database not found. Please run "docuvia init".',NOTHING_TO_SYNC:"Nothing to sync: no changed files detected.",NOTHING_NEW:t=>`Nothing new to sync (${t} module(s) skipped, no remote match).`,SYNCED:(t,e)=>`Synced ${t} decision(s), ${e} module(s) skipped.`},bn={START:"sync.start",ERROR:"sync.error",SUMMARY:"sync.summary"};async function wn(t,e){await ve(t,fp,e)}import $a from"fs/promises";import Rd from"path";function yd(t){return Rd.join(t,Ee,Or,Op)}var yv=1e4,Ov=100,Iv=6e4,Lv=".lock",Cv={TIMED_OUT_WAITING:t=>`Timed out waiting for the sync-state lock at ${t} \u2014 another docuvia publish may be stuck`};async function Nv(t,e){let r=`${t}${Lv}`;await $a.mkdir(Rd.dirname(r),{recursive:!0});try{return await e(r,{maxWaitMs:yv,retryIntervalMs:Ov,staleAfterMs:Iv})}catch(n){throw n instanceof Ms?_.wrap(R.DB_LOCKED,Cv.TIMED_OUT_WAITING(r),n):n}}async function X_(t,e,r){let n=await Nv(yd(t),e);try{return await r()}finally{await n.release()}}async function Z_(t){try{let e=await $a.readFile(yd(t),H);return JSON.parse(e)}catch{return{}}}async function eS(t,e){let r=yd(t);await $a.mkdir(Rd.dirname(r),{recursive:!0}),await $a.writeFile(r,JSON.stringify(e,null,2),H)}var Ya=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(vn.STARTING(i)),await wn(r,{event:bn.START,projectId:i,commitSha:s??null});let o=y.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:vn.NOTHING_TO_SYNC};return await wn(r,{event:bn.SUMMARY,projectId:i,...p}),p}let c=y.resolve(T.GraphStoreOpener),u;try{u=await c({dbPath:ie(r),readonly:!0})}catch(p){throw p instanceof _&&p.code===R.DB_NOT_FOUND?(await wn(r,{event:bn.ERROR,projectId:i,message:vn.DB_NOT_FOUND}),new _(R.DB_NOT_FOUND,vn.DB_NOT_FOUND,p)):p}try{let d=y.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 wn(r,{event:bn.ERROR,projectId:i,message:b}),L}let h=new Map(f.map(L=>[L.name,L.id])),E=u.graph.findNodesForChangedFiles(Array.from(l)),I=y.resolve(T.ProcessLock),C=await X_(r,I,async()=>{let L=await Z_(r),b=L[i]??{syncedContentHashes:[]},Q=new Set(b.syncedContentHashes),{events:J,newlySyncedHashes:$,skippedL2Count:te}=this.buildSyncPushEvents(E,h,Q);if(J.length===0)return{synced:0,skipped:te,message:vn.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 wn(r,{event:bn.ERROR,projectId:i,message:N}),pe}b.syncedContentHashes=Array.from(new Set([...Q,...$])),L[i]=b,await eS(r,L);let ne=M.processed??J.length;return{synced:ne,skipped:te,message:vn.SYNCED(ne,te)}});return await wn(r,{event:bn.SUMMARY,projectId:i,...C}),C}finally{await u.close()}}buildSyncPushEvents(e,r,n){let i=[],s=[],o=0;for(let{l2Node:a,l3Nodes:l}of e){let c=r.get(a.name);if(c===void 0){o++;continue}for(let u of l)u.content_hash&&n.has(u.content_hash)||(i.push(this.buildL3PushEvent(c,u)),u.content_hash&&s.push(u.content_hash))}return{events:i,newlySyncedHashes:s,skippedL2Count:o}}buildL3PushEvent(e,r){return{type:lp.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 Qb from"fs";import Xb 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"},tS=`You are an expert software architect reviewing source code directly (not commit history).
142
142
  Extract concrete implementation decisions, architectural rules, notable constraints, and rationale that are evident from the code itself \u2014 not speculative commentary.
143
143
  Return ONLY a valid JSON array. Each item:
144
144
  { "title": "concise title", "nodeType": "change" | "rule" | "decision" | "context", "content": "detailed explanation grounded in what the code actually does", "confidence": 0.0 to 1.0 }
@@ -158,40 +158,40 @@ Return ONLY a valid JSON array. Each item:
158
158
  If the code contains no decision-worthy content, return an empty array \u2014 do not fabricate entries.
159
159
  OUTPUT MUST BE VALID JSON ONLY. NO MARKDOWN WRAPPERS. DO NOT OUTPUT \`\`\`json.`,oS=(t,e,r)=>`Focus on the symbol \`${t}\` in the following file (\`${e}\`):
160
160
 
161
- ${r}`;async function V(t,e){await ve(t,wi,e)}import Ai from"fs";import yd from"path";var vv=40,bv=2e5,wv=".git",Fv=new Set([at,wv,Ee]);function lS(t){let e=[],r=Ai.readdirSync(t,{withFileTypes:!0});for(let n of r){if(n.isDirectory()&&Fv.has(n.name))continue;let i=yd.join(t,n.name);n.isDirectory()?e.push(...lS(i)):n.isFile()&&e.push(i)}return e}function aS(t,e){return t.startsWith(e+yd.sep)||t===e}function Mv(t,e){try{return Ai.realpathSync(t)}catch{return e.warn(q.FILE_READ_FAILED,{filePath:t,error:"Failed to resolve symlinks for file path"}),null}}function kv(t,e){try{return Ai.readFileSync(t,H)}catch(r){return e.warn(q.FILE_READ_FAILED,{filePath:t,error:r instanceof Error?r.message:String(r)}),null}}function Xr(t,e,r){let n=Ai.realpathSync(e),i=Ai.realpathSync(t);if(!aS(i,n))return r.warn(q.FILE_READ_FAILED,{filePath:t,error:`Resolved path ${i} is outside workspace root ${n}`}),{files:[],droppedFiles:[]};let o=Ai.statSync(t).isDirectory()?lS(t):[t],a=[],l=[],c=0;for(let u of o){if(!ws(u))continue;let p=Mv(u,r);if(p===null||!aS(p,n))continue;let d=yd.relative(e,u);if(a.length>=vv){l.push(d);continue}let f=kv(u,r);if(f!==null){if(c+f.length>bv){l.push(d);continue}c+=f.length,a.push({relativePath:d,content:f})}}return{files:a,droppedFiles:l}}async function Ri(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=y.resolve(T.FileDiscovery,{logger:r}),o=y.resolve(T.ConfigScanner,{logger:r}),a=y.resolve(T.VcsScanner,{logger:r}),l=y.resolve(T.AstProcessor,{logger:r}),c=y.resolve(T.GraphPersister),u=y.resolve(T.HydrationService,{logger:r}),p=y.resolve(T.KnowledgeGitService,{logger:r}),d=await hi(n.projects,i,e),f=await Pa({configScanner:o,vcsScanner:a,fileDiscovery:s,filesRepo:n.files,workspaceRoot:e}),{parsedResults:h,failures:E,callResolutionByFile:I}=await Ei({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){ba(n,I??{});let J=Lr(I??{});await V(e,{event:Y.FULL_CALL_RESOLUTION,...J,files:Object.keys(I??{}).length})}await Da({store:n,git:i,workspaceRoot:e,parsedResults:h});try{await Ti(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=h.length,b=E.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 Vv from"crypto";function cS(t){return t.meta.get(S.META_KEY_NODE_KEY_FORMAT_VERSION)!=="2"}import Gv from"path";function vt(t){return t.replace(/\\/g,"/")}function uS(t,e,r,n){let i=vt(Gv.relative(e,r)),s=t.graph.findNodeIdByNodeKey(i);if(s!==void 0)return s;for(let o of n){let a=t.graph.findNodeIdByNodeKey(vt(o.relativePath));if(a!==void 0)return a}}var xv=new Set(["chore","style","ci","build","docs","test"]),Uv=10,Hv=/^(wip|fixup!|squash!|typo|lint|format|merge branch)/i,Bv=/^([A-Za-z]+)(\([^)]*\))?!?:\s*(.*)$/;function Kv(t){return t.split(`
162
- `)[0]?.trim()??""}function $v(t,e){let r=t?.[1]?.toLowerCase();return!!(r&&e.has(r))}function Yv(t,e){return(e?e[3]:t).trim()}function dS(t,e={}){let r=e.denylistTypes??xv,n=e.minSubjectLength??Uv,i=Kv(t);if(Hv.test(i))return!1;let s=i.match(Bv);return $v(s,r)?!1:Yv(i,s).length>=n}var Wv=1,jv=500;async function pS(t,e,r,n,i){let s=await t.getCommitLog(e,n,jv),o=[];for(let{sha:a,message:l}of s){if(a===r)break;dS(l,i)&&o.push({kind:Dn.COMMIT_MESSAGE,target:a,commitSha:a,message:l})}return o}function gS(t,e,r){return r.filter(n=>n.pruningLevel===Wv).map(n=>({kind:Dn.CONTRACT_SYMBOL,target:`${vt(t)}#${n.nodeId}`,commitSha:e,file:t}))}async function Od(t){let{workspaceRoot:e,logger:r,store:n,git:i,knowledgeGit:s,projectId:o,fromSha:a,headSha:l}=t;if(cS(n))return r.info(q.NODE_KEY_FORMAT_STALE),await V(e,{event:Y.DELTA_NODE_KEY_FORMAT_STALE}),Ri({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}),Ri({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}=zv(c),{filesToParse:d,skippedOversized:f,tierBEntries:h,tierCSymbolEntries:E,changedBytes:I}=await Jv(t,p),L=[...await pS(i,e,a,l),...E],b=[];await s.runUnderKnowledgeLock(e,async()=>{b=await Qv(t,{toDelete:u,filesToParse:d,tierBEntries:h,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:h.length,tierCQueued:L.length}),{kind:Te.AUTO_DELTA,fromSha:a,headSha:l,filesReparsed:Q,filesDeleted:u.size,filesFailed:b.length,filesSkippedOversized:f.length,tierBQueued:h.length,tierCQueued:L.length}}function zv(t){let e=new Set,r=[];for(let n of t){if(n.status===yt.DELETED){e.add(n.file);continue}n.status===yt.RENAMED&&n.oldFile&&e.add(n.oldFile),Gn(n.file)&&r.push(n)}return{toDelete:e,toReparse:r}}async function Jv(t,e){let{workspaceRoot:r,logger:n,git:i,headSha:s}=t,o=await i.listTrackedFilesWithBlobHash(r),a=y.resolve(T.SemanticDiffAnalyzer,{logger:n}),l=[],c=[],u=[],p=[],d=0;for(let f of e){let h=await i.readFileAtRef(r,s,f.file);if(h===void 0)continue;let E=Buffer.byteLength(h,H);if(E>512e3){c.push({file:f.file,sizeBytes:E}),await V(r,{event:Y.DELTA_FILE_SKIPPED_OVERSIZED,file:f.file,sizeBytes:E});continue}let I=o.get(f.file)??Vv.createHash(Jt).update(h).digest("hex");l.push({file:f.file,hash:I,code:h}),d+=E;let{contractChanged:C,findings:L}=await qv(t,a,f,h);C&&(u.push({file:f.file,commitSha:s}),p.push(...gS(f.file,s,L)))}return{filesToParse:l,skippedOversized:c,tierBEntries:u,tierCSymbolEntries:p,changedBytes:d}}async function qv(t,e,r,n){let{workspaceRoot:i,git:s,fromSha:o,headSha:a}=t;if(r.status!==yt.MODIFIED&&r.status!==yt.ADDED)return{contractChanged:!1,findings:[]};let l=r.status===yt.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 Qv(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 h of a)i.graph.deleteNodesForPath(h)});let d=[],f;if(l.length>0){let h=y.resolve(T.AstProcessor,{logger:n}),E=y.resolve(T.GraphPersister),I=await Ei({astProcessor:h,graphPersister:E,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){H_(i,f,a);let h=Lr(f);await V(r,{event:Y.DELTA_CALL_RESOLUTION,...h,files:Object.keys(f).length})}return await i.withWriteLock(()=>{if(c.length>0&&_i(i,c),u.length>0&&J_(i,u),p>0){let h=Number(i.meta.get(S.META_KEY_TIER_B_CHANGED_BYTES)??0);i.meta.set(S.META_KEY_TIER_B_CHANGED_BYTES,String(h+p))}i.meta.set(S.META_KEY_LAST_INGESTED_SOURCE_SHA,o)}),d}import Db from"fs";import vb from"path";async function fS(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(()=>{_i(r,o)}),{filesQueued:o.length}}import Xv from"path";var Zv={".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 Id(t){return Zv[Xv.extname(t)]}function mS(t){let e={},r=[];for(let n of t){let i=Id(n.file);if(!i){r.push(n);continue}(e[i]??=[]).push(n)}return{buckets:e,unsupported:r}}function yi(t,e=S.DEFAULT_TIER_B_COMMIT_CAP_BYTES){return Number(t.meta.get(S.META_KEY_TIER_B_CHANGED_BYTES)??0)>=e}var eb=Object.values(sn),hS="```";function ES(t){let e=t.trim();if(!e.startsWith(hS)||!e.endsWith(hS))return t;let r=e.indexOf(`
163
- `);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 Ya(t){if(t==null)return;let e;try{e=JSON.parse(ES(t))}catch{return}if(Array.isArray(e))return e.map(r=>({title:String(r?.title??""),nodeType:eb.includes(r?.nodeType)?r.nodeType:sn.CONTEXT,content:String(r?.content??""),confidence:typeof r?.confidence=="number"?r.confidence:0}))}function tb(){return new Date().toISOString().slice(0,10)}function Wa(t){return{date:t,calls:0,tokens:0}}function _S(t){let e=tb(),r=t.meta.get(S.META_KEY_TIER_C_BUDGET);if(!r)return Wa(e);try{let n=JSON.parse(r);return!n||typeof n.date!="string"||typeof n.calls!="number"||typeof n.tokens!="number"||n.date!==e?Wa(e):n}catch{return Wa(e)}}function SS(t,e){t.meta.set(S.META_KEY_TIER_C_BUDGET,JSON.stringify(e))}function Ld(t,e,r){return t.calls>=e||t.tokens>=r}function TS(t){return Math.ceil(t.length/4)}import AS from"os";import rb from"fs/promises";import RS from"path";var nb=200,ib=5e3,sb=3e4;async function yS(t){let e=RS.join(t,Ee,Rp);try{return await rb.mkdir(RS.dirname(e),{recursive:!0}),await y.resolve(T.ProcessLock)(e,{maxWaitMs:nb,retryIntervalMs:50,heartbeatIntervalMs:ib,staleAfterMs:sb})}catch{return}}function OS(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=AS.cpus().length||1,r=AS.loadavg()[0]/e;return r>t?{ok:!1,note:`load ratio ${r.toFixed(2)} exceeds threshold ${t}`}:{ok:!0}}var _s={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 Cd(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 Es(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}),Cd({queued:e,processed:0,persisted:0,deduped:0,failed:0,skipped:!0,reason:r})}async function ob(t,e,r){let n=!1,i=null;try{let s=y.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 IS(t){let{workspaceRoot:e,store:r}=t,n=ir(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}),Cd({queued:0,processed:0,persisted:0,deduped:0,failed:0,skipped:!1});if(await ob(t,r,e))return await Es(t,n.length,"already-snapshotted-with-tier-c");if(!t.llmBaseUrl||!t.llmModel)return await Es(t,n.length,_s.LLM_NOT_CONFIGURED);let s=await yS(e);if(!s)return await Es(t,n.length,_s.LOCK_CONTENDED);try{return await ab(t,n)}finally{await s.release()}}async function ab(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=_S(n);if(Ld(o,i,s))return await Es(t,e.length,_s.BUDGET_EXHAUSTED);let a=OS(t.loadThreshold);return a.note&&await V(r,{event:Y.TIER_C_LOAD_NOTE,note:a.note}),a.ok?await cb(t,e,o,i,s):await Es(t,e.length,_s.LOAD_HIGH)}function Zr(t){return{success:!1,reason:t,persistedCount:0,dedupedCount:0,tokensUsed:0,callsUsed:0}}function lb(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 cb(t,e,r,n,i){let{store:s,workspaceRoot:o,logger:a}=t,{wallClockMs:l,itemCap:c}=lb(t),u=Date.now()+l,d=y.resolve(T.LlmClient)();d.initialize({baseUrl:t.llmBaseUrl,apiKey:t.llmApiKey});let f=r,h={processed:0,persisted:0,deduped:0,failed:0};for(let E of e){if(h.processed+h.failed>=c||Date.now()>=u)break;if(Ld(f,n,i)){await V(o,{event:Y.TIER_C_SKIPPED,reason:_s.BUDGET_EXHAUSTED,queued:e.length,midRun:!0});break}let I=await _b(t,d,E);if(f=await ub(s,f,I),await db(t,E,I,h))break}return await V(o,{event:Y.TIER_C_SUMMARY,queued:e.length,...h}),a.info(q.TIER_C_SUMMARY(h.processed,h.persisted)),h.processed>0&&await s.withWriteLock(()=>{s.meta.set("tierCProcessedThisRun","true")}),Cd({queued:e.length,...h,skipped:!1})}async function ub(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(()=>SS(t,n)),n}async function db(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(()=>q_(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(()=>Q_(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 pb(t){return t instanceof _&&t.code===R.LLM_CHAT_COMPLETION_FAILED}function gb(t){return t instanceof _&&t.code===R.LLM_RATE_LIMITED}function fb(t){return t instanceof _&&t.code===R.LLM_AUTH_FAILED}function LS(t){return gb(t)?_r.RATE_LIMITED:fb(t)?_r.AUTH_FAILED:pb(t)?_r.BRIDGE_UNREACHABLE:mb(t)}function mb(t){return t instanceof Error?t.message:String(t)}function hb(t){return t.replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F]/g,"").slice(0,nS)}async function CS(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=Ya(s),a=TS(r+n+(s??""));return{decisions:o,tokensUsed:a}}function Eb(t,e){for(let r of e){let n=t.graph.findNodeIdByNodeKey(vt(r));if(n!==void 0)return n}}function NS(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(vt),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 _b(t,e,r){return r.kind===Dn.COMMIT_MESSAGE?Sb(t,e,r):Tb(t,e,r)}async function Sb(t,e,r){let{git:n,workspaceRoot:i,store:s,llmModel:o}=t,a=await n.getFilesChangedByCommit(i,r.commitSha),l=Eb(s,a);if(l===void 0)return Zr(_r.NO_ANCHOR);let c;try{c=await CS(e,o,rS,iS(hb(r.message??"")))}catch(d){return{...Zr(LS(d)),callsUsed:1}}if(c.decisions===void 0)return{...Zr(_r.LLM_NON_JSON_OUTPUT),tokensUsed:c.tokensUsed,callsUsed:1};let{persisted:u,deduped:p}=NS(t,l,a,r.commitSha,c.decisions);return{success:!0,persistedCount:u,dedupedCount:p,tokensUsed:c.tokensUsed,callsUsed:1}}async function Tb(t,e,r){let{git:n,workspaceRoot:i,store:s,llmModel:o}=t,a=r.file;if(!a)return Zr(_r.MISSING_FILE);let l=s.graph.findNodeIdByNodeKey(r.target)??s.graph.findNodeIdByNodeKey(vt(a));if(l===void 0)return Zr(_r.NO_ANCHOR);let c=await n.readFileAtRef(i,S.HEAD_REF,a);if(c===void 0)return Zr(_r.FILE_UNREADABLE);let u=r.target.slice(r.target.indexOf("#")+1),p=oS(u,a,c),d;try{d=await CS(e,o,sS,p)}catch(E){return{...Zr(LS(E)),callsUsed:1}}if(d.decisions===void 0)return{...Zr(_r.LLM_NON_JSON_OUTPUT),tokensUsed:d.tokensUsed,callsUsed:1};let{persisted:f,deduped:h}=NS(t,l,[a],r.commitSha,d.decisions);return{success:!0,persistedCount:f,dedupedCount:h,tokensUsed:d.tokensUsed,callsUsed:1}}import Ab from"path";import Rb from"crypto";import yb from"fs/promises";function Ob(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 Ib(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 PS(t,e){let{workspaceRoot:r,logger:n,providerConfig:i,store:s,git:o}=e,a=y.resolve(T.EdgeResolutionProviders,{logger:n}),l=[],c=[],u=[],p=[];for(let E of Object.keys(t)){let I=t[E];if(!I||I.length===0)continue;let C=a[E];if(!C){p.push({languageId:E,reason:`no LSP provider registered for language "${E}"`});continue}let L=C();i&&L.configure(i);let b=E===B.TYPESCRIPT?await Pb(s,o,r,I,n):void 0,Q=await L.resolveEdges({workspaceRoot:r,files:I.map(J=>J.file),callsByFile:b});Ob(Q,l,c,u),Q.unavailableReason&&p.push({languageId:E,reason:Q.unavailableReason})}let{unavailableReason:d,fullyDegraded:f,strayLanguageDegraded:h}=Ib(t,p);return{edges:l,filesProcessed:c,filesFailed:u,unavailableReason:d,degradedLanguages:p,fullyDegraded:f,strayLanguageDegraded:h}}function Lb(t){return t.split("\\").join("/")}async function Cb(t,e,r,n){let i=Lb(e);if(!r.has(i)&&n.has(i))return n.get(i);try{let s=await yb.readFile(Ab.join(t,e),H);return Rb.createHash(Jt).update(s).digest("hex")}catch{return}}async function Nb(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 Pb(t,e,r,n,i){let s=t.projects.getFirst();if(!s)return;let o=n.map(E=>E.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(E=>[E.filePath,E.contentHash])),{dirtyFiles:u,blobHashes:p}=await Nb(e,r),d={},f=0,h=0;for(let E of o){let I=a.get(E);if(!I||I.length===0)continue;let C=c.get(E),L=await Cb(r,E,u,p);if(!C||!L||C!==L){h++;continue}d[E]=I,f++}return i.info(q.TIER_B_FORWARD_SEEDED(B.TYPESCRIPT,f,l,h)),await V(r,{event:Y.TIER_B_FORWARD_SEEDED,languageId:B.TYPESCRIPT,seeded:f,total:l,staleSkipped:h}),f>0?d:void 0}var Nd=50;async function vS(t){let e=await bb(t),r=await IS({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 bb(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=yi(n,t.commitCap);if(t.full){let{filesQueued:$}=await fS({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=hs(n);if(l.length===0)return r.info(q.TIER_B_EMPTY_QUEUE),await V(e,{event:Y.TIER_B_EMPTY_QUEUE}),Mb(o,a);let{buckets:c,toProcess:u,droppedDeleted:p,skippedLanguage:d}=await kb(t,l);if(await Gb(e,p,d),u.length===0)return await DS(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 xb(t,c);for(let $ of f.filesFailed)await V(e,{event:Y.TIER_B_FILE_FAILED,level:Nd,file:$.file,reason:$.reason,retryable:$.retryable});f.unavailableReason&&(await V(e,{event:Y.TIER_B_DEGRADED,level:Nd,reason:f.unavailableReason,degradedLanguages:f.degradedLanguages}),r.info(q.TIER_B_DEGRADED(f.unavailableReason)));let{edgesApplied:h,edgesPruned:E}=await Ub(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||h>0,J=wb(n,u,f,Q,b,L,Fb(c,f));return await DS(t,{headSha:o,commitCapExceeded:a,queued:l.length,droppedDeleted:p.length,skippedLanguage:d.length,outcome:f,failedEntries:b,permanentFailed:L,edgesApplied:h,edgesPruned:E,zeroProgressWatchdogTripped:J,degradedReason:f.unavailableReason})}function wb(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 Fb(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 Mb(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 kb(t,e){let{workspaceRoot:r}=t,n=[],i=[];for(let a of e)Db.existsSync(vb.join(r,a.file))?n.push(a):i.push(a);let{buckets:s,unsupported:o}=mS(n);return{buckets:s,toProcess:Object.values(s).flatMap(a=>a??[]),droppedDeleted:i,skippedLanguage:o}}async function Gb(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 xb(t,e){let{workspaceRoot:r,logger:n,providerConfig:i,store:s,git:o}=t;return PS(e,{workspaceRoot:r,logger:n,providerConfig:i,store:s,git:o})}async function Ub(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 DS(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:Nd}:{},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 bS(t){return t.trim().replace(/\s+/g," ").toLowerCase()}function wS(t){return(t??"").trim().replace(/\s+/g," ")}function FS(t,e){let r=t.filter(i=>i.validity_status!==or.GARBAGE),n=[];for(let i of e){let s=bS(i.title),o=wS(i.content);for(let a of r)bS(a.title)===s&&wS(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 MS(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 Oi(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 Bb(e,r);if(c===null)return{persisted:0,deduped:0,noGraphToAttach:!0};try{let u=c.projects.getFirst();if(!u)return await Pd(e,r),{persisted:0,deduped:0,noGraphToAttach:!0};let p=uS(c,e,n,i);if(p===void 0)return await Pd(e,r),{persisted:0,deduped:0,noGraphToAttach:!0};t.writerEnhancements?.warnOnAnchorContradictions&&Hb(c.l3.getByL2NodeId(p),s,r);let d=await Kb({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 Hb(t,e,r){for(let n of FS(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 Bb(t,e){let r=y.resolve(T.GraphStoreOpener);try{return await r({dbPath:ie(t),readonly:!1})}catch(n){if(n instanceof _&&n.code===R.DB_OPEN_FAILED)return await Pd(t,e),null;throw n}}async function Kb(t){let{workspaceRoot:e,store:r,projectId:n,anchorL2NodeId:i,files:s,decisions:o,source:a,extractionModel:l}=t,c=t.commitSha??await y.resolve(T.GitProvider).getHeadSha(e)??null,u=s.map(h=>vt(h.relativePath)),p=t.captureAnchorRanges?await MS({git:y.resolve(T.GitProvider),workspaceRoot:e,commitSha:c,sourceFiles:u}):null,d=0,f=0;for(let h of o)r.l3.upsertDecision({projectId:n,l2NodeId:i,title:h.title,content:h.content,nodeType:h.nodeType,confidence:h.confidence,commitSha:c,extractionModel:l,sourceFiles:u,source:a,...t.captureAnchorRanges?{anchorRanges:p}:{}}).deduped?f++:d++;return{persisted:d,deduped:f}}async function Pd(t,e){e.warn(q.NO_GRAPH_TO_ATTACH),await V(t,{event:Y.FOCUSED_PERSIST_SKIPPED,message:q.NO_GRAPH_TO_ATTACH})}import kS from"fs";import Ss from"path";function $b(t,e){let r=Ss.relative(e,t);return r===""||r!==".."&&!r.startsWith(`..${Ss.sep}`)&&!Ss.isAbsolute(r)}async function GS(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=Ss.resolve(e),o=Ss.resolve(s,n);if(!$b(o,s)){let p=q.PATH_NOT_FOUND(n);throw await V(e,{event:Y.FOCUSED_ERROR,targetPath:n,message:p}),new _(R.INVALID_INPUT,p)}if(!kS.existsSync(o)){let p=q.PATH_NOT_FOUND(n);throw await V(e,{event:Y.FOCUSED_ERROR,targetPath:n,message:p}),new _(R.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}=Xr(o,e,r);if(l.length>0&&r.warn(q.FILES_DROPPED(l.length),{droppedFiles:l,targetPath:n}),a.length===0&&!kS.statSync(o).isDirectory())throw new _(R.INVALID_INPUT,q.AGENT_AUTHORED_ANCHOR_UNRESOLVABLE(n));let{persisted:c,deduped:u}=await Oi({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 Vb from"fs";import zb from"path";import Dd from"fs/promises";import{statSync as Yb}from"fs";import ja from"path";var xS={CORRUPT_FILE:t=>`Could not parse ${t} -- treating staged L3 decisions as empty`};function US(t){return ja.join(t,Ee,Ip)}function Wb(t){return typeof t=="object"&&t!==null&&Array.isArray(t.decisions)}async function Ii(t,e){let r=US(t),n;try{n=await Dd.readFile(r,H)}catch{return[]}let i;try{i=JSON.parse(n)}catch{return e.warn(xS.CORRUPT_FILE(r)),[]}return Wb(i)?i.decisions:(e.warn(xS.CORRUPT_FILE(r)),[])}async function HS(t,e,r,n){let i=ja.resolve(t,e),s;try{s=Yb(i).isDirectory()}catch{throw new _(R.FS_READ_FAILED,q.PATH_NOT_FOUND(e))}let{files:o}=Xr(i,t,n);if(!s&&o.length===0)throw new _(R.INVALID_INPUT,q.AGENT_AUTHORED_ANCHOR_UNRESOLVABLE(e));let a=vt(ja.relative(t,i)),l=await Ii(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 vd(t,[...l,...u]),{staged:u.length}}async function vd(t,e){await Dd.mkdir(ja.join(t,Ee),{recursive:!0}),await Dd.writeFile(US(t),`${JSON.stringify({decisions:e},null,2)}
164
- `,H)}import bd from"fs/promises";import KS from"path";var BS={CORRUPT_FILE:t=>`Could not parse ${t} -- falling back to the default hooks config`};function $S(t){return KS.join(t,Ee,Op)}function jb(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}async function Li(t,e){let r=$S(t),n;try{n=await bd.readFile(r,H)}catch{return{...bi}}let i;try{i=JSON.parse(n)}catch{return e.warn(BS.CORRUPT_FILE(r)),{...bi}}if(!jb(i))return e.warn(BS.CORRUPT_FILE(r)),{...bi};let s={...bi};for(let o of Object.values(ar)){let a=i[o];typeof a=="boolean"&&(s[o]=a)}return s}async function YS(t,e,r,n){let s={...await Li(t,n),[e]:r};await bd.mkdir(KS.join(t,Ee),{recursive:!0}),await bd.writeFile($S(t),`${JSON.stringify(s,null,2)}
165
- `,H)}function Ts(t,e,r){return{kind:Te.FLUSH_STAGED_L3,skippedDisabled:t,flushed:0,deduped:0,stillPending:e,commitSha:r,noGraphToAttach:!1}}function Jb(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 qb(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 Qb(t){return t.map(e=>({title:e.title,content:e.content,nodeType:e.nodeType,confidence:e.confidence}))}async function Xb(t,e,r,n,i){let s=zb.resolve(t,r);if(!Vb.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}=Xr(s,t,e);a.length>0&&e.warn(q.FILES_DROPPED(a.length),{droppedFiles:a,filePath:r});let l=await Oi({workspaceRoot:t,logger:e,resolvedTargetPath:s,files:o,decisions:Qb(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 WS(t){let{workspaceRoot:e,logger:r}=t;if(!(await Li(e,r))[ar.COMMIT_L3_WRITE])return r.info(q.FLUSH_STAGED_L3_DISABLED),await V(e,{event:Y.FLUSH_STAGED_L3_DISABLED}),Ts(!0,0,null);let i=await Ii(e,r);if(i.length===0)return r.info(q.FLUSH_STAGED_L3_EMPTY),Ts(!1,0,null);let s=y.resolve(T.GitProvider),o=await s.getHeadSha(e);if(!o)return Ts(!1,i.length,null);let a=new Set(await s.getFilesChangedByCommit(e,o)),{toFlush:l,stillPending:c}=qb(i,a);if(l.length===0)return await V(e,{event:Y.FLUSH_STAGED_L3_SUMMARY,flushed:0,stillPending:c.length,commitSha:o}),Ts(!1,c.length,o);let u=Jb(l),p=0,d=0,f=0,h=0,E=[];try{for(let[C,L]of u){let b=await Xb(e,r,C,L,o);p+=b.persisted,d+=b.deduped,f+=b.dropped.length,h+=Number(b.noGraphToAttach),E.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}),Ts(!1,i.length,o)}let I=[...c,...E];return await vd(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:h>0}}var en=class{constructor(e,r,n){this.workspaceRoot=e;this.logger=r;this.options=n}workspaceRoot;logger;options;async execute(){return this.options?.flushStagedL3?WS({workspaceRoot:this.workspaceRoot,logger:this.logger}):this.options?.agentAuthoredDecisions?GS({workspaceRoot:this.workspaceRoot,logger:this.logger,targetPath:this.options.targetPath,decisions:this.options.agentAuthoredDecisions}):this.options?.targetPath?this.executeDecisionExtraction(this.options.targetPath):this.options?.escalateToLsp?this.executeTierBBatch():this.executeAutoMode()}async executeTierBBatch(){let{workspaceRoot:e,logger:r,options:n}=this,i;try{let s=y.resolve(T.GitProvider),o=y.resolve(T.KnowledgeGitService,{logger:r});return i=await y.resolve(T.GraphStoreOpener)({dbPath:ie(e),readonly:!1}),await vS(iw(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=y.resolve(T.GitProvider),s=y.resolve(T.KnowledgeGitService,{logger:r});return n=await y.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 Od({workspaceRoot:i,logger:s,store:e,git:r,knowledgeGit:n,projectId:l.id,fromSha:u,headSha:o}):await Ri({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 Ri({workspaceRoot:s,logger:o,store:e,git:r})}async tryHydrateThenDelta(e,r,n,i){let{workspaceRoot:s,logger:o}=this,a=y.resolve(T.HydrationService,{logger:o}),l=await a.resolveHydrationCommit(s);if(!l)return;let c=await tw(r,s,l);if(!c||!(await a.hydrate(s,e)).hydrated)return;let p=await hi(e.projects,r,s);return await Od({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(!yi(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=ew.resolve(r,e);if(!Zb.existsSync(s)){let I=q.PATH_NOT_FOUND(e);throw await V(r,{event:Y.FOCUSED_ERROR,targetPath:e,message:I}),new _(R.FS_READ_FAILED,I)}let{files:o,droppedFiles:a}=Xr(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} ---
161
+ ${r}`;async function V(t,e){await ve(t,wi,e)}import Ai from"fs";import Od from"path";var Pv=40,Dv=2e5,vv=".git",bv=new Set([at,vv,Ee]);function lS(t){let e=[],r=Ai.readdirSync(t,{withFileTypes:!0});for(let n of r){if(n.isDirectory()&&bv.has(n.name))continue;let i=Od.join(t,n.name);n.isDirectory()?e.push(...lS(i)):n.isFile()&&e.push(i)}return e}function aS(t,e){return t.startsWith(e+Od.sep)||t===e}function wv(t,e){try{return Ai.realpathSync(t)}catch{return e.warn(q.FILE_READ_FAILED,{filePath:t,error:"Failed to resolve symlinks for file path"}),null}}function Fv(t,e){try{return Ai.readFileSync(t,H)}catch(r){return e.warn(q.FILE_READ_FAILED,{filePath:t,error:r instanceof Error?r.message:String(r)}),null}}function Xr(t,e,r){let n=Ai.realpathSync(e),i=Ai.realpathSync(t);if(!aS(i,n))return r.warn(q.FILE_READ_FAILED,{filePath:t,error:`Resolved path ${i} is outside workspace root ${n}`}),{files:[],droppedFiles:[]};let o=Ai.statSync(t).isDirectory()?lS(t):[t],a=[],l=[],c=0;for(let u of o){if(!ws(u))continue;let p=wv(u,r);if(p===null||!aS(p,n))continue;let d=Od.relative(e,u);if(a.length>=Pv){l.push(d);continue}let f=Fv(u,r);if(f!==null){if(c+f.length>Dv){l.push(d);continue}c+=f.length,a.push({relativePath:d,content:f})}}return{files:a,droppedFiles:l}}async function Ri(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=y.resolve(T.FileDiscovery,{logger:r}),o=y.resolve(T.ConfigScanner,{logger:r}),a=y.resolve(T.VcsScanner,{logger:r}),l=y.resolve(T.AstProcessor,{logger:r}),c=y.resolve(T.GraphPersister),u=y.resolve(T.HydrationService,{logger:r}),p=y.resolve(T.KnowledgeGitService,{logger:r}),d=await hi(n.projects,i,e),f=await Da({configScanner:o,vcsScanner:a,fileDiscovery:s,filesRepo:n.files,workspaceRoot:e}),{parsedResults:h,failures:E,callResolutionByFile:I}=await Ei({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){wa(n,I??{});let J=Lr(I??{});await V(e,{event:Y.FULL_CALL_RESOLUTION,...J,files:Object.keys(I??{}).length})}await va({store:n,git:i,workspaceRoot:e,parsedResults:h});try{await Ti(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=h.length,b=E.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 Wv from"crypto";function cS(t){return t.meta.get(S.META_KEY_NODE_KEY_FORMAT_VERSION)!=="2"}import Mv from"path";function vt(t){return t.replace(/\\/g,"/")}function uS(t,e,r,n){let i=vt(Mv.relative(e,r)),s=t.graph.findNodeIdByNodeKey(i);if(s!==void 0)return s;for(let o of n){let a=t.graph.findNodeIdByNodeKey(vt(o.relativePath));if(a!==void 0)return a}}var kv=new Set(["chore","style","ci","build","docs","test"]),Gv=10,xv=/^(wip|fixup!|squash!|typo|lint|format|merge branch)/i,Uv=/^([A-Za-z]+)(\([^)]*\))?!?:\s*(.*)$/;function Hv(t){return t.split(`
162
+ `)[0]?.trim()??""}function Bv(t,e){let r=t?.[1]?.toLowerCase();return!!(r&&e.has(r))}function Kv(t,e){return(e?e[3]:t).trim()}function dS(t,e={}){let r=e.denylistTypes??kv,n=e.minSubjectLength??Gv,i=Hv(t);if(xv.test(i))return!1;let s=i.match(Uv);return Bv(s,r)?!1:Kv(i,s).length>=n}var $v=1,Yv=500;async function pS(t,e,r,n,i){let s=await t.getCommitLog(e,n,Yv),o=[];for(let{sha:a,message:l}of s){if(a===r)break;dS(l,i)&&o.push({kind:Dn.COMMIT_MESSAGE,target:a,commitSha:a,message:l})}return o}function gS(t,e,r){return r.filter(n=>n.pruningLevel===$v).map(n=>({kind:Dn.CONTRACT_SYMBOL,target:`${vt(t)}#${n.nodeId}`,commitSha:e,file:t}))}async function Id(t){let{workspaceRoot:e,logger:r,store:n,git:i,knowledgeGit:s,projectId:o,fromSha:a,headSha:l}=t;if(cS(n))return r.info(q.NODE_KEY_FORMAT_STALE),await V(e,{event:Y.DELTA_NODE_KEY_FORMAT_STALE}),Ri({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}),Ri({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}=jv(c),{filesToParse:d,skippedOversized:f,tierBEntries:h,tierCSymbolEntries:E,changedBytes:I}=await Vv(t,p),L=[...await pS(i,e,a,l),...E],b=[];await s.runUnderKnowledgeLock(e,async()=>{b=await Jv(t,{toDelete:u,filesToParse:d,tierBEntries:h,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:h.length,tierCQueued:L.length}),{kind:Te.AUTO_DELTA,fromSha:a,headSha:l,filesReparsed:Q,filesDeleted:u.size,filesFailed:b.length,filesSkippedOversized:f.length,tierBQueued:h.length,tierCQueued:L.length}}function jv(t){let e=new Set,r=[];for(let n of t){if(n.status===yt.DELETED){e.add(n.file);continue}n.status===yt.RENAMED&&n.oldFile&&e.add(n.oldFile),Gn(n.file)&&r.push(n)}return{toDelete:e,toReparse:r}}async function Vv(t,e){let{workspaceRoot:r,logger:n,git:i,headSha:s}=t,o=await i.listTrackedFilesWithBlobHash(r),a=y.resolve(T.SemanticDiffAnalyzer,{logger:n}),l=[],c=[],u=[],p=[],d=0;for(let f of e){let h=await i.readFileAtRef(r,s,f.file);if(h===void 0)continue;let E=Buffer.byteLength(h,H);if(E>512e3){c.push({file:f.file,sizeBytes:E}),await V(r,{event:Y.DELTA_FILE_SKIPPED_OVERSIZED,file:f.file,sizeBytes:E});continue}let I=o.get(f.file)??Wv.createHash(Jt).update(h).digest("hex");l.push({file:f.file,hash:I,code:h}),d+=E;let{contractChanged:C,findings:L}=await zv(t,a,f,h);C&&(u.push({file:f.file,commitSha:s}),p.push(...gS(f.file,s,L)))}return{filesToParse:l,skippedOversized:c,tierBEntries:u,tierCSymbolEntries:p,changedBytes:d}}async function zv(t,e,r,n){let{workspaceRoot:i,git:s,fromSha:o,headSha:a}=t;if(r.status!==yt.MODIFIED&&r.status!==yt.ADDED)return{contractChanged:!1,findings:[]};let l=r.status===yt.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 Jv(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 h of a)i.graph.deleteNodesForPath(h)});let d=[],f;if(l.length>0){let h=y.resolve(T.AstProcessor,{logger:n}),E=y.resolve(T.GraphPersister),I=await Ei({astProcessor:h,graphPersister:E,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){H_(i,f,a);let h=Lr(f);await V(r,{event:Y.DELTA_CALL_RESOLUTION,...h,files:Object.keys(f).length})}return await i.withWriteLock(()=>{if(c.length>0&&_i(i,c),u.length>0&&J_(i,u),p>0){let h=Number(i.meta.get(S.META_KEY_TIER_B_CHANGED_BYTES)??0);i.meta.set(S.META_KEY_TIER_B_CHANGED_BYTES,String(h+p))}i.meta.set(S.META_KEY_LAST_INGESTED_SOURCE_SHA,o)}),d}import Nb from"fs";import Pb from"path";async function fS(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(()=>{_i(r,o)}),{filesQueued:o.length}}import qv from"path";var Qv={".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 Ld(t){return Qv[qv.extname(t)]}function mS(t){let e={},r=[];for(let n of t){let i=Ld(n.file);if(!i){r.push(n);continue}(e[i]??=[]).push(n)}return{buckets:e,unsupported:r}}function yi(t,e=S.DEFAULT_TIER_B_COMMIT_CAP_BYTES){return Number(t.meta.get(S.META_KEY_TIER_B_CHANGED_BYTES)??0)>=e}var Xv=Object.values(sn),hS="```";function ES(t){let e=t.trim();if(!e.startsWith(hS)||!e.endsWith(hS))return t;let r=e.indexOf(`
163
+ `);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(ES(t))}catch{return}if(Array.isArray(e))return e.map(r=>({title:String(r?.title??""),nodeType:Xv.includes(r?.nodeType)?r.nodeType:sn.CONTEXT,content:String(r?.content??""),confidence:typeof r?.confidence=="number"?r.confidence:0}))}function Zv(){return new Date().toISOString().slice(0,10)}function ja(t){return{date:t,calls:0,tokens:0}}function _S(t){let e=Zv(),r=t.meta.get(S.META_KEY_TIER_C_BUDGET);if(!r)return ja(e);try{let n=JSON.parse(r);return!n||typeof n.date!="string"||typeof n.calls!="number"||typeof n.tokens!="number"||n.date!==e?ja(e):n}catch{return ja(e)}}function SS(t,e){t.meta.set(S.META_KEY_TIER_C_BUDGET,JSON.stringify(e))}function Cd(t,e,r){return t.calls>=e||t.tokens>=r}function TS(t){return Math.ceil(t.length/4)}import AS from"os";import eb from"fs/promises";import RS from"path";var tb=200,rb=5e3,nb=3e4;async function yS(t){let e=RS.join(t,Ee,yp);try{return await eb.mkdir(RS.dirname(e),{recursive:!0}),await y.resolve(T.ProcessLock)(e,{maxWaitMs:tb,retryIntervalMs:50,heartbeatIntervalMs:rb,staleAfterMs:nb})}catch{return}}function OS(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=AS.cpus().length||1,r=AS.loadavg()[0]/e;return r>t?{ok:!1,note:`load ratio ${r.toFixed(2)} exceeds threshold ${t}`}:{ok:!0}}var _s={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 Nd(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 Es(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}),Nd({queued:e,processed:0,persisted:0,deduped:0,failed:0,skipped:!0,reason:r})}async function ib(t,e,r){let n=!1,i=null;try{let s=y.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 IS(t){let{workspaceRoot:e,store:r}=t,n=ir(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}),Nd({queued:0,processed:0,persisted:0,deduped:0,failed:0,skipped:!1});if(await ib(t,r,e))return await Es(t,n.length,"already-snapshotted-with-tier-c");if(!t.llmBaseUrl||!t.llmModel)return await Es(t,n.length,_s.LLM_NOT_CONFIGURED);let s=await yS(e);if(!s)return await Es(t,n.length,_s.LOCK_CONTENDED);try{return await sb(t,n)}finally{await s.release()}}async function sb(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=_S(n);if(Cd(o,i,s))return await Es(t,e.length,_s.BUDGET_EXHAUSTED);let a=OS(t.loadThreshold);return a.note&&await V(r,{event:Y.TIER_C_LOAD_NOTE,note:a.note}),a.ok?await ab(t,e,o,i,s):await Es(t,e.length,_s.LOAD_HIGH)}function Zr(t){return{success:!1,reason:t,persistedCount:0,dedupedCount:0,tokensUsed:0,callsUsed:0}}function ob(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 ab(t,e,r,n,i){let{store:s,workspaceRoot:o,logger:a}=t,{wallClockMs:l,itemCap:c}=ob(t),u=Date.now()+l,d=y.resolve(T.LlmClient)();d.initialize({baseUrl:t.llmBaseUrl,apiKey:t.llmApiKey});let f=r,h={processed:0,persisted:0,deduped:0,failed:0};for(let E of e){if(h.processed+h.failed>=c||Date.now()>=u)break;if(Cd(f,n,i)){await V(o,{event:Y.TIER_C_SKIPPED,reason:_s.BUDGET_EXHAUSTED,queued:e.length,midRun:!0});break}let I=await hb(t,d,E);if(f=await lb(s,f,I),await cb(t,E,I,h))break}return await V(o,{event:Y.TIER_C_SUMMARY,queued:e.length,...h}),a.info(q.TIER_C_SUMMARY(h.processed,h.persisted)),h.processed>0&&await s.withWriteLock(()=>{s.meta.set("tierCProcessedThisRun","true")}),Nd({queued:e.length,...h,skipped:!1})}async function lb(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(()=>SS(t,n)),n}async function cb(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(()=>q_(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(()=>Q_(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 ub(t){return t instanceof _&&t.code===R.LLM_CHAT_COMPLETION_FAILED}function db(t){return t instanceof _&&t.code===R.LLM_RATE_LIMITED}function pb(t){return t instanceof _&&t.code===R.LLM_AUTH_FAILED}function LS(t){return db(t)?_r.RATE_LIMITED:pb(t)?_r.AUTH_FAILED:ub(t)?_r.BRIDGE_UNREACHABLE:gb(t)}function gb(t){return t instanceof Error?t.message:String(t)}function fb(t){return t.replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F]/g,"").slice(0,nS)}async function CS(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=TS(r+n+(s??""));return{decisions:o,tokensUsed:a}}function mb(t,e){for(let r of e){let n=t.graph.findNodeIdByNodeKey(vt(r));if(n!==void 0)return n}}function NS(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(vt),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 hb(t,e,r){return r.kind===Dn.COMMIT_MESSAGE?Eb(t,e,r):_b(t,e,r)}async function Eb(t,e,r){let{git:n,workspaceRoot:i,store:s,llmModel:o}=t,a=await n.getFilesChangedByCommit(i,r.commitSha),l=mb(s,a);if(l===void 0)return Zr(_r.NO_ANCHOR);let c;try{c=await CS(e,o,rS,iS(fb(r.message??"")))}catch(d){return{...Zr(LS(d)),callsUsed:1}}if(c.decisions===void 0)return{...Zr(_r.LLM_NON_JSON_OUTPUT),tokensUsed:c.tokensUsed,callsUsed:1};let{persisted:u,deduped:p}=NS(t,l,a,r.commitSha,c.decisions);return{success:!0,persistedCount:u,dedupedCount:p,tokensUsed:c.tokensUsed,callsUsed:1}}async function _b(t,e,r){let{git:n,workspaceRoot:i,store:s,llmModel:o}=t,a=r.file;if(!a)return Zr(_r.MISSING_FILE);let l=s.graph.findNodeIdByNodeKey(r.target)??s.graph.findNodeIdByNodeKey(vt(a));if(l===void 0)return Zr(_r.NO_ANCHOR);let c=await n.readFileAtRef(i,S.HEAD_REF,a);if(c===void 0)return Zr(_r.FILE_UNREADABLE);let u=r.target.slice(r.target.indexOf("#")+1),p=oS(u,a,c),d;try{d=await CS(e,o,sS,p)}catch(E){return{...Zr(LS(E)),callsUsed:1}}if(d.decisions===void 0)return{...Zr(_r.LLM_NON_JSON_OUTPUT),tokensUsed:d.tokensUsed,callsUsed:1};let{persisted:f,deduped:h}=NS(t,l,[a],r.commitSha,d.decisions);return{success:!0,persistedCount:f,dedupedCount:h,tokensUsed:d.tokensUsed,callsUsed:1}}import Sb from"path";import Tb from"crypto";import Ab from"fs/promises";function Rb(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 yb(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 PS(t,e){let{workspaceRoot:r,logger:n,providerConfig:i,store:s,git:o}=e,a=y.resolve(T.EdgeResolutionProviders,{logger:n}),l=[],c=[],u=[],p=[];for(let E of Object.keys(t)){let I=t[E];if(!I||I.length===0)continue;let C=a[E];if(!C){p.push({languageId:E,reason:`no LSP provider registered for language "${E}"`});continue}let L=C();i&&L.configure(i);let b=E===B.TYPESCRIPT?await Cb(s,o,r,I,n):void 0,Q=await L.resolveEdges({workspaceRoot:r,files:I.map(J=>J.file),callsByFile:b});Rb(Q,l,c,u),Q.unavailableReason&&p.push({languageId:E,reason:Q.unavailableReason})}let{unavailableReason:d,fullyDegraded:f,strayLanguageDegraded:h}=yb(t,p);return{edges:l,filesProcessed:c,filesFailed:u,unavailableReason:d,degradedLanguages:p,fullyDegraded:f,strayLanguageDegraded:h}}function Ob(t){return t.split("\\").join("/")}async function Ib(t,e,r,n){let i=Ob(e);if(!r.has(i)&&n.has(i))return n.get(i);try{let s=await Ab.readFile(Sb.join(t,e),H);return Tb.createHash(Jt).update(s).digest("hex")}catch{return}}async function Lb(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 Cb(t,e,r,n,i){let s=t.projects.getFirst();if(!s)return;let o=n.map(E=>E.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(E=>[E.filePath,E.contentHash])),{dirtyFiles:u,blobHashes:p}=await Lb(e,r),d={},f=0,h=0;for(let E of o){let I=a.get(E);if(!I||I.length===0)continue;let C=c.get(E),L=await Ib(r,E,u,p);if(!C||!L||C!==L){h++;continue}d[E]=I,f++}return i.info(q.TIER_B_FORWARD_SEEDED(B.TYPESCRIPT,f,l,h)),await V(r,{event:Y.TIER_B_FORWARD_SEEDED,languageId:B.TYPESCRIPT,seeded:f,total:l,staleSkipped:h}),f>0?d:void 0}var Pd=50;async function vS(t){let e=await Db(t),r=await IS({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 Db(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=yi(n,t.commitCap);if(t.full){let{filesQueued:$}=await fS({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=hs(n);if(l.length===0)return r.info(q.TIER_B_EMPTY_QUEUE),await V(e,{event:Y.TIER_B_EMPTY_QUEUE}),wb(o,a);let{buckets:c,toProcess:u,droppedDeleted:p,skippedLanguage:d}=await Fb(t,l);if(await Mb(e,p,d),u.length===0)return await DS(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 kb(t,c);for(let $ of f.filesFailed)await V(e,{event:Y.TIER_B_FILE_FAILED,level:Pd,file:$.file,reason:$.reason,retryable:$.retryable});f.unavailableReason&&(await V(e,{event:Y.TIER_B_DEGRADED,level:Pd,reason:f.unavailableReason,degradedLanguages:f.degradedLanguages}),r.info(q.TIER_B_DEGRADED(f.unavailableReason)));let{edgesApplied:h,edgesPruned:E}=await Gb(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||h>0,J=vb(n,u,f,Q,b,L,bb(c,f));return await DS(t,{headSha:o,commitCapExceeded:a,queued:l.length,droppedDeleted:p.length,skippedLanguage:d.length,outcome:f,failedEntries:b,permanentFailed:L,edgesApplied:h,edgesPruned:E,zeroProgressWatchdogTripped:J,degradedReason:f.unavailableReason})}function vb(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 bb(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 wb(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 Fb(t,e){let{workspaceRoot:r}=t,n=[],i=[];for(let a of e)Nb.existsSync(Pb.join(r,a.file))?n.push(a):i.push(a);let{buckets:s,unsupported:o}=mS(n);return{buckets:s,toProcess:Object.values(s).flatMap(a=>a??[]),droppedDeleted:i,skippedLanguage:o}}async function Mb(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 kb(t,e){let{workspaceRoot:r,logger:n,providerConfig:i,store:s,git:o}=t;return PS(e,{workspaceRoot:r,logger:n,providerConfig:i,store:s,git:o})}async function Gb(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 DS(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:Pd}:{},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 bS(t){return t.trim().replace(/\s+/g," ").toLowerCase()}function wS(t){return(t??"").trim().replace(/\s+/g," ")}function FS(t,e){let r=t.filter(i=>i.validity_status!==or.GARBAGE),n=[];for(let i of e){let s=bS(i.title),o=wS(i.content);for(let a of r)bS(a.title)===s&&wS(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 MS(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 Oi(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 Ub(e,r);if(c===null)return{persisted:0,deduped:0,noGraphToAttach:!0};try{let u=c.projects.getFirst();if(!u)return await Dd(e,r),{persisted:0,deduped:0,noGraphToAttach:!0};let p=uS(c,e,n,i);if(p===void 0)return await Dd(e,r),{persisted:0,deduped:0,noGraphToAttach:!0};t.writerEnhancements?.warnOnAnchorContradictions&&xb(c.l3.getByL2NodeId(p),s,r);let d=await Hb({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 xb(t,e,r){for(let n of FS(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 Ub(t,e){let r=y.resolve(T.GraphStoreOpener);try{return await r({dbPath:ie(t),readonly:!1})}catch(n){if(n instanceof _&&n.code===R.DB_OPEN_FAILED)return await Dd(t,e),null;throw n}}async function Hb(t){let{workspaceRoot:e,store:r,projectId:n,anchorL2NodeId:i,files:s,decisions:o,source:a,extractionModel:l}=t,c=t.commitSha??await y.resolve(T.GitProvider).getHeadSha(e)??null,u=s.map(h=>vt(h.relativePath)),p=t.captureAnchorRanges?await MS({git:y.resolve(T.GitProvider),workspaceRoot:e,commitSha:c,sourceFiles:u}):null,d=0,f=0;for(let h of o)r.l3.upsertDecision({projectId:n,l2NodeId:i,title:h.title,content:h.content,nodeType:h.nodeType,confidence:h.confidence,commitSha:c,extractionModel:l,sourceFiles:u,source:a,...t.captureAnchorRanges?{anchorRanges:p}:{}}).deduped?f++:d++;return{persisted:d,deduped:f}}async function Dd(t,e){e.warn(q.NO_GRAPH_TO_ATTACH),await V(t,{event:Y.FOCUSED_PERSIST_SKIPPED,message:q.NO_GRAPH_TO_ATTACH})}import kS from"fs";import Ss from"path";function Bb(t,e){let r=Ss.relative(e,t);return r===""||r!==".."&&!r.startsWith(`..${Ss.sep}`)&&!Ss.isAbsolute(r)}async function GS(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=Ss.resolve(e),o=Ss.resolve(s,n);if(!Bb(o,s)){let p=q.PATH_NOT_FOUND(n);throw await V(e,{event:Y.FOCUSED_ERROR,targetPath:n,message:p}),new _(R.INVALID_INPUT,p)}if(!kS.existsSync(o)){let p=q.PATH_NOT_FOUND(n);throw await V(e,{event:Y.FOCUSED_ERROR,targetPath:n,message:p}),new _(R.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}=Xr(o,e,r);if(l.length>0&&r.warn(q.FILES_DROPPED(l.length),{droppedFiles:l,targetPath:n}),a.length===0&&!kS.statSync(o).isDirectory())throw new _(R.INVALID_INPUT,q.AGENT_AUTHORED_ANCHOR_UNRESOLVABLE(n));let{persisted:c,deduped:u}=await Oi({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 Wb from"fs";import jb from"path";import vd from"fs/promises";import{statSync as Kb}from"fs";import Va from"path";var xS={CORRUPT_FILE:t=>`Could not parse ${t} -- treating staged L3 decisions as empty`};function US(t){return Va.join(t,Ee,Lp)}function $b(t){return typeof t=="object"&&t!==null&&Array.isArray(t.decisions)}async function Ii(t,e){let r=US(t),n;try{n=await vd.readFile(r,H)}catch{return[]}let i;try{i=JSON.parse(n)}catch{return e.warn(xS.CORRUPT_FILE(r)),[]}return $b(i)?i.decisions:(e.warn(xS.CORRUPT_FILE(r)),[])}async function HS(t,e,r,n){let i=Va.resolve(t,e),s;try{s=Kb(i).isDirectory()}catch{throw new _(R.FS_READ_FAILED,q.PATH_NOT_FOUND(e))}let{files:o}=Xr(i,t,n);if(!s&&o.length===0)throw new _(R.INVALID_INPUT,q.AGENT_AUTHORED_ANCHOR_UNRESOLVABLE(e));let a=vt(Va.relative(t,i)),l=await Ii(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 bd(t,[...l,...u]),{staged:u.length}}async function bd(t,e){await vd.mkdir(Va.join(t,Ee),{recursive:!0}),await vd.writeFile(US(t),`${JSON.stringify({decisions:e},null,2)}
164
+ `,H)}import wd from"fs/promises";import KS from"path";var BS={CORRUPT_FILE:t=>`Could not parse ${t} -- falling back to the default hooks config`};function $S(t){return KS.join(t,Ee,Ip)}function Yb(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}async function Li(t,e){let r=$S(t),n;try{n=await wd.readFile(r,H)}catch{return{...bi}}let i;try{i=JSON.parse(n)}catch{return e.warn(BS.CORRUPT_FILE(r)),{...bi}}if(!Yb(i))return e.warn(BS.CORRUPT_FILE(r)),{...bi};let s={...bi};for(let o of Object.values(ar)){let a=i[o];typeof a=="boolean"&&(s[o]=a)}return s}async function YS(t,e,r,n){let s={...await Li(t,n),[e]:r};await wd.mkdir(KS.join(t,Ee),{recursive:!0}),await wd.writeFile($S(t),`${JSON.stringify(s,null,2)}
165
+ `,H)}function Ts(t,e,r){return{kind:Te.FLUSH_STAGED_L3,skippedDisabled:t,flushed:0,deduped:0,stillPending:e,commitSha:r,noGraphToAttach:!1}}function Vb(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 zb(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 Jb(t){return t.map(e=>({title:e.title,content:e.content,nodeType:e.nodeType,confidence:e.confidence}))}async function qb(t,e,r,n,i){let s=jb.resolve(t,r);if(!Wb.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}=Xr(s,t,e);a.length>0&&e.warn(q.FILES_DROPPED(a.length),{droppedFiles:a,filePath:r});let l=await Oi({workspaceRoot:t,logger:e,resolvedTargetPath:s,files:o,decisions:Jb(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 WS(t){let{workspaceRoot:e,logger:r}=t;if(!(await Li(e,r))[ar.COMMIT_L3_WRITE])return r.info(q.FLUSH_STAGED_L3_DISABLED),await V(e,{event:Y.FLUSH_STAGED_L3_DISABLED}),Ts(!0,0,null);let i=await Ii(e,r);if(i.length===0)return r.info(q.FLUSH_STAGED_L3_EMPTY),Ts(!1,0,null);let s=y.resolve(T.GitProvider),o=await s.getHeadSha(e);if(!o)return Ts(!1,i.length,null);let a=new Set(await s.getFilesChangedByCommit(e,o)),{toFlush:l,stillPending:c}=zb(i,a);if(l.length===0)return await V(e,{event:Y.FLUSH_STAGED_L3_SUMMARY,flushed:0,stillPending:c.length,commitSha:o}),Ts(!1,c.length,o);let u=Vb(l),p=0,d=0,f=0,h=0,E=[];try{for(let[C,L]of u){let b=await qb(e,r,C,L,o);p+=b.persisted,d+=b.deduped,f+=b.dropped.length,h+=Number(b.noGraphToAttach),E.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}),Ts(!1,i.length,o)}let I=[...c,...E];return await bd(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:h>0}}var en=class{constructor(e,r,n){this.workspaceRoot=e;this.logger=r;this.options=n}workspaceRoot;logger;options;async execute(){return this.options?.flushStagedL3?WS({workspaceRoot:this.workspaceRoot,logger:this.logger}):this.options?.agentAuthoredDecisions?GS({workspaceRoot:this.workspaceRoot,logger:this.logger,targetPath:this.options.targetPath,decisions:this.options.agentAuthoredDecisions}):this.options?.targetPath?this.executeDecisionExtraction(this.options.targetPath):this.options?.escalateToLsp?this.executeTierBBatch():this.executeAutoMode()}async executeTierBBatch(){let{workspaceRoot:e,logger:r,options:n}=this,i;try{let s=y.resolve(T.GitProvider),o=y.resolve(T.KnowledgeGitService,{logger:r});return i=await y.resolve(T.GraphStoreOpener)({dbPath:ie(e),readonly:!1}),await vS(rw(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=y.resolve(T.GitProvider),s=y.resolve(T.KnowledgeGitService,{logger:r});return n=await y.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 Id({workspaceRoot:i,logger:s,store:e,git:r,knowledgeGit:n,projectId:l.id,fromSha:u,headSha:o}):await Ri({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 Ri({workspaceRoot:s,logger:o,store:e,git:r})}async tryHydrateThenDelta(e,r,n,i){let{workspaceRoot:s,logger:o}=this,a=y.resolve(T.HydrationService,{logger:o}),l=await a.resolveHydrationCommit(s);if(!l)return;let c=await Zb(r,s,l);if(!c||!(await a.hydrate(s,e)).hydrated)return;let p=await hi(e.projects,r,s);return await Id({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(!yi(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=Xb.resolve(r,e);if(!Qb.existsSync(s)){let I=q.PATH_NOT_FOUND(e);throw await V(r,{event:Y.FOCUSED_ERROR,targetPath:e,message:I}),new _(R.FS_READ_FAILED,I)}let{files:o,droppedFiles:a}=Xr(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} ---
166
166
  ${I.content}`).join(`
167
167
 
168
- `),u=y.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:tS},{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=Ya(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 _(R.LLM_INVALID_RESPONSE,I)}let{persisted:h,deduped:E}=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:h,deduped:E}}async persistDecisions(e,r,n){let{workspaceRoot:i,logger:s,options:o}=this;return Oi({workspaceRoot:i,logger:s,resolvedTargetPath:e,files:r,decisions:n,source:Ft.ANALYZE,extractionModel:o?.llmModel??null})}};async function tw(t,e,r){let i=(await t.getCommitLog(e,S.KNOWLEDGE_ROOT,S.KNOWLEDGE_LOG_SCAN_LIMIT)).find(s=>s.sha===r);return i?cr(i.message):void 0}function rw(t){return{providerConfig:t?.lspProviderConfig,commitCap:t?.tierBCommitCap,llmBaseUrl:t?.llmBaseUrl,llmApiKey:t?.llmApiKey,llmModel:t?.llmModel,full:t?.full}}function nw(t){return{tierCDailyCallCap:t?.tierCDailyCallCap,tierCDailyTokenCap:t?.tierCDailyTokenCap,tierCWallClockMs:t?.tierCWallClockMs,tierCItemCap:t?.tierCItemCap,tierCLoadThreshold:t?.tierCLoadThreshold,tierCDrainAll:t?.tierCDrainAll}}function iw(t,e,r,n,i,s){return{workspaceRoot:t,logger:e,store:r,git:n,knowledgeGit:i,...rw(s),...nw(s),force:s?.force}}var Va={DETECTING_CHANGES:"Detecting changes...",DB_NOT_FOUND:'Local database not found. Please run "docuvia init".'},za={START:"review.start",ERROR:"review.error",SUMMARY:"review.summary"};async function Ja(t,e){await ve(t,fp,e)}var qa=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(e){let{workspaceRoot:r,logger:n}=this;n.info(Va.DETECTING_CHANGES),await Ja(r,{event:za.START,baseRef:e??null});let o=(await y.resolve(T.GitProvider).getChangedFilesSince(r,e)).map(c=>({file:c.file,status:c.status}));await Qr(r,n);let a=y.resolve(T.GraphStoreOpener),l;try{l=await a({dbPath:ie(r),readonly:!0})}catch(c){throw c instanceof _&&c.code===R.DB_NOT_FOUND?(await Ja(r,{event:za.ERROR,message:Va.DB_NOT_FOUND}),new _(R.DB_NOT_FOUND,Va.DB_NOT_FOUND,c)):c}try{let u=y.resolve(T.ChangeDetectionService,{logger:n}).detectChanges({store:l,baseRef:e??null,filesChanged:o});return await Ja(r,{event:za.SUMMARY,baseRef:e??null,riskLevel:u.riskLevel,filesChanged:u.filesChanged.length,affectedNodes:u.affectedNodes.length}),u}finally{await l.close()}}};var At={RESOLVING:"Resolving blast radius...",DB_NOT_FOUND:'Local database not found. Please run "docuvia init".',REGISTRY_MEDIATED_COVERAGE_NOTE:'This symbol is resolved through the docuviaFactory/TOKENS registry -- the static edge graph does not model registry-mediated dependencies, so a "no dependents" result may be incomplete.',RISK_NOTE_EMPTY_WITH_PARTIAL_COVERAGE:(t,e)=>`No dependents found, but only ${t} of ${e} workspace files have been analyzed -- this is UNKNOWN, not confirmed zero. Run "docuvia analyze" for fuller coverage.`,RISK_NOTE_DYNAMIC_DEPENDENCY:(t,e,r,n,i)=>`Observed ${t} target-relevant runtime dependency evidence record(s); e.g. ${e}:${r} uses import(${n}) [${i}]. Dynamic candidates are possible targets, not confirmed runtime edges, so this result is a lower bound.`,RISK_NOTE_EMPTY_STATIC_EDGES_ONLY:"No static dependents found. The edge graph models calls/extends/implements only -- runtime-variable imports, computed import() specifiers, and child_process spawns are invisible, so absence of edges is not evidence of no dependents.",RISK_NOTE_EMPTY_LOW_RESOLUTION:(t,e)=>`No static dependents found, but only ${t} of ${e} call sites in this symbol's own file resolved into edges during ingestion -- dependents calling it from here may be missing from the graph. Run "docuvia analyze --escalate-to-lsp --full" to recover them.`,RISK_NOTE_PARTIAL_COVERAGE_NON_EMPTY:(t,e)=>`Only ${t} of ${e} workspace files have been analyzed -- this result may be missing dependents from unprocessed files.`},As={START:"impact.start",ERROR:"impact.error",SUMMARY:"impact.summary"};async function Rs(t,e){await ve(t,mp,e)}function jS(t,e){return t===void 0||e===void 0?!0:t<e}function VS(t){if(!t||t.length===0)return;let e=t[0];return At.RISK_NOTE_DYNAMIC_DEPENDENCY(t.length,e.sourceFile,e.startLine+1,e.expression,e.reason)}function sw(t){if(!(!t||t.applicable<S.DEFAULT_CALL_RESOLUTION_MIN_SAMPLE||t.resolved/t.applicable>=S.DEFAULT_CALL_RESOLUTION_NOTE_THRESHOLD))return At.RISK_NOTE_EMPTY_LOW_RESOLUTION(t.resolved,t.applicable)}function ow(t,e,r,n,i){if(jS(t,e))return At.RISK_NOTE_EMPTY_WITH_PARTIAL_COVERAGE(t??0,e??0);if(r)return At.REGISTRY_MEDIATED_COVERAGE_NOTE;let s=VS(i);if(s)return s;let o=sw(n);return o||At.RISK_NOTE_EMPTY_STATIC_EDGES_ONLY}function zS(t){let{blastRadiusCount:e,computedRiskLevel:r,workspaceFilesProcessed:n,workspaceFilesTotal:i,registryMediated:s}=t;if(e===0)return{riskLevel:Ye.UNKNOWN,epistemic:Ds.LOWER_BOUND,riskNote:ow(n,i,s,t.targetFileResolution,t.dynamicEvidence)};if(jS(n,i))return{riskLevel:r,epistemic:Ds.LOWER_BOUND,riskNote:At.RISK_NOTE_PARTIAL_COVERAGE_NON_EMPTY(n??0,i??0)};let o=VS(t.dynamicEvidence);return o?{riskLevel:r,epistemic:Ds.LOWER_BOUND,riskNote:o}:{riskLevel:r}}function JS(t,e){if(t)return e===At.REGISTRY_MEDIATED_COVERAGE_NOTE?void 0:At.REGISTRY_MEDIATED_COVERAGE_NOTE}import*as qS from"path";import*as QS from"fs/promises";var Qa=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(e){let{workspaceRoot:r,logger:n}=this;n.info(At.RESOLVING),await Rs(r,{event:As.START,target:e}),await Qr(r,n);let i=y.resolve(T.GraphStoreOpener),s;try{s=await i({dbPath:ie(r),readonly:!0})}catch(o){throw o instanceof _&&o.code===R.DB_NOT_FOUND?(await Rs(r,{event:As.ERROR,target:e,message:At.DB_NOT_FOUND}),new _(R.DB_NOT_FOUND,At.DB_NOT_FOUND,o)):o}try{let o=y.resolve(T.ImpactService,{logger:n}),a=o.getBlastRadius(s,e);if(!a)return await Rs(r,{event:As.SUMMARY,target:e,found:!1,blastRadiusCount:0,riskLevel:null}),null;let l=o.getDynamicEvidence?.(s,e)??[],c=a.filter(p=>p.edgeSource!==kn.DYNAMIC_CANDIDATE).length,u=o.computeRiskLevel(s,c);return await Rs(r,{event:As.SUMMARY,target:e,found:!0,blastRadiusCount:a.length,riskLevel:u}),{blastRadius:a,...l.length>0?{dynamicEvidence:l}:{},...await this.resolveEpistemicFields(s,e,c,u,l)}}finally{await s.close()}}async resolveEpistemicFields(e,r,n,i,s){let{tierBCoverage:o,registryMediated:a,targetFileResolution:l}=await this.resolveTargetContext(e,r,n),c=e.files.getTierBCoverage(),u=zS({blastRadiusCount:n,computedRiskLevel:i,workspaceFilesProcessed:c?.processedFiles,workspaceFilesTotal:c?.totalFiles,registryMediated:a,targetFileResolution:l,dynamicEvidence:s}),p=c!=null&&c.totalFiles>0&&c.processedFiles<c.totalFiles,d=JS(a,u.riskNote);return{riskLevel:u.riskLevel,...u.epistemic?{epistemic:u.epistemic}:{},...u.riskNote?{riskNote:u.riskNote}:{},...d?{coverageNote:d}:{},...o?{tierBCoverage:o}:{},...p?{partialCoverage:!0}:{}}}async resolveTargetContext(e,r,n){let i=e.graph.findNodeByName(r),s=y.resolve(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=va(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 QS.readFile(qS.join(this.workspaceRoot,e),H)}catch{return!1}return/docuviaFactory|TOKENS\./.test(r)}};var Xa={QUERYING:"Querying local knowledge graph...",DB_NOT_FOUND:'Local database not found. Please run "docuvia init".'},Za={START:"query.start",ERROR:"query.error",SUMMARY:"query.summary"};async function el(t,e){await ve(t,hp,e)}var tl=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(e,r){let{workspaceRoot:n,logger:i}=this;i.info(Xa.QUERYING),await el(n,{event:Za.START,target:e}),await Qr(n,i);let s=y.resolve(T.GraphStoreOpener),o;try{o=await s({dbPath:ie(n),readonly:!0})}catch(a){throw a instanceof _&&a.code===R.DB_NOT_FOUND?(await el(n,{event:Za.ERROR,target:e,message:Xa.DB_NOT_FOUND}),new _(R.DB_NOT_FOUND,Xa.DB_NOT_FOUND,a)):a}try{let l=y.resolve(T.QueryService,{logger:i}).query(o,e,r),c=!!l.l2||l.l3.length>0||!!l.context;return await el(n,{event:Za.SUMMARY,target:e,found:c}),l}finally{await o.close()}}};var rl={EXPORTING:"Exporting topology...",DB_NOT_FOUND:'Local database not found. Please run "docuvia init".'},nl={START:"export-topology.start",ERROR:"export-topology.error",SUMMARY:"export-topology.summary"};async function il(t,e){await ve(t,Ep,e)}var sl=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(e={}){let{workspaceRoot:r,logger:n}=this;n.info(rl.EXPORTING),await il(r,{event:nl.START,collapse:e.collapse??null});let i=y.resolve(T.GraphStoreOpener),s;try{s=await i({dbPath:ie(r),readonly:!0})}catch(o){throw o instanceof _&&o.code===R.DB_NOT_FOUND?(await il(r,{event:nl.ERROR,message:rl.DB_NOT_FOUND}),new _(R.DB_NOT_FOUND,rl.DB_NOT_FOUND,o)):o}try{let a=y.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 il(r,{event:nl.SUMMARY,nodeCount:a.stats.nodeCount,linkCount:a.stats.linkCount,groupCount:a.stats.groupCount,collapsed:a.collapsed}),a}finally{await s.close()}}};async function Fn(t,e){await ve(t,_p,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 XS(t,e){let r=y.resolve(T.GraphStoreOpener),n=y.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 Fn(t,{event:Si.TIER_B_FINALIZED,headSha:s.headSha,remainingQueueSize:s.remainingQueue.length})}finally{await i.close()}}var ol=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 _&&r.code===R.DB_NOT_FOUND?(await Fn(this.workspaceRoot,{event:Si.ERROR,message:wa.DB_NOT_FOUND}),new _(R.DB_NOT_FOUND,wa.DB_NOT_FOUND,r)):r}}async shouldSkipSnapshot(e,r){let i=await y.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(wa.SNAPSHOTTING),await Fn(e,{event:Si.START,workspaceRoot:e});let n=y.resolve(T.GraphStoreOpener),i=y.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 Fn(e,{event:"snapshot.skipped",reason:"already-up-to-date",headSha:a}),{nodesWritten:0,edgesWritten:0,markdownFilesWritten:0};let l=await Ti(e,s,i);return await XS(e,r),await Fn(e,{event:Si.SUMMARY,nodesWritten:l.nodesWritten,edgesWritten:l.edgesWritten,markdownFilesWritten:l.markdownFilesWritten}),l}finally{await s.close()}}};var wd={HYDRATING:"Hydrating local database from the knowledge branch...",NOTHING_TO_HYDRATE:'Nothing to hydrate from yet. Please run "docuvia init".'},al={START:"hydrate.start",SUMMARY:"hydrate.summary"};async function ll(t,e){await ve(t,Sp,e)}var cl=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(e){let{workspaceRoot:r,logger:n}=this;n.info(wd.HYDRATING),await ll(r,{event:al.START,workspaceRoot:r});let s=await y.resolve(T.GraphStoreOpener)({dbPath:ie(r),readonly:!1});try{let a=await y.resolve(T.HydrationService,{logger:n}).hydrate(r,s,void 0,e);return a.hydrated?(await ll(r,{event:al.SUMMARY,hydrated:!0,knowledgeSha:a.knowledgeSha,nodesLoaded:a.nodesLoaded,edgesLoaded:a.edgesLoaded,edgesDropped:a.edgesDropped}),a):(await ll(r,{event:al.SUMMARY,hydrated:!1,message:wd.NOTHING_TO_HYDRATE}),a)}finally{await s.close()}}};var ys={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}`},Os={START:"sync-knowledge.start",SUMMARY:"sync-knowledge.summary",VALIDITY_PASS:"sync-knowledge.l3-validity-pass"};async function Is(t,e){await ve(t,Tp,e)}var ul="l3ValidityJudgedSha";function lw(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 ZS(t){if(!t)return[];try{let e=JSON.parse(t);return Array.isArray(e)?e:[]}catch{return[]}}function cw(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 uw(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([...ZS(o.source_commits),...ZS(o.initial_source_commits),...o.commit_hash?[o.commit_hash]:[]]),c=a.ranges.every(p=>cw(p,r,l)),u=c?or.ACTIVE:or.GARBAGE;u!==o.validity_status&&(t.l3.updateValidityStatus(o.id,u),c?i++:s++)}return{activated:i,superseded:s}}async function eT(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(ul);if(l===o)return a;if(!l)return n.meta.set(ul,o),a.baseline=!0,a;let c=n.l3.getAllExportable().map(I=>({row:I,anchors:lw(I)})).filter(I=>I.anchors!==null&&(I.row.validity_status===or.PENDING||I.row.validity_status===or.ACTIVE));if(c.length===0)return n.meta.set(ul,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 h=new Set(d),E=uw(n,c,f,h);return a.activated=E.activated,a.superseded=E.superseded,n.meta.set(ul,o),a}var dl=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(ys.SYNCING),await Is(e,{event:Os.START,workspaceRoot:e});let i=y.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(ys.VALIDITY_PASS_FAILED(a)),await Is(e,{event:Os.VALIDITY_PASS,status:"error",error:a})}return await Is(e,{event:Os.SUMMARY,status:s.status,branchTipSha:s.branchTipSha??null}),s}async importL3Cards(e,r){let{workspaceRoot:n,logger:i}=this,s=y.resolve(T.HydrationService,{logger:i}),a=await y.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 y.resolve(T.GraphStoreOpener)({dbPath:ie(e),readonly:!1});try{let s=await eT({workspaceRoot:e,logger:r,store:i,git:y.resolve(T.GitProvider),blame:y.resolve(T.LineBlameProvider)});s.baseline?r.info(ys.VALIDITY_PASS_BASELINE):r.info(ys.VALIDITY_PASS_SUMMARY(s.activated,s.superseded)),await Is(e,{event:Os.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"},tT=".log",Fd={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 rT(t,e,r){let n=y.resolve(T.EdgeResolutionProviders,{logger:e}),i=await Md(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 Md(t,e){if(!y.has(T.GraphStoreOpener))return Object.keys(e);let r;try{r=await y.resolve(T.GraphStoreOpener)({dbPath:ie(t),readonly:!0});let i=hs(r),s=new Set;for(let o of i){let a=Id(o.file);a&&s.add(a)}return Array.from(s)}catch{return Object.keys(e)}finally{await r?.close()}}import{existsSync as dw}from"fs";import*as kd from"path";import{execFile as pw}from"child_process";import{promisify as gw}from"util";var fw=gw(pw),mw=5e3,hw="npx",Ew="--no-install",Gd="docuvia",_w=[".cmd",".CMD",".exe",""],nT="docuvia doctor";function Sw(t){let e=kd.join(t,"node_modules",".bin");return(process.platform==="win32"?_w.map(n=>`${Gd}${n}`):[Gd]).some(n=>dw(kd.join(e,n)))}function iT(t){if(!t||typeof t!="object")return"";let{stdout:e,stderr:r}=t;return`${e??""}${r??""}`}async function Tw(t){try{let e=await fw(hw,[Ew,Gd],{cwd:t,timeout:mw});return iT(e).includes(nT)}catch(e){return iT(e).includes(nT)}}async function xd(t){return Sw(t)?!0:Tw(t)}import*as Rt from"path";import*as sr from"fs/promises";var pl=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(e={}){let{skipDb:r=!1,skipGit:n=!1,skipLogs:i=!1,skipHooks:s=!1,skipLsp:o=!1,skipLlm:a=!1,fix:l=!1,llmBaseUrl:c,llmApiKey:u,llmModel:p}=e,d={},f=[await this.runOrSkip(r,()=>this.runDbDiagnostics(d)),await this.runOrSkip(n,()=>this.runGitDiagnostics(d)),await this.runOrSkip(i,()=>this.runLogsDiagnostics(d)),await this.runOrSkip(n,()=>this.runGitHookDiagnostic(d,l)),await this.runOrSkip(n,()=>this.runPrePushHookDiagnostic(d,l)),await this.runOrSkip(a,()=>this.runLlmReachabilityDiagnostic(d,c,u,p)),await this.runOrSkip(o,()=>this.runLspBinaryDiagnostic(d)),await this.runOrSkip(r,()=>this.runTierBCoverageDiagnostic(d)),await this.runOrSkip(r,()=>this.runGraphEmptyDiagnostic(d)),await this.runOrSkip(r||n,()=>this.runPostCommitIngestionDiagnostic(d)),...await this.runGraphHealthDiagnostics(d,r,n,c)];return await this.runOrSkip(r,()=>this.runTierBCommitCapDiagnostic(d)),await this.runOrSkip(s,()=>this.runAgentHooksDiagnostic(d)),{allPassed:f.every(Boolean),diagnostics:d}}async runOrSkip(e,r){if(e)return!0;let n=await r();return n===void 0?!0:!!n}async runGraphHealthDiagnostics(e,r,n,i){return[await this.runOrSkip(r,()=>this.runTierCQueueDiagnostic(e)),await this.runOrSkip(r,()=>this.runL2SemanticCoverageDiagnostic(e,i)),await this.runStagedL3Diagnostic(e),await this.runOrSkip(n,()=>this.runWorktreeDivergenceDiagnostic(e)),await this.runOrSkip(r||n,()=>this.runAgentAuthoredAdoptionDiagnostic(e)),await this.runOrSkip(r,()=>this.runCallGraphResolutionDiagnostic(e)),await this.runOrSkip(r,()=>this.runCanarySelfTestDiagnostic(e))]}async runCanarySelfTestDiagnostic(e){if(!y.has(T.GraphStoreOpener))return!0;let r;try{r=await y.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(!y.has(T.GitProvider))return!0;try{let n=y.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(!y.has(T.KnowledgeGitService))return e;let r=y.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 xd(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(!y.has(T.KnowledgeGitService))return e;let r=y.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(!y.has(T.GitProvider))return!0;try{let n=y.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(!y.has(T.KnowledgeGitService))return e;let r=y.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 xd(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(!y.has(T.LlmClient))return!0;try{let o=y.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(!y.has(T.EdgeResolutionProviders))return!0;try{let r=y.resolve(T.EdgeResolutionProviders,{logger:this.logger}),n=await Md(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:Bn,filename:Cr,platformName:Fd.CLAUDE},{key:ue.AGENT_HOOKS_CURSOR,dir:Kn,filename:Nr,platformName:Fd.CURSOR}];for(let{key:n,dir:i,filename:s,platformName:o}of r){let a=Rt.join(this.workspaceRoot,i,s),l;try{await sr.stat(a),l=!0}catch{l=!1}e[n]={status:K.PASS,message:l?k.AGENT_HOOKS_FOUND(o):k.AGENT_HOOKS_NOT_FOUND(o)}}}async runTierBCommitCapDiagnostic(e){if(!y.has(T.GraphStoreOpener))return;let r;try{r=await y.resolve(T.GraphStoreOpener)({dbPath:ie(this.workspaceRoot),readonly:!0});let i=yi(r);e[ue.TIER_B_COMMIT_CAP]={status:K.PASS,message:i?k.TIER_B_CAP_EXCEEDED:k.TIER_B_CAP_OK}}catch{}finally{await r?.close()}}async runTierBCoverageDiagnostic(e){if(!y.has(T.GraphStoreOpener))return!0;let r;try{r=await y.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(!y.has(T.GraphStoreOpener))return!0;let r;try{r=await y.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(!y.has(T.GraphStoreOpener)||!y.has(T.GitProvider))return!0;let r;try{let n=y.resolve(T.GitProvider);r=await y.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=ir(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,Ee,Or,wi),r;try{r=await sr.readFile(e,H)}catch{return!1}let n=S.DEFAULT_POST_COMMIT_INGESTION_GRACE_MS,i=Date.now(),s=r.split(`
168
+ `),u=y.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:tS},{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 _(R.LLM_INVALID_RESPONSE,I)}let{persisted:h,deduped:E}=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:h,deduped:E}}async persistDecisions(e,r,n){let{workspaceRoot:i,logger:s,options:o}=this;return Oi({workspaceRoot:i,logger:s,resolvedTargetPath:e,files:r,decisions:n,source:Ft.ANALYZE,extractionModel:o?.llmModel??null})}};async function Zb(t,e,r){let i=(await t.getCommitLog(e,S.KNOWLEDGE_ROOT,S.KNOWLEDGE_LOG_SCAN_LIMIT)).find(s=>s.sha===r);return i?cr(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 tw(t){return{tierCDailyCallCap:t?.tierCDailyCallCap,tierCDailyTokenCap:t?.tierCDailyTokenCap,tierCWallClockMs:t?.tierCWallClockMs,tierCItemCap:t?.tierCItemCap,tierCLoadThreshold:t?.tierCLoadThreshold,tierCDrainAll:t?.tierCDrainAll}}function rw(t,e,r,n,i,s){return{workspaceRoot:t,logger:e,store:r,git:n,knowledgeGit:i,...ew(s),...tw(s),force:s?.force}}var za={DETECTING_CHANGES:"Detecting changes...",DB_NOT_FOUND:'Local database not found. Please run "docuvia init".'},Ja={START:"review.start",ERROR:"review.error",SUMMARY:"review.summary"};async function qa(t,e){await ve(t,mp,e)}var Qa=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(e){let{workspaceRoot:r,logger:n}=this;n.info(za.DETECTING_CHANGES),await qa(r,{event:Ja.START,baseRef:e??null});let o=(await y.resolve(T.GitProvider).getChangedFilesSince(r,e)).map(c=>({file:c.file,status:c.status}));await Qr(r,n);let a=y.resolve(T.GraphStoreOpener),l;try{l=await a({dbPath:ie(r),readonly:!0})}catch(c){throw c instanceof _&&c.code===R.DB_NOT_FOUND?(await qa(r,{event:Ja.ERROR,message:za.DB_NOT_FOUND}),new _(R.DB_NOT_FOUND,za.DB_NOT_FOUND,c)):c}try{let u=y.resolve(T.ChangeDetectionService,{logger:n}).detectChanges({store:l,baseRef:e??null,filesChanged:o});return await qa(r,{event:Ja.SUMMARY,baseRef:e??null,riskLevel:u.riskLevel,filesChanged:u.filesChanged.length,affectedNodes:u.affectedNodes.length}),u}finally{await l.close()}}};var At={RESOLVING:"Resolving blast radius...",DB_NOT_FOUND:'Local database not found. Please run "docuvia init".',REGISTRY_MEDIATED_COVERAGE_NOTE:'This symbol is resolved through the docuviaFactory/TOKENS registry -- the static edge graph does not model registry-mediated dependencies, so a "no dependents" result may be incomplete.',RISK_NOTE_EMPTY_WITH_PARTIAL_COVERAGE:(t,e)=>`No dependents found, but only ${t} of ${e} workspace files have been analyzed -- this is UNKNOWN, not confirmed zero. Run "docuvia analyze" for fuller coverage.`,RISK_NOTE_DYNAMIC_DEPENDENCY:(t,e,r,n,i)=>`Observed ${t} target-relevant runtime dependency evidence record(s); e.g. ${e}:${r} uses import(${n}) [${i}]. Dynamic candidates are possible targets, not confirmed runtime edges, so this result is a lower bound.`,RISK_NOTE_EMPTY_STATIC_EDGES_ONLY:"No static dependents found. The edge graph models calls/extends/implements only -- runtime-variable imports, computed import() specifiers, and child_process spawns are invisible, so absence of edges is not evidence of no dependents.",RISK_NOTE_EMPTY_LOW_RESOLUTION:(t,e)=>`No static dependents found, but only ${t} of ${e} call sites in this symbol's own file resolved into edges during ingestion -- dependents calling it from here may be missing from the graph. Run "docuvia analyze --escalate-to-lsp --full" to recover them.`,RISK_NOTE_PARTIAL_COVERAGE_NON_EMPTY:(t,e)=>`Only ${t} of ${e} workspace files have been analyzed -- this result may be missing dependents from unprocessed files.`},As={START:"impact.start",ERROR:"impact.error",SUMMARY:"impact.summary"};async function Rs(t,e){await ve(t,hp,e)}function jS(t,e){return t===void 0||e===void 0?!0:t<e}function VS(t){if(!t||t.length===0)return;let e=t[0];return At.RISK_NOTE_DYNAMIC_DEPENDENCY(t.length,e.sourceFile,e.startLine+1,e.expression,e.reason)}function nw(t){if(!(!t||t.applicable<S.DEFAULT_CALL_RESOLUTION_MIN_SAMPLE||t.resolved/t.applicable>=S.DEFAULT_CALL_RESOLUTION_NOTE_THRESHOLD))return At.RISK_NOTE_EMPTY_LOW_RESOLUTION(t.resolved,t.applicable)}function iw(t,e,r,n,i){if(jS(t,e))return At.RISK_NOTE_EMPTY_WITH_PARTIAL_COVERAGE(t??0,e??0);if(r)return At.REGISTRY_MEDIATED_COVERAGE_NOTE;let s=VS(i);if(s)return s;let o=nw(n);return o||At.RISK_NOTE_EMPTY_STATIC_EDGES_ONLY}function zS(t){let{blastRadiusCount:e,computedRiskLevel:r,workspaceFilesProcessed:n,workspaceFilesTotal:i,registryMediated:s}=t;if(e===0)return{riskLevel:Ye.UNKNOWN,epistemic:Ds.LOWER_BOUND,riskNote:iw(n,i,s,t.targetFileResolution,t.dynamicEvidence)};if(jS(n,i))return{riskLevel:r,epistemic:Ds.LOWER_BOUND,riskNote:At.RISK_NOTE_PARTIAL_COVERAGE_NON_EMPTY(n??0,i??0)};let o=VS(t.dynamicEvidence);return o?{riskLevel:r,epistemic:Ds.LOWER_BOUND,riskNote:o}:{riskLevel:r}}function JS(t,e){if(t)return e===At.REGISTRY_MEDIATED_COVERAGE_NOTE?void 0:At.REGISTRY_MEDIATED_COVERAGE_NOTE}import*as qS from"path";import*as QS from"fs/promises";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(At.RESOLVING),await Rs(r,{event:As.START,target:e}),await Qr(r,n);let i=y.resolve(T.GraphStoreOpener),s;try{s=await i({dbPath:ie(r),readonly:!0})}catch(o){throw o instanceof _&&o.code===R.DB_NOT_FOUND?(await Rs(r,{event:As.ERROR,target:e,message:At.DB_NOT_FOUND}),new _(R.DB_NOT_FOUND,At.DB_NOT_FOUND,o)):o}try{let o=y.resolve(T.ImpactService,{logger:n}),a=o.getBlastRadius(s,e);if(!a)return await Rs(r,{event:As.SUMMARY,target:e,found:!1,blastRadiusCount:0,riskLevel:null}),null;let l=o.getDynamicEvidence?.(s,e)??[],c=a.filter(p=>p.edgeSource!==kn.DYNAMIC_CANDIDATE).length,u=o.computeRiskLevel(s,c);return await Rs(r,{event:As.SUMMARY,target:e,found:!0,blastRadiusCount:a.length,riskLevel:u}),{blastRadius:a,...l.length>0?{dynamicEvidence:l}:{},...await this.resolveEpistemicFields(s,e,c,u,l)}}finally{await s.close()}}async resolveEpistemicFields(e,r,n,i,s){let{tierBCoverage:o,registryMediated:a,targetFileResolution:l}=await this.resolveTargetContext(e,r,n),c=e.files.getTierBCoverage(),u=zS({blastRadiusCount:n,computedRiskLevel:i,workspaceFilesProcessed:c?.processedFiles,workspaceFilesTotal:c?.totalFiles,registryMediated:a,targetFileResolution:l,dynamicEvidence:s}),p=c!=null&&c.totalFiles>0&&c.processedFiles<c.totalFiles,d=JS(a,u.riskNote);return{riskLevel:u.riskLevel,...u.epistemic?{epistemic:u.epistemic}:{},...u.riskNote?{riskNote:u.riskNote}:{},...d?{coverageNote:d}:{},...o?{tierBCoverage:o}:{},...p?{partialCoverage:!0}:{}}}async resolveTargetContext(e,r,n){let i=e.graph.findNodeByName(r),s=y.resolve(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=ba(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 QS.readFile(qS.join(this.workspaceRoot,e),H)}catch{return!1}return/docuviaFactory|TOKENS\./.test(r)}};var Za={QUERYING:"Querying local knowledge graph...",DB_NOT_FOUND:'Local database not found. Please run "docuvia init".'},el={START:"query.start",ERROR:"query.error",SUMMARY:"query.summary"};async function tl(t,e){await ve(t,Ep,e)}var rl=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(e,r){let{workspaceRoot:n,logger:i}=this;i.info(Za.QUERYING),await tl(n,{event:el.START,target:e}),await Qr(n,i);let s=y.resolve(T.GraphStoreOpener),o;try{o=await s({dbPath:ie(n),readonly:!0})}catch(a){throw a instanceof _&&a.code===R.DB_NOT_FOUND?(await tl(n,{event:el.ERROR,target:e,message:Za.DB_NOT_FOUND}),new _(R.DB_NOT_FOUND,Za.DB_NOT_FOUND,a)):a}try{let l=y.resolve(T.QueryService,{logger:i}).query(o,e,r),c=!!l.l2||l.l3.length>0||!!l.context;return await tl(n,{event:el.SUMMARY,target:e,found:c}),l}finally{await o.close()}}};var nl={EXPORTING:"Exporting topology...",DB_NOT_FOUND:'Local database not found. Please run "docuvia init".'},il={START:"export-topology.start",ERROR:"export-topology.error",SUMMARY:"export-topology.summary"};async function sl(t,e){await ve(t,_p,e)}var ol=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(e={}){let{workspaceRoot:r,logger:n}=this;n.info(nl.EXPORTING),await sl(r,{event:il.START,collapse:e.collapse??null});let i=y.resolve(T.GraphStoreOpener),s;try{s=await i({dbPath:ie(r),readonly:!0})}catch(o){throw o instanceof _&&o.code===R.DB_NOT_FOUND?(await sl(r,{event:il.ERROR,message:nl.DB_NOT_FOUND}),new _(R.DB_NOT_FOUND,nl.DB_NOT_FOUND,o)):o}try{let a=y.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 sl(r,{event:il.SUMMARY,nodeCount:a.stats.nodeCount,linkCount:a.stats.linkCount,groupCount:a.stats.groupCount,collapsed:a.collapsed}),a}finally{await s.close()}}};async function Fn(t,e){await ve(t,Sp,e)}function sw(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 XS(t,e){let r=y.resolve(T.GraphStoreOpener),n=y.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=sw(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 Fn(t,{event:Si.TIER_B_FINALIZED,headSha:s.headSha,remainingQueueSize:s.remainingQueue.length})}finally{await i.close()}}var al=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 _&&r.code===R.DB_NOT_FOUND?(await Fn(this.workspaceRoot,{event:Si.ERROR,message:Fa.DB_NOT_FOUND}),new _(R.DB_NOT_FOUND,Fa.DB_NOT_FOUND,r)):r}}async shouldSkipSnapshot(e,r){let i=await y.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(Fa.SNAPSHOTTING),await Fn(e,{event:Si.START,workspaceRoot:e});let n=y.resolve(T.GraphStoreOpener),i=y.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 Fn(e,{event:"snapshot.skipped",reason:"already-up-to-date",headSha:a}),{nodesWritten:0,edgesWritten:0,markdownFilesWritten:0};let l=await Ti(e,s,i);return await XS(e,r),await Fn(e,{event:Si.SUMMARY,nodesWritten:l.nodesWritten,edgesWritten:l.edgesWritten,markdownFilesWritten:l.markdownFilesWritten}),l}finally{await s.close()}}};var Fd={HYDRATING:"Hydrating local database from the knowledge branch...",NOTHING_TO_HYDRATE:'Nothing to hydrate from yet. Please run "docuvia init".'},ll={START:"hydrate.start",SUMMARY:"hydrate.summary"};async function cl(t,e){await ve(t,Tp,e)}var ul=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(e){let{workspaceRoot:r,logger:n}=this;n.info(Fd.HYDRATING),await cl(r,{event:ll.START,workspaceRoot:r});let s=await y.resolve(T.GraphStoreOpener)({dbPath:ie(r),readonly:!1});try{let a=await y.resolve(T.HydrationService,{logger:n}).hydrate(r,s,void 0,e);return a.hydrated?(await cl(r,{event:ll.SUMMARY,hydrated:!0,knowledgeSha:a.knowledgeSha,nodesLoaded:a.nodesLoaded,edgesLoaded:a.edgesLoaded,edgesDropped:a.edgesDropped}),a):(await cl(r,{event:ll.SUMMARY,hydrated:!1,message:Fd.NOTHING_TO_HYDRATE}),a)}finally{await s.close()}}};var ys={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}`},Os={START:"sync-knowledge.start",SUMMARY:"sync-knowledge.summary",VALIDITY_PASS:"sync-knowledge.l3-validity-pass"};async function Is(t,e){await ve(t,Ap,e)}var dl="l3ValidityJudgedSha";function ow(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 ZS(t){if(!t)return[];try{let e=JSON.parse(t);return Array.isArray(e)?e:[]}catch{return[]}}function aw(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 lw(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([...ZS(o.source_commits),...ZS(o.initial_source_commits),...o.commit_hash?[o.commit_hash]:[]]),c=a.ranges.every(p=>aw(p,r,l)),u=c?or.ACTIVE:or.GARBAGE;u!==o.validity_status&&(t.l3.updateValidityStatus(o.id,u),c?i++:s++)}return{activated:i,superseded:s}}async function eT(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(dl);if(l===o)return a;if(!l)return n.meta.set(dl,o),a.baseline=!0,a;let c=n.l3.getAllExportable().map(I=>({row:I,anchors:ow(I)})).filter(I=>I.anchors!==null&&(I.row.validity_status===or.PENDING||I.row.validity_status===or.ACTIVE));if(c.length===0)return n.meta.set(dl,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 h=new Set(d),E=lw(n,c,f,h);return a.activated=E.activated,a.superseded=E.superseded,n.meta.set(dl,o),a}var pl=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(ys.SYNCING),await Is(e,{event:Os.START,workspaceRoot:e});let i=y.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(ys.VALIDITY_PASS_FAILED(a)),await Is(e,{event:Os.VALIDITY_PASS,status:"error",error:a})}return await Is(e,{event:Os.SUMMARY,status:s.status,branchTipSha:s.branchTipSha??null}),s}async importL3Cards(e,r){let{workspaceRoot:n,logger:i}=this,s=y.resolve(T.HydrationService,{logger:i}),a=await y.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 y.resolve(T.GraphStoreOpener)({dbPath:ie(e),readonly:!1});try{let s=await eT({workspaceRoot:e,logger:r,store:i,git:y.resolve(T.GitProvider),blame:y.resolve(T.LineBlameProvider)});s.baseline?r.info(ys.VALIDITY_PASS_BASELINE):r.info(ys.VALIDITY_PASS_SUMMARY(s.activated,s.superseded)),await Is(e,{event:Os.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"},tT=".log",Md={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 rT(t,e,r){let n=y.resolve(T.EdgeResolutionProviders,{logger:e}),i=await kd(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 kd(t,e){if(!y.has(T.GraphStoreOpener))return Object.keys(e);let r;try{r=await y.resolve(T.GraphStoreOpener)({dbPath:ie(t),readonly:!0});let i=hs(r),s=new Set;for(let o of i){let a=Ld(o.file);a&&s.add(a)}return Array.from(s)}catch{return Object.keys(e)}finally{await r?.close()}}import{existsSync as cw}from"fs";import*as Gd from"path";import{execFile as uw}from"child_process";import{promisify as dw}from"util";var pw=dw(uw),gw=5e3,fw="npx",mw="--no-install",xd="docuvia",hw=[".cmd",".CMD",".exe",""],nT="docuvia doctor";function Ew(t){let e=Gd.join(t,"node_modules",".bin");return(process.platform==="win32"?hw.map(n=>`${xd}${n}`):[xd]).some(n=>cw(Gd.join(e,n)))}function iT(t){if(!t||typeof t!="object")return"";let{stdout:e,stderr:r}=t;return`${e??""}${r??""}`}async function _w(t){try{let e=await pw(fw,[mw,xd],{cwd:t,timeout:gw});return iT(e).includes(nT)}catch(e){return iT(e).includes(nT)}}async function Ud(t){return Ew(t)?!0:_w(t)}import*as Rt from"path";import*as sr from"fs/promises";var gl=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(e={}){let{skipDb:r=!1,skipGit:n=!1,skipLogs:i=!1,skipHooks:s=!1,skipLsp:o=!1,skipLlm:a=!1,fix:l=!1,llmBaseUrl:c,llmApiKey:u,llmModel:p}=e,d={},f=[await this.runOrSkip(r,()=>this.runDbDiagnostics(d)),await this.runOrSkip(n,()=>this.runGitDiagnostics(d)),await this.runOrSkip(i,()=>this.runLogsDiagnostics(d)),await this.runOrSkip(n,()=>this.runGitHookDiagnostic(d,l)),await this.runOrSkip(n,()=>this.runPrePushHookDiagnostic(d,l)),await this.runOrSkip(a,()=>this.runLlmReachabilityDiagnostic(d,c,u,p)),await this.runOrSkip(o,()=>this.runLspBinaryDiagnostic(d)),await this.runOrSkip(r,()=>this.runTierBCoverageDiagnostic(d)),await this.runOrSkip(r,()=>this.runGraphEmptyDiagnostic(d)),await this.runOrSkip(r||n,()=>this.runPostCommitIngestionDiagnostic(d)),...await this.runGraphHealthDiagnostics(d,r,n,c)];return await this.runOrSkip(r,()=>this.runTierBCommitCapDiagnostic(d)),await this.runOrSkip(s,()=>this.runAgentHooksDiagnostic(d)),{allPassed:f.every(Boolean),diagnostics:d}}async runOrSkip(e,r){if(e)return!0;let n=await r();return n===void 0?!0:!!n}async runGraphHealthDiagnostics(e,r,n,i){return[await this.runOrSkip(r,()=>this.runTierCQueueDiagnostic(e)),await this.runOrSkip(r,()=>this.runL2SemanticCoverageDiagnostic(e,i)),await this.runStagedL3Diagnostic(e),await this.runOrSkip(n,()=>this.runWorktreeDivergenceDiagnostic(e)),await this.runOrSkip(r||n,()=>this.runAgentAuthoredAdoptionDiagnostic(e)),await this.runOrSkip(r,()=>this.runCallGraphResolutionDiagnostic(e)),await this.runOrSkip(r,()=>this.runCanarySelfTestDiagnostic(e))]}async runCanarySelfTestDiagnostic(e){if(!y.has(T.GraphStoreOpener))return!0;let r;try{r=await y.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(!y.has(T.GitProvider))return!0;try{let n=y.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(!y.has(T.KnowledgeGitService))return e;let r=y.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 Ud(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(!y.has(T.KnowledgeGitService))return e;let r=y.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(!y.has(T.GitProvider))return!0;try{let n=y.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(!y.has(T.KnowledgeGitService))return e;let r=y.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 Ud(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(!y.has(T.LlmClient))return!0;try{let o=y.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(!y.has(T.EdgeResolutionProviders))return!0;try{let r=y.resolve(T.EdgeResolutionProviders,{logger:this.logger}),n=await kd(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:Bn,filename:Cr,platformName:Md.CLAUDE},{key:ue.AGENT_HOOKS_CURSOR,dir:Kn,filename:Nr,platformName:Md.CURSOR}];for(let{key:n,dir:i,filename:s,platformName:o}of r){let a=Rt.join(this.workspaceRoot,i,s),l;try{await sr.stat(a),l=!0}catch{l=!1}e[n]={status:K.PASS,message:l?k.AGENT_HOOKS_FOUND(o):k.AGENT_HOOKS_NOT_FOUND(o)}}}async runTierBCommitCapDiagnostic(e){if(!y.has(T.GraphStoreOpener))return;let r;try{r=await y.resolve(T.GraphStoreOpener)({dbPath:ie(this.workspaceRoot),readonly:!0});let i=yi(r);e[ue.TIER_B_COMMIT_CAP]={status:K.PASS,message:i?k.TIER_B_CAP_EXCEEDED:k.TIER_B_CAP_OK}}catch{}finally{await r?.close()}}async runTierBCoverageDiagnostic(e){if(!y.has(T.GraphStoreOpener))return!0;let r;try{r=await y.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(!y.has(T.GraphStoreOpener))return!0;let r;try{r=await y.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(!y.has(T.GraphStoreOpener)||!y.has(T.GitProvider))return!0;let r;try{let n=y.resolve(T.GitProvider);r=await y.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=ir(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,Ee,Or,wi),r;try{r=await sr.readFile(e,H)}catch{return!1}let n=S.DEFAULT_POST_COMMIT_INGESTION_GRACE_MS,i=Date.now(),s=r.split(`
169
169
  `).filter(o=>o.trim().length>0);for(let o of s)try{let a=JSON.parse(o);if(typeof a.ts=="string"){let l=Date.parse(a.ts);if(!Number.isNaN(l)&&i-l<=n)return!0}}catch{}return!1}async runTierCQueueDiagnostic(e){if(!y.has(T.GraphStoreOpener))return!0;let r;try{r=await y.resolve(T.GraphStoreOpener)({dbPath:ie(this.workspaceRoot),readonly:!0});let i=ir(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 Ii(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,Ee,Or,wi),r;try{r=await sr.readFile(e,H)}catch{return}let n,i;for(let s of r.split(`
170
- `))try{let o=JSON.parse(s);o.event===Y.TIER_C_SUMMARY?n={processed:Number(o.processed??0)}:o.event===Y.TIER_C_ITEM_FAILED&&typeof o.reason=="string"&&(i=o.reason)}catch{}if(n)return{processed:n.processed,reason:i}}async runL2SemanticCoverageDiagnostic(e,r){if(!y.has(T.GraphStoreOpener))return!0;let n;try{n=await y.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(!y.has(T.GitProvider))return!0;try{let n=await y.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,Ee,Fi);await sr.stat(a).catch(()=>null)&&s.push(o.path)}return e[ue.WORKTREE_DIVERGENCE]=s.length>0?{status:K.FAIL,message:k.WORKTREE_DIVERGENCE_FAIL(s.length,s),suggestion:k.WORKTREE_DIVERGENCE_SUGGESTION}:{status:K.PASS,message:k.WORKTREE_DIVERGENCE_OK(n.length)},s.length===0}catch{return!0}}async runAgentAuthoredAdoptionDiagnostic(e){if(!y.has(T.GraphStoreOpener)||!y.has(T.GitProvider))return!0;let r;try{let n=y.resolve(T.GitProvider);r=await y.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 Ii(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(!y.has(T.GraphStoreOpener))return!0;let r;try{r=await y.resolve(T.GraphStoreOpener)({dbPath:ie(this.workspaceRoot),readonly:!0});let{byFile:i,total:s}=B_(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=Np(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,Ee,Fi);if(!await sr.stat(r).catch(()=>null))return e[ue.DB_FOUND]={status:K.FAIL,message:k.DB_NOT_FOUND_AT(r)},!1;if(!y.has(T.DiagnosticRunnerDb))return e[ue.DB_RUNNER]={status:K.FAIL,message:k.DB_RUNNER_NOT_REGISTERED},!1;let s=await y.resolve(T.DiagnosticRunnerDb).checkHealth(r);return this.mergeDiagnosticResults(e,s)}async runGitDiagnostics(e){if(!y.has(T.DiagnosticRunnerGit))return e[ue.GIT_RUNNER]={status:K.FAIL,message:k.GIT_RUNNER_NOT_REGISTERED},!1;try{let n=await y.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 instanceof Error?e.message:String(e),n;return e instanceof _&&(e.code===R.GIT_NETWORK_TIMEOUT?n=k.GIT_NETWORK_TIMEOUT_SUGGESTION:e.code===R.GIT_COMMAND_FAILED&&r.includes(k.GIT_NOT_A_REPO_TEXT)?n=k.GIT_NOT_A_REPO_SUGGESTION:e.code===R.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,Ee,Or);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 sr.readdir(e);for(let s of i){if(!s.endsWith(tT))continue;n++;let a=(await sr.readFile(Rt.join(e,s),H)).split(`
171
- `).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 gl=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(e=!1){let{workspaceRoot:r,logger:n}=this,i=y.resolve(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 sT from"fs/promises";import Aw from"path";var oT={REMOVED:"Removed .docuvia/ directory",NOT_FOUND:".docuvia/ directory not present; nothing to remove"};async function aT(t,e){let r=Aw.join(t,Ee);if(!ka(r,t))throw new _(R.UNINSTALL_WORKFLOW_FAILED,`Refusing to remove directory at ${r}: resolved outside workspace ${t}`);let n=!0;try{await sT.access(r)}catch{n=!1}return n?(await sT.rm(r,{recursive:!0,force:!0}),e.info(oT.REMOVED),{removed:!0}):(e.debug(oT.NOT_FOUND),{removed:!1})}async function lT(t,e){return Li(t,e)}async function cT(t,e,r,n){return await YS(t,e,r,n),Li(t,n)}function Se(t,e){let r=A.get(t,e);if(r===void 0)throw new _(R.INVALID_INPUT,w_.MISSING_MEMORY_KEY(e,t));return r}function uT(t){let e=A.get(t,O.LSP_BINARY_OVERRIDE),r=A.get(t,O.LSP_ARGS_OVERRIDE),n=A.get(t,O.LSP_TIMEOUT_MS),i=A.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 Fa(r,e).execute()},async clean(t,e){let r=Se(t,O.WORKSPACE_ROOT);return new Ga(r,e).execute()},async status(t,e){let r=Se(t,O.WORKSPACE_ROOT);return new Ba(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=A.get(t,O.COMMIT_SHA);return new $a(n,e,i,r).execute({projectId:s,commitSha:o})},async analyze(t,e,r){let n=Se(t,O.WORKSPACE_ROOT);if(A.get(t,O.FLUSH_STAGED_L3))return new en(n,e,{flushStagedL3:!0}).execute();let s=A.get(t,O.TARGET_PATH),o=A.get(t,O.AGENT_AUTHORED_DECISIONS);if(s&&o)return new en(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 en(n,e,{targetPath:s,llmBaseUrl:l,llmApiKey:r,llmModel:c}).execute()}return A.get(t,O.ESCALATE_TO_LSP)?new en(n,e,{escalateToLsp:!0,lspProviderConfig:uT(t),tierBCommitCap:A.get(t,O.TIER_B_COMMIT_CAP),full:A.get(t,O.TIER_B_FULL_RESYNC),llmBaseUrl:A.get(t,O.LLM_BASE_URL),llmApiKey:r,llmModel:A.get(t,O.LLM_MODEL),tierCDailyCallCap:A.get(t,O.TIER_C_DAILY_CALL_CAP),tierCDailyTokenCap:A.get(t,O.TIER_C_DAILY_TOKEN_CAP),tierCWallClockMs:A.get(t,O.TIER_C_WALL_CLOCK_MS),tierCItemCap:A.get(t,O.TIER_C_ITEM_CAP),tierCLoadThreshold:A.get(t,O.TIER_C_LOAD_THRESHOLD),force:A.get(t,O.FORCE),tierCDrainAll:A.get(t,O.TIER_C_DRAIN_ALL)}).execute():new en(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=yw.resolve(r,n);if(!Rw.existsSync(s))throw new _(R.FS_READ_FAILED,q.PATH_NOT_FOUND(n));return HS(r,n,i,e)},async review(t,e){let r=Se(t,O.WORKSPACE_ROOT),n=A.get(t,O.BASE_REF);return new qa(r,e).execute(n)},async impact(t,e){let r=Se(t,O.WORKSPACE_ROOT),n=Se(t,O.TARGET);return new Qa(r,e).execute(n)},async query(t,e){let r=Se(t,O.WORKSPACE_ROOT),n=Se(t,O.TARGET),i=A.get(t,O.LIMIT);return new tl(r,e).execute(n,i)},async exportTopology(t,e){let r=Se(t,O.WORKSPACE_ROOT),n=A.get(t,O.COLLAPSE);return new sl(r,e).execute({collapse:n})},async snapshot(t,e){let r=Se(t,O.WORKSPACE_ROOT);return new ol(r,e).execute()},async hydrate(t,e,r){let n=Se(t,O.WORKSPACE_ROOT);return new cl(n,e).execute(r)},async syncKnowledge(t,e){let r=Se(t,O.WORKSPACE_ROOT),n=A.get(t,O.GIT_NETWORK_TIMEOUT_MS);return new dl(r,e,n).execute()},async doctor(t,e,r){let n=Se(t,O.WORKSPACE_ROOT);return new pl(n,e).execute(r)},async uninstallGitHooks(t,e){let r=Se(t,O.WORKSPACE_ROOT),n=A.get(t,O.KEEP_DB);return new gl(r,e).execute(n)},async removeDocuviaDir(t,e){let r=Se(t,O.WORKSPACE_ROOT);return aT(r,e)},async listHooks(t,e){let r=Se(t,O.WORKSPACE_ROOT);return lT(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 cT(r,n,i,e)},async checkTierBGate(t,e){let r=Se(t,O.WORKSPACE_ROOT);return rT(r,e,uT(t))}};import dT from"pino";import{createRequire as Ow}from"module";var Iw=Ow(import.meta.url),Ud="pino-pretty",Lw=`[docuvia] ${Ud} unavailable, falling back to plain JSON logs.
172
- `,Cw=["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"],Nw="[REDACTED]",Pw="1";function Dw(){if(process.env.DOCUVIA_PRETTY_LOGS===Pw)try{return Iw.resolve(Ud),{target:Ud,options:{colorize:!0,destination:2}}}catch{process.stderr.write(Lw);return}}function ee(){let t=Dw(),e=dT({level:process.env.LOG_LEVEL||Oe.INFO,redact:{paths:[...Cw],censor:Nw},transport:t},t?void 0:dT.destination(2)),r=new sp;return r.onLog(n=>{e[n.level](n.context??{},n.message)}),r}var tn={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 pT=".js",gT=".cjs",fl=class extends ft{name=Yp;slug=Jp;async installHooks(e){await this.configureHooks(e),await this.configureMcpServer(e)}async configureHooks(e){let r=bt.join(e,Kn);await tt.mkdir(r,{recursive:!0}),await tt.writeFile(bt.join(r,Nr),Us,{mode:493});let n=ln.replace(/\${HOOKS_DIR}/g,Vl).replace(pT,gT);await Ot(bt.join(r,$n),n,Nr)}async configureMcpServer(e){let r=bt.join(e,$l);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[Yn]={command:Gs,args:[ng,...xs]},await tt.writeFile(r,JSON.stringify(n,null,2)),m.success(g.INIT_HOOKS_REGISTERED_MCP+r)}catch(n){let i=n instanceof Error?n.message:String(n);m.warn(g.INIT_HOOKS_FAIL_CURSOR_MCP+i)}}async uninstallHooks(e){let r=bt.join(e,Kn);try{await tt.unlink(bt.join(r,Nr)),m.success(`${g.UNINSTALL_REMOVED_FILE_PREFIX}${Nr}`)}catch{}let{removeBlock:n}=await import("./fs-utils-Y7YNFCY4.js"),{CURSOR_RULES_FILENAME:i,AGENT_INSTRUCTIONS_MARKER:s,AGENT_INSTRUCTIONS_END_MARKER:o}=await import("./init-templates-FFCZIE3S.js"),a=bt.join(e,i);await n(a,`<!-- ${s} -->`,`<!-- ${o} -->`);let l=bt.join(r,$n),c=!1;try{(await tt.readFile(l,H)).trim()===ln.replace(/\$\{HOOKS_DIR\}/g,Vl).replace(pT,gT).trim()&&(await tt.unlink(l),c=!0)}catch{}if(c)try{await tt.rmdir(r)}catch{}let u=bt.join(e,$l);try{let p=await tt.readFile(u,H),d=JSON.parse(p);d?.mcpServers&&d.mcpServers[Yn]&&(delete d.mcpServers[Yn],await tt.writeFile(u,JSON.stringify(d,null,2)),m.success(`${g.UNINSTALL_REMOVED_MCP_SERVER_PREFIX}${u}`))}catch{}}};import*as Je from"fs/promises";import*as rt from"path";import Ls from"process";var vw="win32",bw="darwin",ww="Library",Fw="Application Support",Mw=".config";async function kw(t){try{await Je.unlink(rt.join(t,Cr)),m.success(`${g.UNINSTALL_REMOVED_FILE_PREFIX}${Cr}`)}catch{}}async function Gw(t){let e=rt.join(t,$n);try{if((await Je.readFile(e,H)).trim()===ln.replace(/\$\{HOOKS_DIR\}/g,jl).trim())return await Je.unlink(e),!0}catch{}return!1}async function xw(t){try{await Je.rmdir(t)}catch{}}function fT(){let t=ln.replace(/\${HOOKS_DIR}/g,tg);return JSON.parse(t)[kt][0]}function hT(t){let e=t.hooks,r=Array.isArray(e)?e[0]?.command:void 0;return typeof r=="string"?r:""}function ET(t,e){let r=t?.hooks;return Array.isArray(r)&&r.some(n=>n?.command===e)}async function Uw(t){try{let e=await Je.readFile(t,H);return{settings:JSON.parse(e),aborted:!1}}catch(e){return e?.code!==Fs?(m.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 Hw(t,e){let{settings:r,aborted:n}=await Uw(t);if(n)return;if(r.hooks=r.hooks??{},r.hooks[kt]!==void 0&&!Array.isArray(r.hooks[kt])){m.warn(g.FS_UNEXPECTED_SHAPE(kt,t));return}r.hooks[kt]=r.hooks[kt]??[];let i=r.hooks[kt],s=hT(e);i.some(o=>ET(o,s))||(i.push(e),await Je.mkdir(rt.dirname(t),{recursive:!0}),await Je.writeFile(t,`${JSON.stringify(r,null,2)}
173
- `,H))}async function Bw(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=>!ET(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),m.success(g.UNINSTALL_REMOVED_FILE_PREFIX+ks);return}await Je.writeFile(t,`${JSON.stringify(r,null,2)}
174
- `,H),m.success(g.UNINSTALL_REMOVED_HOOK_FROM_SETTINGS_PREFIX+t)}}function Kw(t){let e=rt.join(t,Yl);m.info(`${g.UNINSTALL_CLAUDE_MCP_MANUAL_REMINDER} (${e}).`)}function mT(){return Ls.platform===vw?rt.join(Ls.env.APPDATA||"",ki):Ls.platform===bw?rt.join(Ls.env.HOME||"",ww,Fw,ki):rt.join(Ls.env.HOME||"",Mw,ki)}var ml=class extends ft{name=ki;slug=qp;async installHooks(e){await this.configureHooks(e),this.printMcpServerSnippet(e)}printMcpServerSnippet(e){let r=mT();if(!r)return;let n=rt.join(r,Yl),i=JSON.stringify({mcpServers:{[Yn]:{command:Gs,args:[rg,...xs],env:{[ig]:e}}}},null,2);m.info(`${g.INIT_CLAUDE_MCP_MANUAL_SNIPPET} (${n}):
175
- ${i}`)}async configureHooks(e){let r=rt.join(e,Bn);await Je.mkdir(r,{recursive:!0}),await Je.writeFile(rt.join(r,Cr),Us,{mode:493});let n=ln.replace(/\${HOOKS_DIR}/g,jl);await Ot(rt.join(r,$n),n,Cr),await Hw(rt.join(e,Kl,ks),fT())}async uninstallHooks(e){let r=rt.join(e,Bn);await kw(r),await Gw(r)&&await xw(r);try{await Bw(rt.join(e,Kl,ks),hT(fT()))}catch{}let i=mT();i&&Kw(i)}};import*as _T from"path";var hl=class extends ft{name=Wp;slug=Qp;instructionsPath(e){return _T.join(e,Mp,kp)}async installHooks(e){await Ot(this.instructionsPath(e),Dr,Et)}async uninstallHooks(e){await vr(this.instructionsPath(e),`<!-- ${Et} -->`,`<!-- ${Pr} -->`)}};import*as ST from"path";var El=class extends ft{name=jp;slug=Xp;agentsMdPath(e){return ST.join(e,Bp)}async installHooks(e){await Ot(this.agentsMdPath(e),Dr,Et)}async uninstallHooks(e){await vr(this.agentsMdPath(e),`<!-- ${Et} -->`,`<!-- ${Pr} -->`)}};import*as Sl from"fs/promises";import*as Hd from"path";var _l=class extends ft{name=Vp;slug=Zp;rulesDir(e){return Hd.join(e,$p)}rulesFilePath(e){return Hd.join(this.rulesDir(e),Wl)}async installHooks(e){await Ot(this.rulesFilePath(e),Dr,Et)}async uninstallHooks(e){try{await Sl.unlink(this.rulesFilePath(e)),m.success(`${g.UNINSTALL_REMOVED_FILE_PREFIX}${Wl}`)}catch{return}try{await Sl.rmdir(this.rulesDir(e))}catch{}}};import*as TT from"path";var Tl=class extends ft{name=zp;slug=eg;hermesMdPath(e){return TT.join(e,Kp)}async installHooks(e){await Ot(this.hermesMdPath(e),Dr,Et)}async uninstallHooks(e){await vr(this.hermesMdPath(e),`<!-- ${Et} -->`,`<!-- ${Pr} -->`)}};function $w(){return[new fl,new ml,new hl,new El,new _l,new Tl]}function Yw(t){return t.split(",").map(e=>e.trim().toLowerCase()).filter(Boolean)}async function Al(t,e,r,n=$w()){if(e!==void 0){let i=Yw(e),s=n.map(a=>a.slug),o=i.filter(a=>!s.includes(a));if(o.length>0)throw new Error(tn.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 m.askCheckbox(t,i);return n.filter(o=>s.includes(o.name))}return n}import Ww from"fs/promises";import AT from"path";var jw=30*6e4,Vw=1e4,zw=3e4;async function Rl(t,e,r){let n=AT.join(t,Ee,Ap);await Ww.mkdir(AT.dirname(n),{recursive:!0});let s=await y.resolve(T.ProcessLock)(n,{maxWaitMs:jw,heartbeatIntervalMs:Vw,staleAfterMs:zw,onWaiting:r});try{return await e()}finally{await s.release()}}import*as Bt from"fs";import*as Ci from"path";var Jw=["---","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(`
176
- `),qw=["---","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(`
177
- `),Qw=["---","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(`
178
- `),Xw=["---","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(`
179
- `),RT=[{dirName:"docuvia-exploring",content:Jw},{dirName:"docuvia-impact-analysis",content:qw},{dirName:"docuvia-knowledge-graph",content:Qw},{dirName:"docuvia-agent-authored",content:Xw}];var yT=".claude/skills";function OT(t){let e=Ci.join(t,yT),r=[],n=[];for(let i of RT)Zw(e,i)==="installed"?r.push(i.dirName):n.push(i.dirName);return{installed:r,skipped:n}}function IT(t){let e=Ci.join(t,yT),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=Ci.join(e,i.name);Bt.rmSync(s,{recursive:!0,force:!0}),r.push(i.name)}return r}function Zw(t,e){let r=Ci.join(t,e.dirName),n=Ci.join(r,"SKILL.md");return Bt.existsSync(n)?"skipped":(Bt.mkdirSync(r,{recursive:!0}),Bt.writeFileSync(n,e.content,"utf-8"),"installed")}var tF=Bd.object({cwd:Bd.string().min(1,tn.WORKSPACE_ROOT_EMPTY),platformFilter:Bd.string().optional()});async function rF(t){let e=m.spinner(g.INIT_START).start(),r=eF.randomUUID(),n=ee();n.onLog(i=>{i.level===Oe.INFO&&(e.text=i.message)}),A.createScope(r),A.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 _||i instanceof Error?i.message:String(i);throw e.fail(g.INIT_FAILED+s),i}finally{A.deleteScope(r)}}async function nF(t,e,r){m.info(g.INIT_AGENT_HOOKS);let n=await Al(g.INIT_HOOKS_SELECT,e,r);if(n.length===0){m.info(g.INIT_HOOKS_NONE_SELECTED);return}for(let i of n)await i.installHooks(t);m.success(g.INIT_HOOKS_SUCCESS),m.info(g.INIT_HOOKS_SUPPORTED)}async function LT(t=yl.cwd(),e,r=!1,n=!1){let i=tF.parse({cwd:t,platformFilter:e});m.header(g.INIT_HEADER),r&&(await m.askConfirm(g.INIT_CONFIRM,!0)||(m.warn(g.INIT_ABORTED),yl.exit(0)));let s=!1,o;await Rl(i.cwd,async()=>{try{await rF(i.cwd)}catch{s=!0}if(!s)try{await nF(i.cwd,i.platformFilter,r)}catch(a){o=a}},()=>m.info(g.INIT_LOCK_WAITING)),s&&yl.exit(1),o!==void 0&&(m.error(g.INIT_HOOKS_FAIL+o),yl.exit(1)),n&&iF(t)}function iF(t){try{let e=OT(t);e.installed.length>0&&m.success(`Installed ${e.installed.length} skill(s): ${e.installed.join(", ")}`),e.skipped.length>0&&m.info(`Skipped ${e.skipped.length} existing skill(s): ${e.skipped.join(", ")}`)}catch(e){m.warn(`Skill installation failed: ${e instanceof Error?e.message:String(e)}`)}}import Kd from"process";import sF from"crypto";async function CT(t=Kd.cwd(),e=!1){m.header(g.CLEAN_HEADER),e&&(await m.askConfirm(g.CLEAN_CONFIRM,!1)||(m.warn(g.CLEAN_ABORTED),Kd.exit(0)));let r=m.spinner(g.CLEAN_START).start(),n=sF.randomUUID(),i=ee();i.onLog(s=>{s.level===Oe.INFO&&(r.text=s.message)}),A.createScope(n),A.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 _||s instanceof Error?s.message:String(s);r.fail(g.CLEAN_FAIL+o),Kd.exitCode=1}finally{A.deleteScope(n)}}import NT from"process";import oF from"crypto";async function PT(t=NT.cwd()){let e=m.spinner(g.STATUS_START).start(),r=oF.randomUUID(),n=ee();n.onLog(i=>{i.level===Oe.INFO&&(e.text=i.message)}),A.createScope(r),A.set(r,O.WORKSPACE_ROOT,t);try{let i=await X.status(r,n);e.succeed(g.STATUS_SUCCESS),m.header(g.STATUS_HEADER);let s=i.tierBFilesTotal>0?(i.tierBFilesProcessed/i.tierBFilesTotal*100).toFixed(1):"0.0";m.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 _||i instanceof Error?i.message:String(i);e.fail(g.STATUS_FAIL+s),NT.exitCode=1}finally{A.deleteScope(r)}}import Sr from"process";import cF from"crypto";var z={INDENT_TWO:" ",NEWLINE:`
180
- `,OPEN_PAREN:" (",CLOSE_PAREN:")",DOUBLE_QUOTE:'"',EMPTY:"",ELLIPSIS:"...",SHORT_SHA_LENGTH:7};import aF from"process";import{createInterface as lF}from"readline";async function Ol(){let t=lF({input:aF.stdin}),e=[];try{for await(let r of t)e.push(r)}finally{t.close()}return e.join(`
181
- `).trim()}async function uF(t,e){if(t)return t;e||(m.error(g.PUBLISH_MISSING_PROJECT_ID),Sr.exit(1)),m.info(g.PUBLISH_NO_PROJECT_ID_PROVIDED);let r=await m.askInput(g.PUBLISH_PROMPT_PROJECT_ID);return r||(m.error(g.PUBLISH_PROJECT_ID_REQUIRED),Sr.exit(1)),r}function dF(){return!!Sr.env.DOCUVIA_API_URL&&!!Sr.env.MCP_PAT}async function pF(t){return t||(Sr.stdin.isTTY?void 0:Ol())}async function gF(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 _||i instanceof Error?i.message:String(i);r.fail(g.PUBLISH_FAIL+s),Sr.exitCode=1}finally{A.deleteScope(t)}}async function DT(t,e=Sr.cwd(),r=!1){m.header(g.PUBLISH_HEADER);let n=await uF(t.projectId,r);if(!dF()){m.warn(g.PUBLISH_MISSING_ENV),m.warn(g.PUBLISH_SKIP);return}let i=await pF(t.commitSha),s=m.spinner(g.PUBLISH_START+n+z.ELLIPSIS).start(),o=cF.randomUUID(),a=ee();a.onLog(l=>{l.level===Oe.INFO&&(s.text=l.message)}),A.createScope(o),A.set(o,O.WORKSPACE_ROOT,e),A.set(o,O.API_URL,Sr.env.DOCUVIA_API_URL),A.set(o,O.PROJECT_ID,n),A.set(o,O.COMMIT_SHA,i||void 0),await gF(o,a,s,Sr.env.MCP_PAT)}import we from"process";import Il from"crypto";import _F from"fs/promises";import{z as Mn}from"zod";function bT(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 _(R.INVALID_INPUT,g.ANALYZE_LSP_ARGS_INVALID_JSON(String(n)))}if(!Array.isArray(r)||r.some(n=>typeof n!="string"))throw new _(R.INVALID_INPUT,g.ANALYZE_LSP_ARGS_INVALID_SHAPE);return r}return EF(e)}}function fF(t,e){return t==="\\"&&e!==void 0&&(e==='"'||e==="\\")}function mF(t){return t==='"'||t==="'"}function hF(t){return/\s/.test(t)}function vT(t,e){return e.length>0&&t.push(e),""}function EF(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==='"'&&fF(s,o)?(r+=o,i++):r+=s;continue}mF(s)?n=s:s==="\\"&&o!==void 0?(r+=o,i++):hF(s)?r=vT(e,r):r+=s}return vT(e,r),e}var SF=Mn.object({title:Mn.string().min(1),content:Mn.string(),nodeType:Mn.nativeEnum(sn),confidence:Mn.number().min(0).max(1)}),TF=Mn.object({decisions:Mn.array(SF)});function wT(){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 AF(t){let e=t?await _F.readFile(t,H):we.stdin.isTTY?void 0:await Ol();if(!e)return;let r;try{r=JSON.parse(e)}catch(i){throw new _(R.INVALID_INPUT,g.ANALYZE_AGENT_AUTHORED_INVALID_JSON(String(i)))}let n=TF.safeParse(r);if(!n.success)throw new _(R.INVALID_INPUT,g.ANALYZE_AGENT_AUTHORED_INVALID_SHAPE(n.error.message));return n.data}function RF(){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 yF(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:bT(r),lspTimeoutMs:t??(n?Number(n):void 0),lspMaxProcesses:e??o(i),tierBCommitCap:s?Number(s):void 0}}function OF(t,e){e.succeed(g.ANALYZE_AUTO_FULL_SUCCESS),m.info(g.ANALYZE_PROJECT_TYPE+t.projectType),m.info(g.ANALYZE_SUGGESTED_TAGS+(t.suggestedTags.join(", ")||g.ANALYZE_NONE)),m.info(g.ANALYZE_AUTO_FULL_SUMMARY(t.filesParsed,t.filesRequested,t.filesFailed))}function IF(t,e){e.succeed(g.ANALYZE_AUTO_DELTA_SUCCESS),m.info(g.ANALYZE_AUTO_DELTA_SUMMARY(t.filesReparsed,t.filesDeleted,t.tierBQueued))}function LF(t,e){if(e.succeed(g.ANALYZE_FOCUSED_SUCCESS),t.decisions.length===0){m.info(g.ANALYZE_FOCUSED_NONE);return}for(let r of t.decisions)m.info(g.ANALYZE_DECISION_LINE(r.nodeType,r.title,r.confidence)),r.content&&m.log(g.ANALYZE_DECISION_CONTENT_PREFIX+r.content);m.info(g.ANALYZE_FOCUSED_PERSISTED(t.persisted,t.deduped))}function CF(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),m.info(g.ANALYZE_TIER_B_SUMMARY(t.filesProcessed,t.edgesApplied,t.filesFailed,t.filesFailedPermanent,!!t.zeroProgressWatchdogTripped))),NF(t)}function NF(t){if(t.tierCQueued!==0){if(t.tierCSkipped){m.info(g.ANALYZE_TIER_C_SKIPPED(t.tierCSkippedReason??""));return}m.info(g.ANALYZE_TIER_C_SUMMARY(t.tierCProcessed,t.tierCPersisted,t.tierCFailed))}}function PF(t,e){if(t.skippedDisabled){e.succeed(g.ANALYZE_FLUSH_STAGED_L3_DISABLED_SUCCESS);return}e.succeed(g.ANALYZE_FLUSH_STAGED_L3_SUCCESS),m.info(g.ANALYZE_FLUSH_STAGED_L3_SUMMARY(t.flushed,t.deduped,t.stillPending)),t.noGraphToAttach&&m.warn(g.ANALYZE_FLUSH_STAGED_L3_NO_GRAPH_ADVICE)}function $d(t,e,r){switch(t.kind){case Te.AUTO_FULL_INGESTION:OF(t,e);break;case Te.AUTO_DELTA:IF(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:LF(t,e);break;case Te.TIER_B_BATCH:CF(t,e,r);break;case Te.FLUSH_STAGED_L3:PF(t,e);break}}function FT(t,e,r=!1){return m.header(r?g.ANALYZE_STAGE_HEADER:t?g.ANALYZE_FOCUSED_HEADER:e?g.ANALYZE_TIER_B_HEADER:g.ANALYZE_HEADER),m.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 DF(t,e,r,n,i,s,o,a,l,c){A.createScope(t),A.set(t,O.WORKSPACE_ROOT,e),s&&A.set(t,O.FORCE,!0),r&&n?(A.set(t,O.TARGET_PATH,r),A.set(t,O.LLM_BASE_URL,n.llmBaseUrl),A.set(t,O.LLM_MODEL,n.llmModel)):i&&(A.set(t,O.ESCALATE_TO_LSP,!0),l&&A.set(t,O.TIER_B_FULL_RESYNC,!0),c&&A.set(t,O.TIER_C_DRAIN_ALL,!0),MT(t,o,a),vF(t,n))}function vF(t,e){e&&(A.set(t,O.LLM_BASE_URL,e.llmBaseUrl),A.set(t,O.LLM_MODEL,e.llmModel));let r=RF();r.dailyCallCap!==void 0&&A.set(t,O.TIER_C_DAILY_CALL_CAP,r.dailyCallCap),r.dailyTokenCap!==void 0&&A.set(t,O.TIER_C_DAILY_TOKEN_CAP,r.dailyTokenCap),r.wallClockMs!==void 0&&A.set(t,O.TIER_C_WALL_CLOCK_MS,r.wallClockMs),r.itemCap!==void 0&&A.set(t,O.TIER_C_ITEM_CAP,r.itemCap),r.loadThreshold!==void 0&&A.set(t,O.TIER_C_LOAD_THRESHOLD,r.loadThreshold)}function MT(t,e,r){let n=yF(e,r);n.lspBinaryOverride!==void 0&&A.set(t,O.LSP_BINARY_OVERRIDE,n.lspBinaryOverride),n.lspArgsOverride!==void 0&&A.set(t,O.LSP_ARGS_OVERRIDE,n.lspArgsOverride),n.lspTimeoutMs!==void 0&&A.set(t,O.LSP_TIMEOUT_MS,n.lspTimeoutMs),n.lspMaxProcesses!==void 0&&A.set(t,O.LSP_MAX_PROCESSES,n.lspMaxProcesses),n.tierBCommitCap!==void 0&&A.set(t,O.TIER_B_COMMIT_CAP,n.tierBCommitCap)}function Yd(t,e,r,n){let i=t instanceof _||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 bF(t,e,r){let n=Il.randomUUID();A.createScope(n),A.set(n,O.WORKSPACE_ROOT,t),MT(n,r);try{let i=ee(),s=await X.checkTierBGate(n,i);if(s.available)return!0;if(!e)return m.error(g.ANALYZE_TIER_B_GATE_FAILED(s.reason??"")),we.exitCode=1,!1;m.warn(g.ANALYZE_TIER_B_GATE_NOT_READY(s.reason??""));let o=await m.askConfirm(g.ANALYZE_TIER_B_GATE_PROMPT,!0);return o||m.info(g.ANALYZE_TIER_B_GATE_DECLINED),o}finally{A.deleteScope(n)}}async function wF(t,e,r){let n;try{n=await AF(r.decisionsFile)}catch(a){let l=a instanceof _||a instanceof Error?a.message:String(a);m.error(l),we.exitCode=1;return}if(!n){m.error(g.ANALYZE_AGENT_AUTHORED_MISSING_PAYLOAD),we.exitCode=1;return}let i=FT(t,!1,r.stage),s=Il.randomUUID(),o=ee();o.onLog(a=>{a.level===Oe.INFO&&(i.text=a.message)}),A.createScope(s),A.set(s,O.WORKSPACE_ROOT,e),A.set(s,O.TARGET_PATH,t),A.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),m.info(g.ANALYZE_STAGE_SUMMARY(a.staged))}else{let a=await X.analyze(s,o);$d(a,i,!1)}}catch(a){Yd(a,t,!1,i)}finally{A.deleteScope(s)}}async function FF(t){m.header(g.ANALYZE_FLUSH_STAGED_L3_HEADER);let e=m.spinner(g.ANALYZE_FLUSH_STAGED_L3_START).start(),r=Il.randomUUID(),n=ee();n.onLog(i=>{i.level===Oe.INFO&&(e.text=i.message)}),A.createScope(r),A.set(r,O.WORKSPACE_ROOT,t),A.set(r,O.FLUSH_STAGED_L3,!0);try{let i=await X.analyze(r,n);$d(i,e,!1)}catch(i){Yd(i,void 0,!1,e)}finally{A.deleteScope(r)}}async function MF(t,e,r){return r.agentAuthored?t?(await wF(t,e,r),!0):(m.error(g.ANALYZE_AGENT_AUTHORED_MISSING_TARGET),we.exitCode=1,!0):!1}async function kF(t,e){return e.flushStagedL3?(await FF(t),!0):!1}async function kT(t,e=we.cwd(),r={}){await kF(e,r)||await MF(t,e,r)||await GF(t,e,r)}async function GF(t,e,r){let n,i=!t&&!!r.escalateToLsp;if(t){let l=wT();if(!l){m.error(g.ANALYZE_LLM_MISSING_ENV),we.exitCode=1;return}n=l}else if(i&&(n=wT()??void 0,!r.fallbackAst&&!await bF(e,!!r.isInteractive,r.lspTimeoutMs)))return;let s=FT(t,i),o=Il.randomUUID(),a=ee();a.onLog(l=>{l.level===Oe.INFO&&(s.text=l.message)}),DF(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);$d(l,s,!!r.fallbackAst)}catch(l){Yd(l,t,i,s)}finally{A.deleteScope(o)}}import GT from"process";import xF 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 Ll(t,e){t.onLog(r=>{r.level===Oe.INFO&&e&&(e.text=r.message)})}function Ni(t){return t instanceof _||t instanceof Error?t.message:String(t)}function UF(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){m.log(""),m.section(g.REVIEW_WHY_HEADER);for(let{file:i,entry:s}of n){m.log(z.INDENT_TWO+s.name+z.OPEN_PAREN+i+z.CLOSE_PAREN);for(let o of s.why??[])m.log(e+g.REVIEW_WHY_PREFIX+o.title),o.content&&m.log(r+o.content.split(z.NEWLINE).join(z.NEWLINE+r))}}}function HF(t,e,r){r.succeed(g.REVIEW_SUCCESS+(e?g.REVIEW_AGAINST+e:"")),m.log(""),m.log(g.REVIEW_FILES_CHANGED+t.filesChanged.length);let n=g.REVIEW_RISK_PREFIX+t.riskLevel;t.riskLevel===Ye.CRITICAL?m.error(n):t.riskLevel===Ye.HIGH?m.warn(n):m.log(n),m.log(""),m.log(t.analysis),UF(t.affectedNodes)}async function xT(t,e={},r=GT.cwd()){let n=e.format===Kt.JSON;n||m.header(g.REVIEW_HEADER);let i=n?void 0:m.spinner(g.REVIEW_START).start(),s=xF.randomUUID(),o=ee();Ll(o,i),A.createScope(s),A.set(s,O.WORKSPACE_ROOT,r),t&&A.set(s,O.BASE_REF,t);try{let a=await X.review(s,o);i?HF(a,t,i):m.log(JSON.stringify(a,null,2))}catch(a){let l=Ni(a);i?i.fail(g.REVIEW_FAIL+l):m.error(g.REVIEW_FAIL+l),GT.exitCode=1}finally{A.deleteScope(s)}}import Wd from"process";import BF from"crypto";function KF(t,e){if(!e||e.length===0)return;let r=z.INDENT_TWO,n=r+z.INDENT_TWO,i=n+z.INDENT_TWO;m.log(r+g.IMPACT_ENTRY_WHY_LABEL(t));for(let s of e)m.log(n+g.IMPACT_WHY_PREFIX+s.title),s.content&&m.log(i+s.content.split(z.NEWLINE).join(z.NEWLINE+i))}function $F(t){let e=t.some(r=>r.edgeSource!==void 0);m.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 YF(t,e,r,n,i){if(m.header(g.IMPACT_BLAST_RADIUS_HEADER),t.length===0)m.warn(g.IMPACT_NO_DEPENDENTS),n&&m.warn(n),r&&r.workspaceFilesProcessed<r.workspaceFilesTotal&&m.warn(g.IMPACT_TIER_B_INCOMPLETE(r.workspaceFilesTotal-r.workspaceFilesProcessed,r.workspaceFilesTotal));else{$F(t),m.log(z.EMPTY);for(let o of t)KF(o.name,o.why)}i&&m.warn(g.IMPACT_RISK_NOTE_PREFIX+i),m.log(z.EMPTY);let s=g.IMPACT_RISK_PREFIX+e;e===Ye.CRITICAL?m.error(s):e===Ye.HIGH||e===Ye.UNKNOWN?m.warn(s):m.log(s),m.log(z.EMPTY)}function WF(t,e,r){r.succeed(g.IMPACT_SUCCESS+z.DOUBLE_QUOTE+e+z.DOUBLE_QUOTE),m.log(""),YF(t.blastRadius,t.riskLevel,t.tierBCoverage,t.coverageNote,t.riskNote)}function jF(t,e){if(t){t.warn(g.IMPACT_NOT_FOUND+z.DOUBLE_QUOTE+e+z.DOUBLE_QUOTE);return}m.log("null")}async function UT(t,e={},r=Wd.cwd()){let n=e.format===Kt.JSON;if(n||m.header(g.IMPACT_HEADER),!t){m.error(g.IMPACT_MISSING_TARGET),Wd.exitCode=1;return}let i=n?void 0:m.spinner(g.IMPACT_START+z.DOUBLE_QUOTE+t+z.DOUBLE_QUOTE+z.ELLIPSIS).start(),s=BF.randomUUID(),o=ee();Ll(o,i),A.createScope(s),A.set(s,O.WORKSPACE_ROOT,r),A.set(s,O.TARGET,t);try{let a=await X.impact(s,o);if(!a){jF(i,t);return}i?WF(a,t,i):m.log(JSON.stringify(a,null,2))}catch(a){let l=Ni(a);i?i.fail(g.IMPACT_FAIL+l):m.error(g.IMPACT_FAIL+l),Wd.exitCode=1}finally{A.deleteScope(s)}}import Nl from"process";import XF from"crypto";var _e={CONTEXT_START:"<docuvia_context>",CONTEXT_END:"</docuvia_context>",L2_START_PREFIX:' <l2_module name="',L2_TYPE_MID:'" type="',L2_FILE_MID:'" file="',L2_MATCH_TYPE_MID:'" match_type="',L2_START_SUFFIX:'">',L2_END:" </l2_module>",L3_START_PREFIX:' <l3_decision title="',L3_SOURCE_MID:'" source="',L3_CONFIDENCE_MID:'" confidence="',L3_COMMIT_MID:'" commit="',L3_CREATED_AT_MID:'" created_at="',L3_VALIDITY_MID:'" validity="',L3_START_SUFFIX:'">',L3_CONTENT_PREFIX:" ",L3_END:" </l3_decision>",INCOMING_START:" <incoming>",INCOMING_END:" </incoming>",CALLER_PREFIX:' <caller name="',CALLER_MID:'" relation="',CALLER_SUFFIX:'" />',OUTGOING_START:" <outgoing>",OUTGOING_END:" </outgoing>",CALLEE_PREFIX:' <callee name="',CALLEE_MID:'" relation="',CALLEE_SUFFIX:'" />',INCOMING_UNPROCESSED_PREFIX:' <incoming tier_b_status="unprocessed" note="',OUTGOING_UNPROCESSED_PREFIX:' <outgoing tier_b_status="unprocessed" note="',UNPROCESSED_SUFFIX:'" />'};function VF(t){let e=_e.L3_START_PREFIX+t.title;return t.source&&(e+=_e.L3_SOURCE_MID+t.source),t.confidence!==void 0&&t.confidence!==null&&(e+=_e.L3_CONFIDENCE_MID+String(t.confidence)),t.commitHash&&(e+=_e.L3_COMMIT_MID+t.commitHash),t.createdAt&&(e+=_e.L3_CREATED_AT_MID+t.createdAt),t.validityStatus&&(e+=_e.L3_VALIDITY_MID+t.validityStatus),e+_e.L3_START_SUFFIX}function zF(t){let e=[];if(t.l2){let r=_e.L2_START_PREFIX+t.l2.name;t.l2.type&&(r+=_e.L2_TYPE_MID+t.l2.type),t.l2.filePath&&(r+=_e.L2_FILE_MID+t.l2.filePath),r+=_e.L2_MATCH_TYPE_MID+t.l2.matchType,e.push(r+_e.L2_START_SUFFIX)}for(let r of t.l3)e.push(VF(r)),e.push(_e.L3_CONTENT_PREFIX+(r.content||z.EMPTY)),e.push(_e.L3_END);return t.l2&&e.push(_e.L2_END),e}function JF(t,e){if(t.length>0){let r=[_e.INCOMING_START];for(let n of t)r.push(_e.CALLER_PREFIX+n.name+_e.CALLER_MID+n.linkType+_e.CALLER_SUFFIX);return r.push(_e.INCOMING_END),r}return e&&e.workspaceFilesProcessed<e.workspaceFilesTotal?[_e.INCOMING_UNPROCESSED_PREFIX+g.QUERY_TIER_B_INCOMING_UNPROCESSED(e.workspaceFilesTotal-e.workspaceFilesProcessed,e.workspaceFilesTotal)+_e.UNPROCESSED_SUFFIX]:[]}function qF(t,e){if(t.length>0){let r=[_e.OUTGOING_START];for(let n of t)r.push(_e.CALLEE_PREFIX+n.name+_e.CALLEE_MID+n.linkType+_e.CALLEE_SUFFIX);return r.push(_e.OUTGOING_END),r}return e&&e.ownFileLastProcessedAt===null?[_e.OUTGOING_UNPROCESSED_PREFIX+g.QUERY_TIER_B_OUTGOING_UNPROCESSED+_e.UNPROCESSED_SUFFIX]:[]}function QF(t){let e=t.context?.incoming??[],r=t.context?.outgoing??[],n=t.context?.tierBCoverage;return e.length===0&&r.length===0&&!n?[]:[...JF(e,n),...qF(r,n)]}function Cl(t){return[_e.CONTEXT_START,...zF(t),...QF(t),_e.CONTEXT_END].join(z.NEWLINE)}var ZF={exact:g.QUERY_MATCH_TYPE_EXACT,keyword:g.QUERY_MATCH_TYPE_KEYWORD,neighbor:g.QUERY_MATCH_TYPE_NEIGHBOR};function eM(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+=ZF[t.l2.matchType],m.info(e)}else m.warn(g.QUERY_NO_L2)}function tM(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 rM(t){for(let e of t){let r=tM(e);m.success(g.QUERY_L3_PREFIX+e.title+(r.length>0?g.QUERY_L3_PROVENANCE(r):"")),e.content&&m.log(z.INDENT_TWO+e.content.split(z.NEWLINE).join(z.NEWLINE+z.INDENT_TWO)),m.log(z.EMPTY)}}function HT(t,e,r){if(t.length===0){if(!r)return;m.section(e),m.warn(r),m.log(z.EMPTY);return}m.section(e),m.table([{header:g.QUERY_COL_NAME},{header:g.QUERY_COL_RELATION}],t.map(n=>[n.name,n.linkType])),m.log(z.EMPTY)}function nM(t,e){if(!(!t||!e||e.workspaceFilesProcessed>=e.workspaceFilesTotal))return g.QUERY_TIER_B_INCOMING_UNPROCESSED(e.workspaceFilesTotal-e.workspaceFilesProcessed,e.workspaceFilesTotal)}function iM(t,e){if(!(!t||!e||e.ownFileLastProcessedAt!==null))return g.QUERY_TIER_B_OUTGOING_UNPROCESSED}function sM(t){m.header(g.QUERY_CONTEXT_HEADER),eM(t),m.log(z.EMPTY),rM(t.l3);let e=t.context?.incoming??[],r=t.context?.outgoing??[],n=t.context?.tierBCoverage,i=nM(e.length===0,n),s=iM(r.length===0,n);HT(e,g.QUERY_INCOMING_HEADER,i),HT(r,g.QUERY_OUTGOING_HEADER,s),m.log(z.EMPTY)}async function oM(t,e){if(t)return t;e||(m.error(g.QUERY_MISSING_TARGET),Nl.exit(1)),m.header(g.QUERY_HEADER);let r=await m.askInput(g.QUERY_PROMPT_TARGET);return r||(m.error(g.QUERY_MISSING_TARGET_NON_TTY),Nl.exit(1)),r}function aM(t){if(t!==void 0&&(!Number.isInteger(t)||t<=0)){m.warn(g.QUERY_INVALID_LIMIT+t);return}return t}function lM(t,e,r){if(t)return;let n=m.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 cM(t,e,r,n,i,s){A.createScope(t),A.set(t,O.WORKSPACE_ROOT,r),A.set(t,O.TARGET,n),i!==void 0&&A.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),m.log("")),o}catch(o){let a=Ni(o);s?s.fail(g.QUERY_FAIL+a):m.error(g.QUERY_FAIL+a),Nl.exitCode=1;return}finally{A.deleteScope(t)}}async function BT(t,e={},r=Nl.cwd(),n=!1){let i=await oM(t,n),s=e.format===Kt.PROMPT||e.format===Kt.JSON,o=aM(e.limit),a=XF.randomUUID(),l=ee(),c=lM(s,i,l),u=await cM(a,l,r,i,o,c);u&&(e.format===Kt.JSON?m.log(JSON.stringify(u,null,2)):e.format===Kt.PROMPT?m.log(Cl(u)):sM(u))}import jd from"fs/promises";import Pi from"path";import WT from"process";import TM from"crypto";function KT(t){let e=JSON.stringify(t).replace(/</g,"\\u003c"),r=`
182
- `,n=[];return n.push(uM(t)),n.push(dM()),n.push(pM(e)),n.push("</body>"),n.push("</html>"),n.join(r)+r}function uM(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 - "+SM(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(`
183
- `)}function dM(){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(`
184
- `)}function pM(t){return["<script>",gM(t),fM(),mM(),hM(),EM(),_M(),"</script>"].join(`
185
- `)}function gM(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(`
186
- `)}function fM(){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(`
187
- `)}function mM(){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(`
188
- `)}function hM(){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(`
189
- `)}function EM(){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(`
190
- `)}function _M(){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(`
191
- `)}function SM(t){return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}var $T="topology.json",YT="topology.html";function AM(t,e){let r=t?Pi.resolve(e,t):Pi.join(e,Ee);if(!r.startsWith(e+Pi.sep)&&r!==e)throw new _(R.FS_PATH_TRAVERSAL,`Resolved output directory "${r}" escapes workspace root "${e}" \u2014 possible path traversal via --out`);return r}function RM(t,e){m.info(g.EXPORT_STATS_LINE(t.stats.nodeCount,t.stats.linkCount,t.stats.groupCount)),t.collapsed&&m.info(g.EXPORT_COLLAPSED_LINE),t.stats.foldedLinkCount>0&&m.info(g.EXPORT_FOLDED_LINE(t.stats.foldedLinkCount)),e&&m.info(g.EXPORT_HTML_PATH_LINE(e))}async function jT(t={},e=WT.cwd()){m.header(g.EXPORT_HEADER);let r=m.spinner(g.EXPORT_START).start(),n=TM.randomUUID(),i=ee();i.onLog(a=>{a.level===Oe.INFO&&(r.text=a.message)}),A.createScope(n),A.set(n,O.WORKSPACE_ROOT,e),t.collapse&&A.set(n,O.COLLAPSE,t.collapse);let s,o;try{s=AM(t.out,Pi.resolve(e)),o=await X.exportTopology(n,i),await jd.mkdir(s,{recursive:!0});let a=Pi.join(s,$T);await jd.writeFile(a,JSON.stringify(o,null,2));let l;t.jsonOnly||(l=Pi.join(s,YT),await jd.writeFile(l,KT(o))),r.succeed(g.EXPORT_SUCCESS+a),RM(o,l)}catch(a){let l=a instanceof _||a instanceof Error?a.message:String(a);r.fail(g.EXPORT_FAIL+l),WT.exitCode=1}finally{A.deleteScope(n)}}import VT from"process";import yM from"crypto";async function zT(t=VT.cwd()){m.header(g.SNAPSHOT_HEADER);let e=m.spinner(g.SNAPSHOT_START).start(),r=yM.randomUUID(),n=ee();n.onLog(i=>{i.level===Oe.INFO&&(e.text=i.message)}),A.createScope(r),A.set(r,O.WORKSPACE_ROOT,t);try{let i=await X.snapshot(r,n);e.succeed(g.SNAPSHOT_SUCCESS),m.info(g.SNAPSHOT_NODES_WRITTEN_LINE(i.nodesWritten)),m.info(g.SNAPSHOT_EDGES_WRITTEN_LINE(i.edgesWritten)),m.info(g.SNAPSHOT_MARKDOWN_WRITTEN_LINE(i.markdownFilesWritten))}catch(i){let s=i instanceof _||i instanceof Error?i.message:String(i);e.fail(g.SNAPSHOT_FAIL+s),VT.exitCode=1}finally{A.deleteScope(r)}}import JT from"process";import OM from"crypto";async function qT(t=JT.cwd(),e){m.header(g.HYDRATE_HEADER);let r=m.spinner(g.HYDRATE_START).start(),n=OM.randomUUID(),i=ee();i.onLog(s=>{s.level===Oe.INFO&&(r.text=s.message)}),A.createScope(n),A.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),m.info(g.HYDRATE_NODES_LOADED_LINE(s.nodesLoaded)),m.info(g.HYDRATE_EDGES_LOADED_LINE(s.edgesLoaded)),s.edgesDropped>0&&m.info(g.HYDRATE_EDGES_DROPPED_LINE(s.edgesDropped))}catch(s){let o=s instanceof _||s instanceof Error?s.message:String(s);r.fail(g.HYDRATE_FAIL+o),JT.exitCode=1}finally{A.deleteScope(n)}}import Vd from"process";import IM from"crypto";var QT={[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 XT(t=Vd.cwd()){m.header(g.SYNC_KNOWLEDGE_HEADER);let e=m.spinner(g.SYNC_KNOWLEDGE_START).start(),r=IM.randomUUID(),n=ee();n.onLog(s=>{s.level===Oe.INFO&&(e.text=s.message)}),A.createScope(r),A.set(r,O.WORKSPACE_ROOT,t);let i=Vd.env.DOCUVIA_PUSH_TIMEOUT_MS;i&&A.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(QT[s.status]);return}e.succeed(QT[s.status])}catch(s){let o=s instanceof _||s instanceof Error?s.message:String(s);e.fail(g.SYNC_KNOWLEDGE_FAIL+o),Vd.exitCode=1}finally{A.deleteScope(r)}}import zd from"crypto";import*as ZT from"path";async function LM(t){let e=[Gp,xp,Up,Hp];for(let r of e)await vr(ZT.join(t,r),`<!-- ${Et} -->`,`<!-- ${Pr} -->`)}async function CM(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}),m.warn(g.UNINSTALL_PLATFORM_FAIL+i.name+g.UNINSTALL_PLATFORM_FAIL_MID+o),n.push(i.name)}return n}async function NM(t,e,r){let n=zd.randomUUID();A.createScope(n),A.set(n,O.WORKSPACE_ROOT,t),A.set(n,O.KEEP_DB,e);try{let i=await X.uninstallGitHooks(n,r);return m.success(g.UNINSTALL_GIT_HOOKS_SUCCESS(i.postCommitRemoved,i.prePushRemoved)),i.knowledgeBranchDeleted&&m.success(g.UNINSTALL_KNOWLEDGE_BRANCH_DELETED),null}catch(i){let s=i instanceof _||i instanceof Error?i.message:String(i);return r.warn(g.UNINSTALL_GIT_HOOKS_FAIL_LOG,{error:s}),m.warn(g.UNINSTALL_GIT_HOOKS_FAIL+s),g.UNINSTALL_GIT_HOOKS_FAILURE_NAME}finally{A.deleteScope(n)}}async function PM(t,e,r){if(e)return null;let n=zd.randomUUID();A.createScope(n),A.set(n,O.WORKSPACE_ROOT,t);try{return(await X.removeDocuviaDir(n,r)).removed&&m.success(g.UNINSTALL_DOCUVIA_DIR_REMOVED),null}catch(i){let s=i instanceof _||i instanceof Error?i.message:String(i);return r.warn(g.UNINSTALL_DOCUVIA_DIR_FAIL_LOG,{error:s}),m.warn(g.UNINSTALL_DOCUVIA_DIR_FAIL+s),g.UNINSTALL_DOCUVIA_DIR_FAILURE_NAME}finally{A.deleteScope(n)}}async function DM(t,e,r){if(e)return m.info(g.UNINSTALL_KEEP_DB),null;let n=zd.randomUUID();A.createScope(n),A.set(n,O.WORKSPACE_ROOT,t);try{let i=await X.clean(n,r);return m.success(g.UNINSTALL_SUCCESS_CLEAN+i.message),null}catch(i){let s=i instanceof _||i instanceof Error?i.message:String(i);return r.warn(g.UNINSTALL_DB_CLEANUP_FAIL_LOG,{error:s}),m.warn(g.UNINSTALL_FAIL_CLEAN+s),g.UNINSTALL_DB_CLEANUP_FAILURE_NAME}finally{A.deleteScope(n)}}function vM(t){try{let e=IT(t);e.length>0?m.success(`Removed ${e.length} skill(s): ${e.join(", ")}`):m.info("No Docuvia skill files found to remove.")}catch(e){m.warn(`Skill removal failed: ${e instanceof Error?e.message:String(e)}`)}}async function bM(t,e,r,n){let i=await CM(t,e,n);await LM(e);let s=await NM(e,r,n);s&&i.push(s);let o=await DM(e,r,n);o&&i.push(o);let a=await PM(e,r,n);return a&&i.push(a),i}function wM(t){t.length>0?(m.warn(g.UNINSTALL_PARTIAL+t.join(", ")),process.exitCode=1):m.success(g.UNINSTALL_SUCCESS)}async function eA(t,e,r=!1,n=!1,i=!1){if(!t){m.error(g.UNINSTALL_INVALID_WORKSPACE_ROOT),process.exitCode=1;return}let s=ee();try{m.header(g.UNINSTALL_HEADER),m.info(g.UNINSTALL_START);let o=await Al(g.UNINSTALL_HOOKS_SELECT,e,n),a=await bM(o,t,r,s);i&&vM(t),wM(a)}catch(o){let a=o instanceof Error?o.message:String(o);s.error(g.UNINSTALL_FAIL_LOG,{error:a}),m.warn(g.UNINSTALL_FAIL+a),process.exitCode=1}}import Di from"process";import kM from"crypto";var FM=[{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"}],tA=[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 MM(t){return FM.find(e=>e.test(t))?.category??g.DOCTOR_CATEGORY_OTHER}function rA(t){let e=new Map;for(let[r,n]of Object.entries(t)){let i=MM(r),s=e.get(i)??[];s.push([r,n]),e.set(i,s)}return e}var nA=[{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 iA(t,e){let r=e.status===K.PASS?`${Bl.PASS} ${g.DOCTOR_STATUS_PASS}`:`${Bl.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 sA(t){let e=Object.values(t);return{passed:e.filter(n=>n.status===K.PASS).length,total:e.length}}var GM=60;function xM(){return{llmBaseUrl:Di.env.AI_DOCUVIA_INTEGRATIONS_OPENAI_BASE_URL,llmApiKey:Di.env.AI_DOCUVIA_INTEGRATIONS_OPENAI_API_KEY,llmModel:Di.env.AI_DOCUVIA_MODEL||Di.env.AI_DOCUVIA_FAST_MODEL}}function UM(t){let e=rA(t);for(let r of tA){let n=e.get(r);!n||n.length===0||(m.section(r),m.table(nA,n.map(([i,s])=>iA(i,s))))}}function HM(t,e){let{passed:r,total:n}=sA(t);m.log(""),m.log(Fp.HORIZONTAL.repeat(GM));let i=g.DOCTOR_SUMMARY_PASSED(r,n);if(e){m.success(i);return}m.error(i),m.info(g.DOCTOR_FIX_HINT)}async function BM(t,e,r,n){A.createScope(t),A.set(t,O.WORKSPACE_ROOT,r);try{let i=await X.doctor(t,e,{...n,...xM()});return UM(i.diagnostics),HM(i.diagnostics,i.allPassed),i.allPassed}catch(i){let s=i instanceof _||i instanceof Error?i.message:String(i);return m.error(g.DOCTOR_FAIL+s),!1}finally{A.deleteScope(t)}}function KM(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 oA(t,e={}){try{m.header(g.DOCTOR_HEADER),m.info(g.DOCTOR_START);let r=kM.randomUUID(),n=ee();await BM(r,n,t,KM(e))||(Di.exitCode=1)}catch(r){let n=r instanceof Error?r.message:String(r);m.error(g.DOCTOR_FAIL+n),Di.exitCode=1}}import rn from"process";import Jd from"crypto";var Pl={LIST:"list",ENABLE:"enable",DISABLE:"disable",CHECK:"check"};function lA(t){return!!t&&Object.values(ar).includes(t)}async function $M(t){let e=Jd.randomUUID(),r=ee();A.createScope(e),A.set(e,O.WORKSPACE_ROOT,t);try{let n=await X.listHooks(e,r);m.header(g.HOOKS_HEADER),m.table([{header:g.HOOKS_COL_NAME},{header:g.HOOKS_COL_STATUS}],Object.values(ar).map(i=>[i,n[i]?g.HOOKS_STATUS_ENABLED:g.HOOKS_STATUS_DISABLED]))}catch(n){let i=n instanceof _||n instanceof Error?n.message:String(n);m.error(g.HOOKS_LIST_FAIL+i),rn.exitCode=1}finally{A.deleteScope(e)}}async function aA(t,e,r){if(!lA(e)){m.error(g.HOOKS_INVALID_NAME(e,Object.values(ar))),rn.exitCode=1;return}let n=Jd.randomUUID(),i=ee();A.createScope(n),A.set(n,O.WORKSPACE_ROOT,t),A.set(n,O.HOOK_NAME,e),A.set(n,O.HOOK_ENABLED,r);try{let s=await X.setHookEnabled(n,i);m.success(r?g.HOOKS_ENABLED(e):g.HOOKS_DISABLED(e)),m.table([{header:g.HOOKS_COL_NAME},{header:g.HOOKS_COL_STATUS}],Object.values(ar).map(o=>[o,s[o]?g.HOOKS_STATUS_ENABLED:g.HOOKS_STATUS_DISABLED]))}catch(s){let o=s instanceof _||s instanceof Error?s.message:String(s);m.error(g.HOOKS_SET_FAIL+o),rn.exitCode=1}finally{A.deleteScope(n)}}async function YM(t,e){if(!lA(e)){rn.exitCode=1;return}let r=Jd.randomUUID();A.createScope(r),A.set(r,O.WORKSPACE_ROOT,t);try{let n=await X.listHooks(r,he());rn.exitCode=n[e]?0:1}catch{rn.exitCode=0}finally{A.deleteScope(r)}}async function cA(t,e,r=rn.cwd()){switch(t){case Pl.LIST:await $M(r);return;case Pl.ENABLE:await aA(r,e,!0);return;case Pl.DISABLE:await aA(r,e,!1);return;case Pl.CHECK:await YM(r,e);return;default:m.error(g.HOOKS_UNKNOWN_SUBCOMMAND(t)),rn.exitCode=1}}import{Server as Tk}from"@modelcontextprotocol/sdk/server/index.js";import{StdioServerTransport as Ak}from"@modelcontextprotocol/sdk/server/stdio.js";import{CallToolRequestSchema as Rk,ListToolsRequestSchema as yk}from"@modelcontextprotocol/sdk/types.js";import JM from"crypto";import{z as qM}from"zod";import{createRequire as WM}from"module";import{existsSync as jM}from"fs";import{dirname as uA,join as VM}from"path";import{fileURLToPath as zM}from"url";var Dl;function vl(){if(Dl!==void 0)return Dl;let t=uA(zM(import.meta.url));for(;;){let e=VM(t,"package.json");if(jM(e)){let n=WM(import.meta.url)(e);if(typeof n.version!="string")throw _.wrap(R.FS_READ_FAILED,`Package manifest at ${e} has no string "version" field`,void 0);return Dl=n.version,Dl}let r=uA(t);if(r===t)break;t=r}throw _.wrap(R.FS_READ_FAILED,"Could not locate the CLI package.json by walking up from the running module",void 0)}var dA="docuvia-local-mcp",pA=vl(),gA=["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(`
192
- `),fA="Docuvia Local MCP Server running on stdio",mA=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 QM=qM.object({}).strict(),XM="docuvia_init",ZM="Initialize the local Docuvia SQLite database in the current workspace.",ek="object",qd={definition:{name:XM,description:ZM,inputSchema:{type:ek,properties:{}}},handler:wt(Ue.ERROR_INITIALIZING,async t=>{QM.parse(t??{});let e=JM.randomUUID(),r=ee();A.createScope(e),A.set(e,O.WORKSPACE_ROOT,process.cwd());try{let n=await Rl(process.cwd(),()=>X.init(e,r));return{content:[{type:Ke,text:n.message}]}}finally{A.deleteScope(e)}})};import tk from"crypto";import{z as Qd}from"zod";var rk=Qd.object({target:Qd.string().min(1),limit:Qd.number().int().positive().optional()}).strict(),nk="docuvia_query",Xd={definition:{name:nk,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=rk.parse(t??{}),r=tk.randomUUID(),n=ee();A.createScope(r),A.set(r,O.WORKSPACE_ROOT,process.cwd()),A.set(r,O.TARGET,e.target),e.limit!==void 0&&A.set(r,O.LIMIT,e.limit);try{let i=await X.query(r,n);return{content:[{type:Ke,text:Cl(i)},{type:Ke,text:Ue.QUERY_NEXT_STEP_HINT}]}}finally{A.deleteScope(r)}})};import ik from"crypto";import{z as hA}from"zod";var sk=hA.object({target:hA.string().min(1)}).strict(),ok="docuvia_impact",Zd={definition:{name:ok,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=sk.parse(t??{}),r=ik.randomUUID(),n=ee();A.createScope(r),A.set(r,O.WORKSPACE_ROOT,process.cwd()),A.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{A.deleteScope(r)}})};import ak from"crypto";import{z as lk}from"zod";var ck=lk.object({}).strict(),uk="docuvia_status",ep={definition:{name:uk,description:Ue.STATUS_TOOL_DESCRIPTION,inputSchema:{type:"object",properties:{}}},handler:wt(Ue.ERROR_GETTING_STATUS,async t=>{ck.parse(t??{});let e=ak.randomUUID(),r=ee();A.createScope(e),A.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{A.deleteScope(e)}})};import dk from"crypto";import{z as EA}from"zod";var pk=EA.object({baseRef:EA.string().min(1).optional()}).strict(),gk="docuvia_detect_changes",tp={definition:{name:gk,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=pk.parse(t??{}),r=dk.randomUUID(),n=ee();A.createScope(r),A.set(r,O.WORKSPACE_ROOT,process.cwd()),e.baseRef&&A.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{A.deleteScope(r)}})};import fk from"crypto";import{z as nn}from"zod";var mk=nn.object({title:nn.string().min(1,"title is required"),content:nn.string().min(1,"content is required"),nodeType:nn.enum(["change","rule","decision","context"]),confidence:nn.number().min(0).max(1)}),hk=nn.object({targetPath:nn.string().min(1,"targetPath is required").describe("File path (relative to workspace root) these decisions apply to"),decisions:nn.array(mk).min(1,"at least one decision is required").describe("Array of L3 decisions to stage for this file")}).strict(),Ek="docuvia_apply_decision",_k="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.",Sk="object",rp={definition:{name:Ek,description:_k,inputSchema:{type:Sk,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=hk.parse(t??{}),r=fk.randomUUID(),n=ee();A.createScope(r),A.set(r,O.WORKSPACE_ROOT,process.cwd()),A.set(r,O.TARGET_PATH,e.targetPath),A.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{A.deleteScope(r)}})};var np={[qd.definition.name]:qd,[Xd.definition.name]:Xd,[Zd.definition.name]:Zd,[ep.definition.name]:ep,[tp.definition.name]:tp,[rp.definition.name]:rp},_A=Object.values(np).map(t=>t.definition);async function SA(){let t=new Tk({name:dA,version:pA},{capabilities:{tools:{}},instructions:gA});t.setRequestHandler(yk,async()=>({tools:_A})),t.setRequestHandler(Rk,async n=>{let{name:i,arguments:s}=n.params,o=np[i];if(o)return o.handler(s);throw new Error(mA(i))});let e=new Ak;await t.connect(e),ee().info(fA)}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"},bl={[W.INIT]:"Initialize local project and agent hooks",[W.MCP]:"Start the local MCP stdio server",[W.CLEAN]:"Wipe the local Docuvia SQLite database",[W.STATUS]:"Show local knowledge graph row counts",[W.PUBLISH]:"Push locally-generated decisions to the remote backend",[W.ANALYZE]:"Detect project type/tags and run full AST ingestion into the knowledge graph",[W.REVIEW]:"Detect changed-file blast radius and risk level",[W.IMPACT]:"Show the blast radius/risk level for a symbol or module",[W.QUERY]:"Query the local knowledge graph (keyword + structural search)",[W.EXPORT_TOPOLOGY]:"Export the knowledge graph as topology.json/topology.html",[W.SNAPSHOT]:"Pack the local knowledge graph onto the hidden knowledge branch",[W.HYDRATE]:"Rebuild the local database from the hidden knowledge branch",[W.SYNC_KNOWLEDGE]:"Reconcile the hidden knowledge branch with the remote (fetch/merge/push)",[W.UNINSTALL]:"Uninstall Docuvia2 integrations and local DB",[W.DOCTOR]:"Run diagnostic checks on Docuvia2 setup",[W.HOOKS]:"List/enable/disable Docuvia's automation hooks (context-injection, commit-l3-write, tier-b-c-prepush)"},$e={[W.INIT]:[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 ip(){return["Usage:",...Object.values(W).map(t=>` docuvia ${t.padEnd(40)} # ${bl[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(`
193
- `)}function TA(t){let e=$e[t],r=[`docuvia ${t}`,` ${bl[t]}`];return e.length>0&&r.push("","Flags:",...e.map(n=>` ${n}`)),r.join(`
194
- `)}var wl=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(tn.UNKNOWN_OPTIONS(n.join(", ")))}};function Fl(t){if(t===void 0)return;let e=Object.values(Kt);if(e.includes(t))return t;throw new Error(tn.INVALID_FORMAT(t,e.join(", ")))}RA.config({quiet:!0});function yA(){m.error(ip())}function Ik(){return vl()}function Lk(t){return t===F.HELP||t===F.HELP_SHORT}function Ck(t){return t===F.VERSION||t===F.VERSION_SHORT}function OA(t){return t===F.INTERACTIVE||t===F.INTERACTIVE_SHORT}async function Nk(t){t.parser.checkUnknownFlags($e[W.INIT]);let e=t.parser.getFlagValue(F.PLATFORM),r=t.parser.hasFlag(F.SKILLS);await LT(t.workspaceRoot,e,t.isInteractive,r)}async function Pk(t){t.parser.checkUnknownFlags($e[W.MCP]),await SA()}async function Dk(t){t.parser.checkUnknownFlags($e[W.CLEAN]),await CT(t.workspaceRoot,t.isInteractive)}async function vk(t){t.parser.checkUnknownFlags($e[W.STATUS]),await PT(t.workspaceRoot)}async function bk(t){t.parser.checkUnknownFlags($e[W.PUBLISH]);let e=t.parser.getPositional(0),r=t.parser.getFlagValue(F.COMMIT_SHA);await DT({projectId:e,commitSha:r},t.workspaceRoot,t.isInteractive)}async function wk(t){t.parser.checkUnknownFlags($e[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),h=t.parser.hasFlag(F.TIER_C_ALL);await kT(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:h})}async function Fk(t){t.parser.checkUnknownFlags($e[W.REVIEW]);let e=t.parser.getPositional(0),r=Fl(t.parser.getFlagValue(F.FORMAT));await xT(e,{format:r},t.workspaceRoot)}async function Mk(t){t.parser.checkUnknownFlags($e[W.IMPACT]);let e=t.parser.getPositional(0);if(!e){m.error(g.IMPACT_MISSING_TARGET),$t.exitCode=1;return}let r=Fl(t.parser.getFlagValue(F.FORMAT));await UT(e,{format:r},t.workspaceRoot)}async function kk(t){t.parser.checkUnknownFlags($e[W.QUERY]);let e=t.parser.getPositional(0),r=Fl(t.parser.getFlagValue(F.FORMAT)),n=t.parser.getFlagValue(F.LIMIT),i=n?Number(n):void 0;await BT(e,{format:r,limit:i},t.workspaceRoot,t.isInteractive)}async function Gk(t){t.parser.checkUnknownFlags($e[W.EXPORT_TOPOLOGY]);let e=t.parser.getFlagValue(F.OUT),r=t.parser.hasFlag(F.JSON_ONLY),n=t.parser.getFlagValue(F.COLLAPSE);await jT({out:e,jsonOnly:r,collapse:n},t.workspaceRoot)}async function xk(t){t.parser.checkUnknownFlags($e[W.SNAPSHOT]),await zT(t.workspaceRoot)}async function Uk(t){t.parser.checkUnknownFlags($e[W.HYDRATE]);let e=t.parser.hasFlag(F.FORCE)||t.parser.hasFlag(F.FORCE_SHORT);await qT(t.workspaceRoot,{force:e})}async function Hk(t){t.parser.checkUnknownFlags($e[W.UNINSTALL]);let e=t.parser.getFlagValue(F.PLATFORM),r=t.parser.hasFlag(F.KEEP_DB),n=t.parser.hasFlag(F.SKILLS);await eA(t.workspaceRoot,e,r,t.isInteractive,n)}async function Bk(t){t.parser.checkUnknownFlags($e[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 oA(t.workspaceRoot,{skipDb:e,skipGit:r,skipHooks:n,skipLogs:i,skipLsp:s,skipLlm:o,fix:a})}async function Kk(t){t.parser.checkUnknownFlags($e[W.SYNC_KNOWLEDGE]),await XT(t.workspaceRoot)}async function $k(t){t.parser.checkUnknownFlags($e[W.HOOKS]);let e=t.parser.getPositional(0),r=t.parser.getPositional(1);await cA(e,r,t.workspaceRoot)}var Yk={[W.INIT]:Nk,[W.MCP]:Pk,[W.CLEAN]:Dk,[W.STATUS]:vk,[W.PUBLISH]:bk,[W.ANALYZE]:wk,[W.REVIEW]:Fk,[W.IMPACT]:Mk,[W.QUERY]:kk,[W.EXPORT_TOPOLOGY]:Gk,[W.SNAPSHOT]:xk,[W.HYDRATE]:Uk,[W.SYNC_KNOWLEDGE]:Kk,[W.UNINSTALL]:Hk,[W.DOCTOR]:Bk,[W.HOOKS]:$k};async function Wk(t,e,r){let n=OA(t)?void 0:t;if(n)return n;e||(yA(),$t.exit(1)),r||(m.error(g.CLI_INTERACTIVE_NO_TTY),$t.exit(1)),m.header(g.CLI_HEADER);let i=Object.values(W).filter(o=>o!==W.MCP).map(o=>({name:o,value:o,description:bl[o]}));return await m.askSelect(g.CLI_PROMPT_ACTION,i)}function jk(t){return Lk(t)?(m.log(ip()),!0):Ck(t)?(m.log(Ik()),!0):!1}function Vk(t,e){let r=OA(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 zk(t,e,r,n,i,s){if(!t||!e){m.error(g.CLI_UNKNOWN_COMMAND+t),yA(),$t.exit(1);return}if(r.hasFlag(F.HELP)||r.hasFlag(F.HELP_SHORT)){m.log(TA(t));return}n&&!i&&m.warn(g.CLI_INTERACTIVE_UNAVAILABLE),await e({parser:r,isInteractive:i,workspaceRoot:s})}async function Jk(){let t=$t.argv[2];if(jk(t))return;let e=$t.argv.slice(3),r=new wl(e),n=$t.cwd(),{wantsInteractive:i,interactiveEligible:s}=Vk(t,r),o=await Wk(t,i,s),a=o?Yk[o]:void 0;try{await zk(o,a,r,i,s,n)}catch(l){let c=l instanceof Error?l.message:String(l);m.error(g.CLI_FATAL_ERROR+c),$t.exit(1)}}Jk().catch(t=>{m.error(g.CLI_FATAL_ERROR+(t instanceof Error?t.message:String(t))),$t.exit(1)});
170
+ `))try{let o=JSON.parse(s);o.event===Y.TIER_C_SUMMARY?n={processed:Number(o.processed??0)}:o.event===Y.TIER_C_ITEM_FAILED&&typeof o.reason=="string"&&(i=o.reason)}catch{}if(n)return{processed:n.processed,reason:i}}async runL2SemanticCoverageDiagnostic(e,r){if(!y.has(T.GraphStoreOpener))return!0;let n;try{n=await y.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(!y.has(T.GitProvider))return!0;try{let n=await y.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,Ee,Fi);await sr.stat(a).catch(()=>null)&&s.push(o.path)}return e[ue.WORKTREE_DIVERGENCE]=s.length>0?{status:K.FAIL,message:k.WORKTREE_DIVERGENCE_FAIL(s.length,s),suggestion:k.WORKTREE_DIVERGENCE_SUGGESTION}:{status:K.PASS,message:k.WORKTREE_DIVERGENCE_OK(n.length)},s.length===0}catch{return!0}}async runAgentAuthoredAdoptionDiagnostic(e){if(!y.has(T.GraphStoreOpener)||!y.has(T.GitProvider))return!0;let r;try{let n=y.resolve(T.GitProvider);r=await y.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 Ii(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(!y.has(T.GraphStoreOpener))return!0;let r;try{r=await y.resolve(T.GraphStoreOpener)({dbPath:ie(this.workspaceRoot),readonly:!0});let{byFile:i,total:s}=B_(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=Pp(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,Ee,Fi);if(!await sr.stat(r).catch(()=>null))return e[ue.DB_FOUND]={status:K.FAIL,message:k.DB_NOT_FOUND_AT(r)},!1;if(!y.has(T.DiagnosticRunnerDb))return e[ue.DB_RUNNER]={status:K.FAIL,message:k.DB_RUNNER_NOT_REGISTERED},!1;let s=await y.resolve(T.DiagnosticRunnerDb).checkHealth(r);return this.mergeDiagnosticResults(e,s)}async runGitDiagnostics(e){if(!y.has(T.DiagnosticRunnerGit))return e[ue.GIT_RUNNER]={status:K.FAIL,message:k.GIT_RUNNER_NOT_REGISTERED},!1;try{let n=await y.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 instanceof Error?e.message:String(e),n;return e instanceof _&&(e.code===R.GIT_NETWORK_TIMEOUT?n=k.GIT_NETWORK_TIMEOUT_SUGGESTION:e.code===R.GIT_COMMAND_FAILED&&r.includes(k.GIT_NOT_A_REPO_TEXT)?n=k.GIT_NOT_A_REPO_SUGGESTION:e.code===R.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,Ee,Or);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 sr.readdir(e);for(let s of i){if(!s.endsWith(tT))continue;n++;let a=(await sr.readFile(Rt.join(e,s),H)).split(`
171
+ `).filter(l=>l.trim().length>0);for(let l of a)try{let c=JSON.parse(l);c.level&&c.level>=50&&r++}catch{}}return{errorsFound:r,logsChecked:n}}};var fl=class{constructor(e,r){this.workspaceRoot=e;this.logger=r}workspaceRoot;logger;async execute(e=!1){let{workspaceRoot:r,logger:n}=this,i=y.resolve(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 sT from"fs/promises";import Sw from"path";var oT={REMOVED:"Removed .docuvia/ directory",NOT_FOUND:".docuvia/ directory not present; nothing to remove"};async function aT(t,e){let r=Sw.join(t,Ee);if(!Ga(r,t))throw new _(R.UNINSTALL_WORKFLOW_FAILED,`Refusing to remove directory at ${r}: resolved outside workspace ${t}`);let n=!0;try{await sT.access(r)}catch{n=!1}return n?(await sT.rm(r,{recursive:!0,force:!0}),e.info(oT.REMOVED),{removed:!0}):(e.debug(oT.NOT_FOUND),{removed:!1})}async function lT(t,e){return Li(t,e)}async function cT(t,e,r,n){return await YS(t,e,r,n),Li(t,n)}function Se(t,e){let r=A.get(t,e);if(r===void 0)throw new _(R.INVALID_INPUT,w_.MISSING_MEMORY_KEY(e,t));return r}function uT(t){let e=A.get(t,O.LSP_BINARY_OVERRIDE),r=A.get(t,O.LSP_ARGS_OVERRIDE),n=A.get(t,O.LSP_TIMEOUT_MS),i=A.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 Ma(r,e).execute()},async clean(t,e){let r=Se(t,O.WORKSPACE_ROOT);return new xa(r,e).execute()},async status(t,e){let r=Se(t,O.WORKSPACE_ROOT);return new Ka(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=A.get(t,O.COMMIT_SHA);return new Ya(n,e,i,r).execute({projectId:s,commitSha:o})},async analyze(t,e,r){let n=Se(t,O.WORKSPACE_ROOT);if(A.get(t,O.FLUSH_STAGED_L3))return new en(n,e,{flushStagedL3:!0}).execute();let s=A.get(t,O.TARGET_PATH),o=A.get(t,O.AGENT_AUTHORED_DECISIONS);if(s&&o)return new en(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 en(n,e,{targetPath:s,llmBaseUrl:l,llmApiKey:r,llmModel:c}).execute()}return A.get(t,O.ESCALATE_TO_LSP)?new en(n,e,{escalateToLsp:!0,lspProviderConfig:uT(t),tierBCommitCap:A.get(t,O.TIER_B_COMMIT_CAP),full:A.get(t,O.TIER_B_FULL_RESYNC),llmBaseUrl:A.get(t,O.LLM_BASE_URL),llmApiKey:r,llmModel:A.get(t,O.LLM_MODEL),tierCDailyCallCap:A.get(t,O.TIER_C_DAILY_CALL_CAP),tierCDailyTokenCap:A.get(t,O.TIER_C_DAILY_TOKEN_CAP),tierCWallClockMs:A.get(t,O.TIER_C_WALL_CLOCK_MS),tierCItemCap:A.get(t,O.TIER_C_ITEM_CAP),tierCLoadThreshold:A.get(t,O.TIER_C_LOAD_THRESHOLD),force:A.get(t,O.FORCE),tierCDrainAll:A.get(t,O.TIER_C_DRAIN_ALL)}).execute():new en(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=Aw.resolve(r,n);if(!Tw.existsSync(s))throw new _(R.FS_READ_FAILED,q.PATH_NOT_FOUND(n));return HS(r,n,i,e)},async review(t,e){let r=Se(t,O.WORKSPACE_ROOT),n=A.get(t,O.BASE_REF);return new Qa(r,e).execute(n)},async impact(t,e){let r=Se(t,O.WORKSPACE_ROOT),n=Se(t,O.TARGET);return new Xa(r,e).execute(n)},async query(t,e){let r=Se(t,O.WORKSPACE_ROOT),n=Se(t,O.TARGET),i=A.get(t,O.LIMIT);return new rl(r,e).execute(n,i)},async exportTopology(t,e){let r=Se(t,O.WORKSPACE_ROOT),n=A.get(t,O.COLLAPSE);return new ol(r,e).execute({collapse:n})},async snapshot(t,e){let r=Se(t,O.WORKSPACE_ROOT);return new al(r,e).execute()},async hydrate(t,e,r){let n=Se(t,O.WORKSPACE_ROOT);return new ul(n,e).execute(r)},async syncKnowledge(t,e){let r=Se(t,O.WORKSPACE_ROOT),n=A.get(t,O.GIT_NETWORK_TIMEOUT_MS);return new pl(r,e,n).execute()},async doctor(t,e,r){let n=Se(t,O.WORKSPACE_ROOT);return new gl(n,e).execute(r)},async uninstallGitHooks(t,e){let r=Se(t,O.WORKSPACE_ROOT),n=A.get(t,O.KEEP_DB);return new fl(r,e).execute(n)},async removeDocuviaDir(t,e){let r=Se(t,O.WORKSPACE_ROOT);return aT(r,e)},async listHooks(t,e){let r=Se(t,O.WORKSPACE_ROOT);return lT(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 cT(r,n,i,e)},async checkTierBGate(t,e){let r=Se(t,O.WORKSPACE_ROOT);return rT(r,e,uT(t))}};import dT from"pino";import{createRequire as Rw}from"module";var yw=Rw(import.meta.url),Hd="pino-pretty",Ow=`[docuvia] ${Hd} unavailable, falling back to plain JSON logs.
172
+ `,Iw=["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"],Lw="[REDACTED]",Cw="1";function Nw(){if(process.env.DOCUVIA_PRETTY_LOGS===Cw)try{return yw.resolve(Hd),{target:Hd,options:{colorize:!0,destination:2}}}catch{process.stderr.write(Ow);return}}function ee(){let t=Nw(),e=dT({level:process.env.LOG_LEVEL||Oe.INFO,redact:{paths:[...Iw],censor:Lw},transport:t},t?void 0:dT.destination(2)),r=new op;return r.onLog(n=>{e[n.level](n.context??{},n.message)}),r}var tn={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 pT=".js",gT=".cjs",ml=class extends ft{name=Wp;slug=qp;async installHooks(e){await this.configureHooks(e),await this.configureMcpServer(e)}async configureHooks(e){let r=bt.join(e,Kn);await tt.mkdir(r,{recursive:!0}),await tt.writeFile(bt.join(r,Nr),Us,{mode:493});let n=ln.replace(/\${HOOKS_DIR}/g,zl).replace(pT,gT);await Ot(bt.join(r,$n),n,Nr)}async configureMcpServer(e){let r=bt.join(e,Yl);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[Yn]={command:Gs,args:[ig,...xs]},await tt.writeFile(r,JSON.stringify(n,null,2)),m.success(g.INIT_HOOKS_REGISTERED_MCP+r)}catch(n){let i=n instanceof Error?n.message:String(n);m.warn(g.INIT_HOOKS_FAIL_CURSOR_MCP+i)}}async uninstallHooks(e){let r=bt.join(e,Kn);try{await tt.unlink(bt.join(r,Nr)),m.success(`${g.UNINSTALL_REMOVED_FILE_PREFIX}${Nr}`)}catch{}let{removeBlock:n}=await import("./fs-utils-Y7YNFCY4.js"),{CURSOR_RULES_FILENAME:i,AGENT_INSTRUCTIONS_MARKER:s,AGENT_INSTRUCTIONS_END_MARKER:o}=await import("./init-templates-FFCZIE3S.js"),a=bt.join(e,i);await n(a,`<!-- ${s} -->`,`<!-- ${o} -->`);let l=bt.join(r,$n),c=!1;try{(await tt.readFile(l,H)).trim()===ln.replace(/\$\{HOOKS_DIR\}/g,zl).replace(pT,gT).trim()&&(await tt.unlink(l),c=!0)}catch{}if(c)try{await tt.rmdir(r)}catch{}let u=bt.join(e,Yl);try{let p=await tt.readFile(u,H),d=JSON.parse(p);d?.mcpServers&&d.mcpServers[Yn]&&(delete d.mcpServers[Yn],await tt.writeFile(u,JSON.stringify(d,null,2)),m.success(`${g.UNINSTALL_REMOVED_MCP_SERVER_PREFIX}${u}`))}catch{}}};import*as Je from"fs/promises";import*as rt from"path";import Ls from"process";var Pw="win32",Dw="darwin",vw="Library",bw="Application Support",ww=".config";async function Fw(t){try{await Je.unlink(rt.join(t,Cr)),m.success(`${g.UNINSTALL_REMOVED_FILE_PREFIX}${Cr}`)}catch{}}async function Mw(t){let e=rt.join(t,$n);try{if((await Je.readFile(e,H)).trim()===ln.replace(/\$\{HOOKS_DIR\}/g,Vl).trim())return await Je.unlink(e),!0}catch{}return!1}async function kw(t){try{await Je.rmdir(t)}catch{}}function fT(){let t=ln.replace(/\${HOOKS_DIR}/g,rg);return JSON.parse(t)[kt][0]}function hT(t){let e=t.hooks,r=Array.isArray(e)?e[0]?.command:void 0;return typeof r=="string"?r:""}function ET(t,e){let r=t?.hooks;return Array.isArray(r)&&r.some(n=>n?.command===e)}async function Gw(t){try{let e=await Je.readFile(t,H);return{settings:JSON.parse(e),aborted:!1}}catch(e){return e?.code!==Fs?(m.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 xw(t,e){let{settings:r,aborted:n}=await Gw(t);if(n)return;if(r.hooks=r.hooks??{},r.hooks[kt]!==void 0&&!Array.isArray(r.hooks[kt])){m.warn(g.FS_UNEXPECTED_SHAPE(kt,t));return}r.hooks[kt]=r.hooks[kt]??[];let i=r.hooks[kt],s=hT(e);i.some(o=>ET(o,s))||(i.push(e),await Je.mkdir(rt.dirname(t),{recursive:!0}),await Je.writeFile(t,`${JSON.stringify(r,null,2)}
173
+ `,H))}async function Uw(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=>!ET(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),m.success(g.UNINSTALL_REMOVED_FILE_PREFIX+ks);return}await Je.writeFile(t,`${JSON.stringify(r,null,2)}
174
+ `,H),m.success(g.UNINSTALL_REMOVED_HOOK_FROM_SETTINGS_PREFIX+t)}}function Hw(t){let e=rt.join(t,Wl);m.info(`${g.UNINSTALL_CLAUDE_MCP_MANUAL_REMINDER} (${e}).`)}function mT(){return Ls.platform===Pw?rt.join(Ls.env.APPDATA||"",ki):Ls.platform===Dw?rt.join(Ls.env.HOME||"",vw,bw,ki):rt.join(Ls.env.HOME||"",ww,ki)}var hl=class extends ft{name=ki;slug=Qp;async installHooks(e){await this.configureHooks(e),this.printMcpServerSnippet(e)}printMcpServerSnippet(e){let r=mT();if(!r)return;let n=rt.join(r,Wl),i=JSON.stringify({mcpServers:{[Yn]:{command:Gs,args:[ng,...xs],env:{[sg]:e}}}},null,2);m.info(`${g.INIT_CLAUDE_MCP_MANUAL_SNIPPET} (${n}):
175
+ ${i}`)}async configureHooks(e){let r=rt.join(e,Bn);await Je.mkdir(r,{recursive:!0}),await Je.writeFile(rt.join(r,Cr),Us,{mode:493});let n=ln.replace(/\${HOOKS_DIR}/g,Vl);await Ot(rt.join(r,$n),n,Cr),await xw(rt.join(e,$l,ks),fT())}async uninstallHooks(e){let r=rt.join(e,Bn);await Fw(r),await Mw(r)&&await kw(r);try{await Uw(rt.join(e,$l,ks),hT(fT()))}catch{}let i=mT();i&&Hw(i)}};import*as _T from"path";var El=class extends ft{name=jp;slug=Xp;instructionsPath(e){return _T.join(e,kp,Gp)}async installHooks(e){await Ot(this.instructionsPath(e),Dr,Et)}async uninstallHooks(e){await vr(this.instructionsPath(e),`<!-- ${Et} -->`,`<!-- ${Pr} -->`)}};import*as ST from"path";var _l=class extends ft{name=Vp;slug=Zp;agentsMdPath(e){return ST.join(e,Kp)}async installHooks(e){await Ot(this.agentsMdPath(e),Dr,Et)}async uninstallHooks(e){await vr(this.agentsMdPath(e),`<!-- ${Et} -->`,`<!-- ${Pr} -->`)}};import*as Tl from"fs/promises";import*as Bd from"path";var Sl=class extends ft{name=zp;slug=eg;rulesDir(e){return Bd.join(e,Yp)}rulesFilePath(e){return Bd.join(this.rulesDir(e),jl)}async installHooks(e){await Ot(this.rulesFilePath(e),Dr,Et)}async uninstallHooks(e){try{await Tl.unlink(this.rulesFilePath(e)),m.success(`${g.UNINSTALL_REMOVED_FILE_PREFIX}${jl}`)}catch{return}try{await Tl.rmdir(this.rulesDir(e))}catch{}}};import*as TT from"path";var Al=class extends ft{name=Jp;slug=tg;hermesMdPath(e){return TT.join(e,$p)}async installHooks(e){await Ot(this.hermesMdPath(e),Dr,Et)}async uninstallHooks(e){await vr(this.hermesMdPath(e),`<!-- ${Et} -->`,`<!-- ${Pr} -->`)}};function Bw(){return[new ml,new hl,new El,new _l,new Sl,new Al]}function Kw(t){return t.split(",").map(e=>e.trim().toLowerCase()).filter(Boolean)}async function Rl(t,e,r,n=Bw()){if(e!==void 0){let i=Kw(e),s=n.map(a=>a.slug),o=i.filter(a=>!s.includes(a));if(o.length>0)throw new Error(tn.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 m.askCheckbox(t,i);return n.filter(o=>s.includes(o.name))}return n}import $w from"fs/promises";import AT from"path";var Yw=30*6e4,Ww=1e4,jw=3e4;async function yl(t,e,r){let n=AT.join(t,Ee,Rp);await $w.mkdir(AT.dirname(n),{recursive:!0});let s=await y.resolve(T.ProcessLock)(n,{maxWaitMs:Yw,heartbeatIntervalMs:Ww,staleAfterMs:jw,onWaiting:r});try{return await e()}finally{await s.release()}}import*as Bt from"fs";import*as Ci from"path";var Vw=["---","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(`
176
+ `),zw=["---","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(`
177
+ `),Jw=["---","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(`
178
+ `),qw=["---","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(`
179
+ `),RT=[{dirName:"docuvia-exploring",content:Vw},{dirName:"docuvia-impact-analysis",content:zw},{dirName:"docuvia-knowledge-graph",content:Jw},{dirName:"docuvia-agent-authored",content:qw}];var yT=".claude/skills";function OT(t){let e=Ci.join(t,yT),r=[],n=[];for(let i of RT)Qw(e,i)==="installed"?r.push(i.dirName):n.push(i.dirName);return{installed:r,skipped:n}}function IT(t){let e=Ci.join(t,yT),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=Ci.join(e,i.name);Bt.rmSync(s,{recursive:!0,force:!0}),r.push(i.name)}return r}function Qw(t,e){let r=Ci.join(t,e.dirName),n=Ci.join(r,"SKILL.md");return Bt.existsSync(n)?"skipped":(Bt.mkdirSync(r,{recursive:!0}),Bt.writeFileSync(n,e.content,"utf-8"),"installed")}var Zw=Kd.object({cwd:Kd.string().min(1,tn.WORKSPACE_ROOT_EMPTY),platformFilter:Kd.string().optional()});async function eF(t){let e=m.spinner(g.INIT_START).start(),r=Xw.randomUUID(),n=ee();n.onLog(i=>{i.level===Oe.INFO&&(e.text=i.message)}),A.createScope(r),A.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 _||i instanceof Error?i.message:String(i);throw e.fail(g.INIT_FAILED+s),i}finally{A.deleteScope(r)}}async function tF(t,e,r){m.info(g.INIT_AGENT_HOOKS);let n=await Rl(g.INIT_HOOKS_SELECT,e,r);if(n.length===0){m.info(g.INIT_HOOKS_NONE_SELECTED);return}for(let i of n)await i.installHooks(t);m.success(g.INIT_HOOKS_SUCCESS),m.info(g.INIT_HOOKS_SUPPORTED)}async function LT(t=Ol.cwd(),e,r=!1,n=!1){let i=Zw.parse({cwd:t,platformFilter:e});m.header(g.INIT_HEADER),r&&(await m.askConfirm(g.INIT_CONFIRM,!0)||(m.warn(g.INIT_ABORTED),Ol.exit(0)));let s=!1,o;await yl(i.cwd,async()=>{try{await eF(i.cwd)}catch{s=!0}if(!s)try{await tF(i.cwd,i.platformFilter,r)}catch(a){o=a}},()=>m.info(g.INIT_LOCK_WAITING)),s&&Ol.exit(1),o!==void 0&&(m.error(g.INIT_HOOKS_FAIL+o),Ol.exit(1)),n&&rF(t)}function rF(t){try{let e=OT(t);e.installed.length>0&&m.success(`Installed ${e.installed.length} skill(s): ${e.installed.join(", ")}`),e.skipped.length>0&&m.info(`Skipped ${e.skipped.length} existing skill(s): ${e.skipped.join(", ")}`)}catch(e){m.warn(`Skill installation failed: ${e instanceof Error?e.message:String(e)}`)}}import $d from"process";import nF from"crypto";async function CT(t=$d.cwd(),e=!1){m.header(g.CLEAN_HEADER),e&&(await m.askConfirm(g.CLEAN_CONFIRM,!1)||(m.warn(g.CLEAN_ABORTED),$d.exit(0)));let r=m.spinner(g.CLEAN_START).start(),n=nF.randomUUID(),i=ee();i.onLog(s=>{s.level===Oe.INFO&&(r.text=s.message)}),A.createScope(n),A.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 _||s instanceof Error?s.message:String(s);r.fail(g.CLEAN_FAIL+o),$d.exitCode=1}finally{A.deleteScope(n)}}import NT from"process";import iF from"crypto";async function PT(t=NT.cwd()){let e=m.spinner(g.STATUS_START).start(),r=iF.randomUUID(),n=ee();n.onLog(i=>{i.level===Oe.INFO&&(e.text=i.message)}),A.createScope(r),A.set(r,O.WORKSPACE_ROOT,t);try{let i=await X.status(r,n);e.succeed(g.STATUS_SUCCESS),m.header(g.STATUS_HEADER);let s=i.tierBFilesTotal>0?(i.tierBFilesProcessed/i.tierBFilesTotal*100).toFixed(1):"0.0";m.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 _||i instanceof Error?i.message:String(i);e.fail(g.STATUS_FAIL+s),NT.exitCode=1}finally{A.deleteScope(r)}}import Sr from"process";import aF from"crypto";var z={INDENT_TWO:" ",NEWLINE:`
180
+ `,OPEN_PAREN:" (",CLOSE_PAREN:")",DOUBLE_QUOTE:'"',EMPTY:"",ELLIPSIS:"...",SHORT_SHA_LENGTH:7};import sF from"process";import{createInterface as oF}from"readline";async function Il(){let t=oF({input:sF.stdin}),e=[];try{for await(let r of t)e.push(r)}finally{t.close()}return e.join(`
181
+ `).trim()}async function lF(t,e){if(t)return t;e||(m.error(g.PUBLISH_MISSING_PROJECT_ID),Sr.exit(1)),m.info(g.PUBLISH_NO_PROJECT_ID_PROVIDED);let r=await m.askInput(g.PUBLISH_PROMPT_PROJECT_ID);return r||(m.error(g.PUBLISH_PROJECT_ID_REQUIRED),Sr.exit(1)),r}function cF(){return!!Sr.env.DOCUVIA_API_URL&&!!Sr.env.MCP_PAT}async function uF(t){return t||(Sr.stdin.isTTY?void 0:Il())}async function dF(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 _||i instanceof Error?i.message:String(i);r.fail(g.PUBLISH_FAIL+s),Sr.exitCode=1}finally{A.deleteScope(t)}}async function DT(t,e=Sr.cwd(),r=!1){m.header(g.PUBLISH_HEADER);let n=await lF(t.projectId,r);if(!cF()){m.warn(g.PUBLISH_MISSING_ENV),m.warn(g.PUBLISH_SKIP);return}let i=await uF(t.commitSha),s=m.spinner(g.PUBLISH_START+n+z.ELLIPSIS).start(),o=aF.randomUUID(),a=ee();a.onLog(l=>{l.level===Oe.INFO&&(s.text=l.message)}),A.createScope(o),A.set(o,O.WORKSPACE_ROOT,e),A.set(o,O.API_URL,Sr.env.DOCUVIA_API_URL),A.set(o,O.PROJECT_ID,n),A.set(o,O.COMMIT_SHA,i||void 0),await dF(o,a,s,Sr.env.MCP_PAT)}import we from"process";import Ll from"crypto";import hF from"fs/promises";import{z as Mn}from"zod";function bT(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 _(R.INVALID_INPUT,g.ANALYZE_LSP_ARGS_INVALID_JSON(String(n)))}if(!Array.isArray(r)||r.some(n=>typeof n!="string"))throw new _(R.INVALID_INPUT,g.ANALYZE_LSP_ARGS_INVALID_SHAPE);return r}return mF(e)}}function pF(t,e){return t==="\\"&&e!==void 0&&(e==='"'||e==="\\")}function gF(t){return t==='"'||t==="'"}function fF(t){return/\s/.test(t)}function vT(t,e){return e.length>0&&t.push(e),""}function mF(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==='"'&&pF(s,o)?(r+=o,i++):r+=s;continue}gF(s)?n=s:s==="\\"&&o!==void 0?(r+=o,i++):fF(s)?r=vT(e,r):r+=s}return vT(e,r),e}var EF=Mn.object({title:Mn.string().min(1),content:Mn.string(),nodeType:Mn.nativeEnum(sn),confidence:Mn.number().min(0).max(1)}),_F=Mn.object({decisions:Mn.array(EF)});function wT(){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 SF(t){let e=t?await hF.readFile(t,H):we.stdin.isTTY?void 0:await Il();if(!e)return;let r;try{r=JSON.parse(e)}catch(i){throw new _(R.INVALID_INPUT,g.ANALYZE_AGENT_AUTHORED_INVALID_JSON(String(i)))}let n=_F.safeParse(r);if(!n.success)throw new _(R.INVALID_INPUT,g.ANALYZE_AGENT_AUTHORED_INVALID_SHAPE(n.error.message));return n.data}function TF(){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 AF(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:bT(r),lspTimeoutMs:t??(n?Number(n):void 0),lspMaxProcesses:e??o(i),tierBCommitCap:s?Number(s):void 0}}function RF(t,e){e.succeed(g.ANALYZE_AUTO_FULL_SUCCESS),m.info(g.ANALYZE_PROJECT_TYPE+t.projectType),m.info(g.ANALYZE_SUGGESTED_TAGS+(t.suggestedTags.join(", ")||g.ANALYZE_NONE)),m.info(g.ANALYZE_AUTO_FULL_SUMMARY(t.filesParsed,t.filesRequested,t.filesFailed))}function yF(t,e){e.succeed(g.ANALYZE_AUTO_DELTA_SUCCESS),m.info(g.ANALYZE_AUTO_DELTA_SUMMARY(t.filesReparsed,t.filesDeleted,t.tierBQueued))}function OF(t,e){if(e.succeed(g.ANALYZE_FOCUSED_SUCCESS),t.decisions.length===0){m.info(g.ANALYZE_FOCUSED_NONE);return}for(let r of t.decisions)m.info(g.ANALYZE_DECISION_LINE(r.nodeType,r.title,r.confidence)),r.content&&m.log(g.ANALYZE_DECISION_CONTENT_PREFIX+r.content);m.info(g.ANALYZE_FOCUSED_PERSISTED(t.persisted,t.deduped))}function IF(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),m.info(g.ANALYZE_TIER_B_SUMMARY(t.filesProcessed,t.edgesApplied,t.filesFailed,t.filesFailedPermanent,!!t.zeroProgressWatchdogTripped))),LF(t)}function LF(t){if(t.tierCQueued!==0){if(t.tierCSkipped){m.info(g.ANALYZE_TIER_C_SKIPPED(t.tierCSkippedReason??""));return}m.info(g.ANALYZE_TIER_C_SUMMARY(t.tierCProcessed,t.tierCPersisted,t.tierCFailed))}}function CF(t,e){if(t.skippedDisabled){e.succeed(g.ANALYZE_FLUSH_STAGED_L3_DISABLED_SUCCESS);return}e.succeed(g.ANALYZE_FLUSH_STAGED_L3_SUCCESS),m.info(g.ANALYZE_FLUSH_STAGED_L3_SUMMARY(t.flushed,t.deduped,t.stillPending)),t.noGraphToAttach&&m.warn(g.ANALYZE_FLUSH_STAGED_L3_NO_GRAPH_ADVICE)}function Yd(t,e,r){switch(t.kind){case Te.AUTO_FULL_INGESTION:RF(t,e);break;case Te.AUTO_DELTA:yF(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:OF(t,e);break;case Te.TIER_B_BATCH:IF(t,e,r);break;case Te.FLUSH_STAGED_L3:CF(t,e);break}}function FT(t,e,r=!1){return m.header(r?g.ANALYZE_STAGE_HEADER:t?g.ANALYZE_FOCUSED_HEADER:e?g.ANALYZE_TIER_B_HEADER:g.ANALYZE_HEADER),m.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 NF(t,e,r,n,i,s,o,a,l,c){A.createScope(t),A.set(t,O.WORKSPACE_ROOT,e),s&&A.set(t,O.FORCE,!0),r&&n?(A.set(t,O.TARGET_PATH,r),A.set(t,O.LLM_BASE_URL,n.llmBaseUrl),A.set(t,O.LLM_MODEL,n.llmModel)):i&&(A.set(t,O.ESCALATE_TO_LSP,!0),l&&A.set(t,O.TIER_B_FULL_RESYNC,!0),c&&A.set(t,O.TIER_C_DRAIN_ALL,!0),MT(t,o,a),PF(t,n))}function PF(t,e){e&&(A.set(t,O.LLM_BASE_URL,e.llmBaseUrl),A.set(t,O.LLM_MODEL,e.llmModel));let r=TF();r.dailyCallCap!==void 0&&A.set(t,O.TIER_C_DAILY_CALL_CAP,r.dailyCallCap),r.dailyTokenCap!==void 0&&A.set(t,O.TIER_C_DAILY_TOKEN_CAP,r.dailyTokenCap),r.wallClockMs!==void 0&&A.set(t,O.TIER_C_WALL_CLOCK_MS,r.wallClockMs),r.itemCap!==void 0&&A.set(t,O.TIER_C_ITEM_CAP,r.itemCap),r.loadThreshold!==void 0&&A.set(t,O.TIER_C_LOAD_THRESHOLD,r.loadThreshold)}function MT(t,e,r){let n=AF(e,r);n.lspBinaryOverride!==void 0&&A.set(t,O.LSP_BINARY_OVERRIDE,n.lspBinaryOverride),n.lspArgsOverride!==void 0&&A.set(t,O.LSP_ARGS_OVERRIDE,n.lspArgsOverride),n.lspTimeoutMs!==void 0&&A.set(t,O.LSP_TIMEOUT_MS,n.lspTimeoutMs),n.lspMaxProcesses!==void 0&&A.set(t,O.LSP_MAX_PROCESSES,n.lspMaxProcesses),n.tierBCommitCap!==void 0&&A.set(t,O.TIER_B_COMMIT_CAP,n.tierBCommitCap)}function Wd(t,e,r,n){let i=t instanceof _||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 DF(t,e,r){let n=Ll.randomUUID();A.createScope(n),A.set(n,O.WORKSPACE_ROOT,t),MT(n,r);try{let i=ee(),s=await X.checkTierBGate(n,i);if(s.available)return!0;if(!e)return m.error(g.ANALYZE_TIER_B_GATE_FAILED(s.reason??"")),we.exitCode=1,!1;m.warn(g.ANALYZE_TIER_B_GATE_NOT_READY(s.reason??""));let o=await m.askConfirm(g.ANALYZE_TIER_B_GATE_PROMPT,!0);return o||m.info(g.ANALYZE_TIER_B_GATE_DECLINED),o}finally{A.deleteScope(n)}}async function vF(t,e,r){let n;try{n=await SF(r.decisionsFile)}catch(a){let l=a instanceof _||a instanceof Error?a.message:String(a);m.error(l),we.exitCode=1;return}if(!n){m.error(g.ANALYZE_AGENT_AUTHORED_MISSING_PAYLOAD),we.exitCode=1;return}let i=FT(t,!1,r.stage),s=Ll.randomUUID(),o=ee();o.onLog(a=>{a.level===Oe.INFO&&(i.text=a.message)}),A.createScope(s),A.set(s,O.WORKSPACE_ROOT,e),A.set(s,O.TARGET_PATH,t),A.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),m.info(g.ANALYZE_STAGE_SUMMARY(a.staged))}else{let a=await X.analyze(s,o);Yd(a,i,!1)}}catch(a){Wd(a,t,!1,i)}finally{A.deleteScope(s)}}async function bF(t){m.header(g.ANALYZE_FLUSH_STAGED_L3_HEADER);let e=m.spinner(g.ANALYZE_FLUSH_STAGED_L3_START).start(),r=Ll.randomUUID(),n=ee();n.onLog(i=>{i.level===Oe.INFO&&(e.text=i.message)}),A.createScope(r),A.set(r,O.WORKSPACE_ROOT,t),A.set(r,O.FLUSH_STAGED_L3,!0);try{let i=await X.analyze(r,n);Yd(i,e,!1)}catch(i){Wd(i,void 0,!1,e)}finally{A.deleteScope(r)}}async function wF(t,e,r){return r.agentAuthored?t?(await vF(t,e,r),!0):(m.error(g.ANALYZE_AGENT_AUTHORED_MISSING_TARGET),we.exitCode=1,!0):!1}async function FF(t,e){return e.flushStagedL3?(await bF(t),!0):!1}async function kT(t,e=we.cwd(),r={}){await FF(e,r)||await wF(t,e,r)||await MF(t,e,r)}async function MF(t,e,r){let n,i=!t&&!!r.escalateToLsp;if(t){let l=wT();if(!l){m.error(g.ANALYZE_LLM_MISSING_ENV),we.exitCode=1;return}n=l}else if(i&&(n=wT()??void 0,!r.fallbackAst&&!await DF(e,!!r.isInteractive,r.lspTimeoutMs)))return;let s=FT(t,i),o=Ll.randomUUID(),a=ee();a.onLog(l=>{l.level===Oe.INFO&&(s.text=l.message)}),NF(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);Yd(l,s,!!r.fallbackAst)}catch(l){Wd(l,t,i,s)}finally{A.deleteScope(o)}}import GT from"process";import kF 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 Cl(t,e){t.onLog(r=>{r.level===Oe.INFO&&e&&(e.text=r.message)})}function Ni(t){return t instanceof _||t instanceof Error?t.message:String(t)}function GF(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){m.log(""),m.section(g.REVIEW_WHY_HEADER);for(let{file:i,entry:s}of n){m.log(z.INDENT_TWO+s.name+z.OPEN_PAREN+i+z.CLOSE_PAREN);for(let o of s.why??[])m.log(e+g.REVIEW_WHY_PREFIX+o.title),o.content&&m.log(r+o.content.split(z.NEWLINE).join(z.NEWLINE+r))}}}function xF(t,e,r){r.succeed(g.REVIEW_SUCCESS+(e?g.REVIEW_AGAINST+e:"")),m.log(""),m.log(g.REVIEW_FILES_CHANGED+t.filesChanged.length);let n=g.REVIEW_RISK_PREFIX+t.riskLevel;t.riskLevel===Ye.CRITICAL?m.error(n):t.riskLevel===Ye.HIGH?m.warn(n):m.log(n),m.log(""),m.log(t.analysis),GF(t.affectedNodes)}async function xT(t,e={},r=GT.cwd()){let n=e.format===Kt.JSON;n||m.header(g.REVIEW_HEADER);let i=n?void 0:m.spinner(g.REVIEW_START).start(),s=kF.randomUUID(),o=ee();Cl(o,i),A.createScope(s),A.set(s,O.WORKSPACE_ROOT,r),t&&A.set(s,O.BASE_REF,t);try{let a=await X.review(s,o);i?xF(a,t,i):m.log(JSON.stringify(a,null,2))}catch(a){let l=Ni(a);i?i.fail(g.REVIEW_FAIL+l):m.error(g.REVIEW_FAIL+l),GT.exitCode=1}finally{A.deleteScope(s)}}import jd from"process";import UF from"crypto";function HF(t,e){if(!e||e.length===0)return;let r=z.INDENT_TWO,n=r+z.INDENT_TWO,i=n+z.INDENT_TWO;m.log(r+g.IMPACT_ENTRY_WHY_LABEL(t));for(let s of e)m.log(n+g.IMPACT_WHY_PREFIX+s.title),s.content&&m.log(i+s.content.split(z.NEWLINE).join(z.NEWLINE+i))}function BF(t){let e=t.some(r=>r.edgeSource!==void 0);m.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 KF(t,e,r,n,i){if(m.header(g.IMPACT_BLAST_RADIUS_HEADER),t.length===0)m.warn(g.IMPACT_NO_DEPENDENTS),n&&m.warn(n),r&&r.workspaceFilesProcessed<r.workspaceFilesTotal&&m.warn(g.IMPACT_TIER_B_INCOMPLETE(r.workspaceFilesTotal-r.workspaceFilesProcessed,r.workspaceFilesTotal));else{BF(t),m.log(z.EMPTY);for(let o of t)HF(o.name,o.why)}i&&m.warn(g.IMPACT_RISK_NOTE_PREFIX+i),m.log(z.EMPTY);let s=g.IMPACT_RISK_PREFIX+e;e===Ye.CRITICAL?m.error(s):e===Ye.HIGH||e===Ye.UNKNOWN?m.warn(s):m.log(s),m.log(z.EMPTY)}function $F(t,e,r){r.succeed(g.IMPACT_SUCCESS+z.DOUBLE_QUOTE+e+z.DOUBLE_QUOTE),m.log(""),KF(t.blastRadius,t.riskLevel,t.tierBCoverage,t.coverageNote,t.riskNote)}function YF(t,e){if(t){t.warn(g.IMPACT_NOT_FOUND+z.DOUBLE_QUOTE+e+z.DOUBLE_QUOTE);return}m.log("null")}async function UT(t,e={},r=jd.cwd()){let n=e.format===Kt.JSON;if(n||m.header(g.IMPACT_HEADER),!t){m.error(g.IMPACT_MISSING_TARGET),jd.exitCode=1;return}let i=n?void 0:m.spinner(g.IMPACT_START+z.DOUBLE_QUOTE+t+z.DOUBLE_QUOTE+z.ELLIPSIS).start(),s=UF.randomUUID(),o=ee();Cl(o,i),A.createScope(s),A.set(s,O.WORKSPACE_ROOT,r),A.set(s,O.TARGET,t);try{let a=await X.impact(s,o);if(!a){YF(i,t);return}i?$F(a,t,i):m.log(JSON.stringify(a,null,2))}catch(a){let l=Ni(a);i?i.fail(g.IMPACT_FAIL+l):m.error(g.IMPACT_FAIL+l),jd.exitCode=1}finally{A.deleteScope(s)}}import Pl from"process";import qF from"crypto";var _e={CONTEXT_START:"<docuvia_context>",CONTEXT_END:"</docuvia_context>",L2_START_PREFIX:' <l2_module name="',L2_TYPE_MID:'" type="',L2_FILE_MID:'" file="',L2_MATCH_TYPE_MID:'" match_type="',L2_START_SUFFIX:'">',L2_END:" </l2_module>",L3_START_PREFIX:' <l3_decision title="',L3_SOURCE_MID:'" source="',L3_CONFIDENCE_MID:'" confidence="',L3_COMMIT_MID:'" commit="',L3_CREATED_AT_MID:'" created_at="',L3_VALIDITY_MID:'" validity="',L3_START_SUFFIX:'">',L3_CONTENT_PREFIX:" ",L3_END:" </l3_decision>",INCOMING_START:" <incoming>",INCOMING_END:" </incoming>",CALLER_PREFIX:' <caller name="',CALLER_MID:'" relation="',CALLER_SUFFIX:'" />',OUTGOING_START:" <outgoing>",OUTGOING_END:" </outgoing>",CALLEE_PREFIX:' <callee name="',CALLEE_MID:'" relation="',CALLEE_SUFFIX:'" />',INCOMING_UNPROCESSED_PREFIX:' <incoming tier_b_status="unprocessed" note="',OUTGOING_UNPROCESSED_PREFIX:' <outgoing tier_b_status="unprocessed" note="',UNPROCESSED_SUFFIX:'" />'};function WF(t){let e=_e.L3_START_PREFIX+t.title;return t.source&&(e+=_e.L3_SOURCE_MID+t.source),t.confidence!==void 0&&t.confidence!==null&&(e+=_e.L3_CONFIDENCE_MID+String(t.confidence)),t.commitHash&&(e+=_e.L3_COMMIT_MID+t.commitHash),t.createdAt&&(e+=_e.L3_CREATED_AT_MID+t.createdAt),t.validityStatus&&(e+=_e.L3_VALIDITY_MID+t.validityStatus),e+_e.L3_START_SUFFIX}function jF(t){let e=[];if(t.l2){let r=_e.L2_START_PREFIX+t.l2.name;t.l2.type&&(r+=_e.L2_TYPE_MID+t.l2.type),t.l2.filePath&&(r+=_e.L2_FILE_MID+t.l2.filePath),r+=_e.L2_MATCH_TYPE_MID+t.l2.matchType,e.push(r+_e.L2_START_SUFFIX)}for(let r of t.l3)e.push(WF(r)),e.push(_e.L3_CONTENT_PREFIX+(r.content||z.EMPTY)),e.push(_e.L3_END);return t.l2&&e.push(_e.L2_END),e}function VF(t,e){if(t.length>0){let r=[_e.INCOMING_START];for(let n of t)r.push(_e.CALLER_PREFIX+n.name+_e.CALLER_MID+n.linkType+_e.CALLER_SUFFIX);return r.push(_e.INCOMING_END),r}return e&&e.workspaceFilesProcessed<e.workspaceFilesTotal?[_e.INCOMING_UNPROCESSED_PREFIX+g.QUERY_TIER_B_INCOMING_UNPROCESSED(e.workspaceFilesTotal-e.workspaceFilesProcessed,e.workspaceFilesTotal)+_e.UNPROCESSED_SUFFIX]:[]}function zF(t,e){if(t.length>0){let r=[_e.OUTGOING_START];for(let n of t)r.push(_e.CALLEE_PREFIX+n.name+_e.CALLEE_MID+n.linkType+_e.CALLEE_SUFFIX);return r.push(_e.OUTGOING_END),r}return e&&e.ownFileLastProcessedAt===null?[_e.OUTGOING_UNPROCESSED_PREFIX+g.QUERY_TIER_B_OUTGOING_UNPROCESSED+_e.UNPROCESSED_SUFFIX]:[]}function JF(t){let e=t.context?.incoming??[],r=t.context?.outgoing??[],n=t.context?.tierBCoverage;return e.length===0&&r.length===0&&!n?[]:[...VF(e,n),...zF(r,n)]}function Nl(t){return[_e.CONTEXT_START,...jF(t),...JF(t),_e.CONTEXT_END].join(z.NEWLINE)}var QF={exact:g.QUERY_MATCH_TYPE_EXACT,keyword:g.QUERY_MATCH_TYPE_KEYWORD,neighbor:g.QUERY_MATCH_TYPE_NEIGHBOR};function XF(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+=QF[t.l2.matchType],m.info(e)}else m.warn(g.QUERY_NO_L2)}function ZF(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 eM(t){for(let e of t){let r=ZF(e);m.success(g.QUERY_L3_PREFIX+e.title+(r.length>0?g.QUERY_L3_PROVENANCE(r):"")),e.content&&m.log(z.INDENT_TWO+e.content.split(z.NEWLINE).join(z.NEWLINE+z.INDENT_TWO)),m.log(z.EMPTY)}}function HT(t,e,r){if(t.length===0){if(!r)return;m.section(e),m.warn(r),m.log(z.EMPTY);return}m.section(e),m.table([{header:g.QUERY_COL_NAME},{header:g.QUERY_COL_RELATION}],t.map(n=>[n.name,n.linkType])),m.log(z.EMPTY)}function tM(t,e){if(!(!t||!e||e.workspaceFilesProcessed>=e.workspaceFilesTotal))return g.QUERY_TIER_B_INCOMING_UNPROCESSED(e.workspaceFilesTotal-e.workspaceFilesProcessed,e.workspaceFilesTotal)}function rM(t,e){if(!(!t||!e||e.ownFileLastProcessedAt!==null))return g.QUERY_TIER_B_OUTGOING_UNPROCESSED}function nM(t){m.header(g.QUERY_CONTEXT_HEADER),XF(t),m.log(z.EMPTY),eM(t.l3);let e=t.context?.incoming??[],r=t.context?.outgoing??[],n=t.context?.tierBCoverage,i=tM(e.length===0,n),s=rM(r.length===0,n);HT(e,g.QUERY_INCOMING_HEADER,i),HT(r,g.QUERY_OUTGOING_HEADER,s),m.log(z.EMPTY)}async function iM(t,e){if(t)return t;e||(m.error(g.QUERY_MISSING_TARGET),Pl.exit(1)),m.header(g.QUERY_HEADER);let r=await m.askInput(g.QUERY_PROMPT_TARGET);return r||(m.error(g.QUERY_MISSING_TARGET_NON_TTY),Pl.exit(1)),r}function sM(t){if(t!==void 0&&(!Number.isInteger(t)||t<=0)){m.warn(g.QUERY_INVALID_LIMIT+t);return}return t}function oM(t,e,r){if(t)return;let n=m.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 aM(t,e,r,n,i,s){A.createScope(t),A.set(t,O.WORKSPACE_ROOT,r),A.set(t,O.TARGET,n),i!==void 0&&A.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),m.log("")),o}catch(o){let a=Ni(o);s?s.fail(g.QUERY_FAIL+a):m.error(g.QUERY_FAIL+a),Pl.exitCode=1;return}finally{A.deleteScope(t)}}async function BT(t,e={},r=Pl.cwd(),n=!1){let i=await iM(t,n),s=e.format===Kt.PROMPT||e.format===Kt.JSON,o=sM(e.limit),a=qF.randomUUID(),l=ee(),c=oM(s,i,l),u=await aM(a,l,r,i,o,c);u&&(e.format===Kt.JSON?m.log(JSON.stringify(u,null,2)):e.format===Kt.PROMPT?m.log(Nl(u)):nM(u))}import Vd from"fs/promises";import Pi from"path";import WT from"process";import _M from"crypto";function KT(t){let e=JSON.stringify(t).replace(/</g,"\\u003c"),r=`
182
+ `,n=[];return n.push(lM(t)),n.push(cM()),n.push(uM(e)),n.push("</body>"),n.push("</html>"),n.join(r)+r}function lM(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 - "+EM(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(`
183
+ `)}function cM(){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(`
184
+ `)}function uM(t){return["<script>",dM(t),pM(),gM(),fM(),mM(),hM(),"</script>"].join(`
185
+ `)}function dM(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(`
186
+ `)}function pM(){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(`
187
+ `)}function gM(){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(`
188
+ `)}function fM(){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(`
189
+ `)}function mM(){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(`
190
+ `)}function hM(){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(`
191
+ `)}function EM(t){return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}var $T="topology.json",YT="topology.html";function SM(t,e){let r=t?Pi.resolve(e,t):Pi.join(e,Ee);if(!r.startsWith(e+Pi.sep)&&r!==e)throw new _(R.FS_PATH_TRAVERSAL,`Resolved output directory "${r}" escapes workspace root "${e}" \u2014 possible path traversal via --out`);return r}function TM(t,e){m.info(g.EXPORT_STATS_LINE(t.stats.nodeCount,t.stats.linkCount,t.stats.groupCount)),t.collapsed&&m.info(g.EXPORT_COLLAPSED_LINE),t.stats.foldedLinkCount>0&&m.info(g.EXPORT_FOLDED_LINE(t.stats.foldedLinkCount)),e&&m.info(g.EXPORT_HTML_PATH_LINE(e))}async function jT(t={},e=WT.cwd()){m.header(g.EXPORT_HEADER);let r=m.spinner(g.EXPORT_START).start(),n=_M.randomUUID(),i=ee();i.onLog(a=>{a.level===Oe.INFO&&(r.text=a.message)}),A.createScope(n),A.set(n,O.WORKSPACE_ROOT,e),t.collapse&&A.set(n,O.COLLAPSE,t.collapse);let s,o;try{s=SM(t.out,Pi.resolve(e)),o=await X.exportTopology(n,i),await Vd.mkdir(s,{recursive:!0});let a=Pi.join(s,$T);await Vd.writeFile(a,JSON.stringify(o,null,2));let l;t.jsonOnly||(l=Pi.join(s,YT),await Vd.writeFile(l,KT(o))),r.succeed(g.EXPORT_SUCCESS+a),TM(o,l)}catch(a){let l=a instanceof _||a instanceof Error?a.message:String(a);r.fail(g.EXPORT_FAIL+l),WT.exitCode=1}finally{A.deleteScope(n)}}import VT from"process";import AM from"crypto";async function zT(t=VT.cwd()){m.header(g.SNAPSHOT_HEADER);let e=m.spinner(g.SNAPSHOT_START).start(),r=AM.randomUUID(),n=ee();n.onLog(i=>{i.level===Oe.INFO&&(e.text=i.message)}),A.createScope(r),A.set(r,O.WORKSPACE_ROOT,t);try{let i=await X.snapshot(r,n);e.succeed(g.SNAPSHOT_SUCCESS),m.info(g.SNAPSHOT_NODES_WRITTEN_LINE(i.nodesWritten)),m.info(g.SNAPSHOT_EDGES_WRITTEN_LINE(i.edgesWritten)),m.info(g.SNAPSHOT_MARKDOWN_WRITTEN_LINE(i.markdownFilesWritten))}catch(i){let s=i instanceof _||i instanceof Error?i.message:String(i);e.fail(g.SNAPSHOT_FAIL+s),VT.exitCode=1}finally{A.deleteScope(r)}}import JT from"process";import RM from"crypto";async function qT(t=JT.cwd(),e){m.header(g.HYDRATE_HEADER);let r=m.spinner(g.HYDRATE_START).start(),n=RM.randomUUID(),i=ee();i.onLog(s=>{s.level===Oe.INFO&&(r.text=s.message)}),A.createScope(n),A.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),m.info(g.HYDRATE_NODES_LOADED_LINE(s.nodesLoaded)),m.info(g.HYDRATE_EDGES_LOADED_LINE(s.edgesLoaded)),s.edgesDropped>0&&m.info(g.HYDRATE_EDGES_DROPPED_LINE(s.edgesDropped))}catch(s){let o=s instanceof _||s instanceof Error?s.message:String(s);r.fail(g.HYDRATE_FAIL+o),JT.exitCode=1}finally{A.deleteScope(n)}}import zd from"process";import yM from"crypto";var QT={[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 XT(t=zd.cwd()){m.header(g.SYNC_KNOWLEDGE_HEADER);let e=m.spinner(g.SYNC_KNOWLEDGE_START).start(),r=yM.randomUUID(),n=ee();n.onLog(s=>{s.level===Oe.INFO&&(e.text=s.message)}),A.createScope(r),A.set(r,O.WORKSPACE_ROOT,t);let i=zd.env.DOCUVIA_PUSH_TIMEOUT_MS;i&&A.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(QT[s.status]);return}e.succeed(QT[s.status])}catch(s){let o=s instanceof _||s instanceof Error?s.message:String(s);e.fail(g.SYNC_KNOWLEDGE_FAIL+o),zd.exitCode=1}finally{A.deleteScope(r)}}import Jd from"crypto";import*as ZT from"path";async function OM(t){let e=[xp,Up,Hp,Bp];for(let r of e)await vr(ZT.join(t,r),`<!-- ${Et} -->`,`<!-- ${Pr} -->`)}async function IM(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}),m.warn(g.UNINSTALL_PLATFORM_FAIL+i.name+g.UNINSTALL_PLATFORM_FAIL_MID+o),n.push(i.name)}return n}async function LM(t,e,r){let n=Jd.randomUUID();A.createScope(n),A.set(n,O.WORKSPACE_ROOT,t),A.set(n,O.KEEP_DB,e);try{let i=await X.uninstallGitHooks(n,r);return m.success(g.UNINSTALL_GIT_HOOKS_SUCCESS(i.postCommitRemoved,i.prePushRemoved)),i.knowledgeBranchDeleted&&m.success(g.UNINSTALL_KNOWLEDGE_BRANCH_DELETED),null}catch(i){let s=i instanceof _||i instanceof Error?i.message:String(i);return r.warn(g.UNINSTALL_GIT_HOOKS_FAIL_LOG,{error:s}),m.warn(g.UNINSTALL_GIT_HOOKS_FAIL+s),g.UNINSTALL_GIT_HOOKS_FAILURE_NAME}finally{A.deleteScope(n)}}async function CM(t,e,r){if(e)return null;let n=Jd.randomUUID();A.createScope(n),A.set(n,O.WORKSPACE_ROOT,t);try{return(await X.removeDocuviaDir(n,r)).removed&&m.success(g.UNINSTALL_DOCUVIA_DIR_REMOVED),null}catch(i){let s=i instanceof _||i instanceof Error?i.message:String(i);return r.warn(g.UNINSTALL_DOCUVIA_DIR_FAIL_LOG,{error:s}),m.warn(g.UNINSTALL_DOCUVIA_DIR_FAIL+s),g.UNINSTALL_DOCUVIA_DIR_FAILURE_NAME}finally{A.deleteScope(n)}}async function NM(t,e,r){if(e)return m.info(g.UNINSTALL_KEEP_DB),null;let n=Jd.randomUUID();A.createScope(n),A.set(n,O.WORKSPACE_ROOT,t);try{let i=await X.clean(n,r);return m.success(g.UNINSTALL_SUCCESS_CLEAN+i.message),null}catch(i){let s=i instanceof _||i instanceof Error?i.message:String(i);return r.warn(g.UNINSTALL_DB_CLEANUP_FAIL_LOG,{error:s}),m.warn(g.UNINSTALL_FAIL_CLEAN+s),g.UNINSTALL_DB_CLEANUP_FAILURE_NAME}finally{A.deleteScope(n)}}function PM(t){try{let e=IT(t);e.length>0?m.success(`Removed ${e.length} skill(s): ${e.join(", ")}`):m.info("No Docuvia skill files found to remove.")}catch(e){m.warn(`Skill removal failed: ${e instanceof Error?e.message:String(e)}`)}}async function DM(t,e,r,n){let i=await IM(t,e,n);await OM(e);let s=await LM(e,r,n);s&&i.push(s);let o=await NM(e,r,n);o&&i.push(o);let a=await CM(e,r,n);return a&&i.push(a),i}function vM(t){t.length>0?(m.warn(g.UNINSTALL_PARTIAL+t.join(", ")),process.exitCode=1):m.success(g.UNINSTALL_SUCCESS)}async function eA(t,e,r=!1,n=!1,i=!1){if(!t){m.error(g.UNINSTALL_INVALID_WORKSPACE_ROOT),process.exitCode=1;return}let s=ee();try{m.header(g.UNINSTALL_HEADER),m.info(g.UNINSTALL_START);let o=await Rl(g.UNINSTALL_HOOKS_SELECT,e,n),a=await DM(o,t,r,s);i&&PM(t),vM(a)}catch(o){let a=o instanceof Error?o.message:String(o);s.error(g.UNINSTALL_FAIL_LOG,{error:a}),m.warn(g.UNINSTALL_FAIL+a),process.exitCode=1}}import Di from"process";import FM from"crypto";var bM=[{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"}],tA=[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 wM(t){return bM.find(e=>e.test(t))?.category??g.DOCTOR_CATEGORY_OTHER}function rA(t){let e=new Map;for(let[r,n]of Object.entries(t)){let i=wM(r),s=e.get(i)??[];s.push([r,n]),e.set(i,s)}return e}var nA=[{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 iA(t,e){let r=e.status===K.PASS?`${Kl.PASS} ${g.DOCTOR_STATUS_PASS}`:`${Kl.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 sA(t){let e=Object.values(t);return{passed:e.filter(n=>n.status===K.PASS).length,total:e.length}}var MM=60;function kM(){return{llmBaseUrl:Di.env.AI_DOCUVIA_INTEGRATIONS_OPENAI_BASE_URL,llmApiKey:Di.env.AI_DOCUVIA_INTEGRATIONS_OPENAI_API_KEY,llmModel:Di.env.AI_DOCUVIA_MODEL||Di.env.AI_DOCUVIA_FAST_MODEL}}function GM(t){let e=rA(t);for(let r of tA){let n=e.get(r);!n||n.length===0||(m.section(r),m.table(nA,n.map(([i,s])=>iA(i,s))))}}function xM(t,e){let{passed:r,total:n}=sA(t);m.log(""),m.log(Mp.HORIZONTAL.repeat(MM));let i=g.DOCTOR_SUMMARY_PASSED(r,n);if(e){m.success(i);return}m.error(i),m.info(g.DOCTOR_FIX_HINT)}async function UM(t,e,r,n){A.createScope(t),A.set(t,O.WORKSPACE_ROOT,r);try{let i=await X.doctor(t,e,{...n,...kM()});return GM(i.diagnostics),xM(i.diagnostics,i.allPassed),i.allPassed}catch(i){let s=i instanceof _||i instanceof Error?i.message:String(i);return m.error(g.DOCTOR_FAIL+s),!1}finally{A.deleteScope(t)}}function HM(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 oA(t,e={}){try{m.header(g.DOCTOR_HEADER),m.info(g.DOCTOR_START);let r=FM.randomUUID(),n=ee();await UM(r,n,t,HM(e))||(Di.exitCode=1)}catch(r){let n=r instanceof Error?r.message:String(r);m.error(g.DOCTOR_FAIL+n),Di.exitCode=1}}import rn from"process";import qd from"crypto";var Dl={LIST:"list",ENABLE:"enable",DISABLE:"disable",CHECK:"check"};function lA(t){return!!t&&Object.values(ar).includes(t)}async function BM(t){let e=qd.randomUUID(),r=ee();A.createScope(e),A.set(e,O.WORKSPACE_ROOT,t);try{let n=await X.listHooks(e,r);m.header(g.HOOKS_HEADER),m.table([{header:g.HOOKS_COL_NAME},{header:g.HOOKS_COL_STATUS}],Object.values(ar).map(i=>[i,n[i]?g.HOOKS_STATUS_ENABLED:g.HOOKS_STATUS_DISABLED]))}catch(n){let i=n instanceof _||n instanceof Error?n.message:String(n);m.error(g.HOOKS_LIST_FAIL+i),rn.exitCode=1}finally{A.deleteScope(e)}}async function aA(t,e,r){if(!lA(e)){m.error(g.HOOKS_INVALID_NAME(e,Object.values(ar))),rn.exitCode=1;return}let n=qd.randomUUID(),i=ee();A.createScope(n),A.set(n,O.WORKSPACE_ROOT,t),A.set(n,O.HOOK_NAME,e),A.set(n,O.HOOK_ENABLED,r);try{let s=await X.setHookEnabled(n,i);m.success(r?g.HOOKS_ENABLED(e):g.HOOKS_DISABLED(e)),m.table([{header:g.HOOKS_COL_NAME},{header:g.HOOKS_COL_STATUS}],Object.values(ar).map(o=>[o,s[o]?g.HOOKS_STATUS_ENABLED:g.HOOKS_STATUS_DISABLED]))}catch(s){let o=s instanceof _||s instanceof Error?s.message:String(s);m.error(g.HOOKS_SET_FAIL+o),rn.exitCode=1}finally{A.deleteScope(n)}}async function KM(t,e){if(!lA(e)){rn.exitCode=1;return}let r=qd.randomUUID();A.createScope(r),A.set(r,O.WORKSPACE_ROOT,t);try{let n=await X.listHooks(r,he());rn.exitCode=n[e]?0:1}catch{rn.exitCode=0}finally{A.deleteScope(r)}}async function cA(t,e,r=rn.cwd()){switch(t){case Dl.LIST:await BM(r);return;case Dl.ENABLE:await aA(r,e,!0);return;case Dl.DISABLE:await aA(r,e,!1);return;case Dl.CHECK:await KM(r,e);return;default:m.error(g.HOOKS_UNKNOWN_SUBCOMMAND(t)),rn.exitCode=1}}import{Server as _k}from"@modelcontextprotocol/sdk/server/index.js";import{StdioServerTransport as Sk}from"@modelcontextprotocol/sdk/server/stdio.js";import{CallToolRequestSchema as Tk,ListToolsRequestSchema as Ak}from"@modelcontextprotocol/sdk/types.js";import VM from"crypto";import{z as zM}from"zod";import{createRequire as $M}from"module";import{existsSync as YM}from"fs";import{dirname as uA,join as WM}from"path";import{fileURLToPath as jM}from"url";var vl;function bl(){if(vl!==void 0)return vl;let t=uA(jM(import.meta.url));for(;;){let e=WM(t,"package.json");if(YM(e)){let n=$M(import.meta.url)(e);if(typeof n.version!="string")throw _.wrap(R.FS_READ_FAILED,`Package manifest at ${e} has no string "version" field`,void 0);return vl=n.version,vl}let r=uA(t);if(r===t)break;t=r}throw _.wrap(R.FS_READ_FAILED,"Could not locate the CLI package.json by walking up from the running module",void 0)}var dA="docuvia-local-mcp",pA=bl(),gA=["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(`
192
+ `),fA="Docuvia Local MCP Server running on stdio",mA=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 JM=zM.object({}).strict(),qM="docuvia_init",QM="Initialize the local Docuvia SQLite database in the current workspace.",XM="object",Qd={definition:{name:qM,description:QM,inputSchema:{type:XM,properties:{}}},handler:wt(Ue.ERROR_INITIALIZING,async t=>{JM.parse(t??{});let e=VM.randomUUID(),r=ee();A.createScope(e),A.set(e,O.WORKSPACE_ROOT,process.cwd());try{let n=await yl(process.cwd(),()=>X.init(e,r));return{content:[{type:Ke,text:n.message}]}}finally{A.deleteScope(e)}})};import ZM from"crypto";import{z as Xd}from"zod";var ek=Xd.object({target:Xd.string().min(1),limit:Xd.number().int().positive().optional()}).strict(),tk="docuvia_query",Zd={definition:{name:tk,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=ek.parse(t??{}),r=ZM.randomUUID(),n=ee();A.createScope(r),A.set(r,O.WORKSPACE_ROOT,process.cwd()),A.set(r,O.TARGET,e.target),e.limit!==void 0&&A.set(r,O.LIMIT,e.limit);try{let i=await X.query(r,n);return{content:[{type:Ke,text:Nl(i)},{type:Ke,text:Ue.QUERY_NEXT_STEP_HINT}]}}finally{A.deleteScope(r)}})};import rk from"crypto";import{z as hA}from"zod";var nk=hA.object({target:hA.string().min(1)}).strict(),ik="docuvia_impact",ep={definition:{name:ik,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=nk.parse(t??{}),r=rk.randomUUID(),n=ee();A.createScope(r),A.set(r,O.WORKSPACE_ROOT,process.cwd()),A.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{A.deleteScope(r)}})};import sk from"crypto";import{z as ok}from"zod";var ak=ok.object({}).strict(),lk="docuvia_status",tp={definition:{name:lk,description:Ue.STATUS_TOOL_DESCRIPTION,inputSchema:{type:"object",properties:{}}},handler:wt(Ue.ERROR_GETTING_STATUS,async t=>{ak.parse(t??{});let e=sk.randomUUID(),r=ee();A.createScope(e),A.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{A.deleteScope(e)}})};import ck from"crypto";import{z as EA}from"zod";var uk=EA.object({baseRef:EA.string().min(1).optional()}).strict(),dk="docuvia_detect_changes",rp={definition:{name:dk,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=uk.parse(t??{}),r=ck.randomUUID(),n=ee();A.createScope(r),A.set(r,O.WORKSPACE_ROOT,process.cwd()),e.baseRef&&A.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{A.deleteScope(r)}})};import pk from"crypto";import{z as nn}from"zod";var gk=nn.object({title:nn.string().min(1,"title is required"),content:nn.string().min(1,"content is required"),nodeType:nn.enum(["change","rule","decision","context"]),confidence:nn.number().min(0).max(1)}),fk=nn.object({targetPath:nn.string().min(1,"targetPath is required").describe("File path (relative to workspace root) these decisions apply to"),decisions:nn.array(gk).min(1,"at least one decision is required").describe("Array of L3 decisions to stage for this file")}).strict(),mk="docuvia_apply_decision",hk="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.",Ek="object",np={definition:{name:mk,description:hk,inputSchema:{type:Ek,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=fk.parse(t??{}),r=pk.randomUUID(),n=ee();A.createScope(r),A.set(r,O.WORKSPACE_ROOT,process.cwd()),A.set(r,O.TARGET_PATH,e.targetPath),A.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{A.deleteScope(r)}})};var ip={[Qd.definition.name]:Qd,[Zd.definition.name]:Zd,[ep.definition.name]:ep,[tp.definition.name]:tp,[rp.definition.name]:rp,[np.definition.name]:np},_A=Object.values(ip).map(t=>t.definition);async function SA(){let t=new _k({name:dA,version:pA},{capabilities:{tools:{}},instructions:gA});t.setRequestHandler(Ak,async()=>({tools:_A})),t.setRequestHandler(Tk,async n=>{let{name:i,arguments:s}=n.params,o=ip[i];if(o)return o.handler(s);throw new Error(mA(i))});let e=new Sk;await t.connect(e),ee().info(fA)}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"},wl={[W.INIT]:"Initialize local project and agent hooks",[W.MCP]:"Start the local MCP stdio server",[W.CLEAN]:"Wipe the local Docuvia SQLite database",[W.STATUS]:"Show local knowledge graph row counts",[W.PUBLISH]:"Push locally-generated decisions to the remote backend",[W.ANALYZE]:"Detect project type/tags and run full AST ingestion into the knowledge graph",[W.REVIEW]:"Detect changed-file blast radius and risk level",[W.IMPACT]:"Show the blast radius/risk level for a symbol or module",[W.QUERY]:"Query the local knowledge graph (keyword + structural search)",[W.EXPORT_TOPOLOGY]:"Export the knowledge graph as topology.json/topology.html",[W.SNAPSHOT]:"Pack the local knowledge graph onto the hidden knowledge branch",[W.HYDRATE]:"Rebuild the local database from the hidden knowledge branch",[W.SYNC_KNOWLEDGE]:"Reconcile the hidden knowledge branch with the remote (fetch/merge/push)",[W.UNINSTALL]:"Uninstall Docuvia2 integrations and local DB",[W.DOCTOR]:"Run diagnostic checks on Docuvia2 setup",[W.HOOKS]:"List/enable/disable Docuvia's automation hooks (context-injection, commit-l3-write, tier-b-c-prepush)"},$e={[W.INIT]:[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 sp(){return["Usage:",...Object.values(W).map(t=>` docuvia ${t.padEnd(40)} # ${wl[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(`
193
+ `)}function TA(t){let e=$e[t],r=[`docuvia ${t}`,` ${wl[t]}`];return e.length>0&&r.push("","Flags:",...e.map(n=>` ${n}`)),r.join(`
194
+ `)}var Fl=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(tn.UNKNOWN_OPTIONS(n.join(", ")))}};function Ml(t){if(t===void 0)return;let e=Object.values(Kt);if(e.includes(t))return t;throw new Error(tn.INVALID_FORMAT(t,e.join(", ")))}RA.config({quiet:!0});function yA(){m.error(sp())}function yk(){return bl()}function Ok(t){return t===F.HELP||t===F.HELP_SHORT}function Ik(t){return t===F.VERSION||t===F.VERSION_SHORT}function OA(t){return t===F.INTERACTIVE||t===F.INTERACTIVE_SHORT}async function Lk(t){t.parser.checkUnknownFlags($e[W.INIT]);let e=t.parser.getFlagValue(F.PLATFORM),r=t.parser.hasFlag(F.SKILLS);await LT(t.workspaceRoot,e,t.isInteractive,r)}async function Ck(t){t.parser.checkUnknownFlags($e[W.MCP]),await SA()}async function Nk(t){t.parser.checkUnknownFlags($e[W.CLEAN]),await CT(t.workspaceRoot,t.isInteractive)}async function Pk(t){t.parser.checkUnknownFlags($e[W.STATUS]),await PT(t.workspaceRoot)}async function Dk(t){t.parser.checkUnknownFlags($e[W.PUBLISH]);let e=t.parser.getPositional(0),r=t.parser.getFlagValue(F.COMMIT_SHA);await DT({projectId:e,commitSha:r},t.workspaceRoot,t.isInteractive)}async function vk(t){t.parser.checkUnknownFlags($e[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),h=t.parser.hasFlag(F.TIER_C_ALL);await kT(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:h})}async function bk(t){t.parser.checkUnknownFlags($e[W.REVIEW]);let e=t.parser.getPositional(0),r=Ml(t.parser.getFlagValue(F.FORMAT));await xT(e,{format:r},t.workspaceRoot)}async function wk(t){t.parser.checkUnknownFlags($e[W.IMPACT]);let e=t.parser.getPositional(0);if(!e){m.error(g.IMPACT_MISSING_TARGET),$t.exitCode=1;return}let r=Ml(t.parser.getFlagValue(F.FORMAT));await UT(e,{format:r},t.workspaceRoot)}async function Fk(t){t.parser.checkUnknownFlags($e[W.QUERY]);let e=t.parser.getPositional(0),r=Ml(t.parser.getFlagValue(F.FORMAT)),n=t.parser.getFlagValue(F.LIMIT),i=n?Number(n):void 0;await BT(e,{format:r,limit:i},t.workspaceRoot,t.isInteractive)}async function Mk(t){t.parser.checkUnknownFlags($e[W.EXPORT_TOPOLOGY]);let e=t.parser.getFlagValue(F.OUT),r=t.parser.hasFlag(F.JSON_ONLY),n=t.parser.getFlagValue(F.COLLAPSE);await jT({out:e,jsonOnly:r,collapse:n},t.workspaceRoot)}async function kk(t){t.parser.checkUnknownFlags($e[W.SNAPSHOT]),await zT(t.workspaceRoot)}async function Gk(t){t.parser.checkUnknownFlags($e[W.HYDRATE]);let e=t.parser.hasFlag(F.FORCE)||t.parser.hasFlag(F.FORCE_SHORT);await qT(t.workspaceRoot,{force:e})}async function xk(t){t.parser.checkUnknownFlags($e[W.UNINSTALL]);let e=t.parser.getFlagValue(F.PLATFORM),r=t.parser.hasFlag(F.KEEP_DB),n=t.parser.hasFlag(F.SKILLS);await eA(t.workspaceRoot,e,r,t.isInteractive,n)}async function Uk(t){t.parser.checkUnknownFlags($e[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 oA(t.workspaceRoot,{skipDb:e,skipGit:r,skipHooks:n,skipLogs:i,skipLsp:s,skipLlm:o,fix:a})}async function Hk(t){t.parser.checkUnknownFlags($e[W.SYNC_KNOWLEDGE]),await XT(t.workspaceRoot)}async function Bk(t){t.parser.checkUnknownFlags($e[W.HOOKS]);let e=t.parser.getPositional(0),r=t.parser.getPositional(1);await cA(e,r,t.workspaceRoot)}var Kk={[W.INIT]:Lk,[W.MCP]:Ck,[W.CLEAN]:Nk,[W.STATUS]:Pk,[W.PUBLISH]:Dk,[W.ANALYZE]:vk,[W.REVIEW]:bk,[W.IMPACT]:wk,[W.QUERY]:Fk,[W.EXPORT_TOPOLOGY]:Mk,[W.SNAPSHOT]:kk,[W.HYDRATE]:Gk,[W.SYNC_KNOWLEDGE]:Hk,[W.UNINSTALL]:xk,[W.DOCTOR]:Uk,[W.HOOKS]:Bk};async function $k(t,e,r){let n=OA(t)?void 0:t;if(n)return n;e||(yA(),$t.exit(1)),r||(m.error(g.CLI_INTERACTIVE_NO_TTY),$t.exit(1)),m.header(g.CLI_HEADER);let i=Object.values(W).filter(o=>o!==W.MCP).map(o=>({name:o,value:o,description:wl[o]}));return await m.askSelect(g.CLI_PROMPT_ACTION,i)}function Yk(t){return Ok(t)?(m.log(sp()),!0):Ik(t)?(m.log(yk()),!0):!1}function Wk(t,e){let r=OA(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 jk(t,e,r,n,i,s){if(!t||!e){m.error(g.CLI_UNKNOWN_COMMAND+t),yA(),$t.exit(1);return}if(r.hasFlag(F.HELP)||r.hasFlag(F.HELP_SHORT)){m.log(TA(t));return}n&&!i&&m.warn(g.CLI_INTERACTIVE_UNAVAILABLE),await e({parser:r,isInteractive:i,workspaceRoot:s})}async function Vk(){let t=$t.argv[2];if(Yk(t))return;let e=$t.argv.slice(3),r=new Fl(e),n=$t.cwd(),{wantsInteractive:i,interactiveEligible:s}=Wk(t,r),o=await $k(t,i,s),a=o?Kk[o]:void 0;try{await jk(o,a,r,i,s,n)}catch(l){let c=l instanceof Error?l.message:String(l);m.error(g.CLI_FATAL_ERROR+c),$t.exit(1)}}Vk().catch(t=>{m.error(g.CLI_FATAL_ERROR+(t instanceof Error?t.message:String(t))),$t.exit(1)});
195
195
  /*! Bundled license information:
196
196
 
197
197
  is-extglob/index.js: