@precisionutilityguild/liquid-shadow 1.0.2 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +69 -144
- package/dist/data/migrations/008_crystallization.sql +13 -0
- package/dist/data/migrations/009_intent_vectors.sql +8 -0
- package/dist/entry/cli/index.js +485 -200
- package/dist/entry/mcp/server.js +194 -166
- package/dist/index.js +60 -48
- package/dist/logic/domain/embeddings/worker.js +1 -1
- package/dist/logic/parser/index.js +36 -0
- package/dist/logic/parser/worker.js +1 -0
- package/dist/web-manifest.json +29 -23
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import Ln from"fast-glob";import nt from"fs";import kn from"ignore";import It from"path";var ke=["**/node_modules/**","**/.git/**","**/dist/**","**/build/**","**/vendor/**","**/.next/**","**/.cache/**","**/coverage/**","**/*.min.js"],St=["**/*.{ts,tsx,yaml,yml,php,py,go}","**/*.prisma","**/*.{graphql,gql}","**/Dockerfile*","**/.env*","**/package.json","**/lerna.json","**/turbo.json","**/pnpm-workspace.yaml"];var vi={FILTERED_QUERY_LIMIT_MULTIPLIER:3,SCORE_BASE:1e3,EXACT_MATCH_BONUS:500,RECENT_FILE_BOOST:80,OLDER_FILE_BOOST:30,RECENT_FILE_THRESHOLD_DAYS:7,OLDER_FILE_THRESHOLD_DAYS:30,FUZZY_MATCH_LIMIT:30,ENABLE_LEXICAL_SCORING:process.env.ENABLE_LEXICAL_SCORING!=="false",LEXICAL_WEIGHT:parseFloat(process.env.LEXICAL_WEIGHT??String(.4)),GRAVITY_STRUCTURAL_WEIGHT:.5};var Ce={DEFAULT_CONCURRENCY:parseInt(process.env.INDEX_CONCURRENCY??String(5),10)};async function it(i,e=[]){let t=kn(),n=It.join(i,".gitignore");return nt.existsSync(n)&&t.add(nt.readFileSync(n,"utf8")),e.length>0&&t.add(e),(await Ln(St,{cwd:i,absolute:!0,ignore:ke})).filter(o=>{let l=It.relative(i,o);return!t.ignores(l)}).map(o=>({path:o,mtime:nt.statSync(o).mtimeMs}))}import $n from"@swc/core";import at from"fs";function Lt(i){let e=i.split(`
|
|
2
|
-
`),t=[],n=0;for(let s of e)t.push(n),n+=s.length+1;return t}function
|
|
3
|
-
`)[0].trim();return t.length>200?t.substring(0,197)+"...":t}function ve(i,e,t){let n=i.toLowerCase(),s=e.toLowerCase();return n.includes("components/")||n.endsWith(".tsx")?"Component":n.startsWith("use")||s.startsWith("use")?"Hook":n.includes("models/")||s.endsWith("model")?"Model":n.includes("services/")||n.includes("controllers/")||n.includes("handlers/")||n.includes("mcp/")||n.endsWith("service.ts")||n.endsWith("controller.ts")||n.endsWith("handler.ts")||s.endsWith("service")||s.endsWith("controller")||s.endsWith("handler")?"Service":n.includes("repositories/")||n.includes("repos/")||n.endsWith("repository.ts")||n.endsWith("repo.ts")||s.endsWith("repository")||s.endsWith("repo")?"Repository":t==="TsInterfaceDeclaration"||t==="TsTypeAliasDeclaration"?"Type Definition":"Other"}function ge(i){let e=[];return/\b(fetch|axios|superagent|got)\s*\(|import\s+.*\b(http|https|node-fetch)\b/i.test(i)&&e.push("Network"),(/\b(knex|prisma|typeorm|mongoose|sequelize|pg|mysql|sqlite3)\b/i.test(i)||/\b(SELECT\s+.*FROM|INSERT\s+INTO|UPDATE\s+.*SET|DELETE\s+FROM)\b/i.test(i)||/\.query\s*\(|\.execute\s*\(/i.test(i)&&/db|database|client|pool/i.test(i))&&e.push("Database"),(/\bfs\./i.test(i)||/\b(readFileSync|writeFileSync|readFile|writeFile|readdir)\b/.test(i)||/import\s+.*\bfs\b/.test(i))&&e.push("File System"),(/\b(localStorage|sessionStorage|indexedDB)\./.test(i)||/\bdocument\.cookie\b/.test(i))&&e.push("Browser Storage"),e}function K(i,e){if(!i)return"";let t=i.replace(/^([\s\S]*?\*\/)?\s*/,"").replace(/^.*\} from ['"].*['"];?\s*/,"").replace(/^import .*['"];?\s*/,"").trim();if(e==="TsInterfaceDeclaration"||e==="TsTypeAliasDeclaration")return t;let n=0,s=0,r=t.length;for(let o=0;o<t.length;o++){let l=t[o];if(l==="(")n++;else if(l===")")n--;else if(l==="<")s++;else if(l===">")s--;else if(l==="{"){if(n===0&&s===0){r=o;break}}else if(l==="; "&&n===0&&s===0){r=o;break}else if(l==="="&&t[o+1]===">"&&n===0&&s===0){r=o+2;break}}return t.substring(0,r).trim()}function Nt(i){let e=[];for(let t of i)t.type==="ImportDeclaration"&&e.push({module:t.source.value,name:t.specifiers.map(n=>n.type==="ImportDefaultSpecifier"?"default":n.type==="ImportNamespaceSpecifier"?"*":n.local?.value||n.imported?.value||"*").join("","")}),t.type==="ExportAllDeclaration"&&e.push({module:t.source.value,name:"*"}),t.type==="ExportNamedDeclaration"&&t.source&&e.push({module:t.source.value,name:t.specifiers.map(n=>n.type==="ExportSpecifier"?n.orig.value:"*").join(", ")});return e}function Dt(i,e,t,n,s,r,o,l){let c=[];for(let a of i){if(a.type==="ExportDeclaration"){let u=a.declaration,p=u.type,d="";p==="VariableDeclaration"?d=u.declarations.map(g=>g.id.value).join("",""):d=u.id?.value||u.identifier?.value||"anonymous";let f=O(a.span.start-e,t),h=O(a.span.end-e,t),E=G(f,r,n),y=l(a.span),m=[];if(a.type==="ExportDeclaration"&&(p==="ClassDeclaration"||p==="ClassExpression")){let g=u.body||[];for(let b of g)if(b.type==="ClassMethod"||b.type==="ClassProperty"){let A=b.key.value;if(!A)continue;let C=O(b.span.start-e,t),I=O(b.span.end-e,t),v=l(b.span),$=G(C,r,n);m.push({name:A,kind:b.type,signature:K(v,b.type),line:M(C,s),endLine:M(I,s),doc:$,classification:b.type==="ClassMethod"?"Method":"Property",capabilities:"[]"})}}else if(p==="FunctionDeclaration"&&u.body?.type==="BlockStatement")m=st(u.body.stmts,e,t,n,s,r,l);else if(p==="VariableDeclaration"){for(let g of u.declarations)if(g.init&&(g.init.type==="ArrowFunctionExpression"||g.init.type==="FunctionExpression")&&g.init.body?.type==="BlockStatement"){m=st(g.init.body.stmts,e,t,n,s,r,l);break}}c.push({name:d,kind:p,signature:K(y,p),line:M(f,s),endLine:M(h,s),doc:E,classification:ve(o,d,p),capabilities:JSON.stringify(ge(y)),members:m})}if(a.type==="ExportNamedDeclaration"){for(let u of a.specifiers)if(u.type==="ExportSpecifier"){let p=O(a.span.start-e,t),d=O(a.span.end-e,t),f=G(p,r,n);c.push({name:u.exported?.value||u.orig.value,kind:"ExportSpecifier",signature:`export { ${u.orig.value} }`,line:M(p,s),endLine:M(d,s),doc:f,classification:"Export mapping",capabilities:"[]"})}}if(a.type==="ExportDefaultDeclaration"){let u=O(a.span.start-e,t),p=O(a.span.end-e,t),d=G(u,r,n),f=l(a.span),h=[];if(a.decl.type==="ClassExpression"||a.decl.type==="ClassDeclaration"){let E=a.decl.body||[];for(let y of E)if(y.type==="ClassMethod"||y.type==="ClassProperty"){let m=y.key.value;if(!m)continue;let g=O(y.span.start-e,t),b=O(y.span.end-e,t),A=l(y.span),C=G(g,r,n);h.push({name:m,kind:y.type,signature:K(A,y.type),line:M(g,s),endLine:M(b,s),doc:C,classification:y.type==="ClassMethod"?"Method":"Property",capabilities:"[]"})}}else(a.decl.type==="FunctionExpression"||a.decl.type==="FunctionDeclaration"||a.decl.type==="ArrowFunctionExpression")&&a.decl.body?.type==="BlockStatement"&&(h=st(a.decl.body.stmts,e,t,n,s,r,l));c.push({name:"default",kind:"DefaultExport",signature:K(f,"DefaultExport"),line:M(u,s),endLine:M(p,s),doc:d,classification:"Default Export",capabilities:JSON.stringify(ge(f)),members:h})}if(a.type==="ExportAllDeclaration"){let u=O(a.span.start-e,t),p=O(a.span.end-e,t),d=a.source.value,f=G(u,r,n);c.push({name:"*",kind:"ExportAllDeclaration",signature:`export * from "${d}"`,line:M(u,s),endLine:M(p,s),doc:f,classification:"Re-export",capabilities:"[]"})}}return c}function st(i,e,t,n,s,r,o){let l=[];for(let c of i){if(c.type==="VariableDeclaration")for(let a of c.declarations){let u=[],p=d=>{if(d.type==="Identifier")u.push({name:d.value,span:d.span});else if(d.type==="ArrayPattern")for(let f of d.elements)f&&p(f);else if(d.type==="ObjectPattern")for(let f of d.properties)f.type==="AssignmentPatternProperty"?u.push({name:f.key.value,span:f.span}):f.type==="KeyValuePatternProperty"&&p(f.value)};p(a.id);for(let d of u){let f=O(d.span.start-e,t),h=O(d.span.end-e,t),E=o(d.span),y=G(f,r,n);l.push({name:d.name,kind:"VariableDeclaration",signature:K(E,"VariableDeclaration"),line:M(f,s),endLine:M(h,s),doc:y,classification:"Internal Variable",capabilities:"[]"})}}if(c.type==="FunctionDeclaration"){let a=c.identifier?.value||c.ident?.value||"anonymous",u=O(c.span.start-e,t),p=O(c.span.end-e,t),d=o(c.span),f=G(u,r,n);l.push({name:a,kind:"FunctionDeclaration",signature:K(d,"FunctionDeclaration"),line:M(u,s),endLine:M(p,s),doc:f,classification:"Internal Function",capabilities:"[]"})}if(c.type==="ReturnStatement"&&c.argument?.type==="ObjectExpression")for(let a of c.argument.properties){let u="",p=a.span||a.key?.span||a.ident?.span;if(a.type==="KeyValueProperty"){let d=a.key;u=d?.value||d?.raw||(d?.type==="Identifier"?d.value:"")}else a.type==="MethodProperty"?u=a.key?.value||a.key?.raw||"":a.type==="ShorthandProperty"?u=a.ident?.value||"":a.type==="Identifier"&&(u=a.value||"");if(u&&p){let d=O(p.start-e,t),f=O(p.end-e,t),h=o(p),E=G(d,r,n);l.push({name:u,kind:"ReturnProperty",signature:K(h,"ReturnProperty"),line:M(d,s),endLine:M(f,s),doc:E,classification:"Return Member",capabilities:"[]"})}}if(c.type==="ExpressionStatement"&&c.expression.type==="CallExpression"){let a=c.expression;if(a.callee.type==="MemberExpression"&&(a.callee.property?.value==="on"||a.callee.property?.value==="once")){let u=a.arguments[0]?.expression?.value,p=a.arguments[1]?.expression;if(u&&p&&(p.type==="ArrowFunctionExpression"||p.type==="FunctionExpression")){let d=O(p.span.start-e,t),f=O(p.span.end-e,t),h=o(p.span);l.push({name:`on:${u}`,kind:p.type,signature:K(h,p.type),line:M(d,s),endLine:M(f,s),doc:"",classification:"Event Handler",capabilities:"[]"})}}if(a.callee.type==="Identifier"&&a.callee.value==="addRoute"&&a.arguments.length>=3){let u=a.arguments[2].expression;if(u.type==="StringLiteral"){let p=u.value,d=O(a.span.start-e,t),f=O(a.span.end-e,t),h=o(a.span);l.push({name:p,kind:"HTTP Route",signature:K(h,"HTTP Route"),line:M(d,s),endLine:M(f,s),doc:"",classification:"Service Boundary",capabilities:JSON.stringify({path:p})})}}}}return l}function Mt(i,e,t,n,s){let r=[];function o(l){if(!(!l||typeof l!="object")){if(l.type==="CallExpression"){let c=Cn(l);if(c){let a=O(l.span.start-e,t);r.push({...c,line:M(a,n),snippet:s(l.span)})}}for(let c of Object.keys(l)){if(c==="span")continue;let a=l[c];Array.isArray(a)?a.forEach(o):typeof a=="object"&&o(a)}}}return i.forEach(o),r}function Cn(i){let{callee:e,arguments:t}=i;if(!t||t.length===0)return null;if(e.type==="Identifier"&&e.value,e.type==="Identifier"&&e.value==="addRoute"&&t.length>=3){let n=t[2].expression;if(n.type==="StringLiteral")return{type:"api_route",name:n.value,direction:"consume"}}if(e.type==="MemberExpression"&&e.property?.type==="Identifier"){let n=e.property.value;if(n==="emit"&&t[0].expression.type==="StringLiteral")return{type:"socket_event",name:t[0].expression.value,direction:"produce"};if(n==="on"&&t[0].expression.type==="StringLiteral")return{type:"socket_event",name:t[0].expression.value,direction:"consume"};if(["get","post","put","delete","patch"].includes(n)&&t[0].expression.type==="StringLiteral"){let r=t[0].expression.value,o=e.object.type==="Identifier"?e.object.value:"";if(["axios","http","request","appApi","restApi","adminApi","client"].includes(o))return{type:"api_route",name:r,direction:"produce"};if(r.startsWith("/"))return{type:"api_route",name:r,direction:"consume"}}}return e.type==="Identifier"&&e.value==="fetch"&&t[0].expression.type==="StringLiteral"?{type:"api_route",name:t[0].expression.value,direction:"produce"}:null}function ye(i){let{classification:e,capabilities:t,exports:n,fileName:s}=i,r={Network:"API integration",Database:"data persistence","File System":"file I/O operations","Browser Storage":"client-side storage"},o=t.map(h=>r[h]).filter(Boolean).join(" and "),c={Component:(h,E)=>{let y=E.find(g=>g.kind==="FunctionDeclaration"||g.kind==="ClassDeclaration")?.name,m=y?`React component: ${y}`:"React UI component";return h?`${m} with ${h}`:m},Hook:(h,E)=>{let y=E.find(g=>g.name.startsWith("use"))?.name,m=y?`Custom React hook: ${y}`:"Custom React hook";return h?`${m} for ${h}`:m},Service:(h,E)=>{let m=`Service layer: ${E[0]?.name||"Service"}`;return h?`${m} handling ${h}`:m},Repository:(h,E)=>`Data repository: ${E[0]?.name||"Repository"} for ${h||"data access"}`,"Type Definition":(h,E)=>`Type definitions: ${E.slice(0,3).map(m=>m.name).join("")}${E.length>3?"...":""}`,Model:(h,E)=>`Data model: ${E[0]?.name||"Model"}`,"HTTP Route":(h,E)=>{let y=E.filter(m=>m.classification==="Service Boundary");return y.length>0?`API endpoints: ${y.slice(0,3).map(m=>m.name).join("")}`:"API route handler"},"Micro IR (PHP)":(h,E)=>{let y=E.some(g=>g.classification==="Service Boundary"),m=E.find(g=>g.kind==="ClassDeclaration")?.name;return y?"PHP controller with API routes":m?`PHP class: ${m}`:"PHP module"},"Micro IR (Python)":(h,E)=>{let y=E.some(g=>g.classification==="Service Boundary"),m=E.find(g=>g.kind==="ClassDeclaration")?.name;return y?"Python API handler with routes":m?`Python class: ${m}`:"Python module"},"Micro IR (Go/TS) ":(h,E)=>{let y=E.some(g=>g.kind==="TypeDeclaration"),m=E.filter(g=>g.kind==="FunctionDeclaration");return y&&m.length>0?`Go package: types and ${m.length} function(s)`:y?"Go package: type definitions":m.length>0?`Go package: ${m[0].name} and ${m.length} function(s)`:"Go module"},"Micro IR (Rust/TS) ":(h,E)=>{let y=E.find(b=>b.kind==="TraitDeclaration")?.name,m=E.find(b=>b.kind==="StructDeclaration")?.name,g=E.filter(b=>b.kind==="FunctionDeclaration");return y?h.includes("Rust trait")?`Rust module: trait ${y}`:`Rust module: ${y}`:m?`Rust module: struct ${m}`:g.length>0?`Rust module: ${g.length} function(s)`:"Rust module"}}[e];if(c)return c(o,n);if(n.length===0)return s?`Module: ${s}`:"Module with no exports";let a=n.filter(h=>h.kind==="FunctionDeclaration"),u=n.filter(h=>h.kind==="ClassDeclaration"),p=n.filter(h=>h.kind==="TsInterfaceDeclaration"||h.kind==="TsTypeAliasDeclaration"),d=[];if(u.length>0&&d.push(`Class: ${u[0].name}`),a.length>0){let h=a.slice(0,2).map(E=>E.name).join("");d.push(`Functions: ${h}`)}p.length>0&&d.push(`Types: ${p.length}`);let f=d.length>0?d.join(" | "):`Module with ${n.length} export(s)`;return o?`${f} \u2014 ${o}`:f}function Ot(i){let e=new Set;function t(n){if(!(!n||typeof n!="object")){n.typeAnnotation&&W(n.typeAnnotation,e),(n.type==="TsTypeReference"||n.type==="TsTypeAnnotation")&&W(n,e);for(let s in n){if(s==="span"||s==="comments"||s==="interpreter")continue;let r=n[s];r&&typeof r=="object"&&(Array.isArray(r)?r.forEach(t):t(r))}}}return i.forEach(n=>t(n)),Array.from(e)}function W(i,e){if(i){if(i.type==="TsTypeAnnotation"){W(i.typeAnnotation,e);return}i.type==="TsTypeReference"&&(i.typeName?.type==="Identifier"&&e.add(i.typeName.value),i.typeName?.type==="TsQualifiedName"&&At(i.typeName,e),i.typeParams&&W(i.typeParams,e)),i.type==="TsArrayType"&&W(i.elementType,e),i.type==="TsUnionType"&&i.types?.forEach(t=>W(t,e)),i.type==="TsIntersectionType"&&i.types?.forEach(t=>W(t,e)),i.type==="TsTupleType"&&i.elemTypes?.forEach(t=>W(t.ty,e)),(i.type==="TsFunctionType"||i.type==="TsConstructorType")&&(i.params?.forEach(t=>W(t.typeAnnotation,e)),i.typeAnnotation&&W(i.typeAnnotation,e)),i.type==="TsTypeParameterDeclaration"&&i.params?.forEach(t=>{t.constraint&&W(t.constraint,e),t.default&&W(t.default,e)}),i.type==="TsTypeParameterInstantiation"&&i.params?.forEach(t=>W(t,e)),i.type==="TsMappedType"&&i.typeAnnotation&&W(i.typeAnnotation,e),i.type==="TsIndexedAccessType"&&(W(i.objectType,e),W(i.indexType,e)),i.type==="TsConditionalType"&&(W(i.checkType,e),W(i.extendsType,e),W(i.trueType,e),W(i.falseType,e)),i.type==="TsTypeLiteral"&&i.members?.forEach(t=>{t.typeAnnotation&&W(t.typeAnnotation,e)})}}function At(i,e){i.type==="TsQualifiedName"?(i.left&&At(i.left,e),i.right?.value&&e.add(i.right.value)):i.type==="Identifier"&&e.add(i.value)}import $t from"path";import ot from"path";import Pt from"path";import Wn from"fs";import{fileURLToPath as Pn}from"url";import*as ae from"web-tree-sitter";import vn from"pino";var Nn={10:"TRACE",20:"DEBUG",30:"INFO",40:"WARN",50:"ERROR",60:"FATAL"},Dn=vn({level:process.env.LOG_LEVEL||"info",base:{service:"liquid-shadow"},formatters:{level(i,e){return{level:i,severity:Nn[e]??"INFO"}}},transport:{target:"pino-pretty",options:{colorize:!0,translateTime:"HH:MM:ss",destination:2,levelKey:"severity",messageKey:"message"}}}),_=Dn;import{fileURLToPath as Mn}from"node:url";import{dirname as rt,join as Ft,resolve as On}from"node:path";import{existsSync as An}from"node:fs";var wn=Mn(import.meta.url),wt=rt(wn);function Fn(){let i=wt;for(;i!==rt(i);){if(An(Ft(i,"package.json")))return i;i=rt(i)}return On(wt,"..","..")}function Ne(...i){return Ft(Fn(),...i)}var as=Pt.dirname(Pn(import.meta.url)),Wt=_.child({module:"parser:tree-sitter"}),De=class{parser=null;languages=new Map;async ensureInitialized(){if(this.parser)return;let e=ae.Parser||ae;await e.init(),this.parser=new e}async getLanguage(e){if(this.languages.has(e))return this.languages.get(e);let t=Ne("resources","grammars",`tree-sitter-${this.getLangName(e)}.wasm`);if(!Wn.existsSync(t))return Wt.warn({grammarPath:t},"Grammar WASM not found"),null;try{let n=await ae.Language.load(t);return this.languages.set(e,n),n}catch(n){return Wt.error({err:n,ext:e},"Failed to load language grammar"),null}}getLangName(e){switch(e.toLowerCase()){case".php":return"php";case".py":return"python";case".go":return"go";case".rs":return"rust";default:return""}}getQueries(e){switch(e.toLowerCase()){case".php":return`
|
|
1
|
+
var Bn=Object.defineProperty;var Ae=(i,e)=>()=>(i&&(e=i(i=0)),e);var jn=(i,e)=>{for(var t in e)Bn(i,t,{get:e[t],enumerable:!0})};import Kn from"pino";var Jn,Yn,E,j=Ae(()=>{"use strict";Jn={10:"TRACE",20:"DEBUG",30:"INFO",40:"WARN",50:"ERROR",60:"FATAL"},Yn=Kn({level:process.env.LOG_LEVEL||"warn",base:{service:"liquid-shadow"},formatters:{level(i,e){return{level:i,severity:Jn[e]??"INFO"}}},transport:{target:"pino-pretty",options:{colorize:!0,translateTime:"HH:MM:ss",destination:2,levelKey:"severity",messageKey:"message"}}}),E=Yn});import{fileURLToPath as Qn}from"node:url";import{dirname as ft,join as Kt,resolve as Vn}from"node:path";import{existsSync as Xn}from"node:fs";function ei(){let i=Gt;for(;i!==ft(i);){if(Xn(Kt(i,"package.json")))return i;i=ft(i)}return Vn(Gt,"..","..")}function fe(...i){return Kt(ei(),...i)}var Zn,Gt,$e=Ae(()=>{"use strict";Zn=Qn(import.meta.url),Gt=ft(Zn)});import{Worker as wi}from"node:worker_threads";import{cpus as Oi}from"node:os";import{fileURLToPath as Ai}from"node:url";import{dirname as Fi,join as Tn}from"node:path";import{existsSync as Sn}from"node:fs";function Pi(){if(xn.endsWith(".ts")){let e=Tn(kn,"worker.ts");if(Sn(e))return e}let i=Tn(kn,"worker.js");return Sn(i)?i:fe("dist/logic/domain/embeddings/worker.js")}function de(i){return be||(be=new _e(i)),be}async function kt(){be&&(await be.shutdown(),be=null)}var xn,kn,_e,be,In=Ae(()=>{"use strict";j();$e();xn=Ai(import.meta.url),kn=Fi(xn);_e=class{workers=[];taskQueue=[];pendingTasks=new Map;taskIdCounter=0;initialized=!1;initPromise;shutdownRequested=!1;numWorkers;cacheDir;initTimeout;constructor(e={}){this.numWorkers=e.numWorkers??Math.max(1,Math.min(4,Oi().length-1)),this.cacheDir=e.cacheDir??"./.cache",this.initTimeout=e.initTimeout??6e4}async initialize(){if(!this.initialized)return this.initPromise?this.initPromise:(this.initPromise=this._doInitialize(),this.initPromise)}async _doInitialize(){let e;try{E.info({numWorkers:this.numWorkers},"Initializing embedding worker pool");let t=new Promise((n,s)=>{e=setTimeout(()=>s(new Error(`Worker pool initialization timed out after ${this.initTimeout}ms`)),this.initTimeout)});if(await Promise.race([this._initializeWorkers(),t]),e&&clearTimeout(e),this.shutdownRequested){this.initialized=!1,this.initPromise=void 0,E.debug("Initialization completed but shutdown was requested");return}this.initialized=!0,E.info({numWorkers:this.workers.length},"Embedding worker pool ready")}catch(t){throw e&&clearTimeout(e),this.initPromise=void 0,this.initialized=!1,await this.shutdown(),t}}async _initializeWorkers(){let e=Pi();E.debug({workerPath:e},"Resolved worker path");let t=[];for(let n=0;n<this.numWorkers;n++)n>0&&await new Promise(s=>setTimeout(s,25)),t.push(this.createWorker(e,n));await Promise.all(t)}async createWorker(e,t){return new Promise((n,s)=>{let r=setTimeout(()=>{s(new Error(`Worker ${t} initialization timed out`))},this.initTimeout),o=new wi(e,{workerData:{cacheDir:this.cacheDir},execArgv:process.execArgv}),l={worker:o,busy:!1,currentTaskId:null};o.on("message",c=>{if(c.type==="ready"){if(clearTimeout(r),this.shutdownRequested){E.debug({workerIndex:t},"Worker ready but shutdown requested, terminating"),o.terminate().catch(()=>{}),n();return}this.workers.push(l),E.debug({workerIndex:t},"Worker ready"),n()}else c.type==="result"&&c.id?this.handleTaskComplete(l,c.id,c.embeddings||[]):c.type==="error"&&c.id&&this.handleTaskError(l,c.id,new Error(c.error||"Unknown error"))}),o.on("error",c=>{if(clearTimeout(r),E.error({err:c,workerIndex:t},"Worker error"),l.currentTaskId&&this.handleTaskError(l,l.currentTaskId,c),!this.initialized){s(c);return}let a=this.workers.indexOf(l);a!==-1&&this.workers.splice(a,1),!this.shutdownRequested&&this.initialized&&this.createWorker(e,t).catch(u=>{E.error({err:u},"Failed to replace crashed worker")})}),o.on("exit",c=>{c!==0&&!this.shutdownRequested&&E.warn({workerIndex:t,code:c},"Worker exited unexpectedly")})})}handleTaskComplete(e,t,n){let s=this.pendingTasks.get(t);s&&(this.pendingTasks.delete(t),s.resolve(n)),e.busy=!1,e.currentTaskId=null,this.processQueue()}handleTaskError(e,t,n){let s=this.pendingTasks.get(t);s&&(this.pendingTasks.delete(t),s.reject(n)),e.busy=!1,e.currentTaskId=null,this.processQueue()}processQueue(){if(this.taskQueue.length===0)return;let e=this.workers.find(n=>!n.busy);if(!e)return;let t=this.taskQueue.shift();t&&(e.busy=!0,e.currentTaskId=t.id,this.pendingTasks.set(t.id,t),e.worker.postMessage({type:"embed",id:t.id,texts:t.texts}))}async generateEmbeddings(e,t=128,n){if(this.initialized||await this.initialize(),e.length===0)return[];let s=[];for(let a=0;a<e.length;a+=t)s.push(e.slice(a,a+t));let r=new Array(s.length),o=0,l=s.map((a,u)=>new Promise((p,m)=>{let f={id:`task_${++this.taskIdCounter}`,texts:a,resolve:g=>{if(r[u]=g,o++,n){let b=Math.min(o*t,e.length);n(b,e.length)}p()},reject:g=>{if(r[u]=new Array(a.length).fill(null),o++,E.warn({err:g,chunkIndex:u},"Chunk embedding failed"),n){let b=Math.min(o*t,e.length);n(b,e.length)}p()}};this.taskQueue.push(f),this.processQueue()}));await Promise.all(l);let c=[];for(let a of r)c.push(...a);return E.info({total:e.length,successful:c.filter(a=>a!==null).length,workers:this.workers.length},"Parallel embedding generation complete"),c}get workerCount(){return this.workers.length}get busyWorkers(){return this.workers.filter(e=>e.busy).length}get queueSize(){return this.taskQueue.length}get isInitialized(){return this.initialized}async shutdown(){if(this.shutdownRequested=!0,this.initPromise)try{await this.initPromise}catch{}if(!this.initialized&&this.workers.length===0){this.shutdownRequested=!1,this.initPromise=void 0;return}E.info({numWorkers:this.workers.length},"Shutting down embedding worker pool");let e=this.workers.map(t=>new Promise(n=>{t.worker.postMessage({type:"shutdown"}),t.worker.once("exit",()=>n()),setTimeout(()=>{t.worker.terminate().then(()=>n())},5e3)}));await Promise.all(e),this.workers=[],this.taskQueue=[],this.pendingTasks.clear(),this.initialized=!1,this.shutdownRequested=!1,E.info("Embedding worker pool shutdown complete")}},be=null});var Lt={};jn(Lt,{EmbeddingPriorityQueue:()=>nt,EmbeddingWorkerPool:()=>_e,cosineSimilarity:()=>Dn,generateEmbedding:()=>Cn,generateEmbeddingsBatch:()=>it,getDefaultPool:()=>de,setUseWorkerThreads:()=>Me,shutdownDefaultPool:()=>kt});async function Wi(){return De||(De=await import("@xenova/transformers"),De.env.cacheDir="./.cache",De.env.allowLocalModels=!0),De}function Me(i){It=i,E.info({useWorkerThreads:i},"Worker thread mode updated")}async function vn(){return xt||(xt=(async()=>{E.info("Loading embedding model (all-MiniLM-L6-v2)...");let{pipeline:i}=await Wi();return await i("feature-extraction","Xenova/all-MiniLM-L6-v2")})()),xt}async function Cn(i){try{let t=await(await vn())(i,{pooling:"mean",normalize:!0});return Array.from(t.data)}catch(e){return E.error({err:e},"Failed to generate embedding"),null}}async function it(i,e=Ln,t){return i.length===0?[]:It?de().generateEmbeddings(i,e,t):Nn(i,e,t)}async function Nn(i,e,t){let n=new Array(i.length).fill(null),s=await vn();for(let r=0;r<i.length;r+=e){let o=Math.min(r+e,i.length),l=i.slice(r,o);try{let c=await s(l,{pooling:"mean",normalize:!0}),[a,u]=c.dims;for(let p=0;p<a;p++){let m=p*u,d=m+u;n[r+p]=Array.from(c.data.slice(m,d))}}catch(c){E.error({err:c,batchStart:r,batchEnd:o},"Single-threaded batch embedding failed, falling back to sequential for this chunk");for(let a=0;a<l.length;a++)try{let u=l[a];if(!u||u.trim().length===0)continue;let p=await s(u,{pooling:"mean",normalize:!0});n[r+a]=Array.from(p.data)}catch{n[r+a]=null}}t&&t(o,i.length)}return E.debug({total:i.length,successful:n.filter(r=>r!==null).length},"Batch embedding complete"),n}function Dn(i,e){let t=0,n=0,s=0;for(let r=0;r<i.length;r++)t+=i[r]*e[r],n+=i[r]*i[r],s+=e[r]*e[r];return t/(Math.sqrt(n)*Math.sqrt(s))}var De,Ln,It,xt,nt,we=Ae(()=>{"use strict";j();In();De=null;Ln=128,It=!1;xt=null;nt=class{queue=[];processing=!1;results=new Map;enqueue(e){this.queue.push(e),this.queue.sort((t,n)=>n.priority-t.priority)}enqueueMany(e){this.queue.push(...e),this.queue.sort((t,n)=>n.priority-t.priority)}get size(){return this.queue.length}get isProcessing(){return this.processing}getResult(e){return this.results.get(e)}async processQueue(e=Ln,t){if(this.processing)return E.warn("Queue processing already in progress"),this.results;this.processing=!0;let n=this.queue.length;try{It?await this.processQueueParallel(e,n,t):await this.processQueueSequential(e,n,t)}finally{this.processing=!1}return this.results}async processQueueSequential(e,t,n){for(;this.queue.length>0;){let s=this.queue.splice(0,e),r=s.map(l=>l.text),o=await Nn(r,r.length);if(s.forEach((l,c)=>{this.results.set(l.id,o[c])}),n){let l=t-this.queue.length;n(l,t)}}}async processQueueParallel(e,t,n){let s=this.queue.splice(0),r=s.map(c=>c.text),l=await de().generateEmbeddings(r,e,(c,a)=>{n&&n(c,a)});s.forEach((c,a)=>{this.results.set(c.id,l[a])})}clear(){this.queue=[],this.results.clear()}}});import zn from"fast-glob";import Ot from"fs";import qn from"ignore";import At from"path";var Fe=["**/node_modules/**","**/.git/**","**/dist/**","**/build/**","**/vendor/**","**/.next/**","**/.cache/**","**/coverage/**","**/*.min.js"],wt=["**/*.{ts,tsx,yaml,yml,php,py,go}","**/*.prisma","**/*.{graphql,gql}","**/Dockerfile*","**/.env*","**/package.json","**/lerna.json","**/turbo.json","**/pnpm-workspace.yaml"];var rs={FILTERED_QUERY_LIMIT_MULTIPLIER:3,SCORE_BASE:1e3,EXACT_MATCH_BONUS:500,RECENT_FILE_BOOST:80,OLDER_FILE_BOOST:30,RECENT_FILE_THRESHOLD_DAYS:7,OLDER_FILE_THRESHOLD_DAYS:30,FUZZY_MATCH_LIMIT:30,ENABLE_LEXICAL_SCORING:process.env.ENABLE_LEXICAL_SCORING!=="false",LEXICAL_WEIGHT:parseFloat(process.env.LEXICAL_WEIGHT??String(.4)),GRAVITY_STRUCTURAL_WEIGHT:.5};var Pe={DEFAULT_CONCURRENCY:parseInt(process.env.INDEX_CONCURRENCY??String(5),10)};async function dt(i,e=[]){let t=qn(),n=At.join(i,".gitignore");return Ot.existsSync(n)&&t.add(Ot.readFileSync(n,"utf8")),e.length>0&&t.add(e),(await zn(wt,{cwd:i,absolute:!0,ignore:Fe,stats:!0})).filter(o=>{let l=At.relative(i,o.path);return!t.ignores(l)}).map(o=>({path:o.path,mtime:o.stats.mtimeMs}))}import gt from"@swc/core";import Vt from"fs";function Ft(i){let e=i.split(`
|
|
2
|
+
`),t=[],n=0;for(let s of e)t.push(n),n+=s.length+1;return t}function O(i,e){for(let t=0;t<e.length;t++)if(e[t+1]>i||t===e.length-1)return t+1;return 1}function We(i,e){return e.slice(0,i).toString("utf8").length}function Pt(i){if(i.toString("utf8").length===i.length)return n=>n;let t=new Map;return n=>{let s=t.get(n);return s===void 0&&(s=i.slice(0,n).toString("utf8").length,t.set(n,s)),s}}function Wt(i,e,t){let n=i.start-e,s=i.end-e;return n<0||s>t.length?"":t.slice(n,s).toString("utf8")}function Ht(i){let e=[],t=/\/\*\*[\s\S]*?\*\//g,n;for(;(n=t.exec(i))!==null;)e.push({start:n.index,end:n.index+n[0].length,text:n[0]});return e}function V(i,e,t){for(let n of e){if(n.start===i)return n.text;if(n.start>i&&n.start<i+50){let s=t.substring(i,n.start);if(/^\s*$/.test(s))return n.text}if(n.end<=i&&n.end>i-50){let s=t.substring(n.end,i);if(/^\s*$/.test(s))return n.text}}return""}function $t(i){if(!i)return"";let t=i.replace(/\/\*\*|\*\/|\*/g,"").trim().split(`
|
|
3
|
+
`)[0].trim();return t.length>200?t.substring(0,197)+"...":t}function He(i,e,t){let n=i.toLowerCase(),s=e.toLowerCase();return n.includes("components/")||n.endsWith(".tsx")?"Component":n.startsWith("use")||s.startsWith("use")?"Hook":n.includes("models/")||s.endsWith("model")?"Model":n.includes("services/")||n.includes("controllers/")||n.includes("handlers/")||n.includes("mcp/")||n.endsWith("service.ts")||n.endsWith("controller.ts")||n.endsWith("handler.ts")||s.endsWith("service")||s.endsWith("controller")||s.endsWith("handler")?"Service":n.includes("repositories/")||n.includes("repos/")||n.endsWith("repository.ts")||n.endsWith("repo.ts")||s.endsWith("repository")||s.endsWith("repo")?"Repository":t==="TsInterfaceDeclaration"||t==="TsTypeAliasDeclaration"?"Type Definition":"Other"}function Te(i){let e=[];return/\b(fetch|axios|superagent|got)\s*\(|import\s+.*\b(http|https|node-fetch)\b/i.test(i)&&e.push("Network"),(/\b(knex|prisma|typeorm|mongoose|sequelize|pg|mysql|sqlite3)\b/i.test(i)||/\b(SELECT\s+.*FROM|INSERT\s+INTO|UPDATE\s+.*SET|DELETE\s+FROM)\b/i.test(i)||/\.query\s*\(|\.execute\s*\(/i.test(i)&&/db|database|client|pool/i.test(i))&&e.push("Database"),(/\bfs\./i.test(i)||/\b(readFileSync|writeFileSync|readFile|writeFile|readdir)\b/.test(i)||/import\s+.*\bfs\b/.test(i))&&e.push("File System"),(/\b(localStorage|sessionStorage|indexedDB)\./.test(i)||/\bdocument\.cookie\b/.test(i))&&e.push("Browser Storage"),e}function X(i,e){if(!i)return"";let t=i.replace(/^([\s\S]*?\*\/)?\s*/,"").replace(/^.*\} from ['"].*['"];?\s*/,"").replace(/^import .*['"];?\s*/,"").trim();if(e==="TsInterfaceDeclaration"||e==="TsTypeAliasDeclaration")return t;let n=0,s=0,r=t.length;for(let o=0;o<t.length;o++){let l=t[o];if(l==="(")n++;else if(l===")")n--;else if(l==="<")s++;else if(l===">")s--;else if(l==="{"){if(n===0&&s===0){r=o;break}}else if(l==="; "&&n===0&&s===0){r=o;break}else if(l==="="&&t[o+1]===">"&&n===0&&s===0){r=o+2;break}}return t.substring(0,r).trim()}function Ut(i){let e=[];for(let t of i)t.type==="ImportDeclaration"&&e.push({module:t.source.value,name:t.specifiers.map(n=>n.type==="ImportDefaultSpecifier"?"default":n.type==="ImportNamespaceSpecifier"?"*":n.local?.value||n.imported?.value||"*").join("","")}),t.type==="ExportAllDeclaration"&&e.push({module:t.source.value,name:"*"}),t.type==="ExportNamedDeclaration"&&t.source&&e.push({module:t.source.value,name:t.specifiers.map(n=>n.type==="ExportSpecifier"?n.orig.value:"*").join(", ")});return e}function Bt(i,e,t,n,s,r,o,l,c){let a=c??(p=>We(p,t)),u=[];for(let p of i){if(p.type==="ExportDeclaration"){let m=p.declaration,d=m.type,f="";d==="VariableDeclaration"?f=m.declarations.map(_=>_.id.value).join("",""):f=m.id?.value||m.identifier?.value||"anonymous";let g=a(p.span.start-e),b=a(p.span.end-e),h=V(g,r,n),y=l(p.span),T=[];if(p.type==="ExportDeclaration"&&(d==="ClassDeclaration"||d==="ClassExpression")){let _=m.body||[];for(let x of _)if(x.type==="ClassMethod"||x.type==="ClassProperty"){let I=x.key.value;if(!I)continue;let D=a(x.span.start-e),z=a(x.span.end-e),w=l(x.span),N=V(D,r,n);T.push({name:I,kind:x.type,signature:X(w,x.type),line:O(D,s),endLine:O(z,s),doc:N,classification:x.type==="ClassMethod"?"Method":"Property",capabilities:"[]"})}}else if(d==="FunctionDeclaration"&&m.body?.type==="BlockStatement")T=mt(m.body.stmts,e,t,n,s,r,l,a);else if(d==="VariableDeclaration"){for(let _ of m.declarations)if(_.init&&(_.init.type==="ArrowFunctionExpression"||_.init.type==="FunctionExpression")&&_.init.body?.type==="BlockStatement"){T=mt(_.init.body.stmts,e,t,n,s,r,l,a);break}}u.push({name:f,kind:d,signature:X(y,d),line:O(g,s),endLine:O(b,s),doc:h,classification:He(o,f,d),capabilities:JSON.stringify(Te(y)),members:T})}if(p.type==="ExportNamedDeclaration"){for(let m of p.specifiers)if(m.type==="ExportSpecifier"){let d=a(p.span.start-e),f=a(p.span.end-e),g=V(d,r,n);u.push({name:m.exported?.value||m.orig.value,kind:"ExportSpecifier",signature:`export { ${m.orig.value} }`,line:O(d,s),endLine:O(f,s),doc:g,classification:"Export mapping",capabilities:"[]"})}}if(p.type==="ExportDefaultDeclaration"){let m=a(p.span.start-e),d=a(p.span.end-e),f=V(m,r,n),g=l(p.span),b=[];if(p.decl.type==="ClassExpression"||p.decl.type==="ClassDeclaration"){let h=p.decl.body||[];for(let y of h)if(y.type==="ClassMethod"||y.type==="ClassProperty"){let T=y.key.value;if(!T)continue;let _=a(y.span.start-e),x=a(y.span.end-e),I=l(y.span),D=V(_,r,n);b.push({name:T,kind:y.type,signature:X(I,y.type),line:O(_,s),endLine:O(x,s),doc:D,classification:y.type==="ClassMethod"?"Method":"Property",capabilities:"[]"})}}else(p.decl.type==="FunctionExpression"||p.decl.type==="FunctionDeclaration"||p.decl.type==="ArrowFunctionExpression")&&p.decl.body?.type==="BlockStatement"&&(b=mt(p.decl.body.stmts,e,t,n,s,r,l,a));u.push({name:"default",kind:"DefaultExport",signature:X(g,"DefaultExport"),line:O(m,s),endLine:O(d,s),doc:f,classification:"Default Export",capabilities:JSON.stringify(Te(g)),members:b})}if(p.type==="ExportAllDeclaration"){let m=a(p.span.start-e),d=a(p.span.end-e),f=p.source.value,g=V(m,r,n);u.push({name:"*",kind:"ExportAllDeclaration",signature:`export * from "${f}"`,line:O(m,s),endLine:O(d,s),doc:g,classification:"Re-export",capabilities:"[]"})}}return u}function mt(i,e,t,n,s,r,o,l){let c=[];for(let a of i){if(a.type==="VariableDeclaration")for(let u of a.declarations){let p=[],m=d=>{if(d.type==="Identifier")p.push({name:d.value,span:d.span});else if(d.type==="ArrayPattern")for(let f of d.elements)f&&m(f);else if(d.type==="ObjectPattern")for(let f of d.properties)f.type==="AssignmentPatternProperty"?p.push({name:f.key.value,span:f.span}):f.type==="KeyValuePatternProperty"&&m(f.value)};m(u.id);for(let d of p){let f=l(d.span.start-e),g=l(d.span.end-e),b=o(d.span),h=V(f,r,n);c.push({name:d.name,kind:"VariableDeclaration",signature:X(b,"VariableDeclaration"),line:O(f,s),endLine:O(g,s),doc:h,classification:"Internal Variable",capabilities:"[]"})}}if(a.type==="FunctionDeclaration"){let u=a.identifier?.value||a.ident?.value||"anonymous",p=l(a.span.start-e),m=l(a.span.end-e),d=o(a.span),f=V(p,r,n);c.push({name:u,kind:"FunctionDeclaration",signature:X(d,"FunctionDeclaration"),line:O(p,s),endLine:O(m,s),doc:f,classification:"Internal Function",capabilities:"[]"})}if(a.type==="ReturnStatement"&&a.argument?.type==="ObjectExpression")for(let u of a.argument.properties){let p="",m=u.span||u.key?.span||u.ident?.span;if(u.type==="KeyValueProperty"){let d=u.key;p=d?.value||d?.raw||(d?.type==="Identifier"?d.value:"")}else u.type==="MethodProperty"?p=u.key?.value||u.key?.raw||"":u.type==="ShorthandProperty"?p=u.ident?.value||"":u.type==="Identifier"&&(p=u.value||"");if(p&&m){let d=l(m.start-e),f=l(m.end-e),g=o(m),b=V(d,r,n);c.push({name:p,kind:"ReturnProperty",signature:X(g,"ReturnProperty"),line:O(d,s),endLine:O(f,s),doc:b,classification:"Return Member",capabilities:"[]"})}}if(a.type==="ExpressionStatement"&&a.expression.type==="CallExpression"){let u=a.expression;if(u.callee.type==="MemberExpression"&&(u.callee.property?.value==="on"||u.callee.property?.value==="once")){let p=u.arguments[0]?.expression?.value,m=u.arguments[1]?.expression;if(p&&m&&(m.type==="ArrowFunctionExpression"||m.type==="FunctionExpression")){let d=l(m.span.start-e),f=l(m.span.end-e),g=o(m.span);c.push({name:`on:${p}`,kind:m.type,signature:X(g,m.type),line:O(d,s),endLine:O(f,s),doc:"",classification:"Event Handler",capabilities:"[]"})}}if(u.callee.type==="Identifier"&&u.callee.value==="addRoute"&&u.arguments.length>=3){let p=u.arguments[2].expression;if(p.type==="StringLiteral"){let m=p.value,d=l(u.span.start-e),f=l(u.span.end-e),g=o(u.span);c.push({name:m,kind:"HTTP Route",signature:X(g,"HTTP Route"),line:O(d,s),endLine:O(f,s),doc:"",classification:"Service Boundary",capabilities:JSON.stringify({path:m})})}}}}return c}function jt(i,e,t,n,s,r){let o=r??(a=>We(a,t)),l=[];function c(a){if(!(!a||typeof a!="object")){if(a.type==="CallExpression"){let u=Gn(a);if(u){let p=o(a.span.start-e);l.push({...u,line:O(p,n),snippet:s(a.span)})}}for(let u of Object.keys(a)){if(u==="span")continue;let p=a[u];Array.isArray(p)?p.forEach(c):typeof p=="object"&&c(p)}}}return i.forEach(c),l}function Gn(i){let{callee:e,arguments:t}=i;if(!t||t.length===0)return null;if(e.type==="Identifier"&&e.value,e.type==="Identifier"&&e.value==="addRoute"&&t.length>=3){let n=t[2].expression;if(n.type==="StringLiteral")return{type:"api_route",name:n.value,direction:"consume"}}if(e.type==="MemberExpression"&&e.property?.type==="Identifier"){let n=e.property.value;if(n==="emit"&&t[0].expression.type==="StringLiteral")return{type:"socket_event",name:t[0].expression.value,direction:"produce"};if(n==="on"&&t[0].expression.type==="StringLiteral")return{type:"socket_event",name:t[0].expression.value,direction:"consume"};if(["get","post","put","delete","patch"].includes(n)&&t[0].expression.type==="StringLiteral"){let r=t[0].expression.value,o=e.object.type==="Identifier"?e.object.value:"";if(["axios","http","request","appApi","restApi","adminApi","client"].includes(o))return{type:"api_route",name:r,direction:"produce"};if(r.startsWith("/"))return{type:"api_route",name:r,direction:"consume"}}}return e.type==="Identifier"&&e.value==="fetch"&&t[0].expression.type==="StringLiteral"?{type:"api_route",name:t[0].expression.value,direction:"produce"}:null}function Se(i){let{classification:e,capabilities:t,exports:n,fileName:s}=i,r={Network:"API integration",Database:"data persistence","File System":"file I/O operations","Browser Storage":"client-side storage"},o=t.map(f=>r[f]).filter(Boolean).join(" and "),c={Component:(f,g)=>{let b=g.find(y=>y.kind==="FunctionDeclaration"||y.kind==="ClassDeclaration")?.name,h=b?`React component: ${b}`:"React UI component";return f?`${h} with ${f}`:h},Hook:(f,g)=>{let b=g.find(y=>y.name.startsWith("use"))?.name,h=b?`Custom React hook: ${b}`:"Custom React hook";return f?`${h} for ${f}`:h},Service:(f,g)=>{let h=`Service layer: ${g[0]?.name||"Service"}`;return f?`${h} handling ${f}`:h},Repository:(f,g)=>`Data repository: ${g[0]?.name||"Repository"} for ${f||"data access"}`,"Type Definition":(f,g)=>`Type definitions: ${g.slice(0,3).map(h=>h.name).join("")}${g.length>3?"...":""}`,Model:(f,g)=>`Data model: ${g[0]?.name||"Model"}`,"HTTP Route":(f,g)=>{let b=g.filter(h=>h.classification==="Service Boundary");return b.length>0?`API endpoints: ${b.slice(0,3).map(h=>h.name).join("")}`:"API route handler"},"Micro IR (PHP)":(f,g)=>{let b=g.some(y=>y.classification==="Service Boundary"),h=g.find(y=>y.kind==="ClassDeclaration")?.name;return b?"PHP controller with API routes":h?`PHP class: ${h}`:"PHP module"},"Micro IR (Python)":(f,g)=>{let b=g.some(y=>y.classification==="Service Boundary"),h=g.find(y=>y.kind==="ClassDeclaration")?.name;return b?"Python API handler with routes":h?`Python class: ${h}`:"Python module"},"Micro IR (Go/TS) ":(f,g)=>{let b=g.some(y=>y.kind==="TypeDeclaration"),h=g.filter(y=>y.kind==="FunctionDeclaration");return b&&h.length>0?`Go package: types and ${h.length} function(s)`:b?"Go package: type definitions":h.length>0?`Go package: ${h[0].name} and ${h.length} function(s)`:"Go module"},"Micro IR (Rust/TS) ":(f,g)=>{let b=g.find(T=>T.kind==="TraitDeclaration")?.name,h=g.find(T=>T.kind==="StructDeclaration")?.name,y=g.filter(T=>T.kind==="FunctionDeclaration");return b?f.includes("Rust trait")?`Rust module: trait ${b}`:`Rust module: ${b}`:h?`Rust module: struct ${h}`:y.length>0?`Rust module: ${y.length} function(s)`:"Rust module"}}[e];if(c)return c(o,n);if(n.length===0)return s?`Module: ${s}`:"Module with no exports";let a=n.filter(f=>f.kind==="FunctionDeclaration"),u=n.filter(f=>f.kind==="ClassDeclaration"),p=n.filter(f=>f.kind==="TsInterfaceDeclaration"||f.kind==="TsTypeAliasDeclaration"),m=[];if(u.length>0&&m.push(`Class: ${u[0].name}`),a.length>0){let f=a.slice(0,2).map(g=>g.name).join("");m.push(`Functions: ${f}`)}p.length>0&&m.push(`Types: ${p.length}`);let d=m.length>0?m.join(" | "):`Module with ${n.length} export(s)`;return o?`${d} \u2014 ${o}`:d}function zt(i){let e=new Set;function t(n){if(!(!n||typeof n!="object")){n.typeAnnotation&&A(n.typeAnnotation,e),(n.type==="TsTypeReference"||n.type==="TsTypeAnnotation")&&A(n,e);for(let s in n){if(s==="span"||s==="comments"||s==="interpreter")continue;let r=n[s];r&&typeof r=="object"&&(Array.isArray(r)?r.forEach(t):t(r))}}}return i.forEach(n=>t(n)),Array.from(e)}function A(i,e){if(i){if(i.type==="TsTypeAnnotation"){A(i.typeAnnotation,e);return}i.type==="TsTypeReference"&&(i.typeName?.type==="Identifier"&&e.add(i.typeName.value),i.typeName?.type==="TsQualifiedName"&&qt(i.typeName,e),i.typeParams&&A(i.typeParams,e)),i.type==="TsArrayType"&&A(i.elementType,e),i.type==="TsUnionType"&&i.types?.forEach(t=>A(t,e)),i.type==="TsIntersectionType"&&i.types?.forEach(t=>A(t,e)),i.type==="TsTupleType"&&i.elemTypes?.forEach(t=>A(t.ty,e)),(i.type==="TsFunctionType"||i.type==="TsConstructorType")&&(i.params?.forEach(t=>A(t.typeAnnotation,e)),i.typeAnnotation&&A(i.typeAnnotation,e)),i.type==="TsTypeParameterDeclaration"&&i.params?.forEach(t=>{t.constraint&&A(t.constraint,e),t.default&&A(t.default,e)}),i.type==="TsTypeParameterInstantiation"&&i.params?.forEach(t=>A(t,e)),i.type==="TsMappedType"&&i.typeAnnotation&&A(i.typeAnnotation,e),i.type==="TsIndexedAccessType"&&(A(i.objectType,e),A(i.indexType,e)),i.type==="TsConditionalType"&&(A(i.checkType,e),A(i.extendsType,e),A(i.trueType,e),A(i.falseType,e)),i.type==="TsTypeLiteral"&&i.members?.forEach(t=>{t.typeAnnotation&&A(t.typeAnnotation,e)})}}function qt(i,e){i.type==="TsQualifiedName"?(i.left&&qt(i.left,e),i.right?.value&&e.add(i.right.value)):i.type==="Identifier"&&e.add(i.value)}import Xt from"path";import ht from"path";j();$e();import Yt from"path";import ti from"fs";import{fileURLToPath as ni}from"url";import*as ue from"web-tree-sitter";var Ps=Yt.dirname(ni(import.meta.url)),Jt=E.child({module:"parser:tree-sitter"}),Ue=class{parser=null;languages=new Map;async ensureInitialized(){if(this.parser)return;let e=ue.Parser||ue;await e.init(),this.parser=new e}async getLanguage(e){if(this.languages.has(e))return this.languages.get(e);let t=fe("resources","grammars",`tree-sitter-${this.getLangName(e)}.wasm`);if(!ti.existsSync(t))return Jt.warn({grammarPath:t},"Grammar WASM not found"),null;try{let n=await ue.Language.load(t);return this.languages.set(e,n),n}catch(n){return Jt.error({err:n,ext:e},"Failed to load language grammar"),null}}getLangName(e){switch(e.toLowerCase()){case".php":return"php";case".py":return"python";case".go":return"go";case".rs":return"rust";default:return""}}getQueries(e){switch(e.toLowerCase()){case".php":return`
|
|
4
4
|
(function_definition name: (name) @name) @func
|
|
5
5
|
(class_declaration name: (name) @name) @class
|
|
6
6
|
(interface_declaration name: (name) @name) @interface
|
|
@@ -24,39 +24,30 @@ import Ln from"fast-glob";import nt from"fs";import kn from"ignore";import It fr
|
|
|
24
24
|
(trait_item name: (_type_identifier) @name) @trait
|
|
25
25
|
(type_item name: (_type_identifier) @name) @type
|
|
26
26
|
(use_declaration argument: (_) @name) @import
|
|
27
|
-
`;default:return""}}mapKind(e,t){if(e==="import")return"ImportDeclaration";if(t===".php"){if(e==="func")return"FunctionDeclaration";if(e==="class")return"ClassDeclaration";if(e==="interface")return"InterfaceDeclaration";if(e==="trait")return"TraitDeclaration";if(e==="method")return"MethodDeclaration"}if(t===".py"){if(e==="func")return"FunctionDeclaration";if(e==="class")return"ClassDeclaration"}if(t===".go"){if(e==="func")return"FunctionDeclaration";if(e==="type")return"TypeDeclaration"}if(t===".rs"){if(e==="func")return"FunctionDeclaration";if(e==="struct")return"StructDeclaration";if(e==="enum")return"EnumDeclaration";if(e==="trait")return"TraitDeclaration";if(e==="type")return"TypeDeclaration"}return"Unknown"}mapClassification(e){return e==="import"?"Dependency":e==="func"||e==="method"?"Function":e==="class"||e==="interface"||e==="trait"||e==="struct"||e==="enum"||e==="type"?"Class":"Other"}async parse(e,t){await this.ensureInitialized();let n=
|
|
28
|
-
`),l=this.getQueries(n);if(!l)return[];let a=new
|
|
29
|
-
`),o="",l="",c=0,a=0,u=-1,p=-1,
|
|
30
|
-
`).trim(),capabilities:JSON.stringify(L),members:[]}),
|
|
31
|
-
`).trim(),capabilities:JSON.stringify({attributes:
|
|
32
|
-
`).trim(),capabilities:JSON.stringify({attributes:
|
|
33
|
-
`).trim();if(
|
|
34
|
-
`),r=[{indent:-1,name:"root",type:"root"}],o=[],l=/^class\s+([a-zA-Z0-9_]+)/,c=/^async\s+def\s+([a-zA-Z0-9_]+)|^def\s+([a-zA-Z0-9_]+)/,a=/^(?:from\s+([a-zA-Z0-9_\.]+)\s+import|import\s+([a-zA-Z0-9_\.]+))/,u=/^@(.*)/;function p(
|
|
35
|
-
`).trim()),
|
|
36
|
-
`).length;s.push({name:u.name||"anonymous",kind:u.kind||"Unknown",classification:u.classification||"Other",signature:u.signature||a[0],line:p,endLine:p,doc:"",capabilities:JSON.stringify(u.meta||{})})}}let l=
|
|
27
|
+
`;default:return""}}mapKind(e,t){if(e==="import")return"ImportDeclaration";if(t===".php"){if(e==="func")return"FunctionDeclaration";if(e==="class")return"ClassDeclaration";if(e==="interface")return"InterfaceDeclaration";if(e==="trait")return"TraitDeclaration";if(e==="method")return"MethodDeclaration"}if(t===".py"){if(e==="func")return"FunctionDeclaration";if(e==="class")return"ClassDeclaration"}if(t===".go"){if(e==="func")return"FunctionDeclaration";if(e==="type")return"TypeDeclaration"}if(t===".rs"){if(e==="func")return"FunctionDeclaration";if(e==="struct")return"StructDeclaration";if(e==="enum")return"EnumDeclaration";if(e==="trait")return"TraitDeclaration";if(e==="type")return"TypeDeclaration"}return"Unknown"}mapClassification(e){return e==="import"?"Dependency":e==="func"||e==="method"?"Function":e==="class"||e==="interface"||e==="trait"||e==="struct"||e==="enum"||e==="type"?"Class":"Other"}async parse(e,t){await this.ensureInitialized();let n=Yt.extname(e).toLowerCase(),s=await this.getLanguage(n);if(!s||!this.parser)return[];this.parser.setLanguage(s);let r=this.parser.parse(t),o=t.split(`
|
|
28
|
+
`),l=this.getQueries(n);if(!l)return[];let a=new ue.Query(s,l).matches(r.rootNode),u=[];for(let p of a){let m=p.captures.find(g=>g.name==="name")?.node,d=p.captures[0].node,f=p.captures[0].name;if(m){let g=d.startPosition.row+1,b=d.endPosition.row+1,h=o[d.startPosition.row].trim();u.push({name:m.text,kind:this.mapKind(f,n),classification:this.mapClassification(f),signature:h,line:g,endLine:b,doc:"",capabilities:"{}"})}}return u}};var Be=class{parse(e,t=!1){let n=[],s=[],r=e.split(`
|
|
29
|
+
`),o="",l="",c=0,a=0,u=-1,p=-1,m=[],d=[],f=!1,g=t?"api":"",b="",h=/^namespace\s+([a-zA-Z0-9_\\]+);/,y=/^(?:abstract\s+)?(?:readonly\s+)?class\s+([a-zA-Z0-9_]+)/,T=/^interface\s+([a-zA-Z0-9_]+)/,_=/^trait\s+([a-zA-Z0-9_]+)/,x=/^(?:public|protected|private|static|\s)*function\s+([a-zA-Z0-9_]+)\s*\(/,I=/^use\s+([a-zA-Z0-9_\\]+)(?:\s+as\s+([a-zA-Z0-9_]+))?;/,D=/^#\[([a-zA-Z0-9_\\]+)(?:\((.*)\))?\]/,z=/(?:Route::|router->|\$router->|->)(get|post|put|delete|patch|match)\s*\(\s*(?:uri\s*:\s*)?['"]([^'"]+)['"]/,w=/->prefix\s*\(\s*(?:prefix\s*:\s*)?['"]([^'"]+)['"]/;for(let N=0;N<r.length;N++){let v=r[N].trim();if(!v)continue;let $=(v.match(/{/g)||[]).length,U=(v.match(/}/g)||[]).length,ne=a;if(a+=$-U,l&&a<=p){let L=n.find(k=>k.name===l&&k.line===c);L&&(L.endLine=N+1),l="",p=-1}if(o&&a<=u){let L=n.find(k=>k.name===o&&(k.kind==="ClassDeclaration"||k.kind==="TraitDeclaration"||k.kind==="InterfaceDeclaration"));L&&(L.endLine=N+1),o="",u=-1}let S=v.match(w);if(S&&(g=S[1]),v.includes("});")&&(g=""),v.startsWith("/**")){f=!0,d=[];continue}if(f){v.endsWith("*/")?f=!1:d.push(v.replace(/^\*\s?/,""));continue}let M=v.match(D);if(M){m.push(M[1]);continue}let P=v.match(h);if(P){b=P[1]||"",m=[],d=[];continue}let C=v.match(y);if(C){o=C[1],u=a-$;let L={attributes:m};b&&(L.namespace=b),n.push({name:o,kind:"ClassDeclaration",classification:"Class",signature:`class ${o}`,line:N+1,endLine:N+1,doc:d.join(`
|
|
30
|
+
`).trim(),capabilities:JSON.stringify(L),members:[]}),m=[],d=[];continue}let R=v.match(T);if(R){let L=R[1];o=L,u=a-$,n.push({name:L,kind:"InterfaceDeclaration",classification:"Interface",signature:`interface ${L}`,line:N+1,endLine:N+1,doc:d.join(`
|
|
31
|
+
`).trim(),capabilities:JSON.stringify({attributes:m}),members:[]}),m=[],d=[];continue}let W=v.match(_);if(W){let L=W[1];o=L,u=a-$,n.push({name:L,kind:"TraitDeclaration",classification:"Trait",signature:`trait ${L}`,line:N+1,endLine:N+1,doc:d.join(`
|
|
32
|
+
`).trim(),capabilities:JSON.stringify({attributes:m}),members:[]}),m=[],d=[];continue}let J=v.match(x);if(J){let L=J[1],k=!!o;l=L,c=N+1,p=a-$;let le=!1,Z={};for(let H of m)H.toLowerCase().includes("route")&&(le=!0,Z={type:"route",method:"GET",path:"/"});let ee=d.join(`
|
|
33
|
+
`).trim();if(le){let H=Z.path||"/";n.push({name:H,kind:"HTTP Route",classification:"Service Boundary",signature:`Function: ${L}`,line:N+1,endLine:N+1,doc:ee,capabilities:JSON.stringify({type:"route",handler:o?`${o}@${L}`:L,...Z})}),s.push({type:"api_route",name:H,direction:"consume",line:N+1,snippet:v})}n.push({name:L,kind:k?"MethodDeclaration":"FunctionDeclaration",classification:k?"Method":"Function",signature:`${k?o+":: ":""}${L}`,line:N+1,endLine:N+1,doc:ee,capabilities:JSON.stringify({attributes:m})}),m=[],d=[];continue}let Y=v.match(I);if(Y){let L=Y[1]||"",k=Y[2]||L.split("\\").pop()||"";n.push({name:k,kind:"ImportSpecifier",classification:"Dependency",signature:`use ${L}`,line:N+1,endLine:N+1,doc:"",capabilities:JSON.stringify({type:"use",namespace:L})}),m=[],d=[];continue}let B=v.match(z);if(B){let L=B[1].toUpperCase(),k=B[2];if(v.includes("Route::")||v.includes("router->")||v.includes("action")||v.includes(",")&&!v.includes("view(")){if(g){let ie=g.startsWith("/")?g:`/${g}`,pt=k.startsWith("/")?k:`/${k}`;k=(ie+pt).replace(/\/+/g,"/")}let Z=null,ee=v.match(/\[\s*([a-zA-Z0-9_]+)::class\s*,\s*['"]([^'"]+)['"]\s*\]/);if(ee)Z=`${ee[1]}@${ee[2]}`;else if(v.includes("::class")){let ie=v.match(/([a-zA-Z0-9_]+)::class/);ie&&(Z=ie[1])}let H=v;!v.endsWith(");")&&N+1<r.length&&(H+=" "+r[N+1].trim(),!H.endsWith(");")&&N+2<r.length&&(H+=" "+r[N+2].trim())),n.push({name:k,kind:"HTTP Route",classification:"Service Boundary",signature:H,line:N+1,endLine:N+1,doc:"",capabilities:JSON.stringify({type:"route",method:L,path:k,handler:Z})}),s.push({type:"api_route",name:k,direction:"consume",line:N+1,snippet:H,method:L,url:k}),d=[];continue}}let Q=/(?:\$client|client|Http)::(get|post|put|delete|patch|request)\s*\(\s*(?:url\s*:\s*)?([^,)]+)|(?:\$client|client)->(request|get|post|put|delete|patch)\s*\(\s*([^,)]+)/,q=v.match(Q);if(q){let L=(q[1]||q[3]).toUpperCase(),k=(q[2]||q[4]).trim();(k.startsWith("'")&&k.endsWith("'")||k.startsWith('"')&&k.endsWith('"'))&&(k=k.substring(1,k.length-1)),s.push({type:"api_route",name:k,direction:"produce",line:N+1,snippet:v,method:L,url:k})}!v.startsWith("#[")&&!v.startsWith("//")&&!v.startsWith("*")&&!f&&(m=[],d=[])}return{nodes:n,events:s}}};var je=class{currentRoutePrefix="";parse(e){this.currentRoutePrefix="";let t=[],n=[],s=e.split(`
|
|
34
|
+
`),r=[{indent:-1,name:"root",type:"root"}],o=[],l=/^class\s+([a-zA-Z0-9_]+)/,c=/^async\s+def\s+([a-zA-Z0-9_]+)|^def\s+([a-zA-Z0-9_]+)/,a=/^(?:from\s+([a-zA-Z0-9_\.]+)\s+import|import\s+([a-zA-Z0-9_\.]+))/,u=/^@(.*)/;function p(h){return h.trim().split(/[.(]/)[0]?.trim()||h}function m(h){let y=h.decorators.map(_=>p(_.raw)),T={decorators:h.decorators,decoratorNames:y};return h.async===!0&&(T.async=!0),JSON.stringify(T)}let d=!1,f="",g=[],b=[];for(let h=0;h<s.length;h++){let y=s[h],T=y.trim();if(!T||T.startsWith("#"))continue;let _=/^([a-zA-Z0-9_]+)\s*=\s*(?:APIRouter|Blueprint)\s*\(\s*(?:prefix\s*=\s*)?['"]([^'"]+)['"]/,x=T.match(_);if(x&&(this.currentRoutePrefix=x[2]),d){if(T.endsWith(f)||T.includes(f)){d=!1;let C=T.replace(f,"").trim();C&&g.push(C);let R=r[r.length-1];R.node&&(R.node.doc=g.join(`
|
|
35
|
+
`).trim()),g=[]}else g.push(T);continue}let I=y.search(/\S/),D=y.trim(),z=D.match(/^(['"]{3})/);if(z){let C=z[1],R=r[r.length-1];if(R.node&&!R.node.doc){if(D.substring(3).includes(C)){let W=D.replace(new RegExp(C,"g"),"").trim();R.node.doc=W}else{d=!0,f=C;let W=D.substring(3).trim();W&&g.push(W)}continue}}for(;r.length>1&&r[r.length-1].indent>=I;)r.pop();let w=r[r.length-1],N=D.match(u);if(N){o.push({raw:N[1].trim(),line:h+1});continue}let v=D.match(l);if(v){let C=v[1],R={name:C,kind:"ClassDeclaration",classification:"Class",signature:`class ${C}`,line:h+1,endLine:h+1,doc:"",capabilities:m({decorators:o}),members:[]};b.push(R),w.node?(w.node.members||(w.node.members=[]),w.node.members.push(R)):t.push(R),r.push({indent:I,name:C,type:"class",node:R}),o=[];continue}let $=D.match(c);if($){let C=!!$[1],R=$[1]||$[2],W=w.type==="class",J=!1,Y={};for(let k of o)if(k.raw.match(/(?:app|router)\.(get|post|put|delete|patch)/)){J=!0;let Z=["get","post","put","delete","patch"].find(ie=>k.raw.toLowerCase().includes(`.${ie}`))?.toUpperCase()||"GET",ee=k.raw.match(/['"]([^'"]+)['"]/),H=ee?ee[1]:"/";if(this.currentRoutePrefix){let ie=this.currentRoutePrefix.endsWith("/")?this.currentRoutePrefix.slice(0,-1):this.currentRoutePrefix,pt=H.startsWith("/")?H:`/${H}`;H=ie+pt}Y={type:"route",method:Z,path:H}}if(J){let k=Y.path||"",le={name:k||R,kind:"HTTP Route",classification:"Service Boundary",signature:`Function: ${R}`,line:h+1,endLine:h+1,doc:"",capabilities:JSON.stringify({handler:W?`${w.name}.${R}`:R,async:C,...Y})};b.push(le),t.push(le),n.push({type:"api_route",name:k,direction:"consume",line:h+1,snippet:D})}let B=o.some(k=>k.raw==="staticmethod"),Q=o.some(k=>k.raw==="classmethod"),q=`${C?"async ":""}${W?(B?"@staticmethod ":Q?"@classmethod ":"")+w.name+".":""}${R}`,L={name:R,kind:C&&W?"AsyncMethodDeclaration":C?"AsyncFunctionDeclaration":W?"MethodDeclaration":"FunctionDeclaration",classification:W?B||Q?"Static Method":"Method":"Function",signature:q,line:h+1,endLine:h+1,doc:"",capabilities:m({decorators:o,async:C}),members:[]};b.push(L),w.node?(w.node.members||(w.node.members=[]),w.node.members.push(L)):t.push(L),r.push({indent:I,name:R,type:"function",node:L}),o=[];continue}let U=/^(?:path|re_path|url)\s*\(\s*['"]([^'"]+)['"]/,ne=D.match(U);if(ne){let C=ne[1].replace(/^\^/,""),R={name:C,kind:"HTTP Route",classification:"Service Boundary",signature:D.trim(),line:h+1,endLine:h+1,doc:"",capabilities:JSON.stringify({type:"route",method:"GET",path:C})};b.push(R),t.push(R),n.push({type:"api_route",name:C,direction:"consume",line:h+1,snippet:D});continue}let S=/(?:requests|httpx|client|http)\.(get|post|put|delete|patch|request)\s*\(\s*(?:url\s*:\s*)?([^,)]+)/,M=D.match(S);if(M){let C=M[1].toUpperCase(),R=M[2].trim();(R.startsWith("'")&&R.endsWith("'")||R.startsWith('"')&&R.endsWith('"'))&&(R=R.substring(1,R.length-1)),n.push({type:"api_route",name:R,direction:"produce",line:h+1,snippet:D,method:C,url:R})}let P=D.match(a);if(P){let C=P[1]||P[2],R={name:C,kind:"ImportSpecifier",classification:"Dependency",signature:`import ${C}`,line:h+1,endLine:h+1,doc:"",capabilities:JSON.stringify({type:"import",module:C})};b.push(R),t.push(R),o=[];continue}o=[],w.node&&(w.node.endLine=h+1)}return{nodes:b,events:n}}};var Qt=[{extension:[".php"],rules:[]},{extension:[".py"],rules:[]},{extension:[".go"],rules:[{regex:/func\s+([a-zA-Z0-9_]+)\(/g,onMatch:i=>({name:i[1],kind:"FunctionDeclaration",classification:"Function",signature:i[0]})},{regex:/func\s+\([^\)]+\)\s+([a-zA-Z0-9_]+)\(/g,onMatch:i=>({name:i[1],kind:"MethodDeclaration",classification:"Method",signature:i[0]})},{regex:/import\s+['"]([^'"]+)['"]/g,onMatch:i=>({name:i[1],kind:"ImportSpecifier",classification:"Dependency",signature:i[0],meta:{type:"import",path:i[1]}})}]},{extension:[".rs"],rules:[{regex:/fn\s+([a-zA-Z0-9_]+)\s*\(/g,onMatch:i=>({name:i[1],kind:"FunctionDeclaration",classification:"Function",signature:i[0]})},{regex:/struct\s+([a-zA-Z0-9_]+)/g,onMatch:i=>({name:i[1],kind:"StructDeclaration",classification:"Class",signature:i[0]})},{regex:/enum\s+([a-zA-Z0-9_]+)/g,onMatch:i=>({name:i[1],kind:"EnumDeclaration",classification:"Class",signature:i[0]})},{regex:/trait\s+([a-zA-Z0-9_]+)/g,onMatch:i=>({name:i[1],kind:"TraitDeclaration",classification:"Class",signature:i[0]})},{regex:/use\s+([a-zA-Z0-9_:]+(?:\s+as\s+[a-zA-Z0-9_]+)?);/g,onMatch:i=>({name:i[1].trim(),kind:"ImportDeclaration",classification:"Dependency",signature:i[0],meta:{type:"import",path:i[1].trim()}})}]},{extension:[".ts",".tsx",".js",".jsx",".mjs",".cjs"],rules:[{regex:/(?:export\s+)?(?:async\s+)?function\s+([a-zA-Z0-9_]+)\s*\(/g,onMatch:i=>({name:i[1],kind:"FunctionDeclaration",classification:"Function"})},{regex:/(?:export\s+)?class\s+([a-zA-Z0-9_]+)/g,onMatch:i=>({name:i[1],kind:"ClassDeclaration",classification:"Class"})},{regex:/(?:export\s+)?interface\s+([a-zA-Z0-9_]+)/g,onMatch:i=>({name:i[1],kind:"InterfaceDeclaration",classification:"Interface"})},{regex:/(?:export\s+)?const\s+([a-zA-Z0-9_]+)\s*=/g,onMatch:i=>({name:i[1],kind:"VariableDeclaration",classification:"Constant"})},{regex:/import\s+.*\s+from\s+['"]([^'"]+)['"]/g,onMatch:i=>({name:i[1],kind:"ImportDeclaration",classification:"Dependency",meta:{path:i[1]}})}]}];function ii(i,e){let t=[];if(i===".go"&&e.some(n=>n.kind==="TypeDeclaration")&&t.push("Go type"),i===".rs"&&(e.some(n=>n.kind==="TraitDeclaration")&&t.push("Rust trait"),e.some(n=>n.kind==="StructDeclaration")&&t.push("Rust struct"),e.some(n=>n.kind==="EnumDeclaration")&&t.push("Rust enum")),i===".py"){for(let n of e)if(n.capabilities)try{if(JSON.parse(n.capabilities).decoratorNames?.length){t.push("Python decorators");break}}catch{}e.some(n=>n.kind==="AsyncFunctionDeclaration"||n.kind==="AsyncMethodDeclaration")&&t.push("Async")}return t}var ze=class{phpParser=new Be;pythonParser=new je;treeSitterParser=new Ue;supports(e){return Qt.some(t=>t.extension.includes(e.toLowerCase()))}async parse(e,t){let n=ht.extname(e).toLowerCase(),s=[],r=[];if(n===".php"||n===".py"||n===".go"||n===".rs"){if(n===".py"){let c=this.pythonParser.parse(t);s=c.nodes,r=c.events}else if(n===".php"){let c=e.toLowerCase().endsWith("api.php"),a=this.phpParser.parse(t,c);s=a.nodes,r=a.events}else try{s=await this.treeSitterParser.parse(e,t)}catch{}if(s.length>0){let c=n===".php"?"Micro IR (PHP/TS) ":n===".py"?"Micro IR (Python/TS) ":n===".go"?"Micro IR (Go/TS) ":"Micro IR (Rust/TS) ",a=s.filter(d=>d.classification!=="Dependency"),u=s.filter(d=>d.classification==="Dependency"),p=ii(n,s),m=Se({classification:c,capabilities:p,exports:a.map(d=>({name:d.name,kind:d.kind,classification:d.classification})),fileName:ht.basename(e)});return{exports:a,imports:u.map(d=>({module:d.name,name:d.name,kind:d.kind,classification:d.classification})),events:r,classification:c,summary:m||`${n.substring(1).toUpperCase()} module`,parseStatus:"success"}}}let o=Qt.find(c=>c.extension.includes(n));if(!o)return{exports:[],imports:[],classification:"Unknown",summary:"",parseStatus:"failed",parseError:`Unsupported file extension: ${n}`};for(let c of o.rules){c.regex.lastIndex=0;let a;for(;(a=c.regex.exec(t))!==null;){let u=c.onMatch(a),p=t.substring(0,a.index).split(`
|
|
36
|
+
`).length;s.push({name:u.name||"anonymous",kind:u.kind||"Unknown",classification:u.classification||"Other",signature:u.signature||a[0],line:p,endLine:p,doc:"",capabilities:JSON.stringify(u.meta||{})})}}let l=Se({classification:`Micro IR (${n.substring(1).toUpperCase()})`,capabilities:[],exports:s.map(c=>({name:c.name,kind:c.kind,classification:c.classification})),fileName:ht.basename(e)});return{exports:s,imports:[],classification:`Micro IR (${n.substring(1).toUpperCase()})`,summary:l||"Module",parseStatus:s.length>0?"success":"partial"}}};j();var yt=new ze;async function Et(i){let e=Xt.extname(i);if(yt.supports(e)&&e!==".ts"&&e!==".tsx")try{let r=await Vt.promises.readFile(i,"utf-8");return{...await yt.parse(i,r),content:r}}catch(r){return E.error({filePath:i,error:r.message},"HeuristicParser failed"),{exports:[],imports:[],classification:"Unknown",summary:"",content:"",parseStatus:"failed",parseError:r.message}}let t;try{t=await Vt.promises.readFile(i)}catch(r){return{exports:[],imports:[],classification:"Error",summary:"",content:"",parseStatus:"failed",parseError:`File read error: ${r.message}`}}let n=t.toString("utf8"),s=Ft(n);try{let r=i.endsWith(".tsx"),o=i.endsWith(".d.ts")||i.endsWith(".d.tsx"),l,c={syntax:"typescript",tsx:r,decorators:!0,comments:!0};if(o)try{l=gt.parseSync(n,c)}catch{l=gt.parseSync(n,{...c,isModule:!1})}else l=gt.parseSync(n,c);let a=l.span.start,u=Pt(t),p=Ht(n),m=_=>Wt(_,a,t),d=Ut(l.body),f=zt(l.body);f.length>0&&E.debug({filePath:i,count:f.length},"Extracted type references"),f.forEach(_=>{d.push({module:"__type_reference__",name:_})});let g=Bt(l.body,a,t,n,s,p,i,m,u),b=jt(l.body,a,t,s,m,u),h=He(i,"","Module"),y=p.length>0&&p[0].start===0?p[0].text:g.find(_=>_.doc)?.doc||"",T=$t(y);if(!T&&g.length>0){let _=Te(n);T=Se({classification:h,capabilities:_,exports:g.map(x=>({name:x.name,kind:x.kind,classification:x.classification})),fileName:Xt.basename(i)})}return{exports:g,imports:d,events:b,classification:h,summary:T,content:n,parseStatus:"success"}}catch(r){E.warn({filePath:i,error:r.message},"SWC parsing failed, using heuristic fallback");try{let o=await yt.parse(i,n);return{...o,content:n,classification:o.classification+" (Degraded)",parseStatus:"partial",parseError:`SWC failed, used heuristic fallback: ${r.message}`}}catch(o){return E.error({filePath:i,error:o.message},"All parsing strategies failed"),{exports:[],imports:[],classification:"Error",summary:"",content:n,parseStatus:"failed",parseError:`All parsing strategies failed: ${o.message}`}}}}function si(i,e=500){let t=[],n=[],s=0;return i.forEach(r=>{let o=r.doc?.split(/\s+/).length||0;s+o>e&&(t.push(n),n=[],s=0),n.push(r),s+=o}),n.length&&t.push(n),t}import qe from"path";var ri=50;function ke(i,e,t,n){let s={name:qe.basename(e)||e,type:"directory",path:e,children:[]};return i.forEach(r=>{let l=qe.relative(e,r.path).split(qe.sep),c=s;for(let a=0;a<l.length;a++){let u=l[a];if(n!==void 0&&a>=n)return;let p=a===l.length-1;if(n===1&&a===0&&p)return;let m=n!==void 0&&a===n-1&&!p,d=qe.join(e,...l.slice(0,a+1)),f=c.children?.find(g=>g.name===u);if(!f){if(c.children&&c.children.length>=ri){c.children.find(h=>h.type==="truncated")||c.children.push({name:"... (truncated) ",type:"truncated",path:"",children:void 0});return}f={name:u,type:p?"file":"directory",path:d,children:p||m?void 0:[],summary:p?{classification:r.classification,summaryText:r.summary,exports:r.exports,imports:r.imports,chunks:r.chunks}:void 0},f.summary&&(t==="structure"||t==="signatures")&&(delete f.summary.chunks,delete f.summary.imports),c.children?.push(f)}c=f}}),s}j();import Nt from"p-limit";var bt=class{startTime=Date.now();indexRuns=0;indexCacheHits=0;lastIndexDurationMs=null;lastIndexCompletedAt=null;lastRunPhases=[];queryCount=0;lastQueryLatencyMs=null;recentLatencySumMs=0;recentLatencyCount=0;recentLatencies=[];searchHistoryFailureCount=0;recordIndexStart(){this.indexRuns+=1}recordIndexCacheHit(){this.indexCacheHits+=1}recordIndexEnd(e){this.lastIndexDurationMs=e,this.lastIndexCompletedAt=Date.now()}recordIndexPhase(e,t){this.lastRunPhases.push({phase:e,durationMs:t})}clearIndexPhases(){this.lastRunPhases=[]}recordQueryStart(){let e=performance.now();return()=>{this.queryCount+=1;let t=performance.now()-e;if(this.lastQueryLatencyMs=t,this.recentLatencies.push(t),this.recentLatencies.length>100){let n=this.recentLatencies.shift();this.recentLatencySumMs=this.recentLatencySumMs-n+t}else this.recentLatencySumMs+=t,this.recentLatencyCount=this.recentLatencies.length}}recordSearchHistoryFailure(){this.searchHistoryFailureCount+=1}getSnapshot(){let e=this.recentLatencies.length,t=e>0?this.recentLatencies.reduce((n,s)=>n+s,0)/e:null;return{index:{runs:this.indexRuns,cacheHits:this.indexCacheHits,lastDurationMs:this.lastIndexDurationMs,lastCompletedAt:this.lastIndexCompletedAt,lastRunPhases:[...this.lastRunPhases]},query:{count:this.queryCount,lastLatencyMs:this.lastQueryLatencyMs,recentLatencySumMs:this.recentLatencySumMs,recentLatencyCount:e,avgLatencyMs:t,searchHistoryFailures:this.searchHistoryFailureCount},uptimeMs:Date.now()-this.startTime}}reset(){this.indexRuns=0,this.indexCacheHits=0,this.lastIndexDurationMs=null,this.lastIndexCompletedAt=null,this.lastRunPhases=[],this.queryCount=0,this.lastQueryLatencyMs=null,this.recentLatencySumMs=0,this.recentLatencyCount=0,this.recentLatencies=[],this.searchHistoryFailureCount=0}},xe=new bt;function Zt(){xe.recordIndexStart()}function _t(){xe.recordIndexCacheHit()}function en(i){xe.recordIndexEnd(i)}function Ie(i,e){xe.recordIndexPhase(i,e)}function tn(){xe.clearIndexPhases()}import Dt from"path";import Xi from"fs";import Zi from"os";j();import mi from"better-sqlite3";import Ge from"path";import Tt from"fs";import sn from"crypto";j();import Le from"fs";import Rt from"path";import{fileURLToPath as oi}from"url";var ve=E.child({module:"migrations"}),ai=oi(import.meta.url),ci=Rt.dirname(ai);function li(i){i.exec(`
|
|
37
37
|
CREATE TABLE IF NOT EXISTS schema_migrations (
|
|
38
38
|
version INTEGER PRIMARY KEY,
|
|
39
39
|
name TEXT NOT NULL,
|
|
40
40
|
applied_at REAL DEFAULT (unixepoch())
|
|
41
41
|
);
|
|
42
|
-
`)}function
|
|
42
|
+
`)}function ui(i){li(i);let e=i.prepare("SELECT version FROM schema_migrations ORDER BY version").all();return new Set(e.map(t=>t.version))}function pi(){let i=ci;if(!Le.readdirSync(i).some(r=>r.match(/^\d{3}_.*\.sql$/))){let r=Rt.resolve(i,"../../data/migrations");Le.existsSync(r)&&Le.readdirSync(r).some(l=>l.match(/^\d{3}_.*\.sql$/))&&(i=r)}let n=Le.readdirSync(i).filter(r=>r.match(/^\d{3}_.*\.sql$/)).sort(),s=[];for(let r of n){let o=r.match(/^(\d{3})_(.+)\.sql$/);if(!o)continue;let l=parseInt(o[1],10),c=o[2],u=Le.readFileSync(Rt.join(i,r),"utf-8").split(/^-- DOWN$/m),p=u[0].trim(),m=u[1]?.trim();s.push({version:l,name:c,up:p,down:m})}return s}function di(i,e){ve.info({version:e.version,name:e.name},"Applying migration"),i.transaction(()=>{i.exec(e.up),i.prepare("INSERT INTO schema_migrations (version, name) VALUES (?, ?)").run(e.version,e.name)})(),ve.info({version:e.version},"Migration applied successfully")}function nn(i){let e=ui(i),n=pi().filter(s=>!e.has(s.version));if(n.length===0){ve.debug("No pending migrations");return}ve.info({count:n.length},"Running pending migrations");for(let s of n)di(i,s);ve.info("All migrations complete")}import fi from"os";var te=E.child({module:"db"});function Je(i){let e=fi.homedir(),t=Ge.join(e,".mcp-liquid-shadow"),n=Ge.join(t,"dbs");Tt.existsSync(n)||Tt.mkdirSync(n,{recursive:!0});let s=sn.createHash("sha256").update(i).digest("hex").substring(0,12),o=`${Ge.basename(i).replace(/[^a-zA-Z0-9-_]/g,"_")}_${s}.db`;return Ge.join(n,o)}function hi(i,e){let t=e||Je(i);te.debug({repoPath:i,dbPath:t},"Initializing database");let n=new mi(t);return n.pragma("journal_mode = WAL"),n.pragma("busy_timeout = 5000"),nn(n),Ke.set(i,t),se.set(t,n),te.debug({repoPath:i,dbPath:t},"Database initialized successfully"),n}var se=new Map,Ke=new Map;function he(i){return sn.createHash("sha256").update(i,"utf8").digest("hex")}function rn(i,e){return e?he(i)!==e:!0}function ge(i){let e=Ke.get(i)||Je(i),t=se.get(e);if(t){if(t.open)return t;se.delete(e)}let n=hi(i);return se.set(e,n),n}function on(i){let e=Je(i);if(!Tt.existsSync(e))return!1;try{let t=ge(i);return t.prepare(`
|
|
43
43
|
SELECT value FROM index_metadata
|
|
44
44
|
WHERE key = 'index_completed'
|
|
45
|
-
`).get()?.value==="true"?!0:t.prepare("SELECT COUNT(*) as count FROM files").get().count>0}catch(t){return
|
|
46
|
-
INSERT OR REPLACE INTO index_metadata (key, value, updated_at)
|
|
47
|
-
VALUES ('index_completed', 'true', unixepoch())
|
|
48
|
-
`).run(),t.prepare(`
|
|
49
|
-
INSERT OR REPLACE INTO index_metadata (key, value, updated_at)
|
|
50
|
-
VALUES ('last_indexed_at', ?, unixepoch())
|
|
51
|
-
`).run(Date.now().toString()),e&&t.prepare(`
|
|
52
|
-
INSERT OR REPLACE INTO index_metadata (key, value, updated_at)
|
|
53
|
-
VALUES ('last_indexed_commit', ?, unixepoch())
|
|
54
|
-
`).run(e),Y.info({repoPath:i,commitSha:e},"Repository marked as indexed")}function Jt(i){try{return pe(i).prepare(`
|
|
45
|
+
`).get()?.value==="true"?!0:t.prepare("SELECT COUNT(*) as count FROM files").get().count>0}catch(t){return te.debug({repoPath:i,error:t},"Error checking index status"),!1}}function St(i,e){let t=ge(i),n=t.prepare("INSERT OR REPLACE INTO index_metadata (key, value, updated_at) VALUES (?, ?, unixepoch())");t.transaction(()=>{n.run("index_completed","true"),n.run("last_indexed_at",Date.now().toString()),e&&n.run("last_indexed_commit",e)})(),te.debug({repoPath:i,commitSha:e},"Repository marked as indexed")}function an(i){try{return ge(i).prepare(`
|
|
55
46
|
SELECT value FROM index_metadata
|
|
56
47
|
WHERE key = 'last_indexed_commit'
|
|
57
|
-
`).get()?.value||null}catch(e){return
|
|
58
|
-
`);for(let n of t){let s=n.trim();if(s.startsWith("FROM "))e.push({key:"base_image",value:s.substring(5).trim(),kind:"Image"});else if(s.startsWith("EXPOSE "))e.push({key:"port",value:s.substring(7).trim(),kind:"Port"});else if(s.startsWith("ENV ")){let r=s.substring(4).trim().split(/\s+|=/);if(r[0]){let o=r[0],l=r.slice(1).join("= ").trim()||"undefined",c="Env";(o.endsWith("_URI")||o.endsWith("_URL")||o.endsWith("_HOST"))&&(c="Service"),e.push({key:o,value:l,kind:c})}}}}function
|
|
59
|
-
`);for(let n of t){let s=n.trim();if(s&&!s.startsWith("#")){let r=s.split("=");if(r[0]){let o=r[0].trim(),l=r.slice(1).join("=");l=l.trim().replace(/^['"](.*)['"]$/,"$1");let c="Env";(o.endsWith("_URI")||o.endsWith("_URL")||o.endsWith("_HOST"))&&(c="Service"),e.push({key:o,value:l,kind:c})}}}}function
|
|
48
|
+
`).get()?.value||null}catch(e){return te.debug({repoPath:i,error:e},"Error getting last indexed commit"),null}}function cn(i){let e=Ke.get(i)||Je(i),t=se.get(e);t&&(t.open&&(te.debug({repoPath:i,dbPath:e},"Closing database connection"),t.close()),se.delete(e)),Ke.delete(i)}function ln(){for(let[i,e]of se.entries())try{e.open&&(te.debug({dbPath:i},"Closing database connection"),e.close())}catch(t){te.error({dbPath:i,err:t},"Error closing database execution")}se.clear()}process.on("exit",()=>ln());var un=i=>{te.debug({signal:i},"Received termination signal, closing databases"),ln(),process.exit(0)};process.on("SIGINT",()=>un("SIGINT"));process.on("SIGTERM",()=>un("SIGTERM"));import K from"path";import Ee from"fs";import{loadConfig as yi,createMatchPath as Ei}from"tsconfig-paths";import re from"path";import Ce from"fs";var oe=class extends Error{constructor(t,n,s){super(n);this.code=t;this.cause=s;this.name="FileSystemError"}};function pn(i){let e;try{e=Ce.statSync(i).isDirectory()?i:re.dirname(i)}catch(t){throw t.code==="ENOENT"?new oe("FILE_NOT_FOUND",`Start path does not exist: ${i}`,t):t.code==="EACCES"||t.code==="EPERM"?new oe("PERMISSION_DENIED",`Permission denied accessing: ${i}`,t):new oe("UNKNOWN",`Failed to access path: ${i}`,t)}for(;e!==re.dirname(e);){let t=re.join(e,"tsconfig.json");if(Ce.existsSync(t))return e;e=re.dirname(e)}return null}function dn(i){let e;try{e=Ce.statSync(i).isDirectory()?i:re.dirname(i)}catch(t){throw t.code==="ENOENT"?new oe("FILE_NOT_FOUND",`Start path does not exist: ${i}`,t):t.code==="EACCES"||t.code==="EPERM"?new oe("PERMISSION_DENIED",`Permission denied accessing: ${i}`,t):new oe("UNKNOWN",`Failed to access path: ${i}`,t)}for(;e!==re.dirname(e);){let t=re.join(e,"package.json");if(Ce.existsSync(t))try{if(JSON.parse(Ce.readFileSync(t,"utf8")).workspaces)return e}catch{}e=re.dirname(e)}return null}import ye from"path";import pe from"fs";function mn(i,e){let t=new Map,n=e.workspaces||[];for(let s of n){let r=s.replace("/*",""),o=ye.join(i,r);if(!pe.existsSync(o))continue;let l=pe.readdirSync(o);for(let c of l){let a=ye.join(o,c,"package.json");if(pe.existsSync(a))try{let u=JSON.parse(pe.readFileSync(a,"utf8"));u.name&&t.set(u.name,{name:u.name,path:ye.dirname(a),main:u.main||"dist/index.js"})}catch{}}}return t}function fn(i){let e=new Map;try{let t=JSON.parse(pe.readFileSync(i,"utf8")),n={...t.dependencies,...t.devDependencies};for(let[s,r]of Object.entries(n))if(typeof r=="string"&&r.startsWith("file:")){let o=r.substring(5),l=ye.dirname(i),c=ye.resolve(l,o),a=ye.join(c,"package.json");if(pe.existsSync(a))try{let u=JSON.parse(pe.readFileSync(a,"utf8"));e.set(s,{name:s,path:c,main:u.main||"dist/index.js"})}catch{}}}catch{}return e}import hn from"path";import G from"fs";var gi=[".ts",".tsx",".d.ts",".js",".jsx"];function ae(i){let e=hn.extname(i);if(e===".js"||e===".jsx"){let t=i.slice(0,-e.length),n=e===".jsx"?[".tsx",".ts"]:[".ts",".tsx"];for(let s of n){let r=t+s;if(G.existsSync(r)&&G.statSync(r).isFile())return r}if(G.existsSync(i)&&G.statSync(i).isFile())return i}if(G.existsSync(i)&&G.statSync(i).isFile())return i;for(let t of gi){let n=i+t;if(G.existsSync(n)&&G.statSync(n).isFile())return n}if(G.existsSync(i)&&G.statSync(i).isDirectory())for(let t of[".ts",".tsx",".js",".jsx"]){let n=hn.join(i,"index"+t);if(G.existsSync(n))return n}return""}var Qe=new Map;function Ye(i){let e=pn(i);if(!e)return null;if(Qe.has(e))return Qe.get(e)||null;let t=yi(e);if(t.resultType==="failed")return Qe.set(e,null),null;let n=t,s=n.absoluteBaseUrl;!s&&n.paths&&Object.keys(n.paths).length>0&&(s=n.configFileAbsolutePath?K.dirname(n.configFileAbsolutePath):e);let r=Ei(s,n.paths,n.mainFields,n.addMatchAll),o=dn(e),l=new Map;if(o){let p=K.join(o,"package.json");if(Ee.existsSync(p))try{let m=JSON.parse(Ee.readFileSync(p,"utf8"));l=mn(o,m)}catch{}}let c=K.join(e,"package.json");Ee.existsSync(c)&&fn(c).forEach((m,d)=>l.set(d,m));let a={baseUrl:s||"",paths:n.paths,matchPath:r,workspacePackages:l,imports:new Map},u=K.join(e,"package.json");if(Ee.existsSync(u))try{let p=JSON.parse(Ee.readFileSync(u,"utf8"));if(p.imports){for(let[m,d]of Object.entries(p.imports))if(typeof d=="string"||typeof d=="object"&&d!==null){let f=d;Array.isArray(d)&&(f=d[0]),typeof f=="object"&&(f=f.default||f.node),typeof f=="string"&&a.imports.set(m,f)}}}catch{}return Qe.set(e,a),a}function Ne(i,e,t){if(!i)return"";if(i.includes(".")&&!i.startsWith(".")&&!i.startsWith("/")&&!i.endsWith(".js")&&!i.endsWith(".ts")&&!i.endsWith(".json")){let s=i.split(".")[0];if(s&&s!==i){let r=Ne(s,e,t);if(r)return r}}if(i.startsWith(".")){let s=K.dirname(e),r=K.resolve(s,i);return ae(r)}let n=Ye(e);if(n){let s=n.matchPath(i);if(s)return ae(s);if(!i.startsWith("@")||i.startsWith("@/")){let o=K.resolve(n.baseUrl,i),l=ae(o);if(l)return l}for(let[o,l]of n.imports.entries())if(o.includes("*")){let c="^"+o.replace(/[\\^$+.()|[\]{}]/g,"\\$&").replace(/\*/g,"(.*)")+"$",a=new RegExp(c),u=i.match(a);if(u){let p=u[1],m=l.replace("*",p),d=K.resolve(n.baseUrl,m);return ae(d)}}else if(o===i){let c=K.resolve(n.baseUrl,l);return ae(c)}let r=n.workspacePackages.get(i);if(r){let o=K.join(r.path,"src/index.ts");if(Ee.existsSync(o))return o;let l=K.join(r.path,r.main),c=ae(l);if(c)return c}}return""}import bi from"fs";import _i from"path";import yn from"js-yaml";function gn(i){let e=_i.basename(i),t=bi.readFileSync(i,"utf8"),n=[];if(e.endsWith(".prisma"))return{...ki(t,i),content:t};if(e.endsWith(".graphql")||e.endsWith(".gql"))return{...xi(t,i),content:t};let s="Configuration";return e==="lerna.json"?{...Li(t,i),content:t}:e==="turbo.json"?{...vi(t,i),content:t}:e==="pnpm-workspace.yaml"?{...Ci(t,i),content:t}:(e.includes("Dockerfile")?(s="Infrastructure (Docker) ",Ri(t,n)):e.endsWith(".yaml")||e.endsWith(".yml")?(s="Infrastructure (YAML) ",Ti(t,n)):e.startsWith(".env")?(s="Configuration (Env) ",Si(t,n)):e==="package.json"&&(s="Project Manifest",Ii(t,n)),{configs:n,classification:s,content:t})}function Ri(i,e){let t=i.split(`
|
|
49
|
+
`);for(let n of t){let s=n.trim();if(s.startsWith("FROM "))e.push({key:"base_image",value:s.substring(5).trim(),kind:"Image"});else if(s.startsWith("EXPOSE "))e.push({key:"port",value:s.substring(7).trim(),kind:"Port"});else if(s.startsWith("ENV ")){let r=s.substring(4).trim().split(/\s+|=/);if(r[0]){let o=r[0],l=r.slice(1).join("= ").trim()||"undefined",c="Env";(o.endsWith("_URI")||o.endsWith("_URL")||o.endsWith("_HOST"))&&(c="Service"),e.push({key:o,value:l,kind:c})}}}}function Ti(i,e){try{let t=yn.load(i);if(!t||typeof t!="object")return;if(t.services&&typeof t.services=="object")for(let[s,r]of Object.entries(t.services)){if(!r||typeof r!="object")continue;let o=r;if(e.push({key:`service:${s}`,value:s,kind:"Service"}),o.image&&e.push({key:`service:${s}:image`,value:String(o.image),kind:"Image"}),Array.isArray(o.ports)&&o.ports.forEach(l=>{e.push({key:`service:${s}:port`,value:String(l),kind:"Port"})}),o.environment){if(Array.isArray(o.environment))o.environment.forEach(l=>{let[c,...a]=l.split("= ");c&&a.length>0&&e.push({key:`service:${s}:env:${c}`,value:a.join("= "),kind:"Env"})});else if(typeof o.environment=="object")for(let[l,c]of Object.entries(o.environment))e.push({key:`service:${s}:env:${l}`,value:String(c),kind:"Env"})}if(Array.isArray(o.depends_on))o.depends_on.forEach(l=>{e.push({key:`service:${s}:depends_on`,value:l,kind:"Dependency"})});else if(o.depends_on&&typeof o.depends_on=="object")for(let l of Object.keys(o.depends_on))e.push({key:`service:${s}:depends_on`,value:l,kind:"Dependency"})}let n=(s,r="")=>{if(!(!s||typeof s!="object"||Array.isArray(s)))for(let[o,l]of Object.entries(s)){let c=r?`${r}.${o}`:o;if(t.services&&(c.startsWith("services.")||c==="services")){l&&typeof l=="object"&&!Array.isArray(l)&&n(l,c);continue}if(l&&typeof l=="object"&&!Array.isArray(l))n(l,c);else{let a=String(l),u="Env";o.toLowerCase().includes("image")&&(u="Image"),o.toLowerCase().includes("port")&&(u="Port"),o.toLowerCase().includes("service")&&(u="Service"),(o.endsWith("_URI")||o.endsWith("_URL")||o.endsWith("_HOST"))&&(u="Service"),e.push({key:c,value:a.length>100?a.substring(0,97)+"...":a,kind:u})}}};n(t)}catch{let n=i.match(/^\s{2}([a-z0-9_-]+):/gm);n&&n.forEach(s=>{let r=s.trim().replace(" : ","");r!=="services"&&r!=="version"&&r!=="volumes"&&r!=="networks"&&e.push({key:"service",value:r,kind:"Service"})})}}function Si(i,e){let t=i.split(`
|
|
50
|
+
`);for(let n of t){let s=n.trim();if(s&&!s.startsWith("#")){let r=s.split("=");if(r[0]){let o=r[0].trim(),l=r.slice(1).join("=");l=l.trim().replace(/^['"](.*)['"]$/,"$1");let c="Env";(o.endsWith("_URI")||o.endsWith("_URL")||o.endsWith("_HOST"))&&(c="Service"),e.push({key:o,value:l,kind:c})}}}}function ki(i,e){let t=[],n="Contract (Prisma) ",s=/^model\s+(\w+)/gm,r;for(;(r=s.exec(i))!==null;)t.push({key:"model",value:r[1],kind:"Database Model"});let o=/^enum\s+(\w+)/gm;for(;(r=o.exec(i))!==null;)t.push({key:"enum",value:r[1],kind:"Database Enum"});let l=/provider\s*=\s*"([^"]+)"/,c=i.match(l);return c&&t.push({key:"datasource_provider",value:c[1],kind:"Database Config"}),{classification:n,configs:t,content:i}}function xi(i,e){let t=[],n="Contract (GraphQL) ",s=/^(?:type|input|interface|enum)\s+(\w+)/gm,r;for(;(r=s.exec(i))!==null;){let o=r[0],l="GraphQL Type";o.startsWith("input")&&(l="GraphQL Input"),o.startsWith("interface")&&(l="GraphQL Interface"),o.startsWith("enum")&&(l="GraphQL Enum"),t.push({key:"type_definition",value:r[1],kind:l})}return{classification:n,configs:t,content:i}}function Ii(i,e){try{let t=JSON.parse(i);if(t.name&&e.push({key:"name",value:t.name,kind:"Service"}),t.description&&e.push({key:"description",value:t.description,kind:"Service"}),t.workspaces){let r=Array.isArray(t.workspaces)?t.workspaces.join("",""):JSON.stringify(t.workspaces);e.push({key:"workspaces",value:r,kind:"Env"})}if(t.scripts){let r=["start","dev","build","test","docker"];for(let o of Object.keys(t.scripts))r.some(l=>o.includes(l))&&e.push({key:`script:${o}`,value:t.scripts[o],kind:"Env"})}let n={...t.dependencies,...t.devDependencies},s=["react","vue","svelte","angular","next","nuxt","express","fastify","nestjs","remix","vite","webpack","tailwindcss","database"];for(let r of Object.keys(n))if(s.some(o=>r.includes(o))){let o=n[r].replace(/[\^~]/,"");e.push({key:`dep:${r}`,value:o,kind:"Service"})}}catch{}}function Li(i,e){let t=[],n="Monorepo (Lerna) ";try{let s=JSON.parse(i);t.push({key:"monorepo_type",value:"lerna",kind:"Monorepo"}),s.version&&t.push({key:"lerna_version",value:s.version,kind:"Monorepo"}),s.packages&&(Array.isArray(s.packages)?s.packages:[s.packages]).forEach(o=>{t.push({key:"package_glob",value:o,kind:"Monorepo"})}),s.npmClient&&t.push({key:"npm_client",value:s.npmClient,kind:"Monorepo"})}catch{}return{configs:t,classification:n,content:i}}function vi(i,e){let t=[],n="Monorepo (Turborepo) ";try{let s=JSON.parse(i);if(t.push({key:"monorepo_type",value:"turborepo",kind:"Monorepo"}),s.pipeline)for(let r of Object.keys(s.pipeline)){t.push({key:`pipeline:${r}`,value:r,kind:"Monorepo"});let o=s.pipeline[r];o.dependsOn&&t.push({key:`pipeline:${r}:depends_on`,value:o.dependsOn.join("",""),kind:"Dependency"})}if(s.tasks)for(let r of Object.keys(s.tasks))t.push({key:`task:${r}`,value:r,kind:"Monorepo"})}catch{}return{configs:t,classification:n,content:i}}function Ci(i,e){let t=[],n="Monorepo (pnpm) ";try{let s=yn.load(i);t.push({key:"monorepo_type",value:"pnpm",kind:"Monorepo"}),s&&s.packages&&(Array.isArray(s.packages)?s.packages:[s.packages]).forEach(o=>{t.push({key:"package_glob",value:o,kind:"Monorepo"})})}catch{}return{configs:t,classification:n,content:i}}j();import En from"fs";import Ni from"path";import bn from"js-yaml";var _n={ignore:[],include:[],maxDepth:10},Di=[{name:".liquid-shadow.yaml",parse:i=>bn.load(i)??{}},{name:".liquid-shadow.yml",parse:i=>bn.load(i)??{}},{name:".ls.json",parse:i=>JSON.parse(i)},{name:".liquid-shadow.json",parse:i=>JSON.parse(i)},{name:".ls.rc",parse:i=>JSON.parse(i)},{name:".liquid-shadow.rc",parse:i=>JSON.parse(i)}];function Ve(i){for(let{name:e,parse:t}of Di){let n=Ni.join(i,e);if(En.existsSync(n))try{let s=En.readFileSync(n,"utf8"),r=t(s);return E.debug({repoPath:i,configFile:e},"Loaded repository configuration"),{..._n,...r}}catch(s){E.error({repoPath:i,file:e,err:s},"Failed to parse configuration file")}}return _n}import Mi from"path";var F=class{db;constructor(e){this.db=e}get database(){return this.db}all(e,...t){return this.db.prepare(e).all(...t)}get(e,...t){return this.db.prepare(e).get(...t)}run(e,...t){return this.db.prepare(e).run(...t).changes}insert(e,...t){return this.db.prepare(e).run(...t).lastInsertRowid}transaction(e){return this.db.transaction(e)()}};var Xe=class extends F{findByPath(e){return this.get("SELECT * FROM files WHERE path = ?",e)}findAll(e){let t="SELECT * FROM files ORDER BY path ASC";return e&&(t+=` LIMIT ${e}`),this.all(t)}getAllPaths(){return this.all("SELECT path FROM files").map(t=>t.path)}findInSubPath(e,t){let n=Mi.resolve(e,t),s=n.endsWith("/")?n:n+"/";return this.all(`
|
|
60
51
|
SELECT * FROM files
|
|
61
52
|
WHERE (path LIKE ? OR path = ?)
|
|
62
53
|
ORDER BY path ASC
|
|
@@ -100,7 +91,7 @@ import Ln from"fast-glob";import nt from"fs";import kn from"ignore";import It fr
|
|
|
100
91
|
AND file_path IS NOT NULL
|
|
101
92
|
ORDER BY created_at DESC
|
|
102
93
|
LIMIT 100
|
|
103
|
-
`,l);for(let a of c){n[a.file_path]||(n[a.file_path]={score:1,reasons:[]});let u=a.mission_id?e.includes(a.mission_id):!1,p=u?.1:.2;n[a.file_path].score<5&&(n[a.file_path].score+=p);let
|
|
94
|
+
`,l);for(let a of c){n[a.file_path]||(n[a.file_path]={score:1,reasons:[]});let u=a.mission_id?e.includes(a.mission_id):!1,p=u?.1:.2;n[a.file_path].score<5&&(n[a.file_path].score+=p);let m=u?`Lineage Intent: ${a.type}`:`Recent Intent: ${a.type}`;!n[a.file_path].reasons.includes(m)&&n[a.file_path].reasons.length<5&&n[a.file_path].reasons.push(m)}return n}getCount(){return this.get("SELECT COUNT(*) as count FROM files")?.count||0}getTopDirectories(e,t=8){return this.all(`
|
|
104
95
|
SELECT
|
|
105
96
|
SUBSTR(path, LENGTH(?) + 2,
|
|
106
97
|
INSTR(SUBSTR(path, LENGTH(?) + 2), '/') - 1
|
|
@@ -123,8 +114,8 @@ import Ln from"fast-glob";import nt from"fs";import kn from"ignore";import It fr
|
|
|
123
114
|
SUBSTR(path, LENGTH(?) + 2) as relPath
|
|
124
115
|
FROM files
|
|
125
116
|
WHERE path LIKE ? || '/%/package.json'
|
|
126
|
-
`,e,e)}deletePaths(e){if(e.length===0)return;let t=this.db.prepare("DELETE FROM files WHERE path = ?");this.db.transaction(s=>{for(let r of s)t.run(r)})(e)}updateMtime(e,t){this.run("UPDATE files SET mtime = ? WHERE path = ?",t,e)}batchSaveIndexResults(e,t,n,s){let r=this.db.prepare("DELETE FROM exports WHERE file_path = ?"),o=this.db.prepare("DELETE FROM imports WHERE file_path = ?"),l=this.db.prepare("DELETE FROM configs WHERE file_path = ?"),c=this.db.prepare("DELETE FROM file_content WHERE file_path = ?"),a=this.db.prepare("DELETE FROM event_synapses WHERE file_path = ?"),u=this.db.prepare("INSERT INTO exports (file_path, name, kind, signature, doc, start_line, end_line, classification, capabilities, parent_id, embedding) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"),p=this.db.prepare("INSERT INTO imports (file_path, module_specifier, imported_symbols, resolved_path) VALUES (?, ?, ?, ?)"),
|
|
127
|
-
INSERT INTO files (path, mtime, last_scanned_at, classification, summary, embedding, content_hash)
|
|
117
|
+
`,e,e)}deletePaths(e){if(e.length===0)return;let t=this.db.prepare("DELETE FROM files WHERE path = ?");this.db.transaction(s=>{for(let r of s)t.run(r)})(e)}updateMtime(e,t){this.run("UPDATE files SET mtime = ? WHERE path = ?",t,e)}batchSaveIndexResults(e,t,n,s){let r=this.db.prepare("DELETE FROM exports WHERE file_path = ?"),o=this.db.prepare("DELETE FROM imports WHERE file_path = ?"),l=this.db.prepare("DELETE FROM configs WHERE file_path = ?"),c=this.db.prepare("DELETE FROM file_content WHERE file_path = ?"),a=this.db.prepare("DELETE FROM event_synapses WHERE file_path = ?"),u=this.db.prepare("INSERT INTO exports (file_path, name, kind, signature, doc, start_line, end_line, classification, capabilities, parent_id, embedding) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"),p=this.db.prepare("INSERT INTO imports (file_path, module_specifier, imported_symbols, resolved_path) VALUES (?, ?, ?, ?)"),m=this.db.prepare("INSERT INTO configs (file_path, key, value, kind) VALUES (?, ?, ?, ?)"),d=this.db.prepare("INSERT INTO file_content (file_path, content) VALUES (?, ?)"),f=this.db.prepare("INSERT INTO event_synapses (file_path, type, name, direction, line_number, code_snippet) VALUES (?, ?, ?, ?, ?, ?)"),g=this.db.prepare(`
|
|
118
|
+
INSERT INTO files (path, mtime, last_scanned_at, classification, summary, embedding, content_hash)
|
|
128
119
|
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
129
120
|
ON CONFLICT(path) DO UPDATE SET
|
|
130
121
|
mtime=excluded.mtime,
|
|
@@ -133,7 +124,7 @@ import Ln from"fast-glob";import nt from"fs";import kn from"ignore";import It fr
|
|
|
133
124
|
summary=excluded.summary,
|
|
134
125
|
embedding=excluded.embedding,
|
|
135
126
|
content_hash=excluded.content_hash
|
|
136
|
-
`)
|
|
127
|
+
`),b=this.db.transaction(y=>{for(let T of y){let{meta:_,exports:x,imports:I,configs:D,events:z,content:w,classification:N,summary:v,embedding:$,contentHash:U}=T;r.run(_.path),o.run(_.path),l.run(_.path),c.run(_.path),a.run(_.path);let ne=U??(w&&n?n(w):null);if(g.run(_.path,_.mtime,Date.now(),N||"Unknown",v||"",$?JSON.stringify($):null,ne),x){let S=(M,P,C)=>{for(let R of P){let W=R.embedding?JSON.stringify(R.embedding):null,J=u.run(M,R.name,R.kind,R.signature,R.doc||"",R.line,R.endLine||R.line,R.classification||"Other",R.capabilities||"[]",C,W);R.members&&R.members.length>0&&S(M,R.members,J.lastInsertRowid)}};S(_.path,x,null)}if(I)for(let S of I){let M=S.resolved_path!==void 0?S.resolved_path:s?.(S.module,_.path,t)??"";p.run(_.path,S.module,S.name,M)}if(D)for(let S of D)m.run(_.path,S.key,S.value,S.kind);if(w!==void 0&&d.run(_.path,w),z)for(let S of z)f.run(_.path,S.type,S.name,S.direction,S.line,S.snippet)}}),h=500;for(let y=0;y<e.length;y+=h)b(e.slice(y,y+h))}getLatestScanTime(){return this.get("SELECT MAX(last_scanned_at) as t FROM files")?.t||null}};var Ze=class extends F{findByNameAndFile(e,t){return this.all("SELECT * FROM exports WHERE file_path = ? AND name = ?",t,e)}findByNameGlobal(e){return this.all("SELECT * FROM exports WHERE name = ?",e)}findAtLine(e,t){return this.get(`
|
|
137
128
|
SELECT * FROM exports
|
|
138
129
|
WHERE file_path = ? AND start_line <= ? AND end_line >= ?
|
|
139
130
|
ORDER BY (end_line - start_line) ASC -- Get innermost symbol
|
|
@@ -224,7 +215,7 @@ import Ln from"fast-glob";import nt from"fs";import kn from"ignore";import It fr
|
|
|
224
215
|
SELECT * FROM exports
|
|
225
216
|
WHERE lower(name) LIKE ?
|
|
226
217
|
LIMIT ?
|
|
227
|
-
`,`%${e.toLowerCase()}%`,t)}getAllNames(e=5e3){return this.all("SELECT DISTINCT name FROM exports WHERE parent_id IS NULL LIMIT ?",e).map(n=>n.name)}countByFile(e){return this.get("SELECT COUNT(*) as count FROM exports WHERE file_path = ?",e)?.count||0}findDeadExports(e={}){let{limit:t=50,includeTests:n=!1,includeMigrations:s=!1,includeFixtures:r=!1,excludePatterns:o=[],confidenceThreshold:l="all"}=e,c=[];n||(c.push("e.file_path NOT LIKE '%/test/%'"),c.push("e.file_path NOT LIKE '%/tests/%'"),c.push("e.file_path NOT LIKE '%/__tests__/%'"),c.push("e.file_path NOT LIKE '%.spec.%'"),c.push("e.file_path NOT LIKE '%.test.%'")),s||(c.push("e.file_path NOT LIKE '%/migrations/%'"),c.push("e.file_path NOT LIKE '%/migration/%'"),c.push("e.file_path NOT LIKE '%Migration.%'")),r||(c.push("e.file_path NOT LIKE '%/__fixtures__/%'"),c.push("e.file_path NOT LIKE '%/__mocks__/%'"),c.push("e.file_path NOT LIKE '%/fixtures/%'"),c.push("e.file_path NOT LIKE '%/mocks/%'"),c.push("e.file_path NOT LIKE '%.fixture.%'"),c.push("e.file_path NOT LIKE '%.mock.%'"));for(let
|
|
218
|
+
`,`%${e.toLowerCase()}%`,t)}getAllNames(e=5e3){return this.all("SELECT DISTINCT name FROM exports WHERE parent_id IS NULL LIMIT ?",e).map(n=>n.name)}countByFile(e){return this.get("SELECT COUNT(*) as count FROM exports WHERE file_path = ?",e)?.count||0}findDeadExports(e={}){let{limit:t=50,includeTests:n=!1,includeMigrations:s=!1,includeFixtures:r=!1,excludePatterns:o=[],confidenceThreshold:l="all"}=e,c=[];n||(c.push("e.file_path NOT LIKE '%/test/%'"),c.push("e.file_path NOT LIKE '%/tests/%'"),c.push("e.file_path NOT LIKE '%/__tests__/%'"),c.push("e.file_path NOT LIKE '%.spec.%'"),c.push("e.file_path NOT LIKE '%.test.%'")),s||(c.push("e.file_path NOT LIKE '%/migrations/%'"),c.push("e.file_path NOT LIKE '%/migration/%'"),c.push("e.file_path NOT LIKE '%Migration.%'")),r||(c.push("e.file_path NOT LIKE '%/__fixtures__/%'"),c.push("e.file_path NOT LIKE '%/__mocks__/%'"),c.push("e.file_path NOT LIKE '%/fixtures/%'"),c.push("e.file_path NOT LIKE '%/mocks/%'"),c.push("e.file_path NOT LIKE '%.fixture.%'"),c.push("e.file_path NOT LIKE '%.mock.%'"));for(let d of o){let f=d.replace(/\*\*/g,"%").replace(/\*/g,"%").replace(/\?/g,"_");c.push(`e.file_path NOT LIKE '${f}'`)}let a=c.length>0?`AND ${c.join(" AND ")}`:"",p=this.all(`
|
|
228
219
|
SELECT e.name, e.kind, e.file_path, e.start_line
|
|
229
220
|
FROM exports e
|
|
230
221
|
WHERE e.kind IN (
|
|
@@ -238,7 +229,7 @@ import Ln from"fast-glob";import nt from"fs";import kn from"ignore";import It fr
|
|
|
238
229
|
AND NOT EXISTS (SELECT 1 FROM imports i WHERE i.resolved_path = e.file_path AND i.imported_symbols LIKE '%*%')
|
|
239
230
|
ORDER BY e.file_path, e.start_line
|
|
240
231
|
LIMIT ?
|
|
241
|
-
`,t*2).map(
|
|
232
|
+
`,t*2).map(d=>{let{confidence:f,reason:g}=this.scoreDeadExportConfidence(d);return{...d,confidence:f,reason:g}}),m=p;return l==="high"?m=p.filter(d=>d.confidence==="high"):l==="medium"&&(m=p.filter(d=>d.confidence==="high"||d.confidence==="medium")),m.slice(0,t)}scoreDeadExportConfidence(e){let t=e.file_path.toLowerCase(),n=e.name;return t.includes("/index.")||t.endsWith("index.ts")||t.endsWith("index.js")?{confidence:"low",reason:"Barrel/index file - likely re-export"}:e.kind==="TsInterfaceDeclaration"||e.kind==="TsTypeAliasDeclaration"?{confidence:"medium",reason:"Type definition - may be used externally"}:t.includes("/entry/")||t.includes("/bin/")||t.includes("main.")||t.includes("server.")||t.includes("cli.")?{confidence:"medium",reason:"Entry point - may be invoked externally"}:n.startsWith("create")||n.endsWith("Factory")||n.endsWith("Builder")?{confidence:"medium",reason:"Factory/builder pattern - may be used dynamically"}:n.startsWith("use")&&n.length>3?{confidence:"medium",reason:"Hook pattern - may be used in components"}:{confidence:"high",reason:"No detected usage"}}getGravityMap(e=[],t){let n={},s=`
|
|
242
233
|
SELECT ws.symbol_id, m.name as mission_name, m.status
|
|
243
234
|
FROM working_set ws
|
|
244
235
|
JOIN missions m ON ws.mission_id = m.id
|
|
@@ -254,7 +245,7 @@ import Ln from"fast-glob";import nt from"fs";import kn from"ignore";import It fr
|
|
|
254
245
|
AND symbol_id IS NOT NULL
|
|
255
246
|
ORDER BY created_at DESC
|
|
256
247
|
LIMIT 200
|
|
257
|
-
`,l);for(let a of c){n[a.symbol_id]||(n[a.symbol_id]={score:1,reasons:[]});let u=a.mission_id?e.includes(a.mission_id):!1,p=u?.1:.2;n[a.symbol_id].score<5&&(n[a.symbol_id].score+=p);let
|
|
248
|
+
`,l);for(let a of c){n[a.symbol_id]||(n[a.symbol_id]={score:1,reasons:[]});let u=a.mission_id?e.includes(a.mission_id):!1,p=u?.1:.2;n[a.symbol_id].score<5&&(n[a.symbol_id].score+=p);let m=u?`Lineage Intent: ${a.type}`:`Recent Intent: ${a.type}`;!n[a.symbol_id].reasons.includes(m)&&n[a.symbol_id].reasons.length<5&&n[a.symbol_id].reasons.push(m)}return n}getCount(){return this.get("SELECT COUNT(*) as count FROM exports")?.count||0}getKindDistribution(e=5){return this.all(`
|
|
258
249
|
SELECT kind, COUNT(*) as c
|
|
259
250
|
FROM exports
|
|
260
251
|
WHERE kind IS NOT NULL AND kind != ''
|
|
@@ -267,7 +258,7 @@ import Ln from"fast-glob";import nt from"fs";import kn from"ignore";import It fr
|
|
|
267
258
|
OR name LIKE ?
|
|
268
259
|
OR name LIKE ?
|
|
269
260
|
LIMIT 10
|
|
270
|
-
`,e,`%.${e}`,`%::${e}`)}};var
|
|
261
|
+
`,e,`%.${e}`,`%::${e}`)}};var Rn=`
|
|
271
262
|
WITH RECURSIVE dependency_chain AS (
|
|
272
263
|
-- Base case: Direct dependents of the target symbol
|
|
273
264
|
-- Meaning: Files that import the file where the symbol is defined
|
|
@@ -318,7 +309,7 @@ SELECT DISTINCT
|
|
|
318
309
|
dc.imported_symbols
|
|
319
310
|
FROM dependency_chain dc
|
|
320
311
|
ORDER BY dc.depth, dc.consumer_path;
|
|
321
|
-
`;var
|
|
312
|
+
`;var et=class extends F{findByFile(e){return this.all("SELECT * FROM imports WHERE file_path = ?",e)}findByFiles(e){if(e.length===0)return[];let t=e.map(()=>"?").join(", ");return this.all(`SELECT * FROM imports WHERE file_path IN (${t}) ORDER BY file_path`,...e)}getAllResolved(){return this.all(`
|
|
322
313
|
SELECT * FROM imports
|
|
323
314
|
WHERE resolved_path IS NOT NULL AND resolved_path != ''
|
|
324
315
|
`)}findDependents(e){return this.all("SELECT * FROM imports WHERE resolved_path = ?",e)}countByFile(e){return this.get("SELECT COUNT(*) as count FROM imports WHERE file_path = ?",e)?.count||0}countDependents(e){return this.get("SELECT COUNT(*) as count FROM imports WHERE resolved_path = ?",e)?.count||0}getImportsForFile(e){return this.all("SELECT module_specifier, imported_symbols, resolved_path FROM imports WHERE file_path = ?",e)}findImportSource(e,t){return this.get(`
|
|
@@ -344,7 +335,7 @@ ORDER BY dc.depth, dc.consumer_path;
|
|
|
344
335
|
SELECT COUNT(*) as count FROM imports
|
|
345
336
|
WHERE resolved_path IN (${n})
|
|
346
337
|
AND (imported_symbols LIKE ? OR imported_symbols = '' OR imported_symbols = '*')
|
|
347
|
-
`,...e,`%${t}%`)?.count||0}findImpactDependents(e,t,n){return this.all(
|
|
338
|
+
`,...e,`%${t}%`)?.count||0}findImpactDependents(e,t,n){return this.all(Rn,e,t,n,t)}getCount(){return this.get("SELECT COUNT(*) as count FROM imports")?.count||0}};var tt=class extends F{findById(e){return this.get("SELECT * FROM missions WHERE id = ?",e)}findByIds(e){if(e.length===0)return[];let t=e.map(()=>"?").join(", ");return this.all(`SELECT * FROM missions WHERE id IN (${t})`,...e)}findActive(e){let t="SELECT * FROM missions WHERE status IN ('in-progress', 'planned', 'verifying')",n=[];return e&&(t+=" AND git_branch = ?",n.push(e)),t+=` ORDER BY
|
|
348
339
|
CASE WHEN status = 'in-progress' THEN 0 WHEN status = 'verifying' THEN 1 ELSE 2 END,
|
|
349
340
|
created_at ASC`,this.all(t,...n)}findAll(e){let t="SELECT * FROM missions",n=[];return e&&(t+=" WHERE status = ?",n.push(e)),t+=` ORDER BY
|
|
350
341
|
CASE WHEN status = 'in-progress' THEN 0 WHEN status = 'verifying' THEN 1 ELSE 2 END,
|
|
@@ -374,7 +365,7 @@ ORDER BY dc.depth, dc.consumer_path;
|
|
|
374
365
|
SELECT AVG(updated_at - created_at) AS avg_duration
|
|
375
366
|
FROM missions
|
|
376
367
|
WHERE status = 'completed' AND updated_at > created_at
|
|
377
|
-
`),s=n?.avg_duration!=null?Math.round(n.avg_duration):null,r=Math.floor(Date.now()/1e3)-168*3600,o=Math.floor(Date.now()/1e3)-720*3600,l=this.get("SELECT COUNT(*) AS n FROM missions WHERE status = 'completed' AND updated_at >= ?",r),c=this.get("SELECT COUNT(*) AS n FROM missions WHERE status = 'completed' AND updated_at >= ?",o),a=l?.n??0,u=c?.n??0,p=`${a} completed in last 7 days, ${u} in last 30 days.`;if(s!=null){let
|
|
368
|
+
`),s=n?.avg_duration!=null?Math.round(n.avg_duration):null,r=Math.floor(Date.now()/1e3)-168*3600,o=Math.floor(Date.now()/1e3)-720*3600,l=this.get("SELECT COUNT(*) AS n FROM missions WHERE status = 'completed' AND updated_at >= ?",r),c=this.get("SELECT COUNT(*) AS n FROM missions WHERE status = 'completed' AND updated_at >= ?",o),a=l?.n??0,u=c?.n??0,p=`${a} completed in last 7 days, ${u} in last 30 days.`;if(s!=null){let m=Math.round(s/60);p+=` Avg mission duration: ${m} min.`}return{completionRate:t,averageDurationSeconds:s,completedLast7Days:a,completedLast30Days:u,velocityNote:p}}suspendByBranch(e){this.run(`UPDATE missions
|
|
378
369
|
SET status = 'suspended', updated_at = unixepoch()
|
|
379
370
|
WHERE git_branch = ? AND status IN ('in-progress', 'planned', 'verifying')`,e)}resumeByBranch(e){this.run(`UPDATE missions
|
|
380
371
|
SET status = 'in-progress', updated_at = unixepoch()
|
|
@@ -399,7 +390,7 @@ ORDER BY dc.depth, dc.consumer_path;
|
|
|
399
390
|
SELECT linked_repo_path, linked_mission_id, relationship, direction
|
|
400
391
|
FROM cross_repo_links
|
|
401
392
|
WHERE mission_id = ?
|
|
402
|
-
`,e)}catch{return[]}}findLastMission(){return this.get("SELECT * FROM missions ORDER BY updated_at DESC, id DESC LIMIT 1")}findActiveByPriority(){return this.get("SELECT * FROM missions WHERE status IN ('in-progress', 'active', 'verifying') ORDER BY CASE WHEN status = 'in-progress' THEN 0 ELSE 1 END, created_at ASC LIMIT 1")}};var
|
|
393
|
+
`,e)}catch{return[]}}findLastMission(){return this.get("SELECT * FROM missions ORDER BY updated_at DESC, id DESC LIMIT 1")}findActiveByPriority(){return this.get("SELECT * FROM missions WHERE status IN ('in-progress', 'active', 'verifying') ORDER BY CASE WHEN status = 'in-progress' THEN 0 ELSE 1 END, created_at ASC LIMIT 1")}};j();var st=class i extends F{findByMission(e,t=50){return this.all(`
|
|
403
394
|
SELECT * FROM intent_logs
|
|
404
395
|
WHERE mission_id = ?
|
|
405
396
|
ORDER BY created_at DESC
|
|
@@ -409,10 +400,10 @@ ORDER BY dc.depth, dc.consumer_path;
|
|
|
409
400
|
WHERE type IN ('decision', 'system', 'fix', 'heritage', 'adr')
|
|
410
401
|
ORDER BY created_at DESC
|
|
411
402
|
LIMIT ?
|
|
412
|
-
`,e)}create(e){
|
|
403
|
+
`,e)}create(e){let t=this.insert(`
|
|
413
404
|
INSERT INTO intent_logs (mission_id, symbol_id, file_path, type, content, confidence, symbol_name, signature, commit_sha)
|
|
414
405
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
415
|
-
`,e.mission_id,e.symbol_id,e.file_path,e.type,e.content,e.confidence,e.symbol_name,e.signature,e.commit_sha)}delete(e){this.run("DELETE FROM intent_logs WHERE id = ?",e)}update(e,t){let n=Object.keys(t);if(n.length===0)return;let s=n.map(o=>`${o} = ?`).join(", "),r=Object.values(t);r.push(e),this.run(`UPDATE intent_logs SET ${s} WHERE id = ?`,...r)}findRepairableOrphans(){return this.all(`
|
|
406
|
+
`,e.mission_id,e.symbol_id,e.file_path,e.type,e.content,e.confidence,e.symbol_name,e.signature,e.commit_sha);return i.EMBEDDABLE_TYPES.has(e.type)&&this.generateAndStoreEmbedding(Number(t),e).catch(n=>{E.debug({err:n,intentLogId:t},"Failed to generate intent log embedding")}),t}static EMBEDDABLE_TYPES=new Set(["decision","discovery","fix","blocker","heritage","crystal"]);static buildEmbeddingText(e){let t=[`[${e.type}]`];return e.symbol_name&&t.push(`symbol: ${e.symbol_name}`),e.file_path&&t.push(`file: ${e.file_path.split("/").pop()}`),t.push(e.content),t.join(" ")}async generateAndStoreEmbedding(e,t){let{generateEmbedding:n}=await Promise.resolve().then(()=>(we(),Lt)),s=i.buildEmbeddingText(t),r=await n(s);r&&this.run("UPDATE intent_logs SET embedding = ? WHERE id = ?",JSON.stringify(r),e)}findWithEmbeddings(){return this.all("SELECT * FROM intent_logs WHERE embedding IS NOT NULL AND type NOT IN ('system', 'lapsed')")}delete(e){this.run("DELETE FROM intent_logs WHERE id = ?",e)}update(e,t){let n=Object.keys(t);if(n.length===0)return;let s=n.map(o=>`${o} = ?`).join(", "),r=Object.values(t);r.push(e),this.run(`UPDATE intent_logs SET ${s} WHERE id = ?`,...r)}findRepairableOrphans(){return this.all(`
|
|
416
407
|
SELECT id, file_path, symbol_name, signature
|
|
417
408
|
FROM intent_logs
|
|
418
409
|
WHERE symbol_id IS NULL AND symbol_name IS NOT NULL
|
|
@@ -437,24 +428,45 @@ ORDER BY dc.depth, dc.consumer_path;
|
|
|
437
428
|
`,e)}importHeritage(e,t,n,s){this.run(`
|
|
438
429
|
INSERT INTO intent_logs (type, content, commit_sha, created_at, confidence, mission_id)
|
|
439
430
|
VALUES ('heritage', ?, ?, ?, ?, 0)
|
|
440
|
-
`,e,t,n,s)}countByType(e){return this.get("SELECT COUNT(*) as count FROM intent_logs WHERE type = ?",e)?.count||0}
|
|
431
|
+
`,e,t,n,s)}countByType(e){return this.get("SELECT COUNT(*) as count FROM intent_logs WHERE type = ?",e)?.count||0}findRawByMission(e){return this.all(`SELECT * FROM intent_logs
|
|
432
|
+
WHERE mission_id = ? AND is_crystallized = 0
|
|
433
|
+
AND type NOT IN ('adr', 'system', 'crystal', 'lapsed')
|
|
434
|
+
ORDER BY created_at ASC`,e)}findCrystalByMission(e){return this.get(`SELECT * FROM intent_logs
|
|
435
|
+
WHERE mission_id = ? AND type = 'crystal'
|
|
436
|
+
ORDER BY created_at DESC LIMIT 1`,e)}crystallize(e,t){return this.transaction(()=>{let n=this.insert(`INSERT INTO intent_logs (mission_id, type, content, confidence, is_crystallized, symbol_id, file_path, symbol_name, signature, commit_sha)
|
|
437
|
+
VALUES (?, 'crystal', ?, 1.0, 0, NULL, NULL, NULL, NULL, NULL)`,e,t);return this.run(`UPDATE intent_logs
|
|
438
|
+
SET is_crystallized = 1, crystal_id = ?
|
|
439
|
+
WHERE mission_id = ? AND is_crystallized = 0 AND id != ?
|
|
440
|
+
AND type NOT IN ('adr', 'system', 'crystal', 'lapsed')`,n,e,n),n})}countByMissions(e){if(e.length===0)return{};let t=e.map(()=>"?").join(","),n=this.all(`SELECT mission_id, COUNT(*) as cnt
|
|
441
|
+
FROM intent_logs
|
|
442
|
+
WHERE mission_id IN (${t})
|
|
443
|
+
AND type NOT IN ('system', 'adr', 'lapsed')
|
|
444
|
+
GROUP BY mission_id`,...e),s={};for(let r of n)s[r.mission_id]=r.cnt;return s}findMissionsWithBlockers(e){if(e.length===0)return new Set;let t=e.map(()=>"?").join(","),n=this.all(`SELECT DISTINCT mission_id
|
|
445
|
+
FROM intent_logs
|
|
446
|
+
WHERE mission_id IN (${t})
|
|
447
|
+
AND type = 'blocker'`,...e);return new Set(n.map(s=>s.mission_id))}findByMissionPreferCrystal(e,t=50){let n=this.findCrystalByMission(e);if(n){let s=this.all(`SELECT * FROM intent_logs
|
|
448
|
+
WHERE mission_id = ? AND is_crystallized = 0 AND type NOT IN ('adr', 'system', 'crystal', 'lapsed')
|
|
449
|
+
AND created_at > ?
|
|
450
|
+
ORDER BY created_at DESC LIMIT ?`,e,n.created_at,t-1);return[n,...s]}return this.findByMission(e,t)}async backfillEmbeddings(e=64,t){let{generateEmbeddingsBatch:n}=await Promise.resolve().then(()=>(we(),Lt)),s=[...i.EMBEDDABLE_TYPES].map(u=>`'${u}'`).join(","),r=this.all(`SELECT * FROM intent_logs WHERE embedding IS NULL AND type IN (${s})`);if(r.length===0)return 0;let o=r.map(u=>i.buildEmbeddingText(u)),l=await n(o,e,t),c=this.db.prepare("UPDATE intent_logs SET embedding = ? WHERE id = ?"),a=0;return this.transaction(()=>{for(let u=0;u<r.length;u++)l[u]&&(c.run(JSON.stringify(l[u]),r[u].id),a++)}),E.info({total:r.length,embedded:a},"Intent log embedding backfill complete"),a}};var rt=class extends F{findByKey(e,t=20){return this.all(`
|
|
441
451
|
SELECT file_path, key, value, kind
|
|
442
452
|
FROM configs
|
|
443
453
|
WHERE key LIKE ? OR value LIKE ?
|
|
444
454
|
LIMIT ?
|
|
445
|
-
`,`%${e}%`,`%${e}%`,t)}findByKind(e,t=50){let n="SELECT key, value, kind, file_path FROM configs",s=[];return e&&(n+=" WHERE kind = ?",s.push(e)),n+=" LIMIT ?",s.push(t),this.all(n,...s)}findEnvValue(e){return this.get("SELECT value FROM configs WHERE key LIKE ? OR key = ? LIMIT 1",`%:env:${e}`,e)?.value}countByKind(e){return this.get("SELECT COUNT(*) as count FROM configs WHERE kind = ?",e)?.count||0}getAll(){return this.all("SELECT key, value, kind, file_path FROM configs")}};var
|
|
455
|
+
`,`%${e}%`,`%${e}%`,t)}findByKind(e,t=50){let n="SELECT key, value, kind, file_path FROM configs",s=[];return e&&(n+=" WHERE kind = ?",s.push(e)),n+=" LIMIT ?",s.push(t),this.all(n,...s)}findEnvValue(e){return this.get("SELECT value FROM configs WHERE key LIKE ? OR key = ? LIMIT 1",`%:env:${e}`,e)?.value}countByKind(e){return this.get("SELECT COUNT(*) as count FROM configs WHERE kind = ?",e)?.count||0}getAll(){return this.all("SELECT key, value, kind, file_path FROM configs")}};var ot=class extends F{search(e,t=10){return this.all(`
|
|
446
456
|
SELECT file_path, snippet(content_fts, 1, '<b>', '</b>', '...', 20) as snippet
|
|
447
457
|
FROM content_fts
|
|
448
458
|
WHERE content_fts MATCH ?
|
|
449
459
|
LIMIT ?
|
|
450
|
-
`,e,t)}};var
|
|
451
|
-
WHERE query LIKE ? ORDER BY created_at DESC LIMIT ?`,`${e}%`,t):this.findRecent(t)}pruneIfNeeded(){(this.get("SELECT COUNT(*) as count FROM search_history")?.count??0)<=
|
|
460
|
+
`,e,t)}};var Mn=500,at=class extends F{record(e,t,n=null){this.run("INSERT INTO search_history (query, mode, branch) VALUES (?, ?, ?)",e,t,n),this.pruneIfNeeded()}findRecent(e=20){return this.all("SELECT id, query, mode, branch, created_at FROM search_history ORDER BY created_at DESC LIMIT ?",e)}findRecentByQueryPrefix(e,t=10){return e.trim()?this.all(`SELECT id, query, mode, branch, created_at FROM search_history
|
|
461
|
+
WHERE query LIKE ? ORDER BY created_at DESC LIMIT ?`,`${e}%`,t):this.findRecent(t)}pruneIfNeeded(){(this.get("SELECT COUNT(*) as count FROM search_history")?.count??0)<=Mn||this.run(`DELETE FROM search_history WHERE id NOT IN (
|
|
452
462
|
SELECT id FROM search_history ORDER BY created_at DESC LIMIT ?
|
|
453
|
-
)`,
|
|
463
|
+
)`,Mn)}};var ct=class extends F{getSection(e){return this.get("SELECT section, data, updated_at FROM hologram_snapshot WHERE section = ?",e)}getAllSections(){return this.all("SELECT section, data, updated_at FROM hologram_snapshot ORDER BY section")}upsertSection(e,t){this.run(`
|
|
454
464
|
INSERT INTO hologram_snapshot (section, data, updated_at)
|
|
455
465
|
VALUES (?, ?, unixepoch())
|
|
456
466
|
ON CONFLICT(section) DO UPDATE SET
|
|
457
467
|
data = excluded.data,
|
|
458
468
|
updated_at = excluded.updated_at
|
|
459
|
-
`,e,t)}deleteSection(e){this.run("DELETE FROM hologram_snapshot WHERE section = ?",e)}deleteAll(){this.run("DELETE FROM hologram_snapshot")}hasSection(e){return(this.get("SELECT COUNT(*) as count FROM hologram_snapshot WHERE section = ?",e)?.count??0)>0}};var ie=class{static repositoryCache=new Map;static getInstance(e){let t=this.repositoryCache.get(e);if(t){let r=pe(e),o=t.files?.database,l=!t.intentLogs||!t.searchHistory||!t.missions||!t.hologram;if(o===r&&r.open&&!l)return t;this.repositoryCache.delete(e)}let n=pe(e),s={files:new Be(n),exports:new qe(n),imports:new Ge(n),missions:new Ke(n),intentLogs:new ze(n),configs:new Je(n),content:new Ye(n),searchHistory:new Qe(n),hologram:new Ve(n)};return this.repositoryCache.set(e,s),s}static closeInstance(e){this.repositoryCache.delete(e),Yt(e)}static clearCache(e){this.repositoryCache.delete(e)}};import{Worker as gi}from"node:worker_threads";import{cpus as yi}from"node:os";import{fileURLToPath as Ei}from"node:url";import{dirname as bi,join as pn}from"node:path";import{existsSync as dn}from"node:fs";var fn=Ei(import.meta.url),mn=bi(fn);function _i(){if(fn.endsWith(".ts")){let e=pn(mn,"worker.ts");if(dn(e))return e}let i=pn(mn,"worker.js");return dn(i)?i:Ne("dist/logic/domain/embeddings/worker.js")}var xe=class{workers=[];taskQueue=[];pendingTasks=new Map;taskIdCounter=0;initialized=!1;initPromise;shutdownRequested=!1;numWorkers;cacheDir;initTimeout;constructor(e={}){this.numWorkers=e.numWorkers??Math.max(1,yi().length-1),this.cacheDir=e.cacheDir??"./.cache",this.initTimeout=e.initTimeout??6e4}async initialize(){if(!this.initialized)return this.initPromise?this.initPromise:(this.initPromise=this._doInitialize(),this.initPromise)}async _doInitialize(){let e;try{_.info({numWorkers:this.numWorkers},"Initializing embedding worker pool");let t=new Promise((n,s)=>{e=setTimeout(()=>s(new Error(`Worker pool initialization timed out after ${this.initTimeout}ms`)),this.initTimeout)});if(await Promise.race([this._initializeWorkers(),t]),e&&clearTimeout(e),this.shutdownRequested){this.initialized=!1,this.initPromise=void 0,_.debug("Initialization completed but shutdown was requested");return}this.initialized=!0,_.info({numWorkers:this.workers.length},"Embedding worker pool ready")}catch(t){throw e&&clearTimeout(e),this.initPromise=void 0,this.initialized=!1,await this.shutdown(),t}}async _initializeWorkers(){let e=_i();_.debug({workerPath:e},"Resolved worker path");for(let t=0;t<this.numWorkers;t++)await this.createWorker(e,t),await new Promise(n=>setTimeout(n,50))}async createWorker(e,t){return new Promise((n,s)=>{let r=setTimeout(()=>{s(new Error(`Worker ${t} initialization timed out`))},this.initTimeout),o=new gi(e,{workerData:{cacheDir:this.cacheDir},execArgv:process.execArgv}),l={worker:o,busy:!1,currentTaskId:null};o.on("message",c=>{if(c.type==="ready"){if(clearTimeout(r),this.shutdownRequested){_.debug({workerIndex:t},"Worker ready but shutdown requested, terminating"),o.terminate().catch(()=>{}),n();return}this.workers.push(l),_.debug({workerIndex:t},"Worker ready"),n()}else c.type==="result"&&c.id?this.handleTaskComplete(l,c.id,c.embeddings||[]):c.type==="error"&&c.id&&this.handleTaskError(l,c.id,new Error(c.error||"Unknown error"))}),o.on("error",c=>{if(clearTimeout(r),_.error({err:c,workerIndex:t},"Worker error"),l.currentTaskId&&this.handleTaskError(l,l.currentTaskId,c),!this.initialized){s(c);return}let a=this.workers.indexOf(l);a!==-1&&this.workers.splice(a,1),!this.shutdownRequested&&this.initialized&&this.createWorker(e,t).catch(u=>{_.error({err:u},"Failed to replace crashed worker")})}),o.on("exit",c=>{c!==0&&!this.shutdownRequested&&_.warn({workerIndex:t,code:c},"Worker exited unexpectedly")})})}handleTaskComplete(e,t,n){let s=this.pendingTasks.get(t);s&&(this.pendingTasks.delete(t),s.resolve(n)),e.busy=!1,e.currentTaskId=null,this.processQueue()}handleTaskError(e,t,n){let s=this.pendingTasks.get(t);s&&(this.pendingTasks.delete(t),s.reject(n)),e.busy=!1,e.currentTaskId=null,this.processQueue()}processQueue(){if(this.taskQueue.length===0)return;let e=this.workers.find(n=>!n.busy);if(!e)return;let t=this.taskQueue.shift();t&&(e.busy=!0,e.currentTaskId=t.id,this.pendingTasks.set(t.id,t),e.worker.postMessage({type:"embed",id:t.id,texts:t.texts}))}async generateEmbeddings(e,t=32,n){if(this.initialized||await this.initialize(),e.length===0)return[];let s=[];for(let a=0;a<e.length;a+=t)s.push(e.slice(a,a+t));let r=new Array(s.length),o=0,l=s.map((a,u)=>new Promise((p,d)=>{let h={id:`task_${++this.taskIdCounter}`,texts:a,resolve:E=>{if(r[u]=E,o++,n){let y=Math.min(o*t,e.length);n(y,e.length)}p()},reject:E=>{if(r[u]=new Array(a.length).fill(null),o++,_.warn({err:E,chunkIndex:u},"Chunk embedding failed"),n){let y=Math.min(o*t,e.length);n(y,e.length)}p()}};this.taskQueue.push(h),this.processQueue()}));await Promise.all(l);let c=[];for(let a of r)c.push(...a);return _.info({total:e.length,successful:c.filter(a=>a!==null).length,workers:this.workers.length},"Parallel embedding generation complete"),c}get workerCount(){return this.workers.length}get busyWorkers(){return this.workers.filter(e=>e.busy).length}get queueSize(){return this.taskQueue.length}get isInitialized(){return this.initialized}async shutdown(){if(this.shutdownRequested=!0,this.initPromise)try{await this.initPromise}catch{}if(!this.initialized&&this.workers.length===0){this.shutdownRequested=!1,this.initPromise=void 0;return}_.info({numWorkers:this.workers.length},"Shutting down embedding worker pool");let e=this.workers.map(t=>new Promise(n=>{t.worker.postMessage({type:"shutdown"}),t.worker.once("exit",()=>n()),setTimeout(()=>{t.worker.terminate().then(()=>n())},5e3)}));await Promise.all(e),this.workers=[],this.taskQueue=[],this.pendingTasks.clear(),this.initialized=!1,this.shutdownRequested=!1,_.info("Embedding worker pool shutdown complete")}},fe=null;function Ze(i){return fe||(fe=new xe(i)),fe}async function hn(){fe&&(await fe.shutdown(),fe=null)}var Se=null;async function Ri(){return Se||(Se=await import("@xenova/transformers"),Se.env.cacheDir="./.cache",Se.env.allowLocalModels=!1),Se}var gn=128,bt=!1;function Xe(i){bt=i,_.info({useWorkerThreads:i},"Worker thread mode updated")}var yt=null;async function yn(){return yt||(yt=(async()=>{_.info("Loading embedding model (all-MiniLM-L6-v2)...");let{pipeline:i}=await Ri();return await i("feature-extraction","Xenova/all-MiniLM-L6-v2")})()),yt}async function Ti(i){try{let t=await(await yn())(i,{pooling:"mean",normalize:!0});return Array.from(t.data)}catch(e){return _.error({err:e},"Failed to generate embedding"),null}}async function _t(i,e=gn,t){return i.length===0?[]:bt?Ze().generateEmbeddings(i,e,t):En(i,e,t)}async function En(i,e,t){let n=new Array(i.length).fill(null),s=await yn();for(let r=0;r<i.length;r+=e){let o=Math.min(r+e,i.length),l=i.slice(r,o);try{let c=await s(l,{pooling:"mean",normalize:!0}),[a,u]=c.dims;for(let p=0;p<a;p++){let d=p*u,f=d+u;n[r+p]=Array.from(c.data.slice(d,f))}}catch(c){_.error({err:c,batchStart:r,batchEnd:o},"Single-threaded batch embedding failed, falling back to sequential for this chunk");for(let a=0;a<l.length;a++)try{let u=l[a];if(!u||u.trim().length===0)continue;let p=await s(u,{pooling:"mean",normalize:!0});n[r+a]=Array.from(p.data)}catch{n[r+a]=null}}t&&t(o,i.length)}return _.debug({total:i.length,successful:n.filter(r=>r!==null).length},"Batch embedding complete"),n}function xi(i,e){let t=0,n=0,s=0;for(let r=0;r<i.length;r++)t+=i[r]*e[r],n+=i[r]*i[r],s+=e[r]*e[r];return t/(Math.sqrt(n)*Math.sqrt(s))}var Et=class{queue=[];processing=!1;results=new Map;enqueue(e){this.queue.push(e),this.queue.sort((t,n)=>n.priority-t.priority)}enqueueMany(e){this.queue.push(...e),this.queue.sort((t,n)=>n.priority-t.priority)}get size(){return this.queue.length}get isProcessing(){return this.processing}getResult(e){return this.results.get(e)}async processQueue(e=gn,t){if(this.processing)return _.warn("Queue processing already in progress"),this.results;this.processing=!0;let n=this.queue.length;try{bt?await this.processQueueParallel(e,n,t):await this.processQueueSequential(e,n,t)}finally{this.processing=!1}return this.results}async processQueueSequential(e,t,n){for(;this.queue.length>0;){let s=this.queue.splice(0,e),r=s.map(l=>l.text),o=await En(r,r.length);if(s.forEach((l,c)=>{this.results.set(l.id,o[c])}),n){let l=t-this.queue.length;n(l,t)}}}async processQueueParallel(e,t,n){let s=this.queue.splice(0),r=s.map(c=>c.text),l=await Ze().generateEmbeddings(r,e,(c,a)=>{n&&n(c,a)});s.forEach((c,a)=>{this.results.set(c.id,l[a])})}clear(){this.queue=[],this.results.clear()}};import{execSync as Rt}from"child_process";import bn from"path";import _n from"fs";function Ie(i){try{return _n.existsSync(bn.join(i,".git"))?Rt("git rev-parse HEAD",{cwd:i,stdio:["ignore","pipe","ignore"],encoding:"utf8"}).trim():null}catch{return null}}function Rn(i,e){try{if(!_n.existsSync(bn.join(i,".git")))return!0;let t=Ie(i);return!t||e&&e!==t&&Rt(`git diff --name-only ${e} ${t}`,{cwd:i,stdio:["ignore","pipe","ignore"],encoding:"utf8"}).trim()?!0:Rt("git status --porcelain",{cwd:i,stdio:["ignore","pipe","ignore"],encoding:"utf8"}).trim().length>0}catch{return!0}}import{execSync as Tn}from"child_process";var le=_.child({module:"nano-repair"}),et=class{intentLogs;exports;missions;repoPath;constructor(e){let{intentLogs:t,exports:n,missions:s}=ie.getInstance(e);this.intentLogs=t,this.exports=n,this.missions=s,this.repoPath=e}detectAndRepairShifts(){let e=this.intentLogs.findRepairableOrphans();if(e.length===0)return{repaired:0,failed:0};le.info({count:e.length},"Detected orphaned intent logs. Attempting recovery...");let t=0,n=0;for(let s of e){let r=this.exports.findByNameAndFile(s.symbol_name,s.file_path);if(r.length>0){let l=r.find(c=>c.signature===s.signature)||r[0];this.intentLogs.update(s.id,{symbol_id:l.id}),le.info({logId:s.id,symbol:s.symbol_name},"Relinked symbol in same file"),t++;continue}let o=this.exports.findByNameGlobal(s.symbol_name);if(o.length>0){let l=o.filter(c=>c.file_path!==s.file_path);if(l.length>0){let c=l.find(a=>a.signature===s.signature)||l[0];this.intentLogs.update(s.id,{symbol_id:c.id,file_path:c.file_path}),le.info({logId:s.id,symbol:s.symbol_name,oldPath:s.file_path,newPath:c.file_path},"Detected Nano-Repair Shift (file move)"),t++;continue}}n++}return t>0&&le.info({repaired:t,failed:n},"Nano-Repair recovery complete"),{repaired:t,failed:n}}syncLifecycle(){let e="HEAD";try{e=Tn("git rev-parse --abbrev-ref HEAD",{cwd:this.repoPath,encoding:"utf-8",stdio:["ignore","pipe","ignore"]}).trim()}catch{return{suspended:0,resumed:0,completed:0}}if(!e)return{suspended:0,resumed:0,completed:0};let t=this.missions.findActive(),n=0;for(let o of t)o.git_branch&&o.git_branch!==e&&(this.missions.updateStatus(o.id,"suspended"),le.info({missionId:o.id,branch:o.git_branch,current:e},"Context Pivot: Suspended mission"),n++);this.missions.resumeByBranch(e);let s=[];try{s=Tn(`git branch --merged "${e}"`,{cwd:this.repoPath,encoding:"utf-8",stdio:["ignore","pipe","ignore"]}).split(`
|
|
460
|
-
`).
|
|
469
|
+
`,e,t)}deleteSection(e){this.run("DELETE FROM hologram_snapshot WHERE section = ?",e)}deleteAll(){this.run("DELETE FROM hologram_snapshot")}hasSection(e){return(this.get("SELECT COUNT(*) as count FROM hologram_snapshot WHERE section = ?",e)?.count??0)>0}};var ce=class{static repositoryCache=new Map;static getInstance(e){let t=this.repositoryCache.get(e);if(t){let r=ge(e),o=t.files?.database,l=!t.intentLogs||!t.searchHistory||!t.missions||!t.hologram;if(o===r&&r.open&&!l)return t;this.repositoryCache.delete(e)}let n=ge(e),s={files:new Xe(n),exports:new Ze(n),imports:new et(n),missions:new tt(n),intentLogs:new st(n),configs:new rt(n),content:new ot(n),searchHistory:new at(n),hologram:new ct(n)};return this.repositoryCache.set(e,s),s}static closeInstance(e){this.repositoryCache.delete(e),cn(e)}static clearCache(e){this.repositoryCache.delete(e)}};we();import{execSync as vt}from"child_process";import lt from"path";import On from"fs";function Oe(i){try{return On.existsSync(lt.join(i,".git"))?vt("git rev-parse HEAD",{cwd:i,stdio:["ignore","pipe","ignore"],encoding:"utf8"}).trim():null}catch{return null}}var Hi=new Set([".ts",".tsx",".yaml",".yml",".php",".py",".go",".prisma",".graphql",".gql"]),$i=new Set(["package.json","lerna.json","turbo.json","pnpm-workspace.yaml"]),Ui=new Set(["node_modules",".git","dist","build","vendor",".next",".cache","coverage"]);function wn(i){let e=i.split("/");for(let s of e)if(Ui.has(s))return!1;if(i.endsWith(".min.js"))return!1;let t=lt.basename(i);if(t.startsWith("Dockerfile")||t.startsWith(".env")||$i.has(t))return!0;let n=lt.extname(t).toLowerCase();return Hi.has(n)}function Bi(i){let e=i.trim(),t=e.indexOf(" -> ");if(t!==-1)return e.substring(t+4);let n=e.split(/\s+/);return n.length>=2?n[n.length-1]:e}function An(i,e){try{if(!On.existsSync(lt.join(i,".git")))return!0;let t=Oe(i);if(!t)return!0;if(e&&e!==t){let s=vt(`git diff --name-only ${e} ${t}`,{cwd:i,stdio:["ignore","pipe","ignore"],encoding:"utf8"}).trim();if(s&&s.split(`
|
|
470
|
+
`).some(r=>r&&wn(r)))return!0}let n=vt("git status --porcelain",{cwd:i,stdio:["ignore","pipe","ignore"],encoding:"utf8"}).trim();return n?n.split(`
|
|
471
|
+
`).some(s=>s?wn(Bi(s)):!1):!1}catch{return!0}}import{execSync as Fn}from"child_process";j();var me=E.child({module:"nano-repair"}),ut=class{intentLogs;exports;missions;repoPath;constructor(e){let{intentLogs:t,exports:n,missions:s}=ce.getInstance(e);this.intentLogs=t,this.exports=n,this.missions=s,this.repoPath=e}detectAndRepairShifts(){let e=this.intentLogs.findRepairableOrphans();if(e.length===0)return{repaired:0,failed:0};me.info({count:e.length},"Detected orphaned intent logs. Attempting recovery...");let t=0,n=0;for(let s of e){let r=this.exports.findByNameAndFile(s.symbol_name,s.file_path);if(r.length>0){let l=r.find(c=>c.signature===s.signature)||r[0];this.intentLogs.update(s.id,{symbol_id:l.id}),me.info({logId:s.id,symbol:s.symbol_name},"Relinked symbol in same file"),t++;continue}let o=this.exports.findByNameGlobal(s.symbol_name);if(o.length>0){let l=o.filter(c=>c.file_path!==s.file_path);if(l.length>0){let c=l.find(a=>a.signature===s.signature)||l[0];this.intentLogs.update(s.id,{symbol_id:c.id,file_path:c.file_path}),me.info({logId:s.id,symbol:s.symbol_name,oldPath:s.file_path,newPath:c.file_path},"Detected Nano-Repair Shift (file move)"),t++;continue}}n++}return t>0&&me.info({repaired:t,failed:n},"Nano-Repair recovery complete"),{repaired:t,failed:n}}syncLifecycle(){let e="HEAD";try{e=Fn("git rev-parse --abbrev-ref HEAD",{cwd:this.repoPath,encoding:"utf-8",stdio:["ignore","pipe","ignore"]}).trim()}catch{return{suspended:0,resumed:0,completed:0}}if(!e)return{suspended:0,resumed:0,completed:0};let t=this.missions.findActive(),n=0;for(let o of t)o.git_branch&&o.git_branch!==e&&(this.missions.updateStatus(o.id,"suspended"),me.info({missionId:o.id,branch:o.git_branch,current:e},"Context Pivot: Suspended mission"),n++);this.missions.resumeByBranch(e);let s=[];try{s=Fn(`git branch --merged "${e}"`,{cwd:this.repoPath,encoding:"utf-8",stdio:["ignore","pipe","ignore"]}).split(`
|
|
472
|
+
`).map(l=>l.trim().replace(/^\* /,"")).filter(l=>l&&l!==e)}catch{}let r=0;if(s.length>0){let o=this.missions.findMergedMissions(e,s);for(let l of o)this.missions.updateStatus(l.id,"completed"),me.info({missionId:l.id,branch:l.git_branch},"Merge Sentinel: Auto-completed mission"),r++}return(n>0||r>0)&&me.info({suspended:n,completed:r},"Git-Native Lifecycle Sync complete"),{suspended:n,resumed:-1,completed:r}}};j();$e();import{Worker as ji}from"node:worker_threads";import{cpus as zi}from"node:os";import{fileURLToPath as qi}from"node:url";import{dirname as Gi,join as Ki}from"node:path";import{existsSync as Ji}from"node:fs";var Pn=qi(import.meta.url),Yi=Gi(Pn),Qi=Pn.endsWith(".ts");function Vi(){if(Qi)return null;let i=Ki(Yi,"worker.js");return Ji(i)?i:fe("dist/logic/parser/worker.js")}var Ct=class{workers=[];taskQueue=[];pendingTasks=new Map;taskIdCounter=0;initialized=!1;initPromise;shutdownRequested=!1;numWorkers;initTimeout;constructor(e={}){this.numWorkers=e.numWorkers??Math.max(1,Math.min(4,zi().length-1)),this.initTimeout=e.initTimeout??3e4}async initialize(){if(!this.initialized)return this.initPromise?this.initPromise:(this.initPromise=this._doInitialize(),this.initPromise)}async _doInitialize(){let e;try{E.info({numWorkers:this.numWorkers},"Initializing parser worker pool");let t=new Promise((n,s)=>{e=setTimeout(()=>s(new Error(`Parser pool initialization timed out after ${this.initTimeout}ms`)),this.initTimeout)});if(await Promise.race([this._initializeWorkers(),t]),e&&clearTimeout(e),this.shutdownRequested){this.initialized=!1,this.initPromise=void 0;return}this.initialized=!0,E.info({numWorkers:this.workers.length},"Parser worker pool ready")}catch(t){throw e&&clearTimeout(e),this.initPromise=void 0,this.initialized=!1,await this.shutdown(),t}}async _initializeWorkers(){let e=Vi();if(!e)throw new Error("Parser worker pool not available in development mode (tsx). Use main-thread fallback.");E.debug({workerPath:e},"Resolved parser worker path");let t=[];for(let n=0;n<this.numWorkers;n++)t.push(this.createWorker(e,n));await Promise.all(t)}async createWorker(e,t){return new Promise((n,s)=>{let r=setTimeout(()=>{s(new Error(`Parser worker ${t} initialization timed out`))},this.initTimeout),o=new ji(e,{execArgv:process.execArgv}),l={worker:o,busy:!1,currentTaskId:null};o.on("message",c=>{if(c.type==="ready"){if(clearTimeout(r),this.shutdownRequested){o.terminate().catch(()=>{}),n();return}this.workers.push(l),E.debug({workerIndex:t},"Parser worker ready"),n()}else c.type==="result"&&c.id?this.handleTaskComplete(l,c.id,c.result):c.type==="error"&&c.id&&this.handleTaskError(l,c.id,new Error(c.error||"Unknown error"))}),o.on("error",c=>{if(clearTimeout(r),E.error({err:c,workerIndex:t},"Parser worker error"),l.currentTaskId&&this.handleTaskError(l,l.currentTaskId,c),!this.initialized){s(c);return}let a=this.workers.indexOf(l);a!==-1&&this.workers.splice(a,1),!this.shutdownRequested&&this.initialized&&this.createWorker(e,t).catch(u=>{E.error({err:u},"Failed to replace crashed parser worker")})}),o.on("exit",c=>{c!==0&&!this.shutdownRequested&&E.warn({workerIndex:t,code:c},"Parser worker exited unexpectedly")})})}handleTaskComplete(e,t,n){let s=this.pendingTasks.get(t);s&&(this.pendingTasks.delete(t),s.resolve(n)),e.busy=!1,e.currentTaskId=null,this.processQueue()}handleTaskError(e,t,n){let s=this.pendingTasks.get(t);s&&(this.pendingTasks.delete(t),s.reject(n)),e.busy=!1,e.currentTaskId=null,this.processQueue()}processQueue(){if(this.taskQueue.length===0)return;let e=this.workers.find(n=>!n.busy);if(!e)return;let t=this.taskQueue.shift();t&&(e.busy=!0,e.currentTaskId=t.id,this.pendingTasks.set(t.id,t),e.worker.postMessage({type:"parse",id:t.id,filePath:t.filePath}))}async parseFile(e){return this.initialized||await this.initialize(),new Promise((t,n)=>{let r={id:`parse_${++this.taskIdCounter}`,filePath:e,resolve:t,reject:n};this.taskQueue.push(r),this.processQueue()})}get workerCount(){return this.workers.length}get busyWorkers(){return this.workers.filter(e=>e.busy).length}get queueSize(){return this.taskQueue.length}get isInitialized(){return this.initialized}async shutdown(){if(this.shutdownRequested=!0,this.initPromise)try{await this.initPromise}catch{}if(!this.initialized&&this.workers.length===0){this.shutdownRequested=!1,this.initPromise=void 0;return}E.info({numWorkers:this.workers.length},"Shutting down parser worker pool");let e=this.workers.map(t=>new Promise(n=>{t.worker.postMessage({type:"shutdown"}),t.worker.once("exit",()=>n()),setTimeout(()=>{t.worker.terminate().then(()=>n())},5e3)}));await Promise.all(e),this.workers=[],this.taskQueue=[],this.pendingTasks.clear(),this.initialized=!1,this.shutdownRequested=!1,this.initPromise=void 0,E.info("Parser worker pool shutdown complete")}},Re=null;function Wn(i){return Re||(Re=new Ct(i)),Re}async function Hn(){Re&&(await Re.shutdown(),Re=null)}var es=Zi.cpus().length||4,ts=Pe.DEFAULT_CONCURRENCY;async function Mt(i,e=ts,t=!1,n=!0,s){let r=ce.getInstance(i),o=r.files.database,l=Ve(i),c=l.concurrency??e;if(Zt(),!t&&on(i)){let h=an(i),y=Oe(i);if(h&&!An(i,h))return _t(),E.debug({repoPath:i,commit:y},"Index is current, skipping re-index (fast-path)"),o}Ye(i);let a=r.files.findAll(),u=new Map(a.map(h=>[h.path,{mtime:h.mtime,hash:h.content_hash}])),p=Date.now();s?.({phase:"scan",current:0,total:0,message:"Scanning repository..."});let m=await dt(i,l.ignore),d=new Map(m.map(h=>[h.path,h.mtime])),f=a.filter(h=>!d.has(h.path)).map(h=>h.path),g=a.length===0,b=[];if(t||g)b.push(...m);else{let h=m.filter(x=>{let I=u.get(x.path);return!I||I.mtime!==x.mtime}),y=Nt(c*4),T=h.map(x=>y(async()=>{let I=u.get(x.path);if(!I||!I.hash)return x;try{let D=await Xi.promises.readFile(x.path,"utf8");return rn(D,I.hash)?x:(r.files.updateMtime(x.path,x.mtime),null)}catch{return null}})),_=await Promise.all(T);b.push(..._.filter(x=>x!==null))}if(f.length===0&&b.length===0){_t();let h=Oe(i);return St(i,h||void 0),o}if(g?E.info({totalFiles:m.length},"Starting initial repository indexing..."):E.info({toDelete:f.length,toProcess:b.length},"Syncing repository updates..."),f.length>0&&r.files.deletePaths(f),b.length>0){tn(),n?(Me(!0),de().initialize().catch(()=>{})):Me(!1);let h=/\.(ts|tsx|php|py|go|js|jsx|mjs|cjs)$/,y=[],T=[];for(let S of b)h.test(Dt.basename(S.path))?y.push(S):T.push(S);let _=0,x=b.length,I=!1,D=Wn();try{await D.initialize(),I=!0,E.info({workers:D.workerCount},"Parser worker pool active")}catch(S){E.warn({err:S},"Parser worker pool failed to initialize, falling back to main-thread parsing"),I=!1}let z=(S,M)=>{let P=M.imports?.map(R=>({...R,resolved_path:Ne(R.module,S.path,i)})),C=M.content?he(M.content):null;return _++,(_%50===0||_===x)&&E.info({completed:_,total:x},"Parsing files..."),s?.({phase:"parse",current:_,total:x,message:`Parsing ${Dt.basename(S.path)}`}),{meta:S,...M,imports:P,embedding:null,kind:"code",contentHash:C}},w;if(I)w=y.map(S=>D.parseFile(S.path).then(M=>z(S,M),M=>(_++,E.error({path:S.path,error:M},"Worker parse failed"),{meta:S,exports:[],imports:[],content:"",kind:"error"})));else{let S=g?Math.max(c,Math.min(es-1,16)):c,M=Nt(S);w=y.map(P=>M(async()=>{try{let C=await Et(P.path);return z(P,C)}catch(C){return _++,E.error({path:P.path,error:C},"Failed to parse file"),{meta:P,exports:[],imports:[],content:"",kind:"error"}}}))}let N=Nt(c),v=T.map(S=>N(async()=>{try{let M=gn(S.path),P=M.content?he(M.content):null;return _++,(_%50===0||_===x)&&E.info({completed:_,total:x},"Parsing configs..."),s?.({phase:"parse",current:_,total:x,message:`Parsing config ${Dt.basename(S.path)}`}),{meta:S,...M,embedding:null,kind:"config",contentHash:P}}catch(M){return _++,E.error({path:S.path,error:M},"Failed to parse config"),{meta:S,exports:[],imports:[],content:"",kind:"error"}}}));E.info({total:x,codeFiles:y.length,configFiles:T.length,useParserPool:I},"Phase 1: Parsing all files...");let $=Date.now(),U=(await Promise.all([...w,...v])).filter(Boolean),ne=Date.now()-$;if(Ie("parse",ne),E.info({count:U.length,time:`${(ne/1e3).toFixed(1)}s`},"Phase 1 complete"),I&&Hn().catch(()=>{}),o.pragma("synchronous = NORMAL"),o.pragma("cache_size = -64000"),n){let S=[];U.forEach((B,Q)=>{"summary"in B&&B.summary&&S.push({fileIdx:Q,text:B.summary})}),E.info("Phase 2+3: Generating embeddings + persisting in parallel..."),s?.({phase:"embed",current:0,total:U.length,message:"Generating embeddings..."});let M=Date.now(),P=(async()=>{if(S.length>0){E.info({count:S.length}," \u2192 Generating file summary embeddings...");let B=S.map(q=>q.text),Q=await it(B,256);return E.info({count:S.length}," \u2713 File summaries complete"),Q}return[]})();s?.({phase:"persist",current:0,total:U.length,message:"Saving to database..."});let C=Date.now();r.files.batchSaveIndexResults(U,i,he,Ne);let R=Date.now()-C;Ie("persist",R),E.info({time:`${(R/1e3).toFixed(1)}s`},"Structural persist complete");let W=await P,J=Date.now()-M;if(Ie("embed",J),E.info({time:`${(J/1e3).toFixed(1)}s`},"Embeddings complete"),W.length>0){let B=o.prepare("UPDATE files SET embedding = ? WHERE path = ?"),Q=o.transaction(L=>{for(let k of L)B.run(k.embedding?JSON.stringify(k.embedding):null,k.path)}),q=S.map((L,k)=>({path:U[L.fileIdx].meta.path,embedding:W[k]}));Q(q),E.info({count:q.length},"Embedding column updated")}let Y=await r.intentLogs.backfillEmbeddings(64);Y>0&&E.info({count:Y}," \u2713 Intent log embeddings backfilled")}else{s?.({phase:"persist",current:0,total:U.length,message:"Saving to database..."});let S=Date.now();r.files.batchSaveIndexResults(U,i,he,Ne),Ie("persist",Date.now()-S)}o.pragma("synchronous = FULL"),o.pragma("cache_size = -2000")}if(g||b.length>0){let h=Oe(i);St(i,h||void 0)}return(b.length>0||f.length>0)&&new ut(i).detectAndRepairShifts(),en(Date.now()-p),s?.({phase:"complete",current:b.length,total:b.length,message:"Indexing complete"}),o}j();import $n from"path";import ns from"ignore";import Un from"fs";async function is(i,e=Pe.DEFAULT_CONCURRENCY,t="detailed",n,s){E.info({repo:i,level:t,subPath:n},"Ensuring cache is up-to-date..."),await Mt(i,e);let{files:r,exports:o,imports:l}=ce.getInstance(i),c=n?r.findInSubPath(i,n):r.findAll(),a=Ve(i),u=ns(),p=$n.join(i,".gitignore");if(Un.existsSync(p)&&u.add(Un.readFileSync(p,"utf8")),a.ignore&&a.ignore.length>0&&u.add(a.ignore),u.add(Fe),c=c.filter(y=>{let T=$n.relative(i,y.path);return!u.ignores(T)}),E.info({count:c.length},"Fetching data from DB..."),t==="lite"){let y=c.map(T=>({path:T.path,mtime:T.mtime}));return ke(y,i,t,s)}if(t==="summaries"){let y=c.map(T=>({path:T.path,mtime:T.mtime,classification:T.classification||void 0,summary:T.summary||void 0}));return ke(y,i,t,s)}let m=c.map(y=>y.path),d=o.findByFiles(m),f=t==="detailed"?l.findByFiles(m):[],g=new Map;for(let y of d){let T=g.get(y.file_path)||[];T.push(y),g.set(y.file_path,T)}let b=new Map;for(let y of f){let T=b.get(y.file_path)||[];T.push(y),b.set(y.file_path,T)}let h=c.map(y=>{let _=(g.get(y.path)||[]).map(I=>({name:I.name,kind:I.kind,signature:I.signature,line:I.start_line}));t==="structure"?_=_.map(I=>({name:I.name,kind:I.kind,line:I.line})):t==="signatures"&&(_=_.map(I=>({name:I.name,kind:I.kind,signature:I.signature,line:I.line})));let x=[];return t==="detailed"&&(x=(b.get(y.path)||[]).map(D=>({module:D.module_specifier,resolved_path:D.resolved_path}))),{path:y.path,mtime:y.mtime,classification:y.classification||void 0,summary:y.summary||void 0,exports:_,imports:x.length>0?x:void 0,chunks:[]}});return E.info({count:h.length},"Building hierarchical project tree..."),ke(h,i,t,s)}we();export{nt as EmbeddingPriorityQueue,_e as EmbeddingWorkerPool,ke as buildTree,si as chunkFile,Dn as cosineSimilarity,Mt as ensureCacheUpToDate,Cn as generateEmbedding,it as generateEmbeddingsBatch,de as getDefaultPool,Et as parseFile,is as processRepo,dt as scanRepo,Me as setUseWorkerThreads,kt as shutdownDefaultPool};
|