pando-ai 0.6.5 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import{c as gn,d as oe,e as B,f as dt}from"./chunk-JWVMGEXN.mjs";import{a as fn}from"./chunk-RRIZV7YJ.mjs";var Z={getAbbrev(n,e="ts"){return n},getKindFromAbbrev(n,e="ts"){return n}};function Re(n){let e=`${n.sourceFile}#${n.sourceStart}-${n.sourceEnd}`,t=n.refKind??"",r=n.refName??"",i=n.targetFile??"",s=n.targetStart!=null&&n.targetEnd!=null?`#${n.targetStart}-${n.targetEnd}`:"",o=n.targetNodeId??"",l=`${e}:REF:${t}:${r}|${i}${s}|${o}`;return dt(l)}function pt(n){let e=[],t=new Set,r=i=>{!i?.name||t.has(i.name)||(t.add(i.name),e.push(i))};for(let i of n.exports??[])r(i);for(let i of n.explicitExports??[])r({name:i});for(let i of n.modulePublic??[])r({name:i});return e}function he(n,e,t){let r=new Date().toISOString();return{payload:{lang:n,fileRel:e,preDeleted:!1,exportRows:[],nodeRows:[],referenceRows:[],symbolMentionRows:[],importRows:[],importBindingRows:[],fileRow:[e,t?.mtime??null,t?.size??null,"failed",r],fts:null,fullyIndexed:!1},fileSize:t?.size,mtime:t?.mtime}}function ye(n){let{lang:e,fileRel:t,content:r,meta:i,preDeleted:s,parsed:o,resolveNodeId:l,exportKind:c,fullyIndexed:u}=n,m=[],p=o.nodes??[],C=p.map(a=>{let f=`${t}#${a.start}-${a.end}:${Z.getAbbrev(a.kind,e)}`;return(e==="c"||e==="cpp"||e==="java"||e==="clojure")&&a.name?`${f}:${a.name}`:f});for(let a=0;a<p.length;a+=1){let f=p[a],h=f.rawKind??f.kind,N=f.rawKindSource??"cli",g=f.containerRawKind??f.containerKind??null,y=f.containerRawKindSource??(g?"cli":null),E=f.scopeChain??null,P=Array.isArray(E)?JSON.stringify(E):typeof E=="string"?E:null,j=C[a],S=typeof f.parentIndex=="number"?C[f.parentIndex]??null:f.parentNodeId??null,x=f.metadata&&Object.keys(f.metadata).length?JSON.stringify(f.metadata):null;m.push([j,f.name,f.kind,h,N,f.semanticKind??null,f.start,f.end,typeof f.isExported=="number"?f.isExported:0,f.containerKind??null,g,y,typeof f.paramCount=="number"?f.paramCount:null,f.qualifiedName??null,P,f.symbolKey??null,x,S,f.role??null,typeof f.indexInParent=="number"?f.indexInParent:null,typeof f.depth=="number"?f.depth:0,typeof f.bodyStart=="number"?f.bodyStart:null,typeof f.bodyEnd=="number"?f.bodyEnd:null])}let I=[],K=new Set;for(let a of pt(o)){if(!a.name||K.has(a.name))continue;K.add(a.name);let f=a.nodeId??(l?l(a.name):null);I.push([t,a.name,f??null,a.isReexport?1:0,a.reexportFrom??null,a.reexportName??null,a.exportKind??c??"cli",a.targetSymbolKey??null])}let R=[],F=[],O=new Map,U=new Map;for(let a of m){let f=a[0]!=null?String(a[0]):null,h=a[13]!=null?String(a[13]):null,N=a[15]!=null?String(a[15]):null;f&&(h&&!O.has(h)&&O.set(h,f),N&&!U.has(N)&&U.set(N,f))}if(oe()&&e==="clojure"&&(o.references??[]).length>0){let a=Array.from(O.keys()).slice(0,10),f=Array.from(U.keys()).slice(0,10),h=(o.references??[]).slice(0,10).map(g=>g.containerQualifiedName),N={file:t,nodeCount:m.length,refCount:(o.references??[]).length,nodeQualifiedNames:a,nodeSymbolKeys:f,refContainers:h,qualifiedNameMapSize:O.size,symbolKeyMapSize:U.size};try{console.error("[CliPayload][CLOJURE-DEBUG] source_node_id lookup context",N)}catch{}}for(let a of o.references??[]){let f=a.targetNodeId??(l&&a.refName?l(a.refName):null),h=a.targetFile??(f?t:null),N=a.sourceNodeId??(a.containerQualifiedName?O.get(a.containerQualifiedName)??null:null)??(a.containerQualifiedName?U.get(a.containerQualifiedName)??null:null),g=Re({sourceFile:t,sourceStart:a.sourceStart,sourceEnd:a.sourceEnd,refKind:a.refKind,refName:a.refName,targetFile:h??null,targetStart:a.targetStart??null,targetEnd:a.targetEnd??null,targetNodeId:f??a.targetNodeId??null}),y=a.metadata&&Object.keys(a.metadata).length?JSON.stringify(a.metadata):null;R.push([g,t,N,a.refName??null,a.refKind,a.sourceStart,a.sourceEnd,f??a.targetNodeId??null,h??null,f||a.targetNodeId||a.targetFile?"resolved":"unresolved",a.receiverName??null,typeof a.arity=="number"?a.arity:null,a.containerQualifiedName??null,a.targetSymbolKey??null,a.confidence??null,y])}for(let a of o.symbolMentions??[]){let f=typeof a?.name=="string"?a.name.trim():"";if(!f)continue;let h=typeof a?.mentionKind=="string"&&a.mentionKind.trim().length>0?a.mentionKind.trim():"reference",N=typeof a?.count=="number"&&Number.isFinite(a.count)&&a.count>0?Math.floor(a.count):1;F.push([f,h,a.targetSymbolKey??null,a.containerQualifiedName??null,N])}if(oe()&&e==="clojure"&&R.length>0){let a=R.reduce((h,N)=>h+(N?.[2]!=null?1:0),0),f=R.reduce((h,N)=>h+(N?.[12]!=null?1:0),0);try{console.error("[CliPayload] clojure source-node summary",{file:t,refs:R.length,sourceNodeCount:a,containerCount:f,sample:R.slice(0,5).map(h=>({sourceNodeId:h[2]==null?null:String(h[2]),refName:h[3],refKind:h[4],containerQualifiedName:h[12]}))})}catch{}}let z=[];for(let a of o.imports??[])z.push([t,a.module??null,a.isTypeOnly??0]);let V=[];for(let a of o.importBindings??[])V.push([t,a.module??null,a.kind,a.localName,a.importedName,a.isTypeOnly??0]);let fe=new Date().toISOString(),H=[t,i?.mtime??null,i?.size??null,"completed",fe,u?1:0];return{payload:{lang:e,fileRel:t,preDeleted:!!s,exportRows:I,nodeRows:m,referenceRows:R,symbolMentionRows:F,importRows:z,importBindingRows:V,fileRow:H,fts:typeof r=="string"?{blobOid:t,content:r}:null,fullyIndexed:!!u},fileSize:i?.size,mtime:i?.mtime}}var be=["ts","js","python","c","cpp","csharp","dart","java","clojure"];function Be(n){return typeof n=="string"&&be.includes(n)}gn();function mt(){let n=process.env.PANDO_ENABLED_LANGUAGES;if(n&&n.trim().length>0){let t=n.split(",").map(r=>r.trim()).filter(r=>r.length>0).filter(Be);if(t.length>0)return ft(t)}return[...be]}function ft(n){let e=new Set;for(let t of n)Be(t)&&e.add(t);return be.filter(t=>e.has(t))}function gt(n){let e=new Set(ft(n)),t={};for(let r of be){if(e.has(r)){t[r]={enabled:!0,source:"embedded"};continue}t[r]={enabled:!1,source:"none",reason:"disabled by language support config"}}return{byLanguage:t}}import Je from"path";import Nn from"fs";import{Project as Pn,Node as Q}from"ts-morph";import{Node as d,SyntaxKind as ae}from"ts-morph";import*as X from"typescript";import{SyntaxKind as xe}from"ts-morph";var $e={LINE_COMMENT:{kind:9001,name:"LineComment",triviaKind:xe.SingleLineCommentTrivia},BLOCK_COMMENT:{kind:9002,name:"BlockComment",triviaKind:xe.MultiLineCommentTrivia},JSDOC_COMMENT:{kind:9003,name:"JSDocComment",triviaKind:xe.MultiLineCommentTrivia}};function ht(n,e){return n===xe.SingleLineCommentTrivia?$e.LINE_COMMENT:n===xe.MultiLineCommentTrivia&&e.startsWith("/**")?$e.JSDOC_COMMENT:$e.BLOCK_COMMENT}import{Node as T}from"ts-morph";var yt={TS_MORPH:"ts-morph",PYTHON_AST:"python-ast",CLANG:"clang",ROSLYN:"roslyn",JAVA_AST:"java-ast",CLI:"cli",UNKNOWN:"unknown"},bt=(n,e)=>T.isFunctionDeclaration(n)||T.isFunctionExpression(n)||T.isArrowFunction(n)?{kind:"Function",semanticKind:"function"}:T.isGetAccessorDeclaration(n)||T.isSetAccessorDeclaration(n)?{kind:"Method",semanticKind:"property"}:T.isMethodDeclaration(n)||T.isMethodSignature(n)||T.isConstructorDeclaration(n)?{kind:"Method",semanticKind:"method"}:T.isClassDeclaration(n)||T.isClassExpression(n)?{kind:"Class",semanticKind:"class"}:T.isInterfaceDeclaration(n)?{kind:"Interface",semanticKind:"interface"}:T.isEnumDeclaration(n)?{kind:"Enum",semanticKind:"enum"}:T.isEnumMember(n)?{kind:"EnumMember",semanticKind:"enum"}:T.isTypeAliasDeclaration(n)?{kind:"TypeAlias",semanticKind:"type"}:T.isModuleDeclaration(n)?{kind:"Namespace",semanticKind:"namespace"}:T.isPropertyDeclaration(n)||T.isPropertySignature(n)?{kind:"Field",semanticKind:"property"}:T.isVariableDeclaration(n)?{kind:"Variable",semanticKind:"variable"}:{kind:e,semanticKind:null};function xt(n){try{let e=n.getKindName?.();if(typeof e=="string"&&e.trim())return e}catch{}return"Unknown"}function Ie(n){let e=xt(n),t=bt(n,e);return{kind:t.kind,semanticKind:t.semanticKind,rawKind:e,rawKindSource:yt.TS_MORPH}}function St(n){let e=xt(n);return{kind:bt(n,e).kind,rawKind:e,rawKindSource:yt.TS_MORPH}}function Ae(n,e){if(!n.kind||!n.kind.trim())throw new Error(`Invalid normalized kind: missing kind ${e?JSON.stringify(e):""}`);if(!n.rawKind||!n.rawKind.trim())throw new Error(`Invalid normalized kind: missing rawKind ${e?JSON.stringify(e):""}`);if(!n.rawKindSource||!String(n.rawKindSource).trim())throw new Error(`Invalid normalized kind: missing rawKindSource ${e?JSON.stringify(e):""}`)}function hn(n){if(n.kind==="local"){let r=n.isDefault?"default":n.name;return r?{name:r,priority:n.isDefault?4:3}:null}if(n.kind==="alias")return n.exported?{name:n.exported,priority:2}:null;let e=n.isNamespace??!1,t=n.alias||n.name||(e?"*":null);return t?{name:t,priority:e?0:1}:null}function yn(n){if(n.length<2)return n;let e=new Map;for(let t of n){let r=hn(t);if(!r)continue;let i=e.get(r.name);(!i||r.priority>i.priority)&&e.set(r.name,{record:t,priority:r.priority})}return Array.from(e.values()).map(t=>t.record)}function Se(n){try{if(n&&typeof n.getName=="function"){let e=n.getName();if(typeof e=="string"&&e.length>0)return e}}catch{}return null}function bn(n){try{let e=n?.getBody?.();if(!e||typeof e.getStart!="function"||typeof e.getEnd!="function")return null;let t=typeof e.getKindName=="function"?String(e.getKindName()):"",r=t==="Block"||t==="ModuleBlock",i=e.getStart(),s=e.getEnd(),o=r?i+1:i,l=r?s-1:s;return!Number.isFinite(o)||!Number.isFinite(l)||l<o?null:{start:o,end:l}}catch{return null}}function xn(n){let e=n.getParent?.();if(!e)return null;try{if(d.isIfStatement(e)){if(e.getExpression()===n)return"condition";if(e.getThenStatement()===n)return"then";if(e.getElseStatement()===n)return"else"}if(d.isReturnStatement(e)&&e.getExpression?.()===n)return"value";if(d.isVariableDeclaration(e)){if(e.getNameNode?.()===n)return"name";if(e.getInitializer?.()===n)return"initializer"}if(d.isCallExpression(e)||d.isNewExpression(e)){if(e.getExpression?.()===n)return"callee";if((e.getArguments?.()??[]).indexOf(n)>=0)return"argument"}if(d.isPropertyAccessExpression(e)){if(e.getExpression()===n)return"object";if(e.getNameNode()===n)return"property"}}catch{return null}return null}function ze(n){let e;try{let r=n.getStart?.(!1);typeof r=="number"&&Number.isFinite(r)&&(e=r)}catch{}if(e===void 0)try{let r=n.getStart?.();typeof r=="number"&&Number.isFinite(r)&&(e=r)}catch{}if(e===void 0)try{let r=n.getFullStart?.();typeof r=="number"&&Number.isFinite(r)&&(e=r)}catch{}e===void 0&&(e=0);let t;try{let r=n.getEnd?.();typeof r=="number"&&Number.isFinite(r)&&(t=r)}catch{}if(t===void 0)try{let r=n.getStart?.();typeof r=="number"&&Number.isFinite(r)&&(t=r)}catch{}return t===void 0&&(t=e),t<e&&(t=e),{start:e,end:t}}function Sn(n){try{if(d.isFunctionDeclaration(n)||d.isMethodDeclaration(n)||d.isConstructorDeclaration(n)||d.isFunctionExpression(n)||d.isArrowFunction(n)){let e=n.getParameters?.();if(Array.isArray(e))return e.length}}catch{}return null}function Cn(n){try{return d.isIdentifier(n)?n.getSymbol():d.isPropertyAccessExpression(n)?n.getNameNode().getSymbol()??n.getSymbol():n.getSymbol?.()}catch{return}}function ke(n,e){try{return typeof n?.hasModifier=="function"&&n.hasModifier(e)}catch{return!1}}function Ct(n){try{return n.getModuleSpecifierValue?.()??null}catch{try{return n.getModuleSpecifier?.()?.getLiteralText?.()??null}catch{return null}}}function vn(n,e,t){if(!d.isImportDeclaration(n))return;let i={moduleSpecifier:Ct(n),isTypeOnly:n.isTypeOnly(),namedImports:[]};try{let s=n.getDefaultImport();if(s){let o=s.getText();i.defaultImport=o,t(o,s)}}catch{}try{let s=n.getNamespaceImport();if(s){let o=s.getText();i.namespaceImport=o,t(o,s)}}catch{}try{n.getNamedImports().forEach(s=>{try{let o=s.getName(),l=s.getAliasNode(),c=l?l.getText():void 0;o&&(i.namedImports.push({name:o,alias:c||void 0}),t(c||o,s.getNameNode()))}catch{}})}catch{}e.push(i)}function En(n,e){if(d.isExportDeclaration(n)){let t=Ct(n);if(t){if(n.getNamedExports().length>0)try{n.getNamedExports().forEach(r=>{try{let i=r.getName(),s=r.getAliasNode(),o=s?s.getText():void 0;e.push({kind:"reexport",moduleSpecifier:t,name:i||void 0,alias:o||void 0,isNamespace:!1})}catch{}})}catch{}else if(n.isNamespaceExport())try{let i=n.getNamespaceExport()?.getName();e.push({kind:"reexport",moduleSpecifier:t,name:i||"*",alias:i||void 0,isNamespace:!0})}catch{e.push({kind:"reexport",moduleSpecifier:t,name:"*",isNamespace:!0})}else e.push({kind:"reexport",moduleSpecifier:t,name:"*",isNamespace:!0});return}try{n.getNamedExports().forEach(r=>{try{let i=r.getName();if(!i)return;let s=r.getAliasNode(),o=s?s.getText():i;e.push({kind:"alias",local:i,exported:o})}catch{}})}catch{}return}if(d.isExportAssignment(n))try{let t=n.getExpression();if(t&&d.isIdentifier(t)){let r=t.getText();e.push({kind:"alias",local:r,exported:"default"})}}catch{}}function wn(n,e,t,r){if(!ke(n,ae.ExportKeyword))return;let i=ke(n,ae.DefaultKeyword);if(d.isVariableStatement(n)){try{let s=n.getDeclarationList().getDeclarations();for(let o of s){let l=Se(o)??o.getName?.()??null;if(l){t(l,o);let c=r(o);c&&e.push({kind:"local",name:l,isDefault:i,nodeId:c})}}}catch{}return}if(d.isFunctionDeclaration(n)||d.isClassDeclaration(n)||d.isInterfaceDeclaration(n)||d.isEnumDeclaration(n)||d.isTypeAliasDeclaration(n)||d.isModuleDeclaration(n)){let s=Se(n)||(i?"default":null),o=r(n);o&&e.push({kind:"local",name:s??"default",isDefault:i,nodeId:o})}}function vt(n,e,t,r){let i=[],s=[],o=[],l=new Set,c=new Map,u=[],m=[],C=(r?.emitMode??"light")==="full",I=new Map,K=new Map,R=new Map,F=[{node:n,id:null,kind:"module",rawKind:"SourceFile",rawKindSource:"ts-morph",name:null,isExported:!1}],O=a=>{if(!a)return null;try{return e(a)}catch{return null}},U=a=>{let f=a.getParent?.();for(;f;){let h=I.get(f);if(h)return h;f=f.getParent?.()}return null},z=(a,f)=>{if(a&&(l.has(a)||l.add(a),f&&!c.has(a))){let h=O(f);h&&c.set(a,h)}},V=a=>d.isFunctionDeclaration(a)||d.isFunctionExpression(a)||d.isArrowFunction(a)||d.isClassDeclaration(a)||d.isClassExpression(a)||d.isInterfaceDeclaration(a)||d.isEnumDeclaration(a)||d.isEnumMember(a)||d.isTypeAliasDeclaration(a)||d.isModuleDeclaration(a)||d.isMethodDeclaration(a)||d.isMethodSignature(a)||d.isPropertyDeclaration(a)||d.isPropertySignature(a)||d.isGetAccessorDeclaration(a)||d.isSetAccessorDeclaration(a)||d.isConstructorDeclaration(a)||d.isVariableDeclaration(a),fe=a=>d.isSourceFile(a)||d.isFunctionDeclaration(a)||d.isFunctionExpression(a)||d.isArrowFunction(a)||d.isMethodDeclaration(a)||d.isConstructorDeclaration(a)||d.isClassDeclaration(a)||d.isClassExpression(a)||d.isModuleDeclaration(a),H=a=>{let f=Se(a);if(f)return f;if(d.isConstructorDeclaration(a))return"constructor";if(d.isArrowFunction(a)||d.isFunctionExpression(a)){let h=a.getParent();try{if(d.isVariableDeclaration(h))return h.getName();if(d.isPropertyAssignment(h)||d.isPropertyDeclaration(h)||d.isPropertySignature(h))return h.getName?.()??null;if(d.isShorthandPropertyAssignment(h))return h.getNameNode()?.getText()??null;if(d.isExportAssignment(h))return"default"}catch{}}if(d.isEnumMember(a))try{return a.getName()}catch{return null}if(d.isVariableDeclaration(a))try{return a.getName()}catch{return null}return null},Y=a=>{let f=F[F.length-1],h=f?.id??null,N=f?.kind??"module",g=f?.name??null;if(d.isImportDeclaration(a))vn(a,u,z);else if(d.isImportEqualsDeclaration(a))try{let S=a.getModuleReference();if(S&&d.isExternalModuleReference(S)){let x=S.getExpression(),v;if(x&&d.isStringLiteral(x))v=x.getLiteralText();else if(x){let w=x.getText();v=typeof w=="string"?w.replace(/^['"]|['"]$/g,""):void 0}if(v){let M=a.getNameNode()?.getText(),_={moduleSpecifier:v,isTypeOnly:!1,namedImports:[]};M&&(_.defaultImport=M,z(M,a)),u.push(_)}}}catch{}(d.isExportDeclaration(a)||d.isExportAssignment(a))&&En(a,m),wn(a,m,z,O);let y=V(a),E=C||y,P=y?H(a):null;if(E){let S=e(a);y&&s.push({nodeId:S,node:a});let x=U(a),v=x==null?null:K.get(x)??0;x!=null&&v!=null&&K.set(x,v+1),I.set(a,S);let w=x?(R.get(x)??-1)+1:0;R.set(S,w);let M=ke(a,ae.ExportKeyword)||f?.isExported||!1,_=y?a.getNameNode?.()?.getText?.()??null:null,D=P??(y?Se(a)??_:Se(a));P?z(P,a):D&&z(D,a);let A=ze(a),L=Sn(a),k=Ie(a);Ae(k,{source:"ts-node-collector",file:n.getFilePath(),name:D??null});let J=bn(a);i.push({nodeId:S,nodeName:D??null,containerId:h,containerKind:N,containerRawKind:f?.rawKind??null,containerRawKindSource:f?.rawKindSource??null,containerName:g,isExported:M,kind:k.kind,rawKind:k.rawKind,rawKindSource:k.rawKindSource,semanticKind:k.semanticKind??null,start:A.start,end:A.end,paramCount:L,metadata:null,parentNodeId:x,role:xn(a),indexInParent:v,depth:w,bodyStart:J?.start??null,bodyEnd:J?.end??null})}if(d.isCallExpression(a)||d.isNewExpression(a)){let S=a.getExpression(),x=null,v,w;try{if(w=Cn(S),d.isIdentifier(S))x=S.getText();else if(d.isPropertyAccessExpression(S)){x=S.getName();let D=S.getExpression();d.isIdentifier(D)&&(v=D.getText())}}catch{}let M="";try{M=S.getText()}catch{}let _=ze(a);if(o.push({name:x,kind:d.isNewExpression(a)?"new":"call",containerId:h,containerKind:N,containerName:g,expression:M,objectName:v,symbol:w,start:_.start,end:_.end}),d.isCallExpression(a))try{if(d.isIdentifier(S)&&S.getText()==="require"){let A=a.getArguments()[0],L;if(A&&(d.isStringLiteral(A)||d.isNoSubstitutionTemplateLiteral(A)))try{L=A.getLiteralText()}catch{let k=A.getText();L=typeof k=="string"?k.replace(/^['"]|['"]$/g,""):void 0}if(L){let k={moduleSpecifier:L,isTypeOnly:!1,namedImports:[]},J=a.getParent();if(J&&d.isVariableDeclaration(J)){let Pe=J.getNameNode();try{if(d.isIdentifier(Pe)){let ge=Pe.getText();ge&&(k.defaultImport=ge,z(ge,J))}}catch{}}u.push(k)}}else if(S?.getKind?.()===ae.ImportKeyword){let A=a.getArguments()[0],L;if(A&&(d.isStringLiteral(A)||d.isNoSubstitutionTemplateLiteral(A)))try{L=A.getLiteralText()}catch{let k=A.getText();L=typeof k=="string"?k.replace(/^['"]|['"]$/g,""):void 0}L&&u.push({moduleSpecifier:L,isTypeOnly:!1,namedImports:[]})}}catch{}}if(d.isCallExpression(a)){let S=a.getExpression();try{if(d.isIdentifier(S)&&S.getText()==="require"){let x=a.getParent();if(!(x&&d.isExternalModuleReference(x))){let w=a.getArguments()[0],M;if(w&&(d.isStringLiteral(w)||d.isNoSubstitutionTemplateLiteral(w)))try{M=w.getLiteralText()}catch{M=w.getText().replace(/^['"]|['"]$/g,"")}if(M){let _={moduleSpecifier:M,isTypeOnly:!1,namedImports:[]};if(x&&d.isVariableDeclaration(x)){let D=x.getNameNode();try{if(d.isIdentifier(D)){let A=D.getText();A&&(_.defaultImport=A,z(A,x))}}catch{}}u.push(_)}}}else if(S?.getKind?.()===ae.ImportKeyword){let v=a.getArguments()[0],w;if(v&&(d.isStringLiteral(v)||d.isNoSubstitutionTemplateLiteral(v)))try{w=v.getLiteralText()}catch{w=v.getText().replace(/^['"]|['"]$/g,"")}w&&u.push({moduleSpecifier:w,isTypeOnly:!1,namedImports:[]})}}catch{}}let j=!1;if(fe(a)){let S=O(a)??e(a),x=St(a);F.push({node:a,id:S,kind:x.kind,rawKind:x.rawKind,rawKindSource:x.rawKindSource,name:P??g,isExported:ke(a,ae.ExportKeyword)||f?.isExported||!1}),j=!0}a.forEachChild(Y),j&&F.pop()};if(C){let a=e(n);I.set(n,a),R.set(a,0);let f=ze(n);i.push({nodeId:a,nodeName:n.getBaseName?.()??null,containerId:null,containerKind:"module",containerRawKind:"SourceFile",containerRawKindSource:"ts-morph",containerName:null,isExported:!1,kind:"SourceFile",rawKind:"SourceFile",rawKindSource:"ts-morph",semanticKind:"file",start:f.start,end:f.end,paramCount:null,metadata:null,parentNodeId:null,role:null,indexInParent:null,depth:0,bodyStart:f.start,bodyEnd:f.end})}if(n.forEachChild(Y),r?.includeComments===!0||C||process.env.AST_INDEX_COMMENTS==="1")try{let a=n.getFullText(),f=X.createScanner(X.ScriptTarget.Latest,!1,X.LanguageVariant.Standard,a),h=new Set;for(let N=f.scan();N!==X.SyntaxKind.EndOfFileToken;N=f.scan()){if(N!==X.SyntaxKind.SingleLineCommentTrivia&&N!==X.SyntaxKind.MultiLineCommentTrivia)continue;let g=f.getTokenPos(),y=f.getTextPos(),E=`${g}-${y}`;if(h.has(E)||(h.add(E),t.has(E)))continue;t.add(E);let P=a.substring(g,y),j=ht(N,P),x=e({getKindName:()=>j.name,getKind:()=>j.kind,getPos:()=>g,getEnd:()=>y,getStart:()=>g,getFullStart:()=>g,getText:()=>P,getSourceFile:()=>n,getParent:()=>n,__isComment:!0,__commentPosition:"standalone",__attachedTo:null},"COM"),v=I.get(n)??null,w=C&&v!=null?K.get(v)??0:null;C&&v!=null&&w!=null&&K.set(v,w+1),i.push({nodeId:x,nodeName:P.substring(0,100),containerId:null,containerKind:"module",containerRawKind:"SourceFile",containerRawKindSource:"ts-morph",containerName:null,isExported:!1,kind:j.name,rawKind:j.name,rawKindSource:"ts-morph",semanticKind:null,start:g,end:y,paramCount:null,metadata:null,parentNodeId:v,role:"comment",indexInParent:w,depth:C?1:0,bodyStart:null,bodyEnd:null})}}catch{}return{nodes:i,symbolCandidateNodes:s,references:o,declaredNames:l,localDeclarations:c,imports:u,exports:yn(m)}}function Et(n){let e;try{let r=n.getStart?.(!1);typeof r=="number"&&Number.isFinite(r)&&(e=r)}catch{}if(e===void 0)try{let r=n.getStart?.();typeof r=="number"&&Number.isFinite(r)&&(e=r)}catch{}if(e===void 0)try{let r=n.getFullStart?.();typeof r=="number"&&Number.isFinite(r)&&(e=r)}catch{}e===void 0&&(e=0);let t;try{let r=n.getEnd?.();typeof r=="number"&&Number.isFinite(r)&&(t=r)}catch{}if(t===void 0)try{let r=n.getStart?.();typeof r=="number"&&Number.isFinite(r)&&(t=r)}catch{}return t===void 0&&(t=e),t<e&&(t=e),{start:e,end:t}}var Rn=100;function In(n,e,t,r){let{start:i,end:s}=Et(e),o=Ie(e);Ae(o,{source:"ts-node-id",file:n,kind:o.kind});let l=r||Z.getAbbrev(o.kind,t);return`${n}#${i}-${s}:${l}`}function An(n,e){return Je.relative(n,e).replace(/\\/g,"/")}function wt(n,e){if(!n)return null;let t=n;try{let m=n.getAliasedSymbol();m&&(t=m)}catch{}let r=[];try{r=t.getDeclarations()??[]}catch{r=[]}if(!r.length)return null;let s=r.slice().sort((m,p)=>{let C=m.getSourceFile().getFilePath(),I=p.getSourceFile().getFilePath();if(C!==I)return C.localeCompare(I);let K=m.getStart(!1),R=p.getStart(!1);return K!==R?K-R:m.getEnd()-p.getEnd()})[0],o=An(e,s.getSourceFile().getFilePath()),l=s.getStart(!1),c=s.getEnd(),u="";try{u=t.getEscapedName()}catch{try{u=t.getName()}catch{u=""}}return`${o}#${l}-${c}:${u}`}function kn(n){try{return Q.isVariableDeclaration(n)||Q.isEnumMember(n)?n.getNameNode().getSymbol()??n.getSymbol():n.getSymbol()}catch{return}}function Mn(n,e){let t=n.getDescendantAtPos(e);if(!t)return;let r=t;if(!Q.isCallExpression(r)&&!Q.isNewExpression(r)&&(r=t.getFirstAncestor(s=>Q.isCallExpression(s)||Q.isNewExpression(s))??void 0),!r||!Q.isCallExpression(r)&&!Q.isNewExpression(r))return;let i=r.getExpression();try{return Q.isIdentifier(i)?i.getSymbol():Q.isPropertyAccessExpression(i)?i.getNameNode().getSymbol()??i.getSymbol():i.getSymbol()}catch{return}}async function Dn(n){let{sf:e,fileRel:t,content:r,preDeleted:i,meta:s,projectRoot:o,lang:l}=n,c=n.emitMode??"light",m=vt(e,(g,y)=>In(t,g,l,y),new Set,{includeComments:c==="full",emitMode:c}),p=new Map;for(let{nodeId:g,node:y}of m.symbolCandidateNodes){let E=wt(kn(y),o);E&&(p.has(g)||p.set(g,E))}let C=[],I=new Map,K=m.exports.filter(g=>g.kind!=="reexport"),R=m.exports.filter(g=>g.kind==="reexport");for(let g of K)if(g.kind==="local"){let y=g.isDefault?"default":g.name;if(!y||I.has(y))continue;let E=g.nodeId;C.push([t,y,E,0,null,null,g.isDefault?"default":"named"]),I.set(y,E)}else if(g.kind==="alias"){let y=g.exported;if(!y||I.has(y))continue;C.push([t,y,null,0,null,g.local,"alias"]),I.set(y,"alias")}for(let g of R){let y=g.moduleSpecifier;if(!y)continue;let E=y;if(g.isNamespace){let P=g.alias||"*";if(I.has(P))continue;C.push([t,P,null,1,E,g.name||P,"reexport_star"]),I.set(P,"reexport")}else{let P=g.alias||g.name;if(!P||I.has(P))continue;C.push([t,P,null,1,E,g.name||P,"reexport_named"]),I.set(P,"reexport")}}let F=[],O=typeof r=="string"?r:null;if(O==null)try{let g=e.getFullText();O=typeof g=="string"?g:null}catch{O=null}for(let g of m.nodes){let{nodeId:y,nodeName:E,containerKind:P,containerRawKind:j,containerRawKindSource:S,isExported:x,kind:v,rawKind:w,rawKindSource:M,semanticKind:_,start:D,end:A,paramCount:L,metadata:k,parentNodeId:J,role:Pe,indexInParent:ge,depth:cn,bodyStart:un,bodyEnd:dn}=g,pn=k&&Object.keys(k).length?JSON.stringify(k):null,mn=p.get(y)??null;F.push([y,E??null,v,w??v,M??null,_??null,D,A,x?1:0,P??"module",j??P??"module",S??null,L,null,null,mn,pn,J??null,Pe??null,ge??null,cn??0,un??null,dn??null])}let U=[];for(let g of m.references){let{name:y,kind:E,containerId:P,containerName:j,expression:S,objectName:x,start:v,end:w}=g,M=null,_=null,D=wt(g.symbol??Mn(e,v),o),A=y?m.localDeclarations.get(y):void 0;A&&(M=A,_=t,D||(D=p.get(A)??null));let L=Re({sourceFile:t,sourceStart:v,sourceEnd:w,refKind:E,refName:y,targetFile:_,targetNodeId:M}),k={};S&&(k.expression=S),x&&(k.objectName=x),j&&(k.containerName=j);let J=Object.keys(k).length?JSON.stringify(k):null;U.push([L,t,P,y,E,v,w,M,_,M?"resolved":"unresolved",x??null,null,null,D,J])}let z=[],V=[];for(let g of m.imports){let y=g.moduleSpecifier??null;z.push([t,y,g.isTypeOnly?1:0]),g.defaultImport&&V.push([t,y,"default",g.defaultImport,"default",g.isTypeOnly?1:0]),g.namespaceImport&&V.push([t,y,"namespace",g.namespaceImport,"*",g.isTypeOnly?1:0]);for(let E of g.namedImports){let P=E.alias||E.name;V.push([t,y,"named",P,E.name,g.isTypeOnly?1:0])}}let fe=Je.join(o,t),H=s?.size,Y=s?.mtime;if(H===void 0||Y===void 0)try{let g=Nn.statSync(fe);H=g.size,Y=Math.floor(g.mtimeMs)}catch{}let a=new Date().toISOString(),f=c==="full",h=[t,Y??null,H??null,"completed",a,f?1:0],N=null;if(typeof O=="string")N={blobOid:t,content:O};else try{let g=e.getFullText?.();typeof g=="string"&&(N={blobOid:t,content:g})}catch(g){console.log(`[TypescriptIndexer] Failed to compute FTS payload for ${t}:`,g?.message??g)}return{payload:{lang:l,fileRel:t,preDeleted:i,exportRows:C,nodeRows:F,referenceRows:U,importRows:z,importBindingRows:V,fileRow:h,fts:N,fullyIndexed:f},fileSize:H,mtime:Y}}var qe=class{constructor(e,t){this.project=null;this.filesProcessed=0;this.projectRoot=e,this.lang=t}getProject(){return this.project||(this.project=new Pn({useInMemoryFileSystem:!0,skipAddingFilesFromTsConfig:!0})),this.project}disposeProject(){if(this.project){try{let e=this.project.getLanguageService().compilerObject;typeof e?.dispose=="function"&&e.dispose()}catch{}this.project=null}}async process(e){let t=this.getProject(),r;try{let i=t.createSourceFile(Je.join(this.projectRoot,e.relPath),e.content,{overwrite:!0});r=await Dn({sf:i,fileRel:e.relPath,content:e.content,preDeleted:!!e.preDeleted,meta:e.meta,projectRoot:this.projectRoot,lang:e.lang,emitMode:e.emitMode??"light"})}catch(i){this.disposeProject(),this.filesProcessed=0;let s=i?.message||String(i);throw new Error(`TypeScript parser failed for ${e.relPath}: ${s}`)}return this.filesProcessed++,this.filesProcessed>=Rn&&(this.disposeProject(),this.filesProcessed=0),{payload:r.payload,fileSize:r.fileSize,mtime:r.mtime}}};function Tn(n){return n==="ts"?[".ts",".tsx",".mts",".cts"]:n==="js"?[".js",".jsx",".mjs",".cjs"]:[]}function We(n){return{id:n,extensions:Tn(n),indexingMode:"worker",createIndexer:e=>new qe(e,n)}}import De from"fs";import ee from"path";import{spawn as Ln}from"child_process";import Kn from"fs";var le=class{constructor(e=5e3){this.maxEntries=e;this.cache=new Map}get(e,t){let r=this.cache.get(e);if(!r)return null;let i=t?.mtime??null,s=t?.size??null;return i!=null&&s!=null&&r.mtime===i&&r.size===s?r.result:null}set(e,t,r){let i=t?.mtime??null,s=t?.size??null;this.cache.set(e,{mtime:i,size:s,result:r}),this.cache.size>this.maxEntries&&this.cache.clear()}};var Ue=class{constructor(e,t,r,i){this.projectRoot=e;this.lang=t;this.parse=r;this.exportKind=i;this.cache=new le}async process(e){let t=e.meta?.mtime,r=e.meta?.size;if(t==null||r==null)try{let o=Kn.statSync(e.absPath);t=Math.floor(o.mtimeMs),r=o.size}catch{}let i=e.emitMode==="full"?null:this.cache.get(e.absPath,{mtime:t,size:r});if(i)return ye({lang:this.lang,fileRel:e.relPath,content:e.content,meta:{mtime:t,size:r},preDeleted:e.preDeleted,parsed:i,resolveNodeId:Nt(e.relPath,i,this.lang),exportKind:this.exportKind??"cli",fullyIndexed:e.emitMode==="full"});let s=null;try{s=await this.parse({absPath:e.absPath,relPath:e.relPath,content:e.content,meta:{mtime:t,size:r},projectRoot:this.projectRoot,lang:this.lang,emitMode:e.emitMode??"light"})}catch(o){try{console.log(`[CliContract:${this.lang}] parse threw for ${e.relPath}: ${o?.message||String(o)}`)}catch{}return he(this.lang,e.relPath,{mtime:t,size:r})}return!s||s.error?he(this.lang,e.relPath,{mtime:t,size:r}):(e.emitMode!=="full"&&this.cache.set(e.absPath,{mtime:t,size:r},s),ye({lang:this.lang,fileRel:e.relPath,content:e.content,meta:{mtime:t,size:r},preDeleted:e.preDeleted,parsed:s,resolveNodeId:Nt(e.relPath,s,this.lang),exportKind:this.exportKind??"cli",fullyIndexed:e.emitMode==="full"}))}};function Nt(n,e,t){let r=new Map;for(let i of e.nodes??[]){if(!i.name||r.has(i.name))continue;let s=`${n}#${i.start}-${i.end}:${Z.getAbbrev(i.kind,t)}`;r.set(i.name,s)}return i=>r.get(i)??null}function G(n){return{id:n.id,extensions:n.extensions,indexingMode:"worker",createIndexer:e=>new Ue(e,n.id,n.parse,n.exportKind),resolveSpan:n.resolve?async(e,t,r)=>n.resolve({projectRoot:e,absPath:t,nodePath:r,lang:n.id}):void 0}}import _n from"fs";import Me from"path";var Xe=null;function On(n){for(let e of n)if(_n.existsSync(e))return e;return null}function q(n){let e=Xe?.toolsRoot??process.env.PANDO_TOOLS_ROOT,t=Xe?.runtimeRoot??process.env.PANDO_RUNTIME_ROOT,r=Xe?.resourcesRoot??process.env.PANDO_RESOURCES_ROOT,i=[e?Me.join(e,n):null,t?Me.join(t,"tools",n):null,r?Me.join(r,"tools",n):null,Me.resolve(process.cwd(),"tools",n)].filter(s=>!!s);return On(i)}function W(...n){try{let e=n.map(t=>{if(typeof t=="string")return t;try{return JSON.stringify(t)}catch{return String(t)}}).join(" ");process.stderr.write(e+`
1
+ import{c as gn,d as oe,e as B,f as dt}from"./chunk-WHHZYOEJ.mjs";import{a as fn}from"./chunk-RRIZV7YJ.mjs";var Z={getAbbrev(n,e="ts"){return n},getKindFromAbbrev(n,e="ts"){return n}};function Re(n){let e=`${n.sourceFile}#${n.sourceStart}-${n.sourceEnd}`,t=n.refKind??"",r=n.refName??"",i=n.targetFile??"",s=n.targetStart!=null&&n.targetEnd!=null?`#${n.targetStart}-${n.targetEnd}`:"",o=n.targetNodeId??"",l=`${e}:REF:${t}:${r}|${i}${s}|${o}`;return dt(l)}function pt(n){let e=[],t=new Set,r=i=>{!i?.name||t.has(i.name)||(t.add(i.name),e.push(i))};for(let i of n.exports??[])r(i);for(let i of n.explicitExports??[])r({name:i});for(let i of n.modulePublic??[])r({name:i});return e}function he(n,e,t){let r=new Date().toISOString();return{payload:{lang:n,fileRel:e,preDeleted:!1,exportRows:[],nodeRows:[],referenceRows:[],symbolMentionRows:[],importRows:[],importBindingRows:[],fileRow:[e,t?.mtime??null,t?.size??null,"failed",r],fts:null,fullyIndexed:!1},fileSize:t?.size,mtime:t?.mtime}}function ye(n){let{lang:e,fileRel:t,content:r,meta:i,preDeleted:s,parsed:o,resolveNodeId:l,exportKind:c,fullyIndexed:u}=n,m=[],p=o.nodes??[],C=p.map(a=>{let f=`${t}#${a.start}-${a.end}:${Z.getAbbrev(a.kind,e)}`;return(e==="c"||e==="cpp"||e==="java"||e==="clojure")&&a.name?`${f}:${a.name}`:f});for(let a=0;a<p.length;a+=1){let f=p[a],h=f.rawKind??f.kind,N=f.rawKindSource??"cli",g=f.containerRawKind??f.containerKind??null,y=f.containerRawKindSource??(g?"cli":null),E=f.scopeChain??null,P=Array.isArray(E)?JSON.stringify(E):typeof E=="string"?E:null,j=C[a],S=typeof f.parentIndex=="number"?C[f.parentIndex]??null:f.parentNodeId??null,x=f.metadata&&Object.keys(f.metadata).length?JSON.stringify(f.metadata):null;m.push([j,f.name,f.kind,h,N,f.semanticKind??null,f.start,f.end,typeof f.isExported=="number"?f.isExported:0,f.containerKind??null,g,y,typeof f.paramCount=="number"?f.paramCount:null,f.qualifiedName??null,P,f.symbolKey??null,x,S,f.role??null,typeof f.indexInParent=="number"?f.indexInParent:null,typeof f.depth=="number"?f.depth:0,typeof f.bodyStart=="number"?f.bodyStart:null,typeof f.bodyEnd=="number"?f.bodyEnd:null])}let I=[],K=new Set;for(let a of pt(o)){if(!a.name||K.has(a.name))continue;K.add(a.name);let f=a.nodeId??(l?l(a.name):null);I.push([t,a.name,f??null,a.isReexport?1:0,a.reexportFrom??null,a.reexportName??null,a.exportKind??c??"cli",a.targetSymbolKey??null])}let R=[],F=[],O=new Map,U=new Map;for(let a of m){let f=a[0]!=null?String(a[0]):null,h=a[13]!=null?String(a[13]):null,N=a[15]!=null?String(a[15]):null;f&&(h&&!O.has(h)&&O.set(h,f),N&&!U.has(N)&&U.set(N,f))}if(oe()&&e==="clojure"&&(o.references??[]).length>0){let a=Array.from(O.keys()).slice(0,10),f=Array.from(U.keys()).slice(0,10),h=(o.references??[]).slice(0,10).map(g=>g.containerQualifiedName),N={file:t,nodeCount:m.length,refCount:(o.references??[]).length,nodeQualifiedNames:a,nodeSymbolKeys:f,refContainers:h,qualifiedNameMapSize:O.size,symbolKeyMapSize:U.size};try{console.error("[CliPayload][CLOJURE-DEBUG] source_node_id lookup context",N)}catch{}}for(let a of o.references??[]){let f=a.targetNodeId??(l&&a.refName?l(a.refName):null),h=a.targetFile??(f?t:null),N=a.sourceNodeId??(a.containerQualifiedName?O.get(a.containerQualifiedName)??null:null)??(a.containerQualifiedName?U.get(a.containerQualifiedName)??null:null),g=Re({sourceFile:t,sourceStart:a.sourceStart,sourceEnd:a.sourceEnd,refKind:a.refKind,refName:a.refName,targetFile:h??null,targetStart:a.targetStart??null,targetEnd:a.targetEnd??null,targetNodeId:f??a.targetNodeId??null}),y=a.metadata&&Object.keys(a.metadata).length?JSON.stringify(a.metadata):null;R.push([g,t,N,a.refName??null,a.refKind,a.sourceStart,a.sourceEnd,f??a.targetNodeId??null,h??null,f||a.targetNodeId||a.targetFile?"resolved":"unresolved",a.receiverName??null,typeof a.arity=="number"?a.arity:null,a.containerQualifiedName??null,a.targetSymbolKey??null,a.confidence??null,y])}for(let a of o.symbolMentions??[]){let f=typeof a?.name=="string"?a.name.trim():"";if(!f)continue;let h=typeof a?.mentionKind=="string"&&a.mentionKind.trim().length>0?a.mentionKind.trim():"reference",N=typeof a?.count=="number"&&Number.isFinite(a.count)&&a.count>0?Math.floor(a.count):1;F.push([f,h,a.targetSymbolKey??null,a.containerQualifiedName??null,N])}if(oe()&&e==="clojure"&&R.length>0){let a=R.reduce((h,N)=>h+(N?.[2]!=null?1:0),0),f=R.reduce((h,N)=>h+(N?.[12]!=null?1:0),0);try{console.error("[CliPayload] clojure source-node summary",{file:t,refs:R.length,sourceNodeCount:a,containerCount:f,sample:R.slice(0,5).map(h=>({sourceNodeId:h[2]==null?null:String(h[2]),refName:h[3],refKind:h[4],containerQualifiedName:h[12]}))})}catch{}}let z=[];for(let a of o.imports??[])z.push([t,a.module??null,a.isTypeOnly??0]);let V=[];for(let a of o.importBindings??[])V.push([t,a.module??null,a.kind,a.localName,a.importedName,a.isTypeOnly??0]);let fe=new Date().toISOString(),H=[t,i?.mtime??null,i?.size??null,"completed",fe,u?1:0];return{payload:{lang:e,fileRel:t,preDeleted:!!s,exportRows:I,nodeRows:m,referenceRows:R,symbolMentionRows:F,importRows:z,importBindingRows:V,fileRow:H,fts:typeof r=="string"?{blobOid:t,content:r}:null,fullyIndexed:!!u},fileSize:i?.size,mtime:i?.mtime}}var be=["ts","js","python","c","cpp","csharp","dart","java","clojure"];function Be(n){return typeof n=="string"&&be.includes(n)}gn();function mt(){let n=process.env.PANDO_ENABLED_LANGUAGES;if(n&&n.trim().length>0){let t=n.split(",").map(r=>r.trim()).filter(r=>r.length>0).filter(Be);if(t.length>0)return ft(t)}return[...be]}function ft(n){let e=new Set;for(let t of n)Be(t)&&e.add(t);return be.filter(t=>e.has(t))}function gt(n){let e=new Set(ft(n)),t={};for(let r of be){if(e.has(r)){t[r]={enabled:!0,source:"embedded"};continue}t[r]={enabled:!1,source:"none",reason:"disabled by language support config"}}return{byLanguage:t}}import Je from"path";import Nn from"fs";import{Project as Pn,Node as Q}from"ts-morph";import{Node as d,SyntaxKind as ae}from"ts-morph";import*as X from"typescript";import{SyntaxKind as xe}from"ts-morph";var $e={LINE_COMMENT:{kind:9001,name:"LineComment",triviaKind:xe.SingleLineCommentTrivia},BLOCK_COMMENT:{kind:9002,name:"BlockComment",triviaKind:xe.MultiLineCommentTrivia},JSDOC_COMMENT:{kind:9003,name:"JSDocComment",triviaKind:xe.MultiLineCommentTrivia}};function ht(n,e){return n===xe.SingleLineCommentTrivia?$e.LINE_COMMENT:n===xe.MultiLineCommentTrivia&&e.startsWith("/**")?$e.JSDOC_COMMENT:$e.BLOCK_COMMENT}import{Node as T}from"ts-morph";var yt={TS_MORPH:"ts-morph",PYTHON_AST:"python-ast",CLANG:"clang",ROSLYN:"roslyn",JAVA_AST:"java-ast",CLI:"cli",UNKNOWN:"unknown"},bt=(n,e)=>T.isFunctionDeclaration(n)||T.isFunctionExpression(n)||T.isArrowFunction(n)?{kind:"Function",semanticKind:"function"}:T.isGetAccessorDeclaration(n)||T.isSetAccessorDeclaration(n)?{kind:"Method",semanticKind:"property"}:T.isMethodDeclaration(n)||T.isMethodSignature(n)||T.isConstructorDeclaration(n)?{kind:"Method",semanticKind:"method"}:T.isClassDeclaration(n)||T.isClassExpression(n)?{kind:"Class",semanticKind:"class"}:T.isInterfaceDeclaration(n)?{kind:"Interface",semanticKind:"interface"}:T.isEnumDeclaration(n)?{kind:"Enum",semanticKind:"enum"}:T.isEnumMember(n)?{kind:"EnumMember",semanticKind:"enum"}:T.isTypeAliasDeclaration(n)?{kind:"TypeAlias",semanticKind:"type"}:T.isModuleDeclaration(n)?{kind:"Namespace",semanticKind:"namespace"}:T.isPropertyDeclaration(n)||T.isPropertySignature(n)?{kind:"Field",semanticKind:"property"}:T.isVariableDeclaration(n)?{kind:"Variable",semanticKind:"variable"}:{kind:e,semanticKind:null};function xt(n){try{let e=n.getKindName?.();if(typeof e=="string"&&e.trim())return e}catch{}return"Unknown"}function Ie(n){let e=xt(n),t=bt(n,e);return{kind:t.kind,semanticKind:t.semanticKind,rawKind:e,rawKindSource:yt.TS_MORPH}}function St(n){let e=xt(n);return{kind:bt(n,e).kind,rawKind:e,rawKindSource:yt.TS_MORPH}}function Ae(n,e){if(!n.kind||!n.kind.trim())throw new Error(`Invalid normalized kind: missing kind ${e?JSON.stringify(e):""}`);if(!n.rawKind||!n.rawKind.trim())throw new Error(`Invalid normalized kind: missing rawKind ${e?JSON.stringify(e):""}`);if(!n.rawKindSource||!String(n.rawKindSource).trim())throw new Error(`Invalid normalized kind: missing rawKindSource ${e?JSON.stringify(e):""}`)}function hn(n){if(n.kind==="local"){let r=n.isDefault?"default":n.name;return r?{name:r,priority:n.isDefault?4:3}:null}if(n.kind==="alias")return n.exported?{name:n.exported,priority:2}:null;let e=n.isNamespace??!1,t=n.alias||n.name||(e?"*":null);return t?{name:t,priority:e?0:1}:null}function yn(n){if(n.length<2)return n;let e=new Map;for(let t of n){let r=hn(t);if(!r)continue;let i=e.get(r.name);(!i||r.priority>i.priority)&&e.set(r.name,{record:t,priority:r.priority})}return Array.from(e.values()).map(t=>t.record)}function Se(n){try{if(n&&typeof n.getName=="function"){let e=n.getName();if(typeof e=="string"&&e.length>0)return e}}catch{}return null}function bn(n){try{let e=n?.getBody?.();if(!e||typeof e.getStart!="function"||typeof e.getEnd!="function")return null;let t=typeof e.getKindName=="function"?String(e.getKindName()):"",r=t==="Block"||t==="ModuleBlock",i=e.getStart(),s=e.getEnd(),o=r?i+1:i,l=r?s-1:s;return!Number.isFinite(o)||!Number.isFinite(l)||l<o?null:{start:o,end:l}}catch{return null}}function xn(n){let e=n.getParent?.();if(!e)return null;try{if(d.isIfStatement(e)){if(e.getExpression()===n)return"condition";if(e.getThenStatement()===n)return"then";if(e.getElseStatement()===n)return"else"}if(d.isReturnStatement(e)&&e.getExpression?.()===n)return"value";if(d.isVariableDeclaration(e)){if(e.getNameNode?.()===n)return"name";if(e.getInitializer?.()===n)return"initializer"}if(d.isCallExpression(e)||d.isNewExpression(e)){if(e.getExpression?.()===n)return"callee";if((e.getArguments?.()??[]).indexOf(n)>=0)return"argument"}if(d.isPropertyAccessExpression(e)){if(e.getExpression()===n)return"object";if(e.getNameNode()===n)return"property"}}catch{return null}return null}function ze(n){let e;try{let r=n.getStart?.(!1);typeof r=="number"&&Number.isFinite(r)&&(e=r)}catch{}if(e===void 0)try{let r=n.getStart?.();typeof r=="number"&&Number.isFinite(r)&&(e=r)}catch{}if(e===void 0)try{let r=n.getFullStart?.();typeof r=="number"&&Number.isFinite(r)&&(e=r)}catch{}e===void 0&&(e=0);let t;try{let r=n.getEnd?.();typeof r=="number"&&Number.isFinite(r)&&(t=r)}catch{}if(t===void 0)try{let r=n.getStart?.();typeof r=="number"&&Number.isFinite(r)&&(t=r)}catch{}return t===void 0&&(t=e),t<e&&(t=e),{start:e,end:t}}function Sn(n){try{if(d.isFunctionDeclaration(n)||d.isMethodDeclaration(n)||d.isConstructorDeclaration(n)||d.isFunctionExpression(n)||d.isArrowFunction(n)){let e=n.getParameters?.();if(Array.isArray(e))return e.length}}catch{}return null}function Cn(n){try{return d.isIdentifier(n)?n.getSymbol():d.isPropertyAccessExpression(n)?n.getNameNode().getSymbol()??n.getSymbol():n.getSymbol?.()}catch{return}}function ke(n,e){try{return typeof n?.hasModifier=="function"&&n.hasModifier(e)}catch{return!1}}function Ct(n){try{return n.getModuleSpecifierValue?.()??null}catch{try{return n.getModuleSpecifier?.()?.getLiteralText?.()??null}catch{return null}}}function vn(n,e,t){if(!d.isImportDeclaration(n))return;let i={moduleSpecifier:Ct(n),isTypeOnly:n.isTypeOnly(),namedImports:[]};try{let s=n.getDefaultImport();if(s){let o=s.getText();i.defaultImport=o,t(o,s)}}catch{}try{let s=n.getNamespaceImport();if(s){let o=s.getText();i.namespaceImport=o,t(o,s)}}catch{}try{n.getNamedImports().forEach(s=>{try{let o=s.getName(),l=s.getAliasNode(),c=l?l.getText():void 0;o&&(i.namedImports.push({name:o,alias:c||void 0}),t(c||o,s.getNameNode()))}catch{}})}catch{}e.push(i)}function En(n,e){if(d.isExportDeclaration(n)){let t=Ct(n);if(t){if(n.getNamedExports().length>0)try{n.getNamedExports().forEach(r=>{try{let i=r.getName(),s=r.getAliasNode(),o=s?s.getText():void 0;e.push({kind:"reexport",moduleSpecifier:t,name:i||void 0,alias:o||void 0,isNamespace:!1})}catch{}})}catch{}else if(n.isNamespaceExport())try{let i=n.getNamespaceExport()?.getName();e.push({kind:"reexport",moduleSpecifier:t,name:i||"*",alias:i||void 0,isNamespace:!0})}catch{e.push({kind:"reexport",moduleSpecifier:t,name:"*",isNamespace:!0})}else e.push({kind:"reexport",moduleSpecifier:t,name:"*",isNamespace:!0});return}try{n.getNamedExports().forEach(r=>{try{let i=r.getName();if(!i)return;let s=r.getAliasNode(),o=s?s.getText():i;e.push({kind:"alias",local:i,exported:o})}catch{}})}catch{}return}if(d.isExportAssignment(n))try{let t=n.getExpression();if(t&&d.isIdentifier(t)){let r=t.getText();e.push({kind:"alias",local:r,exported:"default"})}}catch{}}function wn(n,e,t,r){if(!ke(n,ae.ExportKeyword))return;let i=ke(n,ae.DefaultKeyword);if(d.isVariableStatement(n)){try{let s=n.getDeclarationList().getDeclarations();for(let o of s){let l=Se(o)??o.getName?.()??null;if(l){t(l,o);let c=r(o);c&&e.push({kind:"local",name:l,isDefault:i,nodeId:c})}}}catch{}return}if(d.isFunctionDeclaration(n)||d.isClassDeclaration(n)||d.isInterfaceDeclaration(n)||d.isEnumDeclaration(n)||d.isTypeAliasDeclaration(n)||d.isModuleDeclaration(n)){let s=Se(n)||(i?"default":null),o=r(n);o&&e.push({kind:"local",name:s??"default",isDefault:i,nodeId:o})}}function vt(n,e,t,r){let i=[],s=[],o=[],l=new Set,c=new Map,u=[],m=[],C=(r?.emitMode??"light")==="full",I=new Map,K=new Map,R=new Map,F=[{node:n,id:null,kind:"module",rawKind:"SourceFile",rawKindSource:"ts-morph",name:null,isExported:!1}],O=a=>{if(!a)return null;try{return e(a)}catch{return null}},U=a=>{let f=a.getParent?.();for(;f;){let h=I.get(f);if(h)return h;f=f.getParent?.()}return null},z=(a,f)=>{if(a&&(l.has(a)||l.add(a),f&&!c.has(a))){let h=O(f);h&&c.set(a,h)}},V=a=>d.isFunctionDeclaration(a)||d.isFunctionExpression(a)||d.isArrowFunction(a)||d.isClassDeclaration(a)||d.isClassExpression(a)||d.isInterfaceDeclaration(a)||d.isEnumDeclaration(a)||d.isEnumMember(a)||d.isTypeAliasDeclaration(a)||d.isModuleDeclaration(a)||d.isMethodDeclaration(a)||d.isMethodSignature(a)||d.isPropertyDeclaration(a)||d.isPropertySignature(a)||d.isGetAccessorDeclaration(a)||d.isSetAccessorDeclaration(a)||d.isConstructorDeclaration(a)||d.isVariableDeclaration(a),fe=a=>d.isSourceFile(a)||d.isFunctionDeclaration(a)||d.isFunctionExpression(a)||d.isArrowFunction(a)||d.isMethodDeclaration(a)||d.isConstructorDeclaration(a)||d.isClassDeclaration(a)||d.isClassExpression(a)||d.isModuleDeclaration(a),H=a=>{let f=Se(a);if(f)return f;if(d.isConstructorDeclaration(a))return"constructor";if(d.isArrowFunction(a)||d.isFunctionExpression(a)){let h=a.getParent();try{if(d.isVariableDeclaration(h))return h.getName();if(d.isPropertyAssignment(h)||d.isPropertyDeclaration(h)||d.isPropertySignature(h))return h.getName?.()??null;if(d.isShorthandPropertyAssignment(h))return h.getNameNode()?.getText()??null;if(d.isExportAssignment(h))return"default"}catch{}}if(d.isEnumMember(a))try{return a.getName()}catch{return null}if(d.isVariableDeclaration(a))try{return a.getName()}catch{return null}return null},Y=a=>{let f=F[F.length-1],h=f?.id??null,N=f?.kind??"module",g=f?.name??null;if(d.isImportDeclaration(a))vn(a,u,z);else if(d.isImportEqualsDeclaration(a))try{let S=a.getModuleReference();if(S&&d.isExternalModuleReference(S)){let x=S.getExpression(),v;if(x&&d.isStringLiteral(x))v=x.getLiteralText();else if(x){let w=x.getText();v=typeof w=="string"?w.replace(/^['"]|['"]$/g,""):void 0}if(v){let M=a.getNameNode()?.getText(),_={moduleSpecifier:v,isTypeOnly:!1,namedImports:[]};M&&(_.defaultImport=M,z(M,a)),u.push(_)}}}catch{}(d.isExportDeclaration(a)||d.isExportAssignment(a))&&En(a,m),wn(a,m,z,O);let y=V(a),E=C||y,P=y?H(a):null;if(E){let S=e(a);y&&s.push({nodeId:S,node:a});let x=U(a),v=x==null?null:K.get(x)??0;x!=null&&v!=null&&K.set(x,v+1),I.set(a,S);let w=x?(R.get(x)??-1)+1:0;R.set(S,w);let M=ke(a,ae.ExportKeyword)||f?.isExported||!1,_=y?a.getNameNode?.()?.getText?.()??null:null,D=P??(y?Se(a)??_:Se(a));P?z(P,a):D&&z(D,a);let A=ze(a),L=Sn(a),k=Ie(a);Ae(k,{source:"ts-node-collector",file:n.getFilePath(),name:D??null});let J=bn(a);i.push({nodeId:S,nodeName:D??null,containerId:h,containerKind:N,containerRawKind:f?.rawKind??null,containerRawKindSource:f?.rawKindSource??null,containerName:g,isExported:M,kind:k.kind,rawKind:k.rawKind,rawKindSource:k.rawKindSource,semanticKind:k.semanticKind??null,start:A.start,end:A.end,paramCount:L,metadata:null,parentNodeId:x,role:xn(a),indexInParent:v,depth:w,bodyStart:J?.start??null,bodyEnd:J?.end??null})}if(d.isCallExpression(a)||d.isNewExpression(a)){let S=a.getExpression(),x=null,v,w;try{if(w=Cn(S),d.isIdentifier(S))x=S.getText();else if(d.isPropertyAccessExpression(S)){x=S.getName();let D=S.getExpression();d.isIdentifier(D)&&(v=D.getText())}}catch{}let M="";try{M=S.getText()}catch{}let _=ze(a);if(o.push({name:x,kind:d.isNewExpression(a)?"new":"call",containerId:h,containerKind:N,containerName:g,expression:M,objectName:v,symbol:w,start:_.start,end:_.end}),d.isCallExpression(a))try{if(d.isIdentifier(S)&&S.getText()==="require"){let A=a.getArguments()[0],L;if(A&&(d.isStringLiteral(A)||d.isNoSubstitutionTemplateLiteral(A)))try{L=A.getLiteralText()}catch{let k=A.getText();L=typeof k=="string"?k.replace(/^['"]|['"]$/g,""):void 0}if(L){let k={moduleSpecifier:L,isTypeOnly:!1,namedImports:[]},J=a.getParent();if(J&&d.isVariableDeclaration(J)){let Pe=J.getNameNode();try{if(d.isIdentifier(Pe)){let ge=Pe.getText();ge&&(k.defaultImport=ge,z(ge,J))}}catch{}}u.push(k)}}else if(S?.getKind?.()===ae.ImportKeyword){let A=a.getArguments()[0],L;if(A&&(d.isStringLiteral(A)||d.isNoSubstitutionTemplateLiteral(A)))try{L=A.getLiteralText()}catch{let k=A.getText();L=typeof k=="string"?k.replace(/^['"]|['"]$/g,""):void 0}L&&u.push({moduleSpecifier:L,isTypeOnly:!1,namedImports:[]})}}catch{}}if(d.isCallExpression(a)){let S=a.getExpression();try{if(d.isIdentifier(S)&&S.getText()==="require"){let x=a.getParent();if(!(x&&d.isExternalModuleReference(x))){let w=a.getArguments()[0],M;if(w&&(d.isStringLiteral(w)||d.isNoSubstitutionTemplateLiteral(w)))try{M=w.getLiteralText()}catch{M=w.getText().replace(/^['"]|['"]$/g,"")}if(M){let _={moduleSpecifier:M,isTypeOnly:!1,namedImports:[]};if(x&&d.isVariableDeclaration(x)){let D=x.getNameNode();try{if(d.isIdentifier(D)){let A=D.getText();A&&(_.defaultImport=A,z(A,x))}}catch{}}u.push(_)}}}else if(S?.getKind?.()===ae.ImportKeyword){let v=a.getArguments()[0],w;if(v&&(d.isStringLiteral(v)||d.isNoSubstitutionTemplateLiteral(v)))try{w=v.getLiteralText()}catch{w=v.getText().replace(/^['"]|['"]$/g,"")}w&&u.push({moduleSpecifier:w,isTypeOnly:!1,namedImports:[]})}}catch{}}let j=!1;if(fe(a)){let S=O(a)??e(a),x=St(a);F.push({node:a,id:S,kind:x.kind,rawKind:x.rawKind,rawKindSource:x.rawKindSource,name:P??g,isExported:ke(a,ae.ExportKeyword)||f?.isExported||!1}),j=!0}a.forEachChild(Y),j&&F.pop()};if(C){let a=e(n);I.set(n,a),R.set(a,0);let f=ze(n);i.push({nodeId:a,nodeName:n.getBaseName?.()??null,containerId:null,containerKind:"module",containerRawKind:"SourceFile",containerRawKindSource:"ts-morph",containerName:null,isExported:!1,kind:"SourceFile",rawKind:"SourceFile",rawKindSource:"ts-morph",semanticKind:"file",start:f.start,end:f.end,paramCount:null,metadata:null,parentNodeId:null,role:null,indexInParent:null,depth:0,bodyStart:f.start,bodyEnd:f.end})}if(n.forEachChild(Y),r?.includeComments===!0||C||process.env.AST_INDEX_COMMENTS==="1")try{let a=n.getFullText(),f=X.createScanner(X.ScriptTarget.Latest,!1,X.LanguageVariant.Standard,a),h=new Set;for(let N=f.scan();N!==X.SyntaxKind.EndOfFileToken;N=f.scan()){if(N!==X.SyntaxKind.SingleLineCommentTrivia&&N!==X.SyntaxKind.MultiLineCommentTrivia)continue;let g=f.getTokenPos(),y=f.getTextPos(),E=`${g}-${y}`;if(h.has(E)||(h.add(E),t.has(E)))continue;t.add(E);let P=a.substring(g,y),j=ht(N,P),x=e({getKindName:()=>j.name,getKind:()=>j.kind,getPos:()=>g,getEnd:()=>y,getStart:()=>g,getFullStart:()=>g,getText:()=>P,getSourceFile:()=>n,getParent:()=>n,__isComment:!0,__commentPosition:"standalone",__attachedTo:null},"COM"),v=I.get(n)??null,w=C&&v!=null?K.get(v)??0:null;C&&v!=null&&w!=null&&K.set(v,w+1),i.push({nodeId:x,nodeName:P.substring(0,100),containerId:null,containerKind:"module",containerRawKind:"SourceFile",containerRawKindSource:"ts-morph",containerName:null,isExported:!1,kind:j.name,rawKind:j.name,rawKindSource:"ts-morph",semanticKind:null,start:g,end:y,paramCount:null,metadata:null,parentNodeId:v,role:"comment",indexInParent:w,depth:C?1:0,bodyStart:null,bodyEnd:null})}}catch{}return{nodes:i,symbolCandidateNodes:s,references:o,declaredNames:l,localDeclarations:c,imports:u,exports:yn(m)}}function Et(n){let e;try{let r=n.getStart?.(!1);typeof r=="number"&&Number.isFinite(r)&&(e=r)}catch{}if(e===void 0)try{let r=n.getStart?.();typeof r=="number"&&Number.isFinite(r)&&(e=r)}catch{}if(e===void 0)try{let r=n.getFullStart?.();typeof r=="number"&&Number.isFinite(r)&&(e=r)}catch{}e===void 0&&(e=0);let t;try{let r=n.getEnd?.();typeof r=="number"&&Number.isFinite(r)&&(t=r)}catch{}if(t===void 0)try{let r=n.getStart?.();typeof r=="number"&&Number.isFinite(r)&&(t=r)}catch{}return t===void 0&&(t=e),t<e&&(t=e),{start:e,end:t}}var Rn=100;function In(n,e,t,r){let{start:i,end:s}=Et(e),o=Ie(e);Ae(o,{source:"ts-node-id",file:n,kind:o.kind});let l=r||Z.getAbbrev(o.kind,t);return`${n}#${i}-${s}:${l}`}function An(n,e){return Je.relative(n,e).replace(/\\/g,"/")}function wt(n,e){if(!n)return null;let t=n;try{let m=n.getAliasedSymbol();m&&(t=m)}catch{}let r=[];try{r=t.getDeclarations()??[]}catch{r=[]}if(!r.length)return null;let s=r.slice().sort((m,p)=>{let C=m.getSourceFile().getFilePath(),I=p.getSourceFile().getFilePath();if(C!==I)return C.localeCompare(I);let K=m.getStart(!1),R=p.getStart(!1);return K!==R?K-R:m.getEnd()-p.getEnd()})[0],o=An(e,s.getSourceFile().getFilePath()),l=s.getStart(!1),c=s.getEnd(),u="";try{u=t.getEscapedName()}catch{try{u=t.getName()}catch{u=""}}return`${o}#${l}-${c}:${u}`}function kn(n){try{return Q.isVariableDeclaration(n)||Q.isEnumMember(n)?n.getNameNode().getSymbol()??n.getSymbol():n.getSymbol()}catch{return}}function Mn(n,e){let t=n.getDescendantAtPos(e);if(!t)return;let r=t;if(!Q.isCallExpression(r)&&!Q.isNewExpression(r)&&(r=t.getFirstAncestor(s=>Q.isCallExpression(s)||Q.isNewExpression(s))??void 0),!r||!Q.isCallExpression(r)&&!Q.isNewExpression(r))return;let i=r.getExpression();try{return Q.isIdentifier(i)?i.getSymbol():Q.isPropertyAccessExpression(i)?i.getNameNode().getSymbol()??i.getSymbol():i.getSymbol()}catch{return}}async function Dn(n){let{sf:e,fileRel:t,content:r,preDeleted:i,meta:s,projectRoot:o,lang:l}=n,c=n.emitMode??"light",m=vt(e,(g,y)=>In(t,g,l,y),new Set,{includeComments:c==="full",emitMode:c}),p=new Map;for(let{nodeId:g,node:y}of m.symbolCandidateNodes){let E=wt(kn(y),o);E&&(p.has(g)||p.set(g,E))}let C=[],I=new Map,K=m.exports.filter(g=>g.kind!=="reexport"),R=m.exports.filter(g=>g.kind==="reexport");for(let g of K)if(g.kind==="local"){let y=g.isDefault?"default":g.name;if(!y||I.has(y))continue;let E=g.nodeId;C.push([t,y,E,0,null,null,g.isDefault?"default":"named"]),I.set(y,E)}else if(g.kind==="alias"){let y=g.exported;if(!y||I.has(y))continue;C.push([t,y,null,0,null,g.local,"alias"]),I.set(y,"alias")}for(let g of R){let y=g.moduleSpecifier;if(!y)continue;let E=y;if(g.isNamespace){let P=g.alias||"*";if(I.has(P))continue;C.push([t,P,null,1,E,g.name||P,"reexport_star"]),I.set(P,"reexport")}else{let P=g.alias||g.name;if(!P||I.has(P))continue;C.push([t,P,null,1,E,g.name||P,"reexport_named"]),I.set(P,"reexport")}}let F=[],O=typeof r=="string"?r:null;if(O==null)try{let g=e.getFullText();O=typeof g=="string"?g:null}catch{O=null}for(let g of m.nodes){let{nodeId:y,nodeName:E,containerKind:P,containerRawKind:j,containerRawKindSource:S,isExported:x,kind:v,rawKind:w,rawKindSource:M,semanticKind:_,start:D,end:A,paramCount:L,metadata:k,parentNodeId:J,role:Pe,indexInParent:ge,depth:cn,bodyStart:un,bodyEnd:dn}=g,pn=k&&Object.keys(k).length?JSON.stringify(k):null,mn=p.get(y)??null;F.push([y,E??null,v,w??v,M??null,_??null,D,A,x?1:0,P??"module",j??P??"module",S??null,L,null,null,mn,pn,J??null,Pe??null,ge??null,cn??0,un??null,dn??null])}let U=[];for(let g of m.references){let{name:y,kind:E,containerId:P,containerName:j,expression:S,objectName:x,start:v,end:w}=g,M=null,_=null,D=wt(g.symbol??Mn(e,v),o),A=y?m.localDeclarations.get(y):void 0;A&&(M=A,_=t,D||(D=p.get(A)??null));let L=Re({sourceFile:t,sourceStart:v,sourceEnd:w,refKind:E,refName:y,targetFile:_,targetNodeId:M}),k={};S&&(k.expression=S),x&&(k.objectName=x),j&&(k.containerName=j);let J=Object.keys(k).length?JSON.stringify(k):null;U.push([L,t,P,y,E,v,w,M,_,M?"resolved":"unresolved",x??null,null,null,D,J])}let z=[],V=[];for(let g of m.imports){let y=g.moduleSpecifier??null;z.push([t,y,g.isTypeOnly?1:0]),g.defaultImport&&V.push([t,y,"default",g.defaultImport,"default",g.isTypeOnly?1:0]),g.namespaceImport&&V.push([t,y,"namespace",g.namespaceImport,"*",g.isTypeOnly?1:0]);for(let E of g.namedImports){let P=E.alias||E.name;V.push([t,y,"named",P,E.name,g.isTypeOnly?1:0])}}let fe=Je.join(o,t),H=s?.size,Y=s?.mtime;if(H===void 0||Y===void 0)try{let g=Nn.statSync(fe);H=g.size,Y=Math.floor(g.mtimeMs)}catch{}let a=new Date().toISOString(),f=c==="full",h=[t,Y??null,H??null,"completed",a,f?1:0],N=null;if(typeof O=="string")N={blobOid:t,content:O};else try{let g=e.getFullText?.();typeof g=="string"&&(N={blobOid:t,content:g})}catch(g){console.log(`[TypescriptIndexer] Failed to compute FTS payload for ${t}:`,g?.message??g)}return{payload:{lang:l,fileRel:t,preDeleted:i,exportRows:C,nodeRows:F,referenceRows:U,importRows:z,importBindingRows:V,fileRow:h,fts:N,fullyIndexed:f},fileSize:H,mtime:Y}}var qe=class{constructor(e,t){this.project=null;this.filesProcessed=0;this.projectRoot=e,this.lang=t}getProject(){return this.project||(this.project=new Pn({useInMemoryFileSystem:!0,skipAddingFilesFromTsConfig:!0})),this.project}disposeProject(){if(this.project){try{let e=this.project.getLanguageService().compilerObject;typeof e?.dispose=="function"&&e.dispose()}catch{}this.project=null}}async process(e){let t=this.getProject(),r;try{let i=t.createSourceFile(Je.join(this.projectRoot,e.relPath),e.content,{overwrite:!0});r=await Dn({sf:i,fileRel:e.relPath,content:e.content,preDeleted:!!e.preDeleted,meta:e.meta,projectRoot:this.projectRoot,lang:e.lang,emitMode:e.emitMode??"light"})}catch(i){this.disposeProject(),this.filesProcessed=0;let s=i?.message||String(i);throw new Error(`TypeScript parser failed for ${e.relPath}: ${s}`)}return this.filesProcessed++,this.filesProcessed>=Rn&&(this.disposeProject(),this.filesProcessed=0),{payload:r.payload,fileSize:r.fileSize,mtime:r.mtime}}};function Tn(n){return n==="ts"?[".ts",".tsx",".mts",".cts"]:n==="js"?[".js",".jsx",".mjs",".cjs"]:[]}function We(n){return{id:n,extensions:Tn(n),indexingMode:"worker",createIndexer:e=>new qe(e,n)}}import De from"fs";import ee from"path";import{spawn as Ln}from"child_process";import Kn from"fs";var le=class{constructor(e=5e3){this.maxEntries=e;this.cache=new Map}get(e,t){let r=this.cache.get(e);if(!r)return null;let i=t?.mtime??null,s=t?.size??null;return i!=null&&s!=null&&r.mtime===i&&r.size===s?r.result:null}set(e,t,r){let i=t?.mtime??null,s=t?.size??null;this.cache.set(e,{mtime:i,size:s,result:r}),this.cache.size>this.maxEntries&&this.cache.clear()}};var Ue=class{constructor(e,t,r,i){this.projectRoot=e;this.lang=t;this.parse=r;this.exportKind=i;this.cache=new le}async process(e){let t=e.meta?.mtime,r=e.meta?.size;if(t==null||r==null)try{let o=Kn.statSync(e.absPath);t=Math.floor(o.mtimeMs),r=o.size}catch{}let i=e.emitMode==="full"?null:this.cache.get(e.absPath,{mtime:t,size:r});if(i)return ye({lang:this.lang,fileRel:e.relPath,content:e.content,meta:{mtime:t,size:r},preDeleted:e.preDeleted,parsed:i,resolveNodeId:Nt(e.relPath,i,this.lang),exportKind:this.exportKind??"cli",fullyIndexed:e.emitMode==="full"});let s=null;try{s=await this.parse({absPath:e.absPath,relPath:e.relPath,content:e.content,meta:{mtime:t,size:r},projectRoot:this.projectRoot,lang:this.lang,emitMode:e.emitMode??"light"})}catch(o){try{console.log(`[CliContract:${this.lang}] parse threw for ${e.relPath}: ${o?.message||String(o)}`)}catch{}return he(this.lang,e.relPath,{mtime:t,size:r})}return!s||s.error?he(this.lang,e.relPath,{mtime:t,size:r}):(e.emitMode!=="full"&&this.cache.set(e.absPath,{mtime:t,size:r},s),ye({lang:this.lang,fileRel:e.relPath,content:e.content,meta:{mtime:t,size:r},preDeleted:e.preDeleted,parsed:s,resolveNodeId:Nt(e.relPath,s,this.lang),exportKind:this.exportKind??"cli",fullyIndexed:e.emitMode==="full"}))}};function Nt(n,e,t){let r=new Map;for(let i of e.nodes??[]){if(!i.name||r.has(i.name))continue;let s=`${n}#${i.start}-${i.end}:${Z.getAbbrev(i.kind,t)}`;r.set(i.name,s)}return i=>r.get(i)??null}function G(n){return{id:n.id,extensions:n.extensions,indexingMode:"worker",createIndexer:e=>new Ue(e,n.id,n.parse,n.exportKind),resolveSpan:n.resolve?async(e,t,r)=>n.resolve({projectRoot:e,absPath:t,nodePath:r,lang:n.id}):void 0}}import _n from"fs";import Me from"path";var Xe=null;function On(n){for(let e of n)if(_n.existsSync(e))return e;return null}function q(n){let e=Xe?.toolsRoot??process.env.PANDO_TOOLS_ROOT,t=Xe?.runtimeRoot??process.env.PANDO_RUNTIME_ROOT,r=Xe?.resourcesRoot??process.env.PANDO_RESOURCES_ROOT,i=[e?Me.join(e,n):null,t?Me.join(t,"tools",n):null,r?Me.join(r,"tools",n):null,Me.resolve(process.cwd(),"tools",n)].filter(s=>!!s);return On(i)}function W(...n){try{let e=n.map(t=>{if(typeof t=="string")return t;try{return JSON.stringify(t)}catch{return String(t)}}).join(" ");process.stderr.write(e+`
2
2
  `)}catch{}}var Fn=Number(process.env.PANDO_PYTHON_WORKER_PARSE_TIMEOUT_MS||18e4),jn=Number(process.env.PANDO_PYTHON_WORKER_RESOLVE_TIMEOUT_MS||6e4),de=class extends Error{constructor(t,r){super(t);this.fatal=r;this.name="PythonWorkerRequestError"}},Te=class{constructor(e,t){this.interpreter=e;this.scriptPath=t;this.buffer=Buffer.alloc(0);this.pending=new Map;this.requestQueue=Promise.resolve();this.seq=1;this.closed=!1;if(this.proc=Ln(this.interpreter,["-u",this.scriptPath],{stdio:["pipe","pipe","pipe"]}),!this.proc.stdout||!this.proc.stderr||!this.proc.stdin)throw new Error("python worker stdio unavailable");this.proc.stdout.on("data",r=>this.onData(r)),this.proc.stderr.on("data",r=>{W(`[PythonWorker] ${r.toString("utf8").trim()}`)}),this.proc.stdin.on("error",r=>this.handleError(r)),this.proc.on("error",r=>this.handleError(r)),this.proc.on("exit",r=>this.handleError(new Error(`python worker exited with code ${r}`))),this.ready=this.ping()}handleError(e){if(!this.closed){this.closed=!0;for(let[,t]of this.pending)t.timeout&&clearTimeout(t.timeout),t.summary&&W("[PythonCliAdapter] worker error",{interpreter:this.interpreter,error:e.message,...t.summary}),t.reject(e);this.pending.clear();try{this.proc.stdin?.end()}catch{}try{this.proc.kill()}catch{}}}onData(e){for(this.buffer=Buffer.concat([this.buffer,e]);this.buffer.length>=4;){let t=this.buffer.readUInt32BE(0);if(this.buffer.length<4+t)return;let r=this.buffer.slice(4,4+t);this.buffer=this.buffer.slice(4+t);let i=null;try{i=JSON.parse(r.toString("utf8"))}catch{continue}let s=this.pending.get(i.id);s&&(this.pending.delete(i.id),s.timeout&&clearTimeout(s.timeout),i.ok?s.resolve(i):s.reject(new de(i.error||"python worker error",!1)))}}sendMessage(e){if(this.closed)throw new Error("python worker is closed");let t=Buffer.from(JSON.stringify(e),"utf8"),r=Buffer.alloc(4);r.writeUInt32BE(t.length,0),this.proc.stdin.write(r),this.proc.stdin.write(t)}async requestRaw(e,t,r=1e4){let i=this.seq++,s={id:i,op:e,...t},o={op:e,id:i};return typeof t?.path=="string"&&(o.path=t.path),typeof t?.nodePath=="string"&&(o.nodePath=t.nodePath),typeof t?.content_b64=="string"&&(o.contentBytes=t.content_b64.length),new Promise((l,c)=>{let u=setTimeout(()=>{this.pending.delete(i);let m=new de(`python worker timeout (${e})`,!0);W("[PythonCliAdapter] worker timeout",{op:e,id:i,timeoutMs:r,pending:this.pending.size,interpreter:this.interpreter,...o}),c(m),this.handleError(m)},r);this.pending.set(i,{resolve:l,reject:c,timeout:u,summary:o}),this.pending.size%200===0&&W("[PythonCliAdapter] worker pending",{op:e,pending:this.pending.size,interpreter:this.interpreter});try{this.sendMessage(s)}catch(m){clearTimeout(u),this.pending.delete(i),c(m)}})}async enqueueRequest(e){let t=this.requestQueue.catch(()=>{}),r,i=new Promise(s=>{r=s});this.requestQueue=t.then(()=>i),await t;try{return await e()}finally{r()}}async request(e,t,r=1e4){await this.ready;let i=Date.now();return this.enqueueRequest(async()=>{let s=Date.now()-i,o=Date.now();s>2e3&&W("[PythonCliAdapter] worker queued",{op:e,queueMs:s,interpreter:this.interpreter,path:t?.path});let l=await this.requestRaw(e,t,r),c=Date.now()-o;return c>2e3&&W("[PythonCliAdapter] worker slow",{op:e,ms:c,queueMs:s,pending:this.pending.size,interpreter:this.interpreter,path:t?.path}),l})}async ping(){await this.requestRaw("ping",{},5e3)}async parse(e){let t=Buffer.from(e.content,"utf8").toString("base64"),r=await this.request("parse",{path:e.path,content_b64:t,encoding:e.encoding,emit_mode:e.emitMode??"light"},Fn);return r.nodes?r:null}async resolve(e){let t=Buffer.from(e.content,"utf8").toString("base64"),r=await this.request("resolve",{path:e.path,nodePath:e.nodePath,content_b64:t,encoding:e.encoding},jn);return typeof r.start=="number"&&typeof r.end=="number"?r:null}close(){if(this.closed)return;this.closed=!0;for(let[,t]of this.pending)t.timeout&&clearTimeout(t.timeout),t.reject(new Error("python worker client closed"));this.pending.clear();let e=this.proc;try{e.stdin?.end()}catch{}try{e.kill()}catch{}}};function Pt(n){let e=ee.resolve(n,"tools/python-indexer/pando_python_worker.py");if(De.existsSync(e))return e;let t=q("python-indexer/pando_python_worker.py");if(t)return t;let r=ee.resolve(__dirname,"../../../../../tools/python-indexer/pando_python_worker.py");return De.existsSync(r)?r:null}var ue=new Map;function ce(n){try{return De.readFileSync(n,"utf8")}catch{return null}}function Ce(n){if(!n)return null;let e=n.match(/(\d+)\.(\d+)/);return e?{major:Number(e[1]),minor:Number(e[2])}:null}function Bn(n){let e=ce(ee.join(n,"pyproject.toml"));if(e){let l=e.match(/requires-python\s*=\s*"([^"]+)"/i),c=Ce(l?.[1]??null);if(c)return c}let t=ce(ee.join(n,"setup.cfg"));if(t){let l=t.match(/python_requires\s*=\s*([\w\d\.<>~=\s]+)/i),c=Ce(l?.[1]??null);if(c)return c}let r=ce(ee.join(n,"setup.py"));if(r){let l=r.match(/python_requires\s*=\s*['\"]([^'\"]+)['\"]/i),c=Ce(l?.[1]??null);if(c)return c}let i=ce(ee.join(n,"tox.ini"));if(i){let l=i.match(/envlist\s*=\s*([^\n]+)/i);if(l&&l[1]){let c=l[1].split(/[,\s]+/).filter(Boolean);for(let u of c){let m=u.match(/py(\d)(\d)/i);if(m)return{major:Number(m[1]),minor:Number(m[2])}}}}let s=ce(ee.join(n,".python-version"));if(s){let l=Ce(s.trim());if(l)return l}let o=ce(ee.join(n,"runtime.txt"));if(o){let l=o.match(/python-(\d+\.\d+)/i),c=Ce(l?.[1]??null);if(c)return c}return null}function Rt(n){return Bn(n)?.major===2?["python2","python","python3"]:["python3","python","python2"]}async function $n(n,e,t,r){let i=Pt(n);if(!i)return null;let s=Rt(n);for(let o of s){let l=`${o}::${i}`,c=ue.get(l);if(!c)try{c=new Te(o,i),ue.set(l,c)}catch{continue}try{let u=await c.parse({path:e,content:t,encoding:"utf-8",emitMode:r});if(u)return u}catch(u){let m=u?.message||String(u),p=u instanceof de?u.fatal:/timeout|closed|exited|EPIPE|ENOENT|spawn/i.test(m);W("[PythonCliAdapter] worker parse error",{file:e,interpreter:o,script:i,fatal:p,error:m}),p&&ue.delete(l)}}return null}async function zn(n,e,t,r){let i=Pt(n);if(!i)return null;let s=Rt(n);for(let o of s){let l=`${o}::${i}`,c=ue.get(l);if(!c)try{c=new Te(o,i),ue.set(l,c)}catch{continue}try{let u=await c.resolve({path:e,nodePath:r,content:t,encoding:"utf-8"});if(u)return u}catch(u){let m=u?.message||String(u),p=u instanceof de?u.fatal:/timeout|closed|exited|EPIPE|ENOENT|spawn/i.test(m);W("[PythonCliAdapter] worker resolve error",{file:e,interpreter:o,nodePath:r,script:i,fatal:p,error:m}),p&&ue.delete(l)}}return null}async function qn(n){let e=Date.now(),t=!1,r=null;try{r=await $n(n.projectRoot,n.absPath,n.content,n.emitMode??"light"),t=!!r}catch{}if(!r){W(`[PythonCliAdapter] parse failed for ${n.relPath} via python worker`);let o=Date.now()-e;return o>2e3&&W("[PythonCliAdapter] parse slow (failed)",{file:n.relPath,ms:o}),null}let i=[];for(let o of r.references||[]){let l={};o.expression&&(l.expression=o.expression),o.objectName&&(l.objectName=o.objectName),o.containerName&&(l.containerName=o.containerName),o.containerKind&&(l.containerKind=o.containerKind),i.push({sourceStart:o.start,sourceEnd:o.end,refKind:o.kind,refName:o.name,receiverName:o.receiverName??o.objectName??null,arity:typeof o.arity=="number"?o.arity:null,containerQualifiedName:o.containerQualifiedName??null,targetSymbolKey:o.targetSymbolKey??null,metadata:Object.keys(l).length?l:null})}let s=Date.now()-e;return s>2e3&&W("[PythonCliAdapter] parse slow",{file:n.relPath,ms:s,usedWorker:t}),{nodes:r.nodes,imports:r.imports,importBindings:r.importBindings,references:i,modulePublic:r.modulePublic??void 0,explicitExports:r.explicitExports??void 0}}function It(){return G({id:"python",extensions:[".py",".pyw",".pyi"],exportKind:"named",parse:({absPath:n,relPath:e,projectRoot:t,content:r,emitMode:i})=>qn({absPath:n,relPath:e,projectRoot:t,content:r,emitMode:i}),resolve:async({absPath:n,nodePath:e,projectRoot:t})=>{try{let r=De.readFileSync(n,"utf8"),i=await zn(t,n,r,e);if(i)return i}catch{}return null}})}import At from"fs";import kt from"path";import{spawn as Jn,spawnSync as Wi}from"child_process";var Wn=256e3,Un=32;function ne(...n){try{let e=n.map(t=>{if(typeof t=="string")return t;try{return JSON.stringify(t)}catch{return String(t)}}).join(" ");process.stderr.write(e+`
3
3
  `)}catch{}}var Qe=class{constructor(e){this.cmd=e;this.proc=null;this.buffer="";this.pending=new Map;this.seq=1;this.closed=!1;this.ensureProcess()}ensureProcess(){if(!(this.proc&&!this.closed)){if(this.closed=!1,this.proc=Jn(this.cmd,["--server"],{stdio:["pipe","pipe","pipe"]}),!this.proc.stdout||!this.proc.stderr||!this.proc.stdin)throw this.closed=!0,new Error("csharp indexer stdio unavailable");this.proc.stdout.on("data",e=>this.onData(e)),this.proc.stderr.on("data",e=>{ne(`[CSharpIndexer] ${e.toString("utf8").trim()}`)}),this.proc.stdin.on("error",e=>this.handleExit(e)),this.proc.on("error",e=>this.handleExit(e)),this.proc.on("exit",e=>this.handleExit(new Error(`csharp indexer exited with code ${e}`)))}}handleExit(e){if(!this.closed){this.closed=!0;for(let[,t]of this.pending)t.reject(e);this.pending.clear()}}onData(e){for(this.buffer+=e.toString("utf8");;){let t=this.buffer.indexOf(`
4
4
  `);if(t<0)break;let r=this.buffer.slice(0,t).trim();if(this.buffer=this.buffer.slice(t+1),!r)continue;let i=null;try{i=JSON.parse(r)}catch{continue}let s=this.pending.get(i.id);s&&(this.pending.delete(i.id),i.ok?s.resolve(i):s.reject(new Error(i.error||"csharp server error")))}}async request(e,t=1){this.ensureProcess();let r=this.seq++;return new Promise((i,s)=>{let o={id:r,...e};this.pending.set(r,{resolve:i,reject:s});try{this.proc.stdin.write(`${JSON.stringify(o)}
@@ -0,0 +1,4 @@
1
+ import{b as S}from"./chunk-RRIZV7YJ.mjs";var _=S(()=>{"use strict"});import s from"path";import w from"os";import l from"fs";import $ from"crypto";function D(){return process.env.PANDO_DATA_DIR||s.join(w.homedir(),h)}function P(t){let n=t,r=s.parse(n);for(;n.length>r.root.length&&/[\\/]+$/.test(n);)n=n.replace(/[\\/]+$/,"");return n}function g(t){let n=s.resolve(t),r=n;try{let e=l.realpathSync.native;r=typeof e=="function"?e(n):l.realpathSync(n)}catch{}return P(r)}function L(t){let n=t.trim().replace(/\.git$/,"");if(!n)return null;let r=n.match(/^git@([^:]+):(.+)$/);if(r){let e=r[1],i=r[2].replace(/^\/+/,"").split("/");if(i.length>=2)return`${e}/${i[0]}/${i[1]}`}try{let e=new URL(n),o=e.hostname,c=e.pathname.replace(/^\/+/,"").split("/");if(o&&c.length>=2)return`${o}/${c[0]}/${c[1]}`}catch{}return null}function m(t){return $.createHash("sha1").update(t).digest("hex").slice(0,12)}function C(t){return t.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").replace(/[^A-Za-z0-9._-]+/g,"-").replace(/-+/g,"-").replace(/^[-._]+|[-._]+$/g,"").slice(0,64).replace(/^[-._]+|[-._]+$/g,"")||"workspace"}function G(t,n){let r=s.basename(P(t));return`${C(r)}-${n}`}function N(){return s.join(D(),"workspace-registry.json")}function p(t){try{return l.readFileSync(t,"utf8").trim()}catch{return null}}function j(t){let n=s.join(t,".git");try{let r=l.statSync(n);if(r.isDirectory())return n;if(r.isFile()){let o=p(n)?.match(/^gitdir:\s*(.+)$/i);if(o){let i=o[1].trim();return s.isAbsolute(i)?i:s.resolve(t,i)}}}catch{return null}return null}function T(t){let n=s.join(t,"commondir"),r=p(n);if(!r)return g(t);let e=s.isAbsolute(r)?r:s.resolve(t,r);return g(e)}function W(t){return g(s.join(t,"objects"))}function M(t){let n=g(t);for(;;){let r=s.join(n,".git");if(l.existsSync(r))return n;let e=s.dirname(n);if(e===n)break;n=e}return null}function F(t){let n=g(t),r=M(n);return r?g(r):null}function H(t){let n=s.join(t,"config"),r=p(n);if(!r)return null;let e=r.split(/\r?\n/),o=!1,i=null;for(let c of e){if(c.match(/^\s*\[remote\s+"([^"]+)"\]\s*$/)){o=!0;continue}if(c.startsWith("[")&&(o=!1),o){let a=c.match(/^\s*url\s*=\s*(.+)$/);if(a&&(i=a[1].trim(),i))return i}}return i}function z(t){let n=s.join(t,"HEAD"),r=p(n);if(!r)return{branch:null,commit:null};if(r.startsWith("ref:")){let e=r.replace("ref:","").trim(),o=e.split("/").slice(-1)[0]||null,i=s.join(t,e),c=p(i);if(!c){let u=p(s.join(t,"packed-refs"));if(u){let a=u.split(/\r?\n/).find(f=>f.endsWith(` ${e}`));a&&(c=a.split(" ")[0])}}return{branch:o,commit:c||null}}return{branch:"HEAD",commit:r||null}}function U(){try{let t=l.readFileSync(N(),"utf8"),n=JSON.parse(t);if(n&&n.version===1&&n.entries&&typeof n.entries=="object")return{version:1,entries:n.entries}}catch{}return{version:1,entries:{}}}function B(t){let n=N(),r=s.dirname(n);l.mkdirSync(r,{recursive:!0});let e=`${n}.${process.pid}.${Date.now()}.tmp`;l.writeFileSync(e,`${JSON.stringify(t,null,2)}
2
+ `,"utf8"),l.renameSync(e,n)}function J(t,n){if(!n)return{canonicalRepoRoot:t,gitCommonDir:null,gitObjectDir:null,fingerprint:`non-git:path:${t}`};let r=j(n),e=r?T(r):null,o=e?W(e):null;return{canonicalRepoRoot:n,gitCommonDir:e,gitObjectDir:o,fingerprint:["git",`root:${n}`,`common:${e??""}`,`objects:${o??""}`].join("|")}}function X(t){try{let n=U();n.entries[t.storageRoot]={workspaceId:t.id,workspaceDirName:t.dirName,locationId:t.locationId,incarnationId:t.incarnationId,canonicalProjectRoot:t.canonicalProjectRoot,canonicalRepoRoot:t.canonicalRepoRoot,storageRoot:t.storageRoot,repoIdentity:t.repoIdentity??null,gitCommonDir:t.gitCommonDir??null,gitObjectDir:t.gitObjectDir??null,remote:t.remote??null,branch:t.branch??null,commit:t.commit??null,updatedAt:new Date().toISOString()},B(n)}catch{}}function V(t){let n=g(t),r=F(n),e=r??n,o=r,i=m(e),c=J(e,o),u=m(c.fingerprint),a=`ws-${m(`${i}:${u}`)}`,f=G(e,a);if(!o)return{id:a,dirName:f,locationId:i,incarnationId:u,canonicalProjectRoot:n,canonicalRepoRoot:e,storageRoot:e,gitCommonDir:c.gitCommonDir,gitObjectDir:c.gitObjectDir,repoIdentity:null,remote:null,branch:null,commit:null};let d=j(o),I=d?H(d):null,E=I?L(I):null,O=d?z(d):{branch:null,commit:null};return{id:a,dirName:f,locationId:i,incarnationId:u,canonicalProjectRoot:n,canonicalRepoRoot:o,storageRoot:e,gitCommonDir:c.gitCommonDir,gitObjectDir:c.gitObjectDir,repoIdentity:E??`local:${m(e)}`,remote:I,branch:O.branch,commit:O.commit}}function K(t){let n=V(t);return X(n),s.join(D(),"workspaces",n.dirName)}function yt(t){return s.join(K(t),".pando-snapshots.db")}var h,k=S(()=>{"use strict";_();h=".pando-data"});k();import A from"fs";import x from"os";import b from"path";import{inspect as q}from"util";function v(){let t=process.env.PANDO_LOG_DIR||process.env.PANDO_WORKSPACE_DATA_DIR;if(t)return t;try{return D()}catch{let r=typeof x.homedir=="function"?x.homedir():process.env.HOME;if(r)return b.join(r,h)}let n=process.env.HOME||process.cwd();return b.join(n,h)}function Q(){return b.join(v(),"pando.log")}var y=t=>{if(t==null)return!1;let n=t.trim().toLowerCase();return n!=="0"&&n!=="false"&&n!=="off"&&n!=="no"},Y=y(process.env.PANDO_LOG_DISABLED),R=!Y&&(process.env.PANDO_DEBUG==null||y(process.env.PANDO_DEBUG)),Z=R&&(process.env.PANDO_INDEX_HOT_LOG==null||y(process.env.PANDO_INDEX_HOT_LOG)),tt=R&&(process.env.PANDO_INDEX_TIMING==null||y(process.env.PANDO_INDEX_TIMING)),nt=new Set(["BatchAnalysisScheduler","ClojureIndex","ClojureIndexer","ThreadedIndexer"]),rt=new Set(["IndexTiming"]);function et(){try{A.mkdirSync(v(),{recursive:!0})}catch{}}function ot(t){if(t!==void 0)try{return typeof t=="string"?t:q(t,{depth:null,breakLength:1/0,maxArrayLength:1/0})}catch{try{return JSON.stringify(t)}catch{return String(t)}}}var it=!1;function Pt(){return R}function st(t){return R?rt.has(t)?tt:!(!Z&&nt.has(t)):!1}function Nt(t,n,r){if(!st(t))return;let e=new Date().toISOString(),o=ot(r),i=o?`[${e}] [${t}] ${n} :: ${o}`:`[${e}] [${t}] ${n}`;if(!it&&!process.env.PANDO_QUIET)try{process.stderr.write(i+`
3
+ `)}catch{}try{et(),A.appendFileSync(Q(),i+`
4
+ `,"utf8")}catch{}}import{createHash as ct}from"crypto";var at=/^-?\d+$/,lt=(1n<<63n)-1n;function ut(t){let n=ct("sha1").update(t).digest(),r=0n;for(let e=0;e<8;e+=1)r=r<<8n|BigInt(n[e]);return r&lt}function xt(t){if(t==null)return null;if(typeof t=="bigint")return t;if(typeof t=="number"&&Number.isFinite(t))return BigInt(Math.trunc(t));if(typeof t=="string"){let n=t.trim();if(!n)return null;if(at.test(n))try{return BigInt(n)}catch{return null}return ut(n)}return null}export{K as a,yt as b,k as c,Pt as d,Nt as e,xt as f};
@@ -1 +1 @@
1
- import{a as B,b as L,c as q,d as R,e as C,f as z,i as F,j as N}from"./chunk-KXR6VCP4.mjs";import"./chunk-JWVMGEXN.mjs";import{c as X}from"./chunk-RRIZV7YJ.mjs";import{parentPort as l,threadId as ne}from"worker_threads";import K from"fs";import _ from"path";import{promises as G}from"fs";import H from"ignore";import{createHash as se}from"crypto";var te=Math.max(1,Number(process.env.PANDO_BATCH_INDEX_MAX_FILES||"64")),re=Math.max(1,Number(process.env.PANDO_BATCH_INDEX_MAX_BYTES||`${1024*1024}`)),ce=Math.max(1,Number(process.env.PANDO_BATCH_INDEX_MAX_WAIT_MS||"15")),le=Math.max(te,Number(process.env.PANDO_BATCH_INDEX_MAX_PENDING_FILES||"256")),he=Math.max(re,Number(process.env.PANDO_BATCH_INDEX_MAX_PENDING_BYTES||`${8*1024*1024}`));var be=1*1024*1024,Me=Math.max(3e4,Number(process.env.PANDO_WORKER_INIT_TIMEOUT_MS||12e4)),ie=Math.max(1e3,Number(process.env.PANDO_ACTIVE_CONTEXT_STALL_LOG_MS||1e4)),We=Math.max(ie,Number(process.env.PANDO_ACTIVE_CONTEXT_STALL_FAIL_MS||6e5)),Be=q();function U(e,t){return Buffer.from(e).toString(t)}function D(e,t,o,r,d,u){let m=Buffer.from(e),n=se("sha1").update(m).digest("hex"),i=u??m.toString(d),c=i?i.split(/\r?\n/).length:0;return{relPath:t,size:o,mtime:r,objectId:n,lineCount:c,encoding:d}}if(!l)throw new Error("Indexer worker must be spawned as a worker thread");X();function h(e,t){try{if(t===void 0){console.error(`[${new Date().toISOString()}] [IndexerWorker] ${e}`);return}console.error(`[${new Date().toISOString()}] [IndexerWorker] ${e} ${JSON.stringify({pid:process.pid,threadId:ne,...t&&typeof t=="object"&&!Array.isArray(t)?t:{details:t}})}`)}catch{}}h("module loaded",{cwd:process.cwd(),hasParentPort:!!l,envWorkerRoot:process.env.PANDO_WORKER_SCRIPT_DIR??null,envRuntimeRoot:process.env.PANDO_RUNTIME_ROOT??null});var J=new Map,E="",T="index",b=new Map,v=new Set;function Y(e,t){return _.relative(e,t).replace(/\\/g,"/")}function ae(e,t){let o=(t||[]).map(r=>typeof r=="string"?r.trim():"").filter(Boolean).map(r=>r.replace(/^[\\/]+/,"").replace(/[\\/]+$/,"")).map(r=>r.endsWith("/")?r:`${r}/`);return o.length?r=>{let d=Y(e,r);if(!d||d.startsWith(".."))return!1;let u=d.endsWith("/")?d:`${d}/`;return o.some(m=>u.startsWith(m))}:null}async function oe(e){await new Promise(t=>{b.set(e,t)})}l.on("message",async e=>{if(e.cmd==="scan-ack"){let t=b.get(e.requestId);if(t){b.delete(e.requestId);try{t()}catch{}}return}if(e.cmd==="scan-cancel"){v.add(e.requestId);let t=b.get(e.requestId);if(t){b.delete(e.requestId);try{t()}catch{}}return}if(e.cmd==="init"){try{h("init received",{mode:e.mode??"index",projectRoot:typeof e.projectRoot=="string"?e.projectRoot:null}),typeof e.projectRoot=="string"&&(E=e.projectRoot),T=e.mode??"index",h("init completed",{mode:T,projectRoot:E}),l.postMessage({type:"ready"})}catch(t){h("init failed",{error:t?.message||String(t),stack:t?.stack??null}),l.postMessage({type:"error",message:`init failed: ${t?.message||t}`,stack:t?.stack})}return}if(e.cmd==="scan"){let t=e.requestId,o=typeof e.projectRoot=="string"?e.projectRoot:E;if(h("scan received",{requestId:t,projectRoot:o||null,batchSize:e.batchSize??null,maxFileBytes:e.maxFileBytes??null,excludeDirs:Array.isArray(e.excludeDirs)?e.excludeDirs.slice(0,20):[]}),!o){l.postMessage({type:"error",requestId:t,message:"worker not initialized"});return}let r=Math.max(1,Math.min(500,Number(e.batchSize||100))),d=Math.max(1,Number(e.maxFileBytes||1*1024*1024)),u=e.languageSupport,m=z(u),n=ae(o,e.excludeDirs??[]),i=N(o),c=new Set(["node_modules",".git",".pando-data"]),S=a=>a.replace(/\\/g,"/"),w=await F(o,""),g=H().add(w),f=[{dir:o,relDir:"",rules:w,ig:g}],y=0,s=0,p=[],x=async()=>{p.length&&(l.postMessage({type:"scan:batch",requestId:t,files:p}),p=[],await oe(t))};try{for(;f.length&&!v.has(t);){let a=f.pop(),$=[];try{$=await G.readdir(a.dir,{withFileTypes:!0})}catch{s+=1;continue}for(let k of $){if(v.has(t))break;let I=_.join(a.dir,k.name);if(k.isSymbolicLink?.()){s+=1;continue}if(k.isDirectory()){if(c.has(k.name)){s+=1;continue}if(n?.(I)){s+=1;continue}let Q=a.relDir?`${a.relDir}/${k.name}`:k.name,W=S(Q);if(a.ig.ignores(W)&&!i?.hasDescendant(W)){s+=1;continue}let A=a.rules.slice(),j=await F(I,W);j.length&&A.push(...j);let Z=H().add(A);f.push({dir:I,relDir:W,rules:A,ig:Z});continue}if(!k.isFile()){s+=1;continue}if(n?.(I)){s+=1;continue}let P=Y(o,I);if(!P||P.startsWith("..")){s+=1;continue}if(a.ig.ignores(P)&&!i?.hasFile(P)){s+=1;continue}let V=_.extname(k.name).toLowerCase();if(!m.has(V)){s+=1;continue}let O=R(P);if(!O){s+=1;continue}let M;try{M=await G.stat(I)}catch{s+=1;continue}if(M.size>d){s+=1;continue}p.push({relPath:P,absPath:I,mtimeMs:Math.floor(M.mtimeMs),size:M.size,lang:O}),y+=1,p.length>=r&&await x()}}v.has(t)||await x(),l.postMessage({type:"scan:done",requestId:t,discovered:y,skipped:s,cancelled:v.has(t)}),h("scan complete",{requestId:t,discovered:y,skipped:s,cancelled:v.has(t)})}catch(a){h("scan failed",{requestId:t,error:a?.message||String(a),stack:a?.stack??null}),l.postMessage({type:"error",requestId:t,message:a?.message||String(a),stack:a?.stack})}finally{v.delete(t),b.delete(t)}return}if(e.cmd==="process"){let t=e.role??T,o=typeof e.projectRoot=="string"?e.projectRoot:E;if(!o){l.postMessage({type:"error",requestId:e.requestId,message:"worker not initialized"});return}let{file:r}=e,d=r.encoding??"utf8",u=r.sharedBuffer,m={size:r.size,mtime:r.mtime};try{let n=r.lang??"ts",i,c,S=()=>{if(c&&typeof i=="string")return{content:i,sharedBuffer:c};if(u instanceof SharedArrayBuffer)return c=u,i=U(u,d),{content:i,sharedBuffer:c};if(u instanceof ArrayBuffer){let x=Buffer.from(u),a=new SharedArrayBuffer(x.byteLength);return new Uint8Array(a).set(x),c=a,i=x.toString(d),{content:i,sharedBuffer:c}}let s=K.readFileSync(r.absPath),p=new SharedArrayBuffer(s.byteLength);return new Uint8Array(p).set(s),c=p,i=s.toString(d),{content:i,sharedBuffer:c}},w=()=>{let s=B(n,r.relPath,m),p=S();l.postMessage({type:"result",requestId:e.requestId,role:"index",relPath:r.relPath,result:{payload:s.payload,meta:{size:s.fileSize,mtime:s.mtime},snapshotSummary:D(p.sharedBuffer,r.relPath,r.size,r.mtime,d,p.content)}})},g=`${o}:${n}`,f=J.get(g);if(!f)try{h("creating language indexer",{role:t,requestId:e.requestId,lang:n,projectRoot:o});let s=C(n);if(!L(s))throw new Error(`${n} is not a worker-indexed language`);f=s.createIndexer(o),J.set(g,f),h("language indexer ready",{role:t,requestId:e.requestId,lang:n,projectRoot:o})}catch(s){h("language indexer create failed",{role:t,requestId:e.requestId,lang:n,error:s?.message||String(s),stack:s?.stack??null}),w();return}({content:i,sharedBuffer:c}=S());let y;try{y=await f.process({absPath:r.absPath,relPath:r.relPath,content:i,meta:m,preDeleted:!!r.preDeleted,lang:n,emitMode:r.emitMode})}catch(s){h("process failed",{role:t,requestId:e.requestId,lang:n,relPath:r.relPath,error:s?.message||String(s),stack:s?.stack??null}),w();return}l.postMessage({type:"result",requestId:e.requestId,role:"index",relPath:r.relPath,result:{payload:y.payload,meta:{size:y.fileSize,mtime:y.mtime},snapshotSummary:D(c,r.relPath,r.size,r.mtime,d,i)}})}catch(n){h("process wrapper failed",{role:t,requestId:e.requestId,relPath:r.relPath,error:n?.message||String(n),stack:n?.stack??null});try{let i=r.lang??"ts",c=K.readFileSync(r.absPath),S=new SharedArrayBuffer(c.byteLength);new Uint8Array(S).set(c);let w=c.toString(d),g=B(i,r.relPath,m);l.postMessage({type:"result",requestId:e.requestId,role:"index",relPath:r.relPath,result:{payload:g.payload,meta:{size:g.fileSize,mtime:g.mtime},snapshotSummary:D(S,r.relPath,r.size,r.mtime,d,w)}})}catch(i){l.postMessage({type:"error",requestId:e.requestId,message:i?.message||n?.message||String(i??n),stack:i?.stack??n?.stack})}}return}e.cmd==="close"&&l.postMessage({type:"closed"})});process.on("uncaughtException",e=>{try{l.postMessage({type:"error",message:e?.message||String(e),stack:e?.stack})}catch{}});process.on("unhandledRejection",e=>{try{l.postMessage({type:"error",message:String(e)})}catch{}});
1
+ import{a as B,b as L,c as q,d as R,e as C,f as z,i as F,j as N}from"./chunk-5PZD6HGD.mjs";import"./chunk-WHHZYOEJ.mjs";import{c as X}from"./chunk-RRIZV7YJ.mjs";import{parentPort as l,threadId as ne}from"worker_threads";import K from"fs";import _ from"path";import{promises as G}from"fs";import H from"ignore";import{createHash as se}from"crypto";var te=Math.max(1,Number(process.env.PANDO_BATCH_INDEX_MAX_FILES||"64")),re=Math.max(1,Number(process.env.PANDO_BATCH_INDEX_MAX_BYTES||`${1024*1024}`)),ce=Math.max(1,Number(process.env.PANDO_BATCH_INDEX_MAX_WAIT_MS||"15")),le=Math.max(te,Number(process.env.PANDO_BATCH_INDEX_MAX_PENDING_FILES||"256")),he=Math.max(re,Number(process.env.PANDO_BATCH_INDEX_MAX_PENDING_BYTES||`${8*1024*1024}`));var be=1*1024*1024,Me=Math.max(3e4,Number(process.env.PANDO_WORKER_INIT_TIMEOUT_MS||12e4)),ie=Math.max(1e3,Number(process.env.PANDO_ACTIVE_CONTEXT_STALL_LOG_MS||1e4)),We=Math.max(ie,Number(process.env.PANDO_ACTIVE_CONTEXT_STALL_FAIL_MS||6e5)),Be=q();function U(e,t){return Buffer.from(e).toString(t)}function D(e,t,o,r,d,u){let m=Buffer.from(e),n=se("sha1").update(m).digest("hex"),i=u??m.toString(d),c=i?i.split(/\r?\n/).length:0;return{relPath:t,size:o,mtime:r,objectId:n,lineCount:c,encoding:d}}if(!l)throw new Error("Indexer worker must be spawned as a worker thread");X();function h(e,t){try{if(t===void 0){console.error(`[${new Date().toISOString()}] [IndexerWorker] ${e}`);return}console.error(`[${new Date().toISOString()}] [IndexerWorker] ${e} ${JSON.stringify({pid:process.pid,threadId:ne,...t&&typeof t=="object"&&!Array.isArray(t)?t:{details:t}})}`)}catch{}}h("module loaded",{cwd:process.cwd(),hasParentPort:!!l,envWorkerRoot:process.env.PANDO_WORKER_SCRIPT_DIR??null,envRuntimeRoot:process.env.PANDO_RUNTIME_ROOT??null});var J=new Map,E="",T="index",b=new Map,v=new Set;function Y(e,t){return _.relative(e,t).replace(/\\/g,"/")}function ae(e,t){let o=(t||[]).map(r=>typeof r=="string"?r.trim():"").filter(Boolean).map(r=>r.replace(/^[\\/]+/,"").replace(/[\\/]+$/,"")).map(r=>r.endsWith("/")?r:`${r}/`);return o.length?r=>{let d=Y(e,r);if(!d||d.startsWith(".."))return!1;let u=d.endsWith("/")?d:`${d}/`;return o.some(m=>u.startsWith(m))}:null}async function oe(e){await new Promise(t=>{b.set(e,t)})}l.on("message",async e=>{if(e.cmd==="scan-ack"){let t=b.get(e.requestId);if(t){b.delete(e.requestId);try{t()}catch{}}return}if(e.cmd==="scan-cancel"){v.add(e.requestId);let t=b.get(e.requestId);if(t){b.delete(e.requestId);try{t()}catch{}}return}if(e.cmd==="init"){try{h("init received",{mode:e.mode??"index",projectRoot:typeof e.projectRoot=="string"?e.projectRoot:null}),typeof e.projectRoot=="string"&&(E=e.projectRoot),T=e.mode??"index",h("init completed",{mode:T,projectRoot:E}),l.postMessage({type:"ready"})}catch(t){h("init failed",{error:t?.message||String(t),stack:t?.stack??null}),l.postMessage({type:"error",message:`init failed: ${t?.message||t}`,stack:t?.stack})}return}if(e.cmd==="scan"){let t=e.requestId,o=typeof e.projectRoot=="string"?e.projectRoot:E;if(h("scan received",{requestId:t,projectRoot:o||null,batchSize:e.batchSize??null,maxFileBytes:e.maxFileBytes??null,excludeDirs:Array.isArray(e.excludeDirs)?e.excludeDirs.slice(0,20):[]}),!o){l.postMessage({type:"error",requestId:t,message:"worker not initialized"});return}let r=Math.max(1,Math.min(500,Number(e.batchSize||100))),d=Math.max(1,Number(e.maxFileBytes||1*1024*1024)),u=e.languageSupport,m=z(u),n=ae(o,e.excludeDirs??[]),i=N(o),c=new Set(["node_modules",".git",".pando-data"]),S=a=>a.replace(/\\/g,"/"),w=await F(o,""),g=H().add(w),f=[{dir:o,relDir:"",rules:w,ig:g}],y=0,s=0,p=[],x=async()=>{p.length&&(l.postMessage({type:"scan:batch",requestId:t,files:p}),p=[],await oe(t))};try{for(;f.length&&!v.has(t);){let a=f.pop(),$=[];try{$=await G.readdir(a.dir,{withFileTypes:!0})}catch{s+=1;continue}for(let k of $){if(v.has(t))break;let I=_.join(a.dir,k.name);if(k.isSymbolicLink?.()){s+=1;continue}if(k.isDirectory()){if(c.has(k.name)){s+=1;continue}if(n?.(I)){s+=1;continue}let Q=a.relDir?`${a.relDir}/${k.name}`:k.name,W=S(Q);if(a.ig.ignores(W)&&!i?.hasDescendant(W)){s+=1;continue}let A=a.rules.slice(),j=await F(I,W);j.length&&A.push(...j);let Z=H().add(A);f.push({dir:I,relDir:W,rules:A,ig:Z});continue}if(!k.isFile()){s+=1;continue}if(n?.(I)){s+=1;continue}let P=Y(o,I);if(!P||P.startsWith("..")){s+=1;continue}if(a.ig.ignores(P)&&!i?.hasFile(P)){s+=1;continue}let V=_.extname(k.name).toLowerCase();if(!m.has(V)){s+=1;continue}let O=R(P);if(!O){s+=1;continue}let M;try{M=await G.stat(I)}catch{s+=1;continue}if(M.size>d){s+=1;continue}p.push({relPath:P,absPath:I,mtimeMs:Math.floor(M.mtimeMs),size:M.size,lang:O}),y+=1,p.length>=r&&await x()}}v.has(t)||await x(),l.postMessage({type:"scan:done",requestId:t,discovered:y,skipped:s,cancelled:v.has(t)}),h("scan complete",{requestId:t,discovered:y,skipped:s,cancelled:v.has(t)})}catch(a){h("scan failed",{requestId:t,error:a?.message||String(a),stack:a?.stack??null}),l.postMessage({type:"error",requestId:t,message:a?.message||String(a),stack:a?.stack})}finally{v.delete(t),b.delete(t)}return}if(e.cmd==="process"){let t=e.role??T,o=typeof e.projectRoot=="string"?e.projectRoot:E;if(!o){l.postMessage({type:"error",requestId:e.requestId,message:"worker not initialized"});return}let{file:r}=e,d=r.encoding??"utf8",u=r.sharedBuffer,m={size:r.size,mtime:r.mtime};try{let n=r.lang??"ts",i,c,S=()=>{if(c&&typeof i=="string")return{content:i,sharedBuffer:c};if(u instanceof SharedArrayBuffer)return c=u,i=U(u,d),{content:i,sharedBuffer:c};if(u instanceof ArrayBuffer){let x=Buffer.from(u),a=new SharedArrayBuffer(x.byteLength);return new Uint8Array(a).set(x),c=a,i=x.toString(d),{content:i,sharedBuffer:c}}let s=K.readFileSync(r.absPath),p=new SharedArrayBuffer(s.byteLength);return new Uint8Array(p).set(s),c=p,i=s.toString(d),{content:i,sharedBuffer:c}},w=()=>{let s=B(n,r.relPath,m),p=S();l.postMessage({type:"result",requestId:e.requestId,role:"index",relPath:r.relPath,result:{payload:s.payload,meta:{size:s.fileSize,mtime:s.mtime},snapshotSummary:D(p.sharedBuffer,r.relPath,r.size,r.mtime,d,p.content)}})},g=`${o}:${n}`,f=J.get(g);if(!f)try{h("creating language indexer",{role:t,requestId:e.requestId,lang:n,projectRoot:o});let s=C(n);if(!L(s))throw new Error(`${n} is not a worker-indexed language`);f=s.createIndexer(o),J.set(g,f),h("language indexer ready",{role:t,requestId:e.requestId,lang:n,projectRoot:o})}catch(s){h("language indexer create failed",{role:t,requestId:e.requestId,lang:n,error:s?.message||String(s),stack:s?.stack??null}),w();return}({content:i,sharedBuffer:c}=S());let y;try{y=await f.process({absPath:r.absPath,relPath:r.relPath,content:i,meta:m,preDeleted:!!r.preDeleted,lang:n,emitMode:r.emitMode})}catch(s){h("process failed",{role:t,requestId:e.requestId,lang:n,relPath:r.relPath,error:s?.message||String(s),stack:s?.stack??null}),w();return}l.postMessage({type:"result",requestId:e.requestId,role:"index",relPath:r.relPath,result:{payload:y.payload,meta:{size:y.fileSize,mtime:y.mtime},snapshotSummary:D(c,r.relPath,r.size,r.mtime,d,i)}})}catch(n){h("process wrapper failed",{role:t,requestId:e.requestId,relPath:r.relPath,error:n?.message||String(n),stack:n?.stack??null});try{let i=r.lang??"ts",c=K.readFileSync(r.absPath),S=new SharedArrayBuffer(c.byteLength);new Uint8Array(S).set(c);let w=c.toString(d),g=B(i,r.relPath,m);l.postMessage({type:"result",requestId:e.requestId,role:"index",relPath:r.relPath,result:{payload:g.payload,meta:{size:g.fileSize,mtime:g.mtime},snapshotSummary:D(S,r.relPath,r.size,r.mtime,d,w)}})}catch(i){l.postMessage({type:"error",requestId:e.requestId,message:i?.message||n?.message||String(i??n),stack:i?.stack??n?.stack})}}return}e.cmd==="close"&&l.postMessage({type:"closed"})});process.on("uncaughtException",e=>{try{l.postMessage({type:"error",message:e?.message||String(e),stack:e?.stack})}catch{}});process.on("unhandledRejection",e=>{try{l.postMessage({type:"error",message:String(e)})}catch{}});
@@ -1,10 +1,10 @@
1
- import{g as P,h as J,j as ot}from"./chunk-KXR6VCP4.mjs";import{a as V,b as st,c as K,e as R}from"./chunk-JWVMGEXN.mjs";import{a as Q,b as xt}from"./chunk-MKW3R262.mjs";import{a as Et,c as at}from"./chunk-RRIZV7YJ.mjs";import{parentPort as $}from"worker_threads";import it from"path";import*as o from"fs";import*as I from"path";import*as g from"isomorphic-git";function Pt(){return new Date().toISOString()}function U(r,t,e){let i=`[${Pt()}] [${r.toUpperCase()}] ${t}`;if(!e)return i;try{return i+" "+JSON.stringify(e)}catch{return i}}var B={debug:(r,t)=>{try{process.stderr.write(U("debug",r,t)+`
2
- `)}catch{}},info:(r,t)=>{try{process.stderr.write(U("info",r,t)+`
3
- `)}catch{}},warn:(r,t)=>{try{process.stderr.write(U("warn",r,t)+`
4
- `)}catch{}},error:(r,t)=>{try{process.stderr.write(U("error",r,t)+`
5
- `)}catch{}}};import{execFileSync as v}from"child_process";K();import*as Z from"path";function ct(r){let t=V(r);return{root:t,historyGit:Z.join(t,"history.git"),workdir:Z.join(t,"workdir")}}function u(r,t){try{B.info(r,t)}catch{}}function lt(r,t){try{B.warn(r,t)}catch{}}var _=class{constructor(t){this.repoDir=t;this.stack=[{name:"",entries:[],dirNames:new Set,fileNames:new Set}]}currentDirs(){return this.stack.slice(1).map(t=>t.name)}lcpLen(t,e){let i=0;for(;i<t.length&&i<e.length&&t[i]===e[i];)i++;return i}async flushTop(){if(this.stack.length<=1)return;let t=this.stack.pop();t.entries.sort((n,s)=>n.path.localeCompare(s.path));let e=await g.writeTree({fs:o,dir:this.repoDir,tree:t.entries}),i=this.stack[this.stack.length-1];i.entries.push({mode:"040000",path:t.name,oid:e,type:"tree"}),i.dirNames.add(t.name)}async addFile(t,e){let i=t.replace(/^\.\//,"").replace(/\\/g,"/"),n=i.split("/").filter(Boolean);if(!n.length)return;let s=n.slice(0,-1),a=n[n.length-1],p=this.currentDirs(),y=this.lcpLen(p,s);for(let m=p.length;m>y;m--)await this.flushTop();for(let m=y;m<s.length;m++){let f=s[m];if(this.stack[this.stack.length-1].fileNames.has(f))throw new Error(`Path conflict: file exists where directory expected: ${s.slice(0,m+1).join("/")}`);this.stack.push({name:f,entries:[],dirNames:new Set,fileNames:new Set})}let w=this.stack[this.stack.length-1];if(w.dirNames.has(a))throw new Error(`Path conflict: directory exists where file expected: ${i}`);w.entries.push({mode:"100644",path:a,oid:e,type:"blob"}),w.fileNames.add(a)}async finish(){for(;this.stack.length>1;)await this.flushTop();let t=this.stack[0];return t.entries.sort((e,i)=>e.path.localeCompare(i.path)),g.writeTree({fs:o,dir:this.repoDir,tree:t.entries})}},L=class{constructor(t){this.baseDir=t.baseDir;let e=ct(t.shadowDir??t.baseDir);this.repoDir=I.join(e.root,"history")}async ensureInitialized(){o.mkdirSync(this.repoDir,{recursive:!0});let t=I.join(this.repoDir,".git");if(o.existsSync(t)){await this.ensureDefaultGitignore();return}let e=I.join(this.repoDir,".init.lock"),i=s=>new Promise(a=>setTimeout(a,s)),n=null;try{try{n=o.openSync(e,"wx"),o.writeFileSync(n,String(Date.now()))}catch{let s=Date.now(),a=3e4;for(;!o.existsSync(t);){try{let p=o.statSync(e);if(Date.now()-p.mtimeMs>a){try{o.unlinkSync(e)}catch{}break}}catch{}if(Date.now()-s>a)break;await i(200)}if(o.existsSync(t))return;n=o.openSync(e,"wx"),o.writeFileSync(n,String(Date.now()))}if(o.existsSync(t))return;u(`[${new Date().toISOString()}] [GitHistoryStore] Initializing history repo at ${this.repoDir}`),await g.init({fs:o,dir:this.repoDir}),u(`[${new Date().toISOString()}] [GitHistoryStore] git.init OK`),await g.setConfig({fs:o,dir:this.repoDir,path:"user.name",value:"ast-db"}),await g.setConfig({fs:o,dir:this.repoDir,path:"user.email",value:"ast-db@example.com"}),u(`[${new Date().toISOString()}] [GitHistoryStore] git config set (user.name/user.email)`),o.writeFileSync(I.join(this.repoDir,".gitignore"),`# ast history repo
6
- `),u(`[${new Date().toISOString()}] [GitHistoryStore] wrote .gitignore`)}finally{try{n!=null&&o.closeSync(n)}catch{}try{o.existsSync(e)&&o.unlinkSync(e)}catch{}}await this.ensureDefaultGitignore()}async ensureDefaultGitignore(){let t=I.join(this.repoDir,".gitignore");if(!o.existsSync(t))try{o.mkdirSync(I.dirname(t),{recursive:!0}),o.writeFileSync(t,`# ast history repo
7
- `,"utf8");try{await g.add({fs:o,dir:this.repoDir,filepath:".gitignore"})}catch{}u(`[GitHistoryStore] restored missing .gitignore at ${t}`)}catch(e){lt(`[GitHistoryStore] failed to recreate .gitignore: ${e?.message||e}`)}}normalizeLogicalPath(t){return String(t||"").replace(/\\/g,"/").replace(/^(?:\.\/)+/,"").replace(/^\/+/,"")}gitExists(){try{return v("git",["--version"],{cwd:this.repoDir,stdio:"ignore"}),!0}catch{return!1}}createSnapshotNative(t,e,i,n){let a=(typeof i=="string"?i.match(/^AST-Restore-Trace-Id:\s*(.+)$/m):null)?.[1]?.trim()||null,p=e;if(!p)try{p=v("git",["rev-parse","HEAD"],{cwd:this.repoDir,encoding:"utf8"}).trim()}catch{p=void 0}let y=new Map,w=Date.now();try{u("[GitHistoryStore] native snapshot start",{traceId:a,repoDir:this.repoDir,memberCount:t.length,parentOid:p||null})}catch{}for(let l=0;l<t.length;l++){let h=t[l];if(h.content==null)throw new Error(`Direct snapshot requires content for ${h.logicalPath}`);let S=Buffer.isBuffer(h.content)?h.content:Buffer.from(h.content),c=this.normalizeLogicalPath(h.logicalPath);if(!c)throw new Error("Direct snapshot requires non-empty logicalPath");let d=Date.now();try{u("[GitHistoryStore] native hash-object start",{traceId:a,repoDir:this.repoDir,index:l+1,total:t.length,logicalPath:c,bytes:S.length})}catch{}let D;try{D=v("git",["hash-object","-w","--stdin"],{cwd:this.repoDir,input:S}).toString("utf8").trim()}catch(T){try{lt("[GitHistoryStore] native hash-object failed",{traceId:a,repoDir:this.repoDir,index:l+1,total:t.length,logicalPath:c,bytes:S.length,durationMs:Date.now()-d,message:T?.message||String(T),status:T?.status??null,signal:T?.signal??null,stdout:T?.stdout?String(T.stdout).slice(0,500):null,stderr:T?.stderr?String(T.stderr).slice(0,500):null})}catch{}throw T}let E=Date.now()-d;try{(E>1e3||l<3||l===t.length-1)&&u("[GitHistoryStore] native hash-object done",{traceId:a,repoDir:this.repoDir,index:l+1,total:t.length,logicalPath:c,bytes:S.length,durationMs:E,oid:D})}catch{}y.set(c,D)}try{u("[GitHistoryStore] native hash-object phase complete",{traceId:a,repoDir:this.repoDir,memberCount:t.length,durationMs:Date.now()-w})}catch{}let m=I.join(this.repoDir,`.pando-index-${process.pid}-${Date.now()}`),f={...process.env,GIT_INDEX_FILE:m};try{let l=Date.now();try{u("[GitHistoryStore] native read-tree begin",{traceId:a,repoDir:this.repoDir,tmpIndex:m})}catch{}v("git",["read-tree","--empty"],{cwd:this.repoDir,env:f});try{u("[GitHistoryStore] native read-tree complete",{traceId:a,repoDir:this.repoDir,durationMs:Date.now()-l})}catch{}let h=Array.from(y.keys()).sort((C,k)=>C.localeCompare(k)),S=Date.now();for(let C of h){let k=y.get(C);v("git",["update-index","--add","--cacheinfo","100644",k,C],{cwd:this.repoDir,env:f})}try{u("[GitHistoryStore] native update-index complete",{traceId:a,repoDir:this.repoDir,entryCount:h.length,durationMs:Date.now()-S})}catch{}let c=Date.now();try{u("[GitHistoryStore] native write-tree begin",{traceId:a,repoDir:this.repoDir,entryCount:h.length})}catch{}let d=v("git",["write-tree"],{cwd:this.repoDir,env:f}).toString("utf8").trim();try{u("[GitHistoryStore] native write-tree complete",{traceId:a,repoDir:this.repoDir,treeOid:d,durationMs:Date.now()-c})}catch{}let D=["commit-tree",d];p&&D.push("-p",p),i&&D.push("-m",i);let E=Date.now();try{u("[GitHistoryStore] native commit-tree begin",{traceId:a,repoDir:this.repoDir,treeOid:d,parentOid:p||null})}catch{}let T=v("git",D,{cwd:this.repoDir}).toString("utf8").trim();try{u("[GitHistoryStore] native commit-tree complete",{traceId:a,repoDir:this.repoDir,commitOid:T,durationMs:Date.now()-E})}catch{}let j=Date.now();try{u("[GitHistoryStore] native update-ref begin",{traceId:a,repoDir:this.repoDir,commitOid:T})}catch{}v("git",["update-ref","refs/heads/master",T],{cwd:this.repoDir});try{u("[GitHistoryStore] native update-ref complete",{traceId:a,repoDir:this.repoDir,commitOid:T,durationMs:Date.now()-j})}catch{}return{snapshotId:T,parent:p}}finally{try{o.unlinkSync(m)}catch{}try{o.unlinkSync(`${m}.lock`)}catch{}}}async readObject(t){let{object:e}=await g.readObject({fs:o,dir:this.repoDir,oid:t});return Buffer.from(e)}async hasObject(t){try{return await g.readObject({fs:o,dir:this.repoDir,oid:t}),!0}catch{return!1}}async createSnapshot(t,e){P(e,"Snapshot cancelled"),await this.ensureInitialized(),u(`[${new Date().toISOString()}] [GitHistoryStore] Creating snapshot (streaming) with ${t.members.length} members`);let i=[...t.members].map(b=>({...b,logicalPath:this.normalizeLogicalPath(b.logicalPath)})).filter(b=>!!b.logicalPath).sort((b,x)=>b.logicalPath.localeCompare(x.logicalPath)),n=this.gitExists()&&!e;try{n?B.info("[GitHistoryStore] Using native git snapshot path",{members:i.length}):B.info("[GitHistoryStore] Using JS snapshot path",{members:i.length,git:!1,cancellable:!!e})}catch{}if(n)try{return this.createSnapshotNative(i,t.parent,t.message,t.when).snapshotId}catch(b){try{B.warn(`[GitHistoryStore] Native git path failed; falling back to JS path: ${b?.message||b}`)}catch{}}let s=Date.now(),a=b=>b.toString("hex"),p=b=>Et("crypto").createHash("sha1").update(b).digest(),y=b=>{let x=Buffer.from(`blob ${b.length}\0`,"utf8"),A=Buffer.concat([x,b]);return a(p(A))},w=Math.max(1,Math.min(64,Number(process.env.SNAPSHOT_BLOB_CONCURRENCY||16))),m=String(process.env.SNAPSHOT_PRECOMPUTE_OIDS||"1")!=="0";try{B.info("[GitHistoryStore] JS snapshot settings",{SNAPSHOT_BLOB_CONCURRENCY:w,SNAPSHOT_PRECOMPUTE_OIDS:m})}catch{}let f=new Map,l=0,h=0,S=0,c=i.map(b=>({path:b.logicalPath,buf:Buffer.isBuffer(b.content)?b.content:Buffer.from(b.content)})),d=async()=>{for(;;){P(e,"Snapshot cancelled");let b;if(l<c.length)b=c[l++];else break;let x;if(m)try{let A=y(b.buf);await this.hasObject(A)&&(x=A,S++)}catch{}if(x||(x=await g.writeBlob({fs:o,dir:this.repoDir,blob:b.buf}),h++),P(e,"Snapshot cancelled"),!x)throw new Error("Failed to compute blob object id");f.set(b.path,x)}},D=Array.from({length:Math.min(w,c.length)},()=>d());await Promise.all(D),P(e,"Snapshot cancelled"),u(`[GitHistoryStore] Blobs ready wrote=${h} skipped=${S} in ${Date.now()-s}ms`);let E=new _(this.repoDir),T=Array.from(f.keys()).sort((b,x)=>b.localeCompare(x));for(let b of T)P(e,"Snapshot cancelled"),await E.addFile(b,f.get(b));P(e,"Snapshot cancelled");let j=Date.now(),C=await E.finish();u(`[GitHistoryStore] Wrote tree(s). root=${C} in ${Date.now()-j}ms`);let k=t.parent;if(!k)try{k=await g.resolveRef({fs:o,dir:this.repoDir,ref:"HEAD"})}catch{}P(e,"Snapshot cancelled");let N=t.when?Math.floor(t.when/1e3):Math.floor(Date.now()/1e3),G=new Date(N*1e3).getTimezoneOffset(),F=await g.commit({fs:o,dir:this.repoDir,message:t.message,parent:k?[k]:[],tree:C,author:{name:"ast-db",email:"ast-db@example.com",timestamp:N,timezoneOffset:G},committer:{name:"ast-db",email:"ast-db@example.com",timestamp:N,timezoneOffset:G}});return await g.writeRef({fs:o,dir:this.repoDir,ref:"refs/heads/master",value:F,force:!0}),u(`[GitHistoryStore] Snapshot commit oid ${F}`),F}async listSnapshotMembers(t){await this.ensureInitialized();let e=s=>Math.round((s||0)/(1024*1024)),i=()=>{let s=process.memoryUsage();return`rss=${e(s.rss)}MB heapUsed=${e(s.heapUsed)}MB heapTotal=${e(s.heapTotal)}MB`},n=[];return u(`[${new Date().toISOString()}] [GitHistoryStore] listSnapshotMembers(${t}) start (${i()})`),await g.walk({fs:o,dir:this.repoDir,trees:[g.TREE({ref:t})],map:async(s,[a])=>{if(!a)return;if(await a.type()==="blob"){let y=await a.oid();n.push({logicalPath:s,objectId:y})}}}),u(`[${new Date().toISOString()}] [GitHistoryStore] listSnapshotMembers(${t}) -> ${n.length} blobs`),n.filter(s=>s.logicalPath&&s.logicalPath!==".").map(s=>({logicalPath:s.logicalPath.replace(/^\.\//,""),objectId:s.objectId}))}async readCommit(t){let{commit:e}=await g.readCommit({fs:o,dir:this.repoDir,oid:t});return{message:e.message,committer:e.committer}}async readCommitParent(t){let{commit:e}=await g.readCommit({fs:o,dir:this.repoDir,oid:t});return Array.isArray(e.parent)&&e.parent.length>0?String(e.parent[0]):void 0}async createSnapshotFromDisk(t,e){P(e,"Snapshot cancelled"),await this.ensureInitialized(),u(`[${new Date().toISOString()}] [GitHistoryStore] Creating snapshot from disk (streaming) with ${t.relPaths.length} members`);let i=[...t.relPaths].map(h=>this.normalizeLogicalPath(h)).filter(Boolean).sort((h,S)=>h.localeCompare(S)),n=Date.now(),s=new _(this.repoDir),a=0;for(let h of i){P(e,"Snapshot cancelled");let S=I.join(this.baseDir,h);try{let c=o.readFileSync(S),d=await g.writeBlob({fs:o,dir:this.repoDir,blob:c});await s.addFile(h,d),a++}catch{}}u(`[GitHistoryStore] Wrote ${a} blobs (disk) in ${Date.now()-n}ms`),P(e,"Snapshot cancelled");let p=Date.now(),y=await s.finish();u(`[GitHistoryStore] Wrote tree(s) (disk). root=${y} in ${Date.now()-p}ms`);let w=t.parent;if(!w)try{w=await g.resolveRef({fs:o,dir:this.repoDir,ref:"HEAD"})}catch{}P(e,"Snapshot cancelled");let m=t.when?Math.floor(t.when/1e3):Math.floor(Date.now()/1e3),f=new Date(m*1e3).getTimezoneOffset(),l=await g.commit({fs:o,dir:this.repoDir,message:t.message,parent:w?[w]:[],tree:y,author:{name:"ast-db",email:"ast-db@example.com",timestamp:m,timezoneOffset:f},committer:{name:"ast-db",email:"ast-db@example.com",timestamp:m,timezoneOffset:f}});return await g.writeRef({fs:o,dir:this.repoDir,ref:"refs/heads/master",value:l,force:!0}),u(`[GitHistoryStore] Snapshot commit oid ${l}`),l}async createSnapshotFromDiskAndCapturedIfChanged(t){await this.ensureInitialized();let e=new Map;for(let c of t.capturedMembers||[]){let d=this.normalizeLogicalPath(c.logicalPath);!d||c.content==null||e.has(d)||e.set(d,Buffer.isBuffer(c.content)?c.content:Buffer.from(c.content))}u(`[${new Date().toISOString()}] [GitHistoryStore] Creating snapshot from disk+captured (diff) with ${t.relPaths.length} members, captured=${e.size}`);let i=[...t.relPaths].map(c=>this.normalizeLogicalPath(c)).filter(Boolean).sort((c,d)=>c.localeCompare(d)),n=Date.now(),s=new _(this.repoDir),a=0,p=0,y=0;for(let c of i)try{let d=e.get(c),D=d??o.readFileSync(I.join(this.baseDir,c)),E=await g.writeBlob({fs:o,dir:this.repoDir,blob:D});await s.addFile(c,E),a++,d?p++:y++}catch{}u(`[GitHistoryStore] Wrote ${a} blobs (captured=${p}, disk=${y}) in ${Date.now()-n}ms`);let w=Date.now(),m=await s.finish();u(`[GitHistoryStore] Wrote tree(s) (disk+captured). root=${m} in ${Date.now()-w}ms`);let f=t.parent;if(!f)try{f=await g.resolveRef({fs:o,dir:this.repoDir,ref:"HEAD"})}catch{}if(f)try{let{commit:c}=await g.readCommit({fs:o,dir:this.repoDir,oid:f});if(c?.tree===m){u("[GitHistoryStore] Snapshot identical to parent; skipping commit",{parentOid:f,tree:m});let d=await this.readCommitParent(f);return{snapshotId:f,identical:!0,parent:d}}}catch(c){u("[GitHistoryStore] Parent read failed; proceeding with commit",{error:c?.message||String(c)})}let l=t.when?Math.floor(t.when/1e3):Math.floor(Date.now()/1e3),h=new Date(l*1e3).getTimezoneOffset(),S=await g.commit({fs:o,dir:this.repoDir,message:t.message,parent:f?[f]:[],tree:m,author:{name:"ast-db",email:"ast-db@example.com",timestamp:l,timezoneOffset:h},committer:{name:"ast-db",email:"ast-db@example.com",timestamp:l,timezoneOffset:h}});return await g.writeRef({fs:o,dir:this.repoDir,ref:"refs/heads/master",value:S,force:!0}),u(`[GitHistoryStore] Snapshot commit oid ${S}`),{snapshotId:S,identical:!1,parent:f}}async createSnapshotFromDiskIfChanged(t){await this.ensureInitialized(),u(`[${new Date().toISOString()}] [GitHistoryStore] Creating snapshot from disk (diff) with ${t.relPaths.length} members`);let e=[...t.relPaths].map(l=>this.normalizeLogicalPath(l)).filter(Boolean).sort((l,h)=>l.localeCompare(h)),i=Date.now(),n=new _(this.repoDir),s=0;for(let l of e){let h=I.join(this.baseDir,l);try{let S=o.readFileSync(h),c=await g.writeBlob({fs:o,dir:this.repoDir,blob:S});await n.addFile(l,c),s++}catch{}}u(`[GitHistoryStore] Wrote ${s} blobs (disk) in ${Date.now()-i}ms`);let a=Date.now(),p=await n.finish();u(`[GitHistoryStore] Wrote tree(s) (disk). root=${p} in ${Date.now()-a}ms`);let y=t.parent;if(!y)try{y=await g.resolveRef({fs:o,dir:this.repoDir,ref:"HEAD"})}catch{}if(y)try{let{commit:l}=await g.readCommit({fs:o,dir:this.repoDir,oid:y});if(l?.tree===p){u("[GitHistoryStore] Snapshot identical to parent; skipping commit",{parentOid:y,tree:p});let h=await this.readCommitParent(y);return{snapshotId:y,identical:!0,parent:h}}}catch(l){u("[GitHistoryStore] Parent read failed; proceeding with commit",{error:l?.message||String(l)})}let w=t.when?Math.floor(t.when/1e3):Math.floor(Date.now()/1e3),m=new Date(w*1e3).getTimezoneOffset(),f=await g.commit({fs:o,dir:this.repoDir,message:t.message,parent:y?[y]:[],tree:p,author:{name:"ast-db",email:"ast-db@example.com",timestamp:w,timezoneOffset:m},committer:{name:"ast-db",email:"ast-db@example.com",timestamp:w,timezoneOffset:m}});return await g.writeRef({fs:o,dir:this.repoDir,ref:"refs/heads/master",value:f,force:!0}),u(`[GitHistoryStore] Snapshot commit oid ${f}`),{snapshotId:f,identical:!1,parent:y}}};function q(r){let t={},e=r.split(/\r?\n/);for(let i of e){let n=i.match(/^([A-Za-z0-9-]+):\s*(.*)$/);n&&(t[n[1]]=n[2])}return t}import It from"fs";import H from"path";import ht from"ignore";import{Project as Qt}from"ts-morph";var Mt=new Set(["node_modules",".git",".pando-data"]);function kt(r){let t=tt(r).split("/").filter(Boolean);for(let e=0;e<t.length;e+=1)if(Mt.has(t[e])||t[e]===".clj-kondo"&&t[e+1]===".cache")return!0;return!1}function dt(r,t){if(!t?.length)return null;let e=t.map(n=>n.replace(/^\/+/,"").replace(/\/+$/,"")).filter(Boolean).map(n=>`${n}/`);if(!e.length)return null;let i=n=>n.replace(/\\/g,"/");return n=>{let s=i(H.relative(r,n));if(!s||s.startsWith(".."))return!1;let a=s.endsWith("/")?s:`${s}/`;return e.some(p=>a.startsWith(p))}}function pt(r,t){return Ot(r,t,null)}function Ot(r,t,e){let i=t?.shouldExclude||null,n=[],s=H.resolve(t?.gitignoreRoot??r),a=ot(s),p=J(s,""),y=ht().add(p),w=[{dir:r,relDir:"",rules:p,ig:y}];for(;w.length;){let m=w.pop(),f=[];try{f=It.readdirSync(m.dir,{withFileTypes:!0})}catch{continue}for(let l of f){let h=H.join(m.dir,l.name);if(!(typeof l.isSymbolicLink=="function"&&l.isSymbolicLink())&&!kt(h)){if(l.isDirectory()){if(i?.(h))continue;let c=m.relDir?`${m.relDir}/${l.name}`:l.name,d=tt(c);if(m.ig.ignores(d)&&!a?.hasDescendant(d))continue;let D=m.rules.slice(),E=J(h,d);E.length&&D.push(...E);let T=E.length?ht().add(D):m.ig;w.push({dir:h,relDir:d,rules:D,ig:T})}else if(l.isFile()){if(i?.(h))continue;let c=tt(H.relative(r,h));if(m.ig.ignores(c)&&!a?.hasFile(c))continue;if(e===null)n.push(h);else{let d=H.extname(l.name).toLowerCase();e.has(d)&&n.push(h)}}}}}return n}function tt(r){return r.replace(/\\/g,"/")}K();xt();K();import et from"fs";import Ct from"path";function gt(r){r.pragma("journal_mode = WAL"),r.pragma("synchronous = NORMAL"),r.pragma("busy_timeout = 10000");try{r.pragma("temp_store = MEMORY")}catch{}r.exec(`
1
+ import{g as I,h as Q,j as ct}from"./chunk-5PZD6HGD.mjs";import{a as V,b as at,c as J,e as R}from"./chunk-WHHZYOEJ.mjs";import{a as Z,b as Pt}from"./chunk-MKW3R262.mjs";import{a as kt,c as lt}from"./chunk-RRIZV7YJ.mjs";import{parentPort as j}from"worker_threads";import st from"path";import*as o from"fs";import*as M from"path";import*as u from"isomorphic-git";function xt(){return new Date().toISOString()}function X(r,t,e){let n=`[${xt()}] [${r.toUpperCase()}] ${t}`;if(!e)return n;try{return n+" "+JSON.stringify(e)}catch{return n}}var B={debug:(r,t)=>{try{process.stderr.write(X("debug",r,t)+`
2
+ `)}catch{}},info:(r,t)=>{try{process.stderr.write(X("info",r,t)+`
3
+ `)}catch{}},warn:(r,t)=>{try{process.stderr.write(X("warn",r,t)+`
4
+ `)}catch{}},error:(r,t)=>{try{process.stderr.write(X("error",r,t)+`
5
+ `)}catch{}}};import{execFileSync as v}from"child_process";J();import*as q from"path";function dt(r){let t=V(r);return{root:t,historyGit:q.join(t,"history.git"),workdir:q.join(t,"workdir")}}function y(r,t){try{B.info(r,t)}catch{}}function ht(r,t){try{B.warn(r,t)}catch{}}function tt(r,t="100644"){let e=String(r??"").trim();if(e==="100644"||e==="100755"||e==="120000")return e;let n=typeof r=="number"?r:Number.NaN;return n===33261||n===33261?"100755":n===40960||n===40960?"120000":n===33188||n===33188?"100644":t}var N=class{constructor(t){this.repoDir=t;this.stack=[{name:"",entries:[],dirNames:new Set,fileNames:new Set}]}currentDirs(){return this.stack.slice(1).map(t=>t.name)}lcpLen(t,e){let n=0;for(;n<t.length&&n<e.length&&t[n]===e[n];)n++;return n}async flushTop(){if(this.stack.length<=1)return;let t=this.stack.pop();t.entries.sort((i,s)=>i.path.localeCompare(s.path));let e=await u.writeTree({fs:o,dir:this.repoDir,tree:t.entries}),n=this.stack[this.stack.length-1];n.entries.push({mode:"040000",path:t.name,oid:e,type:"tree"}),n.dirNames.add(t.name)}async addEntry(t,e,n="100644"){let i=t.replace(/^\.\//,"").replace(/\\/g,"/"),s=i.split("/").filter(Boolean);if(!s.length)return;let a=s.slice(0,-1),d=s[s.length-1],f=this.currentDirs(),S=this.lcpLen(f,a);for(let l=f.length;l>S;l--)await this.flushTop();for(let l=S;l<a.length;l++){let w=a[l];if(this.stack[this.stack.length-1].fileNames.has(w))throw new Error(`Path conflict: file exists where directory expected: ${a.slice(0,l+1).join("/")}`);this.stack.push({name:w,entries:[],dirNames:new Set,fileNames:new Set})}let D=this.stack[this.stack.length-1];if(D.dirNames.has(d))throw new Error(`Path conflict: directory exists where file expected: ${i}`);D.entries.push({mode:n,path:d,oid:e,type:"blob"}),D.fileNames.add(d)}async addFile(t,e){await this.addEntry(t,e,"100644")}async finish(){for(;this.stack.length>1;)await this.flushTop();let t=this.stack[0];return t.entries.sort((e,n)=>e.path.localeCompare(n.path)),u.writeTree({fs:o,dir:this.repoDir,tree:t.entries})}},z=class{constructor(t){this.baseDir=t.baseDir;let e=dt(t.shadowDir??t.baseDir);this.repoDir=M.join(e.root,"history")}async ensureInitialized(){o.mkdirSync(this.repoDir,{recursive:!0});let t=M.join(this.repoDir,".git");if(o.existsSync(t)){await this.ensureDefaultGitignore();return}let e=M.join(this.repoDir,".init.lock"),n=s=>new Promise(a=>setTimeout(a,s)),i=null;try{try{i=o.openSync(e,"wx"),o.writeFileSync(i,String(Date.now()))}catch{let s=Date.now(),a=3e4;for(;!o.existsSync(t);){try{let d=o.statSync(e);if(Date.now()-d.mtimeMs>a){try{o.unlinkSync(e)}catch{}break}}catch{}if(Date.now()-s>a)break;await n(200)}if(o.existsSync(t))return;i=o.openSync(e,"wx"),o.writeFileSync(i,String(Date.now()))}if(o.existsSync(t))return;y(`[${new Date().toISOString()}] [GitHistoryStore] Initializing history repo at ${this.repoDir}`),await u.init({fs:o,dir:this.repoDir}),y(`[${new Date().toISOString()}] [GitHistoryStore] git.init OK`),await u.setConfig({fs:o,dir:this.repoDir,path:"user.name",value:"ast-db"}),await u.setConfig({fs:o,dir:this.repoDir,path:"user.email",value:"ast-db@example.com"}),y(`[${new Date().toISOString()}] [GitHistoryStore] git config set (user.name/user.email)`),o.writeFileSync(M.join(this.repoDir,".gitignore"),`# ast history repo
6
+ `),y(`[${new Date().toISOString()}] [GitHistoryStore] wrote .gitignore`)}finally{try{i!=null&&o.closeSync(i)}catch{}try{o.existsSync(e)&&o.unlinkSync(e)}catch{}}await this.ensureDefaultGitignore()}async ensureDefaultGitignore(){let t=M.join(this.repoDir,".gitignore");if(!o.existsSync(t))try{o.mkdirSync(M.dirname(t),{recursive:!0}),o.writeFileSync(t,`# ast history repo
7
+ `,"utf8");try{await u.add({fs:o,dir:this.repoDir,filepath:".gitignore"})}catch{}y(`[GitHistoryStore] restored missing .gitignore at ${t}`)}catch(e){ht(`[GitHistoryStore] failed to recreate .gitignore: ${e?.message||e}`)}}normalizeLogicalPath(t){return String(t||"").replace(/\\/g,"/").replace(/^(?:\.\/)+/,"").replace(/^\/+/,"")}gitExists(){try{return v("git",["--version"],{cwd:this.repoDir,stdio:"ignore"}),!0}catch{return!1}}readProjectWorktreeEntry(t){let e=M.join(this.baseDir,t),n;try{n=o.lstatSync(e)}catch{return null}if(n.isSymbolicLink()){let i=o.readlinkSync(e);return{content:Buffer.from(i,"utf8"),mode:"120000",entryKind:"symlink",symlinkTarget:i}}return n.isFile()?{content:o.readFileSync(e),mode:n.mode&73?"100755":"100644",entryKind:"file"}:null}createSnapshotNative(t,e,n,i){let a=(typeof n=="string"?n.match(/^AST-Restore-Trace-Id:\s*(.+)$/m):null)?.[1]?.trim()||null,d=e;if(!d)try{d=v("git",["rev-parse","HEAD"],{cwd:this.repoDir,encoding:"utf8"}).trim()}catch{d=void 0}let f=new Map,S=new Map,D=Date.now();try{y("[GitHistoryStore] native snapshot start",{traceId:a,repoDir:this.repoDir,memberCount:t.length,parentOid:d||null})}catch{}for(let p=0;p<t.length;p++){let h=t[p];if(h.content==null)throw new Error(`Direct snapshot requires content for ${h.logicalPath}`);let g=Buffer.isBuffer(h.content)?h.content:Buffer.from(h.content),c=this.normalizeLogicalPath(h.logicalPath);if(!c)throw new Error("Direct snapshot requires non-empty logicalPath");S.set(c,tt(h.mode,h.entryKind==="symlink"?"120000":"100644"));let b=Date.now();try{y("[GitHistoryStore] native hash-object start",{traceId:a,repoDir:this.repoDir,index:p+1,total:t.length,logicalPath:c,bytes:g.length})}catch{}let E;try{E=v("git",["hash-object","-w","--stdin"],{cwd:this.repoDir,input:g}).toString("utf8").trim()}catch(T){try{ht("[GitHistoryStore] native hash-object failed",{traceId:a,repoDir:this.repoDir,index:p+1,total:t.length,logicalPath:c,bytes:g.length,durationMs:Date.now()-b,message:T?.message||String(T),status:T?.status??null,signal:T?.signal??null,stdout:T?.stdout?String(T.stdout).slice(0,500):null,stderr:T?.stderr?String(T.stderr).slice(0,500):null})}catch{}throw T}let P=Date.now()-b;try{(P>1e3||p<3||p===t.length-1)&&y("[GitHistoryStore] native hash-object done",{traceId:a,repoDir:this.repoDir,index:p+1,total:t.length,logicalPath:c,bytes:g.length,durationMs:P,oid:E})}catch{}f.set(c,E)}try{y("[GitHistoryStore] native hash-object phase complete",{traceId:a,repoDir:this.repoDir,memberCount:t.length,durationMs:Date.now()-D})}catch{}let l=M.join(this.repoDir,`.pando-index-${process.pid}-${Date.now()}`),w={...process.env,GIT_INDEX_FILE:l};try{let p=Date.now();try{y("[GitHistoryStore] native read-tree begin",{traceId:a,repoDir:this.repoDir,tmpIndex:l})}catch{}v("git",["read-tree","--empty"],{cwd:this.repoDir,env:w});try{y("[GitHistoryStore] native read-tree complete",{traceId:a,repoDir:this.repoDir,durationMs:Date.now()-p})}catch{}let h=Array.from(f.keys()).sort((O,C)=>O.localeCompare(C)),g=Date.now();for(let O of h){let C=f.get(O),$=S.get(O)||"100644";v("git",["update-index","--add","--cacheinfo",$,C,O],{cwd:this.repoDir,env:w})}try{y("[GitHistoryStore] native update-index complete",{traceId:a,repoDir:this.repoDir,entryCount:h.length,durationMs:Date.now()-g})}catch{}let c=Date.now();try{y("[GitHistoryStore] native write-tree begin",{traceId:a,repoDir:this.repoDir,entryCount:h.length})}catch{}let b=v("git",["write-tree"],{cwd:this.repoDir,env:w}).toString("utf8").trim();try{y("[GitHistoryStore] native write-tree complete",{traceId:a,repoDir:this.repoDir,treeOid:b,durationMs:Date.now()-c})}catch{}let E=["commit-tree",b];d&&E.push("-p",d),n&&E.push("-m",n);let P=Date.now();try{y("[GitHistoryStore] native commit-tree begin",{traceId:a,repoDir:this.repoDir,treeOid:b,parentOid:d||null})}catch{}let T=v("git",E,{cwd:this.repoDir}).toString("utf8").trim();try{y("[GitHistoryStore] native commit-tree complete",{traceId:a,repoDir:this.repoDir,commitOid:T,durationMs:Date.now()-P})}catch{}let H=Date.now();try{y("[GitHistoryStore] native update-ref begin",{traceId:a,repoDir:this.repoDir,commitOid:T})}catch{}v("git",["update-ref","refs/heads/master",T],{cwd:this.repoDir});try{y("[GitHistoryStore] native update-ref complete",{traceId:a,repoDir:this.repoDir,commitOid:T,durationMs:Date.now()-H})}catch{}return{snapshotId:T,parent:d}}finally{try{o.unlinkSync(l)}catch{}try{o.unlinkSync(`${l}.lock`)}catch{}}}async readObject(t){let{object:e}=await u.readObject({fs:o,dir:this.repoDir,oid:t});return Buffer.from(e)}async hasObject(t){try{return await u.readObject({fs:o,dir:this.repoDir,oid:t}),!0}catch{return!1}}async createSnapshot(t,e){I(e,"Snapshot cancelled"),await this.ensureInitialized(),y(`[${new Date().toISOString()}] [GitHistoryStore] Creating snapshot (streaming) with ${t.members.length} members`);let n=[...t.members].map(m=>({...m,logicalPath:this.normalizeLogicalPath(m.logicalPath)})).filter(m=>!!m.logicalPath).sort((m,x)=>m.logicalPath.localeCompare(x.logicalPath)),i=this.gitExists()&&!e;try{i?B.info("[GitHistoryStore] Using native git snapshot path",{members:n.length}):B.info("[GitHistoryStore] Using JS snapshot path",{members:n.length,git:!1,cancellable:!!e})}catch{}if(i)try{return this.createSnapshotNative(n,t.parent,t.message,t.when).snapshotId}catch(m){try{B.warn(`[GitHistoryStore] Native git path failed; falling back to JS path: ${m?.message||m}`)}catch{}}let s=Date.now(),a=m=>m.toString("hex"),d=m=>kt("crypto").createHash("sha1").update(m).digest(),f=m=>{let x=Buffer.from(`blob ${m.length}\0`,"utf8"),_=Buffer.concat([x,m]);return a(d(_))},S=Math.max(1,Math.min(64,Number(process.env.SNAPSHOT_BLOB_CONCURRENCY||16))),D=String(process.env.SNAPSHOT_PRECOMPUTE_OIDS||"1")!=="0";try{B.info("[GitHistoryStore] JS snapshot settings",{SNAPSHOT_BLOB_CONCURRENCY:S,SNAPSHOT_PRECOMPUTE_OIDS:D})}catch{}let l=new Map,w=new Map,p=0,h=0,g=0,c=n.map(m=>({path:m.logicalPath,buf:Buffer.isBuffer(m.content)?m.content:Buffer.from(m.content),mode:tt(m.mode,m.entryKind==="symlink"?"120000":"100644")}));for(let m of c)w.set(m.path,m.mode);let b=async()=>{for(;;){I(e,"Snapshot cancelled");let m;if(p<c.length)m=c[p++];else break;let x;if(D)try{let _=f(m.buf);await this.hasObject(_)&&(x=_,g++)}catch{}if(x||(x=await u.writeBlob({fs:o,dir:this.repoDir,blob:m.buf}),h++),I(e,"Snapshot cancelled"),!x)throw new Error("Failed to compute blob object id");l.set(m.path,x)}},E=Array.from({length:Math.min(S,c.length)},()=>b());await Promise.all(E),I(e,"Snapshot cancelled"),y(`[GitHistoryStore] Blobs ready wrote=${h} skipped=${g} in ${Date.now()-s}ms`);let P=new N(this.repoDir),T=Array.from(l.keys()).sort((m,x)=>m.localeCompare(x));for(let m of T)I(e,"Snapshot cancelled"),await P.addEntry(m,l.get(m),w.get(m)||"100644");I(e,"Snapshot cancelled");let H=Date.now(),O=await P.finish();y(`[GitHistoryStore] Wrote tree(s). root=${O} in ${Date.now()-H}ms`);let C=t.parent;if(!C)try{C=await u.resolveRef({fs:o,dir:this.repoDir,ref:"HEAD"})}catch{}I(e,"Snapshot cancelled");let $=t.when?Math.floor(t.when/1e3):Math.floor(Date.now()/1e3),G=new Date($*1e3).getTimezoneOffset(),L=await u.commit({fs:o,dir:this.repoDir,message:t.message,parent:C?[C]:[],tree:O,author:{name:"ast-db",email:"ast-db@example.com",timestamp:$,timezoneOffset:G},committer:{name:"ast-db",email:"ast-db@example.com",timestamp:$,timezoneOffset:G}});return await u.writeRef({fs:o,dir:this.repoDir,ref:"refs/heads/master",value:L,force:!0}),y(`[GitHistoryStore] Snapshot commit oid ${L}`),L}async listSnapshotMembers(t){await this.ensureInitialized();let e=s=>Math.round((s||0)/(1024*1024)),n=()=>{let s=process.memoryUsage();return`rss=${e(s.rss)}MB heapUsed=${e(s.heapUsed)}MB heapTotal=${e(s.heapTotal)}MB`},i=[];return y(`[${new Date().toISOString()}] [GitHistoryStore] listSnapshotMembers(${t}) start (${n()})`),await u.walk({fs:o,dir:this.repoDir,trees:[u.TREE({ref:t})],map:async(s,[a])=>{if(!a)return;let d=await a.type();if(d==="blob"){let f=await a.oid(),S;try{S=tt(await a.mode())}catch{}let D;if(S==="120000")try{D=(await this.readObject(f)).toString("utf8")}catch{}i.push({logicalPath:s,objectId:f,entryKind:S==="120000"?"symlink":"file",mode:S||(d==="blob"?"100644":void 0),symlinkTarget:D})}}}),y(`[${new Date().toISOString()}] [GitHistoryStore] listSnapshotMembers(${t}) -> ${i.length} blobs`),i.filter(s=>s.logicalPath&&s.logicalPath!==".").map(s=>({logicalPath:s.logicalPath.replace(/^\.\//,""),objectId:s.objectId}))}async readCommit(t){let{commit:e}=await u.readCommit({fs:o,dir:this.repoDir,oid:t});return{message:e.message,committer:e.committer}}async readCommitParent(t){let{commit:e}=await u.readCommit({fs:o,dir:this.repoDir,oid:t});return Array.isArray(e.parent)&&e.parent.length>0?String(e.parent[0]):void 0}async createSnapshotFromDisk(t,e){I(e,"Snapshot cancelled"),await this.ensureInitialized(),y(`[${new Date().toISOString()}] [GitHistoryStore] Creating snapshot from disk (streaming) with ${t.relPaths.length} members`);let n=[...t.relPaths].map(p=>this.normalizeLogicalPath(p)).filter(Boolean).sort((p,h)=>p.localeCompare(h)),i=Date.now(),s=new N(this.repoDir),a=0;for(let p of n){I(e,"Snapshot cancelled");let h=M.join(this.baseDir,p);try{let g=this.readProjectWorktreeEntry(p);if(!g)continue;let c=await u.writeBlob({fs:o,dir:this.repoDir,blob:g.content});await s.addEntry(p,c,g.mode),a++}catch{}}y(`[GitHistoryStore] Wrote ${a} blobs (disk) in ${Date.now()-i}ms`),I(e,"Snapshot cancelled");let d=Date.now(),f=await s.finish();y(`[GitHistoryStore] Wrote tree(s) (disk). root=${f} in ${Date.now()-d}ms`);let S=t.parent;if(!S)try{S=await u.resolveRef({fs:o,dir:this.repoDir,ref:"HEAD"})}catch{}I(e,"Snapshot cancelled");let D=t.when?Math.floor(t.when/1e3):Math.floor(Date.now()/1e3),l=new Date(D*1e3).getTimezoneOffset(),w=await u.commit({fs:o,dir:this.repoDir,message:t.message,parent:S?[S]:[],tree:f,author:{name:"ast-db",email:"ast-db@example.com",timestamp:D,timezoneOffset:l},committer:{name:"ast-db",email:"ast-db@example.com",timestamp:D,timezoneOffset:l}});return await u.writeRef({fs:o,dir:this.repoDir,ref:"refs/heads/master",value:w,force:!0}),y(`[GitHistoryStore] Snapshot commit oid ${w}`),w}async createSnapshotFromDiskAndCapturedIfChanged(t){await this.ensureInitialized();let e=new Map;for(let g of t.capturedMembers||[]){let c=this.normalizeLogicalPath(g.logicalPath);!c||g.content==null||e.has(c)||e.set(c,Buffer.isBuffer(g.content)?g.content:Buffer.from(g.content))}y(`[${new Date().toISOString()}] [GitHistoryStore] Creating snapshot from disk+captured (diff) with ${t.relPaths.length} members, captured=${e.size}`);let n=[...t.relPaths].map(g=>this.normalizeLogicalPath(g)).filter(Boolean).sort((g,c)=>g.localeCompare(c)),i=Date.now(),s=new N(this.repoDir),a=0,d=0,f=0;for(let g of n)try{let c=e.get(g),b=c?{content:c,mode:"100644"}:this.readProjectWorktreeEntry(g);if(!b)continue;let E=await u.writeBlob({fs:o,dir:this.repoDir,blob:b.content});await s.addEntry(g,E,b.mode),a++,c?d++:f++}catch{}y(`[GitHistoryStore] Wrote ${a} blobs (captured=${d}, disk=${f}) in ${Date.now()-i}ms`);let S=Date.now(),D=await s.finish();y(`[GitHistoryStore] Wrote tree(s) (disk+captured). root=${D} in ${Date.now()-S}ms`);let l=t.parent;if(!l)try{l=await u.resolveRef({fs:o,dir:this.repoDir,ref:"HEAD"})}catch{}if(l)try{let{commit:g}=await u.readCommit({fs:o,dir:this.repoDir,oid:l});if(g?.tree===D){y("[GitHistoryStore] Snapshot identical to parent; skipping commit",{parentOid:l,tree:D});let c=await this.readCommitParent(l);return{snapshotId:l,identical:!0,parent:c}}}catch(g){y("[GitHistoryStore] Parent read failed; proceeding with commit",{error:g?.message||String(g)})}let w=t.when?Math.floor(t.when/1e3):Math.floor(Date.now()/1e3),p=new Date(w*1e3).getTimezoneOffset(),h=await u.commit({fs:o,dir:this.repoDir,message:t.message,parent:l?[l]:[],tree:D,author:{name:"ast-db",email:"ast-db@example.com",timestamp:w,timezoneOffset:p},committer:{name:"ast-db",email:"ast-db@example.com",timestamp:w,timezoneOffset:p}});return await u.writeRef({fs:o,dir:this.repoDir,ref:"refs/heads/master",value:h,force:!0}),y(`[GitHistoryStore] Snapshot commit oid ${h}`),{snapshotId:h,identical:!1,parent:l}}async createSnapshotFromDiskIfChanged(t){await this.ensureInitialized(),y(`[${new Date().toISOString()}] [GitHistoryStore] Creating snapshot from disk (diff) with ${t.relPaths.length} members`);let e=[...t.relPaths].map(w=>this.normalizeLogicalPath(w)).filter(Boolean).sort((w,p)=>w.localeCompare(p)),n=Date.now(),i=new N(this.repoDir),s=0;for(let w of e)try{let p=this.readProjectWorktreeEntry(w);if(!p)continue;let h=await u.writeBlob({fs:o,dir:this.repoDir,blob:p.content});await i.addEntry(w,h,p.mode),s++}catch{}y(`[GitHistoryStore] Wrote ${s} blobs (disk) in ${Date.now()-n}ms`);let a=Date.now(),d=await i.finish();y(`[GitHistoryStore] Wrote tree(s) (disk). root=${d} in ${Date.now()-a}ms`);let f=t.parent;if(!f)try{f=await u.resolveRef({fs:o,dir:this.repoDir,ref:"HEAD"})}catch{}if(f)try{let{commit:w}=await u.readCommit({fs:o,dir:this.repoDir,oid:f});if(w?.tree===d){y("[GitHistoryStore] Snapshot identical to parent; skipping commit",{parentOid:f,tree:d});let p=await this.readCommitParent(f);return{snapshotId:f,identical:!0,parent:p}}}catch(w){y("[GitHistoryStore] Parent read failed; proceeding with commit",{error:w?.message||String(w)})}let S=t.when?Math.floor(t.when/1e3):Math.floor(Date.now()/1e3),D=new Date(S*1e3).getTimezoneOffset(),l=await u.commit({fs:o,dir:this.repoDir,message:t.message,parent:f?[f]:[],tree:d,author:{name:"ast-db",email:"ast-db@example.com",timestamp:S,timezoneOffset:D},committer:{name:"ast-db",email:"ast-db@example.com",timestamp:S,timezoneOffset:D}});return await u.writeRef({fs:o,dir:this.repoDir,ref:"refs/heads/master",value:l,force:!0}),y(`[GitHistoryStore] Snapshot commit oid ${l}`),{snapshotId:l,identical:!1,parent:f}}};function et(r){let t={},e=r.split(/\r?\n/);for(let n of e){let i=n.match(/^([A-Za-z0-9-]+):\s*(.*)$/);i&&(t[i[1]]=i[2])}return t}import It from"fs";import F from"path";import pt from"ignore";import{Project as qt}from"ts-morph";var Mt=new Set(["node_modules",".git",".pando-data",".pando-sandbox"]);function Ot(r){let t=U(r).split("/").filter(Boolean);for(let e=0;e<t.length;e+=1)if(Mt.has(t[e])||t[e]===".clj-kondo"&&t[e+1]===".cache")return!0;return!1}function gt(r,t){if(!t?.length)return null;let e=t.map(i=>i.replace(/^\/+/,"").replace(/\/+$/,"")).filter(Boolean).map(i=>`${i}/`);if(!e.length)return null;let n=i=>i.replace(/\\/g,"/");return i=>{let s=n(F.relative(r,i));if(!s||s.startsWith(".."))return!1;let a=s.endsWith("/")?s:`${s}/`;return e.some(d=>a.startsWith(d))}}function mt(r,t){return Ct(r,t,null)}function Ct(r,t,e){let n=t?.shouldExclude||null,i=t?.includeIgnored===!0,s=[],a=F.resolve(t?.gitignoreRoot??r),d=ct(a),f=Q(a,""),S=pt().add(f),D=[{dir:r,relDir:"",rules:f,ig:S}];for(;D.length;){let l=D.pop(),w=[];try{w=It.readdirSync(l.dir,{withFileTypes:!0})}catch{continue}for(let p of w){let h=F.join(l.dir,p.name);if(Ot(h))continue;if(typeof p.isSymbolicLink=="function"&&p.isSymbolicLink()){if(n?.(h))continue;let c=U(F.relative(r,h));if(!i&&l.ig.ignores(c)&&!d?.hasFile(c))continue;e===null&&s.push(h);continue}if(p.isDirectory()){if(n?.(h))continue;let c=l.relDir?`${l.relDir}/${p.name}`:p.name,b=U(c);if(!i&&l.ig.ignores(b)&&!d?.hasDescendant(b))continue;let E=l.rules.slice(),P=Q(h,b);P.length&&E.push(...P);let T=P.length?pt().add(E):l.ig;D.push({dir:h,relDir:b,rules:E,ig:T})}else if(p.isFile()){if(n?.(h))continue;let c=U(F.relative(r,h));if(!i&&l.ig.ignores(c)&&!d?.hasFile(c))continue;if(e===null)s.push(h);else{let b=F.extname(p.name).toLowerCase();e.has(b)&&s.push(h)}}}}return s}function U(r){return r.replace(/\\/g,"/")}J();Pt();J();import rt from"fs";import At from"path";function ut(r){r.pragma("journal_mode = WAL"),r.pragma("synchronous = NORMAL"),r.pragma("busy_timeout = 10000");try{r.pragma("temp_store = MEMORY")}catch{}r.exec(`
8
8
  CREATE TABLE IF NOT EXISTS objects (
9
9
  object_id TEXT PRIMARY KEY,
10
10
  kind TEXT DEFAULT 'blob',
@@ -27,6 +27,9 @@ import{g as P,h as J,j as ot}from"./chunk-KXR6VCP4.mjs";import{a as V,b as st,c
27
27
  logical_path TEXT NOT NULL,
28
28
  object_id TEXT,
29
29
  status TEXT DEFAULT 'modified',
30
+ entry_kind TEXT DEFAULT 'file',
31
+ mode TEXT,
32
+ symlink_target TEXT,
30
33
  lang TEXT,
31
34
  encoding TEXT,
32
35
  PRIMARY KEY (snapshot_id, logical_path)
@@ -42,4 +45,8 @@ import{g as P,h as J,j as ot}from"./chunk-KXR6VCP4.mjs";import{a as V,b as st,c
42
45
 
43
46
  CREATE INDEX IF NOT EXISTS idx_snapshots_timestamp ON snapshots(timestamp);
44
47
  CREATE INDEX IF NOT EXISTS idx_snapshot_meta_kv ON snapshot_meta(key, value);
45
- `)}function rt(r,t){let e=st(r),i=Ct.dirname(e);et.existsSync(i)||et.mkdirSync(i,{recursive:!0});let n=!!t?.readonly;if(n&&!et.existsSync(e)){let a=new Q(e,{});try{gt(a)}finally{try{a.close()}catch{}}}let s=new Q(e,n?{readonly:!0}:{});if(!n)gt(s);else try{s.pragma("busy_timeout = 10000")}catch{}return s}var O="",nt=[],bt=null;at();function mt(r,t){if(Array.isArray(t)){nt=t.slice(),bt=dt(r,nt);try{R("SnapshotWorker","exclude state updated",{excludeDirs:nt})}catch{}}}function At(r){let t=pt(r,{shouldExclude:bt??void 0,gitignoreRoot:r});try{R("SnapshotWorker","gatherSnapshotFiles",{count:t.length,sample:t.slice(0,20).map(e=>it.relative(r,e).replace(/\\/g,"/"))})}catch{}return t}function ft(r){try{return r.prepare("SELECT snapshot_id FROM snapshots ORDER BY timestamp DESC, rowid DESC LIMIT 1").get()?.snapshot_id}catch{return}}function ut(r,t,e,i,n){let s=n||null;r.prepare("INSERT OR REPLACE INTO snapshots (snapshot_id, parents, timestamp, message) VALUES (?, ?, ?, ?)").run(t,s,Math.floor(e/1e3),i)}async function yt(r,t,e){try{return await r.readCommitParent(t)||e}catch{return e}}function X(r,t){let e=new Map;try{let i=r.prepare("SELECT logical_path, object_id FROM snapshot_members WHERE snapshot_id = ?").all(t);for(let n of i)e.set(n.logical_path,n.object_id)}catch{}return e}function St(r,t,e){r.transaction(n=>{let s=r.prepare("INSERT OR REPLACE INTO snapshot_members (snapshot_id, logical_path, object_id, lang, encoding) VALUES (?, ?, ?, ?, ?)");for(let a of n)s.run(t,a.logical_path,a.object_id,a.lang??null,a.encoding??null)})(e)}$.on("message",async r=>{if(r.cmd==="init"){O=r.projectRoot,mt(O,r.excludeDirs),$.postMessage({type:"ready"});return}if(r.excludeDirs&&mt(O,r.excludeDirs),r.cmd==="snapshot"){let t=rt(O);try{let e=Date.now(),i=r.payload?.when||Date.now(),n=r.payload?.message||"ast: snapshot",s=r.payload?.parent||ft(t),a=Date.now(),p=r.payload?.files&&r.payload.files.length?r.payload.files:At(O);try{R("SnapshotWorker","snapshot start",{when:i,message:n,parent:s,fileCount:p.length,filesPreview:p.slice(0,50).map(D=>it.relative(O,D).replace(/\\/g,"/"))})}catch{}let y=Date.now()-a,w=p.map(D=>it.relative(O,D).replace(/\\/g,"/")),m=(r.payload?.captured||[]).map(D=>({logicalPath:D.logicalPath,objectId:"unknown",content:Buffer.from(D.contentB64,"base64")})),f=new L({baseDir:O});await f.ensureInitialized();let l=Date.now(),h=m.length>0?await f.createSnapshotFromDiskAndCapturedIfChanged({message:n,when:i,relPaths:w,capturedMembers:m,parent:s}):await f.createSnapshotFromDiskIfChanged({message:n,when:i,relPaths:w,parent:s}),S=h.snapshotId,c=await yt(f,S,h.parent||s),d=Date.now()-l;if(h.identical){let D=Date.now()-e;try{R("SnapshotWorker","snapshot skipped (identical)",{snapshotId:S,parent:c,files:w.length,timingsMs:{list:y,snapshot:d,total:D}})}catch{}$.postMessage({type:"result",snapshotId:S,parent:c,files:w.length,diff:{added:0,changed:0,deleted:0}})}else{let D=Date.now();ut(t,S,i,n,c);try{let M=q(n||""),W=t.prepare("INSERT OR REPLACE INTO snapshot_meta (snapshot_id, key, value) VALUES (?, ?, ?)");t.transaction(()=>{for(let[Dt,Tt]of Object.entries(M))W.run(S,Dt,Tt)})()}catch{}let E=Date.now()-D,T=Date.now(),j=await f.listSnapshotMembers(S),C=Date.now()-T,k=j.map(M=>({logical_path:M.logicalPath,object_id:M.objectId})),N=Date.now();St(t,S,k);let G=Date.now()-N,F=c?X(t,c):new Map,b=X(t,S),x=[],A=[],z=[];for(let[M,W]of b){let Y=F.get(M);Y?Y!==W&&A.push(M):x.push(M)}for(let[M]of F)b.has(M)||z.push(M);let wt=Date.now()-e;try{R("SnapshotWorker","snapshot complete",{snapshotId:S,parent:c,files:w.length,timingsMs:{list:y,snapshot:d,metadata:E,listMembers:C,membersWrite:G,total:wt},diff:{added:x.length,changed:A.length,deleted:z.length}})}catch{}$.postMessage({type:"result",snapshotId:S,parent:c,files:w.length,diff:{added:x.length,changed:A.length,deleted:z.length}})}}catch(e){$.postMessage({type:"error",message:e?.message||String(e)})}finally{t.close()}return}if(r.cmd==="snapshot-captured"){let t=rt(O);try{let e=r.payload?.when||Date.now(),i=r.payload?.message||"ast: snapshot",n=r.payload?.parent||ft(t);try{R("SnapshotWorker","snapshot-captured start",{when:e,message:i,parent:n,members:r.payload.members.length})}catch{}let s=new L({baseDir:O});await s.ensureInitialized();let a=(r.payload.members||[]).map(d=>({logicalPath:d.logicalPath,objectId:"unknown",content:Buffer.from(d.contentB64,"base64")})),p=await s.createSnapshot({message:i,when:e,members:a}),y=await yt(s,p,n);ut(t,p,e,i,y);try{let d=q(i||""),D=t.prepare("INSERT OR REPLACE INTO snapshot_meta (snapshot_id, key, value) VALUES (?, ?, ?)");t.transaction(()=>{for(let[T,j]of Object.entries(d))D.run(p,T,j)})()}catch{}let w=await s.listSnapshotMembers(p),m=w.map(d=>({logical_path:d.logicalPath,object_id:d.objectId}));St(t,p,m);let f=y?X(t,y):new Map,l=X(t,p),h=[],S=[],c=[];for(let[d,D]of l){let E=f.get(d);E?E!==D&&S.push(d):h.push(d)}for(let[d]of f)l.has(d)||c.push(d);try{R("SnapshotWorker","snapshot-captured complete",{snapshotId:p,parent:y,members:w.length,diff:{added:h.length,changed:S.length,deleted:c.length}})}catch{}$.postMessage({type:"result",snapshotId:p,parent:y,files:w.length,diff:{added:h.length,changed:S.length,deleted:c.length}})}catch(e){$.postMessage({type:"error",message:e?.message||String(e)})}finally{t.close()}}r.cmd==="close"&&$.postMessage({type:"closed"})});
48
+ `);let t=new Set(r.prepare("PRAGMA table_info(snapshot_members)").all().map(n=>n.name)),e=(n,i)=>{t.has(n)||r.exec(`ALTER TABLE snapshot_members ADD COLUMN ${i}`)};e("entry_kind","entry_kind TEXT DEFAULT 'file'"),e("mode","mode TEXT"),e("symlink_target","symlink_target TEXT")}function nt(r,t){let e=at(r),n=At.dirname(e);rt.existsSync(n)||rt.mkdirSync(n,{recursive:!0});let i=!!t?.readonly;if(i&&!rt.existsSync(e)){let a=new Z(e,{});try{ut(a)}finally{try{a.close()}catch{}}}let s=new Z(e,i?{readonly:!0}:{});if(!i)ut(s);else try{s.pragma("busy_timeout = 10000")}catch{}return s}var A="",it=[],Dt=null;lt();function ft(r,t){if(Array.isArray(t)){it=t.slice(),Dt=gt(r,it);try{R("SnapshotWorker","exclude state updated",{excludeDirs:it})}catch{}}}function _t(r,t=!1){let e=mt(r,{shouldExclude:Dt??void 0,gitignoreRoot:r,includeIgnored:t});try{R("SnapshotWorker","gatherSnapshotFiles",{count:e.length,includeIgnored:t,sample:e.slice(0,20).map(n=>st.relative(r,n).replace(/\\/g,"/"))})}catch{}return e}function yt(r){try{return r.prepare("SELECT snapshot_id FROM snapshots ORDER BY timestamp DESC, rowid DESC LIMIT 1").get()?.snapshot_id}catch{return}}function St(r,t,e,n,i){let s=i||null;r.prepare("INSERT OR REPLACE INTO snapshots (snapshot_id, parents, timestamp, message) VALUES (?, ?, ?, ?)").run(t,s,Math.floor(e/1e3),n)}async function wt(r,t,e){try{return await r.readCommitParent(t)||e}catch{return e}}function Rt(r){return[r.entry_kind||"file",r.mode||"",r.object_id||"",r.symlink_target||""].join("\0")}function W(r,t){let e=new Map;try{let n=r.prepare("SELECT logical_path, object_id, entry_kind, mode, symlink_target FROM snapshot_members WHERE snapshot_id = ?").all(t);for(let i of n)e.set(i.logical_path,Rt(i))}catch{}return e}function bt(r,t,e){r.transaction(i=>{let s=r.prepare(`
49
+ INSERT OR REPLACE INTO snapshot_members
50
+ (snapshot_id, logical_path, object_id, status, entry_kind, mode, symlink_target, lang, encoding)
51
+ VALUES (?, ?, ?, 'modified', ?, ?, ?, ?, ?)
52
+ `);for(let a of i){let d=a.entry_kind==="symlink"?"symlink":"file";s.run(t,a.logical_path,a.object_id,d,a.mode??(d==="symlink"?"120000":"100644"),d==="symlink"?a.symlink_target??null:null,a.lang??null,a.encoding??null)}})(e)}j.on("message",async r=>{if(r.cmd==="init"){A=r.projectRoot,ft(A,r.excludeDirs),j.postMessage({type:"ready"});return}if(r.excludeDirs&&ft(A,r.excludeDirs),r.cmd==="snapshot"){let t=nt(A);try{let e=Date.now(),n=r.payload?.when||Date.now(),i=r.payload?.message||"ast: snapshot",s=r.payload?.parent||yt(t),a=Date.now(),d=r.payload?.files&&r.payload.files.length?r.payload.files:_t(A,r.payload?.includeIgnored===!0);try{R("SnapshotWorker","snapshot start",{when:n,message:i,parent:s,fileCount:d.length,filesPreview:d.slice(0,50).map(b=>st.relative(A,b).replace(/\\/g,"/"))})}catch{}let f=Date.now()-a,S=d.map(b=>st.relative(A,b).replace(/\\/g,"/")),D=(r.payload?.captured||[]).map(b=>({logicalPath:b.logicalPath,objectId:"unknown",content:Buffer.from(b.contentB64,"base64")})),l=new z({baseDir:A});await l.ensureInitialized();let w=Date.now(),p=D.length>0?await l.createSnapshotFromDiskAndCapturedIfChanged({message:i,when:n,relPaths:S,capturedMembers:D,parent:s}):await l.createSnapshotFromDiskIfChanged({message:i,when:n,relPaths:S,parent:s}),h=p.snapshotId,g=await wt(l,h,p.parent||s),c=Date.now()-w;if(p.identical){let b=Date.now()-e;try{R("SnapshotWorker","snapshot skipped (identical)",{snapshotId:h,parent:g,files:S.length,timingsMs:{list:f,snapshot:c,total:b}})}catch{}j.postMessage({type:"result",snapshotId:h,parent:g,files:S.length,diff:{added:0,changed:0,deleted:0}})}else{let b=Date.now();St(t,h,n,i,g);try{let k=et(i||""),K=t.prepare("INSERT OR REPLACE INTO snapshot_meta (snapshot_id, key, value) VALUES (?, ?, ?)");t.transaction(()=>{for(let[Tt,Et]of Object.entries(k))K.run(h,Tt,Et)})()}catch{}let E=Date.now()-b,P=Date.now(),T=await l.listSnapshotMembers(h),H=Date.now()-P,O=T.map(k=>({logical_path:k.logicalPath,object_id:k.objectId,entry_kind:k.entryKind,mode:k.mode,symlink_target:k.symlinkTarget??null,lang:k.lang,encoding:k.encoding})),C=Date.now();bt(t,h,O);let $=Date.now()-C,G=g?W(t,g):new Map,L=W(t,h),m=[],x=[],_=[];for(let[k,K]of L){let Y=G.get(k);Y?Y!==K&&x.push(k):m.push(k)}for(let[k]of G)L.has(k)||_.push(k);let ot=Date.now()-e;try{R("SnapshotWorker","snapshot complete",{snapshotId:h,parent:g,files:S.length,timingsMs:{list:f,snapshot:c,metadata:E,listMembers:H,membersWrite:$,total:ot},diff:{added:m.length,changed:x.length,deleted:_.length}})}catch{}j.postMessage({type:"result",snapshotId:h,parent:g,files:S.length,diff:{added:m.length,changed:x.length,deleted:_.length}})}}catch(e){j.postMessage({type:"error",message:e?.message||String(e)})}finally{t.close()}return}if(r.cmd==="snapshot-captured"){let t=nt(A);try{let e=r.payload?.when||Date.now(),n=r.payload?.message||"ast: snapshot",i=r.payload?.parent||yt(t);try{R("SnapshotWorker","snapshot-captured start",{when:e,message:n,parent:i,members:r.payload.members.length})}catch{}let s=new z({baseDir:A});await s.ensureInitialized();let a=(r.payload.members||[]).map(c=>({logicalPath:c.logicalPath,objectId:"unknown",content:Buffer.from(c.contentB64,"base64")})),d=await s.createSnapshot({message:n,when:e,members:a}),f=await wt(s,d,i);St(t,d,e,n,f);try{let c=et(n||""),b=t.prepare("INSERT OR REPLACE INTO snapshot_meta (snapshot_id, key, value) VALUES (?, ?, ?)");t.transaction(()=>{for(let[P,T]of Object.entries(c))b.run(d,P,T)})()}catch{}let S=await s.listSnapshotMembers(d),D=S.map(c=>({logical_path:c.logicalPath,object_id:c.objectId,entry_kind:c.entryKind,mode:c.mode,symlink_target:c.symlinkTarget??null,lang:c.lang,encoding:c.encoding}));bt(t,d,D);let l=f?W(t,f):new Map,w=W(t,d),p=[],h=[],g=[];for(let[c,b]of w){let E=l.get(c);E?E!==b&&h.push(c):p.push(c)}for(let[c]of l)w.has(c)||g.push(c);try{R("SnapshotWorker","snapshot-captured complete",{snapshotId:d,parent:f,members:S.length,diff:{added:p.length,changed:h.length,deleted:g.length}})}catch{}j.postMessage({type:"result",snapshotId:d,parent:f,files:S.length,diff:{added:p.length,changed:h.length,deleted:g.length}})}catch(e){j.postMessage({type:"error",message:e?.message||String(e)})}finally{t.close()}}r.cmd==="close"&&j.postMessage({type:"closed"})});
@@ -1,4 +1,4 @@
1
- import{d as pe,e as ie,f as F}from"./chunk-JWVMGEXN.mjs";import{a as se,b as Ue}from"./chunk-MKW3R262.mjs";import{c as Re}from"./chunk-RRIZV7YJ.mjs";Ue();import{parentPort as S,threadId as Ae}from"worker_threads";import K from"path";import ce from"fs";import{inspect as Be}from"util";import Pe from"os";function Ge(e){e.exec(`
1
+ import{d as pe,e as ie,f as F}from"./chunk-WHHZYOEJ.mjs";import{a as se,b as Ue}from"./chunk-MKW3R262.mjs";import{c as Re}from"./chunk-RRIZV7YJ.mjs";Ue();import{parentPort as S,threadId as Ae}from"worker_threads";import K from"path";import ce from"fs";import{inspect as Be}from"util";import Pe from"os";function Ge(e){e.exec(`
2
2
  PRAGMA journal_mode=WAL;
3
3
  PRAGMA synchronous=OFF;
4
4
  PRAGMA temp_store=MEMORY;
@@ -162,6 +162,9 @@ import{d as pe,e as ie,f as F}from"./chunk-JWVMGEXN.mjs";import{a as se,b as Ue}
162
162
  logical_path TEXT NOT NULL,
163
163
  object_id TEXT, -- NULL means deleted marker
164
164
  status TEXT DEFAULT 'modified', -- 'modified' | 'deleted'
165
+ entry_kind TEXT DEFAULT 'file', -- 'file' | 'symlink'
166
+ mode TEXT, -- git-style mode such as 100644, 100755, 120000
167
+ symlink_target TEXT,
165
168
  lang TEXT,
166
169
  encoding TEXT,
167
170
  PRIMARY KEY (snapshot_id, logical_path)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pando-ai",
3
- "version": "0.6.5",
3
+ "version": "0.7.0",
4
4
  "description": "AI coding firewall for Codex and Claude Code: supervised launchers, Pando MCP, policy enforcement, Claude hooks, and local provider gateway.",
5
5
  "bin": {
6
6
  "pando-ai": "bin/pando-ai.js"