@precisionutilityguild/liquid-shadow 1.0.7 → 1.0.9
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 +3 -3
- package/dist/data/migrations/000_baseline.sql +10 -0
- package/dist/data/migrations/013_file_claims.sql +18 -0
- package/dist/entry/cli/index.js +259 -204
- package/dist/entry/ember/index.js +81 -28
- package/dist/entry/mcp/server.js +281 -226
- package/dist/index.js +282 -227
- package/dist/logic/parser/index.js +16 -14
- package/dist/web-manifest.json +4 -1
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
`),i=[],
|
|
3
|
-
`)[0].trim();return i.length>200?i.substring(0,197)+"...":i}function ne(e,t,i){let n=e.toLowerCase(),s=t.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":i==="TsInterfaceDeclaration"||i==="TsTypeAliasDeclaration"?"Type Definition":"Other"}function Q(e){let t=[];return/\b(fetch|axios|superagent|got)\s*\(|import\s+.*\b(http|https|node-fetch)\b/i.test(e)&&t.push("Network"),(/\b(knex|prisma|typeorm|mongoose|sequelize|pg|mysql|sqlite3)\b/i.test(e)||/\b(SELECT\s+.*FROM|INSERT\s+INTO|UPDATE\s+.*SET|DELETE\s+FROM)\b/i.test(e)||/\.query\s*\(|\.execute\s*\(/i.test(e)&&/db|database|client|pool/i.test(e))&&t.push("Database"),(/\bfs\./i.test(e)||/\b(readFileSync|writeFileSync|readFile|writeFile|readdir)\b/.test(e)||/import\s+.*\bfs\b/.test(e))&&t.push("File System"),(/\b(localStorage|sessionStorage|indexedDB)\./.test(e)||/\bdocument\.cookie\b/.test(e))&&t.push("Browser Storage"),t}function N(e,t){if(!e)return"";let i=e.trimStart();for(;/^\/\*[\s\S]*?\*\//.test(i);)i=i.replace(/^\/\*[\s\S]*?\*\/\s*/,"");for(;/^\/\/[^\n]*\n/.test(i);)i=i.replace(/^\/\/[^\n]*\n\s*/,"");if(i=i.replace(/^(?:import[^\n]*\n)+/,"").replace(/^(?:export\s+\{[^}]*\}\s+from\s+['"][^'"]+['"];?\s*\n?)+/,"").trim(),t==="TsInterfaceDeclaration"||t==="TsTypeAliasDeclaration")return i;let n=0,s=0,u=i.length;for(let h=0;h<i.length;h++){let S=i[h];if(S==="(")n++;else if(S===")")n--;else if(S==="<")s++;else if(S===">")s--;else if(S==="{"){if(n===0&&s===0){u=h;break}}else if(S===";"&&n===0&&s===0){u=h;break}else if(S==="="&&i[h+1]===">"&&n===0&&s===0){u=h+2;break}}let d=i.substring(0,u).trim();return d.length>500?d.slice(0,497)+"...":d}function Se(e){let t=[];for(let i of e)i.type==="ImportDeclaration"&&t.push({module:i.source.value,name:i.specifiers.map(n=>n.type==="ImportDefaultSpecifier"?"default":n.type==="ImportNamespaceSpecifier"?"*":n.local?.value||n.imported?.value||"*").join(", ")}),i.type==="ExportAllDeclaration"&&t.push({module:i.source.value,name:"*"}),i.type==="ExportNamedDeclaration"&&i.source&&t.push({module:i.source.value,name:i.specifiers.map(n=>n.type==="ExportSpecifier"?n.orig.value:"*").join(", ")});return t}function $e(e,t){for(let i of e){if((i.type==="FunctionDeclaration"||i.type==="ClassDeclaration")&&(i.identifier?.value||i.id?.value)===t)return i.span;if(i.type==="VariableDeclaration"){for(let n of i.declarations)if(n.id?.type==="Identifier"&&n.id.value===t)return n.span||i.span}if((i.type==="TsTypeAliasDeclaration"||i.type==="TsInterfaceDeclaration"||i.type==="TsEnumDeclaration")&&(i.id?.value||i.identifier?.value)===t)return i.span;if(i.type==="ExportDeclaration"){let n=i.declaration;if(!n)continue;if((n.type==="FunctionDeclaration"||n.type==="ClassDeclaration")&&(n.identifier?.value||n.id?.value)===t)return n.span||i.span;if(n.type==="VariableDeclaration"){for(let s of n.declarations)if(s.id?.type==="Identifier"&&s.id.value===t)return s.span||n.span||i.span}}}return null}function ve(e,t,i,n,s,u,d,h,S){let o=S??(a=>te(a,i)),l=[];for(let a of e){if(a.type==="ExportDeclaration"){let p=a.declaration,f=p.type,r="";f==="VariableDeclaration"?r=p.declarations.map(M=>M.id.value).join("",""):r=p.id?.value||p.identifier?.value||"anonymous";let c=o(a.span.start-t),y=o(a.span.end-t),m=F(c,u,n),g=h(a.span),T=[];if(a.type==="ExportDeclaration"&&(f==="ClassDeclaration"||f==="ClassExpression")){let M=p.body||[];for(let w of M)if(w.type==="ClassMethod"||w.type==="ClassProperty"){let A=w.key.value;if(!A)continue;let E=o(w.span.start-t),U=o(w.span.end-t),I=h(w.span),R=F(E,u,n);T.push({name:A,kind:w.type,signature:N(I,w.type),line:P(E,s),endLine:P(U,s),doc:R,classification:w.type==="ClassMethod"?"Method":"Property",capabilities:"[]"})}}else if(f==="FunctionDeclaration"&&p.body?.type==="BlockStatement")T=ue(p.body.stmts,t,i,n,s,u,h,o);else if(f==="VariableDeclaration"){for(let M of p.declarations)if(M.init&&(M.init.type==="ArrowFunctionExpression"||M.init.type==="FunctionExpression")&&M.init.body?.type==="BlockStatement"){T=ue(M.init.body.stmts,t,i,n,s,u,h,o);break}}l.push({name:r,kind:f,signature:N(g,f),line:P(c,s),endLine:P(y,s),doc:m,classification:ne(d,r,f),capabilities:JSON.stringify(Q(g)),members:T})}if(a.type==="ExportNamedDeclaration"){for(let p of a.specifiers)if(p.type==="ExportSpecifier"){let f=p.orig.value,r=p.exported?.value||f,y=$e(e,f)||a.span,m=o(y.start-t),g=o(y.end-t),T=F(m,u,n);l.push({name:r,kind:"ExportSpecifier",signature:`export { ${f} }`,line:P(m,s),endLine:P(g,s),doc:T,classification:"Export mapping",capabilities:"[]"})}}if(a.type==="ExportDefaultDeclaration"){let p=o(a.span.start-t),f=o(a.span.end-t),r=F(p,u,n),c=h(a.span),y=[];if(a.decl.type==="ClassExpression"||a.decl.type==="ClassDeclaration"){let m=a.decl.body||[];for(let g of m)if(g.type==="ClassMethod"||g.type==="ClassProperty"){let T=g.key.value;if(!T)continue;let M=o(g.span.start-t),w=o(g.span.end-t),A=h(g.span),E=F(M,u,n);y.push({name:T,kind:g.type,signature:N(A,g.type),line:P(M,s),endLine:P(w,s),doc:E,classification:g.type==="ClassMethod"?"Method":"Property",capabilities:"[]"})}}else(a.decl.type==="FunctionExpression"||a.decl.type==="FunctionDeclaration"||a.decl.type==="ArrowFunctionExpression")&&a.decl.body?.type==="BlockStatement"&&(y=ue(a.decl.body.stmts,t,i,n,s,u,h,o));l.push({name:"default",kind:"DefaultExport",signature:N(c,"DefaultExport"),line:P(p,s),endLine:P(f,s),doc:r,classification:"Default Export",capabilities:JSON.stringify(Q(c)),members:y})}if(a.type==="ExportAllDeclaration"){let p=o(a.span.start-t),f=o(a.span.end-t),r=a.source.value,c=F(p,u,n);l.push({name:"*",kind:"ExportAllDeclaration",signature:`export * from "${r}"`,line:P(p,s),endLine:P(f,s),doc:c,classification:"Re-export",capabilities:"[]"})}}return l}function ue(e,t,i,n,s,u,d,h){let S=[];for(let o of e){if(o.type==="VariableDeclaration")for(let l of o.declarations){let a=[],p=r=>{if(r.type==="Identifier")a.push({name:r.value,span:r.span});else if(r.type==="ArrayPattern")for(let c of r.elements)c&&p(c);else if(r.type==="ObjectPattern")for(let c of r.properties)c.type==="AssignmentPatternProperty"?a.push({name:c.key.value,span:c.span}):c.type==="KeyValuePatternProperty"&&p(c.value)};p(l.id);let f=l.init&&(l.init.type==="ArrowFunctionExpression"||l.init.type==="FunctionExpression");for(let r of a){let c=f?l.init.span||l.span||r.span:l.span||r.span,y=f?l.init.type:"VariableDeclaration",m=f?"Internal Function":"Internal Variable",g=h(c.start-t),T=h(c.end-t),M=d(c),w=F(g,u,n);S.push({name:r.name,kind:y,signature:N(M,y),line:P(g,s),endLine:P(T,s),doc:w,classification:m,capabilities:"[]"})}}if(o.type==="FunctionDeclaration"){let l=o.identifier?.value||o.ident?.value||"anonymous",a=h(o.span.start-t),p=h(o.span.end-t),f=d(o.span),r=F(a,u,n);S.push({name:l,kind:"FunctionDeclaration",signature:N(f,"FunctionDeclaration"),line:P(a,s),endLine:P(p,s),doc:r,classification:"Internal Function",capabilities:"[]"})}if(o.type==="ReturnStatement"&&o.argument?.type==="ObjectExpression")for(let l of o.argument.properties){let a="",p=l.span||l.key?.span||l.ident?.span;if(l.type==="KeyValueProperty"){let f=l.key;a=f?.value||f?.raw||(f?.type==="Identifier"?f.value:"")}else l.type==="MethodProperty"?a=l.key?.value||l.key?.raw||"":l.type==="ShorthandProperty"?a=l.ident?.value||"":l.type==="Identifier"&&(a=l.value||"");if(a&&p){let f=h(p.start-t),r=h(p.end-t),c=d(p),y=F(f,u,n);S.push({name:a,kind:"ReturnProperty",signature:N(c,"ReturnProperty"),line:P(f,s),endLine:P(r,s),doc:y,classification:"Return Member",capabilities:"[]"})}}if(o.type==="ExpressionStatement"&&o.expression.type==="CallExpression"){let l=o.expression;if(l.callee.type==="MemberExpression"&&(l.callee.property?.value==="on"||l.callee.property?.value==="once")){let a=l.arguments[0]?.expression?.value,p=l.arguments[1]?.expression;if(a&&p&&(p.type==="ArrowFunctionExpression"||p.type==="FunctionExpression")){let f=h(p.span.start-t),r=h(p.span.end-t),c=d(p.span);S.push({name:`on:${a}`,kind:p.type,signature:N(c,p.type),line:P(f,s),endLine:P(r,s),doc:"",classification:"Event Handler",capabilities:"[]"})}}if(l.callee.type==="Identifier"&&l.callee.value==="addRoute"&&l.arguments.length>=3){let a=l.arguments[2].expression;if(a.type==="StringLiteral"){let p=a.value,f=h(l.span.start-t),r=h(l.span.end-t),c=d(l.span);S.push({name:p,kind:"HTTP Route",signature:N(c,"HTTP Route"),line:P(f,s),endLine:P(r,s),doc:"",classification:"Service Boundary",capabilities:JSON.stringify({path:p})})}}}}return S}function Te(e,t,i,n,s,u){let d=u??(o=>te(o,i)),h=[];function S(o){if(!(!o||typeof o!="object")){if(o.type==="CallExpression"){let l=Fe(o);if(l){let a=d(o.span.start-t);h.push({...l,line:P(a,n),snippet:s(o.span)})}}for(let l of Object.keys(o)){if(l==="span")continue;let a=o[l];Array.isArray(a)?a.forEach(S):typeof a=="object"&&S(a)}}}return e.forEach(S),h}function Fe(e){let{callee:t,arguments:i}=e;if(!i||i.length===0)return null;if(t.type==="Identifier"&&t.value,t.type==="Identifier"&&t.value==="addRoute"&&i.length>=3){let n=i[2].expression;if(n.type==="StringLiteral")return{type:"api_route",name:n.value,direction:"consume"}}if(t.type==="MemberExpression"&&t.property?.type==="Identifier"){let n=t.property.value;if(n==="emit"&&i[0].expression.type==="StringLiteral")return{type:"socket_event",name:i[0].expression.value,direction:"produce"};if(n==="on"&&i[0].expression.type==="StringLiteral")return{type:"socket_event",name:i[0].expression.value,direction:"consume"};if(["get","post","put","delete","patch"].includes(n)&&i[0].expression.type==="StringLiteral"){let u=i[0].expression.value,d=t.object.type==="Identifier"?t.object.value:"";if(["axios","http","request","appApi","restApi","adminApi","client"].includes(d))return{type:"api_route",name:u,direction:"produce"};if(u.startsWith("/"))return{type:"api_route",name:u,direction:"consume"}}}return t.type==="Identifier"&&t.value==="fetch"&&i[0].expression.type==="StringLiteral"?{type:"api_route",name:i[0].expression.value,direction:"produce"}:null}function X(e){let{classification:t,capabilities:i,exports:n,fileName:s}=e,u={Network:"API integration",Database:"data persistence","File System":"file I/O operations","Browser Storage":"client-side storage"},d=i.map(r=>u[r]).filter(Boolean).join(" and "),S={Component:(r,c)=>{let y=c.find(g=>g.kind==="FunctionDeclaration"||g.kind==="ClassDeclaration")?.name,m=y?`React component: ${y}`:"React UI component";return r?`${m} with ${r}`:m},Hook:(r,c)=>{let y=c.find(g=>g.name.startsWith("use"))?.name,m=y?`Custom React hook: ${y}`:"Custom React hook";return r?`${m} for ${r}`:m},Service:(r,c)=>{let m=`Service layer: ${c[0]?.name||"Service"}`;return r?`${m} handling ${r}`:m},Repository:(r,c)=>`Data repository: ${c[0]?.name||"Repository"} for ${r||"data access"}`,"Type Definition":(r,c)=>`Type definitions: ${c.slice(0,3).map(m=>m.name).join("")}${c.length>3?"...":""}`,Model:(r,c)=>`Data model: ${c[0]?.name||"Model"}`,"HTTP Route":(r,c)=>{let y=c.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)":(r,c)=>{let y=c.some(g=>g.classification==="Service Boundary"),m=c.find(g=>g.kind==="ClassDeclaration")?.name;return y?"PHP controller with API routes":m?`PHP class: ${m}`:"PHP module"},"Micro IR (Python)":(r,c)=>{let y=c.some(g=>g.classification==="Service Boundary"),m=c.find(g=>g.kind==="ClassDeclaration")?.name;return y?"Python API handler with routes":m?`Python class: ${m}`:"Python module"},"Micro IR (Go/TS) ":(r,c)=>{let y=c.some(g=>g.kind==="TypeDeclaration"),m=c.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) ":(r,c)=>{let y=c.find(T=>T.kind==="TraitDeclaration")?.name,m=c.find(T=>T.kind==="StructDeclaration")?.name,g=c.filter(T=>T.kind==="FunctionDeclaration");return y?r.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"}}[t];if(S)return S(d,n);if(n.length===0)return s?`Module: ${s}`:"Module with no exports";let o=n.filter(r=>r.kind==="FunctionDeclaration"),l=n.filter(r=>r.kind==="ClassDeclaration"),a=n.filter(r=>r.kind==="TsInterfaceDeclaration"||r.kind==="TsTypeAliasDeclaration"),p=[];if(l.length>0&&p.push(`Class: ${l[0].name}`),o.length>0){let r=o.slice(0,2).map(c=>c.name).join("");p.push(`Functions: ${r}`)}a.length>0&&p.push(`Types: ${a.length}`);let f=p.length>0?p.join(" | "):`Module with ${n.length} export(s)`;return d?`${f} \u2014 ${d}`:f}function Re(e){let t=new Set;function i(n){if(!(!n||typeof n!="object")){n.typeAnnotation&&k(n.typeAnnotation,t),(n.type==="TsTypeReference"||n.type==="TsTypeAnnotation")&&k(n,t);for(let s in n){if(s==="span"||s==="comments"||s==="interpreter")continue;let u=n[s];u&&typeof u=="object"&&(Array.isArray(u)?u.forEach(i):i(u))}}}return e.forEach(n=>i(n)),Array.from(t)}function k(e,t){if(e){if(e.type==="TsTypeAnnotation"){k(e.typeAnnotation,t);return}e.type==="TsTypeReference"&&(e.typeName?.type==="Identifier"&&t.add(e.typeName.value),e.typeName?.type==="TsQualifiedName"&&Ce(e.typeName,t),e.typeParams&&k(e.typeParams,t)),e.type==="TsArrayType"&&k(e.elementType,t),e.type==="TsUnionType"&&e.types?.forEach(i=>k(i,t)),e.type==="TsIntersectionType"&&e.types?.forEach(i=>k(i,t)),e.type==="TsTupleType"&&e.elemTypes?.forEach(i=>k(i.ty,t)),(e.type==="TsFunctionType"||e.type==="TsConstructorType")&&(e.params?.forEach(i=>k(i.typeAnnotation,t)),e.typeAnnotation&&k(e.typeAnnotation,t)),e.type==="TsTypeParameterDeclaration"&&e.params?.forEach(i=>{i.constraint&&k(i.constraint,t),i.default&&k(i.default,t)}),e.type==="TsTypeParameterInstantiation"&&e.params?.forEach(i=>k(i,t)),e.type==="TsMappedType"&&e.typeAnnotation&&k(e.typeAnnotation,t),e.type==="TsIndexedAccessType"&&(k(e.objectType,t),k(e.indexType,t)),e.type==="TsConditionalType"&&(k(e.checkType,t),k(e.extendsType,t),k(e.trueType,t),k(e.falseType,t)),e.type==="TsTypeLiteral"&&e.members?.forEach(i=>{i.typeAnnotation&&k(i.typeAnnotation,t)})}}function Ce(e,t){e.type==="TsQualifiedName"?(e.left&&Ce(e.left,t),e.right?.value&&t.add(e.right.value)):e.type==="Identifier"&&t.add(e.value)}import Le from"path";import fe from"path";import ke from"path";import He from"fs";import{fileURLToPath as Ue}from"url";import*as H from"web-tree-sitter";import Ne from"pino";var We={10:"TRACE",20:"DEBUG",30:"INFO",40:"WARN",50:"ERROR",60:"FATAL"},ze=Ne({level:process.env.LOG_LEVEL||"warn",base:{service:"liquid-shadow"},formatters:{level(e,t){return{level:e,severity:We[t]??"INFO"}}},transport:{target:"pino-pretty",options:{colorize:!0,translateTime:"HH:MM:ss",destination:2,levelKey:"severity",messageKey:"message"}}}),O=ze;import{fileURLToPath as Be}from"node:url";import{dirname as me,join as Pe,resolve as Ze}from"node:path";import{existsSync as je}from"node:fs";var Je=Be(import.meta.url),we=me(Je);function Oe(){let e=we;for(;e!==me(e);){if(je(Pe(e,"package.json")))return e;e=me(e)}return Ze(we,"..","..")}function Me(...e){return Pe(Oe(),...e)}var St=ke.dirname(Ue(import.meta.url)),Ee=O.child({module:"parser:tree-sitter"}),ie=class{parser=null;languages=new Map;async ensureInitialized(){if(this.parser)return;let t=H.Parser||H;await t.init(),this.parser=new t}async getLanguage(t){if(this.languages.has(t))return this.languages.get(t);let i=Me("resources","grammars",`tree-sitter-${this.getLangName(t)}.wasm`);if(!He.existsSync(i))return Ee.warn({grammarPath:i},"Grammar WASM not found"),null;try{let n=await H.Language.load(i);return this.languages.set(t,n),n}catch(n){return Ee.error({err:n,ext:t},"Failed to load language grammar"),null}}getLangName(t){switch(t.toLowerCase()){case".php":return"php";case".py":return"python";case".go":return"go";case".rs":return"rust";default:return""}}getQueries(t){switch(t.toLowerCase()){case".php":return`
|
|
1
|
+
import ot from"fs";function Je(t){let n=t.split(`
|
|
2
|
+
`),i=[],e=0;for(let s of n)i.push(e),e+=s.length+1;return i}function E(t,n){for(let i=0;i<n.length;i++)if(n[i+1]>t||i===n.length-1)return i+1;return 1}function De(t,n){return n.slice(0,t).toString("utf8").length}function qe(t){if(t.toString("utf8").length===t.length)return e=>e;let i=new Map;return e=>{let s=i.get(e);return s===void 0&&(s=t.slice(0,e).toString("utf8").length,i.set(e,s)),s}}function He(t,n,i){let e=t.start-n,s=t.end-n;return e<0||s>i.length?"":i.slice(e,s).toString("utf8")}function Ue(t){let n=[],i=/\/\*\*[\s\S]*?\*\//g,e;for(;(e=i.exec(t))!==null;)n.push({start:e.index,end:e.index+e[0].length,text:e[0]});return n}function V(t,n,i){for(let e of n){if(e.start===t)return e.text;if(e.start>t&&e.start<t+50){let s=i.substring(t,e.start);if(/^\s*$/.test(s))return e.text}if(e.end<=t&&e.end>t-50){let s=i.substring(e.end,t);if(/^\s*$/.test(s))return e.text}}return""}function Ve(t){if(!t)return"";let i=t.replace(/\/\*\*|\*\/|\*/g,"").trim().split(`
|
|
3
|
+
`)[0].trim();return i.length>200?i.substring(0,197)+"...":i}function ve(t,n,i){let e=t.toLowerCase(),s=n.toLowerCase();return e.includes("components/")||e.endsWith(".tsx")?"Component":e.startsWith("use")||s.startsWith("use")?"Hook":e.includes("models/")||s.endsWith("model")?"Model":e.includes("services/")||e.includes("controllers/")||e.includes("handlers/")||e.includes("mcp/")||e.endsWith("service.ts")||e.endsWith("controller.ts")||e.endsWith("handler.ts")||s.endsWith("service")||s.endsWith("controller")||s.endsWith("handler")?"Service":e.includes("repositories/")||e.includes("repos/")||e.endsWith("repository.ts")||e.endsWith("repo.ts")||s.endsWith("repository")||s.endsWith("repo")?"Repository":i==="TsInterfaceDeclaration"||i==="TsTypeAliasDeclaration"?"Type Definition":"Other"}function he(t){let n=[];return/\b(fetch|axios|superagent|got)\s*\(|import\s+.*\b(http|https|node-fetch)\b/i.test(t)&&n.push("Network"),(/\b(knex|prisma|typeorm|mongoose|sequelize|pg|mysql|sqlite3)\b/i.test(t)||/\b(SELECT\s+.*FROM|INSERT\s+INTO|UPDATE\s+.*SET|DELETE\s+FROM)\b/i.test(t)||/\.query\s*\(|\.execute\s*\(/i.test(t)&&/db|database|client|pool/i.test(t))&&n.push("Database"),(/\bfs\./i.test(t)||/\b(readFileSync|writeFileSync|readFile|writeFile|readdir)\b/.test(t)||/import\s+.*\bfs\b/.test(t))&&n.push("File System"),(/\b(localStorage|sessionStorage|indexedDB)\./.test(t)||/\bdocument\.cookie\b/.test(t))&&n.push("Browser Storage"),n}function G(t,n){if(!t)return"";let i=t.trimStart();for(;/^\/\*[\s\S]*?\*\//.test(i);)i=i.replace(/^\/\*[\s\S]*?\*\/\s*/,"");for(;/^\/\/[^\n]*\n/.test(i);)i=i.replace(/^\/\/[^\n]*\n\s*/,"");if(i=i.replace(/^(?:import[^\n]*\n)+/,"").replace(/^(?:export\s+\{[^}]*\}\s+from\s+['"][^'"]+['"];?\s*\n?)+/,"").trim(),n==="TsInterfaceDeclaration"||n==="TsTypeAliasDeclaration")return i;let e=0,s=0,l=i.length;for(let y=0;y<i.length;y++){let T=i[y];if(T==="(")e++;else if(T===")")e--;else if(T==="<")s++;else if(T===">")s--;else if(T==="{"){if(e===0&&s===0){l=y;break}}else if(T===";"&&e===0&&s===0){l=y;break}else if(T==="="&&i[y+1]===">"&&e===0&&s===0){l=y+2;break}}let m=i.substring(0,l).trim();return m.length>500?m.slice(0,497)+"...":m}function Ge(t){let n=[];for(let i of t)i.type==="ImportDeclaration"&&n.push({module:i.source.value,name:i.specifiers.map(e=>e.type==="ImportDefaultSpecifier"?"default":e.type==="ImportNamespaceSpecifier"?"*":e.local?.value||e.imported?.value||"*").join(", ")}),i.type==="ExportAllDeclaration"&&n.push({module:i.source.value,name:"*"}),i.type==="ExportNamedDeclaration"&&i.source&&n.push({module:i.source.value,name:i.specifiers.map(e=>e.type==="ExportSpecifier"?e.orig.value:"*").join(", ")});return n}function mt(t,n){for(let i of t){if((i.type==="FunctionDeclaration"||i.type==="ClassDeclaration")&&(i.identifier?.value||i.id?.value)===n)return i.span;if(i.type==="VariableDeclaration"){for(let e of i.declarations)if(e.id?.type==="Identifier"&&e.id.value===n)return e.span||i.span}if((i.type==="TsTypeAliasDeclaration"||i.type==="TsInterfaceDeclaration"||i.type==="TsEnumDeclaration")&&(i.id?.value||i.identifier?.value)===n)return i.span;if(i.type==="ExportDeclaration"){let e=i.declaration;if(!e)continue;if((e.type==="FunctionDeclaration"||e.type==="ClassDeclaration")&&(e.identifier?.value||e.id?.value)===n)return e.span||i.span;if(e.type==="VariableDeclaration"){for(let s of e.declarations)if(s.id?.type==="Identifier"&&s.id.value===n)return s.span||e.span||i.span}}}return null}function Ke(t,n,i,e,s,l,m,y,T){let o=T??(a=>De(a,i)),p=[];for(let a of t){if(a.type==="ExportDeclaration"){let c=a.declaration,f=c.type,r="";f==="VariableDeclaration"?r=c.declarations.map(w=>w.id.value).join("",""):r=c.id?.value||c.identifier?.value||"anonymous";let u=o(a.span.start-n),b=o(a.span.end-n),S=V(u,l,e),D=y(a.span),d=[];if(a.type==="ExportDeclaration"&&(f==="ClassDeclaration"||f==="ClassExpression")){let w=c.body||[];for(let C of w)if(C.type==="ClassMethod"||C.type==="ClassProperty"){let N=C.key.value;if(!N)continue;let j=o(C.span.start-n),q=o(C.span.end-n),P=y(C.span),z=V(j,l,e);d.push({name:N,kind:C.type,signature:G(P,C.type),line:E(j,s),endLine:E(q,s),doc:z,classification:C.type==="ClassMethod"?"Method":"Property",capabilities:"[]"})}}else if(f==="FunctionDeclaration"&&c.body?.type==="BlockStatement")d=Pe(c.body.stmts,n,i,e,s,l,y,o);else if(f==="VariableDeclaration"){for(let w of c.declarations)if(w.init&&(w.init.type==="ArrowFunctionExpression"||w.init.type==="FunctionExpression")&&w.init.body?.type==="BlockStatement"){d=Pe(w.init.body.stmts,n,i,e,s,l,y,o);break}}p.push({name:r,kind:f,signature:G(D,f),line:E(u,s),endLine:E(b,s),doc:S,classification:ve(m,r,f),capabilities:JSON.stringify(he(D)),members:d})}if(a.type==="ExportNamedDeclaration"){for(let c of a.specifiers)if(c.type==="ExportSpecifier"){let f=c.orig.value,r=c.exported?.value||f,b=mt(t,f)||a.span,S=o(b.start-n),D=o(b.end-n),d=V(S,l,e);p.push({name:r,kind:"ExportSpecifier",signature:`export { ${f} }`,line:E(S,s),endLine:E(D,s),doc:d,classification:"Export mapping",capabilities:"[]"})}}if(a.type==="ExportDefaultDeclaration"){let c=o(a.span.start-n),f=o(a.span.end-n),r=V(c,l,e),u=y(a.span),b=[];if(a.decl.type==="ClassExpression"||a.decl.type==="ClassDeclaration"){let S=a.decl.body||[];for(let D of S)if(D.type==="ClassMethod"||D.type==="ClassProperty"){let d=D.key.value;if(!d)continue;let w=o(D.span.start-n),C=o(D.span.end-n),N=y(D.span),j=V(w,l,e);b.push({name:d,kind:D.type,signature:G(N,D.type),line:E(w,s),endLine:E(C,s),doc:j,classification:D.type==="ClassMethod"?"Method":"Property",capabilities:"[]"})}}else(a.decl.type==="FunctionExpression"||a.decl.type==="FunctionDeclaration"||a.decl.type==="ArrowFunctionExpression")&&a.decl.body?.type==="BlockStatement"&&(b=Pe(a.decl.body.stmts,n,i,e,s,l,y,o));p.push({name:"default",kind:"DefaultExport",signature:G(u,"DefaultExport"),line:E(c,s),endLine:E(f,s),doc:r,classification:"Default Export",capabilities:JSON.stringify(he(u)),members:b})}if(a.type==="ExportAllDeclaration"){let c=o(a.span.start-n),f=o(a.span.end-n),r=a.source.value,u=V(c,l,e);p.push({name:"*",kind:"ExportAllDeclaration",signature:`export * from "${r}"`,line:E(c,s),endLine:E(f,s),doc:u,classification:"Re-export",capabilities:"[]"})}}return p}function Pe(t,n,i,e,s,l,m,y){let T=[];for(let o of t){if(o.type==="VariableDeclaration")for(let p of o.declarations){let a=[],c=r=>{if(r.type==="Identifier")a.push({name:r.value,span:r.span});else if(r.type==="ArrayPattern")for(let u of r.elements)u&&c(u);else if(r.type==="ObjectPattern")for(let u of r.properties)u.type==="AssignmentPatternProperty"?a.push({name:u.key.value,span:u.span}):u.type==="KeyValuePatternProperty"&&c(u.value)};c(p.id);let f=p.init&&(p.init.type==="ArrowFunctionExpression"||p.init.type==="FunctionExpression");for(let r of a){let u=f?p.init.span||p.span||r.span:p.span||r.span,b=f?p.init.type:"VariableDeclaration",S=f?"Internal Function":"Internal Variable",D=y(u.start-n),d=y(u.end-n),w=m(u),C=V(D,l,e);T.push({name:r.name,kind:b,signature:G(w,b),line:E(D,s),endLine:E(d,s),doc:C,classification:S,capabilities:"[]"})}}if(o.type==="FunctionDeclaration"){let p=o.identifier?.value||o.ident?.value||"anonymous",a=y(o.span.start-n),c=y(o.span.end-n),f=m(o.span),r=V(a,l,e);T.push({name:p,kind:"FunctionDeclaration",signature:G(f,"FunctionDeclaration"),line:E(a,s),endLine:E(c,s),doc:r,classification:"Internal Function",capabilities:"[]"})}if(o.type==="ReturnStatement"&&o.argument?.type==="ObjectExpression")for(let p of o.argument.properties){let a="",c=p.span||p.key?.span||p.ident?.span;if(p.type==="KeyValueProperty"){let f=p.key;a=f?.value||f?.raw||(f?.type==="Identifier"?f.value:"")}else p.type==="MethodProperty"?a=p.key?.value||p.key?.raw||"":p.type==="ShorthandProperty"?a=p.ident?.value||"":p.type==="Identifier"&&(a=p.value||"");if(a&&c){let f=y(c.start-n),r=y(c.end-n),u=m(c),b=V(f,l,e);T.push({name:a,kind:"ReturnProperty",signature:G(u,"ReturnProperty"),line:E(f,s),endLine:E(r,s),doc:b,classification:"Return Member",capabilities:"[]"})}}if(o.type==="ExpressionStatement"&&o.expression.type==="CallExpression"){let p=o.expression;if(p.callee.type==="MemberExpression"&&(p.callee.property?.value==="on"||p.callee.property?.value==="once")){let a=p.arguments[0]?.expression?.value,c=p.arguments[1]?.expression;if(a&&c&&(c.type==="ArrowFunctionExpression"||c.type==="FunctionExpression")){let f=y(c.span.start-n),r=y(c.span.end-n),u=m(c.span);T.push({name:`on:${a}`,kind:c.type,signature:G(u,c.type),line:E(f,s),endLine:E(r,s),doc:"",classification:"Event Handler",capabilities:"[]"})}}if(p.callee.type==="Identifier"&&p.callee.value==="addRoute"&&p.arguments.length>=3){let a=p.arguments[2].expression;if(a.type==="StringLiteral"){let c=a.value,f=y(p.span.start-n),r=y(p.span.end-n),u=m(p.span);T.push({name:c,kind:"HTTP Route",signature:G(u,"HTTP Route"),line:E(f,s),endLine:E(r,s),doc:"",classification:"Service Boundary",capabilities:JSON.stringify({path:c})})}}}}return T}function Qe(t,n,i,e,s,l){let m=l??(o=>De(o,i)),y=[];function T(o){if(!(!o||typeof o!="object")){if(o.type==="CallExpression"){let p=ft(o);if(p){let a=m(o.span.start-n);y.push({...p,line:E(a,e),snippet:s(o.span)})}}for(let p of Object.keys(o)){if(p==="span")continue;let a=o[p];Array.isArray(a)?a.forEach(T):typeof a=="object"&&T(a)}}}return t.forEach(T),y}function ft(t){let{callee:n,arguments:i}=t;if(!i||i.length===0)return null;if(n.type==="Identifier"&&n.value,n.type==="Identifier"&&n.value==="addRoute"&&i.length>=3){let e=i[2].expression;if(e.type==="StringLiteral")return{type:"api_route",name:e.value,direction:"consume"}}if(n.type==="MemberExpression"&&n.property?.type==="Identifier"){let e=n.property.value;if(e==="emit"&&i[0].expression.type==="StringLiteral")return{type:"socket_event",name:i[0].expression.value,direction:"produce"};if(e==="on"&&i[0].expression.type==="StringLiteral")return{type:"socket_event",name:i[0].expression.value,direction:"consume"};if(["get","post","put","delete","patch"].includes(e)&&i[0].expression.type==="StringLiteral"){let l=i[0].expression.value,m=n.object.type==="Identifier"?n.object.value:"";if(["axios","http","request","appApi","restApi","adminApi","client"].includes(m))return{type:"api_route",name:l,direction:"produce"};if(l.startsWith("/"))return{type:"api_route",name:l,direction:"consume"}}}return n.type==="Identifier"&&n.value==="fetch"&&i[0].expression.type==="StringLiteral"?{type:"api_route",name:i[0].expression.value,direction:"produce"}:null}function ye(t){let{classification:n,capabilities:i,exports:e,fileName:s}=t,l={Network:"API integration",Database:"data persistence","File System":"file I/O operations","Browser Storage":"client-side storage"},m=i.map(r=>l[r]).filter(Boolean).join(" and "),T={Component:(r,u)=>{let b=u.find(D=>D.kind==="FunctionDeclaration"||D.kind==="ClassDeclaration")?.name,S=b?`React component: ${b}`:"React UI component";return r?`${S} with ${r}`:S},Hook:(r,u)=>{let b=u.find(D=>D.name.startsWith("use"))?.name,S=b?`Custom React hook: ${b}`:"Custom React hook";return r?`${S} for ${r}`:S},Service:(r,u)=>{let S=`Service layer: ${u[0]?.name||"Service"}`;return r?`${S} handling ${r}`:S},Repository:(r,u)=>`Data repository: ${u[0]?.name||"Repository"} for ${r||"data access"}`,"Type Definition":(r,u)=>`Type definitions: ${u.slice(0,3).map(S=>S.name).join("")}${u.length>3?"...":""}`,Model:(r,u)=>`Data model: ${u[0]?.name||"Model"}`,"HTTP Route":(r,u)=>{let b=u.filter(S=>S.classification==="Service Boundary");return b.length>0?`API endpoints: ${b.slice(0,3).map(S=>S.name).join("")}`:"API route handler"},"Micro IR (PHP)":(r,u)=>{let b=u.some(D=>D.classification==="Service Boundary"),S=u.find(D=>D.kind==="ClassDeclaration")?.name;return b?"PHP controller with API routes":S?`PHP class: ${S}`:"PHP module"},"Micro IR (Python)":(r,u)=>{let b=u.some(D=>D.classification==="Service Boundary"),S=u.find(D=>D.kind==="ClassDeclaration")?.name;return b?"Python API handler with routes":S?`Python class: ${S}`:"Python module"},"Micro IR (Go/TS) ":(r,u)=>{let b=u.some(D=>D.kind==="TypeDeclaration"),S=u.filter(D=>D.kind==="FunctionDeclaration");return b&&S.length>0?`Go package: types and ${S.length} function(s)`:b?"Go package: type definitions":S.length>0?`Go package: ${S[0].name} and ${S.length} function(s)`:"Go module"},"Micro IR (Rust/TS) ":(r,u)=>{let b=u.find(d=>d.kind==="TraitDeclaration")?.name,S=u.find(d=>d.kind==="StructDeclaration")?.name,D=u.filter(d=>d.kind==="FunctionDeclaration");return b?r.includes("Rust trait")?`Rust module: trait ${b}`:`Rust module: ${b}`:S?`Rust module: struct ${S}`:D.length>0?`Rust module: ${D.length} function(s)`:"Rust module"}}[n];if(T)return T(m,e);if(e.length===0)return s?`Module: ${s}`:"Module with no exports";let o=e.filter(r=>r.kind==="FunctionDeclaration"),p=e.filter(r=>r.kind==="ClassDeclaration"),a=e.filter(r=>r.kind==="TsInterfaceDeclaration"||r.kind==="TsTypeAliasDeclaration"),c=[];if(p.length>0&&c.push(`Class: ${p[0].name}`),o.length>0){let r=o.slice(0,2).map(u=>u.name).join("");c.push(`Functions: ${r}`)}a.length>0&&c.push(`Types: ${a.length}`);let f=c.length>0?c.join(" | "):`Module with ${e.length} export(s)`;return m?`${f} \u2014 ${m}`:f}function Xe(t){let n=new Set;function i(e){if(!(!e||typeof e!="object")){e.typeAnnotation&&I(e.typeAnnotation,n),(e.type==="TsTypeReference"||e.type==="TsTypeAnnotation")&&I(e,n);for(let s in e){if(s==="span"||s==="comments"||s==="interpreter")continue;let l=e[s];l&&typeof l=="object"&&(Array.isArray(l)?l.forEach(i):i(l))}}}return t.forEach(e=>i(e)),Array.from(n)}function I(t,n){if(t){if(t.type==="TsTypeAnnotation"){I(t.typeAnnotation,n);return}t.type==="TsTypeReference"&&(t.typeName?.type==="Identifier"&&n.add(t.typeName.value),t.typeName?.type==="TsQualifiedName"&&Ye(t.typeName,n),t.typeParams&&I(t.typeParams,n)),t.type==="TsArrayType"&&I(t.elementType,n),t.type==="TsUnionType"&&t.types?.forEach(i=>I(i,n)),t.type==="TsIntersectionType"&&t.types?.forEach(i=>I(i,n)),t.type==="TsTupleType"&&t.elemTypes?.forEach(i=>I(i.ty,n)),(t.type==="TsFunctionType"||t.type==="TsConstructorType")&&(t.params?.forEach(i=>I(i.typeAnnotation,n)),t.typeAnnotation&&I(t.typeAnnotation,n)),t.type==="TsTypeParameterDeclaration"&&t.params?.forEach(i=>{i.constraint&&I(i.constraint,n),i.default&&I(i.default,n)}),t.type==="TsTypeParameterInstantiation"&&t.params?.forEach(i=>I(i,n)),t.type==="TsMappedType"&&t.typeAnnotation&&I(t.typeAnnotation,n),t.type==="TsIndexedAccessType"&&(I(t.objectType,n),I(t.indexType,n)),t.type==="TsConditionalType"&&(I(t.checkType,n),I(t.extendsType,n),I(t.trueType,n),I(t.falseType,n)),t.type==="TsTypeLiteral"&&t.members?.forEach(i=>{i.typeAnnotation&&I(i.typeAnnotation,n)})}}function Ye(t,n){t.type==="TsQualifiedName"?(t.left&&Ye(t.left,n),t.right?.value&&n.add(t.right.value)):t.type==="Identifier"&&n.add(t.value)}import ct from"path";import $e from"path";import st from"path";import vt from"fs";import{fileURLToPath as Mt}from"url";import*as ie from"web-tree-sitter";import dt from"pino";var ht={10:"TRACE",20:"DEBUG",30:"INFO",40:"WARN",50:"ERROR",60:"FATAL"},yt=dt({level:process.env.LOG_LEVEL||"warn",base:{service:"liquid-shadow"},formatters:{level(t,n){return{level:t,severity:ht[n]??"INFO"}}},transport:{target:"pino-pretty",options:{colorize:!0,translateTime:"HH:MM:ss",destination:2,levelKey:"severity",messageKey:"message"}}}),ne=yt;import{fileURLToPath as gt}from"node:url";import{dirname as Ie,join as tt,resolve as bt}from"node:path";import{existsSync as xt}from"node:fs";var St=gt(import.meta.url),et=Ie(St);function Dt(){let t=et;for(;t!==Ie(t);){if(xt(tt(t,"package.json")))return t;t=Ie(t)}return bt(et,"..","..")}function nt(...t){return tt(Dt(),...t)}var Xt=st.dirname(Mt(import.meta.url)),it=ne.child({module:"parser:tree-sitter"}),Me=class{parser=null;languages=new Map;async ensureInitialized(){if(this.parser)return;let n=ie.Parser||ie;await n.init(),this.parser=new n}async getLanguage(n){if(this.languages.has(n))return this.languages.get(n);let i=nt("resources","grammars",`tree-sitter-${this.getLangName(n)}.wasm`);if(!vt.existsSync(i))return it.warn({grammarPath:i},"Grammar WASM not found"),null;try{let e=await ie.Language.load(i);return this.languages.set(n,e),e}catch(e){return it.error({err:e,ext:n},"Failed to load language grammar"),null}}getLangName(n){switch(n.toLowerCase()){case".php":return"php";case".py":return"python";case".go":return"go";case".rs":return"rust";default:return""}}getQueries(n){switch(n.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,14 +24,16 @@ import Ae from"fs";function he(e){let t=e.split(`
|
|
|
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(
|
|
28
|
-
`),
|
|
29
|
-
`),
|
|
30
|
-
`).trim(),capabilities:JSON.stringify(
|
|
31
|
-
`).trim(),capabilities:JSON.stringify({attributes:
|
|
32
|
-
`).trim(),capabilities:JSON.stringify({attributes:
|
|
33
|
-
`).trim()
|
|
34
|
-
`)
|
|
35
|
-
`).trim()),
|
|
36
|
-
`)
|
|
37
|
-
`).
|
|
27
|
+
`;default:return""}}mapKind(n,i){if(n==="import")return"ImportDeclaration";if(i===".php"){if(n==="func")return"FunctionDeclaration";if(n==="class")return"ClassDeclaration";if(n==="interface")return"InterfaceDeclaration";if(n==="trait")return"TraitDeclaration";if(n==="method")return"MethodDeclaration"}if(i===".py"){if(n==="func")return"FunctionDeclaration";if(n==="class")return"ClassDeclaration"}if(i===".go"){if(n==="func")return"FunctionDeclaration";if(n==="type")return"TypeDeclaration"}if(i===".rs"){if(n==="func")return"FunctionDeclaration";if(n==="struct")return"StructDeclaration";if(n==="enum")return"EnumDeclaration";if(n==="trait")return"TraitDeclaration";if(n==="type")return"TypeDeclaration"}return"Unknown"}mapClassification(n){return n==="import"?"Dependency":n==="func"||n==="method"?"Function":n==="class"||n==="interface"||n==="trait"||n==="struct"||n==="enum"||n==="type"?"Class":"Other"}async parse(n,i){await this.ensureInitialized();let e=st.extname(n).toLowerCase(),s=await this.getLanguage(e);if(!s||!this.parser)return[];this.parser.setLanguage(s);let l=this.parser.parse(i),m=i.split(`
|
|
28
|
+
`),y=this.getQueries(e);if(!y)return[];let o=new ie.Query(s,y).matches(l.rootNode),p=[];for(let a of o){let c=a.captures.find(u=>u.name==="name")?.node,f=a.captures[0].node,r=a.captures[0].name;if(c){let u=f.startPosition.row+1,b=f.endPosition.row+1,S=m[f.startPosition.row].trim();p.push({name:c.text,kind:this.mapKind(r,e),classification:this.mapClassification(r),signature:S,line:u,endLine:b,doc:"",capabilities:"{}"})}}return p}};var Re=class{parse(n,i=!1){let e=[],s=[],l=n.split(`
|
|
29
|
+
`),m="",y="",T=0,o=0,p=-1,a=-1,c=[],f=[],r=!1,u=i?"api":"",b="",S=/^namespace\s+([a-zA-Z0-9_\\]+);/,D=/^(?:abstract\s+)?(?:readonly\s+)?class\s+([a-zA-Z0-9_]+)/,d=/^interface\s+([a-zA-Z0-9_]+)/,w=/^trait\s+([a-zA-Z0-9_]+)/,C=/^enum\s+([a-zA-Z0-9_]+)(?:\s*:\s*(string|int))?\s*/,N=/^((?:(?:public|protected|private|static)\s+)*)function\s+([a-zA-Z0-9_]+)\s*\(/,j=/^(public|protected|private)\s+(static\s+)?(readonly\s+)?(?:(\?\s*)?([a-zA-Z0-9_\\|]+)\s+)?\$([a-zA-Z0-9_]+)/,q=/^use\s+([a-zA-Z0-9_\\]+)(?:\s+as\s+([a-zA-Z0-9_]+))?;/,P=/^#\[([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*)?['"]([^'"]+)['"]/,ce=/\$this->(hasMany|hasOne|belongsTo|belongsToMany|morphTo|morphMany|morphOne|morphToMany|morphedByMany)\s*\(\s*([a-zA-Z0-9_\\]+)(?:::class)?/,Fe=/^->(hasMany|hasOne|belongsTo|belongsToMany|morphTo|morphMany|morphOne|morphToMany|morphedByMany)\s*\(\s*([a-zA-Z0-9_\\]+)(?:::class)?/,ge=/(public|protected|private)\s+(readonly\s+)?(?:(\?\s*)?([a-zA-Z0-9_\\|]+)\s+)?\$([a-zA-Z0-9_]+)/g,be=/(?:protected|public)\s+\$(fillable|casts|guarded|hidden|appends|with)\s*=/;function xe(g){try{let h=JSON.parse(g||"{}");if(h&&typeof h=="object"&&!Array.isArray(h))return h}catch{}return{}}function le(g,h){let _=[],x=g,v=0,k=0;for(;x<l.length;){let F=l[x].trim();_.push(F),v+=(F.match(/\[/g)||[]).length-(F.match(/]/g)||[]).length,k+=(F.match(/\(/g)||[]).length-(F.match(/\)/g)||[]).length;let B=F.includes(h),H=v<=0&&k<=0;if(B&&H)break;x+=1}return{text:_.join(" "),endIndex:x}}function se(g,h){let _=h.replace(/^[^=]+=\s*/,"").replace(/;$/,"").trim();if(g==="casts"){let F={},B=/['"]([^'"]+)['"]\s*=>\s*['"]([^'"]+)['"]/g,H=null;for(;H=B.exec(_);)F[H[1]]=H[2];return F}let x=[],v=/['"]([^'"]+)['"]/g,k=null;for(;k=v.exec(_);)x.push(k[1]);return x}function Ee(g,h){for(let _=h;_>=0;_-=1){let x=g[_]?.trim()||"";if(x)return x}return""}function re(g,h,_,x){if(!m)return;let v=h.split("\\").pop()||h;s.push({type:"eloquent_relation",name:v,direction:"produce",line:_,snippet:x,method:g,url:`${m}->${v}`})}for(let g=0;g<l.length;g++){let h=l[g].trim();if(!h)continue;let _=(h.match(/{/g)||[]).length,x=(h.match(/}/g)||[]).length,v=o;if(o+=_-x,y&&o<=a){let R=e.find(M=>M.name===y&&M.line===T);R&&(R.endLine=g+1),y="",a=-1}if(m&&o<=p){let R=e.find(M=>M.name===m&&(M.kind==="ClassDeclaration"||M.kind==="TraitDeclaration"||M.kind==="InterfaceDeclaration"||M.kind==="EnumDeclaration"));R&&(R.endLine=g+1),m="",p=-1}let k=h.match(W);if(k&&(u=k[1]),h.includes("});")&&(u=""),h.startsWith("/**")){r=!0,f=[];continue}if(r){h.endsWith("*/")?r=!1:f.push(h.replace(/^\*\s?/,""));continue}let F=h.match(P);if(F){c.push(F[1]);continue}let B=h.match(S);if(B){b=B[1]||"",c=[],f=[];continue}let H=h.match(D);if(H){m=H[1],p=o-_;let R={attributes:c};b&&(R.namespace=b),e.push({name:m,kind:"ClassDeclaration",classification:"Class",signature:`class ${m}`,line:g+1,endLine:g+1,doc:f.join(`
|
|
30
|
+
`).trim(),capabilities:JSON.stringify(R),members:[]}),c=[],f=[];continue}let X=h.match(d);if(X){let R=X[1];m=R,p=o-_,e.push({name:R,kind:"InterfaceDeclaration",classification:"Interface",signature:`interface ${R}`,line:g+1,endLine:g+1,doc:f.join(`
|
|
31
|
+
`).trim(),capabilities:JSON.stringify({attributes:c}),members:[]}),c=[],f=[];continue}let pe=h.match(w);if(pe){let R=pe[1];m=R,p=o-_,e.push({name:R,kind:"TraitDeclaration",classification:"Trait",signature:`trait ${R}`,line:g+1,endLine:g+1,doc:f.join(`
|
|
32
|
+
`).trim(),capabilities:JSON.stringify({attributes:c}),members:[]}),c=[],f=[];continue}let ae=h.match(C);if(ae){let R=ae[1],M=ae[2]||null;m=R,p=o-_;let Z={attributes:c,backedType:M};b&&(Z.namespace=b),e.push({name:R,kind:"EnumDeclaration",classification:"Enum",signature:M?`enum ${R}: ${M}`:`enum ${R}`,line:g+1,endLine:g+1,doc:f.join(`
|
|
33
|
+
`).trim(),capabilities:JSON.stringify(Z),members:[]}),c=[],f=[];continue}let ue=h.match(N);if(ue){let R=(ue[1]||"").trim(),M=ue[2],Z=!!m,O=/\bprivate\b/.test(R)?"private":/\bprotected\b/.test(R)?"protected":"public",L=/\bstatic\b/.test(R),U=le(g,")"),te=U.text.match(/\)\s*:\s*([?a-zA-Z0-9_\\|]+)/),Se=te?te[1]:null,pt=_>0&&x>=_;y=M,T=g+1,a=o-_;let We=!1,_e={};for(let J of c)J.toLowerCase().includes("route")&&(We=!0,_e={type:"route",method:"GET",path:"/"});let ze=f.join(`
|
|
34
|
+
`).trim();if(We){let J=_e.path||"/";e.push({name:J,kind:"HTTP Route",classification:"Service Boundary",signature:`Function: ${M}`,line:g+1,endLine:g+1,doc:ze,capabilities:JSON.stringify({type:"route",handler:m?`${m}@${M}`:M,..._e})}),s.push({type:"api_route",name:J,direction:"consume",line:g+1,snippet:h})}let Ze={name:M,kind:Z?"MethodDeclaration":"FunctionDeclaration",classification:Z?"Method":"Function",signature:`${Z?m+":: ":""}${M}`,line:g+1,endLine:g+1,doc:ze,capabilities:JSON.stringify(Z?{attributes:c,visibility:O,static:L,returnType:Se}:{attributes:c,returnType:Se})};e.push(Ze);let ke=Z?h.match(ce):null;if(ke&&re(ke[1],ke[2],g+1,h),Z&&M==="__construct"){let J=null;for(;J=ge.exec(U.text);){let Be=J[1],Oe=!!J[2],Ae=J[4]?`${J[3]?"?":""}${J[4]}`:null,je=J[5],ut=`${Be} ${Oe?"readonly ":""}${Ae?`${Ae} `:""}$${je}`.trim();e.push({name:je,kind:"PropertyDeclaration",classification:"Property",signature:ut,line:g+1,endLine:g+1,doc:"",capabilities:JSON.stringify({visibility:Be,static:!1,readonly:Oe,type:Ae}),members:[]})}ge.lastIndex=0}pt&&(Ze.endLine=g+1,y="",a=-1),c=[],f=[];continue}let me=!1,Q=!1,A=g,$=m&&!y?h.match(j):null;if($){me=!0;let R=$[1],M=!!$[2],Z=!!$[3],O=$[5]?`${$[4]?"?":""}${$[5]}`:null,L=$[6],U=`${R} ${M?"static ":""}${Z?"readonly ":""}${O?`${O} `:""}$${L}`.trim();e.push({name:L,kind:"PropertyDeclaration",classification:"Property",signature:U,line:g+1,endLine:g+1,doc:f.join(`
|
|
35
|
+
`).trim(),capabilities:JSON.stringify({visibility:R,static:M,readonly:Z,type:O}),members:[]})}let Y=m&&!y?h.match(be):null;if(Y){Q=!0;let R=Y[1],M=le(g,";");A=M.endIndex;let Z=se(R,M.text),O=[...e].reverse().find(L=>L.name===m&&L.kind==="ClassDeclaration");if(O){let L=xe(O.capabilities);(!L.modelConfig||typeof L.modelConfig!="object"||Array.isArray(L.modelConfig))&&(L.modelConfig={}),L.modelConfig[R]=Z,O.capabilities=JSON.stringify(L)}}if(me||Q){Q&&A>g&&(g=A),c=[],f=[];continue}let oe=h.match(q);if(oe){let R=oe[1]||"",M=oe[2]||R.split("\\").pop()||"";e.push({name:M,kind:"ImportSpecifier",classification:"Dependency",signature:`use ${R}`,line:g+1,endLine:g+1,doc:"",capabilities:JSON.stringify({type:"use",namespace:R})}),c=[],f=[];continue}let K=h.match(z);if(K){let R=K[1].toUpperCase(),M=K[2];if(h.includes("Route::")||h.includes("router->")||h.includes("action")||h.includes(",")&&!h.includes("view(")){if(u){let te=u.startsWith("/")?u:`/${u}`,Se=M.startsWith("/")?M:`/${M}`;M=(te+Se).replace(/\/+/g,"/")}let O=null,L=h.match(/\[\s*([a-zA-Z0-9_]+)::class\s*,\s*['"]([^'"]+)['"]\s*\]/);if(L)O=`${L[1]}@${L[2]}`;else if(h.includes("::class")){let te=h.match(/([a-zA-Z0-9_]+)::class/);te&&(O=te[1])}let U=h;!h.endsWith(");")&&g+1<l.length&&(U+=" "+l[g+1].trim(),!U.endsWith(");")&&g+2<l.length&&(U+=" "+l[g+2].trim())),e.push({name:M,kind:"HTTP Route",classification:"Service Boundary",signature:U,line:g+1,endLine:g+1,doc:"",capabilities:JSON.stringify({type:"route",method:R,path:M,handler:O})}),s.push({type:"api_route",name:M,direction:"consume",line:g+1,snippet:U,method:R,url:M}),f=[];continue}}let ee=m&&y?h.match(ce):null,fe=m&&y?h.match(Fe):null;if(ee)re(ee[1],ee[2],g+1,h);else if(fe){let R=Ee(l,g-1);/\$this\b/.test(R)&&re(fe[1],fe[2],g+1,h)}let lt=/(?:\$client|client|Http)::(get|post|put|delete|patch|request)\s*\(\s*(?:url\s*:\s*)?([^,)]+)|(?:\$client|client)->(request|get|post|put|delete|patch)\s*\(\s*([^,)]+)/,de=h.match(lt);if(de){let R=(de[1]||de[3]).toUpperCase(),M=(de[2]||de[4]).trim();(M.startsWith("'")&&M.endsWith("'")||M.startsWith('"')&&M.endsWith('"'))&&(M=M.substring(1,M.length-1)),s.push({type:"api_route",name:M,direction:"produce",line:g+1,snippet:h,method:R,url:M})}!h.startsWith("#[")&&!h.startsWith("//")&&!h.startsWith("*")&&!r&&(c=[],f=[])}return{nodes:e,events:s}}};var Ce=class{currentRoutePrefix="";parse(n){this.currentRoutePrefix="";let i=[],e=[],s=n.split(`
|
|
36
|
+
`),l=[{indent:-1,name:"root",type:"root"}],m=[],y=/^class\s+([a-zA-Z0-9_]+)/,T=/^async\s+def\s+([a-zA-Z0-9_]+)|^def\s+([a-zA-Z0-9_]+)/,o=/^(?:from\s+([a-zA-Z0-9_\.]+)\s+import|import\s+([a-zA-Z0-9_\.]+))/,p=/^@(.*)/;function a(d){return d.trim().split(/[.(]/)[0]?.trim()||d}function c(d){let w=d.decorators.map(N=>a(N.raw)),C={decorators:d.decorators,decoratorNames:w};return d.async===!0&&(C.async=!0),d.accessor&&(C.accessor=d.accessor),d.contextmanager===!0&&(C.contextmanager=!0),JSON.stringify(C)}function f(d,w){return(d.match(new RegExp(`\\${w}`,"g"))||[]).length}function r(d){let w=[],C=d,N=0,j=0,q=0,P=!1;do{let z=s[C].trim();if(w.push(z),N+=f(z,"(")-f(z,")"),j+=f(z,"[")-f(z,"]"),q+=f(z,"{")-f(z,"}"),P=z.endsWith("\\"),C+1>=s.length||N<=0&&j<=0&&q<=0&&!P)break;C+=1}while(!0);return{text:w.join(" "),endIndex:C}}let u=!1,b="",S=[],D=[];for(let d=0;d<s.length;d++){let w=s[d],C=w.trim();if(!C||C.startsWith("#"))continue;let N=/^([a-zA-Z0-9_]+)\s*=\s*(?:APIRouter|Blueprint)\s*\(\s*(?:prefix\s*=\s*)?['"]([^'"]+)['"]/,j=C.match(N);if(j&&(this.currentRoutePrefix=j[2]),u){if(C.endsWith(b)||C.includes(b)){u=!1;let x=C.replace(b,"").trim();x&&S.push(x);let v=l[l.length-1];v.node&&(v.node.doc=S.join(`
|
|
37
|
+
`).trim()),S=[]}else S.push(C);continue}let q=w.search(/\S/),P=w.trim(),z=P.match(/^(['"]{3})/);if(z){let x=z[1],v=l[l.length-1];if(v.node&&!v.node.doc){if(P.substring(3).includes(x)){let k=P.replace(new RegExp(x,"g"),"").trim();v.node.doc=k}else{u=!0,b=x;let k=P.substring(3).trim();k&&S.push(k)}continue}}for(;l.length>1&&l[l.length-1].indent>=q;)l.pop();let W=l[l.length-1],ce=W.type==="root"&&q===0;if(ce&&/^__all__\s*=/.test(P)){let x=r(d),v=[],k=/['"]([^'"]+)['"]/g,F=null;for(;F=k.exec(x.text);)v.push(F[1]);let B={name:"__all__",kind:"ModuleExports",classification:"ExportList",signature:"__all__ = [...]",line:d+1,endLine:x.endIndex+1,doc:"",capabilities:JSON.stringify({exports:v}),members:[]};D.push(B),i.push(B),d=x.endIndex,m=[];continue}let ge=/^([A-Z][A-Z0-9_]*)(?:\s*:\s*[^=]+)?\s*=/,be=ce?P.match(ge):null;if(be){let x=r(d),v=x.text.length>120?`${x.text.slice(0,117)}...`:x.text,k={name:be[1],kind:"VariableDeclaration",classification:"Constant",signature:v,line:d+1,endLine:x.endIndex+1,doc:"",capabilities:"{}",members:[]};D.push(k),i.push(k),d=x.endIndex,m=[];continue}let xe=P.match(p);if(xe){m.push({raw:xe[1].trim(),line:d+1});continue}let le=P.match(y);if(le){let x=le[1],v={name:x,kind:"ClassDeclaration",classification:"Class",signature:`class ${x}`,line:d+1,endLine:d+1,doc:"",capabilities:c({decorators:m}),members:[]};D.push(v),W.node?(W.node.members||(W.node.members=[]),W.node.members.push(v)):i.push(v),l.push({indent:q,name:x,type:"class",node:v}),m=[];continue}let se=P.match(T);if(se){let x=!!se[1],v=se[1]||se[2],k=W.type==="class",F=m.some(A=>/(?:^|\.)contextmanager$/.test(A.raw.trim())),B;m.some(A=>A.raw.trim()==="property")&&(B="getter");for(let A of m){let $=A.raw.trim().match(/^[a-zA-Z_][a-zA-Z0-9_]*\.(setter|deleter)$/);if($){B=$[1];break}}let H=!1,X={};for(let A of m)if(A.raw.match(/(?:app|router)\.(get|post|put|delete|patch|websocket)/)){H=!0;let Y=["get","post","put","delete","patch","websocket"].find(ee=>A.raw.toLowerCase().includes(`.${ee}`))?.toUpperCase()||"GET",oe=A.raw.match(/['"]([^'"]+)['"]/),K=oe?oe[1]:"/";if(this.currentRoutePrefix){let ee=this.currentRoutePrefix.endsWith("/")?this.currentRoutePrefix.slice(0,-1):this.currentRoutePrefix,fe=K.startsWith("/")?K:`/${K}`;K=ee+fe}X={type:"route",method:Y,path:K}}if(H){let A=X.path||"",$=X.method==="WEBSOCKET",Y={name:A||v,kind:$?"WebSocket Route":"HTTP Route",classification:"Service Boundary",signature:`Function: ${v}`,line:d+1,endLine:d+1,doc:"",capabilities:JSON.stringify({handler:k?`${W.name}.${v}`:v,async:x,...X})};D.push(Y),i.push(Y),e.push({type:$?"websocket_route":"api_route",name:A,direction:"consume",line:d+1,snippet:P})}for(let A of m){let $=A.raw.match(/(?:^|\.)receiver\s*\(\s*([a-zA-Z0-9_\.]+)/);$&&e.push({type:"signal",name:$[1].split(".").pop()||$[1],direction:"consume",line:A.line,snippet:`@${A.raw}`})}let pe=m.some(A=>A.raw==="staticmethod"),ae=m.some(A=>A.raw==="classmethod"),ue=`${x?"async ":""}${k?(pe?"@staticmethod ":ae?"@classmethod ":"")+W.name+".":""}${v}`,me=!!B,Q={name:v,kind:me?"PropertyDeclaration":x&&k?"AsyncMethodDeclaration":x?"AsyncFunctionDeclaration":k?"MethodDeclaration":"FunctionDeclaration",classification:me?"Property":k?pe||ae?"Static Method":"Method":"Function",signature:ue,line:d+1,endLine:d+1,doc:"",capabilities:c({decorators:m,async:x,accessor:B,contextmanager:F}),members:[]};D.push(Q),W.node?(W.node.members||(W.node.members=[]),W.node.members.push(Q)):i.push(Q),l.push({indent:q,name:v,type:"function",node:Q}),m=[];continue}let Ee=/^(?:path|re_path|url)\s*\(\s*['"]([^'"]+)['"]/,re=P.match(Ee);if(re){let x=re[1].replace(/^\^/,""),v={name:x,kind:"HTTP Route",classification:"Service Boundary",signature:P.trim(),line:d+1,endLine:d+1,doc:"",capabilities:JSON.stringify({type:"route",method:"GET",path:x})};D.push(v),i.push(v),e.push({type:"api_route",name:x,direction:"consume",line:d+1,snippet:P});continue}let g=/(?:requests|httpx|client|http)\.(get|post|put|delete|patch|request)\s*\(\s*(?:url\s*:\s*)?([^,)]+)/,h=P.match(g);if(h){let x=h[1].toUpperCase(),v=h[2].trim();(v.startsWith("'")&&v.endsWith("'")||v.startsWith('"')&&v.endsWith('"'))&&(v=v.substring(1,v.length-1)),e.push({type:"api_route",name:v,direction:"produce",line:d+1,snippet:P,method:x,url:v})}let _=P.match(o);if(_){let x=_[1]||_[2],v={name:x,kind:"ImportSpecifier",classification:"Dependency",signature:`import ${x}`,line:d+1,endLine:d+1,doc:"",capabilities:JSON.stringify({type:"import",module:x})};D.push(v),i.push(v),m=[];continue}m=[],W.node&&(W.node.endLine=d+1)}return{nodes:D,events:e}}};function Rt(t,n){let i=0,e=!1;for(let s=n;s<t.length;s++){let l=t[s];for(let m of l)if(m==="{")i++,e=!0;else if(m==="}"&&(i--,e&&i<=0))return s+1;if(!e&&s>n&&/[;}]$/.test(l.trim()))return s+1}return Math.min(t.length,n+41)}var rt=[{extension:[".php"],rules:[]},{extension:[".py"],rules:[]},{extension:[".go"],rules:[{regex:/func\s+([a-zA-Z0-9_]+)\(/g,onMatch:t=>({name:t[1],kind:"FunctionDeclaration",classification:"Function",signature:t[0]})},{regex:/func\s+\([^\)]+\)\s+([a-zA-Z0-9_]+)\(/g,onMatch:t=>({name:t[1],kind:"MethodDeclaration",classification:"Method",signature:t[0]})},{regex:/import\s+['"]([^'"]+)['"]/g,onMatch:t=>({name:t[1],kind:"ImportSpecifier",classification:"Dependency",signature:t[0],meta:{type:"import",path:t[1]}})}]},{extension:[".rs"],rules:[{regex:/fn\s+([a-zA-Z0-9_]+)\s*\(/g,onMatch:t=>({name:t[1],kind:"FunctionDeclaration",classification:"Function",signature:t[0]})},{regex:/struct\s+([a-zA-Z0-9_]+)/g,onMatch:t=>({name:t[1],kind:"StructDeclaration",classification:"Class",signature:t[0]})},{regex:/enum\s+([a-zA-Z0-9_]+)/g,onMatch:t=>({name:t[1],kind:"EnumDeclaration",classification:"Class",signature:t[0]})},{regex:/trait\s+([a-zA-Z0-9_]+)/g,onMatch:t=>({name:t[1],kind:"TraitDeclaration",classification:"Class",signature:t[0]})},{regex:/use\s+([a-zA-Z0-9_:]+(?:\s+as\s+[a-zA-Z0-9_]+)?);/g,onMatch:t=>({name:t[1].trim(),kind:"ImportDeclaration",classification:"Dependency",signature:t[0],meta:{type:"import",path:t[1].trim()}})}]},{extension:[".ts",".tsx",".js",".jsx",".mjs",".cjs"],rules:[{regex:/(?:export\s+)?(?:async\s+)?function\s+([a-zA-Z0-9_]+)\s*\(/g,onMatch:t=>({name:t[1],kind:"FunctionDeclaration",classification:"Function"})},{regex:/(?:export\s+)?class\s+([a-zA-Z0-9_]+)/g,onMatch:t=>({name:t[1],kind:"ClassDeclaration",classification:"Class"})},{regex:/(?:export\s+)?interface\s+([a-zA-Z0-9_]+)/g,onMatch:t=>({name:t[1],kind:"InterfaceDeclaration",classification:"Interface"})},{regex:/(?:export\s+)?const\s+([a-zA-Z0-9_]+)\s*=/g,onMatch:t=>({name:t[1],kind:"VariableDeclaration",classification:"Constant"})},{regex:/import\s+.*\s+from\s+['"]([^'"]+)['"]/g,onMatch:t=>({name:t[1],kind:"ImportDeclaration",classification:"Dependency",meta:{path:t[1]}})}]}];function Ct(t,n){let i=[];if(t===".go"&&n.some(e=>e.kind==="TypeDeclaration")&&i.push("Go type"),t===".rs"&&(n.some(e=>e.kind==="TraitDeclaration")&&i.push("Rust trait"),n.some(e=>e.kind==="StructDeclaration")&&i.push("Rust struct"),n.some(e=>e.kind==="EnumDeclaration")&&i.push("Rust enum")),t===".py"){for(let e of n)if(e.capabilities)try{if(JSON.parse(e.capabilities).decoratorNames?.length){i.push("Python decorators");break}}catch{}n.some(e=>e.kind==="AsyncFunctionDeclaration"||e.kind==="AsyncMethodDeclaration")&&i.push("Async")}return i}var Te=class{phpParser=new Re;pythonParser=new Ce;treeSitterParser=new Me;supports(n){return rt.some(i=>i.extension.includes(n.toLowerCase()))}async parse(n,i){let e=$e.extname(n).toLowerCase(),s=[],l=[];if(e===".php"||e===".py"||e===".go"||e===".rs"){if(e===".py"){let o=this.pythonParser.parse(i);s=o.nodes,l=o.events}else if(e===".php"){let o=n.toLowerCase().endsWith("api.php"),p=this.phpParser.parse(i,o);s=p.nodes,l=p.events}else try{s=await this.treeSitterParser.parse(n,i)}catch{}if(s.length>0){let o=e===".php"?"Micro IR (PHP/TS) ":e===".py"?"Micro IR (Python/TS) ":e===".go"?"Micro IR (Go/TS) ":"Micro IR (Rust/TS) ",p=s.filter(r=>r.classification!=="Dependency"),a=s.filter(r=>r.classification==="Dependency"),c=Ct(e,s),f=ye({classification:o,capabilities:c,exports:p.map(r=>({name:r.name,kind:r.kind,classification:r.classification})),fileName:$e.basename(n)});return{exports:p,imports:a.map(r=>({module:r.name,name:r.name,kind:r.kind,classification:r.classification})),events:l,classification:o,summary:f||`${e.substring(1).toUpperCase()} module`,parseStatus:"success"}}}let m=rt.find(o=>o.extension.includes(e));if(!m)return{exports:[],imports:[],classification:"Unknown",summary:"",parseStatus:"failed",parseError:`Unsupported file extension: ${e}`};let y=i.split(`
|
|
38
|
+
`);for(let o of m.rules){o.regex.lastIndex=0;let p;for(;(p=o.regex.exec(i))!==null;){let a=o.onMatch(p),c=i.substring(0,p.index).split(`
|
|
39
|
+
`).length,f=Rt(y,c-1);s.push({name:a.name||"anonymous",kind:a.kind||"Unknown",classification:a.classification||"Other",signature:a.signature||p[0],line:c,endLine:f,doc:"",capabilities:JSON.stringify(a.meta||{})})}}let T=ye({classification:`Micro IR (${e.substring(1).toUpperCase()})`,capabilities:[],exports:s.map(o=>({name:o.name,kind:o.kind,classification:o.classification})),fileName:$e.basename(n)});return{exports:s,imports:[],classification:`Micro IR (${e.substring(1).toUpperCase()})`,summary:T||"Module",parseStatus:s.length>0?"success":"partial"}}};import*as Le from"@swc/core";function at(t){if(!t||typeof t!="object")return!1;let n=t;return typeof n.parse=="function"&&typeof n.parseSync=="function"}function Tt(){if(at(Le))return Le;let t=Le;if(at(t.default))return t.default;throw new Error("SWC runtime unavailable: couldn't resolve parse/parseSync from @swc/core exports")}var wt=Tt();function we(t,n,i){return wt.parseSync(t,n,i)}var Ne=new Te;async function vn(t){let n=ct.extname(t);if(Ne.supports(n)&&n!==".ts"&&n!==".tsx")try{let l=await ot.promises.readFile(t,"utf-8");return{...await Ne.parse(t,l),content:l}}catch(l){return ne.error({filePath:t,error:l.message},"HeuristicParser failed"),{exports:[],imports:[],classification:"Unknown",summary:"",content:"",parseStatus:"failed",parseError:l.message}}let i;try{i=await ot.promises.readFile(t)}catch(l){return{exports:[],imports:[],classification:"Error",summary:"",content:"",parseStatus:"failed",parseError:`File read error: ${l.message}`}}let e=i.toString("utf8"),s=Je(e);try{let l=t.endsWith(".tsx"),m=t.endsWith(".d.ts")||t.endsWith(".d.tsx"),y,T={syntax:"typescript",tsx:l,decorators:!0,comments:!0};if(m)try{y=we(e,T)}catch{y=we(e,{...T,isModule:!1})}else y=we(e,T);let o=y.span.start,p=qe(i),a=Ue(e),c=C=>He(C,o,i),f=Ge(y.body),r=Xe(y.body);r.length>0&&ne.debug({filePath:t,count:r.length},"Extracted type references"),r.forEach(C=>{f.push({module:"__type_reference__",name:C})});let u=Ke(y.body,o,i,e,s,a,t,c,p),b=Qe(y.body,o,i,s,c,p),S=ve(t,"","Module"),d=a.length>0&&e.slice(0,a[0].start).trim().length===0?a[0].text:u.find(C=>C.doc)?.doc||"",w=Ve(d);if(!w&&u.length>0){let C=he(e);w=ye({classification:S,capabilities:C,exports:u.map(N=>({name:N.name,kind:N.kind,classification:N.classification})),fileName:ct.basename(t)})}return{exports:u,imports:f,events:b,classification:S,summary:w,content:e,parseStatus:"success"}}catch(l){ne.warn({filePath:t,error:l.message},"SWC parsing failed, using heuristic fallback");try{let m=await Ne.parse(t,e);return{...m,content:e,classification:m.classification+" (Degraded)",parseStatus:"partial",parseError:`SWC failed, used heuristic fallback: ${l.message}`}}catch(m){return ne.error({filePath:t,error:m.message},"All parsing strategies failed"),{exports:[],imports:[],classification:"Error",summary:"",content:e,parseStatus:"failed",parseError:`All parsing strategies failed: ${m.message}`}}}}export{vn as parseFile};
|
package/dist/web-manifest.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "1.0.
|
|
2
|
+
"version": "1.0.9",
|
|
3
3
|
"toolsByPrefix": {
|
|
4
4
|
"RECON": {
|
|
5
5
|
"subcommands": [
|
|
@@ -36,15 +36,18 @@
|
|
|
36
36
|
"subcommands": [
|
|
37
37
|
"briefing",
|
|
38
38
|
"chronicle",
|
|
39
|
+
"claim",
|
|
39
40
|
"context",
|
|
40
41
|
"crystallize",
|
|
41
42
|
"crystallize_theme",
|
|
43
|
+
"dispatch_plan",
|
|
42
44
|
"graph",
|
|
43
45
|
"handoff",
|
|
44
46
|
"handoff_read",
|
|
45
47
|
"health",
|
|
46
48
|
"log",
|
|
47
49
|
"plan",
|
|
50
|
+
"release",
|
|
48
51
|
"synthesize",
|
|
49
52
|
"track",
|
|
50
53
|
"working_set_check"
|
package/package.json
CHANGED